예제 #1
0
    def cli(self):
        '''
        Método que inicia a visão CLI.

        Cria uma instância da classe Cli enviando a lista de BDs encontrados no diretório.
        O usuário escolhe um BD e uma temporada para iniciar o programa.
        
        Em seguida inicia-se um laço que recebe instruções do usuário e executa ações no
        BD modelado pelo script banco.py
        '''
        def escolha_tabela():
            '''
            Função invocada para que se defina uma temporada.

            Caso haja mais de uma, a visão mostra ao usuário opções de escolha;
            Caso haja apenas uma, esta temporada é escolhida;
            Caso não haja nenhuma, é criada uma temporada com numeração do ano atual.
            '''

            tabelas = bd.verifica_tabelas()
            tabelas = [x[0] for x in tabelas]

            if len(tabelas) > 1:
                temporada = self.visao.escolhe_temporada(tabelas).replace(
                    "temporada_", "")

            elif len(tabelas) == 1:
                temporada = tabelas[0].replace("temporada_", "")

            else:
                temporada = datetime.now().year

            return temporada

        self.visao = Cli(self.bancos)
        nome_bd, temporada = self.visao.escolhe_banco()

        bd = BD(self.diretorio + nome_bd)

        if temporada == 0:
            temporada = escolha_tabela()

        bd.define_tabela(temporada)

        while True:
            escolha_menu, parametro = self.visao.menu(nome_bd, bd.tabela)
            if "Sair" in escolha_menu:
                bd.encerra()
                quit()

            elif "Consultar outras estatísticas" in escolha_menu:
                estats_1, estats_2, colunas_1, colunas_2 = bd.printa_tabela_2()
                self.visao.consultar_tabela(estats_1, colunas_1)
                self.visao.consultar_tabela(estats_2, colunas_2)

            elif "Alterar BD" in escolha_menu:
                self.busca_bds()
                self.bancos.remove(nome_bd)
                if len(self.bancos) < 1:
                    escolha = self.visao.opcoes_BD("abortar", escolha_menu)

                else:
                    escolha = self.visao.opcoes_BD(self.bancos, escolha_menu)

                if "Sair" not in escolha:
                    bd.encerra()
                    bd = BD(self.diretorio + escolha)
                    nome_bd = escolha

                    temporada = escolha_tabela()
                    bd.define_tabela(temporada)

            elif "Deletar BD" in escolha_menu:
                self.busca_bds()
                self.bancos.remove(nome_bd)

                if len(self.bancos) < 1:
                    escolha = self.visao.opcoes_BD("abortar", escolha_menu)

                else:
                    escolha = self.visao.opcoes_BD(self.bancos, escolha_menu)

                    if "Sair" not in escolha:
                        if os.path.isfile(self.diretorio + escolha):
                            os.remove(self.diretorio + escolha)

            elif "Deletar temporada" in escolha_menu:
                escolha = self.visao.deletar_temporada(bd.verifica_tabelas(),
                                                       parametro)
                if "Sair" not in escolha:
                    bd.deleta_tabela(escolha)

            elif "Alterar/Criar temporada" in escolha_menu:
                escolha, temporada = self.visao.alterar_temporada(
                    bd.verifica_tabelas(), bd.tabela)

                if "Criar nova temporada" in escolha:
                    bd.tabela = f"temporada_{temporada}"
                    bd.cria_tabela()

                elif "temporada_" in escolha:
                    bd.tabela = escolha

            elif "Consultar estatísticas" in escolha_menu:
                dados = bd.printa_tabela()
                self.visao.consultar_tabela(dados[0], dados[1])

            elif "Adicionar um jogo" in escolha_menu:
                itens_serie = bd.retorna_tabela("inteira")

                if len(itens_serie) > 0:
                    ultima_linha = bd.retorna_tabela("última linha")[0][2:]
                    placar_min, placar_max, quebra_min, quebra_max = ultima_linha

                    tipo = "normal"

                    if parametro < placar_min:
                        tipo = "novo mínimo"
                        quebra_min += 1
                        print(
                            "Um novo placar mínimo foi registrado na temporada!"
                        )

                    elif parametro > placar_max:
                        tipo = "novo máximo"
                        quebra_max += 1
                        print(
                            "Um novo placar máximo foi registrado na temporada!"
                        )

                    bd.adiciona_placar([
                        parametro, placar_min, placar_max, quebra_min,
                        quebra_max
                    ], tipo)

                else:
                    bd.adiciona_placar(parametro, "primeiro jogo")
예제 #2
0
    def test_10_top_5_print(self):
        '''
        11 - Teste dos melhores e dos piores top 5.

        Ao popular uma temporada com sete jogos, espera-se que os melhores
        e os piores top 5 sejam iguais às variáveis "valor_top_5" e "valor_piores_top_5".
        Em seguida, verifica se as somas de ambos valores são iguais às variáveis
        "valor_soma_top_5" e "valor_soma_piores_top_5".

        Testa os métodos "top_5" e "top_5_piores" com os dois blocos condicionais de cada um.
        Também é testado o método "printa_tabela_2", cujos dois primeiros valores retornados
        devem ser iguais às variáveis "valor_estats_1" e "valor_estats_2", respectivamente.
        '''

        bd = BD(CAMINHO)
        bd.define_tabela("404")

        bd.adiciona_placar(5, "primeiro jogo")
        tmp = [
            [12, "novo máximo"],
            [7, "normal"],
            [16, "novo máximo"],
            [4, "novo mínimo"],
            [16, "normal"],
            [8, "normal"],
        ]

        for x in tmp:
            min_temp, max_temp, quebra_min, quebra_max = bd.retorna_tabela(
                "última linha")[0][2:]
            placar = x[0]
            if placar < min_temp:
                quebra_min += 1

            elif placar > max_temp:
                quebra_max += 1

            bd.adiciona_placar(
                [placar, min_temp, max_temp, quebra_min, quebra_max], x[1])

        valor_top_5 = [16, 16, 12, 8, 7]
        valor_piores_top_5 = [4, 5, 7, 8, 12]

        self.assertEqual(bd.top_5("lista"), valor_top_5)
        self.assertEqual(bd.top_5_piores("lista"), valor_piores_top_5)

        valor_soma_top_5 = sum(valor_top_5)
        valor_soma_piores_top_5 = sum(valor_piores_top_5)

        self.assertEqual(bd.top_5("soma"), valor_soma_top_5)
        self.assertEqual(bd.top_5_piores("soma"), valor_soma_piores_top_5)

        valor_estats_1 = [[
            bd.soma_placares(),
            bd.media_placares(),
            valor_soma_top_5,
            valor_soma_piores_top_5,
        ]]

        valor_estats_2 = [[valor_top_5[x], valor_piores_top_5[x]]
                          for x in range(len(valor_top_5))]

        resultado = bd.printa_tabela_2()

        self.assertEqual(resultado[0], valor_estats_1)
        self.assertEqual(resultado[1], valor_estats_2)

        bd.encerra()
        self.deleta_BD()