Fixup tests into working state one left to fix

This commit is contained in:
Oliver Marks 2018-01-23 22:07:43 +00:00
parent bf695f823d
commit 5008051d88
6 changed files with 89 additions and 54 deletions

View File

@ -1,3 +1,4 @@
import mock
from test_plus.test import TestCase
from mhackspace.users.models import Membership
from mhackspace.users.models import User
@ -5,23 +6,34 @@ from django.contrib.auth.models import Group
from mhackspace.subscriptions.management.commands.update_membership_status import update_subscriptions
from mhackspace.subscriptions.tests.mocks import gocardlessMocks
# this needs mocking
class TestTasks(TestCase):
class TestTasks(gocardlessMocks):
def setUp(self):
self.user1 = self.make_user('u1')
super().setUp()
self.user2 = self.make_user('u2')
self.user3 = self.make_user('u3')
self.group = Group(name='members')
self.group.save()
def test_refresh_subscriptions(self):
@mock.patch('mhackspace.subscriptions.payments.select_provider')
def test_refresh_subscriptions(self, mock_select_provider):
self.mock_success_responses()
self.mock_mandate_success_responses()
self.mock_customer_success_responses()
mock_select_provider.return_value = self.provider
membership_count = Membership.objects.all().delete()
user_count = User.objects.all().count()
membership_count = Membership.objects.all().count()
self.assertEquals(0, membership_count)
self.assertEquals(2, user_count)
self.assertEquals(3, user_count)
update_subscriptions(provider_name='gocardless')
self.mock_success_responses()
membership_count = Membership.objects.all().count()
self.assertEquals(2, membership_count)
self.assertEquals(2, user_count)

View File

@ -13,6 +13,7 @@ from mhackspace.subscriptions.helper import create_or_update_membership
def update_subscriptions(provider_name):
provider = select_provider('gocardless')
print(provider)
Membership.objects.all().delete()
for sub in provider.fetch_subscriptions():
try:

View File

@ -52,6 +52,9 @@ class gocardless_provider:
def fetch_subscriptions(self):
# for paying_member in self.client.mandates.list().records:
print('#############')
print(self.client.subscriptions.list())
print(self.client.subscriptions.list().records)
for paying_member in self.client.subscriptions.list().records:
mandate = self.client.mandates.get(paying_member.links.mandate)
user = self.client.customers.get(mandate.links.customer)

View File

@ -11,12 +11,12 @@ class gocardlessMocks(TestCase):
def setUp(self):
self.date_now = django.utils.timezone.now()
self.user = self.make_user()
self.user1 = self.make_user()
self.auth_gocardless()
def create_membership_record(self):
member = Membership()
member.user = self.user
member.user = self.user1
member.payment = '20.00'
member.date = self.date_now
member.save()
@ -34,8 +34,7 @@ class gocardlessMocks(TestCase):
return self.provider
def mock_success_responses(self, responses=None):
if responses == None:
def mock_success_responses_old(self, responses=None):
subscription_properties = Mock(
id='02',
status='active',
@ -63,31 +62,76 @@ class gocardlessMocks(TestCase):
self.provider.client.subscriptions.cancel = PropertyMock(
return_value={'status_code': '200'})
def mock_customer_success_responses(self):
ApiCustomersGet = namedtuple('ApiCustomersGet', 'email')
self.provider.client.customers.get = Mock(
return_value=ApiCustomersGet(
email='test@test.com')
)
def mock_success_responses2(self, responses=None):
if responses == None:
responses = [Mock(
def mock_mandate_success_responses(self):
ApiSubscriptionMandateLink = namedtuple('ApiSubscriptionMandateLink', 'customer')
# ApiMandateGet = namedtuple('ApiMandateGet', '')
self.provider.client.mandates.get = Mock()
def mock_success_responses(self, responses=None):
if responses is None:
responses = Mock(
id='02',
status='active',
amount=20.00,
created_at='date'
)]
)
mock_list = MagicMock()
mock_list_records = MagicMock(side_effect=[subscription_properties])
mock_list.records.return_value = mock_list_records
ApiRecords = namedtuple('ApiRecords', 'records')
ApiMandateLink = namedtuple('ApiMandateLink', 'mandate')
ApiResponseSubscriptionList = namedtuple('ApiResponseSubscriptionList', 'id, created_at, status, amount, links')
self.provider.client.subscriptions.list = Mock(
return_value=ApiRecords(
records=[
ApiResponseSubscriptionList(
id='02',
status='active',
created_at=self.date_now,
amount=2000,
links=ApiMandateLink(
mandate='mid01'
)
)]
)
)
self.provider.client.subscriptions.list = mock_list
ApiResponse = namedtuple('ApiResponse', 'api_response, created_at')
ApiResponseGet = namedtuple('ApiResponseGet', 'api_response, id, status, amount, created_at')
ApiResponseCreate = namedtuple('ApiResponseCreate', 'api_response, id, status, created_at')
ApiResponseCancelled = namedtuple('ApiResponseCancelled', 'api_response, status')
ApiResponseStatus = namedtuple('ApiResponseStatus', 'status_code')
self.provider.client.subscriptions.create = Mock(
return_value=ApiResponse(
return_value=ApiResponseCreate(
id='02',
status='active',
created_at=self.date_now,
api_response=ApiResponseStatus(status_code='200'))
)
self.provider.client.subscriptions.get.side_effects = responses
self.provider.client.subscriptions.cancel = PropertyMock(
return_value={'status_code': '200'})
self.provider.client.subscriptions.get = Mock(
return_value=ApiResponseGet(
id='02',
created_at=self.date_now,
amount=20.00,
status='active',
api_response=ApiResponseStatus(status_code='200'))
)
self.provider.client.subscriptions.cancel = Mock(
return_value=ApiResponseCancelled(
api_response=ApiResponseStatus(status_code='200'),
status='cancelled'))
# self.provider.client.subscriptions.cancel = PropertyMock(
# return_value={'status_code': '200'})

View File

@ -16,22 +16,9 @@ class TestPaymentGatewaysGocardless(gocardlessMocks):
super().setUp()
def test_unsubscribe(self):
responses = [
Mock(
id='02',
status='active',
amount=20.00,
created_at='date'
), Mock(
id='03',
status='active2',
amount=40.00,
created_at='date'
),
]
self.mock_success_responses2(responses)
self.mock_success_responses()
result = self.provider.cancel_subscription(user=self.user, reference='M01')
result = self.provider.cancel_subscription(user=self.user1, reference='M01')
self.assertEqual(result.get('amount'), 20.00)
self.assertEqual(result.get('reference'), '02')
@ -40,17 +27,6 @@ class TestPaymentGatewaysGocardless(gocardlessMocks):
def test_confirm_subscription_callback(self):
self.mock_success_responses()
membership = self.create_membership_record()
request_params = {
'resource_uri': 'http://gocardless/resource/url/01',
'resource_id': '01',
'resource_type': 'subscription',
'signature': 'sig',
'state': 'inactive'
}
# membership = Membership.objects.get(user=self.user)
result = self.provider.confirm_subscription(
membership=membership,
session=None,
@ -63,9 +39,10 @@ class TestPaymentGatewaysGocardless(gocardlessMocks):
def test_fetch_subscription_gocardless(self):
self.mock_success_responses()
self.mock_mandate_success_responses()
self.mock_customer_success_responses()
for item in self.provider.fetch_subscriptions():
self.assertEqual(item.get('status'), 'active')
self.assertEqual(item.get('email'), 'test@test.com')
self.assertEqual(item.get('reference'), '02')
self.assertEqual(item.get('amount'), 20.00)

View File

@ -24,13 +24,11 @@ class BaseUserTestCase(gocardlessMocks):
def setUp(self):
super().setUp()
# 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)
username=self.user1.username,
password=self.user1.password)
class TestSubscriptionSuccessRedirectView(BaseUserTestCase):
@ -96,14 +94,14 @@ class TestSubscriptionSuccessRedirectView(BaseUserTestCase):
setattr(request, 'session', 'session')
messages = FallbackStorage(request)
setattr(request, '_messages', messages)
request.user = self.user
request.user = self.user1
view = MembershipJoinFailureView()
view.request = request
self.assertEqual(
view.get_redirect_url(provider='gocardless'),
reverse('users:detail', kwargs={'username': self.user.username})
reverse('users:detail', kwargs={'username': self.user1.username})
)
members = Membership.objects.all()