Skip to content

Commit e6d004a

Browse files
committed
adding more tests
Signed-off-by: Neil South <[email protected]>
1 parent d7bce70 commit e6d004a

File tree

2 files changed

+167
-6
lines changed

2 files changed

+167
-6
lines changed

src/WorkflowManager/WorkflowManager/Validators/WorkflowValidator.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -179,13 +179,12 @@ private void ValidateTasks(Workflow workflow, string firstTaskId)
179179
}
180180
}
181181

182-
private int CheckDestinationInMigDestinations(TaskObject task, InformaticsGateway gateway)
182+
private void CheckDestinationInMigDestinations(TaskObject task, InformaticsGateway gateway)
183183
{
184184
var taskDestinationNames = task.ExportDestinations.Select(td => td.Name);
185185
if (taskDestinationNames.Any() && (gateway?.ExportDestinations?.IsNullOrEmpty() ?? true))
186186
{
187187
Errors.Add("InformaticsGateway ExportDestinations destinations can not be null with an Export Task.");
188-
return 1;
189188
}
190189

191190
var diff = taskDestinationNames.Except(gateway?.ExportDestinations).ToList();
@@ -195,10 +194,7 @@ private int CheckDestinationInMigDestinations(TaskObject task, InformaticsGatewa
195194
{
196195
Errors.Add($"Task: '{task.Id}' export_destination: '{missingDestination}' must be registered in the informatics_gateway object.");
197196
}
198-
199-
return diff.Count;
200197
}
201-
return 0;
202198
}
203199

204200
private void ValidateExportDestinations(Workflow workflow)
@@ -619,7 +615,6 @@ private void ValidateExportTask(Workflow workflow, TaskObject currentTask)
619615
}
620616

621617
ValidateInputs(currentTask);
622-
623618
}
624619

625620
private void ValidateExternalAppTask(Workflow workflow, TaskObject currentTask)

tests/UnitTests/WorkflowExecuter.Tests/Services/WorkflowExecuterServiceTests.cs

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
using FluentAssertions;
2525
using Microsoft.Extensions.Logging;
2626
using Microsoft.Extensions.Options;
27+
using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities;
2728
using Monai.Deploy.Messaging.API;
2829
using Monai.Deploy.Messaging.Events;
2930
using Monai.Deploy.Messaging.Messages;
@@ -36,13 +37,15 @@
3637
using Monai.Deploy.WorkflowManager.Contracts.Models;
3738
using Monai.Deploy.WorkflowManager.Database;
3839
using Monai.Deploy.WorkflowManager.Database.Interfaces;
40+
using Monai.Deploy.WorkflowManager.Database.Repositories;
3941
using Monai.Deploy.WorkflowManager.Shared;
4042
using Monai.Deploy.WorkflowManager.Storage.Services;
4143
using Monai.Deploy.WorkflowManager.WorkfowExecuter.Common;
4244
using Monai.Deploy.WorkflowManager.WorkfowExecuter.Services;
4345
using Moq;
4446
using Newtonsoft.Json;
4547
using Xunit;
48+
using Message = Monai.Deploy.Messaging.Messages.Message;
4649

4750
namespace Monai.Deploy.WorkflowManager.WorkflowExecuter.Tests.Services
4851
{
@@ -115,6 +118,60 @@ public WorkflowExecuterServiceTests()
115118
_payloadService.Object);
116119
}
117120

121+
[Fact]
122+
public async Task WorkflowExecuterService_Throw_If_No_Config()
123+
{
124+
var dicom = new Mock<IDicomService>();
125+
var logger = new Mock<ILogger<ConditionalParameterParser>>();
126+
127+
var conditionalParser = new ConditionalParameterParser(logger.Object,
128+
dicom.Object,
129+
_workflowInstanceService.Object,
130+
_payloadService.Object,
131+
_workflowService.Object);
132+
133+
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
134+
Assert.Throws<ArgumentNullException>(() => new WorkflowExecuterService(_logger.Object,
135+
null,
136+
_storageConfiguration,
137+
_workflowRepository.Object,
138+
_workflowInstanceRepository.Object,
139+
_messageBrokerPublisherService.Object,
140+
_workflowInstanceService.Object,
141+
conditionalParser,
142+
_taskExecutionStatsRepository.Object,
143+
_artifactMapper.Object,
144+
_storageService.Object,
145+
_payloadService.Object));
146+
147+
}
148+
149+
[Fact]
150+
public async Task WorkflowExecuterService_Throw_If_No_Storage_Config()
151+
{
152+
var dicom = new Mock<IDicomService>();
153+
var logger = new Mock<ILogger<ConditionalParameterParser>>();
154+
155+
var conditionalParser = new ConditionalParameterParser(logger.Object,
156+
dicom.Object,
157+
_workflowInstanceService.Object,
158+
_payloadService.Object,
159+
_workflowService.Object);
160+
161+
Assert.Throws<ArgumentNullException>(() => new WorkflowExecuterService(_logger.Object,
162+
_configuration,
163+
null,
164+
_workflowRepository.Object,
165+
_workflowInstanceRepository.Object,
166+
_messageBrokerPublisherService.Object,
167+
_workflowInstanceService.Object,
168+
conditionalParser,
169+
_taskExecutionStatsRepository.Object,
170+
_artifactMapper.Object,
171+
_storageService.Object,
172+
_payloadService.Object));
173+
}
174+
118175
[Fact]
119176
public async Task ProcessPayload_ValidAeTitleWorkflowRequest_ReturnesTrue()
120177
{
@@ -2685,5 +2742,114 @@ public async Task ProcessPayload_WithExternalAppComplete_Pauses()
26852742

26862743
response.Should().BeTrue();
26872744
}
2745+
2746+
[Fact]
2747+
public async Task ProcessPayload_With_WorkflowInstanceId_Continues()
2748+
{
2749+
var workflowInstanceId = Guid.NewGuid().ToString();
2750+
var correlationId = Guid.NewGuid().ToString();
2751+
2752+
var exportEvent = new ExportCompleteEvent
2753+
{
2754+
WorkflowInstanceId = workflowInstanceId,
2755+
ExportTaskId = "pizza",
2756+
Status = ExportStatus.Success,
2757+
Message = "This is a message"
2758+
};
2759+
2760+
var workflowId = Guid.NewGuid().ToString();
2761+
2762+
var workflow = new WorkflowRevision
2763+
{
2764+
Id = Guid.NewGuid().ToString(),
2765+
WorkflowId = workflowId,
2766+
Revision = 1,
2767+
Workflow = new Workflow
2768+
{
2769+
Name = "Workflowname2",
2770+
Description = "Workflowdesc2",
2771+
Version = "1",
2772+
InformaticsGateway = new InformaticsGateway
2773+
{
2774+
AeTitle = "aetitle"
2775+
},
2776+
Tasks = new TaskObject[]
2777+
{
2778+
new TaskObject {
2779+
Id = "pizza",
2780+
Type = ValidationConstants.ExportTaskType,
2781+
Description = "taskdesc",
2782+
TaskDestinations = new TaskDestination[]
2783+
{
2784+
new TaskDestination
2785+
{
2786+
Name = "coffee"
2787+
},
2788+
new TaskDestination
2789+
{
2790+
Name = "doughnuts"
2791+
}
2792+
}
2793+
},
2794+
new TaskObject {
2795+
Id = "coffee",
2796+
Type = "type",
2797+
Description = "taskdesc"
2798+
},
2799+
new TaskObject {
2800+
Id = "doughnuts",
2801+
Type = "type",
2802+
Description = "taskdesc",
2803+
}
2804+
}
2805+
}
2806+
};
2807+
2808+
var workflowInstance = new WorkflowInstance
2809+
{
2810+
Id = workflowInstanceId,
2811+
WorkflowId = workflowId,
2812+
WorkflowName = workflow.Workflow.Name,
2813+
PayloadId = Guid.NewGuid().ToString(),
2814+
Status = Status.Created,
2815+
BucketId = "bucket",
2816+
Tasks = new List<TaskExecution>
2817+
{
2818+
new TaskExecution
2819+
{
2820+
TaskId = "pizza",
2821+
Status = TaskExecutionStatus.Created
2822+
},
2823+
new TaskExecution
2824+
{
2825+
TaskId = "coffee",
2826+
Status = TaskExecutionStatus.Created
2827+
}
2828+
}
2829+
};
2830+
2831+
var payload = new Payload { PatientDetails = new PatientDetails { } };
2832+
2833+
_workflowInstanceRepository.Setup(w => w.UpdateTaskStatusAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<TaskExecutionStatus>())).ReturnsAsync(true);
2834+
_workflowInstanceRepository.Setup(w => w.GetByWorkflowInstanceIdAsync(workflowInstance.Id)).ReturnsAsync(workflowInstance);
2835+
_workflowInstanceRepository.Setup(w => w.UpdateTasksAsync(workflowInstance.Id, It.IsAny<List<TaskExecution>>())).ReturnsAsync(true);
2836+
_workflowRepository.Setup(w => w.GetByWorkflowIdAsync(workflowInstance.WorkflowId)).ReturnsAsync(workflow);
2837+
_payloadService.Setup(p => p.GetByIdAsync(It.IsAny<string>())).ReturnsAsync(payload);
2838+
2839+
var mess = new WorkflowRequestEvent { WorkflowInstanceId = workflowInstance.Id, TaskId = "coffee" };
2840+
2841+
2842+
var response = await WorkflowExecuterService.ProcessPayload(mess, payload);
2843+
2844+
_messageBrokerPublisherService.Verify(w => w.Publish(_configuration.Value.Messaging.Topics.TaskDispatchRequest, It.IsAny<Message>()), Times.Exactly(0));
2845+
_taskExecutionStatsRepository.Verify(w => w.UpdateExecutionStatsAsync(It.IsAny<TaskExecution>(), workflowId, TaskExecutionStatus.Succeeded));
2846+
_workflowInstanceRepository.Verify(w => w.UpdateTaskStatusAsync(workflowInstanceId, "coffee", TaskExecutionStatus.Succeeded));
2847+
2848+
response.Should().BeTrue();
2849+
2850+
_workflowRepository.Verify(w => w.GetByWorkflowsIdsAsync(It.IsAny<List<string>>()), Times.Never());
2851+
_workflowRepository.Verify(w => w.GetWorkflowsForWorkflowRequestAsync(It.IsAny<string>(), It.IsAny<string>()), Times.Never);
2852+
}
26882853
}
2854+
#pragma warning restore CS8625 // Cannot convert null literal to non-nullable reference type.
26892855
}

0 commit comments

Comments
 (0)