def test_nonreadable(app, status, warning):
    basename = 'nonreadable'

    with nonreadable(path(basename, 'nonreadable.json')), nonreadable(
            path(basename, 'nonreadable.csv')):
        assert_build(app, status, warning, basename, [
            f"ERROR: JSON Schema file not readable: {path(basename, 'nonreadable.json')}",
            f"ERROR: CSV codelist file not readable: {path(basename, 'nonreadable.csv')}",
        ])
Exemplo n.º 2
0
def test_command_check(stderr, monkeypatch):
    with open(path('schema-strict.json'), 'rb') as f:
        expected = f.read()

    run_command(monkeypatch, main, ['schema-strict', '--check', path('schema-strict.json')])

    with open(path('schema-strict.json'), 'rb') as f:
        assert f.read() == expected

    assert stderr.getvalue() == 'ERROR: tests/fixtures/schema-strict.json is missing validation properties\n'
Exemplo n.º 3
0
 def test_post_file(self):
     with open(path('schemas/ocds-ppp-1_0_0-release-schema.json')) as f:
         self.assertSuccess('post',
                            'results/ocds-ppp-1_0_0-mapping-sheet.csv', {
                                'type': 'file',
                                'custom_file': f,
                            })
Exemplo n.º 4
0
def test_command_order_by(monkeypatch):
    with patch('sys.stdout', new_callable=StringIO) as actual:
        monkeypatch.setattr(sys, 'argv', ['ocdskit', 'mapping-sheet', '--order-by', 'path',
                                          '--infer-required', path('release-schema.json')])
        main()

    assert actual.getvalue() == read('mapping-sheet_order-by.csv', newline='')
Exemplo n.º 5
0
def test_command_bods(monkeypatch):
    with patch('sys.stdout', new_callable=StringIO) as actual:
        monkeypatch.setattr(sys, 'argv', ['ocdskit', 'mapping-sheet', '--order-by', 'path',
                                          path('bods/person-statement.json')])
        main()

    assert actual.getvalue() == read('mapping-sheet_bods.csv', newline='')
Exemplo n.º 6
0
def test_patched_release_schema_with_absolute_path():
    url = Path(path('ocds_coveredBy_extension')).resolve().as_uri()
    builder = ProfileBuilder('1__1__4', [url])
    result = builder.patched_release_schema()

    assert '$schema' in result
    assert 'coveredBy' in result['definitions']['Tender']['properties']
Exemplo n.º 7
0
def test_command_extension_and_extension_field_location(monkeypatch):
    url = 'https://github.com/open-contracting-extensions/ocds_location_extension/archive/v1.1.4.zip'

    assert_command(monkeypatch, main, [
        'mapping-sheet', '--infer-required', '--extension-field', 'extension',
        path('release-schema.json'), '--extension', url
    ], 'mapping-sheet_extension_extension-field_location.csv')
Exemplo n.º 8
0
def test_command_min_occurrences(monkeypatch):
    actual = run_command(monkeypatch, main, [
        'schema-report', '--min-occurrences', '1', '--no-codelists',
        path('test-schema.json')
    ])

    assert 'codelist,openCodelist' not in actual
    assert '1:' in actual
Exemplo n.º 9
0
def test_command_no_definitions(monkeypatch):
    actual = run_command(monkeypatch, main, [
        'schema-report', '--min-occurrences', '2', '--no-definitions',
        path('test-schema.json')
    ])

    assert 'codelist,openCodelist' in actual
    assert ':' not in actual
Exemplo n.º 10
0
def test_command_root_path_nonexistent(monkeypatch, caplog):
    assert_command_error(monkeypatch,
                         main, [
                             'detect-format', '--root-path', 'nonexistent',
                             path('record_minimal.json')
                         ],
                         error=StopIteration)

    assert len(caplog.records) == 0
Exemplo n.º 11
0
def test_command_no_unique_items(monkeypatch, tmpdir):
    with open(path('schema-strict.json'), 'rb') as f:
        schema = f.read()

    p = tmpdir.join('schema.json')
    p.write(schema)

    run_command(monkeypatch, main, ['schema-strict', '--no-unique-items', str(p)])

    assert 'uniqueItems' not in json.loads(p.read())['properties']['array']
Exemplo n.º 12
0
def test_command(monkeypatch, tmpdir):
    with open(path('schema-strict.json'), 'rb') as f:
        schema = f.read()

    p = tmpdir.join('schema.json')
    p.write(schema)

    run_command(monkeypatch, main, ['schema-strict', str(p)])

    assert p.read() == expected
Exemplo n.º 13
0
def test_command_unknown_format(basename, result, monkeypatch, caplog):
    filename = 'detect-format_{}.json'.format(basename)

    assert_command(monkeypatch, main, ['detect-format', path(filename)], '')

    assert len(caplog.records) == 1
    assert caplog.records[0].levelname == 'WARNING'
    assert caplog.records[
        0].message == 'tests/fixtures/{}: unknown (top-level JSON value is a {})'.format(
            filename, result)
Exemplo n.º 14
0
def test_command_order_by_nonexistent(monkeypatch, caplog):
    assert_command_error(monkeypatch, main, [
        'mapping-sheet', '--order-by', 'nonexistent',
        path('release-schema.json')
    ])

    assert len(caplog.records) == 1
    assert caplog.records[0].levelname == 'CRITICAL'
    assert caplog.records[
        0].message == "the column 'nonexistent' doesn't exist – did you make a typo?"
Exemplo n.º 15
0
def test_command_order_by_nonexistent(monkeypatch, caplog):
    with pytest.raises(SystemExit) as excinfo:
        with patch('sys.stdout', new_callable=StringIO) as actual:
            monkeypatch.setattr(sys, 'argv', ['ocdskit', 'mapping-sheet', '--order-by', 'nonexistent',
                                              path('release-schema.json')])
            main()

    assert actual.getvalue() == ''
    assert len(caplog.records) == 1
    assert caplog.records[0].levelname == 'CRITICAL'
    assert caplog.records[0].message == "the column 'nonexistent' doesn't exist – did you make a typo?"
    assert excinfo.value.code == 1
Exemplo n.º 16
0
    def test_importers_generic(self):
        """Testing: parse method for all importers."""
        for manager in tests.conf:
            with self.subTest(manager):
                importer = tests.cls(manager)
                testpath = tests.path(manager)
                reference = tests.reference(manager)
                encoding = tests.conf[manager]['encoding']
                with open(testpath, 'r', encoding=encoding) as file:
                    importer.parse(file)

                self.assertImport(importer.data, reference)
Exemplo n.º 17
0
def assert_build(app,
                 status,
                 warning,
                 basename,
                 buildername='html',
                 messages=None):
    app.build()
    warnings = warning.getvalue().strip()

    if buildername == 'html':
        with open(path(basename, '_build', buildername, 'index.html'),
                  encoding='utf-8') as f:
            element = lxml.html.fromstring(
                f.read()).xpath('//div[@class="documentwrapper"]')[0]
            actual = lxml.html.tostring(element).decode()

        with open(path(f'{basename}.html'), encoding='utf-8') as f:
            expected = f.read()

        assert normalize(actual) == normalize(expected)
    elif buildername == 'gettext':
        with open(path(basename, '_build', buildername, 'index.pot'),
                  encoding='utf-8') as f:
            actual = re.sub(r"POT-Creation-Date: [0-9: +-]+",
                            "POT-Creation-Date: ", f.read())

        with open(path(f'{basename}.pot'), encoding='utf-8') as f:
            expected = f.read()

        assert actual == expected

    assert 'build succeeded' in status.getvalue()

    if messages:
        for message in messages:
            assert message in warnings
        assert len(messages) == len(warnings.split('\n'))
    else:
        assert warnings == ''
Exemplo n.º 18
0
def test_command(monkeypatch):
    actual = run_command(
        monkeypatch, main,
        ['schema-report', '--min-occurrences', '2',
         path('test-schema.json')])

    assert actual == 'codelist,openCodelist\n' \
                     'a.csv,False/True\n' \
                     'b.csv,False\n' \
                     'c.csv,False\n' \
                     'd.csv,False\n' \
                     '\n' \
                     " 2: {'codelist': 'a.csv', 'openCodelist': True, 'type': ['string', 'null']}\n"
def assert_build(app, status, warning, basename, messages=None):
    app.build()
    warnings = warning.getvalue().strip()

    with open(path(basename, '_build', 'html', 'index.html'),
              encoding='utf-8') as f:
        element = lxml.html.fromstring(
            f.read()).xpath('//div[@class="documentwrapper"]')[0]
        actual = lxml.html.tostring(element).decode()

    with open(path(f'{basename}.html'), encoding='utf-8') as f:
        expected = f.read()

    assert 'build succeeded' in status.getvalue()

    if messages:
        for message in messages:
            assert message in warnings
        assert len(messages) == len(warnings.split('\n'))
    else:
        assert warnings == ''

    assert normalize(actual) == normalize(expected)
Exemplo n.º 20
0
def get_test_cases():
    test_valid_argvalues = []

    release_schema_path = 'release-schema-{}.json'
    versioned_release_schema_path = 'versioned-release-validation-schema-{}.json'

    for minor_version, patch_tag in tags.items():
        filenames = glob(path(os.path.join(minor_version, '*.json')))
        assert len(filenames), 'ocds fixtures not found'
        for versioned, schema_path in ((False, release_schema_path), (True, versioned_release_schema_path)):
            schema = load(schema_path.format(patch_tag))
            for filename in filenames:
                if not versioned ^ filename.endswith('-versioned.json'):
                    test_valid_argvalues.append((filename, schema))

    return test_valid_argvalues
Exemplo n.º 21
0
    def test_importers_csv(self):
        """Testing: parse method for the generic CSV importer."""
        csv = ['1password4', 'roboform']
        cols = {
            '1password4': 'title,comments,login,password,url',
            'roboform': 'title,url,login,password,comments,group,,'
        }
        for manager in csv:
            with self.subTest(manager):
                importer = tests.cls('csv')
                importer.cols = cols[manager]
                testpath = tests.path(manager)
                reference = tests.reference(manager)
                encoding = tests.conf[manager]['encoding']
                with open(testpath, 'r', encoding=encoding) as file:
                    importer.parse(file)

                self.assertImport(importer.data, reference)
Exemplo n.º 22
0
    def test_go_with_files(self):
        results = {
            'csv': [
                'releases.csv',
                'ten_items.csv',
                'parties.csv',
            ],
            'xlsx': [
                'xl/worksheets/sheet1.xml',
                'xl/worksheets/sheet2.xml',
                'xl/worksheets/sheet3.xml',
            ]
        }

        contents = self.upload_and_go({'type': 'release-package'})

        self.assertEqual(len(contents), len(results))

        prefix = r'^/result/' + '{:%Y-%m-%d}'.format(
            date.today()) + r'/[0-9a-f-]{36}/'

        for extension, content in contents.items():
            self.assertEqual(len(content), 2)
            self.assertIsInstance(content['size'], int)
            self.assertRegex(content['url'], prefix + extension + r'/$')

        zipfile = self.get_zipfile(contents['csv'])

        self.assertEqual(len(zipfile.namelist()), len(results['csv']))
        for name in results['csv']:
            self.assertEqual(
                zipfile.read(name).decode('utf-8').replace('\r\n', '\n'),
                read('results/flattened/' + name))

        actual = self.get_zipfile(contents['xlsx'])
        with open(path('results/flattened.xlsx'), 'rb') as f:
            expected = ZipFile(f)

            self.assertEqual(_worksheets_length(actual),
                             _worksheets_length(expected))
            for name in results['xlsx']:
                self.assertEqual(actual.read(name), expected.read(name))
    assert normalize(actual) == normalize(expected)


@contextmanager
def nonreadable(filename):
    file = Path(filename)
    file.touch()
    file.chmod(0)
    try:
        yield
    finally:
        file.unlink()


@pytest.mark.sphinx(buildername='html',
                    srcdir=path('field-description'),
                    freshenv=True)
def test_field_description(app, status, warning):
    basename = 'field-description'

    assert_build(app, status, warning, basename, [
        f"ERROR: JSON Schema file not found: {path(basename, 'nonexistent.json')}",
        f"ERROR: JSON Schema file not valid: {path(basename, 'invalid.json')}",
        f"ERROR: Pointer '/properties/nonexistent/description' not found: {path(basename, 'schema.json')}",
    ])


@pytest.mark.sphinx(buildername='html',
                    srcdir=path('code-description'),
                    freshenv=True)
def test_code_description(app, status, warning):
Exemplo n.º 24
0
def test_command_oc4ids(monkeypatch):
    assert_command(
        monkeypatch, main,
        ['mapping-sheet', path('project-schema.json')],
        'mapping-sheet_oc4ids.csv')
Exemplo n.º 25
0
def test_command(monkeypatch):
    assert_command(
        monkeypatch, main,
        ['mapping-sheet', '--infer-required',
         path('release-schema.json')], 'mapping-sheet.csv')
Exemplo n.º 26
0
def test_command_sedl(monkeypatch):
    with patch('sys.stdout', new_callable=StringIO) as actual:
        monkeypatch.setattr(sys, 'argv', ['ocdskit', 'mapping-sheet', path('sedl-schema.json')])
        main()

    assert actual.getvalue() == read('mapping-sheet_sedl.csv', newline='')
Exemplo n.º 27
0
def test_command_bods(monkeypatch):
    assert_command(monkeypatch, main, [
        'mapping-sheet', '--order-by', 'path',
        path('bods/person-statement.json')
    ], 'mapping-sheet_bods.csv')
Exemplo n.º 28
0
def test_command_sedl(monkeypatch):
    assert_command(monkeypatch, main,
                   ['mapping-sheet', path('sedl-schema.json')],
                   'mapping-sheet_sedl.csv')
Exemplo n.º 29
0
        with open(path(f'{basename}.pot'), encoding='utf-8') as f:
            expected = f.read()

        assert actual == expected

    assert 'build succeeded' in status.getvalue()

    if messages:
        for message in messages:
            assert message in warnings
        assert len(messages) == len(warnings.split('\n'))
    else:
        assert warnings == ''


@pytest.mark.sphinx(buildername='html', srcdir=path('basic'), freshenv=True)
def test_basic(app, status, warning):
    assert_build(app, status, warning, 'basic')


@pytest.mark.sphinx(buildername='gettext', srcdir=path('basic'), freshenv=True)
def test_basic_gettext(app, status, warning):
    assert_build(app, status, warning, 'basic', buildername='gettext')


@pytest.mark.sphinx(buildername='html',
                    srcdir=path('basic-externallinks'),
                    freshenv=True)
def test_basic_externallinks(app, status, warning):
    assert_build(app, status, warning, 'basic-externallinks')
Exemplo n.º 30
0
def test_command_root_path(filename, root_path, result, monkeypatch):
    expected = 'tests/fixtures/{}: {}\n'.format(filename, result)
    assert_command(monkeypatch, main,
                   ['detect-format', '--root-path', root_path,
                    path(filename)], expected)