@@ -3703,6 +3703,182 @@ public async Task ProcessTaskUpdate_ValidTaskUpdateEventWithExportHl7TaskDestina
37033703 response . Should ( ) . BeTrue ( ) ;
37043704 }
37053705
3706+ //[Fact]
3707+ public async Task ProcessPayload_With_Multiple_Taskdestinations_One_Has_Inputs ( )
3708+ {
3709+ var workflowInstanceId = Guid . NewGuid ( ) . ToString ( ) ;
3710+ var workflowId1 = Guid . NewGuid ( ) . ToString ( ) ;
3711+ var workflowId2 = Guid . NewGuid ( ) . ToString ( ) ;
3712+ var workflowRequest = new WorkflowRequestEvent
3713+ {
3714+ Bucket = "testbucket" ,
3715+ DataTrigger = new DataOrigin { Source = "aetitle" , Destination = "aetitle" } ,
3716+ CorrelationId = Guid . NewGuid ( ) . ToString ( ) ,
3717+ Timestamp = DateTime . UtcNow ,
3718+ Workflows = new List < string >
3719+ {
3720+ workflowId1 . ToString ( )
3721+ }
3722+ } ;
3723+
3724+ var workflows = new List < WorkflowRevision >
3725+ {
3726+ new WorkflowRevision
3727+ {
3728+ Id = Guid . NewGuid ( ) . ToString ( ) ,
3729+ WorkflowId = workflowId1 ,
3730+ Revision = 1 ,
3731+ Workflow = new Workflow
3732+ {
3733+ Name = "Workflowname1" ,
3734+ Description = "Workflowdesc1" ,
3735+ Version = "1" ,
3736+ InformaticsGateway = new InformaticsGateway
3737+ {
3738+ AeTitle = "aetitle" ,
3739+ ExportDestinations = new string [ ] { "PROD_PACS" }
3740+ } ,
3741+ Tasks = new TaskObject [ ]
3742+ {
3743+ new TaskObject {
3744+ Id = "router" ,
3745+ Type = "router" ,
3746+ Description = "router" ,
3747+ Artifacts = new ArtifactMap
3748+ {
3749+ Input = new Artifact [ ] { new Artifact { Name = "dicomexport" , Value = "{{ context.input }}" } } ,
3750+ Output = new OutputArtifact [ ]
3751+ {
3752+ new OutputArtifact
3753+ {
3754+ Name = "Artifact1" ,
3755+ Value = "Artifact1Value" ,
3756+ Mandatory = true ,
3757+ Type = ArtifactType . DOC
3758+ } ,
3759+ new OutputArtifact
3760+ {
3761+ Name = "Artifact2" ,
3762+ Value = "Artifact2Value" ,
3763+ Mandatory = true ,
3764+ Type = ArtifactType . CT
3765+ }
3766+ }
3767+ } ,
3768+ TaskDestinations = new TaskDestination [ ]
3769+ {
3770+ new TaskDestination
3771+ {
3772+ Name = "export1"
3773+ } ,
3774+ new TaskDestination
3775+ {
3776+ Name = "export2"
3777+ }
3778+ }
3779+ } ,
3780+ new TaskObject
3781+ {
3782+ Id = "export1" ,
3783+ Type = "export" ,
3784+ Artifacts = new ArtifactMap
3785+ {
3786+ Input = new Artifact [ ] { new Artifact { Name = "artifact" , Value = "{{ context.executions.router.artifacts.output.Artifact1 }}" } }
3787+ } ,
3788+ ExportDestinations = new ExportDestination [ ]
3789+ {
3790+ }
3791+ } ,
3792+ new TaskObject
3793+ {
3794+ Id = "export2" ,
3795+ Type = "export" ,
3796+ Artifacts = new ArtifactMap
3797+ {
3798+ Input = new Artifact [ ] { new Artifact { Name = "artifact2" , Value = "{{ context.executions.router.artifacts.output.Artifact2 }}" } }
3799+ } ,
3800+ ExportDestinations = new ExportDestination [ ]
3801+ {
3802+ }
3803+ } ,
3804+ }
3805+ }
3806+ }
3807+ } ;
3808+ var workflowInstance = new WorkflowInstance
3809+ {
3810+ Id = workflowInstanceId ,
3811+ WorkflowId = workflowId1 ,
3812+ WorkflowName = workflows . First ( ) ! . Workflow ! . Name ,
3813+ PayloadId = Guid . NewGuid ( ) . ToString ( ) ,
3814+ Status = Status . Created ,
3815+ BucketId = "bucket" ,
3816+ Tasks = new List < TaskExecution >
3817+ {
3818+ new TaskExecution
3819+ {
3820+ TaskId = "router" ,
3821+ Status = TaskExecutionStatus . Created
3822+ } ,
3823+ //new TaskExecution
3824+ //{
3825+ // TaskId = "export1",
3826+ // Status = TaskExecutionStatus.Created
3827+ //},
3828+ //new TaskExecution
3829+ //{
3830+ // TaskId = "export2",
3831+ // Status = TaskExecutionStatus.Created
3832+ //}
3833+ }
3834+ } ;
3835+
3836+ var artifactDict = new List < Messaging . Common . Storage >
3837+ {
3838+ new Messaging . Common . Storage
3839+ {
3840+ Name = "artifactname" ,
3841+ RelativeRootPath = "path/to/artifact"
3842+ }
3843+ } ;
3844+
3845+ _workflowInstanceRepository . Setup ( w => w . GetByWorkflowInstanceIdAsync ( workflowInstance . Id ) ) . ReturnsAsync ( workflowInstance ) ;
3846+
3847+ _workflowRepository . Setup ( w => w . GetByWorkflowsIdsAsync ( new List < string > { workflowId1 . ToString ( ) } ) ) . ReturnsAsync ( workflows ) ;
3848+ _workflowRepository . Setup ( w => w . GetByWorkflowIdAsync ( workflowId1 . ToString ( ) ) ) . ReturnsAsync ( workflows [ 0 ] ) ;
3849+ _workflowInstanceRepository . Setup ( w => w . CreateAsync ( It . IsAny < List < WorkflowInstance > > ( ) ) ) . ReturnsAsync ( true ) ;
3850+ _workflowInstanceRepository . Setup ( w => w . UpdateTasksAsync ( It . IsAny < string > ( ) , It . IsAny < List < TaskExecution > > ( ) ) ) . ReturnsAsync ( true ) ;
3851+ _workflowInstanceRepository . Setup ( w => w . GetByWorkflowsIdsAsync ( It . IsAny < List < string > > ( ) ) ) . ReturnsAsync ( new List < WorkflowInstance > ( ) ) ;
3852+ _workflowInstanceRepository . Setup ( w => w . UpdateTaskStatusAsync ( It . IsAny < string > ( ) , It . IsAny < string > ( ) , It . IsAny < TaskExecutionStatus > ( ) ) ) . ReturnsAsync ( true ) ;
3853+ var dcmInfo = new Dictionary < string , string > ( ) { { "dicomexport" , "/dcm" } } ;
3854+ _artifactMapper . Setup ( a => a . TryConvertArtifactVariablesToPath ( It . IsAny < Artifact [ ] > ( ) , It . IsAny < string > ( ) , It . IsAny < string > ( ) , It . IsAny < string > ( ) , It . IsAny < bool > ( ) , out dcmInfo ) ) . Returns ( true ) ;
3855+
3856+ _messageBrokerPublisherService . Setup ( m => m . Publish ( It . IsAny < string > ( ) , It . IsAny < Message > ( ) ) ) ;
3857+
3858+ var pathList = artifactDict . Select ( a => a . RelativeRootPath ) . ToList ( ) ;
3859+
3860+ _storageService . Setup ( w => w . VerifyObjectsExistAsync (
3861+ workflowInstance . BucketId , It . Is < IReadOnlyList < string > > ( l => l . Any ( a => pathList . Any ( p => p == a ) ) ) , It . IsAny < CancellationToken > ( ) ) )
3862+ . ReturnsAsync ( new Dictionary < string , bool > ( ) { { pathList . First ( ) , true } } ) ;
3863+
3864+ var mess = new ArtifactsReceivedEvent
3865+ {
3866+ WorkflowInstanceId = workflowInstance . Id ,
3867+ TaskId = "router" ,
3868+ Artifacts = [ new Messaging . Common . Artifact { Type = ArtifactType . DOC , Path = "path/to/artifact" } ]
3869+ } ;
3870+
3871+
3872+ var response = await WorkflowExecuterService . ProcessArtifactReceivedAsync ( mess ) ;
3873+
3874+ Assert . True ( response ) ;
3875+ //_workflowInstanceRepository.Verify(w => w.UpdateTaskStatusAsync(workflowInstanceId, "router", TaskExecutionStatus.Succeeded));
3876+ _workflowInstanceRepository . Verify ( w => w . UpdateTaskStatusAsync ( workflowInstanceId , "export1" , TaskExecutionStatus . Succeeded ) ) ;
3877+
3878+
3879+
3880+ #pragma warning restore CS8604 // Possible null reference argument.
3881+ }
37063882 }
37073883
37083884#pragma warning restore CS8625 // Cannot convert null literal to non-nullable reference type.
0 commit comments