94 lines
4.1 KiB
Python
94 lines
4.1 KiB
Python
# -*- 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)
|