# -*- coding: utf-8 -*- from odoo.tests.common import TransactionCase class TestProjectTaskIndicators(TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() cls.project = cls.env['project.project'].create({'name': 'Тестовый проект'}) def _create_task(self, name='Тестовая задача'): return self.env['project.task'].create({ 'name': name, 'project_id': self.project.id, }) def test_task_inherits_mixin(self): task = self._create_task() self.assertTrue(hasattr(task, 'node_id')) self.assertTrue(hasattr(task, 'index_ids')) self.assertTrue(hasattr(task, 'related_ids')) def test_node_auto_created(self): task = self._create_task('Задача с автоузлом') self.assertTrue(task.node_id) self.assertEqual(task.node_id.res_model, 'project.task') self.assertEqual(task.node_id.res_id, task.id) def test_multiple_tasks_have_separate_nodes(self): task_a = self._create_task('Задача 1') task_b = self._create_task('Задача 2') self.assertNotEqual(task_a.node_id, task_b.node_id) def test_index_assigned_via_node(self): task = self._create_task('Задача с показателем') index = self.env['hg.index'].create({ 'name': 'Показатель задачи', 'node_id': task.node_id.id, }) task._compute_indexes() self.assertIn(index, task.index_ids) def test_no_indexes_without_node_assignment(self): task = self._create_task('Задача без показателей') task._compute_indexes() other_node = self.env['hg.node'].create({ 'name': 'Чужой узел', 'res_model': 'hg.node', 'res_id': 0, }) index = self.env['hg.index'].create({ 'name': 'Чужой показатель', 'node_id': other_node.id, }) task._compute_indexes() self.assertNotIn(index, task.index_ids) def test_related_tasks_via_link(self): task_a = self._create_task('Задача-источник') task_b = self._create_task('Задача-приёмник') self.env['hg.link'].create({ 'name': 'Связь задач', 'source_id': task_a.node_id.id, 'target_ids': [(4, task_b.node_id.id)], }) task_a._compute_related() self.assertIn(task_b.node_id, task_a.related_ids)