from odoo.addons.hr_work_entry_contract.models.hr_work_intervals import WorkIntervals from odoo.tests.common import TransactionCase class TestIntervals(TransactionCase): def ints(self, pairs): recs = self.env['base'] return [(a, b, recs) for a, b in pairs] def test_union(self): def check(a, b): a, b = self.ints(a), self.ints(b) self.assertEqual(list(WorkIntervals(a)), b) check([(1, 2), (3, 4)], [(1, 2), (3, 4)]) check([(1, 2), (2, 4)], [(1, 2), (2, 4)]) check([(1, 3), (2, 4)], [(1, 4)]) check([(1, 4), (2, 3)], [(1, 4)]) check([(1, 4), (1, 4)], [(1, 4)]) check([(3, 4), (1, 2)], [(1, 2), (3, 4)]) check([(2, 4), (1, 2)], [(1, 2), (2, 4)]) check([(2, 4), (1, 3)], [(1, 4)]) check([(2, 3), (1, 4)], [(1, 4)]) def test_intersection(self): def check(a, b, c): a, b, c = self.ints(a), self.ints(b), self.ints(c) self.assertEqual(list(WorkIntervals(a) & WorkIntervals(b)), c) check([(10, 20)], [(5, 8)], []) check([(10, 20)], [(5, 10)], []) check([(10, 20)], [(5, 15)], [(10, 15)]) check([(10, 20)], [(5, 20)], [(10, 20)]) check([(10, 20)], [(5, 25)], [(10, 20)]) check([(10, 20)], [(10, 15)], [(10, 15)]) check([(10, 20)], [(10, 20)], [(10, 20)]) check([(10, 20)], [(10, 25)], [(10, 20)]) check([(10, 20)], [(15, 18)], [(15, 18)]) check([(10, 20)], [(15, 20)], [(15, 20)]) check([(10, 20)], [(15, 25)], [(15, 20)]) check([(10, 20)], [(20, 25)], []) check( [(0, 5), (10, 15), (20, 25), (30, 35)], [(6, 7), (9, 12), (13, 17), (22, 23), (24, 40)], [(10, 12), (13, 15), (22, 23), (24, 25), (30, 35)], ) def test_difference(self): def check(a, b, c): a, b, c = self.ints(a), self.ints(b), self.ints(c) self.assertEqual(list(WorkIntervals(a) - WorkIntervals(b)), c) check([(10, 20)], [(5, 8)], [(10, 20)]) check([(10, 20)], [(5, 10)], [(10, 20)]) check([(10, 20)], [(5, 15)], [(15, 20)]) check([(10, 20)], [(5, 20)], []) check([(10, 20)], [(5, 25)], []) check([(10, 20)], [(10, 15)], [(15, 20)]) check([(10, 20)], [(10, 20)], []) check([(10, 20)], [(10, 25)], []) check([(10, 20)], [(15, 18)], [(10, 15), (18, 20)]) check([(10, 20)], [(15, 20)], [(10, 15)]) check([(10, 20)], [(15, 25)], [(10, 15)]) check([(10, 20)], [(20, 25)], [(10, 20)]) check( [(0, 5), (10, 15), (20, 25), (30, 35)], [(6, 7), (9, 12), (13, 17), (22, 23), (24, 40)], [(0, 5), (12, 13), (20, 22), (23, 24)], )