# -*- coding: utf-8 -*- from odoo.tests.common import TransactionCase class TestHgMixin(TransactionCase): """ Тестируем mixin через project.task (наследует hg.hg_mixin). Требует установленного модуля mklab_project_task_indicators. """ @classmethod def setUpClass(cls): super().setUpClass() cls.project = cls.env['project.project'].create({'name': 'Тестовый проект'}) def test_node_created_on_task_create(self): task = self.env['project.task'].create({ 'name': 'Задача с узлом', 'project_id': self.project.id, }) 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_node_name_matches_task(self): task = self.env['project.task'].create({ 'name': 'Задача для проверки имени', 'project_id': self.project.id, }) self.assertEqual(task.node_id.name, 'Задача для проверки имени') def test_index_ids_computed(self): task = self.env['project.task'].create({ 'name': 'Задача с показателями', 'project_id': self.project.id, }) index = self.env['hg.index'].create({ 'name': 'Показатель задачи', 'node_id': task.node_id.id, }) task._compute_indexes() self.assertIn(index, task.index_ids) def test_related_ids_computed(self): task_a = self.env['project.task'].create({ 'name': 'Задача А', 'project_id': self.project.id, }) task_b = self.env['project.task'].create({ 'name': 'Задача Б', 'project_id': self.project.id, }) 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) def test_related_ids_empty_without_links(self): task = self.env['project.task'].create({ 'name': 'Изолированная задача', 'project_id': self.project.id, }) task._compute_related() self.assertFalse(task.related_ids)