replan by weeks fixing #417
This commit is contained in:
129
rowers/tests/test_simplefunctions.py
Normal file
129
rowers/tests/test_simplefunctions.py
Normal file
@@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BIN
rowers/tests/testdata/testdata.csv.gz
vendored
BIN
rowers/tests/testdata/testdata.csv.gz
vendored
Binary file not shown.
2
rowers/tests/testdata/testdata.tcx
vendored
2
rowers/tests/testdata/testdata.tcx
vendored
@@ -2502,7 +2502,7 @@
|
|||||||
</Trackpoint>
|
</Trackpoint>
|
||||||
</Track>
|
</Track>
|
||||||
</Lap>
|
</Lap>
|
||||||
<Notes><Element 'Notes' at 0x13694ac8></Notes>
|
<Notes><Element 'Notes' at 0x15213400></Notes>
|
||||||
</Activity>
|
</Activity>
|
||||||
</Activities>
|
</Activities>
|
||||||
<Creator>
|
<Creator>
|
||||||
|
|||||||
@@ -742,6 +742,7 @@ def deactivate_user(request):
|
|||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
user_form = DeactivateUserForm(request.POST, instance=user)
|
user_form = DeactivateUserForm(request.POST, instance=user)
|
||||||
if user_form.is_valid():
|
if user_form.is_valid():
|
||||||
|
if not user_form.cleaned_data['is_active']:
|
||||||
r = Rower.objects.get(user=user)
|
r = Rower.objects.get(user=user)
|
||||||
if r.paidplan is not None and r.paidplan.paymentprocessor == 'braintree':
|
if r.paidplan is not None and r.paidplan.paymentprocessor == 'braintree':
|
||||||
try:
|
try:
|
||||||
@@ -764,9 +765,10 @@ def deactivate_user(request):
|
|||||||
user.is_active = False
|
user.is_active = False
|
||||||
user.save()
|
user.save()
|
||||||
deactivate_user.save()
|
deactivate_user.save()
|
||||||
# url = reverse(auth_views.logout_then_login)
|
# url = reverse(auth_views.logout_then_login)
|
||||||
url = '/logout/?next=/login'
|
url = '/logout/?next=/login'
|
||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
|
|
||||||
return render(request, "userprofile_deactivate.html", {
|
return render(request, "userprofile_deactivate.html", {
|
||||||
"user_form": user_form,
|
"user_form": user_form,
|
||||||
})
|
})
|
||||||
@@ -19344,7 +19346,6 @@ def allsundays(startdate,enddate):
|
|||||||
message="This functionality requires a Coach or Self-Coach plan",
|
message="This functionality requires a Coach or Self-Coach plan",
|
||||||
redirect_field_name=None)
|
redirect_field_name=None)
|
||||||
def planmesocyclebyweek(request,id=0,userid=0):
|
def planmesocyclebyweek(request,id=0,userid=0):
|
||||||
print 'planning by week'
|
|
||||||
try:
|
try:
|
||||||
cycle = TrainingMesoCycle.objects.get(id=id)
|
cycle = TrainingMesoCycle.objects.get(id=id)
|
||||||
except TrainingMesoCycle.DoesNotExist:
|
except TrainingMesoCycle.DoesNotExist:
|
||||||
@@ -19365,7 +19366,7 @@ def planmesocyclebyweek(request,id=0,userid=0):
|
|||||||
|
|
||||||
if sundays and sundays[-1] < cycle.enddate:
|
if sundays and sundays[-1] < cycle.enddate:
|
||||||
sundays = sundays+[cycle.enddate]
|
sundays = sundays+[cycle.enddate]
|
||||||
else:
|
elif not sundays:
|
||||||
sundays = [cycle.enddate]
|
sundays = [cycle.enddate]
|
||||||
|
|
||||||
for i in range(len(sundays)):
|
for i in range(len(sundays)):
|
||||||
|
|||||||
@@ -319,7 +319,7 @@
|
|||||||
Rowing Data Facebook Group</a>
|
Rowing Data Facebook Group</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="/rowers/physics">Rowing Physics</a>
|
<a href="/rowers/physics/">Rowing Physics</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
Reference in New Issue
Block a user