diff --git a/build/portal/backend/backend/routes/flights.py b/build/portal/backend/backend/routes/flights.py index cde2f55..6139217 100644 --- a/build/portal/backend/backend/routes/flights.py +++ b/build/portal/backend/backend/routes/flights.py @@ -14,7 +14,10 @@ def get_flight(flight): try: db=get_db() cursor=db.cursor() - cursor.execute("SELECT * FROM flights WHERE flight = %s", (flight,)) + + cursor.execute("SELECT * FROM flights WHERE flight = ?", (flight,)) + #cursor.execute("SELECT * FROM flights WHERE flight = %s", (flight,)) + columns=[x[0] for x in cursor.description] result=cursor.fetchall() for result in result: @@ -40,7 +43,21 @@ def get_flight_positions(flight): try: db=get_db() cursor=db.cursor() - cursor.execute("SELECT * FROM positions WHERE flight = %s ORDER BY time LIMIT %s, %s", (flight, offset, limit)) + + cursor.execute("SELECT COUNT(*) FROM flights WHERE flight = ?", (flight,)) + #cursor.execute("SELECT COUNT(*) FROM flight WHERE flight = %s", (flight,)) + + if cursor.fetchone()[0] == 0: + return "Not Found", 404 + + cursor.execute("SELECT id FROM flights WHERE flight = ?", (flight,)) + #cursor.execute("SELECT id FROM flights WHERE flight = %s", (flight,)) + + flight_id = cursor.fetchone()[0] + + cursor.execute("SELECT * FROM positions WHERE flight = ? ORDER BY time LIMIT ?, ?", (flight_id, offset, limit)) + #cursor.execute("SELECT * FROM positions WHERE flight = %s ORDER BY time LIMIT %s, %s", (flight, offset, limit)) + columns=[x[0] for x in cursor.description] result=cursor.fetchall() for result in result: @@ -69,7 +86,10 @@ def get_flights(): try: db=get_db() cursor=db.cursor() - cursor.execute("SELECT * FROM flights ORDER BY last_seen DESC, flight LIMIT %s, %s", (offset, limit)) + + cursor.execute("SELECT * FROM flights ORDER BY last_seen DESC, flight LIMIT ?, ?", (offset, limit)) + #cursor.execute("SELECT * FROM flights ORDER BY last_seen DESC, flight LIMIT %s, %s", (offset, limit)) + columns=[x[0] for x in cursor.description] result=cursor.fetchall() for result in result: diff --git a/build/portal/backend/tests/data.sql b/build/portal/backend/tests/data.sql index 363af8b..8469f61 100644 --- a/build/portal/backend/tests/data.sql +++ b/build/portal/backend/tests/data.sql @@ -6,24 +6,29 @@ VALUES ('icao04', '2024-07-17 04:40:44', '2024-06-17 04:44:04'), ('icao05', '2024-07-17 05:50:55', '2024-06-17 05:55:05'); +INSERT INTO flights (`aircraft`, `flight`, `first_seen`, `last_seen`) +VALUES + (1, 'FLT0001', '2024-07-17 01:10:11', '2024-06-17 01:11:01'), + (2, 'FLT0002', '2024-07-17 02:20:22', '2024-06-17 02:22:02'), + (3, 'FLT0003', '2024-07-17 03:30:33', '2024-06-17 03:33:03'), + (5, 'FLT0005', '2024-07-17 04:40:44', '2024-06-17 04:44:04'); + INSERT INTO positions (`flight`, `aircraft`, `time`, `message`, `squawk`, `latitude`, `longitude`, `track`, `altitude`, `verticle_rate`, `speed`) VALUES - (, 1, '2024-06-17 01:11:01', , , , , 5, , , ) - (, 1, '2024-06-17 01:11:46', , , , , 4, , , ) - (, 1, '2024-06-17 01:11:31', , , , , 3, , , ) - (, 1, '2024-06-17 01:11:16', , , , , 2, , , ) - (, 1, '2024-06-17 01:10:01', , , , , 1, , , ) - - (, 1, '2024-07-17 01:11:11', , , , , 5, , , ) - (, 1, '2024-07-17 01:10:56', , , , , 4, , , ) - (, 1, '2024-07-17 01:10:41', , , , , 3, , , ) - (, 1, '2024-07-17 01:10:26', , , , , 2, , , ) - (, 1, '2024-07-17 01:10:11', , , , , 1, , , ) - - (, 5, '2024-06-17 05:55:05', , , , , 4, , , ) - (, 5, '2024-07-17 05:50:20', , , , , 3, , , ) - (, 5, '2024-07-17 05:50:35', , , , , 2, , , ) - (, 5, '2024-07-17 05:50:55', , , , , 1, , , ) + (1, 1, '2024-06-17 01:11:01', 204, 6523, 42.649292, -84.960896, 98, 46975, 0, 477), + (1, 1, '2024-06-17 01:11:46', 289, 6523, 42.646408, -84.934304, 98, 46975, 0, 477), + (1, 1, '2024-06-17 01:11:31', 309, 6523, 42.637567, -84.8538, 98, 47000, 64, 476), + (1, 1, '2024-06-17 01:11:16', 455, 6523, 42.631622, -84.799971, 99, 47000, 0, 475), + (1, 1, '2024-06-17 01:10:01', 532, 6523, 42.625946, -84.748785, 99, 47000, 64, 474), + (1, 1, '2024-07-17 01:11:11', 11696, 1621, 41.384474, -83.586981, 276, 41725, 0, 380), + (1, 1, '2024-07-17 01:10:56', 11718, 1621, 41.38916, -83.650839, 276, 41725, 64, 380), + (1, 1, '2024-07-17 01:10:41', 11771, 1621, 41.392993, -83.701065, 275, 41700, -192, 378), + (1, 1, '2024-07-17 01:10:26', 11787, 1621, 41.394017, -83.71582, 275, 41725, -192, 378), + (1, 1, '2024-07-17 01:10:11', 11790, 1621, 41.394017, -83.71582, 275, 41725, -192, 378), + (4, 5, '2024-06-17 05:55:05', 323, 1317, 41.774163, -83.827344, 91, 36475, 832, 486), + (4, 5, '2024-07-17 05:50:20', 340, 1317, 41.773837, -83.788828, 91, 36625, 960, 487), + (4, 5, '2024-07-17 05:50:35', 417, 1317, 41.773464, -83.749737, 91, 36825, 768, 487), + (4, 5, '2024-07-17 05:50:55', 504, 1317, 41.772903, -83.690727, 91, 37225, 1216, 484); INSERT INTO users (`name`, `email`, `login`, `password`, `administrator`) VALUES diff --git a/build/portal/backend/tests/test_routes_aircraft.py b/build/portal/backend/tests/test_routes_aircraft.py index dc39cbc..42778f0 100644 --- a/build/portal/backend/tests/test_routes_aircraft.py +++ b/build/portal/backend/tests/test_routes_aircraft.py @@ -3,10 +3,10 @@ def test_get_aircraft_200(client): response = client.get('/api/aircraft/icao01') assert response.status_code == 200 - assert response.json['aircraft']['id'] == 1 - assert response.json['aircraft']['icao'] == "icao01" - assert response.json['aircraft']['first_seen'] == "2024-07-17 01:10:11" - assert response.json['aircraft']['last_seen'] == "2024-06-17 01:11:01" + assert response.json['id'] == 1 + assert response.json['icao'] == "icao01" + assert response.json['first_seen'] == "2024-07-17 01:10:11" + assert response.json['last_seen'] == "2024-06-17 01:11:01" def test_get_aircraft_404(client): response = client.get('/api/aircraft/icao00') @@ -14,9 +14,60 @@ def test_get_aircraft_404(client): # GET /api/aircraft/{icao}/positions -def test_get_aircraft_200(client): - response = client.get('/api/aircraft/icao00/positions') +def test_get_aircraft_positions_200(client): + response = client.get('/api/aircraft/icao05/positions') assert response.status_code == 200 + assert response.json['offset'] == 0 + assert response.json['limit'] == 500 + assert response.json['count'] == 4 + assert response.json['positions'][0]['id'] == 11 + assert response.json['positions'][0]['flight'] == 4 + assert response.json['positions'][0]['aircraft'] == 5 + assert response.json['positions'][0]['time'] == '2024-06-17 05:55:05' + assert response.json['positions'][0]['message'] == 323 + assert response.json['positions'][0]['squawk'] == 1317 + assert response.json['positions'][0]['latitude'] == 41.774163 + assert response.json['positions'][0]['longitude'] == -83.827344 + assert response.json['positions'][0]['track'] == 91 + assert response.json['positions'][0]['altitude'] == 36475 + assert response.json['positions'][0]['verticle_rate'] == 832 + assert response.json['positions'][0]['speed'] == 486 + assert response.json['positions'][1]['id'] == 12 + assert response.json['positions'][1]['flight'] == 4 + assert response.json['positions'][1]['aircraft'] == 5 + assert response.json['positions'][1]['time'] == '2024-07-17 05:50:20' + assert response.json['positions'][1]['message'] == 340 + assert response.json['positions'][1]['squawk'] == 1317 + assert response.json['positions'][1]['latitude'] == 41.773837 + assert response.json['positions'][1]['longitude'] == -83.788828 + assert response.json['positions'][1]['track'] == 91 + assert response.json['positions'][1]['altitude'] == 36625 + assert response.json['positions'][1]['verticle_rate'] == 960 + assert response.json['positions'][1]['speed'] == 487 + assert response.json['positions'][2]['id'] == 13 + assert response.json['positions'][2]['flight'] == 4 + assert response.json['positions'][2]['aircraft'] == 5 + assert response.json['positions'][2]['time'] == '2024-07-17 05:50:35' + assert response.json['positions'][2]['message'] == 417 + assert response.json['positions'][2]['squawk'] == 1317 + assert response.json['positions'][2]['latitude'] == 41.773464 + assert response.json['positions'][2]['longitude'] == -83.749737 + assert response.json['positions'][2]['track'] == 91 + assert response.json['positions'][2]['altitude'] == 36825 + assert response.json['positions'][2]['verticle_rate'] == 768 + assert response.json['positions'][2]['speed'] == 487 + assert response.json['positions'][3]['id'] == 14 + assert response.json['positions'][3]['flight'] == 4 + assert response.json['positions'][3]['aircraft'] == 5 + assert response.json['positions'][3]['time'] == '2024-07-17 05:50:55' + assert response.json['positions'][3]['message'] == 504 + assert response.json['positions'][3]['squawk'] == 1317 + assert response.json['positions'][3]['latitude'] == 41.772903 + assert response.json['positions'][3]['longitude'] == -83.690727 + assert response.json['positions'][3]['track'] == 91 + assert response.json['positions'][3]['altitude'] == 37225 + assert response.json['positions'][3]['verticle_rate'] == 1216 + assert response.json['positions'][3]['speed'] == 484 def test_get_aircraft_404(client): response = client.get('/api/aircraft/icao00/positions') diff --git a/build/portal/backend/tests/test_routes_flights.py b/build/portal/backend/tests/test_routes_flights.py new file mode 100644 index 0000000..23424bb --- /dev/null +++ b/build/portal/backend/tests/test_routes_flights.py @@ -0,0 +1,70 @@ +# GET /api/flight/{flight} + +def test_get_flight_200(client): + response = client.get('/api/flight/FLT0001') + assert response.status_code == 200 + assert response.json['id'] == 1 + assert response.json['aircraft'] == 1 + assert response.json['first_seen'] == "2024-07-17 01:10:11" + assert response.json['last_seen'] == "2024-06-17 01:11:01" + +def test_get_flight_404(client): + response = client.get('/api/flight/FLT0000') + assert response.status_code == 404 + +# GET /api/flight/{flight}/positions + +def test_get_flight_positions_200(client): + response = client.get('/api/flight/FLT0005/positions') + assert response.status_code == 200 + assert response.json['offset'] == 0 + assert response.json['limit'] == 500 + assert response.json['count'] == 4 + assert response.json['positions'][0]['id'] == 11 + assert response.json['positions'][0]['flight'] == 4 + assert response.json['positions'][0]['aircraft'] == 5 + assert response.json['positions'][0]['time'] == '2024-06-17 05:55:05' + assert response.json['positions'][0]['message'] == 323 + assert response.json['positions'][0]['squawk'] == 1317 + assert response.json['positions'][0]['latitude'] == 41.774163 + assert response.json['positions'][0]['longitude'] == -83.827344 + assert response.json['positions'][0]['track'] == 91 + assert response.json['positions'][0]['altitude'] == 36475 + assert response.json['positions'][0]['verticle_rate'] == 832 + assert response.json['positions'][0]['speed'] == 486 + assert response.json['positions'][1]['id'] == 12 + assert response.json['positions'][1]['flight'] == 4 + assert response.json['positions'][1]['aircraft'] == 5 + assert response.json['positions'][1]['time'] == '2024-07-17 05:50:20' + assert response.json['positions'][1]['message'] == 340 + assert response.json['positions'][1]['squawk'] == 1317 + assert response.json['positions'][1]['latitude'] == 41.773837 + assert response.json['positions'][1]['longitude'] == -83.788828 + assert response.json['positions'][1]['track'] == 91 + assert response.json['positions'][1]['altitude'] == 36625 + assert response.json['positions'][1]['verticle_rate'] == 960 + assert response.json['positions'][1]['speed'] == 487 + assert response.json['positions'][2]['id'] == 13 + assert response.json['positions'][2]['flight'] == 4 + assert response.json['positions'][2]['aircraft'] == 5 + assert response.json['positions'][2]['time'] == '2024-07-17 05:50:35' + assert response.json['positions'][2]['message'] == 417 + assert response.json['positions'][2]['squawk'] == 1317 + assert response.json['positions'][2]['latitude'] == 41.773464 + assert response.json['positions'][2]['longitude'] == -83.749737 + assert response.json['positions'][2]['track'] == 91 + assert response.json['positions'][2]['altitude'] == 36825 + assert response.json['positions'][2]['verticle_rate'] == 768 + assert response.json['positions'][2]['speed'] == 487 + assert response.json['positions'][3]['id'] == 14 + assert response.json['positions'][3]['flight'] == 4 + assert response.json['positions'][3]['aircraft'] == 5 + assert response.json['positions'][3]['time'] == '2024-07-17 05:50:55' + assert response.json['positions'][3]['message'] == 504 + assert response.json['positions'][3]['squawk'] == 1317 + assert response.json['positions'][3]['latitude'] == 41.772903 + assert response.json['positions'][3]['longitude'] == -83.690727 + assert response.json['positions'][3]['track'] == 91 + assert response.json['positions'][3]['altitude'] == 37225 + assert response.json['positions'][3]['verticle_rate'] == 1216 + assert response.json['positions'][3]['speed'] == 484 \ No newline at end of file