Пример #1
0
    def test_form_sucesso_desafiante_mais_que_qtd_abaixo_coringa(self):
        """Testa adição de desafio feito por um desafiante mais de LIMITE_POSICOES_DESAFIO posições abaixo com coringa"""
        hora_atual = timezone.localtime()

        form = DesafioLadderForm({
            'desafiante': self.jogador_pos_5.id,
            'desafiado': self.teets.id,
            'score_desafiante': 3,
            'score_desafiado': 2,
            'desafio_coringa': True,
            'data_hora': hora_atual,
            'adicionado_por': self.teets.id
        })
        self.assertTrue(form.is_valid())
        # Usar commit=False como nas views
        desafio_ladder = form.save(commit=False)
        desafio_ladder.save()

        # Buscar desafio
        desafio_ladder = DesafioLadder.objects.get(
            desafiante=self.jogador_pos_5)
        self.assertEqual(desafio_ladder.desafiante, self.jogador_pos_5)
        self.assertEqual(desafio_ladder.desafiado, self.teets)
        self.assertEqual(desafio_ladder.score_desafiante, 3)
        self.assertEqual(desafio_ladder.score_desafiado, 2)
        self.assertEqual(desafio_ladder.desafio_coringa, True)
        self.assertEqual(desafio_ladder.data_hora, hora_atual)
        self.assertEqual(desafio_ladder.adicionado_por, self.teets)
        self.assertEqual(desafio_ladder.admin_validador, None)
Пример #2
0
    def test_form_adicionar_desafio_historico_com_sucesso(self):
        """Testa adicionar desafio com sucesso em ladder no histórico"""
        self.assertFalse(
            DesafioLadder.objects.filter(
                desafiante=self.jogador_pos_4).exists())

        hora_mes_passado = timezone.localtime().replace(month=self.mes,
                                                        year=self.ano)

        form = DesafioLadderForm({
            'desafiante': self.jogador_pos_4.id,
            'desafiado': self.teets.id,
            'score_desafiante': 3,
            'score_desafiado': 2,
            'desafio_coringa': False,
            'data_hora': hora_mes_passado,
            'adicionado_por': self.jogador_pos_4.id
        })
        self.assertTrue(form.is_valid())
        # Usar commit=False como nas views
        desafio_ladder = form.save(commit=False)
        desafio_ladder.save()

        # Buscar desafio
        desafio_ladder = DesafioLadder.objects.get(
            desafiante=self.jogador_pos_4)
        self.assertEqual(desafio_ladder.desafiante, self.jogador_pos_4)
        self.assertEqual(desafio_ladder.desafiado, self.teets)
        self.assertEqual(desafio_ladder.score_desafiante, 3)
        self.assertEqual(desafio_ladder.score_desafiado, 2)
        self.assertEqual(desafio_ladder.desafio_coringa, False)
        self.assertEqual(desafio_ladder.data_hora, hora_mes_passado)
        self.assertEqual(desafio_ladder.adicionado_por, self.jogador_pos_4)
        self.assertEqual(desafio_ladder.admin_validador, None)
Пример #3
0
    def test_form_adicionar_desafio_coringa_novo_entrante_com_sucesso(self):
        """Testa adicionar desafio usando coringa para desafiante novo entrante, com sucesso"""
        self.assertFalse(
            DesafioLadder.objects.filter(desafiante=self.new).exists())

        hora_atual = timezone.localtime()

        form = DesafioLadderForm({
            'desafiante': self.new.id,
            'desafiado': self.teets.id,
            'score_desafiante': 3,
            'score_desafiado': 2,
            'desafio_coringa': True,
            'data_hora': hora_atual,
            'adicionado_por': self.new.id
        })
        self.assertTrue(form.is_valid())
        # Usar commit=False como nas views
        desafio_ladder = form.save(commit=False)
        desafio_ladder.save()

        # Buscar desafio
        desafio_ladder = DesafioLadder.objects.get(desafiante=self.new)
        self.assertEqual(desafio_ladder.desafiante, self.new)
        self.assertEqual(desafio_ladder.desafiado, self.teets)
        self.assertEqual(desafio_ladder.score_desafiante, 3)
        self.assertEqual(desafio_ladder.score_desafiado, 2)
        self.assertEqual(desafio_ladder.desafio_coringa, True)
        self.assertEqual(desafio_ladder.data_hora, hora_atual)
        self.assertEqual(desafio_ladder.adicionado_por, self.new)
        self.assertEqual(desafio_ladder.admin_validador, None)
Пример #4
0
    def test_form_erro_periodo_espera_insuficiente(self):
        """Testa adição de desafio sem respeitar período de espera entre mesmos jogadores"""
        # Gerar desafio passado
        DesafioLadder.objects.create(
            desafiante=self.jogador_pos_4,
            desafiado=self.teets,
            score_desafiante=1,
            score_desafiado=3,
            desafio_coringa=False,
            data_hora=(timezone.localtime() - datetime.timedelta(
                days=DesafioLadder.PERIODO_ESPERA_MESMOS_JOGADORES - 1)),
            adicionado_por=self.teets)

        form = DesafioLadderForm({
            'desafiante': self.jogador_pos_4.id,
            'desafiado': self.teets.id,
            'score_desafiante': 3,
            'score_desafiado': 1,
            'desafio_coringa': False,
            'data_hora': timezone.localtime(),
            'adicionado_por': self.jogador_pos_4.id
        })
        self.assertFalse(form.is_valid())

        self.assertIn(
            DesafioLadder.MENSAGEM_ERRO_PERIODO_ESPERA_MESMOS_JOGADORES,
            form.errors['__all__'])
        self.assertTrue(len(form.errors) == 1)
Пример #5
0
    def test_form_erro_remocao_participante_mesma_data(self):
        """Testa erro ao cadastrar desafio em data que um dos participantes esteja sendo removido"""
        hora_atual = timezone.localtime()
        # Gerar remoção
        remover_jogador(
            RemocaoJogador.objects.create(
                jogador=self.jogador_pos_4,
                data=hora_atual,
                admin_removedor=self.teets,
                posicao_jogador=self.jogador_pos_4.posicao_em(hora_atual)))

        # Tentar gerar desafio
        form = DesafioLadderForm({
            'desafiante': self.jogador_pos_4.id,
            'desafiado': self.teets.id,
            'score_desafiante': 3,
            'score_desafiado': 2,
            'desafio_coringa': False,
            'data_hora': hora_atual,
            'adicionado_por': self.teets.id
        })
        self.assertFalse(form.is_valid())

        self.assertIn(
            f'{self.jogador_pos_4} é removido da ladder na data especificada',
            form.errors['__all__'])
Пример #6
0
    def test_form_sucesso_adicionado_terceiro_admin(self):
        """Testa adição de desafio feita por um admin não participante"""
        hora_atual = timezone.localtime()

        form = DesafioLadderForm(
            {
                'desafiante': self.jogador_pos_5.id,
                'desafiado': self.jogador_pos_4.id,
                'score_desafiante': 3,
                'score_desafiado': 2,
                'desafio_coringa': False,
                'data_hora': hora_atual,
                'adicionado_por': self.teets.id
            },
            admin=self.teets.admin)
        self.assertTrue(form.is_valid())
        # Usar commit=False como nas views
        desafio_ladder = form.save(commit=False)
        desafio_ladder.save()

        # Buscar desafio
        desafio_ladder = DesafioLadder.objects.get(
            desafiante=self.jogador_pos_5)
        self.assertEqual(desafio_ladder.desafiante, self.jogador_pos_5)
        self.assertEqual(desafio_ladder.desafiado, self.jogador_pos_4)
        self.assertEqual(desafio_ladder.score_desafiante, 3)
        self.assertEqual(desafio_ladder.score_desafiado, 2)
        self.assertEqual(desafio_ladder.desafio_coringa, False)
        self.assertEqual(desafio_ladder.data_hora, hora_atual)
        self.assertEqual(desafio_ladder.adicionado_por, self.teets)
        self.assertEqual(desafio_ladder.admin_validador, None)
Пример #7
0
    def test_form_sucesso_desafiante_mais_que_qtd_abaixo_aumento_range_invalido(
            self):
        """Testa adição de desafio feito por um desafiante mais de LIMITE_POSICOES_DESAFIO posições abaixo, com aumento de range já inválido"""
        hora_atual = timezone.localtime()

        # Adicionando aumento de range
        PermissaoAumentoRange.objects.create(
            jogador=self.jogador_pos_7,
            admin_permissor=self.teets,
            data_hora=(hora_atual - datetime.timedelta(
                hours=(PermissaoAumentoRange.PERIODO_VALIDADE + 1))))

        form = DesafioLadderForm({
            'desafiante': self.jogador_pos_7.id,
            'desafiado': self.teets.id,
            'score_desafiante': 3,
            'score_desafiado': 2,
            'desafio_coringa': False,
            'data_hora': hora_atual,
            'adicionado_por': self.teets.id
        })
        self.assertFalse(form.is_valid())
        self.assertIn(
            f'Desafiante está mais de {DesafioLadder.LIMITE_POSICOES_DESAFIO} posições abaixo do desafiado',
            form.errors['__all__'])
        self.assertTrue(len(form.errors) == 1)
Пример #8
0
    def test_form_sucesso_desafiante_mais_que_qtd_abaixo_fora_aumento_range(
            self):
        """Testa adição de desafio feito por um desafiante mais de LIMITE_POSICOES_DESAFIO + AUMENTO_RANGE posições abaixo"""
        hora_atual = timezone.localtime()

        # Adicionando aumento de range
        PermissaoAumentoRange.objects.create(
            jogador=self.jogador_pos_8,
            admin_permissor=self.teets,
            data_hora=(hora_atual - datetime.timedelta(hours=1)))

        form = DesafioLadderForm({
            'desafiante': self.jogador_pos_8.id,
            'desafiado': self.teets.id,
            'score_desafiante': 3,
            'score_desafiado': 2,
            'desafio_coringa': False,
            'data_hora': hora_atual,
            'adicionado_por': self.teets.id
        })
        self.assertFalse(form.is_valid())
        self.assertIn(
            PermissaoAumentoRange.
            MENSAGEM_ERRO_DESAFIANTE_MUITO_ABAIXO_DESAFIADO,
            form.errors['__all__'])
        self.assertTrue(len(form.errors) == 1)
Пример #9
0
    def test_form_erro_data_hora_futura(self):
        """Testa adição de desafio feita em horário futuro"""
        hora_futura = timezone.localtime() + datetime.timedelta(hours=1)
        form = DesafioLadderForm({
            'desafiante': self.jogador_pos_4.id,
            'desafiado': self.teets.id,
            'score_desafiante': 3,
            'score_desafiado': 2,
            'desafio_coringa': False,
            'data_hora': hora_futura,
            'adicionado_por': self.jogador_pos_4.id
        })

        self.assertFalse(form.is_valid())
        self.assertIn('data_hora', form.errors)
        self.assertTrue(len(form.errors) == 1)
Пример #10
0
    def test_form_erro_desafiante_igual_desafiado(self):
        """Testa adição de desafio no qual desafiante e desafiado são o mesmo jogador"""
        form = DesafioLadderForm({
            'desafiante': self.jogador_pos_4.id,
            'desafiado': self.jogador_pos_4.id,
            'score_desafiante': 3,
            'score_desafiado': 2,
            'desafio_coringa': False,
            'data_hora': timezone.localtime(),
            'adicionado_por': self.jogador_pos_4.id
        })
        self.assertFalse(form.is_valid())

        self.assertIn(DesafioLadder.MENSAGEM_ERRO_MESMO_JOGADOR,
                      form.errors['__all__'])
        self.assertTrue(len(form.errors) == 1)
Пример #11
0
    def test_form_erro_score_menor_que_3(self):
        """Testa adição de desafio com resultado em que ambos não alcançaram 3 pontos"""
        form = DesafioLadderForm({
            'desafiante': self.jogador_pos_4.id,
            'desafiado': self.teets.id,
            'score_desafiante': 2,
            'score_desafiado': 1,
            'desafio_coringa': False,
            'data_hora': timezone.localtime(),
            'adicionado_por': self.jogador_pos_4.id
        })

        self.assertFalse(form.is_valid())
        self.assertIn('Resultado impossível para melhor de 5',
                      form.errors['__all__'])
        self.assertTrue(len(form.errors) == 1)
Пример #12
0
    def test_form_erro_desafiante_mais_que_qtd_abaixo(self):
        """Testa adição de desafio feito por um desafiante mais de LIMITE_POSICOES_DESAFIO posições abaixo do desafiado"""
        form = DesafioLadderForm({
            'desafiante': self.jogador_pos_5.id,
            'desafiado': self.teets.id,
            'score_desafiante': 3,
            'score_desafiado': 2,
            'desafio_coringa': False,
            'data_hora': timezone.localtime(),
            'adicionado_por': self.jogador_pos_4.id
        })
        self.assertFalse(form.is_valid())

        self.assertIn(
            f'Desafiante está mais de {DesafioLadder.LIMITE_POSICOES_DESAFIO} posições abaixo do desafiado',
            form.errors['__all__'])
        self.assertTrue(len(form.errors) == 1)
Пример #13
0
    def test_form_erro_adicionado_terceiro_nao_admin(self):
        """Testa adição de desafio feita por um terceiro não admin"""
        form = DesafioLadderForm({
            'desafiante': self.jogador_pos_4.id,
            'desafiado': self.teets.id,
            'score_desafiante': 3,
            'score_desafiado': 2,
            'desafio_coringa': False,
            'data_hora': timezone.localtime(),
            'adicionado_por': self.jogador_pos_5.id
        })

        self.assertFalse(form.is_valid())
        self.assertIn(
            'Jogador não pode criar desafios para ladder para terceiros',
            form.errors['__all__'])
        self.assertTrue(len(form.errors) == 1)
Пример #14
0
    def test_form_erro_desafiante_usou_coringa_periodo_maior_limite(self):
        """Testa adição de desafio coringa para desafiante que o usou há um período superior ao mínimo"""
        hora_atual = timezone.localtime()
        # Adicionar uso de coringa para desafiante há 1 dia a menos que o período de espera
        self.jogador_pos_5.ultimo_uso_coringa = hora_atual - datetime.timedelta(
            days=DesafioLadder.PERIODO_ESPERA_DESAFIO_CORINGA + 1)
        self.jogador_pos_5.save()

        form = DesafioLadderForm({
            'desafiante': self.jogador_pos_5.id,
            'desafiado': self.teets.id,
            'score_desafiante': 3,
            'score_desafiado': 2,
            'desafio_coringa': True,
            'data_hora': hora_atual,
            'adicionado_por': self.teets.id
        })
        self.assertTrue(form.is_valid())
Пример #15
0
    def test_form_erro_add_para_ladder_historico_inexistente(self):
        """Testa adição de desafio em um mês no passado em que não existia ladder"""
        data_ano_anterior = timezone.localtime().replace(
            year=timezone.localtime().year - 1)
        form = DesafioLadderForm({
            'desafiante': self.jogador_pos_4.id,
            'desafiado': self.teets.id,
            'score_desafiante': 3,
            'score_desafiado': 2,
            'desafio_coringa': False,
            'data_hora': data_ano_anterior,
            'adicionado_por': self.jogador_pos_4.id
        })
        self.assertFalse(form.is_valid())

        self.assertIn(HistoricoLadder.MENSAGEM_LADDER_MES_ANO_INEXISTENTE,
                      form.errors['__all__'])
        self.assertTrue(len(form.errors) == 1)
Пример #16
0
    def test_form_erro_desafiante_usou_coringa_periodo_menor_limite(self):
        """Testa adição de desafio coringa para desafiante que o usou há um período inferior ao mínimo"""
        hora_atual = timezone.localtime()
        # Adicionar uso de coringa para desafiante há 1 dia a menos que o período de espera
        self.jogador_pos_5.ultimo_uso_coringa = hora_atual - datetime.timedelta(
            days=DesafioLadder.PERIODO_ESPERA_DESAFIO_CORINGA - 1)
        self.jogador_pos_5.save()

        form = DesafioLadderForm(
            {
                'desafiante': self.jogador_pos_5.id,
                'desafiado': self.teets.id,
                'score_desafiante': 3,
                'score_desafiado': 2,
                'desafio_coringa': True,
                'data_hora': hora_atual,
                'adicionado_por': self.teets.id
            },
            admin=self.teets.admin)
        self.assertFalse(form.is_valid())

        self.assertIn(DesafioLadder.MENSAGEM_ERRO_PERIODO_ESPERA_CORINGA,
                      form.errors['__all__'])
        self.assertTrue(len(form.errors) == 1)
Пример #17
0
    def test_form_sucesso_desafiante_mais_que_qtd_abaixo_dentro_aumento_range(
            self):
        """Testa adição de desafio feito por um desafiante mais de LIMITE_POSICOES_DESAFIO, mas menor que LIMITE_POSICOES_DESAFIO + AUMENTO_RANGE posições abaixo"""
        hora_atual = timezone.localtime()

        # Adicionando aumento de range
        PermissaoAumentoRange.objects.create(
            jogador=self.jogador_pos_7,
            admin_permissor=self.teets,
            data_hora=(hora_atual - datetime.timedelta(hours=1)))

        form = DesafioLadderForm({
            'desafiante': self.jogador_pos_7.id,
            'desafiado': self.teets.id,
            'score_desafiante': 3,
            'score_desafiado': 2,
            'desafio_coringa': False,
            'data_hora': hora_atual,
            'adicionado_por': self.teets.id
        })
        self.assertTrue(form.is_valid())
        # Usar commit=False como nas views
        desafio_ladder = form.save(commit=False)
        desafio_ladder.save()

        # Buscar desafio
        desafio_ladder = DesafioLadder.objects.get(
            desafiante=self.jogador_pos_7)
        self.assertEqual(desafio_ladder.desafiante, self.jogador_pos_7)
        self.assertEqual(desafio_ladder.desafiado, self.teets)
        self.assertEqual(desafio_ladder.score_desafiante, 3)
        self.assertEqual(desafio_ladder.score_desafiado, 2)
        self.assertEqual(desafio_ladder.desafio_coringa, False)
        self.assertEqual(desafio_ladder.data_hora, hora_atual)
        self.assertEqual(desafio_ladder.adicionado_por, self.teets)
        self.assertEqual(desafio_ladder.admin_validador, None)