|
from reorder_pre_commit_hooks import ( |
|
parse_args, |
|
are_repos_equal, |
|
load_config, |
|
generate_repos_from_config, |
|
reorder_repos, |
|
merge_sibling_repos, |
|
) |
|
import sys |
|
from unittest.mock import patch, mock_open |
|
|
|
|
|
class TestParseArgs: |
|
@staticmethod |
|
def test_default_values(): |
|
sys.argv[1:] = [] |
|
args = parse_args() |
|
assert args["dry"] is False |
|
assert args["input"] == "./.pre-commit-config.yaml" |
|
assert args["temp_order_file"] == "./hook-id-order.txt" |
|
assert args["output"] == "./.pre-commit-config.yaml" |
|
|
|
@staticmethod |
|
def test_command_line_arguments(): |
|
sys.argv[1:] = [ |
|
"--dry", |
|
"--input", |
|
"input_file", |
|
"--temp-order-file", |
|
"temp_file", |
|
"--output", |
|
"output_file", |
|
] |
|
args = parse_args() |
|
assert args["dry"] is True |
|
assert args["input"] == "input_file" |
|
assert args["temp_order_file"] == "temp_file" |
|
assert args["output"] == "output_file" |
|
|
|
|
|
class TestAreReposEqual: |
|
@staticmethod |
|
def test_true(): |
|
repo1 = { |
|
"repo": "example_repo", |
|
"rev": "123", |
|
"hooks": [], |
|
"additional_dependencies": [], |
|
} |
|
repo2 = { |
|
"repo": "example_repo", |
|
"rev": "123", |
|
"hooks": [], |
|
"additional_dependencies": [], |
|
} |
|
assert are_repos_equal(repo1, repo2) |
|
|
|
@staticmethod |
|
def test_false(): |
|
assert not are_repos_equal( |
|
{ |
|
"repo": "example_repo", |
|
"rev": "123", |
|
"hooks": [], |
|
"additional_dependencies": [], |
|
}, |
|
{ |
|
"repo": "different_repo", |
|
"rev": "456", |
|
"hooks": [], |
|
"additional_dependencies": [], |
|
}, |
|
) |
|
|
|
@staticmethod |
|
def test_missing_rev(): |
|
assert are_repos_equal( |
|
{"repo": "example_repo", "hooks": [], "additional_dependencies": []}, |
|
{"repo": "example_repo", "hooks": [], "additional_dependencies": []}, |
|
) |
|
|
|
|
|
def test_load_config(): |
|
with patch("builtins.open", mock_open(read_data="key: value")) as mocked_open: |
|
assert load_config("input_file") == {"key": "value"} |
|
mocked_open.assert_called_once_with("input_file") |
|
|
|
|
|
def test_generate_repos_from_config(): |
|
config = { |
|
"repos": [ |
|
{ |
|
"repo": "repo1", |
|
"rev": "123", |
|
"hooks": [{"id": "hook1"}, {"id": "hook2"}], |
|
"additional_dependencies": [], |
|
}, |
|
{ |
|
"repo": "repo2", |
|
"rev": "456", |
|
"hooks": [{"id": "hook3"}], |
|
"additional_dependencies": [], |
|
}, |
|
] |
|
} |
|
assert generate_repos_from_config(config) == [ |
|
{ |
|
"repo": "repo1", |
|
"rev": "123", |
|
"hooks": [{"id": "hook1"}], |
|
"additional_dependencies": [], |
|
}, |
|
{ |
|
"repo": "repo1", |
|
"rev": "123", |
|
"hooks": [{"id": "hook2"}], |
|
"additional_dependencies": [], |
|
}, |
|
{ |
|
"repo": "repo2", |
|
"rev": "456", |
|
"hooks": [{"id": "hook3"}], |
|
"additional_dependencies": [], |
|
}, |
|
] |
|
|
|
|
|
def test_reorder_repos(): |
|
repos = [ |
|
{ |
|
"repo": "repo1", |
|
"rev": "123", |
|
"hooks": [{"id": "hook1"}], |
|
"additional_dependencies": [], |
|
}, |
|
{ |
|
"repo": "repo1", |
|
"rev": "123", |
|
"hooks": [{"id": "hook2"}], |
|
"additional_dependencies": [], |
|
}, |
|
{ |
|
"repo": "repo2", |
|
"rev": "456", |
|
"hooks": [{"id": "hook3"}], |
|
"additional_dependencies": [], |
|
}, |
|
] |
|
with patch( |
|
"builtins.open", mock_open(read_data="hook2\nhook1\nhook3") |
|
) as mocked_open, patch("builtins.input", return_value="") as mock_input: |
|
assert reorder_repos(repos) == [ |
|
{ |
|
"repo": "repo1", |
|
"rev": "123", |
|
"hooks": [{"id": "hook2"}], |
|
"additional_dependencies": [], |
|
}, |
|
{ |
|
"repo": "repo1", |
|
"rev": "123", |
|
"hooks": [{"id": "hook1"}], |
|
"additional_dependencies": [], |
|
}, |
|
{ |
|
"repo": "repo2", |
|
"rev": "456", |
|
"hooks": [{"id": "hook3"}], |
|
"additional_dependencies": [], |
|
}, |
|
] |
|
mocked_open.assert_any_call("./order.txt", "w") |
|
mock_input.assert_called_once() |
|
mocked_open.assert_called_with("./order.txt", "r") |
|
|
|
|
|
def test_merge_sibling_repos(): |
|
repos = [ |
|
{ |
|
"repo": "repo1", |
|
"rev": "123", |
|
"hooks": [{"id": "hook1"}], |
|
"additional_dependencies": [], |
|
}, |
|
{ |
|
"repo": "repo1", |
|
"rev": "123", |
|
"hooks": [{"id": "hook2"}], |
|
"additional_dependencies": [], |
|
}, |
|
{ |
|
"repo": "repo2", |
|
"rev": "456", |
|
"hooks": [{"id": "hook3"}], |
|
"additional_dependencies": [], |
|
}, |
|
{ |
|
"repo": "repo1", |
|
"rev": "123", |
|
"hooks": [{"id": "hook4"}], |
|
"additional_dependencies": [], |
|
}, |
|
] |
|
assert merge_sibling_repos(repos) == [ |
|
{ |
|
"repo": "repo1", |
|
"rev": "123", |
|
"hooks": [{"id": "hook1"}, {"id": "hook2"}], |
|
"additional_dependencies": [], |
|
}, |
|
{ |
|
"repo": "repo2", |
|
"rev": "456", |
|
"hooks": [{"id": "hook3"}], |
|
"additional_dependencies": [], |
|
}, |
|
{ |
|
"repo": "repo1", |
|
"rev": "123", |
|
"hooks": [{"id": "hook4"}], |
|
"additional_dependencies": [], |
|
}, |
|
] |