From ce86170e5de494411dbd855a3316127f8f6ca0eb Mon Sep 17 00:00:00 2001 From: Alex Jackson Date: Fri, 6 May 2022 13:33:02 +0100 Subject: [PATCH 1/2] HEEDLS-871 Add category topic tags and fix incorrect behaviour --- .../Controllers/LearningContentController.cs | 3 ++ .../Helpers/DisplayStringHelper.cs | 5 +++ .../searchSortFilterAndPaginate/sort.ts | 1 + .../LearningContent/BrandCourseViewModel.cs | 3 ++ .../LearningContent/_BrandCourseCard.cshtml | 42 ++++++++++--------- 5 files changed, 35 insertions(+), 19 deletions(-) diff --git a/DigitalLearningSolutions.Web/Controllers/LearningContentController.cs b/DigitalLearningSolutions.Web/Controllers/LearningContentController.cs index 3a5446e653..2c32e2ee5f 100644 --- a/DigitalLearningSolutions.Web/Controllers/LearningContentController.cs +++ b/DigitalLearningSolutions.Web/Controllers/LearningContentController.cs @@ -6,6 +6,7 @@ using DigitalLearningSolutions.Data.Models.SearchSortFilterPaginate; using DigitalLearningSolutions.Data.Services; using DigitalLearningSolutions.Web.Attributes; + using DigitalLearningSolutions.Web.Helpers; using DigitalLearningSolutions.Web.Models.Enums; using DigitalLearningSolutions.Web.ViewModels.LearningContent; using Microsoft.AspNetCore.Mvc; @@ -85,6 +86,8 @@ public IActionResult Index( var model = new LearningContentViewModel(result, availableFilters, brand, tutorials); + Response.UpdateFilterCookie(BrandCoursesFilterCookieName, result.FilterString); + return View(model); } diff --git a/DigitalLearningSolutions.Web/Helpers/DisplayStringHelper.cs b/DigitalLearningSolutions.Web/Helpers/DisplayStringHelper.cs index af0a35a195..3e99c1158f 100644 --- a/DigitalLearningSolutions.Web/Helpers/DisplayStringHelper.cs +++ b/DigitalLearningSolutions.Web/Helpers/DisplayStringHelper.cs @@ -83,5 +83,10 @@ public static string GetTimeStringFromMinutes(int minutes) { return minutes < 60 ? $"{minutes}m" : $"{minutes / 60}h {minutes % 60}m"; } + + public static string GetTimeStringForScreenReaderFromMinutes(int minutes) + { + return minutes < 60 ? $"{minutes} minutes" : $"{minutes / 60} hours {minutes % 60} minutes"; + } } } diff --git a/DigitalLearningSolutions.Web/Scripts/searchSortFilterAndPaginate/sort.ts b/DigitalLearningSolutions.Web/Scripts/searchSortFilterAndPaginate/sort.ts index 547e2fa380..43960278df 100644 --- a/DigitalLearningSolutions.Web/Scripts/searchSortFilterAndPaginate/sort.ts +++ b/DigitalLearningSolutions.Web/Scripts/searchSortFilterAndPaginate/sort.ts @@ -83,6 +83,7 @@ export function getSortValue( case 'When': return parseDateAndTime(getElementText(searchableElement, 'when')); case 'LearningTime': + case 'TotalMins': return parseNonNegativeIntOrNotApplicable(getElementText(searchableElement, 'learning-time')); case 'AssessmentScore': return parseNonNegativeIntOrNotApplicable(getElementText(searchableElement, 'assessment-score')); diff --git a/DigitalLearningSolutions.Web/ViewModels/LearningContent/BrandCourseViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/LearningContent/BrandCourseViewModel.cs index b040d6f785..ad0b1c1898 100644 --- a/DigitalLearningSolutions.Web/ViewModels/LearningContent/BrandCourseViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/LearningContent/BrandCourseViewModel.cs @@ -15,6 +15,8 @@ public BrandCourseViewModel(ApplicationWithSections application) ApplicationName = application.ApplicationName; PopularityRating = application.PopularityRating; DisplayTime = DisplayStringHelper.GetTimeStringFromMinutes(application.TotalMins); + TimeForScreenReader = + DisplayStringHelper.GetTimeStringForScreenReaderFromMinutes(application.TotalMins); Time = application.TotalMins; CategoryName = application.CategoryName; CourseTopic = application.CourseTopic; @@ -23,6 +25,7 @@ public BrandCourseViewModel(ApplicationWithSections application) } public string DisplayTime { get; set; } + public string TimeForScreenReader { get; set; } public int Time { get; set; } public double PopularityRating { get; set; } public IEnumerable Sections { get; set; } diff --git a/DigitalLearningSolutions.Web/Views/LearningContent/_BrandCourseCard.cshtml b/DigitalLearningSolutions.Web/Views/LearningContent/_BrandCourseCard.cshtml index b8213ffc06..6be34c700a 100644 --- a/DigitalLearningSolutions.Web/Views/LearningContent/_BrandCourseCard.cshtml +++ b/DigitalLearningSolutions.Web/Views/LearningContent/_BrandCourseCard.cshtml @@ -12,8 +12,17 @@
+
+ @Model.CategoryName +
+ +
+ @Model.CourseTopic +
+
- @Model.DisplayTime + + Length @Model.TimeForScreenReader
@@ -22,29 +31,24 @@
- - + Created @Model.CreatedDate.ToString(DateHelper.StandardDateFormat) -
-
-
Section
-
Tutorials
-
+ + + + + @foreach (var section in Model.Sections) { -
-
+
+ + + } - +
SectionTutorials

Section

@(section.SectionName)

- -
+

Tutorials

@if (section.Tutorials.Any()) { @foreach (var tutorial in section.Tutorials) { @@ -53,10 +57,10 @@ } else {

No tutorials

} - - +
From 9892172d50dfcb5aeda7e15376118482e1cfcf78 Mon Sep 17 00:00:00 2001 From: Alex Jackson Date: Tue, 10 May 2022 12:02:39 +0100 Subject: [PATCH 2/2] HEEDLS-871 Add unit tests for GetTimeStringForScreenReaderFromMinutes --- .../Helpers/DisplayStringHelperTests.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/DigitalLearningSolutions.Web.Tests/Helpers/DisplayStringHelperTests.cs b/DigitalLearningSolutions.Web.Tests/Helpers/DisplayStringHelperTests.cs index 1d251dd669..05487a130c 100644 --- a/DigitalLearningSolutions.Web.Tests/Helpers/DisplayStringHelperTests.cs +++ b/DigitalLearningSolutions.Web.Tests/Helpers/DisplayStringHelperTests.cs @@ -310,5 +310,20 @@ public void GetTimeStringFromMinutes_returns_expected_result(int minutes, string // Then result.Should().Be(expectedResult); } + + [Test] + [TestCase(0, "0 minutes")] + [TestCase(59, "59 minutes")] + [TestCase(60, "1 hours 0 minutes")] + [TestCase(89, "1 hours 29 minutes")] + [TestCase(2332, "38 hours 52 minutes")] + public void GetTimeStringForScreenReaderFromMinutes_returns_expected_result(int minutes, string expectedResult) + { + // When + var result = DisplayStringHelper.GetTimeStringForScreenReaderFromMinutes(minutes); + + // Then + result.Should().Be(expectedResult); + } } }