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); }
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)); } }
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); }
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); }
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); }