diff --git a/src/AssociationRegistry.Admin.Api/Infrastructure/Extensions/FluentValidatorExtensions.cs b/src/AssociationRegistry.Admin.Api/Infrastructure/Extensions/FluentValidatorExtensions.cs index 1da1375f7..78be09686 100644 --- a/src/AssociationRegistry.Admin.Api/Infrastructure/Extensions/FluentValidatorExtensions.cs +++ b/src/AssociationRegistry.Admin.Api/Infrastructure/Extensions/FluentValidatorExtensions.cs @@ -2,12 +2,8 @@ namespace AssociationRegistry.Admin.Api.Infrastructure.Extensions; using ExceptionHandlers; using FluentValidation; -using HtmlValidation; -using JasperFx.Core.Reflection; using Microsoft.AspNetCore.Http; -using System; using System.Diagnostics.CodeAnalysis; -using System.Reflection; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; @@ -20,80 +16,15 @@ public static async Task NullValidateAndThrowAsync( CancellationToken cancellationToken = default) { if (instance is null) throw new CouldNotParseRequestException(); - - await new NoHtmlValidator().ValidateAndThrowAsync(instance, cancellationToken); await validator.ValidateAndThrowAsync(instance, cancellationToken); } -} - -public class NoHtmlValidator : AbstractValidator -{ - private const string TO_BE_STRIPPED_PREFIX = "to-be-stripped-request-prefix"; - public NoHtmlValidator() - { - // TODO: nested - // TODO: es kijken naar 'I <3 ' als waarde? - RecursivelyApplyRule(typeof(T), TO_BE_STRIPPED_PREFIX); - } - - private void RecursivelyApplyRule(Type type, string propertyName) - { - var props = type.GetProperties(); - - foreach (var prop in props) - { - var currentPropertyName = $"{propertyName}.{prop.Name}"; - - if (prop.HasAttribute()) - { - ApplyRuleFor(prop, currentPropertyName); - } - else if (prop.PropertyType.IsArray) - { - if (prop.PropertyType.IsClass) - RecursivelyApplyRule(prop.PropertyType, currentPropertyName); - else - ApplyRuleForEach(prop, currentPropertyName); - } - else if (prop.PropertyType.IsClass) - { - RecursivelyApplyRule(prop.PropertyType, currentPropertyName); - } - } - } - - private void ApplyRuleFor(PropertyInfo prop, string propertyName) - { - if (prop.PropertyType == typeof(string)) - RuleFor(model => GetPropertyValue(model, prop.Name) as string) - .Cascade(CascadeMode.Continue) - .Must(BeNoHtml!) - .WithName(propertyName.Replace($"{TO_BE_STRIPPED_PREFIX}.", newValue: "")) - .WithErrorCode(StatusCodes.Status400BadRequest.ToString()) - .WithMessage(ExceptionMessages.UnsupportedContent) - .When(model => GetPropertyValue(model, prop.Name) != null); - } - - private void ApplyRuleForEach(PropertyInfo prop, string propertyName) - { - if (prop.PropertyType == typeof(string[])) - RuleForEach(model => Convert.ChangeType(GetPropertyValue(model, prop.Name), prop.PropertyType) as string[]) - .Cascade(CascadeMode.Continue) - .Must(BeNoHtml!) - .WithName(propertyName.Replace($"{TO_BE_STRIPPED_PREFIX}.", newValue: "")) - .WithErrorCode(StatusCodes.Status400BadRequest.ToString()) - .WithMessage(ExceptionMessages.UnsupportedContent) - .When(model => GetPropertyValue(model, prop.Name) != null); - } - - private static object? GetPropertyValue(T model, string propertyName) - { - var property = typeof(T).GetProperty(propertyName); - - return property?.GetValue(model); - } + public static IRuleBuilder MustNotContainHtml(this IRuleBuilder ruleBuilder) + => ruleBuilder + .Must(NotContainHtml) + .WithErrorCode(StatusCodes.Status400BadRequest.ToString()) + .WithMessage(ExceptionMessages.UnsupportedContent); - private static bool BeNoHtml(string propertyValue) - => !Regex.IsMatch(propertyValue, pattern: "<.*?>"); + private static bool NotContainHtml(string? propertyValue) + => propertyValue is null ? true : !Regex.IsMatch(propertyValue, pattern: "<.*?>"); } diff --git a/src/AssociationRegistry.Admin.Api/Infrastructure/HtmlValidation/NoHtmlAttribute.cs b/src/AssociationRegistry.Admin.Api/Infrastructure/HtmlValidation/NoHtmlAttribute.cs deleted file mode 100644 index eef1e1031..000000000 --- a/src/AssociationRegistry.Admin.Api/Infrastructure/HtmlValidation/NoHtmlAttribute.cs +++ /dev/null @@ -1,12 +0,0 @@ - - -namespace AssociationRegistry.Admin.Api.Infrastructure.HtmlValidation -{ - using System; - using System.ComponentModel.DataAnnotations; - using System.Text.RegularExpressions; - - public class NoHtmlAttribute : Attribute - { - } -} diff --git a/src/AssociationRegistry.Admin.Api/Infrastructure/Middleware/NoHtmlMiddleware.cs b/src/AssociationRegistry.Admin.Api/Infrastructure/Middleware/NoHtmlMiddleware.cs deleted file mode 100644 index b4b7d1052..000000000 --- a/src/AssociationRegistry.Admin.Api/Infrastructure/Middleware/NoHtmlMiddleware.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace AssociationRegistry.Admin.Api.Infrastructure.Middleware; - -using Microsoft.AspNetCore.Http; -using System.IO; -using System.Text.RegularExpressions; -using System.Threading.Tasks; - -public class NoHtmlMiddleware -{ - private readonly RequestDelegate _next; - - public NoHtmlMiddleware(RequestDelegate next) - { - _next = next; - } - - public async Task InvokeAsync(HttpContext context) - { - context.Request.EnableBuffering(); - - var requestContent = await new StreamReader(context.Request.Body).ReadToEndAsync(); - context.Request.Body.Position = 0; // Reset the stream position for further processing - - if (ContainsHtml(requestContent)) - { - context.Response.StatusCode = 400; - await context.Response.WriteAsync("HTML content is not allowed."); - return; - } - - await _next(context); - } - - private bool ContainsHtml(string content) - { - // Simple HTML detection logic (can be improved or made more complex as needed) - return Regex.IsMatch(content, "<.*?>"); - } -} \ No newline at end of file diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/Adres.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/Adres.cs index bf145fda8..b0bab195a 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/Adres.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/Adres.cs @@ -1,6 +1,5 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Common; -using Infrastructure.HtmlValidation; using System.Runtime.Serialization; /// Een adres van een locatie @@ -9,31 +8,25 @@ public class Adres { /// De straat van het adres [DataMember] - [NoHtml] public string Straatnaam { get; set; } = null!; /// Het huisnummer van het adres [DataMember] - [NoHtml] public string Huisnummer { get; set; } = null!; /// Het busnummer van het adres [DataMember] - [NoHtml] public string? Busnummer { get; set; } /// De postcode van het adres [DataMember] - [NoHtml] public string Postcode { get; set; } = null!; /// De gemeente van het adres [DataMember] - [NoHtml] public string Gemeente { get; set; } = null!; /// Het land van het adres [DataMember] - [NoHtml] public string Land { get; set; } = null!; } diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/AdresId.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/AdresId.cs index 7a9ae77d0..8f0de7d54 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/AdresId.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/AdresId.cs @@ -1,6 +1,5 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Common; -using Infrastructure.HtmlValidation; using System.Runtime.Serialization; /// De unieke identificator van het adres in een andere bron @@ -9,11 +8,9 @@ public class AdresId { /// De code van de bron van het adres [DataMember] - [NoHtml] public string Broncode { get; set; } = null!; /// De unieke identificator volgens de bron [DataMember] - [NoHtml] public string Bronwaarde { get; set; } = null!; } diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/AdresIdValidator.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/AdresIdValidator.cs index efc9999c0..a1abb3b17 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/AdresIdValidator.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/AdresIdValidator.cs @@ -1,6 +1,7 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Common; using FluentValidation; +using Infrastructure.Extensions; using Infrastructure.Validation; public class AdresIdValidator : AbstractValidator @@ -9,5 +10,8 @@ public AdresIdValidator() { this.RequireNotNullOrEmpty(adresId => adresId.Broncode); this.RequireNotNullOrEmpty(adresId => adresId.Bronwaarde); + + RuleFor(m => m.Broncode).MustNotContainHtml(); + RuleFor(m => m.Bronwaarde).MustNotContainHtml(); } } diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/AdresValidator.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/AdresValidator.cs index 41a337ec3..6a282b4fd 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/AdresValidator.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/AdresValidator.cs @@ -1,6 +1,7 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Common; using FluentValidation; +using Infrastructure.Extensions; using Infrastructure.Validation; public class AdresValidator : AbstractValidator @@ -8,9 +9,16 @@ public class AdresValidator : AbstractValidator public AdresValidator() { this.RequireNotNullOrEmpty(adres => adres.Straatnaam); - this.RequireNotNullOrEmpty(locatie => locatie.Huisnummer); - this.RequireNotNullOrEmpty(locatie => locatie.Gemeente); - this.RequireNotNullOrEmpty(locatie => locatie.Land); - this.RequireNotNullOrEmpty(locatie => locatie.Postcode); + this.RequireNotNullOrEmpty(adres => adres.Huisnummer); + this.RequireNotNullOrEmpty(adres => adres.Gemeente); + this.RequireNotNullOrEmpty(adres => adres.Land); + this.RequireNotNullOrEmpty(adres => adres.Postcode); + + RuleFor(adres => adres.Straatnaam).MustNotContainHtml(); + RuleFor(adres => adres.Huisnummer).MustNotContainHtml(); + RuleFor(adres => adres.Busnummer).MustNotContainHtml(); + RuleFor(adres => adres.Postcode).MustNotContainHtml(); + RuleFor(adres => adres.Gemeente).MustNotContainHtml(); + RuleFor(adres => adres.Land).MustNotContainHtml(); } } diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenContactgegeven.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenContactgegeven.cs index f2ef593d5..7216d5836 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenContactgegeven.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenContactgegeven.cs @@ -1,6 +1,5 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Common; -using Infrastructure.HtmlValidation; using Infrastructure.Swagger; using System.Runtime.Serialization; using Vereniging; @@ -17,19 +16,16 @@ public class ToeTeVoegenContactgegeven [SwaggerParameterExample("Telefoon")] [SwaggerParameterExample("Website")] [DataMember(Name = "contactgegeventype")] - [NoHtml] public string Contactgegeventype { get; set; } = null!; /// De waarde van het contactgegeven [DataMember(Name = "waarde")] - [NoHtml] public string Waarde { get; set; } = null!; /// /// Vrij veld die het het contactgegeven beschrijft (bijv: algemeen, administratie, ...) /// [DataMember(Name = "beschrijving")] - [NoHtml] public string? Beschrijving { get; set; } /// Duidt het contactgegeven aan als primair contactgegeven diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenContactgegevenValidator.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenContactgegevenValidator.cs index d2882f6d1..c4d1522f9 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenContactgegevenValidator.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenContactgegevenValidator.cs @@ -1,6 +1,7 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Common; using FluentValidation; +using Infrastructure.Extensions; using Infrastructure.Validation; using Vereniging; @@ -11,6 +12,10 @@ public ToeTeVoegenContactgegevenValidator() this.RequireNotNullOrEmpty(contactgegeven => contactgegeven.Waarde); this.RequireNotNullOrEmpty(contactgegeven => contactgegeven.Contactgegeventype); + RuleFor(contactgegeven => contactgegeven.Beschrijving).MustNotContainHtml(); + RuleFor(contactgegeven => contactgegeven.Contactgegeventype).MustNotContainHtml(); + RuleFor(contactgegeven => contactgegeven.Waarde).MustNotContainHtml(); + RuleFor(contactgegeven => contactgegeven.Contactgegeventype) .Must(Contactgegeventype.CanParse) .WithMessage(contactgegeven => $"De waarde {contactgegeven.Contactgegeventype} is geen gekend contactgegeven type.") diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenLocatie.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenLocatie.cs index 84332d300..20b9d65c2 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenLocatie.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenLocatie.cs @@ -1,6 +1,5 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Common; -using Infrastructure.HtmlValidation; using System.Runtime.Serialization; using Vereniging; @@ -16,7 +15,6 @@ public class ToeTeVoegenLocatie /// - Correspondentie - Slechts één maal mogelijk
/// [DataMember] - [NoHtml] public string Locatietype { get; set; } = null!; /// Duidt aan dat dit de primaire locatie is @@ -25,7 +23,6 @@ public class ToeTeVoegenLocatie /// Een beschrijvende naam voor de locatie [DataMember] - [NoHtml] public string? Naam { get; set; } /// De unieke identificator van het adres in een andere bron diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenLocatieValidator.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenLocatieValidator.cs index 900a0a1cd..914e18ee1 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenLocatieValidator.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenLocatieValidator.cs @@ -1,9 +1,10 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Common; +using FluentValidation; +using Infrastructure.Extensions; +using Infrastructure.Validation; using System; using System.Linq; -using Infrastructure.Validation; -using FluentValidation; using Vereniging; public class ToeTeVoegenLocatieValidator : AbstractValidator @@ -12,6 +13,9 @@ public ToeTeVoegenLocatieValidator() { this.RequireNotNullOrEmpty(locatie => locatie.Locatietype); + RuleFor(locatie => locatie.Naam).MustNotContainHtml(); + RuleFor(locatie => locatie.Locatietype).MustNotContainHtml(); + RuleFor(locatie => locatie.Locatietype) .Must(BeAValidLocationTypeValue) .WithMessage($"'Locatietype' moet een geldige waarde hebben. ({Locatietype.Correspondentie}, {Locatietype.Activiteiten})") @@ -49,6 +53,6 @@ private static object ToAnonymousObject(ToeTeVoegenLocatie l) => new { l.Locatietype, l.Naam, l.Adres?.Straatnaam, l.Adres?.Huisnummer, l.Adres?.Busnummer, l.Adres?.Postcode, l.Adres?.Gemeente, - l.Adres?.Land, l.AdresId?.Bronwaarde, l.AdresId?.Broncode + l.Adres?.Land, l.AdresId?.Bronwaarde, l.AdresId?.Broncode, }; } diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenVertegenwoordiger.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenVertegenwoordiger.cs index 92e244003..46e6d283d 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenVertegenwoordiger.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenVertegenwoordiger.cs @@ -1,6 +1,5 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Common; -using Infrastructure.HtmlValidation; using System.Runtime.Serialization; using Vereniging; using Vereniging.TelefoonNummers; @@ -13,27 +12,22 @@ public class ToeTeVoegenVertegenwoordiger /// Dit is de unieke identificatie van een vertegenwoordiger, dit kan een rijksregisternummer of bisnummer zijn /// [DataMember] - [NoHtml] public string Insz { get; set; } = null!; /// De voornaam van de vertegenwoordiger [DataMember] - [NoHtml] public string Voornaam { get; set; } = null!; /// De achternaam van de vertegenwoordiger [DataMember] - [NoHtml] public string Achternaam { get; set; } = null!; /// Dit is de rol van de vertegenwoordiger binnen de vereniging [DataMember] - [NoHtml] public string? Rol { get; set; } /// Dit is de roepnaam van de vertegenwoordiger [DataMember] - [NoHtml] public string? Roepnaam { get; set; } /// @@ -44,22 +38,18 @@ public class ToeTeVoegenVertegenwoordiger /// Het e-mailadres van de vertegenwoordiger [DataMember(Name = "E-mail")] - [NoHtml] public string? Email { get; set; } /// Het telefoonnummer van de vertegenwoordiger [DataMember] - [NoHtml] public string? Telefoon { get; set; } /// Het mobiel nummer van de vertegenwoordiger [DataMember] - [NoHtml] public string? Mobiel { get; set; } /// Het socialmedia account van de vertegenwoordiger [DataMember] - [NoHtml] public string? SocialMedia { get; set; } public static Vertegenwoordiger Map(ToeTeVoegenVertegenwoordiger vert) diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenVertegenwoordigerValidator.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenVertegenwoordigerValidator.cs index 248d18edb..f8c4a7b75 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenVertegenwoordigerValidator.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Common/ToeTeVoegenVertegenwoordigerValidator.cs @@ -1,64 +1,78 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Common; -using System.Linq; -using Infrastructure.Validation; using FluentValidation; +using Infrastructure.Extensions; +using Infrastructure.Validation; +using System.Linq; public class ToeTeVoegenVertegenwoordigerValidator : AbstractValidator { public ToeTeVoegenVertegenwoordigerValidator() { this.RequireNotNullOrEmpty(vertegenwoordiger => vertegenwoordiger.Insz); - this.RequireNotNullOrEmpty(vertegenwoordiger => vertegenwoordiger.Voornaam); + this.RequireNotNullOrEmpty(vertegenwoordiger => vertegenwoordiger.Achternaam); + + RuleFor(vertegenwoordiger => vertegenwoordiger.Voornaam).MustNotContainHtml(); + RuleFor(vertegenwoordiger => vertegenwoordiger.Achternaam).MustNotContainHtml(); + RuleFor(vertegenwoordiger => vertegenwoordiger.Insz).MustNotContainHtml(); + RuleFor(vertegenwoordiger => vertegenwoordiger.Email).MustNotContainHtml(); + RuleFor(vertegenwoordiger => vertegenwoordiger.SocialMedia).MustNotContainHtml(); + RuleFor(vertegenwoordiger => vertegenwoordiger.Mobiel).MustNotContainHtml(); + RuleFor(vertegenwoordiger => vertegenwoordiger.Roepnaam).MustNotContainHtml(); + RuleFor(vertegenwoordiger => vertegenwoordiger.Rol).MustNotContainHtml(); + RuleFor(vertegenwoordiger => vertegenwoordiger.Telefoon).MustNotContainHtml(); + RuleFor(vertegenwoordiger => vertegenwoordiger.Voornaam) - .Must(NotContainNumbers) - .When(vertegenwoordiger => !string.IsNullOrEmpty(vertegenwoordiger.Voornaam)) - .WithMessage("'Voornaam' mag geen cijfers bevatten."); + .Must(NotContainNumbers) + .When(vertegenwoordiger => !string.IsNullOrEmpty(vertegenwoordiger.Voornaam)) + .WithMessage("'Voornaam' mag geen cijfers bevatten."); + RuleFor(vertegenwoordiger => vertegenwoordiger.Voornaam) - .Must(ContainAtLeastOneLetter) - .When(vertegenwoordiger => !string.IsNullOrEmpty(vertegenwoordiger.Voornaam)) - .WithMessage("'Voornaam' moet minstens een letter bevatten."); + .Must(ContainAtLeastOneLetter) + .When(vertegenwoordiger => !string.IsNullOrEmpty(vertegenwoordiger.Voornaam)) + .WithMessage("'Voornaam' moet minstens een letter bevatten."); - this.RequireNotNullOrEmpty(vertegenwoordiger => vertegenwoordiger.Achternaam); RuleFor(vertegenwoordiger => vertegenwoordiger.Achternaam) - .Must(NotContainNumbers) - .When(vertegenwoordiger => !string.IsNullOrEmpty(vertegenwoordiger.Achternaam)) - .WithMessage("'Achternaam' mag geen cijfers bevatten."); + .Must(NotContainNumbers) + .When(vertegenwoordiger => !string.IsNullOrEmpty(vertegenwoordiger.Achternaam)) + .WithMessage("'Achternaam' mag geen cijfers bevatten."); + RuleFor(vertegenwoordiger => vertegenwoordiger.Achternaam) - .Must(ContainAtLeastOneLetter) - .When(vertegenwoordiger => !string.IsNullOrEmpty(vertegenwoordiger.Achternaam)) - .WithMessage("'Achternaam' moet minstens een letter bevatten."); + .Must(ContainAtLeastOneLetter) + .When(vertegenwoordiger => !string.IsNullOrEmpty(vertegenwoordiger.Achternaam)) + .WithMessage("'Achternaam' moet minstens een letter bevatten."); RuleFor(vertegenwoordiger => vertegenwoordiger.Insz) - .Must(ContainOnlyNumbersDotsAndDashes) - .When(vertegenwoordiger => !string.IsNullOrEmpty(vertegenwoordiger.Insz)) - .WithMessage("Insz heeft incorrect formaat (00.00.00-000.00 of 00000000000)"); + .Must(ContainOnlyNumbersDotsAndDashes) + .When(vertegenwoordiger => !string.IsNullOrEmpty(vertegenwoordiger.Insz)) + .WithMessage("Insz heeft incorrect formaat (00.00.00-000.00 of 00000000000)"); RuleFor(vertegenwoordiger => vertegenwoordiger.Insz) - .Must(Have11Numbers) - .When( + .Must(Have11Numbers) + .When( vertegenwoordiger => !string.IsNullOrEmpty(vertegenwoordiger.Insz) && ContainOnlyNumbersDotsAndDashes(vertegenwoordiger.Insz)) - .WithMessage("Insz moet 11 cijfers bevatten"); + .WithMessage("Insz moet 11 cijfers bevatten"); } private bool ContainOnlyNumbersDotsAndDashes(string? insz) { - insz = insz!.Replace(".", string.Empty).Replace("-", string.Empty); + insz = insz!.Replace(oldValue: ".", string.Empty).Replace(oldValue: "-", string.Empty); + return long.TryParse(insz, out _); } private bool Have11Numbers(string? insz) { - insz = insz!.Replace(".", string.Empty).Replace("-", string.Empty); + insz = insz!.Replace(oldValue: ".", string.Empty).Replace(oldValue: "-", string.Empty); + return insz.Length == 11; } private static bool NotContainNumbers(string arg) => !arg.Any(char.IsDigit); - private static bool ContainAtLeastOneLetter(string arg) => arg.Any(char.IsLetter); } diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Locaties/FeitelijkeVereniging/WijzigLocatie/RequestModels/TeWijzigenLocatie.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Locaties/FeitelijkeVereniging/WijzigLocatie/RequestModels/TeWijzigenLocatie.cs index b2474d7dc..1dd7c1f4c 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Locaties/FeitelijkeVereniging/WijzigLocatie/RequestModels/TeWijzigenLocatie.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Locaties/FeitelijkeVereniging/WijzigLocatie/RequestModels/TeWijzigenLocatie.cs @@ -1,9 +1,8 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Locaties.FeitelijkeVereniging.WijzigLocatie.RequestModels; -using System.Runtime.Serialization; using Acties.WijzigLocatie; using Common; -using Infrastructure.HtmlValidation; +using System.Runtime.Serialization; /// Een locatie van een vereniging [DataContract] @@ -17,8 +16,7 @@ public class TeWijzigenLocatie /// - Correspondentie - Slechts één maal mogelijk
///
[DataMember] - [NoHtml] - public string? Locatietype { get; set; } = null!; + public string? Locatietype { get; set; } /// Duidt aan dat dit de primaire locatie is [DataMember] @@ -26,7 +24,6 @@ public class TeWijzigenLocatie /// Een beschrijvende naam voor de locatie [DataMember] - [NoHtml] public string? Naam { get; set; } /// De unieke identificator van het adres in een andere bron diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Locaties/VerenigingMetRechtspersoonlijkheid/WijzigMaatschappelijkeZetel/RequestModels/TeWijzigenMaatschappelijkeZetel.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Locaties/VerenigingMetRechtspersoonlijkheid/WijzigMaatschappelijkeZetel/RequestModels/TeWijzigenMaatschappelijkeZetel.cs index 5b0b7e6a9..056dce56a 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Locaties/VerenigingMetRechtspersoonlijkheid/WijzigMaatschappelijkeZetel/RequestModels/TeWijzigenMaatschappelijkeZetel.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Locaties/VerenigingMetRechtspersoonlijkheid/WijzigMaatschappelijkeZetel/RequestModels/TeWijzigenMaatschappelijkeZetel.cs @@ -1,7 +1,6 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Locaties.VerenigingMetRechtspersoonlijkheid.WijzigMaatschappelijkeZetel.RequestModels; using Acties.WijzigMaatschappelijkeZetel; -using Infrastructure.HtmlValidation; using System.Runtime.Serialization; [DataContract] @@ -13,7 +12,6 @@ public class TeWijzigenMaatschappelijkeZetel /// Een beschrijvende naam voor de locatie [DataMember] - [NoHtml] public string? Naam { get; set; } public static WijzigMaatschappelijkeZetelCommand.Locatie Map(TeWijzigenMaatschappelijkeZetel locatie, int locatieId) diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Locaties/VerenigingMetRechtspersoonlijkheid/WijzigMaatschappelijkeZetel/RequestModels/TeWijzigenMaatschappelijkeZetelValidator.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Locaties/VerenigingMetRechtspersoonlijkheid/WijzigMaatschappelijkeZetel/RequestModels/TeWijzigenMaatschappelijkeZetelValidator.cs new file mode 100644 index 000000000..5d5354960 --- /dev/null +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Locaties/VerenigingMetRechtspersoonlijkheid/WijzigMaatschappelijkeZetel/RequestModels/TeWijzigenMaatschappelijkeZetelValidator.cs @@ -0,0 +1,20 @@ +namespace AssociationRegistry.Admin.Api.Verenigingen.Locaties.VerenigingMetRechtspersoonlijkheid.WijzigMaatschappelijkeZetel.RequestModels; + +using FluentValidation; +using Infrastructure.Extensions; + +public class TeWijzigenMaatschappelijkeZetelValidator : AbstractValidator +{ + public TeWijzigenMaatschappelijkeZetelValidator() + { + RuleFor(request => request) + .Must(HaveAtLeastOneValue) + .WithMessage("'Locatie' moet ingevuld zijn."); + + RuleFor(maatschappelijkeZetel => maatschappelijkeZetel.Naam).MustNotContainHtml(); + } + + private bool HaveAtLeastOneValue(TeWijzigenMaatschappelijkeZetel locatie) + => locatie.IsPrimair is not null || + locatie.Naam is not null; +} diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Locaties/VerenigingMetRechtspersoonlijkheid/WijzigMaatschappelijkeZetel/WijzigMaatschappelijkeZetelRequestValidator.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Locaties/VerenigingMetRechtspersoonlijkheid/WijzigMaatschappelijkeZetel/RequestModels/WijzigMaatschappelijkeZetelRequestValidator.cs similarity index 51% rename from src/AssociationRegistry.Admin.Api/Verenigingen/Locaties/VerenigingMetRechtspersoonlijkheid/WijzigMaatschappelijkeZetel/WijzigMaatschappelijkeZetelRequestValidator.cs rename to src/AssociationRegistry.Admin.Api/Verenigingen/Locaties/VerenigingMetRechtspersoonlijkheid/WijzigMaatschappelijkeZetel/RequestModels/WijzigMaatschappelijkeZetelRequestValidator.cs index 13ef419a6..52052936f 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Locaties/VerenigingMetRechtspersoonlijkheid/WijzigMaatschappelijkeZetel/WijzigMaatschappelijkeZetelRequestValidator.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Locaties/VerenigingMetRechtspersoonlijkheid/WijzigMaatschappelijkeZetel/RequestModels/WijzigMaatschappelijkeZetelRequestValidator.cs @@ -1,7 +1,6 @@ -namespace AssociationRegistry.Admin.Api.Verenigingen.Locaties.VerenigingMetRechtspersoonlijkheid.WijzigMaatschappelijkeZetel; +namespace AssociationRegistry.Admin.Api.Verenigingen.Locaties.VerenigingMetRechtspersoonlijkheid.WijzigMaatschappelijkeZetel.RequestModels; using FluentValidation; -using RequestModels; // ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract public class WijzigMaatschappelijkeZetelRequestValidator : AbstractValidator @@ -16,17 +15,3 @@ public WijzigMaatschappelijkeZetelRequestValidator() .SetValidator(new TeWijzigenMaatschappelijkeZetelValidator()); } } - -public class TeWijzigenMaatschappelijkeZetelValidator : AbstractValidator -{ - public TeWijzigenMaatschappelijkeZetelValidator() - { - RuleFor(request => request) - .Must(HaveAtLeastOneValue) - .WithMessage("'Locatie' moet ingevuld zijn."); - } - - private bool HaveAtLeastOneValue(TeWijzigenMaatschappelijkeZetel locatie) - => locatie.IsPrimair is not null || - locatie.Naam is not null; -} diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/Activiteit.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/Activiteit.cs index 582ac8fad..52bbd1804 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/Activiteit.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/Activiteit.cs @@ -1,7 +1,6 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Registreer; using DuplicateVerenigingDetection; -using Infrastructure.HtmlValidation; using System.Runtime.Serialization; /// Een activiteit van een vereniging @@ -25,6 +24,5 @@ public static Activiteit FromDuplicaatVereniging(DuplicaatVereniging.Activiteit /// De categorie van deze activiteit [DataMember(Name = "Categorie")] - [NoHtml] public string Categorie { get; init; } } diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/DuplicaatVerenigingContract.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/DuplicaatVerenigingContract.cs index d049860a2..0ed8bb961 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/DuplicaatVerenigingContract.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/DuplicaatVerenigingContract.cs @@ -1,6 +1,5 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Registreer; -using Infrastructure.HtmlValidation; using System.Collections.Immutable; using System.Runtime.Serialization; @@ -27,15 +26,15 @@ public DuplicaatVerenigingContract( } /// De unieke identificatie code van deze vereniging - [DataMember(Name = "VCode")] [NoHtml] + [DataMember(Name = "VCode")] public string VCode { get; init; } /// Naam van de vereniging - [DataMember(Name = "Naam")] [NoHtml] + [DataMember(Name = "Naam")] public string Naam { get; init; } /// Korte naam van de vereniging - [DataMember(Name = "KorteNaam")] [NoHtml] + [DataMember(Name = "KorteNaam")] public string KorteNaam { get; init; } /// Type van de vereniging diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/FeitelijkeVereniging/RequetsModels/RegistreerFeitelijkeVerenigingRequest.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/FeitelijkeVereniging/RequetsModels/RegistreerFeitelijkeVerenigingRequest.cs index 73cb937fb..8d65272c4 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/FeitelijkeVereniging/RequetsModels/RegistreerFeitelijkeVerenigingRequest.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/FeitelijkeVereniging/RequetsModels/RegistreerFeitelijkeVerenigingRequest.cs @@ -2,7 +2,6 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Registreer.FeitelijkeVereni using Acties.RegistreerFeitelijkeVereniging; using Common; -using Infrastructure.HtmlValidation; using System; using System.ComponentModel.DataAnnotations; using System.Linq; @@ -15,17 +14,14 @@ public class RegistreerFeitelijkeVerenigingRequest /// Naam van de vereniging [DataMember] [Required] - [NoHtml] public string Naam { get; set; } = null!; /// Korte naam van de vereniging [DataMember] - [NoHtml] public string? KorteNaam { get; set; } /// Korte beschrijving van de vereniging [DataMember] - [NoHtml] public string? KorteBeschrijving { get; set; } /// Datum waarop de vereniging gestart is. Deze datum mag niet later zijn dan vandaag @@ -58,7 +54,6 @@ public class RegistreerFeitelijkeVerenigingRequest /// De codes van de hoofdactivititeiten volgens het verenigingsloket [DataMember] - [NoHtml] public string[] HoofdactiviteitenVerenigingsloket { get; set; } = Array.Empty(); public RegistreerFeitelijkeVerenigingCommand ToCommand() diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/FeitelijkeVereniging/RegistreerFeitelijkeVerenigingRequestValidator.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/FeitelijkeVereniging/RequetsModels/RegistreerFeitelijkeVerenigingRequestValidator.cs similarity index 84% rename from src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/FeitelijkeVereniging/RegistreerFeitelijkeVerenigingRequestValidator.cs rename to src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/FeitelijkeVereniging/RequetsModels/RegistreerFeitelijkeVerenigingRequestValidator.cs index 8ce1c5a85..0871985f5 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/FeitelijkeVereniging/RegistreerFeitelijkeVerenigingRequestValidator.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/FeitelijkeVereniging/RequetsModels/RegistreerFeitelijkeVerenigingRequestValidator.cs @@ -1,12 +1,11 @@ // ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract -namespace AssociationRegistry.Admin.Api.Verenigingen.Registreer.FeitelijkeVereniging; +namespace AssociationRegistry.Admin.Api.Verenigingen.Registreer.FeitelijkeVereniging.RequetsModels; using Common; using FluentValidation; using Framework; -using Ganss.XSS; +using Infrastructure.Extensions; using Infrastructure.Validation; -using RequetsModels; using System; using System.Linq; using Vereniging.Exceptions; @@ -20,9 +19,10 @@ public RegistreerFeitelijkeVerenigingRequestValidator(IClock clock) _clock = clock; this.RequireNotNullOrEmpty(request => request.Naam); - RuleFor(request => request.Naam) - .Must(NotHaveHtmlMarkup) - .WithMessage("Er mogen geen HTML of JavaScript tags in de request opgenomen worden."); + RuleFor(request => request.Naam).MustNotContainHtml(); + RuleFor(request => request.KorteNaam).MustNotContainHtml(); + RuleFor(request => request.KorteBeschrijving).MustNotContainHtml(); + RuleForEach(request => request.HoofdactiviteitenVerenigingsloket).MustNotContainHtml(); RuleFor(request => request.Locaties) .Must(ToeTeVoegenLocatieValidator.NotHaveDuplicates) @@ -59,14 +59,6 @@ public RegistreerFeitelijkeVerenigingRequestValidator(IClock clock) .SetValidator(new ToeTeVoegenVertegenwoordigerValidator()); } - private bool NotHaveHtmlMarkup(string htmlCandidate) - { - var sanitizer = new HtmlSanitizer(); - var output = sanitizer.Sanitize(htmlCandidate); - - return htmlCandidate == output; - } - private bool BeTodayOrBefore(DateOnly? date) => _clock.Today >= date; diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/HoofdactiviteitVerenigingsloket.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/HoofdactiviteitVerenigingsloket.cs index ebaef694f..fbdfbebda 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/HoofdactiviteitVerenigingsloket.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/HoofdactiviteitVerenigingsloket.cs @@ -1,7 +1,6 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Registreer; using DuplicateVerenigingDetection; -using Infrastructure.HtmlValidation; using System.Runtime.Serialization; [DataContract] @@ -21,11 +20,9 @@ public static HoofdactiviteitVerenigingsloket FromDuplicaatVereniging( /// De code van de hoofdactivititeit [DataMember(Name = "Code")] - [NoHtml] public string Code { get; init; } /// De beschrijving van de hoofdactivititeit [DataMember(Name = "Naam")] - [NoHtml] public string Naam { get; init; } } diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/Locatie.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/Locatie.cs index 355db801f..fcaa1c589 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/Locatie.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/Locatie.cs @@ -1,7 +1,6 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Registreer; using DuplicateVerenigingDetection; -using Infrastructure.HtmlValidation; using System.Runtime.Serialization; /// Een locatie van een vereniging @@ -29,7 +28,6 @@ public static Locatie FromDuplicaatVereniging(DuplicaatVereniging.Locatie locati /// Het soort locatie dat beschreven wordt [DataMember(Name = "Locatietype")] - [NoHtml] public string Locatietype { get; init; } /// Duidt aan dat dit de primaire locatie is @@ -38,21 +36,17 @@ public static Locatie FromDuplicaatVereniging(DuplicaatVereniging.Locatie locati /// Het samengestelde adres van de locatie [DataMember(Name = "Adresvoorstelling")] - [NoHtml] public string Adres { get; init; } /// Een beschrijvende naam voor de locatie [DataMember(Name = "Naam")] - [NoHtml] public string? Naam { get; init; } /// Het busnummer van de locatie [DataMember(Name = "Postcode")] - [NoHtml] public string Postcode { get; init; } /// De gemeente van de locatie [DataMember(Name = "Gemeente")] - [NoHtml] public string Gemeente { get; init; } } diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/PotentialDuplicatesResponse.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/PotentialDuplicatesResponse.cs index 203e6534f..db474c74d 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/PotentialDuplicatesResponse.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/PotentialDuplicatesResponse.cs @@ -2,7 +2,6 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Registreer; using DuplicateVerenigingDetection; using Infrastructure.ConfigurationBindings; -using Infrastructure.HtmlValidation; using System; using System.Collections.Immutable; using System.Linq; @@ -20,7 +19,6 @@ public PotentialDuplicatesResponse(string hashedRequest, PotentialDuplicatesFoun /// Dit token wordt gebruikt als bevestiging dat de vereniging uniek is en geregistreerd mag worden, /// ondanks de voorgestelde duplicaten. [DataMember(Name = "BevestigingsToken")] - [NoHtml] public string BevestigingsToken { get; init; } /// Een lijst van verenigingen die mogelijks een duplicaat zijn diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/VerenigingsType.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/VerenigingsType.cs index 75bcb4d79..f09f5f8f7 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/VerenigingsType.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Registreer/VerenigingsType.cs @@ -1,7 +1,6 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Registreer; using DuplicateVerenigingDetection; -using Infrastructure.HtmlValidation; using System.Runtime.Serialization; [DataContract] @@ -20,11 +19,9 @@ public static VerenigingsType FromDuplicaatVereniging(DuplicaatVereniging duplic /// De code van het type van deze vereniging [DataMember(Name = "Code")] - [NoHtml] public string Code { get; } /// De beschrijving van het type van deze vereniging [DataMember(Name = "Naam")] - [NoHtml] public string Naam { get; } } diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Search/ResponseModels/HoofdactiviteitVerenigingsloket.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Search/ResponseModels/HoofdactiviteitVerenigingsloket.cs index d3c20f0f2..ffe514d1b 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Search/ResponseModels/HoofdactiviteitVerenigingsloket.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Search/ResponseModels/HoofdactiviteitVerenigingsloket.cs @@ -1,6 +1,5 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Search.ResponseModels; -using Infrastructure.HtmlValidation; using System.Runtime.Serialization; [DataContract] @@ -10,13 +9,11 @@ public class HoofdactiviteitVerenigingsloket /// De verkorte code van de hoofdactiviteit /// [DataMember] - [NoHtml] public string Code { get; set; } = null!; /// /// De volledige beschrijving van de hoofdactiviteit /// [DataMember] - [NoHtml] public string Naam { get; set; } = null!; } diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Search/ResponseModels/VerenigingsType.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Search/ResponseModels/VerenigingsType.cs index 0bdb522ef..a3753efbc 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Search/ResponseModels/VerenigingsType.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Search/ResponseModels/VerenigingsType.cs @@ -1,6 +1,5 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Search.ResponseModels; -using Infrastructure.HtmlValidation; using System.Runtime.Serialization; [DataContract] @@ -10,13 +9,11 @@ public class VerenigingsType /// De code van het type vereniging /// [DataMember] - [NoHtml] public string Code { get; set; } = null!; /// /// De beschrijving van het type vereniging /// [DataMember] - [NoHtml] public string Naam { get; set; } = null!; } diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Vertegenwoordigers/FeitelijkeVereniging/WijzigVertegenwoordiger/RequestModels/TeWijzigenVertegenwoordiger.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Vertegenwoordigers/FeitelijkeVereniging/WijzigVertegenwoordiger/RequestModels/TeWijzigenVertegenwoordiger.cs index 5a47c1c4b..250d641af 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/Vertegenwoordigers/FeitelijkeVereniging/WijzigVertegenwoordiger/RequestModels/TeWijzigenVertegenwoordiger.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Vertegenwoordigers/FeitelijkeVereniging/WijzigVertegenwoordiger/RequestModels/TeWijzigenVertegenwoordiger.cs @@ -1,6 +1,5 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.Vertegenwoordigers.FeitelijkeVereniging.WijzigVertegenwoordiger.RequestModels; -using Infrastructure.HtmlValidation; using System.Runtime.Serialization; /// De te wijzigen vertegenwoordiger @@ -9,12 +8,10 @@ public class TeWijzigenVertegenwoordiger { /// Dit is de rol van de vertegenwoordiger binnen de vereniging [DataMember] - [NoHtml] public string? Rol { get; set; } /// Dit is de roepnaam van de vertegenwoordiger [DataMember] - [NoHtml] public string? Roepnaam { get; set; } /// @@ -25,21 +22,17 @@ public class TeWijzigenVertegenwoordiger /// Het e-mailadres van de vertegenwoordiger [DataMember(Name = "E-mail")] - [NoHtml] public string? Email { get; set; } /// Het telefoonnummer van de vertegenwoordiger [DataMember] - [NoHtml] public string? Telefoon { get; set; } /// Het mobiel nummer van de vertegenwoordiger [DataMember] - [NoHtml] public string? Mobiel { get; set; } /// Het socialmedia account van de vertegenwoordiger [DataMember] - [NoHtml] public string? SocialMedia { get; set; } } diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/Vertegenwoordigers/FeitelijkeVereniging/WijzigVertegenwoordiger/RequestModels/TeWijzigenVertegenwoordigerValidator.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/Vertegenwoordigers/FeitelijkeVereniging/WijzigVertegenwoordiger/RequestModels/TeWijzigenVertegenwoordigerValidator.cs new file mode 100644 index 000000000..712b3ae93 --- /dev/null +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/Vertegenwoordigers/FeitelijkeVereniging/WijzigVertegenwoordiger/RequestModels/TeWijzigenVertegenwoordigerValidator.cs @@ -0,0 +1,16 @@ +namespace AssociationRegistry.Admin.Api.Verenigingen.Vertegenwoordigers.FeitelijkeVereniging.WijzigVertegenwoordiger.RequestModels; + +using FluentValidation; +using Infrastructure.Extensions; + +public class TeWijzigenVertegenwoordigerValidator : AbstractValidator +{ + public TeWijzigenVertegenwoordigerValidator() + { + RuleFor(vertegenwoordiger => vertegenwoordiger.Email).MustNotContainHtml(); + RuleFor(vertegenwoordiger => vertegenwoordiger.Mobiel).MustNotContainHtml(); + RuleFor(vertegenwoordiger => vertegenwoordiger.SocialMedia).MustNotContainHtml(); + RuleFor(vertegenwoordiger => vertegenwoordiger.Roepnaam).MustNotContainHtml(); + RuleFor(vertegenwoordiger => vertegenwoordiger.Rol).MustNotContainHtml(); + } +} diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/FeitelijkeVereniging/RequestModels/WijzigBasisgegevensRequest.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/FeitelijkeVereniging/RequestModels/WijzigBasisgegevensRequest.cs index bcbf0a642..3a76f937a 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/FeitelijkeVereniging/RequestModels/WijzigBasisgegevensRequest.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/FeitelijkeVereniging/RequestModels/WijzigBasisgegevensRequest.cs @@ -2,7 +2,6 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.WijzigBasisgegevens.Feiteli using Acties.WijzigBasisgegevens; using Common; -using Infrastructure.HtmlValidation; using Primitives; using System; using System.Linq; @@ -14,17 +13,14 @@ public class WijzigBasisgegevensRequest { /// Nieuwe naam van de vereniging [DataMember] - [NoHtml] public string? Naam { get; set; } /// Nieuwe korte naam van de vereniging [DataMember] - [NoHtml] public string? KorteNaam { get; set; } /// Nieuwe korte beschrijving van de vereniging [DataMember] - [NoHtml] public string? KorteBeschrijving { get; set; } /// Nieuwe startdatum van de vereniging. Deze datum mag niet later zijn dan vandaag @@ -41,7 +37,6 @@ public class WijzigBasisgegevensRequest /// De codes van de nieuwe hoofdactiviteiten volgens het verenigingsloket /// [DataMember] - [NoHtml] public string[]? HoofdactiviteitenVerenigingsloket { get; set; } /// diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/FeitelijkeVereniging/WijzigBasisgegevensRequestValidator.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/FeitelijkeVereniging/RequestModels/WijzigBasisgegevensRequestValidator.cs similarity index 81% rename from src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/FeitelijkeVereniging/WijzigBasisgegevensRequestValidator.cs rename to src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/FeitelijkeVereniging/RequestModels/WijzigBasisgegevensRequestValidator.cs index f6059fc3b..1e8df20d9 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/FeitelijkeVereniging/WijzigBasisgegevensRequestValidator.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/FeitelijkeVereniging/RequestModels/WijzigBasisgegevensRequestValidator.cs @@ -1,10 +1,10 @@ // ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract -namespace AssociationRegistry.Admin.Api.Verenigingen.WijzigBasisgegevens.FeitelijkeVereniging; +namespace AssociationRegistry.Admin.Api.Verenigingen.WijzigBasisgegevens.FeitelijkeVereniging.RequestModels; -using System.Linq; using Common; using FluentValidation; -using RequestModels; +using Infrastructure.Extensions; +using System.Linq; public class WijzigBasisgegevensRequestValidator : AbstractValidator { @@ -15,6 +15,11 @@ public WijzigBasisgegevensRequestValidator() .OverridePropertyName("request") .WithMessage("Een request mag niet leeg zijn."); + RuleFor(request => request.Naam).MustNotContainHtml(); + RuleFor(request => request.KorteNaam).MustNotContainHtml(); + RuleFor(request => request.KorteBeschrijving).MustNotContainHtml(); + RuleForEach(request => request.HoofdactiviteitenVerenigingsloket).MustNotContainHtml(); + RuleFor(request => request.Naam) .Must(naam => naam?.Trim() is null or not "") .WithMessage("'Naam' mag niet leeg zijn."); diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/MetRechtspersoonlijkheid/RequestModels/WijzigBasisgegevensRequest.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/MetRechtspersoonlijkheid/RequestModels/WijzigBasisgegevensRequest.cs index 54be5d241..569cdf3bb 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/MetRechtspersoonlijkheid/RequestModels/WijzigBasisgegevensRequest.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/MetRechtspersoonlijkheid/RequestModels/WijzigBasisgegevensRequest.cs @@ -1,10 +1,9 @@ namespace AssociationRegistry.Admin.Api.Verenigingen.WijzigBasisgegevens.MetRechtspersoonlijkheid.RequestModels; +using Acties.VerenigingMetRechtspersoonlijkheid.WijzigBasisgegevens; +using Common; using System.Linq; using System.Runtime.Serialization; -using AssociationRegistry.Acties.VerenigingMetRechtspersoonlijkheid.WijzigBasisgegevens; -using Common; -using Infrastructure.HtmlValidation; using Vereniging; [DataContract] @@ -12,7 +11,6 @@ public class WijzigBasisgegevensRequest { /// Nieuwe korte beschrijving van de vereniging [DataMember] - [NoHtml] public string? KorteBeschrijving { get; set; } /// @@ -25,14 +23,12 @@ public class WijzigBasisgegevensRequest /// De codes van de nieuwe hoofdactiviteiten volgens het verenigingsloket /// [DataMember] - [NoHtml] public string[]? HoofdactiviteitenVerenigingsloket { get; set; } /// /// De nieuwe roepnaam van de vereniging /// [DataMember] - [NoHtml] public string? Roepnaam { get; set; } public WijzigBasisgegevensCommand ToCommand(string vCode) diff --git a/src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/MetRechtspersoonlijkheid/WijzigBasisgegevensRequestValidator.cs b/src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/MetRechtspersoonlijkheid/RequestModels/WijzigBasisgegevensRequestValidator.cs similarity index 81% rename from src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/MetRechtspersoonlijkheid/WijzigBasisgegevensRequestValidator.cs rename to src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/MetRechtspersoonlijkheid/RequestModels/WijzigBasisgegevensRequestValidator.cs index f0cce7d97..61a10f89b 100644 --- a/src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/MetRechtspersoonlijkheid/WijzigBasisgegevensRequestValidator.cs +++ b/src/AssociationRegistry.Admin.Api/Verenigingen/WijzigBasisgegevens/MetRechtspersoonlijkheid/RequestModels/WijzigBasisgegevensRequestValidator.cs @@ -1,9 +1,9 @@ // ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract -namespace AssociationRegistry.Admin.Api.Verenigingen.WijzigBasisgegevens.MetRechtspersoonlijkheid; +namespace AssociationRegistry.Admin.Api.Verenigingen.WijzigBasisgegevens.MetRechtspersoonlijkheid.RequestModels; using Common; using FluentValidation; -using RequestModels; +using Infrastructure.Extensions; using System.Linq; public class WijzigBasisgegevensRequestValidator : AbstractValidator @@ -15,6 +15,10 @@ public WijzigBasisgegevensRequestValidator() .OverridePropertyName("request") .WithMessage("Een request mag niet leeg zijn."); + RuleFor(request => request.Roepnaam).MustNotContainHtml(); + RuleFor(request => request.KorteBeschrijving).MustNotContainHtml(); + RuleForEach(request => request.HoofdactiviteitenVerenigingsloket).MustNotContainHtml(); + RuleFor(request => request.HoofdactiviteitenVerenigingsloket) .Must(NotHaveDuplicates!) .WithMessage("Elke waarde in de hoofdactiviteiten mag slechts 1 maal voorkomen.") diff --git a/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_RegistreerFeitelijkeVereniging/RequestHandling/With_A_Null_Request.cs b/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_RegistreerFeitelijkeVereniging/RequestHandling/With_A_Null_Request.cs index 8b49afbf7..5ce44ef4d 100644 --- a/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_RegistreerFeitelijkeVereniging/RequestHandling/With_A_Null_Request.cs +++ b/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_RegistreerFeitelijkeVereniging/RequestHandling/With_A_Null_Request.cs @@ -1,9 +1,9 @@ namespace AssociationRegistry.Test.Admin.Api.FeitelijkeVereniging.When_RegistreerFeitelijkeVereniging.RequestHandling; -using AssociationRegistry.Admin.Api.Infrastructure; using AssociationRegistry.Admin.Api.Infrastructure.ConfigurationBindings; using AssociationRegistry.Admin.Api.Infrastructure.ExceptionHandlers; using AssociationRegistry.Admin.Api.Verenigingen.Registreer.FeitelijkeVereniging; +using AssociationRegistry.Admin.Api.Verenigingen.Registreer.FeitelijkeVereniging.RequetsModels; using Fakes; using Framework; using Xunit; @@ -17,13 +17,16 @@ public class With_A_Null_Request public With_A_Null_Request() { var messageBusMock = new MessageBusMock(); - _controller = new RegistreerFeitelijkeVerenigingController(messageBusMock, new RegistreerFeitelijkeVerenigingRequestValidator(new ClockStub(DateOnly.MaxValue)), new AppSettings()); + + _controller = new RegistreerFeitelijkeVerenigingController(messageBusMock, + new RegistreerFeitelijkeVerenigingRequestValidator( + new ClockStub(DateOnly.MaxValue)), new AppSettings()); } [Fact] public async Task Then_it_throws_a_CouldNotParseRequestException() { await Assert.ThrowsAsync( - async () => await _controller.Post(request: null, new CommandMetadataProviderStub { Initiator= "OVO000001" }, string.Empty)); + async () => await _controller.Post(request: null, new CommandMetadataProviderStub { Initiator = "OVO000001" }, string.Empty)); } } diff --git a/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_RegistreerFeitelijkeVereniging/RequestValidating/A_Doelgroep.cs b/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_RegistreerFeitelijkeVereniging/RequestValidating/A_Doelgroep.cs index ae6acabd4..a584f707d 100644 --- a/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_RegistreerFeitelijkeVereniging/RequestValidating/A_Doelgroep.cs +++ b/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_RegistreerFeitelijkeVereniging/RequestValidating/A_Doelgroep.cs @@ -1,7 +1,7 @@ namespace AssociationRegistry.Test.Admin.Api.FeitelijkeVereniging.When_RegistreerFeitelijkeVereniging.RequestValidating; using AssociationRegistry.Admin.Api.Verenigingen.Common; -using AssociationRegistry.Admin.Api.Verenigingen.Registreer.FeitelijkeVereniging; +using AssociationRegistry.Admin.Api.Verenigingen.Registreer.FeitelijkeVereniging.RequetsModels; using FluentValidation.TestHelper; using Test.Framework; using Xunit; @@ -15,6 +15,6 @@ public void Uses_DoelgroepValidator() { var validator = new RegistreerFeitelijkeVerenigingRequestValidator(new ClockStub(DateOnly.MaxValue)); - validator.ShouldHaveChildValidator(request => request.Doelgroep, typeof(DoelgroepRequestValidator)); + validator.ShouldHaveChildValidator(expression: request => request.Doelgroep, typeof(DoelgroepRequestValidator)); } } diff --git a/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_RegistreerFeitelijkeVereniging/With_Html_Fields.cs b/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_RegistreerFeitelijkeVereniging/With_Html_Fields.cs index 9e7661e7d..fd422ca82 100644 --- a/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_RegistreerFeitelijkeVereniging/With_Html_Fields.cs +++ b/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_RegistreerFeitelijkeVereniging/With_Html_Fields.cs @@ -21,25 +21,7 @@ public IEnumerator GetEnumerator() var autoFixture = new Fixture().CustomizeAdminApi(); var request1 = autoFixture.Create(); - - // request1.Naam = $"

{autoFixture.Create()}

"; - request1.Contactgegevens = new ToeTeVoegenContactgegeven[] - { - new() - { - Beschrijving = $"

{autoFixture.Create()}

", - Contactgegeventype = "Mumbo Jumbo", - Waarde = "Test", - IsPrimair = false, - }, - new() - { - Beschrijving = $"

{autoFixture.Create()}

", - Contactgegeventype = $"

{autoFixture.Create()}

", - Waarde = "Test", - IsPrimair = false, - }, - }; + request1.Naam = $"

{autoFixture.Create()}

"; yield return new object[] { request1 }; @@ -51,14 +33,18 @@ public IEnumerator GetEnumerator() var request3 = autoFixture.Create(); request3.KorteNaam = "Click here"; + yield return new object[] { request3 }; + var request4 = autoFixture.Create(); var contactgegeven = autoFixture.Create(); + contactgegeven.Beschrijving = "
";
+        contactgegeven.Beschrijving = $"

{autoFixture.Create()}

"; + contactgegeven.Waarde = "Test"; + request4.Contactgegevens = request4.Contactgegevens.Append(contactgegeven).ToArray(); yield return new object[] { request4 }; - - yield return new object[] { request3 }; } IEnumerator IEnumerable.GetEnumerator() @@ -83,8 +69,11 @@ public async Task Then_it_returns_a_bad_request_response(RegistreerFeitelijkeVer { var response = await _fixture.DefaultClient.RegistreerFeitelijkeVereniging(GetJsonBody(request)); response.StatusCode.Should().Be(HttpStatusCode.BadRequest); + var body = JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync()); - body.ValidationErrors.Should().ContainKey(ExceptionMessages.UnsupportedContent); // TODO: OF EEN ANDER VELD + + body.HttpStatus.Should().Be(400); + body.Detail.Should().ContainAny("Validatie mislukt!"); } private string GetJsonBody(RegistreerFeitelijkeVerenigingRequest request) diff --git a/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_WijzigBasisGegevens/RequestHandling/With_Null_Request.cs b/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_WijzigBasisGegevens/RequestHandling/With_Null_Request.cs index b480a0cdf..173aca036 100644 --- a/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_WijzigBasisGegevens/RequestHandling/With_Null_Request.cs +++ b/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_WijzigBasisGegevens/RequestHandling/With_Null_Request.cs @@ -1,9 +1,9 @@ namespace AssociationRegistry.Test.Admin.Api.FeitelijkeVereniging.When_WijzigBasisGegevens.RequestHandling; -using AssociationRegistry.Admin.Api.Infrastructure; using AssociationRegistry.Admin.Api.Infrastructure.ConfigurationBindings; using AssociationRegistry.Admin.Api.Infrastructure.ExceptionHandlers; using AssociationRegistry.Admin.Api.Verenigingen.WijzigBasisgegevens.FeitelijkeVereniging; +using AssociationRegistry.Admin.Api.Verenigingen.WijzigBasisgegevens.FeitelijkeVereniging.RequestModels; using Fakes; using Framework; using Xunit; @@ -26,9 +26,9 @@ public async Task Then_it_throws_a_CouldNotParseRequestException() await Assert.ThrowsAsync( async () => await _controller.Patch( new WijzigBasisgegevensRequestValidator(), - null, - "V0001001", - new CommandMetadataProviderStub { Initiator = "OVO0001001"}, - "M/\"1\"")); + request: null, + vCode: "V0001001", + new CommandMetadataProviderStub { Initiator = "OVO0001001" }, + ifMatch: "M/\"1\"")); } } diff --git a/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_WijzigBasisGegevens/RequestValidating/A_Doelgroep.cs b/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_WijzigBasisGegevens/RequestValidating/A_Doelgroep.cs index 61bb3b1a2..690393679 100644 --- a/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_WijzigBasisGegevens/RequestValidating/A_Doelgroep.cs +++ b/test/AssociationRegistry.Test.Admin.Api/FeitelijkeVereniging/When_WijzigBasisGegevens/RequestValidating/A_Doelgroep.cs @@ -1,7 +1,7 @@ namespace AssociationRegistry.Test.Admin.Api.FeitelijkeVereniging.When_WijzigBasisGegevens.RequestValidating; using AssociationRegistry.Admin.Api.Verenigingen.Common; -using AssociationRegistry.Admin.Api.Verenigingen.WijzigBasisgegevens.FeitelijkeVereniging; +using AssociationRegistry.Admin.Api.Verenigingen.WijzigBasisgegevens.FeitelijkeVereniging.RequestModels; using FluentValidation.TestHelper; using Xunit; using Xunit.Categories; @@ -14,6 +14,6 @@ public void Uses_DoelgroepValidator() { var validator = new WijzigBasisgegevensRequestValidator(); - validator.ShouldHaveChildValidator(request => request.Doelgroep, typeof(DoelgroepRequestValidator)); + validator.ShouldHaveChildValidator(expression: request => request.Doelgroep, typeof(DoelgroepRequestValidator)); } } diff --git a/test/AssociationRegistry.Test.Admin.Api/VerenigingMetRechtspersoonlijkheid/When_WijzigBasisGegevens/RequestHandling/With_Null_Request.cs b/test/AssociationRegistry.Test.Admin.Api/VerenigingMetRechtspersoonlijkheid/When_WijzigBasisGegevens/RequestHandling/With_Null_Request.cs index e87cf0aca..e2579a594 100644 --- a/test/AssociationRegistry.Test.Admin.Api/VerenigingMetRechtspersoonlijkheid/When_WijzigBasisGegevens/RequestHandling/With_Null_Request.cs +++ b/test/AssociationRegistry.Test.Admin.Api/VerenigingMetRechtspersoonlijkheid/When_WijzigBasisGegevens/RequestHandling/With_Null_Request.cs @@ -1,9 +1,9 @@ namespace AssociationRegistry.Test.Admin.Api.VerenigingMetRechtspersoonlijkheid.When_WijzigBasisGegevens.RequestHandling; -using AssociationRegistry.Admin.Api.Infrastructure; using AssociationRegistry.Admin.Api.Infrastructure.ConfigurationBindings; using AssociationRegistry.Admin.Api.Infrastructure.ExceptionHandlers; using AssociationRegistry.Admin.Api.Verenigingen.WijzigBasisgegevens.MetRechtspersoonlijkheid; +using AssociationRegistry.Admin.Api.Verenigingen.WijzigBasisgegevens.MetRechtspersoonlijkheid.RequestModels; using Fakes; using Framework; using Xunit; @@ -26,9 +26,9 @@ public async Task Then_it_throws_a_CouldNotParseRequestException() await Assert.ThrowsAsync( async () => await _controller.Patch( new WijzigBasisgegevensRequestValidator(), - null, - "V0001001", - new CommandMetadataProviderStub { Initiator= "OVO000001" }, - "M/\"1\"")); + request: null, + vCode: "V0001001", + new CommandMetadataProviderStub { Initiator = "OVO000001" }, + ifMatch: "M/\"1\"")); } } diff --git a/test/AssociationRegistry.Test.Admin.Api/VerenigingMetRechtspersoonlijkheid/When_WijzigBasisGegevens/RequestValidating/A_Doelgroep.cs b/test/AssociationRegistry.Test.Admin.Api/VerenigingMetRechtspersoonlijkheid/When_WijzigBasisGegevens/RequestValidating/A_Doelgroep.cs index 44b9e75ab..be744daa7 100644 --- a/test/AssociationRegistry.Test.Admin.Api/VerenigingMetRechtspersoonlijkheid/When_WijzigBasisGegevens/RequestValidating/A_Doelgroep.cs +++ b/test/AssociationRegistry.Test.Admin.Api/VerenigingMetRechtspersoonlijkheid/When_WijzigBasisGegevens/RequestValidating/A_Doelgroep.cs @@ -1,7 +1,7 @@ namespace AssociationRegistry.Test.Admin.Api.VerenigingMetRechtspersoonlijkheid.When_WijzigBasisGegevens.RequestValidating; using AssociationRegistry.Admin.Api.Verenigingen.Common; -using AssociationRegistry.Admin.Api.Verenigingen.WijzigBasisgegevens.MetRechtspersoonlijkheid; +using AssociationRegistry.Admin.Api.Verenigingen.WijzigBasisgegevens.MetRechtspersoonlijkheid.RequestModels; using FluentValidation.TestHelper; using Xunit; using Xunit.Categories; @@ -14,6 +14,6 @@ public void Uses_DoelgroepValidator() { var validator = new WijzigBasisgegevensRequestValidator(); - validator.ShouldHaveChildValidator(request => request.Doelgroep, typeof(DoelgroepRequestValidator)); + validator.ShouldHaveChildValidator(expression: request => request.Doelgroep, typeof(DoelgroepRequestValidator)); } } diff --git a/test/AssociationRegistry.Test.Admin.Api/VerenigingMetRechtspersoonlijkheid/When_Wijzig_MaatschappelijkeZetel/RequestHandling/With_Null_Request.cs b/test/AssociationRegistry.Test.Admin.Api/VerenigingMetRechtspersoonlijkheid/When_Wijzig_MaatschappelijkeZetel/RequestHandling/With_Null_Request.cs index 9188a405c..55cd621b2 100644 --- a/test/AssociationRegistry.Test.Admin.Api/VerenigingMetRechtspersoonlijkheid/When_Wijzig_MaatschappelijkeZetel/RequestHandling/With_Null_Request.cs +++ b/test/AssociationRegistry.Test.Admin.Api/VerenigingMetRechtspersoonlijkheid/When_Wijzig_MaatschappelijkeZetel/RequestHandling/With_Null_Request.cs @@ -1,9 +1,9 @@ namespace AssociationRegistry.Test.Admin.Api.VerenigingMetRechtspersoonlijkheid.When_Wijzig_MaatschappelijkeZetel.RequestHandling; -using AssociationRegistry.Admin.Api.Infrastructure; using AssociationRegistry.Admin.Api.Infrastructure.ConfigurationBindings; using AssociationRegistry.Admin.Api.Infrastructure.ExceptionHandlers; using AssociationRegistry.Admin.Api.Verenigingen.Locaties.VerenigingMetRechtspersoonlijkheid.WijzigMaatschappelijkeZetel; +using AssociationRegistry.Admin.Api.Verenigingen.Locaties.VerenigingMetRechtspersoonlijkheid.WijzigMaatschappelijkeZetel.RequestModels; using Fakes; using Framework; using Xunit; @@ -17,7 +17,9 @@ public class With_Null_Request public With_Null_Request() { var messageBusMock = new MessageBusMock(); - _controller = new WijzigMaatschappelijkeZetelController(messageBusMock, new WijzigMaatschappelijkeZetelRequestValidator(),new AppSettings()); + + _controller = new WijzigMaatschappelijkeZetelController(messageBusMock, new WijzigMaatschappelijkeZetelRequestValidator(), + new AppSettings()); } [Fact] @@ -25,10 +27,10 @@ public async Task Then_it_throws_a_CouldNotParseRequestException() { await Assert.ThrowsAsync( async () => await _controller.Patch( - "V0001001", - 1, - null, + vCode: "V0001001", + locatieId: 1, + request: null, new CommandMetadataProviderStub { Initiator = "OVO000001" }, - "M/\"1\"")); + ifMatch: "M/\"1\"")); } } diff --git a/test/AssociationRegistry.Test.Admin.Api/VerenigingMetRechtspersoonlijkheid/When_Wijzig_MaatschappelijkeZetel/RequestValidating/With_A_Locatie.cs b/test/AssociationRegistry.Test.Admin.Api/VerenigingMetRechtspersoonlijkheid/When_Wijzig_MaatschappelijkeZetel/RequestValidating/With_A_Locatie.cs index 73f907bd0..7429fb15a 100644 --- a/test/AssociationRegistry.Test.Admin.Api/VerenigingMetRechtspersoonlijkheid/When_Wijzig_MaatschappelijkeZetel/RequestValidating/With_A_Locatie.cs +++ b/test/AssociationRegistry.Test.Admin.Api/VerenigingMetRechtspersoonlijkheid/When_Wijzig_MaatschappelijkeZetel/RequestValidating/With_A_Locatie.cs @@ -1,8 +1,8 @@ namespace AssociationRegistry.Test.Admin.Api.VerenigingMetRechtspersoonlijkheid.When_Wijzig_MaatschappelijkeZetel.RequestValidating; -using AssociationRegistry.Admin.Api.Verenigingen.Locaties.VerenigingMetRechtspersoonlijkheid.WijzigMaatschappelijkeZetel; -using Framework; +using AssociationRegistry.Admin.Api.Verenigingen.Locaties.VerenigingMetRechtspersoonlijkheid.WijzigMaatschappelijkeZetel.RequestModels; using FluentValidation.TestHelper; +using Framework; using Xunit; using Xunit.Categories; @@ -13,6 +13,6 @@ public class With_A_Locatie : ValidatorTest public void Uses_TeWijzigenMaatschappelijkeZetelValidator() { var validator = new WijzigMaatschappelijkeZetelRequestValidator(); - validator.ShouldHaveChildValidator(request => request.Locatie, typeof(TeWijzigenMaatschappelijkeZetelValidator)); + validator.ShouldHaveChildValidator(expression: request => request.Locatie, typeof(TeWijzigenMaatschappelijkeZetelValidator)); } }