Skip to content

Commit

Permalink
InfrahubCTL: Repository command changes (#244)
Browse files Browse the repository at this point in the history
* Refactor repository to not create blank credentials. Remove commit option in favor of ref option to match API and allow setting the ref on CTL.

* Format/Lint.

* Fixed payload between CoreRepositoryCreate and CoreReadOnlyRepositoryCreate mutations.
  • Loading branch information
FragmentedPacket authored and dgarros committed Feb 23, 2025
1 parent c0634af commit 4d55068
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 16 deletions.
19 changes: 14 additions & 5 deletions infrahub_sdk/ctl/repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ async def add(
description: str = "",
username: str | None = None,
password: str = "",
commit: str = "",
ref: str = "",
read_only: bool = False,
debug: bool = False,
branch: str = typer.Option("main", help="Branch on which to add the repository."), # TODO: Replace main by None
Expand All @@ -86,15 +86,24 @@ async def add(
"name": {"value": name},
"location": {"value": location},
"description": {"value": description},
"commit": {"value": commit},
},
}
if read_only:
input_data["data"]["ref"] = {"value": ref}
else:
input_data["data"]["default_branch"] = {"value": ref}

client = initialize_client()

credential = await client.create(kind="CorePasswordCredential", name=name, username=username, password=password)
await credential.save(allow_upsert=True)
input_data["data"]["credential"] = {"id": credential.id}
if username or password:
credential = await client.create(
kind="CorePasswordCredential",
name=name,
username=username,
password=password,
)
await credential.save(allow_upsert=True)
input_data["data"]["credential"] = {"id": credential.id}

query = Mutation(
mutation="CoreReadOnlyRepositoryCreate" if read_only else "CoreRepositoryCreate",
Expand Down
71 changes: 60 additions & 11 deletions tests/unit/ctl/test_repository_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,55 @@ def mock_client() -> mock.Mock:
class TestInfrahubctlRepository:
"""Groups the 'infrahubctl repository' test cases."""

@requires_python_310
@mock.patch("infrahub_sdk.ctl.repository.initialize_client")
def test_repo_no_username_or_password(self, mock_init_client, mock_client) -> None:
"""Case allow no username to be passed in and set it as None rather than blank string that fails."""
mock_cred = mock.AsyncMock()
mock_cred.id = "1234"
mock_client.create.return_value = mock_cred

mock_init_client.return_value = mock_client
output = runner.invoke(
app,
[
"repository",
"add",
"Gitlab",
"https://gitlab.com/opsmill/example-repo.git",
],
)
assert output.exit_code == 0
mock_client.create.assert_not_called()
mock_cred.save.assert_not_called()
mock_client.execute_graphql.assert_called_once()
mock_client.execute_graphql.assert_called_with(
query="""
mutation {
CoreRepositoryCreate(
data: {
name: {
value: "Gitlab"
}
location: {
value: "https://gitlab.com/opsmill/example-repo.git"
}
description: {
value: ""
}
default_branch: {
value: ""
}
}
){
ok
}
}
""",
branch_name="main",
tracker="mutation-repository-create",
)

@requires_python_310
@mock.patch("infrahub_sdk.ctl.repository.initialize_client")
def test_repo_no_username(self, mock_init_client, mock_client) -> None:
Expand Down Expand Up @@ -74,7 +123,7 @@ def test_repo_no_username(self, mock_init_client, mock_client) -> None:
description: {
value: ""
}
commit: {
default_branch: {
value: ""
}
credential: {
Expand Down Expand Up @@ -137,7 +186,7 @@ def test_repo_username(self, mock_init_client, mock_client) -> None:
description: {
value: ""
}
commit: {
default_branch: {
value: ""
}
credential: {
Expand Down Expand Up @@ -168,7 +217,7 @@ def test_repo_readonly_true(self, mock_init_client, mock_client) -> None:
"repository",
"add",
"Gitlab",
"https://gitlab.com/FragmentedPacket/nautobot-plugin-ansible-filters.git",
"https://gitlab.com/opsmill/example-repo.git",
"--password",
"mySup3rSecureP@ssw0rd",
"--read-only",
Expand All @@ -194,12 +243,12 @@ def test_repo_readonly_true(self, mock_init_client, mock_client) -> None:
value: "Gitlab"
}
location: {
value: "https://gitlab.com/FragmentedPacket/nautobot-plugin-ansible-filters.git"
value: "https://gitlab.com/opsmill/example-repo.git"
}
description: {
value: ""
}
commit: {
ref: {
value: ""
}
credential: {
Expand Down Expand Up @@ -230,15 +279,15 @@ def test_repo_description_commit_branch(self, mock_init_client, mock_client) ->
"repository",
"add",
"Gitlab",
"https://gitlab.com/FragmentedPacket/nautobot-plugin-ansible-filters.git",
"https://gitlab.com/opsmill/example-repo.git",
"--password",
"mySup3rSecureP@ssw0rd",
"--username",
"opsmill",
"--description",
"This is a test description",
"--commit",
"myHashCommit",
"--ref",
"my-custom-branch",
"--branch",
"develop",
],
Expand All @@ -263,13 +312,13 @@ def test_repo_description_commit_branch(self, mock_init_client, mock_client) ->
value: "Gitlab"
}
location: {
value: "https://gitlab.com/FragmentedPacket/nautobot-plugin-ansible-filters.git"
value: "https://gitlab.com/opsmill/example-repo.git"
}
description: {
value: "This is a test description"
}
commit: {
value: "myHashCommit"
default_branch: {
value: "my-custom-branch"
}
credential: {
id: "1234"
Expand Down

0 comments on commit 4d55068

Please sign in to comment.