From 282d6162a5f14b27179b61e490e46fee76823836 Mon Sep 17 00:00:00 2001 From: Lillie Dae Date: Tue, 6 Sep 2022 09:45:56 +0100 Subject: [PATCH 1/6] inital commit Signed-off-by: Lillie Dae Signed-off-by: Jack Schofield --- .../Interfaces/IWorkflowInstanceService.cs | 2 +- .../Services/WorkflowInstanceService.cs | 6 ++-- .../Interfaces/IWorkflowInstanceRepository.cs | 2 +- .../WorkflowInstanceRepository.cs | 6 +++- .../Controllers/WorkflowInstanceController.cs | 6 ++-- .../Features/WorkflowInstancesApi.feature | 26 +++++++++++++++ .../WorkflowInstancesApiStepDefinitions.cs | 23 ++++++++++++- .../Support/Assertions.cs | 33 ++++++++++++------- .../Controllers/PayloadControllerTests.cs | 4 +-- 9 files changed, 86 insertions(+), 22 deletions(-) diff --git a/src/WorkflowManager/Common/Interfaces/IWorkflowInstanceService.cs b/src/WorkflowManager/Common/Interfaces/IWorkflowInstanceService.cs index 6ba12311f..84a39d8ab 100644 --- a/src/WorkflowManager/Common/Interfaces/IWorkflowInstanceService.cs +++ b/src/WorkflowManager/Common/Interfaces/IWorkflowInstanceService.cs @@ -32,6 +32,6 @@ public interface IWorkflowInstanceService : IPaginatedApi /// /// /// - public Task> GetAllAsync(int? skip = null, int? limit = null, Status? status = null); + public Task> GetAllAsync(int? skip = null, int? limit = null, Status? status = null, string? paylaodId = null); } } diff --git a/src/WorkflowManager/Common/Services/WorkflowInstanceService.cs b/src/WorkflowManager/Common/Services/WorkflowInstanceService.cs index 79c26c9e4..9e885be6a 100644 --- a/src/WorkflowManager/Common/Services/WorkflowInstanceService.cs +++ b/src/WorkflowManager/Common/Services/WorkflowInstanceService.cs @@ -39,10 +39,10 @@ public async Task GetByIdAsync(string id) public async Task CountAsync() => await _workflowInstanceRepository.CountAsync(); - public async Task> GetAllAsync(int? skip = null, int? limit = null, Status? status = null) - => await _workflowInstanceRepository.GetAllAsync(skip, limit, status); + public async Task> GetAllAsync(int? skip = null, int? limit = null, Status? status = null, string? payloadId = null) + => await _workflowInstanceRepository.GetAllAsync(skip, limit, status, payloadId); public async Task> GetAllAsync(int? skip = null, int? limit = null) - => await _workflowInstanceRepository.GetAllAsync(skip, limit, null); + => await _workflowInstanceRepository.GetAllAsync(skip, limit, null, null); } } diff --git a/src/WorkflowManager/Database/Interfaces/IWorkflowInstanceRepository.cs b/src/WorkflowManager/Database/Interfaces/IWorkflowInstanceRepository.cs index 484c4769f..b5444adc5 100644 --- a/src/WorkflowManager/Database/Interfaces/IWorkflowInstanceRepository.cs +++ b/src/WorkflowManager/Database/Interfaces/IWorkflowInstanceRepository.cs @@ -58,7 +58,7 @@ public interface IWorkflowInstanceRepository /// /// /// - Task> GetAllAsync(int? skip, int? limit, Status? status); + Task> GetAllAsync(int? skip, int? limit, Status? status, string? payloadId); /// /// Updates the Task Status for a given task within a workflow instance. diff --git a/src/WorkflowManager/Database/Repositories/WorkflowInstanceRepository.cs b/src/WorkflowManager/Database/Repositories/WorkflowInstanceRepository.cs index 11e52f45a..5b7b242d0 100644 --- a/src/WorkflowManager/Database/Repositories/WorkflowInstanceRepository.cs +++ b/src/WorkflowManager/Database/Repositories/WorkflowInstanceRepository.cs @@ -236,7 +236,7 @@ public async Task GetByWorkflowInstanceIdAsync(string workflow public Task CountAsync() => CountAsync(_workflowInstanceCollection, null); - public async Task> GetAllAsync(int? skip = null, int? limit = null, Status? status = null) + public async Task> GetAllAsync(int? skip = null, int? limit = null, Status? status = null, string? payloadId = null) { var builder = Builders.Filter; var filter = builder.Empty; @@ -244,6 +244,10 @@ public async Task> GetAllAsync(int? skip = null, int? li { filter &= builder.Eq(w => w.Status, status); } + if (string.IsNullOrEmpty(payloadId) is false) + { + filter &= builder.Eq(w => w.PayloadId, payloadId); + } return await GetAllAsync(_workflowInstanceCollection, filter, diff --git a/src/WorkflowManager/WorkflowManager/Controllers/WorkflowInstanceController.cs b/src/WorkflowManager/WorkflowManager/Controllers/WorkflowInstanceController.cs index de83cef5b..2eb8d80e4 100644 --- a/src/WorkflowManager/WorkflowManager/Controllers/WorkflowInstanceController.cs +++ b/src/WorkflowManager/WorkflowManager/Controllers/WorkflowInstanceController.cs @@ -67,9 +67,10 @@ public WorkflowInstanceController( /// /// Filters. /// Workflow instance status filter. + /// PayloadId. /// A list of workflow instances. [HttpGet] - public async Task GetListAsync([FromQuery] PaginationFilter filter, [FromQuery] string status = null) + public async Task GetListAsync([FromQuery] PaginationFilter filter, [FromQuery] string status = null, [FromQuery] string? payloadId = null) { try { @@ -81,7 +82,8 @@ public async Task GetListAsync([FromQuery] PaginationFilter filte var pagedData = await _workflowInstanceService.GetAllAsync( (validFilter.PageNumber - 1) * validFilter.PageSize, validFilter.PageSize, - parsedStatus); + parsedStatus, + payloadId); var dataTotal = await _workflowInstanceService.CountAsync(); var pagedReponse = CreatePagedReponse(pagedData.ToList(), validFilter, dataTotal, _uriService, route); diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/WorkflowInstancesApi.feature b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/WorkflowInstancesApi.feature index 9ecb31eb1..7fc94ff95 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/WorkflowInstancesApi.feature +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/WorkflowInstancesApi.feature @@ -65,6 +65,32 @@ Scenario Outline: Get all workflow instances from API - Test pagination | | 0 | 0 | | ?pageNumber=1&pageSize=100 | 15 | 15 | +@WorkflowInstancePagination2 +Scenario Outline: Get all workflow instances from API with provided status or PayloadId - Test pagination + Given I have an endpoint /workflowinstances/ + And I have Workflow Instances + When I send a GET request + Then I will get a 200 response + And Pagination is working correctly for the workflow instances + And All results have correct and + Examples: + | pagination_query | amount | pagination_count | expected_status | expected_payloadId | + | ?pageSize=1 | 15 | 15 | | | + | ?pageSize=1&status=created | 15 | 15 | 0 | | + | ?pageSize=1&payloadId=5450c3a9-2b19-45b0-8b17-fb10f89d1b2d | 15 | 15 | | 5450c3a9-2b19-45b0-8b17-fb10f89d1b2d | + #| ?pageNumber=10 | 15 | 15 | + #| ?pageNumber=1&pageSize=10 | 15 | 15 | + #| ?pageSize=10&pageNumber=2 | 13 | 13 | + #| ?pageNumber=2&pageSize=7 | 4 | 4 | + #| ?pageNumber=3&pageSize=10 | 7 | 7 | + #| ?pageNumber=1&pageSize=3 | 10 | 10 | + #| | 15 | 15 | + #| | 3 | 3 | + #| ?pageNumber=3&pageSize=10 | 0 | 0 | + #| ?pageNumber=1 | 0 | 0 | + #| | 0 | 0 | + #| ?pageNumber=1&pageSize=100 | 15 | 15 | + @WorkflowInstancePagination Scenario Outline: Invalid pagination returns 400 Given I have an endpoint /workflowinstances/ diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/WorkflowInstancesApiStepDefinitions.cs b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/WorkflowInstancesApiStepDefinitions.cs index 08198ce77..c42ff21e4 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/WorkflowInstancesApiStepDefinitions.cs +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/WorkflowInstancesApiStepDefinitions.cs @@ -56,10 +56,31 @@ public void ThenICanSeeExpectedWorkflowInstanceIsReturned() [Then(@"Pagination is working correctly for the (.*) workflow instances")] public void ThenPaginationIsWorkingCorrectlyForTheWorkflowInstance(int count) { - var request = ApiHelper.Request.RequestUri.Query; + var request = ApiHelper.Request.RequestUri?.Query; var result = ApiHelper.Response.Content.ReadAsStringAsync().Result; var deserializedResult = JsonConvert.DeserializeObject>>(result); Assertions.AssertPagination(count, request, deserializedResult); } + + [Then(@"All results have correct (.*) and (.*)")] + public void AllResultsHaveExpectedStatusOrPayloadId(int? expected_status, string? expected_payloadId) + { + //var request = ApiHelper.Request.RequestUri?.Query; + var result = ApiHelper.Response.Content.ReadAsStringAsync().Result; + var deserializedResult = JsonConvert.DeserializeObject>>(result); + + Action func = wi => { }; + if (string.IsNullOrWhiteSpace(expected_payloadId) is false) + { + func += wi => wi.PayloadId.Should().Be(expected_payloadId); + } + if (expected_status is not null) + { + func += wi => wi.Status.Should().Be((Status)expected_status); + } + + deserializedResult.Should().NotBeNull(); + deserializedResult?.Data.ForEach(func); + } } } diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/Assertions.cs b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/Assertions.cs index 7579b9c6e..805e5e5c0 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/Assertions.cs +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/Assertions.cs @@ -292,25 +292,26 @@ public void AssertWorkflowIstanceMatchesExpectedTaskStatusUpdate(WorkflowInstanc public static void AssertPagination(int count, string queries, T? Response) { var responseType = Response?.GetType(); - var data = responseType?.GetProperty("Data")?.GetValue(Response, null) as ICollection; - var totalPages = responseType?.GetProperty("TotalPages")?.GetValue(Response, null); - var pageSize = responseType?.GetProperty("PageSize")?.GetValue(Response, null); - var totalRecords = responseType?.GetProperty("TotalRecords")?.GetValue(Response, null); - var pageNumber = responseType?.GetProperty("PageNumber")?.GetValue(Response, null); - int pageNumberQuery = 1; - int pageSizeQuery = 10; + GetPropertyValues(Response, responseType, out var data, out var totalPages, out var pageSize, out var totalRecords, out var pageNumber); + var pageNumberQuery = 1; + var pageSizeQuery = 10; var splitQuery = queries.Split("&").ToList(); + if (queries != "") { foreach (var query in splitQuery) { - if (query.Contains("pageNumber")) + if (query.Contains("status=") || query.Contains("payloadId=")) + { + continue; + } + else if (query.Contains("pageNumber") && int.TryParse(query.Split("=")[1], out var pageNumberResult)) { - pageNumberQuery = Int32.Parse(query.Split("=")[1]); + pageNumberQuery = pageNumberResult; } - else if (query.Contains("pageSize")) + else if (query.Contains("pageSize") && int.TryParse(query.Split("=")[1], out var pageSizeResult)) { - pageSizeQuery = Int32.Parse(query.Split("=")[1]); + pageSizeQuery = pageSizeResult; } else { @@ -318,6 +319,7 @@ public static void AssertPagination(int count, string queries, T? Response) } } } + AssertDataCount(data, pageNumberQuery, pageSizeQuery, count); AssertTotalPages(totalPages, count, pageSizeQuery); totalRecords.Should().Be(count); @@ -325,6 +327,15 @@ public static void AssertPagination(int count, string queries, T? Response) pageSize.Should().Be(pageSizeQuery); } + private static void GetPropertyValues(T? Response, Type? responseType, out ICollection? data, out object? totalPages, out object? pageSize, out object? totalRecords, out object? pageNumber) + { + data = responseType?.GetProperty("Data")?.GetValue(Response, null) as ICollection; + totalPages = responseType?.GetProperty("TotalPages")?.GetValue(Response, null); + pageSize = responseType?.GetProperty("PageSize")?.GetValue(Response, null); + totalRecords = responseType?.GetProperty("TotalRecords")?.GetValue(Response, null); + pageNumber = responseType?.GetProperty("PageNumber")?.GetValue(Response, null); + } + public void WorkflowInstanceIncludesTaskDetails(List taskDispatchEvents, WorkflowInstance workflowInstance, WorkflowRevision workflowRevision) { foreach (var taskDispatchEvent in taskDispatchEvents) diff --git a/tests/UnitTests/WorkflowManager.Tests/Controllers/PayloadControllerTests.cs b/tests/UnitTests/WorkflowManager.Tests/Controllers/PayloadControllerTests.cs index 5c0e88517..0d63dad0a 100644 --- a/tests/UnitTests/WorkflowManager.Tests/Controllers/PayloadControllerTests.cs +++ b/tests/UnitTests/WorkflowManager.Tests/Controllers/PayloadControllerTests.cs @@ -76,7 +76,7 @@ public async Task GetListAsync_WorkflowInstancesExist_ReturnsList() } }; - _workflowInstanceService.Setup(w => w.GetAllAsync(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(() => workflowsInstances); + _workflowInstanceService.Setup(w => w.GetAllAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(() => workflowsInstances); _workflowInstanceService.Setup(w => w.CountAsync()).ReturnsAsync(workflowsInstances.Count); _uriService.Setup(s => s.GetPageUriString(It.IsAny(), It.IsAny())).Returns(() => "unitTest"); @@ -101,7 +101,7 @@ public async Task GetListAsync_WorkflowInstancesExist_ReturnsList() [Fact] public async Task GetListAsync_ServiceException_ReturnProblem() { - _workflowInstanceService.Setup(w => w.GetAllAsync(It.IsAny(), It.IsAny(), It.IsAny())).ThrowsAsync(new Exception()); + _workflowInstanceService.Setup(w => w.GetAllAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ThrowsAsync(new Exception()); _workflowInstanceService.Setup(w => w.CountAsync()).ReturnsAsync(0); var result = await WorkflowInstanceController.GetListAsync(new Filter.PaginationFilter()); From 0dd6390857741eb5d11f776bb94bc96832583ae3 Mon Sep 17 00:00:00 2001 From: Lillie Dae Date: Tue, 6 Sep 2022 12:47:19 +0100 Subject: [PATCH 2/6] AC-487 testing jira commit message and some minor fixs Signed-off-by: Lillie Dae Signed-off-by: Jack Schofield --- .../Controllers/WorkflowInstanceController.cs | 2 +- src/WorkflowManager/WorkflowManager/Services/UriService.cs | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/WorkflowManager/WorkflowManager/Controllers/WorkflowInstanceController.cs b/src/WorkflowManager/WorkflowManager/Controllers/WorkflowInstanceController.cs index 2eb8d80e4..25e8a6db9 100644 --- a/src/WorkflowManager/WorkflowManager/Controllers/WorkflowInstanceController.cs +++ b/src/WorkflowManager/WorkflowManager/Controllers/WorkflowInstanceController.cs @@ -86,7 +86,7 @@ public async Task GetListAsync([FromQuery] PaginationFilter filte payloadId); var dataTotal = await _workflowInstanceService.CountAsync(); - var pagedReponse = CreatePagedReponse(pagedData.ToList(), validFilter, dataTotal, _uriService, route); + var pagedReponse = CreatePagedReponse(pagedData.ToList(), validFilter, dataTotal, _uriService, route); return Ok(pagedReponse); } diff --git a/src/WorkflowManager/WorkflowManager/Services/UriService.cs b/src/WorkflowManager/WorkflowManager/Services/UriService.cs index cfc3cbfa7..292eeec3b 100644 --- a/src/WorkflowManager/WorkflowManager/Services/UriService.cs +++ b/src/WorkflowManager/WorkflowManager/Services/UriService.cs @@ -44,6 +44,11 @@ public UriService(Uri baseUri) /// Uri. public string GetPageUriString(PaginationFilter filter, string route) { + if (_baseUri.ToString().EndsWith('/') && route.StartsWith('/')) + { + route = route.TrimStart('/'); + } + var endpointUri = new Uri(string.Concat(_baseUri, route)); var modifiedUri = QueryHelpers.AddQueryString(endpointUri.ToString(), "pageNumber", filter.PageNumber.ToString()); modifiedUri = QueryHelpers.AddQueryString(modifiedUri, "pageSize", filter?.PageSize?.ToString() ?? string.Empty); From 057c33bc8d8925808275349ad88b88cba611b89c Mon Sep 17 00:00:00 2001 From: Lillie Dae Date: Tue, 6 Sep 2022 13:07:29 +0100 Subject: [PATCH 3/6] minor fix Signed-off-by: Lillie Dae Signed-off-by: Jack Schofield --- .../Features/WorkflowInstancesApi.feature | 14 +------------- .../WorkflowInstancesApiStepDefinitions.cs | 1 - .../Support/Assertions.cs | 6 +++--- 3 files changed, 4 insertions(+), 17 deletions(-) diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/WorkflowInstancesApi.feature b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/WorkflowInstancesApi.feature index 7fc94ff95..53e1c78bc 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/WorkflowInstancesApi.feature +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/WorkflowInstancesApi.feature @@ -65,7 +65,7 @@ Scenario Outline: Get all workflow instances from API - Test pagination | | 0 | 0 | | ?pageNumber=1&pageSize=100 | 15 | 15 | -@WorkflowInstancePagination2 +@WorkflowInstancePagination Scenario Outline: Get all workflow instances from API with provided status or PayloadId - Test pagination Given I have an endpoint /workflowinstances/ And I have Workflow Instances @@ -78,18 +78,6 @@ Scenario Outline: Get all workflow instances from API with provided status or Pa | ?pageSize=1 | 15 | 15 | | | | ?pageSize=1&status=created | 15 | 15 | 0 | | | ?pageSize=1&payloadId=5450c3a9-2b19-45b0-8b17-fb10f89d1b2d | 15 | 15 | | 5450c3a9-2b19-45b0-8b17-fb10f89d1b2d | - #| ?pageNumber=10 | 15 | 15 | - #| ?pageNumber=1&pageSize=10 | 15 | 15 | - #| ?pageSize=10&pageNumber=2 | 13 | 13 | - #| ?pageNumber=2&pageSize=7 | 4 | 4 | - #| ?pageNumber=3&pageSize=10 | 7 | 7 | - #| ?pageNumber=1&pageSize=3 | 10 | 10 | - #| | 15 | 15 | - #| | 3 | 3 | - #| ?pageNumber=3&pageSize=10 | 0 | 0 | - #| ?pageNumber=1 | 0 | 0 | - #| | 0 | 0 | - #| ?pageNumber=1&pageSize=100 | 15 | 15 | @WorkflowInstancePagination Scenario Outline: Invalid pagination returns 400 diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/WorkflowInstancesApiStepDefinitions.cs b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/WorkflowInstancesApiStepDefinitions.cs index c42ff21e4..5a56be9ca 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/WorkflowInstancesApiStepDefinitions.cs +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/WorkflowInstancesApiStepDefinitions.cs @@ -65,7 +65,6 @@ public void ThenPaginationIsWorkingCorrectlyForTheWorkflowInstance(int count) [Then(@"All results have correct (.*) and (.*)")] public void AllResultsHaveExpectedStatusOrPayloadId(int? expected_status, string? expected_payloadId) { - //var request = ApiHelper.Request.RequestUri?.Query; var result = ApiHelper.Response.Content.ReadAsStringAsync().Result; var deserializedResult = JsonConvert.DeserializeObject>>(result); diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/Assertions.cs b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/Assertions.cs index 805e5e5c0..3e08f808c 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/Assertions.cs +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/Assertions.cs @@ -289,16 +289,16 @@ public void AssertWorkflowIstanceMatchesExpectedTaskStatusUpdate(WorkflowInstanc updatedWorkflowInstance.Tasks[0].Status.Should().Be(taskExecutionStatus); } - public static void AssertPagination(int count, string queries, T? Response) + public static void AssertPagination(int count, string? queries, T? Response) { var responseType = Response?.GetType(); GetPropertyValues(Response, responseType, out var data, out var totalPages, out var pageSize, out var totalRecords, out var pageNumber); var pageNumberQuery = 1; var pageSizeQuery = 10; - var splitQuery = queries.Split("&").ToList(); - if (queries != "") + if (string.IsNullOrWhiteSpace(queries) is false) { + var splitQuery = queries?.Split("&") ?? Array.Empty(); foreach (var query in splitQuery) { if (query.Contains("status=") || query.Contains("payloadId=")) From 5011c4cfb9d0b9ce8dbfdd70ba33ede8dd768c28 Mon Sep 17 00:00:00 2001 From: Jack Schofield Date: Wed, 7 Sep 2022 14:27:22 +0100 Subject: [PATCH 4/6] fix workflowinstanceids not being stored in payload Signed-off-by: Jack Schofield --- .../WorkflowExecuter/Services/WorkflowExecuterService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WorkflowManager/WorkflowExecuter/Services/WorkflowExecuterService.cs b/src/WorkflowManager/WorkflowExecuter/Services/WorkflowExecuterService.cs index a350c9668..209ff3d93 100644 --- a/src/WorkflowManager/WorkflowExecuter/Services/WorkflowExecuterService.cs +++ b/src/WorkflowManager/WorkflowExecuter/Services/WorkflowExecuterService.cs @@ -116,7 +116,7 @@ await _workflowRepository.GetWorkflowsByAeTitleAsync(message.CalledAeTitle) as L { processed &= await _workflowInstanceRepository.CreateAsync(workflowInstances); - var workflowInstanceIds = workflowInstances.Select(workflowInstance => workflowInstance.WorkflowId); + var workflowInstanceIds = workflowInstances.Select(workflowInstance => workflowInstance.Id); await _payloadService.UpdateWorkflowInstanceIdsAsync(payload.Id, workflowInstanceIds).ConfigureAwait(false); } From 6b21ae0be29201e4735b425d34d2f02c9952d82e Mon Sep 17 00:00:00 2001 From: Jack Schofield Date: Wed, 7 Sep 2022 14:58:21 +0100 Subject: [PATCH 5/6] add disable pagination to workflowinstance get Signed-off-by: Jack Schofield --- .../Interfaces/IWorkflowInstanceService.cs | 3 +- .../Controllers/WorkflowInstanceController.cs | 13 +- .../Controllers/PayloadControllerTests.cs | 89 +++++-------- .../WorkflowInstanceControllerTests.cs | 122 +++++++++++++----- 4 files changed, 135 insertions(+), 92 deletions(-) diff --git a/src/WorkflowManager/Common/Interfaces/IWorkflowInstanceService.cs b/src/WorkflowManager/Common/Interfaces/IWorkflowInstanceService.cs index 84a39d8ab..930a24c5e 100644 --- a/src/WorkflowManager/Common/Interfaces/IWorkflowInstanceService.cs +++ b/src/WorkflowManager/Common/Interfaces/IWorkflowInstanceService.cs @@ -31,7 +31,8 @@ public interface IWorkflowInstanceService : IPaginatedApi /// /// /// + /// /// - public Task> GetAllAsync(int? skip = null, int? limit = null, Status? status = null, string? paylaodId = null); + public Task> GetAllAsync(int? skip = null, int? limit = null, Status? status = null, string? payloadId = null); } } diff --git a/src/WorkflowManager/WorkflowManager/Controllers/WorkflowInstanceController.cs b/src/WorkflowManager/WorkflowManager/Controllers/WorkflowInstanceController.cs index 25e8a6db9..e98e162ef 100644 --- a/src/WorkflowManager/WorkflowManager/Controllers/WorkflowInstanceController.cs +++ b/src/WorkflowManager/WorkflowManager/Controllers/WorkflowInstanceController.cs @@ -68,15 +68,24 @@ public WorkflowInstanceController( /// Filters. /// Workflow instance status filter. /// PayloadId. + /// Disabled pagination. /// A list of workflow instances. [HttpGet] - public async Task GetListAsync([FromQuery] PaginationFilter filter, [FromQuery] string status = null, [FromQuery] string? payloadId = null) + public async Task GetListAsync([FromQuery] PaginationFilter filter, [FromQuery] string status = null, [FromQuery] string? payloadId = null, [FromQuery] bool disablePagination = false) { try { + Status? parsedStatus = status == null ? null : Enum.Parse(status, true); + + if (disablePagination is true) + { + var unpagedData = await _workflowInstanceService.GetAllAsync(null, null, parsedStatus, payloadId); + + return Ok(unpagedData); + } + var route = Request?.Path.Value ?? string.Empty; var pageSize = filter.PageSize ?? _options.Value.EndpointSettings.DefaultPageSize; - Status? parsedStatus = status == null ? null : Enum.Parse(status, true); var validFilter = new PaginationFilter(filter.PageNumber, pageSize, _options.Value.EndpointSettings.MaxPageSize); var pagedData = await _workflowInstanceService.GetAllAsync( diff --git a/tests/UnitTests/WorkflowManager.Tests/Controllers/PayloadControllerTests.cs b/tests/UnitTests/WorkflowManager.Tests/Controllers/PayloadControllerTests.cs index 0d63dad0a..ca912d5cd 100644 --- a/tests/UnitTests/WorkflowManager.Tests/Controllers/PayloadControllerTests.cs +++ b/tests/UnitTests/WorkflowManager.Tests/Controllers/PayloadControllerTests.cs @@ -22,7 +22,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using Monai.Deploy.Messaging.Events; using Monai.Deploy.WorkflowManager.Common.Interfaces; using Monai.Deploy.WorkflowManager.Configuration; using Monai.Deploy.WorkflowManager.Contracts.Models; @@ -34,58 +33,47 @@ namespace Monai.Deploy.WorkflowManager.Test.Controllers { - public class WorkflowsInstanceControllerTests + public class PayloadControllerTests { - private WorkflowInstanceController WorkflowInstanceController { get; set; } + private PayloadsController PayloadController { get; set; } - private readonly Mock _workflowInstanceService; - private readonly Mock> _logger; + private readonly Mock _payloadService; + private readonly Mock> _logger; private readonly Mock _uriService; private readonly IOptions _options; - public WorkflowsInstanceControllerTests() + public PayloadControllerTests() { _options = Options.Create(new WorkflowManagerOptions()); - _workflowInstanceService = new Mock(); - _logger = new Mock>(); + _payloadService = new Mock(); + _logger = new Mock>(); _uriService = new Mock(); - WorkflowInstanceController = new WorkflowInstanceController(_workflowInstanceService.Object, _logger.Object, _uriService.Object, _options); + PayloadController = new PayloadsController(_payloadService.Object, _logger.Object, _uriService.Object, _options); } [Fact] - public async Task GetListAsync_WorkflowInstancesExist_ReturnsList() + public async Task GetListAsync_PayloadsExist_ReturnsList() { - var workflowsInstances = new List + var payloads = new List { - new WorkflowInstance + new Payload { Id = Guid.NewGuid().ToString(), - WorkflowId = Guid.NewGuid().ToString(), PayloadId = Guid.NewGuid().ToString(), - Status = Status.Created, - BucketId = "bucket", - Tasks = new List - { - new TaskExecution - { - TaskId = Guid.NewGuid().ToString(), - Status = TaskExecutionStatus.Dispatched - } - } } }; - _workflowInstanceService.Setup(w => w.GetAllAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(() => workflowsInstances); - _workflowInstanceService.Setup(w => w.CountAsync()).ReturnsAsync(workflowsInstances.Count); + _payloadService.Setup(w => w.GetAllAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(payloads); + _payloadService.Setup(w => w.CountAsync()).ReturnsAsync(payloads.Count); _uriService.Setup(s => s.GetPageUriString(It.IsAny(), It.IsAny())).Returns(() => "unitTest"); - var result = await WorkflowInstanceController.GetListAsync(new Filter.PaginationFilter()); + var result = await PayloadController.GetAllAsync(new Filter.PaginationFilter()); var objectResult = Assert.IsType(result); - var responseValue = (PagedResponse>)objectResult.Value; - responseValue.Data.Should().BeEquivalentTo(workflowsInstances); + var responseValue = (PagedResponse>)objectResult.Value; + responseValue.Data.Should().BeEquivalentTo(payloads); responseValue.FirstPage.Should().Be("unitTest"); responseValue.LastPage.Should().Be("unitTest"); responseValue.PageNumber.Should().Be(1); @@ -101,50 +89,39 @@ public async Task GetListAsync_WorkflowInstancesExist_ReturnsList() [Fact] public async Task GetListAsync_ServiceException_ReturnProblem() { - _workflowInstanceService.Setup(w => w.GetAllAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ThrowsAsync(new Exception()); - _workflowInstanceService.Setup(w => w.CountAsync()).ReturnsAsync(0); + _payloadService.Setup(w => w.GetAllAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ThrowsAsync(new Exception()); - var result = await WorkflowInstanceController.GetListAsync(new Filter.PaginationFilter()); + var result = await PayloadController.GetAllAsync(new Filter.PaginationFilter()); var objectResult = Assert.IsType(result); Assert.Equal((int)HttpStatusCode.InternalServerError, objectResult.StatusCode); } [Fact] - public async Task GetByIdAsync_WorkflowInstancesExist_ReturnsOk() + public async Task GetByIdAsync_PayloadExists_ReturnsOk() { - var workflowsInstance = new WorkflowInstance + var payloadId = Guid.NewGuid().ToString(); + var payload = new Payload { Id = Guid.NewGuid().ToString(), - WorkflowId = Guid.NewGuid().ToString(), - PayloadId = Guid.NewGuid().ToString(), - Status = Status.Created, - BucketId = "bucket", - Tasks = new List - { - new TaskExecution - { - TaskId = Guid.NewGuid().ToString(), - Status = TaskExecutionStatus.Dispatched - } - } + PayloadId = payloadId, }; - _workflowInstanceService.Setup(w => w.GetByIdAsync(workflowsInstance.WorkflowId)).ReturnsAsync(workflowsInstance); + _payloadService.Setup(w => w.GetByIdAsync(payloadId)).ReturnsAsync(payload); - var result = await WorkflowInstanceController.GetByIdAsync(workflowsInstance.WorkflowId); + var result = await PayloadController.GetAsync(payloadId); var objectResult = Assert.IsType(result); - objectResult.Value.Should().BeEquivalentTo(workflowsInstance); + objectResult.Value.Should().BeEquivalentTo(payload); } [Fact] - public async Task GetByIdAsync_WorkflowInstanceDoesNotExist_ReturnsNotFound() + public async Task GetByIdAsync_PayloadDoesNotExist_ReturnsNotFound() { - var workflowId = Guid.NewGuid().ToString(); + var payloadId = Guid.NewGuid().ToString(); - var result = await WorkflowInstanceController.GetByIdAsync(workflowId); + var result = await PayloadController.GetAsync(payloadId); var objectResult = Assert.IsType(result); @@ -154,9 +131,9 @@ public async Task GetByIdAsync_WorkflowInstanceDoesNotExist_ReturnsNotFound() [Fact] public async Task GetByIdAsync_InvalidId_ReturnsBadRequest() { - var workflowId = "2"; + var payloadId = "2"; - var result = await WorkflowInstanceController.GetByIdAsync(workflowId); + var result = await PayloadController.GetAsync(payloadId); var objectResult = Assert.IsType(result); @@ -166,10 +143,10 @@ public async Task GetByIdAsync_InvalidId_ReturnsBadRequest() [Fact] public async Task GetByIdAsync_ServiceException_ReturnProblem() { - var workflowId = Guid.NewGuid().ToString(); - _workflowInstanceService.Setup(w => w.GetByIdAsync(workflowId)).ThrowsAsync(new Exception()); + var payloadId = Guid.NewGuid().ToString(); + _payloadService.Setup(w => w.GetByIdAsync(payloadId)).ThrowsAsync(new Exception()); - var result = await WorkflowInstanceController.GetByIdAsync(workflowId); + var result = await PayloadController.GetAsync(payloadId); var objectResult = Assert.IsType(result); Assert.Equal((int)HttpStatusCode.InternalServerError, objectResult.StatusCode); diff --git a/tests/UnitTests/WorkflowManager.Tests/Controllers/WorkflowInstanceControllerTests.cs b/tests/UnitTests/WorkflowManager.Tests/Controllers/WorkflowInstanceControllerTests.cs index ca912d5cd..48bd308fb 100644 --- a/tests/UnitTests/WorkflowManager.Tests/Controllers/WorkflowInstanceControllerTests.cs +++ b/tests/UnitTests/WorkflowManager.Tests/Controllers/WorkflowInstanceControllerTests.cs @@ -22,6 +22,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; +using Monai.Deploy.Messaging.Events; using Monai.Deploy.WorkflowManager.Common.Interfaces; using Monai.Deploy.WorkflowManager.Configuration; using Monai.Deploy.WorkflowManager.Contracts.Models; @@ -33,47 +34,58 @@ namespace Monai.Deploy.WorkflowManager.Test.Controllers { - public class PayloadControllerTests + public class WorkflowsInstanceControllerTests { - private PayloadsController PayloadController { get; set; } + private WorkflowInstanceController WorkflowInstanceController { get; set; } - private readonly Mock _payloadService; - private readonly Mock> _logger; + private readonly Mock _workflowInstanceService; + private readonly Mock> _logger; private readonly Mock _uriService; private readonly IOptions _options; - public PayloadControllerTests() + public WorkflowsInstanceControllerTests() { _options = Options.Create(new WorkflowManagerOptions()); - _payloadService = new Mock(); - _logger = new Mock>(); + _workflowInstanceService = new Mock(); + _logger = new Mock>(); _uriService = new Mock(); - PayloadController = new PayloadsController(_payloadService.Object, _logger.Object, _uriService.Object, _options); + WorkflowInstanceController = new WorkflowInstanceController(_workflowInstanceService.Object, _logger.Object, _uriService.Object, _options); } [Fact] - public async Task GetListAsync_PayloadsExist_ReturnsList() + public async Task GetListAsync_WorkflowInstancesExist_ReturnsList() { - var payloads = new List + var workflowsInstances = new List { - new Payload + new WorkflowInstance { Id = Guid.NewGuid().ToString(), + WorkflowId = Guid.NewGuid().ToString(), PayloadId = Guid.NewGuid().ToString(), + Status = Status.Created, + BucketId = "bucket", + Tasks = new List + { + new TaskExecution + { + TaskId = Guid.NewGuid().ToString(), + Status = TaskExecutionStatus.Dispatched + } + } } }; - _payloadService.Setup(w => w.GetAllAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(payloads); - _payloadService.Setup(w => w.CountAsync()).ReturnsAsync(payloads.Count); + _workflowInstanceService.Setup(w => w.GetAllAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(() => workflowsInstances); + _workflowInstanceService.Setup(w => w.CountAsync()).ReturnsAsync(workflowsInstances.Count); _uriService.Setup(s => s.GetPageUriString(It.IsAny(), It.IsAny())).Returns(() => "unitTest"); - var result = await PayloadController.GetAllAsync(new Filter.PaginationFilter()); + var result = await WorkflowInstanceController.GetListAsync(new Filter.PaginationFilter()); var objectResult = Assert.IsType(result); - var responseValue = (PagedResponse>)objectResult.Value; - responseValue.Data.Should().BeEquivalentTo(payloads); + var responseValue = (PagedResponse>)objectResult.Value; + responseValue.Data.Should().BeEquivalentTo(workflowsInstances); responseValue.FirstPage.Should().Be("unitTest"); responseValue.LastPage.Should().Be("unitTest"); responseValue.PageNumber.Should().Be(1); @@ -86,42 +98,86 @@ public async Task GetListAsync_PayloadsExist_ReturnsList() responseValue.Errors.Should().BeNullOrEmpty(); } + [Fact] + public async Task GetListAsync_PaginationDisabled_ReturnsList() + { + var workflowsInstances = new List + { + new WorkflowInstance + { + Id = Guid.NewGuid().ToString(), + WorkflowId = Guid.NewGuid().ToString(), + PayloadId = Guid.NewGuid().ToString(), + Status = Status.Created, + BucketId = "bucket", + Tasks = new List + { + new TaskExecution + { + TaskId = Guid.NewGuid().ToString(), + Status = TaskExecutionStatus.Dispatched + } + } + } + }; + + _workflowInstanceService.Setup(w => w.GetAllAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(() => workflowsInstances); + + var result = await WorkflowInstanceController.GetListAsync(new Filter.PaginationFilter(), null, null, true); + + var objectResult = Assert.IsType(result); + + var responseValue = (List)objectResult.Value; + responseValue.Should().BeEquivalentTo(workflowsInstances); + } + [Fact] public async Task GetListAsync_ServiceException_ReturnProblem() { - _payloadService.Setup(w => w.GetAllAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ThrowsAsync(new Exception()); + _workflowInstanceService.Setup(w => w.GetAllAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ThrowsAsync(new Exception()); + _workflowInstanceService.Setup(w => w.CountAsync()).ReturnsAsync(0); - var result = await PayloadController.GetAllAsync(new Filter.PaginationFilter()); + var result = await WorkflowInstanceController.GetListAsync(new Filter.PaginationFilter()); var objectResult = Assert.IsType(result); Assert.Equal((int)HttpStatusCode.InternalServerError, objectResult.StatusCode); } [Fact] - public async Task GetByIdAsync_PayloadExists_ReturnsOk() + public async Task GetByIdAsync_WorkflowInstancesExist_ReturnsOk() { - var payloadId = Guid.NewGuid().ToString(); - var payload = new Payload + var workflowsInstance = new WorkflowInstance { Id = Guid.NewGuid().ToString(), - PayloadId = payloadId, + WorkflowId = Guid.NewGuid().ToString(), + PayloadId = Guid.NewGuid().ToString(), + Status = Status.Created, + BucketId = "bucket", + Tasks = new List + { + new TaskExecution + { + TaskId = Guid.NewGuid().ToString(), + Status = TaskExecutionStatus.Dispatched + } + } }; - _payloadService.Setup(w => w.GetByIdAsync(payloadId)).ReturnsAsync(payload); + _workflowInstanceService.Setup(w => w.GetByIdAsync(workflowsInstance.WorkflowId)).ReturnsAsync(workflowsInstance); - var result = await PayloadController.GetAsync(payloadId); + var result = await WorkflowInstanceController.GetByIdAsync(workflowsInstance.WorkflowId); var objectResult = Assert.IsType(result); - objectResult.Value.Should().BeEquivalentTo(payload); + objectResult.Value.Should().BeEquivalentTo(workflowsInstance); } [Fact] - public async Task GetByIdAsync_PayloadDoesNotExist_ReturnsNotFound() + public async Task GetByIdAsync_WorkflowInstanceDoesNotExist_ReturnsNotFound() { - var payloadId = Guid.NewGuid().ToString(); + var workflowId = Guid.NewGuid().ToString(); - var result = await PayloadController.GetAsync(payloadId); + var result = await WorkflowInstanceController.GetByIdAsync(workflowId); var objectResult = Assert.IsType(result); @@ -131,9 +187,9 @@ public async Task GetByIdAsync_PayloadDoesNotExist_ReturnsNotFound() [Fact] public async Task GetByIdAsync_InvalidId_ReturnsBadRequest() { - var payloadId = "2"; + var workflowId = "2"; - var result = await PayloadController.GetAsync(payloadId); + var result = await WorkflowInstanceController.GetByIdAsync(workflowId); var objectResult = Assert.IsType(result); @@ -143,10 +199,10 @@ public async Task GetByIdAsync_InvalidId_ReturnsBadRequest() [Fact] public async Task GetByIdAsync_ServiceException_ReturnProblem() { - var payloadId = Guid.NewGuid().ToString(); - _payloadService.Setup(w => w.GetByIdAsync(payloadId)).ThrowsAsync(new Exception()); + var workflowId = Guid.NewGuid().ToString(); + _workflowInstanceService.Setup(w => w.GetByIdAsync(workflowId)).ThrowsAsync(new Exception()); - var result = await PayloadController.GetAsync(payloadId); + var result = await WorkflowInstanceController.GetByIdAsync(workflowId); var objectResult = Assert.IsType(result); Assert.Equal((int)HttpStatusCode.InternalServerError, objectResult.StatusCode); From 6962d36bad8cc51d31e2601f2d89d55aa4b78592 Mon Sep 17 00:00:00 2001 From: RemakingEden Date: Thu, 8 Sep 2022 14:01:33 +0100 Subject: [PATCH 6/6] Added integration tests for workflow instance ids Signed-off-by: RemakingEden Signed-off-by: Jack Schofield --- .../Features/PayloadCollection.feature | 19 +++++++++ .../PayloadCollectionStepDefinitions.cs | 40 +++++++++++++++++++ .../WorkflowRequestStepDefinitions.cs | 1 + .../Support/Assertions.cs | 7 ++++ 4 files changed, 67 insertions(+) diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/PayloadCollection.feature b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/PayloadCollection.feature index 0c3c38fc3..050708992 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/PayloadCollection.feature +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/PayloadCollection.feature @@ -41,3 +41,22 @@ Scenario: Payload collection will be populated with null patient details after r When I publish a Workflow Request Message Basic_AeTitle_Payload_Collection_Request_3 with artifacts no_patient_metadata in minio Then A payload collection is created with patient details Null_Patient And I can see 1 Workflow Instance is created + +@WorkflowInstanceDetails +Scenario: Payload collection will be populated with workflow instance id after receiving a Workflow Request when workflow is matched + Given I have a clinical workflow Basic_Workflow_1 + When I publish a Workflow Request Message Basic_AeTitle_Payload_Collection_Request_1 with artifacts full_patient_metadata in minio + Then A payload collection is created with 1 workflow instance id + +@WorkflowInstanceDetails +Scenario: Payload collection will be populated with workflow instance ids after receiving a Workflow Request when multiple workflows are matched + Given I have a clinical workflow Basic_Workflow_1 + Given I have a clinical workflow Basic_Workflow_2 + When I publish a Workflow Request Message Basic_AeTitle_Payload_Collection_Request_1 with artifacts full_patient_metadata in minio + Then A payload collection is created with 2 workflow instance id + +@WorkflowInstanceDetails +Scenario: Payload collection will not be populated with workflow instance ids after receiving a Workflow Request when no workflows are matched + Given I publish a Workflow Request Message Basic_AeTitle_Payload_Collection_Request_1 with artifacts full_patient_metadata in minio + Then A payload collection is created with 0 workflow instance id + diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/PayloadCollectionStepDefinitions.cs b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/PayloadCollectionStepDefinitions.cs index b6dc79914..ad887f66a 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/PayloadCollectionStepDefinitions.cs +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/PayloadCollectionStepDefinitions.cs @@ -17,6 +17,10 @@ using BoDi; using Monai.Deploy.WorkflowManager.IntegrationTests.Support; using TechTalk.SpecFlow.Infrastructure; +using Polly; +using Polly.Retry; +using NUnit.Framework; +using Monai.Deploy.WorkflowManager.Contracts.Models; namespace Monai.Deploy.WorkflowManager.IntegrationTests.StepDefinitions { @@ -29,6 +33,7 @@ public class PayloadCollectionStepDefinitions private Assertions Assertions { get; set; } private DataHelper DataHelper { get; set; } private readonly ISpecFlowOutputHelper _outputHelper; + private RetryPolicy RetryPolicy { get; set; } #pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. public PayloadCollectionStepDefinitions(ObjectContainer objectContainer, ISpecFlowOutputHelper outputHelper) @@ -37,6 +42,7 @@ public PayloadCollectionStepDefinitions(ObjectContainer objectContainer, ISpecFl _outputHelper = outputHelper; Assertions = new Assertions(objectContainer); DataHelper = objectContainer.Resolve(); + RetryPolicy = Policy.Handle().WaitAndRetry(retryCount: 5, sleepDurationProvider: _ => TimeSpan.FromMilliseconds(500)); } [Then(@"A payload collection is created with patient details (.*)")] @@ -64,5 +70,39 @@ public void ThenPayloadCollectionIsCreated(string patientDetailsName) } } } + [Then(@"A payload collection is created with (.*) workflow instance id")] + public void ThenAPayloadCollectionIsCreatedWithWorkflowInstanceId(int count) + { + RetryPolicy.Execute(() => + { + _outputHelper.WriteLine($"Retrieving payload collection using the payloadid={DataHelper.WorkflowRequestMessage.PayloadId}"); + var payloadCollections = DataHelper.GetPayloadCollections(DataHelper.WorkflowRequestMessage.PayloadId.ToString()); + _outputHelper.WriteLine($"Retrieved payload collection"); + + if (payloadCollections != null) + { + foreach (var payloadCollection in payloadCollections) + { + + var workflowInstances = DataHelper.GetWorkflowInstances(count, DataHelper.WorkflowRequestMessage.PayloadId.ToString()); + if (count != 0) + { + if (workflowInstances != null) + { + Assertions.AssertPayloadWorkflowInstanceId(payloadCollection, workflowInstances); + } + else + { + throw new Exception($"Workflow Instance not found"); + } + } + else + { + payloadCollection.WorkflowInstanceIds.Should().BeEmpty(); + } + } + } + }); + } } } diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/WorkflowRequestStepDefinitions.cs b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/WorkflowRequestStepDefinitions.cs index 599d0faa5..8a6eff0d0 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/WorkflowRequestStepDefinitions.cs +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/WorkflowRequestStepDefinitions.cs @@ -70,6 +70,7 @@ public void GivenIHaveClinicalWorkflows(int count) } } + [Given(@"I publish a Workflow Request Message (.*) with artifacts (.*) in minio")] [When(@"I publish a Workflow Request Message (.*) with artifacts (.*) in minio")] public async Task WhenIPublishAWorkflowRequestMessageWithObjects(string name, string folderName) { diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/Assertions.cs b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/Assertions.cs index 3e08f808c..01aa8db2c 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/Assertions.cs +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/Assertions.cs @@ -283,6 +283,13 @@ public void AssertPayloadCollection(Payload payloadCollection, PatientDetails pa payloadCollection.Timestamp.Should().BeCloseTo(DateTime.UtcNow, precision: TimeSpan.FromMinutes(1)); payloadCollection.PatientDetails.Should().BeEquivalentTo(patientDetails); } + public void AssertPayloadWorkflowInstanceId(Payload payloadCollection, List workflowInstances) + { + foreach (var workflowInstance in workflowInstances) + { + payloadCollection.WorkflowInstanceIds.Should().Contain(workflowInstance.Id.ToString()); + } + } public void AssertWorkflowIstanceMatchesExpectedTaskStatusUpdate(WorkflowInstance updatedWorkflowInstance, TaskExecutionStatus taskExecutionStatus) {