Skip to content

Commit

Permalink
feat: or-1972 validate startdatum before dupplicate check
Browse files Browse the repository at this point in the history
  • Loading branch information
QuintenGreenstack committed Nov 21, 2023
1 parent 2876d56 commit 5970558
Show file tree
Hide file tree
Showing 120 changed files with 374 additions and 190 deletions.
Original file line number Diff line number Diff line change
@@ -1,51 +1,64 @@
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract

namespace AssociationRegistry.Admin.Api.Verenigingen.Registreer.Afdeling;

using System.Linq;
using Common;
using Infrastructure.Validation;
using FluentValidation;
using Framework;
using RequestModels;
using System;
using Vereniging.Exceptions;

public class RegistreerAfdelingRequestValidator : AbstractValidator<RegistreerAfdelingRequest>
{
public RegistreerAfdelingRequestValidator()
private readonly IClock _clock;

public RegistreerAfdelingRequestValidator(IClock clock)
{
_clock = clock;
this.RequireNotNullOrEmpty(request => request.Naam);

this.RequireValidKboNummer(request => request.KboNummerMoedervereniging);

RuleFor(request => request.Locaties)
.Must(ToeTeVoegenLocatieValidator.NotHaveDuplicates)
.WithMessage("Identieke locaties zijn niet toegelaten.");
.Must(ToeTeVoegenLocatieValidator.NotHaveDuplicates)
.WithMessage("Identieke locaties zijn niet toegelaten.");

RuleFor(request => request.Locaties)
.Must(ToeTeVoegenLocatieValidator.NotHaveMultipleCorrespondentieLocaties)
.WithMessage("Er mag maximum één correspondentie locatie opgegeven worden.");
.Must(ToeTeVoegenLocatieValidator.NotHaveMultipleCorrespondentieLocaties)
.WithMessage("Er mag maximum één correspondentie locatie opgegeven worden.");

RuleFor(request => request.Locaties)
.Must(ToeTeVoegenLocatieValidator.NotHaveMultiplePrimairelocaties)
.WithMessage("Er mag maximum één primaire locatie opgegeven worden.");
.Must(ToeTeVoegenLocatieValidator.NotHaveMultiplePrimairelocaties)
.WithMessage("Er mag maximum één primaire locatie opgegeven worden.");

RuleFor(request => request.HoofdactiviteitenVerenigingsloket)
.Must(NotHaveDuplicates)
.WithMessage("Een waarde in de hoofdactiviteitenLijst mag slechts 1 maal voorkomen.");
.Must(NotHaveDuplicates)
.WithMessage("Een waarde in de hoofdactiviteitenLijst mag slechts 1 maal voorkomen.");

RuleFor(request => request.Startdatum)
.Must(BeBeforeToday)
.When(r => r.Startdatum is not null)
.WithMessage(new StartdatumMagNietInToekomstZijn().Message);

RuleFor(request => request.Doelgroep)
.SetValidator(new DoelgroepRequestValidator()!)
.When(r => r.Doelgroep is not null);
.SetValidator(new DoelgroepRequestValidator()!)
.When(r => r.Doelgroep is not null);

RuleForEach(request => request.Contactgegevens)
.SetValidator(new ToeTeVoegenContactgegevenValidator());
.SetValidator(new ToeTeVoegenContactgegevenValidator());

RuleForEach(request => request.Locaties)
.SetValidator(new ToeTeVoegenLocatieValidator());
.SetValidator(new ToeTeVoegenLocatieValidator());

RuleForEach(request => request.Vertegenwoordigers)
.SetValidator(new ToeTeVoegenVertegenwoordigerValidator());
.SetValidator(new ToeTeVoegenVertegenwoordigerValidator());
}

private bool BeBeforeToday(DateOnly? date)
=> _clock.Today > date;

private static bool NotHaveDuplicates(string[] values)
=> values.Length == values.DistinctBy(v => v.ToLower()).Count();
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,18 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Registreer.FeitelijkeVereni
using Infrastructure.Validation;
using Common;
using FluentValidation;
using Framework;
using RequetsModels;
using System;
using Vereniging.Exceptions;

public class RegistreerFeitelijkeVerenigingRequestValidator : AbstractValidator<RegistreerFeitelijkeVerenigingRequest>
{
public RegistreerFeitelijkeVerenigingRequestValidator()
private readonly IClock _clock;

public RegistreerFeitelijkeVerenigingRequestValidator(IClock clock)
{
_clock = clock;
this.RequireNotNullOrEmpty(request => request.Naam);

RuleFor(request => request.Locaties)
Expand All @@ -30,6 +36,11 @@ public RegistreerFeitelijkeVerenigingRequestValidator()
.Must(NotHaveDuplicates)
.WithMessage("Een waarde in de hoofdactiviteitenLijst mag slechts 1 maal voorkomen.");

RuleFor(request => request.Startdatum)
.Must(BeBeforeToday)
.When(r => r.Startdatum is not null)
.WithMessage(new StartdatumMagNietInToekomstZijn().Message);

RuleFor(request => request.Doelgroep)
.SetValidator(new DoelgroepRequestValidator()!)
.When(r => r.Doelgroep is not null);
Expand All @@ -44,6 +55,9 @@ public RegistreerFeitelijkeVerenigingRequestValidator()
.SetValidator(new ToeTeVoegenVertegenwoordigerValidator());
}

private bool BeBeforeToday(DateOnly? date)
=> _clock.Today > date;

private static bool NotHaveDuplicates(string[] values)
=> values.Length == values.DistinctBy(v => v.ToLower()).Count();
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public class With_A_Null_Request
public With_A_Null_Request()
{
var messageBusMock = new MessageBusMock();
_controller = new RegistreerAfdelingController(messageBusMock, new RegistreerAfdelingRequestValidator(), new AppSettings());
_controller = new RegistreerAfdelingController(messageBusMock, new RegistreerAfdelingRequestValidator(new ClockStub(DateOnly.MaxValue)), new AppSettings());
}

[Fact]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@

using AssociationRegistry.Admin.Api.Verenigingen.Registreer.Afdeling;
using AssociationRegistry.Admin.Api.Verenigingen.Registreer.Afdeling.RequestModels;
using Framework;
using FluentValidation.TestHelper;
using Test.Framework;
using Xunit;
using Xunit.Categories;
using ValidatorTest = Framework.ValidatorTest;

[UnitTest]
public class Has_Duplicates : ValidatorTest
Expand All @@ -16,7 +17,7 @@ public class Has_Duplicates : ValidatorTest
[InlineData("BLABLAbla", "BlAbLaBlA")]
public void Has_a_validation_error_for_hoofdactiviteitenLijst(string hoofdactivitetiCode1, string hoofdactivitetiCode2)
{
var validator = new RegistreerAfdelingRequestValidator();
var validator = new RegistreerAfdelingRequestValidator(new ClockStub(DateOnly.MaxValue));
var request = new RegistreerAfdelingRequest
{
HoofdactiviteitenVerenigingsloket = new[] { hoofdactivitetiCode1, hoofdactivitetiCode2 },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

using AssociationRegistry.Admin.Api.Verenigingen.Registreer.Afdeling;
using AssociationRegistry.Admin.Api.Verenigingen.Registreer.Afdeling.RequestModels;
using Fakes;
using Framework;
using FluentValidation.TestHelper;
using Xunit;
Expand All @@ -13,7 +14,7 @@ public class Is_Empty : ValidatorTest
[Fact]
public void Has_validation_error__KboNummerMoedervereniging_mag_niet_leeg_zijn()
{
var validator = new RegistreerAfdelingRequestValidator();
var validator = new RegistreerAfdelingRequestValidator(new ClockStub(DateOnly.MaxValue));
var result = validator.TestValidate(new RegistreerAfdelingRequest { KboNummerMoedervereniging = "" });

result.ShouldHaveValidationErrorFor(vereniging => vereniging.KboNummerMoedervereniging)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

using AssociationRegistry.Admin.Api.Verenigingen.Registreer.Afdeling;
using AssociationRegistry.Admin.Api.Verenigingen.Registreer.Afdeling.RequestModels;
using Fakes;
using Framework;
using FluentValidation.TestHelper;
using Xunit;
Expand All @@ -13,7 +14,7 @@ public class Is_Null : ValidatorTest
[Fact]
public void Has_validation_error__KboNummerMoedervereniging_is_verplicht()
{
var validator = new RegistreerAfdelingRequestValidator();
var validator = new RegistreerAfdelingRequestValidator(new ClockStub(DateOnly.MaxValue));
var result = validator.TestValidate(new RegistreerAfdelingRequest());

result.ShouldHaveValidationErrorFor(vereniging => vereniging.KboNummerMoedervereniging)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

using AssociationRegistry.Admin.Api.Verenigingen.Registreer.Afdeling;
using AssociationRegistry.Admin.Api.Verenigingen.Registreer.Afdeling.RequestModels;
using Fakes;
using Framework;
using FluentValidation.TestHelper;
using Xunit;
Expand All @@ -13,7 +14,7 @@ public class Is_Valid : ValidatorTest
[Fact]
public void Has_no_validation_errors()
{
var validator = new RegistreerAfdelingRequestValidator();
var validator = new RegistreerAfdelingRequestValidator(new ClockStub(DateOnly.MaxValue));
var result = validator.TestValidate(new RegistreerAfdelingRequest { KboNummerMoedervereniging = "0123456789" });

result.ShouldNotHaveValidationErrorFor(vereniging => vereniging.KboNummerMoedervereniging);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,19 @@
using Framework;
using AutoFixture;
using FluentValidation.TestHelper;
using Moq;
using Test.Framework;
using Xunit;
using Xunit.Categories;
using ValidatorTest = Framework.ValidatorTest;

[UnitTest]
public class With_A_Null_Broncode : ValidatorTest
{
[Fact]
public void Has_validation_error__broncode_mag_niet_leeg_zijn()
{
var validator = new RegistreerFeitelijkeVerenigingRequestValidator();
var validator = new RegistreerFeitelijkeVerenigingRequestValidator(new ClockStub(DateOnly.MaxValue));
var request = new Fixture().CustomizeAdminApi().Create<RegistreerFeitelijkeVerenigingRequest>();
request.Locaties[0].AdresId!.Broncode = null!;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,18 @@
using Framework;
using AutoFixture;
using FluentValidation.TestHelper;
using Test.Framework;
using Xunit;
using Xunit.Categories;
using ValidatorTest = Framework.ValidatorTest;

[UnitTest]
public class With_A_Null_Bronwaarde : ValidatorTest
{
[Fact]
public void Has_validation_error__bronwaarde_mag_niet_null_zijn()
{
var validator = new RegistreerFeitelijkeVerenigingRequestValidator();
var validator = new RegistreerFeitelijkeVerenigingRequestValidator(new ClockStub(DateOnly.MaxValue));
var request = new Fixture().CustomizeAdminApi().Create<RegistreerFeitelijkeVerenigingRequest>();
request.Locaties[0].AdresId!.Bronwaarde = null!;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@
using Vereniging;
using AutoFixture;
using FluentValidation.TestHelper;
using Test.Framework;
using Xunit;
using Xunit.Categories;
using ValidatorTest = Framework.ValidatorTest;

[UnitTest]
public class With_A_Valid_Broncode : ValidatorTest
Expand All @@ -17,7 +19,7 @@ public class With_A_Valid_Broncode : ValidatorTest
[InlineData("AR")]
public void Has_no_validation_errors(string adresBroncode)
{
var validator = new RegistreerFeitelijkeVerenigingRequestValidator();
var validator = new RegistreerFeitelijkeVerenigingRequestValidator(new ClockStub(DateOnly.MaxValue));
var request = new Fixture().CustomizeAdminApi().Create<RegistreerFeitelijkeVerenigingRequest>();
request.Locaties[0].AdresId!.Broncode = Adresbron.Parse(adresBroncode);
var result = validator.TestValidate(request);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,18 @@
using Framework;
using AutoFixture;
using FluentValidation.TestHelper;
using Test.Framework;
using Xunit;
using Xunit.Categories;
using ValidatorTest = Framework.ValidatorTest;

[UnitTest]
public class With_An_Empty_Broncode : ValidatorTest
{
[Fact]
public void Has_validation_error__broncode_mag_niet_leeg_zijn()
{
var validator = new RegistreerFeitelijkeVerenigingRequestValidator();
var validator = new RegistreerFeitelijkeVerenigingRequestValidator(new ClockStub(DateOnly.MaxValue));
var request = new Fixture().CustomizeAdminApi().Create<RegistreerFeitelijkeVerenigingRequest>();
request.Locaties[0].AdresId!.Broncode = string.Empty;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,18 @@
using Framework;
using AutoFixture;
using FluentValidation.TestHelper;
using Test.Framework;
using Xunit;
using Xunit.Categories;
using ValidatorTest = Framework.ValidatorTest;

[UnitTest]
public class With_An_Empty_Bronwaarde : ValidatorTest
{
[Fact]
public void Has_validation_error__bronwaarde_mag_niet_leeg_zijn()
{
var validator = new RegistreerFeitelijkeVerenigingRequestValidator();
var validator = new RegistreerFeitelijkeVerenigingRequestValidator(new ClockStub(DateOnly.MaxValue));
var request = new Fixture().CustomizeAdminApi().Create<RegistreerFeitelijkeVerenigingRequest>();
request.Locaties[0].AdresId!.Bronwaarde = string.Empty;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,20 @@
using AssociationRegistry.Admin.Api.Verenigingen.Common;
using AssociationRegistry.Admin.Api.Verenigingen.Registreer.Afdeling;
using AssociationRegistry.Admin.Api.Verenigingen.Registreer.Afdeling.RequestModels;
using Framework;
using FluentValidation.TestHelper;
using Test.Framework;
using Vereniging;
using Xunit;
using Xunit.Categories;
using ValidatorTest = Framework.ValidatorTest;

[UnitTest]
public class With_An_Empty_Gemeente : ValidatorTest
{
[Fact]
public void Has_validation_error__gemeente_mag_niet_leeg_zijn()
{
var validator = new RegistreerAfdelingRequestValidator();
var validator = new RegistreerAfdelingRequestValidator(new ClockStub(DateOnly.MaxValue));
var request = new RegistreerAfdelingRequest
{
Locaties = new[]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,20 @@
using AssociationRegistry.Admin.Api.Verenigingen.Common;
using AssociationRegistry.Admin.Api.Verenigingen.Registreer.Afdeling;
using AssociationRegistry.Admin.Api.Verenigingen.Registreer.Afdeling.RequestModels;
using Framework;
using FluentValidation.TestHelper;
using Test.Framework;
using Vereniging;
using Xunit;
using Xunit.Categories;
using ValidatorTest = Framework.ValidatorTest;

[UnitTest]
public class With_An_Empty_Huisnummer : ValidatorTest
{
[Fact]
public void Has_validation_error__huisnummer_mag_niet_leeg_zijn()
{
var validator = new RegistreerAfdelingRequestValidator();
var validator = new RegistreerAfdelingRequestValidator(new ClockStub(DateOnly.MaxValue));
var request = new RegistreerAfdelingRequest
{
Locaties = new[]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,20 @@
using AssociationRegistry.Admin.Api.Verenigingen.Common;
using AssociationRegistry.Admin.Api.Verenigingen.Registreer.Afdeling;
using AssociationRegistry.Admin.Api.Verenigingen.Registreer.Afdeling.RequestModels;
using Framework;
using FluentValidation.TestHelper;
using Test.Framework;
using Vereniging;
using Xunit;
using Xunit.Categories;
using ValidatorTest = Framework.ValidatorTest;

[UnitTest]
public class With_An_Empty_Land : ValidatorTest
{
[Fact]
public void Has_validation_error__land_mag_niet_leeg_zijn()
{
var validator = new RegistreerAfdelingRequestValidator();
var validator = new RegistreerAfdelingRequestValidator(new ClockStub(DateOnly.MaxValue));
var request = new RegistreerAfdelingRequest
{
Locaties = new[]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,20 @@
using AssociationRegistry.Admin.Api.Verenigingen.Common;
using AssociationRegistry.Admin.Api.Verenigingen.Registreer.Afdeling;
using AssociationRegistry.Admin.Api.Verenigingen.Registreer.Afdeling.RequestModels;
using Framework;
using FluentValidation.TestHelper;
using Test.Framework;
using Vereniging;
using Xunit;
using Xunit.Categories;
using ValidatorTest = Framework.ValidatorTest;

[UnitTest]
public class With_An_Empty_Postcode : ValidatorTest
{
[Fact]
public void Has_validation_error__postcode_mag_niet_leeg_zijn()
{
var validator = new RegistreerAfdelingRequestValidator();
var validator = new RegistreerAfdelingRequestValidator(new ClockStub(DateOnly.MaxValue));
var request = new RegistreerAfdelingRequest
{
Locaties = new[]
Expand Down
Loading

0 comments on commit 5970558

Please sign in to comment.