Private
Public Access
1
0
Files
rowsandall/rowers/tests/statements.py
2019-02-11 22:29:36 +01:00

214 lines
6.2 KiB
Python

try:
WindowsError
except NameError:
WindowsError = None
try:
OSError
except NameError:
OSError = None
import pytest
pytestmark = pytest.mark.django_db
from bs4 import BeautifulSoup
import re
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 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, copy
from nose.tools import assert_true
from mock import Mock, patch
from minimocktest import MockTestCase
import pandas as pd
import rowers.c2stuff as c2stuff
from django.core.urlresolvers 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 django_mailbox.models import Mailbox,MessageAttachment,Message
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
from uuid import uuid4
faker = Factory.create()
from rowers.utils import calculate_age
from rowers.tasks import handle_getagegrouprecords
import inspect
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(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
email = faker.email()
username = faker.profile()['username']
first_name = faker.name().split(' ')[0]
last_name = 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'
class WorkoutFactory(factory.DjangoModelFactory):
class Meta:
model = Workout
name = factory.LazyAttribute(lambda _: faker.word())
notes = faker.text()
startdatetime = get_random_file(name=faker.word())['startdatetime']
starttime = get_random_file(name=faker.word())['starttime']
workouttype='water'
date=timezone.now().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']
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)