@@ -28,19 +28,25 @@ import com.cosmotech.api.home.runner.RunnerConstants.RUNNER_RUN_TEMPLATE
2828import com.cosmotech.api.rbac.ROLE_ADMIN
2929import com.cosmotech.api.rbac.ROLE_NONE
3030import com.cosmotech.api.rbac.ROLE_VIEWER
31+ import com.cosmotech.dataset.domain.DatasetPartTypeEnum
3132import com.cosmotech.runner.domain.*
3233import com.cosmotech.runner.domain.ResourceSizeInfo
34+ import com.cosmotech.runner.service.DATASET_PART_VARTYPE_FILE
3335import com.cosmotech.solution.domain.RunTemplateCreateRequest
36+ import com.cosmotech.solution.domain.RunTemplateParameterCreateRequest
37+ import com.cosmotech.solution.domain.RunTemplateParameterGroupCreateRequest
3438import com.cosmotech.solution.domain.RunTemplateResourceSizing
3539import com.ninjasquad.springmockk.SpykBean
3640import io.mockk.every
41+ import org.apache.commons.io.IOUtils
3742import org.json.JSONObject
3843import org.junit.jupiter.api.BeforeEach
3944import org.junit.jupiter.api.Test
4045import org.slf4j.LoggerFactory
4146import org.springframework.beans.factory.annotation.Autowired
4247import org.springframework.boot.test.context.SpringBootTest
4348import org.springframework.http.MediaType
49+ import org.springframework.mock.web.MockMultipartFile
4450import org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document
4551import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf
4652import org.springframework.test.context.ActiveProfiles
@@ -61,6 +67,12 @@ class RunnerControllerTests : ControllerTestBase() {
6167
6268 @SpykBean @Autowired private lateinit var eventPublisher: CsmEventPublisher
6369
70+ private val solutionParameterId1 = " param1"
71+ private val solutionParameterDefaultValue1 = " this_is_a_default_value"
72+ private val solutionParameterVarType1 = " string"
73+ private val solutionParameterId2 = " param2"
74+ private val solutionParameterDefaultValue2 = " my_folder_test/test.txt"
75+
6476 @BeforeEach
6577 fun beforeEach () {
6678
@@ -74,6 +86,25 @@ class RunnerControllerTests : ControllerTestBase() {
7486 RunTemplateResourceSizing (
7587 com.cosmotech.solution.domain.ResourceSizeInfo (" cpu_requests" , " memory_requests" ),
7688 com.cosmotech.solution.domain.ResourceSizeInfo (" cpu_limits" , " memory_limits" ))
89+
90+ val parametersList =
91+ mutableListOf (
92+ RunTemplateParameterCreateRequest (
93+ id = solutionParameterId1,
94+ varType = solutionParameterVarType1,
95+ defaultValue = solutionParameterDefaultValue1,
96+ ),
97+ RunTemplateParameterCreateRequest (
98+ id = solutionParameterId2,
99+ varType = DATASET_PART_VARTYPE_FILE ,
100+ defaultValue = solutionParameterDefaultValue2,
101+ ))
102+
103+ val parameterGroups =
104+ mutableListOf (
105+ RunTemplateParameterGroupCreateRequest (
106+ id = parameterGroupId,
107+ parameters = mutableListOf (solutionParameterId1, solutionParameterId2)))
77108 val runTemplates =
78109 mutableListOf (
79110 RunTemplateCreateRequest (
@@ -90,12 +121,36 @@ class RunnerControllerTests : ControllerTestBase() {
90121 organizationId = createOrganizationAndReturnId(mvc, constructOrganizationCreateRequest())
91122 solutionId =
92123 createSolutionAndReturnId(
93- mvc, organizationId, constructSolutionCreateRequest(runTemplates = runTemplates))
124+ mvc,
125+ organizationId,
126+ constructSolutionCreateRequest(
127+ parameters = parametersList,
128+ parameterGroups = parameterGroups,
129+ runTemplates = runTemplates))
94130 workspaceId =
95131 createWorkspaceAndReturnId(
96132 mvc, organizationId, constructWorkspaceCreateRequest(solutionId = solutionId))
97133 datasetId =
98134 createDatasetAndReturnId(mvc, organizationId, workspaceId, constructDatasetCreateRequest())
135+
136+ val fileName = " test.txt"
137+ val fileToUpload =
138+ this ::class .java.getResourceAsStream(" /solution/$fileName " )
139+ ? : throw IllegalStateException (
140+ " $fileName file used for organizations/{organization_id}/solutions/{solution_id}/files/POST endpoint documentation cannot be null" )
141+
142+ val mockFile =
143+ MockMultipartFile (
144+ " file" , fileName, MediaType .TEXT_PLAIN_VALUE , IOUtils .toByteArray(fileToUpload))
145+
146+ mvc.perform(
147+ multipart(" /organizations/$organizationId /solutions/$solutionId /files" )
148+ .file(mockFile)
149+ .param(" overwrite" , " true" )
150+ .param(" destination" , " my_folder_test/test.txt" )
151+ .accept(MediaType .APPLICATION_JSON )
152+ .with (csrf()))
153+ .andExpect(status().is2xxSuccessful)
99154 }
100155
101156 @Test
@@ -107,9 +162,7 @@ class RunnerControllerTests : ControllerTestBase() {
107162 val description = " this_is_a_description"
108163 val tags = mutableListOf (" tags1" , " tags2" )
109164 val datasetList = mutableListOf (datasetId)
110- val runnerParameterId = " parameterId1"
111165 val runnerParameterValue = " parameter_value"
112- val runnerParameterVarType = " this_is_a_vartype"
113166
114167 val parentId =
115168 createRunnerAndReturnId(
@@ -150,9 +203,9 @@ class RunnerControllerTests : ControllerTestBase() {
150203 parametersValues =
151204 mutableListOf (
152205 RunnerRunTemplateParameterValue (
153- parameterId = runnerParameterId ,
206+ parameterId = solutionParameterId1 ,
154207 value = runnerParameterValue,
155- varType = runnerParameterVarType ,
208+ varType = solutionParameterVarType1 ,
156209 isInherited = false )))
157210
158211 mvc.perform(
@@ -177,9 +230,9 @@ class RunnerControllerTests : ControllerTestBase() {
177230 .andExpect(jsonPath(" $.runSizing.requests.memory" ).value(" memory_requests" ))
178231 .andExpect(jsonPath(" $.runSizing.limits.cpu" ).value(" cpu_limits" ))
179232 .andExpect(jsonPath(" $.runSizing.limits.memory" ).value(" memory_limits" ))
180- .andExpect(jsonPath(" $.parametersValues[0].parameterId" ).value(runnerParameterId ))
233+ .andExpect(jsonPath(" $.parametersValues[0].parameterId" ).value(solutionParameterId1 ))
181234 .andExpect(jsonPath(" $.parametersValues[0].value" ).value(runnerParameterValue))
182- .andExpect(jsonPath(" $.parametersValues[0].varType" ).value(runnerParameterVarType ))
235+ .andExpect(jsonPath(" $.parametersValues[0].varType" ).value(solutionParameterVarType1 ))
183236 .andExpect(jsonPath(" $.parametersValues[0].isInherited" ).value(false ))
184237 .andExpect(jsonPath(" $.security.accessControlList[0].role" ).value(NEW_USER_ROLE ))
185238 .andExpect(jsonPath(" $.security.accessControlList[0].id" ).value(NEW_USER_ID ))
@@ -264,16 +317,21 @@ class RunnerControllerTests : ControllerTestBase() {
264317 .andExpect(jsonPath(" $.solutionName" ).value(solutionName))
265318 .andExpect(jsonPath(" $.runTemplateName" ).value(runTemplateName))
266319 .andExpect(jsonPath(" $.tags" ).value(tags))
267- .andExpect(jsonPath(" $.datasetList" ).value(datasetList))
320+ .andExpect(jsonPath(" $.datasets.bases" ).value(datasetList))
321+ .andExpect(jsonPath(" $.datasets.parameters[0].name" ).value(solutionParameterId2))
322+ .andExpect(jsonPath(" $.datasets.parameters[0].type" ).value(DatasetPartTypeEnum .File .name))
323+ .andExpect(
324+ jsonPath(" $.datasets.parameters[0].sourceName" )
325+ .value(solutionParameterDefaultValue2.substringAfterLast(" /" )))
268326 .andExpect(jsonPath(" $.security.default" ).value(ROLE_NONE ))
269327 .andExpect(jsonPath(" $.runSizing.requests.cpu" ).value(" cpu_requests" ))
270328 .andExpect(jsonPath(" $.runSizing.requests.memory" ).value(" memory_requests" ))
271329 .andExpect(jsonPath(" $.runSizing.limits.cpu" ).value(" cpu_limits" ))
272330 .andExpect(jsonPath(" $.runSizing.limits.memory" ).value(" memory_limits" ))
273- .andExpect(jsonPath(" $.parametersValues[0].parameterId" ).value(runnerParameterId ))
274- .andExpect(jsonPath(" $.parametersValues[0].value" ).value(runnerParameterValue ))
275- .andExpect(jsonPath(" $.parametersValues[0].varType" ).value(runnerParameterVarType ))
276- .andExpect(jsonPath(" $.parametersValues[0].isInherited" ).value(false ))
331+ .andExpect(jsonPath(" $.parametersValues[0].parameterId" ).value(solutionParameterId1 ))
332+ .andExpect(jsonPath(" $.parametersValues[0].value" ).value(solutionParameterDefaultValue1 ))
333+ .andExpect(jsonPath(" $.parametersValues[0].varType" ).value(solutionParameterVarType1 ))
334+ .andExpect(jsonPath(" $.parametersValues[0].isInherited" ).value(true ))
277335 .andExpect(jsonPath(" $.security.accessControlList[0].role" ).value(NEW_USER_ROLE ))
278336 .andExpect(jsonPath(" $.security.accessControlList[0].id" ).value(NEW_USER_ID ))
279337 .andDo(MockMvcResultHandlers .print ())
@@ -291,7 +349,6 @@ class RunnerControllerTests : ControllerTestBase() {
291349 val description = " this_is_a_description"
292350 val tags = mutableListOf (" tags1" , " tags2" )
293351 val datasetList = mutableListOf (datasetId)
294- val runnerParameterId = " parameterId1"
295352 val runnerParameterValue = " parameter_value"
296353 val runnerParameterVarType = " this_is_a_vartype"
297354
@@ -327,7 +384,7 @@ class RunnerControllerTests : ControllerTestBase() {
327384 parametersValues =
328385 mutableListOf (
329386 RunnerRunTemplateParameterValue (
330- parameterId = runnerParameterId ,
387+ parameterId = solutionParameterId1 ,
331388 value = runnerParameterValue,
332389 varType = runnerParameterVarType,
333390 isInherited = false )))
@@ -349,15 +406,15 @@ class RunnerControllerTests : ControllerTestBase() {
349406 .andExpect(jsonPath(" $.solutionName" ).value(solutionName))
350407 .andExpect(jsonPath(" $.runTemplateName" ).value(runTemplateName))
351408 .andExpect(jsonPath(" $.tags" ).value(tags))
352- .andExpect(jsonPath(" $.datasetList " ).value(datasetList))
409+ .andExpect(jsonPath(" $.datasets.bases " ).value(datasetList))
353410 .andExpect(jsonPath(" $.security.default" ).value(ROLE_NONE ))
354411 .andExpect(jsonPath(" $.runSizing.requests.cpu" ).value(" cpu_requests" ))
355412 .andExpect(jsonPath(" $.runSizing.requests.memory" ).value(" memory_requests" ))
356413 .andExpect(jsonPath(" $.runSizing.limits.cpu" ).value(" cpu_limits" ))
357414 .andExpect(jsonPath(" $.runSizing.limits.memory" ).value(" memory_limits" ))
358- .andExpect(jsonPath(" $.parametersValues[0].parameterId" ).value(runnerParameterId ))
415+ .andExpect(jsonPath(" $.parametersValues[0].parameterId" ).value(solutionParameterId1 ))
359416 .andExpect(jsonPath(" $.parametersValues[0].value" ).value(runnerParameterValue))
360- .andExpect(jsonPath(" $.parametersValues[0].varType" ).value(runnerParameterVarType ))
417+ .andExpect(jsonPath(" $.parametersValues[0].varType" ).value(solutionParameterVarType1 ))
361418 .andExpect(jsonPath(" $.parametersValues[0].isInherited" ).value(false ))
362419 .andExpect(jsonPath(" $.security.accessControlList[0].role" ).value(ROLE_ADMIN ))
363420 .andExpect(jsonPath(" $.security.accessControlList[0].id" ).value(PLATFORM_ADMIN_EMAIL ))
0 commit comments