Skip to content

Commit

Permalink
tests/budgeting//votes: test storing several tokens in session
Browse files Browse the repository at this point in the history
  • Loading branch information
rine committed Jan 26, 2023
1 parent ac8f378 commit 8cbd31a
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 1 deletion.
47 changes: 46 additions & 1 deletion tests/budgeting/test_views_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)

Expand All @@ -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(
Expand Down
57 changes: 57 additions & 0 deletions tests/votes/test_token_vote_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -900,3 +900,60 @@ 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

proposal_3 = proposal_factory(module=module_1)
data_3 = {"object_id": proposal_3.pk}

with freeze_phase(phase_1):
response = apiclient.post(url_1, data_3, format="json")
assert response.status_code == status.HTTP_201_CREATED
assert TokenVote.objects.all().count() == 3

0 comments on commit 8cbd31a

Please sign in to comment.