This commit is contained in:
Zeeshaun
2026-03-31 16:43:12 -05:00
parent 9be174da46
commit d639027028
198 changed files with 111474 additions and 0 deletions
@@ -0,0 +1,104 @@
using System;
using System.Threading.Tasks;
using LCU.API.Internal.MemberPreferencesApi.Services;
using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.FeatureManagement;
using Moq;
using NUnit.Framework;
using LCU.API.Internal.MemberPreferencesApi.Controllers;
namespace LCU.API.Internal.MemberPreferencesApi.UnitTests.Controllers
{
public class MemberEmailControllerTest
{
private readonly MemberEmailController _controller;
private readonly Mock<IMemberEmailService> _service = new Mock<IMemberEmailService>();
private readonly Mock<IFeatureManager> _featureManager = new Mock<IFeatureManager>();
public MemberEmailControllerTest()
{
_controller = new MemberEmailController(_service.Object, _featureManager.Object);
}
[Test]
public async Task EmailSentSuccessfully_AllCases_CallsServiceUnifiedOptInEmailFailedToSend()
{
var userId = Guid.NewGuid().ToString();
var emailAddress = Guid.NewGuid().ToString();
await _controller.EmailSentSuccessfully(userId, emailAddress);
_service.Verify(s => s.EmailSucceededToSend(userId, emailAddress), Times.Once);
}
[Test]
public async Task EmailSentSuccessfully_KnownEmail_ReturnsOk()
{
var userId = Guid.NewGuid().ToString();
var emailAddress = Guid.NewGuid().ToString();
_service
.Setup(s => s.EmailSucceededToSend(userId, emailAddress))
.ReturnsAsync(true);
var result = await _controller.EmailSentSuccessfully(userId, emailAddress);
Assert.AreEqual(200, (result as IStatusCodeActionResult)?.StatusCode);
}
[Test]
public async Task EmailSentSuccessfully_UnknownEmail_ReturnsNotFound()
{
var userId = Guid.NewGuid().ToString();
var emailAddress = Guid.NewGuid().ToString();
_service
.Setup(s => s.EmailFailedToSend(userId, emailAddress, true))
.ReturnsAsync(false);
var result = await _controller.EmailSentSuccessfully(userId, emailAddress);
Assert.AreEqual(404, (result as IStatusCodeActionResult)?.StatusCode);
}
[Test]
public async Task EmailSendFailed_AllCases_CallsServiceEmailFailedToSend()
{
var userId = Guid.NewGuid().ToString();
var emailAddress = Guid.NewGuid().ToString();
_featureManager.Setup(f => f.IsEnabledAsync(It.IsAny<string>())).ReturnsAsync(true);
await _controller.EmailSendFailed(userId, emailAddress);
_service.Verify(s => s.EmailFailedToSend(userId, emailAddress, true), Times.Once);
}
[Test]
public async Task EmailSendFailed_KnownEmail_ReturnsOk()
{
var userId = Guid.NewGuid().ToString();
var emailAddress = Guid.NewGuid().ToString();
_featureManager.Setup(f => f.IsEnabledAsync(It.IsAny<string>())).ReturnsAsync(true);
_service
.Setup(s => s.EmailFailedToSend(userId, emailAddress, true))
.ReturnsAsync(true);
var result = await _controller.EmailSendFailed(userId, emailAddress);
Assert.AreEqual(200, (result as IStatusCodeActionResult)?.StatusCode);
}
[Test]
public async Task EmailSendFailed_UnknownEmail_ReturnsNotFound()
{
var userId = Guid.NewGuid().ToString();
var emailAddress = Guid.NewGuid().ToString();
_service
.Setup(s => s.EmailFailedToSend(userId, emailAddress, true))
.ReturnsAsync(false);
var result = await _controller.EmailSendFailed(userId, emailAddress);
Assert.AreEqual(404, (result as IStatusCodeActionResult)?.StatusCode);
}
}
}
@@ -0,0 +1,396 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using LCU.API.Internal.MemberPreferencesApi.Controllers;
using LCU.API.Internal.MemberPreferencesApi.Services;
using LCU.Library.Internal.MemberPreferencesApiModels.DataTransfer;
using LCU.Library.Internal.MemberPreferencesApiModels.Entities;
using LCU.Library.Internal.MemberPreferencesApiModels.Requests;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Moq;
using NUnit.Framework;
namespace LCU.API.Internal.MemberPreferencesApi.UnitTests.Controllers
{
public class MemberOptInSettingsControllerTest
{
private MemberOptInSettingsController _controller;
private Mock<IOptinService> _mockOptinService;
private Mock<IMemberPreferenceService> _mockMemberPreferenceService;
[SetUp]
public void Setup()
{
_mockOptinService = new Mock<IOptinService>();
_mockMemberPreferenceService = new Mock<IMemberPreferenceService>();
_controller =
new MemberOptInSettingsController(_mockOptinService.Object, _mockMemberPreferenceService.Object);
}
[Test]
public async Task Search_OK()
{
_mockOptinService
.Setup(service => service.GetMemberOptInAgreementInformationByAccountId(123)).ReturnsAsync(
new List<MemberOptInAgreementInformation>()
{
new MemberOptInAgreementInformation(new MemberOptInSettings()
{
Id = 1
},
null,
null,
false)
}).Verifiable();
var result = await _controller.GetAgreementsByAccountId(123);
Assert.NotNull(result);
var okResult = result as OkObjectResult;
Assert.NotNull(okResult);
Assert.AreEqual(200, okResult.StatusCode);
var okValue = okResult.Value as List<MemberOptInAgreementInformation>;
Assert.NotNull(okValue);
Assert.IsNotEmpty(okValue);
_mockOptinService.Verify();
}
[Test]
public async Task Search_Missing()
{
_mockOptinService
.Setup(service => service.GetMemberOptInAgreementInformationByAccountId(123)).ReturnsAsync(
new List<MemberOptInAgreementInformation>()).Verifiable();
var result = await _controller.GetAgreementsByAccountId(123);
Assert.NotNull(result);
var okResult = result as NotFoundObjectResult;
Assert.NotNull(okResult);
Assert.AreEqual(404, okResult.StatusCode);
_mockOptinService.Verify();
}
[Test]
public async Task Search_BadRequest()
{
var result = await _controller.GetAgreementsByAccountId(0);
Assert.NotNull(result);
var brResult = result as BadRequestObjectResult;
Assert.NotNull(brResult);
Assert.AreEqual(400, brResult.StatusCode);
_mockOptinService.Verify(x => x.GetMemberOptInAgreementInformationByAccountId(It.IsAny<long>()), Times.Never);
}
[Test]
public async Task Search_Failure()
{
_mockOptinService
.Setup(service => service.GetMemberOptInAgreementInformationByAccountId(123))
.Throws(new Exception("Exception thrown from unit test.")).Verifiable();
var result = await _controller.GetAgreementsByAccountId(123);
Assert.NotNull(result);
var badResult = result as StatusCodeResult;
Assert.NotNull(badResult);
Assert.AreEqual(500, badResult.StatusCode);
_mockOptinService.Verify();
}
[Test]
public async Task GetMemberOptinAgreementInformationByUserId_OK()
{
_mockOptinService
.Setup(service => service.GetMemberOptInAgreementInformationForUser("123")).ReturnsAsync(
new MemberOptInAgreementInformation(new MemberOptInSettings()
{
Id = 1
},
null,
null,
false)
).Verifiable();
var result = await _controller.GetAgreementByUserId("123");
Assert.NotNull(result);
var okResult = result as OkObjectResult;
Assert.NotNull(okResult);
Assert.AreEqual(200, okResult.StatusCode);
var okValue = okResult.Value as MemberOptInAgreementInformation;
Assert.NotNull(okValue);
Assert.AreEqual(1 ,okValue.MemberOptinSettings.Id);
_mockOptinService.Verify();
}
[Test]
public async Task GetMemberOptinAgreementInformationByUserId_Missing()
{
_mockOptinService
.Setup(service => service.GetMemberOptInAgreementInformationForUser("123")).ReturnsAsync(
(MemberOptInAgreementInformation)null).Verifiable();
var result = await _controller.GetAgreementByUserId("123");
Assert.NotNull(result);
var okResult = result as NotFoundObjectResult;
Assert.NotNull(okResult);
Assert.AreEqual(404, okResult.StatusCode);
_mockOptinService.Verify();
}
[Test]
public async Task GetMemberOptinAgreementInformationByUserId_BadRequest()
{
var result = await _controller.GetAgreementByUserId(null);
Assert.NotNull(result);
var brResult = result as BadRequestObjectResult;
Assert.NotNull(brResult);
Assert.AreEqual(400, brResult.StatusCode);
result = await _controller.GetAgreementByUserId("");
Assert.NotNull(result);
brResult = result as BadRequestObjectResult;
Assert.NotNull(brResult);
Assert.AreEqual(400, brResult.StatusCode);
_mockOptinService.Verify(x => x.GetMemberOptInAgreementInformationForUser(It.IsAny<string>()), Times.Never);
}
[Test]
public async Task GetMemberOptinAgreementInformationByUserId_Failure()
{
_mockOptinService
.Setup(service => service.GetMemberOptInAgreementInformationForUser("123"))
.Throws(new Exception("Exception thrown from unit test.")).Verifiable();
var result = await _controller.GetAgreementByUserId("123");
Assert.NotNull(result);
var badResult = result as StatusCodeResult;
Assert.NotNull(badResult);
Assert.AreEqual(500, badResult.StatusCode);
_mockOptinService.Verify();
}
[Test]
public async Task GetMember_OK()
{
_mockOptinService
.Setup(service => service.GetMemberOptInSettingsOrCreateDefaultSetting(It.IsAny<string>())).ReturnsAsync(
new MemberOptInSettings()
{
Id = 1
}).Verifiable();
_mockOptinService
.Setup(x => x.TransformMemberOptInSettingsForClient(It.IsAny<MemberOptInSettings>())).ReturnsAsync(
new MemberOptInInformation(new MemberOptInSettings {Id = 1},true)).Verifiable();
var result = await _controller.GetMemberById("99");
Assert.NotNull(result);
var okResult = result as OkObjectResult;
Assert.NotNull(okResult);
Assert.AreEqual(200, okResult.StatusCode);
var okValue = okResult.Value as MemberOptInInformation;
Assert.NotNull(okValue);
Assert.AreEqual(1, okValue.MemberOptinSettings.Id);
_mockOptinService.Verify();
_mockOptinService.Verify();
}
[Test]
public async Task GetMember_Missing()
{
_mockOptinService
.Setup(service => service.GetMemberOptInSettingsOrCreateDefaultSetting("99")).ReturnsAsync(
(MemberOptInSettings) null).Verifiable();
var result = await _controller.GetMemberById("99");
Assert.NotNull(result);
var okResult = result as NotFoundObjectResult;
Assert.NotNull(okResult);
Assert.AreEqual(404, okResult.StatusCode);
_mockOptinService.Verify();
}
[Test]
public async Task GetMember_Failure()
{
_mockOptinService
.Setup(service => service.GetMemberOptInSettingsOrCreateDefaultSetting("99"))
.Throws(new InvalidCastException()).Verifiable();
var result = await _controller.GetMemberById("99");
Assert.NotNull(result);
var badResult = result as StatusCodeResult;
Assert.NotNull(badResult);
Assert.AreEqual(500, badResult.StatusCode);
_mockOptinService.Verify();
_mockOptinService.Verify(x => x.TransformMemberOptInSettingsForClient(It.IsAny<MemberOptInSettings>()), Times.Never);
}
[Test]
public async Task GetMember_Transform_Failure()
{
_mockOptinService
.Setup(service => service.GetMemberOptInSettingsOrCreateDefaultSetting("99")).ReturnsAsync(
new MemberOptInSettings()
{
Id = 1
}).Verifiable();
_mockOptinService
.Setup(x => x.TransformMemberOptInSettingsForClient(It.IsAny<MemberOptInSettings>()))
.ThrowsAsync(new Exception("Oops")).Verifiable();
var result = await _controller.GetMemberById("99");
Assert.NotNull(result);
var badResult = result as StatusCodeResult;
Assert.NotNull(badResult);
Assert.AreEqual(500, badResult.StatusCode);
_mockOptinService.Verify();
_mockOptinService.Verify();
}
[Test]
public async Task Post_Email_OK()
{
var request = new MemberOptinRequest()
{
Value = "Email",
UserId = "99",
Email = "[email protected]",
LegalReference = "None"
};
_mockMemberPreferenceService
.Setup(service => service.UpdateMemberOptinAsync(It.IsAny<MemberOptinRequest>()))
.Verifiable("Expected call to UpdateMemberOptinAsync");
var result = await _controller.UpdateOptinPreference(request, "test", "Associate");
Assert.NotNull(result);
var okResult = result as OkResult;
Assert.NotNull(okResult);
Assert.AreEqual(200, okResult.StatusCode);
_mockMemberPreferenceService.Verify(x => x.UpdateMemberOptinAsync(It.IsAny<MemberOptinRequest>()),
Times.Once);
}
[Test]
public async Task Post_Bad_Request()
{
// arrange
var request = new MemberOptinRequest()
{
Value = null,
UserId = "99",
LegalReference = "None"
};
_controller.ModelState.AddModelError("Value", "The value field is required.");
// act
var result = await _controller.UpdateOptinPreference(request, "test", "Associate");
Assert.NotNull(result);
var badRequestResult = result as BadRequestObjectResult;
// assert
Assert.NotNull(badRequestResult);
Assert.AreEqual(StatusCodes.Status400BadRequest, badRequestResult.StatusCode);
}
[Test]
public async Task Post_Error()
{
// arrange
var request = new MemberOptinRequest()
{
Value = "True",
UserId = "99",
LegalReference = "None"
};
_mockMemberPreferenceService
.Setup(service => service.UpdateMemberOptinAsync(It.IsAny<MemberOptinRequest>()))
.ThrowsAsync(new ArithmeticException());
// act
var result = await _controller.UpdateOptinPreference(request, "test", "Associate");
var badResult = result as StatusCodeResult;
Assert.NotNull(badResult);
Assert.AreEqual(500, badResult.StatusCode);
_mockMemberPreferenceService.Verify(x => x.UpdateMemberOptinAsync(It.IsAny<MemberOptinRequest>()),
Times.Once);
}
[Test]
public async Task Post_Bad_Request_NoHeader()
{
// arrange
var request = new MemberOptinRequest()
{
Value = "Paper",
UserId = "99",
LegalReference = "None"
};
// act
var result = await _controller.UpdateOptinPreference(request, null, null);
Assert.NotNull(result);
var badRequestResult = result as BadRequestObjectResult;
// assert
Assert.NotNull(badRequestResult);
Assert.AreEqual(StatusCodes.Status400BadRequest, badRequestResult.StatusCode);
}
[Test]
public async Task Post_Bad_Request_NotValid()
{
// arrange
var request = new MemberOptinRequest()
{
Value = "Electronic",
UserId = "99",
LegalReference = "None"
};
_mockMemberPreferenceService
.Setup(service => service.UpdateMemberOptinAsync(It.IsAny<MemberOptinRequest>()))
.ThrowsAsync(new Exception());
// act
var result = await _controller.UpdateOptinPreference(request, null, null);
Assert.NotNull(result);
var badRequestResult = result as BadRequestObjectResult;
// assert
Assert.NotNull(badRequestResult);
Assert.AreEqual(StatusCodes.Status400BadRequest, badRequestResult.StatusCode);
}
}
}
@@ -0,0 +1,241 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using LCU.API.Internal.MemberPreferencesApi.Services;
using LCU.Library.Internal.MemberPreferencesApiModels.Entities;
using LCU.Library.Internal.MemberPreferencesApiModels.Enums;
using LCU.Library.Internal.MemberPreferencesApiModels;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Moq;
using NUnit.Framework;
using LCU.API.Internal.MemberPreferencesApi.Controllers;
using LCU.Library.Internal.MemberPreferencesApiModels.Requests;
namespace LCU.API.Internal.MemberPreferencesApi.UnitTests.Controllers
{
public class MemberPreferenceControllerTest
{
private MemberPreferenceController _controller;
private Mock<IMemberPreferenceService> _mockMemberPreferenceService;
[SetUp]
public void Setup()
{
_mockMemberPreferenceService = new Mock<IMemberPreferenceService>();
_controller = new MemberPreferenceController(_mockMemberPreferenceService.Object);
}
[Test]
public async Task Get_OK()
{
_mockMemberPreferenceService
.Setup(service => service.GetMemberPreferencesAsync("99")).ReturnsAsync(
new List<MemberPreference>()
{
new MemberPreference()
{
Id = 1,
UserId = "99",
Preference = PreferenceType.ENotification,
Value = "true"
}
}).Verifiable();
var result = await _controller.Get("99");
Assert.NotNull(result);
var okResult = result as OkObjectResult;
Assert.NotNull(okResult);
Assert.AreEqual(200, okResult.StatusCode);
var okValue = okResult.Value as IReadOnlyCollection<MemberPreference>;
Assert.NotNull(okValue);
Assert.IsNotEmpty(okValue);
Assert.AreEqual(1, okValue.First().Id);
_mockMemberPreferenceService.Verify();
}
[Test]
public async Task Get_Missing()
{
_mockMemberPreferenceService
.Setup(service => service.GetMemberPreferencesAsync("99")).ReturnsAsync(
new List<MemberPreference>()).Verifiable();
var result = await _controller.Get("99");
Assert.NotNull(result);
var okResult = result as OkObjectResult;
Assert.NotNull(okResult);
Assert.AreEqual(200, okResult.StatusCode);
var okValue = okResult.Value as IReadOnlyCollection<MemberPreference>;
Assert.NotNull(okValue);
Assert.IsEmpty(okValue);
_mockMemberPreferenceService.Verify();
}
[Test]
public async Task Get_Failure()
{
_mockMemberPreferenceService
.Setup(service => service.GetMemberPreferencesAsync("99"))
.Throws(new InvalidCastException()).Verifiable();
var result = await _controller.Get("99");
Assert.NotNull(result);
var badResult = result as StatusCodeResult;
Assert.NotNull(badResult);
Assert.AreEqual(500, badResult.StatusCode);
_mockMemberPreferenceService.Verify();
}
[Test]
public void Get_Types_OK()
{
IReadOnlyCollection<string> values = Enum.GetValues(typeof(PreferenceType))
.Cast<PreferenceType>()
.Select(v => v.ToString())
.ToList();
_mockMemberPreferenceService
.Setup(service => service.GetAvailableTypes()).Returns(values);
var result = _controller.GetAvailableTypes();
Assert.NotNull(result);
var okResult = result as OkObjectResult;
Assert.NotNull(okResult);
Assert.AreEqual(200, okResult.StatusCode);
var okValue = okResult.Value as IReadOnlyCollection<string>;
Assert.NotNull(okValue);
Assert.IsNotEmpty(okValue);
}
[Test]
public async Task Post_OK()
{
var results = new MemberOptInSettings();
var request = new MemberPreferenceRequest
{
Preference = PreferenceType.ENotification,
Value = "True",
UserId = "99",
LegalReference = "None"
};
_mockMemberPreferenceService
.Setup(service => service.SaveMemberPreferenceAsync(It.IsAny<MemberPreferenceRequest>()))
.ReturnsAsync(results);
var result = await _controller.CreateMemberPreference(request, "test","Associate");
Assert.NotNull(result);
var okResult = result as CreatedAtActionResult;
Assert.NotNull(okResult);
Assert.AreEqual(201, okResult.StatusCode);
Assert.AreEqual("99", okResult.RouteValues["userId"]);
_mockMemberPreferenceService.Verify(x => x.SaveMemberPreferenceAsync(It.IsAny<MemberPreferenceRequest>()),
Times.Once);
}
[Test]
public async Task Post_Bad_Request()
{
// arrange
var request = new MemberPreferenceRequest()
{
Preference = PreferenceType.ENotification,
Value = null,
UserId = "99",
LegalReference = "None"
};
_controller.ModelState.AddModelError("Value", "The value field is required.");
// act
var result = await _controller.CreateMemberPreference(request, "test", "Associate");
Assert.NotNull(result);
var badRequestResult = result as BadRequestObjectResult;
// assert
Assert.NotNull(badRequestResult);
Assert.AreEqual(StatusCodes.Status400BadRequest, badRequestResult.StatusCode);
}
[Test]
public async Task Post_Error()
{
// arrange
var request = new MemberPreferenceRequest()
{
Preference = PreferenceType.ENotification,
Value = "True",
UserId = "99",
LegalReference = "None"
};
_mockMemberPreferenceService
.Setup(service => service.SaveMemberPreferenceAsync(It.IsAny<MemberPreferenceRequest>()))
.ThrowsAsync(new ArithmeticException());
// act
var result = await _controller.CreateMemberPreference(request, "test", "Associate");
var badResult = result as StatusCodeResult;
Assert.NotNull(badResult);
Assert.AreEqual(500, badResult.StatusCode);
_mockMemberPreferenceService.Verify(x => x.SaveMemberPreferenceAsync(It.IsAny<MemberPreferenceRequest>()),
Times.Once);
}
[Test]
public async Task Post_Member_Has_Hold()
{
var request = new MemberPreferenceRequest()
{
Preference = PreferenceType.ENotification,
Value = "True",
UserId = "99",
LegalReference = "None"
};
_mockMemberPreferenceService
.Setup(service => service.SaveMemberPreferenceAsync(It.IsAny<MemberPreferenceRequest>()))
.ThrowsAsync(new Exception());
var result = await _controller.CreateMemberPreference(request, "test", "Associate");
Assert.NotNull(result);
var objectResult = result as StatusCodeResult;
Assert.NotNull(objectResult);
Assert.AreEqual(StatusCodes.Status500InternalServerError, objectResult.StatusCode);
}
[Test]
public async Task Post_Bad_Request_NoHeaders()
{
// arrange
var request = new MemberPreferenceRequest()
{
Preference = PreferenceType.ENotification,
Value = "Electronic",
UserId = "99",
LegalReference = "None"
};
// act
var result = await _controller.CreateMemberPreference(request, null, null);
Assert.NotNull(result);
var badRequestResult = result as BadRequestObjectResult;
// assert
Assert.NotNull(badRequestResult);
Assert.AreEqual(StatusCodes.Status400BadRequest, badRequestResult.StatusCode);
}
}
}