def setUp(self):
     # criando usuários
     self.gui = Usuario('Gui', 500.0)
     # propondo lances
     self.lance_do_gui = Lance(self.gui, 150.0)
     # criando leilao
     self.leilao = Leilao('Celular')
 def setUp(
     self
 ):  #método padrão do unittest para criar algum cenário, ele é invocado antes de rodar os testes e ele é sempre executado novamente a cada teste, é feito de forma isolada
     #boa prática é deixar apenas todos os atributos que são usados em TODOS OS TESTES, pois, caso tenha 4 atributos e só use 1, pode deixar esta parte do código menos perfomática
     self.gui = Usuario('Gui', 500.0)
     self.lance_do_gui = Lance(self.gui, 150.0)
     self.leilao = Leilao('Celular')
Exemple #3
0
    def setUp(self):
        self.gui = Usuario('Gui', 500)
        self.yuri = Usuario('Yuri', 500)

        self.lance_yuri = Lance(self.yuri, 200.0)
        self.lance_gui = Lance(self.gui, 100.0)

        self.leilao = Leilao('Celular')
    def setUp(self):
        self.esio = Usuario("Esio",500.0)
        self.gustavo = Usuario("Gustavo", 500.0)

        self.lance_do_esio = Lance(self.esio, 100.0)
        self.lance_do_gustavo = Lance(self.gustavo, 150.0)

        self.leilao = Leilao("Carro")
    def setUp(self):
        self.gabriel = Usuario("Gabriel", 500.0)
        self.gustavo = Usuario("Gustavo", 500.0)

        self.lance_gabriel = Lance(self.gabriel, 200.0)
        self.lance_gustavo = Lance(self.gustavo, 100.0)

        self.leilao = Leilao("leilao de celular")
 def setUp(self):
     self.usuario1 = Usuario('Usuario1')
     self.usuario2 = Usuario('Usuario2')
     self.usuario3 = Usuario('Usuario3')
     self.lance_do_usuario1 = Lance(self.usuario1, 100.0)
     self.lance_do_usuario2 = Lance(self.usuario2, 150.0)
     self.lance_do_usuario3 = Lance(self.usuario3, 200.0)
     self.leilao = Leilao('Celular')
Exemple #7
0
    def setUp(self):  # criação de um cenário único para os teste rodarem
        self.dudu = Usuario('Eduardo', 300.0)
        self.fer = Usuario('Fernando', 300.0)
        self.amor = Usuario('Aline', 300.0)

        self.lance_amor = Lance(self.amor, 100.0)
        self.lance_fer = Lance(self.fer, 150.0)
        self.lance_dudu = Lance(self.dudu, 200.0)
        self.leilao = Leilao('celular')
Exemple #8
0
    def setUp(self):
        self.leo = Usuario("Leo", 500.0)
        self.vini = Usuario("Vini", 1500.0)
        self.joice = Usuario("Joice", 100.0)

        self.lance_vini = Lance(self.vini, 1300.0)
        self.lance_leo = Lance(self.leo, 300.0)
        self.lance_joice = Lance(self.joice, 30.0)

        self.leilao = Leilao("Iphone XS")
    def setUp(self):
        self.primeiro_usuario = Usuario("Gui", 100.00)
        self.segundo_usuario = Usuario("Pedro", 150.00)
        self.terceiro_usuario = Usuario("Vini", 80.00)

        self.lance_do_pedro = Lance(self.segundo_usuario, 100.00)
        self.lance_do_gui = Lance(self.primeiro_usuario, 150.00)
        self.lance_do_vini = Lance(self.terceiro_usuario, 80.00)

        self.leilao = Leilao("Celular")
Exemple #10
0
 def setUp(self):
     self.valor_carteira = 1000.0
     self.menor_valor_esperado = 100.0
     self.maior_valor_esperado = 150.0
     self.usuario_bruno = Usuario('bruno', self.valor_carteira)
     self.lance_do_bruno = Lance(self.usuario_bruno,
                                 self.menor_valor_esperado)
     self.lance_da_bruna = Lance(Usuario('bruna', self.valor_carteira),
                                 self.maior_valor_esperado)
     self.leilao = Leilao('Video Game')
Exemple #11
0
    def criaCenario(self,
                    must_reverse: bool = False,
                    must_createOnlyOne: bool = False,
                    cenarios_adicionais: list = []):

        cenarios = self.list_cenarios(must_createOnlyOne, cenarios_adicionais)
        cenarios.sort(key=lambda tup: tup[1], reverse=must_reverse)
        self.leilao = Leilao('Celular')

        for key, value in cenarios:
            usuario = Usuario(key, 500.0)
            #lance = Lance(usuario, value)
            usuario.propoe_lance(self.leilao, value)
Exemple #12
0
    def test_deve_retornar_o_mesmo_valor_para_o_maior_e_menor_lance_quando_leilao_tiver_um_lance(
            self):
        self.setUp()

        lance = Lance(self.gui, 150.0)

        leilao = Leilao('celular')
        leilao.propoe(lance)

        menor_valor_esperado = 150.0
        maior_valor_esperado = 150.0

        self.assertEqual(menor_valor_esperado, leilao.menor_lance)
        self.assertEqual(maior_valor_esperado, leilao.maior_lance)
Exemple #13
0
def deve_permitir_propor_lance_quando_o_valor_e_menor_que_o_valor_da_careira():
    vini = Usuario('Vini', 100.0)

    leilao = Leilao('Celular')
    vini.propoe_lance(leilao, 1.0)

    assert vini.carteira == 99.0
Exemple #14
0
def deve_subatratir_valor_da_carteira_do_usuario_quando_este_propor_um_lance():
    vini = Usuario('Vini', 100.0)

    leilao = Leilao('Celular')
    vini.propoe_lance(leilao, 50.0)

    assert vini.carteira == 50.0
def test_deve_permitir_propor_lance_quando_o_valor_eh_igual_ao_valor_da_carteira(
        vini, leilao):
    vini = Usuario("vini", 100.0)

    leilao = Leilao("Celular")

    vini.propoe_lance(leilao, 100.0)

    assert vini.carteira == 0.0
Exemple #16
0
def teste_nao_para_permitir_lance_maior_que_o_valor_na_carteira(mando, leilao):

    with pytest.raises(LanceInvalido):

        corruscont = Leilao("Cidades")

        mando.propoeLance(leilao, 200)

        assert mando.carteira == 100
Exemple #17
0
    def test_deve_retornar_o_maior_e_o_menor_valor_de_um_lance_quando_adicionado_em_ordem_crescente(self):
        gui = Usuario('Gui')
        yuri = Usuario('Yuri')
        lance_do_yuri = Lance(yuri, 100.0)
        lance_do_gui = Lance(gui, 150.0)
        leilao = Leilao('Leilao de celular')
        leilao.lances.append(lance_do_yuri)
        leilao.lances.append(lance_do_gui)
        avaliador = Avaliador()
        avaliador.avalia(leilao)

        menor_valor_esperado = 100.0
        maior_valor_esperado = 150.0
        self.assertEqual(menor_valor_esperado, avaliador.menor_lance)
        self.assertEqual(maior_valor_esperado, avaliador.maior_lance)
Exemple #18
0
    def gera_lance_unico_leilao(leilao=None, nome_apostador="Fabio", valor=150):
        nome = Usuario(nome_apostador, 500)
        lance_do_apostador = Lance(nome, valor)

        if leilao is None:
            leilao = Leilao('Celular')
            leilao.realizar_lance(lance_do_apostador)
        else:
            leilao.realizar_lance(lance_do_apostador)

        return leilao
Exemple #19
0
    def gera_lances_leilao():
        math = Usuario("Math", 500)
        ana = Usuario("Ana", 750)
        joao = Usuario("Joao", 480)

        lance_da_ana = Lance(ana, 100)
        lance_do_joao = Lance(joao, 150)
        lance_do_math = Lance(math, 200)

        leilao = Leilao('Churrasqueira')
        leilao.realizar_lance(lance_da_ana)
        leilao.realizar_lance(lance_do_joao)
        leilao.realizar_lance(lance_do_math)
        return leilao
    def test_deve_retornar_o_maior_e_o_menor_valor_quando_o_leilao_tiver_tres_lances(self):
        yuri = Usuario('Yuri')
        lance_do_yuri = Lance(yuri, 100.0)
        vini = Usuario('Vini')

        lance_do_vini = Lance(vini, 200.0)

        leilao = Leilao('Celular')

        leilao.lances.append(lance_do_yuri)
        leilao.lances.append(self.lance_do_gui)
        leilao.lances.append(lance_do_vini)

        avaliador = Avaliador()
        avaliador.avalia(leilao)

        menor_valor_esperado = 100.0
        maior_valor_esperado = 200.0

        self.assertEqual(menor_valor_esperado, avaliador.menor_lance)
        self.assertEqual(maior_valor_esperado, avaliador.maior_lance)
Exemple #21
0
def leilao():
    return Leilao('Celular')
class TestLeilao(TestCase):
    def setUp(self):
        self.gabriel = Usuario("Gabriel", 500.0)
        self.gustavo = Usuario("Gustavo", 500.0)

        self.lance_gabriel = Lance(self.gabriel, 200.0)
        self.lance_gustavo = Lance(self.gustavo, 100.0)

        self.leilao = Leilao("leilao de celular")

    def test_quando_lances_em_ordem_crescente_deve_retornar_maior_e_menor_lance(
            self):
        self.leilao.dar_lance(self.lance_gustavo)
        self.leilao.dar_lance(self.lance_gabriel)

        maior_valor_esperado = 200.0
        menor_valor_esperado = 100.0

        self.assertEqual(self.leilao.menor_lance, menor_valor_esperado)
        self.assertEqual(self.leilao.maior_lance, maior_valor_esperado)

    def test_quando_lances_em_ordem_decrescente_nao_deve_permitir_lance(self):
        with self.assertRaises(LanceInvalido):

            self.leilao.dar_lance(self.lance_gabriel)
            self.leilao.dar_lance(self.lance_gustavo)

    def test_quando_houver_apenas_um_lance_deve_retornar_o_mesmo_valor_para_maior_e_menor_lances(
            self):
        self.leilao.dar_lance(self.lance_gabriel)

        maior_valor_esperado = 200.0
        menor_valor_esperado = 200.0

        self.assertEqual(self.leilao.menor_lance, menor_valor_esperado)
        self.assertEqual(self.leilao.maior_lance, maior_valor_esperado)

    def test_quando_houver_mais_de_dois_lances_deve_retornar_maior_e_menor_lance(
            self):
        karol = Usuario("Karoline", 500.0)
        lance_karol = Lance(karol, 150.0)

        self.leilao.dar_lance(self.lance_gustavo)
        self.leilao.dar_lance(lance_karol)
        self.leilao.dar_lance(self.lance_gabriel)

        maior_valor_esperado = 200.0
        menor_valor_esperado = 100.0

        self.assertEqual(self.leilao.menor_lance, menor_valor_esperado)
        self.assertEqual(self.leilao.maior_lance, maior_valor_esperado)

    def test_quando_nao_houver_lances_deve_permitir_dar_lance(self):
        self.leilao.dar_lance(self.lance_gabriel)

        quantidade_de_lances = len(self.leilao.lances)
        self.assertEqual(1, quantidade_de_lances)

    def test_quando_usuarios_diferentes_propoem_lance_em_sequencia_deve_permitir_dar_lance(
            self):
        self.leilao.dar_lance(self.lance_gustavo)
        self.leilao.dar_lance(self.lance_gabriel)

        quantidade_de_lances = len(self.leilao.lances)
        self.assertEqual(2, quantidade_de_lances)

    def test_quando_o_mesmo_usuario_propoe_lances_seguidos_deve_barrar_o_lance(
            self):
        segundo_lance_do_gabriel = Lance(self.gabriel, 300)

        with self.assertRaises(LanceInvalido):
            self.leilao.dar_lance(self.lance_gabriel)
            self.leilao.dar_lance(segundo_lance_do_gabriel)
Exemple #23
0
 def setUp(self):
     self.gui = Usuario('Gui', 500.0)
     self.lance_do_gui = Lance(self.gui, 150.0)
     self.leilao = Leilao('Celular')
Exemple #24
0
class TestLeilao(TestCase):

    #esse metodo é sempre invocado antes dos métodos(isola = garante que um teste não influencia o outro)
    def setUp(self):
        self.gui = Usuario('Gui', 500.0)
        self.lance_do_gui = Lance(self.gui, 150.0)
        self.leilao = Leilao('Celular')


    #deixar de forma clara
    def test_deve_retornar_o_maior_e_o_menor_valor_de_um_lance_quando_adicionados_em_ordem_crescente(self):

            yuri = Usuario('Yuri', 500.0)
            lance_do_yuri = Lance(yuri, 100.0)

            self.leilao.propoe(lance_do_yuri)
            self.leilao.propoe(self.lance_do_gui)


            menor_valor_esperado = 100.0
            maior_valor_esperado = 150.0
            self.assertEqual(menor_valor_esperado, self.leilao.menor_lance)
            self.assertEqual(maior_valor_esperado, self.leilao.maior_lance)


    def test_deve_permitir_propor_um_lance_em_ordem_decrescente(self):
        with self.assertRaises(LanceInvalido):

            yuri = Usuario('Yuri', 500.0)
            lance_do_yuri = Lance(yuri, 100.0)

            self.leilao.propoe(self.lance_do_gui)
            self.leilao.propoe(lance_do_yuri)

    def test_deve_retornar_o_mesmo_valor_para_o_maior_e_menor_lance_quando_o_leilao_estiver_um_lance(self):
        self.leilao.propoe(self.lance_do_gui)

        self.assertEqual(150.0, self.leilao.maior_lance)
        self.assertEqual(150.0, self.leilao.menor_lance)

    def test_deve_retornar_o_maior_e_o_menor_valor_quando_o_leilao_tiver_tres_valores(self):
        yuri = Usuario('Yuri', 500.0)
        vini = Usuario('Vini', 500.0)

        lance_do_vini = Lance(vini, 200.0)
        lance_do_yuri = Lance(yuri, 100.0)


        self.leilao.propoe(lance_do_yuri)
        self.leilao.propoe(self.lance_do_gui)
        self.leilao.propoe(lance_do_vini)


        menor_valor_esperado = 100.0
        maior_valor_esperado = 200.0

        self.assertEqual(menor_valor_esperado, self.leilao.menor_lance)
        self.assertEqual(maior_valor_esperado, self.leilao.maior_lance)


    def test_deve_permitir_propor_um_lance_caso_o_leilao_nao_tenha_lances(self):
        self.leilao.propoe(self.lance_do_gui)
        quantidade_de_lances_recebidos = len(self.leilao.lances)
        self.assertEqual(1, quantidade_de_lances_recebidos)


    def test_deve_permitir_propor_um_lance_caso_o_ultimo_usuario_seja_diferente(self):
        yuri = Usuario('Yuri', 500.0)
        lance_do_yuri = Lance(yuri, 200.0)

        self.leilao.propoe(self.lance_do_gui)
        self.leilao.propoe(lance_do_yuri)

        quantidade_de_lances_recebidos = len(self.leilao.lances)
        self.assertEqual(2,quantidade_de_lances_recebidos)

    def test_nao_deve_pertmitir_propor_lance_caso_o_usuario_seja_o_mesmo(self):
        lance_do_gui200 = Lance(self.gui, 200.0)

        #try:
        with self.assertRaises(LanceInvalido):
            self.leilao.propoe(self.lance_do_gui)
            self.leilao.propoe(lance_do_gui200)
from src.leilao.dominio import Usuario, Lance, Leilao, Avaliador

gui = Usuario('Gui')
albert = Usuario('Albert')

lance_do_albert = Lance(albert, 100.0)
lance_do_gui = Lance(gui, 150.0)

leilao = Leilao('Celular')

leilao.lances.append(lance_do_gui)
leilao.lances.append(lance_do_albert)

for lance in leilao.lances:
    print(f'O usuario {lance.usuario.nome} deu um lance de {lance.valor}')

avaliador = Avaliador()
avaliador.avalia(leilao)

print(f'Menor lance: {avaliador.menor_lance} e maior lance: {avaliador.maior_lance}')
Exemple #26
0
class TesteLeilao(TestCase):
    def setUp(self):
        self.gui = Usuario('Gui', 500.0)
        self.yuri = Usuario('Yuri', 500.0)
        self.lance_do_yuri = Lance(self.yuri, 100.0)
        self.lance_do_gui = Lance(self.gui, 150.0)
        self.leilao = Leilao('Celular')

    def test_deve_retornar_o_maior_e_o_menor_valor_de_um_lance_quando_adicioandos_em_ordem_crescente(self):
        self.leilao.propoe(self.lance_do_yuri)
        self.leilao.propoe(self.lance_do_gui)

        self.assertEqual(100.0, self.leilao.menor_lance)
        self.assertEqual(150.0, self.leilao.maior_lance)

    def test_nao_deve_permitir_propor_um_lance_em_ordem_decrescente(self):
        with self.assertRaises(LanceInvalido):
            self.leilao.propoe(self.lance_do_gui)
            self.leilao.propoe(self.lance_do_yuri)

    def test_deve_retornar_o_mesmo_valor_para_maior_e_menor_lance_quando_leilao_tiver_um_lance(self):
        self.leilao.propoe(self.lance_do_gui)

        self.assertEqual(150.0, self.leilao.menor_lance)
        self.assertEqual(150.0, self.leilao.maior_lance)

    def test_deve_retornar_o_maior_e_o_menor_valor_quando_leilao_tiver_tres_lances(self):
        vini = Usuario('Vini', 500.0)
        lance_do_vini = Lance(vini, 200.0)

        self.leilao.propoe(self.lance_do_yuri)
        self.leilao.propoe(self.lance_do_gui)
        self.leilao.propoe(lance_do_vini)

        self.assertEqual(100.0, self.leilao.menor_lance)
        self.assertEqual(200.0, self.leilao.maior_lance)

    def test_deve_permitir_propor_um_lance_caso_o_leilao_nao_tenha_lances(self):
        self.leilao.propoe(self.lance_do_gui)
        self.assertEqual(1, len(self.leilao))

    def test_deve_permitir_propor_lance_caso_o_ultimo_usuario_seja_diferente(self):
        self.leilao.propoe(self.lance_do_yuri)
        self.leilao.propoe(self.lance_do_gui)

        self.assertEqual(2, len(self.leilao))

    def test_nao_deve_permitir_propor_lance_caso_o_ultimo_usuario_seja_igual(self):
        segundo_lance = Lance(self.gui, 200.0)

        with self.assertRaises(LanceInvalido):
            self.leilao.propoe(self.lance_do_gui)
            self.leilao.propoe(segundo_lance)
Exemple #27
0
class TestLeilao(TestCase):

    # cenarios que se repetem
    def setUp(self):  # metodo que cria cenários sem precisar invocá-lo em tds os testes
        self.sicrano = Usuario('Sicrano', 5000.0)
        self.lance_sicrano = Lance(self.sicrano, 1500.0)
        self.leilao = Leilao('Quadro')

    # padrões nomenclatura:
    # test_quando_adicionados_em_ordem_crescente_deve_retornar_maior_e_menor_valor_de_lance(self):
    def test_deve_retornar_maior_e_menor_valor_de_lance_quando_adicionados_em_ordem_crescente(self):
        fulano = Usuario('Fulano', 5000.0)
        lance_fulano = Lance(fulano, 1000.0)

        self.leilao.propoe(lance_fulano)
        self.leilao.propoe(self.lance_sicrano)

        menor_valor_esperado = 1000.0
        maior_valor_esperado = 1500.0

        self.assertEqual(menor_valor_esperado, self.leilao.menor_lance)
        self.assertEqual(maior_valor_esperado, self.leilao.maior_lance)

    def test_nao_deve_permitir_proposicao_de_lance_em_ordem_decrescente(self):
        with self.assertRaises(LanceInvalido):
            fulano = Usuario('Fulano', 5000.0)
            lance_fulano = Lance(fulano, 1000.0)

            self.leilao.propoe(self.lance_sicrano)
            self.leilao.propoe(lance_fulano)

    def test_deve_retornar_mesmo_valor_para_maior_e_menor_lance_quando_leilao_tiver_lance(self):
        self.leilao.propoe(self.lance_sicrano)

        self.assertEqual(1500.0, self.leilao.menor_lance)
        self.assertEqual(1500.0, self.leilao.maior_lance)

    def test_deve_retornar_maior_e_menor_valor_quando_leilao_tiver_tres_lances(self):
        fulano = Usuario('Fulano', 5000.0)
        beltrano = Usuario('Beltrano', 5000.0)

        lance_fulano = Lance(fulano, 1000.0)
        lance_beltrano = Lance(beltrano, 2000.0)

        self.leilao.propoe(lance_fulano)
        self.leilao.propoe(self.lance_sicrano)
        self.leilao.propoe(lance_beltrano)

        menor_valor_esperado = 1000.0
        maior_valor_esperado = 2000.0

        self.assertEqual(menor_valor_esperado, self.leilao.menor_lance)
        self.assertEqual(maior_valor_esperado, self.leilao.maior_lance)

    # se o leilao nao tiver lances, deve permitir propor um lance
    def test_deve_permitir_proposicao_de_lance_caso_leilao_nao_tenha_lances(self):
        self.leilao.propoe(self.lance_sicrano)

        quantidade_lances_recebidos = len(self.leilao.lances)
        self.assertEqual(1, quantidade_lances_recebidos)

    # se o último usuário for diferente, deve permitir propor um lance
    def test_deve_permitir_proposicao_de_lance_caso_usuario_seja_diferente(self):
        fulano = Usuario('Fulano', 5000.0)
        lance_fulano = Lance(fulano, 2000.0)

        self.leilao.propoe(self.lance_sicrano)
        self.leilao.propoe(lance_fulano)

        quantidade_lances_recebidos = len(self.leilao.lances)
        self.assertEqual(2, quantidade_lances_recebidos)

    # se o último usuário for o mesmo, não deve permitir propor um lance
    def test_nao_deve_permitir_proposicao_de_lance_caso_usuario_consecutivo_seja_igual(self):
        lance_sicrano2000 = Lance(self.sicrano, 2000.0)

        with self.assertRaises(LanceInvalido):  # try/except Value Error
            self.leilao.propoe(lance_sicrano2000)
            self.leilao.propoe(self.lance_sicrano)
Exemple #28
0
 def setUp(self):  # metodo que cria cenários sem precisar invocá-lo em tds os testes
     self.sicrano = Usuario('Sicrano', 5000.0)
     self.lance_sicrano = Lance(self.sicrano, 1500.0)
     self.leilao = Leilao('Quadro')
class TestLeilao(TestCase):

    # test_quando_adicionados_em_ordem_crescente_deve_retornar_o_maior_e_o_menor_valor_de_um_lance

    def setUp(self):
        self.gui = Usuario('Gui', 500.0)
        self.lance_do_gui = Lance(self.gui, 150.0)
        self.leilao = Leilao('Celular')

    def test_deve_retornar_o_maior_e_o_menor_valor_de_um_lance_quando_adicionados_em_ordem_crescente(
            self):
        yuri = Usuario('Yuri', 500.0)
        lance_do_yuri = Lance(yuri, 100.0)

        self.leilao.propoe(lance_do_yuri)
        self.leilao.propoe(self.lance_do_gui)

        menor_valor_esperado = 100.0
        maior_valor_esperado = 150.0

        self.assertEqual(menor_valor_esperado, self.leilao.menor_lance)
        self.assertEqual(maior_valor_esperado, self.leilao.maior_lance)

    def test_nao_deve_permitir_propor_um_lance_em_ordem_decrescente(self):

        with self.assertRaises(LanceInvalido):
            yuri = Usuario('Yuri', 500.0)
            lance_do_yuri = Lance(yuri, 100.0)

            self.leilao.propoe(self.lance_do_gui)
            self.leilao.propoe(lance_do_yuri)

    def test_deve_retornar_o_mesmo_valor_para_o_maior_e_menor_lance_quando_leilao_tiver_um_lance(
            self):
        self.leilao.propoe(self.lance_do_gui)

        self.assertEqual(150.0, self.leilao.menor_lance)
        self.assertEqual(150.0, self.leilao.maior_lance)

    def test_deve_retornar_o_maior_e_o_menor_valor_quando_o_leilao_tiver_tres_lances(
            self):
        yuri = Usuario('Yuri', 500.0)
        lance_do_yuri = Lance(yuri, 100.0)
        vini = Usuario('Vini', 500.0)

        lance_do_vini = Lance(vini, 200.0)

        self.leilao.propoe(lance_do_yuri)
        self.leilao.propoe(self.lance_do_gui)
        self.leilao.propoe(lance_do_vini)

        menor_valor_esperado = 100.0
        maior_valor_esperado = 200.0

        self.assertEqual(menor_valor_esperado, self.leilao.menor_lance)
        self.assertEqual(maior_valor_esperado, self.leilao.maior_lance)

    def test_deve_permitir_propor_um_lance_caso_o_leilao_nao_tenha_lances(
            self):
        self.leilao.propoe(self.lance_do_gui)

        quantidade_de_lances_recebido = len(self.leilao.lances)
        self.assertEqual(1, quantidade_de_lances_recebido)

    def test_deve_permitir_propor_um_lance_caso_o_ultimo_usuario_seja_diferente(
            self):
        yuri = Usuario('Yuri', 500.0)
        lance_do_yuri = Lance(yuri, 200.0)

        self.leilao.propoe(self.lance_do_gui)
        self.leilao.propoe(lance_do_yuri)

        quantidade_de_lances_recebido = len(self.leilao.lances)

        self.assertEqual(2, quantidade_de_lances_recebido)

    def test_nao_deve_permitir_propor_lance_caso_o_usuario_seja_o_mesmo(self):
        lance_do_gui200 = Lance(self.gui, 200.0)

        with self.assertRaises(LanceInvalido):
            self.leilao.propoe(self.lance_do_gui)
            self.leilao.propoe(lance_do_gui200)
class TestLeilao(TestCase):
    def setUp(
        self
    ):  #método padrão do unittest para criar algum cenário, ele é invocado antes de rodar os testes e ele é sempre executado novamente a cada teste, é feito de forma isolada
        #boa prática é deixar apenas todos os atributos que são usados em TODOS OS TESTES, pois, caso tenha 4 atributos e só use 1, pode deixar esta parte do código menos perfomática
        self.gui = Usuario('Gui', 500.0)
        self.lance_do_gui = Lance(self.gui, 150.0)
        self.leilao = Leilao('Celular')

    def test_deve_retornar_o_maior_e_o_menor_valor_de_um_lance_quando_adicionados_em_ordem_crescente(
            self):
        yuri = Usuario('Yuri', 500.0)

        lance_do_yuri = Lance(yuri, 100.0)

        self.leilao.propoe(lance_do_yuri)
        self.leilao.propoe(self.lance_do_gui)

        menor_valor_esperado = 100.0
        maior_valor_esperado = 150.0

        self.assertEqual(menor_valor_esperado, self.leilao.menor_lance)
        self.assertEqual(maior_valor_esperado, self.leilao.maior_lance)

    def test_nao_deve_permitir_propor_um_lance_em_ordem_descrescente(self):

        with self.assertRaises(LanceInvalido):
            yuri = Usuario('Yuri', 500.0)

            lance_do_yuri = Lance(yuri, 100.0)

            self.leilao.propoe(self.lance_do_gui)
            self.leilao.propoe(lance_do_yuri)

    def test_deve_retornar_o_mesmo_valor_para_o_maior_e_menor_lance_quando_leilao_tiver_um_lance(
            self):
        self.leilao.propoe(self.lance_do_gui)

        self.assertEqual(150.0, self.leilao.menor_lance)
        self.assertEqual(150.0, self.leilao.maior_lance)

    def test_deve_retornar_o_maior_e_o_menor_valor_quando_o_leilao_tiver_tres_lances(
            self):
        vini = Usuario('Vini', 500.0)
        lance_do_vini = Lance(vini, 200.0)
        yuri = Usuario('Yuri', 500.0)
        lance_do_yuri = Lance(yuri, 100.0)

        self.leilao.propoe(lance_do_yuri)
        self.leilao.propoe(self.lance_do_gui)
        self.leilao.propoe(lance_do_vini)

        menor_valor_esperado = 100.0
        maior_valor_esperado = 200.0

        self.assertEqual(menor_valor_esperado, self.leilao.menor_lance)
        self.assertEqual(maior_valor_esperado, self.leilao.maior_lance)

    # Se o leilão não tiver lances, deve permitir propor um lance
    def test_deve_permitir_propor_um_lance_caso_o_leilao_nao_tenha_lances(
            self):
        self.leilao.propoe(self.lance_do_gui)

        quantidade_de_lances_esperado = 1
        quantidade_de_lances_recebido = len(self.leilao.lances)
        self.assertEqual(quantidade_de_lances_esperado,
                         quantidade_de_lances_recebido)

    # Se o último usuário for diferente, deve permitir propor o lance
    def test_deve_permitir_propor_um_lance_caso_o_ultimo_usuario_seja_diferente(
            self):
        yuri = Usuario('Yuri', 500.0)

        lance_do_yuri = Lance(yuri, 200.0)
        self.leilao.propoe(self.lance_do_gui)
        self.leilao.propoe(lance_do_yuri)

        quantidade_de_lances_esperado = 2
        quantidade_de_lances_recebido = len(self.leilao.lances)
        self.assertEqual(quantidade_de_lances_esperado,
                         quantidade_de_lances_recebido)

    # Se o último usuário for o mesmo, não deve permitir propor o lance
    def test_nao_deve_permitir_propor_lance_caso_o_usuario_seja_o_mesmo(self):
        lance_do_gui200 = Lance(self.gui, 200.0)

        with self.assertRaises(LanceInvalido):
            self.leilao.propoe(self.lance_do_gui)
            self.leilao.propoe(lance_do_gui200)