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] 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