예제 #1
0
        public static PontoFactory criarPontoFactory(IPontoDiaRepository pontoRepository = null, IFeriadoRepository feriadoRepository = null)
        {
            if (feriadoRepository == null)
            {
                feriadoRepository = new FeriadoMockRepository();
            }

            return(criarPontoFactory(new FeriadoService(feriadoRepository), pontoRepository));
        }
예제 #2
0
        private RelatorioService criarRelatorioService(IPontoDiaRepository pontoRepository = null, IFeriadoRepository feriadoRepository = null, IJornadaTrabalhoRepository jornadaRepository = null)
        {
            if (pontoRepository == null)
            {
                pontoRepository = new PontoDiaMockRepository();
            }

            if (feriadoRepository == null)
            {
                feriadoRepository = new FeriadoMockRepository();
            }

            if (jornadaRepository == null)
            {
                jornadaRepository = new JornadaTrabalhoMockRepository();
            }

            return(new RelatorioService(pontoRepository, new FeriadoService(feriadoRepository), jornadaRepository, new UnitOfWorkMock()));
        }
예제 #3
0
        public void relatorioDeveRetornarFeriados()
        {
            var feriadoRepository = new FeriadoMockRepository();
            var nomeFeriado       = "Dia de festa";
            var feriado           = criarFeriadoEm(feriadoRepository, nomeFeriado, 1, 6, 2016);
            var relatorio         = criarRelatorioService(null, feriadoRepository);
            var inicio            = new DateTime(2016, 6, 1);
            var fim = new DateTime(2016, 6, 30);

            feriadoRepository.save(feriado);
            var calendario = relatorio.gerarRelatorio(funcionario, inicio, fim);

            var feriadosNoPeriodo = calendario.getFeriados();

            Assert.AreEqual(1, feriadosNoPeriodo.Count);
            Assert.AreEqual(nomeFeriado, feriadosNoPeriodo[0].Nome);
            Assert.AreEqual(new DateTime(2016, 6, 1), feriadosNoPeriodo[0].Data);
            Assert.AreEqual(30, calendario.Dias.Count);
        }
예제 #4
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());
        }
예제 #5
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());
        }