Files
test-dinmo/test_client.py
2023-01-12 15:21:42 +01:00

88 lines
2.6 KiB
Python

from pytest import approx
from fastapi.testclient import TestClient
from main import app
client = TestClient(app)
def test_create_people():
response = client.post(
"/people",
json=people_fixture
)
assert response.status_code == 200
assert response.json()['records_created'] == 10
def test_read_average_age():
response = client.get("/average_age")
assert response.status_code == 200
for a in response.json():
if a['country'] == 'FR':
assert a['average_age'] == 15.0
elif a['country'] == 'BE':
assert a['average_age'] == 25.0
elif a['country'] == 'DE':
assert a['average_age'] == approx(23. + 1/3)
elif a['country'] == 'IT':
assert a['average_age'] == 45.0
def test_read_count_by_country():
response = client.get("/count_by_country")
assert response.status_code == 200
for a in response.json():
if a['country'] == 'FR':
assert a['people_count'] == 2
elif a['country'] == 'BE':
assert a['people_count'] == 4
elif a['country'] == 'DE':
assert a['people_count'] == 3
elif a['country'] == 'IT':
assert a['people_count'] == 1
def test_read_count_by_gender():
response = client.get("/gender_repartition/FR")
assert response.status_code == 200
r = response.json()
assert r['female_proportion'] == .5
response = client.get("/gender_repartition/BE")
assert response.status_code == 200
r = response.json()
assert r['female_proportion'] == .5
response = client.get("/gender_repartition/DE")
assert response.status_code == 200
r = response.json()
assert r['female_proportion'] == approx(1/3)
response = client.get("/gender_repartition/IT")
assert response.status_code == 200
r = response.json()
assert r['female_proportion'] == 1
people_fixture = {
"people": [
{"name": "Alice", "age": 10, "gender": "F", "country": "FR"},
{"name": "Bob", "age": 20, "gender": "M", "country": "FR"},
{"name": "Charlie", "age": 10, "gender": "M", "country": "BE"},
{"name": "David", "age": 20, "gender": "M", "country": "BE"},
{"name": "Evelyn", "age": 30, "gender": "F", "country": "BE"},
{"name": "Fanny", "age": 40, "gender": "F", "country": "BE"},
{"name": "Ghislain", "age": 20, "gender": "M", "country": "DE"},
{"name": "Hector", "age": 22, "gender": "M", "country": "DE"},
{"name": "Isabelle", "age": 28, "gender": "F", "country": "DE"},
{"name": "Jocelyne", "age": 45, "gender": "F", "country": "IT"},
]
}