Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: or-1972 do not try to find duplicates if no adres is given #556

Merged
merged 2 commits into from
Nov 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ public SearchDuplicateVerenigingDetectionService(IElasticClient client)
public async Task<IReadOnlyCollection<DuplicaatVereniging>> GetDuplicates(VerenigingsNaam naam, Locatie[] locaties)
{
var locatiesMetAdres = locaties.Where(l => l.Adres is not null).ToArray();
if (locatiesMetAdres.Length == 0) return Array.Empty<DuplicaatVereniging>();

var postcodes = locatiesMetAdres.Select(l => l.Adres!.Postcode).ToArray();
var gemeentes = locatiesMetAdres.Select(l => l.Adres!.Gemeente).ToArray();

Expand Down
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(BeTodayOrBefore)
.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 BeTodayOrBefore(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(BeTodayOrBefore)
.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 BeTodayOrBefore(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
Loading
Loading