2016-07-02 18:20:04 +00:00
|
|
|
import unittest
|
|
|
|
import os
|
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
from sqlalchemy.sql import null
|
2017-12-12 08:59:38 +00:00
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
from ogn.model import Logbook, Airport, Device
|
2017-12-10 16:30:27 +00:00
|
|
|
from ogn.collect.logbook import update_logbook
|
2017-12-16 14:54:04 +00:00
|
|
|
from ogn.model.takeoff_landing import TakeoffLanding
|
2016-07-02 18:20:04 +00:00
|
|
|
|
|
|
|
|
|
|
|
class TestDB(unittest.TestCase):
|
|
|
|
session = None
|
|
|
|
engine = None
|
|
|
|
app = None
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
os.environ['OGN_CONFIG_MODULE'] = 'config.test'
|
|
|
|
from ogn.commands.dbutils import engine, session
|
|
|
|
self.session = session
|
|
|
|
self.engine = engine
|
|
|
|
|
2016-07-02 18:47:06 +00:00
|
|
|
from ogn.commands.database import init
|
|
|
|
init()
|
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
# Create basic data and insert
|
|
|
|
self.dd0815 = Device(address='DD0815')
|
|
|
|
self.dd4711 = Device(address='DD4711')
|
|
|
|
|
|
|
|
self.koenigsdorf = Airport(name='Koenigsdorf')
|
|
|
|
self.ohlstadt = Airport(name='Ohlstadt')
|
|
|
|
|
|
|
|
session.add(self.dd0815)
|
|
|
|
session.add(self.dd4711)
|
|
|
|
session.add(self.koenigsdorf)
|
|
|
|
session.add(self.ohlstadt)
|
|
|
|
|
|
|
|
session.commit()
|
|
|
|
|
|
|
|
# Prepare takeoff and landings
|
|
|
|
self.takeoff_koenigsdorf_dd0815 = TakeoffLanding(is_takeoff=True, timestamp='2016-06-01 10:00:00', airport_id=self.koenigsdorf.id, device_id=self.dd0815.id)
|
|
|
|
self.landing_koenigsdorf_dd0815 = TakeoffLanding(is_takeoff=False, timestamp='2016-06-01 10:05:00', airport_id=self.koenigsdorf.id, device_id=self.dd0815.id)
|
|
|
|
self.landing_koenigsdorf_dd0815_later = TakeoffLanding(is_takeoff=False, timestamp='2016-06-02 10:05:00', airport_id=self.koenigsdorf.id, device_id=self.dd0815.id)
|
|
|
|
self.takeoff_ohlstadt_dd4711 = TakeoffLanding(is_takeoff=True, timestamp='2016-06-01 10:00:00', airport_id=self.ohlstadt.id, device_id=self.dd4711.id)
|
2016-07-02 18:20:04 +00:00
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
session = self.session
|
|
|
|
session.execute("DELETE FROM takeoff_landing")
|
|
|
|
session.execute("DELETE FROM logbook")
|
|
|
|
session.execute("DELETE FROM device")
|
|
|
|
session.execute("DELETE FROM airport")
|
|
|
|
session.commit()
|
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
def get_logbook_entries(self):
|
2017-12-12 08:59:38 +00:00
|
|
|
session = self.session
|
2017-12-16 14:54:04 +00:00
|
|
|
return session.query(Logbook).order_by(Logbook.takeoff_airport_id, Logbook.reftime).all()
|
2017-12-12 08:59:38 +00:00
|
|
|
|
|
|
|
def assert_entries(self, koen_to=0, koen_ldg=0, koen_complete=0, ohl_to=0, ohl_ldg=0, ohl_complete=0):
|
|
|
|
session = self.session
|
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
entries = len(session.query(Logbook).filter(Logbook.takeoff_airport_id == self.koenigsdorf.id).filter(Logbook.landing_airport_id == null()).all())
|
2017-12-12 08:59:38 +00:00
|
|
|
self.assertEqual(entries, koen_to)
|
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
entries = len(session.query(Logbook).filter(Logbook.landing_airport_id == self.koenigsdorf.id).filter(Logbook.takeoff_airport_id == null()).all())
|
2017-12-12 08:59:38 +00:00
|
|
|
self.assertEqual(entries, koen_ldg)
|
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
entries = len(session.query(Logbook).filter(Logbook.takeoff_airport_id == Logbook.landing_airport_id == self.koenigsdorf.id).all())
|
2017-12-12 08:59:38 +00:00
|
|
|
self.assertEqual(entries, koen_complete)
|
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
entries = len(session.query(Logbook).filter(Logbook.takeoff_airport_id == self.ohlstadt.id).filter(Logbook.landing_airport_id == null()).all())
|
2017-12-12 08:59:38 +00:00
|
|
|
self.assertEqual(entries, ohl_to)
|
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
entries = len(session.query(Logbook).filter(Logbook.landing_airport_id == self.ohlstadt.id).filter(Logbook.takeoff_airport_id == null()).all())
|
2017-12-12 08:59:38 +00:00
|
|
|
self.assertEqual(entries, ohl_ldg)
|
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
entries = len(session.query(Logbook).filter(Logbook.takeoff_airport_id == Logbook.landing_airport_id == self.ohlstadt.id).all())
|
2017-12-12 08:59:38 +00:00
|
|
|
self.assertEqual(entries, ohl_complete)
|
|
|
|
|
2016-07-02 18:20:04 +00:00
|
|
|
def test_single_takeoff(self):
|
|
|
|
session = self.session
|
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
session.add(self.takeoff_koenigsdorf_dd0815)
|
2016-07-02 18:20:04 +00:00
|
|
|
session.commit()
|
|
|
|
|
2017-12-12 08:59:38 +00:00
|
|
|
update_logbook(session)
|
2017-12-16 14:54:04 +00:00
|
|
|
entries = self.get_logbook_entries()
|
|
|
|
self.assertEqual(len(entries), 1)
|
|
|
|
self.assertEqual(entries[0].takeoff_airport_id, self.koenigsdorf.id)
|
|
|
|
self.assertEqual(entries[0].landing_airport_id, None)
|
2016-07-02 18:20:04 +00:00
|
|
|
|
2017-12-12 08:59:38 +00:00
|
|
|
update_logbook(session)
|
2017-12-16 14:54:04 +00:00
|
|
|
entries2 = self.get_logbook_entries()
|
|
|
|
self.assertEqual(entries, entries2)
|
2016-07-06 17:34:55 +00:00
|
|
|
|
2016-07-02 18:20:04 +00:00
|
|
|
def test_single_landing(self):
|
|
|
|
session = self.session
|
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
session.add(self.landing_koenigsdorf_dd0815)
|
2016-07-02 18:20:04 +00:00
|
|
|
session.commit()
|
|
|
|
|
2017-12-12 08:59:38 +00:00
|
|
|
update_logbook(session)
|
2017-12-16 14:54:04 +00:00
|
|
|
entries = self.get_logbook_entries()
|
|
|
|
self.assertEqual(len(entries), 1)
|
|
|
|
self.assertEqual(entries[0].takeoff_airport_id, None)
|
|
|
|
self.assertEqual(entries[0].landing_airport_id, self.koenigsdorf.id)
|
2016-07-02 18:20:04 +00:00
|
|
|
|
2017-12-12 08:59:38 +00:00
|
|
|
update_logbook(session)
|
2017-12-16 14:54:04 +00:00
|
|
|
entries2 = self.get_logbook_entries()
|
|
|
|
self.assertEqual(entries, entries2)
|
2016-07-06 17:34:55 +00:00
|
|
|
|
2016-07-02 18:20:04 +00:00
|
|
|
def test_different_takeoffs(self):
|
|
|
|
session = self.session
|
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
session.add(self.takeoff_koenigsdorf_dd0815)
|
|
|
|
session.add(self.takeoff_ohlstadt_dd4711)
|
2016-07-02 18:20:04 +00:00
|
|
|
session.commit()
|
|
|
|
|
2017-12-12 08:59:38 +00:00
|
|
|
update_logbook(session)
|
2017-12-16 14:54:04 +00:00
|
|
|
entries = self.get_logbook_entries()
|
|
|
|
self.assertEqual(len(entries), 2)
|
|
|
|
self.assertEqual(entries[0].takeoff_airport_id, self.koenigsdorf.id)
|
|
|
|
self.assertEqual(entries[1].takeoff_airport_id, self.ohlstadt.id)
|
2016-07-02 18:20:04 +00:00
|
|
|
|
2017-12-12 08:59:38 +00:00
|
|
|
update_logbook(session)
|
2017-12-16 14:54:04 +00:00
|
|
|
entries2 = self.get_logbook_entries()
|
|
|
|
self.assertEqual(entries, entries2)
|
2016-07-06 17:34:55 +00:00
|
|
|
|
2016-07-02 18:20:04 +00:00
|
|
|
def test_takeoff_and_landing(self):
|
|
|
|
session = self.session
|
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
session.add(self.takeoff_koenigsdorf_dd0815)
|
|
|
|
session.add(self.landing_koenigsdorf_dd0815)
|
2016-07-02 18:20:04 +00:00
|
|
|
session.commit()
|
|
|
|
|
2017-12-12 08:59:38 +00:00
|
|
|
update_logbook(session)
|
2017-12-16 14:54:04 +00:00
|
|
|
entries = self.get_logbook_entries()
|
|
|
|
self.assertEqual(len(entries), 1)
|
|
|
|
self.assertEqual(entries[0].takeoff_airport_id, self.koenigsdorf.id)
|
|
|
|
self.assertEqual(entries[0].landing_airport_id, self.koenigsdorf.id)
|
2016-07-02 18:20:04 +00:00
|
|
|
|
2017-12-12 08:59:38 +00:00
|
|
|
update_logbook(session)
|
2017-12-16 14:54:04 +00:00
|
|
|
entries2 = self.get_logbook_entries()
|
|
|
|
self.assertEqual(entries, entries2)
|
2016-07-06 17:34:55 +00:00
|
|
|
|
2016-07-02 18:20:04 +00:00
|
|
|
def test_takeoff_and_landing_on_different_days(self):
|
|
|
|
session = self.session
|
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
session.add(self.takeoff_koenigsdorf_dd0815)
|
|
|
|
session.add(self.landing_koenigsdorf_dd0815_later)
|
2016-07-02 18:20:04 +00:00
|
|
|
session.commit()
|
|
|
|
|
2017-12-12 08:59:38 +00:00
|
|
|
update_logbook(session)
|
2017-12-16 14:54:04 +00:00
|
|
|
entries = self.get_logbook_entries()
|
|
|
|
self.assertEqual(len(entries), 2)
|
|
|
|
self.assertEqual(entries[0].takeoff_airport_id, self.koenigsdorf.id)
|
|
|
|
self.assertEqual(entries[0].reftime, self.takeoff_koenigsdorf_dd0815.timestamp)
|
|
|
|
self.assertEqual(entries[1].landing_airport_id, self.koenigsdorf.id)
|
|
|
|
self.assertEqual(entries[1].reftime, self.landing_koenigsdorf_dd0815_later.timestamp)
|
2016-07-02 18:20:04 +00:00
|
|
|
|
2017-12-12 08:59:38 +00:00
|
|
|
update_logbook(session)
|
2017-12-16 14:54:04 +00:00
|
|
|
entries2 = self.get_logbook_entries()
|
|
|
|
self.assertEqual(entries, entries2)
|
2016-07-06 17:34:55 +00:00
|
|
|
|
2016-07-02 18:20:04 +00:00
|
|
|
def test_update(self):
|
|
|
|
session = self.session
|
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
session.add(self.takeoff_koenigsdorf_dd0815)
|
2016-07-02 18:20:04 +00:00
|
|
|
session.commit()
|
2016-07-04 20:54:37 +00:00
|
|
|
|
2017-12-12 08:59:38 +00:00
|
|
|
update_logbook(session)
|
2017-12-16 14:54:04 +00:00
|
|
|
entries = self.get_logbook_entries()
|
|
|
|
self.assertEqual(len(entries), 1)
|
|
|
|
self.assertEqual(entries[0].takeoff_airport_id, self.koenigsdorf.id)
|
2016-07-04 20:54:37 +00:00
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
session.add(self.landing_koenigsdorf_dd0815)
|
2016-07-02 18:20:04 +00:00
|
|
|
session.commit()
|
|
|
|
|
2017-12-12 08:59:38 +00:00
|
|
|
update_logbook(session)
|
2017-12-16 14:54:04 +00:00
|
|
|
entries = self.get_logbook_entries()
|
|
|
|
self.assertEqual(len(entries), 1)
|
|
|
|
self.assertEqual(entries[0].takeoff_airport_id, self.koenigsdorf.id)
|
|
|
|
self.assertEqual(entries[0].landing_airport_id, self.koenigsdorf.id)
|
2016-07-04 20:54:37 +00:00
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
session.add(self.takeoff_ohlstadt_dd4711)
|
2016-07-04 20:54:37 +00:00
|
|
|
session.commit()
|
|
|
|
|
2017-12-12 08:59:38 +00:00
|
|
|
update_logbook(session)
|
2017-12-16 14:54:04 +00:00
|
|
|
entries = self.get_logbook_entries()
|
|
|
|
self.assertEqual(len(entries), 2)
|
|
|
|
self.assertEqual(entries[0].takeoff_airport_id, self.koenigsdorf.id)
|
|
|
|
self.assertEqual(entries[1].takeoff_airport_id, self.ohlstadt.id)
|
2016-07-06 17:34:55 +00:00
|
|
|
|
2016-07-02 18:20:04 +00:00
|
|
|
def test_update_wrong_order(self):
|
|
|
|
session = self.session
|
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
session.add(self.landing_koenigsdorf_dd0815)
|
2016-07-02 18:20:04 +00:00
|
|
|
session.commit()
|
2016-07-04 20:54:37 +00:00
|
|
|
|
2017-12-12 08:59:38 +00:00
|
|
|
update_logbook(session)
|
2017-12-16 14:54:04 +00:00
|
|
|
entries = self.get_logbook_entries()
|
|
|
|
self.assertEqual(len(entries), 1)
|
|
|
|
self.assertEqual(entries[0].takeoff_airport_id, None)
|
|
|
|
self.assertEqual(entries[0].landing_airport_id, self.koenigsdorf.id)
|
|
|
|
self.assertEqual(entries[0].reftime, self.landing_koenigsdorf_dd0815.timestamp)
|
2016-07-04 20:54:37 +00:00
|
|
|
|
2017-12-16 14:54:04 +00:00
|
|
|
session.add(self.takeoff_koenigsdorf_dd0815)
|
2016-07-02 18:20:04 +00:00
|
|
|
session.commit()
|
|
|
|
|
2017-12-12 08:59:38 +00:00
|
|
|
update_logbook(session)
|
2017-12-16 14:54:04 +00:00
|
|
|
entries = self.get_logbook_entries()
|
|
|
|
self.assertEqual(len(entries), 1)
|
|
|
|
self.assertEqual(entries[0].takeoff_airport_id, self.koenigsdorf.id)
|
|
|
|
self.assertEqual(entries[0].landing_airport_id, self.koenigsdorf.id)
|
|
|
|
self.assertEqual(entries[0].reftime, self.takeoff_koenigsdorf_dd0815.timestamp)
|
|
|
|
|
|
|
|
update_logbook(session)
|
|
|
|
entries2 = self.get_logbook_entries()
|
|
|
|
self.assertEqual(entries, entries2)
|
2016-07-02 18:20:04 +00:00
|
|
|
|
2017-05-26 20:56:38 +00:00
|
|
|
|
2016-07-02 18:20:04 +00:00
|
|
|
if __name__ == '__main__':
|
|
|
|
unittest.main()
|