예제 #1
0
        public IActionResult Create([FromBody] CompensationRequest compensationRequest)
        {
            _logger.LogDebug($"Received Create Compensation request.");

            CompensationResponse compensationResponse;

            try
            {
                compensationResponse = _compensationService.Create(compensationRequest);
            }
            catch (EmployeeNotFoundException e)
            {
                return(StatusCode((int)HttpStatusCode.NotFound, e.Message));
            }
            catch (SalaryIsLessThanZeroException e)
            {
                return(StatusCode((int)HttpStatusCode.BadRequest, e.Message));
            }
            catch (EffectiveDateCouldNotBeParsedException e)
            {
                return(StatusCode((int)HttpStatusCode.BadRequest, e.Message));
            }
            catch (Exception e)
            {
                return(StatusCode((int)HttpStatusCode.InternalServerError, e.Message));
            }

            return(CreatedAtRoute(new { employeeId = compensationRequest.EmployeeId }, compensationResponse));
        }
예제 #2
0
        public void CreateEmployee_Returns_Created()
        {
            // Arrange
            var compensationRequest = new CompensationRequest()
            {
                EffectiveDate = "04-01-2021",
                EmployeeId    = "b7839309-3348-463b-a7e3-5de1c168beb3",
                Salary        = 100000
            };

            var requestContent = new JsonSerialization().ToJson(compensationRequest);

            // Execute
            var postRequestTask = _httpClient.PostAsync("api/compensation",
                                                        new StringContent(requestContent, Encoding.UTF8, "application/json"));
            var response = postRequestTask.Result;

            // Assert
            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);

            var newCompensation = response.DeserializeContent <CompensationResponse>();

            Assert.IsNotNull(newCompensation.Employee);
            Assert.AreEqual(compensationRequest.EmployeeId, newCompensation.Employee.EmployeeId);
            Assert.AreEqual(compensationRequest.Salary, newCompensation.Salary);
            Assert.AreEqual(compensationRequest.EffectiveDate, newCompensation.EffectiveDate.ToString("MM-dd-yyyy"));
        }
예제 #3
0
        public void Create_Returns_BadRequest_InvalidSalary()
        {
            // Arrange
            var compensationRequest = new CompensationRequest()
            {
                EffectiveDate = "04-01-2021",
                EmployeeId    = "b7839309-3348-463b-a7e3-5de1c168beb3",
                Salary        = -100000
            };

            var requestContent = new JsonSerialization().ToJson(compensationRequest);

            // Execute
            var postRequestTask = _httpClient.PostAsync("api/compensation",
                                                        new StringContent(requestContent, Encoding.UTF8, "application/json"));
            var response = postRequestTask.Result;

            // Assert
            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
        }
예제 #4
0
        /// <summary>
        /// Saves a Compensation for an Employee.
        /// </summary>
        /// <param name="compensationRequest">The Compensation to be created.</param>
        /// <returns>null: in case of an error;
        /// Compensation: otherwise.</returns>
        /// <exception cref="EmployeeNotFoundException">If employee Id is invalid.</exception>
        /// <exception cref="SalaryIsLessThanZeroException">If salary is invalid.</exception>
        /// <exception cref="EffectiveDateCouldNotBeParsedException">If effective date is not in the right format.</exception>
        /// <exception cref="Exception">In case of some other error.</exception>
        public CompensationResponse Create(CompensationRequest compensationRequest)
        {
            try
            {
                if (compensationRequest == null)
                {
                    throw new Exception("Compensation not provided.");
                }

                var employeeExists = _employeeRepository.Exists(compensationRequest.EmployeeId);
                if (!employeeExists)
                {
                    throw new EmployeeNotFoundException($"Employee [Id: '{compensationRequest.EmployeeId}'] not found.");
                }

                if (compensationRequest.Salary < 0)
                {
                    throw new SalaryIsLessThanZeroException($"Salary [{compensationRequest.Salary}] cannot be Negative.");
                }

                string pattern     = "MM-dd-yyyy";
                var    isValidDate = DateTime.TryParseExact(compensationRequest.EffectiveDate, pattern, null, System.Globalization.DateTimeStyles.None, out DateTime effectiveDate);
                if (!isValidDate)
                {
                    throw new EffectiveDateCouldNotBeParsedException($"Invalid Effective Date [{compensationRequest.EffectiveDate}] format. Should be of the form: {pattern}.");
                }

                var compensation = new Compensation
                {
                    EffectiveDate = effectiveDate,
                    EmployeeId    = compensationRequest.EmployeeId,
                    Salary        = compensationRequest.Salary
                };

                _compensationRespository.Add(compensation);
                _compensationRespository.SaveAsync().Wait();

                var compensationResponse = BuildCompensationResponse(compensation);

                return(compensationResponse);
            }
            catch (EmployeeNotFoundException e)
            {
                _logger.LogError(e.Message);
                throw e;
            }
            catch (SalaryIsLessThanZeroException e)
            {
                _logger.LogError(e.Message);
                throw e;
            }
            catch (EffectiveDateCouldNotBeParsedException e)
            {
                _logger.LogError(e.Message);
                throw e;
            }
            catch (Exception e)
            {
                _logger.LogError(e.Message);
                throw new Exception($"Something went wrong!. | {e.Message}");
            }
        }