dynamicweb/membership/tests.py
2026-10-04 20:55:11 +01:00

277 lines
No EOL
7.3 KiB
Python

from unittest.mock import MagicMock, patch
from django.test import TestCase
from django.urls import reverse
from factories import CustomUserFactory, StripeCustomerFactory
class ResetViewTests(TestCase):
def setUp(self):
self.user = CustomUserFactory()
self.client.force_login(self.user)
def test_reset_sets_session_and_redirects(self):
response = self.client.get(
reverse(
"reset",
kwargs={"time": "month"},
)
)
self.assertEqual(response.status_code, 302)
self.assertEqual(self.client.session["next"], 0)
self.assertRedirects(
response,
reverse(
"payment",
kwargs={"time": "month"},
),
fetch_redirect_response=False,
)
class CreditCardViewTests(TestCase):
def setUp(self):
self.user = CustomUserFactory()
self.client.force_login(self.user)
def _set_session(self, **values):
session = self.client.session
session.update(values)
session.save()
def test_get_monthly_payment_page(self):
self._set_session(next=0)
response = self.client.get(
reverse(
"payment",
kwargs={"time": "month"},
)
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"templates/creditcard.html",
)
self.assertEqual(response.context["time"], "1 month")
self.assertEqual(response.context["price"], "35")
self.assertEqual(response.context["free"], "1")
self.assertEqual(self.client.session["next"], 1)
def test_get_yearly_payment_page(self):
self._set_session(next=0)
response = self.client.get(
reverse(
"payment",
kwargs={"time": "year"},
)
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"templates/creditcard.html",
)
self.assertEqual(response.context["time"], "1 year")
self.assertEqual(response.context["price"], "360")
self.assertEqual(response.context["free"], "2")
@patch("membership.views.StripeUtils")
@patch("membership.models.StripeUtils.check_customer")
def test_get_confirmation_result(
self,
mock_check_customer, mock_stripe_utils,
):
customer = StripeCustomerFactory.create()
self.client.force_login(customer.user)
self._set_session(
next=2,
token="tok_test",
amount=35,
)
mock_check_customer.return_value = {
}
mock_stripe_utils.return_value.make_charge.return_value = { "response_object": { "status": "succeeded", } }
response = self.client.get(
reverse(
"payment",
kwargs={"time": "month"},
)
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"templates/validated.html",
)
self.assertEqual(
response.context["msg"],
"succeeded",
)
self.assertIsNone(self.client.session["next"])
def test_post_invalid_payment_form(self):
response = self.client.post(
reverse(
"payment",
kwargs={"time": "month"},
),
{
"stripeToken": "token"
},
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"templates/creditcard.html",
)
self.assertFalse(response.context["form"].is_valid())
class LoginRegistrationViewTests(TestCase):
def test_get_login_page(self):
response = self.client.get(
reverse("login_glarus")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"templates/login.html",
)
self.assertIn("login_form", response.context)
self.assertIn("register_form", response.context)
self.assertIsNone(self.client.session["next"])
def test_authenticated_user_is_redirected(self):
user = CustomUserFactory()
self.client.force_login(user)
response = self.client.get(
reverse("login_glarus")
)
self.assertRedirects(
response,
reverse("membership"),
)
def test_invalid_registration_form(self):
response = self.client.post(
reverse("login_glarus"),
{"is_login": ""},
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"templates/login.html",
)
self.assertFalse(
response.context["register_form"].is_valid()
)
@patch("membership.views.CustomUser.register")
def test_successful_registration(self, mock_register):
mock_register.return_value = CustomUserFactory()
response = self.client.post(
reverse("login_glarus"),
{
"is_login": "",
"name": "Test User",
"email": "test@example.com",
"password": "TestPassword123!",
"confirm_password": "TestPassword123!",
},
)
self.assertEqual(response.status_code, 200)
mock_register.assert_called_once_with(
"Test User",
"TestPassword123!",
"test@example.com",
)
def test_successful_login(
self
):
user = CustomUserFactory()
response = self.client.post(
reverse("login_glarus"),
{
"is_login": "1",
"email": user.email,
"password": "TestPassword123!",
},
)
class MembershipViewTests(TestCase):
def setUp(self):
self.user = CustomUserFactory()
self.client.force_login(self.user)
def test_membership_page_without_payment(self):
response = self.client.get(
reverse("membership")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"templates/membership.html",
)
self.assertIn(
"language_code",
response.context,
)
self.assertEqual(
self.client.session["next"],
0,
)
def test_membership_page_with_existing_payment_redirects(self):
with patch.object(
type(self.user.creditcards_set),
"filter",
return_value=[MagicMock()],
):
response = self.client.get(
reverse("membership")
)
self.assertEqual(response.status_code, 302)
self.assertEqual(response.url, "/")
class LogoutViewTests(TestCase):
def test_logout_redirects_to_digitalglarus(self):
user = CustomUserFactory()
self.client.force_login(user)
response = self.client.get(
reverse("logout_glarus")
)
self.assertRedirects(
response,
"/digitalglarus",
fetch_redirect_response=False,
)