Example #1
0
def test_pip_checker_requirements_dirs(patches):
    checker = pip_check.PipChecker("path1", "path2", "path3")
    dummy_glob = [
        "FILE1", "FILE2", "FILE3",
        "REQUIREMENTS_FILE", "FILE4",
        "REQUIREMENTS_FILE", "FILE5"]
    patched = patches(
        ("PipChecker.requirements_filename", dict(new_callable=PropertyMock)),
        ("PipChecker.path", dict(new_callable=PropertyMock)),
        prefix="tools.dependency.pip_check")
    expected = []

    with patched as (m_reqs, m_path):
        m_reqs.return_value = "REQUIREMENTS_FILE"
        _glob = []

        for fname in dummy_glob:
            _mock = MagicMock()
            _mock.name = fname
            if fname == "REQUIREMENTS_FILE":
                expected.append(_mock)
            _glob.append(_mock)

        m_path.return_value.glob.return_value = _glob
        assert checker.requirements_dirs == {f"/{f.parent.relative_to.return_value}" for f in expected}

    for exp in expected:
        assert (
            list(exp.parent.relative_to.call_args)
            == [(m_path.return_value,), {}])
    assert "requirements_dirs" in checker.__dict__
Example #2
0
def test_pip_checker_requirements_dirs(patches):
    checker = pip_check.PipChecker("path1", "path2", "path3")

    dummy_walker = [
        ["ROOT1", ["DIR1", "DIR2"], ["FILE1", "FILE2", "FILE3"]],
        ["ROOT2", ["DIR1", "DIR2"], ["FILE1", "FILE2", "REQUIREMENTS_FILE", "FILE3"]],
        ["ROOT3", ["DIR1", "DIR2"], ["FILE1", "FILE2", "REQUIREMENTS_FILE", "FILE3"]],
        ["ROOT4", ["DIR1", "DIR2"], ["FILE1", "FILE2", "FILE3"]]]

    patched = patches(
        ("PipChecker.requirements_filename", dict(new_callable=PropertyMock)),
        ("PipChecker.path", dict(new_callable=PropertyMock)),
        "os.walk",
        prefix="tools.dependency.pip_check")

    with patched as (m_reqs, m_path, m_walk):
        m_reqs.return_value = "REQUIREMENTS_FILE"
        m_path.return_value = "ROO"
        m_walk.return_value = dummy_walker
        assert checker.requirements_dirs == {'T3', 'T2'}

    assert m_reqs.called
    assert m_path.called
    assert (
        list(m_walk.call_args)
        == [('ROO',), {}])
Example #3
0
def test_pip_checker_dependabot_config(patches, isdict):
    checker = pip_check.PipChecker("path1", "path2", "path3")
    patched = patches(
        "utils",
        ("PipChecker.path", dict(new_callable=PropertyMock)),
        prefix="tools.dependency.pip_check")

    with patched as (m_utils, m_path):
        if isdict:
            m_utils.from_yaml.return_value = {}

        if isdict:
            assert checker.dependabot_config == m_utils.from_yaml.return_value
        else:
            with pytest.raises(pip_check.PipConfigurationError) as e:
                checker.dependabot_config

            assert (
                e.value.args[0]
                == f'Unable to parse dependabot config: {checker.dependabot_config_path}')

    assert (
        list(m_path.return_value.joinpath.call_args)
        == [(checker._dependabot_config, ), {}])
    assert (
        list(m_utils.from_yaml.call_args)
        == [(m_path.return_value.joinpath.return_value,), {}])
Example #4
0
def test_pip_checker_config_requirements():
    checker = pip_check.PipChecker("path1", "path2", "path3")

    config_mock = patch(
        "tools.dependency.pip_check.PipChecker.dependabot_config",
        new_callable=PropertyMock)

    with config_mock as m_config:
        m_config.return_value.__getitem__.return_value = [
            {"package-ecosystem": "pip", "directory": "dir1"},
            {"package-ecosystem": "not-pip", "directory": "dir2"},
            {"package-ecosystem": "pip", "directory": "dir3"}]
        assert checker.config_requirements == {'dir1', 'dir3'}
        assert (
            list(m_config.return_value.__getitem__.call_args)
            == [('updates',), {}])
Example #5
0
def test_pip_checker_dependabot_config(patches):
    checker = pip_check.PipChecker("path1", "path2", "path3")
    patched = patches(
        "utils",
        ("PipChecker.path", dict(new_callable=PropertyMock)),
        "os.path.join",
        prefix="tools.dependency.pip_check")

    with patched as (m_utils, m_path, m_join):
        assert checker.dependabot_config == m_utils.from_yaml.return_value

    assert (
        list(m_join.call_args)
        == [(m_path.return_value, checker._dependabot_config), {}])
    assert (
        list(m_utils.from_yaml.call_args)
        == [(m_join.return_value,), {}])
Example #6
0
def test_pip_checker_dependabot_errors(patches):
    checker = pip_check.PipChecker("path1", "path2", "path3")
    succeed_mock = patch
    errors = set(["C", "D", "B", "A"])
    MSG = "ERROR MESSAGE"

    patched = patches(
        "PipChecker.error",
        ("PipChecker.name", dict(new_callable=PropertyMock)),
        prefix="tools.dependency.pip_check")

    with patched as (m_error, m_name):
        checker.dependabot_errors(errors, MSG)

    assert (
        list(list(c) for c in list(m_error.call_args_list))
        == [[('dependabot', [f'ERROR MESSAGE: {x}']), {}] for x in sorted(errors)])
Example #7
0
def test_pip_checker_dependabot_success(patches):
    checker = pip_check.PipChecker("path1", "path2", "path3")
    succeed_mock = patch
    success = set(["C", "D", "B", "A"])

    patched = patches(
        "PipChecker.succeed",
        ("PipChecker.requirements_filename", dict(new_callable=PropertyMock)),
        prefix="tools.dependency.pip_check")

    with patched as (m_succeed, m_fname):
        checker.dependabot_success(success)

    assert (
        list(m_succeed.call_args)
        == [('dependabot',
             [f"{m_fname.return_value}: {x}" for x in sorted(success)]),  {}])
Example #8
0
def test_pip_checker_dependabot_errors(patches):
    checker = pip_check.PipChecker("path1", "path2", "path3")
    succeed_mock = patch
    errors = set(["C", "D", "B", "A"])
    MSG = "ERROR MESSAGE"

    patched = patches("PipChecker.error",
                      ("PipChecker.name", dict(new_callable=PropertyMock)),
                      prefix="tools.dependency.pip_check")

    with patched as (m_error, m_name):
        checker.dependabot_errors(errors, MSG)

    assert (list(m_error.call_args) == [('dependabot', [
        f"[ERROR:{m_name.return_value}] (dependabot) {MSG}: A",
        f"[ERROR:{m_name.return_value}] (dependabot) {MSG}: B",
        f"[ERROR:{m_name.return_value}] (dependabot) {MSG}: C",
        f"[ERROR:{m_name.return_value}] (dependabot) {MSG}: D"
    ]), {}])
Example #9
0
def test_pip_checker_check_dependabot(patches, requirements):
    config, dirs = requirements
    checker = pip_check.PipChecker("path1", "path2", "path3")

    patched = patches(
        ("PipChecker.config_requirements", dict(new_callable=PropertyMock)),
        ("PipChecker.requirements_dirs", dict(new_callable=PropertyMock)),
        ("PipChecker.requirements_filename", dict(new_callable=PropertyMock)),
        "PipChecker.dependabot_success",
        "PipChecker.dependabot_errors",
        prefix="tools.dependency.pip_check")

    with patched as (m_config, m_dirs, m_fname, m_success, m_errors):
        m_config.return_value = config
        m_dirs.return_value = dirs
        assert not checker.check_dependabot()

    if config & dirs:
        assert (list(m_success.call_args) == [(config & dirs, ), {}])
    else:
        assert not m_success.called

    if config - dirs:
        assert ([(
            config - dirs,
            f"Missing {m_fname.return_value} dir, specified in dependabot config"
        ), {}] in list(list(c) for c in m_errors.call_args_list))

    if dirs - config:
        assert ([
            (dirs - config,
             f"Missing dependabot config for {m_fname.return_value} in dir"),
            {}
        ] in list(list(c) for c in m_errors.call_args_list))

    if not config - dirs and not dirs - config:
        assert not m_errors.called
Example #10
0
def test_pip_checker_constructor():
    checker = pip_check.PipChecker("path1", "path2", "path3")
    assert checker.checks == ("dependabot",)
    assert checker.dependabot_config_path == pip_check.DEPENDABOT_CONFIG == ".github/dependabot.yml"
    assert checker.requirements_filename == pip_check.REQUIREMENTS_FILENAME == "requirements.txt"
    assert checker.args.paths == ['path1', 'path2', 'path3']