public void LeaveReportAdminTest() { var response = Task.FromResult(_stringConstant.UserDetailsFromOauthServer); var requestUrl = string.Format("{0}{1}", _stringConstant.LoginUserDetail, _stringConstant.TestUserName); _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); var requestIdUrl = string.Format("{0}{1}", _stringConstant.UserDetailUrl, _stringConstant.EmployeeIdForTest); _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestIdUrl, _stringConstant.TestAccessToken)).Returns(response); leave.EmployeeId = _stringConstant.EmployeeIdForTest; _leaveRequestRepository.ApplyLeave(leave); var leaveReports = _leaveReportRepository.LeaveReport(_stringConstant.TestAccessToken, _stringConstant.TestUserName).Result; Assert.Equal(1, leaveReports.Count()); }
/// <summary> /// Method to apply leave /// </summary> /// <param name="slackRequest"></param> /// <param name="userName"></param> /// <returns>leaveRequest</returns> private async Task <string> LeaveApply(List <string> slackRequest, SlashCommand leave, string accessToken) { try { LeaveType leaveTypeExcepted; DateTime dateTime; User user = new User(); // checking whether string can convert to date of indian culture or not, if return true then further process will be conduct var dateConvertorResult = DateTime.TryParseExact(slackRequest[3], "dd-MM-yyyy", CultureInfo.CreateSpecificCulture("hi-IN"), DateTimeStyles.None, out dateTime); if (dateConvertorResult) { // converting string to date of indian culture var startDate = DateTime.ParseExact(slackRequest[3], "dd-MM-yyyy", CultureInfo.CreateSpecificCulture("hi-IN")); LeaveRequest leaveRequest = new LeaveRequest(); // checking whether string can convert to leave type or not, if return true then further process will be conduct var leaveTypeConvertor = Enum.TryParse(slackRequest[1], out leaveTypeExcepted); if (leaveTypeConvertor) { // converting string to leave type of indian culture var leaveType = (LeaveType)Enum.Parse(typeof(LeaveType), slackRequest[1]); switch (leaveType) { case LeaveType.cl: { // checking whether string can convert to date of indian culture or not, if return true then further process will be conduct var firstDateConvertorResult = DateTime.TryParseExact(slackRequest[4], "dd-MM-yyyy", CultureInfo.CreateSpecificCulture("hi-IN"), DateTimeStyles.None, out dateTime); var secondDateConvertorResult = DateTime.TryParseExact(slackRequest[5], "dd-MM-yyyy", CultureInfo.CreateSpecificCulture("hi-IN"), DateTimeStyles.None, out dateTime); if (firstDateConvertorResult && secondDateConvertorResult) { // converting string to date time of indian culture var endDate = DateTime.ParseExact(slackRequest[4], "dd-MM-yyyy", CultureInfo.CreateSpecificCulture("hi-IN")); var reJoinDate = DateTime.ParseExact(slackRequest[5], "dd-MM-yyyy", CultureInfo.CreateSpecificCulture("hi-IN")); // get user details from oAuth server user = await _projectUser.GetUserByUsername(leave.Username, accessToken); leaveRequest.EndDate = endDate; leaveRequest.RejoinDate = reJoinDate; leaveRequest.Status = Condition.Pending; leaveRequest.Type = leaveType; leaveRequest.Reason = slackRequest[2]; leaveRequest.FromDate = startDate; leaveRequest.CreatedOn = DateTime.UtcNow; // if user doesn't exist in OAuth server then user can't apply leave if (user.Id != null) { leaveRequest.EmployeeId = user.Id; _leaveRepository.ApplyLeave(leaveRequest); replyText = _attachmentRepository.ReplyText(leave.Username, leaveRequest); // method to send slack notification and email to team leaders and management await _client.SendMessageWithAttachmentIncomingWebhook(leaveRequest, accessToken, replyText, leave.Username); } else { // if user doesn't exist in OAuth server then user can't apply leave, will get this message replyText = _stringConstant.SorryYouCannotApplyLeave; } } else { // if date is not proper than date format error message will be send to user replyText = _stringConstant.DateFormatErrorMessage; } } break; case LeaveType.sl: { bool IsAdmin = false; User newUser = new User(); user = await _projectUser.GetUserByUsername(leave.Username, accessToken); if (slackRequest.Count > 4) { IsAdmin = await _projectUser.UserIsAdmin(user.Email, accessToken); if (IsAdmin) { // get user details from oAuth server for other user newUser = await _projectUser.GetUserByUsername(slackRequest[4], accessToken); } else { replyText = _stringConstant.AdminErrorMessageApplySickLeave; } } else { // get user details from oAuth server for own newUser = await _projectUser.GetUserByUsername(leave.Username, accessToken); leaveRequest.EndDate = startDate; leaveRequest.RejoinDate = startDate.AddDays(1); } leaveRequest.Status = Condition.Approved; leaveRequest.Type = leaveType; leaveRequest.Reason = slackRequest[2]; leaveRequest.FromDate = startDate; leaveRequest.CreatedOn = DateTime.UtcNow; // if user doesn't exist in OAuth server then user can't apply leave if (newUser.Id != null) { leaveRequest.EmployeeId = newUser.Id; _leaveRepository.ApplyLeave(leaveRequest); replyText = _attachmentRepository.ReplyTextSick(newUser.FirstName, leaveRequest); await _client.SendMessageWithoutButtonAttachmentIncomingWebhook(leaveRequest, accessToken, replyText, newUser.FirstName); if (IsAdmin) { _client.SendSickLeaveMessageToUserIncomingWebhook(leaveRequest, user.Email, replyText, newUser); } } else { // if user doesn't exist in OAuth server then user can't apply leave, will get this message replyText += _stringConstant.SorryYouCannotApplyLeave; } } break; } } else { // if leave type is not proper than not of leave type format error message will be send to user replyText = _stringConstant.NotTypeOfLeave; } } else { // if date is not proper than date format error message will be send to user replyText = _stringConstant.DateFormatErrorMessage; } } catch (SmtpException ex) { // error message will be send to email. But leave will be applied replyText = string.Format("{0}. {1}", _stringConstant.ErrorWhileSendingEmail, ex.Message.ToString()); } catch (Exception ex) { replyText = ex.Message; } return(replyText); }
public void ApplyLeave() { _leaveRequestRepository.ApplyLeave(leave); Assert.Equal(1, leave.Id); }