177 lines
4.9 KiB
Python
177 lines
4.9 KiB
Python
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() == []
|