Skip to content

Commit be36cd3

Browse files
committed
Refactor dataset part management logic and add integration test for empty update dataset
1 parent 2291879 commit be36cd3

File tree

2 files changed

+102
-17
lines changed

2 files changed

+102
-17
lines changed

dataset/src/integrationTest/kotlin/com/cosmotech/dataset/service/DatasetServiceIntegrationTest.kt

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2386,6 +2386,94 @@ class DatasetServiceIntegrationTest() : CsmTestBase() {
23862386
constructFilePathForDatasetPart(updatedDataset, 0)))
23872387
}
23882388

2389+
@Test
2390+
fun `test updateDataset with empty body`() {
2391+
2392+
// Create a Dataset with dataset Part
2393+
val datasetPartName = "Customers list"
2394+
val datasetPartDescription = "List of customers"
2395+
val datasetPartTags = mutableListOf("part", "public", "customers")
2396+
val datasetPartAdditionalData =
2397+
mutableMapOf("part" to "data", "complex" to mutableMapOf("nested" to "data"))
2398+
val datasetPartCreateRequest =
2399+
DatasetPartCreateRequest(
2400+
name = datasetPartName,
2401+
sourceName = CUSTOMER_SOURCE_FILE_NAME,
2402+
description = datasetPartDescription,
2403+
tags = datasetPartTags,
2404+
additionalData = datasetPartAdditionalData,
2405+
type = DatasetPartTypeEnum.File)
2406+
2407+
val datasetName = "Customer Dataset"
2408+
val datasetDescription = "Dataset for customers"
2409+
val datasetTags = mutableListOf("dataset", "public", "customers")
2410+
val datasetAdditionalData =
2411+
mutableMapOf("dataset" to "data", "complex" to mutableMapOf("nested" to "data"))
2412+
val datasetCreateRequest =
2413+
DatasetCreateRequest(
2414+
name = datasetName,
2415+
description = datasetDescription,
2416+
tags = datasetTags,
2417+
additionalData = datasetAdditionalData,
2418+
parts = mutableListOf(datasetPartCreateRequest))
2419+
2420+
val resourceTestFile = resourceLoader.getResource("classpath:/$CUSTOMER_SOURCE_FILE_NAME").file
2421+
2422+
val fileToSend = FileInputStream(resourceTestFile)
2423+
2424+
val mockMultipartFile =
2425+
MockMultipartFile(
2426+
"files",
2427+
CUSTOMER_SOURCE_FILE_NAME,
2428+
MediaType.MULTIPART_FORM_DATA_VALUE,
2429+
IOUtils.toByteArray(fileToSend))
2430+
2431+
val createdDataset =
2432+
datasetApiService.createDataset(
2433+
organizationSaved.id,
2434+
workspaceSaved.id,
2435+
datasetCreateRequest,
2436+
arrayOf(mockMultipartFile))
2437+
2438+
// Update dataset with an empty body
2439+
val updatedDataset =
2440+
datasetApiService.updateDataset(
2441+
organizationSaved.id,
2442+
workspaceSaved.id,
2443+
createdDataset.id,
2444+
DatasetUpdateRequest(),
2445+
arrayOf())
2446+
2447+
// check Dataset file data after update
2448+
val datasetPartFilePath = constructFilePathForDatasetPart(createdDataset, 0)
2449+
assertTrue(s3Template.objectExists(csmPlatformProperties.s3.bucketName, datasetPartFilePath))
2450+
val downloadFile = s3Template.download(csmPlatformProperties.s3.bucketName, datasetPartFilePath)
2451+
2452+
val expectedText = FileInputStream(resourceTestFile).bufferedReader().use { it.readText() }
2453+
val retrievedText =
2454+
InputStreamResource(downloadFile).inputStream.bufferedReader().use { it.readText() }
2455+
2456+
assertEquals(expectedText, retrievedText)
2457+
// check Dataset simple data after update
2458+
assertNotNull(updatedDataset)
2459+
assertEquals(datasetName, updatedDataset.name)
2460+
assertEquals(datasetDescription, updatedDataset.description)
2461+
assertEquals(datasetTags, updatedDataset.tags)
2462+
assertEquals(createdDataset.createInfo, updatedDataset.createInfo)
2463+
assertEquals(createdDataset.updateInfo.userId, updatedDataset.updateInfo.userId)
2464+
assertTrue(createdDataset.updateInfo.timestamp < updatedDataset.updateInfo.timestamp)
2465+
assertEquals(datasetAdditionalData, updatedDataset.additionalData)
2466+
assertEquals(1, updatedDataset.parts.size)
2467+
val updatedDatasetPart = updatedDataset.parts[0]
2468+
assertNotNull(updatedDatasetPart)
2469+
assertEquals(datasetPartName, updatedDatasetPart.name)
2470+
assertEquals(datasetPartDescription, updatedDatasetPart.description)
2471+
assertEquals(datasetPartTags, updatedDatasetPart.tags)
2472+
assertEquals(datasetPartAdditionalData, updatedDatasetPart.additionalData)
2473+
assertEquals(CUSTOMER_SOURCE_FILE_NAME, updatedDatasetPart.sourceName)
2474+
assertEquals(DatasetPartTypeEnum.File, updatedDatasetPart.type)
2475+
}
2476+
23892477
@Test
23902478
fun `test updateDataset with two dataset parts and same multipart file name`() {
23912479

dataset/src/main/kotlin/com/cosmotech/dataset/service/DatasetServiceImpl.kt

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -333,17 +333,15 @@ class DatasetServiceImpl(
333333
validDatasetUpdateRequest(datasetUpdateRequest, filesUploaded)
334334

335335
val newDatasetParts =
336-
datasetUpdateRequest.parts
337-
?.map { part ->
338-
val constructDatasetPart =
339-
constructDatasetPart(organizationId, workspaceId, datasetId, part)
340-
datasetPartManagementFactory.storeData(
341-
constructDatasetPart,
342-
filesUploaded.first { it.originalFilename == part.sourceName })
343-
constructDatasetPart
344-
}
345-
?.toMutableList()
336+
datasetUpdateRequest.parts?.map { part ->
337+
val constructDatasetPart =
338+
constructDatasetPart(organizationId, workspaceId, datasetId, part)
339+
datasetPartManagementFactory.storeData(
340+
constructDatasetPart, filesUploaded.first { it.originalFilename == part.sourceName })
341+
constructDatasetPart
342+
}
346343

344+
val previousDatasetParts = previousDataset.parts
347345
val updatedDataset =
348346
Dataset(
349347
id = datasetId,
@@ -353,7 +351,7 @@ class DatasetServiceImpl(
353351
workspaceId = workspaceId,
354352
tags = datasetUpdateRequest.tags ?: previousDataset.tags,
355353
additionalData = datasetUpdateRequest.additionalData ?: previousDataset.additionalData,
356-
parts = newDatasetParts ?: previousDataset.parts,
354+
parts = newDatasetParts?.toMutableList() ?: previousDatasetParts,
357355
createInfo = previousDataset.createInfo,
358356
updateInfo =
359357
DatasetEditInfo(
@@ -365,15 +363,14 @@ class DatasetServiceImpl(
365363

366364
if (newDatasetParts != null) {
367365
datasetPartRepository.saveAll(newDatasetParts)
368-
}
369-
val newDataset = datasetRepository.update(updatedDataset)
370366

371-
if (previousDataset.parts.isNotEmpty()) {
372-
datasetPartRepository.deleteAll(previousDataset.parts)
373-
previousDataset.parts.forEach { datasetPartManagementFactory.removeData(it) }
367+
if (previousDatasetParts.isNotEmpty()) {
368+
datasetPartRepository.deleteAll(previousDatasetParts)
369+
previousDatasetParts.forEach { datasetPartManagementFactory.removeData(it) }
370+
}
374371
}
375372

376-
return newDataset
373+
return datasetRepository.update(updatedDataset)
377374
}
378375

379376
override fun updateDatasetAccessControl(

0 commit comments

Comments
 (0)