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

1from unittest.mock import AsyncMock 

2 

3from fastapi.testclient import TestClient 

4from redis import RedisError 

5 

6 

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 

11 

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 

18 

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 

30 

31 

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 ) 

43 

44 assert resp.status_code == 200 

45 assert resp.json() == {"status": "success"} 

46 mock_redis.delete.assert_awaited_once_with("cache:badge:owner:repo") 

47 

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") 

55 

56 resp = client.post( 

57 "/coverage/invalidate-cache/owner/repo/", 

58 headers={"token": api_key}, 

59 ) 

60 

61 assert resp.status_code == 500 

62 

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 ) 

73 

74 mock_redis.delete.assert_awaited_once_with("cache:badge:some-org:some-repo")