From 30ff53c6299ee39015cd322d04f075bb49982e94 Mon Sep 17 00:00:00 2001 From: Levi Date: Tue, 4 Oct 2016 23:26:02 -0500 Subject: [PATCH] Added Login View Test. Added Signup View Test. Added Reset Password View Test. Added Password Reset Confirm View Test. Added Membership Payment View Test for Post request. Added Membership Payment View test for urls, Membership Payment View Test tests for urls. Added odd cases to tests. --- .../commands/make_membership_charge.py | 67 ----- digitalglarus/test_views.py | 254 +++++++++++++++++- 2 files changed, 244 insertions(+), 77 deletions(-) diff --git a/digitalglarus/management/commands/make_membership_charge.py b/digitalglarus/management/commands/make_membership_charge.py index c727c734..4dedc1ff 100644 --- a/digitalglarus/management/commands/make_membership_charge.py +++ b/digitalglarus/management/commands/make_membership_charge.py @@ -97,70 +97,3 @@ class Command(BaseCommand): print(e) print("-------------------------") continue - # for donator_status in donators: - # donator = donator_status.user.stripecustomer - # try: - # Donation.objects.get(created_at__month=current_month, - # created_at__year=current_year, - # donator=donator) - # except Donation.DoesNotExist: - # try: - # # Get donator last donation amount - # last_donation = Donation.objects.filter(donator=donator).last() - # donation_amount = last_donation.donation - - # # Make stripe charge to a customer - # stripe_utils = StripeUtils() - # stripe_utils.CURRENCY = self.CURRENCY - # charge_response = stripe_utils.make_charge(amount=donation_amount, - # customer=donator.stripe_id) - # charge = charge_response.get('response_object') - - # # Check if the payment was approved - # if not charge: - # # There is an error trying to creating the stripe charge - # context = { - # 'paymentError': charge_response.get('error'), - # } - # print("--------- STRIPE PAYMENT ERROR ---------") - # print(context) - # print("-------------------------") - # continue - # # Create a donation - # charge = charge_response.get('response_object') - # donation_data = { - # 'cc_brand': charge.source.brand, - # 'stripe_charge_id': charge.id, - # 'last4': charge.source.last4, - # 'billing_address': last_donation.billing_address.id, - # 'donator': donator.id, - # 'donation': donation_amount - # } - # donation_form = DonationForm(donation_data) - # if donation_form.is_valid(): - # donation = donation_form.save() - - # context = { - # 'donation': donation, - # 'base_url': "{0}://{1}".format('https', 'dynamicweb.ungleich.ch') - - # } - # email_data = { - # 'subject': 'Your donation have been charged', - # 'to': donation.donator.user.email, - # 'context': context, - # 'template_name': 'donation_charge', - # 'template_path': 'nosystemd/emails/' - # } - # email = BaseEmail(**email_data) - # email.send() - - # print("--------- PAYMENT DONATION SUCCESSFULL ---------") - # print("Donator: %s" % donation.donator.user.email) - # print("Amount: %s %s" % (donation.donation, self.CURRENCY)) - # print("-----------------------------------------------") - # except Exception as e: - # print("--------- ERROR ---------") - # print(e) - # print("-------------------------") - # continue diff --git a/digitalglarus/test_views.py b/digitalglarus/test_views.py index 5658a73c..632147da 100644 --- a/digitalglarus/test_views.py +++ b/digitalglarus/test_views.py @@ -1,11 +1,25 @@ import json +from model_mommy import mommy +from unittest import mock from django.test import TestCase +from django.conf import settings from django.core.urlresolvers import reverse from django.core.urlresolvers import resolve from cms.test_utils.testcases import CMSTestCase +from django.contrib.auth.tokens import default_token_generator +from django.utils.http import urlsafe_base64_encode +from django.utils.encoding import force_bytes from cms.api import create_page +from membership.models import CustomUser, StripeCustomer +from utils.tests import BaseTestCase + + +from .views import LoginView, SignupView, PasswordResetView, PasswordResetConfirmView,\ + MembershipPricingView, MembershipPaymentView +from .models import MembershipType + class ContactViewTest(TestCase): def setUp(self): @@ -38,14 +52,234 @@ class ViewsTest(CMSTestCase): self.assertEqual(res2.status_code, 200) -class CalendarApiTestCase(TestCase): - def test_api_response(self): - calendar_api_url_1 = reverse('digitalglarus:calendar_api_1', kwargs={'month': '3', 'year': '2016'}) - res1 = self.client.get(calendar_api_url_1) - pd = json.loads(res1.content.decode('utf-8')) - self.assertEqual(pd['month'], '3') - self.assertEqual(pd['year'], '2016') +class MembershipPricingViewTest(BaseTestCase): - # TODO:check post - # calendar_api_url = reverse('digitalglarus:calendar_api') - # res = self.client.get(calendar_api_url) + def setUp(self): + super(MembershipPricingViewTest, self).setUp() + + self.membership_type = mommy.make(MembershipType) + self.url = reverse('digitalglarus:membership_pricing') + self.view = MembershipPricingView + self.expected_template = 'digitalglarus/membership_pricing.html' + + def test_url_resolve_to_view_correctly(self): + found = resolve(self.url) + self.assertEqual(found.func.__name__, self.view.__name__) + + def test_get(self): + # Anonymous user should get data + response = self.client.get(self.url) + self.assertEqual(response.status_code, 200) + self.assertEqual(response.context['membership_type'], self.membership_type) + self.assertTemplateUsed(response, self.expected_template) + + +class MembershipPaymentViewTest(BaseTestCase): + + def setUp(self): + super(MembershipPaymentViewTest, self).setUp() + + self.membership_type = mommy.make(MembershipType) + self.url = reverse('digitalglarus:membership_payment') + self.view = MembershipPaymentView + self.expected_template = 'digitalglarus/membership_payment.html' + + # post data + self.billing_address = { + 'street_address': 'street name', + 'city': 'MyCity', + 'postal_code': '32123123123123', + 'country': 'VE', + 'token': 'a23kfmslwxhkwis', + 'membership_type': self.membership_type.id + } + + def test_url_resolve_to_view_correctly(self): + found = resolve(self.url) + self.assertEqual(found.func.__name__, self.view.__name__) + + def test_get(self): + + # Anonymous user should get redirect to login + response = self.client.get(self.url) + expected_url = "%s?next=%s" % (reverse('digitalglarus:signup'), + reverse('digitalglarus:membership_payment')) + self.assertRedirects(response, expected_url=expected_url, + status_code=302, target_status_code=200) + + # Logged user should get the page + response = self.customer_client.get(self.url, follow=True) + self.assertEqual(response.status_code, 200) + self.assertEqual(response.context['stripe_key'], + settings.STRIPE_API_PUBLIC_KEY) + self.assertEqual(response.context['membership_type'], + self.membership_type) + + @mock.patch('utils.stripe_utils.StripeUtils.create_customer') + def test_post(self, stripe_mocked_call): + + # Anonymous user should get redirect to login + response = self.client.post(self.url) + expected_url = "%s?next=%s" % (reverse('digitalglarus:signup'), + reverse('digitalglarus:membership_payment')) + self.assertRedirects(response, expected_url=expected_url, + status_code=302, target_status_code=200) + + # Customer user should be able to pay + stripe_mocked_call.return_value = { + 'paid': True, + 'response_object': self.stripe_mocked_customer, + 'error': None + } + response = self.customer_client.post(self.url, self.billing_address) + import pdb + pdb.set_trace() + self.assertEqual(response.status_code, 200) + self.assertTrue(StripeCustomer.objects.filter(user__email=self.customer.email).exists()) + stripe_customer = StripeCustomer.objects.get(user__email=self.customer.email) + # self.assertEqual(stripe_customer.user, self.customer) + # self.assertTrue(HostingOrder.objects.filter(customer=stripe_customer).exists()) + # hosting_order = HostingOrder.objects.filter(customer=stripe_customer)[0] + # vm_plan = { + # 'cores': hosting_order.vm_plan.cores, + # 'memory': hosting_order.vm_plan.memory, + # 'disk_size': hosting_order.vm_plan.disk_size, + # 'price': hosting_order.vm_plan.price, + # 'hosting_company': hosting_order.vm_plan.vm_type.hosting_company, + # 'configuration': hosting_order.vm_plan.configuration + # } + # self.assertEqual(vm_plan, self.session_data.get('vm_specs')) + + +class LoginViewTest(TestCase): + + def setUp(self): + self.url = reverse('digitalglarus:login') + self.view = LoginView + self.expected_template = 'digitalglarus/login.html' + self.user = mommy.make('membership.CustomUser') + self.password = 'fake_password' + self.user.set_password(self.password) + self.user.save() + + def test_url_resolve_to_view_correctly(self): + found = resolve(self.url) + self.assertEqual(found.func.__name__, self.view.__name__) + + def test_get(self): + response = self.client.get(self.url) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, self.expected_template) + + def test_anonymous_user_can_login(self): + data = { + 'email': self.user.email, + 'password': self.password + } + response = self.client.post(self.url, data=data, follow=True) + self.assertEqual(response.context['user'], self.user) + self.assertEqual(response.status_code, 200) + + +class SignupViewTest(TestCase): + + def setUp(self): + self.url = reverse('digitalglarus:signup') + self.expected_template = 'digitalglarus/signup.html' + self.view = SignupView + self.signup_data = { + 'name': 'ungleich', + 'email': 'test@ungleich.com', + 'password': 'fake_password', + 'confirm_password': 'fake_password', + } + + def test_url_resolve_to_view_correctly(self): + found = resolve(self.url) + self.assertEqual(found.func.__name__, self.view.__name__) + + def test_get(self): + response = self.client.get(self.url) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, self.expected_template) + + def test_anonymous_user_can_signup(self): + response = self.client.post(self.url, data=self.signup_data, follow=True) + self.user = CustomUser.objects.get(email=self.signup_data.get('email')) + self.assertEqual(response.context['user'], self.user) + self.assertEqual(response.status_code, 200) + + +class PasswordResetViewTest(BaseTestCase): + + def setUp(self): + super(PasswordResetViewTest, self).setUp() + + self.url = reverse('digitalglarus:reset_password') + self.view = PasswordResetView + self.expected_template = 'digitalglarus/reset_password.html' + self.user = mommy.make('membership.CustomUser') + self.password = 'fake_password' + self.user.set_password(self.password) + self.user.save() + + self.post_data = { + 'email': self.user.email + } + + def test_url_resolve_to_view_correctly(self): + found = resolve(self.url) + self.assertEqual(found.func.__name__, self.view.__name__) + + def test_get(self): + response = self.client.get(self.url) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, self.expected_template) + + def test_post(self): + response = self.client.post(self.url, data=self.post_data, follow=True) + self.assertEqual(response.status_code, 200) + + def test_test_generate_email_context(self): + context = self.setup_view(self.view()).\ + test_generate_email_context(self.user) + self.assertEqual(context.get('user'), self.user) + self.assertEqual(context.get('site_name'), 'ungleich') + self.assertEqual(len(context.get('token')), 24) + + +class PasswordResetConfirmViewTest(BaseTestCase): + + def setUp(self): + super(PasswordResetConfirmViewTest, self).setUp() + + self.view = PasswordResetConfirmView + self.expected_template = 'digitalglarus/confirm_reset_password.html' + self.user = mommy.make('membership.CustomUser') + self.password = 'fake_password' + self.user.set_password(self.password) + self.user.save() + + self.token = default_token_generator.make_token(self.user) + self.uid = urlsafe_base64_encode(force_bytes(self.user.pk)) + self.url = reverse('digitalglarus:reset_password_confirm', + kwargs={'token': self.token, 'uidb64': self.uid}) + + self.post_data = { + 'new_password1': 'new_password', + 'new_password2': 'new_password' + } + + def test_url_resolve_to_view_correctly(self): + found = resolve(self.url) + self.assertEqual(found.func.__name__, self.view.__name__) + + def test_get(self): + response = self.client.get(self.url) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, self.expected_template) + + def test_post(self): + response = self.client.post(self.url, data=self.post_data, follow=True) + self.assertEqual(response.status_code, 200) + self.assertTrue(not response.context['form'].errors)