Coverage for src/tests/api/v1/teams/test_api.py: 100%

43 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2024-01-01 00:00 +0000

1"""Module for testing the teams API.""" 

2 

3import pytest 

4 

5from fastapi import status 

6from fastapi.testclient import TestClient 

7 

8 

9pytestmark = pytest.mark.api 

10 

11 

12async def test_get_team(client: TestClient, make_team_in_db): 

13 """Test /api/v1/teams endpoint for getting a team.""" 

14 team = await make_team_in_db() 

15 response = client.get(f"/api/v1/teams/{team.id}") 

16 assert response.status_code == status.HTTP_200_OK 

17 

18 

19async def test_get_teams(client: TestClient, make_team_in_db): 

20 """Test /api/v1/teams endpoint for getting all teams.""" 

21 await make_team_in_db() 

22 response = client.get("/api/v1/teams") 

23 assert response.status_code == status.HTTP_200_OK 

24 

25 

26async def test_delete_team(secure_client: TestClient, make_team_in_db): 

27 """Test /api/v1/teams endpoint for deleting a team.""" 

28 team = await make_team_in_db() 

29 response = secure_client.delete(f"/api/v1/teams/{team.id}") 

30 assert response.status_code == status.HTTP_200_OK 

31 

32 

33async def test_create_team(secure_client: TestClient, make_team): 

34 """Test /api/v1/teams endpoint for creating a team.""" 

35 team = make_team() 

36 payload = { 

37 "data": { 

38 "type": "teams", 

39 "attributes": { 

40 "name": team.name, 

41 "active": team.active, 

42 "remark": team.remark, 

43 }, 

44 "relationships": {"team_members": {"data": []}}, 

45 } 

46 } 

47 response = secure_client.post("/api/v1/teams", json=payload) 

48 assert response.status_code == status.HTTP_201_CREATED 

49 

50 

51async def test_update_team(secure_client: TestClient, make_team_in_db): 

52 """Test /api/v1/teams endpoint for updating a team.""" 

53 team = await make_team_in_db() 

54 payload = { 

55 "data": { 

56 "id": str(team.id), 

57 "type": "teams", 

58 "attributes": { 

59 "name": team.name, 

60 "active": team.active, 

61 "remark": "This is a test", 

62 }, 

63 "relationships": {"team_members": {"data": []}}, 

64 } 

65 } 

66 response = secure_client.patch(f"/api/v1/teams/{team.id}", json=payload) 

67 assert response.status_code == status.HTTP_200_OK 

68 assert response.json()["data"]["attributes"]["remark"] == "This is a test", ( 

69 "The team should be updated." 

70 ) 

71 

72 

73async def test_get_members( 

74 secure_client: TestClient, make_team_in_db, make_member_in_db 

75): 

76 """Test /api/v1/teams/members endpoint for getting members.""" 

77 team = await make_team_in_db() 

78 await make_member_in_db() 

79 response = secure_client.get(f"/api/v1/teams/members?filter[team]=noteq:{team.id}") 

80 assert response.status_code == status.HTTP_200_OK 

81 

82 

83async def test_get_team_members( 

84 secure_client: TestClient, make_team_in_db, make_team_member_in_db 

85): 

86 """Test /api/v1/teams/<id>/members endpoint for getting a team's members.""" 

87 team = await make_team_in_db() 

88 await make_team_member_in_db(team=team) 

89 response = secure_client.get(f"/api/v1/teams/{team.id}/members") 

90 assert response.status_code == status.HTTP_200_OK 

91 

92 

93async def test_create_team_member( 

94 secure_client: TestClient, make_team_in_db, make_member_in_db 

95): 

96 """Test /api/v1/teams/<id>/members endpoint for creating a team's member.""" 

97 team = await make_team_in_db() 

98 member = await make_member_in_db() 

99 payload = { 

100 "data": { 

101 "type": "team_members", 

102 "id": str(member.uuid), 

103 "attributes": { 

104 "active": True, 

105 "first_name": member.person.name.first_name, 

106 "last_name": member.person.name.last_name, 

107 "license_number": member.license.number, 

108 "license_end_date": str(member.license.end_date), 

109 "gender": member.person.gender.value, 

110 "birthdate": str(member.person.birthdate), 

111 "active_in_club": True, 

112 }, 

113 "relationships": { 

114 "nationality": { 

115 "data": { 

116 "type": "countries", 

117 "id": str(member.person.nationality.id), 

118 } 

119 }, 

120 "team": {"data": None}, 

121 }, 

122 } 

123 } 

124 response = secure_client.post(f"/api/v1/teams/{team.id}/members", json=payload) 

125 assert response.status_code == status.HTTP_201_CREATED, response.json()