dynamicweb/nosystemd/tests.py

241 lines
5.8 KiB
Python
Raw Normal View History

2026-10-05 08:19:43 +01:00
from unittest.mock import patch
2026-10-05 08:19:43 +01:00
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,
)