示例#1
0
    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