# -*- 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)
