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