def test_logout_when_loggedin(self): with app.test_client() as c, authenticated_user(c, user=self.factory.user): rv = c.get('/default/') self.assertTrue(current_user.is_authenticated) rv = c.get('/default/logout') self.assertEquals(rv.status_code, 302) self.assertFalse(current_user.is_authenticated)
def test_user_api_key(self): user = self.factory.create_user(api_key="user_key") path = '/api/queries/' with app.test_client() as c: signature = sign(user.api_key, path, self.expires) rv = c.get(path, query_string={'signature': signature, 'expires': self.expires, 'user_id': user.id}) self.assertEqual(user.id, hmac_load_user_from_request(request).id)
def test_creates_data_source(self): admin = user_factory.create(groups=['admin', 'default']) with app.test_client() as c, authenticated_user(c, user=admin): rv = json_request(c.post, '/api/data_sources', data={'name': 'DS 1', 'type': 'pg', 'options': '{"dbname": "redash"}'}) self.assertEqual(rv.status_code, 200)
def test_submit_incorrect_password(self): user = self.factory.user with app.test_client() as c, patch('redash.handlers.authentication.login_user') as login_user_mock: rv = c.post('/default/login', data={'email': user.email, 'password': ''}) self.assertEquals(rv.status_code, 200) self.assertFalse(login_user_mock.called)
def test_update_dashboard(self): d = dashboard_factory.create() new_name = "New Name" with app.test_client() as c, authenticated_user(c): rv = json_request(c.post, "/api/dashboards/{0}".format(d.id), data={"name": new_name, "layout": "[]"}) self.assertEquals(rv.status_code, 200) self.assertEquals(rv.json["name"], new_name)
def create_widget(self, dashboard, visualization, width=1): data = {"visualization_id": visualization.id, "dashboard_id": dashboard.id, "options": {}, "width": width} with app.test_client() as c, authenticated_user(c): rv = json_request(c.post, "/api/widgets", data=data) return rv
def test_logout_when_loggedin(self): with app.test_client() as c, authenticated_user(c): rv = c.get('/') self.assertTrue(current_user.is_authenticated()) rv = c.get('/logout') self.assertEquals(rv.status_code, 302) self.assertFalse(current_user.is_authenticated())
def test_returns_400_when_configuration_invalid(self): admin = user_factory.create(groups=['admin', 'default']) with app.test_client() as c, authenticated_user(c, user=admin): rv = json_request(c.post, '/api/data_sources', data={'name': 'DS 1', 'type': 'pg', 'options': '{}'}) self.assertEqual(rv.status_code, 400)
def test_update_query(self): query = query_factory.create() with app.test_client() as c, authenticated_user(c): rv = json_request(c.post, '/api/queries/{0}'.format(query.id), data={'name': 'Testing'}) self.assertEqual(rv.status_code, 200) self.assertEquals(rv.json['name'], 'Testing')
def test_returns_200_for_admin_changing_other_user(self): admin = user_factory.create(groups=['admin', 'default']) user = user_factory.create() with app.test_client() as c, authenticated_user(c, user=admin): rv = json_request(c.post, "/api/users/{}".format(user.id), data={"name": "New Name"}) self.assertEqual(rv.status_code, 200)
def test_delete_visualization(self): visualization = visualization_factory.create() with app.test_client() as c, authenticated_user(c): rv = json_request(c.delete, '/api/visualizations/{0}'.format(visualization.id)) self.assertEquals(rv.status_code, 200) self.assertEquals(models.Visualization.select().count(), 0)
def test_submit_incorrect_password(self): user = user_factory.create() with app.test_client() as c, patch("redash.controllers.login_user") as login_user_mock: rv = c.post("/login", data={"email": user.email, "password": ""}) self.assertEquals(rv.status_code, 200) self.assertFalse(login_user_mock.called)
def test_submit_incorrect_password(self): user = user_factory.create() with app.test_client() as c, patch('redash.controllers.login_user') as login_user_mock: rv = c.post('/login', data={'username': user.email, 'password': ''}) self.assertEquals(rv.status_code, 200) self.assertFalse(login_user_mock.called)
def test_delete_visualization(self): visualization = visualization_factory.create() with app.test_client() as c, authenticated_user(c): rv = json_request(c.delete, "/api/visualizations/{0}".format(visualization.id)) self.assertEquals(rv.status_code, 200) # =1 because each query has a default table visualization. self.assertEquals(models.Visualization.select().count(), 1)
def test_delete_dashboard(self): d = dashboard_factory.create() with app.test_client() as c, authenticated_user(c): rv = json_request(c.delete, '/api/dashboards/{0}'.format(d.slug)) self.assertEquals(rv.status_code, 200) d = models.Dashboard.get_by_slug(d.slug) self.assertTrue(d.is_archived)
def test_logout_when_loggedin(self): with app.test_client() as c, authenticated_user( c, user=self.factory.user): rv = c.get('/default/') self.assertTrue(current_user.is_authenticated) rv = c.get('/default/logout') self.assertEquals(rv.status_code, 302) self.assertFalse(current_user.is_authenticated)
def test_wrong_signature(self): with app.test_client() as c: rv = c.get(self.path, query_string={ 'signature': 'whatever', 'expires': self.expires }) self.assertIsNone(hmac_load_user_from_request(request))
def test_api_key_for_wrong_org(self): other_user = self.factory.create_admin(org=self.factory.create_org()) with app.test_client() as c: rv = c.get( self.query_url, headers={'Authorization': "Key {}".format(other_user.api_key)}) self.assertEqual(404, rv.status_code)
def test_correct_signature(self): with app.test_client() as c: rv = c.get(self.path, query_string={ 'signature': self.signature(self.expires), 'expires': self.expires }) self.assertIsNotNone(hmac_load_user_from_request(request))
def test_creates_data_source(self): admin = user_factory.create(groups=["admin", "default"]) with app.test_client() as c, authenticated_user(c, user=admin): rv = json_request( c.post, "/api/data_sources", data={"name": "DS 1", "type": "pg", "options": {"dbname": "redash"}} ) self.assertEqual(rv.status_code, 200)
def test_get_all_queries(self): queries = [query_factory.create() for _ in range(10)] with app.test_client() as c, authenticated_user(c): rv = json_request(c.get, '/api/queries') self.assertEquals(rv.status_code, 200) self.assertEquals(len(rv.json), 10)
def test_correct_signature(self): with app.test_client() as c: rv = c.get('/api/queries/{0}'.format(self.query.id), query_string={ 'signature': self.signature(self.expires), 'expires': self.expires }) self.assertIsNotNone(hmac_load_user_from_request(request))
def test_redirects_to_google_login_if_password_disabled(self): with app.test_client() as c, patch.object(settings, 'PASSWORD_LOGIN_ENABLED', False): rv = c.get('/login') self.assertEquals(rv.status_code, 302) self.assertTrue( rv.location.endswith(url_for('google_oauth.authorize')))
def test_get_query(self): query = query_factory.create() with app.test_client() as c, authenticated_user(c): rv = json_request(c.get, '/api/queries/{0}'.format(query.id)) self.assertEquals(rv.status_code, 200) self.assertResponseEqual(rv.json, query.to_dict(with_visualizations=True))
def test_update_visualization(self): visualization = visualization_factory.create() with app.test_client() as c, authenticated_user(c): rv = json_request(c.post, "/api/visualizations/{0}".format(visualization.id), data={"name": "After Update"}) self.assertEquals(rv.status_code, 200) self.assertEquals(rv.json["name"], "After Update")
def test_delete_visualization(self): visualization = visualization_factory.create() with app.test_client() as c, authenticated_user(c): rv = json_request( c.delete, '/api/visualizations/{0}'.format(visualization.id)) self.assertEquals(rv.status_code, 200) self.assertEquals(models.Visualization.select().count(), 0)
def test_update_dashboard(self): d = dashboard_factory.create() new_name = 'New Name' with app.test_client() as c, authenticated_user(c): rv = json_request(c.post, '/api/dashboards/{0}'.format(d.id), data={'name': new_name, 'layout': '[]'}) self.assertEquals(rv.status_code, 200) self.assertEquals(rv.json['name'], new_name)
def test_redirect_for_correct_signature_and_wrong_expires(self): with app.test_client() as c: rv = c.get('/api/queries/{0}/results/{1}.csv'.format( self.query.id, self.query_result.id), query_string={ 'signature': self.signature(0), 'expires': 0 }) self.assertEquals(rv.status_code, 302)
def test_submit_incorrect_password(self): user = user_factory.create() with app.test_client() as c, patch( 'redash.handlers.authentication.login_user' ) as login_user_mock: rv = c.post('/login', data={'email': user.email, 'password': ''}) self.assertEquals(rv.status_code, 200) self.assertFalse(login_user_mock.called)
def test_returns_400_when_missing_fields(self): admin = user_factory.create(groups=['admin', 'default']) with app.test_client() as c, authenticated_user(c, user=admin): rv = c.post("/api/data_sources") self.assertEqual(rv.status_code, 400) rv = json_request(c.post, '/api/data_sources', data={'name': 'DS 1'}) self.assertEqual(rv.status_code, 400)
def test_create_new_dashboard(self): user = user_factory.create() with app.test_client() as c, authenticated_user(c, user=user): dashboard_name = "Test Dashboard" rv = json_request(c.post, "/api/dashboards", data={"name": dashboard_name}) self.assertEquals(rv.status_code, 200) self.assertEquals(rv.json["name"], "Test Dashboard") self.assertEquals(rv.json["user_id"], user.id) self.assertEquals(rv.json["layout"], [])
def test_submit_correct_user_and_password_and_remember_me(self): user = user_factory.create() user.hash_password("password") user.save() with app.test_client() as c, patch("redash.controllers.login_user") as login_user_mock: rv = c.post("/login", data={"email": user.email, "password": "******", "remember": True}) self.assertEquals(rv.status_code, 302) login_user_mock.assert_called_with(user, remember=True)
def test_returns_400_when_missing_fields(self): admin = user_factory.create(groups=["admin", "default"]) with app.test_client() as c, authenticated_user(c, user=admin): rv = c.post("/api/data_sources") self.assertEqual(rv.status_code, 400) rv = json_request(c.post, "/api/data_sources", data={"name": "DS 1"}) self.assertEqual(rv.status_code, 400)
def test_submit_correct_user_and_password_and_remember_me(self): user = self.factory.user user.hash_password('password') user.save() with app.test_client() as c, patch('redash.handlers.authentication.login_user') as login_user_mock: rv = c.post('/default/login', data={'email': user.email, 'password': '******', 'remember': True}) self.assertEquals(rv.status_code, 302) login_user_mock.assert_called_with(user, remember=True)
def test_update_visualization(self): visualization = visualization_factory.create() with app.test_client() as c, authenticated_user(c): rv = json_request(c.post, '/api/visualizations/{0}'.format(visualization.id), data={'name': 'After Update'}) self.assertEquals(rv.status_code, 200) self.assertEquals(rv.json['name'], 'After Update')
def test_submit_incorrect_password(self): user = user_factory.create() user.hash_password('password') user.save() with app.test_client() as c, patch('redash.handlers.authentication.login_user') as login_user_mock: rv = c.post('/login', data={'email': user.email, 'password': '******'}) self.assertEquals(rv.status_code, 200) self.assertFalse(login_user_mock.called)
def test_create_new_dashboard(self): user = user_factory.create() with app.test_client() as c, authenticated_user(c, user=user): dashboard_name = 'Test Dashboard' rv = json_request(c.post, '/api/dashboards', data={'name': dashboard_name}) self.assertEquals(rv.status_code, 200) self.assertEquals(rv.json['name'], 'Test Dashboard') self.assertEquals(rv.json['user_id'], user.id) self.assertEquals(rv.json['layout'], [])
def test_submit_correct_user_and_password_and_remember_me(self): user = user_factory.create() user.hash_password('password') user.save() with app.test_client() as c, patch('redash.controllers.login_user') as login_user_mock: rv = c.post('/login', data={'username': user.email, 'password': '******', 'remember': True}) self.assertEquals(rv.status_code, 302) login_user_mock.assert_called_with(user, remember=True)
def test_creates_user(self): admin = user_factory.create(groups=['admin', 'default']) with app.test_client() as c, authenticated_user(c, user=admin): test_user = {'name': 'User', 'email': '*****@*****.**', 'password': '******'} rv = json_request(c.post, '/api/users', data=test_user) self.assertEqual(rv.status_code, 200) self.assertEqual(rv.json['name'], test_user['name']) self.assertEqual(rv.json['email'], test_user['email'])
def test_submit_non_existing_user(self): with app.test_client() as c, patch( 'redash.controllers.login_user') as login_user_mock: rv = c.post('/login', data={ 'email': 'arik', 'password': '******' }) self.assertEquals(rv.status_code, 200) self.assertFalse(login_user_mock.called)
def test_delete_widget(self): widget = widget_factory.create() with app.test_client() as c, authenticated_user(c): rv = json_request(c.delete, '/api/widgets/{0}'.format(widget.id)) self.assertEquals(rv.status_code, 200) dashboard = models.Dashboard.get_by_slug(widget.dashboard.slug) self.assertEquals(dashboard.widgets.count(), 0) self.assertEquals(dashboard.layout, '[]')
def test_returns_400_when_missing_fields(self): admin = user_factory.create(groups=['admin', 'default']) with app.test_client() as c, authenticated_user(c, user=admin): rv = c.post("/api/users") self.assertEqual(rv.status_code, 400) rv = json_request(c.post, '/api/users', data={'name': 'User'}) self.assertEqual(rv.status_code, 400)
def test_redirect_for_correct_signature_and_expires_too_long(self): with app.test_client() as c: expires = time.time() + (10 * 3600) rv = c.get('/api/queries/{0}/results/{1}.csv'.format( self.query.id, self.query_result.id), query_string={ 'signature': self.signature(expires), 'expires': expires }) self.assertEquals(rv.status_code, 302)
def test_submit_incorrect_user(self): with app.test_client() as c, patch( 'redash.controllers.login_user') as login_user_mock: rv = c.post('/login', data={ 'username': '******', 'password': '******' }) self.assertEquals(rv.status_code, 200) self.assertFalse(login_user_mock.called)
def test_returns_200_for_correct_signature(self): with app.test_client() as c: expires = time.time() + 1800 rv = c.get('/api/queries/{0}/results/{1}.csv'.format( self.query.id, self.query_result.id), query_string={ 'signature': self.signature(expires), 'expires': expires }) self.assertEquals(rv.status_code, 200)
def test_get_dashboard(self): d1 = dashboard_factory.create() with app.test_client() as c, authenticated_user(c): rv = c.get('/api/dashboards/{0}'.format(d1.slug)) self.assertEquals(rv.status_code, 200) expected = d1.to_dict(with_widgets=True) actual = json.loads(rv.data) self.assertResponseEqual(expected, actual)
def test_get_query(self): query = query_factory.create() with app.test_client() as c, authenticated_user(c): rv = json_request(c.get, '/api/queries/{0}'.format(query.id)) self.assertEquals(rv.status_code, 200) d = query.to_dict(with_visualizations=True) d.pop('created_at') self.assertDictContainsSubset(d, rv.json)
def test_submit_incorrect_user(self): with app.test_client() as c, patch( 'redash.handlers.authentication.login_user' ) as login_user_mock: rv = c.post('/default/login', data={ 'email': 'non-existing', 'password': '******' }) self.assertEquals(rv.status_code, 200) self.assertFalse(login_user_mock.called)
def test_update_visualization(self): visualization = visualization_factory.create() with app.test_client() as c, authenticated_user(c): rv = json_request(c.post, '/api/visualizations/{0}'.format( visualization.id), data={'name': 'After Update'}) self.assertEquals(rv.status_code, 200) self.assertEquals(rv.json['name'], 'After Update')
def test_user_api_key(self): user = self.factory.create_user(api_key="user_key") path = '/api/queries/' with app.test_client() as c: signature = sign(user.api_key, path, self.expires) rv = c.get(path, query_string={ 'signature': signature, 'expires': self.expires, 'user_id': user.id }) self.assertEqual(user.id, hmac_load_user_from_request(request).id)
def test_update_dashboard(self): d = dashboard_factory.create() new_name = 'New Name' with app.test_client() as c, authenticated_user(c): rv = json_request(c.post, '/api/dashboards/{0}'.format(d.id), data={ 'name': new_name, 'layout': '[]' }) self.assertEquals(rv.status_code, 200) self.assertEquals(rv.json['name'], new_name)
def create_widget(self, dashboard, visualization, width=1): data = { 'visualization_id': visualization.id, 'dashboard_id': dashboard.id, 'options': {}, 'width': width } with app.test_client() as c, authenticated_user(c): rv = json_request(c.post, '/api/widgets', data=data) return rv
def test_returns_400_when_configuration_invalid(self): admin = user_factory.create(groups=['admin', 'default']) with app.test_client() as c, authenticated_user(c, user=admin): rv = json_request(c.post, '/api/data_sources', data={ 'name': 'DS 1', 'type': 'pg', 'options': '{}' }) self.assertEqual(rv.status_code, 400)
def test_creates_data_source(self): admin = user_factory.create(groups=['admin', 'default']) with app.test_client() as c, authenticated_user(c, user=admin): rv = json_request(c.post, '/api/data_sources', data={ 'name': 'DS 1', 'type': 'pg', 'options': '{"dbname": "redash"}' }) self.assertEqual(rv.status_code, 200)