tests: begin adding tests related to performing searches
This commit is contained in:
@@ -36,10 +36,9 @@ public class DatabaseMaintainerTests : DatabaseTest, IDisposable
|
|||||||
_ofacFileServiceOptions
|
_ofacFileServiceOptions
|
||||||
);
|
);
|
||||||
|
|
||||||
var uowLogger = _loggerFactory.CreateLogger<EfUnitOfWork>();
|
|
||||||
var dbMaintainerLogger = _loggerFactory.CreateLogger<DatabaseMaintainer>();
|
var dbMaintainerLogger = _loggerFactory.CreateLogger<DatabaseMaintainer>();
|
||||||
|
|
||||||
var uow = new EfUnitOfWork(_context, uowLogger, _loggerFactory);
|
var uow = new EfUnitOfWork(_context, _loggerFactory);
|
||||||
_databaseMaintainer = new DatabaseMaintainer(uow, ofacFileService, dbMaintainerLogger);
|
_databaseMaintainer = new DatabaseMaintainer(uow, ofacFileService, dbMaintainerLogger);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,9 +11,7 @@ public class EfUnitOfWorkTests : DatabaseTest
|
|||||||
public EfUnitOfWorkTests()
|
public EfUnitOfWorkTests()
|
||||||
{
|
{
|
||||||
var loggerFactory = LoggerFactory.Create(c => c.ClearProviders());
|
var loggerFactory = LoggerFactory.Create(c => c.ClearProviders());
|
||||||
var logger = loggerFactory.CreateLogger<EfUnitOfWork>();
|
_uow = new(_context, loggerFactory);
|
||||||
|
|
||||||
_uow = new(_context, logger, loggerFactory);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
namespace SanctionsSearch.Worker.Tests.Integration;
|
||||||
|
|
||||||
|
public class SearchServiceTests : DatabaseTest
|
||||||
|
{
|
||||||
|
private readonly SearchService _searchService;
|
||||||
|
private readonly SdnFaker _sdnFaker = new();
|
||||||
|
private readonly AddressFaker _addressFaker = new();
|
||||||
|
|
||||||
|
public SearchServiceTests()
|
||||||
|
{
|
||||||
|
var uow = new EfUnitOfWork(_context, _loggerFactory);
|
||||||
|
_searchService = new SearchService(uow);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task PerformSearchAsync_WhenCalledWithEmptyRequest_ItShouldReturnEmptyResult()
|
||||||
|
{
|
||||||
|
var request = new SearchRequest();
|
||||||
|
|
||||||
|
var result = await _searchService.PerformSearchAsync(request);
|
||||||
|
|
||||||
|
result.SearchRequestId.Should().Be(request.Id);
|
||||||
|
result.Hits.Should().BeEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task PerformSearchAsync_WhenCalledWithRequest_ItShouldReturnHits()
|
||||||
|
{
|
||||||
|
var sdn = _sdnFaker.Generate();
|
||||||
|
sdn.Name = "PUTIN, Vladimir Vladimirovich";
|
||||||
|
|
||||||
|
var address = _addressFaker.Generate();
|
||||||
|
address.SdnId = sdn.Id;
|
||||||
|
|
||||||
|
await _context.Set<Sdn>().AddAsync(sdn);
|
||||||
|
await _context.Set<Address>().AddAsync(address);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
|
||||||
|
var request = new SearchRequest
|
||||||
|
{
|
||||||
|
Name = "Putin",
|
||||||
|
};
|
||||||
|
|
||||||
|
var result = await _searchService.PerformSearchAsync(request);
|
||||||
|
|
||||||
|
result.SearchRequestId.Should().Be(request.Id);
|
||||||
|
result.Hits.Should().HaveCount(1);
|
||||||
|
result.Hits.First().Name.Should().Be(sdn.Name);
|
||||||
|
result.Hits.First().Address.Should().Be(address.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,6 +5,6 @@ static class SearchRequestExtensions
|
|||||||
public static Expression<Func<Sdn, bool>> ToSdnFilter(this SearchRequest request)
|
public static Expression<Func<Sdn, bool>> ToSdnFilter(this SearchRequest request)
|
||||||
{
|
{
|
||||||
var nameParts = request.Name.Split(' ', StringSplitOptions.RemoveEmptyEntries);
|
var nameParts = request.Name.Split(' ', StringSplitOptions.RemoveEmptyEntries);
|
||||||
return sdn => nameParts.All(part => sdn.Name.Contains(part));
|
return sdn => nameParts.All(part => EF.Functions.Like(sdn.Name, "%" + part + "%"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2,12 +2,10 @@ namespace SanctionsSearch.Worker.Persistence;
|
|||||||
|
|
||||||
class EfUnitOfWork(
|
class EfUnitOfWork(
|
||||||
DbContext context,
|
DbContext context,
|
||||||
ILogger<EfUnitOfWork> logger,
|
|
||||||
ILoggerFactory loggerFactory
|
ILoggerFactory loggerFactory
|
||||||
) : IUnitOfWork, IAsyncDisposable, IDisposable
|
) : IUnitOfWork, IAsyncDisposable, IDisposable
|
||||||
{
|
{
|
||||||
private readonly DbContext _context = context;
|
private readonly DbContext _context = context;
|
||||||
private readonly ILogger<EfUnitOfWork> _logger = logger;
|
|
||||||
public ISdnRepository Sdns { get; } = new SdnRepository(context, loggerFactory.CreateLogger<SdnRepository>());
|
public ISdnRepository Sdns { get; } = new SdnRepository(context, loggerFactory.CreateLogger<SdnRepository>());
|
||||||
public IAddressRepository Addresses { get; } = new AddressRepository(context, loggerFactory.CreateLogger<AddressRepository>());
|
public IAddressRepository Addresses { get; } = new AddressRepository(context, loggerFactory.CreateLogger<AddressRepository>());
|
||||||
public IAliasRepository Aliases { get; } = new AliasRepository(context, loggerFactory.CreateLogger<AliasRepository>());
|
public IAliasRepository Aliases { get; } = new AliasRepository(context, loggerFactory.CreateLogger<AliasRepository>());
|
||||||
|
|||||||
Reference in New Issue
Block a user