public async Task <IActionResult> CalculateBonus([FromBody] CalculateBonusDto request) { if (request == null || request.SelectedEmployeeId == 0) { return(ErrorResponse()); } var employee = await _employeeService.GetEmployee(request.SelectedEmployeeId); if (employee == null) { return(ErrorResponse()); } var totalSalary = _employeeService.GetTotalSalary(); var bonusAllocation = _bonusPoolService.Calculate(request.TotalBonusPoolAmount, totalSalary, employee.Salary); var result = new BonusPoolCalculatorResultDto { Employee = new EmployeeDto(employee), Amount = bonusAllocation }; return(Ok(result)); }
public async Task CalculateBonus_Should_Return_Null_When_EmployeeId_Is_Zero() { // Arrange var bonusPoolServiceMock = new Mock <IBonusPoolService>(); int selectedEmployeeId = 0; int totalCompanySalaryBudget = 100000; var request = new CalculateBonusDto { SelectedEmployeeId = selectedEmployeeId, TotalBonusPoolAmount = totalCompanySalaryBudget }; bonusPoolServiceMock .Setup(x => x.CalculateAsync(It.IsAny <int>(), It.IsAny <int>())) .ReturnsAsync((BonusPoolCalculatorResultDto)null); var controller = new BonusPoolController(bonusPoolServiceMock.Object); // Act var result = await controller.CalculateBonus(request); var objectResult = result as ObjectResult; // Assert Assert.IsNull(objectResult.Value); Assert.IsInstanceOfType(result, typeof(IActionResult)); }
public async Task <IActionResult> CalculateBonus([FromBody] CalculateBonusDto request) { var bonusPoolService = new BonusPoolService(); return(Ok(await bonusPoolService.CalculateAsync( request.TotalBonusPoolAmount, request.SelectedEmployeeId))); }
public async Task CalculateBonus_Should_Return_Correct_Results() { // Arrange var bonusPoolServiceMock = new Mock <IBonusPoolService>(); int selectedEmployeeId = 1; int totalCompanySalaryBudget = 100000; int bonusPoolAmount = 10000; var request = new CalculateBonusDto { SelectedEmployeeId = selectedEmployeeId, TotalBonusPoolAmount = totalCompanySalaryBudget }; var employee = new Employee(1, "Amanda Woods", "Product Owner", 60000, 1); var department = new DepartmentDto() { Title = "IT", Description = "The software development department for the company" }; var mappedEmployee = new EmployeeDto() { Id = 1, Fullname = "Amanda Woods", JobTitle = "Product Owner", Salary = 60000, Department = department }; decimal expectedEmployeeBonusPercentage = (decimal)employee.Salary / (decimal)totalCompanySalaryBudget; int expectedBonusAmount = (int)(expectedEmployeeBonusPercentage * bonusPoolAmount); var mappedBonusPoolCalculatorResult = new BonusPoolCalculatorResultDto { Employee = mappedEmployee, Amount = expectedBonusAmount }; bonusPoolServiceMock .Setup(x => x.CalculateAsync(It.IsAny <int>(), It.IsAny <int>())) .ReturnsAsync(mappedBonusPoolCalculatorResult); var controller = new BonusPoolController(bonusPoolServiceMock.Object); // Act var result = await controller.CalculateBonus(request); var objectResult = result as ObjectResult; var expectedStatusCode = StatusCodes.Status200OK; // Assert Assert.IsNotNull(result); Assert.IsInstanceOfType(result, typeof(IActionResult)); Assert.AreEqual(expectedStatusCode, objectResult.StatusCode); Assert.AreEqual(mappedBonusPoolCalculatorResult, objectResult.Value); }