diff options
author | 2020-11-28 10:07:54 +0200 | |
---|---|---|
committer | 2020-11-28 10:07:54 +0200 | |
commit | d1099b8401a900b2963f3b5fbdee9c8cbdf5a13d (patch) | |
tree | e609f34377af2f5aacf2585807bbd46f7538f6ac /pydis_site/apps | |
parent | Remove old templates (diff) | |
parent | Merge pull request #417 from ks129/events-app (diff) |
Merge branch 'dewikification' into guides-app
Diffstat (limited to 'pydis_site/apps')
-rw-r--r-- | pydis_site/apps/events/__init__.py | 0 | ||||
-rw-r--r-- | pydis_site/apps/events/apps.py | 7 | ||||
-rw-r--r-- | pydis_site/apps/events/migrations/__init__.py | 0 | ||||
-rw-r--r-- | pydis_site/apps/events/tests/__init__.py | 0 | ||||
-rw-r--r-- | pydis_site/apps/events/tests/test_views.py | 42 | ||||
-rw-r--r-- | pydis_site/apps/events/urls.py | 9 | ||||
-rw-r--r-- | pydis_site/apps/events/views/__init__.py | 4 | ||||
-rw-r--r-- | pydis_site/apps/events/views/index.py | 7 | ||||
-rw-r--r-- | pydis_site/apps/events/views/page.py | 25 | ||||
-rw-r--r-- | pydis_site/apps/home/urls.py | 1 |
10 files changed, 95 insertions, 0 deletions
diff --git a/pydis_site/apps/events/__init__.py b/pydis_site/apps/events/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/pydis_site/apps/events/__init__.py diff --git a/pydis_site/apps/events/apps.py b/pydis_site/apps/events/apps.py new file mode 100644 index 00000000..a1cf09ef --- /dev/null +++ b/pydis_site/apps/events/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class EventsConfig(AppConfig): + """Django AppConfig for events app.""" + + name = 'events' diff --git a/pydis_site/apps/events/migrations/__init__.py b/pydis_site/apps/events/migrations/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/pydis_site/apps/events/migrations/__init__.py diff --git a/pydis_site/apps/events/tests/__init__.py b/pydis_site/apps/events/tests/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/pydis_site/apps/events/tests/__init__.py diff --git a/pydis_site/apps/events/tests/test_views.py b/pydis_site/apps/events/tests/test_views.py new file mode 100644 index 00000000..0db0ef9a --- /dev/null +++ b/pydis_site/apps/events/tests/test_views.py @@ -0,0 +1,42 @@ +from pathlib import Path + +from django.conf import settings +from django.test import TestCase, override_settings +from django_hosts.resolvers import reverse + + +PAGES_PATH = Path(settings.BASE_DIR, "pydis_site", "templates", "events", "test-pages") + + +class IndexTests(TestCase): + def test_events_index_response_200(self): + """Should return response code 200 when visiting index of events.""" + url = reverse("events:index") + resp = self.client.get(url) + self.assertEqual(resp.status_code, 200) + + +class PageTests(TestCase): + @override_settings(PAGES_PATH=PAGES_PATH) + def test_valid_event_page_reponse_200(self): + """Should return response code 200 when visiting valid event page.""" + pages = ( + reverse("events:page", ("my-event",)), + reverse("events:page", ("my-event/subpage",)), + ) + for page in pages: + with self.subTest(page=page): + resp = self.client.get(page) + self.assertEqual(resp.status_code, 200) + + @override_settings(PAGES_PATH=PAGES_PATH) + def test_invalid_event_page_404(self): + """Should return response code 404 when visiting invalid event page.""" + pages = ( + reverse("events:page", ("invalid",)), + reverse("events:page", ("invalid/invalid",)) + ) + for page in pages: + with self.subTest(page=page): + resp = self.client.get(page) + self.assertEqual(resp.status_code, 404) diff --git a/pydis_site/apps/events/urls.py b/pydis_site/apps/events/urls.py new file mode 100644 index 00000000..9a65cf1f --- /dev/null +++ b/pydis_site/apps/events/urls.py @@ -0,0 +1,9 @@ +from django.urls import path + +from pydis_site.apps.events.views import IndexView, PageView + +app_name = "events" +urlpatterns = [ + path("", IndexView.as_view(), name="index"), + path("<path:path>/", PageView.as_view(), name="page"), +] diff --git a/pydis_site/apps/events/views/__init__.py b/pydis_site/apps/events/views/__init__.py new file mode 100644 index 00000000..8a107e2f --- /dev/null +++ b/pydis_site/apps/events/views/__init__.py @@ -0,0 +1,4 @@ +from .index import IndexView +from .page import PageView + +__all__ = ["IndexView", "PageView"] diff --git a/pydis_site/apps/events/views/index.py b/pydis_site/apps/events/views/index.py new file mode 100644 index 00000000..7ffba74a --- /dev/null +++ b/pydis_site/apps/events/views/index.py @@ -0,0 +1,7 @@ +from django.views.generic import TemplateView + + +class IndexView(TemplateView): + """Events index page view.""" + + template_name = "events/index.html" diff --git a/pydis_site/apps/events/views/page.py b/pydis_site/apps/events/views/page.py new file mode 100644 index 00000000..f4c37aeb --- /dev/null +++ b/pydis_site/apps/events/views/page.py @@ -0,0 +1,25 @@ +from typing import List + +from django.conf import settings +from django.http import Http404 +from django.views.generic import TemplateView + + +class PageView(TemplateView): + """Handles event pages showing.""" + + def get_template_names(self) -> List[str]: + """Get specific template names.""" + path: str = self.kwargs['path'] + page_path = settings.PAGES_PATH / path + if page_path.is_dir(): + page_path = page_path / "_index.html" + path = f"{path}/_index.html" + else: + page_path = settings.PAGES_PATH / f"{path}.html" + path = f"{path}.html" + + if not page_path.exists(): + raise Http404 + + return [f"events/{settings.PAGES_PATH.name}/{path}"] diff --git a/pydis_site/apps/home/urls.py b/pydis_site/apps/home/urls.py index d2172c40..bd7c0625 100644 --- a/pydis_site/apps/home/urls.py +++ b/pydis_site/apps/home/urls.py @@ -9,4 +9,5 @@ urlpatterns = [ path('admin/', admin.site.urls), path('resources/', include('pydis_site.apps.resources.urls')), path('articles/', include('pydis_site.apps.content.urls')), + path('events/', include('pydis_site.apps.events.urls', namespace='events')), ] |