Пример #1
0
        public void diaPodeIniciarSeFuncionarioNaoPossuirPontoEmAberto()
        {
            var funcionarioCorreto = new FuncionarioFactory().criarFuncionario("Thais", "tatacs", "123456", "", "41617099864");
            var pontoAntigo        = criarPontoTrabalhoDoDia(10, 6, 2016);
            var repositorio        = new PontoDiaMockRepository();
            var inicioDoDia        = new DataHoraMockStrategy(13, 6, 2016);

            repositorio.save(pontoAntigo);

            try
            {
                var service = criarService(inicioDoDia, repositorio);
                service.iniciarDia();
                Assert.Fail("O dia não deveria ter iniciado!");
            }
            catch (DiaEmAbertoException ex)
            {
                Assert.AreEqual("O ponto do dia 10/06/2016 não foi encerrado", ex.Message);
            }

            var serviceCorreto = criarService(inicioDoDia, repositorio, funcionarioCorreto);
            var ponto          = serviceCorreto.iniciarDia();

            Assert.AreEqual(new DateTime(2016, 6, 13), ponto.Data.Date);
        }
Пример #2
0
        public static PontoService criarPontoService(SessaoLogin sessao, IDataHoraStrategy dataHoraStrategy = null, IPontoDiaRepository pontoRepository = null, bool mock = false, IFeriadoRepository feriadoRepository = null)
        {
            if (dataHoraStrategy == null)
            {
                dataHoraStrategy = new DataHoraMockStrategy(DateTime.Today);
            }

            if (pontoRepository == null)
            {
                pontoRepository = new PontoDiaMockRepository();
            }

            var tipoIntervaloRepository = new TipoIntervaloMockRepository();

            tipoIntervaloRepository.save(new TipoIntervalo("Almoço"));

            if (mock)
            {
                return(new PontoServiceMock(criarPontoFactory(pontoRepository, feriadoRepository),
                                            dataHoraStrategy,
                                            new FuncionarioPossuiPontoAbertoSpecification(pontoRepository),
                                            new FuncionarioJaTrabalhouHojeSpecification(pontoRepository),
                                            sessao,
                                            pontoRepository,
                                            tipoIntervaloRepository));
            }

            return(new PontoService(criarPontoFactory(pontoRepository, feriadoRepository),
                                    dataHoraStrategy,
                                    new FuncionarioPossuiPontoAbertoSpecification(pontoRepository),
                                    new FuncionarioJaTrabalhouHojeSpecification(pontoRepository),
                                    sessao,
                                    pontoRepository,
                                    tipoIntervaloRepository));
        }
Пример #3
0
        public void folgaNaoPodeSerCriadaSeJaPontoJaExiste()
        {
            var repo  = new PontoDiaMockRepository();
            var ponto = criarService(new DataHoraMockStrategy(DateTime.Today), repo).iniciarDia();

            criarService(null, repo).darFolgaPara(funcionario, DateTime.Today, "Já trabalhou neste dia...");
        }
Пример #4
0
        public static PontoFactory criarPontoFactory(FeriadoService feriadoService, IPontoDiaRepository pontoRepository = null)
        {
            if (pontoRepository == null)
            {
                pontoRepository = new PontoDiaMockRepository();
            }

            return(new PontoFactory(pontoRepository, feriadoService));
        }
Пример #5
0
        private PontoFactory criarFactory(IPontoDiaRepository repo = null)
        {
            if (repo == null)
            {
                repo = new PontoDiaMockRepository();
            }

            return(FactoryHelper.criarPontoFactory(repo));
        }
Пример #6
0
        public void naoDeveExistirMaisDeUmPontoDoFuncionarioNoDia()
        {
            var repo    = new PontoDiaMockRepository();
            var service = criarService(new DataHoraMockStrategy(DateTime.Today), repo);
            var ponto   = service.iniciarDia();

            service.encerrarDia(ponto);

            criarFactory(repo).criarDiaTrabalho(new DataHoraMockStrategy(DateTime.Today), sessaoLogin);
        }
Пример #7
0
        public void relatorioDeveContarHorasDevedoras()
        {
            #region Arranging: Dias de trabalho

            var pontoRepository = new PontoDiaMockRepository();
            var horariosEntrada = new DataHoraMockListStrategy(
                new DateTime(2016, 6, 2, 10, 0, 0),
                new DateTime(2016, 6, 3, 10, 0, 0),
                new DateTime(2016, 6, 4, 10, 0, 0));
            var horariosSaida = new DataHoraMockListStrategy(true,
                                                             new DateTime(2016, 6, 2, 15, 0, 0),
                                                             new DateTime(2016, 6, 3, 15, 0, 0),
                                                             new DateTime(2016, 6, 4, 15, 0, 0));

            var diasDeTrabalho = new List <DiaTrabalho>();
            while (horariosEntrada.Count > 0)
            {
                diasDeTrabalho.Add(
                    iniciarEncerrarDia(pontoRepository, null, horariosEntrada.getDataHoraAtual(), horariosSaida));
                horariosSaida.dequeue();
            }

            #endregion

            #region Arranging: Jornada de trabalho

            var jornadaRepository = new JornadaTrabalhoMockRepository();
            var jornada           = criarJornadaTrabalho(jornadaRepository);
            jornada.cadastrarDia(DayOfWeek.Monday, DayOfWeek.Friday, new TimeSpan(10, 0, 0), new TimeSpan(15, 0, 0), new TimeSpan(0, 0, 0));
            jornadaRepository.save(jornada);

            #endregion

            //Arranging: Relatório Service
            var relatorio = criarRelatorioService(pontoRepository, null, jornadaRepository);
            var inicio    = new DateTime(2016, 6, 1);
            var fim       = new DateTime(2016, 6, 30);

            //Act
            var calendario = relatorio.gerarRelatorio(funcionario, inicio, fim);
            var diasTrabalhadosNoPeriodo = calendario.getDiasTrabalhados();

            //Assert
            Assert.AreEqual(30, calendario.Dias.Count);

            /*
             * Espera-se 5 horas nos dias úteis  |
             * 06/2016 possui 22 dias úteis      | 22 *  5  = Há 110 horas a trabalhar neste período
             * O funcionário só trabalhou 3 dias |
             * Porém, de dia útil, apenas 2      | 2  *  5  = 10 horas trabalhadas
             * Logo...                           | 110 - 10 = O funcionário deve 100 horas neste período
             */
            Assert.AreEqual(3, diasTrabalhadosNoPeriodo.Count);
            Assert.AreEqual(new TimeSpan(100, 0, 0), calendario.calcularHorasDevedoras());
        }
Пример #8
0
        public void diaNaoDeveIniciarSeHouverPontoAbertoEmDiasAnteriores()
        {
            var pontoAntigo = criarPontoTrabalhoDoDia(10, 6, 2016);
            var repositorio = new PontoDiaMockRepository();

            repositorio.save(pontoAntigo);

            //Vou simular o dia de hoje
            var service   = criarService(new DataHoraMockStrategy(13, 6, 2016), repositorio);
            var pontoHoje = service.iniciarDia();
        }
Пример #9
0
        public void relatorioDeveCalcularHorasTrabalhadas()
        {
            #region Arranging: Dias de trabalho

            var pontoRepository = new PontoDiaMockRepository();
            var horariosEntrada = new DataHoraMockListStrategy(
                new DateTime(2016, 6, 2, 10, 0, 0),
                new DateTime(2016, 6, 3, 10, 0, 0),
                new DateTime(2016, 6, 4, 10, 0, 0));
            var horariosSaida = new DataHoraMockListStrategy(true,
                                                             new DateTime(2016, 6, 2, 15, 0, 0),
                                                             new DateTime(2016, 6, 3, 15, 0, 0),
                                                             new DateTime(2016, 6, 4, 15, 0, 0));

            var diasDeTrabalho = new List <DiaTrabalho>();
            while (horariosEntrada.Count > 0)
            {
                diasDeTrabalho.Add(
                    iniciarEncerrarDia(pontoRepository, null, horariosEntrada.getDataHoraAtual(), horariosSaida));
                horariosSaida.dequeue();
            }

            #endregion

            #region Arranging: Jornada de trabalho

            var jornadaRepository = new JornadaTrabalhoMockRepository();
            var jornada           = criarJornadaTrabalho(jornadaRepository);
            jornada.cadastrarDia(DayOfWeek.Monday, DayOfWeek.Friday, new TimeSpan(10, 0, 0), new TimeSpan(15, 0, 0), new TimeSpan(0, 0, 0));
            jornadaRepository.save(jornada);

            #endregion

            //Arranging: Relatório Service
            var relatorio = criarRelatorioService(pontoRepository, null, jornadaRepository);
            var inicio    = new DateTime(2016, 6, 1);
            var fim       = new DateTime(2016, 6, 30);

            //Act
            var calendario = relatorio.gerarRelatorio(funcionario, inicio, fim);
            var diasTrabalhadosNoPeriodo = calendario.getDiasTrabalhados();

            //Assert
            Assert.AreEqual(30, calendario.Dias.Count);

            /*
             * O funcionário só trabalhou 5 horas em 3 dias, logo: 3 * 5 = 15 horas trabalhadas
             */
            Assert.AreEqual(3, diasTrabalhadosNoPeriodo.Count);
            Assert.AreEqual(new TimeSpan(15, 0, 0), calendario.calcularHorasTrabalhadas());
        }
Пример #10
0
        public void funcionarioNaoPodeTerDoisPontosParaMesmoDia()
        {
            var rep      = new PontoDiaMockRepository();
            var mesmoDia = new DataHoraMockStrategy(22, 8, 2014);
            var service  = criarService(mesmoDia, rep);

            var ponto = service.iniciarDia();

            service.encerrarDia(ponto);

            rep.save(ponto);

            service.iniciarDia();
        }
Пример #11
0
        public void administradorPodeCriarPontoParaFuncionarioNoDiaQueNãoExistir()
        {
            var repository = new PontoDiaMockRepository();
            var date       = DateTime.Today;
            var admLogado  = criarUsuarioAdministrador();
            var service    = criarService(repository: repository, logado: admLogado);

            var novoDiaTrabalho = service.criarPontoParaFuncionarioEm(funcionario, date);

            var ponto = repository.findPontoTrabalho(funcionario, date);

            Assert.AreEqual(date, ponto.Data);
            Assert.AreEqual(new TimeSpan(0, 0, 0), ponto.Inicio);
            Assert.AreEqual(new TimeSpan(0, 0, 0), ponto.Fim);
            Assert.AreEqual(novoDiaTrabalho.Data, ponto.Data);
            Assert.AreEqual(novoDiaTrabalho.Inicio, ponto.Inicio);
            Assert.AreEqual(novoDiaTrabalho.Fim, ponto.Fim);
            Assert.AreEqual(funcionario, novoDiaTrabalho.Funcionario);
        }
Пример #12
0
        public void relatorioDeveRetornarDiasFolga()
        {
            var repository = new PontoDiaMockRepository();
            var relatorio  = criarRelatorioService(repository);
            var inicio     = new DateTime(2016, 6, 1);
            var fim        = new DateTime(2016, 6, 30);
            var dataFolga1 = new DateTime(2016, 6, 2);
            var dataFolga2 = new DateTime(2016, 6, 18);

            var folga1     = criarFolgaEm(repository, dataFolga1);
            var folga2     = criarFolgaEm(repository, dataFolga2);
            var calendario = relatorio.gerarRelatorio(funcionario, inicio, fim);

            var folgasNoPeriodo = calendario.getFolgas();

            Assert.AreEqual(2, folgasNoPeriodo.Count);
            Assert.AreEqual(dataFolga1, folgasNoPeriodo[0].Data);
            Assert.AreEqual(dataFolga2, folgasNoPeriodo[1].Data);
            Assert.AreEqual(30, calendario.Dias.Count);
        }
Пример #13
0
        public void relatorioDeveRetornarFeriadosTrabalhados()
        {
            //Arranging: Feriado
            var feriadoRepository = new FeriadoMockRepository();
            var nomeFeriado       = "Dia de festa";
            var feriado           = criarFeriadoEm(feriadoRepository, nomeFeriado, 1, 6, 2016);

            //Arranging: Dia de trabalho
            var pontoRepository = new PontoDiaMockRepository();
            var dia             = criarPontoTrabalhoDoDia(pontoRepository, feriadoRepository, 1, 6, 2016, 9); //Horário de entrada
            var pontoService    = criarPontoService(pontoRepository, feriadoRepository, 1, 6, 2016, 18);      //Horário de saída

            pontoService.encerrarDia(dia);

            //Arranging: Relatório Service
            var relatorio = criarRelatorioService(pontoRepository, feriadoRepository);
            var inicio    = new DateTime(2016, 6, 1);
            var fim       = new DateTime(2016, 6, 30);

            //Act
            var calendario          = relatorio.gerarRelatorio(funcionario, inicio, fim);
            var feriadosNoPeriodo   = calendario.getFeriados();
            var pontosNoPeriodo     = calendario.getDiasTrabalhados();
            var feriadosTrabalhados = calendario.getFeriadosTrabalhados();
            var diaTrabalhado       = (pontosNoPeriodo[0].PontoDia as DiaTrabalho);

            //Assert
            Assert.AreEqual(30, calendario.Dias.Count);
            Assert.AreEqual(1, feriadosTrabalhados.Count);

            Assert.AreEqual(1, feriadosNoPeriodo.Count);
            Assert.AreEqual(nomeFeriado, feriadosNoPeriodo[0].Nome);
            Assert.AreEqual(new DateTime(2016, 6, 1), feriadosNoPeriodo[0].Data);

            Assert.AreEqual(1, pontosNoPeriodo.Count);
            Assert.AreEqual(new TimeSpan(9, 0, 0), diaTrabalhado.Inicio);
            Assert.AreEqual(new TimeSpan(18, 0, 0), diaTrabalhado.Fim);
            Assert.AreEqual(new TimeSpan(9, 0, 0), diaTrabalhado.calcularHorasTrabalhadas());
        }
Пример #14
0
        public void quandoCriarPontoEmDiaEspecificoTodosOsIntervalosDevemSerIniciadosComZero()
        {
            var repository = new PontoDiaMockRepository();
            var date       = DateTime.Today;
            var admLogado  = criarUsuarioAdministrador();
            var service    = criarService(repository: repository, logado: admLogado);

            var novoDiaTrabalho = service.criarPontoParaFuncionarioEm(funcionario, date);

            var ponto = repository.findPontoTrabalho(funcionario, date);

            Assert.AreEqual(date, ponto.Data);
            Assert.AreEqual(new TimeSpan(0, 0, 0), ponto.Inicio);
            Assert.AreEqual(new TimeSpan(0, 0, 0), ponto.Fim);
            Assert.AreEqual(novoDiaTrabalho.Data, ponto.Data);
            Assert.AreEqual(novoDiaTrabalho.Inicio, ponto.Inicio);
            Assert.AreEqual(novoDiaTrabalho.Fim, ponto.Fim);
            Assert.AreEqual(funcionario, novoDiaTrabalho.Funcionario);

            Assert.AreEqual(1, ponto.Intervalos.Count);
            Assert.AreEqual(new TimeSpan(0, 0, 0), ponto.Intervalos.First().Entrada);
            Assert.AreEqual(new TimeSpan(0, 0, 0), ponto.Intervalos.First().Saida);
        }
Пример #15
0
        public void pontoRepositoryDeveRecuperarDia()
        {
            var repo     = new PontoDiaMockRepository();
            var horarios = new DataHoraMockListStrategy(
                new DateTime(2016, 8, 13, 9, 0, 0),
                new DateTime(2016, 8, 13, 9, 0, 0),
                new DateTime(2016, 8, 13, 10, 0, 0),
                new DateTime(2016, 8, 13, 11, 0, 0),
                new DateTime(2016, 8, 13, 13, 0, 0)
                );
            var service = criarService(horarios, repo);

            var dia = service.iniciarDia();

            service.registrarIntervalo(tipoAlmoco, dia);
            service.registrarIntervalo(tipoAlmoco, dia);
            service.encerrarDia(dia);

            var diaRecuperado = repo.findPontoTrabalho(dia.Funcionario, dia.Data);

            Assert.AreEqual(dia.Data, diaRecuperado.Data);
            Assert.AreEqual(dia.Funcionario.Nome, diaRecuperado.Funcionario.Nome);
        }
Пример #16
0
        public void relatorioDeveContarHorasExtrasSeparandoPorValor()
        {
            #region Arranging: Feriado

            var feriadoRepository = new FeriadoMockRepository();
            var nomeFeriado       = "Dia de festa";
            var feriado           = criarFeriadoEm(feriadoRepository, nomeFeriado, 1, 6, 2016);

            #endregion

            #region Arranging: Dias de trabalho

            var pontoRepository = new PontoDiaMockRepository();
            var horariosEntrada = new DataHoraMockListStrategy(
                new DateTime(2016, 6, 1, 10, 0, 0),                                               //Feriado     -> 100%
                new DateTime(2016, 6, 2, 10, 0, 0),                                               //Quinta      -> 75%
                new DateTime(2016, 6, 3, 10, 0, 0),                                               //Sexta       -> 75%
                new DateTime(2016, 6, 4, 10, 0, 0),                                               //Sábado      -> 75%
                new DateTime(2016, 6, 5, 10, 0, 0));                                              //Domingo     -> 100%
            var horariosSaida = new DataHoraMockListStrategy(true,
                                                             new DateTime(2016, 6, 1, 18, 0, 0),  //Feriado     -> 100%
                                                             new DateTime(2016, 6, 2, 18, 0, 0),  //Quinta      -> 75%
                                                             new DateTime(2016, 6, 3, 18, 0, 0),  //Sexta       -> 75%
                                                             new DateTime(2016, 6, 4, 18, 0, 0),  //Sábado      -> 75%
                                                             new DateTime(2016, 6, 5, 18, 0, 0)); //Domingo     -> 100%

            var diasDeTrabalho = new List <DiaTrabalho>();
            while (horariosEntrada.Count > 0)
            {
                diasDeTrabalho.Add(
                    iniciarEncerrarDia(pontoRepository, feriadoRepository, horariosEntrada.getDataHoraAtual(), horariosSaida));
                horariosSaida.dequeue();
            }

            #endregion

            #region Arranging: Jornada de trabalho

            var jornadaRepository = new JornadaTrabalhoMockRepository();
            var jornada           = criarJornadaTrabalho(jornadaRepository);
            jornada.cadastrarDia(DayOfWeek.Monday, DayOfWeek.Friday, new TimeSpan(10, 0, 0), new TimeSpan(15, 0, 0), new TimeSpan(0, 0, 0));
            jornadaRepository.save(jornada);

            #endregion

            //Arranging: Relatório Service
            var relatorio = criarRelatorioService(pontoRepository, feriadoRepository, jornadaRepository);
            var inicio    = new DateTime(2016, 6, 1);
            var fim       = new DateTime(2016, 6, 30);

            //Act
            var calendario               = relatorio.gerarRelatorio(funcionario, inicio, fim);
            var feriadosNoPeriodo        = calendario.getFeriados();
            var diasTrabalhadosNoPeriodo = calendario.getDiasTrabalhados();

            //Assert
            Assert.AreEqual(30, calendario.Dias.Count);

            Assert.AreEqual(1, feriadosNoPeriodo.Count);
            Assert.AreEqual(nomeFeriado, feriadosNoPeriodo[0].Nome);
            Assert.AreEqual(new DateTime(2016, 6, 1), feriadosNoPeriodo[0].Data);

            Assert.AreEqual(5, diasTrabalhadosNoPeriodo.Count);
            Assert.AreEqual(new TimeSpan(14, 0, 0), calendario.calcularHorasExtras(75));
            Assert.AreEqual(new TimeSpan(16, 0, 0), calendario.calcularHorasExtras(100));
            Assert.AreEqual(new TimeSpan(30, 0, 0), calendario.calcularHorasExtras());
        }