Пример #1
0
 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)
Пример #2
0
 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)
Пример #3
0
    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)
Пример #4
0
    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)
Пример #5
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)
Пример #6
0
    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
Пример #7
0
 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())
Пример #8
0
    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)
Пример #9
0
    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')
Пример #10
0
    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)
Пример #11
0
    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)
Пример #12
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)
Пример #13
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={'username': user.email, 'password': ''})
            self.assertEquals(rv.status_code, 200)
            self.assertFalse(login_user_mock.called)
Пример #14
0
    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)
Пример #15
0
    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)
Пример #16
0
 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)
Пример #17
0
 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))
Пример #18
0
    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)
Пример #19
0
 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))
Пример #20
0
    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)
Пример #21
0
    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)
Пример #22
0
 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))
Пример #23
0
 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')))
Пример #24
0
    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))
Пример #25
0
    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)
Пример #26
0
    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")
Пример #27
0
    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)
Пример #28
0
    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)
Пример #29
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)
Пример #30
0
 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)
Пример #31
0
    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)
Пример #32
0
    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))
Пример #33
0
    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)
Пример #34
0
 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"], [])
Пример #35
0
    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)
Пример #36
0
    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')
Пример #37
0
    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)
Пример #38
0
    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)
Пример #39
0
    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')
Пример #40
0
    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)
Пример #41
0
 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'], [])
Пример #42
0
    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)
Пример #43
0
    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'])
Пример #44
0
 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)
Пример #45
0
    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, '[]')
Пример #46
0
    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)
Пример #47
0
    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, '[]')
Пример #48
0
 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)
Пример #49
0
 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)
Пример #50
0
 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)
Пример #51
0
    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)
Пример #52
0
    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)
Пример #53
0
 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'], [])
Пример #54
0
 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)
Пример #55
0
    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')
Пример #56
0
 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)
Пример #57
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)
Пример #58
0
    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
Пример #59
0
    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)
Пример #60
0
    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)