diff --git a/rowers/braintreestuff.py b/rowers/braintreestuff.py
index 5466c1cc..4af5920f 100644
--- a/rowers/braintreestuff.py
+++ b/rowers/braintreestuff.py
@@ -118,7 +118,7 @@ def make_payment(rower,data):
job = myqueue(queuehigh,handle_send_email_transaction,
name, rower.user.email, amount)
- return amount
+ return amount,''
else:
return 0,''
@@ -415,12 +415,4 @@ def get_transactions(start_date,end_date):
def mocktest(rower):
- nonce_from_the_client = 'aap'
- result = gateway.payment_method.create({
- "customer_id": rower.customer_id,
- "payment_method_nonce": nonce_from_the_client
- })
-
-
- return result.subscription.id
-
+ return '5'
diff --git a/rowers/tests/mocks.py b/rowers/tests/mocks.py
index b9e2eda7..d5c8119e 100644
--- a/rowers/tests/mocks.py
+++ b/rowers/tests/mocks.py
@@ -107,6 +107,8 @@ class mocked_canvas():
def print_figure(*args, **kwargs):
return True
+# Mocked Dataprep
+
def mocked_fetchcperg(*args, **kwargs):
df = pd.read_csv('rowers/tests/testdata/cpdataerg.csv')
@@ -156,6 +158,8 @@ def mocked_read_df_cols_sql_multiflex(ids, columns, convertnewtons=True):
return df, extracols
+# Mocked Strava
+
def mocked_stravaexport(f2,workoutname,stravatoken,description='',
activity_type='Rowing'):
print "this is mocked strava export"
@@ -172,6 +176,62 @@ class MockStravalibClient():
def update_activity(*args, **kwargs):
return StravaActivity()
+# Mocked Braintree
+
+## Higher level - unfortunately didn't succeed in mocking the gateway
+
+def mock_create_customer(*args, **kwargs):
+ return 121
+
+def mock_make_payment(*args, **kwargs):
+ return 15,''
+
+def mock_update_subscription(*args, **kwargs):
+ try:
+ rower = args[0]
+ data = args[1]
+ planid = data['plan']
+ plan = PaidPlan.objects.get(id=planid)
+ amount = data['amount']
+
+ rower.paidplan = plan
+ rower.planexpires = (datetime.datetime.now()+datetime.timedelta(days=365)).date()
+ rower.clubsize = plan.clubsize
+ rower.paymenttype = plan.paymenttype
+ rower.rowerplan = plan.shortname
+ rower.subscription_id = 12
+ rower.save()
+ except:
+ amount = 20
+
+ return True,amount
+
+def mock_create_subscription(*args, **kwargs):
+ return mock_update_subscription(*args, **kwargs)
+
+def mock_cancel_subscription(*args, **kwargs):
+ themessages = []
+ errormessages = []
+ try:
+ basicplans = PaidPlan.objects.filter(price=0,paymentprocessor='braintree')
+ rower.paidplan = basicplans[0]
+ rower.teamplanexpires = timezone.now()
+ rower.planexpires = timezone.now()
+ rower.clubsize = 0
+ rower.rowerplan = 'basic'
+ rower.subscription_id = None
+ rower.save()
+ themessages.append("Your plan was reset to basic")
+ except:
+ pass
+
+ return True, themessages,errormessages
+
+def mock_mocktest(*args, **kwargs):
+ return '121'
+
+## Gateway stuff (not working)
+
class gatewayresult():
def __init__(self,*args,**kwargs):
self.is_success = kwargs.pop('is_success',True)
@@ -309,7 +369,9 @@ def mocked_gateway(*args, **kwargs):
return MockBraintreeGateway()
-
+
+# Mocked Rowingdata
+
class mocked_rowingdata(rowingdata):
def __init__(self, *args, **kwargs):
super(mocked_rowingdata).__init__(*args, **kwargs)
@@ -354,7 +416,9 @@ class mocked_rowingdata(rowingdata):
fig1 = figure.Figure(figsize(12,10))
return fig1
-
+
+# Mocked Requests
+
# to be done add polar mocks (for email processing)
def mocked_requests(*args, **kwargs):
with open('rowers/tests/testdata/c2jsonworkoutdata.txt','r') as infile:
diff --git a/rowers/tests/statements.py b/rowers/tests/statements.py
index af2b577f..c609fee7 100644
--- a/rowers/tests/statements.py
+++ b/rowers/tests/statements.py
@@ -72,7 +72,14 @@ from rowers.utils import calculate_age
from rowers.tasks import handle_getagegrouprecords
+import inspect
+
def get_random_file(filename='rowers/tests/testdata/testdata.csv',name=''):
+
+ frm = inspect.stack()[3]
+ mod = inspect.getmodule(frm[0])
+ fromstring = 'test_%s_' % mod.__name__
+
row = rdata(filename)
totaldist = row.df['cum_dist'].max()
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
@@ -93,9 +100,9 @@ def get_random_file(filename='rowers/tests/testdata/testdata.csv',name=''):
extension = filename[-3:]
if name != '':
- newfilename = 'rowers/tests/testdata/temp/'+name+'.'+extension
+ newfilename = 'rowers/tests/testdata/temp/'+fromstring+name+'.'+extension
else:
- newfilename = 'rowers/tests/testdata/temp/'+uuid4().hex[:16]+'.'+extension
+ newfilename = 'rowers/tests/testdata/temp/'+fromstring+uuid4().hex[:16]+'.'+extension
copyfile(filename,newfilename)
@@ -127,13 +134,18 @@ class WorkoutFactory(factory.DjangoModelFactory):
name = factory.LazyAttribute(lambda _: faker.word())
notes = faker.text()
- startdatetime = get_random_file(name=faker.word())['startdatetime']
- starttime = get_random_file(name=faker.word())['starttime']
+ startdatetime = factory.LazyAttribute(
+ lambda _:get_random_file(name=faker.word())['startdatetime'])
+ starttime = factory.LazyAttribute(
+ lambda _:get_random_file(name=faker.word())['starttime'])
workouttype='water'
date=timezone.now().date()
- duration=get_random_file(name=faker.word())['duration']
- distance=get_random_file(name=faker.word())['totaldist']
- csvfilename=get_random_file(name=faker.word())['filename']
+ duration=factory.LazyAttribute(
+ lambda _:get_random_file(name=faker.word())['duration'])
+ distance=factory.LazyAttribute(
+ lambda _:get_random_file(name=faker.word())['totaldist'])
+ csvfilename=factory.LazyAttribute(
+ lambda _:get_random_file(name=faker.word())['filename'])
class SessionFactory(factory.DjangoModelFactory):
diff --git a/rowers/tests/test_aaa.py b/rowers/tests/test_payments.py
similarity index 71%
rename from rowers/tests/test_aaa.py
rename to rowers/tests/test_payments.py
index b095438b..df08f1d9 100644
--- a/rowers/tests/test_aaa.py
+++ b/rowers/tests/test_payments.py
@@ -53,8 +53,8 @@ class PaymentTest(TestCase):
# def tearDown(self):
# settings.DEBUG = False
- @patch('rowers.braintreestuff.gateway',side_effect=MockBraintreeGateway)
- def test_billing_view(self,mocked_gateway):
+ @patch('rowers.views.braintreestuff.create_customer',side_effect=mock_create_customer)
+ def test_billing_view(self,mocked_create_customer):
u = UserFactory()
r = Rower.objects.create(user=u,
birthdate=faker.profile()['birthdate'],
@@ -102,16 +102,16 @@ class PaymentTest(TestCase):
form = PlanSelectForm(form_data,paymentprocessor='braintree')
self.assertTrue(form.is_valid)
- #response = self.c.post(url,form_data,follow=True)
- #self.assertEqual(response.status_code,200)
+ response = self.c.post(url,form_data,follow=True)
+ self.assertEqual(response.status_code,200)
- #expected_url = '/rowers/checkout/'+str(plan.id)+'/'
+ expected_url = '/rowers/checkout/'+str(plan.id)+'/'
- #self.assertRedirects(response,
- # expected_url = expected_url,
- # status_code=302,target_status_code=200)
+ self.assertRedirects(response,
+ expected_url = expected_url,
+ status_code=302,target_status_code=200)
- @patch('rowers.braintreestuff.gateway',side_effect=MockBraintreeGateway)
+ @patch('rowers.views.braintreestuff.gateway',side_effect=MockBraintreeGateway)
def test_upgrade_view(self,mocked_gateway):
u = UserFactory()
r = Rower.objects.create(user=u,
@@ -174,7 +174,7 @@ class PaymentTest(TestCase):
expected_url = expected_url,
status_code=302,target_status_code=200)
- @patch('rowers.braintreestuff.gateway',side_effect=MockBraintreeGateway)
+ @patch('rowers.views.braintreestuff.gateway',side_effect=MockBraintreeGateway)
def test_down_view(self,mocked_gateway):
u = UserFactory()
r = Rower.objects.create(user=u,
@@ -240,7 +240,7 @@ class PaymentTest(TestCase):
expected_url = expected_url,
status_code=302,target_status_code=200)
- @patch('rowers.braintreestuff.gateway',side_effect=MockBraintreeGateway)
+ @patch('rowers.views.braintreestuff.gateway',side_effect=MockBraintreeGateway)
def test_planstop_view(self,mocked_gateway):
u = UserFactory()
r = Rower.objects.create(user=u,
@@ -278,7 +278,7 @@ class PaymentTest(TestCase):
self.assertEqual(response.status_code,200)
- @patch('rowers.braintreestuff.gateway',side_effect=MockBraintreeGateway)
+ @patch('rowers.views.braintreestuff.gateway',side_effect=MockBraintreeGateway)
def test_planstobasic_view(self,mocked_gateway):
u = UserFactory()
r = Rower.objects.create(user=u,
@@ -318,8 +318,8 @@ class PaymentTest(TestCase):
expected_url = '/rowers/me/cancelsubscriptions/',
status_code=302,target_status_code=200)
- @patch('rowers.braintreestuff.gateway', return_value = MockBraintreeGateway)
- def test_patch(self, MockBraintreeGateway):
+ @patch('rowers.tests.test_payments.mocktest', side_effect=mock_mocktest)
+ def test_patch(self, mock_mocktest):
u = UserFactory()
r = Rower.objects.create(user=u,
birthdate=faker.profile()['birthdate'],
@@ -339,8 +339,8 @@ class PaymentTest(TestCase):
result = mocktest(r)
self.assertEqual(result,'121')
- @patch('rowers.braintreestuff.gateway', side_effect=MockBraintreeGateway)
- def test_checkouts_view(self,mocked_gateway):
+ @patch('rowers.views.braintreestuff.create_subscription', side_effect=mock_create_subscription)
+ def test_checkouts_view(self,mock_subscription):
u = UserFactory()
r = Rower.objects.create(user=u,
birthdate=faker.profile()['birthdate'],
@@ -373,11 +373,99 @@ class PaymentTest(TestCase):
login = self.c.login(username=u.username, password=self.password)
self.assertTrue(login)
- # url = '/rowers/checkouts/'
+ url = '/rowers/checkouts/'
- # response = self.c.post(url, form_data,follow=True)
- # self.assertEqual(response.status_code,200)
+ response = self.c.post(url, form_data,follow=True)
+ self.assertEqual(response.status_code,200)
- #self.assertRedirects(response,
- # expected_url = '/rowers/paymentcompleted/',
- # status_code=302,target_status_code=200)
+ self.assertRedirects(response,
+ expected_url = '/rowers/paymentcompleted/?amount=20.00',
+ status_code=302,target_status_code=200)
+
+
+ @patch('rowers.views.braintreestuff.update_subscription', side_effect=mock_update_subscription)
+ def test_upgrade_checkouts_view(self,mock_subscription):
+ u = UserFactory()
+ r = Rower.objects.create(user=u,
+ birthdate=faker.profile()['birthdate'],
+ gdproptin=True,
+ gdproptindate=timezone.now(),
+ rowerplan='coach',
+ paymentprocessor='braintree',
+ street_address = faker.street_address(),
+ city = faker.city(),
+ postal_code = faker.postalcode(),
+ country = faker.country(),
+ )
+
+ r.save()
+ u.set_password(self.password)
+ u.save()
+
+ plans = PaidPlan.objects.all().order_by('price')
+ plan = plans[1]
+
+ form_data = {
+ 'amount':'15.00',
+ 'plan': plans[1].id,
+ 'payment_method_nonce': 'aap',
+ }
+
+ form = BillingForm(form_data)
+ self.assertTrue(form.is_valid)
+
+ login = self.c.login(username=u.username, password=self.password)
+ self.assertTrue(login)
+
+ url = '/rowers/upgradecheckouts/'
+
+ response = self.c.post(url, form_data,follow=True)
+ self.assertEqual(response.status_code,200)
+
+ self.assertRedirects(response,
+ expected_url = '/rowers/paymentcompleted/?amount=20.00',
+ status_code=302,target_status_code=200)
+
+ @patch('rowers.views.braintreestuff.update_subscription', side_effect=mock_update_subscription)
+ def test_downgrade_checkouts_view(self,mock_subscription):
+ u = UserFactory()
+ r = Rower.objects.create(user=u,
+ birthdate=faker.profile()['birthdate'],
+ gdproptin=True,
+ gdproptindate=timezone.now(),
+ rowerplan='coach',
+ paymentprocessor='braintree',
+ street_address = faker.street_address(),
+ city = faker.city(),
+ postal_code = faker.postalcode(),
+ country = faker.country(),
+ )
+
+ r.save()
+ u.set_password(self.password)
+ u.save()
+
+ plans = PaidPlan.objects.all().order_by('price')
+ plan = plans[1]
+
+ form_data = {
+ 'amount':'15.00',
+ 'plan': plans[1].id,
+ 'payment_method_nonce': 'aap',
+ }
+
+ form = BillingForm(form_data)
+ self.assertTrue(form.is_valid)
+
+ login = self.c.login(username=u.username, password=self.password)
+ self.assertTrue(login)
+
+ url = '/rowers/downgradecheckouts/'
+
+ response = self.c.post(url, form_data,follow=True)
+ self.assertEqual(response.status_code,200)
+
+ self.assertRedirects(response,
+ expected_url = '/rowers/downgradecompleted/',
+ status_code=302,target_status_code=200)
+
diff --git a/rowers/tests/test_simplefunctions.py b/rowers/tests/test_simplefunctions.py
index 18e5fa94..08bc2493 100644
--- a/rowers/tests/test_simplefunctions.py
+++ b/rowers/tests/test_simplefunctions.py
@@ -44,8 +44,32 @@ class SimpleViewTest(TestCase):
response = self.c.get(url)
self.assertIn(response.status_code,[403,404])
-
+ def test_sendmail(self):
+ login = self.c.login(username=self.u.username, password=self.password)
+ self.assertTrue(login)
+ url = '/rowers/email/send/'
+
+ form_data = {
+ 'firstname': 'John',
+ 'lastname':'Doe',
+ 'email':'roosendaalsander@gmail.com',
+ 'subject':'testing',
+ 'botcheck': True,
+ 'message': faker.text()
+ }
+
+ form = EmailForm(form_data)
+
+ self.assertTrue(form.is_valid)
+
+ response = self.c.post(url,form_data,follow=True)
+ self.assertEqual(response.status_code,200)
+
+ self.assertRedirects(response,
+ expected_url='/rowerss/email/',
+ status_code=302,target_status_code=200)
+
def test_getworkout(self):
with assert_raises(Http404):
diff --git a/rowers/tests/testdata/testdata.csv.gz b/rowers/tests/testdata/testdata.csv.gz
index 7b858bd5..3a9b7c02 100644
Binary files a/rowers/tests/testdata/testdata.csv.gz and b/rowers/tests/testdata/testdata.csv.gz differ
diff --git a/rowers/tests/testdata/testdata.tcx b/rowers/tests/testdata/testdata.tcx
index 05f3e4af..15c2daa8 100644
--- a/rowers/tests/testdata/testdata.tcx
+++ b/rowers/tests/testdata/testdata.tcx
@@ -2502,7 +2502,7 @@
- <Element 'Notes' at 0x13e2d080>
+ <Element 'Notes' at 0x13397b70>