Skip to content
Snippets Groups Projects
Select Git revision
  • 210602df9e0ca8f922bb14b7f0a64f163909e177
  • master default protected
  • dev protected
  • replication_test
  • release-1.10 protected
  • release-1.9 protected
  • 551-init-broker-service-permissions
  • 549-test-oai-pmh
  • 545-saving-multiple-times-breaks-pid-metadata
  • 499-standalone-compute-service-2
  • 539-load-tests
  • hotfix/helm-chart
  • luca_ba_new_interface
  • 534-bug-when-adding-access-to-user-that-is-not-registered-at-dashboard-service
  • release-1.8 protected
  • 533-integrate-semantic-recommendation
  • feature/openshift
  • 518-spark-doesn-t-map-the-headers-correct
  • 485-fixity-checks
  • 530-various-schema-problems-with-subsets
  • release-1.7 protected
  • v1.10.2 protected
  • v1.10.1 protected
  • v1.10.0-rc13 protected
  • v1.10.0-rc12 protected
  • v1.10.0-rc11 protected
  • v1.10.0-rc10 protected
  • v1.10.0-rc9 protected
  • v1.10.0-rc8 protected
  • v1.10.0-rc7 protected
  • v1.10.0-rc6 protected
  • v1.10.0-rc5 protected
  • v1.10.0-rc4 protected
  • v1.10.0-rc3 protected
  • v1.10.0-rc2 protected
  • v1.10.0rc1 protected
  • v1.10.0rc0 protected
  • v1.10.0 protected
  • v1.9.3 protected
  • v1.9.2 protected
  • v1.9.2-rc0 protected
41 results

build-docs.sh

Blame
  • test_unit_view.py 12.42 KiB
    import unittest
    from json import dumps
    
    import requests_mock
    import datetime
    
    from dbrepo.RestClient import RestClient
    from pandas import DataFrame
    
    from dbrepo.api.dto import UserAttributes, User, View, Result, ViewColumn, ColumnType
    from dbrepo.api.exceptions import ForbiddenError, NotExistsError, MalformedError, AuthenticationError
    
    
    class ViewUnitTest(unittest.TestCase):
    
        def test_get_views_empty_succeeds(self):
            with requests_mock.Mocker() as mock:
                # mock
                mock.get('/api/database/1/view', json=[])
                # test
                response = RestClient().get_views(database_id=1)
                self.assertEqual([], response)
    
        def test_get_views_succeeds(self):
            with requests_mock.Mocker() as mock:
                exp = [View(id=1,
                            name="Data",
                            internal_name="data",
                            database_id=1,
                            initial_view=False,
                            query="SELECT id FROM mytable WHERE deg > 0",
                            query_hash="94c74728b11a690e51d64719868824735f0817b7",
                            creator=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise',
                                         attributes=UserAttributes(theme='light')),
                            is_public=True,
                            columns=[ViewColumn(id=1, name="id", internal_name="id", database_id=1, auto_generated=False,
                                                column_type=ColumnType.BIGINT, is_public=True, is_null_allowed=False)],
                            created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
                            last_modified=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
                            identifiers=[])]
                # mock
                mock.get('/api/database/1/view', json=[exp[0].model_dump()])
                # test
                response = RestClient().get_views(database_id=1)
                self.assertEqual(exp, response)
    
        def test_get_views_not_allowed_fails(self):
            with requests_mock.Mocker() as mock:
                # mock
                mock.get('/api/database/1/view', status_code=403)
                # test
                try:
                    response = RestClient().get_views(database_id=1)
                except ForbiddenError:
                    pass
    
        def test_get_views_not_found_fails(self):
            with requests_mock.Mocker() as mock:
                # mock
                mock.get('/api/database/1/view', status_code=404)
                # test
                try:
                    response = RestClient().get_views(database_id=1)
                except NotExistsError:
                    pass
    
        def test_get_view_succeeds(self):
            with requests_mock.Mocker() as mock:
                exp = View(id=3,
                           name="Data",
                           internal_name="data",
                           database_id=1,
                           initial_view=False,
                           query="SELECT id FROM mytable WHERE deg > 0",
                           query_hash="94c74728b11a690e51d64719868824735f0817b7",
                           creator=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise',
                                        attributes=UserAttributes(theme='light')),
                           is_public=True,
                           columns=[ViewColumn(id=1, name="id", internal_name="id", database_id=1, auto_generated=False,
                                               column_type=ColumnType.BIGINT, is_public=True, is_null_allowed=False)],
                           created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
                           last_modified=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
                           identifiers=[])
                # mock
                mock.get('/api/database/1/view/3', json=exp.model_dump())
                # test
                response = RestClient().get_view(database_id=1, view_id=3)
                self.assertEqual(exp, response)
    
        def test_get_view_not_allowed_fails(self):
            with requests_mock.Mocker() as mock:
                # mock
                mock.get('/api/database/1/view/3', status_code=403)
                # test
                try:
                    response = RestClient().get_view(database_id=1, view_id=3)
                except ForbiddenError:
                    pass
    
        def test_get_views_not_found_fails(self):
            with requests_mock.Mocker() as mock:
                # mock
                mock.get('/api/database/1/view/3', status_code=404)
                # test
                try:
                    response = RestClient().get_view(database_id=1, view_id=3)
                except NotExistsError:
                    pass
    
        def test_create_view_succeeds(self):
            with requests_mock.Mocker() as mock:
                exp = View(id=3,
                           name="Data",
                           internal_name="data",
                           database_id=1,
                           initial_view=False,
                           query="SELECT id FROM mytable WHERE deg > 0",
                           query_hash="94c74728b11a690e51d64719868824735f0817b7",
                           creator=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise',
                                        attributes=UserAttributes(theme='light')),
                           is_public=True,
                           columns=[ViewColumn(id=1, name="id", internal_name="id", database_id=1, auto_generated=False,
                                               column_type=ColumnType.BIGINT, is_public=True, is_null_allowed=False)],
                           created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
                           last_modified=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
                           identifiers=[])
                # mock
                mock.post('/api/database/1/view', json=exp.model_dump(), status_code=201)
                # test
                client = RestClient(username="a", password="b")
                response = client.create_view(database_id=1, name="Data", is_public=True,
                                              query="SELECT id FROM mytable WHERE deg > 0")
                self.assertEqual(exp, response)
    
        def test_create_view_malformed_fails(self):
            with requests_mock.Mocker() as mock:
                # mock
                mock.post('/api/database/1/view', status_code=400)
                # test
                try:
                    client = RestClient(username="a", password="b")
                    response = client.create_view(database_id=1, name="Data", is_public=True,
                                                  query="SELECT id FROM mytable WHERE deg > 0")
                except MalformedError:
                    pass
    
        def test_create_view_not_allowed_fails(self):
            with requests_mock.Mocker() as mock:
                # mock
                mock.post('/api/database/1/view', status_code=403)
                # test
                try:
                    client = RestClient(username="a", password="b")
                    response = client.create_view(database_id=1, name="Data", is_public=True,
                                                  query="SELECT id FROM mytable WHERE deg > 0")
                except ForbiddenError:
                    pass
    
        def test_create_view_not_found_fails(self):
            with requests_mock.Mocker() as mock:
                # mock
                mock.post('/api/database/1/view', status_code=404)
                # test
                try:
                    client = RestClient(username="a", password="b")
                    response = client.create_view(database_id=1, name="Data", is_public=True,
                                                  query="SELECT id FROM mytable WHERE deg > 0")
                except NotExistsError:
                    pass
    
        def test_create_view_not_auth_fails(self):
            with requests_mock.Mocker() as mock:
                # mock
                mock.post('/api/database/1/view', status_code=404)
                # test
                try:
                    response = RestClient().create_view(database_id=1, name="Data", is_public=True,
                                                        query="SELECT id FROM mytable WHERE deg > 0")
                except AuthenticationError:
                    pass
    
        def test_delete_view_succeeds(self):
            with requests_mock.Mocker() as mock:
                # mock
                mock.delete('/api/database/1/view/3', status_code=202)
                # test
                client = RestClient(username="a", password="b")
                client.delete_view(database_id=1, view_id=3)
    
        def test_delete_view_malformed_fails(self):
            with requests_mock.Mocker() as mock:
                # mock
                mock.delete('/api/database/1/view/3', status_code=400)
                # test
                try:
                    client = RestClient(username="a", password="b")
                    client.delete_view(database_id=1, view_id=3)
                except MalformedError:
                    pass
    
        def test_delete_view_not_allowed_fails(self):
            with requests_mock.Mocker() as mock:
                # mock
                mock.delete('/api/database/1/view/3', status_code=403)
                # test
                try:
                    client = RestClient(username="a", password="b")
                    client.delete_view(database_id=1, view_id=3)
                except ForbiddenError:
                    pass
    
        def test_delete_view_not_auth_fails(self):
            with requests_mock.Mocker() as mock:
                # mock
                mock.delete('/api/database/1/view/3', status_code=403)
                # test
                try:
                    RestClient().delete_view(database_id=1, view_id=3)
                except AuthenticationError:
                    pass
    
        def test_get_view_data_succeeds(self):
            with requests_mock.Mocker() as mock:
                exp = Result(result=[{'id': 1, 'username': 'foo'}, {'id': 2, 'username': 'bar'}],
                             headers=[{'id': 0, 'username': 1}],
                             id=None)
                # mock
                mock.get('/api/database/1/view/3/data', json=exp.model_dump())
                # test
                response = RestClient().get_view_data(database_id=1, view_id=3)
                self.assertEqual(exp, response)
    
        def test_get_view_data_dataframe_succeeds(self):
            with requests_mock.Mocker() as mock:
                res = Result(result=[{'id': 1, 'username': 'foo'}, {'id': 2, 'username': 'bar'}],
                             headers=[{'id': 0, 'username': 1}],
                             id=None)
                exp = DataFrame.from_records(res.model_dump()['result'])
                # mock
                mock.get('/api/database/1/view/3/data', json=res.model_dump())
                # test
                response: DataFrame = RestClient().get_view_data(database_id=1, view_id=3, df=True)
                self.assertEqual(exp.shape, response.shape)
                self.assertTrue(DataFrame.equals(exp, response))
    
        def test_get_view_data_malformed_fails(self):
            with requests_mock.Mocker() as mock:
                # mock
                mock.get('/api/database/1/view/3/data', status_code=400)
                # test
                try:
                    response = RestClient().get_view_data(database_id=1, view_id=3)
                except MalformedError:
                    pass
    
        def test_get_view_data_not_allowed_fails(self):
            with requests_mock.Mocker() as mock:
                # mock
                mock.get('/api/database/1/view/3/data', status_code=403)
                # test
                try:
                    response = RestClient().get_view_data(database_id=1, view_id=3)
                except ForbiddenError:
                    pass
    
        def test_get_view_data_count_succeeds(self):
            with requests_mock.Mocker() as mock:
                exp = 844737
                # mock
                mock.head('/api/database/1/view/3/data', headers={'X-Count': str(exp)})
                # test
                response = RestClient().get_view_data_count(database_id=1, view_id=3)
                self.assertEqual(exp, response)
    
        def test_get_view_data_count_malformed_fails(self):
            with requests_mock.Mocker() as mock:
                # mock
                mock.head('/api/database/1/view/3/data', status_code=400)
                # test
                try:
                    response = RestClient().get_view_data_count(database_id=1, view_id=3)
                except MalformedError:
                    pass
    
        def test_get_view_data_count_not_allowed_fails(self):
            with requests_mock.Mocker() as mock:
                # mock
                mock.head('/api/database/1/view/3/data', status_code=403)
                # test
                try:
                    response = RestClient().get_view_data_count(database_id=1, view_id=3)
                except ForbiddenError:
                    pass
    
    
    if __name__ == "__main__":
        unittest.main()