#from __future__ import print_function import pytest pytestmark = pytest.mark.django_db from bs4 import BeautifulSoup import re from nose_parameterized import parameterized from django.test import TestCase, Client,override_settings from django.core.management import call_command from django.utils.six import StringIO from django.test.client import RequestFactory from rowers.views import checkworkoutuser,c2_open from rowers.models import Workout, User, Rower, WorkoutForm,RowerForm,GraphImage from rowers.forms import DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail 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 shutil import copyfile from nose.tools import assert_true from mock import Mock, patch from minimocktest import MockTestCase import pandas as pd import rowers.c2stuff as c2stuff 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 redis import StrictRedis redis_connection = StrictRedis() from rowers.tests.mocks import * #@pytest.mark.django_db class ViewTest(TestCase): def setUp(self): redis_connection.publish('tasks','KILL') self.c = Client() self.u = User.objects.create_user('john', 'sander@ds.ds', 'koeinsloot') self.r = Rower.objects.create(user=self.u,gdproptin=True, gdproptindate=timezone.now(), rowerplan='coach', ) self.nu = datetime.datetime.now() def test_upload_view_notloggedin(self): response = self.c.post('/rowers/workout/upload/',follow=True) self.assertRedirects(response, expected_url='/login/?next=/rowers/workout/upload/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) @patch('rowers.dataprep.create_engine') def test_upload_view_sled(self, mocked_sqlalchemy): login = self.c.login(username='john',password='koeinsloot') self.assertTrue(login) filename = 'rowers/tests/testdata/testdata.csv' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'test', 'workouttype':'rower', 'boattype':'1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_c2':False, 'plottype':'timeplot', 'file': f, } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) f.close() self.assertRedirects(response, expected_url='/rowers/workout/1/edit/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) response = self.c.get('/rowers/workout/1/', form_data, follow=True) self.assertEqual(response.status_code, 200) response = self.c.get('/rowers/workout/1/edit/', form_data, follow=True) self.assertEqual(response.status_code, 200) response = self.c.get('/rowers/workout/1/histo/', form_data, follow=True) self.assertEqual(response.status_code, 200) response = self.c.get('/rowers/workout/1/workflow/', follow=True) self.assertEqual(response.status_code, 200) form_data = { 'name':'aap', 'date':'2016-11-05', 'starttime':'09:07:14', 'timezone':'Europe/Berlin', 'duration':'1:00:00.5', 'distance':'15000', 'weightcategory':'hwt', 'adaptiveclass':'PR1', 'workouttype':'rower', 'boattype':'1x', 'private':True, 'notes':'noot mies', } form = WorkoutForm(data=form_data) self.assertTrue(form.is_valid()) response = self.c.post('/rowers/workout/1/edit/', form_data, follow=True) self.assertEqual(response.status_code, 200) w = Workout.objects.get(id=1) f_to_be_deleted = w.csvfilename try: os.remove(f_to_be_deleted+'.gz') except WindowsError: pass def test_upload_view_notloggedin(self): response = self.c.post('/rowers/workout/upload/',follow=True) self.assertRedirects(response, expected_url='/login/?next=/rowers/workout/upload/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) @patch('rowers.dataprep.create_engine') def test_upload_view_sled_negativetime(self, mocked_sqlalchemy): self.c.login(username='john',password='koeinsloot') filename = 'rowers/tests/testdata/tim.csv' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'test', 'workouttype':'rower', 'boattype':'1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_C2':False, 'upload_to_Strava':False, 'upload_to_SportTracks':False, 'upload_to_RunKeeper':False, 'upload_to_MapMyFitness':False, 'plottype':'timeplot', 'file': f, 'makeprivate':False, 'landingpage':'workout_edit_view', } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) f.close() self.assertRedirects(response, expected_url='/rowers/workout/1/edit/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) response = self.c.get('/rowers/workout/1/', form_data, follow=True) self.assertEqual(response.status_code, 200) w = Workout.objects.get(id=1) f_to_be_deleted = w.csvfilename try: os.remove(f_to_be_deleted+'.gz') except WindowsError: pass @patch('rowers.dataprep.create_engine') def test_upload_view_sled_noname(self, mocked_sqlalchemy): self.c.login(username='john',password='koeinsloot') filename = 'rowers/tests/testdata/testdata.csv' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'', 'workouttype':'rower', 'boattype':'1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_c2':False, 'plottype':'timeplot', 'file': f, } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) f.close() self.assertRedirects(response, expected_url='/rowers/workout/1/edit/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) w = Workout.objects.get(id=1) f_to_be_deleted = w.csvfilename try: os.remove(f_to_be_deleted+'.gz') except WindowsError: pass @patch('rowers.dataprep.create_engine') def test_upload_view_logcard(self, mocked_sqlalchemy): self.c.login(username='john',password='koeinsloot') filename = 'rowers/tests/testdata/logcard.csv' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'', 'workouttype':'rower', 'boattype': '1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_c2':False, 'plottype':'timeplot', 'file': f, } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) f.close() self.assertRedirects(response, expected_url='/rowers/workout/upload/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) @patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.TCXParser') def test_upload_view_TCX_CN(self, mocked_sqlalchemy, mocked_tcx_parser): self.c.login(username='john',password='koeinsloot') filename = 'rowers/tests/testdata/crewnerddata.tcx' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'test', 'workouttype':'water', 'boattype':'1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_c2':False, 'plottype':'timeplot', 'file': f, } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) f.close() self.assertRedirects(response, expected_url='/rowers/workout/1/edit/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) filename = 'rowers/tests/testdata/crewnerddata.CSV' f = open(filename,'rb') file_data = {'file': f} form_data = {} form = CNsummaryForm(form_data,file_data) response = self.c.post('rowers/workout/1/crewnerdsummary', form_data, follow=True) f.close() self.assertEqual(response.status_code, 200) w = Workout.objects.get(id=1) f_to_be_deleted = w.csvfilename try: os.remove(f_to_be_deleted+'.gz') except WindowsError: pass @patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.TCXParser') def test_upload_view_TCX_SpeedCoach2a(self, mocked_sqlalchemy, mocked_tcx_parser): self.c.login(username='john',password='koeinsloot') filename = 'rowers/tests/testdata/Speedcoach2example.csv' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'test', 'workouttype':'water', 'boattype':'1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_c2':False, 'plottype':'timeplot', 'file': f, } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) f.close() self.assertRedirects(response, expected_url='/rowers/workout/1/edit/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) w = Workout.objects.get(id=1) f_to_be_deleted = w.csvfilename try: os.remove(f_to_be_deleted+'.gz') except WindowsError: pass @patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.TCXParser') def test_upload_view_TCX_SpeedCoach2b(self, mocked_sqlalchemy, mocked_tcx_parser): self.c.login(username='john',password='koeinsloot') filename = 'rowers/tests/testdata/Speedcoach2example.csv' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'test', 'workouttype':'water', 'boattype':'1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_c2':False, 'plottype':'timeplot', 'file': f, } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) f.close() self.assertRedirects(response, expected_url='/rowers/workout/1/edit/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) w = Workout.objects.get(id=1) f_to_be_deleted = w.csvfilename try: os.remove(f_to_be_deleted+'.gz') except WindowsError: pass @patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.TCXParser') def test_upload_view_TCX_SpeedCoach2c(self, mocked_sqlalchemy, mocked_tcx_parser): self.c.login(username='john',password='koeinsloot') filename = 'rowers/tests/testdata/speedcoach3test3.csv' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'test', 'workouttype':'water', 'boattype':'1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_c2':False, 'plottype':'timeplot', 'file': f, } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) f.close() self.assertRedirects(response, expected_url='/rowers/workout/1/edit/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) w = Workout.objects.get(id=1) f_to_be_deleted = w.csvfilename try: os.remove(f_to_be_deleted+'.gz') except WindowsError: pass @patch('rowers.dataprep.create_engine') def test_upload_view_SpeedCoach2v127(self, mocked_sqlalchemy): self.c.login(username='john',password='koeinsloot') filename = 'rowers/tests/testdata/SpeedCoach2Linkv1.27.csv' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'test', 'workouttype':'water', 'boattype':'1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_c2':False, 'plottype':'timeplot', 'file': f, } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) f.close() self.assertRedirects(response, expected_url='/rowers/workout/1/edit/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) w = Workout.objects.get(id=1) f_to_be_deleted = w.csvfilename try: os.remove(f_to_be_deleted+'.gz') except WindowsError: pass @patch('rowers.dataprep.create_engine') def test_upload_view_SpeedCoach2v127intervals(self, mocked_sqlalchemy): self.c.login(username='john',password='koeinsloot') filename = 'rowers/tests/testdata/SpeedCoach2Link_interval.csv' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'test', 'workouttype':'water', 'boattype':'1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_c2':False, 'plottype':'timeplot', 'file': f, } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) f.close() self.assertRedirects(response, expected_url='/rowers/workout/1/edit/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) w = Workout.objects.get(id=1) f_to_be_deleted = w.csvfilename try: os.remove(f_to_be_deleted+'.gz') except WindowsError: pass @patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.TCXParser') def test_upload_view_TCX_NoHR(self, mocked_sqlalchemy, mocked_tcx_parser): self.c.login(username='john',password='koeinsloot') filename = 'rowers/tests/testdata/NoHR.tcx' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'test', 'workouttype':'water', 'boattype':'1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_c2':False, 'plottype':'timeplot', 'file': f, } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) f.close() self.assertRedirects(response, expected_url='/rowers/workout/1/edit/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) w = Workout.objects.get(id=1) f_to_be_deleted = w.csvfilename try: os.remove(f_to_be_deleted+'.gz') except WindowsError: pass @patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.TCXParser') def test_upload_view_TCX_CN(self, mocked_sqlalchemy, mocked_tcx_parser): self.c.login(username='john',password='koeinsloot') filename = 'rowers/tests/testdata/rowinginmotionexample.tcx' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'test', 'workouttype':'water', 'boattype':'1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_c2':False, 'plottype':'timeplot', 'file': f, } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) self.assertRedirects(response, expected_url='/rowers/workout/1/edit/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) w = Workout.objects.get(id=1) f_to_be_deleted = w.csvfilename try: os.remove(f_to_be_deleted+'.gz') except WindowsError: pass @patch('rowers.dataprep.create_engine') def test_upload_view_RP(self, mocked_sqlalchemy): self.c.login(username='john',password='koeinsloot') filename = 'rowers/tests/testdata/RP_testdata.csv' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'test', 'workouttype':'rower', 'boattype':'1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_c2':False, 'plottype':'timeplot', 'file': f, } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) self.assertRedirects(response, expected_url='/rowers/workout/1/edit/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) w = Workout.objects.get(id=1) f_to_be_deleted = w.csvfilename try: os.remove(f_to_be_deleted+'.gz') except WindowsError: pass @patch('rowers.dataprep.create_engine') def test_upload_view_Mystery(self, mocked_sqlalchemy): self.c.login(username='john',password='koeinsloot') filename = 'rowers/tests/testdata/mystery.csv' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'test', 'workouttype':'rower', 'boattype':'1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_c2':False, 'plottype':'timeplot', 'file': f, } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) self.assertRedirects(response, expected_url='/rowers/workout/1/edit/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) w = Workout.objects.get(id=1) f_to_be_deleted = w.csvfilename try: os.remove(f_to_be_deleted+'.gz') except WindowsError: pass @patch('rowers.dataprep.create_engine') def test_upload_view_RP_interval(self, mocked_sqlalchemy): self.c.login(username='john',password='koeinsloot') filename = 'rowers/tests/testdata/RP_interval.csv' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'test', 'workouttype':'rower', 'boattype':'1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_c2':False, 'plottype':'timeplot', 'file': f, } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) self.assertRedirects(response, expected_url='/rowers/workout/1/edit/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) w = Workout.objects.get(id=1) f_to_be_deleted = w.csvfilename try: os.remove(f_to_be_deleted+'.gz') except WindowsError: pass @patch('rowers.dataprep.create_engine') def test_upload_view_sled_desktop(self, mocked_sqlalchemy): self.c.login(username='john',password='koeinsloot') filename = 'rowers/tests/testdata/painsled_desktop_example.csv' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'test', 'workouttype':'rower', 'boattype':'1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_c2':False, 'plottype':'timeplot', 'file': f, } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) self.assertRedirects(response, expected_url='/rowers/workout/1/edit/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) w = Workout.objects.get(id=1) f_to_be_deleted = w.csvfilename try: os.remove(f_to_be_deleted+'.gz') except WindowsError: pass @patch('rowers.dataprep.create_engine') def test_upload_view_sled_ergdata(self, mocked_sqlalchemy): self.c.login(username='john',password='koeinsloot') filename = 'rowers/tests/testdata/ergdata_example.csv' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'test', 'workouttype':'rower', 'boattype':'1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_c2':False, 'plottype':'timeplot', 'file': f, } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) self.assertRedirects(response, expected_url='/rowers/workout/1/edit/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) w = Workout.objects.get(id=1) f_to_be_deleted = w.csvfilename try: os.remove(f_to_be_deleted+'.gz') except WindowsError: pass @patch('rowers.dataprep.create_engine') def test_upload_view_sled_boatcoach(self, mocked_sqlalchemy): self.c.login(username='john',password='koeinsloot') filename = 'rowers/tests/testdata/boatcoach.csv' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'test', 'workouttype':'rower', 'boattype':'1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_c2':False, 'plottype':'timeplot', 'file': f, } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) self.assertRedirects(response, expected_url='/rowers/workout/1/edit/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) w = Workout.objects.get(id=1) f_to_be_deleted = w.csvfilename try: os.remove(f_to_be_deleted+'.gz') except WindowsError: pass @patch('rowers.dataprep.create_engine') def test_upload_view_sled_ergstick(self, mocked_sqlalchemy): self.c.login(username='john',password='koeinsloot') filename = 'rowers/tests/testdata/ergstick.csv' f = open(filename,'rb') file_data = {'file': f} form_data = { 'title':'test', 'workouttype':'rower', 'boattype':'1x', 'notes':'aap noot mies', 'make_plot':False, 'upload_to_c2':False, 'plottype':'timeplot', 'file': f, } form = DocumentsForm(form_data,file_data) response = self.c.post('/rowers/workout/upload/', form_data, follow=True) self.assertRedirects(response, expected_url='/rowers/workout/1/edit/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) w = Workout.objects.get(id=1) f_to_be_deleted = w.csvfilename try: os.remove(f_to_be_deleted+'.gz') except WindowsError: pass