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)); }
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")); }
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); }
/// <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}"); } }