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
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
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']
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
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)
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']
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]