Public release from ruodoo-project: 19.0 - 2026-05-31 21:19:12 UTC
This commit is contained in:
4
mklab_base_indicators_extended/tests/__init__.py
Normal file
4
mklab_base_indicators_extended/tests/__init__.py
Normal file
@ -0,0 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import test_hg_templates
|
||||
from . import test_estimate_wizard
|
||||
76
mklab_base_indicators_extended/tests/test_estimate_wizard.py
Normal file
76
mklab_base_indicators_extended/tests/test_estimate_wizard.py
Normal file
@ -0,0 +1,76 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo.tests.common import TransactionCase
|
||||
|
||||
|
||||
class TestEstimateWizard(TransactionCase):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.project = cls.env['project.project'].create({'name': 'Проект для сметы'})
|
||||
cls.code = cls.env['hg.index.code'].create({'name': 'Код сметы'})
|
||||
cls.index = cls.env['hg.index'].create({
|
||||
'name': 'Показатель сметы',
|
||||
'internal_code_id': cls.code.id,
|
||||
})
|
||||
cls.template = cls.env['hg.templates'].create({'name': 'Шаблон сметы'})
|
||||
cls.env['hg.templates.line'].create({
|
||||
'template_id': cls.template.id,
|
||||
'index_id': cls.index.id,
|
||||
'date_due': '2025-06-30',
|
||||
'value_float_plan': 300000.0,
|
||||
})
|
||||
|
||||
def _create_task(self, name='Задача сметы'):
|
||||
return self.env['project.task'].create({
|
||||
'name': name,
|
||||
'project_id': self.project.id,
|
||||
})
|
||||
|
||||
def test_confirm_action_creates_index_and_value(self):
|
||||
task = self._create_task()
|
||||
wizard = self.env['estimate.wizard'].with_context(active_id=task.id).create({
|
||||
'template_id': self.template.id,
|
||||
'code_id': self.code.id,
|
||||
})
|
||||
wizard.confirm_action()
|
||||
|
||||
# Должен создаться показатель, привязанный к узлу задачи
|
||||
indexes = self.env['hg.index'].search([('node_id', '=', task.node_id.id)])
|
||||
self.assertTrue(indexes, 'Показатель должен быть создан для узла задачи')
|
||||
|
||||
# Должно создаться значение для каждого показателя
|
||||
for index in indexes:
|
||||
values = self.env['hg.value'].search([('index_id', '=', index.id)])
|
||||
self.assertTrue(values, 'Значение должно быть создано для показателя')
|
||||
|
||||
def test_confirm_action_value_plan_matches_template(self):
|
||||
task = self._create_task('Задача проверки плана')
|
||||
wizard = self.env['estimate.wizard'].with_context(active_id=task.id).create({
|
||||
'template_id': self.template.id,
|
||||
'code_id': self.code.id,
|
||||
})
|
||||
wizard.confirm_action()
|
||||
|
||||
indexes = self.env['hg.index'].search([('node_id', '=', task.node_id.id)])
|
||||
value = self.env['hg.value'].search([('index_id', 'in', indexes.ids)], limit=1)
|
||||
self.assertEqual(value.value_float_plan, 300000.0)
|
||||
self.assertEqual(str(value.date_due), '2025-06-30')
|
||||
|
||||
def test_confirm_action_returns_close(self):
|
||||
task = self._create_task('Задача закрытия')
|
||||
wizard = self.env['estimate.wizard'].with_context(active_id=task.id).create({
|
||||
'template_id': self.template.id,
|
||||
'code_id': self.code.id,
|
||||
})
|
||||
result = wizard.confirm_action()
|
||||
self.assertEqual(result['type'], 'ir.actions.act_window_close')
|
||||
|
||||
def test_confirm_action_without_active_id(self):
|
||||
wizard = self.env['estimate.wizard'].create({
|
||||
'template_id': self.template.id,
|
||||
'code_id': self.code.id,
|
||||
})
|
||||
# Без active_id в контексте — должен вернуть None без ошибок
|
||||
result = wizard.confirm_action()
|
||||
self.assertIsNone(result)
|
||||
56
mklab_base_indicators_extended/tests/test_hg_templates.py
Normal file
56
mklab_base_indicators_extended/tests/test_hg_templates.py
Normal file
@ -0,0 +1,56 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo.tests.common import TransactionCase
|
||||
|
||||
|
||||
class TestHgTemplates(TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.code = self.env['hg.index.code'].create({'name': 'Код шаблона'})
|
||||
self.index = self.env['hg.index'].create({
|
||||
'name': 'Показатель шаблона',
|
||||
'internal_code_id': self.code.id,
|
||||
})
|
||||
self.template = self.env['hg.templates'].create({'name': 'Тестовый шаблон'})
|
||||
|
||||
def test_template_create(self):
|
||||
self.assertEqual(self.template.name, 'Тестовый шаблон')
|
||||
self.assertFalse(self.template.line_ids)
|
||||
|
||||
def test_add_line_to_template(self):
|
||||
line = self.env['hg.templates.line'].create({
|
||||
'template_id': self.template.id,
|
||||
'index_id': self.index.id,
|
||||
'date_due': '2025-03-31',
|
||||
'value_float_plan': 250000.0,
|
||||
})
|
||||
self.assertIn(line, self.template.line_ids)
|
||||
self.assertEqual(line.value_float_plan, 250000.0)
|
||||
self.assertEqual(line.index_id, self.index)
|
||||
|
||||
def test_multiple_lines(self):
|
||||
index2 = self.env['hg.index'].create({'name': 'Второй показатель'})
|
||||
self.env['hg.templates.line'].create({
|
||||
'template_id': self.template.id,
|
||||
'index_id': self.index.id,
|
||||
'date_due': '2025-01-31',
|
||||
'value_float_plan': 100000.0,
|
||||
})
|
||||
self.env['hg.templates.line'].create({
|
||||
'template_id': self.template.id,
|
||||
'index_id': index2.id,
|
||||
'date_due': '2025-02-28',
|
||||
'value_float_plan': 200000.0,
|
||||
})
|
||||
self.assertEqual(len(self.template.line_ids), 2)
|
||||
|
||||
def test_line_cascade_delete(self):
|
||||
line = self.env['hg.templates.line'].create({
|
||||
'template_id': self.template.id,
|
||||
'index_id': self.index.id,
|
||||
'date_due': '2025-01-31',
|
||||
'value_float_plan': 50000.0,
|
||||
})
|
||||
line_id = line.id
|
||||
self.template.unlink()
|
||||
self.assertFalse(self.env['hg.templates.line'].browse(line_id).exists())
|
||||
Reference in New Issue
Block a user