diff --git a/DigitalLearningSolutions.Web.Tests/ControllerHelpers/ControllerContextHelper.cs b/DigitalLearningSolutions.Web.Tests/ControllerHelpers/ControllerContextHelper.cs index 01e452bdc8..9a4342ce34 100644 --- a/DigitalLearningSolutions.Web.Tests/ControllerHelpers/ControllerContextHelper.cs +++ b/DigitalLearningSolutions.Web.Tests/ControllerHelpers/ControllerContextHelper.cs @@ -17,6 +17,8 @@ public static class ControllerContextHelper public const int AdminId = 7; public const int DelegateId = 2; public const string EmailAddress = "email"; + public const bool IsCentreAdmin = false; + public const bool IsFrameworkDeveloper = false; public static T WithDefaultContext(this T controller) where T : Controller { @@ -44,7 +46,9 @@ public static T WithMockUser( int centreId = CentreId, int? adminId = AdminId, int? delegateId = DelegateId, - string? emailAddress = EmailAddress + string? emailAddress = EmailAddress, + bool isCentreAdmin = IsCentreAdmin, + bool isFrameworkDeveloper = IsFrameworkDeveloper ) where T : Controller { var authenticationType = isAuthenticated ? "mock" : string.Empty; @@ -58,6 +62,8 @@ public static T WithMockUser( new Claim(CustomClaimTypes.UserAdminId, adminId?.ToString() ?? "False"), new Claim(CustomClaimTypes.LearnCandidateId, delegateId?.ToString() ?? "False"), new Claim(ClaimTypes.Email, emailAddress ?? string.Empty), + new Claim(CustomClaimTypes.UserCentreAdmin, isCentreAdmin.ToString()), + new Claim(CustomClaimTypes.IsFrameworkDeveloper, isFrameworkDeveloper.ToString()) }, authenticationType ) diff --git a/DigitalLearningSolutions.Web.Tests/Controllers/Support/SupportControllerTests.cs b/DigitalLearningSolutions.Web.Tests/Controllers/Support/SupportControllerTests.cs index 236507cb31..a67c102062 100644 --- a/DigitalLearningSolutions.Web.Tests/Controllers/Support/SupportControllerTests.cs +++ b/DigitalLearningSolutions.Web.Tests/Controllers/Support/SupportControllerTests.cs @@ -1,25 +1,22 @@ namespace DigitalLearningSolutions.Web.Tests.Controllers.Support { using DigitalLearningSolutions.Web.Controllers.Support; + using DigitalLearningSolutions.Web.Tests.ControllerHelpers; using FluentAssertions.AspNetCore.Mvc; using NUnit.Framework; public class SupportControllerTests { - private SupportController controller = null!; - - [SetUp] - public void SetUp() + [Test] + public void Frameworks_Support_page_should_be_shown_for_valid_claims() { - controller = new SupportController(); - } + // Given + var controller = new SupportController() + .WithDefaultContext() + .WithMockUser(true, isCentreAdmin: false, isFrameworkDeveloper: true); - [TestCase("TrackingSystem")] - [TestCase("Frameworks")] - public void Support_page_should_be_shown_for_valid_application_names(string applicationName) - { // When - var result = controller.Index(applicationName); + var result = controller.Index("Frameworks"); // Then result.Should().BeViewResult().WithViewName("Support"); @@ -28,11 +25,46 @@ public void Support_page_should_be_shown_for_valid_application_names(string appl [Test] public void Invalid_application_name_should_redirect_to_404_page() { + // Given + var controller = new SupportController() + .WithDefaultContext() + .WithMockUser(true, isCentreAdmin: true, isFrameworkDeveloper: true); + // When var result = controller.Index("Main"); // Then result.Should().BeNotFoundResult(); } + + [Test] + public void Home_page_should_be_shown_when_accessing_tracking_system_support_without_appropriate_claims() + { + // Given + var controller = new SupportController() + .WithDefaultContext() + .WithMockUser(true, isCentreAdmin: false, isFrameworkDeveloper: true); + + // When + var result = controller.Index("TrackingSystem"); + + // Then + result.Should().BeRedirectToActionResult().WithControllerName("Home").WithActionName("Index"); + } + + [Test] + public void Home_page_should_be_shown_when_accessing_frameworks_support_without_appropriate_claims() + { + // Given + var controller = new SupportController() + .WithDefaultContext() + .WithMockUser(true, isCentreAdmin: true, isFrameworkDeveloper: false); + + // When + var result = controller.Index("Frameworks"); + + // Then + result.Should().BeRedirectToActionResult().WithControllerName("Home").WithActionName("Index"); + } } } diff --git a/DigitalLearningSolutions.Web/Controllers/Support/SupportController.cs b/DigitalLearningSolutions.Web/Controllers/Support/SupportController.cs index abef7e18ca..098e8e9d49 100644 --- a/DigitalLearningSolutions.Web/Controllers/Support/SupportController.cs +++ b/DigitalLearningSolutions.Web/Controllers/Support/SupportController.cs @@ -12,14 +12,20 @@ public class SupportController : Controller [Authorize(Policy = CustomPolicies.UserCentreAdminOrFrameworksAdmin)] public IActionResult Index(ApplicationType application) { - if (ApplicationType.TrackingSystem.Equals(application) || - ApplicationType.Frameworks.Equals(application)) + if (!ApplicationType.TrackingSystem.Equals(application) && + !ApplicationType.Frameworks.Equals(application)) + { + return NotFound(); + } + + if (ApplicationType.TrackingSystem.Equals(application) && User.HasCentreAdminPermissions() || + ApplicationType.Frameworks.Equals(application) && User.HasFrameworksAdminPermissions()) { var model = new SupportViewModel(application, SupportPage.Support); return View("Support", model); } - return NotFound(); + return RedirectToAction("Index", "Home"); } } } diff --git a/DigitalLearningSolutions.Web/Styles/support/support.scss b/DigitalLearningSolutions.Web/Styles/support/support.scss index 702ec2ae08..051122306c 100644 --- a/DigitalLearningSolutions.Web/Styles/support/support.scss +++ b/DigitalLearningSolutions.Web/Styles/support/support.scss @@ -1,5 +1,5 @@ @import "~nhsuk-frontend/packages/core/all"; ol>li { - @include nhsuk-responsive-margin(5, "bottom"); + margin-bottom: nhsuk-spacing(6) }