From 7b07ce6501c68546862af2cc22052d2e8fed2a69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20H=C3=A4ttasch?= <benjamin.haettasch@fachschaft.informatik.tu-darmstadt.de> Date: Sun, 2 May 2021 18:23:40 +0200 Subject: [PATCH 1/3] Implement three basic testcases for AKDashboard --- AKDashboard/tests.py | 53 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/AKDashboard/tests.py b/AKDashboard/tests.py index a39b155a..7d695f03 100644 --- a/AKDashboard/tests.py +++ b/AKDashboard/tests.py @@ -1 +1,52 @@ -# Create your tests here. +import pytz +from django.test import TestCase +from django.urls import reverse +from django.utils.timezone import now + +from AKModel.models import Event, AK, AKCategory + + +class DashboardTests(TestCase): + @classmethod + def setUpTestData(cls): + super().setUpTestData() + cls.event = Event.objects.create( + name="Test Event", + slug="test", + timezone=pytz.utc, + start=now(), + end=now(), + active=True, + ) + cls.default_category = AKCategory.objects.create( + name="Test Category", + event=cls.event, + ) + + def test_dashboard_view(self): + url = reverse('dashboard:dashboard_event', kwargs={"slug": self.event.slug}) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + def test_nonexistent_dashboard_view(self): + url = reverse('dashboard:dashboard_event', kwargs={"slug": "nonexistent-event"}) + response = self.client.get(url) + self.assertEqual(response.status_code, 404) + + def test_history(self): + url = reverse('dashboard:dashboard_event', kwargs={"slug": self.event.slug}) + + # History should be empty + response = self.client.get(url) + self.assertQuerysetEqual(response.context["recent_changes"], []) + + AK.objects.create( + name="Test AK", + category=self.default_category, + event=self.event, + ) + + # History should now contain one AK (Test AK) + response = self.client.get(url) + self.assertEqual(len(response.context["recent_changes"]), 1) + self.assertEqual(response.context["recent_changes"][0]['text'], "New AK: Test AK.") -- GitLab From 0041dbc7dd087314634eb0145f0f285656d4ff5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20H=C3=A4ttasch?= <benjamin.haettasch@fachschaft.informatik.tu-darmstadt.de> Date: Sun, 2 May 2021 18:30:11 +0200 Subject: [PATCH 2/3] Adapt CI pipeline for automated tests --- .gitlab-ci.yml | 2 +- AKPlanning/settings_ci.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 219f6834..5be29911 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -24,4 +24,4 @@ before_script: test: script: - source venv/bin/activate - - python manage.py test --settings AKPlanning.settings_ci + - python manage.py test --settings AKPlanning.settings_ci --keepdb diff --git a/AKPlanning/settings_ci.py b/AKPlanning/settings_ci.py index 6c098569..84a135c5 100644 --- a/AKPlanning/settings_ci.py +++ b/AKPlanning/settings_ci.py @@ -16,6 +16,9 @@ DATABASES = { 'PASSWORD': 'mysql', 'OPTIONS': { 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'" - } + }, + 'TEST' : { + 'NAME': 'test', + }, } } -- GitLab From 8b83f47b9e1e5a8a6ccd439eab53748b289b6564 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20H=C3=A4ttasch?= <benjamin.haettasch@fachschaft.informatik.tu-darmstadt.de> Date: Tue, 4 May 2021 11:53:48 +0200 Subject: [PATCH 3/3] Add further dashboard tests (and improve existing ones) --- AKDashboard/tests.py | 82 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 3 deletions(-) diff --git a/AKDashboard/tests.py b/AKDashboard/tests.py index 7d695f03..f4fbff87 100644 --- a/AKDashboard/tests.py +++ b/AKDashboard/tests.py @@ -1,8 +1,10 @@ import pytz -from django.test import TestCase +from django.apps import apps +from django.test import TestCase, override_settings from django.urls import reverse from django.utils.timezone import now +from AKDashboard.models import DashboardButton from AKModel.models import Event, AK, AKCategory @@ -11,12 +13,13 @@ class DashboardTests(TestCase): def setUpTestData(cls): super().setUpTestData() cls.event = Event.objects.create( - name="Test Event", - slug="test", + name="Dashboard Test Event", + slug="dashboardtest", timezone=pytz.utc, start=now(), end=now(), active=True, + plan_hidden=False, ) cls.default_category = AKCategory.objects.create( name="Test Category", @@ -33,6 +36,7 @@ class DashboardTests(TestCase): response = self.client.get(url) self.assertEqual(response.status_code, 404) + @override_settings(DASHBOARD_SHOW_RECENT=True) def test_history(self): url = reverse('dashboard:dashboard_event', kwargs={"slug": self.event.slug}) @@ -50,3 +54,75 @@ class DashboardTests(TestCase): response = self.client.get(url) self.assertEqual(len(response.context["recent_changes"]), 1) self.assertEqual(response.context["recent_changes"][0]['text'], "New AK: Test AK.") + + def test_public(self): + url_dashboard_index = reverse('dashboard:dashboard') + url_event_dashboard = reverse('dashboard:dashboard_event', kwargs={"slug": self.event.slug}) + + # Non-Public event (should not be part of the global dashboard + # but should have an individual dashboard page for those knowing the url) + self.event.public = False + self.event.save() + response = self.client.get(url_dashboard_index) + print(response) + self.assertEqual(response.status_code, 200) + self.assertFalse(self.event in response.context["events"]) + response = self.client.get(url_event_dashboard) + self.assertEqual(response.status_code, 200) + self.assertEqual(response.context["event"], self.event) + + # Public event -- should be part of the global dashboard + self.event.public = True + self.event.save() + response = self.client.get(url_dashboard_index) + self.assertEqual(response.status_code, 200) + self.assertTrue(self.event in response.context["events"]) + + def test_active(self): + url_event_dashboard = reverse('dashboard:dashboard_event', kwargs={"slug": self.event.slug}) + + if apps.is_installed('AKSubmission'): + # Non-active event -> No submission + self.event.active = False + self.event.save() + response = self.client.get(url_event_dashboard) + self.assertNotContains(response, "AK Submission") + + # Active event -> Submission should be open + self.event.active = True + self.event.save() + response = self.client.get(url_event_dashboard) + self.assertContains(response, "AK Submission") + + def test_plan_hidden(self): + url_event_dashboard = reverse('dashboard:dashboard_event', kwargs={"slug": self.event.slug}) + + if apps.is_installed('AKPlan'): + # Plan hidden? No buttons should show up + self.event.plan_hidden = True + self.event.save() + response = self.client.get(url_event_dashboard) + self.assertNotContains(response, "Current AKs") + self.assertNotContains(response, "AK Wall") + + # Plan not hidden? + # Buttons for current AKs and AK Wall should be on the page + self.event.plan_hidden = False + self.event.save() + response = self.client.get(url_event_dashboard) + self.assertContains(response, "Current AKs") + self.assertContains(response, "AK Wall") + + def test_dashboard_buttons(self): + url_event_dashboard = reverse('dashboard:dashboard_event', kwargs={"slug": self.event.slug}) + + response = self.client.get(url_event_dashboard) + self.assertNotContains(response, "Dashboard Button Test") + + DashboardButton.objects.create( + text="Dashboard Button Test", + event=self.event + ) + + response = self.client.get(url_event_dashboard) + self.assertContains(response, "Dashboard Button Test") -- GitLab