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