1420 lines
48 KiB
Python
1420 lines
48 KiB
Python
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import print_function
|
|
from __future__ import unicode_literals
|
|
|
|
from django.test import RequestFactory
|
|
|
|
#from __future__ import print_function
|
|
from .statements import *
|
|
nu = datetime.datetime.now()
|
|
|
|
from rowers.utils import allmonths,allsundays
|
|
|
|
import rowers.plannedsessions as plannedsessions
|
|
import rowers.courses as courses
|
|
import rowers.tasks as tasks
|
|
from rowers.views.racesviews import *
|
|
from rowers.utils import calculate_age
|
|
from rowers.views import addmanual_view, virtualevent_compare_view, virtualevent_create_view, fastestvirtualevent_create_view
|
|
|
|
from django.contrib.messages.storage.fallback import FallbackStorage
|
|
from django.contrib.sessions.middleware import SessionMiddleware
|
|
|
|
from base64 import b64encode
|
|
import base64
|
|
|
|
|
|
from django.core.files.base import File
|
|
from io import BytesIO
|
|
|
|
from PIL import Image
|
|
from io import StringIO
|
|
|
|
from django.core.files.uploadedfile import InMemoryUploadedFile
|
|
from django.core.files.uploadedfile import SimpleUploadedFile
|
|
|
|
def create_image(storage, filename, size=(100, 100), image_mode='RGB', image_format='PNG'):
|
|
"""
|
|
Generate a test image, returning the filename that it was saved as.
|
|
|
|
If ``storage`` is ``None``, the BytesIO containing the image data
|
|
will be passed instead.
|
|
"""
|
|
data = BytesIO()
|
|
Image.new(image_mode, size).save(data, image_format)
|
|
data.seek(0)
|
|
if not storage:
|
|
return data
|
|
image_file = ContentFile(
|
|
b64encode(data.read())
|
|
)
|
|
return storage.save(filename, image_file)
|
|
|
|
@override_settings(TESTING=True)
|
|
class ChallengesTest(TestCase):
|
|
def setUp(self):
|
|
self.u = UserFactory()
|
|
|
|
self.r = Rower.objects.create(user=self.u,
|
|
birthdate=datetime.datetime.now()-datetime.timedelta(days=25*365),
|
|
gdproptin=True, ftpset=True,surveydone=True,
|
|
gdproptindate=timezone.now(),
|
|
rowerplan='coach')
|
|
|
|
self.u2 = UserFactory()
|
|
self.r2 = Rower.objects.create(user=self.u2,
|
|
birthdate=datetime.datetime.now()-datetime.timedelta(days=28*365),
|
|
gdproptin=True, ftpset=True,surveydone=True,
|
|
gdproptindate=timezone.now(),
|
|
rowerplan='basic')
|
|
|
|
self.u3 = UserFactory()
|
|
self.follower = Rower.objects.create(user=self.u3,
|
|
birthdate=datetime.datetime.now()-datetime.timedelta(days=28*365),
|
|
gdproptin=True, ftpset=True,surveydone=True,
|
|
gdproptindate=timezone.now(),
|
|
rowerplan='basic')
|
|
|
|
|
|
|
|
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()
|
|
|
|
cs = courses.kmltocourse('rowers/tests/testdata/thyro.kml')
|
|
course = cs[0]
|
|
cname = course['name']
|
|
cnotes = course['description']
|
|
polygons = course['polygons']
|
|
self.ThyroBaantje = courses.createcourse(self.r,cname,polygons,notes=cnotes)
|
|
self.ThyroBaantje.save()
|
|
|
|
id = save_scoring('Standard Scoring',self.u,'rowers/tests/testdata/coursestandard.csv',id=0)
|
|
self.Scoring = StandardCollection.objects.get(id=id)
|
|
|
|
result = get_random_file(filename='rowers/tests/testdata/thyro.csv')
|
|
self.wthyro = WorkoutFactory(user=self.r,
|
|
csvfilename=result['filename'],
|
|
starttime=result['starttime'],
|
|
startdatetime=result['startdatetime'],
|
|
duration=result['duration'],
|
|
distance=result['totaldist'],
|
|
workouttype = 'water',
|
|
)
|
|
|
|
|
|
self.wthyro.startdatetime = arrow.get(nu).datetime
|
|
self.wthyro.date = nu.date()
|
|
self.wthyro.save()
|
|
|
|
result = get_random_file(filename='rowers/tests/testdata/thyro.csv')
|
|
self.w_strava = WorkoutFactory(user=self.r,
|
|
csvfilename=result['filename'],
|
|
starttime=result['starttime'],
|
|
startdatetime=result['startdatetime'],
|
|
duration=result['duration'],
|
|
distance=result['totaldist'],
|
|
workouttype = 'water',
|
|
workoutsource = 'strava',
|
|
privacy = 'hidden',
|
|
)
|
|
self.w_strava.startdatetime = arrow.get(nu).datetime
|
|
self.w_strava.date = nu.date()
|
|
self.w_strava.save()
|
|
|
|
result = get_random_file(filename='rowers/tests/testdata/thyro.csv')
|
|
self.wthyro2 = WorkoutFactory(user=self.r2,
|
|
csvfilename=result['filename'],
|
|
starttime=result['starttime'],
|
|
startdatetime=result['startdatetime'],
|
|
duration=result['duration'],
|
|
distance=result['totaldist'],
|
|
workouttype = 'water',
|
|
)
|
|
|
|
|
|
result = get_random_file(filename='rowers/tests/testdata/thyro.csv')
|
|
self.wthyro3 = WorkoutFactory(user=self.r2,
|
|
csvfilename=result['filename'],
|
|
starttime=result['starttime'],
|
|
startdatetime=result['startdatetime'],
|
|
duration=result['duration'],
|
|
distance=result['totaldist'],
|
|
workouttype = 'water',
|
|
)
|
|
|
|
self.wthyro2.startdatetime = arrow.get(nu).datetime
|
|
self.wthyro2.date = nu.date()
|
|
self.wthyro2.save()
|
|
|
|
|
|
|
|
startdate = arrow.get(datetime.datetime.now()-datetime.timedelta(days=1)).datetime
|
|
start_time = datetime.time()
|
|
enddate = startdate+datetime.timedelta(days=5)
|
|
end_time = start_time
|
|
evaluation_closure = startdate+datetime.timedelta(days=6)
|
|
registration_closure = evaluation_closure
|
|
contact_phone = '06342323'
|
|
contact_email = 'roosendaalsander@gmail.com'
|
|
|
|
timezone_str = 'UTC'
|
|
|
|
self.SpeedOrder = VirtualRace(
|
|
name='Thyro Speed Order',
|
|
startdate=startdate,
|
|
preferreddate = startdate,
|
|
start_time = start_time,
|
|
enddate=enddate,
|
|
end_time=end_time,
|
|
course=self.ThyroBaantje,
|
|
comment='',
|
|
sessiontype = 'race',
|
|
timezone=timezone_str,
|
|
evaluation_closure=evaluation_closure,
|
|
registration_closure=registration_closure,
|
|
contact_phone=contact_phone,
|
|
coursestandards=self.Scoring,
|
|
contact_email=contact_email,
|
|
country = 'Netherlands',
|
|
manager=self.u,
|
|
)
|
|
self.SpeedOrder.save()
|
|
|
|
flw = VirtualRaceFollower.objects.create(race=self.SpeedOrder,
|
|
user=self.u3,
|
|
emailaddress='bla@bla.com')
|
|
|
|
self.result = VirtualRaceResult(
|
|
userid = self.u2.id,
|
|
username = self.u2.username,
|
|
race = self.SpeedOrder,
|
|
distance = 300,
|
|
duration = datetime.time(0,1,20),
|
|
points = 75,
|
|
coursecompleted = True,
|
|
age = 28,
|
|
startsecond = 0,
|
|
endsecond = 120,
|
|
workoutid = self.wthyro2.id
|
|
)
|
|
self.result.save()
|
|
|
|
self.FastestRace = VirtualRace(
|
|
name='Thyro 5K',
|
|
startdate=startdate,
|
|
preferreddate = startdate,
|
|
start_time = start_time,
|
|
enddate=enddate,
|
|
end_time=end_time,
|
|
sessionvalue=200,
|
|
comment='',
|
|
sessiontype = 'fastest_distance',
|
|
timezone=timezone_str,
|
|
evaluation_closure=evaluation_closure,
|
|
registration_closure=registration_closure,
|
|
contact_phone=contact_phone,
|
|
contact_email=contact_email,
|
|
manager=self.u,
|
|
)
|
|
self.FastestRace.save()
|
|
|
|
self.result = VirtualRaceResult(
|
|
userid = self.u2.id,
|
|
username = self.u2.username,
|
|
race = self.FastestRace,
|
|
distance = 300,
|
|
duration = datetime.time(0,1,20),
|
|
points = 75,
|
|
coursecompleted = True,
|
|
age = 28,
|
|
startsecond = 0,
|
|
endsecond = 120,
|
|
workoutid = self.wthyro3.id
|
|
)
|
|
self.result.save()
|
|
|
|
|
|
def tearDown(self):
|
|
for workout in self.user_workouts:
|
|
try:
|
|
os.remove(workout.csvfilename)
|
|
except (IOError, FileNotFoundError,OSError):
|
|
pass
|
|
|
|
def test_distance(self):
|
|
lat_lon = (52.214229145558484, 6.890036546847821)
|
|
distance = howfaris(lat_lon,self.ThyroBaantje)
|
|
distance = int(100*distance)
|
|
self.assertEqual(distance,315)
|
|
|
|
def test_getnearestraces(self):
|
|
lat_lon = (52.214229145558484, 6.890036546847821)
|
|
races = VirtualRace.objects.all()
|
|
traces = getnearestraces(lat_lon,races)
|
|
self.assertEqual(len(traces),2)
|
|
|
|
lat_lon = (0, 0)
|
|
races = VirtualRace.objects.all()
|
|
traces = getnearestraces(lat_lon,races)
|
|
self.assertEqual(len(traces),2)
|
|
|
|
def test_getnearestcourses(self):
|
|
lat_lon = (52.214229145558484, 6.890036546847821)
|
|
courses = [self.ThyroBaantje]
|
|
tcourses = getnearestcourses(lat_lon,courses)
|
|
self.assertEqual(len(tcourses),1)
|
|
|
|
lat_lon = (0, 0)
|
|
courses = [self.ThyroBaantje]
|
|
tcourses = getnearestcourses(lat_lon,courses)
|
|
self.assertEqual(len(tcourses),1)
|
|
|
|
@patch('django.contrib.gis.geoip2.GeoIP2.city', side_effect=mocked_requests)
|
|
def test_courses_view(self, mock_get):
|
|
login = self.c.login(username=self.u.username, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
url = reverse('courses_view')
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
def test_standards_view(self):
|
|
login = self.c.login(username=self.u.username, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
url = reverse('standards_view')
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
@patch('django.contrib.gis.geoip2.GeoIP2.city', side_effect=mocked_requests)
|
|
def test_coursemap_view(self, mock_get):
|
|
login = self.c.login(username=self.u.username, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
url = reverse('course_map_view',kwargs={'id':self.ThyroBaantje.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
@patch('django.contrib.gis.geoip2.GeoIP2.city', side_effect=mocked_requests)
|
|
def test_coursemapcompare_view(self, mock_get):
|
|
login = self.c.login(username=self.u.username, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
url = reverse('course_mapcompare_view',kwargs={'id':self.ThyroBaantje.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
@patch('django.contrib.gis.geoip2.GeoIP2.city', side_effect=mocked_requests)
|
|
def test_coursecompare_view(self, mock_get):
|
|
login = self.c.login(username=self.u.username, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
url = reverse('course_compare_view',kwargs={'id':self.ThyroBaantje.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
|
|
|
|
@patch('django.contrib.gis.geoip2.GeoIP2.city', side_effect=mocked_requests)
|
|
def test_course_create_edit_delete(self, mock_get):
|
|
login = self.c.login(username=self.u.username, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
# Create
|
|
url = reverse('course_upload_view')
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
|
|
filename = 'rowers/tests/testdata/alphen.kml'
|
|
f = open(filename,'r')
|
|
|
|
file_data = {'file': f}
|
|
form_data = {
|
|
'name':'Alphen',
|
|
'notes': 'aa',
|
|
'country': 'Netherlands',
|
|
'file':f,
|
|
}
|
|
|
|
form = CourseForm(form_data,file_data)
|
|
response = self.c.post(url,form_data,follow=True)
|
|
f.close()
|
|
|
|
expected_url = reverse('courses_view')
|
|
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
courses = GeoCourse.objects.all()
|
|
|
|
self.assertEqual(len(courses),2)
|
|
|
|
Alphen = GeoCourse.objects.get(id=2)
|
|
|
|
# edit
|
|
# edit
|
|
url = reverse('course_edit_view',kwargs={'id':Alphen.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
form_data = {
|
|
'name':'Alphen',
|
|
'country': 'NL',
|
|
'notes': 'bb'
|
|
}
|
|
|
|
form = GeoCourseEditForm(form_data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.post(url,form_data)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
# check
|
|
url = reverse('course_view',kwargs={'id':Alphen.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
|
|
# Upload new kml
|
|
url = reverse('course_upload_replace_view',kwargs={'id':self.ThyroBaantje.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
filename = 'rowers/tests/testdata/thyro2.kml'
|
|
f = open(filename,'r')
|
|
|
|
file_data = {'file': f}
|
|
form_data = {
|
|
'name':'Thyro modified',
|
|
'notes': 'aa',
|
|
'country': 'Netherlands',
|
|
'file':f,
|
|
}
|
|
|
|
form = CourseForm(form_data,file_data)
|
|
response = self.c.post(url,form_data,follow=True)
|
|
f.close()
|
|
|
|
expected_url = reverse('course_update_confirm',kwargs={'id':self.ThyroBaantje.id,'newid':3})
|
|
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
url = expected_url
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
form_data = {
|
|
'doupdate': True,
|
|
}
|
|
|
|
response = self.c.post(url,form_data,follow=True)
|
|
expected_url = reverse('course_view',kwargs={'id':3})
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
# KML Download
|
|
url = reverse('course_kmldownload_view',kwargs={'id':Alphen.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
# delete
|
|
url = reverse('course_delete_view',kwargs={'id':Alphen.id})
|
|
response = self.c.get(url,follow=True)
|
|
expected_url = reverse('courses_view')
|
|
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
def test_standard_view(self):
|
|
login = self.c.login(username=self.u.username, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
# Download
|
|
url = reverse('standards_download_view',kwargs={'id':1})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
# Deactivate
|
|
url = reverse('standard_deactivate_view',kwargs={'id':1})
|
|
response = self.c.get(url,follow=True)
|
|
expected_url = reverse('standards_view')
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
# Create Charles
|
|
url = reverse('standards_upload_view')
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
|
|
filename = 'rowers/tests/testdata/charles.csv'
|
|
f = open(filename,'r')
|
|
|
|
file_data = {'file': f}
|
|
form_data = {
|
|
'name':'Alphen',
|
|
'notes': 'aa',
|
|
'file':f,
|
|
}
|
|
|
|
form = StandardsForm(form_data,file_data)
|
|
response = self.c.post(url,form_data,follow=True)
|
|
f.close()
|
|
|
|
expected_url = reverse('standard_view',kwargs={'id':2})
|
|
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
@patch('django.contrib.gis.geoip2.GeoIP2.city', side_effect=mocked_requests)
|
|
def test_fastestrace_create_view(self, mock_get):
|
|
self.u.rower.rowerplan = 'basic'
|
|
self.u.rower.save()
|
|
login = self.c.login(username=self.u.username, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
url = reverse('fastestvirtualevent_create_view')
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
startdate = arrow.get(datetime.datetime.now()-datetime.timedelta(days=1)).datetime.date()
|
|
start_time = timezone.now().time()
|
|
enddate = startdate+datetime.timedelta(days=5)
|
|
end_time = start_time
|
|
evaluation_closure = startdate+datetime.timedelta(days=6)
|
|
registration_closure = evaluation_closure
|
|
|
|
|
|
form_data = {
|
|
'name': 'test 2',
|
|
'startdate': startdate.strftime("%Y-%m-%d"),
|
|
'initial-startdate': startdate.strftime("%Y-%m-%d"),
|
|
'start_time': '13:12:14',
|
|
'enddate': enddate.strftime("%Y-%m-%d"),
|
|
'initial-enddate': enddate.strftime("%Y-%m-%d"),
|
|
'end_time': '13:12:16',
|
|
'timezone': 'US/Pacific',
|
|
'sessionvalue': '2000',
|
|
'sessionunit': 'm',
|
|
'registration_form': 'manual',
|
|
'registration_closure_0': registration_closure.strftime("%Y-%m-%d"),
|
|
'registration_closure_1': registration_closure.strftime("%H:%M:%S"),
|
|
'evaluation_closure_0': evaluation_closure.strftime("%Y-%m-%d"),
|
|
'evaluation_closure_1': evaluation_closure.strftime("%H:%M:%S"),
|
|
'comment': 'no comment',
|
|
'coursestandards': '',
|
|
'contact_phone': '+3164805181',
|
|
'contact_email': 'test@rowsandall.com',
|
|
}
|
|
|
|
|
|
form = IndoorVirtualRaceForm(form_data)
|
|
if not form.is_valid():
|
|
print(form.cleaned_data)
|
|
print(form.errors)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.post(url, form_data, follow=True)
|
|
|
|
expected_url = reverse('virtualevents_view')
|
|
|
|
self.assertRedirects(response, expected_url=expected_url, status_code=302, target_status_code=200)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
|
|
@patch('django.contrib.gis.geoip2.GeoIP2.city', side_effect=mocked_requests)
|
|
def test_fastestrace_view(self, mock_get):
|
|
login = self.c.login(username=self.u.username, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
race = self.FastestRace
|
|
|
|
if self.r.birthdate:
|
|
age = calculate_age(self.r.birthdate)
|
|
else:
|
|
age = 25
|
|
|
|
# look at event
|
|
url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
# register
|
|
url = reverse('virtualevent_register_view',kwargs={'id':race.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
|
|
form_data = {
|
|
'teamname': 'ApeTeam',
|
|
'boatclass': 'water',
|
|
'boattype': '1x',
|
|
'weightcategory': 'hwt',
|
|
'adaptiveclass': 'None',
|
|
'age': age,
|
|
'mix': False,
|
|
'acceptsocialmedia': True,
|
|
}
|
|
form = VirtualRaceResultForm(form_data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
|
|
response = self.c.post(url,form_data,follow=True)
|
|
expected_url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
# submit workout
|
|
url = reverse('virtualevent_submit_result_view',kwargs={'id':race.id,'workoutid':self.wthyro.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
records = IndoorVirtualRaceResult.objects.filter(userid=self.u.id)
|
|
self.assertEqual(len(records),1)
|
|
|
|
record = records[0]
|
|
|
|
|
|
form_data = {
|
|
'workouts':[self.wthyro.id],
|
|
'record':record.id,
|
|
}
|
|
|
|
response = self.c.post(url,form_data,follow=True)
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
# repeat previous test for self.w_strava, but the response status of virtualevent_submit_result_view should be 403 and len(records) should be 0
|
|
@patch('django.contrib.gis.geoip2.GeoIP2.city', side_effect=mocked_requests)
|
|
def test_fastestrace_view_strava(self, mock_get):
|
|
login = self.c.login(username=self.u.username, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
race = self.FastestRace
|
|
|
|
if self.r.birthdate:
|
|
age = calculate_age(self.r.birthdate)
|
|
else:
|
|
age = 25
|
|
|
|
# look at event
|
|
url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
# register
|
|
url = reverse('virtualevent_register_view',kwargs={'id':race.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
|
|
form_data = {
|
|
'teamname': 'ApeTeam',
|
|
'boatclass': 'water',
|
|
'boattype': '1x',
|
|
'weightcategory': 'hwt',
|
|
'adaptiveclass': 'None',
|
|
'age': age,
|
|
'mix': False,
|
|
'acceptsocialmedia': True,
|
|
}
|
|
form = VirtualRaceResultForm(form_data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
|
|
response = self.c.post(url,form_data,follow=True)
|
|
expected_url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
# submit workout
|
|
url = reverse('virtualevent_submit_result_view',kwargs={'id':race.id,'workoutid':self.w_strava.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
# response.content should have a form with only one instance of <label for="id_workouts_0">
|
|
self.assertEqual(response.content.count(b'<label for="id_workouts_0">'),1)
|
|
|
|
|
|
|
|
records = IndoorVirtualRaceResult.objects.filter(userid=self.u.id)
|
|
self.assertEqual(len(records),1)
|
|
|
|
record = records[0]
|
|
|
|
|
|
form_data = {
|
|
'workouts':[self.w_strava.id],
|
|
'record':record.id,
|
|
}
|
|
|
|
response = self.c.post(url,form_data,follow=True)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
# in response.content, there should be a p with class errormessage and the text "Error in form"
|
|
self.assertTrue(b'Error in form' in response.content)
|
|
|
|
@patch('django.contrib.gis.geoip2.GeoIP2.city', side_effect=mocked_requests)
|
|
def test_virtualevents_view(self, mock_get):
|
|
login = self.c.login(username=self.u.username, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
# check virtual events
|
|
url = reverse('virtualevents_view')
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
form_data = {
|
|
'country':'All',
|
|
'regattatype':'upcoming',
|
|
}
|
|
|
|
# make various selections
|
|
form = VirtualRaceSelectForm(form_data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.post(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
form_data = {
|
|
'country':'All',
|
|
'regattatype':'previous',
|
|
}
|
|
|
|
form = VirtualRaceSelectForm(form_data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.post(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
form_data = {
|
|
'country':'All',
|
|
'regattatype':'ongoing',
|
|
}
|
|
|
|
form = VirtualRaceSelectForm(form_data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.post(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
form_data = {
|
|
'country':'All',
|
|
'regattatype':'my',
|
|
}
|
|
|
|
form = VirtualRaceSelectForm(form_data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.post(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
@patch('django.contrib.gis.geoip2.GeoIP2.city', side_effect=mocked_requests)
|
|
@patch('rowers.views.racesviews.myqueue')
|
|
def test_course_view(self, mock_get, mocked_myqueue):
|
|
login = self.c.login(username=self.u, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
url = reverse('workout_summary_edit_view',kwargs={'id':encoder.encode_hex(self.wthyro.id)})
|
|
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
formdata = {
|
|
'course': self.ThyroBaantje.id
|
|
}
|
|
|
|
form = CourseSelectForm(formdata)
|
|
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.post(url, formdata, follow=True)
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
@patch('django.contrib.gis.geoip2.GeoIP2.city', side_effect=mocked_requests)
|
|
@patch('rowers.views.racesviews.myqueue')
|
|
def test_virtualevent_view(self,mock_get, mocked_myqueue):
|
|
login = self.c.login(username=self.u.username, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
race = self.SpeedOrder
|
|
# look at event
|
|
url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
(
|
|
hasinitial,
|
|
boattype,
|
|
boatclass,
|
|
adaptiveclass,
|
|
weightclass,
|
|
sex,
|
|
referencespeed,
|
|
initialcategory
|
|
) = plannedsessions.default_class(self.r,None,race)
|
|
self.assertTrue(hasinitial)
|
|
|
|
if self.r.birthdate:
|
|
age = calculate_age(self.r.birthdate)
|
|
else:
|
|
age = 25
|
|
|
|
# register
|
|
url = reverse('virtualevent_register_view',kwargs={'id':race.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
categories = CourseStandard.objects.filter(standardcollection=race.coursestandards).order_by("name")
|
|
|
|
form_data = {
|
|
'teamname': 'ApeTeam',
|
|
'boattype': boattype,
|
|
'boatclass': boatclass,
|
|
'weightcategory': weightclass,
|
|
'adaptiveclass': adaptiveclass,
|
|
'age': age,
|
|
'mix': False,
|
|
'acceptsocialmedia': True,
|
|
'entrycategory':initialcategory.id,
|
|
}
|
|
form = VirtualRaceResultForm(form_data,categories=categories)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
|
|
response = self.c.post(url,form_data,follow=True)
|
|
expected_url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
# toggle email
|
|
url = reverse('virtualevent_toggle_email_view',kwargs={'id':race.id})
|
|
response = self.c.get(url,follow=True)
|
|
expected_url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
records = VirtualRaceResult.objects.filter(userid=self.u.id)
|
|
self.assertEqual(len(records),1)
|
|
|
|
record = records[0]
|
|
|
|
# ranking
|
|
url = reverse('virtualevent_ranking_view',kwargs={'id':race.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
# add boat
|
|
url = reverse('virtualevent_addboat_view',kwargs={'id':race.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
categories = CourseStandard.objects.filter(standardcollection=race.coursestandards).order_by("name")
|
|
thecategory = categories.filter(
|
|
agemin=initialcategory.agemin,
|
|
agemax=initialcategory.agemax,
|
|
boatclass='water',
|
|
boattype='2x',
|
|
sex=initialcategory.sex,
|
|
weightclass=initialcategory.weightclass,
|
|
adaptiveclass=initialcategory.adaptiveclass,
|
|
skillclass=initialcategory.skillclass
|
|
)
|
|
|
|
self.assertTrue(len(thecategory),1)
|
|
thecategory = thecategory[0]
|
|
|
|
form_data = {
|
|
'teamname': 'ApeTeam',
|
|
'boattype': boattype,
|
|
'boatclass': boatclass,
|
|
'weightcategory': weightclass,
|
|
'adaptiveclass': adaptiveclass,
|
|
'age': age,
|
|
'mix': False,
|
|
'acceptsocialmedia': True,
|
|
'entrycategory':thecategory.id,
|
|
}
|
|
form = VirtualRaceResultForm(form_data,categories=categories)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
|
|
response = self.c.post(url,form_data,follow=True)
|
|
expected_url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
# withdraw
|
|
url = reverse('virtualevent_withdrawresult_view',kwargs={'id':race.id,'recordid':record.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
form_data = {
|
|
'message':'zo niet he',
|
|
'reason':'suspicious'
|
|
}
|
|
form = DisqualificationForm(form_data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.post(url,form_data,follow=True)
|
|
expected_url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
form_data = {
|
|
'teamname': 'ApeTeam',
|
|
'boattype': boattype,
|
|
'boatclass': boatclass,
|
|
'weightcategory': weightclass,
|
|
'adaptiveclass': adaptiveclass,
|
|
'age': age,
|
|
'mix': False,
|
|
'acceptsocialmedia': True,
|
|
'entrycategory':initialcategory.id,
|
|
}
|
|
|
|
# register again
|
|
url = reverse('virtualevent_register_view',kwargs={'id':race.id})
|
|
response = self.c.post(url,form_data,follow=True)
|
|
expected_url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
records = VirtualRaceResult.objects.filter(userid=self.u.id)
|
|
self.assertEqual(len(records),2)
|
|
|
|
record = records[0]
|
|
|
|
# edit entry
|
|
url = reverse('virtualevent_entry_edit_view',kwargs={'id':race.id,'entryid':record.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
response = self.c.post(url,form_data,follow=True)
|
|
expected_url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
records = VirtualRaceResult.objects.filter(userid=self.u.id)
|
|
self.assertEqual(len(records),2)
|
|
|
|
record = records[0]
|
|
|
|
# submit workout
|
|
url = reverse('virtualevent_submit_result_view',kwargs={'id':race.id,'workoutid':self.wthyro.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
form_data = {
|
|
'workouts':[self.wthyro.id],
|
|
'record':record.id,
|
|
}
|
|
|
|
response = self.c.post(url,form_data,follow=True)
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
records = VirtualRaceResult.objects.filter(userid=self.u.id)
|
|
self.assertEqual(len(records),2)
|
|
|
|
record = records[0]
|
|
record.workoutid = self.wthyro.id
|
|
record.save()
|
|
|
|
# map compare
|
|
url = reverse('virtualevent_mapcompare_view',kwargs={'id':race.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
# compare
|
|
url = reverse('virtualevent_compare_view',kwargs={'id':race.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
# workout_mapcompare
|
|
url = reverse('workout_course_view', kwargs={'id':encoder.encode_hex(self.wthyro.id)})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
# post to compare
|
|
form_data = {
|
|
'workouts':[self.wthyro2.id],
|
|
'xparam': 'distance',
|
|
'yparam': 'spm',
|
|
'plottype': 'line',
|
|
'teamid':0,
|
|
'course':self.ThyroBaantje.id,
|
|
}
|
|
form = ChartParamChoiceForm(form_data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
form = WorkoutMultipleCompareForm(form_data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.post(url,form_data)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
# post2 to compare
|
|
form_data = {
|
|
'xparam': 'distance',
|
|
'yparam': 'spm',
|
|
'plottype': 'line',
|
|
'teamid':0,
|
|
'course':self.ThyroBaantje.id
|
|
}
|
|
form = ChartParamChoiceForm(form_data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
request = self.factory.post(url,
|
|
data=form_data)
|
|
|
|
# adding session
|
|
get_response = MagicMock()
|
|
middleware = SessionMiddleware(get_response)
|
|
middleware.process_request(request)
|
|
request.session.save()
|
|
|
|
session = request.session
|
|
session['ids'] = [self.wthyro2.id]
|
|
session.save()
|
|
|
|
request.user = self.u
|
|
response = virtualevent_compare_view(request,id=str(race.id))
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
|
|
url = reverse('virtualevent_disqualify_view',kwargs={'id':race.id,'recordid':record.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
form_data = {
|
|
'message':'zo niet he',
|
|
'reason':'suspicious'
|
|
}
|
|
form = DisqualificationForm(form_data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.post(url,form_data,follow=True)
|
|
expected_url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
url = reverse('virtualevent_results_download_view',kwargs={'id':race.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
# add follower
|
|
url = reverse('addfollower_view',kwargs={'id':race.id})
|
|
response = self.c.get(url,follow=True)
|
|
expected_url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
def test_virtualevent_check_view(self):
|
|
|
|
res = tasks.handle_check_race_course(
|
|
self.wthyro.csvfilename,
|
|
self.wthyro.id,
|
|
self.ThyroBaantje.id,
|
|
self.result.id,
|
|
self.wthyro.user.user.email,
|
|
self.wthyro.user.user.first_name,
|
|
)
|
|
|
|
self.assertEqual(res,1)
|
|
|
|
|
|
# add boat
|
|
|
|
|
|
@override_settings(TESTING=True)
|
|
class IndoorChallengesTest(TestCase):
|
|
@staticmethod
|
|
def get_image_file(name, ext='png', size=(50, 50), color=(256, 0, 0)):
|
|
file_obj = BytesIO()
|
|
image = Image.new("RGBA", size=size, color=color)
|
|
image.save(file_obj, ext)
|
|
file_obj.seek(0)
|
|
return File(file_obj, name=name)
|
|
|
|
def setUp(self):
|
|
self.u = UserFactory()
|
|
|
|
self.r = Rower.objects.create(user=self.u,
|
|
birthdate=datetime.datetime.now()-datetime.timedelta(days=25*365),
|
|
gdproptin=True, ftpset=True,surveydone=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()
|
|
|
|
id = save_scoring('Standard Scoring',self.u,'rowers/tests/testdata/coursestandard.csv',id=0)
|
|
self.Scoring = StandardCollection.objects.get(id=id)
|
|
|
|
|
|
result = get_random_file(filename='rowers/tests/testdata/2019-01-13_session.csv',
|
|
name='sprintervals')
|
|
|
|
self.werg = WorkoutFactory(user=self.r,
|
|
csvfilename=result['filename'],
|
|
starttime=result['starttime'],
|
|
startdatetime=result['startdatetime'],
|
|
duration=result['duration'],
|
|
distance=result['totaldist'],
|
|
workouttype = 'water',
|
|
)
|
|
|
|
self.werg.startdatetime = arrow.get(nu).datetime
|
|
self.werg.date = nu.date()
|
|
self.werg.save()
|
|
|
|
startdate = arrow.get(datetime.datetime.now()-datetime.timedelta(days=1)).datetime
|
|
start_time = datetime.time()
|
|
enddate = startdate+datetime.timedelta(days=5)
|
|
end_time = start_time
|
|
evaluation_closure = startdate+datetime.timedelta(days=6)
|
|
registration_closure = evaluation_closure
|
|
contact_phone = '06342323'
|
|
contact_email = 'roosendaalsander@gmail.com'
|
|
|
|
timezone_str = 'UTC'
|
|
|
|
self.IndoorSpeedOrder = VirtualRace(
|
|
name='Thyro Speed Order',
|
|
startdate=startdate,
|
|
preferreddate = startdate,
|
|
start_time = start_time,
|
|
enddate=enddate,
|
|
end_time=end_time,
|
|
comment='',
|
|
sessiontype = 'indoorrace',
|
|
timezone=timezone_str,
|
|
evaluation_closure=evaluation_closure,
|
|
registration_closure=registration_closure,
|
|
contact_phone=contact_phone,
|
|
contact_email=contact_email,
|
|
country = 'Netherlands',
|
|
manager=self.u,
|
|
sessionvalue=int(result['totaldist']),
|
|
sessionunit='m',
|
|
sessionmode='distance',
|
|
)
|
|
self.IndoorSpeedOrder.save()
|
|
|
|
|
|
def tearDown(self):
|
|
for workout in self.user_workouts:
|
|
try:
|
|
os.remove(workout.csvfilename)
|
|
except (IOError, FileNotFoundError,OSError):
|
|
pass
|
|
|
|
|
|
@patch('django.contrib.gis.geoip2.GeoIP2.city', side_effect=mocked_requests)
|
|
def test_virtualevents_view(self, mock_get):
|
|
login = self.c.login(username=self.u.username, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
# check virtual events
|
|
url = reverse('virtualevents_view')
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
form_data = {
|
|
'country':'All',
|
|
'regattatype':'upcoming',
|
|
}
|
|
|
|
# make various selections
|
|
form = VirtualRaceSelectForm(form_data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.post(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
form_data = {
|
|
'country':'All',
|
|
'regattatype':'previous',
|
|
}
|
|
|
|
form = VirtualRaceSelectForm(form_data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.post(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
form_data = {
|
|
'country':'All',
|
|
'regattatype':'ongoing',
|
|
}
|
|
|
|
form = VirtualRaceSelectForm(form_data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.post(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
form_data = {
|
|
'country':'All',
|
|
'regattatype':'my',
|
|
}
|
|
|
|
form = VirtualRaceSelectForm(form_data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
response = self.c.post(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
@patch('rowers.dataprep.create_engine')
|
|
def test_upload_manual(self, mocked_sqlalchemy):
|
|
login = self.c.login(username=self.u.username, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
race = self.IndoorSpeedOrder
|
|
|
|
# look at event
|
|
url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
if self.r.birthdate:
|
|
age = calculate_age(self.r.birthdate)
|
|
else:
|
|
age = 25
|
|
|
|
# register
|
|
url = reverse('indoorvirtualevent_register_view',kwargs={'id':race.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
|
|
form_data = {
|
|
'teamname': 'ApeTeam',
|
|
'boatclass': 'rower',
|
|
'weightcategory': 'hwt',
|
|
'adaptiveclass': 'None',
|
|
'age': age,
|
|
'mix': False,
|
|
'acceptsocialmedia': True,
|
|
}
|
|
form = IndoorVirtualRaceResultForm(form_data)
|
|
|
|
self.assertTrue(form.is_valid())
|
|
|
|
|
|
response = self.c.post(url,form_data,follow=True)
|
|
expected_url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
# submit result (manual)
|
|
|
|
image = self.get_image_file('image.jpg')
|
|
|
|
form_data = {
|
|
'name': faker.word(),
|
|
'date': nu.date().strftime("%Y-%m-%d"),
|
|
'starttime': '10:01:43',
|
|
'timezone': 'UTC',
|
|
'duration': '00:02:00.0',
|
|
'distance': race.sessionvalue,
|
|
'workouttype': 'rower',
|
|
'boattype': '1x',
|
|
'weightcategory': 'hwt',
|
|
'adaptiveclass': 'None',
|
|
'notes': faker.text(),
|
|
'rankingpiece': True,
|
|
'empowerside': 'port',
|
|
'boatname': 'Dolfijn',
|
|
'seatnumber': 1,
|
|
'duplicate': False,
|
|
'avghr': '160',
|
|
'avgpwr': 0,
|
|
'rpe':4,
|
|
'avgspm': 40,
|
|
}
|
|
|
|
form = MetricsForm(form_data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
form = WorkoutForm(form_data)
|
|
self.assertTrue(form.is_valid())
|
|
|
|
file_data = {'file':image}
|
|
|
|
form = ImageForm(form_data,file_data)
|
|
|
|
self.assertTrue(form.is_valid())
|
|
|
|
url = '/rowers/workout/addmanual/'+str(race.id)+'/'
|
|
response = self.c.get(url)
|
|
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
|
|
#form_data['file'] = image
|
|
request = self.factory.post(url,
|
|
data=form_data,
|
|
files={'file':image},
|
|
)
|
|
setattr(request, 'session', 'session')
|
|
messages = FallbackStorage(request)
|
|
setattr(request, '_messages', messages)
|
|
|
|
request.user = self.u
|
|
|
|
response = addmanual_view(request,raceid=str(race.id))
|
|
|
|
expected = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
|
|
self.assertEqual(response.status_code,302)
|
|
self.assertEqual(response.url,expected)
|
|
|
|
|
|
|
|
|
|
@patch('django.contrib.gis.geoip2.GeoIP2.city', side_effect=mocked_requests)
|
|
@patch('rowers.views.racesviews.myqueue')
|
|
def test_virtualevent_view(self,mock_get, mocked_myqueue):
|
|
login = self.c.login(username=self.u.username, password=self.password)
|
|
self.assertTrue(login)
|
|
|
|
race = self.IndoorSpeedOrder
|
|
# look at event
|
|
url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
if self.r.birthdate:
|
|
age = calculate_age(self.r.birthdate)
|
|
else:
|
|
age = 25
|
|
|
|
# register
|
|
url = reverse('indoorvirtualevent_register_view',kwargs={'id':race.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
|
|
form_data = {
|
|
'teamname': 'ApeTeam',
|
|
'boatclass': 'rower',
|
|
'weightcategory': 'hwt',
|
|
'adaptiveclass': 'None',
|
|
'age': age,
|
|
'mix': False,
|
|
'acceptsocialmedia': True,
|
|
}
|
|
form = IndoorVirtualRaceResultForm(form_data)
|
|
|
|
self.assertTrue(form.is_valid())
|
|
|
|
|
|
response = self.c.post(url,form_data,follow=True)
|
|
expected_url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
# toggle email
|
|
url = reverse('indoorvirtualevent_toggle_email_view',kwargs={'id':race.id})
|
|
response = self.c.get(url,follow=True)
|
|
expected_url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
records = IndoorVirtualRaceResult.objects.filter(userid=self.u.id)
|
|
self.assertEqual(len(records),1)
|
|
|
|
record = records[0]
|
|
|
|
# withdraw
|
|
url = reverse('virtualevent_withdrawresult_view',kwargs={'id':race.id,'recordid':record.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code,200)
|
|
|
|
|
|
# register again
|
|
url = reverse('indoorvirtualevent_register_view',kwargs={'id':race.id})
|
|
response = self.c.post(url,form_data,follow=True)
|
|
expected_url = reverse('virtualevent_view',kwargs={'id':race.id})
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
records = IndoorVirtualRaceResult.objects.filter(userid=self.u.id)
|
|
self.assertEqual(len(records),1)
|
|
|
|
record = records[0]
|
|
|
|
# submit workout
|
|
url = reverse('virtualevent_submit_result_view',kwargs={'id':race.id,'workoutid':self.werg.id})
|
|
response = self.c.get(url)
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
form_data = {
|
|
'workouts':[self.werg.id],
|
|
'record':record.id,
|
|
}
|
|
|
|
response = self.c.post(url,form_data,follow=True)
|
|
self.assertRedirects(response, expected_url=expected_url,
|
|
status_code=302,target_status_code=200)
|
|
|
|
self.assertEqual(response.status_code, 200)
|