Skip to content

Commit

Permalink
fix payload status and add int tests (#804)
Browse files Browse the repository at this point in the history
* 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]>
  • Loading branch information
samrooke authored May 15, 2023
1 parent ab91216 commit fa43b84
Show file tree
Hide file tree
Showing 7 changed files with 349 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/WorkflowManager/Common/Services/PayloadService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ private async Task<IList<PayloadDto>> CreatePayloadsDto(IList<Payload> payloads)
return dtos;
}

var payloadIds = payloads.Select(payload => payload.Id).ToList();
var payloadIds = payloads.Select(payload => payload.PayloadId).ToList();

var workflowInstances =
await _workflowInstanceRepository.GetByPayloadIdsAsync(payloadIds);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,37 @@ Scenario: Get all payloads from API - no payloads
Then I will get a 200 response
And I can see no Payloads are returned

@GetPayloads
Scenario: Get all payloads from API - Workflow Instances Created - PayloadStatus InProgress
Given I have an endpoint /payload
And I have a payload saved in mongo Payload_PayloadStatus_1
And I have a Workflow Instance Workflow_Instance_For_PayloadData_Payload_PayloadStatus_1_1 with no artifacts
And I have a Workflow Instance Workflow_Instance_For_PayloadData_Payload_PayloadStatus_1_2 with no artifacts
When I send a GET request
Then I will get a 200 response
And I can see expected Payloads are returned with PayloadStatus InProgress

@GetPayloads
Scenario: Get all payloads from API - Workflow Instances Succeeded and Failed - PayloadStatus Complete
Given I have an endpoint /payload
And I have a payload saved in mongo Payload_PayloadStatus_2
And I have a Workflow Instance Workflow_Instance_For_PayloadData_Payload_PayloadStatus_2_1 with no artifacts
And I have a Workflow Instance Workflow_Instance_For_PayloadData_Payload_PayloadStatus_2_2 with no artifacts
When I send a GET request
Then I will get a 200 response
And I can see expected Payloads are returned with PayloadStatus Complete

@GetPayloads
Scenario: Get all payloads from API - Workflow Instances Succeeded, Failed, and Created - PayloadStatus InProgress
Given I have an endpoint /payload
And I have a payload saved in mongo Payload_PayloadStatus_3
And I have a Workflow Instance Workflow_Instance_For_PayloadData_Payload_PayloadStatus_3_1 with no artifacts
And I have a Workflow Instance Workflow_Instance_For_PayloadData_Payload_PayloadStatus_3_2 with no artifacts
And I have a Workflow Instance Workflow_Instance_For_PayloadData_Payload_PayloadStatus_3_3 with no artifacts
When I send a GET request
Then I will get a 200 response
And I can see expected Payloads are returned with PayloadStatus InProgress

@PayloadSearch
Scenario Outline: Get all payloads from API - Test search query parameters
Given I have an endpoint /payload/<search_query>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,33 @@ public void ThenICanSeeExpectedPayloadsAreReturned()
Assertions.AssertPayloadList(DataHelper.Payload, actualPayloads?.Data);
}

[Then(@"I can see expected Payloads are returned with PayloadStatus (.*)")]
public void ThenICanSeeExpectedPayloadsAreReturnedWithPayloadStatus(string payloadStatus)
{
PayloadStatus status;

switch (payloadStatus)
{
case "InProgress":
status = PayloadStatus.InProgress;
break;
case "Complete":
status = PayloadStatus.Complete;
break;
default:
throw new Exception($"Invalid payload status '{payloadStatus}'. Must be one of: InProgress, Complete");
}

var result = ApiHelper.Response.Content.ReadAsStringAsync().Result;

var actualPayloads = JsonConvert.DeserializeObject<PagedResponse<List<PayloadDto>>>(result);
actualPayloads.Should().NotBeNull();
Assertions.AssertPayloadListWithPayloadStatus(
DataHelper.Payload.Select(p => new PayloadDto(p)).ToList(),
actualPayloads?.Data,
status);
}

[Then(@"Search is working correctly for the (.*) payload")]
[Then(@"Search is working correctly for the (.*) payloads")]
public void ThenSearchIsWorkingCorrectlyForThepayloads(int count)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,20 @@ public void AssertPayloadList(List<Payload> payload, List<Payload>? actualPayloa
}
}

public void AssertPayloadListWithPayloadStatus(List<PayloadDto> payload, List<PayloadDto>? actualPayloads, PayloadStatus payloadStatus)
{
actualPayloads.Should().NotBeNull();
actualPayloads?.Count.Should().Be(payload.Count);

foreach (var p in payload)
{
var actualPayload = actualPayloads?.FirstOrDefault(x => x.PayloadId.Equals(p.PayloadId));

AssertPayload(p, actualPayload);
actualPayload?.PayloadStatus.Should().Be(payloadStatus);
}
}

public void AssertPayloadCollection(Payload payloadCollection, PatientDetails patientDetails, WorkflowRequestMessage workflowRequestMessage)
{
payloadCollection.PayloadId.Should().Be(workflowRequestMessage.PayloadId.ToString());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,78 @@ public static class PayloadsTestData
PatientSex = "male"
}
}
},
new PayloadTestData()
{
Name = "Payload_PayloadStatus_1",
Payload = new Payload()
{
Id = Guid.NewGuid().ToString(),
Timestamp = DateTime.UtcNow,
Bucket = "bucket_1",
CalledAeTitle = "MIG",
CallingAeTitle = "Basic_AE",
CorrelationId = Guid.NewGuid().ToString(),
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c1",
Workflows = new List<string> { Guid.NewGuid().ToString() },
FileCount = 50,
PayloadDeleted = PayloadDeleted.No,
PatientDetails = new PatientDetails()
{
PatientDob = new DateTime(1996, 02, 05, 0, 0, 0, kind: DateTimeKind.Utc),
PatientId = Guid.NewGuid().ToString(),
PatientName = "Mike Mcgee",
PatientSex = "male"
}
}
},
new PayloadTestData()
{
Name = "Payload_PayloadStatus_2",
Payload = new Payload()
{
Id = Guid.NewGuid().ToString(),
Timestamp = DateTime.UtcNow,
Bucket = "bucket_1",
CalledAeTitle = "MIG",
CallingAeTitle = "Basic_AE",
CorrelationId = Guid.NewGuid().ToString(),
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c2",
Workflows = new List<string> { Guid.NewGuid().ToString() },
FileCount = 50,
PayloadDeleted = PayloadDeleted.No,
PatientDetails = new PatientDetails()
{
PatientDob = new DateTime(1996, 02, 05, 0, 0, 0, kind: DateTimeKind.Utc),
PatientId = Guid.NewGuid().ToString(),
PatientName = "Mike Mcgee",
PatientSex = "male"
}
}
},
new PayloadTestData()
{
Name = "Payload_PayloadStatus_3",
Payload = new Payload()
{
Id = Guid.NewGuid().ToString(),
Timestamp = DateTime.UtcNow,
Bucket = "bucket_1",
CalledAeTitle = "MIG",
CallingAeTitle = "Basic_AE",
CorrelationId = Guid.NewGuid().ToString(),
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c3",
Workflows = new List<string> { Guid.NewGuid().ToString() },
FileCount = 50,
PayloadDeleted = PayloadDeleted.No,
PatientDetails = new PatientDetails()
{
PatientDob = new DateTime(1996, 02, 05, 0, 0, 0, kind: DateTimeKind.Utc),
PatientId = Guid.NewGuid().ToString(),
PatientName = "Mike Mcgee",
PatientSex = "male"
}
}
}
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2008,6 +2008,209 @@ public static WorkflowInstance CreateWorkflowInstance(string workflowName)
}
}
},
new WorkflowInstanceTestData()
{
Name = "Workflow_Instance_For_PayloadData_Payload_PayloadStatus_1_1",
WorkflowInstance = new WorkflowInstance()
{
Id = Guid.NewGuid().ToString(),
AeTitle = "Multi_Req",
WorkflowId = Helper.GetWorkflowByName("Multi_Request_Workflow_Created")?.WorkflowRevision?.WorkflowId ?? "",
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c1",
BucketId = "bucket1",
StartTime = DateTime.UtcNow,
Status = Status.Created,
InputMetaData = new Dictionary<string, string>()
{
{ "", "" }
},
Tasks = new List<TaskExecution>
{
new TaskExecution()
{
ExecutionId = "d32d5769-4ecf-4639-a048-6ecf2cced04a",
TaskId = "First_Task",
OutputDirectory = "payloadId/workflows/workflowInstanceId/executionId/",
TaskType = "Multi_task",
Status = TaskExecutionStatus.Failed,
}
}
}
},
new WorkflowInstanceTestData()
{
Name = "Workflow_Instance_For_PayloadData_Payload_PayloadStatus_1_2",
WorkflowInstance = new WorkflowInstance()
{
Id = Guid.NewGuid().ToString(),
AeTitle = "Multi_Req",
WorkflowId = Helper.GetWorkflowByName("Multi_Request_Workflow_Created")?.WorkflowRevision?.WorkflowId ?? "",
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c1",
BucketId = "bucket1",
StartTime = DateTime.UtcNow,
Status = Status.Created,
InputMetaData = new Dictionary<string, string>()
{
{ "", "" }
},
Tasks = new List<TaskExecution>
{
new TaskExecution()
{
ExecutionId = "d32d5769-4ecf-4639-a048-6ecf2cced04a",
TaskId = "First_Task",
OutputDirectory = "payloadId/workflows/workflowInstanceId/executionId/",
TaskType = "Multi_task",
Status = TaskExecutionStatus.Failed,
}
}
}
},
new WorkflowInstanceTestData()
{
Name = "Workflow_Instance_For_PayloadData_Payload_PayloadStatus_2_1",
WorkflowInstance = new WorkflowInstance()
{
Id = Guid.NewGuid().ToString(),
AeTitle = "Multi_Req",
WorkflowId = Helper.GetWorkflowByName("Multi_Request_Workflow_Created")?.WorkflowRevision?.WorkflowId ?? "",
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c2",
BucketId = "bucket1",
StartTime = DateTime.UtcNow,
Status = Status.Succeeded,
InputMetaData = new Dictionary<string, string>()
{
{ "", "" }
},
Tasks = new List<TaskExecution>
{
new TaskExecution()
{
ExecutionId = "d32d5769-4ecf-4639-a048-6ecf2cced04a",
TaskId = "First_Task",
OutputDirectory = "payloadId/workflows/workflowInstanceId/executionId/",
TaskType = "Multi_task",
Status = TaskExecutionStatus.Failed,
}
}
}
},
new WorkflowInstanceTestData()
{
Name = "Workflow_Instance_For_PayloadData_Payload_PayloadStatus_2_2",
WorkflowInstance = new WorkflowInstance()
{
Id = Guid.NewGuid().ToString(),
AeTitle = "Multi_Req",
WorkflowId = Helper.GetWorkflowByName("Multi_Request_Workflow_Created")?.WorkflowRevision?.WorkflowId ?? "",
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c2",
BucketId = "bucket1",
StartTime = DateTime.UtcNow,
Status = Status.Failed,
InputMetaData = new Dictionary<string, string>()
{
{ "", "" }
},
Tasks = new List<TaskExecution>
{
new TaskExecution()
{
ExecutionId = "d32d5769-4ecf-4639-a048-6ecf2cced04a",
TaskId = "First_Task",
OutputDirectory = "payloadId/workflows/workflowInstanceId/executionId/",
TaskType = "Multi_task",
Status = TaskExecutionStatus.Failed,
}
}
}
},
new WorkflowInstanceTestData()
{
Name = "Workflow_Instance_For_PayloadData_Payload_PayloadStatus_3_1",
WorkflowInstance = new WorkflowInstance()
{
Id = Guid.NewGuid().ToString(),
AeTitle = "Multi_Req",
WorkflowId = Helper.GetWorkflowByName("Multi_Request_Workflow_Created")?.WorkflowRevision?.WorkflowId ?? "",
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c3",
BucketId = "bucket1",
StartTime = DateTime.UtcNow,
Status = Status.Created,
InputMetaData = new Dictionary<string, string>()
{
{ "", "" }
},
Tasks = new List<TaskExecution>
{
new TaskExecution()
{
ExecutionId = "d32d5769-4ecf-4639-a048-6ecf2cced04a",
TaskId = "First_Task",
OutputDirectory = "payloadId/workflows/workflowInstanceId/executionId/",
TaskType = "Multi_task",
Status = TaskExecutionStatus.Failed,
}
}
}
},
new WorkflowInstanceTestData()
{
Name = "Workflow_Instance_For_PayloadData_Payload_PayloadStatus_3_2",
WorkflowInstance = new WorkflowInstance()
{
Id = Guid.NewGuid().ToString(),
AeTitle = "Multi_Req",
WorkflowId = Helper.GetWorkflowByName("Multi_Request_Workflow_Created")?.WorkflowRevision?.WorkflowId ?? "",
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c3",
BucketId = "bucket1",
StartTime = DateTime.UtcNow,
Status = Status.Succeeded,
InputMetaData = new Dictionary<string, string>()
{
{ "", "" }
},
Tasks = new List<TaskExecution>
{
new TaskExecution()
{
ExecutionId = "d32d5769-4ecf-4639-a048-6ecf2cced04a",
TaskId = "First_Task",
OutputDirectory = "payloadId/workflows/workflowInstanceId/executionId/",
TaskType = "Multi_task",
Status = TaskExecutionStatus.Failed,
}
}
}
},
new WorkflowInstanceTestData()
{
Name = "Workflow_Instance_For_PayloadData_Payload_PayloadStatus_3_3",
WorkflowInstance = new WorkflowInstance()
{
Id = Guid.NewGuid().ToString(),
AeTitle = "Multi_Req",
WorkflowId = Helper.GetWorkflowByName("Multi_Request_Workflow_Created")?.WorkflowRevision?.WorkflowId ?? "",
PayloadId = "a5c3633b-31dd-44c9-8a1a-71adec3d47c3",
BucketId = "bucket1",
StartTime = DateTime.UtcNow,
Status = Status.Failed,
InputMetaData = new Dictionary<string, string>()
{
{ "", "" }
},
Tasks = new List<TaskExecution>
{
new TaskExecution()
{
ExecutionId = "d32d5769-4ecf-4639-a048-6ecf2cced04a",
TaskId = "First_Task",
OutputDirectory = "payloadId/workflows/workflowInstanceId/executionId/",
TaskType = "Multi_task",
Status = TaskExecutionStatus.Failed,
}
}
}
},
};
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,7 @@ public async Task GetAll_ReturnsPayloads()
p.GetAllAsync(
It.IsAny<int?>(), It.IsAny<int?>(), It.IsAny<string>(), It.IsAny<string>())
).ReturnsAsync(() => input);
var param = input.Select(i => i.Id).ToList();
var param = input.Select(i => i.PayloadId).ToList();
_workflowInstanceRepository.Setup(r =>
r.GetByPayloadIdsAsync(param)
).ReturnsAsync(() =>
Expand Down

0 comments on commit fa43b84

Please sign in to comment.