user-definable verificationCode and more business-level-validation-tests #100
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user