bi-validation in domain-setup business-rules-test

This commit is contained in:
Michael Hoennig 2024-09-11 19:57:28 +02:00
parent cf46104766
commit 0acb05207c

View File

@ -3,6 +3,7 @@ package net.hostsharing.hsadminng.hs.hosting.asset.validators;
import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemRealEntity; import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemRealEntity;
import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemType; import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemType;
import net.hostsharing.hsadminng.hs.booking.item.validators.HsBookingItemEntityValidatorRegistry; import net.hostsharing.hsadminng.hs.booking.item.validators.HsBookingItemEntityValidatorRegistry;
import net.hostsharing.hsadminng.hs.booking.project.HsBookingProjectRealEntity;
import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetRbacEntity; import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetRbacEntity;
import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetRealEntity; import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetRealEntity;
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.AfterEach;
@ -35,8 +36,10 @@ class HsDomainSetupHostingAssetValidatorUnitTest {
static HsHostingAssetRbacEntity.HsHostingAssetRbacEntityBuilder<?, ?> validEntityBuilder( static HsHostingAssetRbacEntity.HsHostingAssetRbacEntityBuilder<?, ?> validEntityBuilder(
final String domainName, final String domainName,
final Function<HsBookingItemRealEntity.HsBookingItemRealEntityBuilder<?, ?>, HsBookingItemRealEntity> buildBookingItem) { final Function<HsBookingItemRealEntity.HsBookingItemRealEntityBuilder<?, ?>, HsBookingItemRealEntity> buildBookingItem) {
final HsBookingItemRealEntity bookingItem = buildBookingItem.apply( final var project = HsBookingProjectRealEntity.builder().build();
final var bookingItem = buildBookingItem.apply(
HsBookingItemRealEntity.builder() HsBookingItemRealEntity.builder()
.project(project)
.type(HsBookingItemType.DOMAIN_SETUP) .type(HsBookingItemType.DOMAIN_SETUP)
.resources(new HashMap<>(ofEntries( .resources(new HashMap<>(ofEntries(
entry("domainName", domainName) entry("domainName", domainName)
@ -90,7 +93,8 @@ class HsDomainSetupHostingAssetValidatorUnitTest {
// then // then
assertThat(result).contains( assertThat(result).contains(
"'identifier' expected to match '(\\*|(?!-)[A-Za-z0-9-]{1,63}(?<!-))\\.example\\.org', but is '" + testCase.domainName + "'" "'identifier' expected to match '(\\*|(?!-)[A-Za-z0-9-]{1,63}(?<!-))\\.example\\.org', but is '"
+ testCase.domainName + "'"
); );
} }
@ -141,8 +145,9 @@ class HsDomainSetupHostingAssetValidatorUnitTest {
@Test @Test
void validatesReferencedEntities() { void validatesReferencedEntities() {
// given // given
final var domainSetupHostingAssetEntity = validEntityBuilder("example.org", final var domainSetupHostingAssetEntity = validEntityBuilder(
bib -> bib.type(HsBookingItemType.CLOUD_SERVER).build()) "example.org",
bib -> bib.type(HsBookingItemType.CLOUD_SERVER).build())
.parentAsset(HsHostingAssetRealEntity.builder().type(CLOUD_SERVER).build()) .parentAsset(HsHostingAssetRealEntity.builder().type(CLOUD_SERVER).build())
.assignedToAsset(HsHostingAssetRealEntity.builder().type(MANAGED_SERVER).build()) .assignedToAsset(HsHostingAssetRealEntity.builder().type(MANAGED_SERVER).build())
.build(); .build();
@ -161,11 +166,12 @@ class HsDomainSetupHostingAssetValidatorUnitTest {
@Test @Test
void rejectsDomainNameNotMatchingBookingItemDomainName() { void rejectsDomainNameNotMatchingBookingItemDomainName() {
// given // given
final var domainSetupHostingAssetEntity = validEntityBuilder("not-matching-booking-item-domain-name.org", final var domainSetupHostingAssetEntity = validEntityBuilder(
bib -> bib.resources(new HashMap<>(ofEntries( "not-matching-booking-item-domain-name.org",
entry("domainName", "example.org") bib -> bib.resources(new HashMap<>(ofEntries(
))).build() entry("domainName", "example.org")
).build(); ))).build()
).build();
final var validator = HostingAssetEntityValidatorRegistry.forType(domainSetupHostingAssetEntity.getType()); final var validator = HostingAssetEntityValidatorRegistry.forType(domainSetupHostingAssetEntity.getType());
// when // when
@ -262,6 +268,24 @@ class HsDomainSetupHostingAssetValidatorUnitTest {
//===================================================================================================================== //=====================================================================================================================
@Test
void rejectsSetupOfRegistrar1stLevelDomain() {
domainSetupFor("org").notRegistered()
.isRejectedWithCauseForbidden("registrar-level domain name");
}
@Test
void rejectsSetupOfRegistrar2ndLevelDomain() {
domainSetupFor("co.uk").notRegistered()
.isRejectedWithCauseForbidden("registrar-level domain name");
}
@Test
void rejectsSetupOfHostsharingDmain() {
domainSetupFor("hostsharing.net").notRegistered()
.isRejectedWithCauseForbidden("Hostsharing domain name");
}
@Test @Test
void allowSetupOfAvailableRegistrableDomain() { void allowSetupOfAvailableRegistrableDomain() {
domainSetupFor("example.com").notRegistered() domainSetupFor("example.com").notRegistered()
@ -416,13 +440,27 @@ class HsDomainSetupHostingAssetValidatorUnitTest {
+ "' found for domain name '" + domainName + "'"); + "' found for domain name '" + domainName + "'");
} }
void isRejectedWithCauseForbidden(final String type) {
assertThat(validate()).contains(
"'D-???????:null:null.resources.domainName' = '" + domainAsset.getIdentifier() + "' is a forbidden " + type
);
}
void isAccepted() { void isAccepted() {
assertThat(validate()).isEmpty(); assertThat(validate()).isEmpty();
} }
private List<String> validate() { private List<String> validate() {
final var validator = HostingAssetEntityValidatorRegistry.forType(DOMAIN_SETUP); if ( domainAsset.getBookingItem() != null ) {
return validator.validateEntity(domainAsset); final var biValidation = HsBookingItemEntityValidatorRegistry.forType(HsBookingItemType.DOMAIN_SETUP)
.validateEntity(domainAsset.getBookingItem());
if (!biValidation.isEmpty()) {
return biValidation;
}
}
return HostingAssetEntityValidatorRegistry.forType(DOMAIN_SETUP)
.validateEntity(domainAsset);
} }
} }
@ -432,7 +470,10 @@ class HsDomainSetupHostingAssetValidatorUnitTest {
private DomainSetupBuilder domainSetupWithParentAssetFor(final String domainName) { private DomainSetupBuilder domainSetupWithParentAssetFor(final String domainName) {
return new DomainSetupBuilder( return new DomainSetupBuilder(
HsHostingAssetRealEntity.builder().type(DOMAIN_SETUP).identifier(Dns.superDomain(domainName).orElseThrow()).build(), HsHostingAssetRealEntity.builder()
.type(DOMAIN_SETUP)
.identifier(Dns.superDomain(domainName).orElseThrow())
.build(),
domainName); domainName);
} }
} }