public async Task DeveCriarEventoEValidarParticularidadesSME_OrganizacaoSME_PerfilSME()
        {
            //ARRANGE
            var tipoEvento = new EventoTipo
            {
                Id              = 8,
                Codigo          = 8,
                TipoData        = EventoTipoData.InicioFim,
                LocalOcorrencia = EventoLocalOcorrencia.SME
            };

            repositorioEventoTipo.Setup(c => c.ObterPorId(It.IsAny <long>()))
            .Returns(tipoEvento);

            repositorioTipoCalendario.Setup(c => c.ObterPorId(It.IsAny <long>()))
            .Returns(new TipoCalendario
            {
                Id = 1
            });

            IEnumerable <Evento> listaEventosParaValidarPeriodo = new List <Evento>()
            {
                new Evento()
                {
                    DataInicio = DateTime.Now, DataFim = DateTime.Now.AddDays(1)
                }
            };

            repositorioEvento.Setup(a => a.ObterEventosPorTipoETipoCalendario(tipoEvento.Codigo, 8)).Returns(Task.FromResult(listaEventosParaValidarPeriodo));

            var usuario         = new Usuario();
            var perfilProfessor = new PrioridadePerfil
            {
                CodigoPerfil = Guid.Parse("23E1E074-37D6-E911-ABD6-F81654FE895D"),
                Tipo         = TipoPerfil.UE
            };

            usuario.DefinirPerfis(new List <PrioridadePerfil>
            {
                perfilProfessor
            });

            servicoUsuario.Setup(c => c.ObterUsuarioLogado())
            .Returns(Task.FromResult(usuario));

            var evento = new Evento
            {
                TipoCalendarioId = 8,
                TipoEvento       = tipoEvento,
                DataInicio       = DateTime.Now,
                DataFim          = DateTime.Now.AddDays(2),
                Letivo           = EventoLetivo.Sim
            };

            //ASSERT
            await Assert.ThrowsAsync <NegocioException>(() => servicoEvento.Salvar(evento));
        }
        public async Task DeveCriarEvento()
        {
            repositorioEventoTipo.Setup(c => c.ObterPorId(It.IsAny <long>()))
            .Returns(new EventoTipo
            {
                Id              = 1,
                TipoData        = EventoTipoData.Unico,
                LocalOcorrencia = EventoLocalOcorrencia.UE
            });

            repositorioTipoCalendario.Setup(c => c.ObterPorId(It.IsAny <long>()))
            .Returns(new TipoCalendario
            {
                Id = 1,
            });

            var usuario         = new Usuario();
            var perfilProfessor = new PrioridadePerfil
            {
                CodigoPerfil = Guid.Parse("40E1E074-37D6-E911-ABD6-F81654FE895D")
            };

            usuario.DefinirPerfis(new List <PrioridadePerfil>
            {
                perfilProfessor
            });
            servicoUsuario.Setup(c => c.ObterUsuarioLogado())
            .Returns(Task.FromResult(usuario));

            await servicoEvento.Salvar(new Evento
            {
                TipoCalendarioId = 1,
                TipoEventoId     = 1,
                DataInicio       = DateTime.Now,
                Letivo           = EventoLetivo.Sim,
                DreId            = "123",
                UeId             = "123"
            });

            repositorioEvento.Verify(c => c.Salvar(It.IsAny <Evento>()), Times.Once);
        }
        public async Task DeveCriarEventoEValidarParticularidadesSME_OrganizacaoSME_Periodo()
        {
            //ARRANGE
            var tipoEvento = new EventoTipo
            {
                Id              = 1,
                Codigo          = 1,
                TipoData        = EventoTipoData.InicioFim,
                LocalOcorrencia = EventoLocalOcorrencia.UE
            };

            repositorioEventoTipo.Setup(c => c.ObterPorId(It.IsAny <long>()))
            .Returns(tipoEvento);

            repositorioTipoCalendario.Setup(c => c.ObterPorId(It.IsAny <long>()))
            .Returns(new TipoCalendario
            {
                Id = 1
            });

            IEnumerable <Evento> listaEventosParaValidarPeriodo = new List <Evento>()
            {
                new Evento()
                {
                    DataInicio = DateTime.Now, DataFim = DateTime.Now.AddDays(1), Nome = "teste"
                },
                new Evento()
                {
                    DataInicio = DateTime.Now.AddDays(1), DataFim = DateTime.Now.AddDays(3), Nome = "teste"
                }
            };

            repositorioEvento.Setup(a => a.ObterEventosPorTipoETipoCalendario((long)TipoEvento.OrganizacaoEscolar, 8)).Returns(Task.FromResult(listaEventosParaValidarPeriodo));

            var usuario   = new Usuario();
            var perfilSme = new PrioridadePerfil
            {
                CodigoPerfil = Guid.Parse("23E1E074-37D6-E911-ABD6-F81654FE895D"),
                Tipo         = TipoPerfil.UE
            };

            usuario.DefinirPerfis(new List <PrioridadePerfil>
            {
                perfilSme
            });

            servicoUsuario.Setup(c => c.ObterUsuarioLogado())
            .Returns(Task.FromResult(usuario));

            var eventoQueNaoDevePassar = new Evento
            {
                TipoCalendarioId = 8,
                DreId            = "1",
                UeId             = "2",
                TipoEvento       = tipoEvento,
                DataInicio       = DateTime.Now,
                DataFim          = DateTime.Now.AddDays(2),
                Letivo           = EventoLetivo.Sim
            };

            var eventoQueDevePassar = new Evento
            {
                TipoCalendarioId = 8,
                DreId            = "1",
                UeId             = "2",
                TipoEvento       = tipoEvento,
                DataInicio       = DateTime.Now.AddDays(4),
                DataFim          = DateTime.Now.AddDays(6),
                Letivo           = EventoLetivo.Sim
            };

            //ASSERT
            Task task() => servicoEvento.Salvar(eventoQueNaoDevePassar);

            await Assert.ThrowsAsync <NegocioException>(task);

            await servicoEvento.Salvar(eventoQueDevePassar);

            repositorioEvento.Verify(c => c.Salvar(It.IsAny <Evento>()), Times.Once);
        }
        public async Task DeveCriarEventoEValidarParticularidadesSME_LiberacaoExcepcional_Periodo_Alertar()
        {
            //ARRANGE
            var tipoEvento = new EventoTipo
            {
                Id              = 1,
                Codigo          = (int)TipoEvento.LiberacaoExcepcional,
                TipoData        = EventoTipoData.InicioFim,
                LocalOcorrencia = EventoLocalOcorrencia.UE
            };

            repositorioEventoTipo.Setup(c => c.ObterPorId(It.IsAny <long>()))
            .Returns(tipoEvento);

            var tipoCalendario = new TipoCalendario
            {
                Id = 1
            };

            repositorioTipoCalendario.Setup(c => c.ObterPorId(It.IsAny <long>()))
            .Returns(tipoCalendario);

            var listaPeriodoEscolar = new List <PeriodoEscolar>()
            {
                new PeriodoEscolar()
                {
                    PeriodoInicio = DateTime.Today, PeriodoFim = DateTime.Today.AddDays(7)
                }
            };

            repositorioPeriodoEscolar.Setup(a => a.ObterPorTipoCalendario(tipoCalendario.Id)).Returns(listaPeriodoEscolar);

            var usuario = new Usuario();

            var perfil = new PrioridadePerfil
            {
                CodigoPerfil = Guid.Parse("23A1E074-37D6-E911-ABD6-F81654FE895D"),
                Tipo         = TipoPerfil.DRE
            };

            usuario.DefinirPerfis(new List <PrioridadePerfil>
            {
                perfil
            });

            servicoUsuario.Setup(c => c.ObterUsuarioLogado())
            .Returns(Task.FromResult(usuario));

            var evento = new Evento
            {
                TipoCalendarioId = tipoCalendario.Id,
                DreId            = "1",
                UeId             = "2",
                TipoEvento       = tipoEvento,
                DataInicio       = DateTime.Now.AddMonths(1),
                DataFim          = DateTime.Now.AddMonths(1).AddDays(2),
                Letivo           = EventoLetivo.Sim
            };

            //ASSERT
            await Assert.ThrowsAsync <NegocioException>(() => servicoEvento.Salvar(evento));
        }
        public async Task DeveCriarEventoEValidarParticularidadesSME_LiberacaoExcepcional(TipoPerfil tipoPerfil, bool sucesso)
        {
            //ARRANGE
            var tipoEvento = new EventoTipo
            {
                Id              = 1,
                Codigo          = (int)TipoEvento.LiberacaoExcepcional,
                TipoData        = EventoTipoData.InicioFim,
                LocalOcorrencia = EventoLocalOcorrencia.UE
            };

            repositorioEventoTipo.Setup(c => c.ObterPorId(It.IsAny <long>()))
            .Returns(tipoEvento);

            var tipoCalendario = new TipoCalendario
            {
                Id = 1
            };

            repositorioTipoCalendario.Setup(c => c.ObterPorId(It.IsAny <long>()))
            .Returns(tipoCalendario);

            var listaPeriodoEscolar = new List <PeriodoEscolar>()
            {
                new PeriodoEscolar()
                {
                    PeriodoInicio = DateTime.Today, PeriodoFim = DateTime.Today.AddDays(7)
                }
            };

            repositorioPeriodoEscolar.Setup(a => a.ObterPorTipoCalendario(tipoCalendario.Id)).Returns(listaPeriodoEscolar);

            var usuario = new Usuario();

            var perfil = new PrioridadePerfil
            {
                CodigoPerfil = Guid.Parse("23A1E074-37D6-E911-ABD6-F81654FE895D"),
                Tipo         = tipoPerfil
            };

            usuario.DefinirPerfis(new List <PrioridadePerfil>
            {
                perfil
            });

            servicoUsuario.Setup(c => c.ObterUsuarioLogado())
            .Returns(Task.FromResult(usuario));

            var evento = new Evento
            {
                TipoCalendarioId = tipoCalendario.Id,
                DreId            = "1",
                UeId             = "2",
                TipoEvento       = tipoEvento,
                DataInicio       = DateTime.Now,
                DataFim          = DateTime.Now.AddDays(2),
                Letivo           = EventoLetivo.Sim
            };

            var ue = new AbrangenciaUeRetorno();

            repositorioAbrangencia.Setup(a => a.ObterUe(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Guid>())).Returns(Task.FromResult(ue));

            //ASSERT
            try
            {
                await servicoEvento.Salvar(evento, true);

                Assert.True(true);
            }
            catch (Exception)
            {
                if (sucesso)
                {
                    Assert.True(false);
                }
            }
        }