Ejemplo n.º 1
0
        public async Task AoEnviarOsFilmesParticipantesDeveRetornarAListagemDosVencedores()
        {
            //ARRANGE
            var filmesEsperados = new[]
            {
                new Filme {
                    Id = "1"
                },
                new Filme {
                    Id = "2"
                }
            };
            var chaveamentoPartidas = new ChaveamentoPartidas
            {
                new Partida(filmesEsperados[0], filmesEsperados[1])
            };
            var mockGeradorChaveamento = new Mock <IGeradorChaveamentoPartidas>();

            mockGeradorChaveamento
            .Setup(_ => _.CriarChaveamento(It.IsAny <Filme[]>()))
            .Returns(It.IsAny <ChaveamentoPartidas>());
            var mockTorneio = new Mock <ITorneio>();

            mockTorneio
            .Setup(_ => _.DisputarPartidas(It.IsAny <ChaveamentoPartidas>()))
            .Returns(chaveamentoPartidas);
            var mockRegraVencedor = new Mock <IRegraVencedor>();

            mockRegraVencedor
            .Setup(_ => _.Ranquear(It.IsAny <Partida>()))
            .Returns(filmesEsperados);
            var filmesParticipantes = new[]
            {
                new Filme(),
                new Filme(),
                new Filme(),
                new Filme()
            };
            var controller = new TorneioController(
                mockGeradorChaveamento.Object,
                mockTorneio.Object,
                mockRegraVencedor.Object
                );

            var response = await controller.DefinirVencedoresAsync(filmesParticipantes);

            mockGeradorChaveamento.Verify(_ => _.CriarChaveamento(It.IsAny <Filme[]>()), Times.Once);
            mockTorneio.Verify(_ => _.DisputarPartidas(It.IsAny <ChaveamentoPartidas>()), Times.AtLeastOnce);
            mockRegraVencedor.Verify(_ => _.Ranquear(It.IsAny <Partida>()), Times.Once);
            Assert.IsType <OkObjectResult>(response.Result);
        }
Ejemplo n.º 2
0
 public ChaveamentoPartidas DisputarPartidas(ChaveamentoPartidas chaveamentoAtual)
 {
     if (chaveamentoAtual.Count == 1)
     {
         return(chaveamentoAtual);
     }
     else
     {
         var proximoChaveamento = new ChaveamentoPartidas(chaveamentoAtual);
         for (int i = 0; i < chaveamentoAtual.Count; i += 2)
         {
             var vencedorA = _regraVencedor.Ranquear(chaveamentoAtual[i])[0];
             var vencedorB = _regraVencedor.Ranquear(chaveamentoAtual[i + 1])[0];
             proximoChaveamento.Add(new Partida(vencedorA, vencedorB));
         }
         return(DisputarPartidas(proximoChaveamento));
     }
 }
Ejemplo n.º 3
0
        public void AoChegarNaFinalDeveRetornarEleMesmo()
        {
            //ARRANGE
            var chaveamento = new ChaveamentoPartidas
            {
                new Partida(OsIncriveis2, JurassicWorld)
            };
            var mockRegraVencedor = new Mock <IRegraVencedor>();

            mockRegraVencedor.Setup(r => r.Ranquear(It.IsAny <Partida>()))
            .Returns(new[] { OsIncriveis2, OitoMulheresEUmSegredo });
            var torneio = new TorneioMataMata(mockRegraVencedor.Object);

            //ACT
            var chaveamentoFinal = torneio.DisputarPartidas(chaveamento);

            //ASSERT
            Assert.Same(chaveamento, chaveamentoFinal);
        }
Ejemplo n.º 4
0
        public ChaveamentoPartidas CriarChaveamento(Filme[] filmes)
        {
            if (filmes == null)
            {
                throw new NullReferenceException("A coleção de filmes não pode ser nula.");
            }

            if (filmes.Length % 2 != 0)
            {
                throw new ArgumentOutOfRangeException("É necessário um Nº par de filmes para gerar o chaveamento.");
            }
            var filmesOrdenados = filmes
                                  .OrderBy(f => f.Titulo)
                                  .ToList();

            var chaveamento    = new ChaveamentoPartidas();
            var totalIteracoes = filmesOrdenados.Count / 2;

            for (int i = 0; i < totalIteracoes; i++)
            {
                chaveamento.Add(new Partida(filmesOrdenados[i], filmesOrdenados[filmesOrdenados.Count - 1 - i]));
            }
            return(chaveamento);
        }
Ejemplo n.º 5
0
        public void AoDisputarAsPartidasDoTorneioDeveIrEliminandoAteChegarAFinal()
        {
            //ARRANGE
            var chaveamento = new ChaveamentoPartidas
            {
                new Partida(OsIncriveis2, JurassicWorld),
                new Partida(OitoMulheresEUmSegredo, Hereditario),
                new Partida(Vingadores, Deadpool2),
                new Partida(HanSolo, Thor)
            };
            var mockRegraVencedor = new Mock <IRegraVencedor>();

            mockRegraVencedor.Setup(r => r.Ranquear(It.IsAny <Partida>()))
            .Returns(new[] { OsIncriveis2, OitoMulheresEUmSegredo });
            var torneio = new TorneioMataMata(mockRegraVencedor.Object);

            //ACT
            var chaveamentoFinal = torneio.DisputarPartidas(chaveamento);

            //ASSERT
            Assert.Single(chaveamentoFinal);
            Assert.Equal(2, chaveamentoFinal.ChaveamentoAnterior.Count);
            Assert.Equal(4, chaveamentoFinal.ChaveamentoAnterior.ChaveamentoAnterior.Count);
        }