|
12 | 12 | from libvcs.cmd import git |
13 | 13 |
|
14 | 14 | if t.TYPE_CHECKING: |
| 15 | + from libvcs.pytest_plugin import CreateRepoPytestFixtureFn |
15 | 16 | from libvcs.sync.git import GitSync |
16 | 17 |
|
17 | 18 |
|
@@ -906,6 +907,77 @@ def test_remote_manager_show_no_query_remotes( |
906 | 907 | assert "origin" in result.lower() or "fetch" in result.lower() |
907 | 908 |
|
908 | 909 |
|
| 910 | +class RemoteAddParamFixture(t.NamedTuple): |
| 911 | + """Test fixture for GitRemoteManager.add() parameter wiring.""" |
| 912 | + |
| 913 | + test_id: str |
| 914 | + fetch: bool | None |
| 915 | + track: str | None |
| 916 | + master: str | None |
| 917 | + |
| 918 | + |
| 919 | +REMOTE_ADD_PARAM_FIXTURES: list[RemoteAddParamFixture] = [ |
| 920 | + RemoteAddParamFixture( |
| 921 | + test_id="fetch-only", |
| 922 | + fetch=True, |
| 923 | + track=None, |
| 924 | + master=None, |
| 925 | + ), |
| 926 | + RemoteAddParamFixture( |
| 927 | + test_id="track-branch", |
| 928 | + fetch=None, |
| 929 | + track="master", |
| 930 | + master=None, |
| 931 | + ), |
| 932 | + RemoteAddParamFixture( |
| 933 | + test_id="master-branch", |
| 934 | + fetch=None, |
| 935 | + track=None, |
| 936 | + master="master", |
| 937 | + ), |
| 938 | + # Note: fetch=True with track requires the tracked branch to exist. |
| 939 | + # We test track and master separately since their flag wiring is independent. |
| 940 | +] |
| 941 | + |
| 942 | + |
| 943 | +@pytest.mark.parametrize( |
| 944 | + list(RemoteAddParamFixture._fields), |
| 945 | + REMOTE_ADD_PARAM_FIXTURES, |
| 946 | + ids=[test.test_id for test in REMOTE_ADD_PARAM_FIXTURES], |
| 947 | +) |
| 948 | +def test_remote_manager_add_params( |
| 949 | + git_repo: GitSync, |
| 950 | + create_git_remote_repo: CreateRepoPytestFixtureFn, |
| 951 | + test_id: str, |
| 952 | + fetch: bool | None, |
| 953 | + track: str | None, |
| 954 | + master: str | None, |
| 955 | +) -> None: |
| 956 | + """Test GitRemoteManager.add() parameter wiring. |
| 957 | +
|
| 958 | + Verifies commit 5c00880: fetch, track, master params were not wired. |
| 959 | + """ |
| 960 | + remote_repo = create_git_remote_repo() |
| 961 | + remote_name = f"test_remote_{test_id.replace('-', '_')}" |
| 962 | + |
| 963 | + # Add remote with params - should not error |
| 964 | + result = git_repo.cmd.remotes.add( |
| 965 | + name=remote_name, |
| 966 | + url=f"file://{remote_repo}", |
| 967 | + fetch=fetch, |
| 968 | + track=track, |
| 969 | + master=master, |
| 970 | + ) |
| 971 | + |
| 972 | + # Should succeed (empty string or no fatal error) |
| 973 | + assert "fatal" not in result.lower() |
| 974 | + |
| 975 | + # Verify remote was added |
| 976 | + remotes = git_repo.cmd.remotes.ls() |
| 977 | + remote_names = [r.remote_name for r in remotes] |
| 978 | + assert remote_name in remote_names |
| 979 | + |
| 980 | + |
909 | 981 | # ============================================================================= |
910 | 982 | # GitTagCmd / GitTagManager Tests |
911 | 983 | # ============================================================================= |
|
0 commit comments