72 lines
2.6 KiB
C#
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);
|
|
});
|
|
}
|
|
}
|
|
}
|