1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/project_enterprise/tests/test_task_gantt_view.py
2024-12-10 09:04:09 +07:00

82 lines
4.0 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.fields import Datetime
from odoo.tests import new_test_user
from odoo.addons.project.tests.test_project_base import TestProjectCommon
from odoo.addons.project.models.project_task import CLOSED_STATES
class TestTaskGanttView(TestProjectCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.user_gantt_test_1, cls.user_gantt_test_2, cls.user_gantt_test_3 = (
new_test_user(cls.env, login=f'ganttviewuser{i}', groups='project.group_project_user')
for i in range(1, 4)
)
cls.project_gantt_test_1, cls.project_gantt_test_2 = cls.env['project.project'].create([{
'name': 'Project Gantt View Test',
}] * 2)
def test_empty_line_task_last_period(self):
""" In the gantt view of the tasks of a project, there should be an empty
line for a user if they have a task planned in the last or current
period for that project, whether or not is open.
"""
self.env['project.task'].with_context({'mail_create_nolog': True}).create([{
'name': 'Proute',
'user_ids': user,
'project_id': self.project_gantt_test_1.id,
'state': state,
'planned_date_begin': planned_date,
'date_deadline': planned_date,
} for user, state, planned_date in [
(self.user_gantt_test_1, '1_done', Datetime.to_datetime('2023-01-01')),
(self.user_gantt_test_2, '01_in_progress', Datetime.to_datetime('2023-01-01')),
(self.user_gantt_test_3, '1_done', Datetime.to_datetime('2023-02-15')),
]])
domain = [
('project_id', '=', self.project_gantt_test_1.id),
('state', 'not in', list(CLOSED_STATES)),
]
displayed_gantt_users = self.env['project.task'].with_context({
'gantt_start_date': Datetime.to_datetime('2023-02-01'),
'gantt_scale': 'month',
})._group_expand_user_ids(None, domain, None)
self.assertTrue(self.user_gantt_test_1 in displayed_gantt_users, 'There should be an empty line for test user 1')
self.assertTrue(self.user_gantt_test_2 in displayed_gantt_users, 'There should be an empty line for test user 2')
self.assertTrue(self.user_gantt_test_3 in displayed_gantt_users, 'There should be an empty line for test user 3')
def test_empty_line_task_last_period_all_tasks(self):
""" In the gantt view of the 'All Tasks' action, there should be an empty
line for a user if they have a task planned in the last or current
period for any project (private tasks are excluded), whether or not
that task is open.
"""
self.env['project.task'].with_context({'mail_create_nolog': True}).create([{
'name': 'Proute',
'user_ids': user,
'project_id': project_id,
'state': '1_done',
'planned_date_begin': planned_date,
'date_deadline': planned_date,
} for project_id, user, planned_date in [
(self.project_gantt_test_1.id, self.user_gantt_test_1, Datetime.to_datetime('2023-01-01')),
(self.project_gantt_test_2.id, self.user_gantt_test_2, Datetime.to_datetime('2023-01-02')),
(False, self.user_gantt_test_3, Datetime.to_datetime('2023-01-01'))
]])
displayed_gantt_users = self.env['project.task'].with_context({
'gantt_start_date': Datetime.to_datetime('2023-01-02'),
'gantt_scale': 'day',
})._group_expand_user_ids(None, [('state', 'not in', list(CLOSED_STATES))], None)
self.assertTrue(self.user_gantt_test_1 in displayed_gantt_users, 'There should be an empty line for test user 1')
self.assertTrue(self.user_gantt_test_2 in displayed_gantt_users, 'There should be an empty line for test user 2')
self.assertFalse(self.user_gantt_test_3 in displayed_gantt_users, 'There should be no empty line for test user 3')