Skip to content

Commit

Permalink
feat: or-2189 laatste vertegenwoordiger mag niet verwijderd worden
Browse files Browse the repository at this point in the history
  • Loading branch information
emalfroy authored and koenmetsu committed Aug 22, 2024
1 parent 7e21870 commit ecd7f3c
Show file tree
Hide file tree
Showing 6 changed files with 103 additions and 0 deletions.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions src/AssociationRegistry/Resources/ExceptionMessages.resx
Original file line number Diff line number Diff line change
Expand Up @@ -229,4 +229,7 @@
<data name="LaatsteHoofdActiviteitKanNietVerwijderdWorden">
<value>De vereniging moet minstens 1 hoofdactiviteit hebben. Je kan de laatste hoofdactiviteit niet verwijderen.</value>
</data>
<data name="LaatsteVertegenwoordigerKanNietVerwijderdWorden">
<value>De vereniging moet minstens 1 vertegenwoordiger hebben. Je kan de laatste vertegenwoordiger niet verwijderen.</value>
</data>
</root>
2 changes: 2 additions & 0 deletions src/AssociationRegistry/Vereniging/Vereniging.cs
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,8 @@ public void WijzigVertegenwoordiger(

public void VerwijderVertegenwoordiger(int vertegenwoordigerId)
{
Throw<LaatsteVertegenwoordigerKanNietVerwijderdWorden>.If(State.Vertegenwoordigers.Count == 1);

var vertegenwoordiger = State.Vertegenwoordigers.Verwijder(vertegenwoordigerId);
AddEvent(VertegenwoordigerWerdVerwijderd.With(vertegenwoordiger));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
namespace AssociationRegistry.Vereniging.Exceptions;

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

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

protected LaatsteVertegenwoordigerKanNietVerwijderdWorden(SerializationInfo info, StreamingContext context) : base(info, context)
{
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
namespace AssociationRegistry.Test.Admin.Api.FeitelijkeVereniging.When_Removing_Vertegenwoordiger.CommandHandling;

using Acties.VerwijderVertegenwoordiger;
using AssociationRegistry.Framework;
using AutoFixture;
using Fakes;
using Fixtures.Scenarios.CommandHandling;
using Framework;
using Vereniging;
using Vereniging.Exceptions;
using Xunit;
using Xunit.Categories;

[UnitTest]
public class With_One_Vertegenwoordiger
{
private readonly VerenigingRepositoryMock _verenigingRepositoryMock;
private readonly FeitelijkeVerenigingWerdGeregistreerdWithOneVertegenwoordigerScenario _scenario;
private readonly Fixture _fixture;

public With_One_Vertegenwoordiger()
{
_scenario = new FeitelijkeVerenigingWerdGeregistreerdWithOneVertegenwoordigerScenario();
_verenigingRepositoryMock = new VerenigingRepositoryMock(_scenario.GetVerenigingState());
_fixture = new Fixture().CustomizeAdminApi();
}

[Fact]
public async Task Then_Throws_LaatsteVertegenwoordigerKanNietVerwijderdWordenException()
{
var command = new VerwijderVertegenwoordigerCommand(_scenario.VCode, _scenario.VertegenwoordigerId);
var commandMetadata = _fixture.Create<CommandMetadata>();
var commandHandler = new VerwijderVertegenwoordigerCommandHandler(_verenigingRepositoryMock);
await Assert.ThrowsAsync<LaatsteVertegenwoordigerKanNietVerwijderdWorden>(async () => await commandHandler.Handle(
new CommandEnvelope<VerwijderVertegenwoordigerCommand>(
command, commandMetadata),
CancellationToken.None));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
namespace AssociationRegistry.Test.Admin.Api.Fixtures.Scenarios.CommandHandling;

using AssociationRegistry.Framework;
using AutoFixture;
using Events;
using Framework;
using Vereniging;

public class FeitelijkeVerenigingWerdGeregistreerdWithOneVertegenwoordigerScenario : CommandhandlerScenarioBase
{
public FeitelijkeVerenigingWerdGeregistreerdWithOneVertegenwoordigerScenario()
{
var fixture = new Fixture().CustomizeAdminApi();
VCode = fixture.Create<VCode>();
FeitelijkeVerenigingWerdGeregistreerd = fixture.Create<FeitelijkeVerenigingWerdGeregistreerd>() with
{
VCode = VCode,
Vertegenwoordigers = new []{fixture.Create<Registratiedata.Vertegenwoordiger>()}
};

VertegenwoordigerId = FeitelijkeVerenigingWerdGeregistreerd.Vertegenwoordigers.First().VertegenwoordigerId;
}

public override VCode VCode { get; }
public FeitelijkeVerenigingWerdGeregistreerd FeitelijkeVerenigingWerdGeregistreerd { get; }
public int VertegenwoordigerId { get; }
public override IEnumerable<IEvent> Events()
{
return new IEvent[]
{
FeitelijkeVerenigingWerdGeregistreerd,
};
}
}

0 comments on commit ecd7f3c

Please sign in to comment.