oca-ocb-test/odoo-bringout-oca-ocb-test_resource/test_resource/tests/test_resource.py
Ernad Husremovic d9452d2060 19.0 vanilla
2026-03-09 09:32:39 +01:00

123 lines
6.3 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from datetime import datetime
from pytz import utc
from odoo.tools.date_utils import sum_intervals
from odoo.tools.intervals import Intervals
from odoo.addons.test_resource.tests.common import TestResourceCommon
class TestResource(TestResourceCommon):
def test_calendars_validity_within_period(self):
calendars = self.jean.resource_id._get_calendars_validity_within_period(
utc.localize(datetime(2021, 7, 1, 8, 0, 0)),
utc.localize(datetime(2021, 7, 30, 17, 0, 0)),
)
interval = Intervals([(
utc.localize(datetime(2021, 7, 1, 8, 0, 0)),
utc.localize(datetime(2021, 7, 30, 17, 0, 0)),
self.env['resource.calendar.attendance'],
)])
self.assertEqual(1, len(calendars), "The dict returned by calendars validity should only have 1 entry")
self.assertEqual(1, len(calendars[self.jean.resource_id.id]), "Jean should only have one calendar")
jean_entry = calendars[self.jean.resource_id.id]
jean_calendar = next(iter(jean_entry))
self.assertEqual(self.jean.resource_calendar_id, jean_calendar, "It should be Jean's Calendar")
self.assertFalse(jean_entry[jean_calendar] - interval, "Interval should cover all calendar's validity")
self.assertFalse(interval - jean_entry[jean_calendar], "Calendar validity should cover all interval")
calendars = self.env['resource.resource']._get_calendars_validity_within_period(
utc.localize(datetime(2021, 7, 1, 8, 0, 0)),
utc.localize(datetime(2021, 7, 30, 17, 0, 0)),
)
self.assertEqual(1, len(calendars), "The dict returned by calendars validity should only have 1 entry")
self.assertEqual(1, len(calendars[False]), "False (default) should only have one calendar")
false_entry = calendars[False]
false_calendar = next(iter(false_entry))
self.assertEqual(self.env.company.resource_calendar_id, false_calendar, "It should be company calendar Calendar")
self.assertFalse(false_entry[false_calendar] - interval, "Interval should cover all calendar's validity")
self.assertFalse(interval - false_entry[false_calendar], "Calendar validity should cover all interval")
def test_performance(self):
calendars = [self.calendar_jean, self.calendar_john, self.calendar_jules, self.calendar_patel]
calendars_len = len(calendars)
self.resources_test = self.env['resource.test'].create([{
'name': 'resource ' + str(i),
'resource_calendar_id': calendars[i % calendars_len].id,
} for i in range(0, 50)])
start = utc.localize(datetime(2021, 7, 7, 12, 0, 0))
end = utc.localize(datetime(2021, 7, 16, 23, 59, 59))
with self.assertQueryCount(13):
work_intervals, _ = self.resources_test.resource_id._get_valid_work_intervals(start, end)
self.assertEqual(len(work_intervals), 50)
def test_get_valid_work_intervals(self):
start = utc.localize(datetime(2021, 7, 7, 12, 0, 0))
end = utc.localize(datetime(2021, 7, 16, 23, 59, 59))
work_intervals, _ = self.jean.resource_id._get_valid_work_intervals(start, end)
sum_work_intervals = sum_intervals(work_intervals[self.jean.resource_id.id])
self.assertEqual(58, sum_work_intervals, "Sum of the work intervals for the resource jean should be 40h+18h = 58h")
def test_get_valid_work_intervals_calendars_only(self):
calendars = [self.calendar_jean, self.calendar_john, self.calendar_jules, self.calendar_patel]
start = utc.localize(datetime(2021, 7, 7, 12, 0, 0))
end = utc.localize(datetime(2021, 7, 16, 23, 59, 59))
_, calendars_intervals = self.env['resource.resource']._get_valid_work_intervals(start, end, calendars)
sum_work_intervals_jean = sum_intervals(calendars_intervals[self.calendar_jean.id])
self.assertEqual(58, sum_work_intervals_jean, "Sum of the work intervals for the calendar of jean should be 40h+18h = 58h")
sum_work_intervals_john = sum_intervals(calendars_intervals[self.calendar_john.id])
self.assertEqual(26 - 1 / 3600, sum_work_intervals_john, "Sum of the work intervals for the calendar of john should be 20h+6h-1s = 25h59m59s")
sum_work_intervals_jules = sum_intervals(calendars_intervals[self.calendar_jules.id])
self.assertEqual(31, sum_work_intervals_jules, "Sum of the work intervals for the calendar of jules should be Wodd:15h+Wpair:16h = 31h")
sum_work_intervals_patel = sum_intervals(calendars_intervals[self.calendar_patel.id])
self.assertEqual(49, sum_work_intervals_patel, "Sum of the work intervals for the calendar of patel should be 14+35h = 49h")
def test_switch_two_weeks_resource(self):
"""
Check that it is possible to switch the company's default calendar
"""
self.env.company.resource_calendar_id = self.two_weeks_resource
company_resource = self.env.company.resource_calendar_id
# Switch two times to be sure to test both cases
company_resource.switch_calendar_type()
company_resource.switch_calendar_type()
def test_create_company_using_two_weeks_resource(self):
"""
Check that we can create a new company
if the default company calendar is two weeks
"""
self.env.company.resource_calendar_id = self.two_weeks_resource
self.env['res.company'].create({'name': 'New Company'})
def test_empty_working_hours_for_two_weeks_resource(self):
resource = self._define_calendar_2_weeks(
'Two weeks resource',
[],
'Europe/Brussels',
)
self.env['resource.calendar.attendance'].create({
'name': 'test',
'calendar_id': resource.id,
'hour_from': 0,
'hour_to': 0,
})
resource_hour = resource._get_hours_per_day()
self.assertEqual(resource_hour, 0.0)
def test_resource_without_calendar(self):
resource = self.env['resource.resource'].create({
'name': 'resource',
'calendar_id': False,
})
resource.company_id.resource_calendar_id = False
unavailabilities = resource._get_unavailable_intervals(datetime(2024, 7, 11), datetime(2024, 7, 12))
self.assertFalse(unavailabilities)