forked from ungleich-public/dynamicweb
277 lines
No EOL
7.3 KiB
Python
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,
|
|
) |