diff options
| author | RomainLibert <rli@odoo.com> | 2018-01-18 13:47:01 +0100 |
|---|---|---|
| committer | RomainLibert <rli@odoo.com> | 2018-02-14 14:43:38 +0100 |
| commit | 9717026dcc6d29baed0fc683ff4e55d8303fa664 (patch) | |
| tree | 37196523c37c0630dd8ff48d014c90a386cd53f4 | |
| parent | 3a38080ff5cdcca6318889c1471878593c7e02a0 (diff) | |
[IMP] Resource: Expand testing on timezones
We need to check if resource module takes into account the timezone of
the employee taking a leave and the timezone of the user asking to see
when this employee has taken some leave.
Basically everything should be done in UTC internally and then converted
back to the user's timezone.
| -rw-r--r-- | addons/resource/tests/test_resource.py | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/addons/resource/tests/test_resource.py b/addons/resource/tests/test_resource.py index ffc124313c0..39861cf9805 100644 --- a/addons/resource/tests/test_resource.py +++ b/addons/resource/tests/test_resource.py @@ -265,6 +265,119 @@ class ResourceWorkingHours(TestResourceCommon): compute_leaves=True) self.assertEqual(res, 9.5) + def test_calendar_leave_intervals_timezone(self): + # _iter_leave_intervals takes UTC and outputs UTC + # Leave is taken by user in US/Alaska timezone + # It should be visible at the right time for every timezone + self.env.user.tz = 'US/Alaska' + (self.leave1 | self.leave2 | self.leave3).unlink() + leave = self.env['resource.calendar.leaves'].create({ + 'name': 'Timezoned Leaves', + 'calendar_id': self.calendar.id, + 'resource_id': self.resource1_id, + 'date_from': to_naive_utc(Datetime.from_string('2013-02-21 10:00:00'), self.env.user), + 'date_to': to_naive_utc(Datetime.from_string('2013-02-26 12:00:00'), self.env.user) + }) + + def to_tuple(interval): + return (interval.start_datetime, interval.end_datetime) + + # Checking for 'Europe/Brussels' + self.env.user.tz = 'Europe/Brussels' + leaves = list(self.calendar._iter_leave_intervals( + to_naive_utc(Datetime.from_string('2013-02-26 14:00:00'), self.env.user), + to_naive_utc(Datetime.from_string('2013-02-26 15:30:00'), self.env.user), + self.resource1_id)) + self.assertEqual(len(leaves), 0) + + leaves = list(self.calendar._iter_leave_intervals( + to_naive_utc(Datetime.from_string('2013-02-26 08:00:00'), self.env.user), + to_naive_utc(Datetime.from_string('2013-02-26 11:00:00'), self.env.user), + self.resource1_id))[0] + self.assertEqual(len(leaves), 1) + self.assertEqual(to_tuple(leaves[0]), (Datetime.from_string('2013-02-26 07:00:00'), Datetime.from_string('2013-02-26 10:00:00'))) + + leaves = list(self.calendar._iter_leave_intervals( + to_naive_utc(Datetime.from_string('2013-02-22 08:00:00'), self.env.user), + to_naive_utc(Datetime.from_string('2013-02-22 20:00:00'), self.env.user), + self.resource1_id))[0] + self.assertEqual(len(leaves), 2) + self.assertEqual(to_tuple(leaves[0]), (Datetime.from_string('2013-02-22 07:00:00'), Datetime.from_string('2013-02-22 12:00:00'))) + + # Checking for 'Japan' + self.env.user.tz = 'Japan' + leaves = list(self.calendar._iter_leave_intervals( + to_naive_utc(Datetime.from_string('2013-02-26 14:00:00'), self.env.user), + to_naive_utc(Datetime.from_string('2013-02-26 15:30:00'), self.env.user), + self.resource1_id)) + self.assertEqual(len(leaves), 0) + + leaves = list(self.calendar._iter_leave_intervals( + to_naive_utc(Datetime.from_string('2013-02-26 08:00:00'), self.env.user), + to_naive_utc(Datetime.from_string('2013-02-26 11:00:00'), self.env.user), + self.resource1_id))[0] + self.assertEqual(len(leaves), 1) + self.assertEqual(to_tuple(leaves[0]), (Datetime.from_string('2013-02-25 23:00:00'), Datetime.from_string('2013-02-26 02:00:00'))) + + leaves = list(self.calendar._iter_leave_intervals( + to_naive_utc(Datetime.from_string('2013-02-22 08:00:00'), self.env.user), + to_naive_utc(Datetime.from_string('2013-02-22 20:00:00'), self.env.user), + self.resource1_id))[0] + self.assertEqual(len(leaves), 2) + self.assertEqual(to_tuple(leaves[0]), (Datetime.from_string('2013-02-21 23:00:00'), Datetime.from_string('2013-02-22 04:00:00'))) + + def test_calendar_work_days_intervals_timezone(self): + # _get_day_work_intervals converts from the timezone + # of the user into UTC + self.env.user.tz = 'US/Alaska' + (self.leave1 | self.leave2 | self.leave3).unlink() + leave = self.env['resource.calendar.leaves'].create({ + 'name': 'Timezoned Leaves', + 'calendar_id': self.calendar.id, + 'resource_id': self.resource1_id, + 'date_from': to_naive_utc(Datetime.from_string('2013-02-21 10:00:00'), self.env.user), + 'date_to': to_naive_utc(Datetime.from_string('2013-02-26 12:00:00'), self.env.user) + }) + + def to_tuple(interval): + return (interval.start_datetime, interval.end_datetime) + + intervals = self.calendar._get_day_work_intervals(Date.from_string('2013-02-26'), time(10), time(18), False, self.resource1_id) + self.assertEqual(to_tuple(intervals[0]), (Datetime.from_string('2013-02-26 19:00:00'), Datetime.from_string('2013-02-27 01:00:00'))) + intervals = self.calendar._get_day_work_intervals(Date.from_string('2013-02-26'), time(10), time(18), True, self.resource1_id) + self.assertEqual(to_tuple(intervals[0]), (Datetime.from_string('2013-02-26 21:00:00'), Datetime.from_string('2013-02-27 01:00:00'))) + + self.env.user.tz = 'Japan' + + intervals = self.calendar._get_day_work_intervals(Date.from_string('2013-02-26'), time(10), time(18), False, self.resource1_id) + self.assertEqual(to_tuple(intervals[0]), (Datetime.from_string('2013-02-26 01:00:00'), Datetime.from_string('2013-02-26 07:00:00'))) + intervals = self.calendar._get_day_work_intervals(Date.from_string('2013-02-26'), time(10), time(18), True, self.resource1_id) + self.assertEqual(to_tuple(intervals[0]), (Datetime.from_string('2013-02-26 03:00:00'), Datetime.from_string('2013-02-26 07:00:00'))) + + def test_calendar_leave_days_intervals_timezone(self): + # _get_day_leave_intervals converts from the timezone + # of the user into UTC + self.env.user.tz = 'US/Alaska' + (self.leave1 | self.leave2 | self.leave3).unlink() + leave = self.env['resource.calendar.leaves'].create({ + 'name': 'Timezoned Leaves', + 'calendar_id': self.calendar.id, + 'resource_id': self.resource1_id, + 'date_from': to_naive_utc(Datetime.from_string('2013-02-21 10:00:00'), self.env.user), + 'date_to': to_naive_utc(Datetime.from_string('2013-02-26 12:00:00'), self.env.user) + }) + + def to_tuple(interval): + return (interval.start_datetime, interval.end_datetime) + + intervals = self.calendar._get_day_leave_intervals(Date.from_string('2013-02-26'), time(10), time(18), self.resource1_id) + self.assertEqual(to_tuple(intervals[0]), (Datetime.from_string('2013-02-26 19:00:00'), Datetime.from_string('2013-02-26 21:00:00'))) + + self.env.user.tz = 'Japan' + + intervals = self.calendar._get_day_leave_intervals(Date.from_string('2013-02-26'), time(10), time(18), self.resource1_id) + self.assertEqual(to_tuple(intervals[0]), (Datetime.from_string('2013-02-26 01:00:00'), Datetime.from_string('2013-02-26 03:00:00'))) + def test_calendar_hours_scheduling_backward(self): res = self.calendar._schedule_hours(-40, day_dt=Datetime.from_string('2013-02-12 09:00:00')) # current day, limited at 09:00 because of day_dt specified -> 1 hour |
