@@ -2951,6 +2951,219 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
29512951 return DatasetCreateRequest (name = name, parts = parts)
29522952 }
29532953
2954+ @Test
2955+ fun `PROD-15252 - test inheritance from parent runner` () {
2956+
2957+ // 1- Create default workspace's dataset parameter
2958+
2959+ val resourceTestFile = resourceLoader.getResource(" classpath:/$CUSTOMERS_FILE_NAME " ).file
2960+ val input = FileInputStream (resourceTestFile)
2961+ val multipartFile =
2962+ MockMultipartFile (" file" , CUSTOMERS_FILE_NAME , " text/csv" , IOUtils .toByteArray(input))
2963+
2964+ val resourceTestFile2 =
2965+ resourceLoader.getResource(" classpath:/$CUSTOMERS_5_LINES_FILE_NAME " ).file
2966+ val input2 = FileInputStream (resourceTestFile2)
2967+ val multipartFile2 =
2968+ MockMultipartFile (
2969+ " file" ,
2970+ CUSTOMERS_5_LINES_FILE_NAME ,
2971+ " text/csv" ,
2972+ IOUtils .toByteArray(input2),
2973+ )
2974+ val workspaceDataset =
2975+ datasetApiService.createDataset(
2976+ organizationSaved.id,
2977+ workspaceSaved.id,
2978+ DatasetCreateRequest (
2979+ name = " Dataset workspace" ,
2980+ description = " Dataset used for default parameter in ${workspaceSaved.id} " ,
2981+ parts =
2982+ mutableListOf (
2983+ DatasetPartCreateRequest (
2984+ name = " param2" ,
2985+ sourceName = CUSTOMERS_FILE_NAME ,
2986+ type = DatasetPartTypeEnum .File ,
2987+ ),
2988+ DatasetPartCreateRequest (
2989+ name = " param3" ,
2990+ sourceName = CUSTOMERS_5_LINES_FILE_NAME ,
2991+ type = DatasetPartTypeEnum .DB ,
2992+ ),
2993+ ),
2994+ ),
2995+ arrayOf(multipartFile, multipartFile2),
2996+ )
2997+
2998+ // 2- Create update workspace with default dataset
2999+
3000+ workspaceApiService.updateWorkspace(
3001+ organizationSaved.id,
3002+ workspaceSaved.id,
3003+ WorkspaceUpdateRequest (
3004+ solution =
3005+ WorkspaceSolution (
3006+ solutionId = solutionSaved.id,
3007+ datasetId = workspaceDataset.id,
3008+ defaultParameterValues =
3009+ mutableMapOf (
3010+ " param2" to workspaceDataset.parts[0 ].id,
3011+ " param3" to workspaceDataset.parts[1 ].id,
3012+ ),
3013+ )
3014+ ),
3015+ )
3016+
3017+ // 3 - Create a parent runner with the newly created solution using the runTemplate
3018+ val parentRunnerCreateRequest =
3019+ RunnerCreateRequest (
3020+ name = " Parent Runner with expected dataset parameter" ,
3021+ solutionId = solutionSaved.id,
3022+ runTemplateId = " runTemplateId" ,
3023+ )
3024+
3025+ val parentCreatedRunner =
3026+ runnerApiService.createRunner(
3027+ organizationSaved.id,
3028+ workspaceSaved.id,
3029+ parentRunnerCreateRequest,
3030+ )
3031+
3032+ // 4 - Check parent runner parameters
3033+ var retrievedParentRunner =
3034+ runnerApiService.getRunner(organizationSaved.id, workspaceSaved.id, parentCreatedRunner.id)
3035+ assertEquals(1 , retrievedParentRunner.parametersValues.size)
3036+ val parentRunnerParameterValue = retrievedParentRunner.parametersValues[0 ]
3037+ assertEquals(" param1" , parentRunnerParameterValue.parameterId)
3038+ assertEquals(" 5" , parentRunnerParameterValue.value)
3039+ assertEquals(" integer" , parentRunnerParameterValue.varType)
3040+ assertNotNull(retrievedParentRunner.datasets.parameters)
3041+ val datasetParentRunnerParameters = retrievedParentRunner.datasets.parameters!!
3042+ assertNotEquals(0 , datasetParentRunnerParameters.size)
3043+
3044+ val datasetParentRunnerId = retrievedParentRunner.datasets.parameter
3045+
3046+ val datasetParameterFromParentRunner =
3047+ datasetApiService.getDataset(
3048+ organizationSaved.id,
3049+ workspaceSaved.id,
3050+ datasetParentRunnerId,
3051+ )
3052+
3053+ assertEquals(
3054+ datasetParameterFromParentRunner.parts.size,
3055+ datasetParentRunnerParameters.size,
3056+ )
3057+ assertEquals(
3058+ datasetParameterFromParentRunner.parts,
3059+ datasetParentRunnerParameters as MutableList <DatasetPart >,
3060+ )
3061+
3062+ // 5 - Update parent runner parameters
3063+ val firstDatasetPartParentRunnerId = datasetParentRunnerParameters[0 ].id
3064+ val secondDatasetPartParentRunnerId = datasetParentRunnerParameters[1 ].id
3065+
3066+ datasetApiService.updateDatasetPart(
3067+ organizationSaved.id,
3068+ workspaceSaved.id,
3069+ datasetParentRunnerId,
3070+ firstDatasetPartParentRunnerId,
3071+ DatasetPartUpdateRequest (
3072+ description = " toto1" ,
3073+ additionalData =
3074+ mutableMapOf (" this is a test" to " that should be in error" , " ok" to false ),
3075+ ),
3076+ )
3077+
3078+ datasetApiService.updateDatasetPart(
3079+ organizationSaved.id,
3080+ workspaceSaved.id,
3081+ datasetParentRunnerId,
3082+ secondDatasetPartParentRunnerId,
3083+ DatasetPartUpdateRequest (
3084+ description = " tutu1" ,
3085+ additionalData =
3086+ mutableMapOf (" this is a test" to " that should be successful" , " ok" to true ),
3087+ ),
3088+ )
3089+
3090+ // 6 - Create a child runner and expect childRunner dataset to have part inherited from parent
3091+ val childRunnerCreateRequest =
3092+ RunnerCreateRequest (
3093+ name = " Child Runner with expected dataset parameter" ,
3094+ solutionId = solutionSaved.id,
3095+ runTemplateId = " runTemplateId" ,
3096+ parentId = parentCreatedRunner.id,
3097+ )
3098+
3099+ val childCreatedRunner =
3100+ runnerApiService.createRunner(
3101+ organizationSaved.id,
3102+ workspaceSaved.id,
3103+ childRunnerCreateRequest,
3104+ )
3105+
3106+ // 7 - Check child runner parameters
3107+ val retrievedChildRunner =
3108+ runnerApiService.getRunner(organizationSaved.id, workspaceSaved.id, childCreatedRunner.id)
3109+ assertNotNull(retrievedChildRunner.datasets.parameters)
3110+ assertEquals(2 , retrievedChildRunner.datasets.parameters!! .size)
3111+ assertNotEquals(
3112+ datasetParentRunnerId,
3113+ retrievedChildRunner.datasets.parameter,
3114+ )
3115+ assertEquals(1 , retrievedChildRunner.parametersValues.size)
3116+ val childRunnerParameterValue = retrievedChildRunner.parametersValues[0 ]
3117+ assertEquals(" param1" , childRunnerParameterValue.parameterId)
3118+ assertEquals(" 5" , childRunnerParameterValue.value)
3119+ assertEquals(" integer" , childRunnerParameterValue.varType)
3120+
3121+ // 8 - Retrieve stored data for assertion
3122+ val datasetParameterFromChildRunner =
3123+ datasetApiService.getDataset(
3124+ organizationSaved.id,
3125+ workspaceSaved.id,
3126+ retrievedChildRunner.datasets.parameter,
3127+ )
3128+
3129+ retrievedParentRunner =
3130+ runnerApiService.getRunner(organizationSaved.id, workspaceSaved.id, parentCreatedRunner.id)
3131+
3132+ val childDatasetParameterParts =
3133+ retrievedChildRunner.datasets.parameters as MutableList <DatasetPart >
3134+ val parentDatasetParameterParts =
3135+ retrievedParentRunner.datasets.parameters as MutableList <DatasetPart >
3136+
3137+ assertEquals(
3138+ datasetParameterFromChildRunner.parts,
3139+ childDatasetParameterParts,
3140+ )
3141+
3142+ // Not equals due to datasetPart ids and create/update infos
3143+ // We need to be sure that child parts are new ones and not just links to parent parts
3144+ assertNotEquals(
3145+ datasetParameterFromChildRunner.parts,
3146+ parentDatasetParameterParts,
3147+ )
3148+ // Fix randomed and timestamped values
3149+ childDatasetParameterParts.forEach {
3150+ it.id = " id"
3151+ it.datasetId = " datasetId"
3152+ it.createInfo.timestamp = 0
3153+ it.updateInfo.timestamp = 0
3154+ }
3155+
3156+ parentDatasetParameterParts.forEach {
3157+ it.id = " id"
3158+ it.datasetId = " datasetId"
3159+ it.createInfo.timestamp = 0
3160+ it.updateInfo.timestamp = 0
3161+ }
3162+
3163+ // Check if dataset parts are equal
3164+ assertEquals(parentDatasetParameterParts, childDatasetParameterParts)
3165+ }
3166+
29543167 fun makeSolution (organizationId : String = organizationSaved.id): SolutionCreateRequest {
29553168 return SolutionCreateRequest (
29563169 key = UUID .randomUUID().toString(),
@@ -2959,7 +3172,7 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
29593172 mutableListOf (
29603173 RunTemplateParameterGroupCreateRequest (
29613174 id = " testParameterGroups" ,
2962- parameters = mutableListOf (" param1" , " param2" ),
3175+ parameters = mutableListOf (" param1" , " param2" , " param3 " ),
29633176 )
29643177 ),
29653178 parameters =
@@ -2975,6 +3188,10 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
29753188 id = " param2" ,
29763189 varType = DATASET_PART_VARTYPE_FILE ,
29773190 ),
3191+ RunTemplateParameterCreateRequest (
3192+ id = " param3" ,
3193+ varType = DATASET_PART_VARTYPE_DB ,
3194+ ),
29783195 ),
29793196 runTemplates =
29803197 mutableListOf (
0 commit comments