示例#1
0
def test_same_day_multiple_catalog_uploads(node):
    with open_catalog('data.json') as sample:
        temp_file = temp_uploaded_file(sample)
        data_dict = {'format': 'json', 'node': node, 'file': temp_file}
        CatalogUpload.create_from_url_or_file(data_dict)

    with open_catalog('data.json') as sample:
        temp_file = temp_uploaded_file(sample)
        data_dict = {'format': 'json', 'node': node, 'file': temp_file}
        CatalogUpload.create_from_url_or_file(data_dict)

    assert CatalogUpload.objects.count() == 1
def test_raises_validation_error_if_catalog_is_not_valid(node):
    with open_catalog('catalogo-justicia.xlsx') as sample:
        temp_file = temp_uploaded_file(sample)
        data_dict = {'format': 'xlsx', 'node': node, 'file': temp_file}
        validator = CatalogDataValidator()
        with pytest.raises(ValidationError):
            validator.get_and_validate_data(data_dict)
示例#3
0
def test_upload_distribution_filename_without_extension(distribution):
    distribution.file_name = 'file_without_extension'
    with freeze_time('2019-01-01'):
        with open_catalog('test_data.csv') as f:
            distribution.distributionupload_set.create(file=File(f))
        dist_filename = Path(DistributionUpload.objects.first().file.name).name
    assert dist_filename == 'file_without_extension-2019-01-01'
示例#4
0
def test_create_from_file(node):
    filename = 'data.json'
    with open_catalog(filename) as sample:
        temp_file = temp_uploaded_file(sample)
        data_dict = {'format': 'json', 'node': node, 'file': temp_file}
        catalog = CatalogUpload.create_from_url_or_file(data_dict)
        assert b'dataset' in catalog.json_file.read()
def test_returns_correct_data_when_uploading_file(node):
    with open_catalog('data.json') as sample:
        temp_file = temp_uploaded_file(sample)
        data_dict = {'format': 'json', 'node': node, 'file': temp_file}
        validator = CatalogDataValidator()
        data = validator.get_and_validate_data(data_dict)
        assert b'dataset' in data['json_file'].read()
示例#6
0
def test_file_upload_large_name(distribution):
    long_name = 'extremely_long_distribution_id_that_makes_final_name_very_big'
    distribution.identifier = long_name
    distribution.save()
    with open_catalog('test_data.csv') as f:
        distribution.distributionupload_set.create(file=File(f))

    assert DistributionUpload.objects.count() == 1
示例#7
0
def distribution_upload():
    _catalog(
    )  # Necesario que exista un catálogo para crear un distribution upload exitorsamente
    with open_catalog('test_data.csv') as distribution_fd:
        model = _distribution().distributionupload_set.create(
            file=File(distribution_fd))

    return model
示例#8
0
def test_catalog_upload_creates_both_formats(node):
    filename = 'data.json'
    with open_catalog(filename) as sample:
        temp_file = temp_uploaded_file(sample)
        data_dict = {'format': 'json', 'node': node, 'file': temp_file}
        catalog = CatalogUpload.create_from_url_or_file(data_dict)
        assert catalog.json_file is not None
        assert catalog.xlsx_file is not None
示例#9
0
def _catalog():
    with open_catalog('data.json') as catalog_fd:
        model = CatalogUpload(format=CatalogUpload.FORMAT_JSON,
                              json_file=File(catalog_fd),
                              node=_node())
        model.save()

    return model
示例#10
0
def xlsx_catalog():
    with open_catalog('catalogo-justicia_valido.xlsx') as catalog_fd:
        model = CatalogUpload(format=CatalogUpload.FORMAT_XLSX,
                              xlsx_file=File(catalog_fd),
                              node=_node())
        model.save()

    return model
def test_older_versions_listed(logged_client, distribution_upload):
    distribution = distribution_upload.distribution
    with freeze_time('2019-01-01'):
        with open_catalog('test_data.csv') as fd:
            other = distribution.distributionupload_set \
                .create(file=File(fd))
    response = _call(logged_client, distribution)
    assert str(other.uploaded_at) in response.content.decode('utf-8')
def test_create_from_file(admin_client, catalog):
    with open_catalog('test_data.csv') as sample:
        form_data = {'file': sample,
                     'dataset_identifier': "125",
                     'distribution_identifier': "125.1",
                     'file_name': 'test_data.csv'}

        admin_client.post(_add_url(catalog.node), form_data)
    assert DistributionUpload.objects.get().distribution.identifier == "125.1"
示例#13
0
def _create_dist2(distribution, distribution_upload):
    last_week = datetime.datetime.now() - datetime.timedelta(days=7)
    DistributionUpload.objects.filter(pk=distribution_upload.pk).update(
        uploaded_at=last_week)
    with open_catalog('test_data.csv') as distribution_fd:
        dist2 = distribution.distributionupload_set.create(
            file=File(distribution_fd))
        dist2.save()
    return dist2
示例#14
0
def test_file_saved_as_latest(distribution):
    with open_catalog('test_data.csv') as f:
        distribution.distributionupload_set.create(file=File(f))

    assert os.path.exists(
        os.path.join(settings.MEDIA_ROOT, 'catalog',
                     distribution.catalog.identifier, 'dataset', '125',
                     'distribution', '125.1', 'download',
                     distribution.file_name))
示例#15
0
 def test_redirects_even_if_catalog_is_not_valid(self):
     with open_catalog('data.json') as sample:
         form_data = {
             'format': 'json',
             'node': self.node.identifier,
             'file': sample
         }
         response = self.client.post(
             reverse('catalog:add_catalog',
                     kwargs={'node_id': self.node.id}), form_data)
         self.assertEqual(response.status_code, 302)
示例#16
0
 def test_catalog_is_created_when_submitted_form_is_valid(self):
     with open_catalog('valid_data.json') as sample:
         form_data = {
             'format': 'json',
             'node': self.node.identifier,
             'file': sample
         }
         self.client.post(
             reverse('catalog:add_catalog',
                     kwargs={'node_id': self.node.id}), form_data)
         self.assertEqual(1, CatalogUpload.objects.count())
示例#17
0
def test_create_from_valid_url(node, requests_mock):
    with open_catalog('data.json') as sample:
        requests_mock.get("https://datos.gob.ar/data.json",
                          content=sample.read())
        data_dict = {
            'format': 'json',
            'node': node,
            'url': "https://datos.gob.ar/data.json"
        }
        catalog = CatalogUpload.create_from_url_or_file(data_dict)
        assert catalog is not None
def test_context_manager_does_not_lose_files_using_same_file_name(client, distribution_upload):
    file_path = join('tests_media', distribution_upload.file_path())
    file_path_with_date = join('tests_media', distribution_upload.file_path(with_date=True))
    with open_catalog('test_data.csv') as sample:
        raw_data = {'node': distribution_upload.distribution.catalog,
                    'dataset_identifier': distribution_upload.distribution.dataset_identifier,
                    'distribution_identifier': distribution_upload.distribution.identifier,
                    'file_name': distribution_upload.distribution.file_name,
                    'file': sample}
        client.post(_add_url(distribution_upload.distribution.catalog), raw_data)
    assert isfile(file_path) and isfile(file_path_with_date)
示例#19
0
 def test_error_messages_in_view_if_catalog_is_not_valid(self):
     with open_catalog('data.json') as sample:
         form_data = {
             'format': 'json',
             'node_id': self.node.id,
             'file': sample
         }
         response = self.client.post(reverse(
             'catalog:add_catalog', kwargs={'node_id': self.node.id}),
                                     form_data,
                                     follow=True)
         self.assertIsNotNone(response.context['messages'])
def test_posting_new_version_twice_persists_only_one_instance(client, catalog):
    with open_catalog('test_data.csv') as sample:
        form_data = {'file': sample,
                     'dataset_identifier': "125",
                     'distribution_identifier': "125.1",
                     'file_name': 'test_data.csv'}

        client.post(_add_url(catalog.node), form_data)

        sample.seek(0)
        client.post(_add_version_url(catalog.node, form_data['distribution_identifier']), form_data)
    assert DistributionUpload.objects.count() == 1
def test_returns_correct_data_when_specifying_url(node, requests_mock):
    with open_catalog('data.json') as sample:
        text = sample.read()
        requests_mock.get("https://datos.gob.ar/data.json", content=text)
        data_dict = {
            'format': 'json',
            'node': node,
            'url': 'https://datos.gob.ar/data.json'
        }
        validator = CatalogDataValidator()
        data = validator.get_and_validate_data(data_dict)
        assert data['json_file'].read() == text
def test_generated_file_paths_for_distribution(admin_client, catalog):
    with open_catalog('test_data.csv') as sample:
        form_data = {'file': sample,
                     'dataset_identifier': "125",
                     'distribution_identifier': "125.1",
                     'file_name': 'test_data.csv'}

        admin_client.post(_add_url(catalog.node), form_data)
    distribution = DistributionUpload.objects.get()
    assert str(distribution.file_path()) == 'catalog/test_id/dataset/125/distribution/125.1/' \
                                            'download/test_data.csv'
    assert str(distribution.file_path(with_date=True)) == f'catalog/test_id/dataset/125/' \
                                                          f'distribution/125.1/download/test_data' \
                                                          f'-{timezone.now().date()}.csv'
def test_returns_correct_data_when_specifying_url_with_explicit_format(
        node, requests_mock):
    with open_catalog('xlsx_catalog.xlsx') as sample:
        text = sample.read()
        requests_mock.get('https://fakeurl.com/export?format=xlsx',
                          content=text)
        data_dict = {
            'format': 'xlsx',
            'node': node,
            'url': 'https://fakeurl.com/export?format=xlsx'
        }
        validator = CatalogDataValidator()
        data = validator.get_and_validate_data(data_dict)
        assert data['xlsx_file'].read() == text
示例#24
0
 def test_created_catalog_has_both_file_formats(self):
     with open_catalog('valid_data.json') as sample:
         form_data = {
             'format': 'json',
             'node': self.node.identifier,
             'file': sample
         }
         self.client.post(
             reverse('catalog:add_catalog',
                     kwargs={'node_id': self.node.id}), form_data)
         self.assertEqual(1, CatalogUpload.objects.count())
         catalog = CatalogUpload.objects.first()
         self.assertIsNotNone(catalog.json_file)
         self.assertIsNotNone(catalog.xlsx_file)
def test_new_version_form_contains_previous_data(client, catalog):
    with open_catalog('test_data.csv') as sample:
        form_data = {'file': sample,
                     'dataset_identifier': "125",
                     'distribution_identifier': "an_easily_findable_distribution_identifier",
                     'file_name': 'an_easily_findable_file_name.csv'}

        client.post(_add_url(catalog.node), form_data)

        sample.seek(0)
        response = client.get(_add_version_url(catalog.node, form_data['distribution_identifier']))
    response_content = response.content.decode('utf-8')
    assert "125" in response_content
    assert "an_easily_findable_distribution_identifier" in response_content
    assert "an_easily_findable_file_name.csv" in response_content
def test_context_manager_removes_old_same_day_version_file_if_name_changes(client,
                                                                           distribution_upload):
    old_file_path = join('tests_media', distribution_upload.file_path())
    with open_catalog('test_data.csv') as sample:
        raw_data = {'node': distribution_upload.distribution.catalog,
                    'dataset_identifier': distribution_upload.distribution.dataset_identifier,
                    'distribution_identifier': distribution_upload.distribution.identifier,
                    'file_name': 'new_file_name.csv',
                    'file': sample}
        client.post(_add_url(distribution_upload.distribution.catalog), raw_data)
    updated_distribution = DistributionUpload.objects \
        .get(distribution=distribution_upload.distribution)
    new_file_path = join(settings.MEDIA_ROOT, updated_distribution.file_path())
    assert new_file_path != old_file_path
    assert not isfile(old_file_path)
    assert isfile(new_file_path)
示例#27
0
def test_catalog_history_has_object_list_ordered_by_date_descendent(
        admin_client, catalog):
    lastweek = datetime.datetime.now() - datetime.timedelta(days=7)
    CatalogUpload.objects.filter(pk=catalog.pk).update(uploaded_at=lastweek)
    with open_catalog('data.json') as catalog_fd:
        model = CatalogUpload(format=CatalogUpload.FORMAT_JSON,
                              json_file=File(catalog_fd),
                              node=catalog.node)
        model.save()

    response = admin_client.get(
        reverse('catalog:catalog_history', kwargs={'node_id':
                                                   catalog.node.id}))
    catalogs = response.context['object_list']
    for i in range(len(catalogs) - 1):
        assert catalogs[i].uploaded_at > catalogs[i + 1].uploaded_at
示例#28
0
    def test_form_submit_with_valid_data_redirects_to_success_page(self):
        with open_catalog('valid_data.json') as sample:
            form_data = {
                'format': 'json',
                'node': self.node.identifier,
                'file': sample
            }
            response = self.client.post(
                reverse('catalog:add_catalog',
                        kwargs={'node_id': self.node.id}), form_data)
            self.assertEqual(response.status_code, 302)

            self.assertEqual(
                response.url,
                reverse('catalog:upload_success',
                        kwargs={'node_id': self.node.id}))
示例#29
0
def test_validate_returns_error_message_if_catalog_is_not_valid(node):
    error_messages = [
        "'publisher' is a required property",
        "'title' is a required property",
        "'superThemeTaxonomy' is a required property",
        "'description' is a required property",
        "'Índice-precios-internos-basicos-al-por-mayor-desagregado-base-1993-anual.csv' "
        "is not valid under any of the given schemas",
    ]

    with open_catalog('data.json') as sample:
        temp_file = temp_uploaded_file(sample)
        data_dict = {'format': 'json', 'node': node, 'file': temp_file}
        catalog_upload = CatalogUpload.create_from_url_or_file(data_dict)
        validation_result = catalog_upload.validate()

    for error_message in error_messages:
        assert error_message in validation_result
示例#30
0
    def test_view_messages_includes_error_messages_from_validator(self):
        error_messages = [
            "'title' is a required property",
            "'description' is a required property",
            "'publisher' is a required property",
            "'superThemeTaxonomy' is a required property",
            "'Índice-precios-internos-basicos-al-por-mayor-desagregado-base-1993-anual.csv' "
            "is not valid under any of the given schemas",
        ]
        with open_catalog('data.json') as sample:
            form_data = {
                'format': 'json',
                'node': self.node.identifier,
                'file': sample
            }
            response = self.client.post(reverse(
                'catalog:add_catalog', kwargs={'node_id': self.node.id}),
                                        form_data,
                                        follow=True)

            messages = [
                str(message) for message in list(response.context['messages'])
            ]
            self.assertCountEqual(error_messages, messages)