diff --git a/src/AddressRegistry.Api.BackOffice/Handlers/CreateStreetNameSnapshotSqsHandler.cs b/src/AddressRegistry.Api.BackOffice/Handlers/CreateStreetNameSnapshotSqsHandler.cs index 26304a612..a532b0dd8 100644 --- a/src/AddressRegistry.Api.BackOffice/Handlers/CreateStreetNameSnapshotSqsHandler.cs +++ b/src/AddressRegistry.Api.BackOffice/Handlers/CreateStreetNameSnapshotSqsHandler.cs @@ -28,7 +28,8 @@ public CreateStreetNameSnapshotSqsHandler( { return _backOfficeContext .AddressPersistentIdStreetNamePersistentIds - .SingleOrDefault(x => x.StreetNamePersistentLocalId == request.Request.StreetNamePersistentLocalId) + .FirstOrDefault(x => + x.StreetNamePersistentLocalId == request.Request.StreetNamePersistentLocalId) ?.StreetNamePersistentLocalId.ToString(); } diff --git a/test/AddressRegistry.Tests/BackOffice/Sqs/GivenAddressBackOfficeCreateSnapshotRequest.cs b/test/AddressRegistry.Tests/BackOffice/Sqs/GivenAddressBackOfficeCreateSnapshotRequest.cs new file mode 100644 index 000000000..17d666b3e --- /dev/null +++ b/test/AddressRegistry.Tests/BackOffice/Sqs/GivenAddressBackOfficeCreateSnapshotRequest.cs @@ -0,0 +1,104 @@ +namespace AddressRegistry.Tests.BackOffice.Sqs +{ + using System; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + using AddressRegistry.Api.BackOffice.Abstractions.Requests; + using AddressRegistry.Api.BackOffice.Abstractions.SqsRequests; + using AddressRegistry.Api.BackOffice.Handlers; + using AutoFixture; + using Be.Vlaanderen.Basisregisters.MessageHandling.AwsSqs.Simple; + using Be.Vlaanderen.Basisregisters.Sqs; + using Be.Vlaanderen.Basisregisters.Sqs.Exceptions; + using FluentAssertions; + using global::AutoFixture; + using Infrastructure; + using Moq; + using StreetName; + using TicketingService.Abstractions; + using Xunit; + using Xunit.Abstractions; + + public sealed class GivenAddressBackOfficeCreateSnapshotRequest : AddressRegistryTest + { + private readonly TestBackOfficeContext _backOfficeContext; + + public GivenAddressBackOfficeCreateSnapshotRequest(ITestOutputHelper testOutputHelper) : base(testOutputHelper) + { + Fixture.Customize(new WithFixedStreetNamePersistentLocalId()); + + _backOfficeContext = new FakeBackOfficeContextFactory().CreateDbContext(); + } + + [Fact] + public async Task ThenTicketWithLocationIsCreated() + { + // Arrange + await _backOfficeContext.AddAddressPersistentIdStreetNamePersistentId( + Fixture.Create(), + Fixture.Create()); + await _backOfficeContext.AddAddressPersistentIdStreetNamePersistentId( + Fixture.Create(), + Fixture.Create()); + + var ticketId = Fixture.Create(); + var ticketingMock = new Mock(); + ticketingMock + .Setup(x => x.CreateTicket(It.IsAny>(), CancellationToken.None)) + .ReturnsAsync(ticketId); + + var ticketingUrl = new TicketingUrl(Fixture.Create().ToString()); + + var sqsQueue = new Mock(); + + var sut = new CreateStreetNameSnapshotSqsHandler( + sqsQueue.Object, + ticketingMock.Object, + ticketingUrl, + _backOfficeContext); + + var sqsRequest = new CreateStreetNameSnapshotSqsRequest + { + Request = new CreateStreetNameSnapshotRequest + { + StreetNamePersistentLocalId = Fixture.Create() + } + }; + + // Act + var result = await sut.Handle(sqsRequest, CancellationToken.None); + + // Assert + sqsRequest.TicketId.Should().Be(ticketId); + sqsQueue.Verify(x => x.Copy( + sqsRequest, + It.Is(y => y.MessageGroupId == sqsRequest.Request.StreetNamePersistentLocalId.ToString("D")), + CancellationToken.None)); + result.Location.Should().Be(ticketingUrl.For(ticketId)); + } + + [Fact] + public void WithNoStreetNameFoundByAddressPersistentLocalId_ThrowsAggregateIdNotFound() + { + // Arrange + var sut = new CreateStreetNameSnapshotSqsHandler( + Mock.Of(), + Mock.Of(), + Mock.Of(), + _backOfficeContext); + + // Act + var act = async () => await sut.Handle( + new CreateStreetNameSnapshotSqsRequest + { + Request = Fixture.Create() + }, CancellationToken.None); + + // Assert + act + .Should() + .ThrowAsync(); + } + } +}