263 lines
7.3 KiB
Python
263 lines
7.3 KiB
Python
try:
|
|
WindowsError
|
|
except NameError:
|
|
WindowsError = None
|
|
|
|
try:
|
|
FileNotFoundError
|
|
except NameError:
|
|
FileNotFoundError = None
|
|
|
|
try:
|
|
OSError
|
|
except NameError:
|
|
OSError = None
|
|
|
|
import pytest
|
|
|
|
from rowers.courses import howfaris
|
|
|
|
import warnings
|
|
warnings.filterwarnings("error",
|
|
category=RuntimeWarning
|
|
)
|
|
|
|
pytestmark = pytest.mark.django_db
|
|
|
|
from bs4 import BeautifulSoup
|
|
import re
|
|
import pytz
|
|
from parameterized import parameterized
|
|
|
|
from django.test import TestCase, Client,override_settings, RequestFactory, TransactionTestCase
|
|
|
|
from django.core.management import call_command
|
|
from django.core.files.uploadedfile import SimpleUploadedFile
|
|
|
|
from io import StringIO
|
|
import factory
|
|
from factory.fuzzy import FuzzyDateTime
|
|
|
|
from django.test.client import RequestFactory
|
|
from rowers.integrations import *
|
|
|
|
from rowers.forms import (
|
|
DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail,
|
|
ChartParamChoiceForm,WorkoutMultipleCompareForm,
|
|
BoxPlotChoiceForm,PerformanceManagerForm,ForceCurveOptionsForm
|
|
)
|
|
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, copy
|
|
from nose.tools import assert_true
|
|
from mock import Mock, patch, MagicMock
|
|
#from minimocktest import MockTestCase
|
|
import pandas as pd
|
|
import polars as pl
|
|
import rowers.c2stuff as c2stuff
|
|
|
|
import rowers.rojabo_stuff as rojabo_stuff
|
|
|
|
from django.urls import reverse, reverse_lazy
|
|
|
|
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 rowers.tests.mocks import *
|
|
|
|
from nose.tools import assert_raises
|
|
|
|
from rowers.models import *
|
|
from rowers.forms import *
|
|
from rowers.tests.mocks import *
|
|
import factory
|
|
from faker import Factory, Faker
|
|
from uuid import uuid4
|
|
faker = Factory.create()
|
|
|
|
from rowers.utils import calculate_age
|
|
|
|
from rowers.tasks import handle_getagegrouprecords
|
|
from rowers.opaque import encoder
|
|
|
|
import inspect
|
|
|
|
|
|
|
|
class MyTestCase(TestCase):
|
|
def setUp(self):
|
|
self.osm_mock = patch('something')
|
|
self.osm_mock.return_value = ""
|
|
super(MyTestCase, self).setUp()
|
|
self.osm_mock.start()
|
|
|
|
def tearDown(self):
|
|
super(MyTestCase, self).tearDown()
|
|
self.osm_mock.stop()
|
|
|
|
|
|
def get_random_file(filename='rowers/tests/testdata/testdata.csv',name=''):
|
|
|
|
frm = inspect.stack()[3]
|
|
mod = inspect.getmodule(frm[0])
|
|
try:
|
|
fromstring = 'test_%s_' % mod.__name__
|
|
except AttributeError:
|
|
fromstring = 'none_'
|
|
|
|
row = rdata(csvfile=filename)
|
|
totaldist = row.df['cum_dist'].max()
|
|
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
|
totaltime = totaltime+row.df.loc[row.df.index[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.date()
|
|
workoutstarttime = row.rowdatetime
|
|
|
|
extension = filename[-3:]
|
|
|
|
if name != '':
|
|
newfilename = 'rowers/tests/testdata/temp/'+fromstring+name+'.'+extension
|
|
else:
|
|
newfilename = 'rowers/tests/testdata/temp/'+fromstring+uuid4().hex[:16]+'.'+extension
|
|
|
|
# copyfile(filename,newfilename)
|
|
copy(filename,newfilename)
|
|
|
|
thedict = {
|
|
'row':row,
|
|
'filename':newfilename,
|
|
'startdatetime': row.rowdatetime,
|
|
'starttime': workoutstarttime,
|
|
'date': workoutdate,
|
|
'duration':duration,
|
|
'totaldist':totaldist,
|
|
}
|
|
|
|
return thedict
|
|
|
|
class UserFactory(factory.DjangoModelFactory):
|
|
class Meta:
|
|
model = User
|
|
django_get_or_create = ('username',)
|
|
|
|
email = factory.LazyAttribute(lambda _: faker.email())
|
|
username = factory.LazyAttribute(lambda _: faker.profile()['username'])
|
|
|
|
first_name = factory.LazyAttribute(lambda _:faker.name().split(' ')[0])
|
|
last_name = factory.LazyAttribute(lambda _:faker.name().split(' ')[0])
|
|
|
|
class RaceFactory(factory.DjangoModelFactory):
|
|
class Meta:
|
|
model = VirtualRace
|
|
|
|
name = factory.LazyAttribute(lambda _: faker.word())
|
|
registration_closure = timezone.now()+datetime.timedelta(days=1)
|
|
evaluation_closure = timezone.now()+datetime.timedelta(days=2)
|
|
startdate = timezone.now().date()
|
|
start_time = datetime.time()
|
|
enddate = (timezone.now()+datetime.timedelta(days=1)).date()
|
|
end_time = datetime.time()
|
|
preferreddate = timezone.now().date()
|
|
sessiontype = 'indoorrace'
|
|
sessionvalue = 1
|
|
sessionmode = 'time'
|
|
|
|
|
|
fake = Faker()
|
|
now = datetime.datetime.now(tz=pytz.timezone("America/New_York"))
|
|
one_month_ago = now - datetime.timedelta(days=30)
|
|
|
|
class WorkoutFactory(factory.DjangoModelFactory):
|
|
class Meta:
|
|
model = Workout
|
|
|
|
name = factory.LazyAttribute(lambda _: faker.word())
|
|
notes = faker.text()
|
|
startdatetime = FuzzyDateTime(start_dt=one_month_ago, force_year=datetime.date.today().year)
|
|
starttime = get_random_file(name=faker.word())['starttime']
|
|
workouttype='water'
|
|
date=startdatetime.evaluate(2,None, False).date()
|
|
duration=get_random_file(name=faker.word())['duration']
|
|
distance=get_random_file(name=faker.word())['totaldist']
|
|
csvfilename=get_random_file(name=faker.word())['filename']
|
|
trimp = 120
|
|
hrtss = 60
|
|
rscore = 60
|
|
goldmedalstandard = 49
|
|
goldmedalseconds = 509
|
|
|
|
|
|
class SessionFactory(factory.DjangoModelFactory):
|
|
class Meta:
|
|
model = PlannedSession
|
|
|
|
name = factory.LazyAttribute(lambda _: faker.word())
|
|
comment = faker.text()
|
|
|
|
@pytest.fixture(scope="session", autouse=True)
|
|
def cleanup(request):
|
|
def remove_test_files():
|
|
try:
|
|
for filename in os.listdir('media/mailbox_attachments'):
|
|
path = os.path.join('media/mailbox_attachments/',filename)
|
|
if not os.path.isdir(path):
|
|
try:
|
|
os.remove(path)
|
|
except OSError:
|
|
pass
|
|
except OSError:
|
|
pass
|
|
|
|
try:
|
|
for filename in os.listdir('rowers/tests/testdata/temp'):
|
|
path = os.path.join('rowers/tests/testdata/temp/',filename)
|
|
if not os.path.isdir(path):
|
|
try:
|
|
os.remove(path)
|
|
except OSError:
|
|
pass
|
|
except OSError:
|
|
pass
|
|
|
|
|
|
|
|
|
|
request.addfinalizer(remove_test_files)
|