104 lines
3.6 KiB
Python
104 lines
3.6 KiB
Python
from django.contrib.messages.storage.fallback import FallbackStorage
|
|
# from django.contrib.auth.models import Group
|
|
from django.test import Client
|
|
from django.test import RequestFactory
|
|
from django.core.urlresolvers import reverse
|
|
from test_plus.test import TestCase
|
|
from mock import patch, Mock
|
|
from mhackspace.users.models import Membership
|
|
from mhackspace.users.models import User
|
|
|
|
from mhackspace.subscriptions.payments import payment, gocardless_provider, braintree_provider
|
|
|
|
from ..views import (
|
|
MembershipCancelView,
|
|
MembershipJoinView,
|
|
MembershipJoinSuccessView,
|
|
MembershipJoinFailureView
|
|
)
|
|
|
|
|
|
class BaseUserTestCase(TestCase):
|
|
fixtures = ['groups']
|
|
|
|
def setUp(self):
|
|
self.user = self.make_user()
|
|
self.user.save()
|
|
self.factory = RequestFactory()
|
|
self.client = Client()
|
|
self.client.login(
|
|
username=self.user.username,
|
|
password=self.user.password)
|
|
|
|
|
|
class TestSubscriptionSuccessRedirectView(BaseUserTestCase):
|
|
@patch('mhackspace.subscriptions.payments.gocardless_provider', autospec=True)
|
|
@patch('mhackspace.subscriptions.views.select_provider', autospec=True)
|
|
def test_success_redirect_url(self, mock_subscription, mock_provider):
|
|
mock_subscription.return_value = mock_provider
|
|
mock_provider.confirm_subscription.return_value = {
|
|
'amount': 20.00,
|
|
'start_date': '2017-01-01T17:07:09Z',
|
|
'reference': 'MH0001',
|
|
'email': 'user@test.com',
|
|
'success': True
|
|
}
|
|
|
|
response = self.client.post(
|
|
reverse('join_hackspace_success', kwargs={'provider': 'gocardless'}), {
|
|
'resource_id': 'R01',
|
|
'resource_type': 'subscription',
|
|
'resource_url': 'https://sandbox.gocardless.com',
|
|
'signature': 'test_signature'
|
|
},
|
|
follow=True
|
|
)
|
|
|
|
# print('=============================')
|
|
# setattr(request, 'session', 'session')
|
|
# messages = FallbackStorage(request)
|
|
# setattr(request, '_messages', messages)
|
|
# request.user = user1
|
|
|
|
# view = MembershipJoinSuccessView()
|
|
# view.request = request
|
|
# print(self.user)
|
|
self.assertRedirects(
|
|
response,
|
|
expected_url=reverse('users:detail', kwargs={'username': self.user.username}),
|
|
status_code=302,
|
|
target_status_code=200)
|
|
self.assertEqual(
|
|
view.get_redirect_url(provider ='gocardless'),
|
|
reverse('users:detail', kwargs={'username': self.user.username})
|
|
)
|
|
|
|
members = Membership.objects.all()
|
|
self.assertEqual(members.count(), 1)
|
|
|
|
@patch('mhackspace.subscriptions.payments.gocardless_pro.client.subscription', autospec=True)
|
|
def test_failure_redirect_url(self, mock_obj):
|
|
# Instantiate the view directly. Never do this outside a test!
|
|
# Generate a fake request
|
|
request = self.factory.post(
|
|
reverse('join_hackspace_failure', kwargs={'provider': 'gocardless'}),
|
|
data={'signature': 'test_signature'}
|
|
)
|
|
|
|
|
|
setattr(request, 'session', 'session')
|
|
messages = FallbackStorage(request)
|
|
setattr(request, '_messages', messages)
|
|
request.user = self.user
|
|
|
|
view = MembershipJoinFailureView()
|
|
view.request = request
|
|
|
|
self.assertEqual(
|
|
view.get_redirect_url(provider='gocardless'),
|
|
reverse('users:detail', kwargs={'username': self.user.username})
|
|
)
|
|
|
|
members = Membership.objects.all()
|
|
self.assertEqual(len(members), 0)
|