dynamicweb/nosystemd/tests.py
2026-10-05 08:19:43 +01:00

241 lines
No EOL
5.8 KiB
Python

from unittest.mock import patch
from django.test import TestCase
from django.urls import reverse
from factories import CustomUserFactory
from nosystemd.models import Donation, DonatorStatus
from membership.models import StripeCustomer
class LandingViewTests(TestCase):
def test_landing_page(self):
response = self.client.get(
reverse("nosystemd:landing")
)
self.assertEqual(response.status_code, 200)
class LoginViewTests(TestCase):
def test_login_page(self):
response = self.client.get(
reverse("nosystemd:login")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"nosystemd/login.html",
)
class SignupViewTests(TestCase):
def test_signup_page(self):
response = self.client.get(
reverse("nosystemd:signup")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"nosystemd/signup.html",
)
class DonationViewTests(TestCase):
def setUp(self):
self.user = CustomUserFactory()
self.client.force_login(self.user)
def test_donation_page(self):
response = self.client.get(
reverse("nosystemd:make_donation")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"nosystemd/donation.html",
)
def test_donation_page_contains_stripe_key(self):
response = self.client.get(
reverse("nosystemd:make_donation")
)
self.assertIn(
"stripe_key",
response.context,
)
def test_invalid_donation_form(self):
response = self.client.post(
reverse("nosystemd:make_donation"),
{},
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"nosystemd/donation.html",
)
self.assertFalse(
response.context["form"].is_valid()
)
@patch("nosystemd.views.StripeUtils")
@patch("nosystemd.views.StripeCustomer.get_or_create")
def test_successful_donation(
self,
mock_get_or_create,
mock_stripe_utils,
):
customer = mock_get_or_create.return_value
customer.stripe_id = "cus_test_123"
customer.id = 1
mock_stripe_utils.return_value.make_charge.return_value = {
"response_object": type(
"StripeCharge",
(),
{
"id": "ch_test_123",
"source": type(
"StripeSource",
(),
{
"brand": "Visa",
"last4": "4242",
},
)(),
},
)(),
}
self.client.post(
reverse("nosystemd:make_donation"),
{
"token": "tok_test",
"donation_amount": 10,
},
)
class DonationListViewTests(TestCase):
def setUp(self):
self.user = CustomUserFactory()
self.client.force_login(self.user)
def test_donation_list_page(self):
response = self.client.get(
reverse("nosystemd:donations")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"nosystemd/donations.html",
)
self.assertIn(
"donations",
response.context,
)
self.assertIn(
"donator_status",
response.context,
)
def test_donation_list_requires_login(self):
self.client.logout()
response = self.client.get(
reverse("nosystemd:donations")
)
self.assertEqual(response.status_code, 302)
class DonationDetailViewTests(TestCase):
def setUp(self):
self.user = CustomUserFactory()
self.client.force_login(self.user)
def test_donation_detail_requires_login(self):
self.client.logout()
response = self.client.get(
reverse(
"nosystemd:donation_detail",
kwargs={"pk": 1},
)
)
self.assertEqual(response.status_code, 302)
class DonatorStatusDetailViewTests(TestCase):
def setUp(self):
self.user = CustomUserFactory()
self.client.force_login(self.user)
def test_status_page_without_status(self):
response = self.client.get(
reverse("nosystemd:donator_status")
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response,
"nosystemd/donator_status.html",
)
def test_status_page_requires_login(self):
self.client.logout()
response = self.client.get(
reverse("nosystemd:donator_status")
)
self.assertEqual(response.status_code, 302)
class ChangeDonatorStatusViewTests(TestCase):
def setUp(self):
self.user = CustomUserFactory()
self.client.force_login(self.user)
def test_change_status(self):
status = DonatorStatus.objects.create(
user=self.user,
status=DonatorStatus.ACTIVE,
)
response = self.client.post(
reverse(
"nosystemd:change_donator_status",
kwargs={"pk": status.pk},
)
)
self.assertEqual(response.status_code, 302)
self.assertRedirects(
response,
reverse("nosystemd:donations"),
)
status.refresh_from_db()
self.assertEqual(
status.status,
DonatorStatus.CANCELED,
)