Skip to content

Commit 855cca2

Browse files
authored
Merge pull request #2717 from TechnologyEnhancedLearning/Develop/feature/TD-3913-AdminAccountsController-refactor
TD-3913-AdminAccountsController - refactor
2 parents c2f181f + 5b346aa commit 855cca2

File tree

5 files changed

+128
-68
lines changed

5 files changed

+128
-68
lines changed

DigitalLearningSolutions.Web.Tests/Controllers/SuperAdmin/AdminAccountsControllerTests.cs

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
namespace DigitalLearningSolutions.Web.Tests.Controllers.SuperAdmin
22
{
3-
using DigitalLearningSolutions.Data.DataServices;
4-
using DigitalLearningSolutions.Data.DataServices.UserDataService;
53
using DigitalLearningSolutions.Data.Models.SearchSortFilterPaginate;
6-
using DigitalLearningSolutions.Data.Models.User;
4+
using DigitalLearningSolutions.Data.Models.User;
75
using DigitalLearningSolutions.Web.Controllers.SuperAdmin.Administrators;
86
using DigitalLearningSolutions.Web.Services;
97
using DigitalLearningSolutions.Web.Tests.ControllerHelpers;
@@ -19,46 +17,43 @@
1917
public class AdminAccountsControllerTests
2018
{
2119
private AdminAccountsController administratorsController = null!;
22-
private IUserDataService userDataService = null!;
2320
private IAdminDownloadFileService adminDownloadFileService = null!;
2421
private ISearchSortFilterPaginateService searchSortFilterPaginateService = null!;
25-
private ICentresDataService centresDataService = null!;
26-
private ICourseCategoriesDataService courseCategoriesDataService = null!;
22+
private ICentresService centresService = null!;
23+
private ICourseCategoriesService courseCategoriesService = null!;
2724
private IUserService userService = null!;
2825
private ICentreContractAdminUsageService centreContractAdminUsageService = null!;
29-
private INotificationPreferencesDataService notificationPreferencesDataService = null!;
30-
private INotificationDataService notificationDataService = null!;
26+
private INotificationPreferencesService notificationPreferencesService = null!;
27+
private INotificationService notificationService = null!;
3128
const string CookieName = "AdminFilter";
3229
private HttpRequest httpRequest = null!;
3330
private HttpResponse httpResponse = null!;
3431

3532
[SetUp]
3633
public void Setup()
3734
{
38-
userDataService = A.Fake <IUserDataService>();
39-
centresDataService = A.Fake <ICentresDataService>();
40-
searchSortFilterPaginateService = A.Fake <ISearchSortFilterPaginateService>();
41-
adminDownloadFileService = A.Fake <IAdminDownloadFileService>();
42-
courseCategoriesDataService = A.Fake<ICourseCategoriesDataService>();
35+
centresService = A.Fake<ICentresService>();
36+
searchSortFilterPaginateService = A.Fake<ISearchSortFilterPaginateService>();
37+
adminDownloadFileService = A.Fake<IAdminDownloadFileService>();
38+
courseCategoriesService = A.Fake<ICourseCategoriesService>();
4339
userService = A.Fake<IUserService>();
4440
centreContractAdminUsageService = A.Fake<ICentreContractAdminUsageService>();
45-
notificationPreferencesDataService = A.Fake<INotificationPreferencesDataService>();
46-
notificationDataService = A.Fake<INotificationDataService>();
41+
notificationPreferencesService = A.Fake<INotificationPreferencesService>();
42+
notificationService = A.Fake<INotificationService>();
4743

48-
httpRequest = A.Fake<HttpRequest>();
44+
httpRequest = A.Fake<HttpRequest>();
4945
httpResponse = A.Fake<HttpResponse>();
5046
const string cookieValue = "Role|IsCentreAdmin|true";
5147

5248
administratorsController = new AdminAccountsController(
53-
userDataService,
54-
centresDataService,
49+
centresService,
5550
searchSortFilterPaginateService,
5651
adminDownloadFileService,
57-
courseCategoriesDataService,
52+
courseCategoriesService,
5853
userService,
5954
centreContractAdminUsageService,
60-
notificationPreferencesDataService,
61-
notificationDataService
55+
notificationPreferencesService,
56+
notificationService
6257
)
6358
.WithMockHttpContext(httpRequest, CookieName, cookieValue, httpResponse)
6459
.WithMockUser(true)
@@ -71,23 +66,23 @@ public void Index_calls_expected_methods_and_returns_view()
7166
{
7267
// Given
7368
var loggedInAdmin = UserTestHelper.GetDefaultAdminEntity();
74-
A.CallTo(() => userDataService.GetAdminById(loggedInAdmin.AdminAccount.Id)).Returns(loggedInAdmin);
69+
A.CallTo(() => userService.GetAdminById(loggedInAdmin.AdminAccount.Id)).Returns(loggedInAdmin);
7570

7671
// When
7772
var result = administratorsController.Index();
7873

7974
// Then
8075
using (new AssertionScope())
8176
{
82-
A.CallTo(() => userDataService.GetAllAdmins(A<string>._, A<int>._, A<int>._, A<int>._, A<string>._, A<string>._, A<int>._, A<int>._)).MustHaveHappened();
83-
A.CallTo(() => centresDataService.GetAllCentres(false)).MustHaveHappened();
77+
A.CallTo(() => userService.GetAllAdmins(A<string>._, A<int>._, A<int>._, A<int>._, A<string>._, A<string>._, A<int>._, A<int>._)).MustHaveHappened();
78+
A.CallTo(() => centresService.GetAllCentres(false)).MustHaveHappened();
8479
A.CallTo(
8580
() => searchSortFilterPaginateService.SearchFilterSortAndPaginate(
8681
A<IEnumerable<AdminEntity>>._,
8782
A<SearchSortFilterAndPaginateOptions>._
8883
)
8984
).MustHaveHappened();
90-
85+
9186
result.Should().BeViewResult().WithDefaultViewName();
9287
}
9388
}
@@ -98,16 +93,16 @@ public void EditCentre_calls_expected_methods_and_returns_view()
9893
int adminId = 1;
9994
var loggedInAdmin = UserTestHelper.GetDefaultAdminEntity();
10095

101-
A.CallTo(() => userDataService.GetAdminById(loggedInAdmin.AdminAccount.Id)).Returns(loggedInAdmin);
96+
A.CallTo(() => userService.GetAdminById(loggedInAdmin.AdminAccount.Id)).Returns(loggedInAdmin);
10297

10398
// When
10499
var result = administratorsController.EditCentre(adminId);
105100

106101
//Then
107102
using (new AssertionScope())
108103
{
109-
A.CallTo(() => userDataService.GetAdminUserById(adminId)).MustHaveHappened();
110-
A.CallTo(() => centresDataService.GetAllCentres(true)).MustHaveHappened();
104+
A.CallTo(() => userService.GetAdminUserById(adminId)).MustHaveHappened();
105+
A.CallTo(() => centresService.GetAllCentres(true)).MustHaveHappened();
111106
result.Should().BeViewResult().WithDefaultViewName();
112107
}
113108
}

DigitalLearningSolutions.Web/Controllers/SuperAdmin/Administrators/AdminAccountsController.cs

Lines changed: 36 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
namespace DigitalLearningSolutions.Web.Controllers.SuperAdmin.Administrators
22
{
3-
using DigitalLearningSolutions.Data.DataServices;
4-
using DigitalLearningSolutions.Data.DataServices.UserDataService;
53
using DigitalLearningSolutions.Data.Enums;
64
using DigitalLearningSolutions.Data.Helpers;
75
using DigitalLearningSolutions.Data.Models.Common;
@@ -31,35 +29,33 @@
3129
[SetSelectedTab(nameof(NavMenuTab.Admins))]
3230
public class AdminAccountsController : Controller
3331
{
34-
private readonly IUserDataService userDataService;
3532
private readonly IAdminDownloadFileService adminDownloadFileService;
3633
private readonly ISearchSortFilterPaginateService searchSortFilterPaginateService;
37-
private readonly ICentresDataService centresDataService;
38-
private readonly ICourseCategoriesDataService courseCategoriesDataService;
34+
private readonly ICentresService centresService;
35+
private readonly ICourseCategoriesService courseCategoriesService;
3936
private readonly IUserService userService;
4037
private readonly ICentreContractAdminUsageService centreContractAdminUsageService;
41-
private readonly INotificationPreferencesDataService notificationPreferencesDataService;
42-
private readonly INotificationDataService notificationDataService;
43-
public AdminAccountsController(IUserDataService userDataService,
44-
ICentresDataService centresDataService,
38+
private readonly INotificationPreferencesService notificationPreferencesService;
39+
private readonly INotificationService notificationService;
40+
public AdminAccountsController(
41+
ICentresService centresService,
4542
ISearchSortFilterPaginateService searchSortFilterPaginateService,
4643
IAdminDownloadFileService adminDownloadFileService,
47-
ICourseCategoriesDataService courseCategoriesDataService,
44+
ICourseCategoriesService courseCategoriesService,
4845
IUserService userService,
4946
ICentreContractAdminUsageService centreContractAdminUsageService,
50-
INotificationPreferencesDataService notificationPreferencesDataService,
51-
INotificationDataService notificationDataService
47+
INotificationPreferencesService notificationPreferencesService,
48+
INotificationService notificationService
5249
)
5350
{
54-
this.userDataService = userDataService;
55-
this.centresDataService = centresDataService;
51+
this.centresService = centresService;
5652
this.searchSortFilterPaginateService = searchSortFilterPaginateService;
5753
this.adminDownloadFileService = adminDownloadFileService;
58-
this.courseCategoriesDataService = courseCategoriesDataService;
54+
this.courseCategoriesService = courseCategoriesService;
5955
this.userService = userService;
6056
this.centreContractAdminUsageService = centreContractAdminUsageService;
61-
this.notificationPreferencesDataService = notificationPreferencesDataService;
62-
this.notificationDataService = notificationDataService;
57+
this.notificationPreferencesService = notificationPreferencesService;
58+
this.notificationService = notificationService;
6359
}
6460

6561
[Route("SuperAdmin/AdminAccounts/{page=0:int}")]
@@ -75,7 +71,7 @@ public IActionResult Index(
7571
string? ExistingFilterString = ""
7672
)
7773
{
78-
var loggedInSuperAdmin = userDataService.GetAdminById(User.GetAdminId()!.Value);
74+
var loggedInSuperAdmin = userService.GetAdminById(User.GetAdminId()!.Value);
7975
if (loggedInSuperAdmin.AdminAccount.Active == false)
8076
{
8177
return NotFound();
@@ -134,9 +130,9 @@ public IActionResult Index(
134130
}
135131
}
136132

137-
(var Admins, var ResultCount) = this.userDataService.GetAllAdmins(Search ?? string.Empty, offSet, itemsPerPage ?? 0, AdminId, UserStatus, Role, CentreId, AuthHelper.FailedLoginThreshold);
133+
(var Admins, var ResultCount) = this.userService.GetAllAdmins(Search ?? string.Empty, offSet, itemsPerPage ?? 0, AdminId, UserStatus, Role, CentreId, AuthHelper.FailedLoginThreshold);
138134

139-
var centres = centresDataService.GetAllCentres().ToList();
135+
var centres = centresService.GetAllCentres().ToList();
140136
centres.Insert(0, (0, "Any"));
141137

142138
var searchSortPaginationOptions = new SearchSortFilterAndPaginateOptions(
@@ -203,14 +199,14 @@ public IActionResult Index(
203199
public IActionResult ManageRoles(int adminId)
204200
{
205201
var centreId = User.GetCentreIdKnownNotNull();
206-
var adminUser = userDataService.GetAdminUserById(adminId);
202+
var adminUser = userService.GetAdminUserById(adminId);
207203

208-
var categories = courseCategoriesDataService.GetCategoriesForCentreAndCentrallyManagedCourses(centreId);
204+
var categories = courseCategoriesService.GetCategoriesForCentreAndCentrallyManagedCourses(centreId);
209205
categories = categories.Prepend(new Category { CategoryName = "All", CourseCategoryID = 0 });
210206
var numberOfAdmins = centreContractAdminUsageService.GetCentreAdministratorNumbers(centreId);
211207

212208
var model = new ManageRoleViewModel(adminUser!, centreId, categories, numberOfAdmins);
213-
var result = centresDataService.GetCentreDetailsById(centreId);
209+
var result = centresService.GetCentreDetailsById(centreId);
214210
model.CentreName = result.CentreName;
215211

216212
if (TempData["SearchString"] != null)
@@ -246,14 +242,14 @@ public IActionResult ManageRoles(AdminRolesFormData formData, int adminId)
246242
formData.IsLocalWorkforceManager))
247243
{
248244
var centreId = User.GetCentreIdKnownNotNull();
249-
var adminUser = userDataService.GetAdminUserById(adminId);
245+
var adminUser = userService.GetAdminUserById(adminId);
250246

251-
var categories = courseCategoriesDataService.GetCategoriesForCentreAndCentrallyManagedCourses(centreId);
247+
var categories = courseCategoriesService.GetCategoriesForCentreAndCentrallyManagedCourses(centreId);
252248
categories = categories.Prepend(new Category { CategoryName = "All", CourseCategoryID = 0 });
253249
var numberOfAdmins = centreContractAdminUsageService.GetCentreAdministratorNumbers(centreId);
254250

255251
var model = new ManageRoleViewModel(adminUser!, centreId, categories, numberOfAdmins);
256-
var result = centresDataService.GetCentreDetailsById(centreId);
252+
var result = centresService.GetCentreDetailsById(centreId);
257253
model.CentreName = result.CentreName;
258254
model.ContentManagementRole = formData.ContentManagementRole;
259255
model.IsCentreAdmin = formData.IsCentreAdmin;
@@ -291,7 +287,7 @@ public IActionResult ManageRoles(AdminRolesFormData formData, int adminId)
291287

292288
TempData["AdminId"] = adminId;
293289
int? learningCategory = formData.LearningCategory == 0 ? null : formData.LearningCategory;
294-
userDataService.UpdateAdminUserAndSpecialPermissions(
290+
userService.UpdateAdminUserAndSpecialPermissions(
295291
adminId,
296292
formData.IsCentreAdmin,
297293
formData.IsSupervisor,
@@ -313,10 +309,10 @@ public IActionResult ManageRoles(AdminRolesFormData formData, int adminId)
313309
int isCMSManager = (formData.ContentManagementRole.IsContentManager && !formData.ContentManagementRole.ImportOnly) ? 1 : 0;
314310
int isContentCreator = formData.IsContentCreator ? 1 : 0;
315311

316-
IEnumerable<int> notificationIds = notificationDataService.GetRoleBasedNotifications(isCentreManager, isCMSManager, isContentCreator);
317-
int userId = userDataService.GetUserIdFromAdminId(adminId);
312+
IEnumerable<int> notificationIds = notificationService.GetRoleBasedNotifications(isCentreManager, isCMSManager, isContentCreator);
313+
int userId = userService.GetUserIdFromAdminId(adminId);
318314

319-
notificationPreferencesDataService.SetNotificationPreferencesForAdmin(userId, notificationIds);
315+
notificationPreferencesService.SetNotificationPreferencesForAdmin(userId, notificationIds);
320316

321317
return RedirectToAction("Index", "AdminAccounts", new { AdminId = adminId });
322318
}
@@ -360,23 +356,23 @@ public List<string> GetRoles()
360356
[Route("SuperAdmin/AdminAccounts/{adminId=0:int}/DeleteAdmin")]
361357
public IActionResult DeleteAdmin(int adminId = 0)
362358
{
363-
userDataService.DeleteAdminAccount(adminId);
359+
userService.DeleteAdminAccount(adminId);
364360
return RedirectToAction("Index", "AdminAccounts");
365361
}
366362

367363
[Route("SuperAdmin/AdminAccounts/{adminId=0:int}/{actionType='':string}/UpdateAdminStatus")]
368364
public IActionResult UpdateAdminStatus(int adminId, string actionType)
369365
{
370-
userDataService.UpdateAdminStatus(adminId, (actionType == "Reactivate"));
366+
userService.UpdateAdminStatus(adminId, (actionType == "Reactivate"));
371367
TempData["AdminId"] = adminId;
372368
return RedirectToAction("Index", "AdminAccounts", new { AdminId = adminId });
373369
}
374370

375371
[Route("SuperAdmin/AdminAccounts/{adminId=0:int}/ChangeCentre")]
376372
public IActionResult EditCentre(int adminId)
377373
{
378-
var adminUser = userDataService.GetAdminUserById(adminId);
379-
var centres = centresDataService.GetAllCentres(true).ToList();
374+
var adminUser = userService.GetAdminUserById(adminId);
375+
var centres = centresService.GetAllCentres(true).ToList();
380376
ViewBag.Centres = SelectListHelper.MapOptionsToSelectListItems(
381377
centres, adminUser.CentreId
382378
);
@@ -406,15 +402,15 @@ public IActionResult EditCentre(int adminId)
406402
public IActionResult EditCentre(int adminId, int centreId)
407403
{
408404
TempData["AdminId"] = adminId;
409-
int? userId = userDataService.GetUserIdByAdminId(adminId);
410-
if (userDataService.IsUserAlreadyAdminAtCentre(userId, centreId))
405+
int? userId = userService.GetUserIdByAdminId(adminId);
406+
if (userService.IsUserAlreadyAdminAtCentre(userId, centreId))
411407
{
412408
TempData["CentreId"] = centreId;
413409
return RedirectToAction("EditCentre", "AdminAccounts", new { AdminId = adminId });
414410
}
415411
else
416412
{
417-
userDataService.UpdateAdminCentre(adminId, centreId);
413+
userService.UpdateAdminCentre(adminId, centreId);
418414
return RedirectToAction("Index", "AdminAccounts", new { AdminId = adminId });
419415
}
420416
}
@@ -428,7 +424,7 @@ public IActionResult RedirectToUser(int UserId) {
428424
[HttpGet]
429425
public IActionResult DeactivateOrDeleteAdmin(int adminId, ReturnPageQuery returnPageQuery)
430426
{
431-
var admin = userDataService.GetAdminById(adminId);
427+
var admin = userService.GetAdminById(adminId);
432428

433429
if (!CurrentUserCanDeactivateAdmin(admin!.AdminAccount))
434430
{
@@ -443,7 +439,7 @@ public IActionResult DeactivateOrDeleteAdmin(int adminId, ReturnPageQuery return
443439
[HttpPost]
444440
public IActionResult DeactivateOrDeleteAdmin(int adminId, DeactivateAdminViewModel model)
445441
{
446-
var admin = userDataService.GetAdminById(adminId);
442+
var admin = userService.GetAdminById(adminId);
447443

448444
if (!CurrentUserCanDeactivateAdmin(admin!.AdminAccount))
449445
{
@@ -462,7 +458,7 @@ public IActionResult DeactivateOrDeleteAdmin(int adminId, DeactivateAdminViewMod
462458

463459
private bool CurrentUserCanDeactivateAdmin(AdminAccount adminToDeactivate)
464460
{
465-
var loggedInAdmin = userDataService.GetAdminById(User.GetAdminId()!.GetValueOrDefault());
461+
var loggedInAdmin = userService.GetAdminById(User.GetAdminId()!.GetValueOrDefault());
466462

467463
return UserPermissionsHelper.LoggedInAdminCanDeactivateUser(adminToDeactivate, loggedInAdmin!.AdminAccount);
468464
}

DigitalLearningSolutions.Web/Services/NotificationPreferencesService.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public interface INotificationPreferencesService
1010
{
1111
IEnumerable<NotificationPreference> GetNotificationPreferencesForUser(UserType userType, int? userId);
1212
void SetNotificationPreferencesForUser(UserType userType, int? userId, IEnumerable<int> notificationIds);
13+
void SetNotificationPreferencesForAdmin(int? adminId, IEnumerable<int> notificationIds);
1314
}
1415

1516
public class NotificationPreferencesService : INotificationPreferencesService
@@ -36,6 +37,11 @@ public IEnumerable<NotificationPreference> GetNotificationPreferencesForUser(Use
3637
throw new Exception($"No code path for getting notification preferences for user type {userType}");
3738
}
3839

40+
public void SetNotificationPreferencesForAdmin(int? adminId, IEnumerable<int> notificationIds)
41+
{
42+
notificationPreferencesDataService.SetNotificationPreferencesForAdmin(adminId, notificationIds);
43+
}
44+
3945
public void SetNotificationPreferencesForUser(UserType userType, int? userId, IEnumerable<int> notificationIds)
4046
{
4147
if (userType.Equals(UserType.AdminUser))

0 commit comments

Comments
 (0)