diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 219f683409d8ef65c573ee2446002730cc683c14..5be29911e55bc5fedc74cdc5f99dd5260b2eb407 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/AKDashboard/tests.py b/AKDashboard/tests.py
index a39b155ac3ee946fb97efafe6ecbb42f571cd7ad..f4fbff87e12c28df6ca244a5cf046d939d5b06cc 100644
--- a/AKDashboard/tests.py
+++ b/AKDashboard/tests.py
@@ -1 +1,128 @@
-# Create your tests here.
+import pytz
+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
+
+
+class DashboardTests(TestCase):
+    @classmethod
+    def setUpTestData(cls):
+        super().setUpTestData()
+        cls.event = Event.objects.create(
+            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",
+            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)
+
+    @override_settings(DASHBOARD_SHOW_RECENT=True)
+    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.")
+
+    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")
diff --git a/AKPlanning/settings_ci.py b/AKPlanning/settings_ci.py
index 6c09856926dabffa495a333749719278a616d15c..84a135c53da491761facfa52f1f2b41084d331a8 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',
+        },
     }
 }