diff --git a/tests/budgeting/test_views_integration.py b/tests/budgeting/test_views_integration.py index 5c5cd3b853..dff0ba3ed4 100644 --- a/tests/budgeting/test_views_integration.py +++ b/tests/budgeting/test_views_integration.py @@ -61,7 +61,7 @@ def test_list_view_token_form( client, user, phase_factory, proposal_factory, voting_token_factory, module_factory ): phase, module, project, item = setup_phase( - phase_factory, proposal_factory, phases.RequestPhase + phase_factory, proposal_factory, phases.VotingPhase ) url = project.get_absolute_url() token = voting_token_factory(module=module) @@ -72,12 +72,16 @@ def test_list_view_token_form( response = client.get(url) assert "token_form" in response.context assert_template_response(response, "meinberlin_budgeting/proposal_list.html") + assert not response.context["valid_token_present"] response = client.post(url, data) assert response.status_code == 200 assert "voting_tokens" in client.session assert "token_form" in response.context + response = client.get(url) + assert response.context["valid_token_present"] + other_module = module_factory() other_token = voting_token_factory(module=other_module) @@ -98,6 +102,47 @@ def test_list_view_token_form( assert "voting_tokens" not in client.session +@pytest.mark.django_db +def test_list_view_tokens_for_different_modules( + client, phase_factory, proposal_factory, voting_token_factory +): + phase_1, module_1, _, _ = setup_phase( + phase_factory, proposal_factory, phases.VotingPhase + ) + url_1 = module_1.get_absolute_url() + token_1 = voting_token_factory(module=module_1) + data_1 = {"token": str(token_1)} + + with freeze_phase(phase_1): + response = client.post(url_1, data_1) + assert response.status_code == 200 + assert "voting_tokens" in client.session + assert str(module_1.id) in client.session["voting_tokens"] + + response = client.get(url_1) + assert response.context["valid_token_present"] + + phase_2, module_2, _, _ = setup_phase( + phase_factory, proposal_factory, phases.VotingPhase + ) + url_2 = module_2.get_absolute_url() + token_2 = voting_token_factory(module=module_2) + data_2 = {"token": str(token_2)} + + with freeze_phase(phase_2): + response = client.post(url_2, data_2) + assert response.status_code == 200 + assert "voting_tokens" in client.session + assert str(module_2.id) in client.session["voting_tokens"] + assert str(module_1.id) in client.session["voting_tokens"] + + response = client.get(url_2) + assert response.context["valid_token_present"] + + response = client.get(url_1) + assert response.context["valid_token_present"] + + @pytest.mark.django_db def test_detail_view(client, phase_factory, proposal_factory): phase, module, project, item = setup_phase( diff --git a/tests/votes/test_token_vote_api.py b/tests/votes/test_token_vote_api.py index 9bd6c97bde..c3828d9a53 100644 --- a/tests/votes/test_token_vote_api.py +++ b/tests/votes/test_token_vote_api.py @@ -900,3 +900,57 @@ def test_voting_phase_active_token_inactive_cannot_delete( assert "Token is inactive." in response.content.decode() assert TokenVote.objects.all().count() == 1 + + +@pytest.mark.django_db +def test_voting_phase_active_two_valid_tokens_anonymous_can_vote_both( + apiclient, voting_token_factory, phase_factory, proposal_factory +): + + phase_1, module_1, project_1, proposal_1 = setup_phase( + phase_factory, proposal_factory, phases.VotingPhase + ) + phase_2, module_2, project_2, proposal_2 = setup_phase( + phase_factory, proposal_factory, phases.VotingPhase + ) + proposal_ct = ContentType.objects.get_for_model(proposal_1.__class__) + token_1 = voting_token_factory(module=module_1) + token_2 = voting_token_factory(module=module_2) + + add_token_to_session(apiclient.session, token_1) + + url_1 = reverse( + "tokenvotes-list", + kwargs={"module_pk": module_1.pk, "content_type": proposal_ct.id}, + ) + + data_1 = {"object_id": proposal_1.pk} + + with freeze_phase(phase_1): + response = apiclient.post(url_1, data_1, format="json") + assert response.status_code == status.HTTP_201_CREATED + assert TokenVote.objects.all().count() == 1 + + url_2 = reverse( + "tokenvotes-list", + kwargs={"module_pk": module_2.pk, "content_type": proposal_ct.id}, + ) + + data_2 = {"object_id": proposal_2.pk} + + with freeze_phase(phase_2): + response = apiclient.post(url_2, data_2, format="json") + assert response.status_code == status.HTTP_403_FORBIDDEN + assert TokenVote.objects.all().count() == 1 + + add_token_to_session(apiclient.session, token_2) + + with freeze_phase(phase_2): + response = apiclient.post(url_2, data_2, format="json") + assert response.status_code == status.HTTP_201_CREATED + assert TokenVote.objects.all().count() == 2 + + with freeze_phase(phase_1): + response = apiclient.post(url_1, data_1, format="json") + assert response.status_code == status.HTTP_201_CREATED + assert TokenVote.objects.all().count() == 3