diff --git a/api/src/integrationTest/kotlin/com/cosmotech/api/home/ControllerTestUtils.kt b/api/src/integrationTest/kotlin/com/cosmotech/api/home/ControllerTestUtils.kt index d08ab68dd..213068097 100644 --- a/api/src/integrationTest/kotlin/com/cosmotech/api/home/ControllerTestUtils.kt +++ b/api/src/integrationTest/kotlin/com/cosmotech/api/home/ControllerTestUtils.kt @@ -220,6 +220,7 @@ class ControllerTestUtils { tags: MutableList = mutableListOf(), datasetList: MutableList? = mutableListOf(), parametersValues: MutableList? = mutableListOf(), + validationStatus: RunnerValidationStatus, ): RunnerUpdateRequest { return RunnerUpdateRequest( @@ -233,6 +234,7 @@ class ControllerTestUtils { additionalData = additionalData, solutionName = solutionName, runTemplateName = runTemplateName, + validationStatus = validationStatus, ) } } 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 98730a51c..d27cea417 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 @@ -474,6 +474,7 @@ class RunnerControllerTests : ControllerTestBase() { val datasetList = mutableListOf(datasetId) val runnerParameterValue = "parameter_value" val runnerParameterVarType = "this_is_a_vartype" + val validationStatus = RunnerValidationStatus.Validated val additionalData = mutableMapOf( @@ -521,6 +522,7 @@ class RunnerControllerTests : ControllerTestBase() { isInherited = false, ) ), + validationStatus = validationStatus, ) mvc.perform( @@ -555,6 +557,7 @@ class RunnerControllerTests : ControllerTestBase() { .andExpect(jsonPath("$.parametersValues[0].value").value(runnerParameterValue)) .andExpect(jsonPath("$.parametersValues[0].varType").value(solutionParameterVarType1)) .andExpect(jsonPath("$.parametersValues[0].isInherited").value(false)) + .andExpect(jsonPath("$.validationStatus").value(validationStatus.name)) .andExpect(jsonPath("$.security.accessControlList[0].role").value(ROLE_ADMIN)) .andExpect(jsonPath("$.security.accessControlList[0].id").value(PLATFORM_ADMIN_EMAIL)) .andDo(MockMvcResultHandlers.print()) diff --git a/doc/Models/RunnerUpdateRequest.md b/doc/Models/RunnerUpdateRequest.md index 5033905bf..148e8cdba 100644 --- a/doc/Models/RunnerUpdateRequest.md +++ b/doc/Models/RunnerUpdateRequest.md @@ -13,6 +13,7 @@ | **additionalData** | [**Map**](AnyType.md) | Free form additional data | [optional] [default to null] | | **solutionName** | **String** | the Solution name | [optional] [default to null] | | **runTemplateName** | **String** | the Solution Run Template name associated with this Runner | [optional] [default to null] | +| **validationStatus** | [**RunnerValidationStatus**](RunnerValidationStatus.md) | | [optional] [default to null] | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/openapi/plantuml/schemas.plantuml b/openapi/plantuml/schemas.plantuml index 176831fd4..c4fcd64d0 100644 --- a/openapi/plantuml/schemas.plantuml +++ b/openapi/plantuml/schemas.plantuml @@ -435,6 +435,7 @@ entity RunnerUpdateRequest { additionalData: Map solutionName: String runTemplateName: String + validationStatus: RunnerValidationStatus } entity RunnerValidationStatus { 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 f23850c16..2ae03247b 100644 --- a/runner/src/integrationTest/kotlin/com/cosmotech/runner/service/RunnerServiceIntegrationTest.kt +++ b/runner/src/integrationTest/kotlin/com/cosmotech/runner/service/RunnerServiceIntegrationTest.kt @@ -314,6 +314,30 @@ class RunnerServiceIntegrationTest : CsmTestBase() { ) } + @Test + fun `test updateRunner with validationStatus`() { + assertEquals(RunnerValidationStatus.Draft, runnerSaved.validationStatus) + + val updateRunnerResponse = + runnerApiService.updateRunner( + organizationSaved.id, + workspaceSaved.id, + runnerSaved.id, + RunnerUpdateRequest( + validationStatus = RunnerValidationStatus.Validated, + ), + ) + assertEquals(RunnerValidationStatus.Validated, updateRunnerResponse.validationStatus) + + val updatedRunner = + runnerApiService.getRunner( + organizationSaved.id, + workspaceSaved.id, + runnerSaved.id, + ) + assertEquals(RunnerValidationStatus.Validated, updatedRunner.validationStatus) + } + @Test fun `test updateRunner and check parameterValues after updating a simple solution parameter to DATASET_PART varType`() { diff --git a/runner/src/main/kotlin/com/cosmotech/runner/service/RunnerService.kt b/runner/src/main/kotlin/com/cosmotech/runner/service/RunnerService.kt index 9c4709e28..675e471f3 100644 --- a/runner/src/main/kotlin/com/cosmotech/runner/service/RunnerService.kt +++ b/runner/src/main/kotlin/com/cosmotech/runner/service/RunnerService.kt @@ -456,6 +456,7 @@ class RunnerService( ) } + @Suppress("LongMethod") fun setValueFrom(runnerUpdateRequest: RunnerUpdateRequest): RunnerInstance { runnerUpdateRequest.runSizing?.let { @@ -515,7 +516,8 @@ class RunnerService( lastRunStatus = this.runner.lastRunInfo.lastRunStatus, lastRunId = this.runner.lastRunInfo.lastRunId, ), - validationStatus = this.runner.validationStatus, + validationStatus = + runnerUpdateRequest.validationStatus ?: this.runner.validationStatus, ) ) } diff --git a/runner/src/main/openapi/runner.yaml b/runner/src/main/openapi/runner.yaml index d80562d21..5eca1a744 100644 --- a/runner/src/main/openapi/runner.yaml +++ b/runner/src/main/openapi/runner.yaml @@ -774,6 +774,9 @@ components: description: the Solution Run Template name associated with this Runner minLength: 1 x-size-message: "cannot be empty" + validationStatus: + allOf: + - $ref: '#/components/schemas/RunnerValidationStatus' RunnerSecurity: type: object description: the Runner security information