@@ -28,19 +28,25 @@ import com.cosmotech.api.home.runner.RunnerConstants.RUNNER_RUN_TEMPLATE
28
28
import com.cosmotech.api.rbac.ROLE_ADMIN
29
29
import com.cosmotech.api.rbac.ROLE_NONE
30
30
import com.cosmotech.api.rbac.ROLE_VIEWER
31
+ import com.cosmotech.dataset.domain.DatasetPartTypeEnum
31
32
import com.cosmotech.runner.domain.*
32
33
import com.cosmotech.runner.domain.ResourceSizeInfo
34
+ import com.cosmotech.runner.service.DATASET_PART_VARTYPE_FILE
33
35
import com.cosmotech.solution.domain.RunTemplateCreateRequest
36
+ import com.cosmotech.solution.domain.RunTemplateParameterCreateRequest
37
+ import com.cosmotech.solution.domain.RunTemplateParameterGroupCreateRequest
34
38
import com.cosmotech.solution.domain.RunTemplateResourceSizing
35
39
import com.ninjasquad.springmockk.SpykBean
36
40
import io.mockk.every
41
+ import org.apache.commons.io.IOUtils
37
42
import org.json.JSONObject
38
43
import org.junit.jupiter.api.BeforeEach
39
44
import org.junit.jupiter.api.Test
40
45
import org.slf4j.LoggerFactory
41
46
import org.springframework.beans.factory.annotation.Autowired
42
47
import org.springframework.boot.test.context.SpringBootTest
43
48
import org.springframework.http.MediaType
49
+ import org.springframework.mock.web.MockMultipartFile
44
50
import org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document
45
51
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf
46
52
import org.springframework.test.context.ActiveProfiles
@@ -61,6 +67,12 @@ class RunnerControllerTests : ControllerTestBase() {
61
67
62
68
@SpykBean @Autowired private lateinit var eventPublisher: CsmEventPublisher
63
69
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
+
64
76
@BeforeEach
65
77
fun beforeEach () {
66
78
@@ -74,6 +86,25 @@ class RunnerControllerTests : ControllerTestBase() {
74
86
RunTemplateResourceSizing (
75
87
com.cosmotech.solution.domain.ResourceSizeInfo (" cpu_requests" , " memory_requests" ),
76
88
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)))
77
108
val runTemplates =
78
109
mutableListOf (
79
110
RunTemplateCreateRequest (
@@ -90,12 +121,36 @@ class RunnerControllerTests : ControllerTestBase() {
90
121
organizationId = createOrganizationAndReturnId(mvc, constructOrganizationCreateRequest())
91
122
solutionId =
92
123
createSolutionAndReturnId(
93
- mvc, organizationId, constructSolutionCreateRequest(runTemplates = runTemplates))
124
+ mvc,
125
+ organizationId,
126
+ constructSolutionCreateRequest(
127
+ parameters = parametersList,
128
+ parameterGroups = parameterGroups,
129
+ runTemplates = runTemplates))
94
130
workspaceId =
95
131
createWorkspaceAndReturnId(
96
132
mvc, organizationId, constructWorkspaceCreateRequest(solutionId = solutionId))
97
133
datasetId =
98
134
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)
99
154
}
100
155
101
156
@Test
@@ -107,9 +162,7 @@ class RunnerControllerTests : ControllerTestBase() {
107
162
val description = " this_is_a_description"
108
163
val tags = mutableListOf (" tags1" , " tags2" )
109
164
val datasetList = mutableListOf (datasetId)
110
- val runnerParameterId = " parameterId1"
111
165
val runnerParameterValue = " parameter_value"
112
- val runnerParameterVarType = " this_is_a_vartype"
113
166
114
167
val parentId =
115
168
createRunnerAndReturnId(
@@ -150,9 +203,9 @@ class RunnerControllerTests : ControllerTestBase() {
150
203
parametersValues =
151
204
mutableListOf (
152
205
RunnerRunTemplateParameterValue (
153
- parameterId = runnerParameterId ,
206
+ parameterId = solutionParameterId1 ,
154
207
value = runnerParameterValue,
155
- varType = runnerParameterVarType ,
208
+ varType = solutionParameterVarType1 ,
156
209
isInherited = false )))
157
210
158
211
mvc.perform(
@@ -177,9 +230,9 @@ class RunnerControllerTests : ControllerTestBase() {
177
230
.andExpect(jsonPath(" $.runSizing.requests.memory" ).value(" memory_requests" ))
178
231
.andExpect(jsonPath(" $.runSizing.limits.cpu" ).value(" cpu_limits" ))
179
232
.andExpect(jsonPath(" $.runSizing.limits.memory" ).value(" memory_limits" ))
180
- .andExpect(jsonPath(" $.parametersValues[0].parameterId" ).value(runnerParameterId ))
233
+ .andExpect(jsonPath(" $.parametersValues[0].parameterId" ).value(solutionParameterId1 ))
181
234
.andExpect(jsonPath(" $.parametersValues[0].value" ).value(runnerParameterValue))
182
- .andExpect(jsonPath(" $.parametersValues[0].varType" ).value(runnerParameterVarType ))
235
+ .andExpect(jsonPath(" $.parametersValues[0].varType" ).value(solutionParameterVarType1 ))
183
236
.andExpect(jsonPath(" $.parametersValues[0].isInherited" ).value(false ))
184
237
.andExpect(jsonPath(" $.security.accessControlList[0].role" ).value(NEW_USER_ROLE ))
185
238
.andExpect(jsonPath(" $.security.accessControlList[0].id" ).value(NEW_USER_ID ))
@@ -264,16 +317,21 @@ class RunnerControllerTests : ControllerTestBase() {
264
317
.andExpect(jsonPath(" $.solutionName" ).value(solutionName))
265
318
.andExpect(jsonPath(" $.runTemplateName" ).value(runTemplateName))
266
319
.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(" /" )))
268
326
.andExpect(jsonPath(" $.security.default" ).value(ROLE_NONE ))
269
327
.andExpect(jsonPath(" $.runSizing.requests.cpu" ).value(" cpu_requests" ))
270
328
.andExpect(jsonPath(" $.runSizing.requests.memory" ).value(" memory_requests" ))
271
329
.andExpect(jsonPath(" $.runSizing.limits.cpu" ).value(" cpu_limits" ))
272
330
.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 ))
277
335
.andExpect(jsonPath(" $.security.accessControlList[0].role" ).value(NEW_USER_ROLE ))
278
336
.andExpect(jsonPath(" $.security.accessControlList[0].id" ).value(NEW_USER_ID ))
279
337
.andDo(MockMvcResultHandlers .print ())
@@ -291,7 +349,6 @@ class RunnerControllerTests : ControllerTestBase() {
291
349
val description = " this_is_a_description"
292
350
val tags = mutableListOf (" tags1" , " tags2" )
293
351
val datasetList = mutableListOf (datasetId)
294
- val runnerParameterId = " parameterId1"
295
352
val runnerParameterValue = " parameter_value"
296
353
val runnerParameterVarType = " this_is_a_vartype"
297
354
@@ -327,7 +384,7 @@ class RunnerControllerTests : ControllerTestBase() {
327
384
parametersValues =
328
385
mutableListOf (
329
386
RunnerRunTemplateParameterValue (
330
- parameterId = runnerParameterId ,
387
+ parameterId = solutionParameterId1 ,
331
388
value = runnerParameterValue,
332
389
varType = runnerParameterVarType,
333
390
isInherited = false )))
@@ -349,15 +406,15 @@ class RunnerControllerTests : ControllerTestBase() {
349
406
.andExpect(jsonPath(" $.solutionName" ).value(solutionName))
350
407
.andExpect(jsonPath(" $.runTemplateName" ).value(runTemplateName))
351
408
.andExpect(jsonPath(" $.tags" ).value(tags))
352
- .andExpect(jsonPath(" $.datasetList " ).value(datasetList))
409
+ .andExpect(jsonPath(" $.datasets.bases " ).value(datasetList))
353
410
.andExpect(jsonPath(" $.security.default" ).value(ROLE_NONE ))
354
411
.andExpect(jsonPath(" $.runSizing.requests.cpu" ).value(" cpu_requests" ))
355
412
.andExpect(jsonPath(" $.runSizing.requests.memory" ).value(" memory_requests" ))
356
413
.andExpect(jsonPath(" $.runSizing.limits.cpu" ).value(" cpu_limits" ))
357
414
.andExpect(jsonPath(" $.runSizing.limits.memory" ).value(" memory_limits" ))
358
- .andExpect(jsonPath(" $.parametersValues[0].parameterId" ).value(runnerParameterId ))
415
+ .andExpect(jsonPath(" $.parametersValues[0].parameterId" ).value(solutionParameterId1 ))
359
416
.andExpect(jsonPath(" $.parametersValues[0].value" ).value(runnerParameterValue))
360
- .andExpect(jsonPath(" $.parametersValues[0].varType" ).value(runnerParameterVarType ))
417
+ .andExpect(jsonPath(" $.parametersValues[0].varType" ).value(solutionParameterVarType1 ))
361
418
.andExpect(jsonPath(" $.parametersValues[0].isInherited" ).value(false ))
362
419
.andExpect(jsonPath(" $.security.accessControlList[0].role" ).value(ROLE_ADMIN ))
363
420
.andExpect(jsonPath(" $.security.accessControlList[0].id" ).value(PLATFORM_ADMIN_EMAIL ))
0 commit comments