From 32e3b873493236ecb0233a16117dc2a4271c7217 Mon Sep 17 00:00:00 2001 From: Quinten Van Assche Date: Thu, 23 Nov 2023 16:50:08 +0100 Subject: [PATCH] feat: or-1972 delete vereniging from index when VerenigingIsGestopt --- .../DuplicateDetectionProjectionHandler.cs | 3 + .../Projections/Search/ElasticRepository.cs | 8 ++ .../Projections/Search/IElasticRepository.cs | 1 + .../With_NaamGewijzigd.cs | 4 +- .../Fixtures/EventsInDbScenariosFixture.cs | 12 +-- ...elds_ForDuplicateDetection_WithAnalyzer.cs | 17 ++-- ...rd_MetBestaandeMoeder_VoorNaamWijzigen.cs} | 8 +- ...tBestaandeMoeder_VoorNaamWerdGewijzigd.cs} | 8 +- .../Given_A_Stopzetting.cs | 89 +++++++++++++++++++ ...Geregistreerd_AndThen_NaamWerdGewijzigd.cs | 4 +- 10 files changed, 131 insertions(+), 23 deletions(-) rename test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/EventsInDb/{V052_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWijzigen.cs => V053_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWijzigen.cs} (91%) rename test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/EventsInDb/{V054_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWerdGewijzigd.cs => V055_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWerdGewijzigd.cs} (92%) create mode 100644 test/AssociationRegistry.Test.Admin.Api/WhenDetectingDuplicates/Given_A_Stopzetting.cs diff --git a/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/DuplicateDetection/DuplicateDetectionProjectionHandler.cs b/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/DuplicateDetection/DuplicateDetectionProjectionHandler.cs index be10b661e..8a65d39a6 100644 --- a/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/DuplicateDetection/DuplicateDetectionProjectionHandler.cs +++ b/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/DuplicateDetection/DuplicateDetectionProjectionHandler.cs @@ -89,6 +89,9 @@ public async Task Handle(EventEnvelope message) public async Task Handle(EventEnvelope message) => await _elasticRepository.RemoveLocatie(message.VCode, message.Data.Locatie.LocatieId); + public async Task Handle(EventEnvelope message) + => await _elasticRepository.Remove(message.VCode); + private static DuplicateDetectionDocument.Locatie Map(Registratiedata.Locatie locatie) => new() { diff --git a/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/ElasticRepository.cs b/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/ElasticRepository.cs index 6cd08cfd9..2947f9560 100644 --- a/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/ElasticRepository.cs +++ b/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/ElasticRepository.cs @@ -102,4 +102,12 @@ public async Task RemoveLocatie(string id, int locatieId) where T : class // todo: log ? (should never happen in test/staging/production) throw new IndexDocumentFailed(response.DebugInformation); } + + public async Task Remove(string id) where T : class + { + var response =await _elasticClient.DeleteAsync(id); + if (!response.IsValid) + // todo: log ? (should never happen in test/staging/production) + throw new IndexDocumentFailed(response.DebugInformation); + } } diff --git a/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/IElasticRepository.cs b/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/IElasticRepository.cs index a5f61f9ae..4399e8e96 100644 --- a/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/IElasticRepository.cs +++ b/src/AssociationRegistry.Admin.ProjectionHost/Projections/Search/IElasticRepository.cs @@ -16,4 +16,5 @@ Task IndexAsync(TDocument document) Task AppendLocatie(string id, ILocatie locatie) where TDocument : class; Task RemoveLocatie(string id, int locatieId) where TDocument : class; Task UpdateLocatie(string id, ILocatie locatie) where TDocument : class; + Task Remove(string id) where T : class; } diff --git a/test/AssociationRegistry.Test.Admin.Api/Afdeling/When_WijzigBasisGegevens/With_NaamGewijzigd.cs b/test/AssociationRegistry.Test.Admin.Api/Afdeling/When_WijzigBasisGegevens/With_NaamGewijzigd.cs index 6dbcf4281..faed63fb7 100644 --- a/test/AssociationRegistry.Test.Admin.Api/Afdeling/When_WijzigBasisGegevens/With_NaamGewijzigd.cs +++ b/test/AssociationRegistry.Test.Admin.Api/Afdeling/When_WijzigBasisGegevens/With_NaamGewijzigd.cs @@ -18,12 +18,12 @@ public sealed class When_NaamGewijzigd_Setup { public WijzigBasisgegevensRequest Request { get; } - public V052_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWijzigen Scenario { get; } + public V053_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWijzigen Scenario { get; } public HttpResponseMessage Response { get; } public When_NaamGewijzigd_Setup(EventsInDbScenariosFixture fixture) { - Scenario = fixture.V052AfdelingWerdGeregistreerdMetBestaandeMoederVoorNaamWijzigen; + Scenario = fixture.V053AfdelingWerdGeregistreerdMetBestaandeMoederVoorNaamWijzigen; Request = new Fixture().CustomizeAdminApi().Create(); diff --git a/test/AssociationRegistry.Test.Admin.Api/Fixtures/EventsInDbScenariosFixture.cs b/test/AssociationRegistry.Test.Admin.Api/Fixtures/EventsInDbScenariosFixture.cs index 498f36d4c..a92927ac1 100644 --- a/test/AssociationRegistry.Test.Admin.Api/Fixtures/EventsInDbScenariosFixture.cs +++ b/test/AssociationRegistry.Test.Admin.Api/Fixtures/EventsInDbScenariosFixture.cs @@ -126,11 +126,11 @@ public readonly V045_VerenigingMetRechtspersoonlijkheidWerdGeregistreerd_With_Co public readonly V046_FeitelijkeVerenigingWerdGeregistreerd_ForWijzigStartdatum V046FeitelijkeVerenigingWerdGeregistreerdForWijzigStartdatum = new(); - public readonly V052_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWijzigen - V052AfdelingWerdGeregistreerdMetBestaandeMoederVoorNaamWijzigen = new(); + public readonly V053_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWijzigen + V053AfdelingWerdGeregistreerdMetBestaandeMoederVoorNaamWijzigen = new(); - public readonly V054_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWerdGewijzigd - V054AfdelingWerdGeregistreerdMetBestaandeMoederVoorNaamWerdGewijzigd = new(); + public readonly V055_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWerdGewijzigd + V055AfdelingWerdGeregistreerdMetBestaandeMoederVoorNaamWerdGewijzigd = new(); public readonly V047_FeitelijkeVerenigingWerdGeregistreerd_WithMinimalFields_ForDuplicateDetection_WithAnalyzer @@ -184,8 +184,8 @@ protected override async Task Given() V044VerenigingMetRechtspersoonlijkheidWerdGeregistreerdWithWijzigMaatschappelijkeZetelVolgensKbo, V045VerenigingMetRechtspersoonlijkheidWerdGeregistreerdWithContactgegevenFromKboForWijzigen, V046FeitelijkeVerenigingWerdGeregistreerdForWijzigStartdatum, - V052AfdelingWerdGeregistreerdMetBestaandeMoederVoorNaamWijzigen, - V054AfdelingWerdGeregistreerdMetBestaandeMoederVoorNaamWerdGewijzigd, + V053AfdelingWerdGeregistreerdMetBestaandeMoederVoorNaamWijzigen, + V055AfdelingWerdGeregistreerdMetBestaandeMoederVoorNaamWerdGewijzigd, }; foreach (var scenario in scenarios) diff --git a/test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/EventsInDb/V047_FeitelijkeVerenigingWerdGeregistreerd_WithMinimalFields_ForDuplicateDetection_WithAnalyzer.cs b/test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/EventsInDb/V047_FeitelijkeVerenigingWerdGeregistreerd_WithMinimalFields_ForDuplicateDetection_WithAnalyzer.cs index 31c44bd15..e0a8e5b49 100644 --- a/test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/EventsInDb/V047_FeitelijkeVerenigingWerdGeregistreerd_WithMinimalFields_ForDuplicateDetection_WithAnalyzer.cs +++ b/test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/EventsInDb/V047_FeitelijkeVerenigingWerdGeregistreerd_WithMinimalFields_ForDuplicateDetection_WithAnalyzer.cs @@ -31,8 +31,9 @@ public V047_FeitelijkeVerenigingWerdGeregistreerd_WithMinimalFields_ForDuplicate * 2 karakters van plaats wisselen → Pottestampers = Pottestapmers **/ - var verenigingWerdGeregistreerdOmTeWijzigen = VerenigingWerdGeregistreerd(fixture, naam: "XXX van Technologïeënthusiasten: Inováçie & Ëntwikkeling", vCode: "V9999047", - postcode: "9832", gemeente: "Neder-over-opper-onder-heembeek"); + var verenigingWerdGeregistreerdOmTeWijzigen = VerenigingWerdGeregistreerd( + fixture, naam: "XXX van Technologïeënthusiasten: Inováçie & Ëntwikkeling", vCode: "V9999047", + postcode: "9832", gemeente: "Neder-over-opper-onder-heembeek"); var locatie = fixture.Create(); var locatieTeVerwijderen = fixture.Create(); @@ -49,12 +50,18 @@ public V047_FeitelijkeVerenigingWerdGeregistreerd_WithMinimalFields_ForDuplicate .Select(Registratiedata.HoofdactiviteitVerenigingsloket.With) .ToArray()), new LocatieWerdToegevoegd(locatie), - new LocatieWerdGewijzigd(locatie with { Naam = "Erembodegem"}), + new LocatieWerdGewijzigd(locatie with { Naam = "Erembodegem" }), new LocatieWerdToegevoegd(locatieTeVerwijderen), - }) .ToArray(); + var verenigingWerdGeregistreerdOmTeStoppen = VerenigingWerdGeregistreerd( + fixture, naam: "Vereniging van Technologïeënthusiasten: Inováçie & Ëntwikkeling", vCode: "V9999052", + postcode: "9832", gemeente: "Neder-over-opper-onder-heembeek"); + + verenigingWerdGeregistreerdOmTeStoppen.Item2 = verenigingWerdGeregistreerdOmTeStoppen.Item2.Append( + new VerenigingWerdGestopt(DateOnly.MaxValue)).ToArray(); + EventsPerVCode = new[] { verenigingWerdGeregistreerdOmTeWijzigen, @@ -64,7 +71,7 @@ public V047_FeitelijkeVerenigingWerdGeregistreerd_WithMinimalFields_ForDuplicate VerenigingWerdGeregistreerd(fixture, naam: "Sint-Servaas", vCode: "V9999050", postcode: "8800", gemeente: "Roeselare"), VerenigingWerdGeregistreerd(fixture, naam: "De pottestampers", vCode: "V9999051", postcode: "9830", gemeente: "Heist-op-den-Berg"), - + verenigingWerdGeregistreerdOmTeStoppen, }; Metadata = fixture.Create() with { ExpectedVersion = null }; diff --git a/test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/EventsInDb/V052_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWijzigen.cs b/test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/EventsInDb/V053_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWijzigen.cs similarity index 91% rename from test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/EventsInDb/V052_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWijzigen.cs rename to test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/EventsInDb/V053_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWijzigen.cs index 39477f9f9..692e009a9 100644 --- a/test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/EventsInDb/V052_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWijzigen.cs +++ b/test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/EventsInDb/V053_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWijzigen.cs @@ -6,17 +6,17 @@ namespace AssociationRegistry.Test.Admin.Api.Fixtures.Scenarios.EventsInDb; using Framework; using AutoFixture; -public class V052_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWijzigen : IEventsInDbScenario +public class V053_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWijzigen : IEventsInDbScenario { public readonly VerenigingMetRechtspersoonlijkheidWerdGeregistreerd MoederWerdGeregistreerd; public readonly AfdelingWerdGeregistreerd AfdelingWerdGeregistreerd; public readonly CommandMetadata Metadata; - public V052_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWijzigen() + public V053_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWijzigen() { var fixture = new Fixture().CustomizeAdminApi(); - VCodeMoeder = "V9999052"; + VCodeMoeder = "V9999053"; NaamMoeder = "De coolste moeder"; MoederWerdGeregistreerd = fixture.Create() with { @@ -25,7 +25,7 @@ public V052_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWijzigen() }; KboNummerMoeder = MoederWerdGeregistreerd.KboNummer; - VCode = "V9999053"; + VCode = "V9999054"; AfdelingWerdGeregistreerd = fixture.Create() with { VCode = VCode, diff --git a/test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/EventsInDb/V054_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWerdGewijzigd.cs b/test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/EventsInDb/V055_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWerdGewijzigd.cs similarity index 92% rename from test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/EventsInDb/V054_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWerdGewijzigd.cs rename to test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/EventsInDb/V055_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWerdGewijzigd.cs index 4ead2d798..d9391e4b6 100644 --- a/test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/EventsInDb/V054_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWerdGewijzigd.cs +++ b/test/AssociationRegistry.Test.Admin.Api/Fixtures/Scenarios/EventsInDb/V055_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWerdGewijzigd.cs @@ -7,21 +7,21 @@ namespace AssociationRegistry.Test.Admin.Api.Fixtures.Scenarios.EventsInDb; using AutoFixture; using Vereniging; -public class V054_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWerdGewijzigd : IEventsInDbScenario +public class V055_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWerdGewijzigd : IEventsInDbScenario { public readonly VerenigingMetRechtspersoonlijkheidWerdGeregistreerd MoederWerdGeregistreerd; public readonly AfdelingWerdGeregistreerd AfdelingWerdGeregistreerd; public readonly NaamWerdGewijzigd NaamWerdGewijzigd; public readonly CommandMetadata Metadata; - public V054_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWerdGewijzigd() + public V055_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWerdGewijzigd() { var fixture = new Fixture().CustomizeAdminApi(); - VCodeMoeder = "V9999054"; + VCodeMoeder = "V9999055"; NaamMoeder = "De coolste moeder"; - VCode = "V9999050"; + VCode = "V9999056"; NaamAfdeling = "De coolste afdeling"; MoederWerdGeregistreerd = fixture.Create() with diff --git a/test/AssociationRegistry.Test.Admin.Api/WhenDetectingDuplicates/Given_A_Stopzetting.cs b/test/AssociationRegistry.Test.Admin.Api/WhenDetectingDuplicates/Given_A_Stopzetting.cs new file mode 100644 index 000000000..082009ea8 --- /dev/null +++ b/test/AssociationRegistry.Test.Admin.Api/WhenDetectingDuplicates/Given_A_Stopzetting.cs @@ -0,0 +1,89 @@ +namespace AssociationRegistry.Test.Admin.Api.WhenDetectingDuplicates; + +using AssociationRegistry.Admin.Api.Verenigingen.Common; +using AssociationRegistry.Admin.Api.Verenigingen.Registreer.FeitelijkeVereniging.RequetsModels; +using AutoFixture; +using Events; +using Fixtures; +using Fixtures.Scenarios.EventsInDb; +using FluentAssertions; +using Framework; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.Net; +using Vereniging; +using Xunit; +using Xunit.Categories; +using Adres = AssociationRegistry.Admin.Api.Verenigingen.Common.Adres; + +[Collection(nameof(AdminApiCollection))] +[Category("AdminApi")] +[IntegrationTest] +public class Given_A_Stopzetting +{ + + private readonly AdminApiClient _adminApiClient; + private readonly Fixture _fixture; + private readonly V047_FeitelijkeVerenigingWerdGeregistreerd_WithMinimalFields_ForDuplicateDetection_WithAnalyzer _scenario; + + public Given_A_Stopzetting(EventsInDbScenariosFixture fixture) + { + _fixture = new Fixture().CustomizeAdminApi(); + _adminApiClient = fixture.AdminApiClient; + _scenario = fixture.V047FeitelijkeVerenigingWerdGeregistreerdWithMinimalFieldsForDuplicateDetectionWithAnalyzer; + } + + [Theory] + [InlineData("V9999052", "Vereniging van Technologïeënthusiasten: Inováçie & Ëntwikkeling")] + public async Task? Then_The_Stopped_Duplicate_IsNotDetected( + string duplicatesShouldNotContainThisVCode, + string naam) + { + var request = CreateRegistreerFeitelijkeVerenigingRequest(duplicatesShouldNotContainThisVCode, naam); + + var response = await _adminApiClient.RegistreerFeitelijkeVereniging(JsonConvert.SerializeObject(request)); + response.StatusCode.Should().Be(HttpStatusCode.Conflict); + + var responseContent = await response.Content.ReadAsStringAsync(); + + var vCodes = ExtractDuplicateVCode(responseContent); + + vCodes.Should().NotContain(duplicatesShouldNotContainThisVCode); + } + + private RegistreerFeitelijkeVerenigingRequest CreateRegistreerFeitelijkeVerenigingRequest(string vCode, string naam) + { + var @event = _scenario.EventsPerVCode + .Single(t => t.Item1.Value == vCode) + .Item2 + .First() as FeitelijkeVerenigingWerdGeregistreerd; + + return new RegistreerFeitelijkeVerenigingRequest + { + Naam = naam, + Startdatum = null, + KorteNaam = "", + KorteBeschrijving = "", + Locaties = new[] + { + new ToeTeVoegenLocatie + { + Locatietype = Locatietype.Correspondentie, + Adres = new Adres + { + Straatnaam = _fixture.Create(), + Huisnummer = _fixture.Create(), + Postcode = @event.Locaties.First().Adres.Postcode, + Gemeente = @event.Locaties.First().Adres.Gemeente, + Land = _fixture.Create(), + }, + }, + }, + }; + } + + private static IEnumerable ExtractDuplicateVCode(string responseContent) + => JObject.Parse(responseContent) + .SelectTokens("$.mogelijkeDuplicateVerenigingen[*].vCode") + .Select(x => x.ToString()); +} diff --git a/test/AssociationRegistry.Test.Admin.Api/When_Retrieving_Detail/Given_MoederWerdGeregistreerd_And_Then_AfdelingWerdGeregistreerd_AndThen_NaamWerdGewijzigd.cs b/test/AssociationRegistry.Test.Admin.Api/When_Retrieving_Detail/Given_MoederWerdGeregistreerd_And_Then_AfdelingWerdGeregistreerd_AndThen_NaamWerdGewijzigd.cs index 806324c96..665ca3b2f 100644 --- a/test/AssociationRegistry.Test.Admin.Api/When_Retrieving_Detail/Given_MoederWerdGeregistreerd_And_Then_AfdelingWerdGeregistreerd_AndThen_NaamWerdGewijzigd.cs +++ b/test/AssociationRegistry.Test.Admin.Api/When_Retrieving_Detail/Given_MoederWerdGeregistreerd_And_Then_AfdelingWerdGeregistreerd_AndThen_NaamWerdGewijzigd.cs @@ -16,11 +16,11 @@ namespace AssociationRegistry.Test.Admin.Api.When_Retrieving_Detail; public class Given_MoederWerdGeregistreerd_And_Then_AfdelingWerdGeregistreerd_AndThen_NaamWerdGewijzigd { private readonly AdminApiClient _adminApiClient; - private readonly V054_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWerdGewijzigd _scenario; + private readonly V055_AfdelingWerdGeregistreerd_MetBestaandeMoeder_VoorNaamWerdGewijzigd _scenario; public Given_MoederWerdGeregistreerd_And_Then_AfdelingWerdGeregistreerd_AndThen_NaamWerdGewijzigd(EventsInDbScenariosFixture fixture) { - _scenario = fixture.V054AfdelingWerdGeregistreerdMetBestaandeMoederVoorNaamWerdGewijzigd; + _scenario = fixture.V055AfdelingWerdGeregistreerdMetBestaandeMoederVoorNaamWerdGewijzigd; _adminApiClient = fixture.DefaultClient; }