diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/OzgCloudAccessPermission.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/OzgCloudAccessPermission.java new file mode 100644 index 0000000000000000000000000000000000000000..221b16b3754cc39ea7668248c7230e0e9d73dd94 --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/OzgCloudAccessPermission.java @@ -0,0 +1,28 @@ +/* + * 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.client_attribute; + +public enum OzgCloudAccessPermission { + PRIVATE, READ_ONLY, READ_WRITE +} diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/OzgCloudBooleanClientAttribute.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/OzgCloudBooleanClientAttribute.java new file mode 100644 index 0000000000000000000000000000000000000000..f56023c90a3055144bde68b72e0542ff91ea5f57 --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/OzgCloudBooleanClientAttribute.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.client_attribute; + +import lombok.experimental.SuperBuilder; + +@SuperBuilder +public final class OzgCloudBooleanClientAttribute extends OzgCloudClientAttribute<Boolean> { + +} diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/OzgCloudClientAttribute.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/OzgCloudClientAttribute.java new file mode 100644 index 0000000000000000000000000000000000000000..db60c3a1d2089d84d3201cc159018d9cb5a86b70 --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/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.client_attribute; + +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/client_attribute/OzgCloudClientAttributeService.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/OzgCloudClientAttributeService.java new file mode 100644 index 0000000000000000000000000000000000000000..b85b7da07147d17505fdae82bcecd42753f46561 --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/OzgCloudClientAttributeService.java @@ -0,0 +1,37 @@ +/* + * 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.client_attribute; + +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; + +public interface OzgCloudClientAttributeService { + + 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/client_attribute/OzgCloudDoubleClientAttribute.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/OzgCloudDoubleClientAttribute.java new file mode 100644 index 0000000000000000000000000000000000000000..992021fef5c446efffa5dbb5a8cec0fdf2a1cd15 --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/OzgCloudDoubleClientAttribute.java @@ -0,0 +1,30 @@ +/* + * 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.client_attribute; + +import lombok.experimental.SuperBuilder; + +@SuperBuilder +public final class OzgCloudDoubleClientAttribute extends OzgCloudClientAttribute<Double> { +} diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/OzgCloudLongClientAttribute.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/OzgCloudLongClientAttribute.java new file mode 100644 index 0000000000000000000000000000000000000000..bdaff47f87cbab65f3bdd6caf79cb298c5e21abe --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/OzgCloudLongClientAttribute.java @@ -0,0 +1,30 @@ +/* + * 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.client_attribute; + +import lombok.experimental.SuperBuilder; + +@SuperBuilder +public final class OzgCloudLongClientAttribute extends OzgCloudClientAttribute<Long> { +} diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/OzgCloudStringClientAttribute.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/OzgCloudStringClientAttribute.java new file mode 100644 index 0000000000000000000000000000000000000000..1fa54dde11655597b06b77469bcec6f12bfffb35 --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/OzgCloudStringClientAttribute.java @@ -0,0 +1,30 @@ +/* + * 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.client_attribute; + +import lombok.experimental.SuperBuilder; + +@SuperBuilder +public final class OzgCloudStringClientAttribute extends OzgCloudClientAttribute<String> { +} diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/grpc/OzgCloudClientAttributeGrpcService.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/grpc/OzgCloudClientAttributeGrpcService.java new file mode 100644 index 0000000000000000000000000000000000000000..cebaf6360285e9b87d9a95452fc0ef85ea010fb0 --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/grpc/OzgCloudClientAttributeGrpcService.java @@ -0,0 +1,78 @@ +/* + * 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.client_attribute.grpc; + +import de.ozgcloud.apilib.client_attribute.OzgCloudClientAttributeService; +import de.ozgcloud.apilib.client_attribute.OzgCloudBooleanClientAttribute; +import de.ozgcloud.apilib.client_attribute.OzgCloudDoubleClientAttribute; +import de.ozgcloud.apilib.client_attribute.OzgCloudLongClientAttribute; +import de.ozgcloud.apilib.client_attribute.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 OzgCloudClientAttributeGrpcService implements OzgCloudClientAttributeService { + + private final ClientAttributeServiceBlockingStub serviceBlockingStub; + private final OzgCloudClientAttributeMapper clientAttributeMapper; + private final OzgCloudCallContextProvider contextProvider; + + @Override + public void setClientAttribute(OzgCloudBooleanClientAttribute clientAttribute, OzgCloudVorgangId vorgangId) { + doSetClientAttribute(clientAttributeMapper.toGrpc(clientAttribute), vorgangId); + } + + @Override + public void setClientAttribute(OzgCloudStringClientAttribute clientAttribute, OzgCloudVorgangId vorgangId) { + doSetClientAttribute(clientAttributeMapper.toGrpc(clientAttribute), vorgangId); + } + + @Override + public void setClientAttribute(OzgCloudLongClientAttribute clientAttribute, OzgCloudVorgangId vorgangId) { + doSetClientAttribute(clientAttributeMapper.toGrpc(clientAttribute), vorgangId); + } + + @Override + public void setClientAttribute(OzgCloudDoubleClientAttribute clientAttribute, OzgCloudVorgangId vorgangId) { + doSetClientAttribute(clientAttributeMapper.toGrpc(clientAttribute), vorgangId); + } + + void doSetClientAttribute(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/client_attribute/grpc/OzgCloudClientAttributeMapper.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/grpc/OzgCloudClientAttributeMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..7297235c5c8c06259dff2663868939d7b5fb5996 --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/client_attribute/grpc/OzgCloudClientAttributeMapper.java @@ -0,0 +1,156 @@ +/* + * 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.client_attribute.grpc; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; +import org.mapstruct.ReportingPolicy; + +import de.ozgcloud.apilib.client_attribute.OzgCloudBooleanClientAttribute; +import de.ozgcloud.apilib.client_attribute.OzgCloudDoubleClientAttribute; +import de.ozgcloud.apilib.client_attribute.OzgCloudLongClientAttribute; +import de.ozgcloud.apilib.client_attribute.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/client_attribute/GrpcClientAttributeTestFactory.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/client_attribute/GrpcClientAttributeTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..6692210025c286bb91c5f88812ace24e0081e045 --- /dev/null +++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/client_attribute/GrpcClientAttributeTestFactory.java @@ -0,0 +1,69 @@ +/* + * 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.client_attribute; + +import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission; +import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; +import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue; + +public class GrpcClientAttributeTestFactory { + + public static final GrpcAccessPermission ACCESS_PERMISSION = GrpcAccessPermission.READ_ONLY; + + public static final GrpcClientAttributeValue BOOLEAN_VALUE = + GrpcClientAttributeValue.newBuilder().setBoolValue(OzgCloudClientAttributeTestFactory.BOOLEAN_VALUE).build(); + + public static final GrpcClientAttributeValue STRING_VALUE = + GrpcClientAttributeValue.newBuilder().setStringValue(OzgCloudClientAttributeTestFactory.STRING_VALUE).build(); + + public static final GrpcClientAttributeValue LONG_VALUE = GrpcClientAttributeValue.newBuilder().setIntValue( + OzgCloudClientAttributeTestFactory.LONG_VALUE).build(); + + public static final GrpcClientAttributeValue DOUBLE_VALUE = + GrpcClientAttributeValue.newBuilder().setDoubleValue(OzgCloudClientAttributeTestFactory.DOUBLE_VALUE).build(); + + public static GrpcClientAttribute createBoolean() { + return createBuilder().setValue(BOOLEAN_VALUE).build(); + } + + public static GrpcClientAttribute createString() { + return createBuilder().setValue(STRING_VALUE).build(); + } + + public static GrpcClientAttribute createLong() { + return createBuilder().setValue(LONG_VALUE).build(); + } + + public static GrpcClientAttribute createDouble() { + return createBuilder().setValue(DOUBLE_VALUE).build(); + } + + public static GrpcClientAttribute.Builder createBuilder() { + return GrpcClientAttribute.newBuilder() + .setClientName(OzgCloudClientAttributeTestFactory.CLIENT) + .setAttributeName(OzgCloudClientAttributeTestFactory.ATTRIBUTE_NAME) + .setAccess(ACCESS_PERMISSION); + } +} diff --git a/api-lib-core/src/test/java/de/ozgcloud/apilib/client_attribute/OzgCloudClientAttributeTestFactory.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/client_attribute/OzgCloudClientAttributeTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..9b7e435c8c0a42e45b2d99e8b2a04357f0d88813 --- /dev/null +++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/client_attribute/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.client_attribute; + +import com.thedeanda.lorem.LoremIpsum; + +import de.ozgcloud.apilib.client_attribute.OzgCloudBooleanClientAttribute.OzgCloudBooleanClientAttributeBuilder; +import de.ozgcloud.apilib.client_attribute.OzgCloudDoubleClientAttribute.OzgCloudDoubleClientAttributeBuilder; +import de.ozgcloud.apilib.client_attribute.OzgCloudLongClientAttribute.OzgCloudLongClientAttributeBuilder; +import de.ozgcloud.apilib.client_attribute.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/client_attribute/grpc/OzgCloudClientAttributeGrpcServiceTest.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/client_attribute/grpc/OzgCloudClientAttributeGrpcServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e9341c3d72ca55c6f9edec2dd088c8197ae84234 --- /dev/null +++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/client_attribute/grpc/OzgCloudClientAttributeGrpcServiceTest.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.client_attribute.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.client_attribute.OzgCloudBooleanClientAttribute; +import de.ozgcloud.apilib.client_attribute.OzgCloudClientAttributeTestFactory; +import de.ozgcloud.apilib.client_attribute.OzgCloudDoubleClientAttribute; +import de.ozgcloud.apilib.client_attribute.OzgCloudLongClientAttribute; +import de.ozgcloud.apilib.client_attribute.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 OzgCloudClientAttributeGrpcServiceTest { + + @Spy + @InjectMocks + private OzgCloudClientAttributeGrpcService 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).doSetClientAttribute(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 shouldCallSetClientAttribute() { + service.setClientAttribute(CLIENT_ATTRIBUTE, OzgCloudVorgangTestFactory.ID); + + verify(service).doSetClientAttribute(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 shouldCallSetClientAttribute() { + service.setClientAttribute(CLIENT_ATTRIBUTE, OzgCloudVorgangTestFactory.ID); + + verify(service).doSetClientAttribute(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 shouldCallSetClientAttribute() { + service.setClientAttribute(CLIENT_ATTRIBUTE, OzgCloudVorgangTestFactory.ID); + + verify(service).doSetClientAttribute(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 shouldCallSetClientAttribute() { + service.setClientAttribute(CLIENT_ATTRIBUTE, OzgCloudVorgangTestFactory.ID); + + verify(service).doSetClientAttribute(grpcClientAttribute, OzgCloudVorgangTestFactory.ID); + } + } + } + + @Nested + class TestDoSetClientAttribute { + + @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.doSetClientAttribute(grpcClientAttribute, OzgCloudVorgangTestFactory.ID); + + verify(service).buildRequest(grpcClientAttribute, OzgCloudVorgangTestFactory.ID.toString()); + } + + @Test + void shouldCallGetServiceBlockingStub() { + service.doSetClientAttribute(grpcClientAttribute, OzgCloudVorgangTestFactory.ID); + + verify(service).getAttributesServiceStub(); + } + + @Test + void shouldCallSet() { + service.doSetClientAttribute(grpcClientAttribute, OzgCloudVorgangTestFactory.ID); + + verify(stubWithInterceptor).set(grpcRequest); + } + } + + @Nested + class TestBuildRequest { + + private static final String VORGANG_ID = OzgCloudVorgangTestFactory.ID.toString(); + + @Test + void shouldSetClientAttribute() { + var request = service.buildRequest(grpcClientAttribute, VORGANG_ID); + + assertThat(request.getAttribute()).isSameAs(grpcClientAttribute); + } + + @Test + void shouldSetVorgangId() { + 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/client_attribute/grpc/OzgCloudClientAttributeMapperTest.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/client_attribute/grpc/OzgCloudClientAttributeMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..965f50f793147421b7eb9a546c3cb2c8b8874f74 --- /dev/null +++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/client_attribute/grpc/OzgCloudClientAttributeMapperTest.java @@ -0,0 +1,66 @@ +/* + * 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.client_attribute.grpc; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; + +import de.ozgcloud.apilib.client_attribute.GrpcClientAttributeTestFactory; +import de.ozgcloud.apilib.client_attribute.OzgCloudClientAttributeTestFactory; + +class OzgCloudClientAttributeMapperTest { + + private OzgCloudClientAttributeMapper mapper = Mappers.getMapper(OzgCloudClientAttributeMapper.class); + + @Test + void shouldMapBooleanAttribute() { + var result = mapper.toGrpc(OzgCloudClientAttributeTestFactory.createBoolean()); + + assertThat(result).usingRecursiveComparison().isEqualTo(GrpcClientAttributeTestFactory.createBoolean()); + } + + @Test + void shouldMapStringAttribute() { + var result = mapper.toGrpc(OzgCloudClientAttributeTestFactory.createString()); + + assertThat(result).usingRecursiveComparison().isEqualTo(GrpcClientAttributeTestFactory.createString()); + } + + @Test + void shouldMapLongAttribute() { + var result = mapper.toGrpc(OzgCloudClientAttributeTestFactory.createLong()); + + assertThat(result).usingRecursiveComparison().isEqualTo(GrpcClientAttributeTestFactory.createLong()); + } + + @Test + void shouldMapDoubleAttribute() { + var result = mapper.toGrpc(OzgCloudClientAttributeTestFactory.createDouble()); + + assertThat(result).usingRecursiveComparison().isEqualTo(GrpcClientAttributeTestFactory.createDouble()); + } +} \ No newline at end of file