From fccf2ea9f6731dc97bec642b14c67399c44966df Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Tue, 5 Nov 2024 22:17:58 +0100 Subject: [PATCH] OZG-6990 [wip] add client attribute service --- .../attributes/OzgCloudAccessPermission.java | 29 ++ .../attributes/OzgCloudAttributesService.java | 38 +++ .../OzgCloudBooleanClientAttribute.java | 32 +++ .../attributes/OzgCloudClientAttribute.java | 41 +++ .../OzgCloudDoubleClientAttribute.java | 31 +++ .../OzgCloudLongClientAttribute.java | 31 +++ .../OzgCloudStringClientAttribute.java | 31 +++ .../grpc/GrpcOzgCloudAttributesService.java | 79 ++++++ .../grpc/OzgCloudClientAttributeMapper.java | 157 +++++++++++ .../OzgCloudClientAttributeTestFactory.java | 91 ++++++ .../GrpcOzgCloudAttributesServiceTest.java | 262 ++++++++++++++++++ .../OzgCloudClientAttributeMapperTest.java | 31 +++ 12 files changed, 853 insertions(+) create mode 100644 api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudAccessPermission.java create mode 100644 api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudAttributesService.java create mode 100644 api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudBooleanClientAttribute.java create mode 100644 api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudClientAttribute.java create mode 100644 api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudDoubleClientAttribute.java create mode 100644 api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudLongClientAttribute.java create mode 100644 api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudStringClientAttribute.java create mode 100644 api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/grpc/GrpcOzgCloudAttributesService.java create mode 100644 api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/grpc/OzgCloudClientAttributeMapper.java create mode 100644 api-lib-core/src/test/java/de/ozgcloud/apilib/attributes/OzgCloudClientAttributeTestFactory.java create mode 100644 api-lib-core/src/test/java/de/ozgcloud/apilib/attributes/grpc/GrpcOzgCloudAttributesServiceTest.java create mode 100644 api-lib-core/src/test/java/de/ozgcloud/apilib/attributes/grpc/OzgCloudClientAttributeMapperTest.java diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudAccessPermission.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudAccessPermission.java new file mode 100644 index 0000000..101c88f --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudAccessPermission.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +package de.ozgcloud.apilib.attributes; + +public enum OzgCloudAccessPermission { + PRIVATE, READ_ONLY, READ_WRITE +} diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudAttributesService.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudAttributesService.java new file mode 100644 index 0000000..5ae843d --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudAttributesService.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +package de.ozgcloud.apilib.attributes; + +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; + +public interface OzgCloudAttributesService { + + void setClientAttribute(OzgCloudBooleanClientAttribute clientAttribute, OzgCloudVorgangId vorgangId); + + void setClientAttribute(OzgCloudStringClientAttribute clientAttribute, OzgCloudVorgangId vorgangId); + + void setClientAttribute(OzgCloudLongClientAttribute clientAttribute, OzgCloudVorgangId vorgangId); + + void setClientAttribute(OzgCloudDoubleClientAttribute clientAttribute, OzgCloudVorgangId vorgangId); +} diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudBooleanClientAttribute.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudBooleanClientAttribute.java new file mode 100644 index 0000000..4c2eb6f --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudBooleanClientAttribute.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +package de.ozgcloud.apilib.attributes; + +import lombok.experimental.SuperBuilder; + +@SuperBuilder +public final class OzgCloudBooleanClientAttribute extends OzgCloudClientAttribute<Boolean> { + +} diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudClientAttribute.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudClientAttribute.java new file mode 100644 index 0000000..0c85dc9 --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudClientAttribute.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.apilib.attributes; + +import lombok.Builder; +import lombok.Getter; +import lombok.experimental.SuperBuilder; + +@SuperBuilder +@Getter +abstract sealed class OzgCloudClientAttribute<T> permits OzgCloudBooleanClientAttribute, OzgCloudStringClientAttribute, + OzgCloudLongClientAttribute, OzgCloudDoubleClientAttribute { + + private String clientName; + private String attributeName; + @Builder.Default + private OzgCloudAccessPermission access = OzgCloudAccessPermission.PRIVATE; + private T value; + +} diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudDoubleClientAttribute.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudDoubleClientAttribute.java new file mode 100644 index 0000000..27af415 --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudDoubleClientAttribute.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +package de.ozgcloud.apilib.attributes; + +import lombok.experimental.SuperBuilder; + +@SuperBuilder +public final class OzgCloudDoubleClientAttribute extends OzgCloudClientAttribute<Double> { +} diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudLongClientAttribute.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudLongClientAttribute.java new file mode 100644 index 0000000..9e3f99f --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudLongClientAttribute.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +package de.ozgcloud.apilib.attributes; + +import lombok.experimental.SuperBuilder; + +@SuperBuilder +public final class OzgCloudLongClientAttribute extends OzgCloudClientAttribute<Long> { +} diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudStringClientAttribute.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudStringClientAttribute.java new file mode 100644 index 0000000..b33498f --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/OzgCloudStringClientAttribute.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +package de.ozgcloud.apilib.attributes; + +import lombok.experimental.SuperBuilder; + +@SuperBuilder +public final class OzgCloudStringClientAttribute extends OzgCloudClientAttribute<String> { +} diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/grpc/GrpcOzgCloudAttributesService.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/grpc/GrpcOzgCloudAttributesService.java new file mode 100644 index 0000000..247ccc7 --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/grpc/GrpcOzgCloudAttributesService.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +package de.ozgcloud.apilib.attributes.grpc; + +import de.ozgcloud.apilib.attributes.OzgCloudAttributesService; +import de.ozgcloud.apilib.attributes.OzgCloudBooleanClientAttribute; +import de.ozgcloud.apilib.attributes.OzgCloudDoubleClientAttribute; +import de.ozgcloud.apilib.attributes.OzgCloudLongClientAttribute; +import de.ozgcloud.apilib.attributes.OzgCloudStringClientAttribute; +import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextAttachingInterceptor; +import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextProvider; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; +import de.ozgcloud.vorgang.grpc.clientAttribute.ClientAttributeServiceGrpc.ClientAttributeServiceBlockingStub; +import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; +import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcSetClientAttributeRequest; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +public class GrpcOzgCloudAttributesService implements OzgCloudAttributesService { + + private final ClientAttributeServiceBlockingStub serviceBlockingStub; + private final OzgCloudClientAttributeMapper clientAttributeMapper; + private final OzgCloudCallContextProvider contextProvider; + + @Override + public void setClientAttribute(final OzgCloudBooleanClientAttribute clientAttribute, OzgCloudVorgangId vorgangId) { + setClientAttribute(clientAttributeMapper.toGrpc(clientAttribute), vorgangId); + } + + @Override + public void setClientAttribute(final OzgCloudStringClientAttribute clientAttribute, OzgCloudVorgangId vorgangId) { + setClientAttribute(clientAttributeMapper.toGrpc(clientAttribute), vorgangId); + } + + @Override + public void setClientAttribute(final OzgCloudLongClientAttribute clientAttribute, OzgCloudVorgangId vorgangId) { + setClientAttribute(clientAttributeMapper.toGrpc(clientAttribute), vorgangId); + } + + @Override + public void setClientAttribute(final OzgCloudDoubleClientAttribute clientAttribute, OzgCloudVorgangId vorgangId) { + setClientAttribute(clientAttributeMapper.toGrpc(clientAttribute), vorgangId); + } + + void setClientAttribute(GrpcClientAttribute clientAttribute, OzgCloudVorgangId vorgangId) { + getAttributesServiceStub().set(buildRequest(clientAttribute, vorgangId.toString())); + } + + GrpcSetClientAttributeRequest buildRequest(GrpcClientAttribute attribute, String vorgangId) { + return GrpcSetClientAttributeRequest.newBuilder().setVorgangId(vorgangId).setAttribute(attribute).build(); + } + + ClientAttributeServiceBlockingStub getAttributesServiceStub() { + return serviceBlockingStub.withInterceptors(new OzgCloudCallContextAttachingInterceptor(contextProvider)); + } + +} diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/grpc/OzgCloudClientAttributeMapper.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/grpc/OzgCloudClientAttributeMapper.java new file mode 100644 index 0000000..449f981 --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/attributes/grpc/OzgCloudClientAttributeMapper.java @@ -0,0 +1,157 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +package de.ozgcloud.apilib.attributes.grpc; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; +import org.mapstruct.ReportingPolicy; + +import de.ozgcloud.apilib.attributes.OzgCloudBooleanClientAttribute; +import de.ozgcloud.apilib.attributes.OzgCloudDoubleClientAttribute; +import de.ozgcloud.apilib.attributes.OzgCloudLongClientAttribute; +import de.ozgcloud.apilib.attributes.OzgCloudStringClientAttribute; +import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; +import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue; + +@Mapper(nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, unmappedTargetPolicy = ReportingPolicy.WARN) +public interface OzgCloudClientAttributeMapper { + + @Mapping(target = "valueOrBuilder", ignore = true) + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "mergeValue", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "defaultInstanceForType", ignore = true) + @Mapping(target = "clientNameBytes", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "clearField", ignore = true) + @Mapping(target = "attributeNameBytes", ignore = true) + @Mapping(target = "allFields", ignore = true) + @Mapping(target = "accessValue", ignore = true) + GrpcClientAttribute toGrpc(OzgCloudBooleanClientAttribute attribute); + + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "stringValueBytes", ignore = true) + @Mapping(target = "stringValue", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "intValue", ignore = true) + @Mapping(target = "doubleValue", ignore = true) + @Mapping(target = "defaultInstanceForType", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "clearField", ignore = true) + @Mapping(target = "allFields", ignore = true) + + @Mapping(target = "boolValue", source = "value") + GrpcClientAttributeValue toValue(Boolean value); + + @Mapping(target = "valueOrBuilder", ignore = true) + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "mergeValue", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "defaultInstanceForType", ignore = true) + @Mapping(target = "clientNameBytes", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "clearField", ignore = true) + @Mapping(target = "attributeNameBytes", ignore = true) + @Mapping(target = "allFields", ignore = true) + @Mapping(target = "accessValue", ignore = true) + GrpcClientAttribute toGrpc(OzgCloudStringClientAttribute attribute); + + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "stringValueBytes", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "intValue", ignore = true) + @Mapping(target = "doubleValue", ignore = true) + @Mapping(target = "defaultInstanceForType", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "clearField", ignore = true) + @Mapping(target = "boolValue", ignore = true) + @Mapping(target = "allFields", ignore = true) + + @Mapping(target = "stringValue", source = "value") + GrpcClientAttributeValue toValue(String value); + + @Mapping(target = "valueOrBuilder", ignore = true) + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "mergeValue", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "defaultInstanceForType", ignore = true) + @Mapping(target = "clientNameBytes", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "clearField", ignore = true) + @Mapping(target = "attributeNameBytes", ignore = true) + @Mapping(target = "allFields", ignore = true) + @Mapping(target = "accessValue", ignore = true) + GrpcClientAttribute toGrpc(OzgCloudLongClientAttribute attribute); + + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "stringValueBytes", ignore = true) + @Mapping(target = "stringValue", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "doubleValue", ignore = true) + @Mapping(target = "defaultInstanceForType", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "clearField", ignore = true) + @Mapping(target = "boolValue", ignore = true) + @Mapping(target = "allFields", ignore = true) + + @Mapping(target = "intValue", source = "value") + GrpcClientAttributeValue toValue(Long value); + + @Mapping(target = "valueOrBuilder", ignore = true) + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "mergeValue", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "defaultInstanceForType", ignore = true) + @Mapping(target = "clientNameBytes", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "clearField", ignore = true) + @Mapping(target = "attributeNameBytes", ignore = true) + @Mapping(target = "allFields", ignore = true) + @Mapping(target = "accessValue", ignore = true) + GrpcClientAttribute toGrpc(OzgCloudDoubleClientAttribute attribute); + + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "stringValueBytes", ignore = true) + @Mapping(target = "stringValue", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "intValue", ignore = true) + @Mapping(target = "defaultInstanceForType", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "clearField", ignore = true) + @Mapping(target = "boolValue", ignore = true) + @Mapping(target = "allFields", ignore = true) + + @Mapping(target = "doubleValue", source = "value") + GrpcClientAttributeValue toValue(Double value); +} diff --git a/api-lib-core/src/test/java/de/ozgcloud/apilib/attributes/OzgCloudClientAttributeTestFactory.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/attributes/OzgCloudClientAttributeTestFactory.java new file mode 100644 index 0000000..244bbcd --- /dev/null +++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/attributes/OzgCloudClientAttributeTestFactory.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +package de.ozgcloud.apilib.attributes; + +import com.thedeanda.lorem.LoremIpsum; + +import de.ozgcloud.apilib.attributes.OzgCloudBooleanClientAttribute.OzgCloudBooleanClientAttributeBuilder; +import de.ozgcloud.apilib.attributes.OzgCloudDoubleClientAttribute.OzgCloudDoubleClientAttributeBuilder; +import de.ozgcloud.apilib.attributes.OzgCloudLongClientAttribute.OzgCloudLongClientAttributeBuilder; +import de.ozgcloud.apilib.attributes.OzgCloudStringClientAttribute.OzgCloudStringClientAttributeBuilder; + +public class OzgCloudClientAttributeTestFactory { + + public static final String CLIENT = LoremIpsum.getInstance().getWords(1) + "-Client"; + public static final String ATTRIBUTE_NAME = LoremIpsum.getInstance().getWords(1); + public static final OzgCloudAccessPermission ACCESS_PERMISSION = OzgCloudAccessPermission.READ_ONLY; + public static final Boolean BOOLEAN_VALUE = true; + public static final String STRING_VALUE = LoremIpsum.getInstance().getWords(1); + public static final Long LONG_VALUE = 100L; + public static final Double DOUBLE_VALUE = 2.4; + + public static OzgCloudBooleanClientAttribute createBoolean() { + return createBooleanBuilder().build(); + } + + public static OzgCloudBooleanClientAttributeBuilder createBooleanBuilder() { + return OzgCloudBooleanClientAttribute.builder() + .clientName(CLIENT) + .attributeName(ATTRIBUTE_NAME) + .access(ACCESS_PERMISSION) + .value(BOOLEAN_VALUE); + } + + public static OzgCloudStringClientAttribute createString() { + return createStringBuilder().build(); + } + + public static OzgCloudStringClientAttributeBuilder createStringBuilder() { + return OzgCloudStringClientAttribute.builder() + .clientName(CLIENT) + .attributeName(ATTRIBUTE_NAME) + .access(ACCESS_PERMISSION) + .value(STRING_VALUE); + } + + public static OzgCloudLongClientAttribute createLong() { + return createLongBuilder().build(); + } + + public static OzgCloudLongClientAttributeBuilder createLongBuilder() { + return OzgCloudLongClientAttribute.builder() + .clientName(CLIENT) + .attributeName(ATTRIBUTE_NAME) + .access(ACCESS_PERMISSION) + .value(LONG_VALUE); + } + + public static OzgCloudDoubleClientAttribute createDouble() { + return createDoubleBuilder().build(); + } + + public static OzgCloudDoubleClientAttributeBuilder createDoubleBuilder() { + return OzgCloudDoubleClientAttribute.builder() + .clientName(CLIENT) + .attributeName(ATTRIBUTE_NAME) + .access(ACCESS_PERMISSION) + .value(DOUBLE_VALUE); + } +} diff --git a/api-lib-core/src/test/java/de/ozgcloud/apilib/attributes/grpc/GrpcOzgCloudAttributesServiceTest.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/attributes/grpc/GrpcOzgCloudAttributesServiceTest.java new file mode 100644 index 0000000..dbd0a74 --- /dev/null +++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/attributes/grpc/GrpcOzgCloudAttributesServiceTest.java @@ -0,0 +1,262 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +package de.ozgcloud.apilib.attributes.grpc; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.springframework.test.util.ReflectionTestUtils; + +import de.ozgcloud.apilib.attributes.OzgCloudBooleanClientAttribute; +import de.ozgcloud.apilib.attributes.OzgCloudClientAttributeTestFactory; +import de.ozgcloud.apilib.attributes.OzgCloudDoubleClientAttribute; +import de.ozgcloud.apilib.attributes.OzgCloudLongClientAttribute; +import de.ozgcloud.apilib.attributes.OzgCloudStringClientAttribute; +import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextAttachingInterceptor; +import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextProvider; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangTestFactory; +import de.ozgcloud.vorgang.grpc.clientAttribute.ClientAttributeServiceGrpc.ClientAttributeServiceBlockingStub; +import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; +import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcSetClientAttributeRequest; + +class GrpcOzgCloudAttributesServiceTest { + + @Spy + @InjectMocks + private GrpcOzgCloudAttributesService service; + + @Mock + private ClientAttributeServiceBlockingStub serviceBlockingStub; + @Mock + private OzgCloudClientAttributeMapper clientAttributeMapper; + @Mock + private OzgCloudCallContextProvider contextProvider; + @Mock + private GrpcClientAttribute grpcClientAttribute; + + @Nested + class TestSetClientAttribute { + + @BeforeEach + void init() { + doNothing().when(service).setClientAttribute(any(GrpcClientAttribute.class), any()); + } + + @Nested + class TestBoolean { + + private static final OzgCloudBooleanClientAttribute CLIENT_ATTRIBUTE = OzgCloudClientAttributeTestFactory.createBoolean(); + + @BeforeEach + void init() { + doReturn(grpcClientAttribute).when(clientAttributeMapper).toGrpc(any(OzgCloudBooleanClientAttribute.class)); + } + + @Test + void shouldCallClientAttributeMapper() { + service.setClientAttribute(CLIENT_ATTRIBUTE, OzgCloudVorgangTestFactory.ID); + + verify(clientAttributeMapper).toGrpc(CLIENT_ATTRIBUTE); + } + + @Test + void shouldCallServiceBlockingStub() { + service.setClientAttribute(CLIENT_ATTRIBUTE, OzgCloudVorgangTestFactory.ID); + + verify(service).setClientAttribute(grpcClientAttribute, OzgCloudVorgangTestFactory.ID); + } + } + + @Nested + class TestString { + + private static final OzgCloudStringClientAttribute CLIENT_ATTRIBUTE = OzgCloudClientAttributeTestFactory.createString(); + + @BeforeEach + void init() { + doReturn(grpcClientAttribute).when(clientAttributeMapper).toGrpc(any(OzgCloudStringClientAttribute.class)); + } + + @Test + void shouldCallClientAttributeMapper() { + service.setClientAttribute(CLIENT_ATTRIBUTE, OzgCloudVorgangTestFactory.ID); + + verify(clientAttributeMapper).toGrpc(CLIENT_ATTRIBUTE); + } + + @Test + void shouldCallServiceBlockingStub() { + service.setClientAttribute(CLIENT_ATTRIBUTE, OzgCloudVorgangTestFactory.ID); + + verify(service).setClientAttribute(grpcClientAttribute, OzgCloudVorgangTestFactory.ID); + } + } + + @Nested + class TestLong { + + private static final OzgCloudLongClientAttribute CLIENT_ATTRIBUTE = OzgCloudClientAttributeTestFactory.createLong(); + + @BeforeEach + void init() { + doReturn(grpcClientAttribute).when(clientAttributeMapper).toGrpc(any(OzgCloudLongClientAttribute.class)); + } + + @Test + void shouldCallClientAttributeMapper() { + service.setClientAttribute(CLIENT_ATTRIBUTE, OzgCloudVorgangTestFactory.ID); + + verify(clientAttributeMapper).toGrpc(CLIENT_ATTRIBUTE); + } + + @Test + void shouldCallServiceBlockingStub() { + service.setClientAttribute(CLIENT_ATTRIBUTE, OzgCloudVorgangTestFactory.ID); + + verify(service).setClientAttribute(grpcClientAttribute, OzgCloudVorgangTestFactory.ID); + } + } + + @Nested + class TestDouble { + + private static final OzgCloudDoubleClientAttribute CLIENT_ATTRIBUTE = OzgCloudClientAttributeTestFactory.createDouble(); + + @BeforeEach + void init() { + doReturn(grpcClientAttribute).when(clientAttributeMapper).toGrpc(any(OzgCloudDoubleClientAttribute.class)); + } + + @Test + void shouldCallClientAttributeMapper() { + service.setClientAttribute(CLIENT_ATTRIBUTE, OzgCloudVorgangTestFactory.ID); + + verify(clientAttributeMapper).toGrpc(CLIENT_ATTRIBUTE); + } + + @Test + void shouldCallServiceBlockingStub() { + service.setClientAttribute(CLIENT_ATTRIBUTE, OzgCloudVorgangTestFactory.ID); + + verify(service).setClientAttribute(grpcClientAttribute, OzgCloudVorgangTestFactory.ID); + } + } + } + + @Nested + class TestSetClientAttributeGrpc { + + @Mock + private ClientAttributeServiceBlockingStub stubWithInterceptor; + @Mock + private GrpcSetClientAttributeRequest grpcRequest; + + @BeforeEach + void init() { + doReturn(stubWithInterceptor).when(service).getAttributesServiceStub(); + doReturn(grpcRequest).when(service).buildRequest(any(), any()); + } + + @Test + void shouldCallBuildRequest() { + service.setClientAttribute(grpcClientAttribute, OzgCloudVorgangTestFactory.ID); + + verify(service).buildRequest(grpcClientAttribute, OzgCloudVorgangTestFactory.ID.toString()); + } + + @Test + void shouldCallGetServiceBlockingStub() { + service.setClientAttribute(grpcClientAttribute, OzgCloudVorgangTestFactory.ID); + + verify(service).getAttributesServiceStub(); + } + + @Test + void shouldCallSet() { + service.setClientAttribute(grpcClientAttribute, OzgCloudVorgangTestFactory.ID); + + verify(stubWithInterceptor).set(grpcRequest); + } + } + + @Nested + class TestBuildRequest { + + private static final String VORGANG_ID = OzgCloudVorgangTestFactory.ID.toString(); + + @Test + void shouldBuildSetClientAttribute() { + var request = service.buildRequest(grpcClientAttribute, VORGANG_ID); + + assertThat(request.getAttribute()).isSameAs(grpcClientAttribute); + } + + @Test + void shouldBuildSetVorgangId() { + var request = service.buildRequest(grpcClientAttribute, VORGANG_ID); + + assertThat(request.getVorgangId()).isEqualTo(VORGANG_ID); + } + } + + @Nested + class TestGetAttributesServiceStub { + + @Mock + private ClientAttributeServiceBlockingStub stubWithInterceptor; + + @Captor + private ArgumentCaptor<OzgCloudCallContextAttachingInterceptor> interceptorCaptor; + + @Test + void shouldSetContextProvider() { + service.getAttributesServiceStub(); + + verify(serviceBlockingStub).withInterceptors(interceptorCaptor.capture()); + assertThat(getContextProvider()).isSameAs(contextProvider); + } + + @Test + void shouldReturnServiceBlockingStub() { + when(serviceBlockingStub.withInterceptors(any())).thenReturn(stubWithInterceptor); + + var stub = service.getAttributesServiceStub(); + + assertThat(stub).isSameAs(stubWithInterceptor); + } + + private OzgCloudCallContextProvider getContextProvider() { + return (OzgCloudCallContextProvider) ReflectionTestUtils.getField(interceptorCaptor.getValue(), "callContextProvider"); + } + } +} \ No newline at end of file diff --git a/api-lib-core/src/test/java/de/ozgcloud/apilib/attributes/grpc/OzgCloudClientAttributeMapperTest.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/attributes/grpc/OzgCloudClientAttributeMapperTest.java new file mode 100644 index 0000000..df16c7e --- /dev/null +++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/attributes/grpc/OzgCloudClientAttributeMapperTest.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +package de.ozgcloud.apilib.attributes.grpc; + +import static org.junit.jupiter.api.Assertions.*; + +class OzgCloudClientAttributeMapperTest { + +} \ No newline at end of file -- GitLab