diff --git a/rowers/tests/test_fakers.py b/rowers/tests/test_fakers.py deleted file mode 100644 index 04969fb4..00000000 --- a/rowers/tests/test_fakers.py +++ /dev/null @@ -1,177 +0,0 @@ -#from __future__ import print_function -import pytest - -pytestmark = pytest.mark.django_db - -from bs4 import BeautifulSoup -import re -from nose_parameterized import parameterized -from django.test import TestCase, Client,override_settings, RequestFactory - -from django.core.management import call_command -from django.utils.six import StringIO -from django.test.client import RequestFactory -from rowers.views import checkworkoutuser,c2_open, multi_compare_view - -from rowers.forms import ( - DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail, - ChartParamChoiceForm,WorkoutMultipleCompareForm) -import rowers.plots as plots -import rowers.interactiveplots as iplots -import datetime -from rowingdata import rowingdata as rdata -from rowingdata import rower as rrower -from django.utils import timezone -from rowers.rows import handle_uploaded_file -from django.core.files.uploadedfile import SimpleUploadedFile -from time import strftime,strptime,mktime,time,daylight -import os -from rowers.tasks import handle_makeplot -from rowers.utils import serialize_list,deserialize_list -from rowers.utils import NoTokenError -from shutil import copyfile -from nose.tools import assert_true -from mock import Mock, patch -from minimocktest import MockTestCase -import pandas as pd -import rowers.c2stuff as c2stuff - -import json -import numpy as np - -from rowers import urls -from rowers.views import ( - error500_view,error404_view,error400_view,error403_view - ) - -from rowers.dataprep import delete_strokedata -from django.contrib.sessions.middleware import SessionMiddleware - -from redis import StrictRedis -redis_connection = StrictRedis() - -from django_mailbox.models import Mailbox,MessageAttachment,Message - -from rowers.tests.mocks import * - -from rowers.models import * -from rowers.tests.mocks import * -import factory -from faker import Factory - -faker = Factory.create() - -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 ModelObjectsTest(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() - - @patch('rowers.dataprep.create_engine') - @patch('rowers.dataprep.getsmallrowdata_db') - def test_workouts_compare(self, mocked_sqlalchemy, - mocked_getsmallrowdata_db): - - login = self.c.login(username=self.u.username, password=self.password) - self.assertTrue(login) - - url = '/rowers/team-compare-select/workout/1/team/0/user/1/' - - response = self.c.get(url) - self.assertEqual(response.status_code,200) - - @patch('rowers.dataprep.create_engine') - @patch('rowers.dataprep.getsmallrowdata_db') - def test_workouts_compare_submit(self, mocked_sqlalchemy, - mocked_getsmallrowdata_db): - - login = self.c.login(username=self.u.username,password=self.password) - self.assertTrue(login) - - form_data = { - 'chartform':'Compare', - 'plottype':'scatter', - 'teamid':0, - 'workouts':['1','2','3'], - 'xparam':'distance', - 'yparam':'hr', - } - - form = WorkoutMultipleCompareForm(form_data) - chartform = ChartParamChoiceForm(form_data) - self.assertTrue(form.is_valid) - self.assertTrue(chartform.is_valid) - -# request = self.factory.post('/rowers/multi-compare/') -# request.user = self.u -# request.POST = form_data - -# SessionMiddleware().process_request(request) - -# request.session['ids'] = [] - -# response = multi_compare_view(request) - -# self.assertEqual(response.status_code, 200) - - response = self.c.post('/rowers/multi-compare/',form_data) - - self.assertEqual(response.status_code,200) - - diff --git a/rowers/tests/test_models.py b/rowers/tests/test_models.py index a054bbb7..08c0b88e 100644 --- a/rowers/tests/test_models.py +++ b/rowers/tests/test_models.py @@ -1,48 +1,210 @@ -from django.test import TestCase +#from __future__ import print_function +import pytest + +pytestmark = pytest.mark.django_db + +from bs4 import BeautifulSoup +import re +from nose_parameterized import parameterized +from django.test import TestCase, Client,override_settings, RequestFactory + +from django.core.management import call_command +from django.utils.six import StringIO +from django.test.client import RequestFactory +from rowers.views import checkworkoutuser,c2_open, multi_compare_view + +from rowers.forms import ( + DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail, + ChartParamChoiceForm,WorkoutMultipleCompareForm) +import rowers.plots as plots +import rowers.interactiveplots as iplots +import datetime +from rowingdata import rowingdata as rdata +from rowingdata import rower as rrower +from django.utils import timezone +from rowers.rows import handle_uploaded_file +from django.core.files.uploadedfile import SimpleUploadedFile +from time import strftime,strptime,mktime,time,daylight +import os +from rowers.tasks import handle_makeplot +from rowers.utils import serialize_list,deserialize_list +from rowers.utils import NoTokenError +from shutil import copyfile +from nose.tools import assert_true +from mock import Mock, patch +from minimocktest import MockTestCase +import pandas as pd +import rowers.c2stuff as c2stuff + +import json +import numpy as np + +from rowers import urls +from rowers.views import ( + error500_view,error404_view,error400_view,error403_view + ) + +from rowers.dataprep import delete_strokedata +from django.contrib.sessions.middleware import SessionMiddleware + +from redis import StrictRedis +redis_connection = StrictRedis() + +from django_mailbox.models import Mailbox,MessageAttachment,Message + +from rowers.tests.mocks import * + from rowers.models import * +from rowers.tests.mocks import * +import factory +from faker import Factory -class FormTests(TestCase): +faker = Factory.create() + +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() + + +class WorkoutCompareTest(TestCase): def setUp(self): - self.u = User.objects.create_user('john', - 'sander@ds.ds', - 'koeinsloot') + self.u = UserFactory() + + self.r = Rower.objects.create(user=self.u, + birthdate=faker.profile()['birthdate'], + gdproptin=True, + gdproptindate=timezone.now(), + rowerplan='coach') - r = Rower.objects.create(user=self.u) - - - def test_form(self): - form = TeamInviteForm() - - -class ModelTests(TestCase): - def setUp(self): - self.u = User.objects.create_user('john', - 'Sander@ds.ds', - 'koeinsloot') - - self.u.first_name = 'Sander' - self.u.last_name = 'Roosendaal' + 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() - self.r = Rower.objects.create(user=self.u) + @patch('rowers.dataprep.create_engine') + @patch('rowers.dataprep.getsmallrowdata_db') + def test_workouts_compare(self, mocked_sqlalchemy, + mocked_getsmallrowdata_db): - def create_team(self): - return Team.objects.create( - name = 'test team', - manager = self.u, - ) + login = self.c.login(username=self.u.username, password=self.password) + self.assertTrue(login) + + url = '/rowers/team-compare-select/workout/1/team/0/user/1/' - def create_paidplan(self): - return PaidPlan.objects.create( - name = 'test plan', - shortname = 'pro', - price = 15.0, - ) + response = self.c.get(url) + self.assertEqual(response.status_code,200) - def test_models(self): - pp = self.create_paidplan() - team = self.create_team() - self.assertEqual(u'%s' % pp,u'test plan - pro at 15.00 EURO (single payment)') - self.assertEqual(u'%s' % self.r, u'Sander Roosendaal') - self.assertEqual('%s' % self.r, 'Sander Roosendaal') - self.assertEqual(self.r.clean_email(),'sander@ds.ds') + @patch('rowers.dataprep.create_engine') + @patch('rowers.dataprep.getsmallrowdata_db') + def test_workouts_compare_submit(self, mocked_sqlalchemy, + mocked_getsmallrowdata_db): + + login = self.c.login(username=self.u.username,password=self.password) + self.assertTrue(login) + + form_data = { + 'chartform':'Compare', + 'plottype':'scatter', + 'teamid':0, + 'workouts':['1','2','3'], + 'xparam':'distance', + 'yparam':'hr', + } + + form = WorkoutMultipleCompareForm(form_data) + chartform = ChartParamChoiceForm(form_data) + self.assertTrue(form.is_valid) + self.assertTrue(chartform.is_valid) + + response = self.c.post('/rowers/multi-compare/',form_data) + + self.assertEqual(response.status_code,200) + + +class PlannedSessionTests(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() + self.user_sessions = SessionFactory.create_batch( + 5, + manager=self.u, + rower=self.r) + + def test_ics_download(self): + login = self.c.login(username=self.u.username,password=self.password) + self.assertTrue(login) + + response = self.c.get('/rowers/sessions/sendcalendar/') + self.assertEqual(response.status_code,200) + + filename = 'training_plan_{u}_{d1}_{d2}.ics'.format( + u = self.u.username, + d1 = timezone.now().date().strftime("%Y%m%d"), + d2 = a_week_from_now.date().strftime("%Y%m%d"), + ) + self.assertEquals( + response.get('Content-Disposition'), + "attachment; filename={name}".format(name=filename) + ) diff --git a/rowers/tests/testdata/testdata.csv.gz b/rowers/tests/testdata/testdata.csv.gz index 6a7f2b58..daba0e6d 100644 Binary files a/rowers/tests/testdata/testdata.csv.gz and b/rowers/tests/testdata/testdata.csv.gz differ diff --git a/rowers/views.py b/rowers/views.py index a2ab56d6..28a62e3a 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -1947,7 +1947,12 @@ def plannedsessions_icsemail_view(request,userid=0): response = HttpResponse(cal.to_ical()) - response['Content-Disposition'] = 'attachment; filename="training_plan_%s.ics"' % request.user.id + response['Content-Disposition'] = 'attachment; filename="training_plan_{u}_{d1}_{d2}.ics"'.format( + u = request.user.username, + d1 = startdate.strftime("%Y%m%d"), + d2 = enddate.strftime("%Y%m%d"), + ) + response['Content-Type'] = 'application/octet-stream' return response