public void Deve_Remunerar_Linearmente_Proporcional_Ao_Percentual_Configurado_Para_a_Regra()
        {
            //Arrange
            Random  rnd           = new Random();
            decimal multiplicador = rnd.Next(0, 100) / 100.0M;
            var     valorHora     = new Dinheiro(valor: 100M, moeda: Moeda.Real);
            Mock <ITabelaDePreco <int> > tabelaMock = GeraTabelaMock(valorHora);
            Profissional   favorecido    = LOMock.GeraProfissionalMock(id: 1, categoria: new Categoria(), nome: "LeMock");
            IFavorecimento favorecimento = LOMock.GeraFavorecimentoMock(new[] { favorecido });
            ParametrosDeRegraDeRemuneracao parametrosRegra1 = LOMock.GeraParametrosDeRegraDeRemuneracaoPorHoraMock(percentual: 100);
            ParametrosDeRegraDeRemuneracao parametrosRegra2 = LOMock.GeraParametrosDeRegraDeRemuneracaoPorHoraMock(percentual: 100 * multiplicador);
            IRegraDeRemuneracao            regra1           = LOMock.ConstroiRegraPorHora(parametrosRegra1, favorecimento, tabelaMock.Object);
            IRegraDeRemuneracao            regra2           = LOMock.ConstroiRegraPorHora(parametrosRegra2, favorecimento, tabelaMock.Object);

            Mock <IHoraPreProcessada> entregaMock = ConfiguraMockEntregaRemuneravel(5, favorecido);

            //Act
            IEnumerable <IRemuneracao> remuneracoesA = regra1.CalculaRemuneracoes(new IEntregaPreProcessada[] { entregaMock.Object });
            IEnumerable <IRemuneracao> remuneracoesB = regra2.CalculaRemuneracoes(new IEntregaPreProcessada[] { entregaMock.Object });
            IEnumerator <IRemuneracao> enumeratorA   = remuneracoesA.GetEnumerator();
            IRemuneracao RemuneracaoA = remuneracoesA.First();
            IEnumerator <IRemuneracao> enumeratorB = remuneracoesB.GetEnumerator();
            IRemuneracao RemuneracaoB = remuneracoesB.First();

            //Assert
            Assert.AreEqual(multiplicador * RemuneracaoA.ValorAjustado.Valor, RemuneracaoB.ValorAjustado.Valor);
        }
예제 #2
0
        public async Task Deve_Adicionar_Nova_Entrada_De_Regra_No_Banco_Desenv()
        {
            //Arrange
            IRepositorioDeRegras  repo = TesteInfraService.ServiceProvider.GetService <IRepositorioDeRegras>();
            Mock <IFavorecimento> favorecimentoMock = new Mock <IFavorecimento>();

            favorecimentoMock.SetupAllProperties();
            Profissional funcionario1 = new Profissional(1, null, "Fernando");
            Profissional funcionario2 = new Profissional(2, null, "Bronze");
            Profissional funcionario3 = new Profissional(3, null, "Cinco");

            Profissional[] funcionarios = new Profissional[] { funcionario1, funcionario2, funcionario3 };
            ParametrosDeRegraDeRemuneracao parametros = LOMock.GeraParametrosDeRegraDeRemuneracaoPorHoraMock(percentual: 50, vigencia: new PeriodoSimples(new DateTime(2018, 05, 01), new DateTime(2018, 08, 24)));
            RegraPorHora regraHora = null;//new RegraPorHora(parametros);
            int          idInserido;

            //Act
            idInserido = await repo.InserirAsync(regraHora);

            throw new NotImplementedException();
            //IRegraDeRemuneracao[] regraObtida = await repo.ObterAsync(new int[] { idInserido });

            ////Assert
            //Assert.IsNotNull(regraObtida[0]);
            //Assert.AreEqual(regraHora.Tipo, regraObtida[0].Tipo);
        }
예제 #3
0
        public async Task Deve_Vincular_Regras_A_Contrato()
        {
            //Arrange
            IRepositorioDeContratoDeRemuneracao repoContrato = TesteInfraService.ServiceProvider.GetService <IRepositorioDeContratoDeRemuneracao>();
            IRepositorioDeRegras  repoRegra         = TesteInfraService.ServiceProvider.GetService <IRepositorioDeRegras>();
            Mock <IFavorecimento> favorecimentoMock = new Mock <IFavorecimento>();

            favorecimentoMock.SetupAllProperties();
            Profissional funcionario1 = new Profissional(1, null, "Fernando");
            Profissional funcionario2 = new Profissional(2, null, "Bronze");
            Profissional funcionario3 = new Profissional(3, null, "Cinco");

            Profissional[] funcionarios = new Profissional[] { funcionario1, funcionario2, funcionario3 };
            ParametrosDeRegraDeRemuneracao parametros = LOMock.GeraParametrosDeRegraDeRemuneracaoPorHoraMock(percentual: 50, vigencia: new PeriodoSimples(new DateTime(2018, 05, 01), new DateTime(2018, 08, 24)));
            RegraPorHora regraHora1 = null;//new RegraPorHora(parametros);

            parametros = LOMock.GeraParametrosDeRegraDeRemuneracaoPorHoraMock(percentual: 60, vigencia: new PeriodoSimples(new DateTime(2018, 06, 01), new DateTime(2018, 08, 24)));
            RegraPorHora regraHora2 = null;//new RegraPorHora(parametros);

            parametros = LOMock.GeraParametrosDeRegraDeRemuneracaoPorHoraMock(percentual: 70, vigencia: new PeriodoSimples(new DateTime(2018, 07, 01), new DateTime(2018, 08, 24)));
            RegraPorHora          regraHora3     = null;// new RegraPorHora(parametros);
            ContratoDeRemuneracao contratoCriado = new ContratoDeRemuneracao(new PeriodoSimples(new DateTime(2018, 03, 01), new DateTime(2018, 04, 01)));

            //Act
            List <int> idsRegra = new List <int>
            {
                { await repoRegra.InserirAsync(regraHora1) },
                { await repoRegra.InserirAsync(regraHora2) },
                { await repoRegra.InserirAsync(regraHora3) }
            };
            int idContrato = await repoContrato.InserirAsync(contratoCriado);

            await repoContrato.AtualizaVinculosAsync(idContrato, idsRegra.ToArray());

            IContratoDeRemuneracao[] contratoObtido = await repoContrato.ObterAsync(new int[] { idContrato });

            IRegraDeRemuneracao[]             regrasObtidas    = (await repoRegra.ObterAsync(idsRegra.ToArray())).Select(p => p.Tipo.Construtor(null, null).ComParametros(p).ComFavorecimento(favorecimentoMock.Object).Construir()).ToArray();
            IEnumerable <IRegraDeRemuneracao> regrasVinculadas = contratoObtido[0].Regras;

            //Assert
            Assert.AreEqual(idContrato, contratoObtido[0].Id);
            Assert.IsNotNull(regrasVinculadas);
            Assert.IsTrue(regrasVinculadas.Count() > 0);
        }
        public void Deve_Remunerar_Favorecido_Conforme_Tabela()
        {
            //Arrange
            Profissional   favorecido               = LOMock.GeraProfissionalMock(id: 1, categoria: new Categoria(), nome: "LeMock");
            IFavorecimento favorecimento            = LOMock.GeraFavorecimentoMock(new[] { favorecido });
            var            valorHora                = new Dinheiro(valor: 100M, moeda: Moeda.Real);
            Mock <ITabelaDePreco <int> > tabelaMock = GeraTabelaMock(valorHora);

            ParametrosDeRegraDeRemuneracao parametrosRegra = LOMock.GeraParametrosDeRegraDeRemuneracaoPorHoraMock(percentual: 100M);

            IRegraDeRemuneracao       regra   = LOMock.ConstroiRegraPorHora(parametrosRegra, favorecimento, tabelaMock.Object);
            Mock <IHoraPreProcessada> entrega = ConfiguraMockEntregaRemuneravel(5, favorecido);

            //Act
            IEnumerable <IRemuneracao> remuneracoes = regra.CalculaRemuneracoes((new IEntregaPreProcessada[] { entrega.Object }));
            IRemuneracao Remuneracao = remuneracoes.First();

            //Assert
            Assert.AreEqual(favorecido.Id, Remuneracao.IdFavorecido);
            Assert.AreEqual(5 * valorHora.Valor, Remuneracao.ValorAjustado.Valor);
        }
        public void Nao_Remunerar_Entregas_De_Funcionarios_Que_Nao_Sao_Favorecidos()
        {
            //Arrange
            Profissional   favorecido               = LOMock.GeraProfissionalMock(id: 1, categoria: new Categoria(), nome: "LeMock");
            IFavorecimento favorecimento            = LOMock.GeraFavorecimentoMock(new[] { favorecido });
            Profissional   naoFavorecido            = LOMock.GeraProfissionalMock(id: 2, categoria: new Categoria(), nome: "LeNaoMock");
            var            valorHora                = new Dinheiro(valor: 100M, moeda: Moeda.Real);
            Mock <ITabelaDePreco <int> > tabelaMock = GeraTabelaMock(valorHora);

            var parametrosRegra = LOMock.GeraParametrosDeRegraDeRemuneracaoPorHoraMock();
            Mock <IHoraPreProcessada> entregaDeFavorecido    = ConfiguraMockEntregaRemuneravel(5, favorecido);
            Mock <IHoraPreProcessada> entregaDeNaoFavorecido = ConfiguraMockEntregaRemuneravel(5, naoFavorecido);

            IRegraDeRemuneracao regra = LOMock.ConstroiRegraPorHora(parametrosRegra, favorecimento, tabelaMock.Object);
            //Act
            IEnumerable <IRemuneracao> remuneracoes = regra.CalculaRemuneracoes(new IEntregaPreProcessada[] { entregaDeFavorecido.Object, entregaDeNaoFavorecido.Object });


            //Assert
            Assert.That(remuneracoes.Select(rem => rem.IdFavorecido), Has.No.Member(naoFavorecido.Id));
        }