diff --git a/test/Zeebe.Client.Accelerator.Unit.Tests/BootstrapJobHandlerTests.cs b/test/Zeebe.Client.Accelerator.Unit.Tests/BootstrapJobHandlerTests.cs index ec59334..e1a873b 100644 --- a/test/Zeebe.Client.Accelerator.Unit.Tests/BootstrapJobHandlerTests.cs +++ b/test/Zeebe.Client.Accelerator.Unit.Tests/BootstrapJobHandlerTests.cs @@ -268,6 +268,41 @@ public async Task VariablesAreDeserializedWhenJobImplementGenericAbstractJob() Assert.Equal(expected, job.getVariables()); } + [Fact] + public async Task ImplementationOfAbstractJobHandlerBaseIsCalledCorrectly() + { + var random = new Random(); + + var jobVariables = new ExtendedJobHState() + { + Guid = Guid.NewGuid(), + ExtraAttr = "Hello Impl" + }; + var expectedSerializedVariables = new ZeebeVariablesSerializer().Serialize(jobVariables); + deserializerMock.Setup(m => m.Deserialize(expectedSerializedVariables)) + .Returns(jobVariables); + + PrepareAsyncJobHandlersFor(); + var expectedHandler = jobHandlerInfoCollection.First(); + var expectedKey = random.Next(); + + var jobMock = new Mock(); + jobMock.SetupGet(m => m.Type).Returns(expectedHandler.JobType); + jobMock.SetupGet(m => m.Key).Returns(expectedKey); + jobMock.SetupGet(m => m.Variables).Returns(expectedSerializedVariables); + + JobHandlerI.guids.Clear(); + + var handler = Create(); + await handler.HandleJob(jobClientMock.Object, jobMock.Object, cancellationToken); + + this.jobClientMock.Verify(c => c.NewCompleteJobCommand(expectedKey), Times.Once); + this.jobClientMock.Verify(c => c.NewThrowErrorCommand(expectedKey), Times.Never); + this.jobClientMock.Verify(c => c.NewFailCommand(expectedKey), Times.Never); + + Assert.Single(JobHandlerI.guids); + Assert.Equal(jobVariables.Guid, JobHandlerI.guids.First()); + } [Fact] public async Task RetryTimeOutIsUsedWhenJobIsCompleted() @@ -382,6 +417,7 @@ private static Mock CreateIServiceProviderMock(Mock m.GetService(typeof(JobHandlerF))).Returns(new JobHandlerF(handleJobDelegateMock.Object)); mock.Setup(m => m.GetService(typeof(JobHandlerG))).Returns(new JobHandlerG(handleJobDelegateMock.Object)); mock.Setup(m => m.GetService(typeof(JobHandlerH))).Returns(new JobHandlerH(handleJobDelegateMock.Object)); + mock.Setup(m => m.GetService(typeof(JobHandlerI))).Returns(new JobHandlerI()); return mock; } diff --git a/test/Zeebe.Client.Accelerator.Unit.Tests/JobHandlerInfoProviderTests.cs b/test/Zeebe.Client.Accelerator.Unit.Tests/JobHandlerInfoProviderTests.cs index d53a5d9..d12f4b0 100644 --- a/test/Zeebe.Client.Accelerator.Unit.Tests/JobHandlerInfoProviderTests.cs +++ b/test/Zeebe.Client.Accelerator.Unit.Tests/JobHandlerInfoProviderTests.cs @@ -27,7 +27,7 @@ public void ThrowsArgumentNullExceptionWhenAssemblyProviderIsNull() [Fact] public void AllJobHandlersAreFoundWhenCreated() { var actual = Handlers(); - var expected = 8; + var expected = 9; Assert.Equal(expected, actual.Count()); } diff --git a/test/Zeebe.Client.Accelerator.Unit.Tests/Stubs/JobHandlerI.cs b/test/Zeebe.Client.Accelerator.Unit.Tests/Stubs/JobHandlerI.cs new file mode 100644 index 0000000..1b7ce98 --- /dev/null +++ b/test/Zeebe.Client.Accelerator.Unit.Tests/Stubs/JobHandlerI.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Zeebe.Client.Accelerator.Unit.Tests.Stubs +{ + public class JobHandlerI : TypedInputHandlerBase + { + public static IList guids = new List(); + + protected override Task HandleJob(ExtendedJobHState variables, CancellationToken cancellationToken) + { + guids.Add(variables.Guid); + return Task.CompletedTask; + } + } + + public class ExtendedJobHState : JobHState + { + public string ExtraAttr { get; set; } + } +} diff --git a/test/Zeebe.Client.Accelerator.Unit.Tests/Stubs/TypedInputHandlerBase.cs b/test/Zeebe.Client.Accelerator.Unit.Tests/Stubs/TypedInputHandlerBase.cs new file mode 100644 index 0000000..424892c --- /dev/null +++ b/test/Zeebe.Client.Accelerator.Unit.Tests/Stubs/TypedInputHandlerBase.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Zeebe.Client.Accelerator.Abstractions; +using Zeebe.Client.Accelerator.Attributes; + +namespace Zeebe.Client.Accelerator.Unit.Tests.Stubs +{ + public abstract class TypedInputHandlerBase : IAsyncZeebeWorker where TInput : JobHState, new () + { + protected abstract Task HandleJob(TInput variables, CancellationToken cancellationToken); + + public async Task HandleJob(ZeebeJob job, CancellationToken cancellationToken) + { + await HandleJob(job.getVariables(), cancellationToken); + } + } +} diff --git a/test/Zeebe.Client.Accelerator.Unit.Tests/ZeebeHostedServiceTests.cs b/test/Zeebe.Client.Accelerator.Unit.Tests/ZeebeHostedServiceTests.cs index 99d131a..d875d70 100644 --- a/test/Zeebe.Client.Accelerator.Unit.Tests/ZeebeHostedServiceTests.cs +++ b/test/Zeebe.Client.Accelerator.Unit.Tests/ZeebeHostedServiceTests.cs @@ -268,6 +268,12 @@ public ZeebeHostedServiceTests() .Where(m => m.Name.Equals(nameof(JobHandlerH.HandleJob))) .First() ), + CreateJobHandlerInfo( + typeof(JobHandlerI) + .GetMethods() + .Where(m => m.Name.Equals(nameof(JobHandlerI.HandleJob))) + .First() + ), }; this.handleJobDelegateMock = new Mock();