Coverage for backend / tests / test_invalidate_cache.py: 100%
26 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-02 15:51 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-02 15:51 +0000
1from unittest.mock import AsyncMock
3from fastapi.testclient import TestClient
4from redis import RedisError
7class TestInvalidateCacheAuth:
8 def test_missing_token_returns_401(self, client: TestClient):
9 resp = client.post("/coverage/invalidate-cache/owner/repo/")
10 assert resp.status_code == 401
12 def test_invalid_token_returns_403(self, client: TestClient):
13 resp = client.post(
14 "/coverage/invalidate-cache/owner/repo/",
15 headers={"token": "wrong-key"},
16 )
17 assert resp.status_code == 403
19 def test_valid_token_returns_200(
20 self,
21 client: TestClient,
22 mock_redis: AsyncMock,
23 api_key: str,
24 ):
25 resp = client.post(
26 "/coverage/invalidate-cache/owner/repo/",
27 headers={"token": api_key},
28 )
29 assert resp.status_code == 200
32class TestInvalidateCache:
33 def test_deletes_badge_cache_key(
34 self,
35 client: TestClient,
36 mock_redis: AsyncMock,
37 api_key: str,
38 ):
39 resp = client.post(
40 "/coverage/invalidate-cache/owner/repo/",
41 headers={"token": api_key},
42 )
44 assert resp.status_code == 200
45 assert resp.json() == {"status": "success"}
46 mock_redis.delete.assert_awaited_once_with("cache:badge:owner:repo")
48 def test_returns_500_on_redis_error(
49 self,
50 client: TestClient,
51 mock_redis: AsyncMock,
52 api_key: str,
53 ):
54 mock_redis.delete.side_effect = RedisError("connection refused")
56 resp = client.post(
57 "/coverage/invalidate-cache/owner/repo/",
58 headers={"token": api_key},
59 )
61 assert resp.status_code == 500
63 def test_invalidates_cache_key_per_repo(
64 self,
65 client: TestClient,
66 mock_redis: AsyncMock,
67 api_key: str,
68 ):
69 client.post(
70 "/coverage/invalidate-cache/some-org/some-repo/",
71 headers={"token": api_key},
72 )
74 mock_redis.delete.assert_awaited_once_with("cache:badge:some-org:some-repo")