public void RetornaValorSuperiorMaisProximoDadoLeilaoNessaModalidade(
            double valorDestino,
            double valorEsperado,
            double[] ofertas)
        {
            //Arrange
            var modalidade = new OfertaSuperiorMaisProxima(valorDestino);
            var leilao     = new Leilao("Cama Box com Colchão", modalidade);

            leilao.Iniciar();

            var marina = new Interessado("Marina", leilao);
            var maria  = new Interessado("Maria", leilao);

            for (int contador = 0; contador < ofertas.Length; contador++)
            {
                if ((contador % 2) == 0)
                {
                    leilao.RecebeLance(marina, ofertas[contador]);
                }
                else
                {
                    leilao.RecebeLance(maria, ofertas[contador]);
                }
            }

            //Act
            leilao.Finalizar();

            //Assert
            Assert.Equal(valorEsperado, leilao.Ganhador.Valor);
        }
        public void RetornaMaiorValorDadoLeilaoComPeloMenosUmValor(
            double valorEsperado, double[] valores)
        {
            //Arrange

            var modalidade = new MaiorValor();

            var leilao = new Leilao(peca: "Tv Samsung", modalidade);

            leilao.Iniciar();

            var beatriz = new Interessado("Beatriz", leilao);
            var mario   = new Interessado("Mario", leilao);

            for (int contador = 0; contador < valores.Length; contador++)
            {
                if ((contador % 2) == 0)
                {
                    leilao.RecebeLance(beatriz, valores[contador]);
                }
                else
                {
                    leilao.RecebeLance(mario, valores[contador]);
                }
            }

            //Act
            leilao.Finalizar();

            //Assert
            Assert.Equal(valorEsperado, leilao.Ganhador.Valor);
        }
        public void NaoAceitaProximoLanceDadoLeilaoFinalizado()
        {
            //Arrange
            var modalidade = new MaiorValor();

            var leilao = new Leilao(peca: "Notebook HP", modalidade);

            var vinicius = new Interessado("Vinicius", leilao);
            var pamela   = new Interessado("Pamela", leilao);

            leilao.Iniciar();

            leilao.RecebeLance(vinicius, 500);
            leilao.RecebeLance(pamela, 600);
            leilao.Finalizar();

            //Act

            leilao.RecebeLance(vinicius, 700);

            //Assert

            var qtdLancesObtido    = leilao.Lances.Count();
            var qtdLancesEsperados = 2;

            Assert.Equal(qtdLancesEsperados, qtdLancesObtido);
        }
        public void RetornaZeroDadoLeilaoSemLances()
        {
            //Arrange - Cenários de entrada
            var modalidade = new MaiorValor();
            var leilao     = new Leilao(peca: "Notebook HP", modalidade);

            leilao.Iniciar();

            //Act - método sob teste
            leilao.Finalizar();

            //Assert
            var valorEsperado = 0;
            var valorObtido   = leilao.Ganhador.Valor;

            Assert.Equal(valorEsperado, valorObtido);
        }
        public void LancaInvalidOperationExceptionDadoLeilaoNaoIniciado()
        {
            //Arrange
            var modalidade = new MaiorValor();

            var leilao = new Leilao(peca: "Tv Samsung", modalidade);

            //Assert
            var excecaoObtida = Assert.Throws <InvalidOperationException>(

                //Act
                () => leilao.Finalizar()
                );

            var msgEsperada = "Não é possível terminar o pregão sem que ele tenha começado. Para isso, utilize o método Iniciar()";

            Assert.Equal(msgEsperada, excecaoObtida.Message);
        }