From 87d247dbb4e963acb2f4ca599f11a44201387461 Mon Sep 17 00:00:00 2001 From: imperosol Date: Thu, 1 Oct 2026 09:51:02 +0200 Subject: [PATCH] wip --- .../templates/timetable/user_timetable.jinja | 6 ++++ timetable/tests.py | 1 - timetable/tests/__init__.py | 0 timetable/tests/test_api.py | 20 ++++++++++++ timetable/tests/test_view.py | 32 +++++++++++++++++++ timetable/views.py | 15 +++++++++ 6 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 timetable/templates/timetable/user_timetable.jinja delete mode 100644 timetable/tests.py create mode 100644 timetable/tests/__init__.py create mode 100644 timetable/tests/test_api.py create mode 100644 timetable/tests/test_view.py diff --git a/timetable/templates/timetable/user_timetable.jinja b/timetable/templates/timetable/user_timetable.jinja new file mode 100644 index 00000000..044d1f18 --- /dev/null +++ b/timetable/templates/timetable/user_timetable.jinja @@ -0,0 +1,6 @@ +{% extends 'core/base.jinja' %} + + +{% block content %} + +{% endblock %} \ No newline at end of file diff --git a/timetable/tests.py b/timetable/tests.py deleted file mode 100644 index a39b155a..00000000 --- a/timetable/tests.py +++ /dev/null @@ -1 +0,0 @@ -# Create your tests here. diff --git a/timetable/tests/__init__.py b/timetable/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/timetable/tests/test_api.py b/timetable/tests/test_api.py new file mode 100644 index 00000000..167ac7d5 --- /dev/null +++ b/timetable/tests/test_api.py @@ -0,0 +1,20 @@ +from django.test import TestCase +from django.urls import reverse + +from core.baker_recipes import subscriber_user +from timetable.models import TimetableSlot + + +class TestSaveTimetable(TestCase): + @classmethod + def setUpTestData(cls) -> None: + cls.user = subscriber_user.make() + cls.payload = { + "is_viewable": True, + "slots": [ + {"weekday": TimetableSlot.WeekDay.MONDAY, "start_at": 32, "end_at": 40}, + {"weekday": TimetableSlot.WeekDay.MONDAY, "start_at": 41, "end_at": 49}, + {"weekday": TimetableSlot.WeekDay.FRIDAY, "start_at": 52, "end_at": 64}, + ], + } + cls.url = reverse("api:timetable:save", kwargs={"user_id": cls.user.id}) diff --git a/timetable/tests/test_view.py b/timetable/tests/test_view.py new file mode 100644 index 00000000..e13f47ea --- /dev/null +++ b/timetable/tests/test_view.py @@ -0,0 +1,32 @@ +import pytest +from bs4 import BeautifulSoup +from django.contrib.auth.models import Permission +from django.test import Client +from django.urls import reverse +from model_bakery import baker + +from core.baker_recipes import subscriber_user +from core.models import User + +# class TestGenerator(TestCase) + + +@pytest.mark.django_db +@pytest.mark.parametrize( + "can_save", [True, False] +) +def test_generator_ok(client: Client, can_save): + user = baker.make(User) + if can_save: + user.user_permissions.add(Permission.objects.get(codename="add_self_timetable")) + client.force_login(user) + + res = client.get(reverse("timetable:generator")) + assert res.status_code == 200 + soup = BeautifulSoup(res.text, "lxml") + elem = soup.find(id="timetable-save") + + if can_save: + assert elem is not None + else: + assert elem is None diff --git a/timetable/views.py b/timetable/views.py index 549851b8..e0b80a04 100644 --- a/timetable/views.py +++ b/timetable/views.py @@ -1,6 +1,21 @@ # Create your views here. +from django.contrib.auth.mixins import UserPassesTestMixin from django.views.generic import TemplateView +from django.views.generic.detail import DetailView + +from core.models import User class GeneratorView(TemplateView): template_name = "timetable/generator.jinja" + + +class UserTimetableView(UserPassesTestMixin, DetailView): + model = User + pk_url_kwarg = "user_id" + template_name = "timetable/user_timetable.jinja" + + def test_func(self) -> bool | None: + return self.request.user.id == self.kwargs[ + "user_id" + ] or self.request.user.has_perm("timetable.view_timetable")