diff --git a/.run/ImportHostingAssets.run.xml b/.run/ImportHostingAssets.run.xml
new file mode 100644
index 00000000..bedd7143
--- /dev/null
+++ b/.run/ImportHostingAssets.run.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+ true
+
+
+
+ false
+ true
+
+
+
\ No newline at end of file
diff --git a/.run/ImportOfficeData.run.xml b/.run/ImportOfficeData.run.xml
new file mode 100644
index 00000000..92ce7bd5
--- /dev/null
+++ b/.run/ImportOfficeData.run.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+ true
+
+
+
+ false
+ true
+
+
+
diff --git a/.run/README.txt b/.run/README.txt
new file mode 100644
index 00000000..96094ded
--- /dev/null
+++ b/.run/README.txt
@@ -0,0 +1 @@
+Stored run-Configurations for IntelliJ IDEA.
diff --git a/doc/rbac-performance-analysis.md b/doc/rbac-performance-analysis.md
index 43f47ec6..3e43a090 100644
--- a/doc/rbac-performance-analysis.md
+++ b/doc/rbac-performance-analysis.md
@@ -121,8 +121,8 @@ WITH statements AS (
SELECT * FROM pg_stat_statements pss
)
SELECT calls,
- total_exec_time::int/(60*1000) as total_exec_time_mins,
- mean_exec_time::int as mean_exec_time_millis,
+ total_exec_time::int/(60*1000) as total_mins,
+ mean_exec_time::int as mean_millis,
query
FROM statements
WHERE calls > 100 AND shared_blks_hit > 0
diff --git a/src/main/java/net/hostsharing/hsadminng/errors/CustomErrorResponse.java b/src/main/java/net/hostsharing/hsadminng/errors/CustomErrorResponse.java
index 9b182137..3df51ebb 100644
--- a/src/main/java/net/hostsharing/hsadminng/errors/CustomErrorResponse.java
+++ b/src/main/java/net/hostsharing/hsadminng/errors/CustomErrorResponse.java
@@ -46,6 +46,6 @@ public class CustomErrorResponse {
this.path = path;
this.statusCode = status.value();
this.statusPhrase = status.getReasonPhrase();
- this.message = message;
+ this.message = message.startsWith("ERROR: [") ? message : "ERROR: [" + statusCode + "] " + message;
}
}
diff --git a/src/main/java/net/hostsharing/hsadminng/errors/DisplayAs.java b/src/main/java/net/hostsharing/hsadminng/errors/DisplayAs.java
new file mode 100644
index 00000000..020d006a
--- /dev/null
+++ b/src/main/java/net/hostsharing/hsadminng/errors/DisplayAs.java
@@ -0,0 +1,24 @@
+package net.hostsharing.hsadminng.errors;
+
+import jakarta.validation.constraints.NotNull;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface DisplayAs {
+ class DisplayName {
+ public static String of(final Class> clazz) {
+ final var displayNameAnnot = clazz.getAnnotation(DisplayAs.class);
+ return displayNameAnnot != null ? displayNameAnnot.value() : clazz.getSimpleName();
+ }
+
+ public static String of(@NotNull final Object instance) {
+ return of(instance.getClass());
+ }
+ }
+
+ String value() default "";
+}
diff --git a/src/main/java/net/hostsharing/hsadminng/errors/DisplayName.java b/src/main/java/net/hostsharing/hsadminng/errors/DisplayName.java
deleted file mode 100644
index 8c5eed4c..00000000
--- a/src/main/java/net/hostsharing/hsadminng/errors/DisplayName.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package net.hostsharing.hsadminng.errors;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface DisplayName {
- String value() default "";
-}
diff --git a/src/main/java/net/hostsharing/hsadminng/errors/RestResponseEntityExceptionHandler.java b/src/main/java/net/hostsharing/hsadminng/errors/RestResponseEntityExceptionHandler.java
index d4d6e8bf..c366d7bc 100644
--- a/src/main/java/net/hostsharing/hsadminng/errors/RestResponseEntityExceptionHandler.java
+++ b/src/main/java/net/hostsharing/hsadminng/errors/RestResponseEntityExceptionHandler.java
@@ -152,8 +152,8 @@ public class RestResponseEntityExceptionHandler
final var entityName = matcher.group(1);
final var entityClass = resolveClass(entityName);
if (entityClass.isPresent()) {
- return (entityClass.get().isAnnotationPresent(DisplayName.class)
- ? exceptionMessage.replace(entityName, entityClass.get().getAnnotation(DisplayName.class).value())
+ return (entityClass.get().isAnnotationPresent(DisplayAs.class)
+ ? exceptionMessage.replace(entityName, entityClass.get().getAnnotation(DisplayAs.class).value())
: exceptionMessage.replace(entityName, entityClass.get().getSimpleName()))
.replace(" with id ", " with uuid ");
}
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/booking/debitor/HsBookingDebitorEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/booking/debitor/HsBookingDebitorEntity.java
index 052370f0..6a288a44 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/booking/debitor/HsBookingDebitorEntity.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/booking/debitor/HsBookingDebitorEntity.java
@@ -4,7 +4,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
-import net.hostsharing.hsadminng.errors.DisplayName;
+import net.hostsharing.hsadminng.errors.DisplayAs;
import net.hostsharing.hsadminng.stringify.Stringify;
import net.hostsharing.hsadminng.stringify.Stringifyable;
@@ -23,7 +23,7 @@ import static net.hostsharing.hsadminng.stringify.Stringify.stringify;
@Builder
@NoArgsConstructor
@AllArgsConstructor
-@DisplayName("BookingDebitor")
+@DisplayAs("BookingDebitor")
public class HsBookingDebitorEntity implements Stringifyable {
public static final String DEBITOR_NUMBER_TAG = "D-";
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/booking/item/HsBookingItemEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/booking/item/HsBookingItemEntity.java
index a9a9c879..a7b9db66 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/booking/item/HsBookingItemEntity.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/booking/item/HsBookingItemEntity.java
@@ -15,7 +15,7 @@ import net.hostsharing.hsadminng.hs.validation.PropertiesProvider;
import net.hostsharing.hsadminng.mapper.PatchableMapWrapper;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import net.hostsharing.hsadminng.stringify.Stringify;
import net.hostsharing.hsadminng.stringify.Stringifyable;
import org.hibernate.annotations.Type;
@@ -71,7 +71,7 @@ import static net.hostsharing.hsadminng.stringify.Stringify.stringify;
@Setter
@NoArgsConstructor
@AllArgsConstructor
-public class HsBookingItemEntity implements Stringifyable, RbacObject, PropertiesProvider {
+public class HsBookingItemEntity implements Stringifyable, BaseEntity, PropertiesProvider {
private static Stringify stringify = stringify(HsBookingItemEntity.class)
.withProp(HsBookingItemEntity::getProject)
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/booking/project/HsBookingProjectEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/booking/project/HsBookingProjectEntity.java
index 8f5d1397..c44d43f5 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/booking/project/HsBookingProjectEntity.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/booking/project/HsBookingProjectEntity.java
@@ -3,10 +3,10 @@ package net.hostsharing.hsadminng.hs.booking.project;
import lombok.*;
import net.hostsharing.hsadminng.hs.booking.debitor.HsBookingDebitorEntity;
import net.hostsharing.hsadminng.hs.office.debitor.HsOfficeDebitorEntity;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRbacEntity;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import net.hostsharing.hsadminng.stringify.Stringify;
import net.hostsharing.hsadminng.stringify.Stringifyable;
@@ -34,7 +34,7 @@ import static net.hostsharing.hsadminng.stringify.Stringify.stringify;
@Setter
@NoArgsConstructor
@AllArgsConstructor
-public class HsBookingProjectEntity implements Stringifyable, RbacObject {
+public class HsBookingProjectEntity implements Stringifyable, BaseEntity {
private static Stringify stringify = stringify(HsBookingProjectEntity.class)
.withProp(HsBookingProjectEntity::getDebitor)
@@ -81,7 +81,7 @@ public class HsBookingProjectEntity implements Stringifyable, RbacObject, PropertiesProvider {
+public interface HsHostingAsset extends Stringifyable, BaseEntity, PropertiesProvider {
Stringify stringify = stringify(HsHostingAsset.class)
.withProp(HsHostingAsset::getType)
@@ -36,7 +36,7 @@ public interface HsHostingAsset extends Stringifyable, RbacObject getSubHostingAssets();
String getCaption();
Map getConfig();
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetEntity.java
index ceb27238..4083ab36 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetEntity.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetEntity.java
@@ -8,7 +8,8 @@ import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemEntity;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealEntity;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRbacEntity;
import net.hostsharing.hsadminng.mapper.PatchableMapWrapper;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL;
@@ -54,7 +55,6 @@ import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Role.REFERRER;
import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Role.TENANT;
import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL.directlyFetchedByDependsOnColumn;
import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.rbacViewFor;
-import static net.hostsharing.hsadminng.stringify.Stringify.stringify;
@Builder
@Entity
@@ -90,7 +90,7 @@ public class HsHostingAssetEntity implements HsHostingAsset {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "alarmcontactuuid")
- private HsOfficeContactEntity alarmContact;
+ private HsOfficeContactRealEntity alarmContact;
@OneToMany(cascade = CascadeType.REFRESH, orphanRemoval = true, fetch = FetchType.LAZY)
@JoinColumn(name = "parentassetuuid", referencedColumnName = "uuid")
@@ -160,7 +160,7 @@ public class HsHostingAssetEntity implements HsHostingAsset {
directlyFetchedByDependsOnColumn(),
NULLABLE)
- .importEntityAlias("alarmContact", HsOfficeContactEntity.class, usingDefaultCase(),
+ .importEntityAlias("alarmContact", HsOfficeContactRbacEntity.class, usingDefaultCase(),
dependsOnColumn("alarmContactUuid"),
directlyFetchedByDependsOnColumn(),
NULLABLE)
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetEntityPatcher.java b/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetEntityPatcher.java
index f1cff713..856b4243 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetEntityPatcher.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetEntityPatcher.java
@@ -1,7 +1,7 @@
package net.hostsharing.hsadminng.hs.hosting.asset;
import net.hostsharing.hsadminng.hs.hosting.generated.api.v1.model.HsHostingAssetPatchResource;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealEntity;
import net.hostsharing.hsadminng.mapper.EntityPatcher;
import net.hostsharing.hsadminng.mapper.KeyValueMap;
import net.hostsharing.hsadminng.mapper.OptionalFromJson;
@@ -29,7 +29,7 @@ public class HsHostingAssetEntityPatcher implements EntityPatcher entity.setAlarmContact(
Optional.ofNullable(newValue)
- .map(uuid -> em.getReference(HsOfficeContactEntity.class, newValue))
+ .map(uuid -> em.getReference(HsOfficeContactRealEntity.class, newValue))
.orElse(null)));
}
}
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HostingAssetEntityValidator.java b/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HostingAssetEntityValidator.java
index b6747ff8..472502f6 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HostingAssetEntityValidator.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HostingAssetEntityValidator.java
@@ -5,7 +5,7 @@ import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemType;
import net.hostsharing.hsadminng.hs.booking.item.validators.HsBookingItemEntityValidatorRegistry;
import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAsset;
import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealEntity;
import net.hostsharing.hsadminng.hs.validation.HsEntityValidator;
import net.hostsharing.hsadminng.hs.validation.ValidatableProperty;
@@ -213,7 +213,7 @@ public abstract class HostingAssetEntityValidator extends HsEntityValidator> {
+ static class AlarmContact extends ReferenceValidator> {
AlarmContact(final HsHostingAssetType.RelationPolicy policy) {
super(policy, HsHostingAsset::getAlarmContact);
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountEntity.java
index 0e9ca079..94fe2b16 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountEntity.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountEntity.java
@@ -2,8 +2,8 @@ package net.hostsharing.hsadminng.hs.office.bankaccount;
import lombok.*;
import lombok.experimental.FieldNameConstants;
-import net.hostsharing.hsadminng.errors.DisplayName;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
+import net.hostsharing.hsadminng.errors.DisplayAs;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
import net.hostsharing.hsadminng.stringify.Stringify;
import net.hostsharing.hsadminng.stringify.Stringifyable;
@@ -26,8 +26,8 @@ import static net.hostsharing.hsadminng.stringify.Stringify.stringify;
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
-@DisplayName("BankAccount")
-public class HsOfficeBankAccountEntity implements RbacObject, Stringifyable {
+@DisplayAs("BankAccount")
+public class HsOfficeBankAccountEntity implements BaseEntity, Stringifyable {
private static Stringify toString = stringify(HsOfficeBankAccountEntity.class, "bankAccount")
.withIdProp(HsOfficeBankAccountEntity::getIban)
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContact.java b/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContact.java
new file mode 100644
index 00000000..9450e331
--- /dev/null
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContact.java
@@ -0,0 +1,106 @@
+package net.hostsharing.hsadminng.hs.office.contact;
+
+import io.hypersistence.utils.hibernate.type.json.JsonType;
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.experimental.FieldNameConstants;
+import lombok.experimental.SuperBuilder;
+import net.hostsharing.hsadminng.errors.DisplayAs;
+import net.hostsharing.hsadminng.mapper.PatchableMapWrapper;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
+import net.hostsharing.hsadminng.stringify.Stringify;
+import net.hostsharing.hsadminng.stringify.Stringifyable;
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Type;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.Id;
+import jakarta.persistence.MappedSuperclass;
+import jakarta.persistence.Transient;
+import jakarta.persistence.Version;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import static net.hostsharing.hsadminng.stringify.Stringify.stringify;
+
+@MappedSuperclass
+@Getter
+@Setter
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor(access = AccessLevel.PROTECTED)
+@SuperBuilder(toBuilder = true)
+@FieldNameConstants
+@DisplayAs("Contact")
+public class HsOfficeContact implements Stringifyable, BaseEntity {
+
+ private static Stringify toString = stringify(HsOfficeContact.class, "contact")
+ .withProp(Fields.caption, HsOfficeContact::getCaption)
+ .withProp(Fields.emailAddresses, HsOfficeContact::getEmailAddresses);
+
+ @Id
+ @GeneratedValue(generator = "UUID")
+ @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
+ private UUID uuid;
+
+ @Version
+ private int version;
+
+ @Column(name = "caption")
+ private String caption;
+
+ @Column(name = "postaladdress")
+ private String postalAddress; // multiline free-format text
+
+ @Builder.Default
+ @Setter(AccessLevel.NONE)
+ @Type(JsonType.class)
+ @Column(name = "emailaddresses")
+ private Map emailAddresses = new HashMap<>();
+
+ @Transient
+ private PatchableMapWrapper emailAddressesWrapper;
+
+ @Builder.Default
+ @Setter(AccessLevel.NONE)
+ @Type(JsonType.class)
+ @Column(name = "phonenumbers")
+ private Map phoneNumbers = new HashMap<>();
+
+ @Transient
+ private PatchableMapWrapper phoneNumbersWrapper;
+
+ public PatchableMapWrapper getEmailAddresses() {
+ return PatchableMapWrapper.of(
+ emailAddressesWrapper,
+ (newWrapper) -> {emailAddressesWrapper = newWrapper;},
+ emailAddresses);
+ }
+
+ public void putEmailAddresses(Map newEmailAddresses) {
+ getEmailAddresses().assign(newEmailAddresses);
+ }
+
+ public PatchableMapWrapper getPhoneNumbers() {
+ return PatchableMapWrapper.of(phoneNumbersWrapper, (newWrapper) -> {phoneNumbersWrapper = newWrapper;}, phoneNumbers);
+ }
+
+ public void putPhoneNumbers(Map newPhoneNumbers) {
+ getPhoneNumbers().assign(newPhoneNumbers);
+ }
+
+ @Override
+ public String toString() {
+ return toString.apply(this);
+ }
+
+ @Override
+ public String toShortString() {
+ return caption;
+ }
+}
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactController.java b/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactController.java
index 83f182a3..cee7e28a 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactController.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactController.java
@@ -29,7 +29,7 @@ public class HsOfficeContactController implements HsOfficeContactsApi {
private Mapper mapper;
@Autowired
- private HsOfficeContactRepository contactRepo;
+ private HsOfficeContactRbacRepository contactRepo;
@Override
@Transactional(readOnly = true)
@@ -54,7 +54,7 @@ public class HsOfficeContactController implements HsOfficeContactsApi {
context.define(currentUser, assumedRoles);
- final var entityToSave = mapper.map(body, HsOfficeContactEntity.class, RESOURCE_TO_ENTITY_POSTMAPPER);
+ final var entityToSave = mapper.map(body, HsOfficeContactRbacEntity.class, RESOURCE_TO_ENTITY_POSTMAPPER);
final var saved = contactRepo.save(entityToSave);
@@ -119,7 +119,7 @@ public class HsOfficeContactController implements HsOfficeContactsApi {
}
@SuppressWarnings("unchecked")
- final BiConsumer RESOURCE_TO_ENTITY_POSTMAPPER = (resource, entity) -> {
+ final BiConsumer RESOURCE_TO_ENTITY_POSTMAPPER = (resource, entity) -> {
entity.putEmailAddresses(from(resource.getEmailAddresses()));
entity.putPhoneNumbers(from(resource.getPhoneNumbers()));
};
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactEntity.java
deleted file mode 100644
index 3bcaf140..00000000
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactEntity.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package net.hostsharing.hsadminng.hs.office.contact;
-
-import io.hypersistence.utils.hibernate.type.json.JsonType;
-import lombok.*;
-import lombok.experimental.FieldNameConstants;
-import net.hostsharing.hsadminng.errors.DisplayName;
-import net.hostsharing.hsadminng.mapper.PatchableMapWrapper;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
-import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
-import net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL;
-import net.hostsharing.hsadminng.stringify.Stringify;
-import net.hostsharing.hsadminng.stringify.Stringifyable;
-import org.hibernate.annotations.GenericGenerator;
-import org.hibernate.annotations.Type;
-
-import jakarta.persistence.*;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
-import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.GLOBAL;
-import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Permission.*;
-import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.RbacUserReference.UserRole.CREATOR;
-import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Role.*;
-import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.rbacViewFor;
-import static net.hostsharing.hsadminng.stringify.Stringify.stringify;
-
-@Entity
-@Table(name = "hs_office_contact_rv")
-@Getter
-@Setter
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@FieldNameConstants
-@DisplayName("Contact")
-public class HsOfficeContactEntity implements Stringifyable, RbacObject {
-
- private static Stringify toString = stringify(HsOfficeContactEntity.class, "contact")
- .withProp(Fields.caption, HsOfficeContactEntity::getCaption)
- .withProp(Fields.emailAddresses, HsOfficeContactEntity::getEmailAddresses);
-
- @Id
- @GeneratedValue(generator = "UUID")
- @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
- private UUID uuid;
-
- @Version
- private int version;
-
- @Column(name = "caption")
- private String caption;
-
- @Column(name = "postaladdress")
- private String postalAddress; // multiline free-format text
-
- @Builder.Default
- @Setter(AccessLevel.NONE)
- @Type(JsonType.class)
- @Column(name = "emailaddresses")
- private Map emailAddresses = new HashMap<>();
-
- @Transient
- private PatchableMapWrapper emailAddressesWrapper;
-
- @Builder.Default
- @Setter(AccessLevel.NONE)
- @Type(JsonType.class)
- @Column(name = "phonenumbers")
- private Map phoneNumbers = new HashMap<>();
-
- @Transient
- private PatchableMapWrapper phoneNumbersWrapper;
-
- public PatchableMapWrapper getEmailAddresses() {
- return PatchableMapWrapper.of(emailAddressesWrapper, (newWrapper) -> {emailAddressesWrapper = newWrapper; }, emailAddresses );
- }
-
- public void putEmailAddresses(Map newEmailAddresses) {
- getEmailAddresses().assign(newEmailAddresses);
- }
-
- public PatchableMapWrapper getPhoneNumbers() {
- return PatchableMapWrapper.of(phoneNumbersWrapper, (newWrapper) -> {phoneNumbersWrapper = newWrapper; }, phoneNumbers );
- }
-
- public void putPhoneNumbers(Map newPhoneNumbers) {
- getPhoneNumbers().assign(newPhoneNumbers);
- }
-
- @Override
- public String toString() {
- return toString.apply(this);
- }
-
- @Override
- public String toShortString() {
- return caption;
- }
-
- public static RbacView rbac() {
- return rbacViewFor("contact", HsOfficeContactEntity.class)
- .withIdentityView(SQL.projection("caption"))
- .withUpdatableColumns("caption", "postalAddress", "emailAddresses", "phoneNumbers")
- .createRole(OWNER, (with) -> {
- with.owningUser(CREATOR);
- with.incomingSuperRole(GLOBAL, ADMIN);
- with.permission(DELETE);
- })
- .createSubRole(ADMIN, (with) -> {
- with.permission(UPDATE);
- })
- .createSubRole(REFERRER, (with) -> {
- with.permission(SELECT);
- })
- .toRole(GLOBAL, GUEST).grantPermission(INSERT);
- }
-
- public static void main(String[] args) throws IOException {
- rbac().generateWithBaseFileName("5-hs-office/501-contact/5013-hs-office-contact-rbac");
- }
-}
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactEntityPatcher.java b/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactEntityPatcher.java
index ddc4f982..e08e6bae 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactEntityPatcher.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactEntityPatcher.java
@@ -9,9 +9,9 @@ import java.util.Optional;
class HsOfficeContactEntityPatcher implements EntityPatcher {
- private final HsOfficeContactEntity entity;
+ private final HsOfficeContactRbacEntity entity;
- HsOfficeContactEntityPatcher(final HsOfficeContactEntity entity) {
+ HsOfficeContactEntityPatcher(final HsOfficeContactRbacEntity entity) {
this.entity = entity;
}
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRbacEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRbacEntity.java
new file mode 100644
index 00000000..c4e934cc
--- /dev/null
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRbacEntity.java
@@ -0,0 +1,48 @@
+package net.hostsharing.hsadminng.hs.office.contact;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+import net.hostsharing.hsadminng.errors.DisplayAs;
+import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
+import net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL;
+
+import jakarta.persistence.*;
+import java.io.IOException;
+
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.GLOBAL;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Permission.*;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.RbacUserReference.UserRole.CREATOR;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Role.*;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.rbacViewFor;
+
+@Entity
+@Table(name = "hs_office_contact_rv")
+@Getter
+@Setter
+@NoArgsConstructor
+@SuperBuilder(toBuilder = true)
+@DisplayAs("RbacContact")
+public class HsOfficeContactRbacEntity extends HsOfficeContact {
+
+ public static RbacView rbac() {
+ return rbacViewFor("contact", HsOfficeContactRbacEntity.class)
+ .withIdentityView(SQL.projection("caption"))
+ .withUpdatableColumns("caption", "postalAddress", "emailAddresses", "phoneNumbers")
+ .createRole(OWNER, (with) -> {
+ with.owningUser(CREATOR);
+ with.incomingSuperRole(GLOBAL, ADMIN);
+ with.permission(DELETE);
+ })
+ .createSubRole(ADMIN, (with) -> {
+ with.permission(UPDATE);
+ })
+ .createSubRole(REFERRER, (with) -> {
+ with.permission(SELECT);
+ })
+ .toRole(GLOBAL, GUEST).grantPermission(INSERT);
+ }
+
+ public static void main(String[] args) throws IOException {
+ rbac().generateWithBaseFileName("5-hs-office/501-contact/5013-hs-office-contact-rbac");
+ }
+}
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRepository.java b/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRbacRepository.java
similarity index 54%
rename from src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRepository.java
rename to src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRbacRepository.java
index 22a285ab..e893bced 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRepository.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRbacRepository.java
@@ -7,18 +7,18 @@ import java.util.List;
import java.util.Optional;
import java.util.UUID;
-public interface HsOfficeContactRepository extends Repository {
+public interface HsOfficeContactRbacRepository extends Repository {
- Optional findByUuid(UUID id);
+ Optional findByUuid(UUID id);
@Query("""
- SELECT c FROM HsOfficeContactEntity c
+ SELECT c FROM HsOfficeContactRbacEntity c
WHERE :caption is null
OR c.caption like concat(cast(:caption as text), '%')
""")
- List findContactByOptionalCaptionLike(String caption);
+ List findContactByOptionalCaptionLike(String caption);
- HsOfficeContactEntity save(final HsOfficeContactEntity entity);
+ HsOfficeContactRbacEntity save(final HsOfficeContactRbacEntity entity);
int deleteByUuid(final UUID uuid);
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRealEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRealEntity.java
new file mode 100644
index 00000000..44f72d99
--- /dev/null
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRealEntity.java
@@ -0,0 +1,21 @@
+package net.hostsharing.hsadminng.hs.office.contact;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.experimental.SuperBuilder;
+import net.hostsharing.hsadminng.errors.DisplayAs;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.Table;
+
+@Entity
+@Table(name = "hs_office_contact")
+@Getter
+@Setter
+@NoArgsConstructor
+@SuperBuilder(toBuilder = true)
+@DisplayAs("RealContact")
+public class HsOfficeContactRealEntity extends HsOfficeContact {
+
+}
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRealRepository.java b/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRealRepository.java
new file mode 100644
index 00000000..b4099422
--- /dev/null
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRealRepository.java
@@ -0,0 +1,26 @@
+package net.hostsharing.hsadminng.hs.office.contact;
+
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.Repository;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.UUID;
+
+public interface HsOfficeContactRealRepository extends Repository {
+
+ Optional findByUuid(UUID id);
+
+ @Query("""
+ SELECT c FROM HsOfficeContactRealEntity c
+ WHERE :caption is null
+ OR c.caption like concat(cast(:caption as text), '%')
+ """)
+ List findContactByOptionalCaptionLike(String caption);
+
+ HsOfficeContactRealEntity save(final HsOfficeContactRealEntity entity);
+
+ int deleteByUuid(final UUID uuid);
+
+ long count();
+}
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionEntity.java
index 35e0bda9..49487cd8 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionEntity.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionEntity.java
@@ -6,9 +6,9 @@ import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
-import net.hostsharing.hsadminng.errors.DisplayName;
+import net.hostsharing.hsadminng.errors.DisplayAs;
import net.hostsharing.hsadminng.hs.office.membership.HsOfficeMembershipEntity;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
import net.hostsharing.hsadminng.stringify.Stringify;
import net.hostsharing.hsadminng.stringify.Stringifyable;
@@ -40,8 +40,8 @@ import static net.hostsharing.hsadminng.stringify.Stringify.stringify;
@Builder
@NoArgsConstructor
@AllArgsConstructor
-@DisplayName("CoopAssetsTransaction")
-public class HsOfficeCoopAssetsTransactionEntity implements Stringifyable, RbacObject {
+@DisplayAs("CoopAssetsTransaction")
+public class HsOfficeCoopAssetsTransactionEntity implements Stringifyable, BaseEntity {
private static Stringify stringify = stringify(HsOfficeCoopAssetsTransactionEntity.class)
.withIdProp(HsOfficeCoopAssetsTransactionEntity::getTaggedMemberNumber)
@@ -107,7 +107,7 @@ public class HsOfficeCoopAssetsTransactionEntity implements Stringifyable, RbacO
@Override
public HsOfficeCoopAssetsTransactionEntity load() {
- RbacObject.super.load();
+ BaseEntity.super.load();
membership.load();
return this;
}
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionEntity.java
index cbab7e4f..aa650bd5 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionEntity.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionEntity.java
@@ -5,10 +5,10 @@ import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
-import net.hostsharing.hsadminng.errors.DisplayName;
+import net.hostsharing.hsadminng.errors.DisplayAs;
import net.hostsharing.hsadminng.hs.office.membership.HsOfficeMembershipEntity;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL;
import net.hostsharing.hsadminng.stringify.Stringify;
import net.hostsharing.hsadminng.stringify.Stringifyable;
@@ -38,8 +38,8 @@ import static net.hostsharing.hsadminng.stringify.Stringify.stringify;
@Builder
@NoArgsConstructor
@AllArgsConstructor
-@DisplayName("CoopShareTransaction")
-public class HsOfficeCoopSharesTransactionEntity implements Stringifyable, RbacObject {
+@DisplayAs("CoopShareTransaction")
+public class HsOfficeCoopSharesTransactionEntity implements Stringifyable, BaseEntity {
private static Stringify stringify = stringify(HsOfficeCoopSharesTransactionEntity.class)
.withIdProp(HsOfficeCoopSharesTransactionEntity::getMemberNumberTagged)
@@ -104,7 +104,7 @@ public class HsOfficeCoopSharesTransactionEntity implements Stringifyable, RbacO
@Override
public HsOfficeCoopSharesTransactionEntity load() {
- RbacObject.super.load();
+ BaseEntity.super.load();
membership.load();
return this;
}
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorController.java b/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorController.java
index 5455b99b..73fe78af 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorController.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorController.java
@@ -5,9 +5,10 @@ import net.hostsharing.hsadminng.hs.office.generated.api.v1.api.HsOfficeDebitors
import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeDebitorInsertResource;
import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeDebitorPatchResource;
import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeDebitorResource;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRepository;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealRepository;
import net.hostsharing.hsadminng.mapper.Mapper;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import org.apache.commons.lang3.Validate;
import org.hibernate.Hibernate;
import org.springframework.beans.factory.annotation.Autowired;
@@ -17,11 +18,12 @@ import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder;
import jakarta.persistence.EntityManager;
-import jakarta.persistence.EntityNotFoundException;
import jakarta.persistence.PersistenceContext;
+import jakarta.validation.ValidationException;
import java.util.List;
import java.util.UUID;
+import static net.hostsharing.hsadminng.errors.DisplayAs.DisplayName;
import static net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationType.DEBITOR;
@RestController
@@ -38,7 +40,7 @@ public class HsOfficeDebitorController implements HsOfficeDebitorsApi {
private HsOfficeDebitorRepository debitorRepo;
@Autowired
- private HsOfficeRelationRepository relRepo;
+ private HsOfficeRelationRealRepository relrealRepo;
@PersistenceContext
private EntityManager em;
@@ -82,13 +84,16 @@ public class HsOfficeDebitorController implements HsOfficeDebitorsApi {
final var entityToSave = mapper.map(body, HsOfficeDebitorEntity.class);
if ( body.getDebitorRel() != null ) {
body.getDebitorRel().setType(DEBITOR.name());
- final var debitorRel = mapper.map(body.getDebitorRel(), HsOfficeRelationEntity.class);
- entityToSave.setDebitorRel(relRepo.save(debitorRel));
+ final var debitorRel = mapper.map(body.getDebitorRel(), HsOfficeRelationRealEntity.class);
+ validateEntityExists("debitorRel.anchorUuid", debitorRel.getAnchor());
+ validateEntityExists("debitorRel.holderUuid", debitorRel.getHolder());
+ validateEntityExists("debitorRel.contactUuid", debitorRel.getContact());
+ entityToSave.setDebitorRel(relrealRepo.save(debitorRel));
} else {
- final var debitorRelOptional = relRepo.findByUuid(body.getDebitorRelUuid());
+ final var debitorRelOptional = relrealRepo.findByUuid(body.getDebitorRelUuid());
debitorRelOptional.ifPresentOrElse(
- debitorRel -> {entityToSave.setDebitorRel(relRepo.save(debitorRel));},
- () -> { throw new EntityNotFoundException("ERROR: [400] debitorRelUuid not found: " + body.getDebitorRelUuid());});
+ debitorRel -> {entityToSave.setDebitorRel(relrealRepo.save(debitorRel));},
+ () -> { throw new ValidationException("Unable to find RealRelation by debitorRelUuid: " + body.getDebitorRelUuid());});
}
final var savedEntity = debitorRepo.save(entityToSave);
@@ -155,4 +160,15 @@ public class HsOfficeDebitorController implements HsOfficeDebitorsApi {
final var mapped = mapper.map(saved, HsOfficeDebitorResource.class);
return ResponseEntity.ok(mapped);
}
+
+ // TODO.impl: extract this to some generally usable class?
+ private > T validateEntityExists(final String property, final T entitySkeleton) {
+ final var foundEntity = em.find(entitySkeleton.getClass(), entitySkeleton.getUuid());
+ if ( foundEntity == null) {
+ throw new ValidationException("Unable to find " + DisplayName.of(entitySkeleton) + " by " + property + ": " + entitySkeleton.getUuid());
+ }
+
+ //noinspection unchecked
+ return (T) foundEntity;
+ }
}
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorEntity.java
index 04ebd03b..192f3f2e 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorEntity.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorEntity.java
@@ -5,11 +5,13 @@ import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
-import net.hostsharing.hsadminng.errors.DisplayName;
+import net.hostsharing.hsadminng.errors.DisplayAs;
import net.hostsharing.hsadminng.hs.office.bankaccount.HsOfficeBankAccountEntity;
import net.hostsharing.hsadminng.hs.office.partner.HsOfficePartnerEntity;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelation;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRbacEntity;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL;
import net.hostsharing.hsadminng.stringify.Stringify;
@@ -57,8 +59,8 @@ import static net.hostsharing.hsadminng.stringify.Stringify.stringify;
@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
-@DisplayName("Debitor")
-public class HsOfficeDebitorEntity implements RbacObject, Stringifyable {
+@DisplayAs("Debitor")
+public class HsOfficeDebitorEntity implements BaseEntity, Stringifyable {
public static final String DEBITOR_NUMBER_TAG = "D-";
public static final String TWO_DECIMAL_DIGITS = "^([0-9]{2})$";
@@ -66,7 +68,7 @@ public class HsOfficeDebitorEntity implements RbacObject,
private static Stringify stringify =
stringify(HsOfficeDebitorEntity.class, "debitor")
.withIdProp(HsOfficeDebitorEntity::toShortString)
- .withProp(e -> ofNullable(e.getDebitorRel()).map(HsOfficeRelationEntity::toShortString).orElse(null))
+ .withProp(e -> ofNullable(e.getDebitorRel()).map(HsOfficeRelation::toShortString).orElse(null))
.withProp(HsOfficeDebitorEntity::getDefaultPrefix)
.quotedValues(false);
@@ -101,7 +103,7 @@ public class HsOfficeDebitorEntity implements RbacObject,
@ManyToOne(cascade = { PERSIST, MERGE, REFRESH, DETACH }, optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "debitorreluuid", nullable = false)
- private HsOfficeRelationEntity debitorRel;
+ private HsOfficeRelationRealEntity debitorRel;
@Column(name = "billable", nullable = false)
private Boolean billable; // not a primitive because otherwise the default would be false
@@ -128,7 +130,7 @@ public class HsOfficeDebitorEntity implements RbacObject,
@Override
public HsOfficeDebitorEntity load() {
- RbacObject.super.load();
+ BaseEntity.super.load();
if (partner != null) {
partner.load();
}
@@ -188,7 +190,7 @@ public class HsOfficeDebitorEntity implements RbacObject,
"defaultPrefix")
.toRole("global", ADMIN).grantPermission(INSERT)
- .importRootEntityAliasProxy("debitorRel", HsOfficeRelationEntity.class, usingCase(DEBITOR),
+ .importRootEntityAliasProxy("debitorRel", HsOfficeRelationRbacEntity.class, usingCase(DEBITOR),
directlyFetchedByDependsOnColumn(),
dependsOnColumn("debitorRelUuid"))
.createPermission(DELETE).grantedTo("debitorRel", OWNER)
@@ -202,7 +204,7 @@ public class HsOfficeDebitorEntity implements RbacObject,
.toRole("refundBankAccount", ADMIN).grantRole("debitorRel", AGENT)
.toRole("debitorRel", AGENT).grantRole("refundBankAccount", REFERRER)
- .importEntityAlias("partnerRel", HsOfficeRelationEntity.class, usingDefaultCase(),
+ .importEntityAlias("partnerRel", HsOfficeRelationRbacEntity.class, usingDefaultCase(),
dependsOnColumn("debitorRelUuid"),
fetchedBySql("""
SELECT ${columns}
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorEntityPatcher.java b/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorEntityPatcher.java
index cd50abf8..d8d67943 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorEntityPatcher.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorEntityPatcher.java
@@ -2,7 +2,7 @@ package net.hostsharing.hsadminng.hs.office.debitor;
import net.hostsharing.hsadminng.hs.office.bankaccount.HsOfficeBankAccountEntity;
import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeDebitorPatchResource;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealEntity;
import net.hostsharing.hsadminng.mapper.EntityPatcher;
import net.hostsharing.hsadminng.mapper.OptionalFromJson;
@@ -25,7 +25,7 @@ class HsOfficeDebitorEntityPatcher implements EntityPatcher {
verifyNotNull(newValue, "debitorRel");
- entity.setDebitorRel(em.getReference(HsOfficeRelationEntity.class, newValue));
+ entity.setDebitorRel(em.getReference(HsOfficeRelationRealEntity.class, newValue));
});
Optional.ofNullable(resource.getBillable()).ifPresent(entity::setBillable);
OptionalFromJson.of(resource.getVatId()).ifPresent(entity::setVatId);
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorRepository.java b/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorRepository.java
index 1e0b8f60..bb6cd0f2 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorRepository.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorRepository.java
@@ -33,7 +33,7 @@ public interface HsOfficeDebitorRepository extends Repository, Stringifyable {
+@DisplayAs("Membership")
+public class HsOfficeMembershipEntity implements BaseEntity, Stringifyable {
public static final String MEMBER_NUMBER_TAG = "M-";
public static final String TWO_DECIMAL_DIGITS = "^([0-9]{2})$";
@@ -102,7 +102,7 @@ public class HsOfficeMembershipEntity implements RbacObject E ref(final Class entityClass, final UUID uuid) {
+ private E ref(final Class entityClass, final UUID uuid) {
try {
return em.getReference(entityClass, uuid);
} catch (final Throwable exc) {
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerDetailsEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerDetailsEntity.java
index 4935f591..1ef8cb8f 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerDetailsEntity.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerDetailsEntity.java
@@ -1,8 +1,8 @@
package net.hostsharing.hsadminng.hs.office.partner;
import lombok.*;
-import net.hostsharing.hsadminng.errors.DisplayName;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
+import net.hostsharing.hsadminng.errors.DisplayAs;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL;
import net.hostsharing.hsadminng.stringify.Stringify;
@@ -25,8 +25,8 @@ import static net.hostsharing.hsadminng.stringify.Stringify.stringify;
@Builder
@NoArgsConstructor
@AllArgsConstructor
-@DisplayName("PartnerDetails")
-public class HsOfficePartnerDetailsEntity implements RbacObject, Stringifyable {
+@DisplayAs("PartnerDetails")
+public class HsOfficePartnerDetailsEntity implements BaseEntity, Stringifyable {
private static Stringify stringify = stringify(
HsOfficePartnerDetailsEntity.class,
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerEntity.java
index 2ec637be..5e199d0c 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerEntity.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerEntity.java
@@ -5,11 +5,13 @@ import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
-import net.hostsharing.hsadminng.errors.DisplayName;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
+import net.hostsharing.hsadminng.errors.DisplayAs;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContact;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonEntity;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRbacEntity;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelation;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL;
import net.hostsharing.hsadminng.stringify.Stringify;
@@ -39,20 +41,20 @@ import static net.hostsharing.hsadminng.stringify.Stringify.stringify;
@Builder
@NoArgsConstructor
@AllArgsConstructor
-@DisplayName("Partner")
-public class HsOfficePartnerEntity implements Stringifyable, RbacObject {
+@DisplayAs("Partner")
+public class HsOfficePartnerEntity implements Stringifyable, BaseEntity {
public static final String PARTNER_NUMBER_TAG = "P-";
private static Stringify stringify = stringify(HsOfficePartnerEntity.class, "partner")
.withIdProp(HsOfficePartnerEntity::toShortString)
.withProp(p -> ofNullable(p.getPartnerRel())
- .map(HsOfficeRelationEntity::getHolder)
+ .map(HsOfficeRelation::getHolder)
.map(HsOfficePersonEntity::toShortString)
.orElse(null))
.withProp(p -> ofNullable(p.getPartnerRel())
- .map(HsOfficeRelationEntity::getContact)
- .map(HsOfficeContactEntity::toShortString)
+ .map(HsOfficeRelation::getContact)
+ .map(HsOfficeContact::toShortString)
.orElse(null))
.quotedValues(false);
@@ -68,7 +70,7 @@ public class HsOfficePartnerEntity implements Stringifyable, RbacObject {
verifyNotNull(newValue, "partnerRel");
- entity.setPartnerRel(em.getReference(HsOfficeRelationEntity.class, newValue));
+ entity.setPartnerRel(em.getReference(HsOfficeRelationRealEntity.class, newValue));
});
new HsOfficePartnerDetailsEntityPatcher(em, entity.getDetails()).apply(resource.getDetails());
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerRepository.java b/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerRepository.java
index 2ae260bd..2c5913a5 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerRepository.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerRepository.java
@@ -15,8 +15,8 @@ public interface HsOfficePartnerRepository extends Repository, Stringifyable {
+@DisplayAs("Person")
+public class HsOfficePersonEntity implements BaseEntity, Stringifyable {
private static Stringify toString = stringify(HsOfficePersonEntity.class, "person")
.withProp(Fields.personType, HsOfficePersonEntity::getPersonType)
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelation.java b/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelation.java
new file mode 100644
index 00000000..c0f13f56
--- /dev/null
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelation.java
@@ -0,0 +1,83 @@
+package net.hostsharing.hsadminng.hs.office.relation;
+
+import lombok.*;
+import lombok.experimental.FieldNameConstants;
+import lombok.experimental.SuperBuilder;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealEntity;
+import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonEntity;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
+import net.hostsharing.hsadminng.stringify.Stringify;
+import net.hostsharing.hsadminng.stringify.Stringifyable;
+
+import jakarta.persistence.*;
+import jakarta.persistence.Column;
+import java.util.UUID;
+
+import static net.hostsharing.hsadminng.stringify.Stringify.stringify;
+
+@MappedSuperclass
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor(access = AccessLevel.PROTECTED)
+@Getter
+@Setter
+@SuperBuilder(toBuilder = true)
+@FieldNameConstants
+public class HsOfficeRelation implements BaseEntity, Stringifyable {
+
+ private static Stringify toString = stringify(HsOfficeRelation.class, "rel")
+ .withProp(Fields.anchor, HsOfficeRelation::getAnchor)
+ .withProp(Fields.type, HsOfficeRelation::getType)
+ .withProp(Fields.mark, HsOfficeRelation::getMark)
+ .withProp(Fields.holder, HsOfficeRelation::getHolder)
+ .withProp(Fields.contact, HsOfficeRelation::getContact);
+
+ private static Stringify toShortString = stringify(HsOfficeRelation.class, "rel")
+ .withProp(Fields.anchor, HsOfficeRelation::getAnchor)
+ .withProp(Fields.type, HsOfficeRelation::getType)
+ .withProp(Fields.holder, HsOfficeRelation::getHolder);
+
+ @Id
+ @GeneratedValue
+ private UUID uuid;
+
+ @Version
+ private int version;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "anchoruuid")
+ private HsOfficePersonEntity anchor;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "holderuuid")
+ private HsOfficePersonEntity holder;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "contactuuid")
+ private HsOfficeContactRealEntity contact;
+
+ @Column(name = "type")
+ @Enumerated(EnumType.STRING)
+ private HsOfficeRelationType type;
+
+ @Column(name = "mark")
+ private String mark;
+
+ @Override
+ public HsOfficeRelation load() {
+ BaseEntity.super.load();
+ anchor.load();
+ holder.load();
+ contact.load();
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ return toString.apply(this);
+ }
+
+ @Override
+ public String toShortString() {
+ return toShortString.apply(this);
+ }
+}
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationController.java b/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationController.java
index e1f80148..a3f4d136 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationController.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationController.java
@@ -1,7 +1,7 @@
package net.hostsharing.hsadminng.hs.office.relation;
import net.hostsharing.hsadminng.context.Context;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRepository;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealRepository;
import net.hostsharing.hsadminng.hs.office.generated.api.v1.api.HsOfficeRelationsApi;
import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.*;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonRepository;
@@ -31,13 +31,13 @@ public class HsOfficeRelationController implements HsOfficeRelationsApi {
private Mapper mapper;
@Autowired
- private HsOfficeRelationRepository relationRepo;
+ private HsOfficeRelationRbacRepository relationRbacRepo;
@Autowired
private HsOfficePersonRepository holderRepo;
@Autowired
- private HsOfficeContactRepository contactRepo;
+ private HsOfficeContactRealRepository contactrealRepo;
@PersistenceContext
private EntityManager em;
@@ -51,7 +51,7 @@ public class HsOfficeRelationController implements HsOfficeRelationsApi {
final HsOfficeRelationTypeResource relationType) {
context.define(currentUser, assumedRoles);
- final var entities = relationRepo.findRelationRelatedToPersonUuidAndRelationType(personUuid,
+ final var entities = relationRbacRepo.findRelationRelatedToPersonUuidAndRelationType(personUuid,
mapper.map(relationType, HsOfficeRelationType.class));
final var resources = mapper.mapList(entities, HsOfficeRelationResource.class,
@@ -68,20 +68,20 @@ public class HsOfficeRelationController implements HsOfficeRelationsApi {
context.define(currentUser, assumedRoles);
- final var entityToSave = new HsOfficeRelationEntity();
+ final var entityToSave = new HsOfficeRelationRbacEntity();
entityToSave.setType(HsOfficeRelationType.valueOf(body.getType()));
entityToSave.setMark(body.getMark());
entityToSave.setAnchor(holderRepo.findByUuid(body.getAnchorUuid()).orElseThrow(
- () -> new NoSuchElementException("cannot find anchorUuid " + body.getAnchorUuid())
+ () -> new NoSuchElementException("cannot find Person by anchorUuid: " + body.getAnchorUuid())
));
entityToSave.setHolder(holderRepo.findByUuid(body.getHolderUuid()).orElseThrow(
- () -> new NoSuchElementException("cannot find holderUuid " + body.getHolderUuid())
+ () -> new NoSuchElementException("cannot find Person by holderUuid: " + body.getHolderUuid())
));
- entityToSave.setContact(contactRepo.findByUuid(body.getContactUuid()).orElseThrow(
- () -> new NoSuchElementException("cannot find contactUuid " + body.getContactUuid())
+ entityToSave.setContact(contactrealRepo.findByUuid(body.getContactUuid()).orElseThrow(
+ () -> new NoSuchElementException("cannot find Contact by contactUuid: " + body.getContactUuid())
));
- final var saved = relationRepo.save(entityToSave);
+ final var saved = relationRbacRepo.save(entityToSave);
final var uri =
MvcUriComponentsBuilder.fromController(getClass())
@@ -102,7 +102,7 @@ public class HsOfficeRelationController implements HsOfficeRelationsApi {
context.define(currentUser, assumedRoles);
- final var result = relationRepo.findByUuid(relationUuid);
+ final var result = relationRbacRepo.findByUuid(relationUuid);
if (result.isEmpty()) {
return ResponseEntity.notFound().build();
}
@@ -117,7 +117,7 @@ public class HsOfficeRelationController implements HsOfficeRelationsApi {
final UUID relationUuid) {
context.define(currentUser, assumedRoles);
- final var result = relationRepo.deleteByUuid(relationUuid);
+ final var result = relationRbacRepo.deleteByUuid(relationUuid);
if (result == 0) {
return ResponseEntity.notFound().build();
}
@@ -135,17 +135,17 @@ public class HsOfficeRelationController implements HsOfficeRelationsApi {
context.define(currentUser, assumedRoles);
- final var current = relationRepo.findByUuid(relationUuid).orElseThrow();
+ final var current = relationRbacRepo.findByUuid(relationUuid).orElseThrow();
new HsOfficeRelationEntityPatcher(em, current).apply(body);
- final var saved = relationRepo.save(current);
+ final var saved = relationRbacRepo.save(current);
final var mapped = mapper.map(saved, HsOfficeRelationResource.class);
return ResponseEntity.ok(mapped);
}
- final BiConsumer RELATION_ENTITY_TO_RESOURCE_POSTMAPPER = (entity, resource) -> {
+ final BiConsumer RELATION_ENTITY_TO_RESOURCE_POSTMAPPER = (entity, resource) -> {
resource.setAnchor(mapper.map(entity.getAnchor(), HsOfficePersonResource.class));
resource.setHolder(mapper.map(entity.getHolder(), HsOfficePersonResource.class));
resource.setContact(mapper.map(entity.getContact(), HsOfficeContactResource.class));
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationEntity.java
deleted file mode 100644
index e7ab353b..00000000
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationEntity.java
+++ /dev/null
@@ -1,174 +0,0 @@
-package net.hostsharing.hsadminng.hs.office.relation;
-
-import lombok.*;
-import lombok.experimental.FieldNameConstants;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
-import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonEntity;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
-import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
-import net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL;
-import net.hostsharing.hsadminng.stringify.Stringify;
-import net.hostsharing.hsadminng.stringify.Stringifyable;
-
-import jakarta.persistence.*;
-import jakarta.persistence.Column;
-import java.io.IOException;
-import java.util.UUID;
-
-import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.*;
-import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.CaseDef.inCaseOf;
-import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.CaseDef.inOtherCases;
-import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Column.dependsOnColumn;
-import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.ColumnValue.usingDefaultCase;
-import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Nullable.NOT_NULL;
-import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Permission.*;
-import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.RbacUserReference.UserRole.CREATOR;
-import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Role.*;
-import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL.directlyFetchedByDependsOnColumn;
-import static net.hostsharing.hsadminng.stringify.Stringify.stringify;
-
-@Entity
-@Table(name = "hs_office_relation_rv")
-@Getter
-@Setter
-@Builder(toBuilder = true)
-@NoArgsConstructor
-@AllArgsConstructor
-@FieldNameConstants
-public class HsOfficeRelationEntity implements RbacObject, Stringifyable {
-
- private static Stringify toString = stringify(HsOfficeRelationEntity.class, "rel")
- .withProp(Fields.anchor, HsOfficeRelationEntity::getAnchor)
- .withProp(Fields.type, HsOfficeRelationEntity::getType)
- .withProp(Fields.mark, HsOfficeRelationEntity::getMark)
- .withProp(Fields.holder, HsOfficeRelationEntity::getHolder)
- .withProp(Fields.contact, HsOfficeRelationEntity::getContact);
-
- private static Stringify toShortString = stringify(HsOfficeRelationEntity.class, "rel")
- .withProp(Fields.anchor, HsOfficeRelationEntity::getAnchor)
- .withProp(Fields.type, HsOfficeRelationEntity::getType)
- .withProp(Fields.holder, HsOfficeRelationEntity::getHolder);
-
- @Id
- @GeneratedValue
- private UUID uuid;
-
- @Version
- private int version;
-
- @ManyToOne(fetch = FetchType.LAZY)
- @JoinColumn(name = "anchoruuid")
- private HsOfficePersonEntity anchor;
-
- @ManyToOne(fetch = FetchType.LAZY)
- @JoinColumn(name = "holderuuid")
- private HsOfficePersonEntity holder;
-
- @ManyToOne(fetch = FetchType.LAZY)
- @JoinColumn(name = "contactuuid")
- private HsOfficeContactEntity contact;
-
- @Column(name = "type")
- @Enumerated(EnumType.STRING)
- private HsOfficeRelationType type;
-
- @Column(name = "mark")
- private String mark;
-
- @Override
- public HsOfficeRelationEntity load() {
- RbacObject.super.load();
- anchor.load();
- holder.load();
- contact.load();
- return this;
- }
-
- @Override
- public String toString() {
- return toString.apply(this);
- }
-
- @Override
- public String toShortString() {
- return toShortString.apply(this);
- }
-
- public static RbacView rbac() {
- return rbacViewFor("relation", HsOfficeRelationEntity.class)
- .withIdentityView(SQL.projection("""
- (select idName from hs_office_person_iv p where p.uuid = anchorUuid)
- || '-with-' || target.type || '-'
- || (select idName from hs_office_person_iv p where p.uuid = holderUuid)
- """))
- .withRestrictedViewOrderBy(SQL.expression(
- "(select idName from hs_office_person_iv p where p.uuid = target.holderUuid)"))
- .withUpdatableColumns("contactUuid")
- .importEntityAlias("anchorPerson", HsOfficePersonEntity.class, usingDefaultCase(),
- dependsOnColumn("anchorUuid"),
- directlyFetchedByDependsOnColumn(),
- NOT_NULL)
- .importEntityAlias("holderPerson", HsOfficePersonEntity.class, usingDefaultCase(),
- dependsOnColumn("holderUuid"),
- directlyFetchedByDependsOnColumn(),
- NOT_NULL)
- .importEntityAlias("contact", HsOfficeContactEntity.class, usingDefaultCase(),
- dependsOnColumn("contactUuid"),
- directlyFetchedByDependsOnColumn(),
- NOT_NULL)
- .switchOnColumn("type",
- inCaseOf("REPRESENTATIVE", then -> {
- then.createRole(OWNER, (with) -> {
- with.owningUser(CREATOR);
- with.incomingSuperRole(GLOBAL, ADMIN);
- with.incomingSuperRole("holderPerson", ADMIN);
- with.permission(DELETE);
- })
- .createSubRole(ADMIN, (with) -> {
- with.outgoingSubRole("anchorPerson", OWNER);
- with.permission(UPDATE);
- })
- .createSubRole(AGENT, (with) -> {
- with.incomingSuperRole("anchorPerson", ADMIN);
- })
- .createSubRole(TENANT, (with) -> {
- with.incomingSuperRole("contact", ADMIN);
- with.outgoingSubRole("anchorPerson", REFERRER);
- with.outgoingSubRole("holderPerson", REFERRER);
- with.outgoingSubRole("contact", REFERRER);
- with.permission(SELECT);
- });
- }),
- // inCaseOf("DEBITOR", then -> {}), TODO.spec: needs to be defined
- inOtherCases(then -> {
- then.createRole(OWNER, (with) -> {
- with.owningUser(CREATOR);
- with.incomingSuperRole(GLOBAL, ADMIN);
- with.incomingSuperRole("anchorPerson", ADMIN);
- with.permission(DELETE);
- })
- .createSubRole(ADMIN, (with) -> {
- with.permission(UPDATE);
- })
- .createSubRole(AGENT, (with) -> {
- // TODO.rbac: we need relation:PROXY, to allow changing the relation contact.
- // the alternative would be to move this to the relation:ADMIN role,
- // but then the partner holder person could update the partner relation itself,
- // see partner entity.
- with.incomingSuperRole("holderPerson", ADMIN);
- })
- .createSubRole(TENANT, (with) -> {
- with.incomingSuperRole("contact", ADMIN);
- with.outgoingSubRole("anchorPerson", REFERRER);
- with.outgoingSubRole("holderPerson", REFERRER);
- with.outgoingSubRole("contact", REFERRER);
- with.permission(SELECT);
- });
- }))
- .toRole("anchorPerson", ADMIN).grantPermission(INSERT);
- }
-
- public static void main(String[] args) throws IOException {
- rbac().generateWithBaseFileName("5-hs-office/503-relation/5033-hs-office-relation-rbac");
- }
-}
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationEntityPatcher.java b/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationEntityPatcher.java
index aeaae5ea..d9e6244a 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationEntityPatcher.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationEntityPatcher.java
@@ -1,6 +1,6 @@
package net.hostsharing.hsadminng.hs.office.relation;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealEntity;
import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeRelationPatchResource;
import net.hostsharing.hsadminng.mapper.EntityPatcher;
import net.hostsharing.hsadminng.mapper.OptionalFromJson;
@@ -11,9 +11,9 @@ import java.util.UUID;
class HsOfficeRelationEntityPatcher implements EntityPatcher {
private final EntityManager em;
- private final HsOfficeRelationEntity entity;
+ private final HsOfficeRelation entity;
- HsOfficeRelationEntityPatcher(final EntityManager em, final HsOfficeRelationEntity entity) {
+ HsOfficeRelationEntityPatcher(final EntityManager em, final HsOfficeRelation entity) {
this.em = em;
this.entity = entity;
}
@@ -22,7 +22,7 @@ class HsOfficeRelationEntityPatcher implements EntityPatcher {
verifyNotNull(newValue, "contact");
- entity.setContact(em.getReference(HsOfficeContactEntity.class, newValue));
+ entity.setContact(em.getReference(HsOfficeContactRealEntity.class, newValue));
});
}
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRbacEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRbacEntity.java
new file mode 100644
index 00000000..f081404e
--- /dev/null
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRbacEntity.java
@@ -0,0 +1,123 @@
+package net.hostsharing.hsadminng.hs.office.relation;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.experimental.SuperBuilder;
+import net.hostsharing.hsadminng.errors.DisplayAs;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRbacEntity;
+import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonEntity;
+import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
+import net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.Table;
+import java.io.IOException;
+
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.CaseDef.inCaseOf;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.CaseDef.inOtherCases;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Column.dependsOnColumn;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.ColumnValue.usingDefaultCase;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.GLOBAL;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Nullable.NOT_NULL;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Permission.DELETE;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Permission.INSERT;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Permission.SELECT;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Permission.UPDATE;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.RbacUserReference.UserRole.CREATOR;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Role.ADMIN;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Role.AGENT;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Role.OWNER;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Role.REFERRER;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.Role.TENANT;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL.directlyFetchedByDependsOnColumn;
+import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.rbacViewFor;
+
+@Entity
+@Table(name = "hs_office_relation_rv")
+@NoArgsConstructor
+@Getter
+@Setter
+@SuperBuilder(toBuilder = true)
+@DisplayAs("RbacRelation")
+public class HsOfficeRelationRbacEntity extends HsOfficeRelation {
+
+ public static RbacView rbac() {
+ return rbacViewFor("relation", HsOfficeRelationRbacEntity.class)
+ .withIdentityView(SQL.projection("""
+ (select idName from hs_office_person_iv p where p.uuid = anchorUuid)
+ || '-with-' || target.type || '-'
+ || (select idName from hs_office_person_iv p where p.uuid = holderUuid)
+ """))
+ .withRestrictedViewOrderBy(SQL.expression(
+ "(select idName from hs_office_person_iv p where p.uuid = target.holderUuid)"))
+ .withUpdatableColumns("contactUuid")
+ .importEntityAlias("anchorPerson", HsOfficePersonEntity.class, usingDefaultCase(),
+ dependsOnColumn("anchorUuid"),
+ directlyFetchedByDependsOnColumn(),
+ NOT_NULL)
+ .importEntityAlias("holderPerson", HsOfficePersonEntity.class, usingDefaultCase(),
+ dependsOnColumn("holderUuid"),
+ directlyFetchedByDependsOnColumn(),
+ NOT_NULL)
+ .importEntityAlias("contact", HsOfficeContactRbacEntity.class, usingDefaultCase(),
+ dependsOnColumn("contactUuid"),
+ directlyFetchedByDependsOnColumn(),
+ NOT_NULL)
+ .switchOnColumn(
+ "type",
+ inCaseOf("REPRESENTATIVE", then -> {
+ then.createRole(OWNER, (with) -> {
+ with.owningUser(CREATOR);
+ with.incomingSuperRole(GLOBAL, ADMIN);
+ with.incomingSuperRole("holderPerson", ADMIN);
+ with.permission(DELETE);
+ })
+ .createSubRole(ADMIN, (with) -> {
+ with.outgoingSubRole("anchorPerson", OWNER);
+ with.permission(UPDATE);
+ })
+ .createSubRole(AGENT, (with) -> {
+ with.incomingSuperRole("anchorPerson", ADMIN);
+ })
+ .createSubRole(TENANT, (with) -> {
+ with.incomingSuperRole("contact", ADMIN);
+ with.outgoingSubRole("anchorPerson", REFERRER);
+ with.outgoingSubRole("holderPerson", REFERRER);
+ with.outgoingSubRole("contact", REFERRER);
+ with.permission(SELECT);
+ });
+ }),
+ // inCaseOf("DEBITOR", then -> {}), TODO.spec: needs to be defined
+ inOtherCases(then -> {
+ then.createRole(OWNER, (with) -> {
+ with.owningUser(CREATOR);
+ with.incomingSuperRole(GLOBAL, ADMIN);
+ with.incomingSuperRole("anchorPerson", ADMIN);
+ with.permission(DELETE);
+ })
+ .createSubRole(ADMIN, (with) -> {
+ with.permission(UPDATE);
+ })
+ .createSubRole(AGENT, (with) -> {
+ // TODO.rbac: we need relation:PROXY, to allow changing the relation contact.
+ // the alternative would be to move this to the relation:ADMIN role,
+ // but then the partner holder person could update the partner relation itself,
+ // see partner entity.
+ with.incomingSuperRole("holderPerson", ADMIN);
+ })
+ .createSubRole(TENANT, (with) -> {
+ with.incomingSuperRole("contact", ADMIN);
+ with.outgoingSubRole("anchorPerson", REFERRER);
+ with.outgoingSubRole("holderPerson", REFERRER);
+ with.outgoingSubRole("contact", REFERRER);
+ with.permission(SELECT);
+ });
+ }))
+ .toRole("anchorPerson", ADMIN).grantPermission(INSERT);
+ }
+
+ public static void main(String[] args) throws IOException {
+ rbac().generateWithBaseFileName("5-hs-office/503-relation/5033-hs-office-relation-rbac");
+ }
+}
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRepository.java b/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRbacRepository.java
similarity index 60%
rename from src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRepository.java
rename to src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRbacRepository.java
index 95bac3a2..e8187bb7 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRepository.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRbacRepository.java
@@ -8,11 +8,11 @@ import java.util.List;
import java.util.Optional;
import java.util.UUID;
-public interface HsOfficeRelationRepository extends Repository {
+public interface HsOfficeRelationRbacRepository extends Repository {
- Optional findByUuid(UUID id);
+ Optional findByUuid(UUID id);
- default List findRelationRelatedToPersonUuidAndRelationType(@NotNull UUID personUuid, HsOfficeRelationType relationType) {
+ default List findRelationRelatedToPersonUuidAndRelationType(@NotNull UUID personUuid, HsOfficeRelationType relationType) {
return findRelationRelatedToPersonUuidAndRelationTypeString(personUuid, relationType.toString());
}
@@ -20,16 +20,16 @@ public interface HsOfficeRelationRepository extends Repository findRelationRelatedToPersonUuid(@NotNull UUID personUuid);
+ List findRelationRelatedToPersonUuid(@NotNull UUID personUuid);
@Query(value = """
SELECT p.* FROM hs_office_relation_rv AS p
WHERE (:relationType IS NULL OR p.type = cast(:relationType AS HsOfficeRelationType))
AND ( p.anchorUuid = :personUuid OR p.holderUuid = :personUuid)
""", nativeQuery = true)
- List findRelationRelatedToPersonUuidAndRelationTypeString(@NotNull UUID personUuid, String relationType);
+ List findRelationRelatedToPersonUuidAndRelationTypeString(@NotNull UUID personUuid, String relationType);
- HsOfficeRelationEntity save(final HsOfficeRelationEntity entity);
+ HsOfficeRelationRbacEntity save(final HsOfficeRelationRbacEntity entity);
long count();
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRealEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRealEntity.java
new file mode 100644
index 00000000..3c6c71a9
--- /dev/null
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRealEntity.java
@@ -0,0 +1,21 @@
+package net.hostsharing.hsadminng.hs.office.relation;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.experimental.SuperBuilder;
+import net.hostsharing.hsadminng.errors.DisplayAs;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.Table;
+
+
+@Entity
+@Table(name = "hs_office_relation")
+@NoArgsConstructor
+@Getter
+@Setter
+@SuperBuilder(toBuilder = true)
+@DisplayAs("RealRelation")
+public class HsOfficeRelationRealEntity extends HsOfficeRelation {
+}
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRealRepository.java b/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRealRepository.java
new file mode 100644
index 00000000..6a24ad02
--- /dev/null
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRealRepository.java
@@ -0,0 +1,37 @@
+package net.hostsharing.hsadminng.hs.office.relation;
+
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.Repository;
+
+import jakarta.validation.constraints.NotNull;
+import java.util.List;
+import java.util.Optional;
+import java.util.UUID;
+
+public interface HsOfficeRelationRealRepository extends Repository {
+
+ Optional findByUuid(UUID id);
+
+ default List findRelationRelatedToPersonUuidAndRelationType(@NotNull UUID personUuid, HsOfficeRelationType relationType) {
+ return findRelationRelatedToPersonUuidAndRelationTypeString(personUuid, relationType.toString());
+ }
+
+ @Query(value = """
+ SELECT p.* FROM hs_office_relation AS p
+ WHERE p.anchorUuid = :personUuid OR p.holderUuid = :personUuid
+ """, nativeQuery = true)
+ List findRelationRelatedToPersonUuid(@NotNull UUID personUuid);
+
+ @Query(value = """
+ SELECT p.* FROM hs_office_relation AS p
+ WHERE (:relationType IS NULL OR p.type = cast(:relationType AS HsOfficeRelationType))
+ AND ( p.anchorUuid = :personUuid OR p.holderUuid = :personUuid)
+ """, nativeQuery = true)
+ List findRelationRelatedToPersonUuidAndRelationTypeString(@NotNull UUID personUuid, String relationType);
+
+ HsOfficeRelationRealEntity save(final HsOfficeRelationRealEntity entity);
+
+ long count();
+
+ int deleteByUuid(UUID uuid);
+}
diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/sepamandate/HsOfficeSepaMandateEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/office/sepamandate/HsOfficeSepaMandateEntity.java
index 7b0f9121..a57ee32a 100644
--- a/src/main/java/net/hostsharing/hsadminng/hs/office/sepamandate/HsOfficeSepaMandateEntity.java
+++ b/src/main/java/net/hostsharing/hsadminng/hs/office/sepamandate/HsOfficeSepaMandateEntity.java
@@ -3,11 +3,11 @@ package net.hostsharing.hsadminng.hs.office.sepamandate;
import io.hypersistence.utils.hibernate.type.range.PostgreSQLRangeType;
import io.hypersistence.utils.hibernate.type.range.Range;
import lombok.*;
-import net.hostsharing.hsadminng.errors.DisplayName;
+import net.hostsharing.hsadminng.errors.DisplayAs;
import net.hostsharing.hsadminng.hs.office.bankaccount.HsOfficeBankAccountEntity;
import net.hostsharing.hsadminng.hs.office.debitor.HsOfficeDebitorEntity;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRbacEntity;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
import net.hostsharing.hsadminng.stringify.Stringify;
import net.hostsharing.hsadminng.stringify.Stringifyable;
@@ -39,8 +39,8 @@ import static net.hostsharing.hsadminng.stringify.Stringify.stringify;
@Builder
@NoArgsConstructor
@AllArgsConstructor
-@DisplayName("SEPA-Mandate")
-public class HsOfficeSepaMandateEntity implements Stringifyable, RbacObject {
+@DisplayAs("SEPA-Mandate")
+public class HsOfficeSepaMandateEntity implements Stringifyable, BaseEntity {
private static Stringify stringify = stringify(HsOfficeSepaMandateEntity.class)
.withProp(e -> e.getBankAccount().getIban())
@@ -110,7 +110,7 @@ public class HsOfficeSepaMandateEntity implements Stringifyable, RbacObject T map(final S source, final Class targetClass, final BiConsumer postMapper) {
diff --git a/src/main/java/net/hostsharing/hsadminng/rbac/rbacdef/RbacView.java b/src/main/java/net/hostsharing/hsadminng/rbac/rbacdef/RbacView.java
index 9b4d2bbb..ed3a1486 100644
--- a/src/main/java/net/hostsharing/hsadminng/rbac/rbacdef/RbacView.java
+++ b/src/main/java/net/hostsharing/hsadminng/rbac/rbacdef/RbacView.java
@@ -2,7 +2,7 @@ package net.hostsharing.hsadminng.rbac.rbacdef;
import lombok.EqualsAndHashCode;
import lombok.Getter;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import org.reflections.Reflections;
import org.reflections.scanners.TypeAnnotationsScanner;
@@ -12,6 +12,7 @@ import jakarta.persistence.Version;
import jakarta.validation.constraints.NotNull;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.nio.file.Path;
import java.util.*;
import java.util.function.Consumer;
@@ -89,11 +90,11 @@ public class RbacView {
* @param
* a JPA entity class extending RbacObject
*/
- public static RbacView rbacViewFor(final String alias, final Class entityClass) {
+ public static RbacView rbacViewFor(final String alias, final Class entityClass) {
return new RbacView(alias, entityClass);
}
- RbacView(final String alias, final Class extends RbacObject> entityClass) {
+ RbacView(final String alias, final Class extends BaseEntity> entityClass) {
rootEntityAlias = new EntityAlias(alias, entityClass);
entityAliases.put(alias, rootEntityAlias);
new RbacUserReference(CREATOR);
@@ -253,7 +254,7 @@ public class RbacView {
.orElseGet(() -> new RbacPermissionDefinition(entityAlias, permission, null, true));
}
- public RbacView declarePlaceholderEntityAliases(final String... aliasNames) {
+ public RbacView declarePlaceholderEntityAliases(final String... aliasNames) {
for (String alias : aliasNames) {
entityAliases.put(alias, new EntityAlias(alias));
}
@@ -286,9 +287,9 @@ public class RbacView {
* @param
* a JPA entity class extending RbacObject
*/
- public RbacView importRootEntityAliasProxy(
+ public RbacView importRootEntityAliasProxy(
final String aliasName,
- final Class extends RbacObject> entityClass,
+ final Class extends BaseEntity> entityClass,
final ColumnValue forCase,
final SQL fetchSql,
final Column dependsOnColum) {
@@ -312,7 +313,7 @@ public class RbacView {
* a JPA entity class extending RbacObject
*/
public RbacView importSubEntityAlias(
- final String aliasName, final Class extends RbacObject> entityClass,
+ final String aliasName, final Class extends BaseEntity> entityClass,
final SQL fetchSql, final Column dependsOnColum) {
importEntityAliasImpl(aliasName, entityClass, usingDefaultCase(), fetchSql, dependsOnColum, true, NOT_NULL);
return this;
@@ -349,14 +350,14 @@ public class RbacView {
* a JPA entity class extending RbacObject
*/
public RbacView importEntityAlias(
- final String aliasName, final Class extends RbacObject> entityClass, final ColumnValue usingCase,
+ final String aliasName, final Class extends BaseEntity> entityClass, final ColumnValue usingCase,
final Column dependsOnColum, final SQL fetchSql, final Nullable nullable) {
importEntityAliasImpl(aliasName, entityClass, usingCase, fetchSql, dependsOnColum, false, nullable);
return this;
}
private EntityAlias importEntityAliasImpl(
- final String aliasName, final Class extends RbacObject> entityClass, final ColumnValue usingCase,
+ final String aliasName, final Class extends BaseEntity> entityClass, final ColumnValue usingCase,
final SQL fetchSql, final Column dependsOnColum, boolean asSubEntity, final Nullable nullable) {
final var entityAlias = ofNullable(entityAliases.get(aliasName))
@@ -378,7 +379,7 @@ public class RbacView {
return entityAlias;
}
- private static RbacView rbacDefinition(final Class extends RbacObject> entityClass)
+ private static RbacView rbacDefinition(final Class extends BaseEntity> entityClass)
throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
return (RbacView) entityClass.getMethod("rbac").invoke(null);
}
@@ -432,12 +433,22 @@ public class RbacView {
}
private void verifyVersionColumnExists() {
- if (stream(rootEntityAlias.entityClass.getDeclaredFields())
- .noneMatch(f -> f.getAnnotation(Version.class) != null)) {
+ final var clazz = rootEntityAlias.entityClass;
+ if (!hasVersionColumn(clazz)) {
throw new IllegalArgumentException("@Version field required in updatable entity " + rootEntityAlias.entityClass);
}
}
+ private static boolean hasVersionColumn(final Class> clazz) {
+ if (stream(clazz.getDeclaredFields()).anyMatch(f -> f.getAnnotation(Version.class) != null)) {
+ return true;
+ }
+ if (clazz.getSuperclass() != null) {
+ return hasVersionColumn(clazz.getSuperclass());
+ }
+ return false;
+ }
+
/**
* Starts declaring a grant to a given role.
*
@@ -900,13 +911,13 @@ public class RbacView {
return distinctGrantDef;
}
- record EntityAlias(String aliasName, Class extends RbacObject> entityClass, ColumnValue usingCase, SQL fetchSql, Column dependsOnColum, boolean isSubEntity, Nullable nullable) {
+ record EntityAlias(String aliasName, Class extends BaseEntity> entityClass, ColumnValue usingCase, SQL fetchSql, Column dependsOnColum, boolean isSubEntity, Nullable nullable) {
public EntityAlias(final String aliasName) {
this(aliasName, null, null, null, null, false, null);
}
- public EntityAlias(final String aliasName, final Class extends RbacObject> entityClass) {
+ public EntityAlias(final String aliasName, final Class extends BaseEntity> entityClass) {
this(aliasName, entityClass, null, null, null, false, null);
}
@@ -936,6 +947,10 @@ public class RbacView {
}
private String withoutEntitySuffix(final String simpleEntityName) {
+ // TODO.impl: maybe introduce an annotation like @RbacObjectName("hsOfficeContact")?
+ if ( simpleEntityName.endsWith("RbacEntity")) {
+ return simpleEntityName.substring(0, simpleEntityName.length() - "RbacEntity".length());
+ }
return simpleEntityName.substring(0, simpleEntityName.length() - "Entity".length());
}
@@ -1210,7 +1225,7 @@ public class RbacView {
}
}
- private static void generateRbacView(final Class extends RbacObject> c) {
+ private static void generateRbacView(final Class extends BaseEntity> c) {
final Method mainMethod = stream(c.getMethods()).filter(
m -> isStatic(m.getModifiers()) && m.getName().equals("main")
)
@@ -1227,17 +1242,20 @@ public class RbacView {
}
}
- public static Set> findRbacEntityClasses(String packageName) {
+ public static Set> findRbacEntityClasses(String packageName) {
final var reflections = new Reflections(packageName, TypeAnnotationsScanner.class);
return reflections.getTypesAnnotatedWith(Entity.class).stream()
- .filter(c -> stream(c.getInterfaces()).anyMatch(i -> i==RbacObject.class))
- .map(RbacView::castToSubclassOfRbacObject)
+ .filter(c -> stream(c.getInterfaces()).anyMatch(i -> i== BaseEntity.class))
+ .filter(c -> stream(c.getDeclaredMethods())
+ .anyMatch(m -> m.getName().equals("rbac") && Modifier.isStatic(m.getModifiers()))
+ )
+ .map(RbacView::castToSubclassOfBaseEntity)
.collect(Collectors.toSet());
}
@SuppressWarnings("unchecked")
- private static Class extends RbacObject> castToSubclassOfRbacObject(final Class> clazz) {
- return (Class extends RbacObject>) clazz;
+ private static Class extends BaseEntity> castToSubclassOfBaseEntity(final Class> clazz) {
+ return (Class extends BaseEntity>) clazz;
}
/**
diff --git a/src/main/java/net/hostsharing/hsadminng/rbac/rbacobject/RbacObject.java b/src/main/java/net/hostsharing/hsadminng/rbac/rbacobject/BaseEntity.java
similarity index 64%
rename from src/main/java/net/hostsharing/hsadminng/rbac/rbacobject/RbacObject.java
rename to src/main/java/net/hostsharing/hsadminng/rbac/rbacobject/BaseEntity.java
index 31e9a85c..d0e7605f 100644
--- a/src/main/java/net/hostsharing/hsadminng/rbac/rbacobject/RbacObject.java
+++ b/src/main/java/net/hostsharing/hsadminng/rbac/rbacobject/BaseEntity.java
@@ -5,7 +5,8 @@ import org.hibernate.Hibernate;
import java.util.UUID;
-public interface RbacObject> {
+// TODO.impl: this class does not really belong into this package, but there is no right place yet
+public interface BaseEntity> {
UUID getUuid();
int getVersion();
diff --git a/src/main/java/net/hostsharing/hsadminng/rbac/test/cust/TestCustomerEntity.java b/src/main/java/net/hostsharing/hsadminng/rbac/test/cust/TestCustomerEntity.java
index 391a82a6..e9541dd7 100644
--- a/src/main/java/net/hostsharing/hsadminng/rbac/test/cust/TestCustomerEntity.java
+++ b/src/main/java/net/hostsharing/hsadminng/rbac/test/cust/TestCustomerEntity.java
@@ -4,7 +4,7 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL;
@@ -24,7 +24,7 @@ import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.rbacViewFor;
@Setter
@NoArgsConstructor
@AllArgsConstructor
-public class TestCustomerEntity implements RbacObject {
+public class TestCustomerEntity implements BaseEntity {
@Id
@GeneratedValue
diff --git a/src/main/java/net/hostsharing/hsadminng/rbac/test/dom/TestDomainEntity.java b/src/main/java/net/hostsharing/hsadminng/rbac/test/dom/TestDomainEntity.java
index 1dde65d7..5d1369ca 100644
--- a/src/main/java/net/hostsharing/hsadminng/rbac/test/dom/TestDomainEntity.java
+++ b/src/main/java/net/hostsharing/hsadminng/rbac/test/dom/TestDomainEntity.java
@@ -4,7 +4,7 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL;
import net.hostsharing.hsadminng.rbac.test.pac.TestPackageEntity;
@@ -27,7 +27,7 @@ import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.rbacViewFor;
@Setter
@NoArgsConstructor
@AllArgsConstructor
-public class TestDomainEntity implements RbacObject {
+public class TestDomainEntity implements BaseEntity {
@Id
@GeneratedValue
diff --git a/src/main/java/net/hostsharing/hsadminng/rbac/test/pac/TestPackageEntity.java b/src/main/java/net/hostsharing/hsadminng/rbac/test/pac/TestPackageEntity.java
index 5de98a64..8f4541d5 100644
--- a/src/main/java/net/hostsharing/hsadminng/rbac/test/pac/TestPackageEntity.java
+++ b/src/main/java/net/hostsharing/hsadminng/rbac/test/pac/TestPackageEntity.java
@@ -4,7 +4,7 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView;
import net.hostsharing.hsadminng.rbac.rbacdef.RbacView.SQL;
import net.hostsharing.hsadminng.rbac.test.cust.TestCustomerEntity;
@@ -27,7 +27,7 @@ import static net.hostsharing.hsadminng.rbac.rbacdef.RbacView.rbacViewFor;
@Setter
@NoArgsConstructor
@AllArgsConstructor
-public class TestPackageEntity implements RbacObject {
+public class TestPackageEntity implements BaseEntity {
@Id
@GeneratedValue
diff --git a/src/main/java/net/hostsharing/hsadminng/stringify/Stringify.java b/src/main/java/net/hostsharing/hsadminng/stringify/Stringify.java
index b410465f..269b0c69 100644
--- a/src/main/java/net/hostsharing/hsadminng/stringify/Stringify.java
+++ b/src/main/java/net/hostsharing/hsadminng/stringify/Stringify.java
@@ -1,6 +1,6 @@
package net.hostsharing.hsadminng.stringify;
-import net.hostsharing.hsadminng.errors.DisplayName;
+import net.hostsharing.hsadminng.errors.DisplayAs;
import jakarta.validation.constraints.NotNull;
import java.util.ArrayList;
@@ -8,11 +8,11 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
-import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
import static java.lang.Boolean.TRUE;
+import static java.util.Optional.ofNullable;
public final class Stringify {
@@ -32,18 +32,21 @@ public final class Stringify {
public Stringify using(final Class subClass) {
//noinspection unchecked
- return (Stringify) new Stringify(subClass, null)
+ final var stringify = new Stringify(subClass, null)
.withIdProp(cast(idProp))
.withProps(cast(props))
- .withSeparator(separator)
- .quotedValues(quotedValues);
+ .withSeparator(separator);
+ if (quotedValues != null) {
+ stringify.quotedValues(quotedValues);
+ }
+ return stringify;
}
private Stringify(final Class clazz, final String name) {
if (name != null) {
this.name = name;
} else {
- final var displayName = clazz.getAnnotation(DisplayName.class);
+ final var displayName = clazz.getAnnotation(DisplayAs.class);
if (displayName != null) {
this.name = displayName.value();
} else {
@@ -96,7 +99,7 @@ public final class Stringify {
}
private String propName(final PropertyValue propVal, final String delimiter) {
- return Optional.ofNullable(propVal.prop.name).map(v -> v + delimiter).orElse("");
+ return ofNullable(propVal.prop.name).map(v -> v + delimiter).orElse("");
}
private String optionallyQuoted(final PropertyValue propVal) {
diff --git a/src/main/resources/db/changelog/1-rbac/1058-rbac-generators.sql b/src/main/resources/db/changelog/1-rbac/1058-rbac-generators.sql
index 86d9b673..4bfc83b2 100644
--- a/src/main/resources/db/changelog/1-rbac/1058-rbac-generators.sql
+++ b/src/main/resources/db/changelog/1-rbac/1058-rbac-generators.sql
@@ -178,6 +178,8 @@ begin
create or replace view %1$s_rv as
with accessible_%1$s_uuids as (
+ -- TODO.perf: this CTE query makes RBAC-SELECT-permission-queries so slow (~500ms), any idea how to optimize?
+ -- My guess is, that the depth of role-grants causes the problem.
with recursive grants as (
select descendantUuid, ascendantUuid, 1 as level
from RbacGrants
@@ -197,8 +199,7 @@ begin
from granted
join RbacPermission perm on granted.descendantUuid = perm.uuid
join RbacObject obj on obj.uuid = perm.objectUuid
- where perm.op = 'SELECT'
- and obj.objectTable = '%1$s'
+ where obj.objectTable = '%1$s' -- 'SELECT' permission is included in all other permissions
limit 8001
)
select target.*
diff --git a/src/main/resources/db/changelog/2-test/201-test-customer/2013-test-customer-rbac.sql b/src/main/resources/db/changelog/2-test/201-test-customer/2013-test-customer-rbac.sql
index 14767c4b..e1540c9a 100644
--- a/src/main/resources/db/changelog/2-test/201-test-customer/2013-test-customer-rbac.sql
+++ b/src/main/resources/db/changelog/2-test/201-test-customer/2013-test-customer-rbac.sql
@@ -142,8 +142,8 @@ begin
return NEW;
end if;
- raise exception '[403] insert into test_customer not allowed for current subjects % (%)',
- currentSubjects(), currentSubjectsUuids();
+ raise exception '[403] insert into test_customer values(%) not allowed for current subjects % (%)',
+ NEW, currentSubjects(), currentSubjectsUuids();
end; $$;
create trigger test_customer_insert_permission_check_tg
diff --git a/src/main/resources/db/changelog/2-test/202-test-package/2023-test-package-rbac.sql b/src/main/resources/db/changelog/2-test/202-test-package/2023-test-package-rbac.sql
index fd832ccf..9ec9c06a 100644
--- a/src/main/resources/db/changelog/2-test/202-test-package/2023-test-package-rbac.sql
+++ b/src/main/resources/db/changelog/2-test/202-test-package/2023-test-package-rbac.sql
@@ -207,8 +207,8 @@ begin
return NEW;
end if;
- raise exception '[403] insert into test_package not allowed for current subjects % (%)',
- currentSubjects(), currentSubjectsUuids();
+ raise exception '[403] insert into test_package values(%) not allowed for current subjects % (%)',
+ NEW, currentSubjects(), currentSubjectsUuids();
end; $$;
create trigger test_package_insert_permission_check_tg
diff --git a/src/main/resources/db/changelog/2-test/203-test-domain/2033-test-domain-rbac.sql b/src/main/resources/db/changelog/2-test/203-test-domain/2033-test-domain-rbac.sql
index d6f32001..042021c9 100644
--- a/src/main/resources/db/changelog/2-test/203-test-domain/2033-test-domain-rbac.sql
+++ b/src/main/resources/db/changelog/2-test/203-test-domain/2033-test-domain-rbac.sql
@@ -206,8 +206,8 @@ begin
return NEW;
end if;
- raise exception '[403] insert into test_domain not allowed for current subjects % (%)',
- currentSubjects(), currentSubjectsUuids();
+ raise exception '[403] insert into test_domain values(%) not allowed for current subjects % (%)',
+ NEW, currentSubjects(), currentSubjectsUuids();
end; $$;
create trigger test_domain_insert_permission_check_tg
diff --git a/src/main/resources/db/changelog/5-hs-office/504-partner/5043-hs-office-partner-rbac.sql b/src/main/resources/db/changelog/5-hs-office/504-partner/5043-hs-office-partner-rbac.sql
index 520ef180..bd1c673d 100644
--- a/src/main/resources/db/changelog/5-hs-office/504-partner/5043-hs-office-partner-rbac.sql
+++ b/src/main/resources/db/changelog/5-hs-office/504-partner/5043-hs-office-partner-rbac.sql
@@ -219,8 +219,8 @@ begin
return NEW;
end if;
- raise exception '[403] insert into hs_office_partner not allowed for current subjects % (%)',
- currentSubjects(), currentSubjectsUuids();
+ raise exception '[403] insert into hs_office_partner values(%) not allowed for current subjects % (%)',
+ NEW, currentSubjects(), currentSubjectsUuids();
end; $$;
create trigger hs_office_partner_insert_permission_check_tg
diff --git a/src/main/resources/db/changelog/5-hs-office/504-partner/5044-hs-office-partner-details-rbac.sql b/src/main/resources/db/changelog/5-hs-office/504-partner/5044-hs-office-partner-details-rbac.sql
index bf0fe164..8a7f2725 100644
--- a/src/main/resources/db/changelog/5-hs-office/504-partner/5044-hs-office-partner-details-rbac.sql
+++ b/src/main/resources/db/changelog/5-hs-office/504-partner/5044-hs-office-partner-details-rbac.sql
@@ -123,8 +123,8 @@ begin
return NEW;
end if;
- raise exception '[403] insert into hs_office_partner_details not allowed for current subjects % (%)',
- currentSubjects(), currentSubjectsUuids();
+ raise exception '[403] insert into hs_office_partner_details values(%) not allowed for current subjects % (%)',
+ NEW, currentSubjects(), currentSubjectsUuids();
end; $$;
create trigger hs_office_partner_details_insert_permission_check_tg
diff --git a/src/main/resources/db/changelog/5-hs-office/506-debitor/5063-hs-office-debitor-rbac.sql b/src/main/resources/db/changelog/5-hs-office/506-debitor/5063-hs-office-debitor-rbac.sql
index 12f4f09d..8e91d7e7 100644
--- a/src/main/resources/db/changelog/5-hs-office/506-debitor/5063-hs-office-debitor-rbac.sql
+++ b/src/main/resources/db/changelog/5-hs-office/506-debitor/5063-hs-office-debitor-rbac.sql
@@ -192,8 +192,8 @@ begin
return NEW;
end if;
- raise exception '[403] insert into hs_office_debitor not allowed for current subjects % (%)',
- currentSubjects(), currentSubjectsUuids();
+ raise exception '[403] insert into hs_office_debitor values(%) not allowed for current subjects % (%)',
+ NEW, currentSubjects(), currentSubjectsUuids();
end; $$;
create trigger hs_office_debitor_insert_permission_check_tg
diff --git a/src/main/resources/db/changelog/5-hs-office/507-sepamandate/5073-hs-office-sepamandate-rbac.sql b/src/main/resources/db/changelog/5-hs-office/507-sepamandate/5073-hs-office-sepamandate-rbac.sql
index 3fb20baf..6b6595a0 100644
--- a/src/main/resources/db/changelog/5-hs-office/507-sepamandate/5073-hs-office-sepamandate-rbac.sql
+++ b/src/main/resources/db/changelog/5-hs-office/507-sepamandate/5073-hs-office-sepamandate-rbac.sql
@@ -173,8 +173,8 @@ begin
return NEW;
end if;
- raise exception '[403] insert into hs_office_sepamandate not allowed for current subjects % (%)',
- currentSubjects(), currentSubjectsUuids();
+ raise exception '[403] insert into hs_office_sepamandate values(%) not allowed for current subjects % (%)',
+ NEW, currentSubjects(), currentSubjectsUuids();
end; $$;
create trigger hs_office_sepamandate_insert_permission_check_tg
diff --git a/src/main/resources/db/changelog/5-hs-office/510-membership/5103-hs-office-membership-rbac.sql b/src/main/resources/db/changelog/5-hs-office/510-membership/5103-hs-office-membership-rbac.sql
index bc998fa3..7e628d39 100644
--- a/src/main/resources/db/changelog/5-hs-office/510-membership/5103-hs-office-membership-rbac.sql
+++ b/src/main/resources/db/changelog/5-hs-office/510-membership/5103-hs-office-membership-rbac.sql
@@ -154,8 +154,8 @@ begin
return NEW;
end if;
- raise exception '[403] insert into hs_office_membership not allowed for current subjects % (%)',
- currentSubjects(), currentSubjectsUuids();
+ raise exception '[403] insert into hs_office_membership values(%) not allowed for current subjects % (%)',
+ NEW, currentSubjects(), currentSubjectsUuids();
end; $$;
create trigger hs_office_membership_insert_permission_check_tg
diff --git a/src/main/resources/db/changelog/5-hs-office/511-coopshares/5113-hs-office-coopshares-rbac.sql b/src/main/resources/db/changelog/5-hs-office/511-coopshares/5113-hs-office-coopshares-rbac.sql
index 1270fd69..6707bdaa 100644
--- a/src/main/resources/db/changelog/5-hs-office/511-coopshares/5113-hs-office-coopshares-rbac.sql
+++ b/src/main/resources/db/changelog/5-hs-office/511-coopshares/5113-hs-office-coopshares-rbac.sql
@@ -130,8 +130,8 @@ begin
return NEW;
end if;
- raise exception '[403] insert into hs_office_coopsharestransaction not allowed for current subjects % (%)',
- currentSubjects(), currentSubjectsUuids();
+ raise exception '[403] insert into hs_office_coopsharestransaction values(%) not allowed for current subjects % (%)',
+ NEW, currentSubjects(), currentSubjectsUuids();
end; $$;
create trigger hs_office_coopsharestransaction_insert_permission_check_tg
diff --git a/src/main/resources/db/changelog/5-hs-office/512-coopassets/5123-hs-office-coopassets-rbac.sql b/src/main/resources/db/changelog/5-hs-office/512-coopassets/5123-hs-office-coopassets-rbac.sql
index ce9926b2..39f5a8fe 100644
--- a/src/main/resources/db/changelog/5-hs-office/512-coopassets/5123-hs-office-coopassets-rbac.sql
+++ b/src/main/resources/db/changelog/5-hs-office/512-coopassets/5123-hs-office-coopassets-rbac.sql
@@ -130,8 +130,8 @@ begin
return NEW;
end if;
- raise exception '[403] insert into hs_office_coopassetstransaction not allowed for current subjects % (%)',
- currentSubjects(), currentSubjectsUuids();
+ raise exception '[403] insert into hs_office_coopassetstransaction values(%) not allowed for current subjects % (%)',
+ NEW, currentSubjects(), currentSubjectsUuids();
end; $$;
create trigger hs_office_coopassetstransaction_insert_permission_check_tg
diff --git a/src/test/java/net/hostsharing/hsadminng/arch/ArchitectureTest.java b/src/test/java/net/hostsharing/hsadminng/arch/ArchitectureTest.java
index 68a62763..49071496 100644
--- a/src/test/java/net/hostsharing/hsadminng/arch/ArchitectureTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/arch/ArchitectureTest.java
@@ -12,7 +12,7 @@ import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemEntity;
import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetEntity;
import net.hostsharing.hsadminng.rbac.context.ContextBasedTest;
import net.hostsharing.hsadminng.rbac.rbacgrant.RbacGrantsDiagramService;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import org.springframework.data.repository.Repository;
import org.springframework.web.bind.annotation.RestController;
@@ -84,6 +84,7 @@ public class ArchitectureTest {
@ArchTest
@SuppressWarnings("unused")
public static final ArchRule dontUseImplSuffix = noClasses()
+ .that().areNotPrivate() // e.g. Lombok SuperBuilder generated classes
.should().haveSimpleNameEndingWith("Impl");
@ArchTest
@@ -346,7 +347,7 @@ public class ArchitectureTest {
static final ArchRule tableNamesOfRbacEntitiesShouldEndWith_rv =
classes()
.that().areAnnotatedWith(Table.class)
- .and().areAssignableTo(RbacObject.class)
+ .and().areAssignableTo(BaseEntity.class)
.should(haveTableNameEndingWith_rv())
.because("it's required that the table names of RBAC entities end with '_rv'");
diff --git a/src/test/java/net/hostsharing/hsadminng/errors/RestResponseEntityExceptionHandlerUnitTest.java b/src/test/java/net/hostsharing/hsadminng/errors/RestResponseEntityExceptionHandlerUnitTest.java
index 9b25fed4..e54eac1e 100644
--- a/src/test/java/net/hostsharing/hsadminng/errors/RestResponseEntityExceptionHandlerUnitTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/errors/RestResponseEntityExceptionHandlerUnitTest.java
@@ -40,7 +40,7 @@ class RestResponseEntityExceptionHandlerUnitTest {
// then
assertThat(errorResponse.getBody().getStatusCode()).isEqualTo(409);
- assertThat(errorResponse.getBody().getMessage()).isEqualTo("First Line");
+ assertThat(errorResponse.getBody().getMessage()).isEqualTo("ERROR: [409] First Line");
}
@Test
@@ -59,7 +59,7 @@ class RestResponseEntityExceptionHandlerUnitTest {
// then
assertThat(errorResponse.getBody().getStatusCode()).isEqualTo(400);
assertThat(errorResponse.getBody()).isNotNull()
- .extracting(CustomErrorResponse::getMessage).isEqualTo("Second Line");
+ .extracting(CustomErrorResponse::getMessage).isEqualTo("ERROR: [400] Second Line");
}
@Test
@@ -91,7 +91,7 @@ class RestResponseEntityExceptionHandlerUnitTest {
// then
assertThat(errorResponse.getBody().getStatusCode()).isEqualTo(400);
- assertThat(errorResponse.getBody().getMessage()).isEqualTo("Unable to find Partner with uuid 12345-123454");
+ assertThat(errorResponse.getBody().getMessage()).isEqualTo("ERROR: [400] Unable to find Partner with uuid 12345-123454");
}
@Test
@@ -109,7 +109,7 @@ class RestResponseEntityExceptionHandlerUnitTest {
// then
assertThat(errorResponse.getBody().getStatusCode()).isEqualTo(400);
assertThat(errorResponse.getBody().getMessage()).isEqualTo(
- "Unable to find net.hostsharing.hsadminng.WhateverEntity with id 12345-123454");
+ "ERROR: [400] Unable to find net.hostsharing.hsadminng.WhateverEntity with id 12345-123454");
}
@Test
@@ -125,7 +125,7 @@ class RestResponseEntityExceptionHandlerUnitTest {
// then
assertThat(errorResponse.getBody().getStatusCode()).isEqualTo(400);
- assertThat(errorResponse.getBody().getMessage()).isEqualTo("whatever error message");
+ assertThat(errorResponse.getBody().getMessage()).isEqualTo("ERROR: [400] whatever error message");
}
@Test
@@ -143,7 +143,7 @@ class RestResponseEntityExceptionHandlerUnitTest {
// then
assertThat(errorResponse.getBody().getStatusCode()).isEqualTo(400);
- assertThat(errorResponse.getBody().getMessage()).isEqualTo("Unable to find NoDisplayNameEntity with uuid 12345-123454");
+ assertThat(errorResponse.getBody().getMessage()).isEqualTo("ERROR: [400] Unable to find NoDisplayNameEntity with uuid 12345-123454");
}
@Test
@@ -172,7 +172,7 @@ class RestResponseEntityExceptionHandlerUnitTest {
// then
assertThat(errorResponse.getBody().getStatusCode()).isEqualTo(404);
- assertThat(errorResponse.getBody().getMessage()).isEqualTo("some error message");
+ assertThat(errorResponse.getBody().getMessage()).isEqualTo("ERROR: [404] some error message");
}
@ParameterizedTest
@@ -191,7 +191,7 @@ class RestResponseEntityExceptionHandlerUnitTest {
// then
assertThat(errorResponse.getBody().getStatusCode()).isEqualTo(400);
- assertThat(errorResponse.getBody().getMessage()).isEqualTo("given error message");
+ assertThat(errorResponse.getBody().getMessage()).isEqualTo("ERROR: [400] given error message");
}
@Test
@@ -218,7 +218,8 @@ class RestResponseEntityExceptionHandlerUnitTest {
.extracting("statusCode").isEqualTo(400);
assertThat(errorResponse.getBody())
.extracting("message")
- .isEqualTo("[someField expected to be something but is \"someRejectedValue\"]");
+ // FYI: the brackets around the message are here because it's actually an array, in this case of size 1
+ .isEqualTo("ERROR: [400] [someField expected to be something but is \"someRejectedValue\"]");
}
@Test
@@ -232,7 +233,7 @@ class RestResponseEntityExceptionHandlerUnitTest {
// then
assertThat(errorResponse.getBody().getStatusCode()).isEqualTo(500);
- assertThat(errorResponse.getBody().getMessage()).isEqualTo("First Line");
+ assertThat(errorResponse.getBody().getMessage()).isEqualTo("ERROR: [500] First Line");
}
@Test
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetControllerAcceptanceTest.java b/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetControllerAcceptanceTest.java
index 54edc9ef..1e822604 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetControllerAcceptanceTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetControllerAcceptanceTest.java
@@ -8,8 +8,8 @@ import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemEntity;
import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemRepository;
import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemType;
import net.hostsharing.hsadminng.hs.booking.project.HsBookingProjectRepository;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRepository;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRbacEntity;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRbacRepository;
import net.hostsharing.hsadminng.hs.office.debitor.HsOfficeDebitorRepository;
import net.hostsharing.hsadminng.rbac.test.ContextBasedTestWithCleanup;
import net.hostsharing.hsadminng.rbac.test.JpaAttempt;
@@ -62,7 +62,7 @@ class HsHostingAssetControllerAcceptanceTest extends ContextBasedTestWithCleanup
HsOfficeDebitorRepository debitorRepo;
@Autowired
- HsOfficeContactRepository contactRepo;
+ HsOfficeContactRbacRepository contactRepo;
@Autowired
JpaAttempt jpaAttempt;
@@ -307,7 +307,7 @@ class HsHostingAssetControllerAcceptanceTest extends ContextBasedTestWithCleanup
.body("", lenientlyEquals("""
{
"statusPhrase": "Bad Request",
- "message": "[
+ "message": "ERROR: [400] [
<<<'MANAGED_SERVER:vm1400.config.extra' is not expected but is set to '42',
<<<'MANAGED_SERVER:vm1400.config.monit_max_cpu_usage' is expected to be at most 100 but is 101,
<<<'MANAGED_SERVER:vm1400.config.monit_max_ssd_usage' is expected to be at least 10 but is 0
@@ -360,7 +360,7 @@ class HsHostingAssetControllerAcceptanceTest extends ContextBasedTestWithCleanup
.body("", lenientlyEquals("""
{
"statusPhrase": "Bad Request",
- "message": "['D-1000111:D-1000111 default project:separate ManagedWebspace.resources.Multi=1 allows at maximum 25 unix users, but 26 found]"
+ "message": "ERROR: [400] ['D-1000111:D-1000111 default project:separate ManagedWebspace.resources.Multi=1 allows at maximum 25 unix users, but 26 found]"
}
""".replaceAll(" +<<<", ""))); // @formatter:on
}
@@ -732,7 +732,7 @@ class HsHostingAssetControllerAcceptanceTest extends ContextBasedTestWithCleanup
}).assertSuccessful().returnedValue();
}
- private HsOfficeContactEntity givenContact() {
+ private HsOfficeContactRbacEntity givenContact() {
return jpaAttempt.transacted(() -> {
context.define("superuser-alex@hostsharing.net");
return contactRepo.findContactByOptionalCaptionLike("second").stream().findFirst().orElseThrow();
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 f20006c2..7a382edb 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
@@ -32,7 +32,7 @@ import static net.hostsharing.hsadminng.hs.booking.item.TestHsBookingItem.TEST_C
import static net.hostsharing.hsadminng.hs.booking.item.TestHsBookingItem.TEST_MANAGED_SERVER_BOOKING_ITEM;
import static net.hostsharing.hsadminng.hs.hosting.asset.TestHsHostingAssetEntities.TEST_MANAGED_SERVER_HOSTING_ASSET;
import static net.hostsharing.hsadminng.hs.hosting.asset.TestHsHostingAssetEntities.TEST_MANAGED_WEBSPACE_HOSTING_ASSET;
-import static net.hostsharing.hsadminng.hs.office.contact.TestHsOfficeContact.TEST_CONTACT;
+import static net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealTestEntity.TEST_REAL_CONTACT;
import static net.hostsharing.hsadminng.rbac.test.JsonMatcher.lenientlyEquals;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
@@ -75,7 +75,7 @@ public class HsHostingAssetControllerRestTest {
.bookingItem(TEST_CLOUD_SERVER_BOOKING_ITEM)
.identifier("vm1234")
.caption("some fake cloud-server")
- .alarmContact(TEST_CONTACT)
+ .alarmContact(TEST_REAL_CONTACT)
.build()),
"""
[
@@ -101,7 +101,7 @@ public class HsHostingAssetControllerRestTest {
.bookingItem(TEST_MANAGED_SERVER_BOOKING_ITEM)
.identifier("vm1234")
.caption("some fake managed-server")
- .alarmContact(TEST_CONTACT)
+ .alarmContact(TEST_REAL_CONTACT)
.config(Map.ofEntries(
entry("monit_max_ssd_usage", 70),
entry("monit_max_cpu_usage", 80),
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetEntityPatcherUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetEntityPatcherUnitTest.java
index 96728cca..f9e4c568 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetEntityPatcherUnitTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetEntityPatcherUnitTest.java
@@ -1,7 +1,7 @@
package net.hostsharing.hsadminng.hs.hosting.asset;
import net.hostsharing.hsadminng.hs.hosting.generated.api.v1.model.HsHostingAssetPatchResource;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealEntity;
import net.hostsharing.hsadminng.mapper.KeyValueMap;
import net.hostsharing.hsadminng.rbac.test.PatchUnitTestBase;
import org.junit.jupiter.api.BeforeEach;
@@ -48,7 +48,7 @@ class HsHostingAssetEntityPatcherUnitTest extends PatchUnitTestBase<
entry("SSD", 256),
entry("MEM", 64)
);
- final HsOfficeContactEntity givenInitialContact = HsOfficeContactEntity.builder()
+ final HsOfficeContactRealEntity givenInitialContact = HsOfficeContactRealEntity.builder()
.uuid(UUID.randomUUID())
.build();
@@ -62,8 +62,8 @@ class HsHostingAssetEntityPatcherUnitTest extends PatchUnitTestBase<
void initMocks() {
lenient().when(em.getReference(eq(HsHostingAssetEntity.class), any())).thenAnswer(invocation ->
HsHostingAssetEntity.builder().uuid(invocation.getArgument(1)).build());
- lenient().when(em.getReference(eq(HsOfficeContactEntity.class), any())).thenAnswer(invocation ->
- HsOfficeContactEntity.builder().uuid(invocation.getArgument(1)).build());
+ lenient().when(em.getReference(eq(HsOfficeContactRealEntity.class), any())).thenAnswer(invocation ->
+ HsOfficeContactRealEntity.builder().uuid(invocation.getArgument(1)).build());
}
@Override
@@ -111,7 +111,7 @@ class HsHostingAssetEntityPatcherUnitTest extends PatchUnitTestBase<
);
}
- static HsOfficeContactEntity newContact(final UUID uuid) {
- return HsOfficeContactEntity.builder().uuid(uuid).build();
+ static HsOfficeContactRealEntity newContact(final UUID uuid) {
+ return HsOfficeContactRealEntity.builder().uuid(uuid).build();
}
}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/migration/CsvDataImport.java b/src/test/java/net/hostsharing/hsadminng/hs/migration/CsvDataImport.java
index 2b68e352..a8ad47e1 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/migration/CsvDataImport.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/migration/CsvDataImport.java
@@ -6,7 +6,7 @@ import com.opencsv.CSVReaderBuilder;
import lombok.SneakyThrows;
import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAsset;
import net.hostsharing.hsadminng.rbac.context.ContextBasedTest;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import net.hostsharing.hsadminng.rbac.test.JpaAttempt;
import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
@@ -141,7 +141,7 @@ public class CsvDataImport extends ContextBasedTest {
return record;
}
- public T persist(final Integer id, final T entity) {
+ public T persist(final Integer id, final T entity) {
try {
if (entity instanceof HsHostingAsset ha) {
//noinspection unchecked
@@ -155,7 +155,7 @@ public class CsvDataImport extends ContextBasedTest {
return entity;
}
- public T persistViaEM(final Integer id, final T entity) {
+ public T persistViaEM(final Integer id, final T entity) {
//System.out.println("persisting #" + entity.hashCode() + ": " + entity);
em.persist(entity);
// uncomment for debugging purposes
@@ -165,7 +165,7 @@ public class CsvDataImport extends ContextBasedTest {
}
@SneakyThrows
- public RbacObject persistViaSql(final Integer id, final HsHostingAsset entity) {
+ public BaseEntity persistViaSql(final Integer id, final HsHostingAsset entity) {
if (entity.getUuid() == null) {
entity.setUuid(UUID.randomUUID());
}
@@ -196,10 +196,10 @@ public class CsvDataImport extends ContextBasedTest {
""")
.setParameter("uuid", entity.getUuid())
.setParameter("type", entity.getType().name())
- .setParameter("bookingitemuuid", ofNullable(entity.getBookingItem()).map(RbacObject::getUuid).orElse(null))
- .setParameter("parentassetuuid", ofNullable(entity.getParentAsset()).map(RbacObject::getUuid).orElse(null))
- .setParameter("assignedtoassetuuid", ofNullable(entity.getAssignedToAsset()).map(RbacObject::getUuid).orElse(null))
- .setParameter("alarmcontactuuid", ofNullable(entity.getAlarmContact()).map(RbacObject::getUuid).orElse(null))
+ .setParameter("bookingitemuuid", ofNullable(entity.getBookingItem()).map(BaseEntity::getUuid).orElse(null))
+ .setParameter("parentassetuuid", ofNullable(entity.getParentAsset()).map(BaseEntity::getUuid).orElse(null))
+ .setParameter("assignedtoassetuuid", ofNullable(entity.getAssignedToAsset()).map(BaseEntity::getUuid).orElse(null))
+ .setParameter("alarmcontactuuid", ofNullable(entity.getAlarmContact()).map(BaseEntity::getUuid).orElse(null))
.setParameter("identifier", entity.getIdentifier())
.setParameter("caption", entity.getCaption())
.setParameter("config", entity.getConfig().toString())
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/migration/HsHostingAssetRawEntity.java b/src/test/java/net/hostsharing/hsadminng/hs/migration/HsHostingAssetRealEntity.java
similarity index 89%
rename from src/test/java/net/hostsharing/hsadminng/hs/migration/HsHostingAssetRawEntity.java
rename to src/test/java/net/hostsharing/hsadminng/hs/migration/HsHostingAssetRealEntity.java
index 33e632d5..51665b9c 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/migration/HsHostingAssetRawEntity.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/migration/HsHostingAssetRealEntity.java
@@ -10,7 +10,7 @@ import lombok.Setter;
import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemEntity;
import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAsset;
import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealEntity;
import net.hostsharing.hsadminng.mapper.PatchableMapWrapper;
import org.hibernate.annotations.Type;
@@ -42,7 +42,7 @@ import java.util.UUID;
@Setter
@NoArgsConstructor
@AllArgsConstructor
-public class HsHostingAssetRawEntity implements HsHostingAsset {
+public class HsHostingAssetRealEntity implements HsHostingAsset {
@Id
@GeneratedValue
@@ -57,11 +57,11 @@ public class HsHostingAssetRawEntity implements HsHostingAsset {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parentassetuuid")
- private HsHostingAssetRawEntity parentAsset;
+ private HsHostingAssetRealEntity parentAsset;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "assignedtoassetuuid")
- private HsHostingAssetRawEntity assignedToAsset;
+ private HsHostingAssetRealEntity assignedToAsset;
@Column(name = "type")
@Enumerated(EnumType.STRING)
@@ -69,11 +69,11 @@ public class HsHostingAssetRawEntity implements HsHostingAsset {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "alarmcontactuuid")
- private HsOfficeContactEntity alarmContact;
+ private HsOfficeContactRealEntity alarmContact;
@OneToMany(cascade = CascadeType.REFRESH, orphanRemoval = true, fetch = FetchType.LAZY)
@JoinColumn(name = "parentassetuuid", referencedColumnName = "uuid")
- private List subHostingAssets;
+ private List subHostingAssets;
@Column(name = "identifier")
private String identifier; // e.g. vm1234, xyz00, example.org, xyz00_abc
@@ -109,6 +109,6 @@ public class HsHostingAssetRawEntity implements HsHostingAsset {
@Override
public String toString() {
- return stringify.using(HsHostingAssetRawEntity.class).apply(this);
+ return stringify.using(HsHostingAssetRealEntity.class).apply(this);
}
}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/migration/ImportHostingAssets.java b/src/test/java/net/hostsharing/hsadminng/hs/migration/ImportHostingAssets.java
index 288261e7..ae1b5e44 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/migration/ImportHostingAssets.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/migration/ImportHostingAssets.java
@@ -113,13 +113,13 @@ public class ImportHostingAssets extends ImportOfficeData {
static final Integer DBUSER_ID_OFFSET = 7000000;
static final Integer DB_ID_OFFSET = 8000000;
- record Hive(int hive_id, String hive_name, int inet_addr_id, AtomicReference serverRef) {}
+ record Hive(int hive_id, String hive_name, int inet_addr_id, AtomicReference serverRef) {}
static Map bookingProjects = new WriteOnceMap<>();
static Map bookingItems = new WriteOnceMap<>();
static Map hives = new WriteOnceMap<>();
- static Map hostingAssets = new WriteOnceMap<>(); // TODO.impl: separate maps for each type?
- static Map dbUsersByEngineAndName = new WriteOnceMap<>();
+ static Map hostingAssets = new WriteOnceMap<>(); // TODO.impl: separate maps for each type?
+ static Map dbUsersByEngineAndName = new WriteOnceMap<>();
@Test
@Order(11010)
@@ -150,11 +150,11 @@ public class ImportHostingAssets extends ImportOfficeData {
assertThat(firstOfEachType(5, IPV4_NUMBER)).isEqualToIgnoringWhitespace("""
{
- 1000363=HsHostingAssetRawEntity(IPV4_NUMBER, 83.223.95.34),
- 1000381=HsHostingAssetRawEntity(IPV4_NUMBER, 83.223.95.52),
- 1000402=HsHostingAssetRawEntity(IPV4_NUMBER, 83.223.95.73),
- 1000433=HsHostingAssetRawEntity(IPV4_NUMBER, 83.223.95.104),
- 1000457=HsHostingAssetRawEntity(IPV4_NUMBER, 83.223.95.128)
+ 1000363=HsHostingAssetRealEntity(IPV4_NUMBER, 83.223.95.34),
+ 1000381=HsHostingAssetRealEntity(IPV4_NUMBER, 83.223.95.52),
+ 1000402=HsHostingAssetRealEntity(IPV4_NUMBER, 83.223.95.73),
+ 1000433=HsHostingAssetRealEntity(IPV4_NUMBER, 83.223.95.104),
+ 1000457=HsHostingAssetRealEntity(IPV4_NUMBER, 83.223.95.128)
}
""");
}
@@ -204,13 +204,13 @@ public class ImportHostingAssets extends ImportOfficeData {
assertThat(firstOfEachType(3, CLOUD_SERVER, MANAGED_SERVER, MANAGED_WEBSPACE)).isEqualToIgnoringWhitespace("""
{
- 3000630=HsHostingAssetRawEntity(MANAGED_WEBSPACE, hsh00, HA hsh00, MANAGED_SERVER:vm1050, D-1000000:hsh default project:BI hsh00),
- 3000968=HsHostingAssetRawEntity(MANAGED_SERVER, vm1061, HA vm1061, D-1015200:rar default project:BI vm1061),
- 3000978=HsHostingAssetRawEntity(MANAGED_SERVER, vm1050, HA vm1050, D-1000000:hsh default project:BI vm1050),
- 3001061=HsHostingAssetRawEntity(MANAGED_SERVER, vm1068, HA vm1068, D-1000300:mim default project:BI vm1068),
- 3001094=HsHostingAssetRawEntity(MANAGED_WEBSPACE, lug00, HA lug00, MANAGED_SERVER:vm1068, D-1000300:mim default project:BI lug00),
- 3001112=HsHostingAssetRawEntity(MANAGED_WEBSPACE, mim00, HA mim00, MANAGED_SERVER:vm1068, D-1000300:mim default project:BI mim00),
- 3023611=HsHostingAssetRawEntity(CLOUD_SERVER, vm2097, HA vm2097, D-1101800:wws default project:BI vm2097)
+ 3000630=HsHostingAssetRealEntity(MANAGED_WEBSPACE, hsh00, HA hsh00, MANAGED_SERVER:vm1050, D-1000000:hsh default project:BI hsh00),
+ 3000968=HsHostingAssetRealEntity(MANAGED_SERVER, vm1061, HA vm1061, D-1015200:rar default project:BI vm1061),
+ 3000978=HsHostingAssetRealEntity(MANAGED_SERVER, vm1050, HA vm1050, D-1000000:hsh default project:BI vm1050),
+ 3001061=HsHostingAssetRealEntity(MANAGED_SERVER, vm1068, HA vm1068, D-1000300:mim default project:BI vm1068),
+ 3001094=HsHostingAssetRealEntity(MANAGED_WEBSPACE, lug00, HA lug00, MANAGED_SERVER:vm1068, D-1000300:mim default project:BI lug00),
+ 3001112=HsHostingAssetRealEntity(MANAGED_WEBSPACE, mim00, HA mim00, MANAGED_SERVER:vm1068, D-1000300:mim default project:BI mim00),
+ 3023611=HsHostingAssetRealEntity(CLOUD_SERVER, vm2097, HA vm2097, D-1101800:wws default project:BI vm2097)
}
""");
assertThat(firstOfEachType(
@@ -249,15 +249,15 @@ public class ImportHostingAssets extends ImportOfficeData {
assertThat(firstOfEachType(5, CLOUD_SERVER, MANAGED_SERVER, MANAGED_WEBSPACE))
.isEqualToIgnoringWhitespace("""
{
- 3000630=HsHostingAssetRawEntity(MANAGED_WEBSPACE, hsh00, HA hsh00, MANAGED_SERVER:vm1050, D-1000000:hsh default project:BI hsh00),
- 3000968=HsHostingAssetRawEntity(MANAGED_SERVER, vm1061, HA vm1061, D-1015200:rar default project:BI vm1061),
- 3000978=HsHostingAssetRawEntity(MANAGED_SERVER, vm1050, HA vm1050, D-1000000:hsh default project:BI vm1050),
- 3001061=HsHostingAssetRawEntity(MANAGED_SERVER, vm1068, HA vm1068, D-1000300:mim default project:BI vm1068),
- 3001094=HsHostingAssetRawEntity(MANAGED_WEBSPACE, lug00, HA lug00, MANAGED_SERVER:vm1068, D-1000300:mim default project:BI lug00),
- 3001112=HsHostingAssetRawEntity(MANAGED_WEBSPACE, mim00, HA mim00, MANAGED_SERVER:vm1068, D-1000300:mim default project:BI mim00),
- 3001447=HsHostingAssetRawEntity(MANAGED_SERVER, vm1093, HA vm1093, D-1000000:hsh default project:BI vm1093),
- 3019959=HsHostingAssetRawEntity(MANAGED_WEBSPACE, dph00, HA dph00, MANAGED_SERVER:vm1093, D-1101900:dph default project:BI dph00),
- 3023611=HsHostingAssetRawEntity(CLOUD_SERVER, vm2097, HA vm2097, D-1101800:wws default project:BI vm2097)
+ 3000630=HsHostingAssetRealEntity(MANAGED_WEBSPACE, hsh00, HA hsh00, MANAGED_SERVER:vm1050, D-1000000:hsh default project:BI hsh00),
+ 3000968=HsHostingAssetRealEntity(MANAGED_SERVER, vm1061, HA vm1061, D-1015200:rar default project:BI vm1061),
+ 3000978=HsHostingAssetRealEntity(MANAGED_SERVER, vm1050, HA vm1050, D-1000000:hsh default project:BI vm1050),
+ 3001061=HsHostingAssetRealEntity(MANAGED_SERVER, vm1068, HA vm1068, D-1000300:mim default project:BI vm1068),
+ 3001094=HsHostingAssetRealEntity(MANAGED_WEBSPACE, lug00, HA lug00, MANAGED_SERVER:vm1068, D-1000300:mim default project:BI lug00),
+ 3001112=HsHostingAssetRealEntity(MANAGED_WEBSPACE, mim00, HA mim00, MANAGED_SERVER:vm1068, D-1000300:mim default project:BI mim00),
+ 3001447=HsHostingAssetRealEntity(MANAGED_SERVER, vm1093, HA vm1093, D-1000000:hsh default project:BI vm1093),
+ 3019959=HsHostingAssetRealEntity(MANAGED_WEBSPACE, dph00, HA dph00, MANAGED_SERVER:vm1093, D-1101900:dph default project:BI dph00),
+ 3023611=HsHostingAssetRealEntity(CLOUD_SERVER, vm2097, HA vm2097, D-1101800:wws default project:BI vm2097)
}
""");
assertThat(firstOfEachType(
@@ -298,20 +298,20 @@ public class ImportHostingAssets extends ImportOfficeData {
assertThat(firstOfEachType(15, UNIX_USER)).isEqualToIgnoringWhitespace("""
{
- 4005803=HsHostingAssetRawEntity(UNIX_USER, lug00, LUGs, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/bin/bash", "userid": 102090}),
- 4005805=HsHostingAssetRawEntity(UNIX_USER, lug00-wla.1, Paul Klemm, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/bin/bash", "userid": 102091}),
- 4005809=HsHostingAssetRawEntity(UNIX_USER, lug00-wla.2, Walter Müller, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 8, "SSD soft quota": 4, "locked": false, "shell": "/bin/bash", "userid": 102093}),
- 4005811=HsHostingAssetRawEntity(UNIX_USER, lug00-ola.a, LUG OLA - POP a, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/usr/bin/passwd", "userid": 102094}),
- 4005813=HsHostingAssetRawEntity(UNIX_USER, lug00-ola.b, LUG OLA - POP b, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/usr/bin/passwd", "userid": 102095}),
- 4005835=HsHostingAssetRawEntity(UNIX_USER, lug00-test, Test, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 1024, "SSD soft quota": 1024, "locked": false, "shell": "/usr/bin/passwd", "userid": 102106}),
- 4005964=HsHostingAssetRawEntity(UNIX_USER, mim00, Michael Mellis, MANAGED_WEBSPACE:mim00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/bin/bash", "userid": 102147}),
- 4005966=HsHostingAssetRawEntity(UNIX_USER, mim00-1981, Jahrgangstreffen 1981, MANAGED_WEBSPACE:mim00, { "SSD hard quota": 256, "SSD soft quota": 128, "locked": false, "shell": "/bin/bash", "userid": 102148}),
- 4005990=HsHostingAssetRawEntity(UNIX_USER, mim00-mail, Mailbox, MANAGED_WEBSPACE:mim00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/bin/bash", "userid": 102160}),
- 4100705=HsHostingAssetRawEntity(UNIX_USER, hsh00-mim, Michael Mellis, MANAGED_WEBSPACE:hsh00, { "HDD hard quota": 0, "HDD soft quota": 0, "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/bin/false", "userid": 10003}),
- 4100824=HsHostingAssetRawEntity(UNIX_USER, hsh00, Hostsharing Paket, MANAGED_WEBSPACE:hsh00, { "HDD hard quota": 0, "HDD soft quota": 0, "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/bin/bash", "userid": 10000}),
- 4167846=HsHostingAssetRawEntity(UNIX_USER, hsh00-dph, hsh00-uph, MANAGED_WEBSPACE:hsh00, { "HDD hard quota": 0, "HDD soft quota": 0, "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/bin/false", "userid": 110568}),
- 4169546=HsHostingAssetRawEntity(UNIX_USER, dph00, Reinhard Wiese, MANAGED_WEBSPACE:dph00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/bin/bash", "userid": 110593}),
- 4169596=HsHostingAssetRawEntity(UNIX_USER, dph00-uph, Domain admin, MANAGED_WEBSPACE:dph00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/bin/bash", "userid": 110594})
+ 4005803=HsHostingAssetRealEntity(UNIX_USER, lug00, LUGs, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/bin/bash", "userid": 102090}),
+ 4005805=HsHostingAssetRealEntity(UNIX_USER, lug00-wla.1, Paul Klemm, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/bin/bash", "userid": 102091}),
+ 4005809=HsHostingAssetRealEntity(UNIX_USER, lug00-wla.2, Walter Müller, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 8, "SSD soft quota": 4, "locked": false, "shell": "/bin/bash", "userid": 102093}),
+ 4005811=HsHostingAssetRealEntity(UNIX_USER, lug00-ola.a, LUG OLA - POP a, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/usr/bin/passwd", "userid": 102094}),
+ 4005813=HsHostingAssetRealEntity(UNIX_USER, lug00-ola.b, LUG OLA - POP b, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/usr/bin/passwd", "userid": 102095}),
+ 4005835=HsHostingAssetRealEntity(UNIX_USER, lug00-test, Test, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 1024, "SSD soft quota": 1024, "locked": false, "shell": "/usr/bin/passwd", "userid": 102106}),
+ 4005964=HsHostingAssetRealEntity(UNIX_USER, mim00, Michael Mellis, MANAGED_WEBSPACE:mim00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/bin/bash", "userid": 102147}),
+ 4005966=HsHostingAssetRealEntity(UNIX_USER, mim00-1981, Jahrgangstreffen 1981, MANAGED_WEBSPACE:mim00, { "SSD hard quota": 256, "SSD soft quota": 128, "locked": false, "shell": "/bin/bash", "userid": 102148}),
+ 4005990=HsHostingAssetRealEntity(UNIX_USER, mim00-mail, Mailbox, MANAGED_WEBSPACE:mim00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/bin/bash", "userid": 102160}),
+ 4100705=HsHostingAssetRealEntity(UNIX_USER, hsh00-mim, Michael Mellis, MANAGED_WEBSPACE:hsh00, { "HDD hard quota": 0, "HDD soft quota": 0, "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/bin/false", "userid": 10003}),
+ 4100824=HsHostingAssetRealEntity(UNIX_USER, hsh00, Hostsharing Paket, MANAGED_WEBSPACE:hsh00, { "HDD hard quota": 0, "HDD soft quota": 0, "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/bin/bash", "userid": 10000}),
+ 4167846=HsHostingAssetRealEntity(UNIX_USER, hsh00-dph, hsh00-uph, MANAGED_WEBSPACE:hsh00, { "HDD hard quota": 0, "HDD soft quota": 0, "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/bin/false", "userid": 110568}),
+ 4169546=HsHostingAssetRealEntity(UNIX_USER, dph00, Reinhard Wiese, MANAGED_WEBSPACE:dph00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/bin/bash", "userid": 110593}),
+ 4169596=HsHostingAssetRealEntity(UNIX_USER, dph00-uph, Domain admin, MANAGED_WEBSPACE:dph00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "shell": "/bin/bash", "userid": 110594})
}
""");
}
@@ -334,17 +334,17 @@ public class ImportHostingAssets extends ImportOfficeData {
assertThat(firstOfEachType(15, EMAIL_ALIAS)).isEqualToIgnoringWhitespace("""
{
- 5002403=HsHostingAssetRawEntity(EMAIL_ALIAS, lug00, lug00, MANAGED_WEBSPACE:lug00, { "target": "[michael.mellis@example.com]"}),
- 5002405=HsHostingAssetRawEntity(EMAIL_ALIAS, lug00-wla-listar, lug00-wla-listar, MANAGED_WEBSPACE:lug00, { "target": "[|/home/pacs/lug00/users/in/mailinglist/listar]"}),
- 5002429=HsHostingAssetRawEntity(EMAIL_ALIAS, mim00, mim00, MANAGED_WEBSPACE:mim00, { "target": "[mim12-mi@mim12.hostsharing.net]"}),
- 5002431=HsHostingAssetRawEntity(EMAIL_ALIAS, mim00-abruf, mim00-abruf, MANAGED_WEBSPACE:mim00, { "target": "[michael.mellis@hostsharing.net]"}),
- 5002449=HsHostingAssetRawEntity(EMAIL_ALIAS, mim00-hhfx, mim00-hhfx, MANAGED_WEBSPACE:mim00, { "target": "[mim00-hhfx, |/usr/bin/formail -I 'Reply-To: hamburger-fx@example.net' | /usr/lib/sendmail mim00-hhfx-l]"}),
- 5002451=HsHostingAssetRawEntity(EMAIL_ALIAS, mim00-hhfx-l, mim00-hhfx-l, MANAGED_WEBSPACE:mim00, { "target": "[:include:/home/pacs/mim00/etc/hhfx.list]"}),
- 5002452=HsHostingAssetRawEntity(EMAIL_ALIAS, mim00-empty, mim00-empty, MANAGED_WEBSPACE:mim00, { "target": "[]"}),
- 5002453=HsHostingAssetRawEntity(EMAIL_ALIAS, mim00-0_entries, mim00-0_entries, MANAGED_WEBSPACE:mim00, { "target": "[]"}),
- 5002454=HsHostingAssetRawEntity(EMAIL_ALIAS, mim00-dev.null, mim00-dev.null, MANAGED_WEBSPACE:mim00, { "target": "[/dev/null]"}),
- 5002455=HsHostingAssetRawEntity(EMAIL_ALIAS, mim00-1_with_space, mim00-1_with_space, MANAGED_WEBSPACE:mim00, { "target": "[|/home/pacs/mim00/install/corpslistar/listar]"}),
- 5002456=HsHostingAssetRawEntity(EMAIL_ALIAS, mim00-1_with_single_quotes, mim00-1_with_single_quotes, MANAGED_WEBSPACE:mim00, { "target": "[|/home/pacs/rir00/mailinglist/ecartis -r kybs06-intern]"})
+ 5002403=HsHostingAssetRealEntity(EMAIL_ALIAS, lug00, lug00, MANAGED_WEBSPACE:lug00, { "target": "[michael.mellis@example.com]"}),
+ 5002405=HsHostingAssetRealEntity(EMAIL_ALIAS, lug00-wla-listar, lug00-wla-listar, MANAGED_WEBSPACE:lug00, { "target": "[|/home/pacs/lug00/users/in/mailinglist/listar]"}),
+ 5002429=HsHostingAssetRealEntity(EMAIL_ALIAS, mim00, mim00, MANAGED_WEBSPACE:mim00, { "target": "[mim12-mi@mim12.hostsharing.net]"}),
+ 5002431=HsHostingAssetRealEntity(EMAIL_ALIAS, mim00-abruf, mim00-abruf, MANAGED_WEBSPACE:mim00, { "target": "[michael.mellis@hostsharing.net]"}),
+ 5002449=HsHostingAssetRealEntity(EMAIL_ALIAS, mim00-hhfx, mim00-hhfx, MANAGED_WEBSPACE:mim00, { "target": "[mim00-hhfx, |/usr/bin/formail -I 'Reply-To: hamburger-fx@example.net' | /usr/lib/sendmail mim00-hhfx-l]"}),
+ 5002451=HsHostingAssetRealEntity(EMAIL_ALIAS, mim00-hhfx-l, mim00-hhfx-l, MANAGED_WEBSPACE:mim00, { "target": "[:include:/home/pacs/mim00/etc/hhfx.list]"}),
+ 5002452=HsHostingAssetRealEntity(EMAIL_ALIAS, mim00-empty, mim00-empty, MANAGED_WEBSPACE:mim00, { "target": "[]"}),
+ 5002453=HsHostingAssetRealEntity(EMAIL_ALIAS, mim00-0_entries, mim00-0_entries, MANAGED_WEBSPACE:mim00, { "target": "[]"}),
+ 5002454=HsHostingAssetRealEntity(EMAIL_ALIAS, mim00-dev.null, mim00-dev.null, MANAGED_WEBSPACE:mim00, { "target": "[/dev/null]"}),
+ 5002455=HsHostingAssetRealEntity(EMAIL_ALIAS, mim00-1_with_space, mim00-1_with_space, MANAGED_WEBSPACE:mim00, { "target": "[|/home/pacs/mim00/install/corpslistar/listar]"}),
+ 5002456=HsHostingAssetRealEntity(EMAIL_ALIAS, mim00-1_with_single_quotes, mim00-1_with_single_quotes, MANAGED_WEBSPACE:mim00, { "target": "[|/home/pacs/rir00/mailinglist/ecartis -r kybs06-intern]"})
}
""");
}
@@ -362,14 +362,14 @@ public class ImportHostingAssets extends ImportOfficeData {
assertThat(firstOfEachType(5, PGSQL_INSTANCE, MARIADB_INSTANCE)).isEqualToIgnoringWhitespace("""
{
- 6000000=HsHostingAssetRawEntity(PGSQL_INSTANCE, vm1061|PgSql.default, vm1061-PostgreSQL default instance, MANAGED_SERVER:vm1061),
- 6000001=HsHostingAssetRawEntity(MARIADB_INSTANCE, vm1061|MariaDB.default, vm1061-MariaDB default instance, MANAGED_SERVER:vm1061),
- 6000002=HsHostingAssetRawEntity(PGSQL_INSTANCE, vm1050|PgSql.default, vm1050-PostgreSQL default instance, MANAGED_SERVER:vm1050),
- 6000003=HsHostingAssetRawEntity(MARIADB_INSTANCE, vm1050|MariaDB.default, vm1050-MariaDB default instance, MANAGED_SERVER:vm1050),
- 6000004=HsHostingAssetRawEntity(PGSQL_INSTANCE, vm1068|PgSql.default, vm1068-PostgreSQL default instance, MANAGED_SERVER:vm1068),
- 6000005=HsHostingAssetRawEntity(MARIADB_INSTANCE, vm1068|MariaDB.default, vm1068-MariaDB default instance, MANAGED_SERVER:vm1068),
- 6000006=HsHostingAssetRawEntity(PGSQL_INSTANCE, vm1093|PgSql.default, vm1093-PostgreSQL default instance, MANAGED_SERVER:vm1093),
- 6000007=HsHostingAssetRawEntity(MARIADB_INSTANCE, vm1093|MariaDB.default, vm1093-MariaDB default instance, MANAGED_SERVER:vm1093)
+ 6000000=HsHostingAssetRealEntity(PGSQL_INSTANCE, vm1061|PgSql.default, vm1061-PostgreSQL default instance, MANAGED_SERVER:vm1061),
+ 6000001=HsHostingAssetRealEntity(MARIADB_INSTANCE, vm1061|MariaDB.default, vm1061-MariaDB default instance, MANAGED_SERVER:vm1061),
+ 6000002=HsHostingAssetRealEntity(PGSQL_INSTANCE, vm1050|PgSql.default, vm1050-PostgreSQL default instance, MANAGED_SERVER:vm1050),
+ 6000003=HsHostingAssetRealEntity(MARIADB_INSTANCE, vm1050|MariaDB.default, vm1050-MariaDB default instance, MANAGED_SERVER:vm1050),
+ 6000004=HsHostingAssetRealEntity(PGSQL_INSTANCE, vm1068|PgSql.default, vm1068-PostgreSQL default instance, MANAGED_SERVER:vm1068),
+ 6000005=HsHostingAssetRealEntity(MARIADB_INSTANCE, vm1068|MariaDB.default, vm1068-MariaDB default instance, MANAGED_SERVER:vm1068),
+ 6000006=HsHostingAssetRealEntity(PGSQL_INSTANCE, vm1093|PgSql.default, vm1093-PostgreSQL default instance, MANAGED_SERVER:vm1093),
+ 6000007=HsHostingAssetRealEntity(MARIADB_INSTANCE, vm1093|MariaDB.default, vm1093-MariaDB default instance, MANAGED_SERVER:vm1093)
}
""");
}
@@ -392,16 +392,16 @@ public class ImportHostingAssets extends ImportOfficeData {
assertThat(firstOfEachType(5, PGSQL_USER, MARIADB_USER)).isEqualToIgnoringWhitespace("""
{
- 7001857=HsHostingAssetRawEntity(PGSQL_USER, PGU|hsh00, hsh00, MANAGED_WEBSPACE:hsh00, PGSQL_INSTANCE:vm1050|PgSql.default, { "password": "SCRAM-SHA-256$4096:Zml4ZWQgc2FsdA==$JDiZmaxU+O+ByArLY/CkYZ8HbOk0r/I8LyABnno5gQs=:NI3T500/63dzI1B07Jh3UtQGlukS6JxuS0XoxM/QgAc="}),
- 7001858=HsHostingAssetRawEntity(MARIADB_USER, MAU|hsh00, hsh00, MANAGED_WEBSPACE:hsh00, MARIADB_INSTANCE:vm1050|MariaDB.default, { "password": "*59067A36BA197AD0A47D74909296C5B002A0FB9F"}),
- 7001859=HsHostingAssetRawEntity(PGSQL_USER, PGU|hsh00_vorstand, hsh00_vorstand, MANAGED_WEBSPACE:hsh00, PGSQL_INSTANCE:vm1050|PgSql.default, { "password": "SCRAM-SHA-256$4096:Zml4ZWQgc2FsdA==$54Wh+OGx/GaIvAia+I3k78jHGhqmYwe4+iLssmH5zhk=:D4Gq1z2Li2BVSaZrz1azDrs6pwsIzhq4+suK1Hh6ZIg="}),
- 7001860=HsHostingAssetRawEntity(PGSQL_USER, PGU|hsh00_hsadmin, hsh00_hsadmin, MANAGED_WEBSPACE:hsh00, PGSQL_INSTANCE:vm1050|PgSql.default, { "password": "SCRAM-SHA-256$4096:Zml4ZWQgc2FsdA==$54Wh+OGx/GaIvAia+I3k78jHGhqmYwe4+iLssmH5zhk=:D4Gq1z2Li2BVSaZrz1azDrs6pwsIzhq4+suK1Hh6ZIg="}),
- 7001861=HsHostingAssetRawEntity(PGSQL_USER, PGU|hsh00_hsadmin_ro, hsh00_hsadmin_ro, MANAGED_WEBSPACE:hsh00, PGSQL_INSTANCE:vm1050|PgSql.default, { "password": "SCRAM-SHA-256$4096:Zml4ZWQgc2FsdA==$UhJnJJhmKANbcaG+izWK3rz5bmhhluSuiCJFlUmDVI8=:6AC4mbLfJGiGlEOWhpz9BivvMODhLLHOnRnnktJPgn8="}),
- 7004908=HsHostingAssetRawEntity(MARIADB_USER, MAU|hsh00_mantis, hsh00_mantis, MANAGED_WEBSPACE:hsh00, MARIADB_INSTANCE:vm1050|MariaDB.default, { "password": "*EA4C0889A22AAE66BBEBC88161E8CF862D73B44F"}),
- 7004909=HsHostingAssetRawEntity(MARIADB_USER, MAU|hsh00_mantis_ro, hsh00_mantis_ro, MANAGED_WEBSPACE:hsh00, MARIADB_INSTANCE:vm1050|MariaDB.default, { "password": "*B3BB6D0DA2EC01958616E9B3BCD2926FE8C38383"}),
- 7004931=HsHostingAssetRawEntity(PGSQL_USER, PGU|hsh00_phpPgSqlAdmin, hsh00_phpPgSqlAdmin, MANAGED_WEBSPACE:hsh00, PGSQL_INSTANCE:vm1050|PgSql.default, { "password": "SCRAM-SHA-256$4096:Zml4ZWQgc2FsdA==$UhJnJJhmKANbcaG+izWK3rz5bmhhluSuiCJFlUmDVI8=:6AC4mbLfJGiGlEOWhpz9BivvMODhLLHOnRnnktJPgn8="}),
- 7004932=HsHostingAssetRawEntity(MARIADB_USER, MAU|hsh00_phpMyAdmin, hsh00_phpMyAdmin, MANAGED_WEBSPACE:hsh00, MARIADB_INSTANCE:vm1050|MariaDB.default, { "password": "*3188720B1889EF5447C722629765F296F40257C2"}),
- 7007520=HsHostingAssetRawEntity(MARIADB_USER, MAU|lug00_wla, lug00_wla, MANAGED_WEBSPACE:lug00, MARIADB_INSTANCE:vm1068|MariaDB.default, { "password": "*11667C0EAC42BF8B0295ABEDC7D2868A835E4DB5"})
+ 7001857=HsHostingAssetRealEntity(PGSQL_USER, PGU|hsh00, hsh00, MANAGED_WEBSPACE:hsh00, PGSQL_INSTANCE:vm1050|PgSql.default, { "password": "SCRAM-SHA-256$4096:Zml4ZWQgc2FsdA==$JDiZmaxU+O+ByArLY/CkYZ8HbOk0r/I8LyABnno5gQs=:NI3T500/63dzI1B07Jh3UtQGlukS6JxuS0XoxM/QgAc="}),
+ 7001858=HsHostingAssetRealEntity(MARIADB_USER, MAU|hsh00, hsh00, MANAGED_WEBSPACE:hsh00, MARIADB_INSTANCE:vm1050|MariaDB.default, { "password": "*59067A36BA197AD0A47D74909296C5B002A0FB9F"}),
+ 7001859=HsHostingAssetRealEntity(PGSQL_USER, PGU|hsh00_vorstand, hsh00_vorstand, MANAGED_WEBSPACE:hsh00, PGSQL_INSTANCE:vm1050|PgSql.default, { "password": "SCRAM-SHA-256$4096:Zml4ZWQgc2FsdA==$54Wh+OGx/GaIvAia+I3k78jHGhqmYwe4+iLssmH5zhk=:D4Gq1z2Li2BVSaZrz1azDrs6pwsIzhq4+suK1Hh6ZIg="}),
+ 7001860=HsHostingAssetRealEntity(PGSQL_USER, PGU|hsh00_hsadmin, hsh00_hsadmin, MANAGED_WEBSPACE:hsh00, PGSQL_INSTANCE:vm1050|PgSql.default, { "password": "SCRAM-SHA-256$4096:Zml4ZWQgc2FsdA==$54Wh+OGx/GaIvAia+I3k78jHGhqmYwe4+iLssmH5zhk=:D4Gq1z2Li2BVSaZrz1azDrs6pwsIzhq4+suK1Hh6ZIg="}),
+ 7001861=HsHostingAssetRealEntity(PGSQL_USER, PGU|hsh00_hsadmin_ro, hsh00_hsadmin_ro, MANAGED_WEBSPACE:hsh00, PGSQL_INSTANCE:vm1050|PgSql.default, { "password": "SCRAM-SHA-256$4096:Zml4ZWQgc2FsdA==$UhJnJJhmKANbcaG+izWK3rz5bmhhluSuiCJFlUmDVI8=:6AC4mbLfJGiGlEOWhpz9BivvMODhLLHOnRnnktJPgn8="}),
+ 7004908=HsHostingAssetRealEntity(MARIADB_USER, MAU|hsh00_mantis, hsh00_mantis, MANAGED_WEBSPACE:hsh00, MARIADB_INSTANCE:vm1050|MariaDB.default, { "password": "*EA4C0889A22AAE66BBEBC88161E8CF862D73B44F"}),
+ 7004909=HsHostingAssetRealEntity(MARIADB_USER, MAU|hsh00_mantis_ro, hsh00_mantis_ro, MANAGED_WEBSPACE:hsh00, MARIADB_INSTANCE:vm1050|MariaDB.default, { "password": "*B3BB6D0DA2EC01958616E9B3BCD2926FE8C38383"}),
+ 7004931=HsHostingAssetRealEntity(PGSQL_USER, PGU|hsh00_phpPgSqlAdmin, hsh00_phpPgSqlAdmin, MANAGED_WEBSPACE:hsh00, PGSQL_INSTANCE:vm1050|PgSql.default, { "password": "SCRAM-SHA-256$4096:Zml4ZWQgc2FsdA==$UhJnJJhmKANbcaG+izWK3rz5bmhhluSuiCJFlUmDVI8=:6AC4mbLfJGiGlEOWhpz9BivvMODhLLHOnRnnktJPgn8="}),
+ 7004932=HsHostingAssetRealEntity(MARIADB_USER, MAU|hsh00_phpMyAdmin, hsh00_phpMyAdmin, MANAGED_WEBSPACE:hsh00, MARIADB_INSTANCE:vm1050|MariaDB.default, { "password": "*3188720B1889EF5447C722629765F296F40257C2"}),
+ 7007520=HsHostingAssetRealEntity(MARIADB_USER, MAU|lug00_wla, lug00_wla, MANAGED_WEBSPACE:lug00, MARIADB_INSTANCE:vm1068|MariaDB.default, { "password": "*11667C0EAC42BF8B0295ABEDC7D2868A835E4DB5"})
}
""");
}
@@ -424,16 +424,16 @@ public class ImportHostingAssets extends ImportOfficeData {
assertThat(firstOfEachType(5, PGSQL_DATABASE, MARIADB_DATABASE)).isEqualToIgnoringWhitespace("""
{
- 8000077=HsHostingAssetRawEntity(PGSQL_DATABASE, PGD|hsh00_vorstand, hsh00_vorstand, PGSQL_USER:PGU|hsh00_vorstand, { "encoding": "LATIN1"}),
- 8000786=HsHostingAssetRawEntity(MARIADB_DATABASE, MAD|hsh00_addr, hsh00_addr, MARIADB_USER:MAU|hsh00, { "encoding": "latin1"}),
- 8000805=HsHostingAssetRawEntity(MARIADB_DATABASE, MAD|hsh00_db2, hsh00_db2, MARIADB_USER:MAU|hsh00, { "encoding": "latin1"}),
- 8001858=HsHostingAssetRawEntity(PGSQL_DATABASE, PGD|hsh00, hsh00, PGSQL_USER:PGU|hsh00, { "encoding": "LATIN1"}),
- 8001860=HsHostingAssetRawEntity(PGSQL_DATABASE, PGD|hsh00_hsadmin, hsh00_hsadmin, PGSQL_USER:PGU|hsh00_hsadmin, { "encoding": "UTF8"}),
- 8004908=HsHostingAssetRawEntity(MARIADB_DATABASE, MAD|hsh00_mantis, hsh00_mantis, MARIADB_USER:MAU|hsh00_mantis, { "encoding": "utf8"}),
- 8004931=HsHostingAssetRawEntity(PGSQL_DATABASE, PGD|hsh00_phpPgSqlAdmin, hsh00_phpPgSqlAdmin, PGSQL_USER:PGU|hsh00_phpPgSqlAdmin, { "encoding": "UTF8"}),
- 8004932=HsHostingAssetRawEntity(PGSQL_DATABASE, PGD|hsh00_phpPgSqlAdmin_new, hsh00_phpPgSqlAdmin_new, PGSQL_USER:PGU|hsh00_phpPgSqlAdmin, { "encoding": "UTF8"}),
- 8004941=HsHostingAssetRawEntity(MARIADB_DATABASE, MAD|hsh00_phpMyAdmin, hsh00_phpMyAdmin, MARIADB_USER:MAU|hsh00_phpMyAdmin, { "encoding": "utf8"}),
- 8004942=HsHostingAssetRawEntity(MARIADB_DATABASE, MAD|hsh00_phpMyAdmin_old, hsh00_phpMyAdmin_old, MARIADB_USER:MAU|hsh00_phpMyAdmin, { "encoding": "utf8"})
+ 8000077=HsHostingAssetRealEntity(PGSQL_DATABASE, PGD|hsh00_vorstand, hsh00_vorstand, PGSQL_USER:PGU|hsh00_vorstand, { "encoding": "LATIN1"}),
+ 8000786=HsHostingAssetRealEntity(MARIADB_DATABASE, MAD|hsh00_addr, hsh00_addr, MARIADB_USER:MAU|hsh00, { "encoding": "latin1"}),
+ 8000805=HsHostingAssetRealEntity(MARIADB_DATABASE, MAD|hsh00_db2, hsh00_db2, MARIADB_USER:MAU|hsh00, { "encoding": "latin1"}),
+ 8001858=HsHostingAssetRealEntity(PGSQL_DATABASE, PGD|hsh00, hsh00, PGSQL_USER:PGU|hsh00, { "encoding": "LATIN1"}),
+ 8001860=HsHostingAssetRealEntity(PGSQL_DATABASE, PGD|hsh00_hsadmin, hsh00_hsadmin, PGSQL_USER:PGU|hsh00_hsadmin, { "encoding": "UTF8"}),
+ 8004908=HsHostingAssetRealEntity(MARIADB_DATABASE, MAD|hsh00_mantis, hsh00_mantis, MARIADB_USER:MAU|hsh00_mantis, { "encoding": "utf8"}),
+ 8004931=HsHostingAssetRealEntity(PGSQL_DATABASE, PGD|hsh00_phpPgSqlAdmin, hsh00_phpPgSqlAdmin, PGSQL_USER:PGU|hsh00_phpPgSqlAdmin, { "encoding": "UTF8"}),
+ 8004932=HsHostingAssetRealEntity(PGSQL_DATABASE, PGD|hsh00_phpPgSqlAdmin_new, hsh00_phpPgSqlAdmin_new, PGSQL_USER:PGU|hsh00_phpPgSqlAdmin, { "encoding": "UTF8"}),
+ 8004941=HsHostingAssetRealEntity(MARIADB_DATABASE, MAD|hsh00_phpMyAdmin, hsh00_phpMyAdmin, MARIADB_USER:MAU|hsh00_phpMyAdmin, { "encoding": "utf8"}),
+ 8004942=HsHostingAssetRealEntity(MARIADB_DATABASE, MAD|hsh00_phpMyAdmin_old, hsh00_phpMyAdmin_old, MARIADB_USER:MAU|hsh00_phpMyAdmin, { "encoding": "utf8"})
}
""");
}
@@ -583,20 +583,20 @@ public class ImportHostingAssets extends ImportOfficeData {
assertThat(firstOfEachType(15, UNIX_USER)).isEqualToIgnoringWhitespace("""
{
- 4005803=HsHostingAssetRawEntity(UNIX_USER, lug00, LUGs, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/bin/bash", "userid": 102090}),
- 4005805=HsHostingAssetRawEntity(UNIX_USER, lug00-wla.1, Paul Klemm, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/bin/bash", "userid": 102091}),
- 4005809=HsHostingAssetRawEntity(UNIX_USER, lug00-wla.2, Walter Müller, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 8, "SSD soft quota": 4, "locked": false, "password": null, "shell": "/bin/bash", "userid": 102093}),
- 4005811=HsHostingAssetRawEntity(UNIX_USER, lug00-ola.a, LUG OLA - POP a, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/usr/bin/passwd", "userid": 102094}),
- 4005813=HsHostingAssetRawEntity(UNIX_USER, lug00-ola.b, LUG OLA - POP b, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/usr/bin/passwd", "userid": 102095}),
- 4005835=HsHostingAssetRawEntity(UNIX_USER, lug00-test, Test, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 1024, "SSD soft quota": 1024, "locked": false, "password": null, "shell": "/usr/bin/passwd", "userid": 102106}),
- 4005964=HsHostingAssetRawEntity(UNIX_USER, mim00, Michael Mellis, MANAGED_WEBSPACE:mim00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/bin/bash", "userid": 102147}),
- 4005966=HsHostingAssetRawEntity(UNIX_USER, mim00-1981, Jahrgangstreffen 1981, MANAGED_WEBSPACE:mim00, { "SSD hard quota": 256, "SSD soft quota": 128, "locked": false, "password": null, "shell": "/bin/bash", "userid": 102148}),
- 4005990=HsHostingAssetRawEntity(UNIX_USER, mim00-mail, Mailbox, MANAGED_WEBSPACE:mim00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/bin/bash", "userid": 102160}),
- 4100705=HsHostingAssetRawEntity(UNIX_USER, hsh00-mim, Michael Mellis, MANAGED_WEBSPACE:hsh00, { "HDD hard quota": 0, "HDD soft quota": 0, "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/bin/false", "userid": 10003}),
- 4100824=HsHostingAssetRawEntity(UNIX_USER, hsh00, Hostsharing Paket, MANAGED_WEBSPACE:hsh00, { "HDD hard quota": 0, "HDD soft quota": 0, "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/bin/bash", "userid": 10000}),
- 4167846=HsHostingAssetRawEntity(UNIX_USER, hsh00-dph, hsh00-uph, MANAGED_WEBSPACE:hsh00, { "HDD hard quota": 0, "HDD soft quota": 0, "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/bin/false", "userid": 110568}),
- 4169546=HsHostingAssetRawEntity(UNIX_USER, dph00, Reinhard Wiese, MANAGED_WEBSPACE:dph00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/bin/bash", "userid": 110593}),
- 4169596=HsHostingAssetRawEntity(UNIX_USER, dph00-uph, Domain admin, MANAGED_WEBSPACE:dph00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/bin/bash", "userid": 110594})
+ 4005803=HsHostingAssetRealEntity(UNIX_USER, lug00, LUGs, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/bin/bash", "userid": 102090}),
+ 4005805=HsHostingAssetRealEntity(UNIX_USER, lug00-wla.1, Paul Klemm, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/bin/bash", "userid": 102091}),
+ 4005809=HsHostingAssetRealEntity(UNIX_USER, lug00-wla.2, Walter Müller, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 8, "SSD soft quota": 4, "locked": false, "password": null, "shell": "/bin/bash", "userid": 102093}),
+ 4005811=HsHostingAssetRealEntity(UNIX_USER, lug00-ola.a, LUG OLA - POP a, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/usr/bin/passwd", "userid": 102094}),
+ 4005813=HsHostingAssetRealEntity(UNIX_USER, lug00-ola.b, LUG OLA - POP b, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/usr/bin/passwd", "userid": 102095}),
+ 4005835=HsHostingAssetRealEntity(UNIX_USER, lug00-test, Test, MANAGED_WEBSPACE:lug00, { "SSD hard quota": 1024, "SSD soft quota": 1024, "locked": false, "password": null, "shell": "/usr/bin/passwd", "userid": 102106}),
+ 4005964=HsHostingAssetRealEntity(UNIX_USER, mim00, Michael Mellis, MANAGED_WEBSPACE:mim00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/bin/bash", "userid": 102147}),
+ 4005966=HsHostingAssetRealEntity(UNIX_USER, mim00-1981, Jahrgangstreffen 1981, MANAGED_WEBSPACE:mim00, { "SSD hard quota": 256, "SSD soft quota": 128, "locked": false, "password": null, "shell": "/bin/bash", "userid": 102148}),
+ 4005990=HsHostingAssetRealEntity(UNIX_USER, mim00-mail, Mailbox, MANAGED_WEBSPACE:mim00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/bin/bash", "userid": 102160}),
+ 4100705=HsHostingAssetRealEntity(UNIX_USER, hsh00-mim, Michael Mellis, MANAGED_WEBSPACE:hsh00, { "HDD hard quota": 0, "HDD soft quota": 0, "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/bin/false", "userid": 10003}),
+ 4100824=HsHostingAssetRealEntity(UNIX_USER, hsh00, Hostsharing Paket, MANAGED_WEBSPACE:hsh00, { "HDD hard quota": 0, "HDD soft quota": 0, "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/bin/bash", "userid": 10000}),
+ 4167846=HsHostingAssetRealEntity(UNIX_USER, hsh00-dph, hsh00-uph, MANAGED_WEBSPACE:hsh00, { "HDD hard quota": 0, "HDD soft quota": 0, "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/bin/false", "userid": 110568}),
+ 4169546=HsHostingAssetRealEntity(UNIX_USER, dph00, Reinhard Wiese, MANAGED_WEBSPACE:dph00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/bin/bash", "userid": 110593}),
+ 4169596=HsHostingAssetRealEntity(UNIX_USER, dph00-uph, Domain admin, MANAGED_WEBSPACE:dph00, { "SSD hard quota": 0, "SSD soft quota": 0, "locked": false, "password": null, "shell": "/bin/bash", "userid": 110594})
}
""");
}
@@ -622,12 +622,12 @@ public class ImportHostingAssets extends ImportOfficeData {
void logErrors() {
if (isImportingControlledTestData()) {
super.expectErrors("""
- validation failed for id:5002452( HsHostingAssetRawEntity(EMAIL_ALIAS, mim00-empty, mim00-empty, MANAGED_WEBSPACE:mim00, {
+ validation failed for id:5002452( HsHostingAssetRealEntity(EMAIL_ALIAS, mim00-empty, mim00-empty, MANAGED_WEBSPACE:mim00, {
"target": "[]"
}
)): ['EMAIL_ALIAS:mim00-empty.config.target' length is expected to be at min 1 but length of [[]] is 0]""",
"""
- validation failed for id:5002453( HsHostingAssetRawEntity(EMAIL_ALIAS, mim00-0_entries, mim00-0_entries, MANAGED_WEBSPACE:mim00, {
+ validation failed for id:5002453( HsHostingAssetRealEntity(EMAIL_ALIAS, mim00-0_entries, mim00-0_entries, MANAGED_WEBSPACE:mim00, {
"target": "[]"
}
)): ['EMAIL_ALIAS:mim00-0_entries.config.target' length is expected to be at min 1 but length of [[]] is 0]"""
@@ -670,7 +670,7 @@ public class ImportHostingAssets extends ImportOfficeData {
.map(this::trimAll)
.map(row -> new Record(columns, row))
.forEach(rec -> {
- final var ipNumber = HsHostingAssetRawEntity.builder()
+ final var ipNumber = HsHostingAssetRealEntity.builder()
.type(IPV4_NUMBER)
.identifier(rec.getString("inet_addr"))
.caption(rec.getString("description"))
@@ -734,7 +734,7 @@ public class ImportHostingAssets extends ImportOfficeData {
+ packet_name)
.isTrue());
- final var asset = HsHostingAssetRawEntity.builder()
+ final var asset = HsHostingAssetRealEntity.builder()
// this turns off identifier validation to accept former default prefixes
.isLoaded(haType == MANAGED_WEBSPACE)
.type(haType)
@@ -874,7 +874,7 @@ public class ImportHostingAssets extends ImportOfficeData {
.forEach(rec -> {
final var unixuser_id = rec.getInteger("unixuser_id");
final var packet_id = rec.getInteger("packet_id");
- final var unixUserAsset = HsHostingAssetRawEntity.builder()
+ final var unixUserAsset = HsHostingAssetRealEntity.builder()
.type(UNIX_USER)
.parentAsset(hostingAssets.get(PACKET_ID_OFFSET + packet_id))
.identifier(rec.getString("name"))
@@ -931,7 +931,7 @@ public class ImportHostingAssets extends ImportOfficeData {
final var unixuser_id = rec.getInteger("emailalias_id");
final var packet_id = rec.getInteger("pac_id");
final var targets = parseCsvLine(rec.getString("target"));
- final var unixUserAsset = HsHostingAssetRawEntity.builder()
+ final var unixUserAsset = HsHostingAssetRealEntity.builder()
.type(EMAIL_ALIAS)
.parentAsset(hostingAssets.get(PACKET_ID_OFFSET + packet_id))
.identifier(rec.getString("name"))
@@ -944,14 +944,14 @@ public class ImportHostingAssets extends ImportOfficeData {
});
}
- private void createDatabaseInstances(final List parentAssets) {
+ private void createDatabaseInstances(final List parentAssets) {
final var idRef = new AtomicInteger(0);
parentAssets.forEach(pa -> {
if (pa.getSubHostingAssets() == null) {
pa.setSubHostingAssets(new ArrayList<>());
}
- final var pgSqlInstanceAsset = HsHostingAssetRawEntity.builder()
+ final var pgSqlInstanceAsset = HsHostingAssetRealEntity.builder()
.type(PGSQL_INSTANCE)
.parentAsset(pa)
.identifier(pa.getIdentifier() + "|PgSql.default")
@@ -960,7 +960,7 @@ public class ImportHostingAssets extends ImportOfficeData {
pa.getSubHostingAssets().add(pgSqlInstanceAsset);
hostingAssets.put(DBINSTANCE_ID_OFFSET + idRef.getAndIncrement(), pgSqlInstanceAsset);
- final var mariaDbInstanceAsset = HsHostingAssetRawEntity.builder()
+ final var mariaDbInstanceAsset = HsHostingAssetRealEntity.builder()
.type(MARIADB_INSTANCE)
.parentAsset(pa)
.identifier(pa.getIdentifier() + "|MariaDB.default")
@@ -996,7 +996,7 @@ public class ImportHostingAssets extends ImportOfficeData {
.filter(ha -> ha.getType() == dbInstanceAssetType)
.findAny().orElseThrow(); // there is exactly one: the default instance for the given type
- final var dbUserAsset = HsHostingAssetRawEntity.builder()
+ final var dbUserAsset = HsHostingAssetRealEntity.builder()
.type(dbUserAssetType)
.parentAsset(hostingAssets.get(PACKET_ID_OFFSET + packet_id))
.assignedToAsset(dbInstanceAsset)
@@ -1027,7 +1027,7 @@ public class ImportHostingAssets extends ImportOfficeData {
: failWith("unknown DB engine " + engine);
final var name = rec.getString("name");
final var encoding = rec.getString("encoding").replaceAll("[-_]+", "");
- final var dbAsset = HsHostingAssetRawEntity.builder()
+ final var dbAsset = HsHostingAssetRealEntity.builder()
.type(type)
.parentAsset(owningDbUserHA)
.identifier(type.name().substring(0, 2) + "D|" + name)
@@ -1069,7 +1069,7 @@ public class ImportHostingAssets extends ImportOfficeData {
};
}
- private static HsHostingAssetRawEntity ipNumber(final Integer inet_addr_id) {
+ private static HsHostingAssetRealEntity ipNumber(final Integer inet_addr_id) {
return inet_addr_id != null ? hostingAssets.get(IP_NUMBER_ID_OFFSET + inet_addr_id) : null;
}
@@ -1077,7 +1077,7 @@ public class ImportHostingAssets extends ImportOfficeData {
return hive_id != null ? hives.get(HIVE_ID_OFFSET + hive_id) : null;
}
- private static HsHostingAssetRawEntity pac(final Integer packet_id) {
+ private static HsHostingAssetRealEntity pac(final Integer packet_id) {
return packet_id != null ? hostingAssets.get(PACKET_ID_OFFSET + packet_id) : null;
}
@@ -1117,11 +1117,6 @@ public class ImportHostingAssets extends ImportOfficeData {
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue));
}
- @Override
- protected void assumeThatWeAreExplicitlyImportingOfficeData() {
- assumeThat(false).isTrue();
- }
-
protected static boolean isImportingControlledTestData() {
return MIGRATION_DATA_PATH.equals(TEST_DATA_MIGRATION_DATA_PATH);
}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/migration/ImportOfficeData.java b/src/test/java/net/hostsharing/hsadminng/hs/migration/ImportOfficeData.java
index dd1f7d2b..4e3e9e01 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/migration/ImportOfficeData.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/migration/ImportOfficeData.java
@@ -2,7 +2,7 @@ package net.hostsharing.hsadminng.hs.migration;
import net.hostsharing.hsadminng.context.Context;
import net.hostsharing.hsadminng.hs.office.bankaccount.HsOfficeBankAccountEntity;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealEntity;
import net.hostsharing.hsadminng.hs.office.coopassets.HsOfficeCoopAssetsTransactionEntity;
import net.hostsharing.hsadminng.hs.office.coopassets.HsOfficeCoopAssetsTransactionType;
import net.hostsharing.hsadminng.hs.office.coopshares.HsOfficeCoopSharesTransactionEntity;
@@ -14,10 +14,11 @@ import net.hostsharing.hsadminng.hs.office.partner.HsOfficePartnerDetailsEntity;
import net.hostsharing.hsadminng.hs.office.partner.HsOfficePartnerEntity;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonEntity;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonType;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelation;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealEntity;
import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationType;
import net.hostsharing.hsadminng.hs.office.sepamandate.HsOfficeSepaMandateEntity;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import net.hostsharing.hsadminng.rbac.test.JpaAttempt;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
@@ -120,13 +121,13 @@ public class ImportOfficeData extends CsvDataImport {
-1
);
- static Map contacts = new WriteOnceMap<>();
+ static Map contacts = new WriteOnceMap<>();
static Map persons = new WriteOnceMap<>();
static Map partners = new WriteOnceMap<>();
static Map debitors = new WriteOnceMap<>();
static Map memberships = new WriteOnceMap<>();
- static Map relations = new WriteOnceMap<>();
+ static Map relations = new WriteOnceMap<>();
static Map sepaMandates = new WriteOnceMap<>();
static Map bankAccounts = new WriteOnceMap<>();
static Map coopShares = new WriteOnceMap<>();
@@ -359,8 +360,6 @@ public class ImportOfficeData extends CsvDataImport {
@Test
@Order(1030)
void importSepaMandates() {
- assumeThatWeAreExplicitlyImportingOfficeData();
-
try (Reader reader = resourceReader(MIGRATION_DATA_PATH + "/office/sepa_mandates.csv")) {
final var lines = readAllLines(reader);
importSepaMandates(justHeader(lines), withoutHeader(lines));
@@ -372,7 +371,6 @@ public class ImportOfficeData extends CsvDataImport {
@Test
@Order(1039)
void verifySepaMandates() {
- assumeThatWeAreExplicitlyImportingOfficeData();
assumeThatWeAreImportingControlledTestData();
assertThat(toFormattedString(bankAccounts)).isEqualToIgnoringWhitespace("""
@@ -402,8 +400,6 @@ public class ImportOfficeData extends CsvDataImport {
@Test
@Order(1040)
void importCoopShares() {
- assumeThatWeAreExplicitlyImportingOfficeData();
-
try (Reader reader = resourceReader(MIGRATION_DATA_PATH + "/office/share_transactions.csv")) {
final var lines = readAllLines(reader);
importCoopShares(justHeader(lines), withoutHeader(lines));
@@ -415,7 +411,6 @@ public class ImportOfficeData extends CsvDataImport {
@Test
@Order(1041)
void verifyCoopShares() {
- assumeThatWeAreExplicitlyImportingOfficeData();
assumeThatWeAreImportingControlledTestData();
assertThat(toFormattedString(coopShares)).isEqualToIgnoringWhitespace("""
@@ -438,8 +433,6 @@ public class ImportOfficeData extends CsvDataImport {
@Test
@Order(1050)
void importCoopAssets() {
- assumeThatWeAreExplicitlyImportingOfficeData();
-
try (Reader reader = resourceReader(MIGRATION_DATA_PATH + "/office/asset_transactions.csv")) {
final var lines = readAllLines(reader);
importCoopAssets(justHeader(lines), withoutHeader(lines));
@@ -451,7 +444,6 @@ public class ImportOfficeData extends CsvDataImport {
@Test
@Order(1059)
void verifyCoopAssets() {
- assumeThatWeAreExplicitlyImportingOfficeData();
assumeThatWeAreImportingControlledTestData();
assertThat(toFormattedString(coopAssets)).isEqualToIgnoringWhitespace("""
@@ -481,7 +473,6 @@ public class ImportOfficeData extends CsvDataImport {
@Test
@Order(1099)
void verifyMemberships() {
- assumeThatWeAreExplicitlyImportingOfficeData();
assumeThatWeAreImportingControlledTestData();
assertThat(toFormattedString(memberships)).isEqualToIgnoringWhitespace("""
@@ -692,8 +683,11 @@ public class ImportOfficeData extends CsvDataImport {
}
- protected void assumeThatWeAreExplicitlyImportingOfficeData() {
- // not throwing AssumptionException
+ @Test
+ @Order(9190)
+ void verifyMembershipsActuallyPersisted() {
+ final var biCount = (Integer) em.createNativeQuery("SELECT count(*) FROM hs_office_membership", Integer.class).getSingleResult();
+ assertThat(biCount).isGreaterThan(isImportingControlledTestData() ? 5 : 300);
}
private static boolean isImportingControlledTestData() {
@@ -704,7 +698,7 @@ public class ImportOfficeData extends CsvDataImport {
assumeThat(partners.size()).isLessThanOrEqualTo(MAX_NUMBER_OF_TEST_DATA_PARTNERS);
}
- private void updateLegacyIds(
+ private void updateLegacyIds(
Map entities,
final String legacyIdTable,
final String legacyIdColumn) {
@@ -978,7 +972,7 @@ public class ImportOfficeData extends CsvDataImport {
contactPerson = addPerson(HsOfficePersonEntity.builder().build(), rec);
}
- final var contact = HsOfficeContactEntity.builder().build();
+ final var contact = HsOfficeContactRealEntity.builder().build();
initContact(contact, rec);
if (containsPartnerRel(rec)) {
@@ -1052,12 +1046,12 @@ public class ImportOfficeData extends CsvDataImport {
return containsRole(rec, "partner");
}
- private static HsOfficeRelationEntity addRelation(
+ private static HsOfficeRelationRealEntity addRelation(
final HsOfficeRelationType type,
final HsOfficePersonEntity anchor,
final HsOfficePersonEntity holder,
- final HsOfficeContactEntity contact) {
- final var rel = HsOfficeRelationEntity.builder()
+ final HsOfficeContactRealEntity contact) {
+ final var rel = HsOfficeRelationRealEntity.builder()
.anchor(anchor)
.holder(holder)
.contact(contact)
@@ -1117,7 +1111,7 @@ public class ImportOfficeData extends CsvDataImport {
assertThat(unexpectedRolesSet).isEmpty();
}
- private HsOfficeContactEntity initContact(final HsOfficeContactEntity contact, final Record contactRecord) {
+ private HsOfficeContactRealEntity initContact(final HsOfficeContactRealEntity contact, final Record contactRecord) {
contact.setCaption(toCaption(
contactRecord.getString("salut"),
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountControllerRestTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountControllerRestTest.java
index d870ca1a..37f85f83 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountControllerRestTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountControllerRestTest.java
@@ -77,7 +77,7 @@ class HsOfficeBankAccountControllerRestTest {
.andExpect(status().is4xxClientError())
.andExpect(jsonPath("statusCode", is(400)))
.andExpect(jsonPath("statusPhrase", is("Bad Request")))
- .andExpect(jsonPath("message", is(testCase.expectedErrorMessage())));
+ .andExpect(jsonPath("message", is("ERROR: [400] " + testCase.expectedErrorMessage())));
}
enum InvalidBicTestCase {
@@ -124,6 +124,6 @@ class HsOfficeBankAccountControllerRestTest {
.andExpect(status().is4xxClientError())
.andExpect(jsonPath("statusCode", is(400)))
.andExpect(jsonPath("statusPhrase", is("Bad Request")))
- .andExpect(jsonPath("message", is(testCase.expectedErrorMessage())));
+ .andExpect(jsonPath("message", is("ERROR: [400] " + testCase.expectedErrorMessage())));
}
}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactControllerAcceptanceTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactControllerAcceptanceTest.java
index 2d171fcc..4bd2a4be 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactControllerAcceptanceTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactControllerAcceptanceTest.java
@@ -45,7 +45,7 @@ class HsOfficeContactControllerAcceptanceTest extends ContextBasedTestWithCleanu
Context contextMock;
@Autowired
- HsOfficeContactRepository contactRepo;
+ HsOfficeContactRbacRepository contactRepo;
@Autowired
JpaAttempt jpaAttempt;
@@ -355,10 +355,10 @@ class HsOfficeContactControllerAcceptanceTest extends ContextBasedTestWithCleanu
}
}
- private HsOfficeContactEntity givenSomeTemporaryContactCreatedBy(final String creatingUser) {
+ private HsOfficeContactRbacEntity givenSomeTemporaryContactCreatedBy(final String creatingUser) {
return jpaAttempt.transacted(() -> {
context.define(creatingUser);
- final var newContact = HsOfficeContactEntity.builder()
+ final var newContact = HsOfficeContactRbacEntity.builder()
.uuid(UUID.randomUUID())
.caption("Temp from " + Context.getCallerMethodNameFromStackFrame(1) )
.emailAddresses(Map.of("main", RandomStringUtils.randomAlphabetic(10) + "@example.org"))
@@ -375,7 +375,7 @@ class HsOfficeContactControllerAcceptanceTest extends ContextBasedTestWithCleanu
void cleanup() {
jpaAttempt.transacted(() -> {
context.define("superuser-alex@hostsharing.net", null);
- em.createQuery("DELETE FROM HsOfficeContactEntity c WHERE c.caption LIKE 'Temp %'").executeUpdate();
+ em.createQuery("DELETE FROM HsOfficeContactRbacEntity c WHERE c.caption LIKE 'Temp %'").executeUpdate();
}).assertSuccessful();
}
}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactEntityPatcherUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactPatcherUnitTest.java
similarity index 87%
rename from src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactEntityPatcherUnitTest.java
rename to src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactPatcherUnitTest.java
index a4c7cd38..95b4eb94 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactEntityPatcherUnitTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactPatcherUnitTest.java
@@ -13,9 +13,9 @@ import static net.hostsharing.hsadminng.mapper.PatchMap.patchMap;
import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS;
@TestInstance(PER_CLASS)
-class HsOfficeContactEntityPatcherUnitTest extends PatchUnitTestBase<
+class HsOfficeContactPatcherUnitTest extends PatchUnitTestBase<
HsOfficeContactPatchResource,
- HsOfficeContactEntity
+ HsOfficeContactRbacEntity
> {
private static final UUID INITIAL_CONTACT_UUID = UUID.randomUUID();
@@ -42,8 +42,8 @@ class HsOfficeContactEntityPatcherUnitTest extends PatchUnitTestBase<
);
@Override
- protected HsOfficeContactEntity newInitialEntity() {
- final var entity = new HsOfficeContactEntity();
+ protected HsOfficeContactRbacEntity newInitialEntity() {
+ final var entity = new HsOfficeContactRbacEntity();
entity.setUuid(INITIAL_CONTACT_UUID);
entity.setCaption("initial caption");
entity.putEmailAddresses(Map.ofEntries(
@@ -64,7 +64,7 @@ class HsOfficeContactEntityPatcherUnitTest extends PatchUnitTestBase<
}
@Override
- protected HsOfficeContactEntityPatcher createPatcher(final HsOfficeContactEntity entity) {
+ protected HsOfficeContactEntityPatcher createPatcher(final HsOfficeContactRbacEntity entity) {
return new HsOfficeContactEntityPatcher(entity);
}
@@ -75,26 +75,26 @@ class HsOfficeContactEntityPatcherUnitTest extends PatchUnitTestBase<
"caption",
HsOfficeContactPatchResource::setCaption,
"patched caption",
- HsOfficeContactEntity::setCaption),
+ HsOfficeContactRbacEntity::setCaption),
new SimpleProperty<>(
"resources",
HsOfficeContactPatchResource::setEmailAddresses,
PATCH_EMAIL_ADDRESSES,
- HsOfficeContactEntity::putEmailAddresses,
+ HsOfficeContactRbacEntity::putEmailAddresses,
PATCHED_EMAIL_ADDRESSES)
.notNullable(),
new SimpleProperty<>(
"resources",
HsOfficeContactPatchResource::setPhoneNumbers,
PATCH_PHONE_NUMBERS,
- HsOfficeContactEntity::putPhoneNumbers,
+ HsOfficeContactRbacEntity::putPhoneNumbers,
PATCHED_PHONE_NUMBERS)
.notNullable(),
new JsonNullableProperty<>(
"patched given name",
HsOfficeContactPatchResource::setPostalAddress,
"patched given name",
- HsOfficeContactEntity::setPostalAddress)
+ HsOfficeContactRbacEntity::setPostalAddress)
);
}
}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRbacRepositoryIntegrationTest.java
similarity index 92%
rename from src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRepositoryIntegrationTest.java
rename to src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRbacRepositoryIntegrationTest.java
index 89a03f67..5f5e6190 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRepositoryIntegrationTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRbacRepositoryIntegrationTest.java
@@ -21,7 +21,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.function.Supplier;
-import static net.hostsharing.hsadminng.hs.office.contact.TestHsOfficeContact.hsOfficeContact;
+import static net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRbacTestEntity.hsOfficeContact;
import static net.hostsharing.hsadminng.rbac.rbacgrant.RawRbacGrantEntity.distinctGrantDisplaysOf;
import static net.hostsharing.hsadminng.rbac.rbacrole.RawRbacRoleEntity.distinctRoleNamesOf;
import static net.hostsharing.hsadminng.rbac.test.JpaAttempt.attempt;
@@ -29,10 +29,10 @@ import static org.assertj.core.api.Assertions.assertThat;
@DataJpaTest
@Import( { Context.class, JpaAttempt.class })
-class HsOfficeContactRepositoryIntegrationTest extends ContextBasedTestWithCleanup {
+class HsOfficeContactRbacRepositoryIntegrationTest extends ContextBasedTestWithCleanup {
@Autowired
- HsOfficeContactRepository contactRepo;
+ HsOfficeContactRbacRepository contactRepo;
@Autowired
RawRbacRoleRepository rawRoleRepo;
@@ -65,7 +65,7 @@ class HsOfficeContactRepositoryIntegrationTest extends ContextBasedTestWithClean
// then
result.assertSuccessful();
- assertThat(result.returnedValue()).isNotNull().extracting(HsOfficeContactEntity::getUuid).isNotNull();
+ assertThat(result.returnedValue()).isNotNull().extracting(HsOfficeContactRbacEntity::getUuid).isNotNull();
assertThatContactIsPersisted(result.returnedValue());
assertThat(contactRepo.count()).isEqualTo(count + 1);
}
@@ -82,7 +82,7 @@ class HsOfficeContactRepositoryIntegrationTest extends ContextBasedTestWithClean
// then
result.assertSuccessful();
- assertThat(result.returnedValue()).isNotNull().extracting(HsOfficeContactEntity::getUuid).isNotNull();
+ assertThat(result.returnedValue()).isNotNull().extracting(HsOfficeContactRbacEntity::getUuid).isNotNull();
assertThatContactIsPersisted(result.returnedValue());
assertThat(contactRepo.count()).isEqualTo(count + 1);
}
@@ -120,7 +120,7 @@ class HsOfficeContactRepositoryIntegrationTest extends ContextBasedTestWithClean
));
}
- private void assertThatContactIsPersisted(final HsOfficeContactEntity saved) {
+ private void assertThatContactIsPersisted(final HsOfficeContactRbacEntity saved) {
final var found = contactRepo.findByUuid(saved.getUuid());
assertThat(found).isNotEmpty().get().extracting(Object::toString).isEqualTo(saved.toString());
}
@@ -270,16 +270,16 @@ class HsOfficeContactRepositoryIntegrationTest extends ContextBasedTestWithClean
"[creating contact test-data second contact, hs_office_contact, INSERT]");
}
- private HsOfficeContactEntity givenSomeTemporaryContact(
+ private HsOfficeContactRbacEntity givenSomeTemporaryContact(
final String createdByUser,
- Supplier entitySupplier) {
+ Supplier entitySupplier) {
return jpaAttempt.transacted(() -> {
context(createdByUser);
return toCleanup(contactRepo.save(entitySupplier.get()));
}).assumeSuccessful().returnedValue();
}
- private HsOfficeContactEntity givenSomeTemporaryContact(final String createdByUser) {
+ private HsOfficeContactRbacEntity givenSomeTemporaryContact(final String createdByUser) {
final var random = RandomStringUtils.randomAlphabetic(12);
return givenSomeTemporaryContact(createdByUser, () ->
hsOfficeContact(
@@ -287,15 +287,15 @@ class HsOfficeContactRepositoryIntegrationTest extends ContextBasedTestWithClean
"some-temporary-contact" + random + "@example.com"));
}
- void exactlyTheseContactsAreReturned(final List actualResult, final String... contactCaptions) {
+ void exactlyTheseContactsAreReturned(final List actualResult, final String... contactCaptions) {
assertThat(actualResult)
- .extracting(HsOfficeContactEntity::getCaption)
+ .extracting(HsOfficeContactRbacEntity::getCaption)
.containsExactlyInAnyOrder(contactCaptions);
}
- void allTheseContactsAreReturned(final List actualResult, final String... contactCaptions) {
+ void allTheseContactsAreReturned(final List actualResult, final String... contactCaptions) {
assertThat(actualResult)
- .extracting(HsOfficeContactEntity::getCaption)
+ .extracting(HsOfficeContactRbacEntity::getCaption)
.contains(contactCaptions);
}
}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRbacTestEntity.java b/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRbacTestEntity.java
new file mode 100644
index 00000000..ba96f31b
--- /dev/null
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRbacTestEntity.java
@@ -0,0 +1,16 @@
+package net.hostsharing.hsadminng.hs.office.contact;
+
+import java.util.Map;
+
+public class HsOfficeContactRbacTestEntity {
+
+ public static final HsOfficeContactRbacEntity TEST_RBAC_CONTACT = hsOfficeContact("some contact", "some-contact@example.com");
+
+ static public HsOfficeContactRbacEntity hsOfficeContact(final String caption, final String emailAddr) {
+ return HsOfficeContactRbacEntity.builder()
+ .caption(caption)
+ .postalAddress("address of " + caption)
+ .emailAddresses(Map.of("main", emailAddr))
+ .build();
+ }
+}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRealTestEntity.java b/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRealTestEntity.java
new file mode 100644
index 00000000..d8cdfe1b
--- /dev/null
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRealTestEntity.java
@@ -0,0 +1,16 @@
+package net.hostsharing.hsadminng.hs.office.contact;
+
+import java.util.Map;
+
+public class HsOfficeContactRealTestEntity {
+
+ public static final HsOfficeContactRealEntity TEST_REAL_CONTACT = hsOfficeContact("some contact", "some-contact@example.com");
+
+ static public HsOfficeContactRealEntity hsOfficeContact(final String caption, final String emailAddr) {
+ return HsOfficeContactRealEntity.builder()
+ .caption(caption)
+ .postalAddress("address of " + caption)
+ .emailAddresses(Map.of("main", emailAddr))
+ .build();
+ }
+}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactEntityUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactUnitTest.java
similarity index 67%
rename from src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactEntityUnitTest.java
rename to src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactUnitTest.java
index 43747418..94f8e0b8 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactEntityUnitTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactUnitTest.java
@@ -4,17 +4,17 @@ import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
-class HsOfficeContactEntityUnitTest {
+class HsOfficeContactUnitTest {
@Test
void toStringReturnsNullForNullContact() {
- final HsOfficeContactEntity givenContact = null;
+ final HsOfficeContactRbacEntity givenContact = null;
assertThat("" + givenContact).isEqualTo("null");
}
@Test
void toStringReturnsCaption() {
- final var givenContact = HsOfficeContactEntity.builder().caption("given caption").build();
+ final var givenContact = HsOfficeContactRbacEntity.builder().caption("given caption").build();
assertThat("" + givenContact).isEqualTo("contact(caption='given caption')");
}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/contact/TestHsOfficeContact.java b/src/test/java/net/hostsharing/hsadminng/hs/office/contact/TestHsOfficeContact.java
deleted file mode 100644
index c104be32..00000000
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/contact/TestHsOfficeContact.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package net.hostsharing.hsadminng.hs.office.contact;
-
-import java.util.Map;
-
-public class TestHsOfficeContact {
-
- public static final HsOfficeContactEntity TEST_CONTACT = hsOfficeContact("some contact", "some-contact@example.com");
-
- static public HsOfficeContactEntity hsOfficeContact(final String caption, final String emailAddr) {
- return HsOfficeContactEntity.builder()
- .caption(caption)
- .postalAddress("address of " + caption)
- .emailAddresses(Map.of("main", emailAddr))
- .build();
- }
-}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionControllerRestTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionControllerRestTest.java
index 0d33bf85..8176df09 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionControllerRestTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionControllerRestTest.java
@@ -124,7 +124,7 @@ class HsOfficeCoopAssetsTransactionControllerRestTest {
.andExpect(status().is4xxClientError())
.andExpect(jsonPath("statusCode", is(400)))
.andExpect(jsonPath("statusPhrase", is("Bad Request")))
- .andExpect(jsonPath("message", is(testCase.expectedErrorMessage)));
+ .andExpect(jsonPath("message", is("ERROR: [400] " + testCase.expectedErrorMessage)));
}
}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionControllerRestTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionControllerRestTest.java
index fec88cb0..6c126978 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionControllerRestTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionControllerRestTest.java
@@ -120,7 +120,7 @@ class HsOfficeCoopSharesTransactionControllerRestTest {
.andExpect(status().is4xxClientError())
.andExpect(jsonPath("statusCode", is(400)))
.andExpect(jsonPath("statusPhrase", is("Bad Request")))
- .andExpect(jsonPath("message", is(testCase.expectedErrorMessage)));
+ .andExpect(jsonPath("message", is("ERROR: [400] " + testCase.expectedErrorMessage)));
}
}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorControllerAcceptanceTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorControllerAcceptanceTest.java
index 2fee9a31..68545a78 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorControllerAcceptanceTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorControllerAcceptanceTest.java
@@ -5,11 +5,11 @@ import io.restassured.http.ContentType;
import net.hostsharing.hsadminng.HsadminNgApplication;
import net.hostsharing.hsadminng.context.Context;
import net.hostsharing.hsadminng.hs.office.bankaccount.HsOfficeBankAccountRepository;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRepository;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealRepository;
import net.hostsharing.hsadminng.hs.office.partner.HsOfficePartnerRepository;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonRepository;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRepository;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealRepository;
import net.hostsharing.hsadminng.rbac.test.ContextBasedTestWithCleanup;
import net.hostsharing.hsadminng.rbac.test.JpaAttempt;
import org.json.JSONException;
@@ -55,7 +55,7 @@ class HsOfficeDebitorControllerAcceptanceTest extends ContextBasedTestWithCleanu
HsOfficePartnerRepository partnerRepo;
@Autowired
- HsOfficeContactRepository contactRepo;
+ HsOfficeContactRealRepository contactrealRepo;
@Autowired
HsOfficeBankAccountRepository bankAccountRepo;
@@ -64,7 +64,7 @@ class HsOfficeDebitorControllerAcceptanceTest extends ContextBasedTestWithCleanu
HsOfficePersonRepository personRepo;
@Autowired
- HsOfficeRelationRepository relRepo;
+ HsOfficeRelationRealRepository relrealRepo;
@Autowired
JpaAttempt jpaAttempt;
@@ -268,13 +268,13 @@ class HsOfficeDebitorControllerAcceptanceTest extends ContextBasedTestWithCleanu
context.define("superuser-alex@hostsharing.net");
final var givenPartner = partnerRepo.findPartnerByOptionalNameLike("Third").get(0);
- final var givenContact = contactRepo.findContactByOptionalCaptionLike("fourth").get(0);
+ final var givenContact = contactrealRepo.findContactByOptionalCaptionLike("fourth").get(0);
final var givenBankAccount = bankAccountRepo.findByOptionalHolderLike("Fourth").get(0);
final var givenBillingPerson = personRepo.findPersonByOptionalNameLike("Fourth").get(0);
final var givenDebitorRelUUid = jpaAttempt.transacted(() -> {
context.define("superuser-alex@hostsharing.net");
- return relRepo.save(HsOfficeRelationEntity.builder()
+ return relrealRepo.save(HsOfficeRelationRealEntity.builder()
.type(DEBITOR)
.anchor(givenPartner.getPartnerRel().getHolder())
.holder(givenBillingPerson)
@@ -325,7 +325,7 @@ class HsOfficeDebitorControllerAcceptanceTest extends ContextBasedTestWithCleanu
context.define("superuser-alex@hostsharing.net");
final var givenPartner = partnerRepo.findPartnerByOptionalNameLike("Third").get(0);
- final var givenContact = contactRepo.findContactByOptionalCaptionLike("fourth").get(0);
+ final var givenContact = contactrealRepo.findContactByOptionalCaptionLike("fourth").get(0);
final var location = RestAssured // @formatter:off
.given()
@@ -405,7 +405,7 @@ class HsOfficeDebitorControllerAcceptanceTest extends ContextBasedTestWithCleanu
.post("http://localhost/api/hs/office/debitors")
.then().log().all().assertThat()
.statusCode(400)
- .body("message", is("Unable to find Contact with uuid 00000000-0000-0000-0000-000000000000"));
+ .body("message", is("ERROR: [400] Unable to find RealContact by debitorRel.contactUuid: 00000000-0000-0000-0000-000000000000"));
// @formatter:on
}
@@ -414,9 +414,8 @@ class HsOfficeDebitorControllerAcceptanceTest extends ContextBasedTestWithCleanu
context.define("superuser-alex@hostsharing.net");
final var givenDebitorRelUuid = UUID.fromString("00000000-0000-0000-0000-000000000000");
- final var givenContact = contactRepo.findContactByOptionalCaptionLike("fourth").get(0);
- final var location = RestAssured // @formatter:off
+ RestAssured // @formatter:off
.given()
.header("current-user", "superuser-alex@hostsharing.net")
.contentType(ContentType.JSON)
@@ -434,7 +433,7 @@ class HsOfficeDebitorControllerAcceptanceTest extends ContextBasedTestWithCleanu
.post("http://localhost/api/hs/office/debitors")
.then().log().all().assertThat()
.statusCode(400)
- .body("message", is("Unable to find HsOfficeRelationEntity with uuid 00000000-0000-0000-0000-000000000000"));
+ .body("message", is("ERROR: [400] Unable to find RealRelation by uuid: 00000000-0000-0000-0000-000000000000"));
// @formatter:on
}
}
@@ -551,7 +550,7 @@ class HsOfficeDebitorControllerAcceptanceTest extends ContextBasedTestWithCleanu
context.define("superuser-alex@hostsharing.net");
final var givenDebitor = givenSomeTemporaryDebitor();
- final var givenContact = contactRepo.findContactByOptionalCaptionLike("fourth").get(0);
+ final var givenContact = contactrealRepo.findContactByOptionalCaptionLike("fourth").get(0);
final var location = RestAssured // @formatter:off
.given()
@@ -721,12 +720,12 @@ class HsOfficeDebitorControllerAcceptanceTest extends ContextBasedTestWithCleanu
return jpaAttempt.transacted(() -> {
context.define("superuser-alex@hostsharing.net");
final var givenPartner = partnerRepo.findPartnerByOptionalNameLike("Fourth").get(0).load();
- final var givenContact = contactRepo.findContactByOptionalCaptionLike("fourth contact").get(0);
+ final var givenContact = contactrealRepo.findContactByOptionalCaptionLike("fourth contact").get(0);
final var newDebitor = HsOfficeDebitorEntity.builder()
.debitorNumberSuffix(nextDebitorSuffix())
.billable(true)
.debitorRel(
- HsOfficeRelationEntity.builder()
+ HsOfficeRelationRealEntity.builder()
.type(DEBITOR)
.anchor(givenPartner.getPartnerRel().getHolder())
.holder(givenPartner.getPartnerRel().getHolder())
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorEntityPatcherUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorEntityPatcherUnitTest.java
index 82e4d303..52ddb318 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorEntityPatcherUnitTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorEntityPatcherUnitTest.java
@@ -2,7 +2,7 @@ package net.hostsharing.hsadminng.hs.office.debitor;
import net.hostsharing.hsadminng.hs.office.bankaccount.HsOfficeBankAccountEntity;
import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeDebitorPatchResource;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealEntity;
import net.hostsharing.hsadminng.rbac.test.PatchUnitTestBase;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.TestInstance;
@@ -21,10 +21,7 @@ import static org.mockito.Mockito.lenient;
@TestInstance(PER_CLASS)
@ExtendWith(MockitoExtension.class)
-class HsOfficeDebitorEntityPatcherUnitTest extends PatchUnitTestBase<
- HsOfficeDebitorPatchResource,
- HsOfficeDebitorEntity
- > {
+class HsOfficeDebitorEntityPatcherUnitTest extends PatchUnitTestBase {
private static final UUID INITIAL_DEBITOR_UUID = UUID.randomUUID();
private static final UUID INITIAL_DEBITOR_REL_UUID = UUID.randomUUID();
@@ -44,20 +41,21 @@ class HsOfficeDebitorEntityPatcherUnitTest extends PatchUnitTestBase<
private static final UUID INITIAL_REFUND_BANK_ACCOUNT_UUID = UUID.randomUUID();
private static final UUID PATCHED_REFUND_BANK_ACCOUNT_UUID = UUID.randomUUID();
- private final HsOfficeRelationEntity givenInitialDebitorRel = HsOfficeRelationEntity.builder()
+ private final HsOfficeRelationRealEntity givenInitialDebitorRel = HsOfficeRelationRealEntity.builder()
.uuid(INITIAL_DEBITOR_REL_UUID)
.build();
private final HsOfficeBankAccountEntity givenInitialBankAccount = HsOfficeBankAccountEntity.builder()
.uuid(INITIAL_REFUND_BANK_ACCOUNT_UUID)
.build();
+
@Mock
private EntityManager em;
@BeforeEach
void initMocks() {
- lenient().when(em.getReference(eq(HsOfficeRelationEntity.class), any())).thenAnswer(invocation ->
- HsOfficeRelationEntity.builder().uuid(invocation.getArgument(1)).build());
+ lenient().when(em.getReference(eq(HsOfficeRelationRealEntity.class), any())).thenAnswer(invocation ->
+ HsOfficeRelationRealEntity.builder().uuid(invocation.getArgument(1)).build());
lenient().when(em.getReference(eq(HsOfficeBankAccountEntity.class), any())).thenAnswer(invocation ->
HsOfficeBankAccountEntity.builder().uuid(invocation.getArgument(1)).build());
}
@@ -141,8 +139,8 @@ class HsOfficeDebitorEntityPatcherUnitTest extends PatchUnitTestBase<
);
}
- private HsOfficeRelationEntity newDebitorRel(final UUID uuid) {
- return HsOfficeRelationEntity.builder()
+ private HsOfficeRelationRealEntity newDebitorRel(final UUID uuid) {
+ return HsOfficeRelationRealEntity.builder()
.uuid(uuid)
.build();
}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorEntityUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorEntityUnitTest.java
index e1250775..5dc61235 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorEntityUnitTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorEntityUnitTest.java
@@ -1,17 +1,17 @@
package net.hostsharing.hsadminng.hs.office.debitor;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealEntity;
import net.hostsharing.hsadminng.hs.office.partner.HsOfficePartnerEntity;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonEntity;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonType;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealEntity;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
class HsOfficeDebitorEntityUnitTest {
- private HsOfficeRelationEntity givenDebitorRel = HsOfficeRelationEntity.builder()
+ private HsOfficeRelationRealEntity givenDebitorRel = HsOfficeRelationRealEntity.builder()
.anchor(HsOfficePersonEntity.builder()
.personType(HsOfficePersonType.LEGAL_PERSON)
.tradeName("some partner trade name")
@@ -20,7 +20,7 @@ class HsOfficeDebitorEntityUnitTest {
.personType(HsOfficePersonType.LEGAL_PERSON)
.tradeName("some billing trade name")
.build())
- .contact(HsOfficeContactEntity.builder().caption("some caption").build())
+ .contact(HsOfficeContactRealEntity.builder().caption("some caption").build())
.build();
@Test
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorRepositoryIntegrationTest.java
index fabc93e7..d2960862 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorRepositoryIntegrationTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorRepositoryIntegrationTest.java
@@ -2,10 +2,11 @@ package net.hostsharing.hsadminng.hs.office.debitor;
import net.hostsharing.hsadminng.context.Context;
import net.hostsharing.hsadminng.hs.office.bankaccount.HsOfficeBankAccountRepository;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRepository;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealRepository;
import net.hostsharing.hsadminng.hs.office.partner.HsOfficePartnerRepository;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonRepository;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelation;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealEntity;
import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationType;
import net.hostsharing.hsadminng.rbac.test.ContextBasedTestWithCleanup;
import net.hostsharing.hsadminng.rbac.rbacgrant.RawRbacGrantRepository;
@@ -49,7 +50,7 @@ class HsOfficeDebitorRepositoryIntegrationTest extends ContextBasedTestWithClean
HsOfficePartnerRepository partnerRepo;
@Autowired
- HsOfficeContactRepository contactRepo;
+ HsOfficeContactRealRepository contactrealRepo;
@Autowired
HsOfficePersonRepository personRepo;
@@ -84,14 +85,14 @@ class HsOfficeDebitorRepositoryIntegrationTest extends ContextBasedTestWithClean
final var count = debitorRepo.count();
final var givenPartner = partnerRepo.findPartnerByPartnerNumber(10001);
final var givenPartnerPerson = one(personRepo.findPersonByOptionalNameLike("First GmbH"));
- final var givenContact = one(contactRepo.findContactByOptionalCaptionLike("first contact"));
+ final var givenContact = one(contactrealRepo.findContactByOptionalCaptionLike("first contact"));
// when
final var result = attempt(em, () -> {
final var newDebitor = HsOfficeDebitorEntity.builder()
.partner(givenPartner)
.debitorNumberSuffix("21")
- .debitorRel(HsOfficeRelationEntity.builder()
+ .debitorRel(HsOfficeRelationRealEntity.builder()
.type(HsOfficeRelationType.DEBITOR)
.anchor(givenPartnerPerson)
.holder(givenPartnerPerson)
@@ -118,13 +119,13 @@ class HsOfficeDebitorRepositoryIntegrationTest extends ContextBasedTestWithClean
// given
context("superuser-alex@hostsharing.net");
final var givenPartnerPerson = one(personRepo.findPersonByOptionalNameLike("First GmbH"));
- final var givenContact = one(contactRepo.findContactByOptionalCaptionLike("first contact"));
+ final var givenContact = one(contactrealRepo.findContactByOptionalCaptionLike("first contact"));
// when
final var result = attempt(em, () -> {
final var newDebitor = HsOfficeDebitorEntity.builder()
.debitorNumberSuffix("21")
- .debitorRel(HsOfficeRelationEntity.builder()
+ .debitorRel(HsOfficeRelationRealEntity.builder()
.type(HsOfficeRelationType.DEBITOR)
.anchor(givenPartnerPerson)
.holder(givenPartnerPerson)
@@ -156,10 +157,10 @@ class HsOfficeDebitorRepositoryIntegrationTest extends ContextBasedTestWithClean
attempt(em, () -> {
final var givenPartnerPerson = one(personRepo.findPersonByOptionalNameLike("First GmbH"));
final var givenDebitorPerson = one(personRepo.findPersonByOptionalNameLike("Fourth eG"));
- final var givenContact = one(contactRepo.findContactByOptionalCaptionLike("fourth contact"));
+ final var givenContact = one(contactrealRepo.findContactByOptionalCaptionLike("fourth contact"));
final var newDebitor = HsOfficeDebitorEntity.builder()
.debitorNumberSuffix("22")
- .debitorRel(HsOfficeRelationEntity.builder()
+ .debitorRel(HsOfficeRelationRealEntity.builder()
.type(HsOfficeRelationType.DEBITOR)
.anchor(givenPartnerPerson)
.holder(givenDebitorPerson)
@@ -322,7 +323,7 @@ class HsOfficeDebitorRepositoryIntegrationTest extends ContextBasedTestWithClean
"hs_office_relation#FourtheG-with-DEBITOR-FourtheG:ADMIN", true);
final var givenNewPartnerPerson = one(personRepo.findPersonByOptionalNameLike("First"));
final var givenNewBillingPerson = one(personRepo.findPersonByOptionalNameLike("Firby"));
- final var givenNewContact = one(contactRepo.findContactByOptionalCaptionLike("sixth contact"));
+ final var givenNewContact = one(contactrealRepo.findContactByOptionalCaptionLike("sixth contact"));
final var givenNewBankAccount = one(bankAccountRepo.findByOptionalHolderLike("first"));
final String givenNewVatId = "NEW-VAT-ID";
final String givenNewVatCountryCode = "NC";
@@ -331,7 +332,7 @@ class HsOfficeDebitorRepositoryIntegrationTest extends ContextBasedTestWithClean
// when
final var result = jpaAttempt.transacted(() -> {
context("superuser-alex@hostsharing.net");
- givenDebitor.setDebitorRel(HsOfficeRelationEntity.builder()
+ givenDebitor.setDebitorRel(HsOfficeRelationRealEntity.builder()
.type(HsOfficeRelationType.DEBITOR)
.anchor(givenNewPartnerPerson)
.holder(givenNewBillingPerson)
@@ -488,7 +489,7 @@ class HsOfficeDebitorRepositoryIntegrationTest extends ContextBasedTestWithClean
if (withPartner) {
assertThat(foundEntity.getPartner()).isNotNull();
}
- assertThat(foundEntity.getDebitorRel()).extracting(HsOfficeRelationEntity::toString)
+ assertThat(foundEntity.getDebitorRel()).extracting(HsOfficeRelation::toString)
.isEqualTo(saved.getDebitorRel().toString());
});
}
@@ -610,13 +611,13 @@ class HsOfficeDebitorRepositoryIntegrationTest extends ContextBasedTestWithClean
context("superuser-alex@hostsharing.net");
final var givenPartner = one(partnerRepo.findPartnerByOptionalNameLike(partnerName));
final var givenPartnerPerson = givenPartner.getPartnerRel().getHolder();
- final var givenContact = one(contactRepo.findContactByOptionalCaptionLike(contactCaption));
+ final var givenContact = one(contactrealRepo.findContactByOptionalCaptionLike(contactCaption));
final var givenBankAccount =
bankAccountHolder != null ? one(bankAccountRepo.findByOptionalHolderLike(bankAccountHolder)) : null;
final var newDebitor = HsOfficeDebitorEntity.builder()
.partner(givenPartner)
.debitorNumberSuffix("20")
- .debitorRel(HsOfficeRelationEntity.builder()
+ .debitorRel(HsOfficeRelationRealEntity.builder()
.type(HsOfficeRelationType.DEBITOR)
.anchor(givenPartnerPerson)
.holder(givenPartnerPerson)
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/TestHsOfficeDebitor.java b/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/TestHsOfficeDebitor.java
index b8ddf8b5..a3df1026 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/TestHsOfficeDebitor.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/TestHsOfficeDebitor.java
@@ -2,9 +2,9 @@ package net.hostsharing.hsadminng.hs.office.debitor;
import lombok.experimental.UtilityClass;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonEntity;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealEntity;
-import static net.hostsharing.hsadminng.hs.office.contact.TestHsOfficeContact.TEST_CONTACT;
+import static net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealTestEntity.TEST_REAL_CONTACT;
import static net.hostsharing.hsadminng.hs.office.partner.TestHsOfficePartner.TEST_PARTNER;
@UtilityClass
@@ -14,10 +14,10 @@ public class TestHsOfficeDebitor {
public static final HsOfficeDebitorEntity TEST_DEBITOR = HsOfficeDebitorEntity.builder()
.debitorNumberSuffix(DEFAULT_DEBITOR_SUFFIX)
- .debitorRel(HsOfficeRelationEntity.builder()
+ .debitorRel(HsOfficeRelationRealEntity.builder()
.holder(HsOfficePersonEntity.builder().build())
.anchor(HsOfficePersonEntity.builder().build())
- .contact(TEST_CONTACT)
+ .contact(TEST_REAL_CONTACT)
.build())
.partner(TEST_PARTNER)
.defaultPrefix("abc")
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipControllerRestTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipControllerRestTest.java
index bcd7e9ab..7c62859b 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipControllerRestTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipControllerRestTest.java
@@ -85,7 +85,8 @@ public class HsOfficeMembershipControllerRestTest {
.andExpect(status().is4xxClientError())
.andExpect(jsonPath("statusCode", is(400)))
.andExpect(jsonPath("statusPhrase", is("Bad Request")))
- .andExpect(jsonPath("message", is("[partnerUuid must not be null but is \"null\"]")));
+ // FYI: the brackets around the message are here because it's actually an array, in this case of size 1
+ .andExpect(jsonPath("message", is("ERROR: [400] [partnerUuid must not be null but is \"null\"]")));
}
@Test
@@ -114,7 +115,7 @@ public class HsOfficeMembershipControllerRestTest {
.andExpect(status().is4xxClientError())
.andExpect(jsonPath("statusCode", is(400)))
.andExpect(jsonPath("statusPhrase", is("Bad Request")))
- .andExpect(jsonPath("message", is("Unable to find Partner with uuid " + givenPartnerUuid)));
+ .andExpect(jsonPath("message", is("ERROR: [400] Unable to find Partner by uuid: " + givenPartnerUuid)));
}
@ParameterizedTest
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerControllerAcceptanceTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerControllerAcceptanceTest.java
index 1bf30d14..fc7287e4 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerControllerAcceptanceTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerControllerAcceptanceTest.java
@@ -3,12 +3,13 @@ package net.hostsharing.hsadminng.hs.office.partner;
import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import net.hostsharing.hsadminng.HsadminNgApplication;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRepository;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealEntity;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealRepository;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonEntity;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonRepository;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRepository;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelation;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealRepository;
import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationType;
import net.hostsharing.hsadminng.rbac.test.ContextBasedTestWithCleanup;
import net.hostsharing.hsadminng.rbac.test.JpaAttempt;
@@ -41,13 +42,13 @@ class HsOfficePartnerControllerAcceptanceTest extends ContextBasedTestWithCleanu
HsOfficePartnerRepository partnerRepo;
@Autowired
- HsOfficeRelationRepository relationRepo;
+ HsOfficeRelationRealRepository relationRepo;
@Autowired
HsOfficePersonRepository personRepo;
@Autowired
- HsOfficeContactRepository contactRepo;
+ HsOfficeContactRealRepository contactrealRepo;
@Autowired
JpaAttempt jpaAttempt;
@@ -91,7 +92,7 @@ class HsOfficePartnerControllerAcceptanceTest extends ContextBasedTestWithCleanu
context.define("superuser-alex@hostsharing.net");
final var givenMandantPerson = personRepo.findPersonByOptionalNameLike("Hostsharing eG").stream().findFirst().orElseThrow();
final var givenPerson = personRepo.findPersonByOptionalNameLike("Third").stream().findFirst().orElseThrow();
- final var givenContact = contactRepo.findContactByOptionalCaptionLike("fourth").stream().findFirst().orElseThrow();
+ final var givenContact = contactrealRepo.findContactByOptionalCaptionLike("fourth").stream().findFirst().orElseThrow();
final var location = RestAssured // @formatter:off
.given()
@@ -179,7 +180,7 @@ class HsOfficePartnerControllerAcceptanceTest extends ContextBasedTestWithCleanu
.post("http://localhost/api/hs/office/partners")
.then().log().all().assertThat()
.statusCode(400)
- .body("message", is("Unable to find " + HsOfficeContactEntity.class.getName() + " with id " + GIVEN_NON_EXISTING_UUID));
+ .body("message", is("ERROR: [400] Unable to find " + HsOfficeContactRealEntity.class.getName() + " with id " + GIVEN_NON_EXISTING_UUID));
// @formatter:on
}
@@ -188,7 +189,7 @@ class HsOfficePartnerControllerAcceptanceTest extends ContextBasedTestWithCleanu
context.define("superuser-alex@hostsharing.net");
final var mandantPerson = personRepo.findPersonByOptionalNameLike("Hostsharing eG").get(0);
- final var givenContact = contactRepo.findContactByOptionalCaptionLike("fourth").get(0);
+ final var givenContact = contactrealRepo.findContactByOptionalCaptionLike("fourth").get(0);
final var location = RestAssured // @formatter:off
.given()
@@ -217,7 +218,10 @@ class HsOfficePartnerControllerAcceptanceTest extends ContextBasedTestWithCleanu
.post("http://localhost/api/hs/office/partners")
.then().log().all().assertThat()
.statusCode(400)
- .body("message", is("Unable to find " + HsOfficePersonEntity.class.getName() + " with id " + GIVEN_NON_EXISTING_UUID));
+ // TODO.impl: we want this error message:
+ // .body("message", is("ERROR: [400] Unable to find Person by uuid: " + GIVEN_NON_EXISTING_UUID));
+ // but ModelMapper creates this error message:
+ .body("message", is("ERROR: [400] Unable to find " + HsOfficePersonEntity.class.getName() + " with id " + GIVEN_NON_EXISTING_UUID));
// @formatter:on
}
}
@@ -405,7 +409,7 @@ class HsOfficePartnerControllerAcceptanceTest extends ContextBasedTestWithCleanu
// and an ex-partner-relation got created
final var anchorpartnerPersonUUid = givenPartner.getPartnerRel().getAnchor().getUuid();
assertThat(relationRepo.findRelationRelatedToPersonUuidAndRelationType(anchorpartnerPersonUUid, EX_PARTNER))
- .map(HsOfficeRelationEntity::toShortString)
+ .map(HsOfficeRelation::toShortString)
.contains("rel(anchor='LP Hostsharing eG', type='EX_PARTNER', holder='UF Erben Bessler')");
}
@@ -516,16 +520,16 @@ class HsOfficePartnerControllerAcceptanceTest extends ContextBasedTestWithCleanu
}
}
- private HsOfficeRelationEntity givenSomeTemporaryPartnerRel(
+ private HsOfficeRelationRealEntity givenSomeTemporaryPartnerRel(
final String partnerHolderName,
final String contactName) {
return jpaAttempt.transacted(() -> {
context.define("superuser-alex@hostsharing.net");
final var givenMandantPerson = personRepo.findPersonByOptionalNameLike("Hostsharing eG").stream().findFirst().orElseThrow();
final var givenPerson = personRepo.findPersonByOptionalNameLike(partnerHolderName).stream().findFirst().orElseThrow();
- final var givenContact = contactRepo.findContactByOptionalCaptionLike(contactName).stream().findFirst().orElseThrow();
+ final var givenContact = contactrealRepo.findContactByOptionalCaptionLike(contactName).stream().findFirst().orElseThrow();
- final var partnerRel = new HsOfficeRelationEntity();
+ final var partnerRel = new HsOfficeRelationRealEntity();
partnerRel.setType(HsOfficeRelationType.PARTNER);
partnerRel.setAnchor(givenMandantPerson);
partnerRel.setHolder(givenPerson);
@@ -557,6 +561,6 @@ class HsOfficePartnerControllerAcceptanceTest extends ContextBasedTestWithCleanu
cleanupAllNew(HsOfficePartnerEntity.class);
// TODO: should not be necessary anymore, once it's deleted via after delete trigger
- cleanupAllNew(HsOfficeRelationEntity.class);
+ cleanupAllNew(HsOfficeRelationRealEntity.class);
}
}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerControllerRestTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerControllerRestTest.java
index e6e7fb7e..97b56052 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerControllerRestTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerControllerRestTest.java
@@ -1,10 +1,10 @@
package net.hostsharing.hsadminng.hs.office.partner;
import net.hostsharing.hsadminng.context.Context;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRbacEntity;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonEntity;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRepository;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealRepository;
import net.hostsharing.hsadminng.mapper.Mapper;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
@@ -54,7 +54,7 @@ class HsOfficePartnerControllerRestTest {
HsOfficePartnerRepository partnerRepo;
@MockBean
- HsOfficeRelationRepository relationRepo;
+ HsOfficeRelationRealRepository relationRepo;
@MockBean
EntityManager em;
@@ -69,7 +69,7 @@ class HsOfficePartnerControllerRestTest {
HsOfficePersonEntity personMock;
@Mock
- HsOfficeContactEntity contactMock;
+ HsOfficeContactRbacEntity contactMock;
@Mock
HsOfficePartnerEntity partnerMock;
@@ -83,7 +83,7 @@ class HsOfficePartnerControllerRestTest {
lenient().when(em.getReference(HsOfficePersonEntity.class, GIVEN_MANDANTE_UUID)).thenReturn(mandateMock);
lenient().when(em.getReference(HsOfficePersonEntity.class, GIVEN_PERSON_UUID)).thenReturn(personMock);
- lenient().when(em.getReference(HsOfficeContactEntity.class, GIVEN_CONTACT_UUID)).thenReturn(contactMock);
+ lenient().when(em.getReference(HsOfficeContactRbacEntity.class, GIVEN_CONTACT_UUID)).thenReturn(contactMock);
lenient().when(em.getReference(any(), eq(GIVEN_INVALID_UUID))).thenThrow(EntityNotFoundException.class);
}
@@ -124,7 +124,7 @@ class HsOfficePartnerControllerRestTest {
.andExpect(status().is4xxClientError())
.andExpect(jsonPath("statusCode", is(400)))
.andExpect(jsonPath("statusPhrase", is("Bad Request")))
- .andExpect(jsonPath("message", startsWith("Cannot resolve HsOfficePersonEntity with uuid ")));
+ .andExpect(jsonPath("message", startsWith("ERROR: [400] Cannot resolve HsOfficePersonEntity with uuid ")));
}
@Test
@@ -161,7 +161,7 @@ class HsOfficePartnerControllerRestTest {
.andExpect(status().is4xxClientError())
.andExpect(jsonPath("statusCode", is(400)))
.andExpect(jsonPath("statusPhrase", is("Bad Request")))
- .andExpect(jsonPath("message", startsWith("Cannot resolve HsOfficeContactEntity with uuid ")));
+ .andExpect(jsonPath("message", startsWith("ERROR: [400] Cannot resolve HsOfficeContactRealEntity with uuid ")));
}
}
@@ -176,7 +176,7 @@ class HsOfficePartnerControllerRestTest {
when(partnerRepo.deleteByUuid(givenPartnerUuid)).thenReturn(0);
final UUID givenRelationUuid = UUID.randomUUID();
- when(partnerMock.getPartnerRel()).thenReturn(HsOfficeRelationEntity.builder()
+ when(partnerMock.getPartnerRel()).thenReturn(HsOfficeRelationRealEntity.builder()
.uuid(givenRelationUuid)
.build());
when(relationRepo.deleteByUuid(givenRelationUuid)).thenReturn(0);
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerDetailsEntityPatcherUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerDetailsEntityPatcherUnitTest.java
index 10cb6016..8a3c0084 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerDetailsEntityPatcherUnitTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerDetailsEntityPatcherUnitTest.java
@@ -1,6 +1,6 @@
package net.hostsharing.hsadminng.hs.office.partner;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRbacEntity;
import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficePartnerDetailsPatchResource;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonEntity;
import net.hostsharing.hsadminng.rbac.test.PatchUnitTestBase;
@@ -43,8 +43,8 @@ class HsOfficePartnerDetailsEntityPatcherUnitTest extends PatchUnitTestBase<
@BeforeEach
void initMocks() {
- lenient().when(em.getReference(eq(HsOfficeContactEntity.class), any())).thenAnswer(invocation ->
- HsOfficeContactEntity.builder().uuid(invocation.getArgument(1)).build());
+ lenient().when(em.getReference(eq(HsOfficeContactRbacEntity.class), any())).thenAnswer(invocation ->
+ HsOfficeContactRbacEntity.builder().uuid(invocation.getArgument(1)).build());
lenient().when(em.getReference(eq(HsOfficePersonEntity.class), any())).thenAnswer(invocation ->
HsOfficePersonEntity.builder().uuid(invocation.getArgument(1)).build());
}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerEntityPatcherUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerEntityPatcherUnitTest.java
index 6cc072b3..a2ed7ca5 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerEntityPatcherUnitTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerEntityPatcherUnitTest.java
@@ -1,9 +1,9 @@
package net.hostsharing.hsadminng.hs.office.partner;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealEntity;
import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficePartnerPatchResource;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonEntity;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealEntity;
import net.hostsharing.hsadminng.rbac.test.PatchUnitTestBase;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.TestInstance;
@@ -36,7 +36,7 @@ class HsOfficePartnerEntityPatcherUnitTest extends PatchUnitTestBase<
private final HsOfficePersonEntity givenInitialPerson = HsOfficePersonEntity.builder()
.uuid(INITIAL_PERSON_UUID)
.build();
- private final HsOfficeContactEntity givenInitialContact = HsOfficeContactEntity.builder()
+ private final HsOfficeContactRealEntity givenInitialContact = HsOfficeContactRealEntity.builder()
.uuid(INITIAL_CONTACT_UUID)
.build();
@@ -48,8 +48,8 @@ class HsOfficePartnerEntityPatcherUnitTest extends PatchUnitTestBase<
@BeforeEach
void initMocks() {
- lenient().when(em.getReference(eq(HsOfficeRelationEntity.class), any())).thenAnswer(invocation ->
- HsOfficeRelationEntity.builder().uuid(invocation.getArgument(1)).build());
+ lenient().when(em.getReference(eq(HsOfficeRelationRealEntity.class), any())).thenAnswer(invocation ->
+ HsOfficeRelationRealEntity.builder().uuid(invocation.getArgument(1)).build());
}
@Override
@@ -57,7 +57,7 @@ class HsOfficePartnerEntityPatcherUnitTest extends PatchUnitTestBase<
final var entity = HsOfficePartnerEntity.builder()
.uuid(INITIAL_PARTNER_UUID)
.partnerNumber(12345)
- .partnerRel(HsOfficeRelationEntity.builder()
+ .partnerRel(HsOfficeRelationRealEntity.builder()
.holder(givenInitialPerson)
.contact(givenInitialContact)
.build())
@@ -89,10 +89,9 @@ class HsOfficePartnerEntityPatcherUnitTest extends PatchUnitTestBase<
);
}
- private static HsOfficeRelationEntity newPartnerRel(final UUID uuid) {
- final var newPartnerRel = HsOfficeRelationEntity.builder()
+ private static HsOfficeRelationRealEntity newPartnerRel(final UUID uuid) {
+ return HsOfficeRelationRealEntity.builder()
.uuid(uuid)
.build();
- return newPartnerRel;
}
}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerEntityUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerEntityUnitTest.java
index dd373e98..3cf07cab 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerEntityUnitTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerEntityUnitTest.java
@@ -1,9 +1,9 @@
package net.hostsharing.hsadminng.hs.office.partner;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealEntity;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonEntity;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonType;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealEntity;
import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationType;
import org.junit.jupiter.api.Test;
@@ -13,7 +13,7 @@ class HsOfficePartnerEntityUnitTest {
private final HsOfficePartnerEntity givenPartner = HsOfficePartnerEntity.builder()
.partnerNumber(12345)
- .partnerRel(HsOfficeRelationEntity.builder()
+ .partnerRel(HsOfficeRelationRealEntity.builder()
.anchor(HsOfficePersonEntity.builder()
.personType(HsOfficePersonType.LEGAL_PERSON)
.tradeName("Hostsharing eG")
@@ -23,7 +23,7 @@ class HsOfficePartnerEntityUnitTest {
.personType(HsOfficePersonType.LEGAL_PERSON)
.tradeName("some trade name")
.build())
- .contact(HsOfficeContactEntity.builder().caption("some caption").build())
+ .contact(HsOfficeContactRealEntity.builder().caption("some caption").build())
.build())
.build();
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerRepositoryIntegrationTest.java
index ecf645d7..e365d183 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerRepositoryIntegrationTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerRepositoryIntegrationTest.java
@@ -1,10 +1,10 @@
package net.hostsharing.hsadminng.hs.office.partner;
import net.hostsharing.hsadminng.context.Context;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRepository;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealRepository;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonRepository;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRepository;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealRepository;
import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationType;
import net.hostsharing.hsadminng.rbac.test.ContextBasedTestWithCleanup;
import net.hostsharing.hsadminng.rbac.rbacgrant.RawRbacGrantRepository;
@@ -42,13 +42,13 @@ class HsOfficePartnerRepositoryIntegrationTest extends ContextBasedTestWithClean
HsOfficePartnerRepository partnerRepo;
@Autowired
- HsOfficeRelationRepository relationRepo;
+ HsOfficeRelationRealRepository relationRepo;
@Autowired
HsOfficePersonRepository personRepo;
@Autowired
- HsOfficeContactRepository contactRepo;
+ HsOfficeContactRealRepository contactrealRepo;
@Autowired
RawRbacObjectRepository rawObjectRepo;
@@ -109,10 +109,10 @@ class HsOfficePartnerRepositoryIntegrationTest extends ContextBasedTestWithClean
// when
attempt(em, () -> {
final var givenPartnerPerson = personRepo.findPersonByOptionalNameLike("Erben Bessler").get(0);
- final var givenContact = contactRepo.findContactByOptionalCaptionLike("fourth contact").get(0);
+ final var givenContact = contactrealRepo.findContactByOptionalCaptionLike("fourth contact").get(0);
final var givenMandantPerson = personRepo.findPersonByOptionalNameLike("Hostsharing eG").get(0);
- final var newRelation = HsOfficeRelationEntity.builder()
+ final var newRelation = HsOfficeRelationRealEntity.builder()
.holder(givenPartnerPerson)
.type(HsOfficeRelationType.PARTNER)
.anchor(givenMandantPerson)
@@ -329,7 +329,8 @@ class HsOfficePartnerRepositoryIntegrationTest extends ContextBasedTestWithClean
// then
result.assertExceptionWithRootCauseMessage(JpaSystemException.class,
- "[403] insert into hs_office_partner_details not allowed for current subjects {hs_office_relation#HostsharingeG-with-PARTNER-ErbenBesslerMelBessler:TENANT}");
+ "ERROR: [403] insert into hs_office_partner_details ",
+ " not allowed for current subjects {hs_office_relation#HostsharingeG-with-PARTNER-ErbenBesslerMelBessler:TENANT}");
}
private void assertThatPartnerActuallyInDatabase(final HsOfficePartnerEntity saved) {
@@ -462,12 +463,12 @@ class HsOfficePartnerRepositoryIntegrationTest extends ContextBasedTestWithClean
}).assertSuccessful().returnedValue();
}
- private HsOfficeRelationEntity givenSomeTemporaryHostsharingPartnerRel(final String person, final String contact) {
+ private HsOfficeRelationRealEntity givenSomeTemporaryHostsharingPartnerRel(final String person, final String contact) {
final var givenMandantorPerson = personRepo.findPersonByOptionalNameLike("Hostsharing eG").get(0);
final var givenPartnerPerson = personRepo.findPersonByOptionalNameLike(person).get(0);
- final var givenContact = contactRepo.findContactByOptionalCaptionLike(contact).get(0);
+ final var givenContact = contactrealRepo.findContactByOptionalCaptionLike(contact).get(0);
- final var partnerRel = HsOfficeRelationEntity.builder()
+ final var partnerRel = HsOfficeRelationRealEntity.builder()
.holder(givenPartnerPerson)
.type(HsOfficeRelationType.PARTNER)
.anchor(givenMandantorPerson)
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/partner/TestHsOfficePartner.java b/src/test/java/net/hostsharing/hsadminng/hs/office/partner/TestHsOfficePartner.java
index 5fa6c156..1d3b8164 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/partner/TestHsOfficePartner.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/partner/TestHsOfficePartner.java
@@ -1,8 +1,8 @@
package net.hostsharing.hsadminng.hs.office.partner;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealEntity;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonEntity;
-import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationEntity;
+import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationRealEntity;
import net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationType;
import static net.hostsharing.hsadminng.hs.office.person.HsOfficePersonType.LEGAL_PERSON;
@@ -15,7 +15,7 @@ public class TestHsOfficePartner {
return HsOfficePartnerEntity.builder()
.partnerNumber(10001)
.partnerRel(
- HsOfficeRelationEntity.builder()
+ HsOfficeRelationRealEntity.builder()
.holder(HsOfficePersonEntity.builder()
.personType(LEGAL_PERSON)
.tradeName("Hostsharing eG")
@@ -25,7 +25,7 @@ public class TestHsOfficePartner {
.personType(LEGAL_PERSON)
.tradeName(tradeName)
.build())
- .contact(HsOfficeContactEntity.builder()
+ .contact(HsOfficeContactRealEntity.builder()
.caption(tradeName)
.build())
.build()
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationControllerAcceptanceTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationControllerAcceptanceTest.java
index 636975eb..4f397199 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationControllerAcceptanceTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationControllerAcceptanceTest.java
@@ -2,10 +2,10 @@ package net.hostsharing.hsadminng.hs.office.relation;
import io.restassured.RestAssured;
import io.restassured.http.ContentType;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealRepository;
import net.hostsharing.hsadminng.rbac.test.ContextBasedTestWithCleanup;
import net.hostsharing.hsadminng.HsadminNgApplication;
import net.hostsharing.hsadminng.context.Context;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRepository;
import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeRelationTypeResource;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonRepository;
import net.hostsharing.hsadminng.rbac.test.JpaAttempt;
@@ -43,13 +43,13 @@ class HsOfficeRelationControllerAcceptanceTest extends ContextBasedTestWithClean
Context contextMock;
@Autowired
- HsOfficeRelationRepository relationRepo;
+ HsOfficeRelationRealRepository relationrealRepo;
@Autowired
HsOfficePersonRepository personRepo;
@Autowired
- HsOfficeContactRepository contactRepo;
+ HsOfficeContactRealRepository contactrealRepo;
@Autowired
JpaAttempt jpaAttempt;
@@ -125,7 +125,7 @@ class HsOfficeRelationControllerAcceptanceTest extends ContextBasedTestWithClean
context.define("superuser-alex@hostsharing.net");
final var givenAnchorPerson = personRepo.findPersonByOptionalNameLike("Third").get(0);
final var givenHolderPerson = personRepo.findPersonByOptionalNameLike("Paul").get(0);
- final var givenContact = contactRepo.findContactByOptionalCaptionLike("second").get(0);
+ final var givenContact = contactrealRepo.findContactByOptionalCaptionLike("second").get(0);
final var location = RestAssured // @formatter:off
.given()
@@ -161,7 +161,7 @@ class HsOfficeRelationControllerAcceptanceTest extends ContextBasedTestWithClean
.extract().header("Location"); // @formatter:on
// finally, the new relation can be accessed under the generated UUID
- final var newUserUuid = toCleanup(HsOfficeRelationEntity.class, UUID.fromString(
+ final var newUserUuid = toCleanup(HsOfficeRelation.class, UUID.fromString(
location.substring(location.lastIndexOf('/') + 1)));
assertThat(newUserUuid).isNotNull();
}
@@ -172,7 +172,7 @@ class HsOfficeRelationControllerAcceptanceTest extends ContextBasedTestWithClean
context.define("superuser-alex@hostsharing.net");
final var givenAnchorPersonUuid = GIVEN_NON_EXISTING_HOLDER_PERSON_UUID;
final var givenHolderPerson = personRepo.findPersonByOptionalNameLike("Smith").get(0);
- final var givenContact = contactRepo.findContactByOptionalCaptionLike("fourth").get(0);
+ final var givenContact = contactrealRepo.findContactByOptionalCaptionLike("fourth").get(0);
final var location = RestAssured // @formatter:off
.given()
@@ -195,7 +195,7 @@ class HsOfficeRelationControllerAcceptanceTest extends ContextBasedTestWithClean
.post("http://localhost/api/hs/office/relations")
.then().log().all().assertThat()
.statusCode(404)
- .body("message", is("cannot find anchorUuid " + GIVEN_NON_EXISTING_HOLDER_PERSON_UUID));
+ .body("message", is("ERROR: [404] cannot find Person by anchorUuid: " + GIVEN_NON_EXISTING_HOLDER_PERSON_UUID));
// @formatter:on
}
@@ -204,7 +204,7 @@ class HsOfficeRelationControllerAcceptanceTest extends ContextBasedTestWithClean
context.define("superuser-alex@hostsharing.net");
final var givenAnchorPerson = personRepo.findPersonByOptionalNameLike("Third").get(0);
- final var givenContact = contactRepo.findContactByOptionalCaptionLike("fourth").get(0);
+ final var givenContact = contactrealRepo.findContactByOptionalCaptionLike("fourth").get(0);
final var location = RestAssured // @formatter:off
.given()
@@ -227,7 +227,7 @@ class HsOfficeRelationControllerAcceptanceTest extends ContextBasedTestWithClean
.post("http://localhost/api/hs/office/relations")
.then().log().all().assertThat()
.statusCode(404)
- .body("message", is("cannot find holderUuid " + GIVEN_NON_EXISTING_HOLDER_PERSON_UUID));
+ .body("message", is("ERROR: [404] cannot find Person by holderUuid: " + GIVEN_NON_EXISTING_HOLDER_PERSON_UUID));
// @formatter:on
}
@@ -250,7 +250,7 @@ class HsOfficeRelationControllerAcceptanceTest extends ContextBasedTestWithClean
"holderUuid": "%s",
"contactUuid": "%s"
}
- """.formatted(
+ """.formatted(
HsOfficeRelationTypeResource.DEBITOR,
givenAnchorPerson.getUuid(),
givenHolderPerson.getUuid(),
@@ -260,7 +260,7 @@ class HsOfficeRelationControllerAcceptanceTest extends ContextBasedTestWithClean
.post("http://localhost/api/hs/office/relations")
.then().log().all().assertThat()
.statusCode(404)
- .body("message", is("cannot find contactUuid 00000000-0000-0000-0000-000000000000"));
+ .body("message", is("ERROR: [404] cannot find Contact by contactUuid: 00000000-0000-0000-0000-000000000000"));
// @formatter:on
}
}
@@ -331,12 +331,12 @@ class HsOfficeRelationControllerAcceptanceTest extends ContextBasedTestWithClean
}
}
- private HsOfficeRelationEntity findRelation(
+ private HsOfficeRelation findRelation(
final String anchorPersonName,
final String holderPersoneName) {
final var anchorPersonUuid = personRepo.findPersonByOptionalNameLike(anchorPersonName).get(0).getUuid();
final var holderPersonUuid = personRepo.findPersonByOptionalNameLike(holderPersoneName).get(0).getUuid();
- final var givenRelation = relationRepo
+ final var givenRelation = relationrealRepo
.findRelationRelatedToPersonUuid(anchorPersonUuid)
.stream()
.filter(r -> r.getHolder().getUuid().equals(holderPersonUuid))
@@ -353,7 +353,7 @@ class HsOfficeRelationControllerAcceptanceTest extends ContextBasedTestWithClean
context.define("superuser-alex@hostsharing.net");
final var givenRelation = givenSomeTemporaryRelationBessler();
assertThat(givenRelation.getContact().getCaption()).isEqualTo("seventh contact");
- final var givenContact = contactRepo.findContactByOptionalCaptionLike("fourth").get(0);
+ final var givenContact = contactrealRepo.findContactByOptionalCaptionLike("fourth").get(0);
RestAssured // @formatter:off
.given()
@@ -379,7 +379,7 @@ class HsOfficeRelationControllerAcceptanceTest extends ContextBasedTestWithClean
// finally, the relation is actually updated
context.define("superuser-alex@hostsharing.net");
- assertThat(relationRepo.findByUuid(givenRelation.getUuid())).isPresent().get()
+ assertThat(relationrealRepo.findByUuid(givenRelation.getUuid())).isPresent().get()
.matches(rel -> {
assertThat(rel.getAnchor().getTradeName()).contains("Bessler");
assertThat(rel.getHolder().getFamilyName()).contains("Winkler");
@@ -408,7 +408,7 @@ class HsOfficeRelationControllerAcceptanceTest extends ContextBasedTestWithClean
.statusCode(204); // @formatter:on
// then the given relation is gone
- assertThat(relationRepo.findByUuid(givenRelation.getUuid())).isEmpty();
+ assertThat(relationrealRepo.findByUuid(givenRelation.getUuid())).isEmpty();
}
@Test
@@ -427,7 +427,7 @@ class HsOfficeRelationControllerAcceptanceTest extends ContextBasedTestWithClean
.statusCode(403); // @formatter:on
// then the given relation is still there
- assertThat(relationRepo.findByUuid(givenRelation.getUuid())).isNotEmpty();
+ assertThat(relationrealRepo.findByUuid(givenRelation.getUuid())).isNotEmpty();
}
@Test
@@ -446,24 +446,24 @@ class HsOfficeRelationControllerAcceptanceTest extends ContextBasedTestWithClean
.statusCode(404); // @formatter:on
// then the given relation is still there
- assertThat(relationRepo.findByUuid(givenRelation.getUuid())).isNotEmpty();
+ assertThat(relationrealRepo.findByUuid(givenRelation.getUuid())).isNotEmpty();
}
}
- private HsOfficeRelationEntity givenSomeTemporaryRelationBessler() {
+ private HsOfficeRelation givenSomeTemporaryRelationBessler() {
return jpaAttempt.transacted(() -> {
context.define("superuser-alex@hostsharing.net");
final var givenAnchorPerson = personRepo.findPersonByOptionalNameLike("Erben Bessler").get(0);
final var givenHolderPerson = personRepo.findPersonByOptionalNameLike("Winkler").get(0);
- final var givenContact = contactRepo.findContactByOptionalCaptionLike("seventh contact").get(0);
- final var newRelation = HsOfficeRelationEntity.builder()
+ final var givenContact = contactrealRepo.findContactByOptionalCaptionLike("seventh contact").get(0);
+ final var newRelation = HsOfficeRelationRealEntity.builder()
.type(HsOfficeRelationType.REPRESENTATIVE)
.anchor(givenAnchorPerson)
.holder(givenHolderPerson)
.contact(givenContact)
.build();
- assertThat(toCleanup(relationRepo.save(newRelation))).isEqualTo(newRelation);
+ assertThat(toCleanup(relationrealRepo.save(newRelation))).isEqualTo(newRelation);
return newRelation;
}).assertSuccessful().returnedValue();
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationEntityPatcherUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationPatcherUnitTest.java
similarity index 76%
rename from src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationEntityPatcherUnitTest.java
rename to src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationPatcherUnitTest.java
index 823d1c61..2fc9b95e 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationEntityPatcherUnitTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationPatcherUnitTest.java
@@ -1,6 +1,6 @@
package net.hostsharing.hsadminng.hs.office.relation;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealEntity;
import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeRelationPatchResource;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonEntity;
import net.hostsharing.hsadminng.rbac.test.PatchUnitTestBase;
@@ -21,9 +21,9 @@ import static org.mockito.Mockito.lenient;
@TestInstance(PER_CLASS)
@ExtendWith(MockitoExtension.class)
-class HsOfficeRelationEntityPatcherUnitTest extends PatchUnitTestBase<
+class HsOfficeRelationPatcherUnitTest extends PatchUnitTestBase<
HsOfficeRelationPatchResource,
- HsOfficeRelationEntity
+ HsOfficeRelation
> {
static final UUID INITIAL_RELATION_UUID = UUID.randomUUID();
@@ -34,8 +34,8 @@ class HsOfficeRelationEntityPatcherUnitTest extends PatchUnitTestBase<
@BeforeEach
void initMocks() {
- lenient().when(em.getReference(eq(HsOfficeContactEntity.class), any())).thenAnswer(invocation ->
- HsOfficeContactEntity.builder().uuid(invocation.getArgument(1)).build());
+ lenient().when(em.getReference(eq(HsOfficeContactRealEntity.class), any())).thenAnswer(invocation ->
+ HsOfficeContactRealEntity.builder().uuid(invocation.getArgument(1)).build());
}
final HsOfficePersonEntity givenInitialAnchorPerson = HsOfficePersonEntity.builder()
@@ -44,13 +44,13 @@ class HsOfficeRelationEntityPatcherUnitTest extends PatchUnitTestBase<
final HsOfficePersonEntity givenInitialHolderPerson = HsOfficePersonEntity.builder()
.uuid(UUID.randomUUID())
.build();
- final HsOfficeContactEntity givenInitialContact = HsOfficeContactEntity.builder()
+ final HsOfficeContactRealEntity givenInitialContact = HsOfficeContactRealEntity.builder()
.uuid(UUID.randomUUID())
.build();
@Override
- protected HsOfficeRelationEntity newInitialEntity() {
- final var entity = new HsOfficeRelationEntity();
+ protected HsOfficeRelation newInitialEntity() {
+ final var entity = new HsOfficeRelationRbacEntity();
entity.setUuid(INITIAL_RELATION_UUID);
entity.setType(HsOfficeRelationType.REPRESENTATIVE);
entity.setAnchor(givenInitialAnchorPerson);
@@ -65,7 +65,7 @@ class HsOfficeRelationEntityPatcherUnitTest extends PatchUnitTestBase<
}
@Override
- protected HsOfficeRelationEntityPatcher createPatcher(final HsOfficeRelationEntity relation) {
+ protected HsOfficeRelationEntityPatcher createPatcher(final HsOfficeRelation relation) {
return new HsOfficeRelationEntityPatcher(em, relation);
}
@@ -76,15 +76,13 @@ class HsOfficeRelationEntityPatcherUnitTest extends PatchUnitTestBase<
"contact",
HsOfficeRelationPatchResource::setContactUuid,
PATCHED_CONTACT_UUID,
- HsOfficeRelationEntity::setContact,
+ HsOfficeRelation::setContact,
newContact(PATCHED_CONTACT_UUID))
.notNullable()
);
}
- static HsOfficeContactEntity newContact(final UUID uuid) {
- final var newContact = new HsOfficeContactEntity();
- newContact.setUuid(uuid);
- return newContact;
+ static HsOfficeContactRealEntity newContact(final UUID uuid) {
+ return HsOfficeContactRealEntity.builder().uuid(uuid).build();
}
}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRepositoryIntegrationTest.java
index f6807b34..151d9967 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRepositoryIntegrationTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRepositoryIntegrationTest.java
@@ -1,7 +1,7 @@
package net.hostsharing.hsadminng.hs.office.relation;
import net.hostsharing.hsadminng.context.Context;
-import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRepository;
+import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRealRepository;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonRepository;
import net.hostsharing.hsadminng.rbac.test.ContextBasedTestWithCleanup;
import net.hostsharing.hsadminng.rbac.rbacgrant.RawRbacGrantRepository;
@@ -34,13 +34,13 @@ import static org.assertj.core.api.Assertions.assertThat;
class HsOfficeRelationRepositoryIntegrationTest extends ContextBasedTestWithCleanup {
@Autowired
- HsOfficeRelationRepository relationRepo;
+ HsOfficeRelationRbacRepository relationRbacRepo;
@Autowired
HsOfficePersonRepository personRepo;
@Autowired
- HsOfficeContactRepository contactRepo;
+ HsOfficeContactRealRepository contactrealRepo;
@Autowired
RawRbacRoleRepository rawRoleRepo;
@@ -64,35 +64,35 @@ class HsOfficeRelationRepositoryIntegrationTest extends ContextBasedTestWithClea
public void testHostsharingAdmin_withoutAssumedRole_canCreateNewRelation() {
// given
context("superuser-alex@hostsharing.net");
- final var count = relationRepo.count();
+ final var count = relationRbacRepo.count();
final var givenAnchorPerson = personRepo.findPersonByOptionalNameLike("Bessler").stream()
.filter(p -> p.getPersonType() == UNINCORPORATED_FIRM)
.findFirst().orElseThrow();
final var givenHolderPerson = personRepo.findPersonByOptionalNameLike("Paul").stream()
.filter(p -> p.getPersonType() == NATURAL_PERSON)
.findFirst().orElseThrow();
- final var givenContact = contactRepo.findContactByOptionalCaptionLike("fourth contact").stream()
+ final var givenContact = contactrealRepo.findContactByOptionalCaptionLike("fourth contact").stream()
.findFirst().orElseThrow();
// when
final var result = attempt(em, () -> {
- final var newRelation = HsOfficeRelationEntity.builder()
+ final var newRelation = HsOfficeRelationRbacEntity.builder()
.anchor(givenAnchorPerson)
.holder(givenHolderPerson)
.type(HsOfficeRelationType.SUBSCRIBER)
.mark("operations-announce")
.contact(givenContact)
.build();
- return toCleanup(relationRepo.save(newRelation));
+ return toCleanup(relationRbacRepo.save(newRelation));
});
// then
result.assertSuccessful();
- assertThat(result.returnedValue()).isNotNull().extracting(HsOfficeRelationEntity::getUuid).isNotNull();
+ assertThat(result.returnedValue()).isNotNull().extracting(HsOfficeRelation::getUuid).isNotNull();
assertThatRelationIsPersisted(result.returnedValue());
- assertThat(relationRepo.count()).isEqualTo(count + 1);
- final var stored = relationRepo.findByUuid(result.returnedValue().getUuid());
- assertThat(stored).isNotEmpty().map(HsOfficeRelationEntity::toString).get()
+ assertThat(relationRbacRepo.count()).isEqualTo(count + 1);
+ final var stored = relationRbacRepo.findByUuid(result.returnedValue().getUuid());
+ assertThat(stored).isNotEmpty().map(HsOfficeRelation::toString).get()
.isEqualTo("rel(anchor='UF Erben Bessler', type='SUBSCRIBER', mark='operations-announce', holder='NP Winkler, Paul', contact='fourth contact')");
}
@@ -111,15 +111,15 @@ class HsOfficeRelationRepositoryIntegrationTest extends ContextBasedTestWithClea
final var givenHolderPerson = personRepo.findPersonByOptionalNameLike("Bert").stream()
.filter(p -> p.getPersonType() == NATURAL_PERSON)
.findFirst().orElseThrow();
- final var givenContact = contactRepo.findContactByOptionalCaptionLike("fourth contact").stream()
+ final var givenContact = contactrealRepo.findContactByOptionalCaptionLike("fourth contact").stream()
.findFirst().orElseThrow();
- final var newRelation = HsOfficeRelationEntity.builder()
+ final var newRelation = HsOfficeRelationRbacEntity.builder()
.anchor(givenAnchorPerson)
.holder(givenHolderPerson)
.type(HsOfficeRelationType.REPRESENTATIVE)
.contact(givenContact)
.build();
- return toCleanup(relationRepo.save(newRelation));
+ return toCleanup(relationRbacRepo.save(newRelation));
});
// then
@@ -156,8 +156,8 @@ class HsOfficeRelationRepositoryIntegrationTest extends ContextBasedTestWithClea
);
}
- private void assertThatRelationIsPersisted(final HsOfficeRelationEntity saved) {
- final var found = relationRepo.findByUuid(saved.getUuid());
+ private void assertThatRelationIsPersisted(final HsOfficeRelation saved) {
+ final var found = relationRbacRepo.findByUuid(saved.getUuid());
assertThat(found).isNotEmpty().get().extracting(Object::toString).isEqualTo(saved.toString());
}
}
@@ -174,7 +174,7 @@ class HsOfficeRelationRepositoryIntegrationTest extends ContextBasedTestWithClea
.findFirst().orElseThrow();
// when
- final var result = relationRepo.findRelationRelatedToPersonUuid(person.getUuid());
+ final var result = relationRbacRepo.findRelationRelatedToPersonUuid(person.getUuid());
// then
allTheseRelationsAreReturned(
@@ -193,7 +193,7 @@ class HsOfficeRelationRepositoryIntegrationTest extends ContextBasedTestWithClea
.findFirst().orElseThrow();
// when:
- final var result = relationRepo.findRelationRelatedToPersonUuid(person.getUuid());
+ final var result = relationRbacRepo.findRelationRelatedToPersonUuid(person.getUuid());
// then:
exactlyTheseRelationsAreReturned(
@@ -219,13 +219,13 @@ class HsOfficeRelationRepositoryIntegrationTest extends ContextBasedTestWithClea
givenRelation,
"hs_office_person#ErbenBesslerMelBessler:ADMIN");
context("superuser-alex@hostsharing.net");
- final var givenContact = contactRepo.findContactByOptionalCaptionLike("sixth contact").stream().findFirst().orElseThrow();
+ final var givenContact = contactrealRepo.findContactByOptionalCaptionLike("sixth contact").stream().findFirst().orElseThrow();
// when
final var result = jpaAttempt.transacted(() -> {
context("superuser-alex@hostsharing.net");
givenRelation.setContact(givenContact);
- return toCleanup(relationRepo.save(givenRelation).load());
+ return toCleanup(relationRbacRepo.save(givenRelation).load());
});
// then
@@ -242,7 +242,7 @@ class HsOfficeRelationRepositoryIntegrationTest extends ContextBasedTestWithClea
result.returnedValue(),
"hs_office_contact#fifthcontact:ADMIN");
- relationRepo.deleteByUuid(givenRelation.getUuid());
+ relationRbacRepo.deleteByUuid(givenRelation.getUuid());
}
@Test
@@ -260,7 +260,7 @@ class HsOfficeRelationRepositoryIntegrationTest extends ContextBasedTestWithClea
final var result = jpaAttempt.transacted(() -> {
context("superuser-alex@hostsharing.net", "hs_office_relation#ErbenBesslerMelBessler-with-REPRESENTATIVE-BesslerAnita:AGENT");
givenRelation.setContact(null);
- return relationRepo.save(givenRelation);
+ return relationRbacRepo.save(givenRelation);
});
// then
@@ -283,7 +283,7 @@ class HsOfficeRelationRepositoryIntegrationTest extends ContextBasedTestWithClea
final var result = jpaAttempt.transacted(() -> {
context("superuser-alex@hostsharing.net", "hs_office_contact#ninthcontact:ADMIN");
givenRelation.setContact(null); // TODO
- return relationRepo.save(givenRelation);
+ return relationRbacRepo.save(givenRelation);
});
// then
@@ -291,16 +291,16 @@ class HsOfficeRelationRepositoryIntegrationTest extends ContextBasedTestWithClea
"[403] Subject ", " is not allowed to update hs_office_relation uuid");
}
- private void assertThatRelationActuallyInDatabase(final HsOfficeRelationEntity saved) {
- final var found = relationRepo.findByUuid(saved.getUuid());
+ private void assertThatRelationActuallyInDatabase(final HsOfficeRelation saved) {
+ final var found = relationRbacRepo.findByUuid(saved.getUuid());
assertThat(found).isNotEmpty().get()
.isNotSameAs(saved)
- .extracting(HsOfficeRelationEntity::toString)
+ .extracting(HsOfficeRelation::toString)
.isEqualTo(saved.toString());
}
private void assertThatRelationIsVisibleForUserWithRole(
- final HsOfficeRelationEntity entity,
+ final HsOfficeRelation entity,
final String assumedRoles) {
jpaAttempt.transacted(() -> {
context("superuser-alex@hostsharing.net", assumedRoles);
@@ -309,11 +309,11 @@ class HsOfficeRelationRepositoryIntegrationTest extends ContextBasedTestWithClea
}
private void assertThatRelationIsNotVisibleForUserWithRole(
- final HsOfficeRelationEntity entity,
+ final HsOfficeRelation entity,
final String assumedRoles) {
jpaAttempt.transacted(() -> {
context("superuser-alex@hostsharing.net", assumedRoles);
- final var found = relationRepo.findByUuid(entity.getUuid());
+ final var found = relationRbacRepo.findByUuid(entity.getUuid());
assertThat(found).isEmpty();
}).assertSuccessful();
}
@@ -332,14 +332,14 @@ class HsOfficeRelationRepositoryIntegrationTest extends ContextBasedTestWithClea
// when
final var result = jpaAttempt.transacted(() -> {
context("superuser-alex@hostsharing.net");
- relationRepo.deleteByUuid(givenRelation.getUuid());
+ relationRbacRepo.deleteByUuid(givenRelation.getUuid());
});
// then
result.assertSuccessful();
assertThat(jpaAttempt.transacted(() -> {
context("superuser-fran@hostsharing.net", null);
- return relationRepo.findByUuid(givenRelation.getUuid());
+ return relationRbacRepo.findByUuid(givenRelation.getUuid());
}).assertSuccessful().returnedValue()).isEmpty();
}
@@ -353,8 +353,8 @@ class HsOfficeRelationRepositoryIntegrationTest extends ContextBasedTestWithClea
// when
final var result = jpaAttempt.transacted(() -> {
context("contact-admin@eleventhcontact.example.com");
- assertThat(relationRepo.findByUuid(givenRelation.getUuid())).isPresent();
- relationRepo.deleteByUuid(givenRelation.getUuid());
+ assertThat(relationRbacRepo.findByUuid(givenRelation.getUuid())).isPresent();
+ relationRbacRepo.deleteByUuid(givenRelation.getUuid());
});
// then
@@ -363,7 +363,7 @@ class HsOfficeRelationRepositoryIntegrationTest extends ContextBasedTestWithClea
"[403] Subject ", " not allowed to delete hs_office_relation");
assertThat(jpaAttempt.transacted(() -> {
context("superuser-alex@hostsharing.net");
- return relationRepo.findByUuid(givenRelation.getUuid());
+ return relationRbacRepo.findByUuid(givenRelation.getUuid());
}).assertSuccessful().returnedValue()).isPresent(); // still there
}
@@ -379,7 +379,7 @@ class HsOfficeRelationRepositoryIntegrationTest extends ContextBasedTestWithClea
// when
final var result = jpaAttempt.transacted(() -> {
context("superuser-alex@hostsharing.net");
- return relationRepo.deleteByUuid(givenRelation.getUuid());
+ return relationRbacRepo.deleteByUuid(givenRelation.getUuid());
});
// then
@@ -408,36 +408,36 @@ class HsOfficeRelationRepositoryIntegrationTest extends ContextBasedTestWithClea
"[creating relation test-data FirstGmbH-Firby, hs_office_relation, INSERT]");
}
- private HsOfficeRelationEntity givenSomeTemporaryRelationBessler(final String holderPerson, final String contact) {
+ private HsOfficeRelationRbacEntity givenSomeTemporaryRelationBessler(final String holderPerson, final String contact) {
return jpaAttempt.transacted(() -> {
context("superuser-alex@hostsharing.net");
final var givenAnchorPerson = personRepo.findPersonByOptionalNameLike("Erben Bessler").get(0);
final var givenHolderPerson = personRepo.findPersonByOptionalNameLike(holderPerson).get(0);
- final var givenContact = contactRepo.findContactByOptionalCaptionLike(contact).get(0);
- final var newRelation = HsOfficeRelationEntity.builder()
+ final var givenContact = contactrealRepo.findContactByOptionalCaptionLike(contact).get(0);
+ final var newRelation = HsOfficeRelationRbacEntity.builder()
.type(HsOfficeRelationType.REPRESENTATIVE)
.anchor(givenAnchorPerson)
.holder(givenHolderPerson)
.contact(givenContact)
.build();
- return toCleanup(relationRepo.save(newRelation));
+ return toCleanup(relationRbacRepo.save(newRelation));
}).assertSuccessful().returnedValue();
}
void exactlyTheseRelationsAreReturned(
- final List actualResult,
+ final List actualResult,
final String... relationNames) {
assertThat(actualResult)
- .extracting(HsOfficeRelationEntity::toString)
+ .extracting(HsOfficeRelation::toString)
.containsExactlyInAnyOrder(relationNames);
}
void allTheseRelationsAreReturned(
- final List actualResult,
+ final List actualResult,
final String... relationNames) {
assertThat(actualResult)
- .extracting(HsOfficeRelationEntity::toString)
+ .extracting(HsOfficeRelation::toString)
.contains(relationNames);
}
}
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationEntityUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationUnitTest.java
similarity index 90%
rename from src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationEntityUnitTest.java
rename to src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationUnitTest.java
index bf2a7ed3..a422a8b6 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationEntityUnitTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationUnitTest.java
@@ -6,7 +6,7 @@ import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
-class HsOfficeRelationEntityUnitTest {
+class HsOfficeRelationUnitTest {
private HsOfficePersonEntity anchor = HsOfficePersonEntity.builder()
.personType(HsOfficePersonType.LEGAL_PERSON)
@@ -20,7 +20,7 @@ class HsOfficeRelationEntityUnitTest {
@Test
void toStringReturnsAllProperties() {
- final var given = HsOfficeRelationEntity.builder()
+ final var given = HsOfficeRelationRbacEntity.builder()
.type(HsOfficeRelationType.SUBSCRIBER)
.mark("members-announce")
.anchor(anchor)
@@ -32,7 +32,7 @@ class HsOfficeRelationEntityUnitTest {
@Test
void toShortString() {
- final var given = HsOfficeRelationEntity.builder()
+ final var given = HsOfficeRelationRbacEntity.builder()
.type(HsOfficeRelationType.REPRESENTATIVE)
.anchor(anchor)
.holder(holder)
diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/sepamandate/HsOfficeSepaMandateControllerAcceptanceTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/sepamandate/HsOfficeSepaMandateControllerAcceptanceTest.java
index c0f68451..7d7e2c3a 100644
--- a/src/test/java/net/hostsharing/hsadminng/hs/office/sepamandate/HsOfficeSepaMandateControllerAcceptanceTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/hs/office/sepamandate/HsOfficeSepaMandateControllerAcceptanceTest.java
@@ -195,7 +195,7 @@ class HsOfficeSepaMandateControllerAcceptanceTest extends ContextBasedTestWithCl
.post("http://localhost/api/hs/office/sepamandates")
.then().log().all().assertThat()
.statusCode(400)
- .body("message", is("Unable to find BankAccount with uuid 00000000-0000-0000-0000-000000000000"));
+ .body("message", is("ERROR: [400] Unable to find BankAccount by uuid: 00000000-0000-0000-0000-000000000000"));
// @formatter:on
}
@@ -225,7 +225,7 @@ class HsOfficeSepaMandateControllerAcceptanceTest extends ContextBasedTestWithCl
.post("http://localhost/api/hs/office/sepamandates")
.then().log().all().assertThat()
.statusCode(400)
- .body("message", is("Unable to find Debitor with uuid 00000000-0000-0000-0000-000000000000"));
+ .body("message", is("ERROR: [400] Unable to find Debitor by uuid: 00000000-0000-0000-0000-000000000000"));
// @formatter:on
}
}
diff --git a/src/test/java/net/hostsharing/hsadminng/rbac/test/ContextBasedTestWithCleanup.java b/src/test/java/net/hostsharing/hsadminng/rbac/test/ContextBasedTestWithCleanup.java
index 5e9d8347..771b7e1f 100644
--- a/src/test/java/net/hostsharing/hsadminng/rbac/test/ContextBasedTestWithCleanup.java
+++ b/src/test/java/net/hostsharing/hsadminng/rbac/test/ContextBasedTestWithCleanup.java
@@ -1,7 +1,7 @@
package net.hostsharing.hsadminng.rbac.test;
import net.hostsharing.hsadminng.rbac.context.ContextBasedTest;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import net.hostsharing.hsadminng.rbac.rbacgrant.RbacGrantEntity;
import net.hostsharing.hsadminng.rbac.rbacgrant.RbacGrantRepository;
import net.hostsharing.hsadminng.rbac.rbacgrant.RbacGrantsDiagramService;
@@ -50,7 +50,7 @@ public abstract class ContextBasedTestWithCleanup extends ContextBasedTest {
@Autowired
JpaAttempt jpaAttempt;
- private TreeMap> entitiesToCleanup = new TreeMap<>();
+ private TreeMap> entitiesToCleanup = new TreeMap<>();
private static Long latestIntialTestDataSerialId;
private static boolean countersInitialized = false;
@@ -64,19 +64,19 @@ public abstract class ContextBasedTestWithCleanup extends ContextBasedTest {
private TestInfo testInfo;
- public T refresh(final T entity) {
+ public T refresh(final T entity) {
final var merged = em.merge(entity);
em.refresh(merged);
return merged;
}
- public UUID toCleanup(final Class extends RbacObject> entityClass, final UUID uuidToCleanup) {
+ public UUID toCleanup(final Class extends BaseEntity> entityClass, final UUID uuidToCleanup) {
out.println("toCleanup(" + entityClass.getSimpleName() + ", " + uuidToCleanup + ")");
entitiesToCleanup.put(uuidToCleanup, entityClass);
return uuidToCleanup;
}
- public E toCleanup(final E entity) {
+ public E toCleanup(final E entity) {
out.println("toCleanup(" + entity.getClass() + ", " + entity.getUuid());
if ( entity.getUuid() == null ) {
throw new IllegalArgumentException("only persisted entities with valid uuid allowed");
@@ -85,7 +85,7 @@ public abstract class ContextBasedTestWithCleanup extends ContextBasedTest {
return entity;
}
- protected void cleanupAllNew(final Class extends RbacObject> entityClass) {
+ protected void cleanupAllNew(final Class extends BaseEntity> entityClass) {
if (initialRbacObjects == null) {
out.println("skipping cleanupAllNew: " + entityClass.getSimpleName());
return; // TODO: seems @AfterEach is called without any @BeforeEach
diff --git a/src/test/java/net/hostsharing/hsadminng/rbac/test/EntityList.java b/src/test/java/net/hostsharing/hsadminng/rbac/test/EntityList.java
index c504db61..42469ea7 100644
--- a/src/test/java/net/hostsharing/hsadminng/rbac/test/EntityList.java
+++ b/src/test/java/net/hostsharing/hsadminng/rbac/test/EntityList.java
@@ -1,6 +1,6 @@
package net.hostsharing.hsadminng.rbac.test;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import java.util.List;
@@ -8,7 +8,7 @@ import static org.assertj.core.api.Assertions.assertThat;
public class EntityList {
- public static E one(final List entities) {
+ public static E one(final List entities) {
assertThat(entities).hasSize(1);
return entities.stream().findFirst().orElseThrow();
}
diff --git a/src/test/java/net/hostsharing/hsadminng/rbac/test/MapperUnitTest.java b/src/test/java/net/hostsharing/hsadminng/rbac/test/MapperUnitTest.java
index f1bc0cc3..0e01cd05 100644
--- a/src/test/java/net/hostsharing/hsadminng/rbac/test/MapperUnitTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/rbac/test/MapperUnitTest.java
@@ -1,7 +1,7 @@
package net.hostsharing.hsadminng.rbac.test;
import lombok.*;
-import net.hostsharing.hsadminng.errors.DisplayName;
+import net.hostsharing.hsadminng.errors.DisplayAs;
import net.hostsharing.hsadminng.mapper.Mapper;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -88,7 +88,7 @@ class MapperUnitTest {
);
assertThat(exception).isInstanceOf(ValidationException.class)
- .hasMessage("Unable to find SubTargetBean1 with uuid " + GIVEN_UUID);
+ .hasMessage("Unable to find SubTargetBean1 by uuid: " + GIVEN_UUID);
}
@Test
@@ -101,7 +101,7 @@ class MapperUnitTest {
);
assertThat(exception).isInstanceOf(ValidationException.class)
- .hasMessage("Unable to find SomeDisplayName with uuid " + GIVEN_UUID);
+ .hasMessage("Unable to find SomeDisplayName by uuid: " + GIVEN_UUID);
}
@Test
@@ -217,7 +217,7 @@ class MapperUnitTest {
@Setter
@NoArgsConstructor
@AllArgsConstructor
- @DisplayName("SomeDisplayName")
+ @DisplayAs("SomeDisplayName")
public static class SubTargetBean2 {
private UUID uuid;
diff --git a/src/test/java/net/hostsharing/hsadminng/rbac/test/PatchUnitTestBase.java b/src/test/java/net/hostsharing/hsadminng/rbac/test/PatchUnitTestBase.java
index f2764386..d446258b 100644
--- a/src/test/java/net/hostsharing/hsadminng/rbac/test/PatchUnitTestBase.java
+++ b/src/test/java/net/hostsharing/hsadminng/rbac/test/PatchUnitTestBase.java
@@ -1,6 +1,6 @@
package net.hostsharing.hsadminng.rbac.test;
-import net.hostsharing.hsadminng.rbac.rbacobject.RbacObject;
+import net.hostsharing.hsadminng.rbac.rbacobject.BaseEntity;
import net.hostsharing.hsadminng.mapper.EntityPatcher;
import org.junit.jupiter.api.Named;
import org.junit.jupiter.api.Test;
@@ -233,7 +233,7 @@ public abstract class PatchUnitTestBase {
}
}
- protected static class JsonNullableProperty extends Property {
+ protected static class JsonNullableProperty extends Property {
private final BiConsumer> resourceSetter;
public final RV givenPatchValue;
diff --git a/src/test/java/net/hostsharing/hsadminng/rbac/test/cust/TestCustomerControllerAcceptanceTest.java b/src/test/java/net/hostsharing/hsadminng/rbac/test/cust/TestCustomerControllerAcceptanceTest.java
index 7d0d8e51..2d6d5a70 100644
--- a/src/test/java/net/hostsharing/hsadminng/rbac/test/cust/TestCustomerControllerAcceptanceTest.java
+++ b/src/test/java/net/hostsharing/hsadminng/rbac/test/cust/TestCustomerControllerAcceptanceTest.java
@@ -175,7 +175,8 @@ class TestCustomerControllerAcceptanceTest {
.statusCode(403)
.contentType(ContentType.JSON)
.statusCode(403)
- .body("message", containsString("insert into test_customer not allowed for current subjects {test_customer#xxx:ADMIN}"));
+ .body("message", containsString("ERROR: [403] insert into test_customer "))
+ .body("message", containsString(" not allowed for current subjects {test_customer#xxx:ADMIN}"));
// @formatter:on
// finally, the new customer was not created
@@ -204,7 +205,8 @@ class TestCustomerControllerAcceptanceTest {
.statusCode(403)
.contentType(ContentType.JSON)
.statusCode(403)
- .body("message", containsString("ERROR: [403] insert into test_customer not allowed for current subjects {customer-admin@yyy.example.com}"));
+ .body("message", containsString("ERROR: [403] insert into test_customer "))
+ .body("message", containsString(" not allowed for current subjects"));
// @formatter:on
// finally, the new customer was not created