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,27 +1,26 @@
namespace DigitalLearningSolutions.Data.Tests.Services
namespace DigitalLearningSolutions.Data.Tests.DataServices
{
using DigitalLearningSolutions.Data.Services;
using DigitalLearningSolutions.Data.Tests.Helpers;
using DigitalLearningSolutions.Data.DataServices;
using DigitalLearningSolutions.Data.Tests.TestHelpers;
using NUnit.Framework;
using FluentAssertions;
using NUnit.Framework;

public class ConfigServiceTests
public class ConfigDataServiceTests
{
private ConfigService configService;
private ConfigDataService configDataService = null!;

[SetUp]
public void Setup()
{
var connection = ServiceTestHelper.GetDatabaseConnection();
configService = new ConfigService(connection);
configDataService = new ConfigDataService(connection);
}

[Test]
public void Get_config_value_returns_the_expected_value()
{
// When
var result = configService.GetConfigValue(ConfigService.MailFromAddress);
var result = configDataService.GetConfigValue(ConfigDataService.MailFromAddress);

// Then
result.Should().Be("noreply@itskills.nhs.uk");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
using System.Threading.Tasks;
using DigitalLearningSolutions.Data.DataServices;
using DigitalLearningSolutions.Data.DataServices.SelfAssessmentDataService;
using DigitalLearningSolutions.Data.Helpers;
using DigitalLearningSolutions.Data.Models.External.LearningHubApiClient;
using DigitalLearningSolutions.Data.Models.LearningResources;
using DigitalLearningSolutions.Data.Services;
Expand All @@ -16,6 +15,7 @@
using FluentAssertions.Execution;
using Microsoft.Extensions.Configuration;
using NUnit.Framework;
using ConfigurationExtensions = DigitalLearningSolutions.Data.Extensions.ConfigurationExtensions;

public class ActionPlanServiceTests
{
Expand Down Expand Up @@ -371,7 +371,7 @@ public void RemoveActionPlanResource_removes_item()
public void VerifyDelegateCanAccessActionPlanResource_returns_null_if_signposting_is_deactivated()
{
// Given
A.CallTo(() => config[ConfigHelper.UseSignposting]).Returns("false");
A.CallTo(() => config[ConfigurationExtensions.UseSignposting]).Returns("false");

// When
var result = actionPlanService.VerifyDelegateCanAccessActionPlanResource(
Expand All @@ -392,7 +392,7 @@ public void
VerifyDelegateCanAccessActionPlanResource_returns_null_if_LearningLogItem_with_given_id_does_not_exist()
{
// Given
A.CallTo(() => config[ConfigHelper.UseSignposting]).Returns("true");
A.CallTo(() => config[ConfigurationExtensions.UseSignposting]).Returns("true");
A.CallTo(() => learningLogItemsDataService.GetLearningLogItem(GenericLearningLogItemId)).Returns(null);

// When
Expand All @@ -414,7 +414,7 @@ public void
public void VerifyDelegateCanAccessActionPlanResource_returns_null_if_LearningLogItem_is_removed()
{
// Given
A.CallTo(() => config[ConfigHelper.UseSignposting]).Returns("true");
A.CallTo(() => config[ConfigurationExtensions.UseSignposting]).Returns("true");
var learningLogItem = Builder<LearningLogItem>.CreateNew()
.With(i => i.LearningHubResourceReferenceId = GenericLearningHubResourceReferenceId)
.And(i => i.ArchivedDate = DateTime.UtcNow)
Expand All @@ -441,7 +441,7 @@ public void VerifyDelegateCanAccessActionPlanResource_returns_null_if_LearningLo
public void VerifyDelegateCanAccessActionPlanResource_returns_null_if_LearningLogItem_has_no_linked_resource()
{
// Given
A.CallTo(() => config[ConfigHelper.UseSignposting]).Returns("true");
A.CallTo(() => config[ConfigurationExtensions.UseSignposting]).Returns("true");
var learningLogItem = Builder<LearningLogItem>.CreateNew()
.With(i => i.LearningHubResourceReferenceId = null)
.And(i => i.ArchivedDate = null)
Expand Down Expand Up @@ -469,7 +469,7 @@ public void
VerifyDelegateCanAccessActionPlanResource_returns_false_if_LearningLogItem_is_for_different_delegate()
{
// Given
A.CallTo(() => config[ConfigHelper.UseSignposting]).Returns("true");
A.CallTo(() => config[ConfigurationExtensions.UseSignposting]).Returns("true");
var learningLogItem = Builder<LearningLogItem>.CreateNew()
.With(i => i.LearningHubResourceReferenceId = GenericLearningHubResourceReferenceId)
.And(i => i.ArchivedDate = null)
Expand All @@ -496,7 +496,7 @@ public void
public void VerifyDelegateCanAccessActionPlanResource_returns_true_if_all_conditions_met()
{
// Given
A.CallTo(() => config[ConfigHelper.UseSignposting]).Returns("true");
A.CallTo(() => config[ConfigurationExtensions.UseSignposting]).Returns("true");
var learningLogItem = Builder<LearningLogItem>.CreateNew()
.With(i => i.LearningHubResourceReferenceId = GenericLearningHubResourceReferenceId)
.And(i => i.ArchivedDate = null)
Expand Down
40 changes: 20 additions & 20 deletions DigitalLearningSolutions.Data.Tests/Services/EmailServiceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,39 +16,39 @@ namespace DigitalLearningSolutions.Data.Tests.Services

public class EmailServiceTests
{
private IConfigService configService;
private IEmailDataService emailDataService;
private EmailService emailService;
private ISmtpClient smtpClient;
private IConfigDataService configDataService = null!;
private IEmailDataService emailDataService = null!;
private EmailService emailService = null!;
private ISmtpClient smtpClient = null!;

[SetUp]
public void Setup()
{
emailDataService = A.Fake<IEmailDataService>();
configService = A.Fake<IConfigService>();
configDataService = A.Fake<IConfigDataService>();
var smtpClientFactory = A.Fake<ISmtpClientFactory>();
smtpClient = A.Fake<ISmtpClient>();
A.CallTo(() => smtpClientFactory.GetSmtpClient()).Returns(smtpClient);

A.CallTo(() => configService.GetConfigValue(ConfigService.MailPort)).Returns("25");
A.CallTo(() => configService.GetConfigValue(ConfigService.MailUsername)).Returns("username");
A.CallTo(() => configService.GetConfigValue(ConfigService.MailPassword)).Returns("password");
A.CallTo(() => configService.GetConfigValue(ConfigService.MailServer)).Returns("smtp.example.com");
A.CallTo(() => configService.GetConfigValue(ConfigService.MailFromAddress)).Returns("test@example.com");
A.CallTo(() => configDataService.GetConfigValue(ConfigDataService.MailPort)).Returns("25");
A.CallTo(() => configDataService.GetConfigValue(ConfigDataService.MailUsername)).Returns("username");
A.CallTo(() => configDataService.GetConfigValue(ConfigDataService.MailPassword)).Returns("password");
A.CallTo(() => configDataService.GetConfigValue(ConfigDataService.MailServer)).Returns("smtp.example.com");
A.CallTo(() => configDataService.GetConfigValue(ConfigDataService.MailFromAddress)).Returns("test@example.com");

var logger = A.Fake<ILogger<EmailService>>();
emailService = new EmailService(emailDataService, configService, smtpClientFactory, logger);
emailService = new EmailService(emailDataService, configDataService, smtpClientFactory, logger);
}

[TestCase(ConfigService.MailPort)]
[TestCase(ConfigService.MailUsername)]
[TestCase(ConfigService.MailPassword)]
[TestCase(ConfigService.MailServer)]
[TestCase(ConfigService.MailFromAddress)]
[TestCase(ConfigDataService.MailPort)]
[TestCase(ConfigDataService.MailUsername)]
[TestCase(ConfigDataService.MailPassword)]
[TestCase(ConfigDataService.MailServer)]
[TestCase(ConfigDataService.MailFromAddress)]
public void Trying_to_send_mail_with_null_config_values_should_throw_an_exception(string configKey)
{
// Given
A.CallTo(() => configService.GetConfigValue(configKey)).Returns(null);
A.CallTo(() => configDataService.GetConfigValue(configKey)).Returns(null);

// Then
Assert.Throws<ConfigValueMissingException>(() => emailService.SendEmail(EmailTestHelper.GetDefaultEmail()));
Expand Down Expand Up @@ -183,7 +183,7 @@ public void The_recipient_email_address_is_correct()
public void The_recipient_email_addresses_are_correct()
{
// When
emailService.SendEmail(EmailTestHelper.GetDefaultEmail(new string[2] { "recipient1@example.com", "recipient2@example.com" }));
emailService.SendEmail(EmailTestHelper.GetDefaultEmail(new [] { "recipient1@example.com", "recipient2@example.com" }));

// Then
A.CallTo(() =>
Expand Down Expand Up @@ -221,7 +221,7 @@ public void The_cc_email_address_is_correct()
public void The_cc_email_addresses_are_correct()
{
// When
emailService.SendEmail(EmailTestHelper.GetDefaultEmail(cc: new string[2] { "cc1@example.com", "cc2@example.com" }));
emailService.SendEmail(EmailTestHelper.GetDefaultEmail(cc: new[] { "cc1@example.com", "cc2@example.com" }));

// Then
A.CallTo(() =>
Expand Down Expand Up @@ -259,7 +259,7 @@ public void The_bcc_email_address_is_correct()
public void The_bcc_email_addresses_are_correct()
{
// When
emailService.SendEmail(EmailTestHelper.GetDefaultEmail(bcc: new string[2] { "bcc1@example.com", "bcc2@example.com" }));
emailService.SendEmail(EmailTestHelper.GetDefaultEmail(bcc: new [] { "bcc1@example.com", "bcc2@example.com" }));

// Then
A.CallTo(() =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
using System.Linq;
using DigitalLearningSolutions.Data.DataServices;
using DigitalLearningSolutions.Data.Enums;
using DigitalLearningSolutions.Data.Helpers;
using DigitalLearningSolutions.Data.Models;
using DigitalLearningSolutions.Data.Models.CustomPrompts;
using DigitalLearningSolutions.Data.Models.DelegateGroups;
Expand Down Expand Up @@ -62,14 +61,15 @@ public void Setup()
configuration = A.Fake<IConfiguration>();
centreRegistrationPromptsService = A.Fake<ICentreRegistrationPromptsService>();
logger = A.Fake<ILogger<IGroupsService>>();

jobGroupsDataService = A.Fake<IJobGroupsDataService>(x => x.Strict());

A.CallTo(() => jobGroupsDataService.GetJobGroupsAlphabetical()).Returns(
JobGroupsTestHelper.GetDefaultJobGroupsAlphabetical()
);
A.CallTo(() => configuration["AppRootPath"]).Returns("baseUrl");

A.CallTo(() => configuration[ConfigHelper.AppRootPathName]).Returns("baseUrl");
DatabaseModificationsDoNothing();

groupsService = new GroupsService(
groupsDataService,
clockService,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using System.Web;
using DigitalLearningSolutions.Data.DataServices.UserDataService;
using DigitalLearningSolutions.Data.Exceptions;
using DigitalLearningSolutions.Data.Helpers;
using DigitalLearningSolutions.Data.Models.Signposting;
using DigitalLearningSolutions.Data.Services;
using FakeItEasy;
Expand All @@ -25,18 +24,10 @@ public void Setup()
userDataService = A.Fake<IUserDataService>();
learningHubSsoSecurityService = A.Fake<ILearningHubSsoSecurityService>();

A.CallTo(() => config[$"{ConfigHelper.LearningHubSsoSectionKey}:{ConfigHelper.LearningHubAuthBaseUrl}"])
.Returns("www.example.com");
A.CallTo(
() => config[$"{ConfigHelper.LearningHubSsoSectionKey}:{ConfigHelper.LearningHubAuthClientCode}"]
).Returns("test");
A.CallTo(
() => config[$"{ConfigHelper.LearningHubSsoSectionKey}:{ConfigHelper.LearningHubAuthLoginEndpoint}"]
).Returns("/insert-log");
A.CallTo(
() => config[
$"{ConfigHelper.LearningHubSsoSectionKey}:{ConfigHelper.LearningHubAuthLinkingEndpoint}"]
).Returns("/to-the-past");
A.CallTo(() => config["LearningHubSSO:BaseUrl"]).Returns("www.example.com");
A.CallTo(() => config["LearningHubSSO:ClientCode"]).Returns("test");
A.CallTo(() => config["LearningHubSSO:LoginEndpoint"]).Returns("/insert-log");
A.CallTo(() => config["LearningHubSSO:LinkingEndpoint"]).Returns("/to-the-past");

A.CallTo(() => learningHubSsoSecurityService.VerifyHash("56789", "invalid-hash")).Returns(false);
A.CallTo(() => learningHubSsoSecurityService.VerifyHash("12345", "valid-hash")).Returns(true);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace DigitalLearningSolutions.Data.Tests.Services
{
using DigitalLearningSolutions.Data.Helpers;
using DigitalLearningSolutions.Data.DataServices;
using DigitalLearningSolutions.Data.Models;
using DigitalLearningSolutions.Data.Models.Email;
using DigitalLearningSolutions.Data.Services;
Expand Down Expand Up @@ -44,8 +44,8 @@ public void Setup()
featureManager
);

A.CallTo(() => configuration[ConfigHelper.AppRootPathName]).Returns("https://new-tracking-system.com");
A.CallTo(() => configuration[ConfigHelper.CurrentSystemBaseUrlName])
A.CallTo(() => configuration["AppRootPath"]).Returns("https://new-tracking-system.com");
A.CallTo(() => configuration["CurrentSystemBaseUrl"])
.Returns("https://old-tracking-system.com");
}

Expand All @@ -64,7 +64,7 @@ public void Throws_an_exception_when_tracking_system_base_url_is_null()
{
// Given
A.CallTo(() => featureManager.IsEnabledAsync(A<string>._)).Returns(false);
A.CallTo(() => configuration[ConfigHelper.CurrentSystemBaseUrlName]).Returns("");
A.CallTo(() => configuration["CurrentSystemBaseUrl"]).Returns("");

// Then
Assert.ThrowsAsync<ConfigValueMissingException>(async () => await notificationService.SendUnlockRequest(1));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
using System.Net.Http;
using System.Threading.Tasks;
using DigitalLearningSolutions.Data.Exceptions;
using DigitalLearningSolutions.Data.Helpers;
using DigitalLearningSolutions.Data.Extensions;
using DigitalLearningSolutions.Data.Models.External.LearningHubApiClient;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
namespace DigitalLearningSolutions.Data.Services
namespace DigitalLearningSolutions.Data.DataServices
{
using System;
using System.Data;
using System.Linq;
using Dapper;

public interface IConfigService
public interface IConfigDataService
{
string? GetConfigValue(string key);
bool GetCentreBetaTesting(int centreId);
string GetConfigValueMissingExceptionMessage(string missingConfigValue);
}

public class ConfigService : IConfigService
public class ConfigDataService : IConfigDataService
{
public const string MailServer = "MailServer";
public const string MailFromAddress = "MailFromAddress";
Expand All @@ -26,7 +26,7 @@ public class ConfigService : IConfigService

private readonly IDbConnection connection;

public ConfigService(IDbConnection connection)
public ConfigDataService(IDbConnection connection)
{
this.connection = connection;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
namespace DigitalLearningSolutions.Data.Helpers
namespace DigitalLearningSolutions.Data.Extensions
{
using Microsoft.Extensions.Configuration;

public static class ConfigHelper
public static class ConfigurationExtensions
{
public const string AppRootPathName = "AppRootPath";
public const string CurrentSystemBaseUrlName = "CurrentSystemBaseUrl";
public const string UseSignposting = "FeatureManagement:UseSignposting";

private const string AppRootPathName = "AppRootPath";
private const string CurrentSystemBaseUrlName = "CurrentSystemBaseUrl";
private const string LearningHubOpenApiKey = "LearningHubOpenAPIKey";
private const string LearningHubOpenApiBaseUrl = "LearningHubOpenAPIBaseUrl";
public const string UseSignposting = "FeatureManagement:UseSignposting";
private const string PricingPageEnabled = "FeatureManagement:PricingPage";

public const string LearningHubAuthBaseUrl = "BaseUrl";
public const string LearningHubAuthLoginEndpoint = "LoginEndpoint";
public const string LearningHubAuthLinkingEndpoint = "LinkingEndpoint";
public const string LearningHubAuthClientCode = "ClientCode";
private const string LearningHubAuthBaseUrl = "BaseUrl";
private const string LearningHubAuthLoginEndpoint = "LoginEndpoint";
private const string LearningHubAuthLinkingEndpoint = "LinkingEndpoint";
private const string LearningHubAuthClientCode = "ClientCode";

public const string LearningHubSsoSectionKey = "LearningHubSSO";
private const string MapsApiKey = "MapsAPIKey";
private const string LearningHubSsoSectionKey = "LearningHubSSO";
private const string LearningHubSsoToleranceKey = "ToleranceInSeconds";
private const string LearningHubSsoIterationsKey = "HashIterations";
private const string LearningHubSsoByteLengthKey = "ByteLength";
Expand Down Expand Up @@ -91,5 +93,10 @@ public static string GetLearningHubSsoSecretKey(this IConfiguration config)
{
return config[$"{LearningHubSsoSectionKey}:{LearningHubSsoSecretKey}"];
}

public static string GetMapsApiKey(this IConfiguration config)
{
return config[MapsApiKey];
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
using DigitalLearningSolutions.Data.DataServices;
using DigitalLearningSolutions.Data.DataServices.SelfAssessmentDataService;
using DigitalLearningSolutions.Data.Exceptions;
using DigitalLearningSolutions.Data.Helpers;
using DigitalLearningSolutions.Data.Extensions;
using DigitalLearningSolutions.Data.Models.LearningResources;
using Microsoft.Extensions.Configuration;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ namespace DigitalLearningSolutions.Data.Services
using DigitalLearningSolutions.Data.DataServices;
using DigitalLearningSolutions.Data.DataServices.UserDataService;
using DigitalLearningSolutions.Data.Exceptions;
using DigitalLearningSolutions.Data.Helpers;
using DigitalLearningSolutions.Data.Extensions;
using DigitalLearningSolutions.Data.Models.DelegateUpload;
using DigitalLearningSolutions.Data.Models.Register;
using DigitalLearningSolutions.Data.Models.User;
Expand Down
Loading