diff --git a/doc/hs-hosting-asset-type-structure.md b/doc/hs-hosting-asset-type-structure.md new file mode 100644 index 00000000..b80d1814 --- /dev/null +++ b/doc/hs-hosting-asset-type-structure.md @@ -0,0 +1,77 @@ +### HostingAsset Type Structure + +```mermaid +%%{init:{'flowchart':{'htmlLabels':false}}}%% +flowchart RL + +subgraph Booking + style Booking fill:white,stroke:white,stroke-width:0px + BI:PRIVATE_CLOUD + BI:CLOUD_SERVER + BI:MANAGED_SERVER + BI:MANAGED_WEBSPACE + BI:DOMAIN_DNS_SETUP + BI:DOMAIN_EMAIL_SUBMISSION_SETUP +end + +%% subgraph Hosting +subgraph Server[ ] + style Server fill:white,stroke:white,stroke-width:0px +HA:CLOUD_SERVER +HA:MANAGED_SERVER +HA:IP_NUMBER +end + +subgraph Domain[ ] + style Domain fill:white,stroke:white,stroke-width:0px +HA:DOMAIN_DNS_SETUP +HA:DOMAIN_HTTP_SETUP +HA:DOMAIN_EMAIL_SUBMISSION_SETUP +HA:DOMAIN_EMAIL_MAILBOX_SETUP +HA:EMAIL_ADDRESS +end + +subgraph Webspace[ ] + style Webspace fill:white,stroke:white,stroke-width:0px +HA:MANAGED_WEBSPACE +HA:UNIX_USER +HA:EMAIL_ALIAS +end + +%% end + +style HA:CLOUD_SERVER fill:#99bcdb,stroke:#274d6e,stroke-width:4px +style HA:MANAGED_SERVER fill:#99bcdb,stroke:#274d6e,stroke-width:4px +style HA:MANAGED_WEBSPACE fill:#99bcdb,stroke:#274d6e,stroke-width:4px +style HA:UNIX_USER fill:#99bcdb,stroke:#274d6e,stroke-width:4px +style HA:DOMAIN_DNS_SETUP fill:#99bcdb,stroke:#274d6e,stroke-width:4px +style HA:DOMAIN_HTTP_SETUP fill:#99bcdb,stroke:#274d6e,stroke-width:4px +style HA:DOMAIN_EMAIL_SUBMISSION_SETUP fill:#99bcdb,stroke:#274d6e,stroke-width:4px +style HA:DOMAIN_EMAIL_MAILBOX_SETUP fill:#99bcdb,stroke:#274d6e,stroke-width:4px +style HA:EMAIL_ALIAS fill:#99bcdb,stroke:#274d6e,stroke-width:4px +style HA:EMAIL_ADDRESS fill:#99bcdb,stroke:#274d6e,stroke-width:4px +style HA:IP_NUMBER fill:#99bcdb,stroke:#274d6e,stroke-width:4px + +BI:CLOUD_SERVER --> BI:PRIVATE_CLOUD +BI:MANAGED_SERVER --> BI:PRIVATE_CLOUD +BI:MANAGED_WEBSPACE --> BI:MANAGED_SERVER + +HA:CLOUD_SERVER ==> BI:CLOUD_SERVER +HA:MANAGED_SERVER ==> BI:MANAGED_SERVER +HA:MANAGED_WEBSPACE ==> BI:MANAGED_WEBSPACE +HA:MANAGED_WEBSPACE ==o HA:MANAGED_SERVER +HA:UNIX_USER ==> HA:MANAGED_WEBSPACE +HA:DOMAIN_DNS_SETUP ==> BI:DOMAIN_DNS_SETUP +HA:DOMAIN_HTTP_SETUP ==> HA:MANAGED_WEBSPACE +HA:DOMAIN_HTTP_SETUP -.-> HA:UNIX_USER +HA:DOMAIN_EMAIL_SUBMISSION_SETUP ==> BI:DOMAIN_EMAIL_SUBMISSION_SETUP +HA:DOMAIN_EMAIL_SUBMISSION_SETUP -.-o HA:MANAGED_WEBSPACE +HA:DOMAIN_EMAIL_MAILBOX_SETUP ==> HA:MANAGED_WEBSPACE +HA:EMAIL_ALIAS ==> HA:MANAGED_WEBSPACE +HA:EMAIL_ADDRESS ==> HA:DOMAIN_EMAIL_MAILBOX_SETUP +HA:IP_NUMBER -.-> HA:CLOUD_SERVER +HA:IP_NUMBER -.-> HA:MANAGED_SERVER +HA:IP_NUMBER -.-> HA:MANAGED_WEBSPACE +``` + +This code generated was by HsHostingAssetType.main, do not amend manually. diff --git a/src/main/java/net/hostsharing/hsadminng/hs/booking/item/HsBookingItemType.java b/src/main/java/net/hostsharing/hsadminng/hs/booking/item/HsBookingItemType.java index 719ce75b..6cb9c34f 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/booking/item/HsBookingItemType.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/booking/item/HsBookingItemType.java @@ -1,8 +1,37 @@ package net.hostsharing.hsadminng.hs.booking.item; -public enum HsBookingItemType { +import java.util.List; + +import static java.util.Optional.ofNullable; + +public enum HsBookingItemType implements Node { PRIVATE_CLOUD, - CLOUD_SERVER, - MANAGED_SERVER, - MANAGED_WEBSPACE + CLOUD_SERVER(PRIVATE_CLOUD), + MANAGED_SERVER(PRIVATE_CLOUD), + MANAGED_WEBSPACE(MANAGED_SERVER), + DOMAIN_DNS_SETUP, // TODO.spec: experimental + DOMAIN_EMAIL_SUBMISSION_SETUP; // TODO.spec: experimental + + private final HsBookingItemType parentItemType; + + HsBookingItemType() { + this.parentItemType = null; + } + + HsBookingItemType(final HsBookingItemType parentItemType) { + this.parentItemType = parentItemType; + } + + @Override + public List edges() { + return ofNullable(parentItemType) + .map(p -> (nodeName() + " --> " + p.nodeName())) + .stream().toList(); + } + + @Override + public String nodeName() { + return "BI:" + name(); + } + } diff --git a/src/main/java/net/hostsharing/hsadminng/hs/booking/item/Node.java b/src/main/java/net/hostsharing/hsadminng/hs/booking/item/Node.java new file mode 100644 index 00000000..cca14f5a --- /dev/null +++ b/src/main/java/net/hostsharing/hsadminng/hs/booking/item/Node.java @@ -0,0 +1,9 @@ +package net.hostsharing.hsadminng.hs.booking.item; + +import java.util.List; + +public interface Node { + + String nodeName(); + List edges(); +} diff --git a/src/main/java/net/hostsharing/hsadminng/hs/booking/item/validators/HsManagedWebspaceBookingItemValidator.java b/src/main/java/net/hostsharing/hsadminng/hs/booking/item/validators/HsManagedWebspaceBookingItemValidator.java index 81c74b9f..2bca0042 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/booking/item/validators/HsManagedWebspaceBookingItemValidator.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/booking/item/validators/HsManagedWebspaceBookingItemValidator.java @@ -8,7 +8,7 @@ import java.util.List; import static java.util.Collections.emptyList; import static java.util.Optional.ofNullable; -import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType.DOMAIN_EMAIL_SETUP; +import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType.DOMAIN_EMAIL_MAILBOX_SETUP; import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType.EMAIL_ADDRESS; import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType.MARIADB_DATABASE; import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType.MARIADB_USER; @@ -88,7 +88,7 @@ class HsManagedWebspaceBookingItemValidator extends HsBookingItemEntityValidator return (final HsBookingItemEntity entity, final IntegerProperty prop, final Integer factor) -> { final var unixUserCount = ofNullable(entity.getRelatedHostingAsset()) .map(ha -> ha.getSubHostingAssets().stream() - .filter(bi -> bi.getType() == DOMAIN_EMAIL_SETUP) + .filter(bi -> bi.getType() == DOMAIN_EMAIL_MAILBOX_SETUP) .flatMap(domainEMailSetup -> domainEMailSetup.getSubHostingAssets().stream() .filter(subAsset -> subAsset.getType()==EMAIL_ADDRESS)) .count()) diff --git a/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetType.java b/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetType.java index 88ccca45..5ae68f21 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetType.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetType.java @@ -1,33 +1,131 @@ package net.hostsharing.hsadminng.hs.hosting.asset; +import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemType; +import net.hostsharing.hsadminng.hs.booking.item.Node; -public enum HsHostingAssetType { - CLOUD_SERVER, // named e.g. vm1234 - MANAGED_SERVER, // named e.g. vm1234 - MANAGED_WEBSPACE(MANAGED_SERVER), // named eg. xyz00 - UNIX_USER(MANAGED_WEBSPACE), // named e.g. xyz00-abc - DOMAIN_SETUP, // named e.g. example.org - DOMAIN_DNS_SETUP(DOMAIN_SETUP), // named e.g. example.org - DOMAIN_HTTP_SETUP(DOMAIN_SETUP), // named e.g. example.org - DOMAIN_EMAIL_SETUP(DOMAIN_SETUP), // named e.g. example.org +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; +import java.util.Collection; +import java.util.List; +import java.util.Set; + +import static java.util.Arrays.stream; +import static java.util.stream.Collectors.joining; +import static net.hostsharing.hsadminng.hs.hosting.asset.EntityTypeRelation.*; + +public enum HsHostingAssetType implements Node { + CLOUD_SERVER( // named e.g. vm1234 + inGroup("Server"), + requires(HsBookingItemType.CLOUD_SERVER)), + + MANAGED_SERVER( // named e.g. vm1234 + inGroup("Server"), + requires(HsBookingItemType.MANAGED_SERVER)), + + MANAGED_WEBSPACE( // named eg. xyz00 + inGroup("Webspace"), + requires(HsBookingItemType.MANAGED_WEBSPACE), + optionalParent(MANAGED_SERVER)), + + UNIX_USER( // named e.g. xyz00-abc + inGroup("Webspace"), + requiredParent(MANAGED_WEBSPACE)), + +// DOMAIN_SETUP( // named e.g. example.org +// inGroup("Domain") +// ), + + DOMAIN_DNS_SETUP( // named e.g. example.org + inGroup("Domain"), + requires(HsBookingItemType.DOMAIN_DNS_SETUP)), + + DOMAIN_HTTP_SETUP( // named e.g. example.org + inGroup("Domain"), + requiredParent(MANAGED_WEBSPACE), + assignedTo(UNIX_USER)), + + DOMAIN_EMAIL_SUBMISSION_SETUP( // named e.g. example.org + inGroup("Domain"), + requires(HsBookingItemType.DOMAIN_EMAIL_SUBMISSION_SETUP), + optionallyAssignedTo(MANAGED_WEBSPACE)), + + DOMAIN_EMAIL_MAILBOX_SETUP( // named e.g. example.org + inGroup("Domain"), + requiredParent(MANAGED_WEBSPACE)), // TODO.spec: SECURE_MX - EMAIL_ALIAS(MANAGED_WEBSPACE), // named e.g. xyz00-abc - EMAIL_ADDRESS(DOMAIN_EMAIL_SETUP), // named e.g. sample@example.org - PGSQL_USER(MANAGED_WEBSPACE), // named e.g. xyz00_abc - PGSQL_DATABASE(MANAGED_WEBSPACE), // named e.g. xyz00_abc, TODO.spec: or PGSQL_USER? - MARIADB_USER(MANAGED_WEBSPACE), // named e.g. xyz00_abc - MARIADB_DATABASE(MANAGED_WEBSPACE); // named e.g. xyz00_abc, TODO.spec: or MARIADB_USER? + EMAIL_ALIAS( // named e.g. xyz00-abc + inGroup("Webspace"), + requiredParent(MANAGED_WEBSPACE)), - public final HsHostingAssetType parentAssetType; + EMAIL_ADDRESS( // named e.g. sample@example.org + inGroup("Domain"), + requiredParent(DOMAIN_EMAIL_MAILBOX_SETUP)), - HsHostingAssetType(final HsHostingAssetType parentAssetType) { - this.parentAssetType = parentAssetType; + PGSQL_INSTANCE( // TODO.spec: identifier to be specified + inGroup("PostgreSQL"), + requiredParent(MANAGED_SERVER)), + + PGSQL_USER( // named e.g. xyz00_abc + inGroup("PostgreSQL"), + requiredParent(PGSQL_INSTANCE), + assignedTo(MANAGED_WEBSPACE)), + + PGSQL_DATABASE( // named e.g. xyz00_abc + inGroup("PostgreSQL"), + requiredParent(MANAGED_WEBSPACE), // TODO.spec: or PGSQL_USER? + assignedTo(PGSQL_INSTANCE)), // TODO.spec: or swapping parent+assignedTo? + + MARIADB_INSTANCE( // TODO.spec: identifier to be specified + inGroup("MariaDB"), + requiredParent(MANAGED_SERVER)), // TODO.spec: or MANAGED_WEBSPACE? + + MARIADB_USER( // named e.g. xyz00_abc + inGroup("MariaDB"), + requiredParent(MARIADB_INSTANCE), + assignedTo(MANAGED_WEBSPACE)), + + MARIADB_DATABASE( // named e.g. xyz00_abc + inGroup("MariaDB"), + requiredParent(MANAGED_WEBSPACE), // TODO.spec: or MARIADB_USER? + assignedTo(MARIADB_INSTANCE)), // TODO.spec: or swapping parent+assignedTo? + + IP_NUMBER( + inGroup("Server"), + assignedTo(CLOUD_SERVER), + assignedTo(MANAGED_SERVER), + assignedTo(MANAGED_WEBSPACE) + ); + + private final String groupName; + private final EntityTypeRelation[] relations; + + HsHostingAssetType( + final String groupName, + final EntityTypeRelation... relations + ) { + this.groupName = groupName; + this.relations = relations; } - HsHostingAssetType() { - this(null); + /// just syntactic sugar + private static String inGroup(final String groupName) { + return groupName; + } + + @Override + public List edges() { + return stream(relations) + .map(r -> nodeName() + r.edge + r.relatedType.nodeName()) + .toList(); + } + + @Override + public String nodeName() { + return "HA:" + name(); } public static > HsHostingAssetType of(final T value) { @@ -37,4 +135,109 @@ public enum HsHostingAssetType { static String asString(final HsHostingAssetType type) { return type == null ? null : type.name(); } + + public static void main(final String[] args) throws IOException { + + final var includedHostingGroups = Set.of("Domain", "Server", "Webspace"); + + final String bookingNodes = stream(HsBookingItemType.values()) + .map(t -> " " + t.nodeName()) + .collect(joining("\n")); + final String hostingGroups = includedHostingGroups.stream() + .map(HsHostingAssetType::generateGroup) + .collect(joining("\n")); + final String hostingAssetNodeStyles = stream(HsHostingAssetType.values()) + .filter(t -> includedHostingGroups.contains(t.groupName)) + .map(n -> "style HA:"+n.name()+" fill:#99bcdb,stroke:#274d6e,stroke-width:4px") + .collect(joining("\n")); + final String bookingItemEdges = stream(HsBookingItemType.values()) + .map(HsBookingItemType::edges) + .flatMap(Collection::stream) + .collect(joining("\n")); + final String hostingAssetEdges = stream(HsHostingAssetType.values()) + .filter(t -> includedHostingGroups.contains(t.groupName)) + .map(HsHostingAssetType::edges) + .flatMap(Collection::stream) + .collect(joining("\n")); + Files.writeString( + Path.of("doc/hs-hosting-asset-type-structure.md"), + """ + ### HostingAsset Type Structure + + ```mermaid + %%{init:{'flowchart':{'htmlLabels':false}}}%% + flowchart RL + + subgraph Booking + style Booking fill:white,stroke:white,stroke-width:0px + %{bookingNodes} + end + + %% subgraph Hosting + %{hostingGroups} + %% end + + %{hostingAssetNodeStyles} + + %{bookingItemEdges} + + %{hostingAssetEdges} + ``` + + This code generated was by %{this}.main, do not amend manually. + """ + .replace("%{this}", HsHostingAssetType.class.getSimpleName()) + .replace("%{bookingNodes}", bookingNodes) + .replace("%{hostingGroups}", hostingGroups) + .replace("%{hostingAssetNodeStyles}", hostingAssetNodeStyles) + .replace("%{bookingItemEdges}", bookingItemEdges) + .replace("%{hostingAssetEdges}", hostingAssetEdges), + StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); + } + + private static String generateGroup(final String group) { + return "subgraph " + group + "[ ]\n" + + " style " + group + " fill:white,stroke:white,stroke-width:0px\n" + + stream(HsHostingAssetType.values()) + .filter(t -> t.groupName.equals(group)) + .map(HsHostingAssetType::nodeName) + .collect(joining(" \n")) + + "\nend\n"; + } +} + +enum TypeRelationType { + OPTIONAL, REQUIRED +} + +class EntityTypeRelation { + final String edge; + final TypeRelationType relationType; + final T relatedType; + + EntityTypeRelation(final String edge, final TypeRelationType required, final T relatedType) { + this.edge = edge; + this.relationType = required; + this.relatedType = relatedType; + } + + static EntityTypeRelation requires(final HsBookingItemType bookingItemType) { + return new EntityTypeRelation<>(" ==> ", TypeRelationType.REQUIRED, bookingItemType); + } + + static EntityTypeRelation optionalParent(final HsHostingAssetType hostingAssetType) { + return new EntityTypeRelation<>(" ==o ", TypeRelationType.OPTIONAL, hostingAssetType); + } + + static EntityTypeRelation requiredParent(final HsHostingAssetType hostingAssetType) { + return new EntityTypeRelation<>(" ==> ", TypeRelationType.REQUIRED, hostingAssetType); + } + + static EntityTypeRelation assignedTo(final HsHostingAssetType hostingAssetType) { + return new EntityTypeRelation<>(" -.-> ", TypeRelationType.REQUIRED, hostingAssetType); + } + + static EntityTypeRelation optionallyAssignedTo(final HsHostingAssetType hostingAssetType) { + return new EntityTypeRelation<>(" -.-o ", TypeRelationType.OPTIONAL, hostingAssetType); + } } diff --git a/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsDomainDnsSetupHostingAssetValidator.java b/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsDomainDnsSetupHostingAssetValidator.java index e09f77ef..3205a0da 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsDomainDnsSetupHostingAssetValidator.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsDomainDnsSetupHostingAssetValidator.java @@ -33,7 +33,7 @@ class HsDomainDnsSetupHostingAssetValidator extends HsHostingAssetEntityValidato HsDomainDnsSetupHostingAssetValidator() { super( BookingItem.mustBeNull(), - ParentAsset.mustBeOfType(HsHostingAssetType.DOMAIN_SETUP), + ParentAsset.mustBeNull(), AssignedToAsset.mustBeNull(), AlarmContact.isOptional(), diff --git a/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsHostingAssetEntityValidatorRegistry.java b/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsHostingAssetEntityValidatorRegistry.java index 3ae14256..432dee9a 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsHostingAssetEntityValidatorRegistry.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsHostingAssetEntityValidatorRegistry.java @@ -20,7 +20,6 @@ public class HsHostingAssetEntityValidatorRegistry { register(MANAGED_WEBSPACE, new HsManagedWebspaceHostingAssetValidator()); register(UNIX_USER, new HsUnixUserHostingAssetValidator()); register(EMAIL_ALIAS, new HsEMailAliasHostingAssetValidator()); - register(DOMAIN_SETUP, new HsDomainSetupHostingAssetValidator()); register(DOMAIN_DNS_SETUP, new HsDomainDnsSetupHostingAssetValidator()); } diff --git a/src/test/java/net/hostsharing/hsadminng/hs/booking/item/validators/HsManagedServerBookingItemValidatorUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/booking/item/validators/HsManagedServerBookingItemValidatorUnitTest.java index 11020d92..b0605239 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/booking/item/validators/HsManagedServerBookingItemValidatorUnitTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/booking/item/validators/HsManagedServerBookingItemValidatorUnitTest.java @@ -152,7 +152,7 @@ class HsManagedServerBookingItemValidatorUnitTest { "xyz00_%c%c", 2, HsHostingAssetType.MARIADB_DATABASE ), - generateDomainEmailSetupsWithEMailAddresses(26, HsHostingAssetType.DOMAIN_EMAIL_SETUP, + generateDomainEmailSetupsWithEMailAddresses(26, HsHostingAssetType.DOMAIN_EMAIL_MAILBOX_SETUP, "%c%c.example.com", 10, HsHostingAssetType.EMAIL_ADDRESS ) diff --git a/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetControllerRestTest.java b/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetControllerRestTest.java index eed85585..8cd2eb3f 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetControllerRestTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetControllerRestTest.java @@ -186,24 +186,6 @@ public class HsHostingAssetControllerRestTest { } ] """), - DOMAIN_SETUP( - List.of( - HsHostingAssetEntity.builder() - .type(HsHostingAssetType.DOMAIN_SETUP) - .identifier("example.org") - .caption("some fake Domain-Setup") - .build()), - """ - [ - { - "type": "DOMAIN_SETUP", - "identifier": "example.org", - "caption": "some fake Domain-Setup", - "alarmContact": null, - "config": {} - } - ] - """), DOMAIN_DNS_SETUP( List.of( HsHostingAssetEntity.builder() diff --git a/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetRepositoryIntegrationTest.java index 579257a0..c1849531 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetRepositoryIntegrationTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetRepositoryIntegrationTest.java @@ -27,7 +27,6 @@ import java.util.Map; import static java.util.Map.entry; import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType.CLOUD_SERVER; -import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType.DOMAIN_SETUP; import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType.MANAGED_SERVER; import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType.MANAGED_WEBSPACE; import static net.hostsharing.hsadminng.rbac.rbacgrant.RawRbacGrantEntity.distinctGrantDisplaysOf; @@ -167,7 +166,6 @@ class HsHostingAssetRepositoryIntegrationTest extends ContextBasedTestWithCleanu final var result = attempt(em, () -> { final var newAsset = HsHostingAssetEntity.builder() .caption("some new domain setup") - .type(DOMAIN_SETUP) .identifier("example.org") .build(); return toCleanup(assetRepo.save(newAsset)); diff --git a/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsDomainDnsSetupHostingAssetValidatorUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsDomainDnsSetupHostingAssetValidatorUnitTest.java index 671b9452..d1ea3563 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsDomainDnsSetupHostingAssetValidatorUnitTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsDomainDnsSetupHostingAssetValidatorUnitTest.java @@ -11,7 +11,6 @@ import java.util.Map; import static java.util.Map.entry; import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType.DOMAIN_DNS_SETUP; -import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType.DOMAIN_SETUP; import static net.hostsharing.hsadminng.hs.hosting.asset.validators.HsDomainDnsSetupHostingAssetValidator.RR_COMMENT; import static net.hostsharing.hsadminng.hs.hosting.asset.validators.HsDomainDnsSetupHostingAssetValidator.RR_RECORD_DATA; import static net.hostsharing.hsadminng.hs.hosting.asset.validators.HsDomainDnsSetupHostingAssetValidator.RR_RECORD_TYPE; @@ -23,7 +22,6 @@ import static org.assertj.core.api.Assertions.assertThat; class HsDomainDnsSetupHostingAssetValidatorUnitTest { static final HsHostingAssetEntity validDomainSetupEntity = HsHostingAssetEntity.builder() - .type(DOMAIN_SETUP) .identifier("example.org") .build(); diff --git a/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsDomainSetupHostingAssetValidatorUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsDomainSetupHostingAssetValidatorUnitTest.java deleted file mode 100644 index b7d78567..00000000 --- a/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsDomainSetupHostingAssetValidatorUnitTest.java +++ /dev/null @@ -1,111 +0,0 @@ -package net.hostsharing.hsadminng.hs.hosting.asset.validators; - -import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemEntity; -import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemType; -import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetEntity; -import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetEntity.HsHostingAssetEntityBuilder; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; - -import java.util.Map; - -import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType.CLOUD_SERVER; -import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType.DOMAIN_SETUP; -import static org.assertj.core.api.Assertions.assertThat; - -class HsDomainSetupHostingAssetValidatorUnitTest { - - static HsHostingAssetEntityBuilder validEntityBuilder() { - return HsHostingAssetEntity.builder() - .type(DOMAIN_SETUP) - .identifier("example.org"); - } - - enum InvalidDomainNameIdentifier { - EMPTY(""), - TOO_LONG("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456890123456789.de"), - DASH_AT_BEGINNING("-example.com"), - DOT_AT_BEGINNING(".example.com"), - DOT_AT_END("example.com."); - - final String domainName; - - InvalidDomainNameIdentifier(final String domainName) { - this.domainName = domainName; - } - } - - @ParameterizedTest - @EnumSource(InvalidDomainNameIdentifier.class) - void rejectsInvalidIdentifier(final InvalidDomainNameIdentifier testCase) { - // given - final var givenEntity = validEntityBuilder().identifier(testCase.domainName).build(); - final var validator = HsHostingAssetEntityValidatorRegistry.forType(givenEntity.getType()); - - // when - final var result = validator.validateEntity(givenEntity); - - // then - assertThat(result).containsExactly( - "'identifier' expected to match '^((?!-)[A-Za-z0-9-]{1,63}(?