""" Author: Michel Peltriaux Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany Contact: michel.peltriaux@sgdnord.rlp.de Created on: 30.05.22 """ from django.test import Client from django.contrib.auth.models import Group from django.urls import reverse from intervention.models import Revocation from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP from konova.tests.test_views import BaseViewTestCase class UserViewTestCase(BaseViewTestCase): @classmethod def setUpTestData(cls) -> None: super().setUpTestData() def setUp(self) -> None: super().setUp() self.team.users.add(self.superuser) self.team.admins.add(self.superuser) # Prepare urls self.index_url = reverse("user:index", args=()) self.notification_url = reverse("user:notifications", args=()) self.api_token_url = reverse("user:api-token", args=()) self.contact_url = reverse("user:contact", args=(self.superuser.id,)) self.team_url = reverse("user:team-index", args=()) self.new_team_url = reverse("user:team-new", args=()) self.data_team_url = reverse("user:team-data", args=(self.team.id,)) self.edit_team_url = reverse("user:team-edit", args=(self.team.id,)) self.remove_team_url = reverse("user:team-remove", args=(self.team.id,)) self.leave_team_url = reverse("user:team-leave", args=(self.team.id,)) def test_views_anonymous_user(self): """ Check correct status code for all requests Assumption: User not logged in Returns: """ # Unknown client client = Client() login_redirect_base = f"{self.login_url}?next=" fail_urls = { self.index_url: f"{login_redirect_base}{self.index_url}", self.notification_url: f"{login_redirect_base}{self.notification_url}", self.api_token_url: f"{login_redirect_base}{self.api_token_url}", self.contact_url: f"{login_redirect_base}{self.contact_url}", self.team_url: f"{login_redirect_base}{self.team_url}", self.new_team_url: f"{login_redirect_base}{self.new_team_url}", self.data_team_url: f"{login_redirect_base}{self.data_team_url}", self.edit_team_url: f"{login_redirect_base}{self.edit_team_url}", self.remove_team_url: f"{login_redirect_base}{self.remove_team_url}", self.leave_team_url: f"{login_redirect_base}{self.leave_team_url}", } for url in fail_urls: response = client.get(url, follow=True) self.assertEqual(response.redirect_chain[0], (f"{self.login_url}?next={url}", 302), msg=f"Failed for {url}. Redirect chain is {response.redirect_chain}") def test_views_logged_in(self): """ Check correct status code for all requests Assumption: User logged in but has no groups Returns: """ # Login client client = Client() client.login(username=self.superuser.username, password=self.superuser_pw) self.superuser.groups.set([]) success_urls = [ self.index_url, self.notification_url, self.contact_url, self.team_url, self.new_team_url, self.data_team_url, self.edit_team_url, self.remove_team_url, self.leave_team_url, ] fail_urls = [ self.api_token_url, # expects default permission ] self.assert_url_success(client, success_urls) self.assert_url_fail(client, fail_urls) # Check for modified default user permission self.superuser.groups.add( Group.objects.get( name=DEFAULT_GROUP ) ) success_url = [ self.api_token_url, # must work now ] self.assert_url_success(client, success_url)