# -*- coding: utf-8 -*-
from odoo.tests.common import TransactionCase
from odoo import fields


class TestHgIndex(TransactionCase):

    def setUp(self):
        super().setUp()
        self.code = self.env['hg.index.code'].create({'name': 'Код для теста'})
        self.node = self.env['hg.node'].create({
            'name': 'Вершина для теста',
            'res_model': 'hg.node',
            'res_id': 1,
        })
        self.index = self.env['hg.index'].create({
            'name': 'Тестовый показатель',
            'internal_code_id': self.code.id,
            'external_code': 'TEST-001',
            'public': True,
            'node_id': self.node.id,
        })

    def test_create(self):
        self.assertEqual(self.index.name, 'Тестовый показатель')
        self.assertEqual(self.index.external_code, 'TEST-001')
        self.assertTrue(self.index.public)

    def test_current_value_no_values(self):
        self.assertEqual(self.index.current_value, 0)

    def test_current_value_with_past_value(self):
        self.env['hg.value'].create({
            'index_id': self.index.id,
            'value_float_actual': 12345.0,
            'value_float_plan': 15000.0,
            'date_due': '2020-01-01',
            'type': 'alone',
        })
        self.index._compute_current_value()
        self.assertEqual(self.index.current_value, 12345.0)

    def test_current_value_picks_latest(self):
        self.env['hg.value'].create({
            'index_id': self.index.id,
            'value_float_actual': 1000.0,
            'date_due': '2020-01-01',
            'type': 'alone',
        })
        self.env['hg.value'].create({
            'index_id': self.index.id,
            'value_float_actual': 9999.0,
            'date_due': '2020-06-01',
            'type': 'alone',
        })
        self.index._compute_current_value()
        self.assertEqual(self.index.current_value, 9999.0)

    def test_current_value_ignores_future(self):
        self.env['hg.value'].create({
            'index_id': self.index.id,
            'value_float_actual': 5000.0,
            'date_due': '2099-01-01',
            'type': 'alone',
        })
        self.index._compute_current_value()
        self.assertEqual(self.index.current_value, 0)

    def test_calc_returns_true(self):
        self.assertTrue(self.index.calc())
