from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals #from __future__ import print_function from .statements import * nu = datetime.datetime.now() import rowers.courses as courses tested = [ '/rowers/me/delete/', # '/rowers/performancemanager/' ] #@pytest.mark.django_db @override_settings(TESTING=True) class URLTests(TestCase): def setUp(self): redis_connection.publish('tasks','KILL') u = User.objects.create_user('john', 'sander@ds.ds', 'koeinsloot', ) r = Rower.objects.create(user=u,rowerplan='pro',gdproptin=True, ftpset=True, gdproptindate=timezone.now()) self.c = Client() cs = courses.kmltocourse('rowers/tests/testdata/thyro.kml') course = cs[0] cname = course['name'] cnotes = course['description'] polygons = course['polygons'] self.ThyroBaantje = courses.createcourse(r,cname,polygons,notes=cnotes) self.ThyroBaantje.save() self.nu = datetime.datetime.now() filename = 'rowers/tests/testdata/testdata.csv' self.wotw = Workout.objects.create(name='testworkout', workouttype='water', user=r,date=self.nu.strftime('%Y-%m-%d'), starttime=self.nu.strftime('%H:%M:%S'), duration="0:55:00",distance=8000, csvfilename=filename) self.wote = Workout.objects.create(name='testworkout', workouttype='Indoor Rower', user=r,date=self.nu.strftime('%Y-%m-%d'), starttime=self.nu.strftime('%H:%M:%S'), duration="0:55:00",distance=8000, csvfilename=filename) powerperc = 100*np.array([r.pw_ut2, r.pw_ut1, r.pw_at, r.pw_tr,r.pw_an])/r.ftp self.hrdata = { 'hrmax':r.max, 'hrut2':r.ut2, 'hrut1':r.ut1, 'hrat':r.at, 'hrtr':r.tr, 'hran':r.an, 'ftp':r.ftp, 'powerperc':serialize_list(powerperc), 'powerzones':serialize_list(r.powerzones), } urlstotest = [ '/rowers/400/', '/rowers/403/', '/rowers/404/', '/rowers/500/', '/rowers/502/', '/rowers/about/', '/rowers/workout/addmanual/', '/rowers/ajax_agegroup/45/hwt/male/1/', '/rowers/analysis/', '/rowers/analysis/user/1/', '/rowers/brochure/', '/rowers/courses/upload/', '/rowers/createplan/', '/rowers/createplan/user/1/', '/rowers/developers/', '/rowers/email/', '/rowers/email/thankyou/', '/rowers/help/', '/rowers/laboratory/', '/rowers/laboratory/user/1/', '/rowers/legal/', '/rowers/workouts/setrpe/', '/boatmovers/', '/boatmovers/faq/', '/boatmovers/compare/', '/rowers/list-courses/', '/rowers/list-graphs/', '/rowers/list-jobs/', '/rowers/list-workouts/', '/rowers/list-workouts/user/1/', '/rowers/me/calcdps/', '/rowers/me/edit/', '/rowers/me/edit/user/1/', '/rowers/me/exportsettings/', '/rowers/me/exportsettings/user/1/', '/rowers/me/favoritecharts/', '/rowers/me/favoritecharts/user/1/', '/rowers/me/invitation/', '/rowers/me/preferences/', '/rowers/me/preferences/user/1/', '/rowers/me/request/', '/rowers/me/teams/', '/rowers/me/workflowconfig2/', '/rowers/me/workflowconfig2/user/1/', '/rowers/me/workflowdefault/', '/rowers/partners/', '/rowers/physics/', '/rowers/register/', '/rowers/register/thankyou/', '/rowers/sessions/', '/rowers/sessions/coach/', '/rowers/sessions/create/', '/rowers/sessions/manage/', '/rowers/sessions/multiclone/', '/rowers/sessions/multicreate/', '/rowers/sessions/print/', '/rowers/sessions/teamcreate/', '/rowers/workout/'+encoded1+'/', '/rowers/workout/'+encoded1+'/adddistanceplot/', '/rowers/workout/'+encoded1+'/adddistanceplot2/', '/rowers/workout/'+encoded1+'/addotwpowerplot/', '/rowers/workout/'+encoded1+'/addpiechart/', '/rowers/workout/'+encoded1+'/addpowerpiechart/', '/rowers/workout/'+encoded1+'/addstatic/', '/rowers/workout/'+encoded1+'/addstatic/3/', '/rowers/workout/'+encoded1+'/addtimeplot/', '/rowers/workout/'+encoded1+'/addtimeplot2/', '/rowers/workout/'+encoded1+'/comment/', '/rowers/workout/'+encoded1+'/data/', '/rowers/workout/'+encoded1+'/edit/', '/rowers/workout/'+encoded1+'/editintervals/', '/rowers/workout/'+encoded1+'/flexchart/', '/rowers/workout/'+encoded1+'/forcecurve/', '/rowers/workout/'+encoded1+'/get-thumbnails/', '/rowers/workout/'+encoded1+'/image/', '/rowers/workout/'+encoded1+'/instroke/', '/rowers/workout/'+encoded1+'/map/', '/rowers/workout/'+encoded1+'/recalcsummary/', '/rowers/workout/'+encoded1+'/restore/', '/rowers/workout/'+encoded1+'/smoothenpace/', '/rowers/workout/'+encoded1+'/split/', '/rowers/workout/'+encoded1+'/stats/', '/rowers/workout/'+encoded1+'/undosmoothenpace/', '/rowers/workout/'+encoded1+'/unsubscribe/', '/rowers/workout/'+encoded1+'/view/', '/rowers/workout/'+encoded1+'/workflow/', '/rowers/workout/fusion/'+encoded1+'/', '/rowers/workout/upload/', '/rowers/workout/upload/team/', '/rowers/workouts-join/', '/rowers/workouts-join-select/', # '/rowers/api/courses/', # '/rowers/api/courses/?name=Brno', # '/rowers/api/courses/?course_distance=2000', # '/rowers/api/courses/?course_distance=aap', # '/rowers/api/courses/?distance_from=52&latitude=42&longitude=7', # '/rowers/api/courses/?distance_from=50&latitude=42&longitude=-aap', # '/rowers/api/courses/', # '/rowers/api/courses/1/', # '/rowers/list-workouts/?selectworkouts=true', # '/rowers/api/courses/kml/', # '/rowers/api/courses/kml/liked/', # '/rowers/api/courses/kml/?id=1', # '/rowers/api/courses/kml?id=1&id=4/', # '/rowers/api/courses/kml/?id=aap', ] lijst = [] for url in urlstotest: lijst.append( (url,200) ) @parameterized.expand(lijst) @patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.read_df_sql') @patch('rowers.dataprep.read_data') @patch('requests.get',side_effect=mocked_requests) @patch('requests.post',side_effect=mocked_requests) @patch('rowers.dataprep.get_video_data',side_effect=mocked_get_video_data) @patch('rowers.views.statements.sendmail',side_effect=mocked_sendmail) @patch('django.contrib.gis.geoip2.GeoIP2.city', side_effect=mocked_requests) def test_url_generator(self,url,expected, mocked_sqlalchemy, mocked_read_df_sql, mocked_read_data, mock_get, mock_post, mocked_get_video_data, mocked_sendmail, mock_get2): if url not in tested: login = self.c.login(username='john',password='koeinsloot') self.assertTrue(login) response = self.c.get(url,follow=True) if response.status_code != expected: print(url) print(response.status_code) self.assertEqual(response.status_code, expected) html = BeautifulSoup(response.content,'html.parser') urls = [a['href'] for a in html.find_all('a')] for u in urls: if u not in tested and 'rowers' in u and 'http' not in u and 'authorize' not in u and 'import' not in u and 'logout' not in u: response2 = self.c.get(u) if response2.status_code not in [200,302,301]: print(len(tested)) print(response.templates[0].name) print(url) print(u) print(response2.status_code) tested.append(u) self.assertIn(response2.status_code, [200,302,301]) else: tested.append(u)