public async Task <Person> RequestLeave(LeaveRequest leaveRequest) { var result = _orgGroupRepository.PersonWithOrgGroupChain(leaveRequest.PersonId); if (result.personOnLeave?.StaffId == null) { throw new UnauthorizedAccessException("Person requesting leave must be staff"); } leaveRequest.Approved = null; leaveRequest.ApprovedById = null; leaveRequest.CreatedDate = DateTime.Now; var leaveUsage = GetCurrentLeaveUseage(leaveRequest.Type, result.personOnLeave.Id); var isNew = leaveRequest.IsNew(); _entityService.Save(leaveRequest); try { await NotifyHr(leaveRequest, result.personOnLeave, leaveUsage); return(await ResolveLeaveRequestChain(leaveRequest, result.personOnLeave, result.department, result.devision, result.supervisorGroup, leaveUsage)); } catch { if (isNew) { _entityService.Delete(leaveRequest); } throw; } }
public void OrgGroupChainResolvesAsExpected() { var personFaker = _servicesFixture.PersonFaker(); var expectedPersonOnLeave = personFaker.Generate(); var expectedDepartment = AutoFaker.Generate <OrgGroup>(); var expectedDevision = AutoFaker.Generate <OrgGroup>(); var expectedDevisionSupervisor = personFaker.Generate(); expectedPersonOnLeave.Staff.OrgGroupId = expectedDepartment.Id; expectedDepartment.Supervisor = null; expectedDepartment.ParentId = expectedDevision.Id; expectedDevision.Supervisor = expectedDevisionSupervisor.Id; expectedDevision.ParentId = null; _dbConnection.Insert(expectedPersonOnLeave); _dbConnection.Insert(expectedPersonOnLeave.Staff); _dbConnection.Insert(expectedDepartment); _dbConnection.Insert(expectedDevision); _dbConnection.Insert(expectedDevisionSupervisor); _dbConnection.Insert(expectedDevisionSupervisor.Staff); //test method (var actualPersonOnLeave, var actualDepartment, var actualDevision, var actualSupervisorGroup) = _orgGroupRepository.PersonWithOrgGroupChain(expectedPersonOnLeave.Id); Assert.NotNull(actualPersonOnLeave); Assert.Equal(expectedPersonOnLeave.Id, actualPersonOnLeave.Id); Assert.NotNull(actualDepartment); Assert.Equal(expectedDepartment.Id, actualDepartment.Id); Assert.Null(actualDepartment.SupervisorPerson); Assert.NotNull(actualDevision); Assert.Equal(expectedDevision.Id, actualDevision.Id); Assert.Equal(expectedDevisionSupervisor.Id, actualDevision.SupervisorPerson.Id); Assert.Null(actualSupervisorGroup); }