fix(fusion_tasks): make datetime inverses use the same tz resolver as compute

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsinghpal
2026-06-04 00:47:48 -04:00
parent d5d410f6d0
commit 0e6bb7b676
3 changed files with 43 additions and 2 deletions

View File

@@ -0,0 +1,2 @@
# -*- coding: utf-8 -*-
from . import test_task_tz

View File

@@ -0,0 +1,39 @@
# -*- coding: utf-8 -*-
from datetime import date
from odoo.tests.common import TransactionCase, tagged
@tagged('post_install', '-at_install')
class TestTaskTz(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
# _compute_datetimes resolves company resource-calendar tz FIRST, then user tz.
# Set BOTH to Toronto so the UTC assertion and the round-trip are deterministic.
cls.env.user.tz = 'America/Toronto'
cal = cls.env.company.resource_calendar_id
if cal:
cal.tz = 'America/Toronto'
# technician_id is required (domain x_fc_is_field_staff=True) -> make a field tech.
cls.tech = cls.env['res.users'].create({
'name': 'TZ Test Tech',
'login': 'tz_test_tech_svcbook',
'x_fc_is_field_staff': True,
})
cls.task = cls.env['fusion.technician.task'].create({
'technician_id': cls.tech.id,
'scheduled_date': date(2026, 6, 3),
'time_start': 9.0,
'time_end': 10.0,
})
def test_local_to_utc_compute(self):
# 9:00 local Toronto (EDT, -4) -> 13:00 UTC stored
self.assertEqual(self.task.datetime_start.hour, 13)
def test_inverse_round_trips_with_same_tz(self):
# writing datetime_start back recovers the same local time_start
self.task.datetime_start = self.task.datetime_start # force inverse
self.task.flush_recordset(['datetime_start'])
self.assertAlmostEqual(self.task.time_start, 9.0, places=2)