kopia lustrzana https://github.com/glidernet/ogn-python
Better logbook testing
rodzic
2cc3b8f71c
commit
145f21604a
|
@ -17,9 +17,6 @@ def update_logbook(session=None):
|
||||||
if session is None:
|
if session is None:
|
||||||
session = app.session
|
session = app.session
|
||||||
|
|
||||||
or_args = [between(TakeoffLanding.timestamp, '2016-06-28 00:00:00', '2016-06-28 23:59:59')]
|
|
||||||
or_args = []
|
|
||||||
|
|
||||||
# 'wo' is the window order for the sql window function
|
# 'wo' is the window order for the sql window function
|
||||||
wo = and_(func.date(TakeoffLanding.timestamp),
|
wo = and_(func.date(TakeoffLanding.timestamp),
|
||||||
TakeoffLanding.device_id,
|
TakeoffLanding.device_id,
|
||||||
|
@ -43,7 +40,6 @@ def update_logbook(session=None):
|
||||||
TakeoffLanding.airport_id,
|
TakeoffLanding.airport_id,
|
||||||
func.lag(TakeoffLanding.airport_id).over(order_by=wo).label('airport_id_prev'),
|
func.lag(TakeoffLanding.airport_id).over(order_by=wo).label('airport_id_prev'),
|
||||||
func.lead(TakeoffLanding.airport_id).over(order_by=wo).label('airport_id_next')) \
|
func.lead(TakeoffLanding.airport_id).over(order_by=wo).label('airport_id_next')) \
|
||||||
.filter(*or_args) \
|
|
||||||
.subquery()
|
.subquery()
|
||||||
|
|
||||||
# find complete flights (with takeoff and landing on the same day)
|
# find complete flights (with takeoff and landing on the same day)
|
||||||
|
@ -156,7 +152,7 @@ def update_logbook(session=None):
|
||||||
session.commit()
|
session.commit()
|
||||||
logger.debug("New logbook entries: {}".format(insert_counter))
|
logger.debug("New logbook entries: {}".format(insert_counter))
|
||||||
|
|
||||||
return "{}/{}".format(update_counter, insert_counter)
|
return "Logbook entries: {} inserted, {} updated".format(update_counter, insert_counter)
|
||||||
|
|
||||||
|
|
||||||
@app.task
|
@app.task
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
import unittest
|
import unittest
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
from sqlalchemy.sql import null, and_
|
||||||
|
|
||||||
|
from ogn.model import Logbook, Airport
|
||||||
from ogn.collect.logbook import update_logbook
|
from ogn.collect.logbook import update_logbook
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,17 +38,43 @@ class TestDB(unittest.TestCase):
|
||||||
session.commit()
|
session.commit()
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def count_logbook_entries(self):
|
||||||
|
session = self.session
|
||||||
|
query = session.query(Logbook)
|
||||||
|
return len(query.all())
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
entries = len(session.query(Logbook).filter(and_(Airport.id == Logbook.takeoff_airport_id, Airport.name == 'Koenigsdorf')).filter(Logbook.landing_airport_id == null()).all())
|
||||||
|
self.assertEqual(entries, koen_to)
|
||||||
|
|
||||||
|
entries = len(session.query(Logbook).filter(and_(Airport.id == Logbook.landing_airport_id, Airport.name == 'Koenigsdorf')).filter(Logbook.takeoff_airport_id == null()).all())
|
||||||
|
self.assertEqual(entries, koen_ldg)
|
||||||
|
|
||||||
|
entries = len(session.query(Logbook).filter(and_(Airport.id == Logbook.takeoff_airport_id, Airport.name == 'Koenigsdorf')).filter(Logbook.takeoff_airport_id == Logbook.landing_airport_id).all())
|
||||||
|
self.assertEqual(entries, koen_complete)
|
||||||
|
|
||||||
|
entries = len(session.query(Logbook).filter(and_(Airport.id == Logbook.takeoff_airport_id, Airport.name == 'Ohlstadt')).filter(Logbook.landing_airport_id == null()).all())
|
||||||
|
self.assertEqual(entries, ohl_to)
|
||||||
|
|
||||||
|
entries = len(session.query(Logbook).filter(and_(Airport.id == Logbook.landing_airport_id, Airport.name == 'Ohlstadt')).filter(Logbook.takeoff_airport_id == null()).all())
|
||||||
|
self.assertEqual(entries, ohl_ldg)
|
||||||
|
|
||||||
|
entries = len(session.query(Logbook).filter(and_(Airport.id == Logbook.takeoff_airport_id, Airport.name == 'Ohlstadt')).filter(Logbook.takeoff_airport_id == Logbook.landing_airport_id).all())
|
||||||
|
self.assertEqual(entries, ohl_complete)
|
||||||
|
|
||||||
def test_single_takeoff(self):
|
def test_single_takeoff(self):
|
||||||
session = self.session
|
session = self.session
|
||||||
|
|
||||||
session.execute(self.TAKEOFF_KOENIGSDF_DD0815)
|
session.execute(self.TAKEOFF_KOENIGSDF_DD0815)
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
entries_changed = update_logbook(session)
|
update_logbook(session)
|
||||||
self.assertEqual(entries_changed, '0/1')
|
self.assert_entries(koen_to=1)
|
||||||
|
|
||||||
entries_changed = update_logbook(session)
|
update_logbook(session)
|
||||||
self.assertEqual(entries_changed, '0/0')
|
self.assert_entries(koen_to=1)
|
||||||
|
|
||||||
def test_single_landing(self):
|
def test_single_landing(self):
|
||||||
session = self.session
|
session = self.session
|
||||||
|
@ -53,11 +82,11 @@ class TestDB(unittest.TestCase):
|
||||||
session.execute(self.LANDING_KOENIGSDF_DD0815)
|
session.execute(self.LANDING_KOENIGSDF_DD0815)
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
entries_changed = update_logbook(session)
|
update_logbook(session)
|
||||||
self.assertEqual(entries_changed, '0/1')
|
self.assert_entries(koen_ldg=1)
|
||||||
|
|
||||||
entries_changed = update_logbook(session)
|
update_logbook(session)
|
||||||
self.assertEqual(entries_changed, '0/0')
|
self.assert_entries(koen_ldg=1)
|
||||||
|
|
||||||
def test_different_takeoffs(self):
|
def test_different_takeoffs(self):
|
||||||
session = self.session
|
session = self.session
|
||||||
|
@ -66,11 +95,11 @@ class TestDB(unittest.TestCase):
|
||||||
session.execute(self.TAKEOFF_OHLSTADT_DD4711)
|
session.execute(self.TAKEOFF_OHLSTADT_DD4711)
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
entries_changed = update_logbook(session)
|
update_logbook(session)
|
||||||
self.assertEqual(entries_changed, '0/2')
|
self.assert_entries(koen_to=1, ohl_to=1)
|
||||||
|
|
||||||
entries_changed = update_logbook(session)
|
update_logbook(session)
|
||||||
self.assertEqual(entries_changed, '0/0')
|
self.assert_entries(koen_to=1, ohl_to=1)
|
||||||
|
|
||||||
def test_takeoff_and_landing(self):
|
def test_takeoff_and_landing(self):
|
||||||
session = self.session
|
session = self.session
|
||||||
|
@ -79,11 +108,11 @@ class TestDB(unittest.TestCase):
|
||||||
session.execute(self.LANDING_KOENIGSDF_DD0815)
|
session.execute(self.LANDING_KOENIGSDF_DD0815)
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
entries_changed = update_logbook(session)
|
update_logbook(session)
|
||||||
self.assertEqual(entries_changed, '0/1')
|
self.assert_entries(koen_complete=1)
|
||||||
|
|
||||||
entries_changed = update_logbook(session)
|
update_logbook(session)
|
||||||
self.assertEqual(entries_changed, '0/0')
|
self.assert_entries(koen_complete=1)
|
||||||
|
|
||||||
def test_takeoff_and_landing_on_different_days(self):
|
def test_takeoff_and_landing_on_different_days(self):
|
||||||
session = self.session
|
session = self.session
|
||||||
|
@ -92,11 +121,11 @@ class TestDB(unittest.TestCase):
|
||||||
session.execute(self.LANDING_KOENIGSDF_DD0815_LATER)
|
session.execute(self.LANDING_KOENIGSDF_DD0815_LATER)
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
entries_changed = update_logbook(session)
|
update_logbook(session)
|
||||||
self.assertEqual(entries_changed, '0/2')
|
self.assert_entries(koen_to=1, koen_ldg=1)
|
||||||
|
|
||||||
entries_changed = update_logbook(session)
|
update_logbook(session)
|
||||||
self.assertEqual(entries_changed, '0/0')
|
self.assert_entries(koen_to=1, koen_ldg=1)
|
||||||
|
|
||||||
def test_update(self):
|
def test_update(self):
|
||||||
session = self.session
|
session = self.session
|
||||||
|
@ -104,23 +133,23 @@ class TestDB(unittest.TestCase):
|
||||||
session.execute(self.TAKEOFF_KOENIGSDF_DD0815)
|
session.execute(self.TAKEOFF_KOENIGSDF_DD0815)
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
entries_changed = update_logbook(session)
|
update_logbook(session)
|
||||||
self.assertEqual(entries_changed, '0/1')
|
self.assert_entries(koen_to=1)
|
||||||
|
|
||||||
session.execute(self.LANDING_KOENIGSDF_DD0815)
|
session.execute(self.LANDING_KOENIGSDF_DD0815)
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
entries_changed = update_logbook(session)
|
update_logbook(session)
|
||||||
self.assertEqual(entries_changed, '1/0')
|
self.assert_entries(koen_complete=1)
|
||||||
|
|
||||||
session.execute(self.TAKEOFF_OHLSTADT_DD4711)
|
session.execute(self.TAKEOFF_OHLSTADT_DD4711)
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
entries_changed = update_logbook(session)
|
update_logbook(session)
|
||||||
self.assertEqual(entries_changed, '0/1')
|
self.assert_entries(koen_complete=1, ohl_to=1)
|
||||||
|
|
||||||
entries_changed = update_logbook(session)
|
update_logbook(session)
|
||||||
self.assertEqual(entries_changed, '0/0')
|
self.assert_entries(koen_complete=1, ohl_to=1)
|
||||||
|
|
||||||
def test_update_wrong_order(self):
|
def test_update_wrong_order(self):
|
||||||
session = self.session
|
session = self.session
|
||||||
|
@ -128,14 +157,14 @@ class TestDB(unittest.TestCase):
|
||||||
session.execute(self.LANDING_KOENIGSDF_DD0815)
|
session.execute(self.LANDING_KOENIGSDF_DD0815)
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
entries_changed = update_logbook(session)
|
update_logbook(session)
|
||||||
self.assertEqual(entries_changed, '0/1')
|
self.assert_entries(koen_ldg=1)
|
||||||
|
|
||||||
session.execute(self.TAKEOFF_KOENIGSDF_DD0815)
|
session.execute(self.TAKEOFF_KOENIGSDF_DD0815)
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
entries_changed = update_logbook(session)
|
update_logbook(session)
|
||||||
self.assertEqual(entries_changed, '1/0')
|
self.assert_entries(koen_complete=1)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
Ładowanie…
Reference in New Issue