diff --git a/aircox/tests/_test_permissions.py b/aircox/tests/_test_permissions.py new file mode 100644 index 0000000..4a3c954 --- /dev/null +++ b/aircox/tests/_test_permissions.py @@ -0,0 +1,46 @@ +import pytest +from django.contrib.auth.models import User, Group +from django.urls import reverse + + +@pytest.mark.django_db() +def test_no_admin(user, client): + client.force_login(user) + response = client.get("/admin/") + assert response.status_code != 200 + + +@pytest.mark.django_db() +def test_user_cannot_change_program_or_episode(user, client, program): + assert not user.has_perm("aircox.change_program") + assert not user.has_perm("aircox.change_episode") + + +@pytest.mark.django_db() +def test_group_can_change_program(user, client, program): + assert program.editors in Group.objects.all() + assert not user.has_perm("aircox.%s" % program.change_permission_codename) + user.groups.add(program.editors) + user = User.objects.get(pk=user.pk) # reload user in order to have permissions set + assert program.editors in user.groups.all() + assert user.has_perm("aircox.%s" % program.change_permission_codename) + + +@pytest.mark.django_db() +def test_group_change_program(user, client, program): + client.force_login(user) + response = client.get(reverse("program-edit", kwargs={"pk": program.pk})) + assert response.status_code == 403 + user.groups.add(program.editors) + response = client.get(reverse("program-edit", kwargs={"pk": program.pk})) + assert response.status_code == 200 + + +@pytest.mark.django_db() +def test_group_change_episode(user, client, program, episode): + client.force_login(user) + response = client.get(reverse("episode-edit", kwargs={"pk": episode.pk})) + assert response.status_code == 403 + user.groups.add(program.editors) + response = client.get(reverse("episode-edit", kwargs={"pk": episode.pk})) + assert response.status_code == 200 diff --git a/aircox/tests/test_permissions.py b/aircox/tests/test_permissions.py deleted file mode 100644 index 1628d70..0000000 --- a/aircox/tests/test_permissions.py +++ /dev/null @@ -1,46 +0,0 @@ -# import pytest -# from django.contrib.auth.models import User, Group -# from django.urls import reverse -# -# -# @pytest.mark.django_db() -# def test_no_admin(user, client): -# client.force_login(user) -# response = client.get("/admin/") -# assert response.status_code != 200 -# -# -# @pytest.mark.django_db() -# def test_user_cannot_change_program_or_episode(user, client, program): -# assert not user.has_perm("aircox.change_program") -# assert not user.has_perm("aircox.change_episode") -# -# -# @pytest.mark.django_db() -# def test_group_can_change_program(user, client, program): -# assert program.editors in Group.objects.all() -# assert not user.has_perm("aircox.%s" % program.change_permission_codename) -# user.groups.add(program.editors) -# user = User.objects.get(pk=user.pk) # reload user in order to have permissions set -# assert program.editors in user.groups.all() -# assert user.has_perm("aircox.%s" % program.change_permission_codename) -# -# -# @pytest.mark.django_db() -# def test_group_change_program(user, client, program): -# client.force_login(user) -# response = client.get(reverse("program-edit", kwargs={"pk": program.pk})) -# assert response.status_code == 403 -# user.groups.add(program.editors) -# response = client.get(reverse("program-edit", kwargs={"pk": program.pk})) -# assert response.status_code == 200 -# -# -# @pytest.mark.django_db() -# def test_group_change_episode(user, client, program, episode): -# client.force_login(user) -# response = client.get(reverse("episode-edit", kwargs={"pk": episode.pk})) -# assert response.status_code == 403 -# user.groups.add(program.editors) -# response = client.get(reverse("episode-edit", kwargs={"pk": episode.pk})) -# assert response.status_code == 200 diff --git a/aircox/tests/test_program.py b/aircox/tests/test_program.py deleted file mode 100644 index c278c60..0000000 --- a/aircox/tests/test_program.py +++ /dev/null @@ -1,51 +0,0 @@ -# FIXME: this should be cleaner -from itertools import chain -import json -import pytest -from django.urls import reverse - - -@pytest.mark.django_db() -def test_edit_program(user, client, program): - client.force_login(user) - response = client.get(reverse("program-detail", kwargs={"slug": program.slug})) - assert response.status_code == 200 - assert "🖉 ".encode() not in response.content - user.groups.add(program.editors) - response = client.get(reverse("program-detail", kwargs={"slug": program.slug})) - assert "🖉 ".encode() in response.content - assert b"foobar" not in response.content - response = client.post(reverse("program-edit", kwargs={"pk": program.pk}), {"content": "foobar"}) - response = client.get(reverse("program-detail", kwargs={"slug": program.slug})) - assert b"foobar" in response.content - - -@pytest.mark.django_db() -def test_edit_tracklist(user, client, program, episode, tracks): - user.groups.add(program.editors) - client.force_login(user) - episode.status = 0x10 # published - episode.save() - r = client.get(reverse("program-detail", kwargs={"slug": episode.program.slug})) - assert r.status_code == 200 - r = client.get(reverse("episode-detail", kwargs={"slug": episode.slug})) - assert r.status_code == 200 - r2 = client.get(reverse("episode-edit", kwargs={"pk": episode.pk})) - assert r2.status_code == 200 - - tracklist = [t.id for t in episode.track_set.all().order_by("position")] - tracklist_details_reversed = [(t.id, t.artist, t.title) for t in episode.track_set.all().order_by("-position")] - tracklist_details_reversed = list(chain(*tracklist_details_reversed)) - data = """{{"website": [""], "content": ["foobar"], "new_podcast": [""], "form-TOTAL_FORMS": ["3"], - "form-INITIAL_FORMS": ["3"], "form-MIN_NUM_FORMS": ["0"], "form-MAX_NUM_FORMS": ["1000"], "form-0-position": ["0"], - "form-0-id": ["{}"], "form-0-": ["", "", "", "", "", ""], "form-0-artist": ["{}"], "form-0-title": ["{}"], - "form-0-tags": [""], "form-0-album": [""], "form-0-year": [""], "form-1-position": ["1"], "form-1-id": ["{}"], - "form-1-": ["", "", "", "", "", ""], "form-1-artist": ["{}"], "form-1-title": ["{}"], "form-1-tags": [""], - "form-1-album": [""], "form-1-year": [""], "form-2-position": ["2"], "form-2-id": ["{}"], "form-2-": ["", "", "", - "", "", ""], "form-2-artist": ["{}"], "form-2-title": ["{}"], "form-2-tags": [""], "form-2-album": [""], - "form-2-year": [""]}}""".format( - *tracklist_details_reversed - ) - r = client.post(reverse("episode-edit", kwargs={"pk": episode.pk}), json.loads(data), follow=True) - assert r.status_code == 200 - assert set(episode.track_set.all().values_list("id", flat=True)) == set(tracklist)