From d5d2ee18c3b202325dcd5ac1e7b00ee51cfc1d48 Mon Sep 17 00:00:00 2001 From: Ionut Grosu Date: Thu, 17 Mar 2022 08:34:46 +0100 Subject: [PATCH 1/3] Added AllVariables flag to HandlerVariablesAttribute and null initialization of Variables list based on the flag --- src/Camunda.Worker/CamundaWorkerBuilderExtensions.cs | 4 +++- src/Camunda.Worker/Execution/HandlerMetadata.cs | 3 ++- src/Camunda.Worker/HandlerVariablesAttribute.cs | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Camunda.Worker/CamundaWorkerBuilderExtensions.cs b/src/Camunda.Worker/CamundaWorkerBuilderExtensions.cs index ae66ee8..84b340e 100644 --- a/src/Camunda.Worker/CamundaWorkerBuilderExtensions.cs +++ b/src/Camunda.Worker/CamundaWorkerBuilderExtensions.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Reflection; using System.Threading.Tasks; using Camunda.Worker.Execution; @@ -36,7 +37,8 @@ private static HandlerMetadata CollectMetadataFromAttributes(Type handlerType) return new HandlerMetadata(topicsAttribute.TopicNames, topicsAttribute.LockDuration) { LocalVariables = variablesAttribute?.LocalVariables ?? false, - Variables = variablesAttribute?.Variables, + AllVariables = variablesAttribute?.AllVariables ?? false, + Variables = variablesAttribute?.AllVariables ?? false ? null : variablesAttribute?.Variables, IncludeExtensionProperties = topicsAttribute.IncludeExtensionProperties }; } diff --git a/src/Camunda.Worker/Execution/HandlerMetadata.cs b/src/Camunda.Worker/Execution/HandlerMetadata.cs index b19b88a..047b387 100644 --- a/src/Camunda.Worker/Execution/HandlerMetadata.cs +++ b/src/Camunda.Worker/Execution/HandlerMetadata.cs @@ -15,13 +15,14 @@ public HandlerMetadata(IReadOnlyList topicNames, int lockDuration = Cons public int LockDuration { get; } public bool LocalVariables { get; set; } + public bool AllVariables { get; set; } /// Determines whether serializable variable values (typically variables that store custom Java objects) should be deserialized on server side (default false). public bool DeserializeValues { get; set; } /// Determines whether custom extension properties defined in the BPMN activity of the external task (e.g. via the Extensions tab in the Camunda modeler) should be included in the response. Default: false. public bool IncludeExtensionProperties { get; set; } - + public IReadOnlyList? Variables { get; set; } public IReadOnlyList? ProcessDefinitionIds { get; set; } diff --git a/src/Camunda.Worker/HandlerVariablesAttribute.cs b/src/Camunda.Worker/HandlerVariablesAttribute.cs index 824d6e5..607263e 100644 --- a/src/Camunda.Worker/HandlerVariablesAttribute.cs +++ b/src/Camunda.Worker/HandlerVariablesAttribute.cs @@ -14,5 +14,7 @@ public HandlerVariablesAttribute(params string[] variables) public IReadOnlyList Variables { get; } public bool LocalVariables { get; set; } + + public bool AllVariables { get; set; } } } From 73891aecbe0d1b4bc0b80723a456e6616bae64e4 Mon Sep 17 00:00:00 2001 From: Ionut Grosu Date: Fri, 18 Mar 2022 09:09:00 +0100 Subject: [PATCH 2/3] Removed AllVariables flag from HandlerMetadata and added a description of the flag in HandlerVariablesAttribute --- src/Camunda.Worker/CamundaWorkerBuilderExtensions.cs | 2 -- src/Camunda.Worker/Execution/HandlerMetadata.cs | 1 - src/Camunda.Worker/HandlerVariablesAttribute.cs | 3 +++ 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Camunda.Worker/CamundaWorkerBuilderExtensions.cs b/src/Camunda.Worker/CamundaWorkerBuilderExtensions.cs index 84b340e..ad2f9c7 100644 --- a/src/Camunda.Worker/CamundaWorkerBuilderExtensions.cs +++ b/src/Camunda.Worker/CamundaWorkerBuilderExtensions.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Reflection; using System.Threading.Tasks; using Camunda.Worker.Execution; @@ -37,7 +36,6 @@ private static HandlerMetadata CollectMetadataFromAttributes(Type handlerType) return new HandlerMetadata(topicsAttribute.TopicNames, topicsAttribute.LockDuration) { LocalVariables = variablesAttribute?.LocalVariables ?? false, - AllVariables = variablesAttribute?.AllVariables ?? false, Variables = variablesAttribute?.AllVariables ?? false ? null : variablesAttribute?.Variables, IncludeExtensionProperties = topicsAttribute.IncludeExtensionProperties }; diff --git a/src/Camunda.Worker/Execution/HandlerMetadata.cs b/src/Camunda.Worker/Execution/HandlerMetadata.cs index 047b387..dd96692 100644 --- a/src/Camunda.Worker/Execution/HandlerMetadata.cs +++ b/src/Camunda.Worker/Execution/HandlerMetadata.cs @@ -15,7 +15,6 @@ public HandlerMetadata(IReadOnlyList topicNames, int lockDuration = Cons public int LockDuration { get; } public bool LocalVariables { get; set; } - public bool AllVariables { get; set; } /// Determines whether serializable variable values (typically variables that store custom Java objects) should be deserialized on server side (default false). public bool DeserializeValues { get; set; } diff --git a/src/Camunda.Worker/HandlerVariablesAttribute.cs b/src/Camunda.Worker/HandlerVariablesAttribute.cs index 607263e..264297a 100644 --- a/src/Camunda.Worker/HandlerVariablesAttribute.cs +++ b/src/Camunda.Worker/HandlerVariablesAttribute.cs @@ -15,6 +15,9 @@ public HandlerVariablesAttribute(params string[] variables) public bool LocalVariables { get; set; } + /// + ///Setting this to true will retrieve all the process variables from Camunda without the need of knowing their names + /// public bool AllVariables { get; set; } } } From 08017b3a9fc9e252139bef33189a2f17d5e4217f Mon Sep 17 00:00:00 2001 From: Ionut Grosu Date: Fri, 18 Mar 2022 13:25:58 +0100 Subject: [PATCH 3/3] Added test case for the new functionality --- .../CamundaWorkerBuilderExtensionsTest.cs | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/test/Camunda.Worker.Tests/CamundaWorkerBuilderExtensionsTest.cs b/test/Camunda.Worker.Tests/CamundaWorkerBuilderExtensionsTest.cs index 33f256b..e1bdc32 100644 --- a/test/Camunda.Worker.Tests/CamundaWorkerBuilderExtensionsTest.cs +++ b/test/Camunda.Worker.Tests/CamundaWorkerBuilderExtensionsTest.cs @@ -90,6 +90,45 @@ public void TestAddHandlerWithoutTopic() Assert.Throws(() => _builderMock.Object.AddHandler()); } + [Fact] + public void TestAddHandlerWithAllVariables() + { + // Arrange + var savedMetadata = new List(); + + _builderMock + .Setup(builder => builder.AddHandler(It.IsAny(), It.IsAny())) + .Callback((ExternalTaskDelegate _, HandlerMetadata metadata) => savedMetadata.Add(metadata)) + .Returns(_builderMock.Object); + + // Act + _builderMock.Object.AddHandler(); + + // Assert + _builderMock.Verify( + builder => builder.AddHandler(It.IsAny(), It.IsAny()), + Times.Once()); + Assert.Contains(_services, d => d.Lifetime == ServiceLifetime.Transient && + d.ServiceType == typeof(HandlerWithAllVariables)); + + var metadata = Assert.Single(savedMetadata); + Assert.NotNull(metadata); + Assert.Null(metadata.Variables); + } + + [HandlerTopics("testTopic")] + [HandlerVariables(AllVariables = true)] + private class HandlerWithAllVariables : IExternalTaskHandler + { + public Task HandleAsync(ExternalTask externalTask, CancellationToken cancellationToken) + { + return Task.FromResult(new CompleteResult + { + Variables = externalTask.Variables + }); + } + } + [HandlerTopics("testTopic_1", "testTopic_1")] [HandlerVariables("testVariable", LocalVariables = true)] private class HandlerWithTopics : IExternalTaskHandler