public void Deve_VerificarAlicotaMaxima_QuandoGerar_ContraCheque()
        {
            var funcionario       = CriaEmployeeFakePobre();
            var funcionario_salvo = _service.Criar(funcionario);

            var servicePayCheck = new PaycheckService(funcionario_salvo);
            var paycheck        = servicePayCheck.GetContraCheque();
        }
        private Paymentslip GeraContraChequeFuncionarioPobre()
        {
            var funcionario       = CriaEmployeeFakePobre();
            var funcionario_salvo = _service.Criar(funcionario);
            var servicePayCheck   = new PaycheckService(funcionario_salvo);

            return(servicePayCheck.GetContraCheque());
        }
        public void Deve_VerificarSalarioFuncionario_QuandoGerar_ContraCheque()
        {
            var funcionario       = CriaEmployeeFakePobre();
            var funcionario_salvo = _service.Criar(funcionario);

            var servicePayCheck = new PaycheckService(funcionario_salvo);
            var paycheck        = servicePayCheck.GetContraCheque();

            Assert.AreEqual(paycheck.Employee.SalarioBruto, funcionario_salvo.SalarioBruto);
        }
        public async Task <IActionResult> Show(int id)
        {
            var    chave       = id.ToString();
            string existeChave = String.Empty;

            try
            {
                existeChave = await _cacheDistribuido.GetStringAsync(chave);
            }
            catch
            {
                existeChave = String.Empty;
                // logger
            }

            Paymentslip slip;

            if (!string.IsNullOrEmpty(existeChave))
            {
                return(Ok(existeChave));
            }
            else
            {
                // busca o usuario
                var employee = funcionarioService.GetFuncionarioPorId(id);


                if (employee != null)
                {
                    // cria servico caso exista funcionario
                    var service = new PaycheckService(employee);

                    // gera contracheque
                    slip = service.GetContraCheque();

                    // adiciona obj serializado ao redis
                    try
                    {
                        var cacheSettings = new DistributedCacheEntryOptions();

                        cacheSettings.SetAbsoluteExpiration(TimeSpan.FromHours(1));
                        await _cacheDistribuido.SetStringAsync(chave, JsonConvert.SerializeObject(slip));
                    }
                    catch
                    {
                    }
                }
                else
                {
                    return(NotFound("Funcionario nao localizado"));
                }
            }
            return(Ok(slip));
        }