Flash out API test suite

This commit is contained in:
2026-06-20 04:01:24 -04:00
parent 78d738b0ee
commit fc394b8555
19 changed files with 1818 additions and 51 deletions
+176
View File
@@ -0,0 +1,176 @@
from datetime import datetime, timedelta
from app.models.arrival import Arrival, ArrivalStatus
from app.models.departure import Departure, DepartureStatus
from app.models.local_flight import LocalFlight, LocalFlightStatus, LocalFlightType
from app.models.ppr import Aircraft, Airport, PPRRecord, PPRStatus
def test_public_arrivals_and_departures_start_empty(client):
arrivals = client.get("/api/v1/public/arrivals")
departures = client.get("/api/v1/public/departures")
assert arrivals.status_code == 200
assert arrivals.json() == []
assert departures.status_code == 200
assert departures.json() == []
def test_public_boards_include_todays_flights(client, db):
now = datetime.now().replace(microsecond=0)
ppr = PPRRecord(
status=PPRStatus.LANDED,
ac_reg="G-PPR1",
ac_type="PA28",
ac_call="GPPR1",
captain="Arriving Pilot",
in_from="EGLL",
eta=now,
pob_in=2,
out_to="EGKK",
etd=now,
pob_out=2,
created_by="test",
)
local_flight = LocalFlight(
registration="G-LOC1",
type="C152",
callsign="GLOC1",
pob=1,
flight_type=LocalFlightType.LOCAL,
status=LocalFlightStatus.BOOKED_OUT,
created_dt=now,
etd=now,
)
arrival = Arrival(
registration="G-ARR1",
type="DA40",
callsign="GARR1",
pob=3,
in_from="EGBB",
status=ArrivalStatus.INBOUND,
created_dt=now,
eta=now,
)
departure = Departure(
registration="G-DEP1",
type="SR22",
callsign="GDEP1",
pob=2,
out_to="EGCC",
status=DepartureStatus.BOOKED_OUT,
created_dt=now,
etd=now,
)
db.add_all([ppr, local_flight, arrival, departure])
db.commit()
arrivals = client.get("/api/v1/public/arrivals")
departures = client.get("/api/v1/public/departures")
assert arrivals.status_code == 200
assert {item.get("ac_reg") or item.get("registration") for item in arrivals.json()} == {
"G-PPR1",
"G-ARR1",
}
assert departures.status_code == 200
assert {item["ac_reg"] for item in departures.json()} == {
"G-PPR1",
"G-LOC1",
"G-DEP1",
}
def test_public_reference_lookups_return_seeded_records(client, db):
db.add(
Airport(
icao="EGLL",
iata="LHR",
name="London Heathrow",
country="United Kingdom",
city="London",
)
)
db.add(
Aircraft(
registration="G-ABCD",
type_code="PA28",
clean_reg="GABCD",
manufacturer_name="Piper",
model="Cherokee",
)
)
db.commit()
airport_response = client.get("/api/v1/airport/public/lookup/EGLL")
aircraft_response = client.get("/api/v1/aircraft/public/lookup/G-ABC")
assert airport_response.status_code == 200
assert airport_response.json()[0]["icao"] == "EGLL"
assert aircraft_response.status_code == 200
assert aircraft_response.json()[0]["registration"] == "G-ABCD"
def test_public_reference_lookups_return_empty_for_short_queries(client):
airport_response = client.get("/api/v1/airport/public/lookup/E")
aircraft_response = client.get("/api/v1/aircraft/public/lookup/G-A")
assert airport_response.status_code == 200
assert airport_response.json() == []
assert aircraft_response.status_code == 200
assert aircraft_response.json() == []
def test_public_airport_lookup_searches_by_partial_name(client, db):
db.add(
Airport(
icao="EGBB",
iata="BHX",
name="Birmingham Airport",
country="United Kingdom",
city="Birmingham",
)
)
db.commit()
response = client.get("/api/v1/airport/public/lookup/Birmingham")
assert response.status_code == 200
assert response.json()[0]["icao"] == "EGBB"
def test_public_boards_exclude_old_and_cancelled_records(client, db):
yesterday = datetime.now().replace(microsecond=0) - timedelta(days=1)
db.add(
PPRRecord(
status=PPRStatus.CANCELED,
ac_reg="G-OLD1",
ac_type="PA28",
captain="Old Pilot",
in_from="EGLL",
eta=yesterday,
pob_in=1,
out_to="EGKK",
etd=yesterday,
created_by="test",
)
)
db.add(
LocalFlight(
registration="G-OLD2",
type="C152",
pob=1,
flight_type=LocalFlightType.LOCAL,
status=LocalFlightStatus.BOOKED_OUT,
created_dt=yesterday,
)
)
db.commit()
arrivals = client.get("/api/v1/public/arrivals")
departures = client.get("/api/v1/public/departures")
assert arrivals.status_code == 200
assert arrivals.json() == []
assert departures.status_code == 200
assert departures.json() == []