summaryrefslogtreecommitdiff
path: root/tests/test_repositories_api.py
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-09 19:45:45 -0500
committerChristian Cleberg <[email protected]>2026-04-09 19:45:45 -0500
commitacbff854f2da96bddcaede1385e7fefeba0fb34b (patch)
tree48d4707cd3276d2825370f0793008a6ffcfff936 /tests/test_repositories_api.py
downloadhutch-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.py77
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"