Skip to content

Commit

Permalink
feat: or-2519 dont allow to add lidmaatschap to verwijderde andere ve…
Browse files Browse the repository at this point in the history
…reniging
  • Loading branch information
emalfroy committed Oct 30, 2024
1 parent 7355329 commit 948cdf3
Show file tree
Hide file tree
Showing 16 changed files with 359 additions and 415 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ namespace AssociationRegistry.Acties.VoegLidmaatschapToe;

using Framework;
using Vereniging;
using Vereniging.Exceptions;

public class VoegLidmaatschapToeCommandHandler
{
Expand All @@ -19,6 +20,9 @@ await _verenigingRepository.Load<Vereniging>(
VCode.Create(envelope.Command.VCode),
envelope.Metadata.ExpectedVersion);

if (await _verenigingRepository.IsVerwijderd(envelope.Command.Lidmaatschap.AndereVereniging))
throw new VerenigingKanGeenLidWordenVanVerwijderdeVereniging();

var toegevoegdLidmaatschap = vereniging.VoegLidmaatschapToe(envelope.Command.Lidmaatschap);

var result = await _verenigingRepository.Save(vereniging, envelope.Metadata, cancellationToken);
Expand Down
13 changes: 0 additions & 13 deletions src/AssociationRegistry/EventStore/EventStore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -116,19 +116,6 @@ private static void SetHeaders(CommandMetadata metadata, IDocumentSession sessio
session.CorrelationId = metadata.CorrelationId.ToString();
}

private static bool IsEventFromDigitaalVlaanderen(Type eventType)
=> new[]
{
typeof(ContactgegevenWerdOvergenomenUitKBO),
typeof(MaatschappelijkeZetelWerdOvergenomenUitKbo),
typeof(ContactgegevenKonNietOvergenomenWordenUitKBO),
typeof(MaatschappelijkeZetelKonNietOvergenomenWordenUitKbo),
typeof(AdresWerdOvergenomenUitAdressenregister),
typeof(AdresKonNietOvergenomenWordenUitAdressenregister),
typeof(AdresWerdNietGevondenInAdressenregister),
typeof(AdresNietUniekInAdressenregister),
}.Contains(eventType);

public async Task<T> Load<T>(string id, long? expectedVersion) where T : class, IHasVersion, new()
{
await using var session = _documentStore.LightweightSession();
Expand Down
7 changes: 7 additions & 0 deletions src/AssociationRegistry/EventStore/VerenigingsRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,13 @@ public async Task<VerenigingMetRechtspersoonlijkheid> Load(KboNummer kboNummer,
return verenigingMetRechtspersoonlijkheid;
}

public async Task<bool> IsVerwijderd(VCode vCode)
{
var verenigingState = await _eventStore.Load<VerenigingState>(vCode, null);

return verenigingState.IsVerwijderd;
}

private void ThrowIfVerwijderd(VerenigingState verenigingState)
{
if (verenigingState.IsVerwijderd)
Expand Down
534 changes: 154 additions & 380 deletions src/AssociationRegistry/Resources/ExceptionMessages.Designer.cs

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions src/AssociationRegistry/Resources/ExceptionMessages.resx
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,9 @@
<data name="VerenigingKanNietVerwijderdWorden">
<value>Deze vereniging kan niet verwijderd worden.</value>
</data>
<data name="VerenigingKanGeenLidWordenVanVerwijderdeVereniging">
<value>Een vereniging kan geen lid worden van een verwijderde vereniging.</value>
</data>
<data name="VerenigingWerdVerwijderd">
<value>Deze vereniging werd verwijderd.</value>
</data>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
namespace AssociationRegistry.Vereniging.Exceptions;

using Be.Vlaanderen.Basisregisters.AggregateSource;
using Resources;
using System.Runtime.Serialization;

[Serializable]
public class VerenigingKanGeenLidWordenVanVerwijderdeVereniging : DomainException
{
public VerenigingKanGeenLidWordenVanVerwijderdeVereniging() : base(ExceptionMessages.VerenigingKanGeenLidWordenVanVerwijderdeVereniging)
{
}

protected VerenigingKanGeenLidWordenVanVerwijderdeVereniging(SerializationInfo info, StreamingContext context) : base(info, context)
{
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@ public interface IVerenigingsRepository
Task<StreamActionResult> Save(VerenigingsBase vereniging, IDocumentSession session, CommandMetadata metadata, CancellationToken cancellationToken);
Task<TVereniging> Load<TVereniging>(VCode vCode, long? expectedVersion = null) where TVereniging : IHydrate<VerenigingState>, new();
Task<VerenigingMetRechtspersoonlijkheid> Load(KboNummer kboNummer, long? expectedVersion = null);
Task<bool> IsVerwijderd(VCode vCode);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
namespace AssociationRegistry.Test.Admin.Api.Commands.FeitelijkeVereniging.When_Adding_Lidmaatschap.CommandHandling;

using Acties.VoegLidmaatschapToe;
using AssociationRegistry.Framework;
using AutoFixture;
using Common.AutoFixture;
using Common.Framework;
using Common.Scenarios.CommandHandling;
using Events;
using Moq;
using Vereniging;
using Vereniging.Exceptions;
using Xunit;
using Xunit.Categories;

[UnitTest]
public class Given_The_AndereVereniging_Is_Verwijderd
{
[Fact]
public async Task Then_It_Saves_A_Lidmaatschap()
{
var fixture = new Fixture().CustomizeDomain();
var repositoryMock = new Mock<IVerenigingsRepository>();

var scenario = new FeitelijkeVerenigingWerdGeregistreerdScenario();
var lidmaatschap = fixture.Create<Lidmaatschap>();

repositoryMock
.Setup(x => x.IsVerwijderd(lidmaatschap.AndereVereniging))
.ReturnsAsync(true);

var commandHandler = new VoegLidmaatschapToeCommandHandler(repositoryMock.Object);

var command = new VoegLidmaatschapToeCommand(scenario.VCode,
lidmaatschap);

await Assert.ThrowsAsync<VerenigingKanGeenLidWordenVanVerwijderdeVereniging>(
async () => await commandHandler.Handle(
new CommandEnvelope<VoegLidmaatschapToeCommand>(command, fixture.Create<CommandMetadata>())));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ public async Task<VerenigingMetRechtspersoonlijkheid> Load(KboNummer kboNummer,
return await Task.FromResult(vereniging);
}

public Task<bool> IsVerwijderd(VCode vCode)
=> Task.FromResult(false);

public void ShouldHaveLoaded<TVereniging>(params string[] keys) where TVereniging : IHydrate<VerenigingState>, new()
{
_invocationsLoad.Should().BeEquivalentTo(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
namespace AssociationRegistry.Test.E2E.Scenarios.Givens.FeitelijkeVereniging;

using Events;
using EventStore;
using AssociationRegistry.Framework;
using AssociationRegistry.Test.Common.AutoFixture;
using Vereniging;
using AutoFixture;
using Requests.FeitelijkeVereniging;

public class MultipleWerdGeregistreerdScenario : Framework.TestClasses.IScenario
{
public FeitelijkeVerenigingWerdGeregistreerd FeitelijkeVerenigingWerdGeregistreerd { get; set; }
public FeitelijkeVerenigingWerdGeregistreerd AndereFeitelijkeVerenigingWerdGeregistreerd { get; set; }
private CommandMetadata Metadata;

public MultipleWerdGeregistreerdScenario()
{
}

public async Task<Dictionary<string, IEvent[]>> GivenEvents(IVCodeService service)
{
var fixture = new Fixture().CustomizeAdminApi();

FeitelijkeVerenigingWerdGeregistreerd = fixture.Create<FeitelijkeVerenigingWerdGeregistreerd>() with
{
VCode = await service.GetNext(),
};
AndereFeitelijkeVerenigingWerdGeregistreerd = fixture.Create<FeitelijkeVerenigingWerdGeregistreerd>() with
{
VCode = await service.GetNext(),
};

Metadata = fixture.Create<CommandMetadata>() with { ExpectedVersion = null };

return new Dictionary<string, IEvent[]>()
{
{FeitelijkeVerenigingWerdGeregistreerd.VCode, [FeitelijkeVerenigingWerdGeregistreerd] },
{AndereFeitelijkeVerenigingWerdGeregistreerd.VCode, [AndereFeitelijkeVerenigingWerdGeregistreerd] },
};
}

public IEvent[] GivenEvents()
=> [FeitelijkeVerenigingWerdGeregistreerd];

public StreamActionResult Result { get; set; } = null!;

public CommandMetadata GetCommandMetadata()
=> Metadata;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,16 @@ namespace AssociationRegistry.Test.E2E.Scenarios.Requests.FeitelijkeVereniging;
using AutoFixture;
using Common.AutoFixture;
using Framework.ApiSetup;
using Givens.FeitelijkeVereniging;
using Marten.Events;
using System.Net;
using Vereniging;

public class VoegLidmaatschapToeRequestFactory : ITestRequestFactory<VoegLidmaatschapToeRequest>
{
private readonly IFeitelijkeVerenigingWerdGeregistreerdScenario _scenario;
private readonly MultipleWerdGeregistreerdScenario _scenario;

public VoegLidmaatschapToeRequestFactory(IFeitelijkeVerenigingWerdGeregistreerdScenario scenario)
public VoegLidmaatschapToeRequestFactory(MultipleWerdGeregistreerdScenario scenario)
{
_scenario = scenario;
}
Expand All @@ -25,7 +26,7 @@ public async Task<RequestResult<VoegLidmaatschapToeRequest>> ExecuteRequest(IApi
var date = fixture.Create<DateOnly>();
var request = new VoegLidmaatschapToeRequest
{
AndereVereniging = _scenario.FeitelijkeVerenigingWerdGeregistreerd.VCode,
AndereVereniging = _scenario.AndereFeitelijkeVerenigingWerdGeregistreerd.VCode,
Van = date,
Tot = date.AddDays(new Random().Next(1, 99)),
Identificatie = fixture.Create<string>(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ namespace AssociationRegistry.Test.E2E.When_Voeg_Lidmaatschap_Toe;
public class VoegLidmaatschapToeContext: TestContextBase<VoegLidmaatschapToeRequest>
{
public VCode VCode => RequestResult.VCode;
public FeitelijkeVerenigingWerdGeregistreerdScenario Scenario { get; }
public MultipleWerdGeregistreerdScenario Scenario { get; }

public VoegLidmaatschapToeContext(FullBlownApiSetup apiSetup)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
namespace AssociationRegistry.Test.VerenigingsRepositoryTests;

using AutoFixture;
using Common.AutoFixture;
using Events;
using EventStore;
using FluentAssertions;
using Framework;
using Moq;
using Vereniging;
using Xunit;

public class When_Checking_If_Vereniging_IsVerwijderd
{
private readonly Fixture _fixture;

public When_Checking_If_Vereniging_IsVerwijderd()
{
_fixture = new Fixture().CustomizeDomain();
}

[Fact]
public async Task Given_A_Vereniging_IsVerwijderd()
{
var eventStoreMock = new Mock<IEventStore>();

var verenigingState = new VerenigingState
{
IsVerwijderd = true,
};

eventStoreMock.Setup(x => x.Load<VerenigingState>(It.IsAny<string>(), null))
.ReturnsAsync(verenigingState);

var sut = new VerenigingsRepository(eventStoreMock.Object);

var actual = await sut.IsVerwijderd(VCode.Create(_fixture.Create<VCode>()));

actual.Should().BeTrue();
}

[Fact]
public async Task Given_A_Vereniging_IsNietVerwijderd()
{
var eventStoreMock = new Mock<IEventStore>();

eventStoreMock.Setup(x => x.Load<VerenigingState>(It.IsAny<string>(), null))
.ReturnsAsync(new VerenigingState());

var sut = new VerenigingsRepository(eventStoreMock.Object);

var actual = await sut.IsVerwijderd(VCode.Create(_fixture.Create<VCode>()));

actual.Should().BeFalse();
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
namespace AssociationRegistry.Test.When_Loading_A_Vereniging;

namespace AssociationRegistry.Test.VerenigingsRepositoryTests.When_Loading_A_Vereniging;

using AssociationRegistry.Events;
using AssociationRegistry.EventStore;
using AssociationRegistry.Test.Framework;
using AssociationRegistry.Test.Framework.Customizations;
using AssociationRegistry.Vereniging;
using AssociationRegistry.Vereniging.Exceptions;
using AutoFixture;
using Events;
using EventStore;
using FluentAssertions;
using Framework;
using Framework.Customizations;
using Vereniging;
using Vereniging.Exceptions;
using Xunit;
using Xunit.Categories;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
namespace AssociationRegistry.Test.When_saving_a_vereniging;
namespace AssociationRegistry.Test.VerenigingsRepositoryTests.When_saving_a_vereniging;

using AssociationRegistry.Events;
using AssociationRegistry.EventStore;
using AssociationRegistry.Framework;
using AssociationRegistry.Test.Framework;
using AssociationRegistry.Vereniging;
using AutoFixture;
using Events;
using EventStore;
using FluentAssertions;
using Framework;
using Vereniging;
using Xunit;
using Xunit.Categories;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
namespace AssociationRegistry.Test.When_saving_a_vereniging;
namespace AssociationRegistry.Test.VerenigingsRepositoryTests.When_saving_a_vereniging;

using AssociationRegistry.Test.Common.AutoFixture;
using AssociationRegistry.Test.Framework;
using AssociationRegistry.Vereniging;
using AssociationRegistry.Vereniging.Exceptions;
using AutoFixture;
using Common.AutoFixture;
using Framework;
using Vereniging;
using Vereniging.Exceptions;
using Xunit;
using Xunit.Categories;

Expand Down

0 comments on commit 948cdf3

Please sign in to comment.