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