import unittest

from lib.rede_externa import (
    deve_forcar_uso_rede_externa,
    obter_host_microkafka_para_enterprise,
    obter_host_porta_enterprise_para_api_gateway,
    obter_host_porta_enterprise_para_proxy_https,
    obter_host_porta_mu_whatsapp_para_enterprise,
    obter_url_api_gateway_para_pesquisa_produto,
)


class TestRedeExterna(unittest.TestCase):
    def test_flag_padrao_nao_forca_rede_externa(self):
        self.assertFalse(deve_forcar_uso_rede_externa({}))

    def test_api_gateway_usa_rede_interna_por_padrao(self):
        configuracoes = {
            "enterprise": {
                "configurar": True,
                "portaInterna": 5000,
            },
            "api-gateway": {
                "backends": [
                    {"nome": "ApiEnterprise", "host": "host-externo", "porta": "9988"},
                ],
            },
        }

        self.assertEqual(
            obter_host_porta_enterprise_para_api_gateway(configuracoes),
            ("enterprise", "5000")
        )

    def test_api_gateway_forca_rede_externa_quando_flag_esta_ativa(self):
        configuracoes = {
            "acessos": {
                "servidorLinux": {
                    "forcarUsoRedeExterna": True,
                }
            },
            "enterprise": {
                "configurar": True,
                "portaInterna": 5000,
            },
            "api-gateway": {
                "backends": [
                    {"nome": "ApiEnterprise", "host": "host-externo", "porta": "9988"},
                ],
            },
        }

        self.assertEqual(
            obter_host_porta_enterprise_para_api_gateway(configuracoes),
            ("host-externo", "9988")
        )

    def test_proxy_https_forca_host_e_porta_externos(self):
        configuracoes = {
            "acessos": {
                "servidorLinux": {
                    "forcarUsoRedeExterna": True,
                }
            },
            "enterprise": {
                "configurar": True,
                "porta": 9988,
                "portaInterna": 5000,
            },
            "servicos": {
                "rest": {
                    "hostEnterprise": "host-enterprise-externo",
                }
            },
        }

        self.assertEqual(
            obter_host_porta_enterprise_para_proxy_https(configuracoes),
            ("host-enterprise-externo", "9988")
        )

    def test_enterprise_forca_mu_whatsapp_externo(self):
        configuracoes = {
            "acessos": {
                "servidorLinux": {
                    "forcarUsoRedeExterna": True,
                }
            },
            "muWhatsapp": {
                "configurarApi": True,
                "porta": 21465,
                "portaInterna": 21465,
            },
            "servicos": {
                "rest": {
                    "hostEnterprise": "linux-host",
                }
            },
        }

        self.assertEqual(
            obter_host_porta_mu_whatsapp_para_enterprise(configuracoes),
            ("linux-host", "21465")
        )

    def test_enterprise_forca_microkafka_externo(self):
        configuracoes = {
            "acessos": {
                "servidorLinux": {
                    "forcarUsoRedeExterna": True,
                }
            },
            "microkafka": {
                "configurar": True,
            },
            "enterprise": {
                "eventHandler": {
                    "hostMicrokafka": "host-microkafka-externo",
                }
            },
        }

        self.assertEqual(
            obter_host_microkafka_para_enterprise(configuracoes),
            "host-microkafka-externo"
        )

    def test_pesquisa_produto_forca_api_gateway_externo(self):
        configuracoes = {
            "acessos": {
                "servidorLinux": {
                    "forcarUsoRedeExterna": True,
                }
            },
            "api-gateway": {
                "configurar": True,
            },
            "pesquisaProduto": {
                "api-gateway": {
                    "host": "gateway-externo",
                    "porta": 8080,
                }
            },
        }

        self.assertEqual(
            obter_url_api_gateway_para_pesquisa_produto(configuracoes),
            "http://gateway-externo:8080"
        )


if __name__ == "__main__":
    unittest.main()
