Files
2026-03-17 09:53:09 -05:00

72 lines
2.6 KiB
C#

using System.Collections.Generic;
using System.Threading.Tasks;
using LCU.API.Internal.Operations.IncentiveApi.Exceptions;
using LCU.API.Internal.Operations.IncentiveApi.Services.DuplicateDetection;
using LCU.API.Internal.Operations.IncentiveApiLib.Repositories;
using LCU.Library.Internal.IncentiveApiModels.Entities;
using LCU.Library.Internal.IncentiveApiModels.Enums;
using Moq;
using NUnit.Framework;
namespace Application.UnitTests.Services.DuplicateDetection
{
public class DuplicateDetectionServiceTest
{
private IDuplicateDetectionService _service;
IActivityRepository _activityRepository;
private IDuplicateDetectionStrategy _strategy;
[SetUp]
public void Setup()
{
_activityRepository = Mock.Of<IActivityRepository>();
_strategy = Mock.Of<IDuplicateDetectionStrategy>();
var strategies = new List<IDuplicateDetectionStrategy>()
{
_strategy
};
_service = new DuplicateDetectionService(strategies, _activityRepository);
}
[Test]
public async Task AllTypesCoveredOnce()
{
var activity = new Activity()
{
Id = 1,
Type = ActivityType.Other,
Product = Product.Mortgage,
State = ActivityState.Accepted
};
var duplicates = new List<Activity>() { activity };
Mock.Get(_strategy).Setup(x => x.CanDecideActivity(It.IsAny<Activity>())).Returns(true);
Mock.Get(_strategy).Setup(x => x.FindDuplicates(It.IsAny<Activity>())).ReturnsAsync(duplicates);
var results = await _service.TryFindDuplicates(activity);
Assert.NotNull(results);
Assert.IsNotEmpty(results);
Mock.Get(_strategy).Verify(x => x.CanDecideActivity(It.IsAny<Activity>()), Times.Once);
Mock.Get(_strategy).Verify(x => x.FindDuplicates(It.IsAny<Activity>()), Times.Once);
}
[Test]
public void ThrowsWithoutStrategy()
{
var activity = new Activity()
{
Id = 1,
Type = ActivityType.Other,
Product = Product.Mortgage,
State = ActivityState.Accepted
};
var strategies = new List<IDuplicateDetectionStrategy>();
var service = new DuplicateDetectionService(strategies, _activityRepository);
Assert.ThrowsAsync<NoAvailableStrategy>(async () =>
{
await service.TryFindDuplicates(activity);
});
}
}
}