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
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
1"""Module for testing the teams API."""
3import pytest
5from fastapi import status
6from fastapi.testclient import TestClient
9pytestmark = pytest.mark.api
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
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
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
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
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 )
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
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
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()