Skip to content

Commit 1f1e2bf

Browse files
authored
Merge pull request #2716 from TechnologyEnhancedLearning/Develop/feature/TD-3919-AdministratorController-refactor
TD-3919-AdministratorController - refactor
2 parents a085ed8 + 02cde02 commit 1f1e2bf

File tree

3 files changed

+45
-44
lines changed

3 files changed

+45
-44
lines changed

DigitalLearningSolutions.Web.Tests/Controllers/TrackingSystem/Centre/Administrator/AdministratorControllerTests.cs

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
namespace DigitalLearningSolutions.Web.Tests.Controllers.TrackingSystem.Centre.Administrator
22
{
33
using System.Collections.Generic;
4-
using DigitalLearningSolutions.Data.DataServices;
5-
using DigitalLearningSolutions.Data.DataServices.UserDataService;
64
using DigitalLearningSolutions.Data.Models.SearchSortFilterPaginate;
7-
using DigitalLearningSolutions.Data.Models.User;
5+
using DigitalLearningSolutions.Data.Models.User;
86
using DigitalLearningSolutions.Web.Controllers.TrackingSystem.Centre.Administrator;
97
using DigitalLearningSolutions.Web.Services;
108
using DigitalLearningSolutions.Web.Tests.ControllerHelpers;
@@ -22,21 +20,19 @@ public class AdministratorControllerTests
2220
{
2321
private AdministratorController administratorController = null!;
2422
private ICentreContractAdminUsageService centreContractAdminUsageService = null!;
25-
private ICourseCategoriesDataService courseCategoriesDataService = null!;
23+
private ICourseCategoriesService courseCategoriesService = null!;
2624
const string CookieName = "AdminFilter";
2725
private HttpRequest httpRequest = null!;
2826
private HttpResponse httpResponse = null!;
2927
private ISearchSortFilterPaginateService searchSortFilterPaginateService = null!;
30-
private IUserDataService userDataService = null!;
3128
private IUserService userService = null!;
3229
private IEmailService emailService = null!;
3330
private IEmailGenerationService emailGenerationService = null!;
3431

3532
[SetUp]
3633
public void Setup()
3734
{
38-
courseCategoriesDataService = A.Fake<ICourseCategoriesDataService>();
39-
userDataService = A.Fake<IUserDataService>();
35+
courseCategoriesService = A.Fake<ICourseCategoriesService>();
4036
centreContractAdminUsageService = A.Fake<ICentreContractAdminUsageService>();
4137
userService = A.Fake<IUserService>();
4238
searchSortFilterPaginateService = A.Fake<ISearchSortFilterPaginateService>();
@@ -48,8 +44,7 @@ public void Setup()
4844
const string cookieValue = "Role|IsCentreAdmin|true";
4945

5046
administratorController = new AdministratorController(
51-
userDataService,
52-
courseCategoriesDataService,
47+
courseCategoriesService,
5348
centreContractAdminUsageService,
5449
userService,
5550
searchSortFilterPaginateService,
@@ -71,8 +66,8 @@ public void Index_calls_expected_methods_and_returns_view()
7166
// Then
7267
using (new AssertionScope())
7368
{
74-
A.CallTo(() => userDataService.GetAdminsByCentreId(A<int>._)).MustHaveHappened();
75-
A.CallTo(() => courseCategoriesDataService.GetCategoriesForCentreAndCentrallyManagedCourses(A<int>._))
69+
A.CallTo(() => userService.GetAdminsByCentreId(A<int>._)).MustHaveHappened();
70+
A.CallTo(() => courseCategoriesService.GetCategoriesForCentreAndCentrallyManagedCourses(A<int>._))
7671
.MustHaveHappened();
7772
A.CallTo(
7873
() => searchSortFilterPaginateService.SearchFilterSortAndPaginate(
@@ -98,7 +93,7 @@ public void UnlockAccount_unlocks_account_and_returns_to_page()
9893
// Given
9994
var adminAccount = UserTestHelper.GetDefaultAdminAccount();
10095
A.CallTo(() => userService.ResetFailedLoginCountByUserId(A<int>._)).DoesNothing();
101-
A.CallTo(() => userDataService.GetUserIdByAdminId(adminAccount.Id)).Returns(adminAccount.UserId);
96+
A.CallTo(() => userService.GetUserIdByAdminId(adminAccount.Id)).Returns(adminAccount.UserId);
10297

10398
// When
10499
var result = administratorController.UnlockAccount(adminAccount.Id);
@@ -116,7 +111,7 @@ public void DeactivateOrDeleteAdmin_returns_not_found_when_trying_to_access_page
116111
{
117112
// Given
118113
var adminUser = UserTestHelper.GetDefaultAdminUser();
119-
A.CallTo(() => userDataService.GetAdminUserById(adminUser.Id)).Returns(adminUser);
114+
A.CallTo(() => userService.GetAdminUserById(adminUser.Id)).Returns(adminUser);
120115

121116
// When
122117
var result = administratorController.DeactivateOrDeleteAdmin(
@@ -136,8 +131,8 @@ public void DeactivateOrDeleteAdmin_does_not_deactivate_admin_user_without_confi
136131
var admin = UserTestHelper.GetDefaultAdminEntity(8);
137132
var loggedInAdmin = UserTestHelper.GetDefaultAdminEntity();
138133

139-
A.CallTo(() => userDataService.GetAdminById(admin.AdminAccount.Id)).Returns(admin);
140-
A.CallTo(() => userDataService.GetAdminById(loggedInAdmin.AdminAccount.Id)).Returns(loggedInAdmin);
134+
A.CallTo(() => userService.GetAdminById(admin.AdminAccount.Id)).Returns(admin);
135+
A.CallTo(() => userService.GetAdminById(loggedInAdmin.AdminAccount.Id)).Returns(loggedInAdmin);
141136

142137
var deactivateViewModel =
143138
Builder<DeactivateAdminViewModel>.CreateNew().With(vm => vm.Confirm = false).Build();
@@ -156,7 +151,7 @@ public void DeactivateOrDeleteAdmin_does_not_deactivate_admin_user_without_confi
156151
administratorController.ModelState[nameof(DeactivateAdminViewModel.Confirm)]?.Errors[0].ErrorMessage
157152
.Should()
158153
.BeEquivalentTo(expectedErrorMessage);
159-
A.CallTo(() => userDataService.DeactivateAdmin(admin.AdminAccount.Id)).MustNotHaveHappened();
154+
A.CallTo(() => userService.DeactivateAdmin(admin.AdminAccount.Id)).MustNotHaveHappened();
160155
}
161156
}
162157

@@ -167,8 +162,8 @@ public void DeactivateOrDeleteAdmin_deactivates_admin_user_with_confirmation()
167162
var admin = UserTestHelper.GetDefaultAdminEntity(8);
168163
var loggedInAdmin = UserTestHelper.GetDefaultAdminEntity();
169164

170-
A.CallTo(() => userDataService.GetAdminById(admin.AdminAccount.Id)).Returns(admin);
171-
A.CallTo(() => userDataService.GetAdminById(loggedInAdmin.AdminAccount.Id)).Returns(loggedInAdmin);
165+
A.CallTo(() => userService.GetAdminById(admin.AdminAccount.Id)).Returns(admin);
166+
A.CallTo(() => userService.GetAdminById(loggedInAdmin.AdminAccount.Id)).Returns(loggedInAdmin);
172167

173168
A.CallTo(() => userService.DeactivateOrDeleteAdmin(admin.AdminAccount.Id)).DoesNothing();
174169
var deactivateViewModel =
@@ -190,8 +185,8 @@ public void DeactivateOrDeleteAdmin_submit_returns_not_found_when_trying_to_deac
190185
{
191186
// Given
192187
var adminUser = UserTestHelper.GetDefaultAdminUser();
193-
A.CallTo(() => userDataService.GetAdminUserById(adminUser.Id)).Returns(adminUser);
194-
A.CallTo(() => userDataService.DeactivateAdmin(adminUser.Id)).DoesNothing();
188+
A.CallTo(() => userService.GetAdminUserById(adminUser.Id)).Returns(adminUser);
189+
A.CallTo(() => userService.DeactivateAdmin(adminUser.Id)).DoesNothing();
195190
var deactivateViewModel =
196191
Builder<DeactivateAdminViewModel>.CreateNew().With(vm => vm.Confirm = true).Build();
197192

@@ -201,7 +196,7 @@ public void DeactivateOrDeleteAdmin_submit_returns_not_found_when_trying_to_deac
201196
// Then
202197
using (new AssertionScope())
203198
{
204-
A.CallTo(() => userDataService.DeactivateAdmin(adminUser.Id)).MustNotHaveHappened();
199+
A.CallTo(() => userService.DeactivateAdmin(adminUser.Id)).MustNotHaveHappened();
205200
result.Should().BeStatusCodeResult().WithStatusCode(410);
206201
}
207202
}

DigitalLearningSolutions.Web/Controllers/TrackingSystem/Centre/Administrator/AdministratorController.cs

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
{
33
using System.Linq;
44
using System.Net;
5-
using DigitalLearningSolutions.Data.DataServices;
6-
using DigitalLearningSolutions.Data.DataServices.UserDataService;
75
using DigitalLearningSolutions.Data.Enums;
86
using DigitalLearningSolutions.Data.Helpers;
97
using DigitalLearningSolutions.Data.Models;
@@ -30,25 +28,22 @@ public class AdministratorController : Controller
3028
{
3129
private const string AdminFilterCookieName = "AdminFilter";
3230
private readonly ICentreContractAdminUsageService centreContractAdminUsageService;
33-
private readonly ICourseCategoriesDataService courseCategoriesDataService;
31+
private readonly ICourseCategoriesService courseCategoriesService;
3432
private readonly ISearchSortFilterPaginateService searchSortFilterPaginateService;
35-
private readonly IUserDataService userDataService;
3633
private readonly IUserService userService;
3734
private readonly IEmailService emailService;
3835
private readonly IEmailGenerationService emailGenerationService;
3936

4037
public AdministratorController(
41-
IUserDataService userDataService,
42-
ICourseCategoriesDataService courseCategoriesDataService,
38+
ICourseCategoriesService courseCategoriesService,
4339
ICentreContractAdminUsageService centreContractAdminUsageService,
4440
IUserService userService,
4541
ISearchSortFilterPaginateService searchSortFilterPaginateService,
4642
IEmailService emailService,
4743
IEmailGenerationService emailGenerationService
4844
)
4945
{
50-
this.userDataService = userDataService;
51-
this.courseCategoriesDataService = courseCategoriesDataService;
46+
this.courseCategoriesService = courseCategoriesService;
5247
this.centreContractAdminUsageService = centreContractAdminUsageService;
5348
this.userService = userService;
5449
this.searchSortFilterPaginateService = searchSortFilterPaginateService;
@@ -75,9 +70,9 @@ public IActionResult Index(
7570
);
7671

7772
var centreId = User.GetCentreIdKnownNotNull();
78-
var adminsAtCentre = userDataService.GetAdminsByCentreId(centreId);
79-
var categories = courseCategoriesDataService.GetCategoriesForCentreAndCentrallyManagedCourses(centreId);
80-
var loggedInAdmin = userDataService.GetAdminById(User.GetAdminId()!.Value);
73+
var adminsAtCentre = userService.GetAdminsByCentreId(centreId);
74+
var categories = courseCategoriesService.GetCategoriesForCentreAndCentrallyManagedCourses(centreId);
75+
var loggedInAdmin = userService.GetAdminById(User.GetAdminId()!.Value);
8176

8277
var availableFilters =
8378
AdministratorsViewModelFilterOptions.GetAllAdministratorsFilterModels(categories);
@@ -111,10 +106,10 @@ public IActionResult Index(
111106
public IActionResult AllAdmins()
112107
{
113108
var centreId = User.GetCentreIdKnownNotNull();
114-
var loggedInAdmin = userDataService.GetAdminById(User.GetAdminId()!.Value);
109+
var loggedInAdmin = userService.GetAdminById(User.GetAdminId()!.Value);
115110

116-
var adminsAtCentre = userDataService.GetAdminsByCentreId(centreId);
117-
var categories = courseCategoriesDataService.GetCategoriesForCentreAndCentrallyManagedCourses(centreId);
111+
var adminsAtCentre = userService.GetAdminsByCentreId(centreId);
112+
var categories = courseCategoriesService.GetCategoriesForCentreAndCentrallyManagedCourses(centreId);
118113
var model = new AllAdminsViewModel(
119114
adminsAtCentre,
120115
categories,
@@ -129,9 +124,9 @@ public IActionResult AllAdmins()
129124
public IActionResult EditAdminRoles(int adminId, ReturnPageQuery returnPageQuery)
130125
{
131126
var centreId = User.GetCentreIdKnownNotNull();
132-
var adminUser = userDataService.GetAdminUserById(adminId);
127+
var adminUser = userService.GetAdminUserById(adminId);
133128

134-
var categories = courseCategoriesDataService.GetCategoriesForCentreAndCentrallyManagedCourses(centreId);
129+
var categories = courseCategoriesService.GetCategoriesForCentreAndCentrallyManagedCourses(centreId);
135130
categories = categories.Prepend(new Category { CategoryName = "All", CourseCategoryID = 0 });
136131
var numberOfAdmins = centreContractAdminUsageService.GetCentreAdministratorNumbers(centreId);
137132

@@ -150,7 +145,7 @@ public IActionResult EditAdminRoles(AdminRolesFormData model, int adminId)
150145
adminRoles.IsContentCreator || adminRoles.IsTrainer || adminRoles.IsCentreManager || adminRoles.IsContentManager))
151146
{
152147
var centreId = User.GetCentreIdKnownNotNull();
153-
var adminUser = userDataService.GetAdminUserById(adminId);
148+
var adminUser = userService.GetAdminUserById(adminId);
154149

155150
adminUser.IsCentreAdmin = adminRoles.IsCentreAdmin;
156151
adminUser.IsSupervisor = adminRoles.IsSupervisor;
@@ -162,7 +157,7 @@ public IActionResult EditAdminRoles(AdminRolesFormData model, int adminId)
162157
adminUser.IsContentManager = model.ContentManagementRole.IsContentManager;
163158

164159

165-
var categories = courseCategoriesDataService.GetCategoriesForCentreAndCentrallyManagedCourses(centreId);
160+
var categories = courseCategoriesService.GetCategoriesForCentreAndCentrallyManagedCourses(centreId);
166161
categories = categories.Prepend(new Category { CategoryName = "All", CourseCategoryID = 0 });
167162
var numberOfAdmins = centreContractAdminUsageService.GetCentreAdministratorNumbers(centreId);
168163

@@ -229,7 +224,7 @@ AdminRoles adminRoles
229224
[ServiceFilter(typeof(VerifyAdminUserCanAccessAdminUser))]
230225
public IActionResult UnlockAccount(int adminId)
231226
{
232-
userService.ResetFailedLoginCountByUserId(userDataService.GetUserIdByAdminId(adminId)!.Value);
227+
userService.ResetFailedLoginCountByUserId(userService.GetUserIdByAdminId(adminId)!.Value);
233228

234229
return RedirectToAction("Index");
235230
}
@@ -239,7 +234,7 @@ public IActionResult UnlockAccount(int adminId)
239234
[ServiceFilter(typeof(VerifyAdminUserCanAccessAdminUser))]
240235
public IActionResult DeactivateOrDeleteAdmin(int adminId, ReturnPageQuery returnPageQuery)
241236
{
242-
var admin = userDataService.GetAdminById(adminId);
237+
var admin = userService.GetAdminById(adminId);
243238

244239
if (!CurrentUserCanDeactivateAdmin(admin!.AdminAccount))
245240
{
@@ -255,7 +250,7 @@ public IActionResult DeactivateOrDeleteAdmin(int adminId, ReturnPageQuery return
255250
[ServiceFilter(typeof(VerifyAdminUserCanAccessAdminUser))]
256251
public IActionResult DeactivateOrDeleteAdmin(int adminId, DeactivateAdminViewModel model)
257252
{
258-
var admin = userDataService.GetAdminById(adminId);
253+
var admin = userService.GetAdminById(adminId);
259254

260255
if (!CurrentUserCanDeactivateAdmin(admin!.AdminAccount))
261256
{
@@ -285,7 +280,7 @@ int adminId
285280

286281
private bool CurrentUserCanDeactivateAdmin(AdminAccount adminToDeactivate)
287282
{
288-
var loggedInAdmin = userDataService.GetAdminById(User.GetAdminId()!.GetValueOrDefault());
283+
var loggedInAdmin = userService.GetAdminById(User.GetAdminId()!.GetValueOrDefault());
289284

290285
return UserPermissionsHelper.LoggedInAdminCanDeactivateUser(adminToDeactivate, loggedInAdmin!.AdminAccount);
291286
}

DigitalLearningSolutions.Web/Services/UserService.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@ void SetCentreEmail(
158158

159159
AdminUser? GetAdminUserById(int id);
160160
string GetUserDisplayName(int userId);
161+
IEnumerable<AdminEntity> GetAdminsByCentreId(int centreId);
162+
void DeactivateAdmin(int adminId);
161163

162164
}
163165

@@ -826,7 +828,7 @@ public int GetDelegateCountWithAnswerForPrompt(int centreId, int promptNumber)
826828
{
827829
return userDataService.GetDelegateCountWithAnswerForPrompt(centreId, promptNumber);
828830
}
829-
831+
830832
public List<AdminUser> GetAdminUsersByCentreId(int centreId)
831833
{
832834
return userDataService.GetAdminUsersByCentreId(centreId);
@@ -843,5 +845,14 @@ public string GetUserDisplayName(int userId)
843845
{
844846
return userDataService.GetUserDisplayName(userId);
845847
}
848+
public IEnumerable<AdminEntity> GetAdminsByCentreId(int centreId)
849+
{
850+
return userDataService.GetAdminsByCentreId(centreId);
851+
}
852+
853+
public void DeactivateAdmin(int adminId)
854+
{
855+
userDataService.DeactivateAdmin(adminId);
856+
}
846857
}
847858
}

0 commit comments

Comments
 (0)