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])
Example #2
0
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)
Example #3
0
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()
Example #4
0
    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])
Example #5
0
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)
Example #8
0
def init_db():
    with app.app_context():
        db.drop_all()
        db.create_all()
        create_chartconfigs()