def test_command(monkeypatch, tmpdir):
    with patch('sys.stdout', new_callable=StringIO) as actual:
        monkeypatch.setattr(sys, 'argv',
                            args + [str(tmpdir), 'location==v1.1.3'])
        main()

    assert actual.getvalue() == ''

    tree = list(os.walk(tmpdir))

    assert len(tree) == 4
    # extensions
    assert tree[0][1] == ['location']
    assert tree[0][2] == []
    # versions
    assert tree[1][1] == ['v1.1.3']
    assert tree[1][2] == []
    # files
    assert tree[2][1] == ['codelists']
    assert sorted(tree[2][2]) == [
        'LICENSE', 'README.md', 'extension.json', 'release-schema.json'
    ]
    # codelists
    assert tree[3][1] == []
    assert sorted(tree[3][2]) == ['geometryType.csv', 'locationGazetteers.csv']
def test_command_versions(monkeypatch, tmpdir):
    with patch('sys.stdout', new_callable=StringIO) as actual:
        monkeypatch.setattr(sys, 'argv', args + [str(tmpdir), 'location'])
        main()

    assert actual.getvalue() == ''

    tree = list(os.walk(tmpdir))

    assert len(tree[1][1]) > 1
def test_command_help(monkeypatch, caplog):
    with pytest.raises(SystemExit) as excinfo:
        with patch('sys.stdout', new_callable=StringIO) as actual:
            monkeypatch.setattr(sys, 'argv',
                                ['ocdsextensionsdatacollector', '--help'])
            main()

    assert actual.getvalue().startswith(
        'usage: ocdsextensionsdatacollector [-h]')

    assert len(caplog.records) == 0
    assert excinfo.value.code == 0
def test_command_versions_invalid(monkeypatch, tmpdir, caplog):
    caplog.set_level(logging.INFO)  # silence connectionpool.py DEBUG messages

    with pytest.raises(SystemExit) as excinfo:
        with patch('sys.stdout', new_callable=StringIO) as actual:
            monkeypatch.setattr(sys, 'argv',
                                args + [str(tmpdir), 'location=v1.1.3'])
            main()

    assert actual.getvalue() == ''

    assert len(caplog.records) == 1
    assert caplog.records[0].levelname == 'CRITICAL'
    assert caplog.records[
        0].message == "Couldn't parse 'location=v1.1.3'. Use '==' not '='."
    assert excinfo.value.code == 1
def test_command_repeated_overwrite_none(monkeypatch, tmpdir):
    argv = args + [str(tmpdir), 'location==v1.1.3']
    pattern = str(tmpdir / '*' / '*' / 'extension.json')

    monkeypatch.setattr(sys, 'argv', argv)
    main()

    # Remove a file, to test whether its download is repeated.
    os.unlink(glob(pattern)[0])

    with patch('sys.stdout', new_callable=StringIO) as actual:
        monkeypatch.setattr(sys, 'argv', argv + ['--overwrite', 'none'])
        main()

    assert actual.getvalue() == ''

    assert len(glob(pattern)) == 0
def test_command_repeated(monkeypatch, tmpdir, caplog):
    caplog.set_level(logging.INFO)  # silence connectionpool.py DEBUG messages
    argv = args + [str(tmpdir), 'location==v1.1.3']

    monkeypatch.setattr(sys, 'argv', argv)
    main()

    with pytest.raises(SystemExit) as excinfo:
        with patch('sys.stdout', new_callable=StringIO) as actual:
            monkeypatch.setattr(sys, 'argv', argv)
            main()

    assert actual.getvalue() == ''

    assert len(caplog.records) == 1
    assert caplog.records[0].levelname == 'CRITICAL'
    assert caplog.records[0].message.endswith('Set the --overwrite option.')
    assert excinfo.value.code == 1
def test_command(monkeypatch, tmpdir):
    with patch('sys.stdout', new_callable=StringIO) as actual:
        monkeypatch.setattr(sys, 'argv', args + [str(tmpdir), 'location==v1.1.3'])
        main()

    assert actual.getvalue() == ''

    tree = list(os.walk(tmpdir))

    assert len(tree) == 3
    # extensions
    assert tree[0][1] == ['location']
    assert tree[0][2] == []
    # versions
    assert tree[1][1] == ['v1.1.3']
    assert tree[1][2] == []
    # files
    assert tree[2][1] == []
    assert sorted(tree[2][2]) == ['codelists.pot', 'docs.pot', 'schema.pot']
def test_command_repeated_overwrite_live(monkeypatch, tmpdir):
    argv = args + [str(tmpdir), 'location==v1.1.3', 'location==master']
    pattern = str(tmpdir / '*' / '*' / 'extension.json')

    monkeypatch.setattr(sys, 'argv', argv)
    main()

    # Remove files, to test which downloads are repeated.
    for filename in glob(pattern):
        os.unlink(filename)

    with patch('sys.stdout', new_callable=StringIO) as actual:
        monkeypatch.setattr(sys, 'argv', argv + ['--overwrite', 'live'])
        main()

    assert actual.getvalue() == ''

    filenames = glob(pattern)

    assert len(filenames) == 1
    assert filenames[0].endswith('/location/master/extension.json')