@@ -28,6 +28,7 @@ import com.cosmotech.dataset.domain.DatasetCreateRequest
2828import com.cosmotech.dataset.domain.DatasetPart
2929import com.cosmotech.dataset.domain.DatasetPartCreateRequest
3030import com.cosmotech.dataset.domain.DatasetPartTypeEnum
31+ import com.cosmotech.dataset.domain.DatasetPartUpdateRequest
3132import com.cosmotech.organization.OrganizationApiServiceInterface
3233import com.cosmotech.organization.domain.Organization
3334import com.cosmotech.organization.domain.OrganizationAccessControl
@@ -89,6 +90,7 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
8990 val CONNECTED_READER_USER = " [email protected] " 9091 val TEST_USER_MAIL = " [email protected] " 9192 val CUSTOMERS_FILE_NAME = " customers.csv"
93+ val CUSTOMERS_5_LINES_FILE_NAME = " customers_5_lines.csv"
9294
9395 private val logger = LoggerFactory .getLogger(RunnerServiceIntegrationTest ::class .java)
9496 private val defaultName
= " [email protected] " @@ -1007,7 +1009,7 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
10071009 }
10081010
10091011 @Test
1010- fun `test empty inherited parameters values` () {
1012+ fun `test empty inherited parameters values from parent ` () {
10111013 val parentRunnerWithEmptyParams = makeRunnerCreateRequest(name = " parent" )
10121014 val parentRunnerSaved =
10131015 runnerApiService.createRunner(
@@ -1040,6 +1042,210 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
10401042 mutableListOf (runTemplateParameterValue1), childRunnerWithEmptyParamsSaved.parametersValues)
10411043 }
10421044
1045+ @Test
1046+ fun `test create runner with inherited DB dataset parameter from workspace solution` () {
1047+
1048+ solutionSaved =
1049+ solutionApiService.createSolution(
1050+ organizationSaved.id,
1051+ SolutionCreateRequest (
1052+ key = UUID .randomUUID().toString(),
1053+ name = " Solution with 1 default datasetPart parameter" ,
1054+ parameterGroups =
1055+ mutableListOf (
1056+ RunTemplateParameterGroupCreateRequest (
1057+ id = " defaultDatasetPartParameterGroup" ,
1058+ parameters = mutableListOf (" datasetPartParam" ))),
1059+ parameters =
1060+ mutableListOf (
1061+ RunTemplateParameterCreateRequest (
1062+ id = " datasetPartParam" ,
1063+ defaultValue = " this_value_is_ignored" ,
1064+ varType = DATASET_PART_VARTYPE_DB )),
1065+ runTemplates =
1066+ mutableListOf (
1067+ RunTemplateCreateRequest (
1068+ id = " runTemplateWithOneDatasetPartByDefault" ,
1069+ parameterGroups = mutableListOf (" defaultDatasetPartParameterGroup" ))),
1070+ repository = " repository" ,
1071+ version = " 1.0.0" ))
1072+ workspace =
1073+ WorkspaceCreateRequest (
1074+ key = " key" ,
1075+ name = " workspace" ,
1076+ solution = WorkspaceSolution (solutionSaved.id),
1077+ datasetCopy = false )
1078+ workspaceSaved = workspaceApiService.createWorkspace(organizationSaved.id, workspace)
1079+
1080+ val customersFile = resourceLoader.getResource(" classpath:/$CUSTOMERS_FILE_NAME " ).file
1081+ val customersInputStream = FileInputStream (customersFile)
1082+ val customersMultipartFile =
1083+ MockMultipartFile (
1084+ " file" , CUSTOMERS_FILE_NAME , " text/csv" , IOUtils .toByteArray(customersInputStream))
1085+ val workspaceDataset =
1086+ datasetApiService.createDataset(
1087+ organizationSaved.id,
1088+ workspaceSaved.id,
1089+ DatasetCreateRequest (
1090+ name = " runnerDataset" ,
1091+ parts =
1092+ mutableListOf (
1093+ DatasetPartCreateRequest (
1094+ name = " datasetPart1" ,
1095+ sourceName = CUSTOMERS_FILE_NAME ,
1096+ type = DatasetPartTypeEnum .DB ))),
1097+ arrayOf(customersMultipartFile))
1098+ workspaceSaved =
1099+ workspaceApiService.updateWorkspace(
1100+ organizationSaved.id,
1101+ workspaceSaved.id,
1102+ WorkspaceUpdateRequest (
1103+ solution =
1104+ WorkspaceSolution (
1105+ solutionId = solutionSaved.id,
1106+ datasetId = workspaceDataset.id,
1107+ defaultParameterValues =
1108+ mutableMapOf (" datasetPartParam" to workspaceDataset.parts[0 ].id))))
1109+
1110+ val runner =
1111+ runnerApiService.createRunner(
1112+ organizationSaved.id,
1113+ workspaceSaved.id,
1114+ makeRunnerCreateRequest(runTemplateId = " runTemplateWithOneDatasetPartByDefault" ))
1115+
1116+ val runnerDatasetId = runner.datasets.parameter
1117+ val runnerDataset =
1118+ datasetApiService.getDataset(organizationSaved.id, workspaceSaved.id, runnerDatasetId)
1119+ val inheritedRunnerDatasetPartContent =
1120+ datasetApiService.downloadDatasetPart(
1121+ organizationSaved.id, workspaceSaved.id, runnerDataset.id, runnerDataset.parts[0 ].id)
1122+ val expectedText = FileInputStream (customersFile).bufferedReader().use { it.readText() }
1123+ val retrievedText =
1124+ InputStreamResource (inheritedRunnerDatasetPartContent).inputStream.bufferedReader().use {
1125+ it.readText()
1126+ }
1127+ assertEquals(expectedText, retrievedText)
1128+ }
1129+
1130+ @Test
1131+ fun `test create runner with inherited DB dataset parameter from parent` () {
1132+
1133+ solutionSaved =
1134+ solutionApiService.createSolution(
1135+ organizationSaved.id,
1136+ SolutionCreateRequest (
1137+ key = UUID .randomUUID().toString(),
1138+ name = " Solution with 1 default datasetPart parameter" ,
1139+ parameterGroups =
1140+ mutableListOf (
1141+ RunTemplateParameterGroupCreateRequest (
1142+ id = " defaultDatasetPartParameterGroup" ,
1143+ parameters = mutableListOf (" datasetPartParam" ))),
1144+ parameters =
1145+ mutableListOf (
1146+ RunTemplateParameterCreateRequest (
1147+ id = " datasetPartParam" ,
1148+ defaultValue = " this_value_is_ignored" ,
1149+ varType = DATASET_PART_VARTYPE_DB )),
1150+ runTemplates =
1151+ mutableListOf (
1152+ RunTemplateCreateRequest (
1153+ id = " runTemplateWithOneDatasetPartByDefault" ,
1154+ parameterGroups = mutableListOf (" defaultDatasetPartParameterGroup" ))),
1155+ repository = " repository" ,
1156+ version = " 1.0.0" ))
1157+ workspace =
1158+ WorkspaceCreateRequest (
1159+ key = " key" ,
1160+ name = " workspace" ,
1161+ solution = WorkspaceSolution (solutionSaved.id),
1162+ datasetCopy = false )
1163+ workspaceSaved = workspaceApiService.createWorkspace(organizationSaved.id, workspace)
1164+
1165+ val customersFile = resourceLoader.getResource(" classpath:/$CUSTOMERS_FILE_NAME " ).file
1166+ val customersInputStream = FileInputStream (customersFile)
1167+ val customersMultipartFile =
1168+ MockMultipartFile (
1169+ " file" , CUSTOMERS_FILE_NAME , " text/csv" , IOUtils .toByteArray(customersInputStream))
1170+ val workspaceDataset =
1171+ datasetApiService.createDataset(
1172+ organizationSaved.id,
1173+ workspaceSaved.id,
1174+ DatasetCreateRequest (
1175+ name = " runnerDataset" ,
1176+ parts =
1177+ mutableListOf (
1178+ DatasetPartCreateRequest (
1179+ name = " datasetPart1" ,
1180+ sourceName = CUSTOMERS_FILE_NAME ,
1181+ type = DatasetPartTypeEnum .DB ))),
1182+ arrayOf(customersMultipartFile))
1183+ workspaceSaved =
1184+ workspaceApiService.updateWorkspace(
1185+ organizationSaved.id,
1186+ workspaceSaved.id,
1187+ WorkspaceUpdateRequest (
1188+ solution =
1189+ WorkspaceSolution (
1190+ solutionId = solutionSaved.id,
1191+ datasetId = workspaceDataset.id,
1192+ defaultParameterValues =
1193+ mutableMapOf (" datasetPartParam" to workspaceDataset.parts[0 ].id))))
1194+
1195+ val runner =
1196+ runnerApiService.createRunner(
1197+ organizationSaved.id,
1198+ workspaceSaved.id,
1199+ makeRunnerCreateRequest(runTemplateId = " runTemplateWithOneDatasetPartByDefault" ))
1200+
1201+ val runnerDatasetId = runner.datasets.parameter
1202+ val runnerDataset =
1203+ datasetApiService.getDataset(organizationSaved.id, workspaceSaved.id, runnerDatasetId)
1204+
1205+ val customers5File = resourceLoader.getResource(" classpath:/$CUSTOMERS_5_LINES_FILE_NAME " ).file
1206+ val customers5InputStream = FileInputStream (customers5File)
1207+ val customers5MultipartFile =
1208+ MockMultipartFile (
1209+ " file" ,
1210+ CUSTOMERS_5_LINES_FILE_NAME ,
1211+ " text/csv" ,
1212+ IOUtils .toByteArray(customers5InputStream))
1213+
1214+ val runnerDatasetPartId = runnerDataset.parts[0 ].id
1215+
1216+ datasetApiService.replaceDatasetPart(
1217+ organizationSaved.id,
1218+ workspaceSaved.id,
1219+ runnerDataset.id,
1220+ runnerDatasetPartId,
1221+ customers5MultipartFile,
1222+ DatasetPartUpdateRequest (sourceName = CUSTOMERS_5_LINES_FILE_NAME ))
1223+
1224+ val childRunner =
1225+ runnerApiService.createRunner(
1226+ organizationSaved.id,
1227+ workspaceSaved.id,
1228+ makeRunnerCreateRequest(
1229+ runTemplateId = " runTemplateWithOneDatasetPartByDefault" , parentId = runner.id))
1230+
1231+ val childRunnerDatasetId = childRunner.datasets.parameter
1232+ val childRunnerDataset =
1233+ datasetApiService.getDataset(organizationSaved.id, workspaceSaved.id, childRunnerDatasetId)
1234+
1235+ val childRunnerDatasetPartContent =
1236+ datasetApiService.downloadDatasetPart(
1237+ organizationSaved.id,
1238+ workspaceSaved.id,
1239+ childRunnerDataset.id,
1240+ childRunnerDataset.parts[0 ].id)
1241+ val expectedText = FileInputStream (customers5File).bufferedReader().use { it.readText() }
1242+ val retrievedText =
1243+ InputStreamResource (childRunnerDatasetPartContent).inputStream.bufferedReader().use {
1244+ it.readText()
1245+ }
1246+ assertEquals(expectedText, retrievedText)
1247+ }
1248+
10431249 @Test
10441250 fun `startRun send event` () {
10451251 val expectedRunId = " run-genid12345"
0 commit comments