From 4eef7af9dbf321fd77c24b185bd5236317d00253 Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Sun, 1 Sep 2024 18:26:46 -0500 Subject: [PATCH] tests: begin adding tests related to performing searches --- .../Integration/DatabaseMaintainerTests.cs | 3 +- .../Integration/EfUnitOfWorkTests.cs | 4 +- .../Integration/SearchServiceTests.cs | 51 +++++++++++++++++++ .../Extensions/SearchRequestExtensions.cs | 2 +- .../Persistence/EfUnitOfWork.cs | 2 - 5 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 src/SanctionsSearch.Worker.Tests/Integration/SearchServiceTests.cs diff --git a/src/SanctionsSearch.Worker.Tests/Integration/DatabaseMaintainerTests.cs b/src/SanctionsSearch.Worker.Tests/Integration/DatabaseMaintainerTests.cs index a2d538f..b1b50e0 100644 --- a/src/SanctionsSearch.Worker.Tests/Integration/DatabaseMaintainerTests.cs +++ b/src/SanctionsSearch.Worker.Tests/Integration/DatabaseMaintainerTests.cs @@ -36,10 +36,9 @@ public class DatabaseMaintainerTests : DatabaseTest, IDisposable _ofacFileServiceOptions ); - var uowLogger = _loggerFactory.CreateLogger(); var dbMaintainerLogger = _loggerFactory.CreateLogger(); - var uow = new EfUnitOfWork(_context, uowLogger, _loggerFactory); + var uow = new EfUnitOfWork(_context, _loggerFactory); _databaseMaintainer = new DatabaseMaintainer(uow, ofacFileService, dbMaintainerLogger); } diff --git a/src/SanctionsSearch.Worker.Tests/Integration/EfUnitOfWorkTests.cs b/src/SanctionsSearch.Worker.Tests/Integration/EfUnitOfWorkTests.cs index b1481fc..3e2fe58 100644 --- a/src/SanctionsSearch.Worker.Tests/Integration/EfUnitOfWorkTests.cs +++ b/src/SanctionsSearch.Worker.Tests/Integration/EfUnitOfWorkTests.cs @@ -11,9 +11,7 @@ public class EfUnitOfWorkTests : DatabaseTest public EfUnitOfWorkTests() { var loggerFactory = LoggerFactory.Create(c => c.ClearProviders()); - var logger = loggerFactory.CreateLogger(); - - _uow = new(_context, logger, loggerFactory); + _uow = new(_context, loggerFactory); } [Fact] diff --git a/src/SanctionsSearch.Worker.Tests/Integration/SearchServiceTests.cs b/src/SanctionsSearch.Worker.Tests/Integration/SearchServiceTests.cs new file mode 100644 index 0000000..51d9f9d --- /dev/null +++ b/src/SanctionsSearch.Worker.Tests/Integration/SearchServiceTests.cs @@ -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().AddAsync(sdn); + await _context.Set
().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()); + } +} \ No newline at end of file diff --git a/src/SanctionsSearch.Worker/Extensions/SearchRequestExtensions.cs b/src/SanctionsSearch.Worker/Extensions/SearchRequestExtensions.cs index ec8993f..d96f9ef 100644 --- a/src/SanctionsSearch.Worker/Extensions/SearchRequestExtensions.cs +++ b/src/SanctionsSearch.Worker/Extensions/SearchRequestExtensions.cs @@ -5,6 +5,6 @@ static class SearchRequestExtensions public static Expression> ToSdnFilter(this SearchRequest request) { 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 + "%")); } } \ No newline at end of file diff --git a/src/SanctionsSearch.Worker/Persistence/EfUnitOfWork.cs b/src/SanctionsSearch.Worker/Persistence/EfUnitOfWork.cs index f7aa6d7..185bba4 100644 --- a/src/SanctionsSearch.Worker/Persistence/EfUnitOfWork.cs +++ b/src/SanctionsSearch.Worker/Persistence/EfUnitOfWork.cs @@ -2,12 +2,10 @@ namespace SanctionsSearch.Worker.Persistence; class EfUnitOfWork( DbContext context, - ILogger logger, ILoggerFactory loggerFactory ) : IUnitOfWork, IAsyncDisposable, IDisposable { private readonly DbContext _context = context; - private readonly ILogger _logger = logger; public ISdnRepository Sdns { get; } = new SdnRepository(context, loggerFactory.CreateLogger()); public IAddressRepository Addresses { get; } = new AddressRepository(context, loggerFactory.CreateLogger()); public IAliasRepository Aliases { get; } = new AliasRepository(context, loggerFactory.CreateLogger());