diff --git a/rowers/.coveragerc b/.coveragerc
similarity index 100%
rename from rowers/.coveragerc
rename to .coveragerc
diff --git a/rowers/tests/test_simplefunctions.py b/rowers/tests/test_simplefunctions.py
new file mode 100644
index 00000000..3baac7d5
--- /dev/null
+++ b/rowers/tests/test_simplefunctions.py
@@ -0,0 +1,129 @@
+from statements import *
+from nose.tools import *
+
+from rowers.views import *
+
+from django.http import Http404
+from django.core.exceptions import PermissionDenied
+
+filename = 'rowers/tests/testdata/testdata.csv'
+
+row = rdata(filename)
+totaldist = row.df['cum_dist'].max()
+totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
+totaltime = totaltime+row.df.ix[0,' ElapsedTime (sec)']
+
+
+hours = int(totaltime/3600.)
+minutes = int((totaltime - 3600.*hours)/60.)
+seconds = int(totaltime - 3600.*hours - 60.*minutes)
+tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
+
+duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
+duration = datetime.time(hour=hours,minute=minutes,second=seconds)
+
+workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
+workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
+
+nu = datetime.datetime.now()
+
+class UserFactory(factory.DjangoModelFactory):
+ class Meta:
+ model = User
+
+ email = faker.email()
+ username = faker.profile()['username']
+
+ first_name = faker.name().split(' ')[0]
+ last_name = faker.name().split(' ')[0]
+
+class WorkoutFactory(factory.DjangoModelFactory):
+ class Meta:
+ model = Workout
+
+ name = factory.LazyAttribute(lambda _: faker.word())
+ notes = faker.text()
+ startdatetime = row.rowdatetime
+ starttime = workoutstarttime
+ workouttype='water'
+ date=timezone.now().date()
+ duration=duration
+ distance=totaldist
+ csvfilename=filename
+
+class SessionFactory(factory.DjangoModelFactory):
+ class Meta:
+ model = PlannedSession
+
+ name = factory.LazyAttribute(lambda _: faker.word())
+ comment = faker.text()
+
+# tests simple functions from views.py
+class SimpleViewTest(TestCase):
+ def setUp(self):
+ self.u = UserFactory()
+
+ self.r = Rower.objects.create(user=self.u,
+ birthdate=faker.profile()['birthdate'],
+ gdproptin=True,
+ gdproptindate=timezone.now(),
+ rowerplan='coach')
+
+ self.c = Client()
+ self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
+ # self.factory = RequestFactory()
+ self.password = faker.word()
+ self.u.set_password(self.password)
+ self.u.save()
+
+ def test_getrequestrower(self):
+ user_no_rower = UserFactory(username='norower')
+ user_no_rower.set_password(faker.word())
+
+
+ login = self.c.login(username=self.u.username, password=self.password)
+ self.assertTrue(login)
+
+ url = '/rowers/list-workouts/user/{id}/'.format(id=user_no_rower.id)
+
+ response = self.c.get(url)
+ self.assertIn(response.status_code,[403,404])
+
+
+
+
+# def test_getworkout(self):
+# with assert_raises(Http404):
+# w = get_workout(123)
+
+ def test_deactivate(self):
+ login = self.c.login(username=self.u.username, password=self.password)
+ self.assertTrue(login)
+
+ url = '/rowers/me/deactivate/'
+ response = self.c.get(url)
+ self.assertEqual(response.status_code,200)
+
+ form_data = {
+ 'is_active': True
+ }
+
+ response = self.c.post(url, form_data)
+ self.assertEqual(response.status_code, 200)
+
+ form_data = {
+ 'is_active': False
+ }
+
+ response = self.c.post(url, form_data, follow=True)
+ self.assertEqual(response.status_code, 200)
+ self.assertRedirects(response,
+ expected_url='/login/',
+ status_code=302,target_status_code=200)
+
+ login = self.c.login(username=self.u.username, password=self.password)
+ self.assertEqual(login,False)
+
+
+
+
diff --git a/rowers/tests/test_urls.py b/rowers/tests/test_urls.py
index 0da636b5..9bf036fc 100644
--- a/rowers/tests/test_urls.py
+++ b/rowers/tests/test_urls.py
@@ -326,4 +326,4 @@ class URLTests(TestCase):
else:
tested.append(u)
-
+
diff --git a/rowers/tests/testdata/testdata.csv.gz b/rowers/tests/testdata/testdata.csv.gz
index 127c7482..c350ca0e 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 7e293a79..1981775e 100644
--- a/rowers/tests/testdata/testdata.tcx
+++ b/rowers/tests/testdata/testdata.tcx
@@ -2502,7 +2502,7 @@
- <Element 'Notes' at 0x13694ac8>
+ <Element 'Notes' at 0x15213400>
diff --git a/rowers/views.py b/rowers/views.py
index 9c5685bc..396cf585 100644
--- a/rowers/views.py
+++ b/rowers/views.py
@@ -742,31 +742,33 @@ def deactivate_user(request):
if request.method == "POST":
user_form = DeactivateUserForm(request.POST, instance=user)
if user_form.is_valid():
- r = Rower.objects.get(user=user)
- if r.paidplan is not None and r.paidplan.paymentprocessor == 'braintree':
- try:
- subscriptions = braintreestuff.find_subscriptions(r)
- for subscription in subscriptions:
- success, themessages,errormessages = braintreestuff.cancel_subscription(r,id)
- for message in themessages:
- messages.info(request,message)
- except ProcessorCustomerError:
- pass
+ if not user_form.cleaned_data['is_active']:
+ r = Rower.objects.get(user=user)
+ if r.paidplan is not None and r.paidplan.paymentprocessor == 'braintree':
+ try:
+ subscriptions = braintreestuff.find_subscriptions(r)
+ for subscription in subscriptions:
+ success, themessages,errormessages = braintreestuff.cancel_subscription(r,id)
+ for message in themessages:
+ messages.info(request,message)
+ except ProcessorCustomerError:
+ pass
- r.paidplan = None
- r.teamplanexpires = timezone.now()
- r.planexpires = timezone.now()
- r.clubsize = 0
- r.rowerplan = 'basic'
- r.save()
+ r.paidplan = None
+ r.teamplanexpires = timezone.now()
+ r.planexpires = timezone.now()
+ r.clubsize = 0
+ r.rowerplan = 'basic'
+ r.save()
- deactivate_user = user_form.save(commit=False)
- user.is_active = False
- user.save()
- deactivate_user.save()
-# url = reverse(auth_views.logout_then_login)
- url = '/logout/?next=/login'
- return HttpResponseRedirect(url)
+ deactivate_user = user_form.save(commit=False)
+ user.is_active = False
+ user.save()
+ deactivate_user.save()
+ # url = reverse(auth_views.logout_then_login)
+ url = '/logout/?next=/login'
+ return HttpResponseRedirect(url)
+
return render(request, "userprofile_deactivate.html", {
"user_form": user_form,
})
@@ -19344,7 +19346,6 @@ def allsundays(startdate,enddate):
message="This functionality requires a Coach or Self-Coach plan",
redirect_field_name=None)
def planmesocyclebyweek(request,id=0,userid=0):
- print 'planning by week'
try:
cycle = TrainingMesoCycle.objects.get(id=id)
except TrainingMesoCycle.DoesNotExist:
@@ -19365,7 +19366,7 @@ def planmesocyclebyweek(request,id=0,userid=0):
if sundays and sundays[-1] < cycle.enddate:
sundays = sundays+[cycle.enddate]
- else:
+ elif not sundays:
sundays = [cycle.enddate]
for i in range(len(sundays)):
diff --git a/templates/newbasefront.html b/templates/newbasefront.html
index b09db75d..a131aeb8 100644
--- a/templates/newbasefront.html
+++ b/templates/newbasefront.html
@@ -319,7 +319,7 @@
Rowing Data Facebook Group
- Rowing Physics
+ Rowing Physics