1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/appointment/tests/test_utils.py
2024-12-10 09:04:09 +07:00

65 lines
3.3 KiB
Python

from datetime import datetime
from odoo.tests.common import BaseCase
from odoo.addons.appointment.utils import intervals_overlap, invert_intervals
class TestAppointmentIntervalUtils(BaseCase):
def test_intervals_intersections(self):
test_data = [
((datetime(2023, 2, 14), datetime(2023, 2, 15)), (datetime(2023, 2, 15), datetime(2023, 2, 16)), False),
((datetime(2023, 2, 14), datetime(2023, 2, 15)), (datetime(2023, 2, 13), datetime(2023, 2, 16)), True),
((datetime(2023, 2, 13), datetime(2023, 2, 16)), (datetime(2023, 2, 14), datetime(2023, 2, 15)), True),
((datetime(2023, 2, 13), datetime(2023, 2, 16)), (datetime(2023, 2, 15), datetime(2023, 2, 17)), True),
]
for interval_a, interval_b, overlaps in test_data:
with self.subTest(interval_a=interval_a, interval_b=interval_b):
self.assertEqual(intervals_overlap(interval_a, interval_b), overlaps)
def test_intervals_inversion(self):
test_intervals = [
(datetime(2023, 2, 5), datetime(2023, 2, 6)), # no adjacent
(datetime(2023, 2, 7), datetime(2023, 2, 7)), # 0-length
(datetime(2023, 2, 9), datetime(2023, 2, 10)), # multi-adjacent
(datetime(2023, 2, 10), datetime(2023, 2, 11)),
(datetime(2023, 2, 11), datetime(2023, 2, 12)),
(datetime(2023, 2, 13), datetime(2023, 2, 15)), # overlapping
(datetime(2023, 2, 14), datetime(2023, 2, 18)),
(datetime(2023, 2, 15), datetime(2023, 2, 16)), # contained inside the previous
(datetime(2023, 2, 25), datetime(2023, 3, 10)), # unordered non-adjacent
(datetime(2023, 2, 20), datetime(2023, 2, 22)),
]
test_limits = [
(datetime(2023, 1, 1), datetime(2023, 4, 1)), # all-encompassing
(datetime(2023, 2, 5), datetime(2023, 3, 10)), # exact fit original intervals
(datetime(2023, 2, 9), datetime(2023, 2, 12)), # exact fit of one interval
(datetime(2023, 2, 6), datetime(2023, 2, 9)), # exact fit of one inverted interval
(datetime(2023, 2, 8), datetime(2023, 2, 11)), # overlapping some
]
test_results = [
[
(datetime(2023, 1, 1), datetime(2023, 2, 5)),
(datetime(2023, 2, 6), datetime(2023, 2, 9)),
(datetime(2023, 2, 12), datetime(2023, 2, 13)),
(datetime(2023, 2, 18), datetime(2023, 2, 20)),
(datetime(2023, 2, 22), datetime(2023, 2, 25)),
(datetime(2023, 3, 10), datetime(2023, 4, 1)),
],
[
(datetime(2023, 2, 6), datetime(2023, 2, 9)),
(datetime(2023, 2, 12), datetime(2023, 2, 13)),
(datetime(2023, 2, 18), datetime(2023, 2, 20)),
(datetime(2023, 2, 22), datetime(2023, 2, 25)),
],
[],
[
(datetime(2023, 2, 6), datetime(2023, 2, 9)),
],
[
(datetime(2023, 2, 8), datetime(2023, 2, 9)),
],
]
for limits, expected_result in zip(test_limits, test_results):
start, end = limits
with self.subTest(start=start, end=end):
self.assertListEqual(invert_intervals(test_intervals, start, end), expected_result)