From a7f4d580507ebe5b6a1ad8e1abfc62dd75f3957b Mon Sep 17 00:00:00 2001 From: Siddhartha Shaw Date: Mon, 13 Feb 2017 16:58:02 +0530 Subject: [PATCH 1/2] ILeaveReportRepository.cs - removed used of access token as parameter LeaveReportRepository.cs - removed used of access token as parameter IOauthCallHttpContextRespository.cs - separated the method from OAuthCallRepository which use HttpContext OauthCallHttpContextRespository.cs - separated the method from OAuthCallRepository which use HttpContext IOauthCallRespository.cs - separated the method from OAuthCallRepository which use HttpContext OauthCallRespository.cs - separated the method from OAuthCallRepository which use HttpContext IScrumReportRepository.cs - removed used of access token as parameter ScrumReportRepository.cs - removed used of access token as parameter SlackRepository.cs - used GetUserByUserIdAsync instead of GetUserByEmployeeIdAsync ITaskMailReportRepository.cs - separated the method of task mail report from task mail repository TaskMailReportRepository.cs - separated the method of task mail report from task mail repository ITaskMailRepository.cs - separated the method of task mail report from task mail repository TaskMailRepository.cs - separated the method of task mail report from task mail repository AutofacConfig.cs(Test) - Added new services and mocking of HttpContext LeaveReportRepositoryTest.cs - added mocking of HttpContext and updated test cases OauthCallsRepositoryTest.cs - added mocking of HttpContext and updated test cases ScrumReportRepositoryTest.cs - added mocking of HttpContext and updated test cases TaskMailRepositoryTest.cs - added mocking of HttpContext and updated test cases LeaveReportController.cs - removed the use of access token as parameter ScrumReportController.cs - removed the use of access token as parameter TaskReportController.cs - removed the use of access token as parameter AutofacConfig.cs - register services of OauthCallHttpContextRespository, TaskMailReportRepository and AutofacWebTypesModule Fixes - #102 --- .../ILeaveReportRepository.cs | 10 +- .../LeaveReportRepository.cs | 47 ++- .../IOauthCallHttpContextRespository.cs | 52 +++ .../IOauthCallsRepository.cs | 53 --- .../OauthCallHttpContextRespository.cs | 155 +++++++++ .../OauthCallsRepository.cs | 110 ------ .../Promact.Core.Repository.csproj | 4 + .../IScrumReportRepository.cs | 16 +- .../ScrumReportRepository.cs | 28 +- .../SlackRepository/SlackRepository.cs | 2 +- .../ITaskMailReportRepository.cs | 39 +++ .../TaskMailReportRepository.cs | 317 ++++++++++++++++++ .../TaskMailRepository/ITaskMailRepository.cs | 30 -- .../TaskMailRepository/TaskMailRepository.cs | 264 --------------- .../Promact.Core.Test/AutofacConfig.cs | 10 +- .../LeaveReportRepositoryTest.cs | 85 +++-- .../OauthCallsRepositoryTest.cs | 74 +++- .../ScrumReportRepositoryTest.cs | 93 +++-- .../TaskMailRepositoryTest.cs | 89 +++-- .../Controllers/LeaveReportController.cs | 9 +- .../Controllers/ScrumReportController.cs | 8 +- .../Controllers/TaskReportController.cs | 9 +- .../App_Start/AutofacConfig.cs | 4 + Slack.Automation/Promact.Erp.Web/Web.config | 2 +- 24 files changed, 885 insertions(+), 625 deletions(-) create mode 100644 Slack.Automation/Promact.Core.Repository/OauthCallsRepository/IOauthCallHttpContextRespository.cs create mode 100644 Slack.Automation/Promact.Core.Repository/OauthCallsRepository/OauthCallHttpContextRespository.cs create mode 100644 Slack.Automation/Promact.Core.Repository/TaskMailReportRepository/ITaskMailReportRepository.cs create mode 100644 Slack.Automation/Promact.Core.Repository/TaskMailReportRepository/TaskMailReportRepository.cs diff --git a/Slack.Automation/Promact.Core.Repository/LeaveReportRepository/ILeaveReportRepository.cs b/Slack.Automation/Promact.Core.Repository/LeaveReportRepository/ILeaveReportRepository.cs index 6e8b899a..431a2b56 100644 --- a/Slack.Automation/Promact.Core.Repository/LeaveReportRepository/ILeaveReportRepository.cs +++ b/Slack.Automation/Promact.Core.Repository/LeaveReportRepository/ILeaveReportRepository.cs @@ -9,17 +9,15 @@ public interface ILeaveReportRepository /// /// Method that returns the list of employees with their leave status based on their roles /// - /// - /// + /// userId of user /// List of employees with leave status based on roles - Task> LeaveReportAsync(string accessToken,string userId); + Task> LeaveReportAsync(string userId); /// /// Method that returns the details of leave for an employee /// - /// - /// + /// userId of user /// Details of leave for an employee - Task> LeaveReportDetailsAsync(string employeeId, string accessToken); + Task> LeaveReportDetailsAsync(string employeeId); } } diff --git a/Slack.Automation/Promact.Core.Repository/LeaveReportRepository/LeaveReportRepository.cs b/Slack.Automation/Promact.Core.Repository/LeaveReportRepository/LeaveReportRepository.cs index 54433eaf..437ce513 100644 --- a/Slack.Automation/Promact.Core.Repository/LeaveReportRepository/LeaveReportRepository.cs +++ b/Slack.Automation/Promact.Core.Repository/LeaveReportRepository/LeaveReportRepository.cs @@ -14,12 +14,13 @@ public class LeaveReportRepository : ILeaveReportRepository #region Private Variables private readonly IRepository _leaveRequest; - private readonly IOauthCallsRepository _oauthCallsRepository; + private readonly IOauthCallHttpContextRespository _oauthCallsRepository; private readonly IStringConstantRepository _stringConstant; #endregion #region Constructor - public LeaveReportRepository(IRepository leaveRequest, IStringConstantRepository stringConstant, IOauthCallsRepository oauthCallsRepository) + public LeaveReportRepository(IRepository leaveRequest, IStringConstantRepository stringConstant, + IOauthCallHttpContextRespository oauthCallsRepository) { _leaveRequest = leaveRequest; _stringConstant = stringConstant; @@ -31,16 +32,15 @@ public LeaveReportRepository(IRepository leaveRequest, IStringCons /// /// Method to return the list of leave reports /// - /// - /// + /// list of LeaveRequest /// List of leave reports - private async Task> GetLeaveReportListAsync(List distinctLeaveRequests, string accessToken) + private async Task> GetLeaveReportListAsync(List distinctLeaveRequests) { List leaveReports = new List(); foreach (var leaveRequest in distinctLeaveRequests) { //Get details of the employee from oauth server - User user = await GetEmployeeByIdAsync(leaveRequest.EmployeeId, accessToken); + User user = await GetEmployeeByIdAsync(leaveRequest.EmployeeId); if (user != null) { LeaveReport leaveReport = new LeaveReport @@ -65,7 +65,7 @@ private async Task> GetLeaveReportListAsync(List /// /// Method to calculate number of casual leaves used by a specific employee /// - /// + /// userId of user /// Number of casual leaves utilised private async Task GetUtilisedCasualLeavesByEmployeeAsync(string employeeId) { @@ -86,7 +86,7 @@ private async Task GetUtilisedCasualLeavesByEmployeeAsync(string employe /// /// Method to calculate number of sick leaves used by a specific employee /// - /// + /// userId of user /// Number of sick leaves utilised private async Task GetUtilisedSickLeavesByEmployeeAsync(string employeeId) { @@ -107,12 +107,11 @@ private async Task GetUtilisedSickLeavesByEmployeeAsync(string employeeI /// /// Method to get user details from the Oauth server using their id and access token /// - /// - /// + /// userId of user /// User details - private async Task GetEmployeeByIdAsync(string employeeId, string accessToken) + private async Task GetEmployeeByIdAsync(string employeeId) { - User user = await _oauthCallsRepository.GetUserByEmployeeIdAsync(employeeId, accessToken); + User user = await _oauthCallsRepository.GetUserByEmployeeIdAsync(employeeId); return user; } @@ -122,17 +121,16 @@ private async Task GetEmployeeByIdAsync(string employeeId, string accessTo /// /// Method that returns leave report based on the role of logged in user /// - /// - /// - /// Leave report - public async Task> LeaveReportAsync(string accessToken,string userId ) + /// userId of user + /// list of Leave report + public async Task> LeaveReportAsync(string userId) { //Get all approved leave requests List leaveRequests = _leaveRequest.GetAll().ToList().FindAll(x => x.Status.Equals(Condition.Approved)); List leaveReports = new List(); //Get details of logged in user - User loginUser = await GetEmployeeByIdAsync(userId, accessToken); + User loginUser = await GetEmployeeByIdAsync(userId); //Check if there exists any approved leave request if(leaveRequests.Any()) @@ -142,24 +140,24 @@ public async Task> LeaveReportAsync(string accessToken, if (loginUser.Role.Equals(_stringConstant.Admin)) { List distinctLeaveRequests = leaveRequests.GroupBy(x => x.EmployeeId).Select(x => x.FirstOrDefault()).ToList(); - leaveReports = await GetLeaveReportListAsync(distinctLeaveRequests, accessToken); + leaveReports = await GetLeaveReportListAsync(distinctLeaveRequests); return leaveReports; } //For employee, only his leave report else if (loginUser.Role.Equals(_stringConstant.Employee)) { List distinctLeaveRequests = leaveRequests.FindAll(x => x.EmployeeId == loginUser.Id); - leaveReports = await GetLeaveReportListAsync(distinctLeaveRequests, accessToken); + leaveReports = await GetLeaveReportListAsync(distinctLeaveRequests); return leaveReports; } //For teamleader, leave report of all the team member(s) else if (loginUser.Role.Equals(_stringConstant.TeamLeader)) { - List projectUsers = await _oauthCallsRepository.GetProjectUsersByTeamLeaderIdAsync(loginUser.Id, accessToken); + List projectUsers = await _oauthCallsRepository.GetProjectUsersByTeamLeaderIdAsync(loginUser.Id); foreach (var projectUser in projectUsers) { List distinctLeaveRequests = leaveRequests.Where(x => x.EmployeeId.Contains(projectUser.Id)).GroupBy(x => x.EmployeeId).Select(x => x.FirstOrDefault()).ToList(); - List leaveReport = await GetLeaveReportListAsync(distinctLeaveRequests, accessToken); + List leaveReport = await GetLeaveReportListAsync(distinctLeaveRequests); leaveReports.AddRange(leaveReport); } return leaveReports; @@ -172,13 +170,12 @@ public async Task> LeaveReportAsync(string accessToken, /// /// Method that returns the details of leave for an employee /// - /// - /// + /// userId of user /// Details of leave for an employee - public async Task > LeaveReportDetailsAsync(string employeeId,string accessToken) + public async Task > LeaveReportDetailsAsync(string employeeId) { //Get user details - User user = await GetEmployeeByIdAsync(employeeId,accessToken); + User user = await GetEmployeeByIdAsync(employeeId); List leaveReportDetails = new List(); if (user != null) diff --git a/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/IOauthCallHttpContextRespository.cs b/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/IOauthCallHttpContextRespository.cs new file mode 100644 index 00000000..2f721d8f --- /dev/null +++ b/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/IOauthCallHttpContextRespository.cs @@ -0,0 +1,52 @@ +using Promact.Erp.DomainModel.ApplicationClass; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Promact.Core.Repository.OauthCallsRepository +{ + public interface IOauthCallHttpContextRespository + { + /// + /// Method to call an api from project oAuth server and get Employee detail by their Id. - GA + /// + /// id of employee + /// user's access token from Promact OAuth Server + /// User Details. Object of User + Task GetUserByEmployeeIdAsync(string employeeId); + + /// + /// Method to call an api from oauth server and get all the projects under a specific teamleader id along with users in it. - GA + /// + /// id of the team leader + /// list of users in a project.List of object of User + Task> GetProjectUsersByTeamLeaderIdAsync(string teamLeaderId); + + /// + /// Method is used to call an api from oauth server and return list of all the projects. - GA + /// + /// user's access token from Promact OAuth Server + /// list of all the projects + Task> GetAllProjectsAsync(); + + /// + /// Method to call an api from oauth server and get the details of a project using projecId. - GA + /// + /// id of project + /// Details of a project + Task GetProjectDetailsAsync(int projectId); + + /// + /// Used to get user role. - RS + /// + /// id of user + /// user details. List of object of UserRoleAc + Task> GetUserRoleAsync(string userId); + + /// + /// List of employee under this employee. - RS + /// + /// id of user + /// List of user. List of object of UserRoleAc + Task> GetListOfEmployeeAsync(string userId); + } +} diff --git a/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/IOauthCallsRepository.cs b/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/IOauthCallsRepository.cs index 1cb236bb..ea9e1978 100644 --- a/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/IOauthCallsRepository.cs +++ b/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/IOauthCallsRepository.cs @@ -32,15 +32,6 @@ public interface IOauthCallsRepository /// user's access token from Promact OAuth Server /// management details.List of object of User Task> GetManagementUserNameAsync(string accessToken); - - - /// - /// Used to get user role. - RS - /// - /// id of user - /// user's access token from Promact OAuth Server - /// user details. List of object of UserRoleAc - Task> GetUserRoleAsync(string userId, string accessToken); /// @@ -52,14 +43,6 @@ public interface IOauthCallsRepository Task GetProjectDetailsAsync(string channelName, string accessToken); - /// - /// List of employee under this employee. - RS - /// - /// id of user - /// user's access token from Promact OAuth Server - /// List of user. List of object of UserRoleAc - Task> GetListOfEmployeeAsync(string userId, string accessToken); - /// /// This method is used to fetch list of users/employees of the given group name. - JJ /// @@ -78,24 +61,6 @@ public interface IOauthCallsRepository Task AllowedLeave(string userId, string accessToken); - /// - /// Method to call an api from project oAuth server and get Employee detail by their Id. - GA - /// - /// id of employee - /// user's access token from Promact OAuth Server - /// User Details. Object of User - Task GetUserByEmployeeIdAsync(string employeeId, string accessToken); - - - /// - /// Method to call an api from oauth server and get all the projects under a specific teamleader id along with users in it. - GA - /// - /// id of the team leader - /// user's access token from Promact OAuth Server - /// list of users in a project.List of object of User - Task> GetProjectUsersByTeamLeaderIdAsync(string teamLeaderId, string accessToken); - - /// /// Method to call an api from oAuth server and get whether user is admin or not. - SS /// @@ -103,23 +68,5 @@ public interface IOauthCallsRepository /// user's access token from Promact OAuth Server /// true if user has admin role else false Task UserIsAdminAsync(string userId, string accessToken); - - - /// - /// Method is used to call an api from oauth server and return list of all the projects. - GA - /// - /// user's access token from Promact OAuth Server - /// list of all the projects - Task> GetAllProjectsAsync(string accessToken); - - - /// - /// Method to call an api from oauth server and get the details of a project using projecId. - GA - /// - /// id of project - /// user's access token from Promact OAuth Server - /// Details of a project - Task GetProjectDetailsAsync(int projectId, string accessToken); - } } \ No newline at end of file diff --git a/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/OauthCallHttpContextRespository.cs b/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/OauthCallHttpContextRespository.cs new file mode 100644 index 00000000..b80902fe --- /dev/null +++ b/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/OauthCallHttpContextRespository.cs @@ -0,0 +1,155 @@ +using Newtonsoft.Json; +using Promact.Core.Repository.AttachmentRepository; +using Promact.Erp.DomainModel.ApplicationClass; +using Promact.Erp.DomainModel.Models; +using Promact.Erp.Util.HttpClient; +using Promact.Erp.Util.StringConstants; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Claims; +using System.Text; +using System.Threading.Tasks; +using System.Web; + +namespace Promact.Core.Repository.OauthCallsRepository +{ + public class OauthCallHttpContextRespository : IOauthCallHttpContextRespository + { + #region Private + private readonly IStringConstantRepository _stringConstant; + private readonly IHttpClientService _httpClientService; + private readonly HttpContextBase _httpContextBase; + private readonly ApplicationUserManager _userManager; + private readonly IAttachmentRepository _attachmentRepository; + #endregion + + #region Constructor + public OauthCallHttpContextRespository(IStringConstantRepository stringConstant, IHttpClientService httpClientService, + HttpContextBase httpContextBase, ApplicationUserManager userManager, IAttachmentRepository attachmentRepository) + { + _stringConstant = stringConstant; + _httpClientService = httpClientService; + _httpContextBase = httpContextBase; + _userManager = userManager; + _attachmentRepository = attachmentRepository; + } + #endregion + + #region Public Methods + /// + /// Method to call an api from project oAuth server and get Employee detail by their Id. - GA + /// + /// id of employee + /// user's access token from Promact OAuth Server + /// User Details. Object of User + public async Task GetUserByEmployeeIdAsync(string employeeId) + { + var accessToken = await GetCurrentUserAcceesToken(); + User userDetails = new User(); + var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, employeeId, _stringConstant.UserDetailUrl); + var response = await _httpClientService.GetAsync(_stringConstant.UserUrl, requestUrl, accessToken); + if (response != null) + { + userDetails = JsonConvert.DeserializeObject(response); + } + return userDetails; + } + + /// + /// Method to call an api from oauth server and get all the projects under a specific teamleader id along with users in it. - GA + /// + /// id of the team leader + /// list of users in a project.List of object of User + public async Task> GetProjectUsersByTeamLeaderIdAsync(string teamLeaderId) + { + var accessToken = await GetCurrentUserAcceesToken(); + List projectUsers = new List(); + var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, teamLeaderId, _stringConstant.ProjectUsersByTeamLeaderId); + var response = await _httpClientService.GetAsync(_stringConstant.ProjectUrl, requestUrl, accessToken); + if (response != null) + { + projectUsers = JsonConvert.DeserializeObject>(response); + } + return projectUsers; + } + + /// + /// Method is used to call an api from oauth server and return list of all the projects. - GA + /// + /// user's access token from Promact OAuth Server + /// list of all the projects + public async Task> GetAllProjectsAsync() + { + var accessToken = await GetCurrentUserAcceesToken(); + List projects = new List(); + var requestUrl = _stringConstant.AllProjectUrl; + var response = await _httpClientService.GetAsync(_stringConstant.ProjectUrl, requestUrl, accessToken); + if (response != null) + { + projects = JsonConvert.DeserializeObject>(response); + } + return projects; + } + + + /// + /// Method to call an api from oauth server and get the details of a project using projecId. - GA + /// + /// id of project + /// Details of a project + public async Task GetProjectDetailsAsync(int projectId) + { + var accessToken = await GetCurrentUserAcceesToken(); + ProjectAc project = new ProjectAc(); + var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, projectId, _stringConstant.GetProjectDetails); + var response = await _httpClientService.GetAsync(_stringConstant.ProjectUrl, requestUrl, accessToken); + if (response != null) + { + project = JsonConvert.DeserializeObject(response); + } + return project; + } + + + + /// + /// Used to get user role. - RS + /// + /// id of user + /// user details. List of object of UserRoleAc + public async Task> GetUserRoleAsync(string userId) + { + var accessToken = await GetCurrentUserAcceesToken(); + var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, userId, _stringConstant.UserRoleUrl); + var response = await _httpClientService.GetAsync(_stringConstant.UserUrl, requestUrl, accessToken); + var userRoleListAc = JsonConvert.DeserializeObject>(response); + return userRoleListAc; + } + + + /// + /// List of employee under this employee. - RS + /// + /// id of user + /// List of user. List of object of UserRoleAc + public async Task> GetListOfEmployeeAsync(string userId) + { + var accessToken = await GetCurrentUserAcceesToken(); + var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, userId, _stringConstant.TeamMembersUrl); + var response = await _httpClientService.GetAsync(_stringConstant.UserUrl, requestUrl, accessToken); + var userRoleListAc = JsonConvert.DeserializeObject>(response); + return userRoleListAc; + } + #endregion + + #region Private Method + private async Task GetCurrentUserAcceesToken() + { + var claimIdentity = _httpContextBase.User.Identity as ClaimsIdentity; + var userName = (await _userManager.FindByIdAsync(claimIdentity.Claims.ToList().Single(x => x.Type == _stringConstant.Sub).Value)).UserName; + return (await _attachmentRepository.UserAccessTokenAsync(userName)); + } + #endregion + } +} diff --git a/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/OauthCallsRepository.cs b/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/OauthCallsRepository.cs index fc3c09be..8a8e1f52 100644 --- a/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/OauthCallsRepository.cs +++ b/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/OauthCallsRepository.cs @@ -14,8 +14,6 @@ public class OauthCallsRepository : IOauthCallsRepository private readonly IHttpClientService _httpClientService; private readonly IStringConstantRepository _stringConstant; - - #endregion @@ -92,7 +90,6 @@ public async Task> GetManagementUserNameAsync(string accessToken) /// Method to call an api from project oAuth server and get Project details of the given channel. - JJ /// /// slack channel name - /// user's access token from Promact OAuth Server /// object of ProjectAc public async Task GetProjectDetailsAsync(string channelName, string accessToken) { @@ -126,25 +123,6 @@ public async Task> GetUsersByChannelNameAsync(string channelName, str } - /// - /// Method to call an api from project oAuth server and get Employee detail by their Id. - GA - /// - /// id of employee - /// user's access token from Promact OAuth Server - /// User Details. Object of User - public async Task GetUserByEmployeeIdAsync(string employeeId, string accessToken) - { - User userDetails = new User(); - var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, employeeId, _stringConstant.UserDetailUrl); - var response = await _httpClientService.GetAsync(_stringConstant.UserUrl, requestUrl, accessToken); - if (response != null) - { - userDetails = JsonConvert.DeserializeObject(response); - } - return userDetails; - } - - /// /// Method to call an api of oAuth server and get Casual leave allowed to user by user slackName. - SS /// @@ -164,25 +142,6 @@ public async Task AllowedLeave(string userId, string accessToken) } - /// - /// Method to call an api from oauth server and get all the projects under a specific teamleader id along with users in it. - GA - /// - /// id of the team leader - /// user's access token from Promact OAuth Server - /// list of users in a project.List of object of User - public async Task> GetProjectUsersByTeamLeaderIdAsync(string teamLeaderId, string accessToken) - { - List projectUsers = new List(); - var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, teamLeaderId, _stringConstant.ProjectUsersByTeamLeaderId); - var response = await _httpClientService.GetAsync(_stringConstant.ProjectUrl, requestUrl, accessToken); - if (response != null) - { - projectUsers = JsonConvert.DeserializeObject>(response); - } - return projectUsers; - } - - /// /// Method to call an api from oAuth server and get whether user is admin or not. - SS /// @@ -200,75 +159,6 @@ public async Task UserIsAdminAsync(string userId, string accessToken) } return result; } - - - /// - /// Used to get user role. - RS - /// - /// id of user - /// user's access token from Promact OAuth Server - /// user details. List of object of UserRoleAc - public async Task> GetUserRoleAsync(string userId, string accessToken) - { - var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, userId, _stringConstant.UserRoleUrl); - var response = await _httpClientService.GetAsync(_stringConstant.UserUrl, requestUrl, accessToken); - var userRoleListAc = JsonConvert.DeserializeObject>(response); - return userRoleListAc; - } - - - /// - /// List of employee under this employee. - RS - /// - /// id of user - /// user's access token from Promact OAuth Server - /// List of user. List of object of UserRoleAc - public async Task> GetListOfEmployeeAsync(string userId, string accessToken) - { - var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, userId, _stringConstant.TeamMembersUrl); - var response = await _httpClientService.GetAsync(_stringConstant.UserUrl, requestUrl, accessToken); - var userRoleListAc = JsonConvert.DeserializeObject>(response); - return userRoleListAc; - } - - /// - /// Method is used to call an api from oauth server and return list of all the projects. - GA - /// - /// user's access token from Promact OAuth Server - /// list of all the projects - public async Task> GetAllProjectsAsync(string accessToken) - { - List projects = new List(); - var requestUrl = _stringConstant.AllProjectUrl; - var response = await _httpClientService.GetAsync(_stringConstant.ProjectUrl, requestUrl, accessToken); - if (response != null) - { - projects = JsonConvert.DeserializeObject>(response); - } - return projects; - } - - - /// - /// Method to call an api from oauth server and get the details of a project using projecId. - GA - /// - /// id of project - /// user's access token from Promact OAuth Server - /// Details of a project - public async Task GetProjectDetailsAsync(int projectId, string accessToken) - { - ProjectAc project = new ProjectAc(); - var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, projectId,_stringConstant.GetProjectDetails); - var response = await _httpClientService.GetAsync(_stringConstant.ProjectUrl, requestUrl, accessToken); - if(response != null) - { - project = JsonConvert.DeserializeObject(response); - } - return project; - } - - #endregion - } } \ No newline at end of file diff --git a/Slack.Automation/Promact.Core.Repository/Promact.Core.Repository.csproj b/Slack.Automation/Promact.Core.Repository/Promact.Core.Repository.csproj index a9bdea23..48571fce 100644 --- a/Slack.Automation/Promact.Core.Repository/Promact.Core.Repository.csproj +++ b/Slack.Automation/Promact.Core.Repository/Promact.Core.Repository.csproj @@ -165,7 +165,9 @@ + + @@ -180,6 +182,8 @@ + + diff --git a/Slack.Automation/Promact.Core.Repository/ScrumReportRepository/IScrumReportRepository.cs b/Slack.Automation/Promact.Core.Repository/ScrumReportRepository/IScrumReportRepository.cs index 6594b1dd..d6b9049c 100644 --- a/Slack.Automation/Promact.Core.Repository/ScrumReportRepository/IScrumReportRepository.cs +++ b/Slack.Automation/Promact.Core.Repository/ScrumReportRepository/IScrumReportRepository.cs @@ -1,8 +1,6 @@ using Promact.Erp.DomainModel.ApplicationClass; using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading.Tasks; namespace Promact.Core.Repository.ScrumReportRepository @@ -12,19 +10,17 @@ public interface IScrumReportRepository /// /// Method to return the list of projects depending on the role of the logged in user /// - /// - /// + /// userId of user /// List of projects - Task> GetProjectsAsync(string userId, string accessToken); + Task> GetProjectsAsync(string userId); /// /// Method to return the details of scrum for a particular project /// - /// - /// - /// - /// + /// project Id + /// Date of scrum + /// userId of User /// Details of the scrum - Task ScrumReportDetailsAsync(int projectId, DateTime scrumDate, string userId, string accessToken); + Task ScrumReportDetailsAsync(int projectId, DateTime scrumDate, string userId); } } diff --git a/Slack.Automation/Promact.Core.Repository/ScrumReportRepository/ScrumReportRepository.cs b/Slack.Automation/Promact.Core.Repository/ScrumReportRepository/ScrumReportRepository.cs index a4de1f76..03ed1c5e 100644 --- a/Slack.Automation/Promact.Core.Repository/ScrumReportRepository/ScrumReportRepository.cs +++ b/Slack.Automation/Promact.Core.Repository/ScrumReportRepository/ScrumReportRepository.cs @@ -15,12 +15,14 @@ public class ScrumReportRepository : IScrumReportRepository #region Private Variables private readonly IRepository _scrumDataRepository; private readonly IRepository _scrumAnswerDataRepository; - private readonly IOauthCallsRepository _oauthCallsRepository; + private readonly IOauthCallHttpContextRespository _oauthCallsRepository; private readonly IStringConstantRepository _stringConstant; #endregion #region Constructor - public ScrumReportRepository(IRepository scrumDataRepository, IRepository scrumAnswerDataRepository, IStringConstantRepository stringConstant, IOauthCallsRepository oauthCallsRepository) + public ScrumReportRepository(IRepository scrumDataRepository, + IRepository scrumAnswerDataRepository, IStringConstantRepository stringConstant, + IOauthCallHttpContextRespository oauthCallsRepository) { _scrumDataRepository = scrumDataRepository; _scrumAnswerDataRepository = scrumAnswerDataRepository; @@ -123,15 +125,14 @@ private string[] SplitScrumAnswer(string answer) /// /// Method to return the list of projects depending on the role of the logged in user /// - /// - /// + /// userId of user /// List of projects - public async Task> GetProjectsAsync(string userId, string accessToken) + public async Task> GetProjectsAsync(string userId) { //Getting the details of the logged in user from Oauth server - User loginUser = await _oauthCallsRepository.GetUserByEmployeeIdAsync(userId, accessToken); + User loginUser = await _oauthCallsRepository.GetUserByEmployeeIdAsync(userId); //Fetch list of all the projects from oauth server - List projects = await _oauthCallsRepository.GetAllProjectsAsync(accessToken); + List projects = await _oauthCallsRepository.GetAllProjectsAsync(); //Checking if there are projects returned from oauth server or not if (projects.Any()) { @@ -170,17 +171,16 @@ public async Task> GetProjectsAsync(string userId, string /// /// Method to return the details of scrum for a particular project /// - /// - /// - /// - /// + /// project Id + /// Date of scrum + /// userId of user /// Details of the scrum - public async Task ScrumReportDetailsAsync(int projectId, DateTime scrumDate, string userId, string accessToken) + public async Task ScrumReportDetailsAsync(int projectId, DateTime scrumDate, string userId) { //Getting details of the logged in user from Oauth server - User loginUser = await _oauthCallsRepository.GetUserByEmployeeIdAsync(userId, accessToken); + User loginUser = await _oauthCallsRepository.GetUserByEmployeeIdAsync(userId); //Getting details of the specific project from Oauth server - ProjectAc project = await _oauthCallsRepository.GetProjectDetailsAsync(projectId, accessToken); + ProjectAc project = await _oauthCallsRepository.GetProjectDetailsAsync(projectId); //Getting scrum for a specific project Scrum scrum = await _scrumDataRepository.FirstOrDefaultAsync(x => x.ProjectId == project.Id); ScrumProjectDetails scrumProjectDetail = new ScrumProjectDetails(); diff --git a/Slack.Automation/Promact.Core.Repository/SlackRepository/SlackRepository.cs b/Slack.Automation/Promact.Core.Repository/SlackRepository/SlackRepository.cs index bc2f5b81..4617bc6b 100644 --- a/Slack.Automation/Promact.Core.Repository/SlackRepository/SlackRepository.cs +++ b/Slack.Automation/Promact.Core.Repository/SlackRepository/SlackRepository.cs @@ -606,7 +606,7 @@ private async Task UpdateSickLeaveAsync(List slackText, Applicat bool reJoinDateConvertorResult = DateTime.TryParseExact(slackText[3], dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out reJoinDate); if (endDateConvertorResult && reJoinDateConvertorResult) { - User newUser = await _oauthCallsRepository.GetUserByEmployeeIdAsync(leave.EmployeeId, accessToken); + User newUser = await _oauthCallsRepository.GetUserByUserIdAsync(leave.EmployeeId, accessToken); leave.EndDate = endDate; leave.RejoinDate = reJoinDate; // Method to check leave's end date is not beyond start date and re-join date is not beyond end date diff --git a/Slack.Automation/Promact.Core.Repository/TaskMailReportRepository/ITaskMailReportRepository.cs b/Slack.Automation/Promact.Core.Repository/TaskMailReportRepository/ITaskMailReportRepository.cs new file mode 100644 index 00000000..158ee99b --- /dev/null +++ b/Slack.Automation/Promact.Core.Repository/TaskMailReportRepository/ITaskMailReportRepository.cs @@ -0,0 +1,39 @@ +using Promact.Erp.DomainModel.ApplicationClass; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Promact.Core.Repository.TaskMailReportRepository +{ + public interface ITaskMailReportRepository + { + /// + ///Method geting Employee or list of Employees + /// + /// + /// list of task mail report + Task> GetUserInformationAsync(string userId); + + /// + /// This Method use to fetch the task mail details. + /// + /// + /// + /// + /// + /// list of task mail report with task mail details + Task> TaskMailDetailsReportAsync(string userId, string role, string userName, string loginId); + + /// + /// this Method use to fetch the task mail details for the selected date. + /// + /// + /// + /// + /// + /// + /// + /// list of task mail report with task mail details + Task> TaskMailDetailsReportSelectedDateAsync(string userId, string userName, string role, string createdOn, string loginId, DateTime selectedDate); + } +} diff --git a/Slack.Automation/Promact.Core.Repository/TaskMailReportRepository/TaskMailReportRepository.cs b/Slack.Automation/Promact.Core.Repository/TaskMailReportRepository/TaskMailReportRepository.cs new file mode 100644 index 00000000..9442f452 --- /dev/null +++ b/Slack.Automation/Promact.Core.Repository/TaskMailReportRepository/TaskMailReportRepository.cs @@ -0,0 +1,317 @@ +using Promact.Core.Repository.AttachmentRepository; +using Promact.Core.Repository.BotQuestionRepository; +using Promact.Core.Repository.EmailServiceTemplateRepository; +using Promact.Core.Repository.OauthCallsRepository; +using Promact.Erp.DomainModel.ApplicationClass; +using Promact.Erp.DomainModel.DataRepository; +using Promact.Erp.DomainModel.Models; +using Promact.Erp.Util.Email; +using Promact.Erp.Util.StringConstants; +using System; +using System.Collections.Generic; +using System.Data.Entity; +using System.Linq; +using System.Threading.Tasks; + +namespace Promact.Core.Repository.TaskMailReportRepository +{ + public class TaskMailReportRepository : ITaskMailReportRepository + { + #region Private Variables + private readonly IRepository _taskMailRepository; + private readonly IRepository _taskMailDetailRepository; + private readonly IOauthCallHttpContextRespository _oauthCallsRepository; + private readonly IBotQuestionRepository _botQuestionRepository; + private readonly IAttachmentRepository _attachmentRepository; + private readonly IRepository _userRepository; + private readonly IEmailService _emailService; + private readonly ApplicationUserManager _userManager; + private readonly IStringConstantRepository _stringConstant; + private readonly IEmailServiceTemplateRepository _emailServiceTemplate; + #endregion + + #region Constructor + public TaskMailReportRepository(IRepository taskMailRepository, IStringConstantRepository stringConstant, + IOauthCallHttpContextRespository oauthCallsRepository, IRepository taskMailDetailRepository, + IAttachmentRepository attachmentRepository, IRepository userRepository, IEmailService emailService, + IBotQuestionRepository botQuestionRepository, ApplicationUserManager userManager, + IEmailServiceTemplateRepository emailServiceTemplate) + { + _taskMailRepository = taskMailRepository; + _stringConstant = stringConstant; + _oauthCallsRepository = oauthCallsRepository; + _taskMailDetailRepository = taskMailDetailRepository; + _attachmentRepository = attachmentRepository; + _userRepository = userRepository; + _emailService = emailService; + _botQuestionRepository = botQuestionRepository; + _userManager = userManager; + _emailServiceTemplate = emailServiceTemplate; + } + #endregion + + #region Public Method + /// + ///Method geting Employee or list of Employees + /// + /// + /// list of task mail report + public async Task> GetUserInformationAsync(string userId) + { + List taskMailReportAcList = new List(); + var user = await _userRepository.FirstAsync(x => x.Id == userId); + + //getting user information from Promact Oauth Server. + List userRoleAcList = await _oauthCallsRepository.GetUserRoleAsync(user.Id); + var userInformation = userRoleAcList.First(x => x.UserName == user.UserName); + if (userInformation.Role == _stringConstant.RoleAdmin) + { + //if user is admin then remove from user list. because admin dose not have any taks mail. + userRoleAcList.Remove(userInformation); + } + foreach (var userRole in userRoleAcList) + { + TaskMailReportAc taskMailReportAc = new TaskMailReportAc(userRole.UserId, userRole.Role, userRole.Name, userEmail: userRole.UserName); + taskMailReportAcList.Add(taskMailReportAc); + } + return taskMailReportAcList; + } + + /// + /// This Method use to fetch the task mail details. + /// + /// + /// + /// + /// + /// list of task mail report with task mail details + public async Task> TaskMailDetailsReportAsync(string userId, string role, string userName, string loginId) + { + List taskMailReportAcList = new List(); + if (role == _stringConstant.RoleAdmin || role == _stringConstant.RoleEmployee) + { + //getting the employee task mail reports + taskMailReportAcList = await GetTaskMailDetailsInformationAsync(userId, role, userName, loginId); + } + else if (role == _stringConstant.RoleTeamLeader) + { + //getting the team members information. + List userRoleAcList = await GetUserRoleAsync(loginId); + //getting maximum and minimum date from the team members task mails + var maxMinTaskMailDate = await GetMaxMinDateAsync(userRoleAcList); + //first time there are no selected date that's why pass maxdate as a selected date. + //getting the team members task mail reports + taskMailReportAcList = await TaskMailDetailsAsync(role, loginId, maxMinTaskMailDate.Item1.Date, maxMinTaskMailDate.Item1.Date, maxMinTaskMailDate.Item2.Date); + } + return taskMailReportAcList; + } + + /// + /// this Method use to fetch the task mail details for the selected date. + /// + /// + /// + /// + /// + /// + /// + /// list of task mail report with task mail details + public async Task> TaskMailDetailsReportSelectedDateAsync(string userId, string userName, string role, string createdOn, string loginId, DateTime selectedDate) + { + List taskMailReportAcList = new List(); + if (role == _stringConstant.RoleAdmin || role == _stringConstant.RoleEmployee) + { + //getting the employee task mail reports for selected date + taskMailReportAcList = await TaskMailsDetailAsync(userId, userName, role, loginId, createdOn, selectedDate); + } + else if (role == _stringConstant.RoleTeamLeader) + { + //getting the team members information + List userRoleAcList = await GetUserRoleAsync(loginId); + //find maximum and minimum date from the team members task mails + var maxMinTaskMailDate = await GetMaxMinDateAsync(userRoleAcList); + //getting the team members task mail reports for selected date + taskMailReportAcList = await TaskMailDetailsAsync(role, loginId, selectedDate.Date, maxMinTaskMailDate.Item1.Date, maxMinTaskMailDate.Item2.Date); + } + return taskMailReportAcList; + } + #endregion + + #region Private Methods + + /// + /// Getting user information + /// + /// + /// fetch users role + private async Task> GetUserRoleAsync(string loginId) + { + //getting user information from Promact Oauth Server + return await _oauthCallsRepository.GetListOfEmployeeAsync(loginId); + } + + + /// + /// Getting max and min date from users task mails + /// + /// + /// max and min Date + private async Task> GetMaxMinDateAsync(List userRoleAcList) + { + //getting list of userId. + var userIdList = userRoleAcList.Select(x => x.UserId); + //getting list of task mails using userIdList. + var taskMails = (await _taskMailRepository.FetchAsync(x => userIdList.Contains(x.EmployeeId))).ToList(); + //getting maximum and minimum date form the team members task mails + DateTime maxDate = taskMails.Max(x => x.CreatedOn); + DateTime minDate = taskMails.Min(x => x.CreatedOn); + return new Tuple(maxDate, minDate); + } + + + /// + /// Task mail details for teamLeader + /// + /// + /// + /// + /// + /// + /// list of task mail reports + private async Task> TaskMailDetailsAsync(string role, string loginId, DateTime selectedDate, DateTime maxDate, DateTime minDate) + { + List taskMailReportAcList = new List(); + List userRoleAcList = await GetUserRoleAsync(loginId); + //getting the team members task mails using users information. + foreach (var userRole in userRoleAcList) + { + TaskMailReportAc taskMailReportAc = await GetTaskReportAsync(userRole.UserId, role, userRole.Name, selectedDate, maxDate, minDate); + taskMailReportAcList.Add(taskMailReportAc); + } + return taskMailReportAcList; + } + + /// + /// Getting task mail reports + /// + /// + /// + /// + /// + /// + /// + /// task mail report + private async Task GetTaskReportAsync(string userId, string role, string userName, DateTime selectedDate, DateTime maxDate, DateTime minDate) + { + TaskMailReportAc taskMailReportAc; + var taskMail = (await _taskMailRepository.FirstOrDefaultAsync(y => y.EmployeeId == userId && DbFunctions.TruncateTime(y.CreatedOn) == DbFunctions.TruncateTime(selectedDate))); + if (taskMail != null) + { + //getting the team members task mails details. + taskMailReportAc = await GetTaskMailReportAsync(userId, role, userName, taskMail.Id, taskMail.CreatedOn.Date, maxDate, minDate); + } + else + { + //if team member does not have any task mail than show default task mail to the end users. + taskMailReportAc = GetTaskMailReport(userId, role, userName, selectedDate.Date, maxDate.Date, minDate.Date); + } + return taskMailReportAc; + } + + /// + /// Task mail fetails for admin or employee + /// + /// + /// + /// + /// + /// + /// + /// list of task mail reports + private async Task> TaskMailsDetailAsync(string userId, string userName, string role, string createdOn, string loginId, DateTime selectedDate) + { + List taskMailReportAcList = new List(); + //find maximum and minimum date from the employee task mails + IEnumerable taskMails = (await _taskMailRepository.FetchAsync(x => x.EmployeeId == userId)).ToList(); + DateTime maxDate = taskMails.Max(x => x.CreatedOn); + DateTime minDate = taskMails.Min(x => x.CreatedOn); + //getting task mail information. + TaskMailReportAc taskMailReportAc = await GetTaskReportAsync(userId, role, userName, selectedDate.Date, maxDate.Date, minDate.Date); + taskMailReportAcList.Add(taskMailReportAc); + return taskMailReportAcList; + } + + /// + /// Get default task mail + /// + /// + /// + /// + /// + /// + /// + /// Task mail report + private TaskMailReportAc GetTaskMailReport(string userId, string role, string userName, DateTime createdOn, DateTime maxDate, DateTime minDate) + { + List taskMailDetailReportList = new List(); + var taskMailDetailReportAc = new TaskMailDetailReportAc(description: _stringConstant.NotAvailable, comment: _stringConstant.NotAvailable, status: TaskMailStatus.none); + taskMailDetailReportList.Add(taskMailDetailReportAc); + TaskMailReportAc taskMailReportAc = new TaskMailReportAc(userId, role, userName, taskMailDetailReportList, createdOn: createdOn, maxDate: maxDate, minDate: minDate); + return taskMailReportAc; + } + + /// + /// Getting taskmail details infromation + /// + /// + /// + /// + /// + /// + /// + /// + /// List of task mail report + private async Task GetTaskMailReportAsync(string userId, string role, string userName, int taskId, DateTime createdOn, DateTime maxDate, DateTime minDate) + { + List taskMailDetailReportAcList = new List(); + // getting taskmail details infromation using taskId. + var taskMailDetailList = (await _taskMailDetailRepository.FetchAsync(x => x.TaskId == taskId)); + foreach (var taskMailDetail in taskMailDetailList) + { + TaskMailDetailReportAc taskmailReportAc = new TaskMailDetailReportAc(taskMailDetail.Description, taskMailDetail.Comment, id: taskMailDetail.Id, hours: taskMailDetail.Hours, status: taskMailDetail.Status); + taskMailDetailReportAcList.Add(taskmailReportAc); + } + TaskMailReportAc taskMailReportAc = new TaskMailReportAc(userId, role, userName, taskMailDetailReportAcList, createdOn: createdOn, maxDate: maxDate, minDate: minDate); + return taskMailReportAc; + } + + /// + /// Task mail details report information for the user role admin and employee + /// + /// + /// + /// + /// + /// List task mail Report + private async Task> GetTaskMailDetailsInformationAsync(string userId, string role, string userName, string loginId) + { + List taskMailReportAcList = new List(); + var taskMail = (await _taskMailRepository.FetchAsync(y => y.EmployeeId == userId)).ToList(); + TaskMailReportAc taskMailReportAc; + if (taskMail.Any()) + { + //first time there are no selected date that's why pass maxdate as a selected date. + taskMailReportAc = await GetTaskMailReportAsync(userId, role, userName, taskMail.OrderByDescending(y => y.CreatedOn).First().Id, taskMail.Max(x => x.CreatedOn).Date, taskMail.Max(x => x.CreatedOn).Date, taskMail.Min(x => x.CreatedOn).Date); + } + else + { + //if employee does not have any task mail than show default task mail to the end users. + taskMailReportAc = GetTaskMailReport(userId, role, userName, DateTime.Now.Date, DateTime.Now.Date, DateTime.Now.Date); + } + taskMailReportAcList.Add(taskMailReportAc); + return taskMailReportAcList; + } + + #endregion + } +} diff --git a/Slack.Automation/Promact.Core.Repository/TaskMailRepository/ITaskMailRepository.cs b/Slack.Automation/Promact.Core.Repository/TaskMailRepository/ITaskMailRepository.cs index fcefba02..cd46707c 100644 --- a/Slack.Automation/Promact.Core.Repository/TaskMailRepository/ITaskMailRepository.cs +++ b/Slack.Automation/Promact.Core.Repository/TaskMailRepository/ITaskMailRepository.cs @@ -21,35 +21,5 @@ public interface ITaskMailRepository /// /// questionText in string format containing question statement Task QuestionAndAnswerAsync(string answer,string userId); - - /// - /// This method use to fetch the task mail details. - /// - /// - /// - /// - /// - /// list of task mail report with task mail Details - Task> TaskMailDetailsReportAsync(string userId,string role,string userName, string loginId); - - /// - /// This method getting list of Employees - /// - /// - /// list of task mail report - Task> GetUserInformationAsync(string userId); - - /// - /// This method use to fetch the selected date task mail details. - /// - /// - /// - /// - /// - /// - /// - /// list of task mail report with task mail Details - Task> TaskMailDetailsReportSelectedDateAsync(string userId, string userName, string role, string createdOn, string loginId, DateTime selectedDate); - } } diff --git a/Slack.Automation/Promact.Core.Repository/TaskMailRepository/TaskMailRepository.cs b/Slack.Automation/Promact.Core.Repository/TaskMailRepository/TaskMailRepository.cs index ac32b90b..3c2c22de 100644 --- a/Slack.Automation/Promact.Core.Repository/TaskMailRepository/TaskMailRepository.cs +++ b/Slack.Automation/Promact.Core.Repository/TaskMailRepository/TaskMailRepository.cs @@ -345,273 +345,9 @@ public async Task QuestionAndAnswerAsync(string answer, string userId) } return userAndTaskMailDetailsWithAccessToken.QuestionText; } - - /// - ///Method geting Employee or list of Employees - /// - /// - /// list of task mail report - public async Task> GetUserInformationAsync(string userId) - { - List taskMailReportAcList = new List(); - var user = await _userRepository.FirstAsync(x => x.Id == userId); - var accessToken = await _attachmentRepository.UserAccessTokenAsync(user.UserName); - - //getting user information from Promact Oauth Server. - List userRoleAcList = await _oauthCallsRepository.GetUserRoleAsync(user.Id,accessToken); - var userInformation = userRoleAcList.First(x => x.UserName == user.UserName); - if (userInformation.Role == _stringConstant.RoleAdmin) - { - //if user is admin then remove from user list. because admin dose not have any taks mail. - userRoleAcList.Remove(userInformation); - } - foreach (var userRole in userRoleAcList) - { - TaskMailReportAc taskMailReportAc = new TaskMailReportAc(userRole.UserId, userRole.Role, userRole.Name, userEmail: userRole.UserName); - taskMailReportAcList.Add(taskMailReportAc); - } - return taskMailReportAcList; - } - - /// - /// This Method use to fetch the task mail details. - /// - /// - /// - /// - /// - /// list of task mail report with task mail details - public async Task> TaskMailDetailsReportAsync(string userId, string role, string userName, string loginId) - { - List taskMailReportAcList = new List(); - if (role == _stringConstant.RoleAdmin || role == _stringConstant.RoleEmployee) - { - //getting the employee task mail reports - taskMailReportAcList = await GetTaskMailDetailsInformationAsync(userId, role, userName, loginId); - } - else if (role == _stringConstant.RoleTeamLeader) - { - //getting the team members information. - List userRoleAcList = await GetUserRoleAsync(loginId); - //getting maximum and minimum date from the team members task mails - var maxMinTaskMailDate = await GetMaxMinDateAsync(userRoleAcList); - //first time there are no selected date that's why pass maxdate as a selected date. - //getting the team members task mail reports - taskMailReportAcList = await TaskMailDetailsAsync(role, loginId,maxMinTaskMailDate.Item1.Date,maxMinTaskMailDate.Item1.Date,maxMinTaskMailDate.Item2.Date); - } - return taskMailReportAcList; - } - - /// - /// this Method use to fetch the task mail details for the selected date. - /// - /// - /// - /// - /// - /// - /// - /// list of task mail report with task mail details - public async Task> TaskMailDetailsReportSelectedDateAsync(string userId, string userName, string role, string createdOn, string loginId, DateTime selectedDate) - { - List taskMailReportAcList = new List(); - if (role == _stringConstant.RoleAdmin || role == _stringConstant.RoleEmployee) - { - //getting the employee task mail reports for selected date - taskMailReportAcList = await TaskMailsDetailAsync(userId, userName, role, loginId, createdOn, selectedDate); - } - else if (role == _stringConstant.RoleTeamLeader) - { - //getting the team members information - List userRoleAcList = await GetUserRoleAsync(loginId); - //find maximum and minimum date from the team members task mails - var maxMinTaskMailDate = await GetMaxMinDateAsync(userRoleAcList); - //getting the team members task mail reports for selected date - taskMailReportAcList = await TaskMailDetailsAsync(role, loginId, selectedDate.Date, maxMinTaskMailDate.Item1.Date, maxMinTaskMailDate.Item2.Date); - } - return taskMailReportAcList; - } - #endregion #region Private Methods - - /// - /// Getting user information - /// - /// - /// fetch users role - private async Task> GetUserRoleAsync(string loginId) - { - var user =await _userRepository.FirstAsync(x => x.Id == loginId); - // getting access token for that user - var accessToken = await _attachmentRepository.UserAccessTokenAsync(user.UserName); - //getting user information from Promact Oauth Server - return await _oauthCallsRepository.GetListOfEmployeeAsync(user.Id, accessToken); - } - - - /// - /// Getting max and min date from users task mails - /// - /// - /// max and min Date - private async Task> GetMaxMinDateAsync(List userRoleAcList) - { - //getting list of userId. - var userIdList = userRoleAcList.Select(x => x.UserId); - //getting list of task mails using userIdList. - var taskMails = (await _taskMailRepository.FetchAsync(x => userIdList.Contains(x.EmployeeId))).ToList(); - //getting maximum and minimum date form the team members task mails - DateTime maxDate = taskMails.Max(x => x.CreatedOn); - DateTime minDate = taskMails.Min(x => x.CreatedOn); - return new Tuple(maxDate, minDate); - } - - - /// - /// Task mail details for teamLeader - /// - /// - /// - /// - /// - /// - /// list of task mail reports - private async Task> TaskMailDetailsAsync(string role, string loginId, DateTime selectedDate,DateTime maxDate,DateTime minDate) - { - List taskMailReportAcList = new List(); - List userRoleAcList = await GetUserRoleAsync(loginId); - //getting the team members task mails using users information. - foreach (var userRole in userRoleAcList) - { - TaskMailReportAc taskMailReportAc = await GetTaskReportAsync(userRole.UserId, role, userRole.Name, selectedDate, maxDate,minDate ); - taskMailReportAcList.Add(taskMailReportAc); - } - return taskMailReportAcList; - } - - /// - /// Getting task mail reports - /// - /// - /// - /// - /// - /// - /// - /// task mail report - private async Task GetTaskReportAsync(string userId, string role, string userName, DateTime selectedDate, DateTime maxDate, DateTime minDate) - { - TaskMailReportAc taskMailReportAc; - var taskMail = (await _taskMailRepository.FirstOrDefaultAsync(y => y.EmployeeId == userId && DbFunctions.TruncateTime(y.CreatedOn) == DbFunctions.TruncateTime(selectedDate))); - if (taskMail != null) - { - //getting the team members task mails details. - taskMailReportAc = await GetTaskMailReportAsync(userId, role, userName, taskMail.Id, taskMail.CreatedOn.Date, maxDate, minDate); - } - else - { - //if team member does not have any task mail than show default task mail to the end users. - taskMailReportAc = GetTaskMailReport(userId, role, userName, selectedDate.Date, maxDate.Date, minDate.Date); - } - return taskMailReportAc; - } - - /// - /// Task mail fetails for admin or employee - /// - /// - /// - /// - /// - /// - /// - /// list of task mail reports - private async Task> TaskMailsDetailAsync(string userId, string userName, string role, string createdOn, string loginId, DateTime selectedDate) - { - List taskMailReportAcList = new List(); - //find maximum and minimum date from the employee task mails - IEnumerable taskMails = (await _taskMailRepository.FetchAsync(x => x.EmployeeId == userId)).ToList(); - DateTime maxDate = taskMails.Max(x => x.CreatedOn); - DateTime minDate = taskMails.Min(x => x.CreatedOn); - //getting task mail information. - TaskMailReportAc taskMailReportAc = await GetTaskReportAsync(userId, role, userName, selectedDate.Date, maxDate.Date, minDate.Date); - taskMailReportAcList.Add(taskMailReportAc); - return taskMailReportAcList; - } - - /// - /// Get default task mail - /// - /// - /// - /// - /// - /// - /// - /// Task mail report - private TaskMailReportAc GetTaskMailReport(string userId, string role, string userName, DateTime createdOn, DateTime maxDate, DateTime minDate) - { - List taskMailDetailReportList = new List(); - var taskMailDetailReportAc = new TaskMailDetailReportAc(description: _stringConstant.NotAvailable, comment: _stringConstant.NotAvailable, status: TaskMailStatus.none); - taskMailDetailReportList.Add(taskMailDetailReportAc); - TaskMailReportAc taskMailReportAc = new TaskMailReportAc(userId, role, userName, taskMailDetailReportList, createdOn: createdOn, maxDate: maxDate, minDate: minDate); - return taskMailReportAc; - } - - /// - /// Getting taskmail details infromation - /// - /// - /// - /// - /// - /// - /// - /// - /// List of task mail report - private async Task GetTaskMailReportAsync(string userId, string role, string userName, int taskId, DateTime createdOn, DateTime maxDate, DateTime minDate) - { - List taskMailDetailReportAcList = new List(); - // getting taskmail details infromation using taskId. - var taskMailDetailList = (await _taskMailDetailRepository.FetchAsync(x => x.TaskId == taskId)); - foreach (var taskMailDetail in taskMailDetailList) - { - TaskMailDetailReportAc taskmailReportAc = new TaskMailDetailReportAc(taskMailDetail.Description, taskMailDetail.Comment, id: taskMailDetail.Id, hours: taskMailDetail.Hours, status: taskMailDetail.Status); - taskMailDetailReportAcList.Add(taskmailReportAc); - } - TaskMailReportAc taskMailReportAc = new TaskMailReportAc(userId, role, userName, taskMailDetailReportAcList, createdOn: createdOn, maxDate: maxDate, minDate: minDate); - return taskMailReportAc; - } - - /// - /// Task mail details report information for the user role admin and employee - /// - /// - /// - /// - /// - /// List task mail Report - private async Task> GetTaskMailDetailsInformationAsync(string userId, string role, string userName, string loginId) - { - List taskMailReportAcList = new List(); - var taskMail = (await _taskMailRepository.FetchAsync(y => y.EmployeeId == userId)).ToList(); - TaskMailReportAc taskMailReportAc; - if (taskMail.Any()) - { - //first time there are no selected date that's why pass maxdate as a selected date. - taskMailReportAc = await GetTaskMailReportAsync(userId, role, userName, taskMail.OrderByDescending(y => y.CreatedOn).First().Id, taskMail.Max(x => x.CreatedOn).Date, taskMail.Max(x => x.CreatedOn).Date, taskMail.Min(x => x.CreatedOn).Date); - } - else - { - //if employee does not have any task mail than show default task mail to the end users. - taskMailReportAc = GetTaskMailReport(userId, role, userName, DateTime.Now.Date, DateTime.Now.Date, DateTime.Now.Date); - } - taskMailReportAcList.Add(taskMailReportAc); - return taskMailReportAcList; - } - /// /// Private method to get user's details, user's accesstoken, user's task mail details and list or else appropriate message will be send /// diff --git a/Slack.Automation/Promact.Core.Test/AutofacConfig.cs b/Slack.Automation/Promact.Core.Test/AutofacConfig.cs index 94f50e6d..3b935b62 100644 --- a/Slack.Automation/Promact.Core.Test/AutofacConfig.cs +++ b/Slack.Automation/Promact.Core.Test/AutofacConfig.cs @@ -17,7 +17,7 @@ using Promact.Core.Repository.TaskMailRepository; using Effort; using Promact.Core.Repository.BotQuestionRepository; -using Moq; +using Moq; using Promact.Core.Repository.SlackChannelRepository; using Promact.Core.Repository.ExternalLoginRepository; using Promact.Erp.DomainModel.DataRepository; @@ -32,6 +32,7 @@ using Promact.Core.Repository.AutoMapperConfig; using Promact.Core.Repository.ServiceRepository; using Promact.Core.Repository.BaseRepository; +using Promact.Core.Repository.TaskMailReportRepository; namespace Promact.Core.Test { @@ -68,6 +69,8 @@ public static IComponentContext RegisterDependancies() builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); var emailServiceMock = new Mock(); var emailServiceMockObject = emailServiceMock.Object; builder.RegisterInstance(emailServiceMock).As>(); @@ -83,6 +86,11 @@ public static IComponentContext RegisterDependancies() var mockServiceRepositoryObject = mockServiceRepository.Object; builder.RegisterInstance(mockServiceRepository).As>(); builder.RegisterInstance(mockServiceRepositoryObject).As(); + + var httpContext = new Mock(); + var httpContextObject = httpContext.Object; + builder.RegisterInstance(httpContext).As>(); + builder.RegisterInstance(httpContextObject).As(); var container = builder.Build(); return container; diff --git a/Slack.Automation/Promact.Core.Test/LeaveReportRepositoryTest.cs b/Slack.Automation/Promact.Core.Test/LeaveReportRepositoryTest.cs index 48663937..85cbdd9d 100644 --- a/Slack.Automation/Promact.Core.Test/LeaveReportRepositoryTest.cs +++ b/Slack.Automation/Promact.Core.Test/LeaveReportRepositoryTest.cs @@ -1,14 +1,19 @@ using Autofac; +using Microsoft.AspNet.Identity; using Moq; using Promact.Core.Repository.LeaveReportRepository; using Promact.Core.Repository.LeaveRequestRepository; +using Promact.Core.Repository.ServiceRepository; using Promact.Erp.DomainModel.ApplicationClass; using Promact.Erp.DomainModel.Models; using Promact.Erp.Util.HttpClient; using Promact.Erp.Util.StringConstants; using System; +using System.Collections.Generic; using System.Linq; +using System.Security.Claims; using System.Threading.Tasks; +using System.Web; using Xunit; namespace Promact.Core.Test @@ -22,6 +27,9 @@ public class LeaveReportRepositoryTest private readonly Mock _mockHttpClient; private readonly IStringConstantRepository _stringConstant; private LeaveRequest leave = new LeaveRequest(); + private readonly Mock _mockHttpContextBase; + private readonly ApplicationUserManager _userManager; + private readonly Mock _mockServiceRepository; #endregion #region Constructor @@ -32,6 +40,9 @@ public LeaveReportRepositoryTest() _leaveRequestRepository = _componentContext.Resolve(); _mockHttpClient = _componentContext.Resolve>(); _stringConstant = _componentContext.Resolve(); + _mockHttpContextBase = _componentContext.Resolve>(); + _userManager = _componentContext.Resolve(); + _mockServiceRepository = _componentContext.Resolve>(); Initialize(); } #endregion @@ -41,14 +52,15 @@ public LeaveReportRepositoryTest() /// Method to test LeaveReport when the logged in person is admin /// [Fact, Trait("Category", "Required")] - public async void LeaveReportAdminTest() + public async Task LeaveReportAdminTestAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.UserDetailsFromOauthServer); var requestIdUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestIdUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestIdUrl, _stringConstant.AccessTokenForTest)).Returns(response); leave.EmployeeId = _stringConstant.EmployeeIdForTest; await _leaveRequestRepository.ApplyLeaveAsync(leave); - var leaveReports = _leaveReportRepository.LeaveReportAsync(_stringConstant.TestAccessToken, _stringConstant.EmployeeIdForTest).Result; + var leaveReports = _leaveReportRepository.LeaveReportAsync(_stringConstant.EmployeeIdForTest).Result; Assert.Equal(true, leaveReports.Any()); } @@ -56,14 +68,15 @@ public async void LeaveReportAdminTest() /// Method to test LeaveReport when the logged in person is employee /// [Fact, Trait("Category", "Required")] - public async void LeaveReportEmployeeTest() + public async Task LeaveReportEmployeeTestAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.EmployeeDetailFromOauthServer); var requestIdUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestIdUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestIdUrl, _stringConstant.AccessTokenForTest)).Returns(response); leave.EmployeeId = _stringConstant.EmployeeIdForTest; await _leaveRequestRepository.ApplyLeaveAsync(leave); - var leaveReports = _leaveReportRepository.LeaveReportAsync(_stringConstant.TestAccessToken, _stringConstant.EmployeeIdForTest).Result; + var leaveReports = _leaveReportRepository.LeaveReportAsync(_stringConstant.EmployeeIdForTest).Result; Assert.Equal(true, leaveReports.Any()); } @@ -71,17 +84,18 @@ public async void LeaveReportEmployeeTest() /// Method to test LeaveReport when the logged in person is teamleader /// [Fact, Trait("Category", "Required")] - public async void LeaveReportTeamLeaderTest() + public async Task LeaveReportTeamLeaderTestAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.TeamLeaderDetailFromOauthServer); var requestIdUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestIdUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestIdUrl, _stringConstant.AccessTokenForTest)).Returns(response); var responseProject = Task.FromResult(_stringConstant.ProjectUsers); var requestProjectUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.ProjectUsersByTeamLeaderId); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.TestAccessToken)).Returns(responseProject); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.AccessTokenForTest)).Returns(responseProject); leave.EmployeeId = _stringConstant.EmployeeIdForTest; await _leaveRequestRepository.ApplyLeaveAsync(leave); - var leaveReports = _leaveReportRepository.LeaveReportAsync(_stringConstant.TestAccessToken, _stringConstant.EmployeeIdForTest).Result; + var leaveReports = _leaveReportRepository.LeaveReportAsync(_stringConstant.EmployeeIdForTest).Result; Assert.Equal(true, leaveReports.Any()); } @@ -89,13 +103,14 @@ public async void LeaveReportTeamLeaderTest() /// Method to test LeaveReportDetails that returns the details of leave for an employee /// [Fact, Trait("Category", "Required")] - public async void LeaveReportDetailTest() + public async Task LeaveReportDetailTestAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.EmployeeDetailFromOauthServer); var requestUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); await _leaveRequestRepository.ApplyLeaveAsync(leave); - var leaveReport = _leaveReportRepository.LeaveReportDetailsAsync(_stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken).Result; + var leaveReport = _leaveReportRepository.LeaveReportDetailsAsync(_stringConstant.EmployeeIdForTest).Result; Assert.NotNull(leaveReport); } @@ -103,14 +118,15 @@ public async void LeaveReportDetailTest() /// Method to test LeaveReport that returns the list of employees with their leave status for incorrect values /// [Fact, Trait("Category", "Required")] - public async void LeaveReportTestFalse() + public async Task LeaveReportTestFalseAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.UserDetailsFromOauthServerFalse); var requestIdUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestIdUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestIdUrl, _stringConstant.AccessTokenForTest)).Returns(response); leave.EmployeeId = _stringConstant.EmployeeIdForTest; await _leaveRequestRepository.ApplyLeaveAsync(leave); - var leaveReports = _leaveReportRepository.LeaveReportAsync(_stringConstant.TestAccessToken, _stringConstant.EmployeeIdForTest).Result; + var leaveReports = _leaveReportRepository.LeaveReportAsync(_stringConstant.EmployeeIdForTest).Result; Assert.Equal(false, leaveReports.Any()); } @@ -120,17 +136,19 @@ public async void LeaveReportTestFalse() /// Method to test LeaveReportDetails that returns the details of leave for an employee with incorrect values /// [Fact, Trait("Category", "Required")] - public async void LeaveReportDetailTestFalse() + public async Task LeaveReportDetailTestFalseAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.EmptyString); var requestUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); await _leaveRequestRepository.ApplyLeaveAsync(leave); - var leaveDetail = _leaveReportRepository.LeaveReportDetailsAsync(_stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken).Result; + var leaveDetail = _leaveReportRepository.LeaveReportDetailsAsync(_stringConstant.EmployeeIdForTest).Result; Assert.Equal(false, leaveDetail.Any()); } + #endregion - + #region Initialization /// /// A method is used to initialize variables which are repetitively used /// @@ -145,5 +163,32 @@ public void Initialize() leave.CreatedOn = DateTime.UtcNow; } #endregion + + #region Private Method + /// + /// Private method to create a user add login info and mocking of Identity and return access token + /// + /// + private async Task CreateUserAndMockingHttpContextToReturnAccessToken() + { + var user = new ApplicationUser() + { + Id = _stringConstant.StringIdForTest, + UserName = _stringConstant.EmailForTest, + Email = _stringConstant.EmailForTest + }; + await _userManager.CreateAsync(user); + UserLoginInfo info = new UserLoginInfo(_stringConstant.PromactStringName, _stringConstant.AccessTokenForTest); + await _userManager.AddLoginAsync(user.Id, info); + Claim claim = new Claim(_stringConstant.Sub, _stringConstant.StringIdForTest); + var mockClaims = new Mock(); + IList claims = new List(); + claims.Add(claim); + mockClaims.Setup(x => x.Claims).Returns(claims); + _mockHttpContextBase.Setup(x => x.User.Identity).Returns(mockClaims.Object); + var accessToken = Task.FromResult(_stringConstant.AccessTokenForTest); + _mockServiceRepository.Setup(x => x.GerAccessTokenByRefreshToken(It.IsAny())).Returns(accessToken); + } + #endregion } } diff --git a/Slack.Automation/Promact.Core.Test/OauthCallsRepositoryTest.cs b/Slack.Automation/Promact.Core.Test/OauthCallsRepositoryTest.cs index 2f67993e..e592103c 100644 --- a/Slack.Automation/Promact.Core.Test/OauthCallsRepositoryTest.cs +++ b/Slack.Automation/Promact.Core.Test/OauthCallsRepositoryTest.cs @@ -1,9 +1,15 @@ using Autofac; +using Microsoft.AspNet.Identity; using Moq; using Promact.Core.Repository.OauthCallsRepository; +using Promact.Core.Repository.ServiceRepository; +using Promact.Erp.DomainModel.Models; using Promact.Erp.Util.HttpClient; using Promact.Erp.Util.StringConstants; +using System.Collections.Generic; +using System.Security.Claims; using System.Threading.Tasks; +using System.Web; using Xunit; namespace Promact.Core.Test @@ -18,6 +24,10 @@ public class OauthCallsRepositoryTest private readonly IOauthCallsRepository _oauthCallsRepository; private readonly Mock _mockHttpClient; private readonly IStringConstantRepository _stringConstant; + private readonly IOauthCallHttpContextRespository _oauthCallHttpContextRepository; + private readonly Mock _mockHttpContextBase; + private readonly ApplicationUserManager _userManager; + private readonly Mock _mockServiceRepository; #endregion #region Constructor @@ -27,6 +37,10 @@ public OauthCallsRepositoryTest() _oauthCallsRepository = _componentContext.Resolve(); _mockHttpClient = _componentContext.Resolve>(); _stringConstant = _componentContext.Resolve(); + _oauthCallHttpContextRepository = _componentContext.Resolve(); + _mockHttpContextBase = _componentContext.Resolve>(); + _userManager = _componentContext.Resolve(); + _mockServiceRepository = _componentContext.Resolve>(); } #endregion @@ -161,10 +175,11 @@ public async Task CasualLeaveFalseAsync() [Fact, Trait("Category", "Required")] public async Task GetUserByEmployeeIdAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.UserDetailsFromOauthServer); var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl ); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); - var userDetails = await _oauthCallsRepository.GetUserByEmployeeIdAsync(_stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); + var userDetails = await _oauthCallHttpContextRepository.GetUserByEmployeeIdAsync(_stringConstant.EmployeeIdForTest); Assert.Equal(userDetails.UserName, _stringConstant.TestUserName); } @@ -174,10 +189,11 @@ public async Task GetUserByEmployeeIdAsync() [Fact, Trait("Category", "Required")] public async Task GetUserByEmployeeIdFalseAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.UserDetailsFromOauthServer); var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); - var userDetails = await _oauthCallsRepository.GetUserByEmployeeIdAsync(_stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); + var userDetails = await _oauthCallHttpContextRepository.GetUserByEmployeeIdAsync(_stringConstant.EmployeeIdForTest); Assert.NotEqual(userDetails.UserName, _stringConstant.TestUserNameFalse); } @@ -187,11 +203,12 @@ public async Task GetUserByEmployeeIdFalseAsync() [Fact, Trait("Category", "Required")] public async Task GetProjectUsersByTeamLeaderIdAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.ProjectUsers); var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, _stringConstant.EmployeeIdForTest, _stringConstant.ProjectUsersByTeamLeaderId); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); var userName = _stringConstant.EmptyString; - var users = await _oauthCallsRepository.GetProjectUsersByTeamLeaderIdAsync(_stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken); + var users = await _oauthCallHttpContextRepository.GetProjectUsersByTeamLeaderIdAsync(_stringConstant.EmployeeIdForTest); foreach (var user in users) { userName = user.UserName; @@ -205,11 +222,12 @@ public async Task GetProjectUsersByTeamLeaderIdAsync() [Fact, Trait("Category", "Required")] public async Task GetProjectUsersByTeamLeaderIdFalseAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.ProjectUsers); var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, _stringConstant.EmployeeIdForTest, _stringConstant.ProjectUsersByTeamLeaderId); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); var userName = _stringConstant.EmptyString; - var users = await _oauthCallsRepository.GetProjectUsersByTeamLeaderIdAsync(_stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken); + var users = await _oauthCallHttpContextRepository.GetProjectUsersByTeamLeaderIdAsync(_stringConstant.EmployeeIdForTest); foreach (var user in users) { userName = user.UserName; @@ -251,10 +269,11 @@ public async Task UserIsAdminWrongAsync() [Fact, Trait("Category", "Required")] public async Task GetUserRoleAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.TaskMailReport); var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, _stringConstant.EmailForTest, _stringConstant.UserRoleUrl); _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); - var userRole = await _oauthCallsRepository.GetUserRoleAsync(_stringConstant.EmailForTest,_stringConstant.AccessTokenForTest); + var userRole = await _oauthCallHttpContextRepository.GetUserRoleAsync(_stringConstant.EmailForTest); Assert.Equal(3, userRole.Count); } @@ -266,10 +285,11 @@ public async Task GetUserRoleAsync() [Fact, Trait("Category", "Required")] public async Task GetAllProjectsTrueAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var responseProjects = Task.FromResult(_stringConstant.ProjectDetailsForAdminFromOauth); var requestUrlProjects = _stringConstant.AllProjectUrl; - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrlProjects, _stringConstant.TestAccessToken)).Returns(responseProjects); - var projects = await _oauthCallsRepository.GetAllProjectsAsync(_stringConstant.TestAccessToken); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrlProjects, _stringConstant.AccessTokenForTest)).Returns(responseProjects); + var projects = await _oauthCallHttpContextRepository.GetAllProjectsAsync(); Assert.Equal(1, projects.Count); } @@ -279,13 +299,41 @@ public async Task GetAllProjectsTrueAsync() [Fact, Trait("Category", "Required")] public async Task GetProjectDetailsTrueAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); int testProjectId = 1012; var responseProject = Task.FromResult(_stringConstant.ProjectDetail); var requestProjectUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, testProjectId, _stringConstant.GetProjectDetails); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.TestAccessToken)).Returns(responseProject); - var project = await _oauthCallsRepository.GetProjectDetailsAsync(testProjectId, _stringConstant.TestAccessToken); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.AccessTokenForTest)).Returns(responseProject); + var project = await _oauthCallHttpContextRepository.GetProjectDetailsAsync(testProjectId); Assert.Equal(2, project.ApplicationUsers.Count); } #endregion + + #region Private Method + /// + /// Private method to create a user add login info and mocking of Identity and return access token + /// + /// + private async Task CreateUserAndMockingHttpContextToReturnAccessToken() + { + var user = new ApplicationUser() + { + Id = _stringConstant.StringIdForTest, + UserName = _stringConstant.EmailForTest, + Email = _stringConstant.EmailForTest + }; + await _userManager.CreateAsync(user); + UserLoginInfo info = new UserLoginInfo(_stringConstant.PromactStringName, _stringConstant.AccessTokenForTest); + await _userManager.AddLoginAsync(user.Id, info); + Claim claim = new Claim(_stringConstant.Sub, _stringConstant.StringIdForTest); + var mockClaims = new Mock(); + IList claims = new List(); + claims.Add(claim); + mockClaims.Setup(x => x.Claims).Returns(claims); + _mockHttpContextBase.Setup(x => x.User.Identity).Returns(mockClaims.Object); + var accessToken = Task.FromResult(_stringConstant.AccessTokenForTest); + _mockServiceRepository.Setup(x => x.GerAccessTokenByRefreshToken(It.IsAny())).Returns(accessToken); + } + #endregion } } diff --git a/Slack.Automation/Promact.Core.Test/ScrumReportRepositoryTest.cs b/Slack.Automation/Promact.Core.Test/ScrumReportRepositoryTest.cs index 30f2b308..7f1dd25a 100644 --- a/Slack.Automation/Promact.Core.Test/ScrumReportRepositoryTest.cs +++ b/Slack.Automation/Promact.Core.Test/ScrumReportRepositoryTest.cs @@ -10,6 +10,11 @@ using Xunit; using Promact.Erp.Util.HttpClient; using Promact.Erp.DomainModel.ApplicationClass; +using System.Web; +using Promact.Core.Repository.ServiceRepository; +using Microsoft.AspNet.Identity; +using System.Security.Claims; +using System.Collections.Generic; namespace Promact.Core.Test { @@ -23,6 +28,9 @@ public class ScrumReportRepositoryTest private readonly IRepository _scrumAnswerDataRepository; private readonly IRepository _questionDataRepository; private readonly IStringConstantRepository _stringConstant; + private readonly Mock _mockHttpContextBase; + private readonly ApplicationUserManager _userManager; + private readonly Mock _mockServiceRepository; private Scrum scrum = new Scrum(); private ScrumAnswer scrumAnswer = new ScrumAnswer(); @@ -41,6 +49,9 @@ public ScrumReportRepositoryTest() _scrumAnswerDataRepository = _componentContext.Resolve>(); _questionDataRepository = _componentContext.Resolve>(); _stringConstant = _componentContext.Resolve(); + _mockHttpContextBase = _componentContext.Resolve>(); + _userManager = _componentContext.Resolve(); + _mockServiceRepository = _componentContext.Resolve>(); Initialize(); } #endregion @@ -50,15 +61,16 @@ public ScrumReportRepositoryTest() /// Method to test GetProjects when the logged in person is admin /// [Fact Trait("Category", "Required")] - public void GetProjectsAdminTest() + public async Task GetProjectsAdminTest() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.AdminLogin); var requestUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); var responseProjects = Task.FromResult(_stringConstant.ProjectDetailsForAdminFromOauth); var requestUrlProjects = _stringConstant.AllProjectUrl; - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrlProjects, _stringConstant.TestAccessToken)).Returns(responseProjects); - var projects = _scrumReportRepository.GetProjectsAsync(_stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken).Result; + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrlProjects, _stringConstant.AccessTokenForTest)).Returns(responseProjects); + var projects = _scrumReportRepository.GetProjectsAsync(_stringConstant.EmployeeIdForTest).Result; Assert.Equal(true, projects.Any()); } @@ -66,15 +78,16 @@ public void GetProjectsAdminTest() /// Method to test GetProjects when the logged in person is team leader /// [Fact Trait("Category", "Required")] - public void GetProjectsTeamLeaderTest() + public async Task GetProjectsTeamLeaderTest() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.TeamLeaderLogin); var requestUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); var responseProjects = Task.FromResult(_stringConstant.ProjectDetailsForTeamLeaderFromOauth); var requestUrlProjects = _stringConstant.AllProjectUrl; - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrlProjects, _stringConstant.TestAccessToken)).Returns(responseProjects); - var projects = _scrumReportRepository.GetProjectsAsync(_stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken).Result; + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrlProjects, _stringConstant.AccessTokenForTest)).Returns(responseProjects); + var projects = _scrumReportRepository.GetProjectsAsync(_stringConstant.EmployeeIdForTest).Result; Assert.Equal(true, projects.Any()); } @@ -83,15 +96,16 @@ public void GetProjectsTeamLeaderTest() /// Method to test GetProjects when the logged in person is employee /// [Fact Trait("Category", "Required")] - public void GetProjectsEmployeeTest() + public async Task GetProjectsEmployeeTest() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.EmployeeLogin); var requestUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); var responseProjects = Task.FromResult(_stringConstant.ProjectDetailsForEmployeeFromOauth); var requestUrlProjects = _stringConstant.AllProjectUrl; - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrlProjects, _stringConstant.TestAccessToken)).Returns(responseProjects); - var projects = _scrumReportRepository.GetProjectsAsync(_stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken).Result; + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrlProjects, _stringConstant.AccessTokenForTest)).Returns(responseProjects); + var projects = _scrumReportRepository.GetProjectsAsync(_stringConstant.EmployeeIdForTest).Result; Assert.Equal(true, projects.Any()); } @@ -103,17 +117,18 @@ public void GetProjectsEmployeeTest() [Fact Trait("Category", "Required")] public async Task ScrumReportDetailsPersonUnavailableTest() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); int testProjectId = 1012; DateTime scrumDate = new DateTime(2016, 9, 15); var response = Task.FromResult(_stringConstant.EmployeeLogin); var requestUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); var responseProject = Task.FromResult(_stringConstant.ProjectDetail); var requestProjectUrl = string.Format("{0}{1}", testProjectId, _stringConstant.GetProjectDetails); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.TestAccessToken)).Returns(responseProject); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.AccessTokenForTest)).Returns(responseProject); _scrumDataRepository.Insert(scrum); await _scrumDataRepository.SaveChangesAsync(); - var scrumProjectDetails = _scrumReportRepository.ScrumReportDetailsAsync(testProjectId, scrumDate, _stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken).Result; + var scrumProjectDetails = _scrumReportRepository.ScrumReportDetailsAsync(testProjectId, scrumDate, _stringConstant.EmployeeIdForTest).Result; Assert.NotNull(scrumProjectDetails); } @@ -124,21 +139,22 @@ public async Task ScrumReportDetailsPersonUnavailableTest() [Fact Trait("Category", "Required")] public async Task ScrumReportDetailsEmployeeTest() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); int testProjectId = 1012; DateTime scrumDate = new DateTime(2016, 9, 19); var response = Task.FromResult(_stringConstant.EmployeeLogin); var requestUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); var responseProject = Task.FromResult(_stringConstant.ProjectDetail); var requestProjectUrl = string.Format("{0}{1}", testProjectId, _stringConstant.GetProjectDetails); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.TestAccessToken)).Returns(responseProject); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.AccessTokenForTest)).Returns(responseProject); _scrumDataRepository.Insert(scrum); await _scrumDataRepository.SaveChangesAsync(); _questionDataRepository.Insert(questionOne); await _questionDataRepository.SaveChangesAsync(); _scrumAnswerDataRepository.Insert(scrumAnswer); await _scrumAnswerDataRepository.SaveChangesAsync(); - var scrumProjectDetails = _scrumReportRepository.ScrumReportDetailsAsync(testProjectId, scrumDate, _stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken).Result; + var scrumProjectDetails = _scrumReportRepository.ScrumReportDetailsAsync(testProjectId, scrumDate, _stringConstant.EmployeeIdForTest).Result; Assert.NotNull(scrumProjectDetails); } @@ -149,21 +165,22 @@ public async Task ScrumReportDetailsEmployeeTest() [Fact Trait("Category", "Required")] public async Task ScrumReportDetailsAdminTest() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); int testProjectId = 1012; DateTime scrumDate = new DateTime(2016, 9, 19); var response = Task.FromResult(_stringConstant.AdminLogin); var requestUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); var responseProject = Task.FromResult(_stringConstant.ProjectDetail); var requestProjectUrl = string.Format("{0}{1}", testProjectId, _stringConstant.GetProjectDetails); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.TestAccessToken)).Returns(responseProject); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.AccessTokenForTest)).Returns(responseProject); _scrumDataRepository.Insert(scrum); await _scrumDataRepository.SaveChangesAsync(); _questionDataRepository.Insert(questionTwo); await _questionDataRepository.SaveChangesAsync(); _scrumAnswerDataRepository.Insert(scrumAnswer); await _scrumAnswerDataRepository.SaveChangesAsync(); - var scrumProjectDetails = _scrumReportRepository.ScrumReportDetailsAsync(testProjectId, scrumDate, _stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken).Result; + var scrumProjectDetails = _scrumReportRepository.ScrumReportDetailsAsync(testProjectId, scrumDate, _stringConstant.EmployeeIdForTest).Result; Assert.NotNull(scrumProjectDetails); } @@ -174,21 +191,22 @@ public async Task ScrumReportDetailsAdminTest() [Fact Trait("Category", "Required")] public async Task ScrumReportDetailsTeamLeaderTest() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); int testProjectId = 1012; DateTime scrumDate = new DateTime(2016, 9, 19); var response = Task.FromResult(_stringConstant.TeamLeaderLoginDetails); var requestUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); var responseProject = Task.FromResult(_stringConstant.ProjectDetail); var requestProjectUrl = string.Format("{0}{1}", testProjectId, _stringConstant.GetProjectDetails); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.TestAccessToken)).Returns(responseProject); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.AccessTokenForTest)).Returns(responseProject); _scrumDataRepository.Insert(scrum); await _scrumDataRepository.SaveChangesAsync(); _questionDataRepository.Insert(questionThree); await _questionDataRepository.SaveChangesAsync(); _scrumAnswerDataRepository.Insert(scrumAnswer); await _scrumAnswerDataRepository.SaveChangesAsync(); - var scrumProjectDetails = _scrumReportRepository.ScrumReportDetailsAsync(testProjectId, scrumDate, _stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken).Result; + var scrumProjectDetails = _scrumReportRepository.ScrumReportDetailsAsync(testProjectId, scrumDate, _stringConstant.EmployeeIdForTest).Result; Assert.NotNull(scrumProjectDetails); } @@ -226,5 +244,32 @@ public void Initialize() questionThree.OrderNumber = QuestionOrder.RoadBlock; } #endregion + + #region Private Method + /// + /// Private method to create a user add login info and mocking of Identity and return access token + /// + /// + private async Task CreateUserAndMockingHttpContextToReturnAccessToken() + { + var user = new ApplicationUser() + { + Id = _stringConstant.StringIdForTest, + UserName = _stringConstant.EmailForTest, + Email = _stringConstant.EmailForTest + }; + await _userManager.CreateAsync(user); + UserLoginInfo info = new UserLoginInfo(_stringConstant.PromactStringName, _stringConstant.AccessTokenForTest); + await _userManager.AddLoginAsync(user.Id, info); + Claim claim = new Claim(_stringConstant.Sub, _stringConstant.StringIdForTest); + var mockClaims = new Mock(); + IList claims = new List(); + claims.Add(claim); + mockClaims.Setup(x => x.Claims).Returns(claims); + _mockHttpContextBase.Setup(x => x.User.Identity).Returns(mockClaims.Object); + var accessToken = Task.FromResult(_stringConstant.AccessTokenForTest); + _mockServiceRepository.Setup(x => x.GerAccessTokenByRefreshToken(It.IsAny())).Returns(accessToken); + } + #endregion } } diff --git a/Slack.Automation/Promact.Core.Test/TaskMailRepositoryTest.cs b/Slack.Automation/Promact.Core.Test/TaskMailRepositoryTest.cs index 13bd1277..12b5e718 100644 --- a/Slack.Automation/Promact.Core.Test/TaskMailRepositoryTest.cs +++ b/Slack.Automation/Promact.Core.Test/TaskMailRepositoryTest.cs @@ -5,6 +5,7 @@ using Promact.Core.Repository.BotQuestionRepository; using Promact.Core.Repository.ServiceRepository; using Promact.Core.Repository.SlackUserRepository; +using Promact.Core.Repository.TaskMailReportRepository; using Promact.Core.Repository.TaskMailRepository; using Promact.Erp.DomainModel.ApplicationClass; using Promact.Erp.DomainModel.ApplicationClass.SlackRequestAndResponse; @@ -14,8 +15,10 @@ using Promact.Erp.Util.HttpClient; using Promact.Erp.Util.StringConstants; using System; -using System.Net.Mail; +using System.Collections.Generic; +using System.Security.Claims; using System.Threading.Tasks; +using System.Web; using Xunit; namespace Promact.Core.Test @@ -34,6 +37,7 @@ public class TaskMailRepositoryTest private readonly Mock _mockEmailService; private readonly IStringConstantRepository _stringConstant; private readonly Mock _mockServiceRepository; + private readonly ITaskMailReportRepository _taskMailReportRepository; private SlackProfile profile = new SlackProfile(); private SlackUserDetails slackUserDetails = new SlackUserDetails(); private Question firstQuestion = new Question(); @@ -49,6 +53,8 @@ public class TaskMailRepositoryTest private Question SeventhQuestion = new Question(); private EmailApplication email = new EmailApplication(); private readonly Mock _loggerMock; + private readonly Mock _mockHttpContextBase; + #endregion #region Constructor @@ -66,6 +72,8 @@ public TaskMailRepositoryTest() _mockEmailService = _componentContext.Resolve>(); _loggerMock = _componentContext.Resolve>(); _mockServiceRepository = _componentContext.Resolve>(); + _taskMailReportRepository = _componentContext.Resolve(); + _mockHttpContextBase = _componentContext.Resolve>(); Initialize(); } #endregion @@ -524,7 +532,7 @@ public async Task TaskMailDetailsReportAsync() taskMailDetails.QuestionId = firstQuestion.Id; _taskMailDetailsDataRepository.Insert(taskMailDetails); await _taskMailDetailsDataRepository.SaveChangesAsync(); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportAsync(user.Id, _stringConstant.RoleAdmin, _stringConstant.FirstNameForTest, user.Id); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportAsync(user.Id, _stringConstant.RoleAdmin, _stringConstant.FirstNameForTest, user.Id); Assert.Equal(1, taskMailDetail.Count); } @@ -555,7 +563,7 @@ public async Task TaskMailDetailsReportForEmployeeAsync() taskMailDetails.QuestionId = firstQuestion.Id; _taskMailDetailsDataRepository.Insert(taskMailDetails); await _taskMailDetailsDataRepository.SaveChangesAsync(); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportAsync(user.Id, _stringConstant.RoleEmployee, _stringConstant.FirstNameForTest, user.Id); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportAsync(user.Id, _stringConstant.RoleEmployee, _stringConstant.FirstNameForTest, user.Id); Assert.Equal(1, taskMailDetail.Count); } /// @@ -564,6 +572,7 @@ public async Task TaskMailDetailsReportForEmployeeAsync() [Fact, Trait("Category", "Required")] public async Task TaskMailDetailsForSelectedDateForTeamLeaderAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var userResponse = Task.FromResult(_stringConstant.UserDetailsFromOauthServer); var userRequestUrl = string.Format("{0}{1}", _stringConstant.UserDetailsUrl, _stringConstant.FirstNameForTest); _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUserUrl, userRequestUrl, _stringConstant.AccessTokenForTest)).Returns(userResponse); @@ -575,9 +584,6 @@ public async Task TaskMailDetailsForSelectedDateForTeamLeaderAsync() _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUserUrl, managementRequestUrl, _stringConstant.AccessTokenForTest)).Returns(managementResponse); await _slackUserRepository.AddSlackUserAsync(slackUserDetails); await _botQuestionRepository.AddQuestionAsync(firstQuestion); - UserLoginInfo info = new UserLoginInfo(_stringConstant.PromactStringName, _stringConstant.AccessTokenForTest); - await _userManager.CreateAsync(user); - await _userManager.AddLoginAsync(user.Id, info); taskMail.EmployeeId = "1"; _taskMailDataRepository.Insert(taskMail); await _taskMailDataRepository.SaveChangesAsync(); @@ -590,7 +596,7 @@ public async Task TaskMailDetailsForSelectedDateForTeamLeaderAsync() _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportAsync(user.Id, _stringConstant.RoleTeamLeader, _stringConstant.FirstNameForTest, user.Id); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportAsync(user.Id, _stringConstant.RoleTeamLeader, _stringConstant.FirstNameForTest, user.Id); Assert.Equal(3, taskMailDetail.Count); } /// @@ -599,6 +605,7 @@ public async Task TaskMailDetailsForSelectedDateForTeamLeaderAsync() [Fact, Trait("Category", "Required")] public async Task TaskMailDetailsReportTeamLeaderAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var userResponse = Task.FromResult(_stringConstant.UserDetailsFromOauthServer); var userRequestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, _stringConstant.UserDetailsUrl, _stringConstant.FirstNameForTest); _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUserUrl, userRequestUrl, _stringConstant.AccessTokenForTest)).Returns(userResponse); @@ -610,9 +617,6 @@ public async Task TaskMailDetailsReportTeamLeaderAsync() _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUserUrl, managementRequestUrl, _stringConstant.AccessTokenForTest)).Returns(managementResponse); await _slackUserRepository.AddSlackUserAsync(slackUserDetails); await _botQuestionRepository.AddQuestionAsync(firstQuestion); - UserLoginInfo info = new UserLoginInfo(_stringConstant.PromactStringName, _stringConstant.AccessTokenForTest); - await _userManager.CreateAsync(user); - await _userManager.AddLoginAsync(user.Id, info); taskMail.EmployeeId = "1"; _taskMailDataRepository.Insert(taskMail); await _taskMailDataRepository.SaveChangesAsync(); @@ -626,7 +630,7 @@ public async Task TaskMailDetailsReportTeamLeaderAsync() _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportAsync(user.Id, _stringConstant.RoleTeamLeader, _stringConstant.FirstNameForTest, user.Id); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportAsync(user.Id, _stringConstant.RoleTeamLeader, _stringConstant.FirstNameForTest, user.Id); Assert.Equal(3, taskMailDetail.Count); } @@ -657,7 +661,7 @@ public async Task TaskMailDetailsForSelectedDateAsync() taskMailDetails.QuestionId = firstQuestion.Id; _taskMailDetailsDataRepository.Insert(taskMailDetails); await _taskMailDetailsDataRepository.SaveChangesAsync(); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleEmployee, Convert.ToString(DateTime.UtcNow), user.Id,DateTime.UtcNow); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleEmployee, Convert.ToString(DateTime.UtcNow), user.Id,DateTime.UtcNow); Assert.Equal(1, taskMailDetail.Count); } @@ -690,7 +694,7 @@ public async Task TaskMailDetailsForSelectedDateForAdminAsync() taskMailDetails.QuestionId = firstQuestion.Id; _taskMailDetailsDataRepository.Insert(taskMailDetails); await _taskMailDetailsDataRepository.SaveChangesAsync(); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleEmployee, Convert.ToString(DateTime.UtcNow), user.Id, DateTime.UtcNow); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleEmployee, Convert.ToString(DateTime.UtcNow), user.Id, DateTime.UtcNow); Assert.Equal(1, taskMailDetail.Count); } @@ -701,16 +705,12 @@ public async Task TaskMailDetailsForSelectedDateForAdminAsync() [Fact, Trait("Category", "Required")] public async Task GetAllEmployeeAsync() { - - UserLoginInfo info = new UserLoginInfo(_stringConstant.PromactStringName, _stringConstant.AccessTokenForTest); - await _userManager.CreateAsync(user); - await _userManager.AddLoginAsync(user.Id, info); - + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.TaskMailReport); var requestUrl = string.Format("{0}{1}", user.Id, _stringConstant.UserRoleUrl); _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); - var result = await _taskMailRepository.GetUserInformationAsync(user.Id); + var result = await _taskMailReportRepository.GetUserInformationAsync(user.Id); //Assert.Equal(0, result.Count); Assert.Equal(3, result.Count); } @@ -721,16 +721,12 @@ public async Task GetAllEmployeeAsync() [Fact, Trait("Category", "Required")] public async Task GetAllEmployeeForTeamLeaderAsync() { - - UserLoginInfo info = new UserLoginInfo(_stringConstant.PromactStringName, _stringConstant.AccessTokenForTest); - await _userManager.CreateAsync(user); - await _userManager.AddLoginAsync(user.Id, info); - + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.ListOfEmployeeForTeamLeader); var requestUrl = string.Format("{0}{1}", user.Id, _stringConstant.UserRoleUrl); _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); - var result = await _taskMailRepository.GetUserInformationAsync(user.Id); + var result = await _taskMailReportRepository.GetUserInformationAsync(user.Id); Assert.Equal(3, result.Count); } @@ -742,16 +738,12 @@ public async Task GetAllEmployeeForTeamLeaderAsync() [Fact, Trait("Category", "Required")] public async Task GetEmployeeInfromationAsync() { - - UserLoginInfo info = new UserLoginInfo(_stringConstant.PromactStringName, _stringConstant.AccessTokenForTest); - await _userManager.CreateAsync(user); - await _userManager.AddLoginAsync(user.Id, info); - + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.EmployeeInformation); var requestUrl = string.Format("{0}{1}", user.Id, _stringConstant.UserRoleUrl); _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); - var result = await _taskMailRepository.GetUserInformationAsync(user.Id); + var result = await _taskMailReportRepository.GetUserInformationAsync(user.Id); Assert.Equal(1, result.Count); } @@ -784,7 +776,7 @@ public async Task TaskMailDetailsReportSelectedDateAsync() taskMailDetails.QuestionId = firstQuestion.Id; _taskMailDetailsDataRepository.Insert(taskMailDetails); await _taskMailDetailsDataRepository.SaveChangesAsync(); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleAdmin, Convert.ToString(DateTime.UtcNow), user.Id, DateTime.UtcNow); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleAdmin, Convert.ToString(DateTime.UtcNow), user.Id, DateTime.UtcNow); Assert.Equal(1, taskMailDetail.Count); } @@ -824,7 +816,7 @@ public async Task TaskMailDetailsReportNextPreviousDateAsync() _taskMailDetailsDataRepository.Insert(taskMailDetails); await _taskMailDetailsDataRepository.SaveChangesAsync(); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleAdmin, Convert.ToString(DateTime.UtcNow), user.Id, DateTime.UtcNow); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleAdmin, Convert.ToString(DateTime.UtcNow), user.Id, DateTime.UtcNow); Assert.Equal(1, taskMailDetail.Count); } @@ -864,7 +856,7 @@ public async Task TaskMailDetailsReportNextPreviousDateForEmployeeAsync() _taskMailDetailsDataRepository.Insert(taskMailDetails); await _taskMailDetailsDataRepository.SaveChangesAsync(); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleEmployee, Convert.ToString(DateTime.UtcNow), user.Id, DateTime.UtcNow); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleEmployee, Convert.ToString(DateTime.UtcNow), user.Id, DateTime.UtcNow); Assert.Equal(1, taskMailDetail.Count); } @@ -900,7 +892,7 @@ public async Task TaskMailDetailsReportNextPreviousDateForTeamLeaderAsync() _taskMailDetailsDataRepository.Insert(taskMailDetails); await _taskMailDetailsDataRepository.SaveChangesAsync(); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleAdmin, Convert.ToString(DateTime.UtcNow), user.Id,DateTime.UtcNow); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleAdmin, Convert.ToString(DateTime.UtcNow), user.Id,DateTime.UtcNow); Assert.Equal(1, taskMailDetail.Count); } @@ -1071,5 +1063,32 @@ private void LoggerMocking() _loggerMock.Setup(x => x.Error(It.IsAny(), It.IsAny())); } #endregion + + #region Private Method + /// + /// Private method to create a user add login info and mocking of Identity and return access token + /// + /// + private async Task CreateUserAndMockingHttpContextToReturnAccessToken() + { + var user = new ApplicationUser() + { + Id = _stringConstant.StringIdForTest, + UserName = _stringConstant.EmailForTest, + Email = _stringConstant.EmailForTest + }; + await _userManager.CreateAsync(user); + UserLoginInfo info = new UserLoginInfo(_stringConstant.PromactStringName, _stringConstant.AccessTokenForTest); + await _userManager.AddLoginAsync(user.Id, info); + Claim claim = new Claim(_stringConstant.Sub, _stringConstant.StringIdForTest); + var mockClaims = new Mock(); + IList claims = new List(); + claims.Add(claim); + mockClaims.Setup(x => x.Claims).Returns(claims); + _mockHttpContextBase.Setup(x => x.User.Identity).Returns(mockClaims.Object); + var accessToken = Task.FromResult(_stringConstant.AccessTokenForTest); + _mockServiceRepository.Setup(x => x.GerAccessTokenByRefreshToken(It.IsAny())).Returns(accessToken); + } + #endregion } } \ No newline at end of file diff --git a/Slack.Automation/Promact.Erp.Core/Controllers/LeaveReportController.cs b/Slack.Automation/Promact.Erp.Core/Controllers/LeaveReportController.cs index b9a690ad..590053f5 100644 --- a/Slack.Automation/Promact.Erp.Core/Controllers/LeaveReportController.cs +++ b/Slack.Automation/Promact.Erp.Core/Controllers/LeaveReportController.cs @@ -1,6 +1,5 @@ using Promact.Core.Repository.AttachmentRepository; using Promact.Core.Repository.LeaveReportRepository; -using Promact.Erp.DomainModel.DataRepository; using Promact.Erp.DomainModel.Models; using Promact.Erp.Util.StringConstants; using System.Threading.Tasks; @@ -54,9 +53,7 @@ public class LeaveReportController : BaseController [Route("")] public async Task LeaveReportAsync() { - var loginUser = await _userManager.FindByIdAsync(GetUserId(User.Identity)); - var accessToken = await _attachmentRepository.UserAccessTokenAsync(loginUser.Email); - return Ok(await _leaveReport.LeaveReportAsync(accessToken, loginUser.Id)); + return Ok(await _leaveReport.LeaveReportAsync(GetUserId(User.Identity))); } @@ -86,9 +83,7 @@ public async Task LeaveReportDetailsAsync(string id) { if (id != null) { - var loginUser = await _userManager.FindByIdAsync(GetUserId(User.Identity)); - var accessToken = await _attachmentRepository.UserAccessTokenAsync(loginUser.Email); - return Ok(await _leaveReport.LeaveReportDetailsAsync(id, accessToken)); + return Ok(await _leaveReport.LeaveReportDetailsAsync(id)); } else { diff --git a/Slack.Automation/Promact.Erp.Core/Controllers/ScrumReportController.cs b/Slack.Automation/Promact.Erp.Core/Controllers/ScrumReportController.cs index ba141184..7debfe28 100644 --- a/Slack.Automation/Promact.Erp.Core/Controllers/ScrumReportController.cs +++ b/Slack.Automation/Promact.Erp.Core/Controllers/ScrumReportController.cs @@ -89,9 +89,7 @@ public ScrumReportController(IScrumReportRepository scrumRepository, IAttachment [Route("")] public async Task ScrumProjectListAsync() { - var loginUser = await _userManager.FindByIdAsync(GetUserId(User.Identity)); - var accessToken = await _attachmentRepository.UserAccessTokenAsync(loginUser.Email); - return Ok(await _scrumReportRepository.GetProjectsAsync(loginUser.Id, accessToken)); + return Ok(await _scrumReportRepository.GetProjectsAsync(GetUserId(User.Identity))); } /** @@ -128,9 +126,7 @@ public async Task ScrumDetailsAsync(int id) { string queryString = Request.RequestUri.Query.Substring(1,24); DateTime date = Convert.ToDateTime(queryString); - var loginUser = await _userManager.FindByIdAsync(GetUserId(User.Identity)); - var accessToken = await _attachmentRepository.UserAccessTokenAsync(loginUser.Email); - return Ok(await _scrumReportRepository.ScrumReportDetailsAsync(id, date,loginUser.Id, accessToken)); + return Ok(await _scrumReportRepository.ScrumReportDetailsAsync(id, date, GetUserId(User.Identity))); } #endregion } diff --git a/Slack.Automation/Promact.Erp.Core/Controllers/TaskReportController.cs b/Slack.Automation/Promact.Erp.Core/Controllers/TaskReportController.cs index e2434273..8c44dc9a 100644 --- a/Slack.Automation/Promact.Erp.Core/Controllers/TaskReportController.cs +++ b/Slack.Automation/Promact.Erp.Core/Controllers/TaskReportController.cs @@ -1,11 +1,10 @@ -using Promact.Core.Repository.TaskMailRepository; -using System.Threading.Tasks; +using System.Threading.Tasks; using System.Web.Http; -using Microsoft.AspNet.Identity; using System.Collections.Generic; using Promact.Erp.DomainModel.ApplicationClass; using Promact.Erp.Util.StringConstants; using System; +using Promact.Core.Repository.TaskMailReportRepository; namespace Promact.Erp.Core.Controllers { @@ -14,8 +13,8 @@ namespace Promact.Erp.Core.Controllers [Authorize] public class TaskReportController : BaseController { - private readonly ITaskMailRepository _taskMailReport; - public TaskReportController(ITaskMailRepository taskMailReport, IStringConstantRepository stringConstant) + private readonly ITaskMailReportRepository _taskMailReport; + public TaskReportController(ITaskMailReportRepository taskMailReport, IStringConstantRepository stringConstant) :base(stringConstant) { _taskMailReport = taskMailReport; diff --git a/Slack.Automation/Promact.Erp.Web/App_Start/AutofacConfig.cs b/Slack.Automation/Promact.Erp.Web/App_Start/AutofacConfig.cs index 867b750e..a6720adc 100644 --- a/Slack.Automation/Promact.Erp.Web/App_Start/AutofacConfig.cs +++ b/Slack.Automation/Promact.Erp.Web/App_Start/AutofacConfig.cs @@ -20,6 +20,7 @@ using Promact.Core.Repository.SlackChannelRepository; using Promact.Core.Repository.SlackRepository; using Promact.Core.Repository.SlackUserRepository; +using Promact.Core.Repository.TaskMailReportRepository; using Promact.Core.Repository.TaskMailRepository; using Promact.Erp.Core.Controllers; using Promact.Erp.DomainModel.Context; @@ -83,6 +84,9 @@ public static IComponentContext RegisterDependancies() builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterModule(); builder.RegisterModule(); builder.RegisterModule(); builder.Register(x => AutoMapperConfiguration.ConfigureMap()).As().SingleInstance(); diff --git a/Slack.Automation/Promact.Erp.Web/Web.config b/Slack.Automation/Promact.Erp.Web/Web.config index f856d50e..16c3cdc0 100644 --- a/Slack.Automation/Promact.Erp.Web/Web.config +++ b/Slack.Automation/Promact.Erp.Web/Web.config @@ -93,7 +93,7 @@ - + From 6ccebd7d8141a3bd4887982767c68999e37cf910 Mon Sep 17 00:00:00 2001 From: Siddhartha Shaw Date: Mon, 13 Feb 2017 16:58:02 +0530 Subject: [PATCH 2/2] ILeaveReportRepository.cs - removed used of access token as parameter LeaveReportRepository.cs - removed used of access token as parameter IOauthCallHttpContextRespository.cs - separated the method from OAuthCallRepository which use HttpContext OauthCallHttpContextRespository.cs - separated the method from OAuthCallRepository which use HttpContext IOauthCallRespository.cs - separated the method from OAuthCallRepository which use HttpContext OauthCallRespository.cs - separated the method from OAuthCallRepository which use HttpContext IScrumReportRepository.cs - removed used of access token as parameter ScrumReportRepository.cs - removed used of access token as parameter SlackRepository.cs - used GetUserByUserIdAsync instead of GetUserByEmployeeIdAsync ITaskMailReportRepository.cs - separated the method of task mail report from task mail repository TaskMailReportRepository.cs - separated the method of task mail report from task mail repository ITaskMailRepository.cs - separated the method of task mail report from task mail repository TaskMailRepository.cs - separated the method of task mail report from task mail repository AutofacConfig.cs(Test) - Added new services and mocking of HttpContext LeaveReportRepositoryTest.cs - added mocking of HttpContext and updated test cases OauthCallsRepositoryTest.cs - added mocking of HttpContext and updated test cases ScrumReportRepositoryTest.cs - added mocking of HttpContext and updated test cases TaskMailRepositoryTest.cs - added mocking of HttpContext and updated test cases LeaveReportController.cs - removed the use of access token as parameter ScrumReportController.cs - removed the use of access token as parameter TaskReportController.cs - removed the use of access token as parameter AutofacConfig.cs - register services of OauthCallHttpContextRespository, TaskMailReportRepository and AutofacWebTypesModule Fixes - #102 --- .../ILeaveReportRepository.cs | 10 +- .../LeaveReportRepository.cs | 47 ++- .../IOauthCallHttpContextRespository.cs | 52 +++ .../IOauthCallsRepository.cs | 53 --- .../OauthCallHttpContextRespository.cs | 155 +++++++++ .../OauthCallsRepository.cs | 110 ------ .../Promact.Core.Repository.csproj | 4 + .../IScrumReportRepository.cs | 16 +- .../ScrumReportRepository.cs | 28 +- .../SlackRepository/SlackRepository.cs | 2 +- .../ITaskMailReportRepository.cs | 39 +++ .../TaskMailReportRepository.cs | 317 ++++++++++++++++++ .../TaskMailRepository/ITaskMailRepository.cs | 30 -- .../TaskMailRepository/TaskMailRepository.cs | 264 --------------- .../Promact.Core.Test/AutofacConfig.cs | 10 +- .../LeaveReportRepositoryTest.cs | 85 +++-- .../OauthCallsRepositoryTest.cs | 74 +++- .../ScrumReportRepositoryTest.cs | 93 +++-- .../TaskMailRepositoryTest.cs | 89 +++-- .../Controllers/LeaveReportController.cs | 9 +- .../Controllers/ScrumReportController.cs | 8 +- .../Controllers/TaskReportController.cs | 9 +- .../App_Start/AutofacConfig.cs | 4 + Slack.Automation/Promact.Erp.Web/Web.config | 2 +- 24 files changed, 885 insertions(+), 625 deletions(-) create mode 100644 Slack.Automation/Promact.Core.Repository/OauthCallsRepository/IOauthCallHttpContextRespository.cs create mode 100644 Slack.Automation/Promact.Core.Repository/OauthCallsRepository/OauthCallHttpContextRespository.cs create mode 100644 Slack.Automation/Promact.Core.Repository/TaskMailReportRepository/ITaskMailReportRepository.cs create mode 100644 Slack.Automation/Promact.Core.Repository/TaskMailReportRepository/TaskMailReportRepository.cs diff --git a/Slack.Automation/Promact.Core.Repository/LeaveReportRepository/ILeaveReportRepository.cs b/Slack.Automation/Promact.Core.Repository/LeaveReportRepository/ILeaveReportRepository.cs index 6e8b899a..431a2b56 100644 --- a/Slack.Automation/Promact.Core.Repository/LeaveReportRepository/ILeaveReportRepository.cs +++ b/Slack.Automation/Promact.Core.Repository/LeaveReportRepository/ILeaveReportRepository.cs @@ -9,17 +9,15 @@ public interface ILeaveReportRepository /// /// Method that returns the list of employees with their leave status based on their roles /// - /// - /// + /// userId of user /// List of employees with leave status based on roles - Task> LeaveReportAsync(string accessToken,string userId); + Task> LeaveReportAsync(string userId); /// /// Method that returns the details of leave for an employee /// - /// - /// + /// userId of user /// Details of leave for an employee - Task> LeaveReportDetailsAsync(string employeeId, string accessToken); + Task> LeaveReportDetailsAsync(string employeeId); } } diff --git a/Slack.Automation/Promact.Core.Repository/LeaveReportRepository/LeaveReportRepository.cs b/Slack.Automation/Promact.Core.Repository/LeaveReportRepository/LeaveReportRepository.cs index 54433eaf..437ce513 100644 --- a/Slack.Automation/Promact.Core.Repository/LeaveReportRepository/LeaveReportRepository.cs +++ b/Slack.Automation/Promact.Core.Repository/LeaveReportRepository/LeaveReportRepository.cs @@ -14,12 +14,13 @@ public class LeaveReportRepository : ILeaveReportRepository #region Private Variables private readonly IRepository _leaveRequest; - private readonly IOauthCallsRepository _oauthCallsRepository; + private readonly IOauthCallHttpContextRespository _oauthCallsRepository; private readonly IStringConstantRepository _stringConstant; #endregion #region Constructor - public LeaveReportRepository(IRepository leaveRequest, IStringConstantRepository stringConstant, IOauthCallsRepository oauthCallsRepository) + public LeaveReportRepository(IRepository leaveRequest, IStringConstantRepository stringConstant, + IOauthCallHttpContextRespository oauthCallsRepository) { _leaveRequest = leaveRequest; _stringConstant = stringConstant; @@ -31,16 +32,15 @@ public LeaveReportRepository(IRepository leaveRequest, IStringCons /// /// Method to return the list of leave reports /// - /// - /// + /// list of LeaveRequest /// List of leave reports - private async Task> GetLeaveReportListAsync(List distinctLeaveRequests, string accessToken) + private async Task> GetLeaveReportListAsync(List distinctLeaveRequests) { List leaveReports = new List(); foreach (var leaveRequest in distinctLeaveRequests) { //Get details of the employee from oauth server - User user = await GetEmployeeByIdAsync(leaveRequest.EmployeeId, accessToken); + User user = await GetEmployeeByIdAsync(leaveRequest.EmployeeId); if (user != null) { LeaveReport leaveReport = new LeaveReport @@ -65,7 +65,7 @@ private async Task> GetLeaveReportListAsync(List /// /// Method to calculate number of casual leaves used by a specific employee /// - /// + /// userId of user /// Number of casual leaves utilised private async Task GetUtilisedCasualLeavesByEmployeeAsync(string employeeId) { @@ -86,7 +86,7 @@ private async Task GetUtilisedCasualLeavesByEmployeeAsync(string employe /// /// Method to calculate number of sick leaves used by a specific employee /// - /// + /// userId of user /// Number of sick leaves utilised private async Task GetUtilisedSickLeavesByEmployeeAsync(string employeeId) { @@ -107,12 +107,11 @@ private async Task GetUtilisedSickLeavesByEmployeeAsync(string employeeI /// /// Method to get user details from the Oauth server using their id and access token /// - /// - /// + /// userId of user /// User details - private async Task GetEmployeeByIdAsync(string employeeId, string accessToken) + private async Task GetEmployeeByIdAsync(string employeeId) { - User user = await _oauthCallsRepository.GetUserByEmployeeIdAsync(employeeId, accessToken); + User user = await _oauthCallsRepository.GetUserByEmployeeIdAsync(employeeId); return user; } @@ -122,17 +121,16 @@ private async Task GetEmployeeByIdAsync(string employeeId, string accessTo /// /// Method that returns leave report based on the role of logged in user /// - /// - /// - /// Leave report - public async Task> LeaveReportAsync(string accessToken,string userId ) + /// userId of user + /// list of Leave report + public async Task> LeaveReportAsync(string userId) { //Get all approved leave requests List leaveRequests = _leaveRequest.GetAll().ToList().FindAll(x => x.Status.Equals(Condition.Approved)); List leaveReports = new List(); //Get details of logged in user - User loginUser = await GetEmployeeByIdAsync(userId, accessToken); + User loginUser = await GetEmployeeByIdAsync(userId); //Check if there exists any approved leave request if(leaveRequests.Any()) @@ -142,24 +140,24 @@ public async Task> LeaveReportAsync(string accessToken, if (loginUser.Role.Equals(_stringConstant.Admin)) { List distinctLeaveRequests = leaveRequests.GroupBy(x => x.EmployeeId).Select(x => x.FirstOrDefault()).ToList(); - leaveReports = await GetLeaveReportListAsync(distinctLeaveRequests, accessToken); + leaveReports = await GetLeaveReportListAsync(distinctLeaveRequests); return leaveReports; } //For employee, only his leave report else if (loginUser.Role.Equals(_stringConstant.Employee)) { List distinctLeaveRequests = leaveRequests.FindAll(x => x.EmployeeId == loginUser.Id); - leaveReports = await GetLeaveReportListAsync(distinctLeaveRequests, accessToken); + leaveReports = await GetLeaveReportListAsync(distinctLeaveRequests); return leaveReports; } //For teamleader, leave report of all the team member(s) else if (loginUser.Role.Equals(_stringConstant.TeamLeader)) { - List projectUsers = await _oauthCallsRepository.GetProjectUsersByTeamLeaderIdAsync(loginUser.Id, accessToken); + List projectUsers = await _oauthCallsRepository.GetProjectUsersByTeamLeaderIdAsync(loginUser.Id); foreach (var projectUser in projectUsers) { List distinctLeaveRequests = leaveRequests.Where(x => x.EmployeeId.Contains(projectUser.Id)).GroupBy(x => x.EmployeeId).Select(x => x.FirstOrDefault()).ToList(); - List leaveReport = await GetLeaveReportListAsync(distinctLeaveRequests, accessToken); + List leaveReport = await GetLeaveReportListAsync(distinctLeaveRequests); leaveReports.AddRange(leaveReport); } return leaveReports; @@ -172,13 +170,12 @@ public async Task> LeaveReportAsync(string accessToken, /// /// Method that returns the details of leave for an employee /// - /// - /// + /// userId of user /// Details of leave for an employee - public async Task > LeaveReportDetailsAsync(string employeeId,string accessToken) + public async Task > LeaveReportDetailsAsync(string employeeId) { //Get user details - User user = await GetEmployeeByIdAsync(employeeId,accessToken); + User user = await GetEmployeeByIdAsync(employeeId); List leaveReportDetails = new List(); if (user != null) diff --git a/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/IOauthCallHttpContextRespository.cs b/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/IOauthCallHttpContextRespository.cs new file mode 100644 index 00000000..2f721d8f --- /dev/null +++ b/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/IOauthCallHttpContextRespository.cs @@ -0,0 +1,52 @@ +using Promact.Erp.DomainModel.ApplicationClass; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Promact.Core.Repository.OauthCallsRepository +{ + public interface IOauthCallHttpContextRespository + { + /// + /// Method to call an api from project oAuth server and get Employee detail by their Id. - GA + /// + /// id of employee + /// user's access token from Promact OAuth Server + /// User Details. Object of User + Task GetUserByEmployeeIdAsync(string employeeId); + + /// + /// Method to call an api from oauth server and get all the projects under a specific teamleader id along with users in it. - GA + /// + /// id of the team leader + /// list of users in a project.List of object of User + Task> GetProjectUsersByTeamLeaderIdAsync(string teamLeaderId); + + /// + /// Method is used to call an api from oauth server and return list of all the projects. - GA + /// + /// user's access token from Promact OAuth Server + /// list of all the projects + Task> GetAllProjectsAsync(); + + /// + /// Method to call an api from oauth server and get the details of a project using projecId. - GA + /// + /// id of project + /// Details of a project + Task GetProjectDetailsAsync(int projectId); + + /// + /// Used to get user role. - RS + /// + /// id of user + /// user details. List of object of UserRoleAc + Task> GetUserRoleAsync(string userId); + + /// + /// List of employee under this employee. - RS + /// + /// id of user + /// List of user. List of object of UserRoleAc + Task> GetListOfEmployeeAsync(string userId); + } +} diff --git a/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/IOauthCallsRepository.cs b/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/IOauthCallsRepository.cs index 1cb236bb..ea9e1978 100644 --- a/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/IOauthCallsRepository.cs +++ b/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/IOauthCallsRepository.cs @@ -32,15 +32,6 @@ public interface IOauthCallsRepository /// user's access token from Promact OAuth Server /// management details.List of object of User Task> GetManagementUserNameAsync(string accessToken); - - - /// - /// Used to get user role. - RS - /// - /// id of user - /// user's access token from Promact OAuth Server - /// user details. List of object of UserRoleAc - Task> GetUserRoleAsync(string userId, string accessToken); /// @@ -52,14 +43,6 @@ public interface IOauthCallsRepository Task GetProjectDetailsAsync(string channelName, string accessToken); - /// - /// List of employee under this employee. - RS - /// - /// id of user - /// user's access token from Promact OAuth Server - /// List of user. List of object of UserRoleAc - Task> GetListOfEmployeeAsync(string userId, string accessToken); - /// /// This method is used to fetch list of users/employees of the given group name. - JJ /// @@ -78,24 +61,6 @@ public interface IOauthCallsRepository Task AllowedLeave(string userId, string accessToken); - /// - /// Method to call an api from project oAuth server and get Employee detail by their Id. - GA - /// - /// id of employee - /// user's access token from Promact OAuth Server - /// User Details. Object of User - Task GetUserByEmployeeIdAsync(string employeeId, string accessToken); - - - /// - /// Method to call an api from oauth server and get all the projects under a specific teamleader id along with users in it. - GA - /// - /// id of the team leader - /// user's access token from Promact OAuth Server - /// list of users in a project.List of object of User - Task> GetProjectUsersByTeamLeaderIdAsync(string teamLeaderId, string accessToken); - - /// /// Method to call an api from oAuth server and get whether user is admin or not. - SS /// @@ -103,23 +68,5 @@ public interface IOauthCallsRepository /// user's access token from Promact OAuth Server /// true if user has admin role else false Task UserIsAdminAsync(string userId, string accessToken); - - - /// - /// Method is used to call an api from oauth server and return list of all the projects. - GA - /// - /// user's access token from Promact OAuth Server - /// list of all the projects - Task> GetAllProjectsAsync(string accessToken); - - - /// - /// Method to call an api from oauth server and get the details of a project using projecId. - GA - /// - /// id of project - /// user's access token from Promact OAuth Server - /// Details of a project - Task GetProjectDetailsAsync(int projectId, string accessToken); - } } \ No newline at end of file diff --git a/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/OauthCallHttpContextRespository.cs b/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/OauthCallHttpContextRespository.cs new file mode 100644 index 00000000..b80902fe --- /dev/null +++ b/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/OauthCallHttpContextRespository.cs @@ -0,0 +1,155 @@ +using Newtonsoft.Json; +using Promact.Core.Repository.AttachmentRepository; +using Promact.Erp.DomainModel.ApplicationClass; +using Promact.Erp.DomainModel.Models; +using Promact.Erp.Util.HttpClient; +using Promact.Erp.Util.StringConstants; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Claims; +using System.Text; +using System.Threading.Tasks; +using System.Web; + +namespace Promact.Core.Repository.OauthCallsRepository +{ + public class OauthCallHttpContextRespository : IOauthCallHttpContextRespository + { + #region Private + private readonly IStringConstantRepository _stringConstant; + private readonly IHttpClientService _httpClientService; + private readonly HttpContextBase _httpContextBase; + private readonly ApplicationUserManager _userManager; + private readonly IAttachmentRepository _attachmentRepository; + #endregion + + #region Constructor + public OauthCallHttpContextRespository(IStringConstantRepository stringConstant, IHttpClientService httpClientService, + HttpContextBase httpContextBase, ApplicationUserManager userManager, IAttachmentRepository attachmentRepository) + { + _stringConstant = stringConstant; + _httpClientService = httpClientService; + _httpContextBase = httpContextBase; + _userManager = userManager; + _attachmentRepository = attachmentRepository; + } + #endregion + + #region Public Methods + /// + /// Method to call an api from project oAuth server and get Employee detail by their Id. - GA + /// + /// id of employee + /// user's access token from Promact OAuth Server + /// User Details. Object of User + public async Task GetUserByEmployeeIdAsync(string employeeId) + { + var accessToken = await GetCurrentUserAcceesToken(); + User userDetails = new User(); + var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, employeeId, _stringConstant.UserDetailUrl); + var response = await _httpClientService.GetAsync(_stringConstant.UserUrl, requestUrl, accessToken); + if (response != null) + { + userDetails = JsonConvert.DeserializeObject(response); + } + return userDetails; + } + + /// + /// Method to call an api from oauth server and get all the projects under a specific teamleader id along with users in it. - GA + /// + /// id of the team leader + /// list of users in a project.List of object of User + public async Task> GetProjectUsersByTeamLeaderIdAsync(string teamLeaderId) + { + var accessToken = await GetCurrentUserAcceesToken(); + List projectUsers = new List(); + var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, teamLeaderId, _stringConstant.ProjectUsersByTeamLeaderId); + var response = await _httpClientService.GetAsync(_stringConstant.ProjectUrl, requestUrl, accessToken); + if (response != null) + { + projectUsers = JsonConvert.DeserializeObject>(response); + } + return projectUsers; + } + + /// + /// Method is used to call an api from oauth server and return list of all the projects. - GA + /// + /// user's access token from Promact OAuth Server + /// list of all the projects + public async Task> GetAllProjectsAsync() + { + var accessToken = await GetCurrentUserAcceesToken(); + List projects = new List(); + var requestUrl = _stringConstant.AllProjectUrl; + var response = await _httpClientService.GetAsync(_stringConstant.ProjectUrl, requestUrl, accessToken); + if (response != null) + { + projects = JsonConvert.DeserializeObject>(response); + } + return projects; + } + + + /// + /// Method to call an api from oauth server and get the details of a project using projecId. - GA + /// + /// id of project + /// Details of a project + public async Task GetProjectDetailsAsync(int projectId) + { + var accessToken = await GetCurrentUserAcceesToken(); + ProjectAc project = new ProjectAc(); + var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, projectId, _stringConstant.GetProjectDetails); + var response = await _httpClientService.GetAsync(_stringConstant.ProjectUrl, requestUrl, accessToken); + if (response != null) + { + project = JsonConvert.DeserializeObject(response); + } + return project; + } + + + + /// + /// Used to get user role. - RS + /// + /// id of user + /// user details. List of object of UserRoleAc + public async Task> GetUserRoleAsync(string userId) + { + var accessToken = await GetCurrentUserAcceesToken(); + var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, userId, _stringConstant.UserRoleUrl); + var response = await _httpClientService.GetAsync(_stringConstant.UserUrl, requestUrl, accessToken); + var userRoleListAc = JsonConvert.DeserializeObject>(response); + return userRoleListAc; + } + + + /// + /// List of employee under this employee. - RS + /// + /// id of user + /// List of user. List of object of UserRoleAc + public async Task> GetListOfEmployeeAsync(string userId) + { + var accessToken = await GetCurrentUserAcceesToken(); + var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, userId, _stringConstant.TeamMembersUrl); + var response = await _httpClientService.GetAsync(_stringConstant.UserUrl, requestUrl, accessToken); + var userRoleListAc = JsonConvert.DeserializeObject>(response); + return userRoleListAc; + } + #endregion + + #region Private Method + private async Task GetCurrentUserAcceesToken() + { + var claimIdentity = _httpContextBase.User.Identity as ClaimsIdentity; + var userName = (await _userManager.FindByIdAsync(claimIdentity.Claims.ToList().Single(x => x.Type == _stringConstant.Sub).Value)).UserName; + return (await _attachmentRepository.UserAccessTokenAsync(userName)); + } + #endregion + } +} diff --git a/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/OauthCallsRepository.cs b/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/OauthCallsRepository.cs index fc3c09be..8a8e1f52 100644 --- a/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/OauthCallsRepository.cs +++ b/Slack.Automation/Promact.Core.Repository/OauthCallsRepository/OauthCallsRepository.cs @@ -14,8 +14,6 @@ public class OauthCallsRepository : IOauthCallsRepository private readonly IHttpClientService _httpClientService; private readonly IStringConstantRepository _stringConstant; - - #endregion @@ -92,7 +90,6 @@ public async Task> GetManagementUserNameAsync(string accessToken) /// Method to call an api from project oAuth server and get Project details of the given channel. - JJ /// /// slack channel name - /// user's access token from Promact OAuth Server /// object of ProjectAc public async Task GetProjectDetailsAsync(string channelName, string accessToken) { @@ -126,25 +123,6 @@ public async Task> GetUsersByChannelNameAsync(string channelName, str } - /// - /// Method to call an api from project oAuth server and get Employee detail by their Id. - GA - /// - /// id of employee - /// user's access token from Promact OAuth Server - /// User Details. Object of User - public async Task GetUserByEmployeeIdAsync(string employeeId, string accessToken) - { - User userDetails = new User(); - var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, employeeId, _stringConstant.UserDetailUrl); - var response = await _httpClientService.GetAsync(_stringConstant.UserUrl, requestUrl, accessToken); - if (response != null) - { - userDetails = JsonConvert.DeserializeObject(response); - } - return userDetails; - } - - /// /// Method to call an api of oAuth server and get Casual leave allowed to user by user slackName. - SS /// @@ -164,25 +142,6 @@ public async Task AllowedLeave(string userId, string accessToken) } - /// - /// Method to call an api from oauth server and get all the projects under a specific teamleader id along with users in it. - GA - /// - /// id of the team leader - /// user's access token from Promact OAuth Server - /// list of users in a project.List of object of User - public async Task> GetProjectUsersByTeamLeaderIdAsync(string teamLeaderId, string accessToken) - { - List projectUsers = new List(); - var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, teamLeaderId, _stringConstant.ProjectUsersByTeamLeaderId); - var response = await _httpClientService.GetAsync(_stringConstant.ProjectUrl, requestUrl, accessToken); - if (response != null) - { - projectUsers = JsonConvert.DeserializeObject>(response); - } - return projectUsers; - } - - /// /// Method to call an api from oAuth server and get whether user is admin or not. - SS /// @@ -200,75 +159,6 @@ public async Task UserIsAdminAsync(string userId, string accessToken) } return result; } - - - /// - /// Used to get user role. - RS - /// - /// id of user - /// user's access token from Promact OAuth Server - /// user details. List of object of UserRoleAc - public async Task> GetUserRoleAsync(string userId, string accessToken) - { - var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, userId, _stringConstant.UserRoleUrl); - var response = await _httpClientService.GetAsync(_stringConstant.UserUrl, requestUrl, accessToken); - var userRoleListAc = JsonConvert.DeserializeObject>(response); - return userRoleListAc; - } - - - /// - /// List of employee under this employee. - RS - /// - /// id of user - /// user's access token from Promact OAuth Server - /// List of user. List of object of UserRoleAc - public async Task> GetListOfEmployeeAsync(string userId, string accessToken) - { - var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, userId, _stringConstant.TeamMembersUrl); - var response = await _httpClientService.GetAsync(_stringConstant.UserUrl, requestUrl, accessToken); - var userRoleListAc = JsonConvert.DeserializeObject>(response); - return userRoleListAc; - } - - /// - /// Method is used to call an api from oauth server and return list of all the projects. - GA - /// - /// user's access token from Promact OAuth Server - /// list of all the projects - public async Task> GetAllProjectsAsync(string accessToken) - { - List projects = new List(); - var requestUrl = _stringConstant.AllProjectUrl; - var response = await _httpClientService.GetAsync(_stringConstant.ProjectUrl, requestUrl, accessToken); - if (response != null) - { - projects = JsonConvert.DeserializeObject>(response); - } - return projects; - } - - - /// - /// Method to call an api from oauth server and get the details of a project using projecId. - GA - /// - /// id of project - /// user's access token from Promact OAuth Server - /// Details of a project - public async Task GetProjectDetailsAsync(int projectId, string accessToken) - { - ProjectAc project = new ProjectAc(); - var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, projectId,_stringConstant.GetProjectDetails); - var response = await _httpClientService.GetAsync(_stringConstant.ProjectUrl, requestUrl, accessToken); - if(response != null) - { - project = JsonConvert.DeserializeObject(response); - } - return project; - } - - #endregion - } } \ No newline at end of file diff --git a/Slack.Automation/Promact.Core.Repository/Promact.Core.Repository.csproj b/Slack.Automation/Promact.Core.Repository/Promact.Core.Repository.csproj index a9bdea23..48571fce 100644 --- a/Slack.Automation/Promact.Core.Repository/Promact.Core.Repository.csproj +++ b/Slack.Automation/Promact.Core.Repository/Promact.Core.Repository.csproj @@ -165,7 +165,9 @@ + + @@ -180,6 +182,8 @@ + + diff --git a/Slack.Automation/Promact.Core.Repository/ScrumReportRepository/IScrumReportRepository.cs b/Slack.Automation/Promact.Core.Repository/ScrumReportRepository/IScrumReportRepository.cs index 6594b1dd..d6b9049c 100644 --- a/Slack.Automation/Promact.Core.Repository/ScrumReportRepository/IScrumReportRepository.cs +++ b/Slack.Automation/Promact.Core.Repository/ScrumReportRepository/IScrumReportRepository.cs @@ -1,8 +1,6 @@ using Promact.Erp.DomainModel.ApplicationClass; using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading.Tasks; namespace Promact.Core.Repository.ScrumReportRepository @@ -12,19 +10,17 @@ public interface IScrumReportRepository /// /// Method to return the list of projects depending on the role of the logged in user /// - /// - /// + /// userId of user /// List of projects - Task> GetProjectsAsync(string userId, string accessToken); + Task> GetProjectsAsync(string userId); /// /// Method to return the details of scrum for a particular project /// - /// - /// - /// - /// + /// project Id + /// Date of scrum + /// userId of User /// Details of the scrum - Task ScrumReportDetailsAsync(int projectId, DateTime scrumDate, string userId, string accessToken); + Task ScrumReportDetailsAsync(int projectId, DateTime scrumDate, string userId); } } diff --git a/Slack.Automation/Promact.Core.Repository/ScrumReportRepository/ScrumReportRepository.cs b/Slack.Automation/Promact.Core.Repository/ScrumReportRepository/ScrumReportRepository.cs index a91c8c1c..68f1fc51 100644 --- a/Slack.Automation/Promact.Core.Repository/ScrumReportRepository/ScrumReportRepository.cs +++ b/Slack.Automation/Promact.Core.Repository/ScrumReportRepository/ScrumReportRepository.cs @@ -16,12 +16,14 @@ public class ScrumReportRepository : IScrumReportRepository #region Private Variables private readonly IRepository _scrumDataRepository; private readonly IRepository _scrumAnswerDataRepository; - private readonly IOauthCallsRepository _oauthCallsRepository; + private readonly IOauthCallHttpContextRespository _oauthCallsRepository; private readonly IStringConstantRepository _stringConstant; #endregion #region Constructor - public ScrumReportRepository(IRepository scrumDataRepository, IRepository scrumAnswerDataRepository, IStringConstantRepository stringConstant, IOauthCallsRepository oauthCallsRepository) + public ScrumReportRepository(IRepository scrumDataRepository, + IRepository scrumAnswerDataRepository, IStringConstantRepository stringConstant, + IOauthCallHttpContextRespository oauthCallsRepository) { _scrumDataRepository = scrumDataRepository; _scrumAnswerDataRepository = scrumAnswerDataRepository; @@ -124,15 +126,14 @@ private string[] SplitScrumAnswer(string answer) /// /// Method to return the list of projects depending on the role of the logged in user /// - /// - /// + /// userId of user /// List of projects - public async Task> GetProjectsAsync(string userId, string accessToken) + public async Task> GetProjectsAsync(string userId) { //Getting the details of the logged in user from Oauth server - User loginUser = await _oauthCallsRepository.GetUserByEmployeeIdAsync(userId, accessToken); + User loginUser = await _oauthCallsRepository.GetUserByEmployeeIdAsync(userId); //Fetch list of all the projects from oauth server - List projects = await _oauthCallsRepository.GetAllProjectsAsync(accessToken); + List projects = await _oauthCallsRepository.GetAllProjectsAsync(); //Checking if there are projects returned from oauth server or not if (projects.Any()) { @@ -171,17 +172,16 @@ public async Task> GetProjectsAsync(string userId, string /// /// Method to return the details of scrum for a particular project /// - /// - /// - /// - /// + /// project Id + /// Date of scrum + /// userId of user /// Details of the scrum - public async Task ScrumReportDetailsAsync(int projectId, DateTime scrumDate, string userId, string accessToken) + public async Task ScrumReportDetailsAsync(int projectId, DateTime scrumDate, string userId) { //Getting details of the logged in user from Oauth server - User loginUser = await _oauthCallsRepository.GetUserByEmployeeIdAsync(userId, accessToken); + User loginUser = await _oauthCallsRepository.GetUserByEmployeeIdAsync(userId); //Getting details of the specific project from Oauth server - ProjectAc project = await _oauthCallsRepository.GetProjectDetailsAsync(projectId, accessToken); + ProjectAc project = await _oauthCallsRepository.GetProjectDetailsAsync(projectId); //Getting scrum for a specific project Scrum scrum = await _scrumDataRepository.FirstOrDefaultAsync(x => x.ProjectId == project.Id && DbFunctions.TruncateTime(x.ScrumDate) == scrumDate); ScrumProjectDetails scrumProjectDetail = new ScrumProjectDetails(); diff --git a/Slack.Automation/Promact.Core.Repository/SlackRepository/SlackRepository.cs b/Slack.Automation/Promact.Core.Repository/SlackRepository/SlackRepository.cs index bc2f5b81..4617bc6b 100644 --- a/Slack.Automation/Promact.Core.Repository/SlackRepository/SlackRepository.cs +++ b/Slack.Automation/Promact.Core.Repository/SlackRepository/SlackRepository.cs @@ -606,7 +606,7 @@ private async Task UpdateSickLeaveAsync(List slackText, Applicat bool reJoinDateConvertorResult = DateTime.TryParseExact(slackText[3], dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out reJoinDate); if (endDateConvertorResult && reJoinDateConvertorResult) { - User newUser = await _oauthCallsRepository.GetUserByEmployeeIdAsync(leave.EmployeeId, accessToken); + User newUser = await _oauthCallsRepository.GetUserByUserIdAsync(leave.EmployeeId, accessToken); leave.EndDate = endDate; leave.RejoinDate = reJoinDate; // Method to check leave's end date is not beyond start date and re-join date is not beyond end date diff --git a/Slack.Automation/Promact.Core.Repository/TaskMailReportRepository/ITaskMailReportRepository.cs b/Slack.Automation/Promact.Core.Repository/TaskMailReportRepository/ITaskMailReportRepository.cs new file mode 100644 index 00000000..158ee99b --- /dev/null +++ b/Slack.Automation/Promact.Core.Repository/TaskMailReportRepository/ITaskMailReportRepository.cs @@ -0,0 +1,39 @@ +using Promact.Erp.DomainModel.ApplicationClass; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Promact.Core.Repository.TaskMailReportRepository +{ + public interface ITaskMailReportRepository + { + /// + ///Method geting Employee or list of Employees + /// + /// + /// list of task mail report + Task> GetUserInformationAsync(string userId); + + /// + /// This Method use to fetch the task mail details. + /// + /// + /// + /// + /// + /// list of task mail report with task mail details + Task> TaskMailDetailsReportAsync(string userId, string role, string userName, string loginId); + + /// + /// this Method use to fetch the task mail details for the selected date. + /// + /// + /// + /// + /// + /// + /// + /// list of task mail report with task mail details + Task> TaskMailDetailsReportSelectedDateAsync(string userId, string userName, string role, string createdOn, string loginId, DateTime selectedDate); + } +} diff --git a/Slack.Automation/Promact.Core.Repository/TaskMailReportRepository/TaskMailReportRepository.cs b/Slack.Automation/Promact.Core.Repository/TaskMailReportRepository/TaskMailReportRepository.cs new file mode 100644 index 00000000..9442f452 --- /dev/null +++ b/Slack.Automation/Promact.Core.Repository/TaskMailReportRepository/TaskMailReportRepository.cs @@ -0,0 +1,317 @@ +using Promact.Core.Repository.AttachmentRepository; +using Promact.Core.Repository.BotQuestionRepository; +using Promact.Core.Repository.EmailServiceTemplateRepository; +using Promact.Core.Repository.OauthCallsRepository; +using Promact.Erp.DomainModel.ApplicationClass; +using Promact.Erp.DomainModel.DataRepository; +using Promact.Erp.DomainModel.Models; +using Promact.Erp.Util.Email; +using Promact.Erp.Util.StringConstants; +using System; +using System.Collections.Generic; +using System.Data.Entity; +using System.Linq; +using System.Threading.Tasks; + +namespace Promact.Core.Repository.TaskMailReportRepository +{ + public class TaskMailReportRepository : ITaskMailReportRepository + { + #region Private Variables + private readonly IRepository _taskMailRepository; + private readonly IRepository _taskMailDetailRepository; + private readonly IOauthCallHttpContextRespository _oauthCallsRepository; + private readonly IBotQuestionRepository _botQuestionRepository; + private readonly IAttachmentRepository _attachmentRepository; + private readonly IRepository _userRepository; + private readonly IEmailService _emailService; + private readonly ApplicationUserManager _userManager; + private readonly IStringConstantRepository _stringConstant; + private readonly IEmailServiceTemplateRepository _emailServiceTemplate; + #endregion + + #region Constructor + public TaskMailReportRepository(IRepository taskMailRepository, IStringConstantRepository stringConstant, + IOauthCallHttpContextRespository oauthCallsRepository, IRepository taskMailDetailRepository, + IAttachmentRepository attachmentRepository, IRepository userRepository, IEmailService emailService, + IBotQuestionRepository botQuestionRepository, ApplicationUserManager userManager, + IEmailServiceTemplateRepository emailServiceTemplate) + { + _taskMailRepository = taskMailRepository; + _stringConstant = stringConstant; + _oauthCallsRepository = oauthCallsRepository; + _taskMailDetailRepository = taskMailDetailRepository; + _attachmentRepository = attachmentRepository; + _userRepository = userRepository; + _emailService = emailService; + _botQuestionRepository = botQuestionRepository; + _userManager = userManager; + _emailServiceTemplate = emailServiceTemplate; + } + #endregion + + #region Public Method + /// + ///Method geting Employee or list of Employees + /// + /// + /// list of task mail report + public async Task> GetUserInformationAsync(string userId) + { + List taskMailReportAcList = new List(); + var user = await _userRepository.FirstAsync(x => x.Id == userId); + + //getting user information from Promact Oauth Server. + List userRoleAcList = await _oauthCallsRepository.GetUserRoleAsync(user.Id); + var userInformation = userRoleAcList.First(x => x.UserName == user.UserName); + if (userInformation.Role == _stringConstant.RoleAdmin) + { + //if user is admin then remove from user list. because admin dose not have any taks mail. + userRoleAcList.Remove(userInformation); + } + foreach (var userRole in userRoleAcList) + { + TaskMailReportAc taskMailReportAc = new TaskMailReportAc(userRole.UserId, userRole.Role, userRole.Name, userEmail: userRole.UserName); + taskMailReportAcList.Add(taskMailReportAc); + } + return taskMailReportAcList; + } + + /// + /// This Method use to fetch the task mail details. + /// + /// + /// + /// + /// + /// list of task mail report with task mail details + public async Task> TaskMailDetailsReportAsync(string userId, string role, string userName, string loginId) + { + List taskMailReportAcList = new List(); + if (role == _stringConstant.RoleAdmin || role == _stringConstant.RoleEmployee) + { + //getting the employee task mail reports + taskMailReportAcList = await GetTaskMailDetailsInformationAsync(userId, role, userName, loginId); + } + else if (role == _stringConstant.RoleTeamLeader) + { + //getting the team members information. + List userRoleAcList = await GetUserRoleAsync(loginId); + //getting maximum and minimum date from the team members task mails + var maxMinTaskMailDate = await GetMaxMinDateAsync(userRoleAcList); + //first time there are no selected date that's why pass maxdate as a selected date. + //getting the team members task mail reports + taskMailReportAcList = await TaskMailDetailsAsync(role, loginId, maxMinTaskMailDate.Item1.Date, maxMinTaskMailDate.Item1.Date, maxMinTaskMailDate.Item2.Date); + } + return taskMailReportAcList; + } + + /// + /// this Method use to fetch the task mail details for the selected date. + /// + /// + /// + /// + /// + /// + /// + /// list of task mail report with task mail details + public async Task> TaskMailDetailsReportSelectedDateAsync(string userId, string userName, string role, string createdOn, string loginId, DateTime selectedDate) + { + List taskMailReportAcList = new List(); + if (role == _stringConstant.RoleAdmin || role == _stringConstant.RoleEmployee) + { + //getting the employee task mail reports for selected date + taskMailReportAcList = await TaskMailsDetailAsync(userId, userName, role, loginId, createdOn, selectedDate); + } + else if (role == _stringConstant.RoleTeamLeader) + { + //getting the team members information + List userRoleAcList = await GetUserRoleAsync(loginId); + //find maximum and minimum date from the team members task mails + var maxMinTaskMailDate = await GetMaxMinDateAsync(userRoleAcList); + //getting the team members task mail reports for selected date + taskMailReportAcList = await TaskMailDetailsAsync(role, loginId, selectedDate.Date, maxMinTaskMailDate.Item1.Date, maxMinTaskMailDate.Item2.Date); + } + return taskMailReportAcList; + } + #endregion + + #region Private Methods + + /// + /// Getting user information + /// + /// + /// fetch users role + private async Task> GetUserRoleAsync(string loginId) + { + //getting user information from Promact Oauth Server + return await _oauthCallsRepository.GetListOfEmployeeAsync(loginId); + } + + + /// + /// Getting max and min date from users task mails + /// + /// + /// max and min Date + private async Task> GetMaxMinDateAsync(List userRoleAcList) + { + //getting list of userId. + var userIdList = userRoleAcList.Select(x => x.UserId); + //getting list of task mails using userIdList. + var taskMails = (await _taskMailRepository.FetchAsync(x => userIdList.Contains(x.EmployeeId))).ToList(); + //getting maximum and minimum date form the team members task mails + DateTime maxDate = taskMails.Max(x => x.CreatedOn); + DateTime minDate = taskMails.Min(x => x.CreatedOn); + return new Tuple(maxDate, minDate); + } + + + /// + /// Task mail details for teamLeader + /// + /// + /// + /// + /// + /// + /// list of task mail reports + private async Task> TaskMailDetailsAsync(string role, string loginId, DateTime selectedDate, DateTime maxDate, DateTime minDate) + { + List taskMailReportAcList = new List(); + List userRoleAcList = await GetUserRoleAsync(loginId); + //getting the team members task mails using users information. + foreach (var userRole in userRoleAcList) + { + TaskMailReportAc taskMailReportAc = await GetTaskReportAsync(userRole.UserId, role, userRole.Name, selectedDate, maxDate, minDate); + taskMailReportAcList.Add(taskMailReportAc); + } + return taskMailReportAcList; + } + + /// + /// Getting task mail reports + /// + /// + /// + /// + /// + /// + /// + /// task mail report + private async Task GetTaskReportAsync(string userId, string role, string userName, DateTime selectedDate, DateTime maxDate, DateTime minDate) + { + TaskMailReportAc taskMailReportAc; + var taskMail = (await _taskMailRepository.FirstOrDefaultAsync(y => y.EmployeeId == userId && DbFunctions.TruncateTime(y.CreatedOn) == DbFunctions.TruncateTime(selectedDate))); + if (taskMail != null) + { + //getting the team members task mails details. + taskMailReportAc = await GetTaskMailReportAsync(userId, role, userName, taskMail.Id, taskMail.CreatedOn.Date, maxDate, minDate); + } + else + { + //if team member does not have any task mail than show default task mail to the end users. + taskMailReportAc = GetTaskMailReport(userId, role, userName, selectedDate.Date, maxDate.Date, minDate.Date); + } + return taskMailReportAc; + } + + /// + /// Task mail fetails for admin or employee + /// + /// + /// + /// + /// + /// + /// + /// list of task mail reports + private async Task> TaskMailsDetailAsync(string userId, string userName, string role, string createdOn, string loginId, DateTime selectedDate) + { + List taskMailReportAcList = new List(); + //find maximum and minimum date from the employee task mails + IEnumerable taskMails = (await _taskMailRepository.FetchAsync(x => x.EmployeeId == userId)).ToList(); + DateTime maxDate = taskMails.Max(x => x.CreatedOn); + DateTime minDate = taskMails.Min(x => x.CreatedOn); + //getting task mail information. + TaskMailReportAc taskMailReportAc = await GetTaskReportAsync(userId, role, userName, selectedDate.Date, maxDate.Date, minDate.Date); + taskMailReportAcList.Add(taskMailReportAc); + return taskMailReportAcList; + } + + /// + /// Get default task mail + /// + /// + /// + /// + /// + /// + /// + /// Task mail report + private TaskMailReportAc GetTaskMailReport(string userId, string role, string userName, DateTime createdOn, DateTime maxDate, DateTime minDate) + { + List taskMailDetailReportList = new List(); + var taskMailDetailReportAc = new TaskMailDetailReportAc(description: _stringConstant.NotAvailable, comment: _stringConstant.NotAvailable, status: TaskMailStatus.none); + taskMailDetailReportList.Add(taskMailDetailReportAc); + TaskMailReportAc taskMailReportAc = new TaskMailReportAc(userId, role, userName, taskMailDetailReportList, createdOn: createdOn, maxDate: maxDate, minDate: minDate); + return taskMailReportAc; + } + + /// + /// Getting taskmail details infromation + /// + /// + /// + /// + /// + /// + /// + /// + /// List of task mail report + private async Task GetTaskMailReportAsync(string userId, string role, string userName, int taskId, DateTime createdOn, DateTime maxDate, DateTime minDate) + { + List taskMailDetailReportAcList = new List(); + // getting taskmail details infromation using taskId. + var taskMailDetailList = (await _taskMailDetailRepository.FetchAsync(x => x.TaskId == taskId)); + foreach (var taskMailDetail in taskMailDetailList) + { + TaskMailDetailReportAc taskmailReportAc = new TaskMailDetailReportAc(taskMailDetail.Description, taskMailDetail.Comment, id: taskMailDetail.Id, hours: taskMailDetail.Hours, status: taskMailDetail.Status); + taskMailDetailReportAcList.Add(taskmailReportAc); + } + TaskMailReportAc taskMailReportAc = new TaskMailReportAc(userId, role, userName, taskMailDetailReportAcList, createdOn: createdOn, maxDate: maxDate, minDate: minDate); + return taskMailReportAc; + } + + /// + /// Task mail details report information for the user role admin and employee + /// + /// + /// + /// + /// + /// List task mail Report + private async Task> GetTaskMailDetailsInformationAsync(string userId, string role, string userName, string loginId) + { + List taskMailReportAcList = new List(); + var taskMail = (await _taskMailRepository.FetchAsync(y => y.EmployeeId == userId)).ToList(); + TaskMailReportAc taskMailReportAc; + if (taskMail.Any()) + { + //first time there are no selected date that's why pass maxdate as a selected date. + taskMailReportAc = await GetTaskMailReportAsync(userId, role, userName, taskMail.OrderByDescending(y => y.CreatedOn).First().Id, taskMail.Max(x => x.CreatedOn).Date, taskMail.Max(x => x.CreatedOn).Date, taskMail.Min(x => x.CreatedOn).Date); + } + else + { + //if employee does not have any task mail than show default task mail to the end users. + taskMailReportAc = GetTaskMailReport(userId, role, userName, DateTime.Now.Date, DateTime.Now.Date, DateTime.Now.Date); + } + taskMailReportAcList.Add(taskMailReportAc); + return taskMailReportAcList; + } + + #endregion + } +} diff --git a/Slack.Automation/Promact.Core.Repository/TaskMailRepository/ITaskMailRepository.cs b/Slack.Automation/Promact.Core.Repository/TaskMailRepository/ITaskMailRepository.cs index fcefba02..cd46707c 100644 --- a/Slack.Automation/Promact.Core.Repository/TaskMailRepository/ITaskMailRepository.cs +++ b/Slack.Automation/Promact.Core.Repository/TaskMailRepository/ITaskMailRepository.cs @@ -21,35 +21,5 @@ public interface ITaskMailRepository /// /// questionText in string format containing question statement Task QuestionAndAnswerAsync(string answer,string userId); - - /// - /// This method use to fetch the task mail details. - /// - /// - /// - /// - /// - /// list of task mail report with task mail Details - Task> TaskMailDetailsReportAsync(string userId,string role,string userName, string loginId); - - /// - /// This method getting list of Employees - /// - /// - /// list of task mail report - Task> GetUserInformationAsync(string userId); - - /// - /// This method use to fetch the selected date task mail details. - /// - /// - /// - /// - /// - /// - /// - /// list of task mail report with task mail Details - Task> TaskMailDetailsReportSelectedDateAsync(string userId, string userName, string role, string createdOn, string loginId, DateTime selectedDate); - } } diff --git a/Slack.Automation/Promact.Core.Repository/TaskMailRepository/TaskMailRepository.cs b/Slack.Automation/Promact.Core.Repository/TaskMailRepository/TaskMailRepository.cs index ac32b90b..3c2c22de 100644 --- a/Slack.Automation/Promact.Core.Repository/TaskMailRepository/TaskMailRepository.cs +++ b/Slack.Automation/Promact.Core.Repository/TaskMailRepository/TaskMailRepository.cs @@ -345,273 +345,9 @@ public async Task QuestionAndAnswerAsync(string answer, string userId) } return userAndTaskMailDetailsWithAccessToken.QuestionText; } - - /// - ///Method geting Employee or list of Employees - /// - /// - /// list of task mail report - public async Task> GetUserInformationAsync(string userId) - { - List taskMailReportAcList = new List(); - var user = await _userRepository.FirstAsync(x => x.Id == userId); - var accessToken = await _attachmentRepository.UserAccessTokenAsync(user.UserName); - - //getting user information from Promact Oauth Server. - List userRoleAcList = await _oauthCallsRepository.GetUserRoleAsync(user.Id,accessToken); - var userInformation = userRoleAcList.First(x => x.UserName == user.UserName); - if (userInformation.Role == _stringConstant.RoleAdmin) - { - //if user is admin then remove from user list. because admin dose not have any taks mail. - userRoleAcList.Remove(userInformation); - } - foreach (var userRole in userRoleAcList) - { - TaskMailReportAc taskMailReportAc = new TaskMailReportAc(userRole.UserId, userRole.Role, userRole.Name, userEmail: userRole.UserName); - taskMailReportAcList.Add(taskMailReportAc); - } - return taskMailReportAcList; - } - - /// - /// This Method use to fetch the task mail details. - /// - /// - /// - /// - /// - /// list of task mail report with task mail details - public async Task> TaskMailDetailsReportAsync(string userId, string role, string userName, string loginId) - { - List taskMailReportAcList = new List(); - if (role == _stringConstant.RoleAdmin || role == _stringConstant.RoleEmployee) - { - //getting the employee task mail reports - taskMailReportAcList = await GetTaskMailDetailsInformationAsync(userId, role, userName, loginId); - } - else if (role == _stringConstant.RoleTeamLeader) - { - //getting the team members information. - List userRoleAcList = await GetUserRoleAsync(loginId); - //getting maximum and minimum date from the team members task mails - var maxMinTaskMailDate = await GetMaxMinDateAsync(userRoleAcList); - //first time there are no selected date that's why pass maxdate as a selected date. - //getting the team members task mail reports - taskMailReportAcList = await TaskMailDetailsAsync(role, loginId,maxMinTaskMailDate.Item1.Date,maxMinTaskMailDate.Item1.Date,maxMinTaskMailDate.Item2.Date); - } - return taskMailReportAcList; - } - - /// - /// this Method use to fetch the task mail details for the selected date. - /// - /// - /// - /// - /// - /// - /// - /// list of task mail report with task mail details - public async Task> TaskMailDetailsReportSelectedDateAsync(string userId, string userName, string role, string createdOn, string loginId, DateTime selectedDate) - { - List taskMailReportAcList = new List(); - if (role == _stringConstant.RoleAdmin || role == _stringConstant.RoleEmployee) - { - //getting the employee task mail reports for selected date - taskMailReportAcList = await TaskMailsDetailAsync(userId, userName, role, loginId, createdOn, selectedDate); - } - else if (role == _stringConstant.RoleTeamLeader) - { - //getting the team members information - List userRoleAcList = await GetUserRoleAsync(loginId); - //find maximum and minimum date from the team members task mails - var maxMinTaskMailDate = await GetMaxMinDateAsync(userRoleAcList); - //getting the team members task mail reports for selected date - taskMailReportAcList = await TaskMailDetailsAsync(role, loginId, selectedDate.Date, maxMinTaskMailDate.Item1.Date, maxMinTaskMailDate.Item2.Date); - } - return taskMailReportAcList; - } - #endregion #region Private Methods - - /// - /// Getting user information - /// - /// - /// fetch users role - private async Task> GetUserRoleAsync(string loginId) - { - var user =await _userRepository.FirstAsync(x => x.Id == loginId); - // getting access token for that user - var accessToken = await _attachmentRepository.UserAccessTokenAsync(user.UserName); - //getting user information from Promact Oauth Server - return await _oauthCallsRepository.GetListOfEmployeeAsync(user.Id, accessToken); - } - - - /// - /// Getting max and min date from users task mails - /// - /// - /// max and min Date - private async Task> GetMaxMinDateAsync(List userRoleAcList) - { - //getting list of userId. - var userIdList = userRoleAcList.Select(x => x.UserId); - //getting list of task mails using userIdList. - var taskMails = (await _taskMailRepository.FetchAsync(x => userIdList.Contains(x.EmployeeId))).ToList(); - //getting maximum and minimum date form the team members task mails - DateTime maxDate = taskMails.Max(x => x.CreatedOn); - DateTime minDate = taskMails.Min(x => x.CreatedOn); - return new Tuple(maxDate, minDate); - } - - - /// - /// Task mail details for teamLeader - /// - /// - /// - /// - /// - /// - /// list of task mail reports - private async Task> TaskMailDetailsAsync(string role, string loginId, DateTime selectedDate,DateTime maxDate,DateTime minDate) - { - List taskMailReportAcList = new List(); - List userRoleAcList = await GetUserRoleAsync(loginId); - //getting the team members task mails using users information. - foreach (var userRole in userRoleAcList) - { - TaskMailReportAc taskMailReportAc = await GetTaskReportAsync(userRole.UserId, role, userRole.Name, selectedDate, maxDate,minDate ); - taskMailReportAcList.Add(taskMailReportAc); - } - return taskMailReportAcList; - } - - /// - /// Getting task mail reports - /// - /// - /// - /// - /// - /// - /// - /// task mail report - private async Task GetTaskReportAsync(string userId, string role, string userName, DateTime selectedDate, DateTime maxDate, DateTime minDate) - { - TaskMailReportAc taskMailReportAc; - var taskMail = (await _taskMailRepository.FirstOrDefaultAsync(y => y.EmployeeId == userId && DbFunctions.TruncateTime(y.CreatedOn) == DbFunctions.TruncateTime(selectedDate))); - if (taskMail != null) - { - //getting the team members task mails details. - taskMailReportAc = await GetTaskMailReportAsync(userId, role, userName, taskMail.Id, taskMail.CreatedOn.Date, maxDate, minDate); - } - else - { - //if team member does not have any task mail than show default task mail to the end users. - taskMailReportAc = GetTaskMailReport(userId, role, userName, selectedDate.Date, maxDate.Date, minDate.Date); - } - return taskMailReportAc; - } - - /// - /// Task mail fetails for admin or employee - /// - /// - /// - /// - /// - /// - /// - /// list of task mail reports - private async Task> TaskMailsDetailAsync(string userId, string userName, string role, string createdOn, string loginId, DateTime selectedDate) - { - List taskMailReportAcList = new List(); - //find maximum and minimum date from the employee task mails - IEnumerable taskMails = (await _taskMailRepository.FetchAsync(x => x.EmployeeId == userId)).ToList(); - DateTime maxDate = taskMails.Max(x => x.CreatedOn); - DateTime minDate = taskMails.Min(x => x.CreatedOn); - //getting task mail information. - TaskMailReportAc taskMailReportAc = await GetTaskReportAsync(userId, role, userName, selectedDate.Date, maxDate.Date, minDate.Date); - taskMailReportAcList.Add(taskMailReportAc); - return taskMailReportAcList; - } - - /// - /// Get default task mail - /// - /// - /// - /// - /// - /// - /// - /// Task mail report - private TaskMailReportAc GetTaskMailReport(string userId, string role, string userName, DateTime createdOn, DateTime maxDate, DateTime minDate) - { - List taskMailDetailReportList = new List(); - var taskMailDetailReportAc = new TaskMailDetailReportAc(description: _stringConstant.NotAvailable, comment: _stringConstant.NotAvailable, status: TaskMailStatus.none); - taskMailDetailReportList.Add(taskMailDetailReportAc); - TaskMailReportAc taskMailReportAc = new TaskMailReportAc(userId, role, userName, taskMailDetailReportList, createdOn: createdOn, maxDate: maxDate, minDate: minDate); - return taskMailReportAc; - } - - /// - /// Getting taskmail details infromation - /// - /// - /// - /// - /// - /// - /// - /// - /// List of task mail report - private async Task GetTaskMailReportAsync(string userId, string role, string userName, int taskId, DateTime createdOn, DateTime maxDate, DateTime minDate) - { - List taskMailDetailReportAcList = new List(); - // getting taskmail details infromation using taskId. - var taskMailDetailList = (await _taskMailDetailRepository.FetchAsync(x => x.TaskId == taskId)); - foreach (var taskMailDetail in taskMailDetailList) - { - TaskMailDetailReportAc taskmailReportAc = new TaskMailDetailReportAc(taskMailDetail.Description, taskMailDetail.Comment, id: taskMailDetail.Id, hours: taskMailDetail.Hours, status: taskMailDetail.Status); - taskMailDetailReportAcList.Add(taskmailReportAc); - } - TaskMailReportAc taskMailReportAc = new TaskMailReportAc(userId, role, userName, taskMailDetailReportAcList, createdOn: createdOn, maxDate: maxDate, minDate: minDate); - return taskMailReportAc; - } - - /// - /// Task mail details report information for the user role admin and employee - /// - /// - /// - /// - /// - /// List task mail Report - private async Task> GetTaskMailDetailsInformationAsync(string userId, string role, string userName, string loginId) - { - List taskMailReportAcList = new List(); - var taskMail = (await _taskMailRepository.FetchAsync(y => y.EmployeeId == userId)).ToList(); - TaskMailReportAc taskMailReportAc; - if (taskMail.Any()) - { - //first time there are no selected date that's why pass maxdate as a selected date. - taskMailReportAc = await GetTaskMailReportAsync(userId, role, userName, taskMail.OrderByDescending(y => y.CreatedOn).First().Id, taskMail.Max(x => x.CreatedOn).Date, taskMail.Max(x => x.CreatedOn).Date, taskMail.Min(x => x.CreatedOn).Date); - } - else - { - //if employee does not have any task mail than show default task mail to the end users. - taskMailReportAc = GetTaskMailReport(userId, role, userName, DateTime.Now.Date, DateTime.Now.Date, DateTime.Now.Date); - } - taskMailReportAcList.Add(taskMailReportAc); - return taskMailReportAcList; - } - /// /// Private method to get user's details, user's accesstoken, user's task mail details and list or else appropriate message will be send /// diff --git a/Slack.Automation/Promact.Core.Test/AutofacConfig.cs b/Slack.Automation/Promact.Core.Test/AutofacConfig.cs index 94f50e6d..3b935b62 100644 --- a/Slack.Automation/Promact.Core.Test/AutofacConfig.cs +++ b/Slack.Automation/Promact.Core.Test/AutofacConfig.cs @@ -17,7 +17,7 @@ using Promact.Core.Repository.TaskMailRepository; using Effort; using Promact.Core.Repository.BotQuestionRepository; -using Moq; +using Moq; using Promact.Core.Repository.SlackChannelRepository; using Promact.Core.Repository.ExternalLoginRepository; using Promact.Erp.DomainModel.DataRepository; @@ -32,6 +32,7 @@ using Promact.Core.Repository.AutoMapperConfig; using Promact.Core.Repository.ServiceRepository; using Promact.Core.Repository.BaseRepository; +using Promact.Core.Repository.TaskMailReportRepository; namespace Promact.Core.Test { @@ -68,6 +69,8 @@ public static IComponentContext RegisterDependancies() builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); var emailServiceMock = new Mock(); var emailServiceMockObject = emailServiceMock.Object; builder.RegisterInstance(emailServiceMock).As>(); @@ -83,6 +86,11 @@ public static IComponentContext RegisterDependancies() var mockServiceRepositoryObject = mockServiceRepository.Object; builder.RegisterInstance(mockServiceRepository).As>(); builder.RegisterInstance(mockServiceRepositoryObject).As(); + + var httpContext = new Mock(); + var httpContextObject = httpContext.Object; + builder.RegisterInstance(httpContext).As>(); + builder.RegisterInstance(httpContextObject).As(); var container = builder.Build(); return container; diff --git a/Slack.Automation/Promact.Core.Test/LeaveReportRepositoryTest.cs b/Slack.Automation/Promact.Core.Test/LeaveReportRepositoryTest.cs index 48663937..85cbdd9d 100644 --- a/Slack.Automation/Promact.Core.Test/LeaveReportRepositoryTest.cs +++ b/Slack.Automation/Promact.Core.Test/LeaveReportRepositoryTest.cs @@ -1,14 +1,19 @@ using Autofac; +using Microsoft.AspNet.Identity; using Moq; using Promact.Core.Repository.LeaveReportRepository; using Promact.Core.Repository.LeaveRequestRepository; +using Promact.Core.Repository.ServiceRepository; using Promact.Erp.DomainModel.ApplicationClass; using Promact.Erp.DomainModel.Models; using Promact.Erp.Util.HttpClient; using Promact.Erp.Util.StringConstants; using System; +using System.Collections.Generic; using System.Linq; +using System.Security.Claims; using System.Threading.Tasks; +using System.Web; using Xunit; namespace Promact.Core.Test @@ -22,6 +27,9 @@ public class LeaveReportRepositoryTest private readonly Mock _mockHttpClient; private readonly IStringConstantRepository _stringConstant; private LeaveRequest leave = new LeaveRequest(); + private readonly Mock _mockHttpContextBase; + private readonly ApplicationUserManager _userManager; + private readonly Mock _mockServiceRepository; #endregion #region Constructor @@ -32,6 +40,9 @@ public LeaveReportRepositoryTest() _leaveRequestRepository = _componentContext.Resolve(); _mockHttpClient = _componentContext.Resolve>(); _stringConstant = _componentContext.Resolve(); + _mockHttpContextBase = _componentContext.Resolve>(); + _userManager = _componentContext.Resolve(); + _mockServiceRepository = _componentContext.Resolve>(); Initialize(); } #endregion @@ -41,14 +52,15 @@ public LeaveReportRepositoryTest() /// Method to test LeaveReport when the logged in person is admin /// [Fact, Trait("Category", "Required")] - public async void LeaveReportAdminTest() + public async Task LeaveReportAdminTestAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.UserDetailsFromOauthServer); var requestIdUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestIdUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestIdUrl, _stringConstant.AccessTokenForTest)).Returns(response); leave.EmployeeId = _stringConstant.EmployeeIdForTest; await _leaveRequestRepository.ApplyLeaveAsync(leave); - var leaveReports = _leaveReportRepository.LeaveReportAsync(_stringConstant.TestAccessToken, _stringConstant.EmployeeIdForTest).Result; + var leaveReports = _leaveReportRepository.LeaveReportAsync(_stringConstant.EmployeeIdForTest).Result; Assert.Equal(true, leaveReports.Any()); } @@ -56,14 +68,15 @@ public async void LeaveReportAdminTest() /// Method to test LeaveReport when the logged in person is employee /// [Fact, Trait("Category", "Required")] - public async void LeaveReportEmployeeTest() + public async Task LeaveReportEmployeeTestAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.EmployeeDetailFromOauthServer); var requestIdUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestIdUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestIdUrl, _stringConstant.AccessTokenForTest)).Returns(response); leave.EmployeeId = _stringConstant.EmployeeIdForTest; await _leaveRequestRepository.ApplyLeaveAsync(leave); - var leaveReports = _leaveReportRepository.LeaveReportAsync(_stringConstant.TestAccessToken, _stringConstant.EmployeeIdForTest).Result; + var leaveReports = _leaveReportRepository.LeaveReportAsync(_stringConstant.EmployeeIdForTest).Result; Assert.Equal(true, leaveReports.Any()); } @@ -71,17 +84,18 @@ public async void LeaveReportEmployeeTest() /// Method to test LeaveReport when the logged in person is teamleader /// [Fact, Trait("Category", "Required")] - public async void LeaveReportTeamLeaderTest() + public async Task LeaveReportTeamLeaderTestAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.TeamLeaderDetailFromOauthServer); var requestIdUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestIdUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestIdUrl, _stringConstant.AccessTokenForTest)).Returns(response); var responseProject = Task.FromResult(_stringConstant.ProjectUsers); var requestProjectUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.ProjectUsersByTeamLeaderId); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.TestAccessToken)).Returns(responseProject); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.AccessTokenForTest)).Returns(responseProject); leave.EmployeeId = _stringConstant.EmployeeIdForTest; await _leaveRequestRepository.ApplyLeaveAsync(leave); - var leaveReports = _leaveReportRepository.LeaveReportAsync(_stringConstant.TestAccessToken, _stringConstant.EmployeeIdForTest).Result; + var leaveReports = _leaveReportRepository.LeaveReportAsync(_stringConstant.EmployeeIdForTest).Result; Assert.Equal(true, leaveReports.Any()); } @@ -89,13 +103,14 @@ public async void LeaveReportTeamLeaderTest() /// Method to test LeaveReportDetails that returns the details of leave for an employee /// [Fact, Trait("Category", "Required")] - public async void LeaveReportDetailTest() + public async Task LeaveReportDetailTestAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.EmployeeDetailFromOauthServer); var requestUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); await _leaveRequestRepository.ApplyLeaveAsync(leave); - var leaveReport = _leaveReportRepository.LeaveReportDetailsAsync(_stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken).Result; + var leaveReport = _leaveReportRepository.LeaveReportDetailsAsync(_stringConstant.EmployeeIdForTest).Result; Assert.NotNull(leaveReport); } @@ -103,14 +118,15 @@ public async void LeaveReportDetailTest() /// Method to test LeaveReport that returns the list of employees with their leave status for incorrect values /// [Fact, Trait("Category", "Required")] - public async void LeaveReportTestFalse() + public async Task LeaveReportTestFalseAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.UserDetailsFromOauthServerFalse); var requestIdUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestIdUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestIdUrl, _stringConstant.AccessTokenForTest)).Returns(response); leave.EmployeeId = _stringConstant.EmployeeIdForTest; await _leaveRequestRepository.ApplyLeaveAsync(leave); - var leaveReports = _leaveReportRepository.LeaveReportAsync(_stringConstant.TestAccessToken, _stringConstant.EmployeeIdForTest).Result; + var leaveReports = _leaveReportRepository.LeaveReportAsync(_stringConstant.EmployeeIdForTest).Result; Assert.Equal(false, leaveReports.Any()); } @@ -120,17 +136,19 @@ public async void LeaveReportTestFalse() /// Method to test LeaveReportDetails that returns the details of leave for an employee with incorrect values /// [Fact, Trait("Category", "Required")] - public async void LeaveReportDetailTestFalse() + public async Task LeaveReportDetailTestFalseAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.EmptyString); var requestUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); await _leaveRequestRepository.ApplyLeaveAsync(leave); - var leaveDetail = _leaveReportRepository.LeaveReportDetailsAsync(_stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken).Result; + var leaveDetail = _leaveReportRepository.LeaveReportDetailsAsync(_stringConstant.EmployeeIdForTest).Result; Assert.Equal(false, leaveDetail.Any()); } + #endregion - + #region Initialization /// /// A method is used to initialize variables which are repetitively used /// @@ -145,5 +163,32 @@ public void Initialize() leave.CreatedOn = DateTime.UtcNow; } #endregion + + #region Private Method + /// + /// Private method to create a user add login info and mocking of Identity and return access token + /// + /// + private async Task CreateUserAndMockingHttpContextToReturnAccessToken() + { + var user = new ApplicationUser() + { + Id = _stringConstant.StringIdForTest, + UserName = _stringConstant.EmailForTest, + Email = _stringConstant.EmailForTest + }; + await _userManager.CreateAsync(user); + UserLoginInfo info = new UserLoginInfo(_stringConstant.PromactStringName, _stringConstant.AccessTokenForTest); + await _userManager.AddLoginAsync(user.Id, info); + Claim claim = new Claim(_stringConstant.Sub, _stringConstant.StringIdForTest); + var mockClaims = new Mock(); + IList claims = new List(); + claims.Add(claim); + mockClaims.Setup(x => x.Claims).Returns(claims); + _mockHttpContextBase.Setup(x => x.User.Identity).Returns(mockClaims.Object); + var accessToken = Task.FromResult(_stringConstant.AccessTokenForTest); + _mockServiceRepository.Setup(x => x.GerAccessTokenByRefreshToken(It.IsAny())).Returns(accessToken); + } + #endregion } } diff --git a/Slack.Automation/Promact.Core.Test/OauthCallsRepositoryTest.cs b/Slack.Automation/Promact.Core.Test/OauthCallsRepositoryTest.cs index 2f67993e..e592103c 100644 --- a/Slack.Automation/Promact.Core.Test/OauthCallsRepositoryTest.cs +++ b/Slack.Automation/Promact.Core.Test/OauthCallsRepositoryTest.cs @@ -1,9 +1,15 @@ using Autofac; +using Microsoft.AspNet.Identity; using Moq; using Promact.Core.Repository.OauthCallsRepository; +using Promact.Core.Repository.ServiceRepository; +using Promact.Erp.DomainModel.Models; using Promact.Erp.Util.HttpClient; using Promact.Erp.Util.StringConstants; +using System.Collections.Generic; +using System.Security.Claims; using System.Threading.Tasks; +using System.Web; using Xunit; namespace Promact.Core.Test @@ -18,6 +24,10 @@ public class OauthCallsRepositoryTest private readonly IOauthCallsRepository _oauthCallsRepository; private readonly Mock _mockHttpClient; private readonly IStringConstantRepository _stringConstant; + private readonly IOauthCallHttpContextRespository _oauthCallHttpContextRepository; + private readonly Mock _mockHttpContextBase; + private readonly ApplicationUserManager _userManager; + private readonly Mock _mockServiceRepository; #endregion #region Constructor @@ -27,6 +37,10 @@ public OauthCallsRepositoryTest() _oauthCallsRepository = _componentContext.Resolve(); _mockHttpClient = _componentContext.Resolve>(); _stringConstant = _componentContext.Resolve(); + _oauthCallHttpContextRepository = _componentContext.Resolve(); + _mockHttpContextBase = _componentContext.Resolve>(); + _userManager = _componentContext.Resolve(); + _mockServiceRepository = _componentContext.Resolve>(); } #endregion @@ -161,10 +175,11 @@ public async Task CasualLeaveFalseAsync() [Fact, Trait("Category", "Required")] public async Task GetUserByEmployeeIdAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.UserDetailsFromOauthServer); var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl ); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); - var userDetails = await _oauthCallsRepository.GetUserByEmployeeIdAsync(_stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); + var userDetails = await _oauthCallHttpContextRepository.GetUserByEmployeeIdAsync(_stringConstant.EmployeeIdForTest); Assert.Equal(userDetails.UserName, _stringConstant.TestUserName); } @@ -174,10 +189,11 @@ public async Task GetUserByEmployeeIdAsync() [Fact, Trait("Category", "Required")] public async Task GetUserByEmployeeIdFalseAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.UserDetailsFromOauthServer); var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); - var userDetails = await _oauthCallsRepository.GetUserByEmployeeIdAsync(_stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); + var userDetails = await _oauthCallHttpContextRepository.GetUserByEmployeeIdAsync(_stringConstant.EmployeeIdForTest); Assert.NotEqual(userDetails.UserName, _stringConstant.TestUserNameFalse); } @@ -187,11 +203,12 @@ public async Task GetUserByEmployeeIdFalseAsync() [Fact, Trait("Category", "Required")] public async Task GetProjectUsersByTeamLeaderIdAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.ProjectUsers); var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, _stringConstant.EmployeeIdForTest, _stringConstant.ProjectUsersByTeamLeaderId); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); var userName = _stringConstant.EmptyString; - var users = await _oauthCallsRepository.GetProjectUsersByTeamLeaderIdAsync(_stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken); + var users = await _oauthCallHttpContextRepository.GetProjectUsersByTeamLeaderIdAsync(_stringConstant.EmployeeIdForTest); foreach (var user in users) { userName = user.UserName; @@ -205,11 +222,12 @@ public async Task GetProjectUsersByTeamLeaderIdAsync() [Fact, Trait("Category", "Required")] public async Task GetProjectUsersByTeamLeaderIdFalseAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.ProjectUsers); var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, _stringConstant.EmployeeIdForTest, _stringConstant.ProjectUsersByTeamLeaderId); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); var userName = _stringConstant.EmptyString; - var users = await _oauthCallsRepository.GetProjectUsersByTeamLeaderIdAsync(_stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken); + var users = await _oauthCallHttpContextRepository.GetProjectUsersByTeamLeaderIdAsync(_stringConstant.EmployeeIdForTest); foreach (var user in users) { userName = user.UserName; @@ -251,10 +269,11 @@ public async Task UserIsAdminWrongAsync() [Fact, Trait("Category", "Required")] public async Task GetUserRoleAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.TaskMailReport); var requestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, _stringConstant.EmailForTest, _stringConstant.UserRoleUrl); _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); - var userRole = await _oauthCallsRepository.GetUserRoleAsync(_stringConstant.EmailForTest,_stringConstant.AccessTokenForTest); + var userRole = await _oauthCallHttpContextRepository.GetUserRoleAsync(_stringConstant.EmailForTest); Assert.Equal(3, userRole.Count); } @@ -266,10 +285,11 @@ public async Task GetUserRoleAsync() [Fact, Trait("Category", "Required")] public async Task GetAllProjectsTrueAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var responseProjects = Task.FromResult(_stringConstant.ProjectDetailsForAdminFromOauth); var requestUrlProjects = _stringConstant.AllProjectUrl; - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrlProjects, _stringConstant.TestAccessToken)).Returns(responseProjects); - var projects = await _oauthCallsRepository.GetAllProjectsAsync(_stringConstant.TestAccessToken); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrlProjects, _stringConstant.AccessTokenForTest)).Returns(responseProjects); + var projects = await _oauthCallHttpContextRepository.GetAllProjectsAsync(); Assert.Equal(1, projects.Count); } @@ -279,13 +299,41 @@ public async Task GetAllProjectsTrueAsync() [Fact, Trait("Category", "Required")] public async Task GetProjectDetailsTrueAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); int testProjectId = 1012; var responseProject = Task.FromResult(_stringConstant.ProjectDetail); var requestProjectUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, testProjectId, _stringConstant.GetProjectDetails); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.TestAccessToken)).Returns(responseProject); - var project = await _oauthCallsRepository.GetProjectDetailsAsync(testProjectId, _stringConstant.TestAccessToken); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.AccessTokenForTest)).Returns(responseProject); + var project = await _oauthCallHttpContextRepository.GetProjectDetailsAsync(testProjectId); Assert.Equal(2, project.ApplicationUsers.Count); } #endregion + + #region Private Method + /// + /// Private method to create a user add login info and mocking of Identity and return access token + /// + /// + private async Task CreateUserAndMockingHttpContextToReturnAccessToken() + { + var user = new ApplicationUser() + { + Id = _stringConstant.StringIdForTest, + UserName = _stringConstant.EmailForTest, + Email = _stringConstant.EmailForTest + }; + await _userManager.CreateAsync(user); + UserLoginInfo info = new UserLoginInfo(_stringConstant.PromactStringName, _stringConstant.AccessTokenForTest); + await _userManager.AddLoginAsync(user.Id, info); + Claim claim = new Claim(_stringConstant.Sub, _stringConstant.StringIdForTest); + var mockClaims = new Mock(); + IList claims = new List(); + claims.Add(claim); + mockClaims.Setup(x => x.Claims).Returns(claims); + _mockHttpContextBase.Setup(x => x.User.Identity).Returns(mockClaims.Object); + var accessToken = Task.FromResult(_stringConstant.AccessTokenForTest); + _mockServiceRepository.Setup(x => x.GerAccessTokenByRefreshToken(It.IsAny())).Returns(accessToken); + } + #endregion } } diff --git a/Slack.Automation/Promact.Core.Test/ScrumReportRepositoryTest.cs b/Slack.Automation/Promact.Core.Test/ScrumReportRepositoryTest.cs index 30f2b308..7f1dd25a 100644 --- a/Slack.Automation/Promact.Core.Test/ScrumReportRepositoryTest.cs +++ b/Slack.Automation/Promact.Core.Test/ScrumReportRepositoryTest.cs @@ -10,6 +10,11 @@ using Xunit; using Promact.Erp.Util.HttpClient; using Promact.Erp.DomainModel.ApplicationClass; +using System.Web; +using Promact.Core.Repository.ServiceRepository; +using Microsoft.AspNet.Identity; +using System.Security.Claims; +using System.Collections.Generic; namespace Promact.Core.Test { @@ -23,6 +28,9 @@ public class ScrumReportRepositoryTest private readonly IRepository _scrumAnswerDataRepository; private readonly IRepository _questionDataRepository; private readonly IStringConstantRepository _stringConstant; + private readonly Mock _mockHttpContextBase; + private readonly ApplicationUserManager _userManager; + private readonly Mock _mockServiceRepository; private Scrum scrum = new Scrum(); private ScrumAnswer scrumAnswer = new ScrumAnswer(); @@ -41,6 +49,9 @@ public ScrumReportRepositoryTest() _scrumAnswerDataRepository = _componentContext.Resolve>(); _questionDataRepository = _componentContext.Resolve>(); _stringConstant = _componentContext.Resolve(); + _mockHttpContextBase = _componentContext.Resolve>(); + _userManager = _componentContext.Resolve(); + _mockServiceRepository = _componentContext.Resolve>(); Initialize(); } #endregion @@ -50,15 +61,16 @@ public ScrumReportRepositoryTest() /// Method to test GetProjects when the logged in person is admin /// [Fact Trait("Category", "Required")] - public void GetProjectsAdminTest() + public async Task GetProjectsAdminTest() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.AdminLogin); var requestUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); var responseProjects = Task.FromResult(_stringConstant.ProjectDetailsForAdminFromOauth); var requestUrlProjects = _stringConstant.AllProjectUrl; - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrlProjects, _stringConstant.TestAccessToken)).Returns(responseProjects); - var projects = _scrumReportRepository.GetProjectsAsync(_stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken).Result; + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrlProjects, _stringConstant.AccessTokenForTest)).Returns(responseProjects); + var projects = _scrumReportRepository.GetProjectsAsync(_stringConstant.EmployeeIdForTest).Result; Assert.Equal(true, projects.Any()); } @@ -66,15 +78,16 @@ public void GetProjectsAdminTest() /// Method to test GetProjects when the logged in person is team leader /// [Fact Trait("Category", "Required")] - public void GetProjectsTeamLeaderTest() + public async Task GetProjectsTeamLeaderTest() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.TeamLeaderLogin); var requestUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); var responseProjects = Task.FromResult(_stringConstant.ProjectDetailsForTeamLeaderFromOauth); var requestUrlProjects = _stringConstant.AllProjectUrl; - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrlProjects, _stringConstant.TestAccessToken)).Returns(responseProjects); - var projects = _scrumReportRepository.GetProjectsAsync(_stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken).Result; + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrlProjects, _stringConstant.AccessTokenForTest)).Returns(responseProjects); + var projects = _scrumReportRepository.GetProjectsAsync(_stringConstant.EmployeeIdForTest).Result; Assert.Equal(true, projects.Any()); } @@ -83,15 +96,16 @@ public void GetProjectsTeamLeaderTest() /// Method to test GetProjects when the logged in person is employee /// [Fact Trait("Category", "Required")] - public void GetProjectsEmployeeTest() + public async Task GetProjectsEmployeeTest() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.EmployeeLogin); var requestUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); var responseProjects = Task.FromResult(_stringConstant.ProjectDetailsForEmployeeFromOauth); var requestUrlProjects = _stringConstant.AllProjectUrl; - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrlProjects, _stringConstant.TestAccessToken)).Returns(responseProjects); - var projects = _scrumReportRepository.GetProjectsAsync(_stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken).Result; + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestUrlProjects, _stringConstant.AccessTokenForTest)).Returns(responseProjects); + var projects = _scrumReportRepository.GetProjectsAsync(_stringConstant.EmployeeIdForTest).Result; Assert.Equal(true, projects.Any()); } @@ -103,17 +117,18 @@ public void GetProjectsEmployeeTest() [Fact Trait("Category", "Required")] public async Task ScrumReportDetailsPersonUnavailableTest() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); int testProjectId = 1012; DateTime scrumDate = new DateTime(2016, 9, 15); var response = Task.FromResult(_stringConstant.EmployeeLogin); var requestUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); var responseProject = Task.FromResult(_stringConstant.ProjectDetail); var requestProjectUrl = string.Format("{0}{1}", testProjectId, _stringConstant.GetProjectDetails); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.TestAccessToken)).Returns(responseProject); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.AccessTokenForTest)).Returns(responseProject); _scrumDataRepository.Insert(scrum); await _scrumDataRepository.SaveChangesAsync(); - var scrumProjectDetails = _scrumReportRepository.ScrumReportDetailsAsync(testProjectId, scrumDate, _stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken).Result; + var scrumProjectDetails = _scrumReportRepository.ScrumReportDetailsAsync(testProjectId, scrumDate, _stringConstant.EmployeeIdForTest).Result; Assert.NotNull(scrumProjectDetails); } @@ -124,21 +139,22 @@ public async Task ScrumReportDetailsPersonUnavailableTest() [Fact Trait("Category", "Required")] public async Task ScrumReportDetailsEmployeeTest() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); int testProjectId = 1012; DateTime scrumDate = new DateTime(2016, 9, 19); var response = Task.FromResult(_stringConstant.EmployeeLogin); var requestUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); var responseProject = Task.FromResult(_stringConstant.ProjectDetail); var requestProjectUrl = string.Format("{0}{1}", testProjectId, _stringConstant.GetProjectDetails); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.TestAccessToken)).Returns(responseProject); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.AccessTokenForTest)).Returns(responseProject); _scrumDataRepository.Insert(scrum); await _scrumDataRepository.SaveChangesAsync(); _questionDataRepository.Insert(questionOne); await _questionDataRepository.SaveChangesAsync(); _scrumAnswerDataRepository.Insert(scrumAnswer); await _scrumAnswerDataRepository.SaveChangesAsync(); - var scrumProjectDetails = _scrumReportRepository.ScrumReportDetailsAsync(testProjectId, scrumDate, _stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken).Result; + var scrumProjectDetails = _scrumReportRepository.ScrumReportDetailsAsync(testProjectId, scrumDate, _stringConstant.EmployeeIdForTest).Result; Assert.NotNull(scrumProjectDetails); } @@ -149,21 +165,22 @@ public async Task ScrumReportDetailsEmployeeTest() [Fact Trait("Category", "Required")] public async Task ScrumReportDetailsAdminTest() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); int testProjectId = 1012; DateTime scrumDate = new DateTime(2016, 9, 19); var response = Task.FromResult(_stringConstant.AdminLogin); var requestUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); var responseProject = Task.FromResult(_stringConstant.ProjectDetail); var requestProjectUrl = string.Format("{0}{1}", testProjectId, _stringConstant.GetProjectDetails); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.TestAccessToken)).Returns(responseProject); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.AccessTokenForTest)).Returns(responseProject); _scrumDataRepository.Insert(scrum); await _scrumDataRepository.SaveChangesAsync(); _questionDataRepository.Insert(questionTwo); await _questionDataRepository.SaveChangesAsync(); _scrumAnswerDataRepository.Insert(scrumAnswer); await _scrumAnswerDataRepository.SaveChangesAsync(); - var scrumProjectDetails = _scrumReportRepository.ScrumReportDetailsAsync(testProjectId, scrumDate, _stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken).Result; + var scrumProjectDetails = _scrumReportRepository.ScrumReportDetailsAsync(testProjectId, scrumDate, _stringConstant.EmployeeIdForTest).Result; Assert.NotNull(scrumProjectDetails); } @@ -174,21 +191,22 @@ public async Task ScrumReportDetailsAdminTest() [Fact Trait("Category", "Required")] public async Task ScrumReportDetailsTeamLeaderTest() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); int testProjectId = 1012; DateTime scrumDate = new DateTime(2016, 9, 19); var response = Task.FromResult(_stringConstant.TeamLeaderLoginDetails); var requestUrl = string.Format("{0}{1}", _stringConstant.EmployeeIdForTest, _stringConstant.UserDetailUrl); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.TestAccessToken)).Returns(response); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); var responseProject = Task.FromResult(_stringConstant.ProjectDetail); var requestProjectUrl = string.Format("{0}{1}", testProjectId, _stringConstant.GetProjectDetails); - _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.TestAccessToken)).Returns(responseProject); + _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUrl, requestProjectUrl, _stringConstant.AccessTokenForTest)).Returns(responseProject); _scrumDataRepository.Insert(scrum); await _scrumDataRepository.SaveChangesAsync(); _questionDataRepository.Insert(questionThree); await _questionDataRepository.SaveChangesAsync(); _scrumAnswerDataRepository.Insert(scrumAnswer); await _scrumAnswerDataRepository.SaveChangesAsync(); - var scrumProjectDetails = _scrumReportRepository.ScrumReportDetailsAsync(testProjectId, scrumDate, _stringConstant.EmployeeIdForTest, _stringConstant.TestAccessToken).Result; + var scrumProjectDetails = _scrumReportRepository.ScrumReportDetailsAsync(testProjectId, scrumDate, _stringConstant.EmployeeIdForTest).Result; Assert.NotNull(scrumProjectDetails); } @@ -226,5 +244,32 @@ public void Initialize() questionThree.OrderNumber = QuestionOrder.RoadBlock; } #endregion + + #region Private Method + /// + /// Private method to create a user add login info and mocking of Identity and return access token + /// + /// + private async Task CreateUserAndMockingHttpContextToReturnAccessToken() + { + var user = new ApplicationUser() + { + Id = _stringConstant.StringIdForTest, + UserName = _stringConstant.EmailForTest, + Email = _stringConstant.EmailForTest + }; + await _userManager.CreateAsync(user); + UserLoginInfo info = new UserLoginInfo(_stringConstant.PromactStringName, _stringConstant.AccessTokenForTest); + await _userManager.AddLoginAsync(user.Id, info); + Claim claim = new Claim(_stringConstant.Sub, _stringConstant.StringIdForTest); + var mockClaims = new Mock(); + IList claims = new List(); + claims.Add(claim); + mockClaims.Setup(x => x.Claims).Returns(claims); + _mockHttpContextBase.Setup(x => x.User.Identity).Returns(mockClaims.Object); + var accessToken = Task.FromResult(_stringConstant.AccessTokenForTest); + _mockServiceRepository.Setup(x => x.GerAccessTokenByRefreshToken(It.IsAny())).Returns(accessToken); + } + #endregion } } diff --git a/Slack.Automation/Promact.Core.Test/TaskMailRepositoryTest.cs b/Slack.Automation/Promact.Core.Test/TaskMailRepositoryTest.cs index 13bd1277..12b5e718 100644 --- a/Slack.Automation/Promact.Core.Test/TaskMailRepositoryTest.cs +++ b/Slack.Automation/Promact.Core.Test/TaskMailRepositoryTest.cs @@ -5,6 +5,7 @@ using Promact.Core.Repository.BotQuestionRepository; using Promact.Core.Repository.ServiceRepository; using Promact.Core.Repository.SlackUserRepository; +using Promact.Core.Repository.TaskMailReportRepository; using Promact.Core.Repository.TaskMailRepository; using Promact.Erp.DomainModel.ApplicationClass; using Promact.Erp.DomainModel.ApplicationClass.SlackRequestAndResponse; @@ -14,8 +15,10 @@ using Promact.Erp.Util.HttpClient; using Promact.Erp.Util.StringConstants; using System; -using System.Net.Mail; +using System.Collections.Generic; +using System.Security.Claims; using System.Threading.Tasks; +using System.Web; using Xunit; namespace Promact.Core.Test @@ -34,6 +37,7 @@ public class TaskMailRepositoryTest private readonly Mock _mockEmailService; private readonly IStringConstantRepository _stringConstant; private readonly Mock _mockServiceRepository; + private readonly ITaskMailReportRepository _taskMailReportRepository; private SlackProfile profile = new SlackProfile(); private SlackUserDetails slackUserDetails = new SlackUserDetails(); private Question firstQuestion = new Question(); @@ -49,6 +53,8 @@ public class TaskMailRepositoryTest private Question SeventhQuestion = new Question(); private EmailApplication email = new EmailApplication(); private readonly Mock _loggerMock; + private readonly Mock _mockHttpContextBase; + #endregion #region Constructor @@ -66,6 +72,8 @@ public TaskMailRepositoryTest() _mockEmailService = _componentContext.Resolve>(); _loggerMock = _componentContext.Resolve>(); _mockServiceRepository = _componentContext.Resolve>(); + _taskMailReportRepository = _componentContext.Resolve(); + _mockHttpContextBase = _componentContext.Resolve>(); Initialize(); } #endregion @@ -524,7 +532,7 @@ public async Task TaskMailDetailsReportAsync() taskMailDetails.QuestionId = firstQuestion.Id; _taskMailDetailsDataRepository.Insert(taskMailDetails); await _taskMailDetailsDataRepository.SaveChangesAsync(); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportAsync(user.Id, _stringConstant.RoleAdmin, _stringConstant.FirstNameForTest, user.Id); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportAsync(user.Id, _stringConstant.RoleAdmin, _stringConstant.FirstNameForTest, user.Id); Assert.Equal(1, taskMailDetail.Count); } @@ -555,7 +563,7 @@ public async Task TaskMailDetailsReportForEmployeeAsync() taskMailDetails.QuestionId = firstQuestion.Id; _taskMailDetailsDataRepository.Insert(taskMailDetails); await _taskMailDetailsDataRepository.SaveChangesAsync(); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportAsync(user.Id, _stringConstant.RoleEmployee, _stringConstant.FirstNameForTest, user.Id); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportAsync(user.Id, _stringConstant.RoleEmployee, _stringConstant.FirstNameForTest, user.Id); Assert.Equal(1, taskMailDetail.Count); } /// @@ -564,6 +572,7 @@ public async Task TaskMailDetailsReportForEmployeeAsync() [Fact, Trait("Category", "Required")] public async Task TaskMailDetailsForSelectedDateForTeamLeaderAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var userResponse = Task.FromResult(_stringConstant.UserDetailsFromOauthServer); var userRequestUrl = string.Format("{0}{1}", _stringConstant.UserDetailsUrl, _stringConstant.FirstNameForTest); _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUserUrl, userRequestUrl, _stringConstant.AccessTokenForTest)).Returns(userResponse); @@ -575,9 +584,6 @@ public async Task TaskMailDetailsForSelectedDateForTeamLeaderAsync() _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUserUrl, managementRequestUrl, _stringConstant.AccessTokenForTest)).Returns(managementResponse); await _slackUserRepository.AddSlackUserAsync(slackUserDetails); await _botQuestionRepository.AddQuestionAsync(firstQuestion); - UserLoginInfo info = new UserLoginInfo(_stringConstant.PromactStringName, _stringConstant.AccessTokenForTest); - await _userManager.CreateAsync(user); - await _userManager.AddLoginAsync(user.Id, info); taskMail.EmployeeId = "1"; _taskMailDataRepository.Insert(taskMail); await _taskMailDataRepository.SaveChangesAsync(); @@ -590,7 +596,7 @@ public async Task TaskMailDetailsForSelectedDateForTeamLeaderAsync() _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportAsync(user.Id, _stringConstant.RoleTeamLeader, _stringConstant.FirstNameForTest, user.Id); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportAsync(user.Id, _stringConstant.RoleTeamLeader, _stringConstant.FirstNameForTest, user.Id); Assert.Equal(3, taskMailDetail.Count); } /// @@ -599,6 +605,7 @@ public async Task TaskMailDetailsForSelectedDateForTeamLeaderAsync() [Fact, Trait("Category", "Required")] public async Task TaskMailDetailsReportTeamLeaderAsync() { + await CreateUserAndMockingHttpContextToReturnAccessToken(); var userResponse = Task.FromResult(_stringConstant.UserDetailsFromOauthServer); var userRequestUrl = string.Format(_stringConstant.FirstAndSecondIndexStringFormat, _stringConstant.UserDetailsUrl, _stringConstant.FirstNameForTest); _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUserUrl, userRequestUrl, _stringConstant.AccessTokenForTest)).Returns(userResponse); @@ -610,9 +617,6 @@ public async Task TaskMailDetailsReportTeamLeaderAsync() _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUserUrl, managementRequestUrl, _stringConstant.AccessTokenForTest)).Returns(managementResponse); await _slackUserRepository.AddSlackUserAsync(slackUserDetails); await _botQuestionRepository.AddQuestionAsync(firstQuestion); - UserLoginInfo info = new UserLoginInfo(_stringConstant.PromactStringName, _stringConstant.AccessTokenForTest); - await _userManager.CreateAsync(user); - await _userManager.AddLoginAsync(user.Id, info); taskMail.EmployeeId = "1"; _taskMailDataRepository.Insert(taskMail); await _taskMailDataRepository.SaveChangesAsync(); @@ -626,7 +630,7 @@ public async Task TaskMailDetailsReportTeamLeaderAsync() _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportAsync(user.Id, _stringConstant.RoleTeamLeader, _stringConstant.FirstNameForTest, user.Id); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportAsync(user.Id, _stringConstant.RoleTeamLeader, _stringConstant.FirstNameForTest, user.Id); Assert.Equal(3, taskMailDetail.Count); } @@ -657,7 +661,7 @@ public async Task TaskMailDetailsForSelectedDateAsync() taskMailDetails.QuestionId = firstQuestion.Id; _taskMailDetailsDataRepository.Insert(taskMailDetails); await _taskMailDetailsDataRepository.SaveChangesAsync(); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleEmployee, Convert.ToString(DateTime.UtcNow), user.Id,DateTime.UtcNow); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleEmployee, Convert.ToString(DateTime.UtcNow), user.Id,DateTime.UtcNow); Assert.Equal(1, taskMailDetail.Count); } @@ -690,7 +694,7 @@ public async Task TaskMailDetailsForSelectedDateForAdminAsync() taskMailDetails.QuestionId = firstQuestion.Id; _taskMailDetailsDataRepository.Insert(taskMailDetails); await _taskMailDetailsDataRepository.SaveChangesAsync(); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleEmployee, Convert.ToString(DateTime.UtcNow), user.Id, DateTime.UtcNow); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleEmployee, Convert.ToString(DateTime.UtcNow), user.Id, DateTime.UtcNow); Assert.Equal(1, taskMailDetail.Count); } @@ -701,16 +705,12 @@ public async Task TaskMailDetailsForSelectedDateForAdminAsync() [Fact, Trait("Category", "Required")] public async Task GetAllEmployeeAsync() { - - UserLoginInfo info = new UserLoginInfo(_stringConstant.PromactStringName, _stringConstant.AccessTokenForTest); - await _userManager.CreateAsync(user); - await _userManager.AddLoginAsync(user.Id, info); - + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.TaskMailReport); var requestUrl = string.Format("{0}{1}", user.Id, _stringConstant.UserRoleUrl); _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); - var result = await _taskMailRepository.GetUserInformationAsync(user.Id); + var result = await _taskMailReportRepository.GetUserInformationAsync(user.Id); //Assert.Equal(0, result.Count); Assert.Equal(3, result.Count); } @@ -721,16 +721,12 @@ public async Task GetAllEmployeeAsync() [Fact, Trait("Category", "Required")] public async Task GetAllEmployeeForTeamLeaderAsync() { - - UserLoginInfo info = new UserLoginInfo(_stringConstant.PromactStringName, _stringConstant.AccessTokenForTest); - await _userManager.CreateAsync(user); - await _userManager.AddLoginAsync(user.Id, info); - + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.ListOfEmployeeForTeamLeader); var requestUrl = string.Format("{0}{1}", user.Id, _stringConstant.UserRoleUrl); _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); - var result = await _taskMailRepository.GetUserInformationAsync(user.Id); + var result = await _taskMailReportRepository.GetUserInformationAsync(user.Id); Assert.Equal(3, result.Count); } @@ -742,16 +738,12 @@ public async Task GetAllEmployeeForTeamLeaderAsync() [Fact, Trait("Category", "Required")] public async Task GetEmployeeInfromationAsync() { - - UserLoginInfo info = new UserLoginInfo(_stringConstant.PromactStringName, _stringConstant.AccessTokenForTest); - await _userManager.CreateAsync(user); - await _userManager.AddLoginAsync(user.Id, info); - + await CreateUserAndMockingHttpContextToReturnAccessToken(); var response = Task.FromResult(_stringConstant.EmployeeInformation); var requestUrl = string.Format("{0}{1}", user.Id, _stringConstant.UserRoleUrl); _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.UserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response); - var result = await _taskMailRepository.GetUserInformationAsync(user.Id); + var result = await _taskMailReportRepository.GetUserInformationAsync(user.Id); Assert.Equal(1, result.Count); } @@ -784,7 +776,7 @@ public async Task TaskMailDetailsReportSelectedDateAsync() taskMailDetails.QuestionId = firstQuestion.Id; _taskMailDetailsDataRepository.Insert(taskMailDetails); await _taskMailDetailsDataRepository.SaveChangesAsync(); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleAdmin, Convert.ToString(DateTime.UtcNow), user.Id, DateTime.UtcNow); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleAdmin, Convert.ToString(DateTime.UtcNow), user.Id, DateTime.UtcNow); Assert.Equal(1, taskMailDetail.Count); } @@ -824,7 +816,7 @@ public async Task TaskMailDetailsReportNextPreviousDateAsync() _taskMailDetailsDataRepository.Insert(taskMailDetails); await _taskMailDetailsDataRepository.SaveChangesAsync(); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleAdmin, Convert.ToString(DateTime.UtcNow), user.Id, DateTime.UtcNow); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleAdmin, Convert.ToString(DateTime.UtcNow), user.Id, DateTime.UtcNow); Assert.Equal(1, taskMailDetail.Count); } @@ -864,7 +856,7 @@ public async Task TaskMailDetailsReportNextPreviousDateForEmployeeAsync() _taskMailDetailsDataRepository.Insert(taskMailDetails); await _taskMailDetailsDataRepository.SaveChangesAsync(); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleEmployee, Convert.ToString(DateTime.UtcNow), user.Id, DateTime.UtcNow); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleEmployee, Convert.ToString(DateTime.UtcNow), user.Id, DateTime.UtcNow); Assert.Equal(1, taskMailDetail.Count); } @@ -900,7 +892,7 @@ public async Task TaskMailDetailsReportNextPreviousDateForTeamLeaderAsync() _taskMailDetailsDataRepository.Insert(taskMailDetails); await _taskMailDetailsDataRepository.SaveChangesAsync(); - var taskMailDetail = await _taskMailRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleAdmin, Convert.ToString(DateTime.UtcNow), user.Id,DateTime.UtcNow); + var taskMailDetail = await _taskMailReportRepository.TaskMailDetailsReportSelectedDateAsync(user.Id, _stringConstant.FirstNameForTest, _stringConstant.RoleAdmin, Convert.ToString(DateTime.UtcNow), user.Id,DateTime.UtcNow); Assert.Equal(1, taskMailDetail.Count); } @@ -1071,5 +1063,32 @@ private void LoggerMocking() _loggerMock.Setup(x => x.Error(It.IsAny(), It.IsAny())); } #endregion + + #region Private Method + /// + /// Private method to create a user add login info and mocking of Identity and return access token + /// + /// + private async Task CreateUserAndMockingHttpContextToReturnAccessToken() + { + var user = new ApplicationUser() + { + Id = _stringConstant.StringIdForTest, + UserName = _stringConstant.EmailForTest, + Email = _stringConstant.EmailForTest + }; + await _userManager.CreateAsync(user); + UserLoginInfo info = new UserLoginInfo(_stringConstant.PromactStringName, _stringConstant.AccessTokenForTest); + await _userManager.AddLoginAsync(user.Id, info); + Claim claim = new Claim(_stringConstant.Sub, _stringConstant.StringIdForTest); + var mockClaims = new Mock(); + IList claims = new List(); + claims.Add(claim); + mockClaims.Setup(x => x.Claims).Returns(claims); + _mockHttpContextBase.Setup(x => x.User.Identity).Returns(mockClaims.Object); + var accessToken = Task.FromResult(_stringConstant.AccessTokenForTest); + _mockServiceRepository.Setup(x => x.GerAccessTokenByRefreshToken(It.IsAny())).Returns(accessToken); + } + #endregion } } \ No newline at end of file diff --git a/Slack.Automation/Promact.Erp.Core/Controllers/LeaveReportController.cs b/Slack.Automation/Promact.Erp.Core/Controllers/LeaveReportController.cs index b9a690ad..590053f5 100644 --- a/Slack.Automation/Promact.Erp.Core/Controllers/LeaveReportController.cs +++ b/Slack.Automation/Promact.Erp.Core/Controllers/LeaveReportController.cs @@ -1,6 +1,5 @@ using Promact.Core.Repository.AttachmentRepository; using Promact.Core.Repository.LeaveReportRepository; -using Promact.Erp.DomainModel.DataRepository; using Promact.Erp.DomainModel.Models; using Promact.Erp.Util.StringConstants; using System.Threading.Tasks; @@ -54,9 +53,7 @@ public class LeaveReportController : BaseController [Route("")] public async Task LeaveReportAsync() { - var loginUser = await _userManager.FindByIdAsync(GetUserId(User.Identity)); - var accessToken = await _attachmentRepository.UserAccessTokenAsync(loginUser.Email); - return Ok(await _leaveReport.LeaveReportAsync(accessToken, loginUser.Id)); + return Ok(await _leaveReport.LeaveReportAsync(GetUserId(User.Identity))); } @@ -86,9 +83,7 @@ public async Task LeaveReportDetailsAsync(string id) { if (id != null) { - var loginUser = await _userManager.FindByIdAsync(GetUserId(User.Identity)); - var accessToken = await _attachmentRepository.UserAccessTokenAsync(loginUser.Email); - return Ok(await _leaveReport.LeaveReportDetailsAsync(id, accessToken)); + return Ok(await _leaveReport.LeaveReportDetailsAsync(id)); } else { diff --git a/Slack.Automation/Promact.Erp.Core/Controllers/ScrumReportController.cs b/Slack.Automation/Promact.Erp.Core/Controllers/ScrumReportController.cs index ba141184..7debfe28 100644 --- a/Slack.Automation/Promact.Erp.Core/Controllers/ScrumReportController.cs +++ b/Slack.Automation/Promact.Erp.Core/Controllers/ScrumReportController.cs @@ -89,9 +89,7 @@ public ScrumReportController(IScrumReportRepository scrumRepository, IAttachment [Route("")] public async Task ScrumProjectListAsync() { - var loginUser = await _userManager.FindByIdAsync(GetUserId(User.Identity)); - var accessToken = await _attachmentRepository.UserAccessTokenAsync(loginUser.Email); - return Ok(await _scrumReportRepository.GetProjectsAsync(loginUser.Id, accessToken)); + return Ok(await _scrumReportRepository.GetProjectsAsync(GetUserId(User.Identity))); } /** @@ -128,9 +126,7 @@ public async Task ScrumDetailsAsync(int id) { string queryString = Request.RequestUri.Query.Substring(1,24); DateTime date = Convert.ToDateTime(queryString); - var loginUser = await _userManager.FindByIdAsync(GetUserId(User.Identity)); - var accessToken = await _attachmentRepository.UserAccessTokenAsync(loginUser.Email); - return Ok(await _scrumReportRepository.ScrumReportDetailsAsync(id, date,loginUser.Id, accessToken)); + return Ok(await _scrumReportRepository.ScrumReportDetailsAsync(id, date, GetUserId(User.Identity))); } #endregion } diff --git a/Slack.Automation/Promact.Erp.Core/Controllers/TaskReportController.cs b/Slack.Automation/Promact.Erp.Core/Controllers/TaskReportController.cs index e2434273..8c44dc9a 100644 --- a/Slack.Automation/Promact.Erp.Core/Controllers/TaskReportController.cs +++ b/Slack.Automation/Promact.Erp.Core/Controllers/TaskReportController.cs @@ -1,11 +1,10 @@ -using Promact.Core.Repository.TaskMailRepository; -using System.Threading.Tasks; +using System.Threading.Tasks; using System.Web.Http; -using Microsoft.AspNet.Identity; using System.Collections.Generic; using Promact.Erp.DomainModel.ApplicationClass; using Promact.Erp.Util.StringConstants; using System; +using Promact.Core.Repository.TaskMailReportRepository; namespace Promact.Erp.Core.Controllers { @@ -14,8 +13,8 @@ namespace Promact.Erp.Core.Controllers [Authorize] public class TaskReportController : BaseController { - private readonly ITaskMailRepository _taskMailReport; - public TaskReportController(ITaskMailRepository taskMailReport, IStringConstantRepository stringConstant) + private readonly ITaskMailReportRepository _taskMailReport; + public TaskReportController(ITaskMailReportRepository taskMailReport, IStringConstantRepository stringConstant) :base(stringConstant) { _taskMailReport = taskMailReport; diff --git a/Slack.Automation/Promact.Erp.Web/App_Start/AutofacConfig.cs b/Slack.Automation/Promact.Erp.Web/App_Start/AutofacConfig.cs index 867b750e..a6720adc 100644 --- a/Slack.Automation/Promact.Erp.Web/App_Start/AutofacConfig.cs +++ b/Slack.Automation/Promact.Erp.Web/App_Start/AutofacConfig.cs @@ -20,6 +20,7 @@ using Promact.Core.Repository.SlackChannelRepository; using Promact.Core.Repository.SlackRepository; using Promact.Core.Repository.SlackUserRepository; +using Promact.Core.Repository.TaskMailReportRepository; using Promact.Core.Repository.TaskMailRepository; using Promact.Erp.Core.Controllers; using Promact.Erp.DomainModel.Context; @@ -83,6 +84,9 @@ public static IComponentContext RegisterDependancies() builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterModule(); builder.RegisterModule(); builder.RegisterModule(); builder.Register(x => AutoMapperConfiguration.ConfigureMap()).As().SingleInstance(); diff --git a/Slack.Automation/Promact.Erp.Web/Web.config b/Slack.Automation/Promact.Erp.Web/Web.config index f856d50e..16c3cdc0 100644 --- a/Slack.Automation/Promact.Erp.Web/Web.config +++ b/Slack.Automation/Promact.Erp.Web/Web.config @@ -93,7 +93,7 @@ - +