Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
namespace DigitalLearningSolutions.Data.Tests.Services
namespace DigitalLearningSolutions.Data.Tests.DataServices
{
using System;
using System.Linq;
using System.Transactions;
using DigitalLearningSolutions.Data.DataServices;
using DigitalLearningSolutions.Data.Mappers;
using DigitalLearningSolutions.Data.Models.Courses;
using DigitalLearningSolutions.Data.Services;
using DigitalLearningSolutions.Data.Tests.TestHelpers;
using FakeItEasy;
using FluentAssertions;
using Microsoft.Extensions.Logging;
using NUnit.Framework;

public class CourseServiceTests
public class CourseDataServiceTests
{
private CourseService courseService;
private CourseDataDataService courseDataService;

[OneTimeSetUp]
public void OneTimeSetUp()
Expand All @@ -26,16 +26,16 @@ public void OneTimeSetUp()
public void Setup()
{
var connection = ServiceTestHelper.GetDatabaseConnection();
var logger = A.Fake<ILogger<CourseService>>();
courseService = new CourseService(connection, logger);
var logger = A.Fake<ILogger<CourseDataDataService>>();
courseDataService = new CourseDataDataService(connection, logger);
}

[Test]
public void Get_current_courses_should_return_courses_for_candidate()
{
// When
const int candidateId = 1;
var result = courseService.GetCurrentCourses(candidateId).ToList();
var result = courseDataService.GetCurrentCourses(candidateId).ToList();

// Then
var expectedFirstCourse = new CurrentCourse
Expand Down Expand Up @@ -66,7 +66,7 @@ public void Get_completed_courses_should_return_courses_for_candidate()
{
// When
const int candidateId = 1;
var result = courseService.GetCompletedCourses(candidateId).ToList();
var result = courseDataService.GetCompletedCourses(candidateId).ToList();

// Then
var expectedFirstCourse = new CompletedCourse
Expand Down Expand Up @@ -96,7 +96,7 @@ public void Get_available_courses_should_return_courses_for_candidate()
// When
const int candidateId = 254480;
const int centreId = 101;
var result = courseService.GetAvailableCourses(candidateId, centreId).ToList();
var result = courseDataService.GetAvailableCourses(candidateId, centreId).ToList();

// Then
var expectedFirstCourse = new AvailableCourse
Expand Down Expand Up @@ -125,7 +125,7 @@ public void Get_available_courses_should_validate_category(
// When
const int candidateId = 254480;
const int centreId = 101;
var result = courseService.GetAvailableCourses(candidateId, centreId).ToList();
var result = courseDataService.GetAvailableCourses(candidateId, centreId).ToList();

// Then
result[index].Category.Should().Be(expectedValidatedCategory);
Expand All @@ -141,7 +141,7 @@ public void Get_available_courses_should_validate_topic(
// When
const int candidateId = 254480;
const int centreId = 101;
var result = courseService.GetAvailableCourses(candidateId, centreId).ToList();
var result = courseDataService.GetAvailableCourses(candidateId, centreId).ToList();

// Then
result[index].Topic.Should().Be(expectedValidatedTopic);
Expand All @@ -152,7 +152,7 @@ public void Get_available_courses_should_return_no_courses_if_no_centre()
{
// When
const int candidateId = 1;
var result = courseService.GetAvailableCourses(candidateId, null).ToList();
var result = courseDataService.GetAvailableCourses(candidateId, null).ToList();

// Then
result.Should().BeEmpty();
Expand All @@ -169,8 +169,8 @@ public void Set_complete_by_date_should_update_db()
using (new TransactionScope())
{
// When
courseService.SetCompleteByDate(progressId, candidateId, newCompleteByDate);
var modifiedCourse = courseService.GetCurrentCourses(candidateId).ToList()
courseDataService.SetCompleteByDate(progressId, candidateId, newCompleteByDate);
var modifiedCourse = courseDataService.GetCurrentCourses(candidateId).ToList()
.First(c => c.ProgressID == progressId);

// Then
Expand All @@ -188,8 +188,8 @@ public void Remove_current_course_should_prevent_a_course_from_being_returned()
const int candidateId = 1;

// When
courseService.RemoveCurrentCourse(progressId, candidateId);
var courseReturned = courseService.GetCurrentCourses(candidateId).ToList()
courseDataService.RemoveCurrentCourse(progressId, candidateId);
var courseReturned = courseDataService.GetCurrentCourses(candidateId).ToList()
.Any(c => c.ProgressID == progressId);

// Then
Expand All @@ -201,7 +201,7 @@ public void Remove_current_course_should_prevent_a_course_from_being_returned()
public void GetNumberOfActiveCoursesAtCentre_returns_expected_count()
{
// When
var count = courseService.GetNumberOfActiveCoursesAtCentreForCategory(2, 0);
var count = courseDataService.GetNumberOfActiveCoursesAtCentreForCategory(2, 0);

// Then
count.Should().Be(38);
Expand All @@ -211,7 +211,7 @@ public void GetNumberOfActiveCoursesAtCentre_returns_expected_count()
public void GetNumberOfActiveCoursesAtCentre_with_filtered_category_returns_expected_count()
{
// When
var count = courseService.GetNumberOfActiveCoursesAtCentreForCategory(2, 2);
var count = courseDataService.GetNumberOfActiveCoursesAtCentreForCategory(2, 2);

// Then
count.Should().Be(3);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace DigitalLearningSolutions.Data.Services
namespace DigitalLearningSolutions.Data.DataServices
{
using System;
using System.Collections.Generic;
Expand All @@ -7,7 +7,7 @@
using DigitalLearningSolutions.Data.Models.Courses;
using Microsoft.Extensions.Logging;

public interface ICourseService
public interface ICourseDataService
{
IEnumerable<CurrentCourse> GetCurrentCourses(int candidateId);
IEnumerable<CompletedCourse> GetCompletedCourses(int candidateId);
Expand All @@ -18,31 +18,40 @@ public interface ICourseService
int GetNumberOfActiveCoursesAtCentreForCategory(int centreId, int categoryId);
}

public class CourseService : ICourseService
public class CourseDataDataService : ICourseDataService
{
private readonly IDbConnection connection;
private readonly ILogger<CourseService> logger;
private readonly ILogger<CourseDataDataService> logger;

public CourseService(IDbConnection connection, ILogger<CourseService> logger)
public CourseDataDataService(IDbConnection connection, ILogger<CourseDataDataService> logger)
{
this.connection = connection;
this.logger = logger;
}

public IEnumerable<CurrentCourse> GetCurrentCourses(int candidateId)
{
return connection.Query<CurrentCourse>("GetCurrentCoursesForCandidate_V2", new { candidateId }, commandType: CommandType.StoredProcedure);
return connection.Query<CurrentCourse>(
"GetCurrentCoursesForCandidate_V2",
new { candidateId },
commandType: CommandType.StoredProcedure
);
}

public IEnumerable<CompletedCourse> GetCompletedCourses(int candidateId)
{
return connection.Query<CompletedCourse>("GetCompletedCoursesForCandidate", new { candidateId }, commandType: CommandType.StoredProcedure);
return connection.Query<CompletedCourse>(
"GetCompletedCoursesForCandidate",
new { candidateId },
commandType: CommandType.StoredProcedure
);
}

public IEnumerable<AvailableCourse> GetAvailableCourses(int candidateId, int? centreId)
{
return connection.Query<AvailableCourse>(
@"GetActiveAvailableCustomisationsForCentreFiltered_V5", new { candidateId, centreId },
@"GetActiveAvailableCustomisationsForCentreFiltered_V5",
new { candidateId, centreId },
commandType: CommandType.StoredProcedure
);
}
Expand All @@ -55,7 +64,7 @@ public void SetCompleteByDate(int progressId, int candidateId, DateTime? complet
WHERE ProgressID = @progressId
AND CandidateID = @candidateId",
new { date = completeByDate, progressId, candidateId }
);
);

if (numberOfAffectedRows < 1)
{
Expand All @@ -69,13 +78,13 @@ public void SetCompleteByDate(int progressId, int candidateId, DateTime? complet
public void RemoveCurrentCourse(int progressId, int candidateId)
{
var numberOfAffectedRows = connection.Execute(
@"UPDATE Progress
@"UPDATE Progress
SET RemovedDate = getUTCDate(),
RemovalMethodID = 1
WHERE ProgressID = @progressId
AND CandidateID = @candidateId
",
new { progressId, candidateId }
new { progressId, candidateId }
);

if (numberOfAffectedRows < 1)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public void Available_action_should_return_view_result()
AvailableCourseHelper.CreateDefaultAvailableCourse(),
AvailableCourseHelper.CreateDefaultAvailableCourse()
};
A.CallTo(() => courseService.GetAvailableCourses(CandidateId, CentreId)).Returns(availableCourses);
A.CallTo(() => courseDataService.GetAvailableCourses(CandidateId, CentreId)).Returns(availableCourses);

// When
var result = controller.Available();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public void Completed_action_should_return_view_result()
CompletedCourseHelper.CreateDefaultCompletedCourse()
};
var bannerText = "bannerText";
A.CallTo(() => courseService.GetCompletedCourses(CandidateId)).Returns(completedCourses);
A.CallTo(() => courseDataService.GetCompletedCourses(CandidateId)).Returns(completedCourses);
A.CallTo(() => centresDataService.GetBannerText(CentreId)).Returns(bannerText);

// When
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public void Current_action_should_return_view_result()
};

var bannerText = "bannerText";
A.CallTo(() => courseService.GetCurrentCourses(CandidateId)).Returns(currentCourses);
A.CallTo(() => courseDataService.GetCurrentCourses(CandidateId)).Returns(currentCourses);
A.CallTo(() => selfAssessmentService.GetSelfAssessmentsForCandidate(CandidateId)).Returns(selfAssessments);
A.CallTo(() => centresDataService.GetBannerText(CentreId)).Returns(bannerText);

Expand Down Expand Up @@ -57,7 +57,7 @@ public void Trying_to_edit_complete_by_date_when_not_self_enrolled_should_return
{
currentCourse
};
A.CallTo(() => courseService.GetCurrentCourses(CandidateId)).Returns(currentCourses);
A.CallTo(() => courseDataService.GetCurrentCourses(CandidateId)).Returns(currentCourses);

// When
var result = controller.SetCurrentCourseCompleteByDate(currentCourse.Id, null, null, null);
Expand All @@ -78,7 +78,7 @@ public void Trying_to_edit_complete_by_date_for_non_existent_course_should_retur
{
CurrentCourseHelper.CreateDefaultCurrentCourse(2)
};
A.CallTo(() => courseService.GetCurrentCourses(CandidateId)).Returns(currentCourses);
A.CallTo(() => courseDataService.GetCurrentCourses(CandidateId)).Returns(currentCourses);

// When
var result = controller.SetCurrentCourseCompleteByDate(3, null, null, null);
Expand All @@ -105,7 +105,7 @@ public void Setting_a_valid_complete_by_date_should_call_the_course_service()
controller.SetCurrentCourseCompleteByDate(1, newDay, newMonth, newYear, 1);

// Then
A.CallTo(() => courseService.SetCompleteByDate(progressId, CandidateId, newDate)).MustHaveHappened();
A.CallTo(() => courseDataService.SetCompleteByDate(progressId, CandidateId, newDate)).MustHaveHappened();
}

[Test]
Expand All @@ -118,7 +118,7 @@ public void Setting_an_empty_complete_by_date_should_call_the_course_service_wit
controller.SetCurrentCourseCompleteByDate(1, 0, 0, 0, 1);

// Then
A.CallTo(() => courseService.SetCompleteByDate(progressId, CandidateId, null)).MustHaveHappened();
A.CallTo(() => courseDataService.SetCompleteByDate(progressId, CandidateId, null)).MustHaveHappened();
}

[Test]
Expand All @@ -138,7 +138,7 @@ public void Setting_an_invalid_complete_by_date_should_not_call_the_course_servi
controller.SetCurrentCourseCompleteByDate(1, 31, 2, 2020, 1);

// Then
A.CallTo(() => courseService.SetCompleteByDate(1, CandidateId, A<DateTime>._)).MustNotHaveHappened();
A.CallTo(() => courseDataService.SetCompleteByDate(1, CandidateId, A<DateTime>._)).MustNotHaveHappened();
}

[Test]
Expand Down Expand Up @@ -168,7 +168,7 @@ public void Removing_a_current_course_should_call_the_course_service()
controller.RemoveCurrentCourse(1);

// Then
A.CallTo(() => courseService.RemoveCurrentCourse(1, CandidateId)).MustHaveHappened();
A.CallTo(() => courseDataService.RemoveCurrentCourse(1, CandidateId)).MustHaveHappened();
}

[Test]
Expand All @@ -181,7 +181,7 @@ public void Remove_confirmation_for_a_current_course_should_show_confirmation()
{
currentCourse
};
A.CallTo(() => courseService.GetCurrentCourses(CandidateId)).Returns(currentCourses);
A.CallTo(() => courseDataService.GetCurrentCourses(CandidateId)).Returns(currentCourses);

// When
var result = controller.RemoveCurrentCourseConfirmation(customisationId);
Expand All @@ -200,7 +200,7 @@ public void Removing_non_existent_course_should_return_404()
{
CurrentCourseHelper.CreateDefaultCurrentCourse(2)
};
A.CallTo(() => courseService.GetCurrentCourses(CandidateId)).Returns(currentCourses);
A.CallTo(() => courseDataService.GetCurrentCourses(CandidateId)).Returns(currentCourses);

// When
var result = controller.RemoveCurrentCourseConfirmation(3);
Expand All @@ -222,7 +222,7 @@ public void Requesting_a_course_unlock_should_call_the_unlock_service()
{
CurrentCourseHelper.CreateDefaultCurrentCourse(progressId: progressId, locked: true)
};
A.CallTo(() => courseService.GetCurrentCourses(CandidateId)).Returns(currentCourses);
A.CallTo(() => courseDataService.GetCurrentCourses(CandidateId)).Returns(currentCourses);

// When
controller.RequestUnlock(progressId);
Expand All @@ -239,7 +239,7 @@ public void Requesting_unlock_for_non_existent_course_should_return_404()
{
CurrentCourseHelper.CreateDefaultCurrentCourse(progressId: 2, locked: true)
};
A.CallTo(() => courseService.GetCurrentCourses(CandidateId)).Returns(currentCourses);
A.CallTo(() => courseDataService.GetCurrentCourses(CandidateId)).Returns(currentCourses);

// When
var result = controller.RequestUnlock(3);
Expand All @@ -261,7 +261,7 @@ public void Requesting_unlock_for_unlocked_course_should_return_404()
{
CurrentCourseHelper.CreateDefaultCurrentCourse(progressId: progressId)
};
A.CallTo(() => courseService.GetCurrentCourses(CandidateId)).Returns(currentCourses);
A.CallTo(() => courseDataService.GetCurrentCourses(CandidateId)).Returns(currentCourses);

// When
var result = controller.RequestUnlock(progressId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public partial class LearningPortalControllerTests
{
private LearningPortalController controller = null!;
private ICentresDataService centresDataService = null!;
private ICourseService courseService = null!;
private ICourseDataService courseDataService = null!;
private ISelfAssessmentService selfAssessmentService = null!;
private INotificationService notificationService = null!;
private IConfiguration config = null!;
Expand All @@ -30,7 +30,7 @@ public partial class LearningPortalControllerTests
public void SetUp()
{
centresDataService = A.Fake<ICentresDataService>();
courseService = A.Fake<ICourseService>();
courseDataService = A.Fake<ICourseDataService>();
selfAssessmentService = A.Fake<ISelfAssessmentService>();
notificationService = A.Fake<INotificationService>();
var logger = A.Fake<ILogger<LearningPortalController>>();
Expand All @@ -46,7 +46,7 @@ public void SetUp()
}, "mock"));
controller = new LearningPortalController(
centresDataService,
courseService,
courseDataService,
selfAssessmentService,
notificationService,
logger,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public IActionResult Available(
{
sortBy ??= CourseSortByOptions.Name.PropertyName;

var availableCourses = courseService.GetAvailableCourses(
var availableCourses = courseDataService.GetAvailableCourses(
User.GetCandidateIdKnownNotNull(),
User.GetCentreId()
);
Expand All @@ -35,7 +35,7 @@ public IActionResult Available(

public IActionResult AllAvailableItems()
{
var availableCourses = courseService.GetAvailableCourses(
var availableCourses = courseDataService.GetAvailableCourses(
User.GetCandidateIdKnownNotNull(),
User.GetCentreId()
);
Expand All @@ -45,7 +45,7 @@ public IActionResult AllAvailableItems()

public IActionResult EnrolOnSelfAssessment(int selfAssessmentId)
{
courseService.EnrolOnSelfAssessment(selfAssessmentId, User.GetCandidateIdKnownNotNull());
courseDataService.EnrolOnSelfAssessment(selfAssessmentId, User.GetCandidateIdKnownNotNull());
return RedirectToAction("SelfAssessment", new { selfAssessmentId });
}
}
Expand Down
Loading