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, )