krz/hutch-stats
Server-side utility for calculating contributions for sourcehut users.
clone: git clone https://gitbay.org/krz/hutch-stats.git
main: tests/test_repositories_api.py · raw
1from fastapi.testclient import TestClient
2
3
4def test_create_list_get_update_delete_tracked_repositories(client: TestClient) -> None:
5 create_response = client.post(
6 "/api/repositories",
7 json={"actor": "~ccleberg", "repo_name": "Hutch"},
8 )
9
10 assert create_response.status_code == 201
11 assert create_response.json()["repo_name"] == "~ccleberg/Hutch"
12
13 repository_id = create_response.json()["id"]
14
15 get_response = client.get(f"/api/repositories/{repository_id}")
16 assert get_response.status_code == 200
17 assert get_response.json()["repo_name"] == "~ccleberg/Hutch"
18
19 update_response = client.patch(
20 f"/api/repositories/{repository_id}",
21 json={"repo_name": "~ccleberg/cleberg.net"},
22 )
23 assert update_response.status_code == 200
24 assert update_response.json()["repo_name"] == "~ccleberg/cleberg.net"
25
26 list_response = client.get("/api/repositories?actor=~ccleberg")
27 assert list_response.status_code == 200
28 assert list_response.json() == [
29 {
30 "id": repository_id,
31 "service": "git",
32 "actor": "~ccleberg",
33 "repo_name": "~ccleberg/cleberg.net",
34 }
35 ]
36
37 delete_response = client.delete(f"/api/repositories/{repository_id}")
38 assert delete_response.status_code == 204
39
40 missing_response = client.get(f"/api/repositories/{repository_id}")
41 assert missing_response.status_code == 404
42
43
44def test_repository_validation_and_conflicts(client: TestClient) -> None:
45 invalid_response = client.post(
46 "/api/repositories",
47 json={"actor": "~ccleberg", "repo_name": " "},
48 )
49 assert invalid_response.status_code == 422
50
51 first_response = client.post(
52 "/api/repositories",
53 json={"actor": "~ccleberg", "repo_name": "Hutch"},
54 )
55 second_response = client.post(
56 "/api/repositories",
57 json={"actor": "~ccleberg", "repo_name": "~ccleberg/Hutch"},
58 )
59
60 assert first_response.status_code == 201
61 assert second_response.status_code == 409
62
63
64def test_same_repository_can_be_tracked_by_different_actors(client: TestClient) -> None:
65 first_response = client.post(
66 "/api/repositories",
67 json={"actor": "~ccleberg", "repo_name": "Hutch"},
68 )
69 second_response = client.post(
70 "/api/repositories",
71 json={"actor": "~other", "repo_name": "Hutch"},
72 )
73
74 assert first_response.status_code == 201
75 assert second_response.status_code == 201
76 assert first_response.json()["repo_name"] == "~ccleberg/Hutch"
77 assert second_response.json()["repo_name"] == "~other/Hutch"