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());
        }
Beispiel #2
0
        /// <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);
 }