Private
Public Access
1
0
Files
rowsandall/rowers/tests/statements.py
2024-06-12 17:52:09 +02:00

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)