Skip to content

Commit fa43b84

Browse files
authored
fix payload status and add int tests (#804)
* fix payload status and add int tests Signed-off-by: Sam Rooke <[email protected]> * update failing unit test Signed-off-by: Sam Rooke <[email protected]> --------- Signed-off-by: Sam Rooke <[email protected]>
1 parent ab91216 commit fa43b84

File tree

7 files changed

+349
-2
lines changed

7 files changed

+349
-2
lines changed

src/WorkflowManager/Common/Services/PayloadService.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ private async Task<IList<PayloadDto>> CreatePayloadsDto(IList<Payload> payloads)
133133
return dtos;
134134
}
135135

136-
var payloadIds = payloads.Select(payload => payload.Id).ToList();
136+
var payloadIds = payloads.Select(payload => payload.PayloadId).ToList();
137137

138138
var workflowInstances =
139139
await _workflowInstanceRepository.GetByPayloadIdsAsync(payloadIds);

tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/PayloadApi.feature

+31
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,37 @@ Scenario: Get all payloads from API - no payloads
4242
Then I will get a 200 response
4343
And I can see no Payloads are returned
4444

45+
@GetPayloads
46+
Scenario: Get all payloads from API - Workflow Instances Created - PayloadStatus InProgress
47+
Given I have an endpoint /payload
48+
And I have a payload saved in mongo Payload_PayloadStatus_1
49+
And I have a Workflow Instance Workflow_Instance_For_PayloadData_Payload_PayloadStatus_1_1 with no artifacts
50+
And I have a Workflow Instance Workflow_Instance_For_PayloadData_Payload_PayloadStatus_1_2 with no artifacts
51+
When I send a GET request
52+
Then I will get a 200 response
53+
And I can see expected Payloads are returned with PayloadStatus InProgress
54+
55+
@GetPayloads
56+
Scenario: Get all payloads from API - Workflow Instances Succeeded and Failed - PayloadStatus Complete
57+
Given I have an endpoint /payload
58+
And I have a payload saved in mongo Payload_PayloadStatus_2
59+
And I have a Workflow Instance Workflow_Instance_For_PayloadData_Payload_PayloadStatus_2_1 with no artifacts
60+
And I have a Workflow Instance Workflow_Instance_For_PayloadData_Payload_PayloadStatus_2_2 with no artifacts
61+
When I send a GET request
62+
Then I will get a 200 response
63+
And I can see expected Payloads are returned with PayloadStatus Complete
64+
65+
@GetPayloads
66+
Scenario: Get all payloads from API - Workflow Instances Succeeded, Failed, and Created - PayloadStatus InProgress
67+
Given I have an endpoint /payload
68+
And I have a payload saved in mongo Payload_PayloadStatus_3
69+
And I have a Workflow Instance Workflow_Instance_For_PayloadData_Payload_PayloadStatus_3_1 with no artifacts
70+
And I have a Workflow Instance Workflow_Instance_For_PayloadData_Payload_PayloadStatus_3_2 with no artifacts
71+
And I have a Workflow Instance Workflow_Instance_For_PayloadData_Payload_PayloadStatus_3_3 with no artifacts
72+
When I send a GET request
73+
Then I will get a 200 response
74+
And I can see expected Payloads are returned with PayloadStatus InProgress
75+
4576
@PayloadSearch
4677
Scenario Outline: Get all payloads from API - Test search query parameters
4778
Given I have an endpoint /payload/<search_query>

tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/PayloadApiStepDefinitions.cs

+27
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,33 @@ public void ThenICanSeeExpectedPayloadsAreReturned()
7575
Assertions.AssertPayloadList(DataHelper.Payload, actualPayloads?.Data);
7676
}
7777

78+
[Then(@"I can see expected Payloads are returned with PayloadStatus (.*)")]
79+
public void ThenICanSeeExpectedPayloadsAreReturnedWithPayloadStatus(string payloadStatus)
80+
{
81+
PayloadStatus status;
82+
83+
switch (payloadStatus)
84+
{
85+
case "InProgress":
86+
status = PayloadStatus.InProgress;
87+
break;
88+
case "Complete":
89+
status = PayloadStatus.Complete;
90+
break;
91+
default:
92+
throw new Exception($"Invalid payload status '{payloadStatus}'. Must be one of: InProgress, Complete");
93+
}
94+
95+
var result = ApiHelper.Response.Content.ReadAsStringAsync().Result;
96+
97+
var actualPayloads = JsonConvert.DeserializeObject<PagedResponse<List<PayloadDto>>>(result);
98+
actualPayloads.Should().NotBeNull();
99+
Assertions.AssertPayloadListWithPayloadStatus(
100+
DataHelper.Payload.Select(p => new PayloadDto(p)).ToList(),
101+
actualPayloads?.Data,
102+
status);
103+
}
104+
78105
[Then(@"Search is working correctly for the (.*) payload")]
79106
[Then(@"Search is working correctly for the (.*) payloads")]
80107
public void ThenSearchIsWorkingCorrectlyForThepayloads(int count)

tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/Assertions.cs

+14
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,20 @@ public void AssertPayloadList(List<Payload> payload, List<Payload>? actualPayloa
281281
}
282282
}
283283

284+
public void AssertPayloadListWithPayloadStatus(List<PayloadDto> payload, List<PayloadDto>? actualPayloads, PayloadStatus payloadStatus)
285+
{
286+
actualPayloads.Should().NotBeNull();
287+
actualPayloads?.Count.Should().Be(payload.Count);
288+
289+
foreach (var p in payload)
290+
{
291+
var actualPayload = actualPayloads?.FirstOrDefault(x => x.PayloadId.Equals(p.PayloadId));
292+
293+
AssertPayload(p, actualPayload);
294+
actualPayload?.PayloadStatus.Should().Be(payloadStatus);
295+
}
296+
}
297+
284298
public void AssertPayloadCollection(Payload payloadCollection, PatientDetails patientDetails, WorkflowRequestMessage workflowRequestMessage)
285299
{
286300
payloadCollection.PayloadId.Should().Be(workflowRequestMessage.PayloadId.ToString());

tests/IntegrationTests/WorkflowExecutor.IntegrationTests/TestData/PayloadTestData.cs

+72
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,78 @@ public static class PayloadsTestData
352352
PatientSex = "male"
353353
}
354354
}
355+
},
356+
new PayloadTestData()
357+
{
358+
Name = "Payload_PayloadStatus_1",
359+
Payload = new Payload()
360+
{
361+
Id = Guid.NewGuid().ToString(),
362+
Timestamp = DateTime.UtcNow,
363+
Bucket = "bucket_1",
364+
CalledAeTitle = "MIG",
365+
CallingAeTitle = "Basic_AE",
366+
CorrelationId = Guid.NewGuid().ToString(),
367+
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c1",
368+
Workflows = new List<string> { Guid.NewGuid().ToString() },
369+
FileCount = 50,
370+
PayloadDeleted = PayloadDeleted.No,
371+
PatientDetails = new PatientDetails()
372+
{
373+
PatientDob = new DateTime(1996, 02, 05, 0, 0, 0, kind: DateTimeKind.Utc),
374+
PatientId = Guid.NewGuid().ToString(),
375+
PatientName = "Mike Mcgee",
376+
PatientSex = "male"
377+
}
378+
}
379+
},
380+
new PayloadTestData()
381+
{
382+
Name = "Payload_PayloadStatus_2",
383+
Payload = new Payload()
384+
{
385+
Id = Guid.NewGuid().ToString(),
386+
Timestamp = DateTime.UtcNow,
387+
Bucket = "bucket_1",
388+
CalledAeTitle = "MIG",
389+
CallingAeTitle = "Basic_AE",
390+
CorrelationId = Guid.NewGuid().ToString(),
391+
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c2",
392+
Workflows = new List<string> { Guid.NewGuid().ToString() },
393+
FileCount = 50,
394+
PayloadDeleted = PayloadDeleted.No,
395+
PatientDetails = new PatientDetails()
396+
{
397+
PatientDob = new DateTime(1996, 02, 05, 0, 0, 0, kind: DateTimeKind.Utc),
398+
PatientId = Guid.NewGuid().ToString(),
399+
PatientName = "Mike Mcgee",
400+
PatientSex = "male"
401+
}
402+
}
403+
},
404+
new PayloadTestData()
405+
{
406+
Name = "Payload_PayloadStatus_3",
407+
Payload = new Payload()
408+
{
409+
Id = Guid.NewGuid().ToString(),
410+
Timestamp = DateTime.UtcNow,
411+
Bucket = "bucket_1",
412+
CalledAeTitle = "MIG",
413+
CallingAeTitle = "Basic_AE",
414+
CorrelationId = Guid.NewGuid().ToString(),
415+
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c3",
416+
Workflows = new List<string> { Guid.NewGuid().ToString() },
417+
FileCount = 50,
418+
PayloadDeleted = PayloadDeleted.No,
419+
PatientDetails = new PatientDetails()
420+
{
421+
PatientDob = new DateTime(1996, 02, 05, 0, 0, 0, kind: DateTimeKind.Utc),
422+
PatientId = Guid.NewGuid().ToString(),
423+
PatientName = "Mike Mcgee",
424+
PatientSex = "male"
425+
}
426+
}
355427
}
356428
};
357429
}

tests/IntegrationTests/WorkflowExecutor.IntegrationTests/TestData/WorkflowInstanceTestData.cs

+203
Original file line numberDiff line numberDiff line change
@@ -2008,6 +2008,209 @@ public static WorkflowInstance CreateWorkflowInstance(string workflowName)
20082008
}
20092009
}
20102010
},
2011+
new WorkflowInstanceTestData()
2012+
{
2013+
Name = "Workflow_Instance_For_PayloadData_Payload_PayloadStatus_1_1",
2014+
WorkflowInstance = new WorkflowInstance()
2015+
{
2016+
Id = Guid.NewGuid().ToString(),
2017+
AeTitle = "Multi_Req",
2018+
WorkflowId = Helper.GetWorkflowByName("Multi_Request_Workflow_Created")?.WorkflowRevision?.WorkflowId ?? "",
2019+
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c1",
2020+
BucketId = "bucket1",
2021+
StartTime = DateTime.UtcNow,
2022+
Status = Status.Created,
2023+
InputMetaData = new Dictionary<string, string>()
2024+
{
2025+
{ "", "" }
2026+
},
2027+
Tasks = new List<TaskExecution>
2028+
{
2029+
new TaskExecution()
2030+
{
2031+
ExecutionId = "d32d5769-4ecf-4639-a048-6ecf2cced04a",
2032+
TaskId = "First_Task",
2033+
OutputDirectory = "payloadId/workflows/workflowInstanceId/executionId/",
2034+
TaskType = "Multi_task",
2035+
Status = TaskExecutionStatus.Failed,
2036+
}
2037+
}
2038+
}
2039+
},
2040+
new WorkflowInstanceTestData()
2041+
{
2042+
Name = "Workflow_Instance_For_PayloadData_Payload_PayloadStatus_1_2",
2043+
WorkflowInstance = new WorkflowInstance()
2044+
{
2045+
Id = Guid.NewGuid().ToString(),
2046+
AeTitle = "Multi_Req",
2047+
WorkflowId = Helper.GetWorkflowByName("Multi_Request_Workflow_Created")?.WorkflowRevision?.WorkflowId ?? "",
2048+
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c1",
2049+
BucketId = "bucket1",
2050+
StartTime = DateTime.UtcNow,
2051+
Status = Status.Created,
2052+
InputMetaData = new Dictionary<string, string>()
2053+
{
2054+
{ "", "" }
2055+
},
2056+
Tasks = new List<TaskExecution>
2057+
{
2058+
new TaskExecution()
2059+
{
2060+
ExecutionId = "d32d5769-4ecf-4639-a048-6ecf2cced04a",
2061+
TaskId = "First_Task",
2062+
OutputDirectory = "payloadId/workflows/workflowInstanceId/executionId/",
2063+
TaskType = "Multi_task",
2064+
Status = TaskExecutionStatus.Failed,
2065+
}
2066+
}
2067+
}
2068+
},
2069+
new WorkflowInstanceTestData()
2070+
{
2071+
Name = "Workflow_Instance_For_PayloadData_Payload_PayloadStatus_2_1",
2072+
WorkflowInstance = new WorkflowInstance()
2073+
{
2074+
Id = Guid.NewGuid().ToString(),
2075+
AeTitle = "Multi_Req",
2076+
WorkflowId = Helper.GetWorkflowByName("Multi_Request_Workflow_Created")?.WorkflowRevision?.WorkflowId ?? "",
2077+
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c2",
2078+
BucketId = "bucket1",
2079+
StartTime = DateTime.UtcNow,
2080+
Status = Status.Succeeded,
2081+
InputMetaData = new Dictionary<string, string>()
2082+
{
2083+
{ "", "" }
2084+
},
2085+
Tasks = new List<TaskExecution>
2086+
{
2087+
new TaskExecution()
2088+
{
2089+
ExecutionId = "d32d5769-4ecf-4639-a048-6ecf2cced04a",
2090+
TaskId = "First_Task",
2091+
OutputDirectory = "payloadId/workflows/workflowInstanceId/executionId/",
2092+
TaskType = "Multi_task",
2093+
Status = TaskExecutionStatus.Failed,
2094+
}
2095+
}
2096+
}
2097+
},
2098+
new WorkflowInstanceTestData()
2099+
{
2100+
Name = "Workflow_Instance_For_PayloadData_Payload_PayloadStatus_2_2",
2101+
WorkflowInstance = new WorkflowInstance()
2102+
{
2103+
Id = Guid.NewGuid().ToString(),
2104+
AeTitle = "Multi_Req",
2105+
WorkflowId = Helper.GetWorkflowByName("Multi_Request_Workflow_Created")?.WorkflowRevision?.WorkflowId ?? "",
2106+
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c2",
2107+
BucketId = "bucket1",
2108+
StartTime = DateTime.UtcNow,
2109+
Status = Status.Failed,
2110+
InputMetaData = new Dictionary<string, string>()
2111+
{
2112+
{ "", "" }
2113+
},
2114+
Tasks = new List<TaskExecution>
2115+
{
2116+
new TaskExecution()
2117+
{
2118+
ExecutionId = "d32d5769-4ecf-4639-a048-6ecf2cced04a",
2119+
TaskId = "First_Task",
2120+
OutputDirectory = "payloadId/workflows/workflowInstanceId/executionId/",
2121+
TaskType = "Multi_task",
2122+
Status = TaskExecutionStatus.Failed,
2123+
}
2124+
}
2125+
}
2126+
},
2127+
new WorkflowInstanceTestData()
2128+
{
2129+
Name = "Workflow_Instance_For_PayloadData_Payload_PayloadStatus_3_1",
2130+
WorkflowInstance = new WorkflowInstance()
2131+
{
2132+
Id = Guid.NewGuid().ToString(),
2133+
AeTitle = "Multi_Req",
2134+
WorkflowId = Helper.GetWorkflowByName("Multi_Request_Workflow_Created")?.WorkflowRevision?.WorkflowId ?? "",
2135+
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c3",
2136+
BucketId = "bucket1",
2137+
StartTime = DateTime.UtcNow,
2138+
Status = Status.Created,
2139+
InputMetaData = new Dictionary<string, string>()
2140+
{
2141+
{ "", "" }
2142+
},
2143+
Tasks = new List<TaskExecution>
2144+
{
2145+
new TaskExecution()
2146+
{
2147+
ExecutionId = "d32d5769-4ecf-4639-a048-6ecf2cced04a",
2148+
TaskId = "First_Task",
2149+
OutputDirectory = "payloadId/workflows/workflowInstanceId/executionId/",
2150+
TaskType = "Multi_task",
2151+
Status = TaskExecutionStatus.Failed,
2152+
}
2153+
}
2154+
}
2155+
},
2156+
new WorkflowInstanceTestData()
2157+
{
2158+
Name = "Workflow_Instance_For_PayloadData_Payload_PayloadStatus_3_2",
2159+
WorkflowInstance = new WorkflowInstance()
2160+
{
2161+
Id = Guid.NewGuid().ToString(),
2162+
AeTitle = "Multi_Req",
2163+
WorkflowId = Helper.GetWorkflowByName("Multi_Request_Workflow_Created")?.WorkflowRevision?.WorkflowId ?? "",
2164+
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c3",
2165+
BucketId = "bucket1",
2166+
StartTime = DateTime.UtcNow,
2167+
Status = Status.Succeeded,
2168+
InputMetaData = new Dictionary<string, string>()
2169+
{
2170+
{ "", "" }
2171+
},
2172+
Tasks = new List<TaskExecution>
2173+
{
2174+
new TaskExecution()
2175+
{
2176+
ExecutionId = "d32d5769-4ecf-4639-a048-6ecf2cced04a",
2177+
TaskId = "First_Task",
2178+
OutputDirectory = "payloadId/workflows/workflowInstanceId/executionId/",
2179+
TaskType = "Multi_task",
2180+
Status = TaskExecutionStatus.Failed,
2181+
}
2182+
}
2183+
}
2184+
},
2185+
new WorkflowInstanceTestData()
2186+
{
2187+
Name = "Workflow_Instance_For_PayloadData_Payload_PayloadStatus_3_3",
2188+
WorkflowInstance = new WorkflowInstance()
2189+
{
2190+
Id = Guid.NewGuid().ToString(),
2191+
AeTitle = "Multi_Req",
2192+
WorkflowId = Helper.GetWorkflowByName("Multi_Request_Workflow_Created")?.WorkflowRevision?.WorkflowId ?? "",
2193+
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c3",
2194+
BucketId = "bucket1",
2195+
StartTime = DateTime.UtcNow,
2196+
Status = Status.Failed,
2197+
InputMetaData = new Dictionary<string, string>()
2198+
{
2199+
{ "", "" }
2200+
},
2201+
Tasks = new List<TaskExecution>
2202+
{
2203+
new TaskExecution()
2204+
{
2205+
ExecutionId = "d32d5769-4ecf-4639-a048-6ecf2cced04a",
2206+
TaskId = "First_Task",
2207+
OutputDirectory = "payloadId/workflows/workflowInstanceId/executionId/",
2208+
TaskType = "Multi_task",
2209+
Status = TaskExecutionStatus.Failed,
2210+
}
2211+
}
2212+
}
2213+
},
20112214
};
20122215
}
20132216
}

tests/UnitTests/Common.Tests/Services/PayloadServiceTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ public async Task GetAll_ReturnsPayloads()
299299
p.GetAllAsync(
300300
It.IsAny<int?>(), It.IsAny<int?>(), It.IsAny<string>(), It.IsAny<string>())
301301
).ReturnsAsync(() => input);
302-
var param = input.Select(i => i.Id).ToList();
302+
var param = input.Select(i => i.PayloadId).ToList();
303303
_workflowInstanceRepository.Setup(r =>
304304
r.GetByPayloadIdsAsync(param)
305305
).ReturnsAsync(() =>

0 commit comments

Comments
 (0)