diff options
| author | Christian Cleberg <[email protected]> | 2026-04-09 19:45:45 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-04-09 19:45:45 -0500 |
| commit | acbff854f2da96bddcaede1385e7fefeba0fb34b (patch) | |
| tree | 48d4707cd3276d2825370f0793008a6ffcfff936 /tests/test_repositories_api.py | |
| download | hutch-stats-acbff854f2da96bddcaede1385e7fefeba0fb34b.tar.gz hutch-stats-acbff854f2da96bddcaede1385e7fefeba0fb34b.tar.bz2 hutch-stats-acbff854f2da96bddcaede1385e7fefeba0fb34b.zip | |
initial commit
Diffstat (limited to 'tests/test_repositories_api.py')
| -rw-r--r-- | tests/test_repositories_api.py | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/tests/test_repositories_api.py b/tests/test_repositories_api.py new file mode 100644 index 0000000..c2f9060 --- /dev/null +++ b/tests/test_repositories_api.py @@ -0,0 +1,77 @@ +from fastapi.testclient import TestClient + + +def test_create_list_get_update_delete_tracked_repositories(client: TestClient) -> None: + create_response = client.post( + "/api/repositories", + json={"actor": "~ccleberg", "repo_name": "Hutch"}, + ) + + assert create_response.status_code == 201 + assert create_response.json()["repo_name"] == "~ccleberg/Hutch" + + repository_id = create_response.json()["id"] + + get_response = client.get(f"/api/repositories/{repository_id}") + assert get_response.status_code == 200 + assert get_response.json()["repo_name"] == "~ccleberg/Hutch" + + update_response = client.patch( + f"/api/repositories/{repository_id}", + json={"repo_name": "~ccleberg/cleberg.net"}, + ) + assert update_response.status_code == 200 + assert update_response.json()["repo_name"] == "~ccleberg/cleberg.net" + + list_response = client.get("/api/repositories?actor=~ccleberg") + assert list_response.status_code == 200 + assert list_response.json() == [ + { + "id": repository_id, + "service": "git", + "actor": "~ccleberg", + "repo_name": "~ccleberg/cleberg.net", + } + ] + + delete_response = client.delete(f"/api/repositories/{repository_id}") + assert delete_response.status_code == 204 + + missing_response = client.get(f"/api/repositories/{repository_id}") + assert missing_response.status_code == 404 + + +def test_repository_validation_and_conflicts(client: TestClient) -> None: + invalid_response = client.post( + "/api/repositories", + json={"actor": "~ccleberg", "repo_name": " "}, + ) + assert invalid_response.status_code == 422 + + first_response = client.post( + "/api/repositories", + json={"actor": "~ccleberg", "repo_name": "Hutch"}, + ) + second_response = client.post( + "/api/repositories", + json={"actor": "~ccleberg", "repo_name": "~ccleberg/Hutch"}, + ) + + assert first_response.status_code == 201 + assert second_response.status_code == 409 + + +def test_same_repository_can_be_tracked_by_different_actors(client: TestClient) -> None: + first_response = client.post( + "/api/repositories", + json={"actor": "~ccleberg", "repo_name": "Hutch"}, + ) + second_response = client.post( + "/api/repositories", + json={"actor": "~other", "repo_name": "Hutch"}, + ) + + assert first_response.status_code == 201 + assert second_response.status_code == 201 + assert first_response.json()["repo_name"] == "~ccleberg/Hutch" + assert second_response.json()["repo_name"] == "~other/Hutch" |
