dynamicweb/digitalglarus/tests.py
2026-10-04 12:26:48 +01:00

476 lines
No EOL
11 KiB
Python

from datetime import date
from unittest.mock import patch
from django.contrib.auth import get_user_model
from django.test import RequestFactory, TestCase
from django.urls import reverse
from digitalglarus.forms import (
BookingDateForm
)
from utils.forms import ContactUsForm
from digitalglarus.models import (
BookingPrice,
MembershipType,
Supporter,
)
from digitalglarus.views import (
IndexView,
SupportusView,
LoginView,
SignupView,
PasswordResetView,
PasswordResetConfirmView,
HistoryView,
MembershipPricingView,
MembershipActivatedView,
ContactView,
BookingSelectDatesView,
)
from factories import (
SupporterFactory,
BookingPriceFactory,
CustomUserFactory,
PostFactory,
)
User = get_user_model()
class IndexViewTests(TestCase):
def test_get_renders_template(self):
response = self.client.get(
reverse("digitalglarus:landing")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"digitalglarus/index.html",
)
class SupportusViewTests(TestCase):
@patch("digitalglarus.views.Post.objects.filter")
def test_get_renders_template(self, mock_filter):
mock_filter.return_value.translated.return_value = []
response = self.client.get(
reverse("digitalglarus:supportus")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"digitalglarus/supportus.html",
)
self.assertIn("post_list", response.context)
@patch("digitalglarus.views.Post.objects.filter")
def test_context_contains_posts(self, mock_filter):
posts = ["post1", "post2"]
mock_filter.return_value.translated.return_value = posts
request = RequestFactory().get(
reverse("digitalglarus:supportus")
)
view = SupportusView()
view.setup(request)
context = view.get_context_data()
self.assertEqual(
context["post_list"],
posts,
)
class HistoryViewTests(TestCase):
def test_get_renders_template(self):
SupporterFactory()
response = self.client.get(
reverse("digitalglarus:history")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"digitalglarus/history.html",
)
self.assertIn(
"supporters",
response.context,
)
def test_context_contains_supporters(self):
supporter = SupporterFactory()
request = RequestFactory().get(
reverse("digitalglarus:history")
)
view = HistoryView()
view.setup(request)
context = view.get_context_data()
self.assertIn(
supporter,
context["supporters"],
)
class LoginViewTests(TestCase):
def test_get_renders_template(self):
response = self.client.get(
reverse("digitalglarus:login")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"digitalglarus/login.html",
)
def test_get_success_url_without_membership_orders(self):
request = RequestFactory().get(
reverse("digitalglarus:login")
)
request.user = CustomUserFactory.create()
view = LoginView()
view.setup(request)
result = view.get_success_url()
self.assertEqual(
result,
reverse("digitalglarus:membership_pricing"),
)
class SignupViewTests(TestCase):
def test_get_renders_template(self):
response = self.client.get(
reverse("digitalglarus:signup")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"digitalglarus/signup.html",
)
def test_success_url(self):
view = SignupView()
self.assertEqual(
str(view.success_url),
reverse("digitalglarus:login"),
)
class PasswordResetViewTests(TestCase):
def test_get_renders_template(self):
response = self.client.get(
reverse("digitalglarus:reset_password")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"digitalglarus/reset_password.html",
)
class PasswordResetConfirmViewTests(TestCase):
def test_template_name(self):
view = PasswordResetConfirmView()
self.assertEqual(
view.template_name,
"digitalglarus/confirm_reset_password.html",
)
def test_success_url(self):
view = PasswordResetConfirmView()
self.assertEqual(
str(view.success_url),
reverse("digitalglarus:login"),
)
class MembershipPricingViewTests(TestCase):
@patch(
"digitalglarus.views.MembershipType.objects.last"
)
def test_get_renders_template(self, mock_last):
membership_type = object()
mock_last.return_value = membership_type
response = self.client.get(
reverse("digitalglarus:membership_pricing")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"digitalglarus/membership_pricing.html",
)
self.assertEqual(
response.context["membership_type"],
membership_type,
)
class MembershipActivatedViewTests(TestCase):
def test_get_renders_template(self):
session = self.client.session
session["membership_price"] = 100
session["membership_dates"] = "01/01/2026 - 01/31/2026"
session.save()
response = self.client.get(
reverse("digitalglarus:membership_activated")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"digitalglarus/membership_activated.html",
)
self.assertEqual(
response.context["membership_price"],
100,
)
self.assertEqual(
response.context["membership_dates"],
"01/01/2026 - 01/31/2026",
)
class ContactViewTests(TestCase):
def test_get_renders_template(self):
response = self.client.get(
reverse("digitalglarus:contact")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"contact.html",
)
def test_get_uses_contact_form(self):
response = self.client.get(
reverse("digitalglarus:contact")
)
self.assertIsInstance(
response.context["form"],
ContactUsForm,
)
def test_form_valid_redirects_to_contact(self):
view = ContactView()
request = RequestFactory().post(
reverse("digitalglarus:contact")
)
view.setup(request)
form = ContactUsForm()
with patch.object(
ContactUsForm,
"is_valid",
return_value=True,
):
response = view.form_valid(form)
self.assertEqual(
response.status_code,
302,
)
self.assertEqual(
response.url,
reverse("digitalglarus:contact"),
)
class BookingSelectDatesViewTests(TestCase):
def test_get_requires_login(self):
response = self.client.get(
reverse("digitalglarus:booking")
)
self.assertEqual(response.status_code, 302)
def test_success_url(self):
view = BookingSelectDatesView()
self.assertEqual(
str(view.success_url),
reverse("digitalglarus:booking_payment"),
)
def test_get_form_kwargs_contains_user(self):
user = CustomUserFactory.create(
email="test@example.com",
password="password123",
)
request = RequestFactory().get(
reverse("digitalglarus:booking")
)
request.user = user
view = BookingSelectDatesView()
view.setup(request)
with patch(
"digitalglarus.views.FormView.get_form_kwargs",
return_value={},
):
kwargs = view.get_form_kwargs()
self.assertEqual(
kwargs["user"],
user,
)
class OldFunctionViewTests(TestCase):
@patch("digitalglarus.views.Post.objects.translated")
def test_blog_renders_template(self, mock_translated):
mock_translated.return_value = []
response = self.client.get(
reverse("digitalglarus:blog")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"glarus_blog/post_list.html",
)
self.assertIn(
"post_list",
response.context,
)
def test_blog_detail_renders_template(self):
post = PostFactory.create()
response = self.client.get(
reverse(
"digitalglarus:blog-detail",
kwargs={"slug": post.slug},
)
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"glarus_blog/post_detail.html",
)
self.assertIn(
"post",
response.context,
)
def test_blog_detail_returns_404_when_post_does_not_exist(self):
with patch(
"digitalglarus.views.Post.objects.translated"
) as mock_translated:
mock_translated.return_value.first.return_value = None
response = self.client.get(
reverse(
"digitalglarus:blog-detail",
kwargs={"slug": "missing-post"},
)
)
self.assertEqual(response.status_code, 404)
def test_support_renders_template(self):
response = self.client.get(
reverse("digitalglarus:support")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"digitalglarus/supportus.html",
)
def test_supporters_renders_template(self):
SupporterFactory()
response = self.client.get(
reverse("digitalglarus:supporters")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"supporters.html",
)
self.assertIn(
"supporters",
response.context,
)
class BookingPaymentViewTests(TestCase):
def test_get_without_booking_data_redirects_to_booking(self):
response = self.client.get(
reverse("digitalglarus:booking_payment")
)
self.assertRedirects(
response,
reverse("digitalglarus:booking"),
fetch_redirect_response=False,
)
class MembershipDeactivateViewTests(TestCase):
def test_get_requires_login(self):
response = self.client.get(
reverse("digitalglarus:membership_deactivate")
)
self.assertEqual(response.status_code, 302)