123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- import pytest
- from django.urls import reverse
- from ...admin.test import AdminTestCase
- from ...test import assert_contains
- from ..models import Agreement
- @pytest.fixture
- def list_url(admin_client):
- response = admin_client.get(reverse("misago:admin:users:agreements:index"))
- return response["location"]
- @pytest.fixture
- def agreement(superuser):
- return Agreement.objects.create(
- type=Agreement.TYPE_TOS,
- title="Test TOS",
- link="https://rules.com",
- created_by=superuser,
- created_by_name=superuser.username,
- )
- @pytest.fixture
- def active_agreement(agreement):
- agreement.is_active = True
- agreement.save()
- return agreement
- @pytest.fixture
- def other_agreement(superuser):
- return Agreement.objects.create(
- type=Agreement.TYPE_TOS,
- title="Test TOS",
- link="https://rules.com",
- created_by=superuser,
- created_by_name=superuser.username,
- )
- def test_nav_contains_agreements_link(admin_client, list_url):
- response = admin_client.get(list_url)
- assert_contains(response, reverse("misago:admin:users:agreements:index"))
- def test_empty_list_renders(admin_client, list_url):
- response = admin_client.get(list_url)
- assert response.status_code == 200
- def test_list_renders_agreement(admin_client, list_url, agreement):
- response = admin_client.get(list_url)
- assert_contains(response, agreement.title)
- def test_agreements_can_be_mass_deleted(admin_client, list_url, superuser):
- agreements = []
- for _ in range(10):
- agreement = Agreement.objects.create(
- type=Agreement.TYPE_TOS,
- title="Test TOS",
- link="https://rules.com",
- created_by=superuser,
- created_by_name=superuser.username,
- )
- agreements.append(agreement.pk)
- response = admin_client.post(
- list_url, data={"action": "delete", "selected_items": agreements}
- )
- assert response.status_code == 302
- assert Agreement.objects.count() == 0
- def test_creation_form_renders(admin_client):
- response = admin_client.get(reverse("misago:admin:users:agreements:new"))
- assert response.status_code == 200
- def test_form_creates_new_agreement(admin_client):
- response = admin_client.post(
- reverse("misago:admin:users:agreements:new"),
- {
- "type": Agreement.TYPE_TOS,
- "title": "Test TOS",
- "text": "Lorem ipsum dolor met sit amet elit",
- "link": "https://example.com/rules/",
- },
- )
- agreement = Agreement.objects.get()
- assert agreement.type == Agreement.TYPE_TOS
- assert agreement.title == "Test TOS"
- assert agreement.text == "Lorem ipsum dolor met sit amet elit"
- assert agreement.link == "https://example.com/rules/"
- def test_form_sets_new_agreement_creator(admin_client, superuser):
- response = admin_client.post(
- reverse("misago:admin:users:agreements:new"),
- {
- "type": Agreement.TYPE_TOS,
- "title": "Test TOS",
- "text": "Lorem ipsum dolor met sit amet elit",
- "link": "https://example.com/rules/",
- },
- )
- agreement = Agreement.objects.get()
- assert agreement.created_by == superuser
- assert agreement.created_by_name == superuser.username
- def test_form_creates_active_agreement(mocker, admin_client):
- set_agreement_as_active = mocker.patch("misago.legal.forms.set_agreement_as_active")
- response = admin_client.post(
- reverse("misago:admin:users:agreements:new"),
- {
- "type": Agreement.TYPE_TOS,
- "is_active": "1",
- "title": "Test TOS",
- "text": "Lorem ipsum dolor met sit amet elit",
- "link": "https://example.com/rules/",
- },
- )
- agreement = Agreement.objects.get()
- assert agreement.is_active
- set_agreement_as_active.assert_called_once_with(agreement)
- def test_newly_created_active_agreement_replaces_current_one(
- admin_client, active_agreement
- ):
- response = admin_client.post(
- reverse("misago:admin:users:agreements:new"),
- {
- "type": Agreement.TYPE_TOS,
- "is_active": "1",
- "title": "Test TOS",
- "text": "Lorem ipsum dolor met sit amet elit",
- "link": "https://example.com/rules/",
- },
- )
- agreement = Agreement.objects.exclude(pk=active_agreement.pk).get()
- assert agreement.is_active
- active_agreement.refresh_from_db()
- assert not active_agreement.is_active
- def test_edit_form_renders(admin_client, agreement):
- response = admin_client.get(
- reverse("misago:admin:users:agreements:edit", kwargs={"pk": agreement.pk})
- )
- assert_contains(response, agreement.title)
- def test_edit_form_updates_agreement(admin_client, agreement):
- response = admin_client.post(
- reverse("misago:admin:users:agreements:edit", kwargs={"pk": agreement.pk}),
- data={
- "type": Agreement.TYPE_TOS,
- "title": "Test Edited",
- "text": "Sit amet elit",
- "link": "https://example.com/terms/",
- },
- )
- assert response.status_code == 302
- agreement.refresh_from_db()
- assert agreement.type == Agreement.TYPE_TOS
- assert agreement.title == "Test Edited"
- assert agreement.text == "Sit amet elit"
- assert agreement.link == "https://example.com/terms/"
- def test_edit_form_updates_agreement_modified_entry(admin_client, agreement, superuser):
- response = admin_client.post(
- reverse("misago:admin:users:agreements:edit", kwargs={"pk": agreement.pk}),
- data={
- "type": Agreement.TYPE_TOS,
- "title": "Test Edited",
- "text": "Sit amet elit",
- "link": "https://example.com/terms/",
- },
- )
- assert response.status_code == 302
- agreement.refresh_from_db()
- assert agreement.last_modified_on
- assert agreement.last_modified_by == superuser
- assert agreement.last_modified_by_name == superuser.username
- def test_edit_form_changes_active_agreement(
- admin_client, active_agreement, other_agreement
- ):
- response = admin_client.post(
- reverse(
- "misago:admin:users:agreements:edit", kwargs={"pk": other_agreement.pk}
- ),
- data={
- "type": Agreement.TYPE_TOS,
- "is_active": "1",
- "title": "Test Edited",
- "text": "Sit amet elit",
- "link": "https://example.com/terms/",
- },
- )
- assert response.status_code == 302
- active_agreement.refresh_from_db()
- assert not active_agreement.is_active
- other_agreement.refresh_from_db()
- assert other_agreement.is_active
- def test_edit_form_disables_active_agreement(admin_client, active_agreement):
- response = admin_client.post(
- reverse(
- "misago:admin:users:agreements:edit", kwargs={"pk": active_agreement.pk}
- ),
- data={
- "type": Agreement.TYPE_TOS,
- "is_active": "0",
- "title": "Test Edited",
- "text": "Sit amet elit",
- "link": "https://example.com/terms/",
- },
- )
- assert response.status_code == 302
- active_agreement.refresh_from_db()
- assert not active_agreement.is_active
- def test_agreement_can_be_deleted(admin_client, agreement):
- response = admin_client.post(
- reverse("misago:admin:users:agreements:delete", kwargs={"pk": agreement.pk})
- )
- assert response.status_code == 302
- with pytest.raises(Agreement.DoesNotExist):
- agreement.refresh_from_db()
- def test_active_agreement_can_be_deleted(admin_client, active_agreement):
- response = admin_client.post(
- reverse(
- "misago:admin:users:agreements:delete", kwargs={"pk": active_agreement.pk}
- )
- )
- assert response.status_code == 302
- with pytest.raises(Agreement.DoesNotExist):
- active_agreement.refresh_from_db()
- def test_agreement_can_be_set_as_active(admin_client, agreement):
- response = admin_client.post(
- reverse(
- "misago:admin:users:agreements:set-as-active", kwargs={"pk": agreement.pk}
- )
- )
- assert response.status_code == 302
- agreement.refresh_from_db()
- assert agreement.is_active
- def test_active_agreement_can_be_changed(
- admin_client, active_agreement, other_agreement
- ):
- response = admin_client.post(
- reverse(
- "misago:admin:users:agreements:set-as-active",
- kwargs={"pk": other_agreement.pk},
- )
- )
- assert response.status_code == 302
- active_agreement.refresh_from_db()
- assert not active_agreement.is_active
- other_agreement.refresh_from_db()
- assert other_agreement.is_active
- def test_active_agreement_can_be_disabled(admin_client, active_agreement):
- response = admin_client.post(
- reverse(
- "misago:admin:users:agreements:disable", kwargs={"pk": active_agreement.pk}
- )
- )
- assert response.status_code == 302
- active_agreement.refresh_from_db()
- assert not active_agreement.is_active
|