# -*- coding: utf-8 -*- from odoo.tests.common import TransactionCase, tagged @tagged('-at_install', 'post_install', 'fusion_claims') class TestFusionClaimsDashboard(TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() cls.Dashboard = cls.env['fusion.claims.dashboard'] cls.User = cls.env['res.users'] cls.Partner = cls.env['res.partner'] # Manager user (sees everything) cls.manager = cls.User.create({ 'name': 'Test Dashboard Manager', 'login': 'test_dash_mgr', 'group_ids': [ (4, cls.env.ref('fusion_claims.group_fusion_claims_manager').id), (4, cls.env.ref('sales_team.group_sale_salesman').id), ], }) # Sales rep (sees only own cases) cls.salesrep = cls.User.create({ 'name': 'Test Dashboard Salesrep', 'login': 'test_dash_rep', 'group_ids': [ (4, cls.env.ref('fusion_claims.group_fusion_claims_user').id), (4, cls.env.ref('sales_team.group_sale_salesman').id), ], }) cls.partner = cls.Partner.create({'name': 'Test Client'}) def test_dashboard_record_creates(self): dashboard = self.Dashboard.create({}) self.assertTrue(dashboard.id, "Dashboard record should be creatable") self.assertEqual(dashboard.name, 'Dashboard') def test_role_filter_empty_for_manager(self): dashboard = self.Dashboard.with_user(self.manager).create({}) self.assertEqual(dashboard._role_filter_domain(), [], "Manager should see all cases (empty domain)") def test_role_filter_restricts_for_salesrep(self): dashboard = self.Dashboard.with_user(self.salesrep).create({}) domain = dashboard._role_filter_domain() self.assertEqual(domain, [('user_id', '=', self.salesrep.id)], "Sales rep should see only their own SOs") def test_is_manager_true_for_manager(self): dashboard = self.Dashboard.with_user(self.manager).create({}) self.assertTrue(dashboard.is_manager) def test_is_manager_false_for_salesrep(self): dashboard = self.Dashboard.with_user(self.salesrep).create({}) self.assertFalse(dashboard.is_manager) # ------------------------------------------------------------------------- # Task 2 — Banner # ------------------------------------------------------------------------- def test_banner_posting_period_label_format(self): dashboard = self.Dashboard.with_user(self.manager).create({}) label = dashboard.posting_period_label self.assertTrue(any(month in label for month in ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']), "Label should contain a month abbreviation") def test_banner_posting_period_start_and_end_are_dates(self): dashboard = self.Dashboard.with_user(self.manager).create({}) self.assertTrue(dashboard.posting_period_start) self.assertTrue(dashboard.posting_period_end) delta = (dashboard.posting_period_end - dashboard.posting_period_start).days self.assertEqual(delta, 14) def test_banner_submission_deadline_is_wednesday_6pm(self): dashboard = self.Dashboard.with_user(self.manager).create({}) deadline = dashboard.submission_deadline_dt self.assertTrue(deadline, "Deadline should be set") # Stored in UTC; convert to user's TZ to assert the wall-clock weekday/hour import pytz tz = pytz.timezone(self.manager.tz or 'America/Toronto') local = pytz.UTC.localize(deadline).astimezone(tz) self.assertEqual(local.weekday(), 2, "Deadline should be Wednesday") self.assertEqual(local.hour, 18, "Deadline should be 18:00 (6 PM)") def test_is_pre_first_posting_false_when_today_is_past_base_date(self): # Test runs after 2026-01-23 by default. dashboard = self.Dashboard.with_user(self.manager).create({}) self.assertFalse(dashboard.is_pre_first_posting)