import unittest

from lib.versoes_docker import listar_versoes_oficiais


class TestListarVersoesOficiais(unittest.TestCase):
    def test_ordena_da_mais_recente_para_a_mais_antiga(self):
        self.assertEqual(
            listar_versoes_oficiais(["1.4.0", "1.80", "1.7.0"]),
            ["1.80", "1.7.0", "1.4.0"]
        )

    def test_descarta_tags_de_branch(self):
        tags = [
            "490764-pix-prazo-email-html-qrcode",
            "490764-pix-prazo-email-html-qrcode-linux",
            "5.4.9-linux",
            "5.4.7-linux",
        ]

        self.assertEqual(listar_versoes_oficiais(tags), ["5.4.9-linux", "5.4.7-linux"])

    def test_descarta_pre_lancamentos(self):
        tags = ["1.6.0", "1.7.0-rc1", "0.9-beta", "2.0.0-alpha.2"]

        self.assertEqual(listar_versoes_oficiais(tags), ["1.6.0"])

    def test_filtra_por_plataforma(self):
        tags = ["5.4.9-linux", "5.5.0-windows", "5.4.7-linux"]

        self.assertEqual(
            listar_versoes_oficiais(tags, plataforma="linux"),
            ["5.4.9-linux", "5.4.7-linux"]
        )

    def test_respeita_o_limite(self):
        tags = ["1.0.0", "1.1.0", "1.2.0", "1.3.0", "1.4.0"]

        self.assertEqual(listar_versoes_oficiais(tags, limite=2), ["1.4.0", "1.3.0"])

    def test_lista_vazia_quando_nao_ha_versao_oficial(self):
        self.assertEqual(listar_versoes_oficiais(["master", "FNX-1"]), [])
        self.assertEqual(listar_versoes_oficiais([]), [])
        self.assertEqual(listar_versoes_oficiais(None), [])

    def test_cenario_real_do_repositorio_da_enterprise(self):
        # tags reais que apareceram no log de erro do usuario
        tags = [
            "490764-pix-prazo-email-html-qrcode",
            "490764-pix-prazo-email-html-qrcode-linux",
            "5.4.9-linux", "5.4.7-linux", "5.4.5-linux", "5.4.4-linux",
            "5.4.3-linux", "5.4.1-linux", "5.3.8-linux", "5.3.5-linux",
        ]

        sugestoes = listar_versoes_oficiais(tags, plataforma="linux", limite=8)

        self.assertEqual(sugestoes[0], "5.4.9-linux")
        self.assertTrue(all("pix-prazo" not in tag for tag in sugestoes), sugestoes)
        self.assertEqual(len(sugestoes), 8)


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