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>