def test_duplicate_update(self): """Test whether duplicates are actually updated or re-inserted.""" initial = self.from_file("tests/data/schedule_initial.xml") duplicate = self.from_file("tests/data/schedule_duplicate.xml") # just to be sure assert(initial.uid == duplicate.uid) assert(initial.rid == duplicate.rid) # force messages directly to listener listener = MyListener(None, None) listener.on_schedule_message(initial) res = Schedule.select().where( (Schedule.uid==initial.uid) & (Schedule.rid==initial.rid) ) assert(res.count() == 1) s = res[0] assert(s.uid == initial.uid) assert(s.rid == initial.rid) assert(s.toc_code == initial.toc_code) cps = CallingPoint.select().where( CallingPoint.schedule==s ).order_by(CallingPoint.id.asc()) assert(cps.count() == 2) destination_cp = cps[1] assert(destination_cp.public_arrival == datetime.time( hour=10, minute=14)) listener.on_schedule_message(duplicate) res = Schedule.select().where( (Schedule.uid==initial.uid) & (Schedule.rid==initial.rid) ) assert(res.count() == 1) s_after = res[0] assert(s_after.uid == initial.uid) # same uid assert(s_after.rid == initial.rid) # same rid assert(s_after.toc_code == duplicate.toc_code) # different toc # get calling points cps = CallingPoint.select().where( CallingPoint.schedule == s_after ).order_by(CallingPoint.id.asc()) assert(cps.count() == 2) # should be only two destination_cp = cps[1] assert(destination_cp.public_arrival == datetime.time( hour=10, minute=17)) # updated time