public void Testa_Se_Ao_Incluir_Uma_Sala_Que_Ja_Esta_Cadastrada_No_Mesmo_Horario_Exibe_Mensagem_De_Validacao()
        {
            // Dado que o horário da sala 1 seja incluído.
            var horarioModel = new HorarioModel
            {
                HoraInicio = new DateTime(2015, 1, 1, 10, 0, 0),
                HoraTermino = new DateTime(2015, 1, 1, 11, 30, 0),
                IdSala = 1
            };

            var horariosSala1 = (from h in horarios where h.IdSala == 1 select h).ToList();

            var mock = new Mock<IHorarioRepository>();
            mock.Setup(u => u.Incluir(horarioModel)).Verifiable();
            mock.Setup(u => u.Listar(horarioModel)).Returns(horariosSala1);

            try
            {
                // Quando incluir o horário.
                var horarioService = new HorarioService(mock.Object);
                horarioService.Incluir(horarioModel);

                Assert.Fail("A sala não deveria ser incluída nesse horáro, pois ela já tem reserva neste mesmo horário.");
            }
            catch (ReservaIngressosCinemaException ex)
            {
                // Então deve exibir mensagem que a sala já está cadastrada no horário que se deseja cadastrar.
                var mensagemEsperada = HorarioResource.SalaJaCasdastradaNoMesmoHorarioMensagem;

                Assert.AreEqual(mensagemEsperada, ex.Mensagem);
            }
        }
        private void ValidaSeSalaNaoEstaMarcadaParaOMesmoHorario(HorarioModel horarioModel)
        {
            if (Listar(horarioModel).Count == 0)
            {
                return;
            }

            throw new ReservaIngressosCinemaException("Id", HorarioResource.SalaJaCasdastradaNoMesmoHorarioMensagem);
        }
        public void Testa_Se_For_Feita_Uma_Reserva_De_Sala_Que_Ja_Esta_Lotada_Exibe_Mensagem_De_Validacao()
        {
            // Dado que a reserva seja feita.
            var reservaModel = new ReservaModel
            {
                QuantidadeIngressos = 1,
                IdHorario = 1,
                IdUsuario = 7,
                HorarioModel = new HorarioModel { IdSala = 1 }
            };

            var salaModel = new SalaModel
            {
                Id = 1,
                QuantidadeLugares = 5,
                Nome = "Sala 01",
                Descricao = "Sala para exibições 3D."
            };

            var horarioModel = new HorarioModel { Id = 1, IdSala = 1, IdFilme = 3 };

            var reservas = new List<ReservaModel>
            {
                new ReservaModel { Id = 1, IdHorario = 1, IdUsuario = 1, HorarioModel = horarioModel },
                new ReservaModel { Id = 2, IdHorario = 1, IdUsuario = 2, HorarioModel = horarioModel },
                new ReservaModel { Id = 3, IdHorario = 1, IdUsuario = 3, HorarioModel = horarioModel },
                new ReservaModel { Id = 4, IdHorario = 1, IdUsuario = 4, HorarioModel = horarioModel },
                new ReservaModel { Id = 5, IdHorario = 1, IdUsuario = 5, HorarioModel = horarioModel }
            };

            var mock = new Mock<IReservaRepository>();
            mock.Setup(u => u.Incluir(reservaModel)).Verifiable();
            mock.Setup(u => u.ListarComObjetosFilhos(It.IsAny<ReservaModel>())).Returns(reservas);

            var salaMock = new Mock<ISalaRepository>();
            salaMock.Setup(u => u.Buscar(It.IsAny<SalaModel>())).Returns(salaModel);

            try
            {
                // Quando a reserva for feita.
                var reservaService = new ReservaService(mock.Object, salaMock.Object);
                reservaService.Incluir(reservaModel);

                Assert.Fail("A reserva não poderia ser feita, pois a sala já está lotada.");
            }
            catch (ReservaIngressosCinemaException ex)
            {
                // Então deve exibir mensagem que a sala está lotada.
                var mensagemEsperada = ReservaResource.SalaLotadaMensagem;

                Assert.AreEqual(mensagemEsperada, ex.Mensagem);
            }
        }
 private void ValidaDadosHorario(HorarioModel horarioModel)
 {
     ValidaSeSalaNaoEstaMarcadaParaOMesmoHorario(horarioModel);
 }
 public List<HorarioModel> Listar(HorarioModel horarioModel)
 {
     return horarioRepository.Listar(horarioModel);
 }
        public void Incluir(HorarioModel horarioModel)
        {
            ValidaDadosHorario(horarioModel);

            horarioRepository.Incluir(horarioModel);
        }
 public void Incluir(HorarioModel horarioModel)
 {
     // Executa a inclusão no banco.
 }
        public List<HorarioModel> Listar(HorarioModel horarioModel)
        {
            // Busca no banco.

            return new List<HorarioModel>();
        }