# -*- coding: utf-8 -*-
from unittest.mock import patch
from odoo.tests.common import TransactionCase


class TestReportWizard(TransactionCase):

    def setUp(self):
        super().setUp()
        self.node = self.env['hg.node'].create({
            'name': 'Узел отчёта',
            'res_model': 'hg.node',
            'res_id': 1,
        })
        self.index = self.env['hg.index'].create({
            'name': 'Показатель отчёта',
            'node_id': self.node.id,
        })

    def test_wizard_create(self):
        wizard = self.env['node_report_wizard'].create({'index_id': self.index.id})
        self.assertEqual(wizard.index_id, self.index)

    def test_action_generate_report_returns_url_action(self):
        wizard = self.env['node_report_wizard'].create({'index_id': self.index.id})
        action = wizard.action_generate_report()
        self.assertEqual(action['type'], 'ir.actions.act_url')
        self.assertIn(str(self.index.id), action['url'])
        self.assertEqual(action['target'], 'new')

    def test_action_url_contains_base_url(self):
        base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
        wizard = self.env['node_report_wizard'].create({'index_id': self.index.id})
        action = wizard.action_generate_report()
        self.assertIn(base_url, action['url'])


class TestHgIndexGraphImage(TransactionCase):

    def setUp(self):
        super().setUp()
        self.node_src = self.env['hg.node'].create({
            'name': 'Источник графа',
            'res_model': 'hg.node',
            'res_id': 1,
        })
        self.node_tgt = self.env['hg.node'].create({
            'name': 'Приёмник графа',
            'res_model': 'hg.node',
            'res_id': 2,
        })
        self.code = self.env['hg.index.code'].create({'name': 'Код графа'})
        self.index = self.env['hg.index'].create({
            'name': 'Показатель графа',
            'node_id': self.node_src.id,
            'internal_code_id': self.code.id,
        })
        self.env['hg.link'].create({
            'name': 'Связь графа',
            'source_id': self.node_src.id,
            'target_ids': [(4, self.node_tgt.id)],
        })

    def test_generate_graph_image_returns_base64(self):
        # networkx и matplotlib могут отсутствовать в тестовой среде — мокируем
        fake_b64 = 'aW1hZ2VkYXRh'
        with patch.object(
            type(self.index), 'generate_graph_image', return_value=fake_b64
        ):
            result = self.index.generate_graph_image()
        self.assertEqual(result, fake_b64)
