def test_chartconfigs(self): # create a user user = self.get_users()[0] User.generate_fake_user(user['username'], user['email'], user['password']) # create chartconfigs create_chartconfigs() locations = [] # fetch all chartconfigs rv = self.client.get('/chartconfigs', headers=self.get_headers(user['username'], user['password'])) data = json.loads(rv.get_data())['chartconfigs'] from data_visualization.chartjs import chart_types self.assertEqual(len(data), len(chart_types)) for i in xrange(len(data)): self.assertTrue(data[i]['type'], chart_types[i]) locations.append(data[i]['links']['self']) # check the returned 'Location' links for i in xrange(len(locations)): rv = self.client.get(locations[i], headers=self.get_headers( user['username'], user['password'])) data = json.loads(rv.get_data()) self.assertEqual(data['type'], chart_types[i])
def debug_with_user(): with app.app_context(): db.drop_all() db.create_all() create_chartconfigs() from data_visualization.models import User User.generate_fake_user('Fake User', '*****@*****.**', 'fakepassword') app.run(debug=True)
def debug_with_datafactory(): with app.app_context(): db.drop_all() db.create_all() create_chartconfigs() from data_visualization.models import User User.generate_fake_user('Fake User', '*****@*****.**', 'fakepassword') import subprocess datafactory_proc = subprocess.Popen(['python', './datafactory.py']) try: app.run(debug=True) except KeyboardInterrupt: datafactory_proc.kill()
def test_subview_form(self): # add a user user = self.get_users()[0] User.generate_fake_user(user['username'], user['email'], user['password']) self.client.post(path='/forms/login', data=json.dumps({'username': user['username'], 'password': user['password']}), headers=self.get_headers()) # add categories categories = self.get_categories() for category in categories: self.client.post(path='/category', data=json.dumps(category), headers=self.get_headers(user['username'], user['password'])) # add sensors sensors = self.get_sensors() for sensor in sensors: self.client.post(path='/sensor', data=json.dumps(sensor), headers=self.get_headers(user['username'], user['password'])) # add views views = self.get_views() for view in views: self.client.post(path='/view', data=json.dumps(view), headers=self.get_headers(user['username'], user['password'])) # create chartconfigs create_chartconfigs() rv = self.client.get(path='/chartconfigs', headers=self.get_headers(user['username'], user['password'])) chartconfig_types = [chartconf['type'] for chartconf in json.loads(rv.get_data())['chartconfigs']] # sensor_names for user sensor_names = [] rv = self.client.get(path='/user', headers=self.get_headers(user['username'], user['password'])) category_links = json.loads(rv.get_data())['links']['categories'] for category_link in category_links: rv = self.client.get(path=category_link, headers=self.get_headers(user['username'], user['password'])) sensor_links = json.loads(rv.get_data())['links']['sensors'] for sensor_link in sensor_links: rv = self.client.get(path=sensor_link, headers=self.get_headers(user['username'], user['password'])) sensor_names.append(json.loads(rv.get_data())['name']) # get selection for sensor names and chartconfig types from subview form rv = self.client.get(path='/forms/subviews/add/1', headers=self.get_headers()) data = rv.get_data() import re matches = re.findall('">(.*?)</option>', data) self.assertTrue('sensor' in matches[0]) for i in xrange(len(sensor_names)): self.assertEqual(matches[i+1], sensor_names[i]) self.assertTrue('chart' in matches[i+2]) for j in xrange(len(chartconfig_types)): self.assertEqual(matches[i+j+3], chartconfig_types[j])
def debug_with_datareplay(): import subprocess subprocess.call([ 'python', './generate_parkingspace_datadefinitions.py', '-c', '20', '-t', '60', '-n', '4', '-x', '8', '-a', '47.475382', '-o', '19.056040', '-r', '0.0025' ]) with app.app_context(): db.drop_all() db.create_all() create_chartconfigs() from data_visualization.models import User User.generate_fake_user('Fake User', '*****@*****.**', 'fakepassword') datareplay_proc = subprocess.Popen(['python', './datareplay.py']) try: app.run(debug=True) except KeyboardInterrupt: datareplay_proc.kill()
def test_views(self): # create users users = self.get_users() for user in users: User.generate_fake_user(user['username'], user['email'], user['password']) # create categories categories = self.get_categories() for category in categories: user = users[category['user_id'] - 1] self.client.post(path='/category', data=json.dumps(category), headers=self.get_headers(user['username'], user['password'])) # create sensors sensors = self.get_sensors() for sensor in sensors: user = users[categories[sensor['category_id'] - 1]['user_id'] - 1] self.client.post(path='/sensor', data=json.dumps(sensor), headers=self.get_headers(user['username'], user['password'])) # create chartconfigs create_chartconfigs() # create views views = self.get_views() locations = [] for view in views: user = users[view['user_id'] - 1] rv = self.client.post(path='/view', data=json.dumps(view), headers=self.get_headers( user['username'], user['password'])) self.assertEqual(rv.status_code, 201) locations.append(rv.headers['Location']) # try to create view with 'count' > 4 user = users[0] rv = self.client.post(path='/view', data=json.dumps({'count': 5}), headers=self.get_headers(user['username'], user['password'])) self.assertEqual(rv.status_code, 400) # try to create view with 'count' not in [1, 2, 4] rv = self.client.post(path='/view', data=json.dumps({'count': 3}), headers=self.get_headers(user['username'], user['password'])) self.assertEqual(rv.status_code, 400) # create subviews subviews = self.get_subviews() subview_locations = [] for subview in subviews: user = users[categories[sensors[subview['sensor_id'] - 1]['category_id'] - 1]['user_id'] - 1] rv = self.client.post(path='/subview', data=json.dumps(subview), headers=self.get_headers( user['username'], user['password'])) subview_locations.append(rv.headers['Location']) # check the returned 'Location' links expected_icons = ['2x1', '1x1'] for i in xrange(len(locations)): user = users[views[i]['user_id'] - 1] rv = self.client.get(path=locations[i], headers=self.get_headers( user['username'], user['password'])) data = json.loads(rv.get_data()) self.assertEqual(data['count'], views[i]['count']) self.assertEqual(len(data['links']['subviews']), views[i]['count']) self.assertTrue(expected_icons[i] in data['links']['icon']) # modify views[0] user = users[views[0]['user_id'] - 1] views[0]['name'] = 'modifiedview' views[0]['count'] = 4 rv = self.client.put(path=locations[0], data=json.dumps(views[0]), headers=self.get_headers(user['username'], user['password'])) self.assertEqual(rv.status_code, 201) data = json.loads(rv.get_data()) self.assertEqual(data['name'], 'modifiedview') self.assertEqual(data['count'], 4) self.assertTrue('2x2' in data['links']['icon']) # try to modify the 'count' in views[1] user = users[views[1]['user_id'] - 1] views[1]['count'] = 1 rv = self.client.put(path=locations[1], data=json.dumps(views[1]), headers=self.get_headers(user['username'], user['password'])) self.assertEqual(rv.status_code, 400) views[1]['count'] = 3 rv = self.client.put(path=locations[1], data=json.dumps(views[1]), headers=self.get_headers(user['username'], user['password'])) self.assertEqual(rv.status_code, 400) views[1]['count'] = 5 rv = self.client.put(path=locations[1], data=json.dumps(views[1]), headers=self.get_headers(user['username'], user['password'])) self.assertEqual(rv.status_code, 400) # try to modify the 'refresh_time' in views[0] user = users[views[0]['user_id'] - 1] views[0]['refresh_time'] = 9 rv = self.client.put(path=locations[0], data=json.dumps(views[0]), headers=self.get_headers(user['username'], user['password'])) self.assertEqual(rv.status_code, 400) views[0]['refresh_time'] = 61 rv = self.client.put(path=locations[0], data=json.dumps(views[0]), headers=self.get_headers(user['username'], user['password'])) self.assertEqual(rv.status_code, 400) # remove views for i in xrange(len(locations)): user = users[views[i]['user_id'] - 1] rv = self.client.delete(path=locations[i], headers=self.get_headers( user['username'], user['password'])) self.assertEqual(rv.status_code, 204) # check if subviews were removed for i in xrange(len(subview_locations)): user = users[categories[sensors[subviews[i]['sensor_id'] - 1]['category_id'] - 1]['user_id'] - 1] rv = self.client.get(path=subview_locations[i], headers=self.get_headers( user['username'], user['password'])) self.assertEqual(rv.status_code, 400)
def test_subviews(self): # create users users = self.get_users() for user in users: User.generate_fake_user(user['username'], user['email'], user['password']) # create categories categories = self.get_categories() for category in categories: user = users[category['user_id'] - 1] self.client.post(path='/category', data=json.dumps(category), headers=self.get_headers(user['username'], user['password'])) # create sensors sensors = self.get_sensors() for sensor in sensors: user = users[categories[sensor['category_id'] - 1]['user_id'] - 1] self.client.post(path='/sensor', data=json.dumps(sensor), headers=self.get_headers(user['username'], user['password'])) # create chartconfigs create_chartconfigs() # create views views = self.get_views() for view in views: user = users[view['user_id'] - 1] self.client.post(path='/view', data=json.dumps(view), headers=self.get_headers(user['username'], user['password'])) # create subviews subviews = self.get_subviews() locations = [] for subview in subviews: user = users[categories[sensors[subview['sensor_id'] - 1]['category_id'] - 1]['user_id'] - 1] rv = self.client.post(path='/subview', data=json.dumps(subview), headers=self.get_headers( user['username'], user['password'])) self.assertEqual(rv.status_code, 201) locations.append(rv.headers['Location']) # check the returned 'Location' links for i in xrange(len(locations)): user = users[categories[sensors[subviews[i]['sensor_id'] - 1]['category_id'] - 1]['user_id'] - 1] rv = self.client.get(path=locations[i], headers=self.get_headers( user['username'], user['password'])) data = json.loads(rv.get_data()) self.assertEqual(data['sensor_id'], subviews[i]['sensor_id']) self.assertEqual(data['chartconfig_id'], subviews[i]['chartconfig_id']) # modify subviews[0] user = users[categories[sensors[subviews[0]['sensor_id'] - 1]['category_id'] - 1]['user_id'] - 1] subviews[0]['sensor_id'] = 2 subviews[0]['chartconfig_id'] = 4 rv = self.client.put(path=locations[0], data=json.dumps(subviews[0]), headers=self.get_headers(user['username'], user['password'])) self.assertEqual(rv.status_code, 201) data = json.loads(rv.get_data()) self.assertEqual(data['sensor_id'], 2) self.assertEqual(data['chartconfig_id'], 4) sensor_location = data['links']['sensor'] chartconfig_location = data['links']['chartconfig'] # remove subviews[0] rv = self.client.delete(path=locations[0], data=json.dumps(subviews[0]), headers=self.get_headers( user['username'], user['password'])) self.assertEqual(rv.status_code, 204) rv = self.client.get(path=locations[0], data=json.dumps(subviews[0]), headers=self.get_headers(user['username'], user['password'])) self.assertEqual(rv.status_code, 400) # check if sensor and chartconfig are still there rv = self.client.get(path=sensor_location, headers=self.get_headers(user['username'], user['password'])) self.assertEqual(rv.status_code, 200) rv = self.client.get(path=chartconfig_location, headers=self.get_headers(user['username'], user['password'])) self.assertEqual(rv.status_code, 200)
def init_db(): with app.app_context(): db.drop_all() db.create_all() create_chartconfigs()