diff --git a/rowers/models.py b/rowers/models.py index 29322052..2c72bb72 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -336,10 +336,15 @@ class TeamInvite(models.Model): class TeamInviteForm(ModelForm): user = UserFullnameChoiceField(queryset=User.objects.all(),required=False) + email = forms.EmailField(required=False) class Meta: model = TeamInvite fields = ['user','email'] + + + + class TeamRequest(models.Model): team = models.ForeignKey(Team) user = models.ForeignKey(User,null=True) diff --git a/rowers/templates/team.html b/rowers/templates/team.html index 28dfa2d5..630a7458 100644 --- a/rowers/templates/team.html +++ b/rowers/templates/team.html @@ -39,7 +39,7 @@ {% for member in members %} {% if team.manager == user %} - {{ member.user.first_name }} {{ member.user.last_name }} + {{ member.user.first_name }} {{ member.user.last_name }} Drop {% else %} {{ member.user.first_name }} {{ member.user.last_name }} diff --git a/rowers/tests/__init__.py b/rowers/tests/__init__.py index 2fafdadc..1d24c3ed 100644 --- a/rowers/tests/__init__.py +++ b/rowers/tests/__init__.py @@ -19,3 +19,5 @@ pkg_mox = None # pkg_mox.UnsetStubs() #from tests import * + +#from __future__ import print_function diff --git a/rowers/tests/statements.py b/rowers/tests/statements.py new file mode 100644 index 00000000..5a0fe552 --- /dev/null +++ b/rowers/tests/statements.py @@ -0,0 +1,66 @@ +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, + BoxPlotChoiceForm) +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 rowers.plannedsessions import get_dates_timeperiod +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 django.conf import settings +from importlib import import_module + +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() diff --git a/rowers/tests/test_models.py b/rowers/tests/test_models.py index 84e0e720..160fa060 100644 --- a/rowers/tests/test_models.py +++ b/rowers/tests/test_models.py @@ -1,70 +1,4 @@ -#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, - BoxPlotChoiceForm) -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 rowers.plannedsessions import get_dates_timeperiod -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 django.conf import settings -from importlib import import_module - -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() +from statements import * filename = 'rowers/tests/testdata/testdata.csv' diff --git a/rowers/tests/test_teams.py b/rowers/tests/test_teams.py new file mode 100644 index 00000000..cb289809 --- /dev/null +++ b/rowers/tests/test_teams.py @@ -0,0 +1,127 @@ +from statements import * + +nu = datetime.datetime.now() + +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') + +from rowers.teams import * + +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 TeamFactory(factory.DjangoModelFactory): + class Meta: + model = Team + + name = factory.LazyAttribute(lambda _: faker.word()) + notes = faker.text() + private = 'open' + viewing = 'allmembers' + +class TeamCreateFactory(TestCase): + def setUp(self): + self.user_passwords = [] + usernames = [ + 'user1', + 'user2', + 'user3', + 'user4', + 'user5', + 'user6', + ] + self.users = [] + + for i in range(6): + u = UserFactory(username=usernames[i]) + self.users.append(u) + + r = Rower.objects.create( + birthdate=faker.profile()['birthdate'], + gdproptin=True, + gdproptindate=timezone.now(), + rowerplan='coach', + user=u + ) + r.save() + + password = faker.word() + u.set_password(password) + u.save() + self.user_passwords.append(password) + + + workouts = WorkoutFactory.create_batch(5, user=r) + + + self.c = Client() + + self.u = self.users[0] + self.password = self.user_passwords[0] + + self.t = TeamFactory(manager=self.u) + + + def test_teamview(self): + login = self.c.login(username=self.u.username, password = self.password) + self.assertTrue(login) + + url = '/rowers/team/{t}/'.format(t=self.t.id) + response = self.c.get(url) + self.assertEqual(response.status_code, 200) + + def test_teamview_member(self): + + id,comment = add_member(self.t.id,self.users[1].rower) + self.assertEqual(id,self.t.id) + + login = self.c.login(username=self.users[1].username, password = self.user_passwords[1]) + self.assertTrue(login) + + url = '/rowers/team/{t}/'.format(t=self.t.id) + response = self.c.get(url) + self.assertEqual(response.status_code, 200) diff --git a/rowers/tests/testdata/testdata.csv.gz b/rowers/tests/testdata/testdata.csv.gz index 517a0040..6ea9289a 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 341bce49..0ea523a9 100644 --- a/rowers/tests/testdata/testdata.tcx +++ b/rowers/tests/testdata/testdata.tcx @@ -2502,7 +2502,7 @@ - <Element 'Notes' at 0x134f79e8> + <Element 'Notes' at 0x1469d4a8>