示例#1
0
    def test_view_download(self):
        dsn = database_dsn(settings.DATABASES_DATA['my_database'])
        with connect(dsn) as conn, conn.cursor() as cursor:
            cursor.execute('''
                CREATE TABLE if not exists download_test_table (field2 int,field1 varchar(255));
                TRUNCATE TABLE download_test_table;
                INSERT INTO download_test_table VALUES(1, 'record1');
                INSERT INTO download_test_table VALUES(2, 'record2');
                CREATE OR REPLACE VIEW download_test_view AS SELECT * FROM download_test_table;
                ''')

        dataset = factories.DataSetFactory(
            user_access_type='REQUIRES_AUTHENTICATION')
        source_view = factories.SourceViewFactory(
            dataset=dataset,
            database=factories.DatabaseFactory(memorable_name='my_database'),
            schema='public',
            view='download_test_view',
        )
        log_count = EventLog.objects.count()
        download_count = dataset.number_of_downloads
        response = self._authenticated_get(source_view.get_absolute_url())
        self.assertEqual(response.status_code, 200)
        self.assertEqual(
            b''.join(response.streaming_content),
            b'"field2","field1"\r\n1,"record1"\r\n2,"record2"\r\n"Number of rows: 2"\r\n',
        )
        self.assertEqual(EventLog.objects.count(), log_count + 1)
        self.assertEqual(
            EventLog.objects.latest().event_type,
            EventLog.TYPE_DATASET_SOURCE_VIEW_DOWNLOAD,
        )
        self.assertEqual(
            DataSet.objects.get(pk=dataset.id).number_of_downloads,
            download_count + 1)
 def test_materialized_view_download(self, request_client, published):
     dsn = database_dsn(settings.DATABASES_DATA['my_database'])
     with psycopg2.connect(dsn) as conn, conn.cursor() as cursor:
         cursor.execute('''
             CREATE TABLE if not exists materialized_test_table (field2 int,field1 varchar(255));
             TRUNCATE TABLE materialized_test_table;
             INSERT INTO materialized_test_table VALUES(1, 'record1');
             INSERT INTO materialized_test_table VALUES(2, 'record2');
             DROP MATERIALIZED VIEW IF EXISTS materialized_test_view;
             CREATE MATERIALIZED VIEW materialized_test_view AS
             SELECT * FROM materialized_test_table;
             ''')
     dataset = factories.DataSetFactory(
         user_access_type='REQUIRES_AUTHENTICATION', published=published)
     source_view = factories.SourceViewFactory(
         dataset=dataset,
         database=factories.DatabaseFactory(memorable_name='my_database'),
         schema='public',
         view='materialized_test_view',
     )
     log_count = EventLog.objects.count()
     download_count = dataset.number_of_downloads
     response = request_client.get(source_view.get_absolute_url())
     assert response.status_code == 200
     assert (
         b''.join(response.streaming_content) ==
         b'"field2","field1"\r\n1,"record1"\r\n2,"record2"\r\n"Number of rows: 2"\r\n'
     )
     assert EventLog.objects.count() == log_count + 1
     assert (EventLog.objects.latest().event_type ==
             EventLog.TYPE_DATASET_SOURCE_VIEW_DOWNLOAD)
     assert (DataSet.objects.get(
         pk=dataset.id).number_of_downloads == download_count + 1)
    def test_view_download(self, access_type, request_client, published):
        dsn = database_dsn(settings.DATABASES_DATA["my_database"])
        with psycopg2.connect(dsn) as conn, conn.cursor() as cursor:
            cursor.execute("""
                CREATE TABLE if not exists download_test_table (field2 int,field1 varchar(255));
                TRUNCATE TABLE download_test_table;
                INSERT INTO download_test_table VALUES(1, 'record1');
                INSERT INTO download_test_table VALUES(2, 'record2');
                CREATE OR REPLACE VIEW download_test_view AS SELECT * FROM download_test_table;
                """)

        dataset = factories.DataSetFactory(user_access_type=access_type,
                                           published=published)
        source_view = factories.SourceViewFactory(
            dataset=dataset,
            database=factories.DatabaseFactory(memorable_name="my_database"),
            schema="public",
            view="download_test_view",
        )
        log_count = EventLog.objects.count()
        download_count = dataset.number_of_downloads
        response = request_client.get(source_view.get_absolute_url())
        assert response.status_code == 200
        assert (
            b"".join(response.streaming_content) ==
            b'"field2","field1"\r\n1,"record1"\r\n2,"record2"\r\n"Number of rows: 2"\r\n'
        )
        assert EventLog.objects.count() == log_count + 1
        assert EventLog.objects.latest(
        ).event_type == EventLog.TYPE_DATASET_SOURCE_VIEW_DOWNLOAD
        assert DataSet.objects.get(
            pk=dataset.id).number_of_downloads == download_count + 1
示例#4
0
 def test_forbidden_dataset(self, client):
     dataset = factories.DataSetFactory(user_access_type='REQUIRES_AUTHORIZATION')
     source_view = factories.SourceViewFactory(dataset=dataset)
     log_count = EventLog.objects.count()
     download_count = dataset.number_of_downloads
     response = client.get(source_view.get_absolute_url())
     assert response.status_code == 403
     assert EventLog.objects.count() == log_count
     assert DataSet.objects.get(pk=dataset.id).number_of_downloads == download_count
示例#5
0
def test_view_data_cut_fields(client, dataset_db):
    ds = factories.DataSetFactory.create(published=True)
    factories.SourceViewFactory(
        dataset=ds, database=dataset_db, schema='public', view='dataset_view'
    )

    response = client.get(ds.get_absolute_url())

    assert response.status_code == 200
    assert response.context["fields"] == ['id', 'name', 'date']
示例#6
0
 def test_missing_view(self, client):
     dataset = factories.DataSetFactory(user_access_type='REQUIRES_AUTHENTICATION')
     source_view = factories.SourceViewFactory(
         dataset=dataset,
         database=factories.DatabaseFactory(memorable_name='my_database'),
     )
     download_count = dataset.number_of_downloads
     response = client.get(source_view.get_absolute_url())
     assert response.status_code == 404
     assert DataSet.objects.get(pk=dataset.id).number_of_downloads == download_count
示例#7
0
 def test_forbidden_dataset(self):
     dataset = factories.DataSetFactory(
         user_access_type='REQUIRES_AUTHORIZATION')
     source_view = factories.SourceViewFactory(dataset=dataset)
     log_count = EventLog.objects.count()
     download_count = dataset.number_of_downloads
     response = self._authenticated_get(source_view.get_absolute_url())
     self.assertEqual(response.status_code, 403)
     self.assertEqual(EventLog.objects.count(), log_count)
     self.assertEqual(
         DataSet.objects.get(pk=dataset.id).number_of_downloads,
         download_count)
示例#8
0
 def test_missing_view(self):
     dataset = factories.DataSetFactory(
         user_access_type='REQUIRES_AUTHENTICATION')
     source_view = factories.SourceViewFactory(
         dataset=dataset,
         database=factories.DatabaseFactory(memorable_name='my_database'),
     )
     download_count = dataset.number_of_downloads
     response = self._authenticated_get(source_view.get_absolute_url())
     self.assertEqual(response.status_code, 404)
     self.assertEqual(
         DataSet.objects.get(pk=dataset.id).number_of_downloads,
         download_count)
def test_view_data_cut_fields(client, dataset_db):
    ds = factories.DataSetFactory.create(published=True)
    factories.SourceViewFactory(dataset=ds,
                                database=dataset_db,
                                schema='public',
                                view='dataset_view')

    response = client.get(
        reverse(
            'catalogue:dataset_fullpath',
            kwargs={
                'group_slug': ds.grouping.slug,
                'set_slug': ds.slug
            },
        ))

    assert response.status_code == 200
    assert response.context["fields"] == ['id', 'name', 'date']
示例#10
0
def test_clone_dataset_copies_related_objects(db):
    ds = factories.DataSetFactory.create(published=True)

    factories.DataSetUserPermissionFactory(dataset=ds)
    factories.SourceLinkFactory(dataset=ds)
    factories.SourceViewFactory(dataset=ds)
    factories.SourceTableFactory(dataset=ds)
    factories.CustomDatasetQueryFactory(dataset=ds)

    clone = ds.clone()

    assert not clone.datasetuserpermission_set.all()
    assert [obj.dataset for obj in clone.sourcelink_set.all()] == [clone]
    assert [obj.dataset for obj in clone.sourceview_set.all()] == [clone]
    assert [obj.dataset for obj in clone.sourcetable_set.all()] == [clone]
    assert [obj.dataset for obj in clone.customdatasetquery_set.all()] == [clone]

    assert ds.datasetuserpermission_set.all()
    assert [obj.dataset for obj in ds.sourcelink_set.all()] == [ds]
    assert [obj.dataset for obj in ds.sourceview_set.all()] == [ds]
    assert [obj.dataset for obj in ds.sourcetable_set.all()] == [ds]
    assert [obj.dataset for obj in ds.customdatasetquery_set.all()] == [ds]