diff --git a/api/src/integrationTest/kotlin/com/cosmotech/api/home/runner/RunnerControllerTests.kt b/api/src/integrationTest/kotlin/com/cosmotech/api/home/runner/RunnerControllerTests.kt index 5242636b4..09ab7d3a8 100644 --- a/api/src/integrationTest/kotlin/com/cosmotech/api/home/runner/RunnerControllerTests.kt +++ b/api/src/integrationTest/kotlin/com/cosmotech/api/home/runner/RunnerControllerTests.kt @@ -234,6 +234,9 @@ class RunnerControllerTests : ControllerTestBase() { .andExpect(jsonPath("$.runTemplateName").value(runTemplateName)) .andExpect(jsonPath("$.tags").value(tags)) .andExpect(jsonPath("$.datasets.bases").value(datasetList)) + .andExpect(jsonPath("$.datasets.parameters[0].name").value(solutionParameterId2)) + .andExpect(jsonPath("$.datasets.parameters[0].sourceName").value(TEST_FILE_NAME)) + .andExpect(jsonPath("$.datasets.parameters[0].type").value(DatasetPartTypeEnum.File.name)) .andExpect(jsonPath("$.security.default").value(ROLE_NONE)) .andExpect(jsonPath("$.runSizing.requests.cpu").value("cpu_requests")) .andExpect(jsonPath("$.runSizing.requests.memory").value("memory_requests")) @@ -423,6 +426,9 @@ class RunnerControllerTests : ControllerTestBase() { .andExpect(jsonPath("$.runTemplateName").value(runTemplateName)) .andExpect(jsonPath("$.tags").value(tags)) .andExpect(jsonPath("$.datasets.bases").value(datasetList)) + .andExpect(jsonPath("$.datasets.parameters[0].name").value(solutionParameterId2)) + .andExpect(jsonPath("$.datasets.parameters[0].sourceName").value(TEST_FILE_NAME)) + .andExpect(jsonPath("$.datasets.parameters[0].type").value(DatasetPartTypeEnum.File.name)) .andExpect(jsonPath("$.security.default").value(ROLE_NONE)) .andExpect(jsonPath("$.runSizing.requests.cpu").value("cpu_requests")) .andExpect(jsonPath("$.runSizing.requests.memory").value("memory_requests")) diff --git a/run/src/integrationTest/kotlin/com/cosmotech/run/service/RunServiceIntegrationTest.kt b/run/src/integrationTest/kotlin/com/cosmotech/run/service/RunServiceIntegrationTest.kt index 2dec54c9e..54373880a 100644 --- a/run/src/integrationTest/kotlin/com/cosmotech/run/service/RunServiceIntegrationTest.kt +++ b/run/src/integrationTest/kotlin/com/cosmotech/run/service/RunServiceIntegrationTest.kt @@ -15,6 +15,7 @@ import com.cosmotech.common.utils.getCurrentAuthenticatedUserName import com.cosmotech.dataset.DatasetApiServiceInterface import com.cosmotech.dataset.domain.Dataset import com.cosmotech.dataset.domain.DatasetCreateRequest +import com.cosmotech.dataset.domain.DatasetPart import com.cosmotech.organization.OrganizationApiServiceInterface import com.cosmotech.organization.domain.Organization import com.cosmotech.organization.domain.OrganizationAccessControl @@ -125,6 +126,7 @@ class RunServiceIntegrationTest : CsmTestBase() { rediSearchIndexer.createIndexFor(Solution::class.java) rediSearchIndexer.createIndexFor(Workspace::class.java) rediSearchIndexer.createIndexFor(Dataset::class.java) + rediSearchIndexer.createIndexFor(DatasetPart::class.java) rediSearchIndexer.createIndexFor(Runner::class.java) rediSearchIndexer.createIndexFor(Run::class.java) diff --git a/runner/src/integrationTest/kotlin/com/cosmotech/runner/service/RunnerServiceIntegrationTest.kt b/runner/src/integrationTest/kotlin/com/cosmotech/runner/service/RunnerServiceIntegrationTest.kt index 7e1b0c424..a560dac80 100644 --- a/runner/src/integrationTest/kotlin/com/cosmotech/runner/service/RunnerServiceIntegrationTest.kt +++ b/runner/src/integrationTest/kotlin/com/cosmotech/runner/service/RunnerServiceIntegrationTest.kt @@ -402,6 +402,111 @@ class RunnerServiceIntegrationTest : CsmTestBase() { assertEquals("param2", runnerDatasetParameters[0].name) } + @Test + fun `test datasets_parameters is listed into createRunner response`() { + val workspaceDatasetCreateRequest = + makeDataset( + name = "WorkspaceDataset", + parts = + mutableListOf( + DatasetPartCreateRequest(name = "defaultPart", sourceName = "test.txt"))) + val workspaceDataset = + datasetApiService.createDataset( + organizationSaved.id, + workspaceSaved.id, + workspaceDatasetCreateRequest, + arrayOf( + MockMultipartFile( + "files", + "test.txt", + MediaType.MULTIPART_FORM_DATA_VALUE, + "test".toByteArray()))) + workspaceSaved = + workspaceApiService.updateWorkspace( + organizationSaved.id, + workspaceSaved.id, + WorkspaceUpdateRequest( + solution = + WorkspaceSolution( + solutionId = solutionSaved.id, + datasetId = workspaceDataset.id, + defaultParameterValues = + mutableMapOf("param2" to workspaceDataset.parts[0].id)))) + val runnerWithInheritedDatasetParameterCreateRequest = + makeRunnerCreateRequest( + name = "Runner_with_inherited_dataset_parameter", + datasetList = mutableListOf(datasetSaved.id)) + val runnerWithInheritedDatasetParameter = + runnerApiService.createRunner( + organizationSaved.id, + workspaceSaved.id, + runnerWithInheritedDatasetParameterCreateRequest) + + assertNotNull(runnerWithInheritedDatasetParameter) + val runnerDatasetParameters = + runnerWithInheritedDatasetParameter.datasets.parameters as MutableList + assertNotNull(runnerDatasetParameters) + assertEquals(1, runnerDatasetParameters.size) + assertEquals("test.txt", runnerDatasetParameters[0].sourceName) + assertEquals("param2", runnerDatasetParameters[0].name) + } + + @Test + fun `test datasets_parameters is listed into updateRunner response`() { + val workspaceDatasetCreateRequest = + makeDataset( + name = "WorkspaceDataset", + parts = + mutableListOf( + DatasetPartCreateRequest(name = "defaultPart", sourceName = "test.txt"))) + val workspaceDataset = + datasetApiService.createDataset( + organizationSaved.id, + workspaceSaved.id, + workspaceDatasetCreateRequest, + arrayOf( + MockMultipartFile( + "files", + "test.txt", + MediaType.MULTIPART_FORM_DATA_VALUE, + "test".toByteArray()))) + workspaceSaved = + workspaceApiService.updateWorkspace( + organizationSaved.id, + workspaceSaved.id, + WorkspaceUpdateRequest( + solution = + WorkspaceSolution( + solutionId = solutionSaved.id, + datasetId = workspaceDataset.id, + defaultParameterValues = + mutableMapOf("param2" to workspaceDataset.parts[0].id)))) + val runnerWithInheritedDatasetParameterCreateRequest = + makeRunnerCreateRequest( + name = "Runner_with_inherited_dataset_parameter", + datasetList = mutableListOf(datasetSaved.id)) + val runnerWithInheritedDatasetParameter = + runnerApiService.createRunner( + organizationSaved.id, + workspaceSaved.id, + runnerWithInheritedDatasetParameterCreateRequest) + + val runnerUpdatedWithInheritedDatasetParameter = + runnerApiService.updateRunner( + organizationSaved.id, + workspaceSaved.id, + runnerWithInheritedDatasetParameter.id, + RunnerUpdateRequest(name = "New Dataset name")) + + assertNotNull(runnerUpdatedWithInheritedDatasetParameter) + val runnerDatasetParameters = + runnerUpdatedWithInheritedDatasetParameter.datasets.parameters as MutableList + assertNotNull(runnerDatasetParameters) + assertEquals(1, runnerDatasetParameters.size) + assertEquals("test.txt", runnerDatasetParameters[0].sourceName) + assertEquals("param2", runnerDatasetParameters[0].name) + } + @Test fun `test find All Runners with different pagination params`() { val numberOfRunners = 20 diff --git a/runner/src/main/kotlin/com/cosmotech/runner/service/RunnerApiServiceImpl.kt b/runner/src/main/kotlin/com/cosmotech/runner/service/RunnerApiServiceImpl.kt index 74546deaf..f15bfdd62 100644 --- a/runner/src/main/kotlin/com/cosmotech/runner/service/RunnerApiServiceImpl.kt +++ b/runner/src/main/kotlin/com/cosmotech/runner/service/RunnerApiServiceImpl.kt @@ -60,7 +60,12 @@ internal class RunnerApiServiceImpl( .initBaseDatasetListFromParent(parentId, runnerCreateRequest.datasetList) } - return runnerService.saveInstance(runnerInstance) + val runnerSaved = runnerService.saveInstance(runnerInstance) + val listDatasetParts = + datasetApiServiceInterface.listDatasetParts( + organizationId, workspaceId, runnerSaved.datasets.parameter, null, null) + + return runnerSaved.apply { datasets.parameters = listDatasetParts as MutableList? } } override fun getRunner(organizationId: String, workspaceId: String, runnerId: String): Runner { @@ -82,7 +87,14 @@ internal class RunnerApiServiceImpl( val runnerService = getRunnerService().inOrganization(organizationId).inWorkspace(workspaceId) val runnerInstance = runnerService.getInstance(runnerId).userHasPermission(PERMISSION_WRITE) - return runnerService.saveInstance(runnerInstance.setValueFrom(runnerUpdateRequest).stamp()) + val runnerSaved = + runnerService.saveInstance(runnerInstance.setValueFrom(runnerUpdateRequest).stamp()) + + val listDatasetParts = + datasetApiServiceInterface.listDatasetParts( + organizationId, workspaceId, runnerSaved.datasets.parameter, null, null) + + return runnerSaved.apply { datasets.parameters = listDatasetParts as MutableList? } } override fun deleteRunner(organizationId: String, workspaceId: String, runnerId: String) {