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
Expand Up @@ -6,6 +6,7 @@
using System.Transactions;
using DigitalLearningSolutions.Data.DataServices;
using DigitalLearningSolutions.Data.Mappers;
using DigitalLearningSolutions.Data.Models.User;
using DigitalLearningSolutions.Data.Tests.TestHelpers;
using FluentAssertions;
using FluentAssertions.Execution;
Expand Down Expand Up @@ -55,6 +56,59 @@ public void GetDelegateUsersByUsername_Returns_delegate_user()
returnedDelegateUsers.FirstOrDefault().Should().BeEquivalentTo(expectedDelegateUser);
}

[Test]
public void GetAllDelegateUsersByUsername_Returns_delegate_user()
{
// Given
var expectedDelegateUser = UserTestHelper.GetDefaultDelegateUser();

//When
var returnedDelegateUsers = userDataService.GetAllDelegateUsersByUsername("SV1234");

// Then
returnedDelegateUsers.FirstOrDefault().Should().BeEquivalentTo(expectedDelegateUser);
}

[Test]
public void GetAllDelegateUsersByUsername_includes_inactive_users()
{
//When
var returnedDelegateUsers = userDataService.GetAllDelegateUsersByUsername("OS35");

// Then
returnedDelegateUsers.FirstOrDefault()!.Id.Should().Be(89094);
}

[Test]
public void GetAllDelegateUsersByUsername_search_includes_CandidateNumber()
{
//When
var returnedDelegateUsers = userDataService.GetAllDelegateUsersByUsername("ND107");

// Then
returnedDelegateUsers.FirstOrDefault()!.Id.Should().Be(78051);
}

[Test]
public void GetAllDelegateUsersByUsername_search_includes_EmailAddress()
{
//When
var returnedDelegateUsers = userDataService.GetAllDelegateUsersByUsername("saudnhb@.5lpyk");

// Then
returnedDelegateUsers.FirstOrDefault()!.Id.Should().Be(78051);
}

[Test]
public void GetAllDelegateUsersByUsername_searches_AliasID()
{
//When
var returnedDelegateUsers = userDataService.GetAllDelegateUsersByUsername("aldn y");

// Then
returnedDelegateUsers.FirstOrDefault()!.Id.Should().Be(78051);
}

[Test]
public void GetAdminUserById_Returns_admin_user()
{
Expand Down
24 changes: 24 additions & 0 deletions DigitalLearningSolutions.Data/DataServices/UserDataService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public interface IUserDataService
public List<DelegateUserCard> GetDelegateUserCardsByCentreId(int centreId);
public AdminUser? GetAdminUserByUsername(string username);
public List<DelegateUser> GetDelegateUsersByUsername(string username);
public List<DelegateUser> GetAllDelegateUsersByUsername(string username);
public AdminUser? GetAdminUserByEmailAddress(string emailAddress);
public List<DelegateUser> GetDelegateUsersByEmailAddress(string emailAddress);
public List<DelegateUser> GetUnapprovedDelegateUsersByCentreId(int centreId);
Expand Down Expand Up @@ -278,6 +279,29 @@ FROM Candidates AS cd
return users;
}

public List<DelegateUser> GetAllDelegateUsersByUsername(string username)
{
List<DelegateUser> users = connection.Query<DelegateUser>(
@"SELECT
cd.CandidateID AS Id,
cd.CandidateNumber,
cd.CentreID,
ct.CentreName,
ct.Active AS CentreActive,
cd.EmailAddress,
cd.FirstName,
cd.LastName,
cd.Password,
cd.Approved
FROM Candidates AS cd
INNER JOIN Centres AS ct ON ct.CentreID = cd.CentreID
WHERE cd.CandidateNumber = @username OR cd.EmailAddress = @username OR cd.AliasID = @username",
new { username }
).ToList();

return users;
}

public AdminUser? GetAdminUserByEmailAddress(string emailAddress)
{
return connection.Query<AdminUser>(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
namespace DigitalLearningSolutions.Web.Tests.Controllers.Register
{
using System.Collections.Generic;
using DigitalLearningSolutions.Data.DataServices;
using DigitalLearningSolutions.Data.Models.User;
using DigitalLearningSolutions.Data.Services;
using DigitalLearningSolutions.Data.Tests.TestHelpers;
using DigitalLearningSolutions.Web.Controllers.Register;
using DigitalLearningSolutions.Web.Extensions;
using DigitalLearningSolutions.Web.Helpers;
using DigitalLearningSolutions.Web.Models;
using DigitalLearningSolutions.Web.Tests.ControllerHelpers;
using DigitalLearningSolutions.Web.ViewModels.Register;
using FakeItEasy;
using FluentAssertions.AspNetCore.Mvc;
using NUnit.Framework;

public class RegisterDelegateByCentreControllerTests
{
private RegisterDelegateByCentreController controller = null!;
private CustomPromptHelper customPromptHelper = null!;
private IJobGroupsDataService jobGroupsDataService = null!;
private IUserDataService userDataService = null!;
private IUserService userService = null!;

[SetUp]
public void Setup()
{
jobGroupsDataService = A.Fake<IJobGroupsDataService>();
userService = A.Fake<IUserService>();
userDataService = A.Fake<IUserDataService>();
customPromptHelper = A.Fake<CustomPromptHelper>();
controller = new RegisterDelegateByCentreController(
jobGroupsDataService,
userService,
customPromptHelper,
userDataService
)
.WithDefaultContext()
.WithMockTempData();
}

[Test]
public void PersonalInformationPost_with_duplicate_email_for_centre_fails_validation()
{
// Given
var duplicateUser = UserTestHelper.GetDefaultDelegateUser();
var model = new PersonalInformationViewModel
{
FirstName = "Test",
LastName = "User",
Centre = duplicateUser.CentreId,
Email = duplicateUser.EmailAddress,
Alias = "testUser"
};
A.CallTo(() => userService.GetUsersByEmailAddress(duplicateUser.EmailAddress!))
.Returns((null, new List<DelegateUser> { duplicateUser }));

// When
var result = controller.PersonalInformation(model);

// Then
A.CallTo(() => userService.GetUsersByEmailAddress(duplicateUser.EmailAddress!)).MustHaveHappened();
result.Should().BeViewResult().WithDefaultViewName();
}

[Test]
public void PersonalInformationPost_with_duplicate_email_for_different_centre_is_allowed()
{
// Given
controller.TempData.Set(new DelegateRegistrationByCentreData());
var duplicateUser = UserTestHelper.GetDefaultDelegateUser();
var model = new PersonalInformationViewModel
{
FirstName = "Test",
LastName = "User",
Centre = duplicateUser.CentreId + 1,
Email = duplicateUser.EmailAddress,
Alias = "testUser"
};
A.CallTo(() => userService.GetUsersByEmailAddress(duplicateUser.EmailAddress!))
.Returns((null, new List<DelegateUser> { duplicateUser }));

// When
var result = controller.PersonalInformation(model);

// Then
A.CallTo(() => userService.GetUsersByEmailAddress(duplicateUser.EmailAddress!)).MustHaveHappened();
result.Should().BeRedirectToActionResult().WithActionName("LearnerInformation");
}

[Test]
public void PersonalInformationPost_with_duplicate_alias_for_centre_fails_validation()
{
// Given
const string duplicateAlias = "alias1";
var duplicateUser = UserTestHelper.GetDefaultDelegateUser();
var model = new PersonalInformationViewModel
{
FirstName = "Test",
LastName = "User",
Centre = duplicateUser.CentreId,
Email = "unique@email",
Alias = duplicateAlias
};
A.CallTo(() => userDataService.GetAllDelegateUsersByUsername(duplicateAlias))
.Returns(new List<DelegateUser> { duplicateUser });

// When
var result = controller.PersonalInformation(model);

// Then
A.CallTo(() => userDataService.GetAllDelegateUsersByUsername(duplicateAlias)).MustHaveHappened();
result.Should().BeViewResult().WithDefaultViewName();
}

[Test]
public void PersonalInformationPost_with_duplicate_alias_for_different_centre_is_allowed()
{
// Given
const string duplicateAlias = "alias1";
controller.TempData.Set(new DelegateRegistrationByCentreData());
var duplicateUser = UserTestHelper.GetDefaultDelegateUser();
var model = new PersonalInformationViewModel
{
FirstName = "Test",
LastName = "User",
Centre = duplicateUser.CentreId + 1,
Email = duplicateUser.EmailAddress,
Alias = duplicateAlias
};
A.CallTo(() => userDataService.GetAllDelegateUsersByUsername(duplicateAlias))
.Returns(new List<DelegateUser> { duplicateUser });

// When
var result = controller.PersonalInformation(model);

// Then
A.CallTo(() => userDataService.GetAllDelegateUsersByUsername(duplicateAlias)).MustHaveHappened();
result.Should().BeRedirectToActionResult().WithActionName("LearnerInformation");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -251,11 +251,7 @@ public IActionResult Confirmation()

private void SetDelegateRegistrationData(int? centreId)
{
var delegateRegistrationData = new DelegateRegistrationData
{
IsCentreSpecificRegistration = centreId.HasValue,
Centre = centreId
};
var delegateRegistrationData = new DelegateRegistrationData(centreId);
var id = delegateRegistrationData.Id;

Response.Cookies.Append(
Expand Down
Loading