71 lines
2.7 KiB
Python
71 lines
2.7 KiB
Python
|
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)],
|
||
|
)
|