Public release from ruodoo-project: 19.0 - 2026-05-10 21:19:01 UTC
This commit is contained in:
4
mklab_project_task_indicators/tests/__init__.py
Normal file
4
mklab_project_task_indicators/tests/__init__.py
Normal file
@ -0,0 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import test_project_task
|
||||
from . import test_hg_mixin
|
||||
67
mklab_project_task_indicators/tests/test_hg_mixin.py
Normal file
67
mklab_project_task_indicators/tests/test_hg_mixin.py
Normal file
@ -0,0 +1,67 @@
|
||||
# -*- 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)
|
||||
68
mklab_project_task_indicators/tests/test_project_task.py
Normal file
68
mklab_project_task_indicators/tests/test_project_task.py
Normal file
@ -0,0 +1,68 @@
|
||||
# -*- 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)
|
||||
Reference in New Issue
Block a user