예제 #1
0
    def test_dataset_subscription_info(self, mock_fetch):
        # Given
        mock_fetch.return_value = test_subscription_info
        credentials = Credentials('fake_user', '1234')
        dataset = Dataset(db_dataset1)

        # When
        info = dataset.subscription_info(credentials)

        # Then
        mock_fetch.assert_called_once_with(db_dataset1['id'], 'dataset',
                                           credentials)
        assert isinstance(info, SubscriptionInfo)
        assert info.id == test_subscription_info['id']
        assert info.estimated_delivery_days == test_subscription_info[
            'estimated_delivery_days']
        assert info.subscription_list_price == test_subscription_info[
            'subscription_list_price']
        assert info.tos == test_subscription_info['tos']
        assert info.tos_link == test_subscription_info['tos_link']
        assert info.licenses == test_subscription_info['licenses']
        assert info.licenses_link == test_subscription_info['licenses_link']
        assert info.rights == test_subscription_info['rights']
        assert str(info) == 'Properties: id, estimated_delivery_days, ' + \
                            'subscription_list_price, tos, tos_link, ' + \
                            'licenses, licenses_link, rights'
예제 #2
0
    def test_dataset_is_available_in_with_empty_field(self):
        # Given
        db_dataset = dict(db_dataset1)
        db_dataset['available_in'] = None
        dataset_null = Dataset(db_dataset)

        # Then
        assert not dataset_null._is_available_in('bq')
예제 #3
0
    def test_summary_tail(self):
        # Given
        dataset = Dataset(db_dataset2)

        # When
        summary = dataset.tail()

        # Then
        assert isinstance(summary, pd.DataFrame)
예제 #4
0
    def test_summary_counts(self):
        # Given
        dataset = Dataset(db_dataset2)

        # When
        summary = dataset.counts()

        # Then
        assert isinstance(summary, pd.Series)
예제 #5
0
    def test_summary_fields_by_type(self):
        # Given
        dataset = Dataset(db_dataset2)

        # When
        summary = dataset.fields_by_type()

        # Then
        assert isinstance(summary, pd.Series)
예제 #6
0
    def test_dataset_subscription_info_default_credentials(self, mocked_credentials, mock_fetch):
        # Given
        expected_credentials = Credentials('fake_user', '1234')
        mocked_credentials.return_value = expected_credentials
        dataset = Dataset(db_dataset1)

        # When
        dataset.subscription_info()

        # Then
        mock_fetch.assert_called_once_with(db_dataset1['id'], 'dataset', expected_credentials)
예제 #7
0
    def test_dataset_subscribe_default_credentials(self, mocked_credentials, mock_display_form, mock_subscription_ids):
        # Given
        expected_credentials = Credentials('fake_user', '1234')
        mocked_credentials.return_value = expected_credentials
        dataset = Dataset(db_dataset1)

        # When
        dataset.subscribe()

        # Then
        mock_subscription_ids.assert_called_once_with(expected_credentials)
        mock_display_form.assert_called_once_with(db_dataset1['id'], 'dataset', expected_credentials)
예제 #8
0
    def test_dataset_is_exported_as_dict(self):
        # Given
        dataset = Dataset(db_dataset1)
        excluded_fields = ['summary_json', 'available_in']
        expected_dict = {key: value for key, value in db_dataset1.items() if key not in excluded_fields}

        # When
        dataset_dict = dataset.to_dict()

        # Then
        assert isinstance(dataset_dict, dict)
        assert dataset_dict == expected_dict
예제 #9
0
    def test_dataset_subscription_info_wrong_credentials(self):
        # Given
        wrong_credentials = 1234
        dataset = Dataset(db_dataset1)

        # When
        with pytest.raises(ValueError) as e:
            dataset.subscription_info(wrong_credentials)

        # Then
        assert str(e.value) == ('Credentials attribute is required. '
                                'Please pass a `Credentials` instance '
                                'or use the `set_default_credentials` function.')
예제 #10
0
    def test_dataset_subscribe_existing(self, mock_display_message, mock_display_form, mock_subscription_ids):
        # Given
        expected_id = db_dataset1['id']
        expected_subscribed_ids = [expected_id]
        mock_subscription_ids.return_value = expected_subscribed_ids
        credentials = Credentials('fake_user', '1234')
        dataset = Dataset(db_dataset1)

        # When
        dataset.subscribe(credentials)

        # Then
        mock_subscription_ids.assert_called_once_with(credentials)
        mock_display_message.assert_called_once_with(expected_id, 'dataset')
        assert not mock_display_form.called
예제 #11
0
    def test_get_all_datasets_credentials_without_do_enabled(self, mocked_repo):
        # Given
        def raise_exception(a, b):
            raise ServerErrorException(['The user does not have Data Observatory enabled'])
        mocked_repo.side_effect = raise_exception
        credentials = Credentials('fake_user', '1234')

        # When
        with pytest.raises(Exception) as e:
            Dataset.get_all(credentials=credentials)

        # Then
        assert str(e.value) == (
            'We are sorry, the Data Observatory is not enabled for your account yet. '
            'Please contact your customer success manager or send an email to '
            '[email protected] to request access to it.')
예제 #12
0
    def test_missing_fields_are_mapped_as_None(self, mocked_repo):
        # Given
        mocked_repo.return_value = [{'id': 'dataset1'}]
        repo = DatasetRepository()

        expected_datasets = CatalogList([
            Dataset({
                'id': 'dataset1',
                'slug': None,
                'name': None,
                'description': None,
                'provider_id': None,
                'provider_name': None,
                'category_id': None,
                'category_name': None,
                'data_source_id': None,
                'country_id': None,
                'lang': None,
                'geography_id': None,
                'geography_name': None,
                'geography_description': None,
                'temporal_aggregation': None,
                'time_coverage': None,
                'update_frequency': None,
                'version': None,
                'is_public_data': None,
                'summary_json': None
            })
        ])

        # When
        datasets = repo.get_all()

        # Then
        assert datasets == expected_datasets
예제 #13
0
    def test_dataset_download_without_do_enabled(self, download_stream_mock,
                                                 get_by_id_mock, get_all_mock):
        # Given
        get_by_id_mock.return_value = test_dataset1
        dataset = Dataset.get(test_dataset1.id)
        get_all_mock.return_value = []

        def raise_exception(limit=None,
                            order_by=None,
                            sql_query=None,
                            add_geom=None,
                            is_geography=None):
            raise ServerErrorException(
                ['The user does not have Data Observatory enabled'])

        download_stream_mock.side_effect = raise_exception
        credentials = Credentials('fake_user', '1234')

        # When
        with pytest.raises(Exception) as e:
            dataset.to_csv('fake_path', credentials)

        # Then
        assert str(e.value) == (
            'We are sorry, the Data Observatory is not enabled for your account yet. '
            'Please contact your customer success manager or send an email to '
            '[email protected] to request access to it.')
예제 #14
0
    def test_dataset_subscription_info_without_do_enabled(self, mock_fetch):
        # Given
        def raise_exception(a, b, c):
            raise ServerErrorException(['The user does not have Data Observatory enabled'])
        mock_fetch.side_effect = raise_exception
        dataset = Dataset(db_dataset1)
        credentials = Credentials('fake_user', '1234')

        # When
        with pytest.raises(Exception) as e:
            dataset.subscription_info(credentials)

        # Then
        assert str(e.value) == (
            'We are sorry, the Data Observatory is not enabled for your account yet. '
            'Please contact your customer success manager or send an email to '
            '[email protected] to request access to it.')
예제 #15
0
    def test_dataset_is_represented_with_classname_and_slug(self):
        # Given
        dataset = Dataset(db_dataset1)

        # When
        dataset_repr = repr(dataset)

        # Then
        assert dataset_repr == "<Dataset.get('{id}')>".format(id=db_dataset1['slug'])
예제 #16
0
    def test_dataset_is_printed_with_classname(self):
        # Given
        dataset = Dataset(db_dataset1)

        # When
        dataset_str = str(dataset)

        # Then
        assert dataset_str == "<Dataset.get('{id}')>".format(id=db_dataset1['slug'])
예제 #17
0
    def test_dataset_download_not_subscribed_but_public(self, mocked_bq_client, get_by_id_mock, get_all_mock):
        # Given
        get_by_id_mock.return_value = test_dataset1  # is public
        dataset = Dataset.get(test_dataset1.id)
        get_all_mock.return_value = []
        mocked_bq_client.return_value = BigQueryClientMock()
        credentials = Credentials('fake_user', '1234')

        dataset.to_csv('fake_path', credentials)
예제 #18
0
    def test_dataset_download_not_subscribed_but_public(
            self, download_stream_mock, get_by_id_mock, get_all_mock):
        # Given
        get_by_id_mock.return_value = test_dataset1  # is public
        dataset = Dataset.get(test_dataset1.id)
        get_all_mock.return_value = []
        download_stream_mock.return_value = []
        credentials = Credentials('fake_user', '1234')

        dataset.to_csv('fake_path', credentials)
예제 #19
0
    def test_summary_values(self):
        # Given
        dataset = Dataset(db_dataset2)

        # When
        summary = dataset.summary

        # Then

        assert summary == dataset.data['summary_json']
예제 #20
0
    def test_dataset_download_not_subscribed_but_public(
            self, mock_download_stream, mock_get_by_id):
        # Given
        mock_get_by_id.return_value = test_dataset1  # is public
        dataset = Dataset.get(test_dataset1.id)
        mock_download_stream.return_value = []
        credentials = Credentials('fake_user', '1234')

        dataset.to_csv('fake_path', credentials)
        os.remove('fake_path')
예제 #21
0
    def test_dataset_download(self, mocked_bq_client, get_by_id_mock, get_all_mock):
        # Given
        get_by_id_mock.return_value = test_dataset1
        dataset = Dataset.get(test_dataset1.id)
        get_all_mock.return_value = [dataset]
        mocked_bq_client.return_value = BigQueryClientMock()
        credentials = Credentials('fake_user', '1234')

        # Then
        dataset.to_csv('fake_path', credentials)
예제 #22
0
    def test_get_dataset_by_id(self, mocked_repo):
        # Given
        mocked_repo.return_value = test_dataset1

        # When
        dataset = Dataset.get(test_dataset1.id)

        # Then
        assert isinstance(dataset, object)
        assert isinstance(dataset, Dataset)
        assert dataset == test_dataset1
예제 #23
0
    def test_get_all_datasets(self, mocked_repo):
        # Given
        mocked_repo.return_value = test_datasets

        # When
        datasets = Dataset.get_all()

        # Then
        assert isinstance(datasets, list)
        assert isinstance(datasets, CatalogList)
        assert datasets == test_datasets
예제 #24
0
    def test_dataset_download(self, download_stream_mock, get_by_id_mock,
                              get_all_mock):
        # Given
        get_by_id_mock.return_value = test_dataset1
        dataset = Dataset.get(test_dataset1.id)
        get_all_mock.return_value = [dataset]
        download_stream_mock.return_value = []
        credentials = Credentials('fake_user', '1234')

        # Then
        dataset.to_csv('fake_path', credentials)
예제 #25
0
    def test_dataset_download(self, mock_download_stream, mock_get_by_id,
                              mock_subscription_ids):
        # Given
        mock_get_by_id.return_value = test_dataset1
        dataset = Dataset.get(test_dataset1.id)
        mock_download_stream.return_value = []
        mock_subscription_ids.return_value = [test_dataset1.id]
        credentials = Credentials('fake_user', '1234')

        # Then
        dataset.to_csv('fake_path', credentials)
        os.remove('fake_path')
예제 #26
0
    def test_get_all_datasets_credentials(self, mocked_repo):
        # Given
        mocked_repo.return_value = test_datasets
        credentials = Credentials('fake_user', '1234')

        # When
        datasets = Dataset.get_all(credentials=credentials)

        # Then
        mocked_repo.assert_called_once_with(None, credentials)
        assert isinstance(datasets, list)
        assert isinstance(datasets, CatalogList)
        assert datasets == test_datasets
예제 #27
0
    def test_dataset_is_available_in(self):
        # Given
        dataset_in_bq = Dataset(db_dataset1)
        dataset_not_in_bq = Dataset(db_dataset2)

        # Then
        assert dataset_in_bq._is_available_in('bq')
        assert not dataset_not_in_bq._is_available_in('bq')
예제 #28
0
    def test_dataset_not_subscribed_download_fails(self, get_by_id_mock,
                                                   get_all_mock):
        # mock dataset
        get_by_id_mock.return_value = test_dataset2  # is private
        dataset = Dataset.get(test_dataset2.id)
        get_all_mock.return_value = []
        credentials = Credentials('fake_user', '1234')

        # When
        with pytest.raises(Exception) as e:
            dataset.to_csv('fake_path', credentials)

        # Then
        assert str(e.value) == ('You are not subscribed to this Dataset yet. '
                                'Please, use the subscribe method first.')
예제 #29
0
    def test_dataset_download_without_do_enabled(self, mocked_bq_client, get_by_id_mock, get_all_mock):
        # Given
        get_by_id_mock.return_value = test_dataset1
        dataset = Dataset.get(test_dataset1.id)
        get_all_mock.return_value = []
        mocked_bq_client.return_value = BigQueryClientMock(
            ServerErrorException(['The user does not have Data Observatory enabled'])
        )
        credentials = Credentials('fake_user', '1234')

        # When
        with pytest.raises(Exception) as e:
            dataset.to_csv('fake_path', credentials)

        # Then
        assert str(e.value) == (
            'We are sorry, the Data Observatory is not enabled for your account yet. '
            'Please contact your customer success manager or send an email to '
            '[email protected] to request access to it.')
예제 #30
0
    def test_dataset_properties(self):
        # Given
        dataset = Dataset(db_dataset1)

        # When
        dataset_id = dataset.id
        slug = dataset.slug
        name = dataset.name
        description = dataset.description
        provider = dataset.provider
        category = dataset.category
        data_source = dataset.data_source
        country = dataset.country
        language = dataset.language
        geography = dataset.geography
        temporal_aggregation = dataset.temporal_aggregation
        time_coverage = dataset.time_coverage
        update_frequency = dataset.update_frequency
        version = dataset.version
        is_public_data = dataset.is_public_data
        summary = dataset.summary

        # Then
        assert dataset_id == db_dataset1['id']
        assert slug == db_dataset1['slug']
        assert name == db_dataset1['name']
        assert description == db_dataset1['description']
        assert provider == db_dataset1['provider_id']
        assert category == db_dataset1['category_id']
        assert data_source == db_dataset1['data_source_id']
        assert country == db_dataset1['country_id']
        assert language == db_dataset1['lang']
        assert geography == db_dataset1['geography_id']
        assert temporal_aggregation == db_dataset1['temporal_aggregation']
        assert time_coverage == db_dataset1['time_coverage']
        assert update_frequency == db_dataset1['update_frequency']
        assert version == db_dataset1['version']
        assert is_public_data == db_dataset1['is_public_data']
        assert summary == db_dataset1['summary_json']