@@ -23,6 +23,7 @@ import com.cosmotech.dataset.domain.Dataset
2323import com.cosmotech.dataset.domain.DatasetAccessControl
2424import com.cosmotech.dataset.domain.DatasetConnector
2525import com.cosmotech.dataset.domain.DatasetSecurity
26+ import com.cosmotech.dataset.repository.DatasetRepository
2627import com.cosmotech.organization.api.OrganizationApiService
2728import com.cosmotech.organization.domain.Organization
2829import com.cosmotech.organization.domain.OrganizationAccessControl
@@ -50,10 +51,10 @@ import com.ninjasquad.springmockk.MockkBean
5051import com.ninjasquad.springmockk.SpykBean
5152import com.redis.om.spring.RediSearchIndexer
5253import com.redis.testcontainers.RedisStackContainer
54+ import com.redislabs.redisgraph.impl.api.RedisGraph
5355import io.mockk.every
5456import io.mockk.impl.annotations.MockK
5557import io.mockk.junit5.MockKExtension
56- import io.mockk.mockk
5758import io.mockk.mockkStatic
5859import java.util.UUID
5960import kotlin.test.assertEquals
@@ -104,6 +105,7 @@ class ScenarioServiceIntegrationTest : CsmRedisTestBase() {
104105 @Autowired lateinit var connectorApiService: ConnectorApiService
105106 @Autowired lateinit var organizationApiService: OrganizationApiService
106107 @SpykBean @Autowired lateinit var datasetApiService: DatasetApiService
108+ @Autowired lateinit var datasetRepository: DatasetRepository
107109 @Autowired lateinit var solutionApiService: SolutionApiService
108110 @Autowired lateinit var workspaceApiService: WorkspaceApiService
109111 @Autowired lateinit var scenarioApiService: ScenarioApiService
@@ -164,6 +166,7 @@ class ScenarioServiceIntegrationTest : CsmRedisTestBase() {
164166
165167 dataset = makeDataset(organizationSaved.id!! , " Dataset" , connectorSaved)
166168 datasetSaved = datasetApiService.createDataset(organizationSaved.id!! , dataset)
169+ materializeTwingraph()
167170
168171 solution = makeSolution(organizationSaved.id!! )
169172 solutionSaved = solutionApiService.createSolution(organizationSaved.id!! , solution)
@@ -178,9 +181,7 @@ class ScenarioServiceIntegrationTest : CsmRedisTestBase() {
178181 solutionSaved.id!! ,
179182 " Scenario" ,
180183 mutableListOf (datasetSaved.id!! ))
181- every { datasetApiService.findDatasetById(any(), any()) } returns
182- datasetSaved.apply { status = Dataset .Status .READY }
183- every { datasetApiService.createSubDataset(any(), any(), any()) } returns mockk(relaxed = true )
184+
184185 scenarioSaved =
185186 scenarioApiService.createScenario(organizationSaved.id!! , workspaceSaved.id!! , scenario)
186187 }
@@ -306,13 +307,8 @@ class ScenarioServiceIntegrationTest : CsmRedisTestBase() {
306307 @Test
307308 fun `test parent scenario operations as User Admin` () {
308309
309- logger.info(
310- " should create a child Scenario with dataset different from parent and " +
311- " assert the dataset list is the same as parent" )
312- val dataset = makeDataset(organizationSaved.id!! , " Dataset" , connectorSaved)
313- val datasetSaved = datasetApiService.createDataset(organizationSaved.id!! , dataset)
314-
315- logger.info(" should create a tree of Scenarios" )
310+ logger.info(" should create a child Scenario with dataset different from parent" )
311+ logger.info(" Create a tree of Scenarios" )
316312 val idMap = mutableMapOf<Int , String >()
317313 IntRange (1 , 5 ).forEach {
318314 var scenario =
@@ -674,6 +670,41 @@ class ScenarioServiceIntegrationTest : CsmRedisTestBase() {
674670 }
675671 }
676672
673+ @Test
674+ fun `test deleting dataset with scenario` () {
675+ scenarioApiService.deleteScenario(
676+ organizationSaved.id!! , workspaceSaved.id!! , scenarioSaved.id!! )
677+
678+ assertDoesNotThrow {
679+ datasetApiService.findDatasetById(organizationSaved.id!! , datasetSaved.id!! )
680+ }
681+ scenarioSaved.datasetList!! .forEach { dataset ->
682+ assertThrows<CsmResourceNotFoundException > {
683+ datasetApiService.findDatasetById(organizationSaved.id!! , dataset)
684+ }
685+ }
686+ }
687+
688+ @Test
689+ fun `test do not delete old style dataset with scenario` () {
690+ // old style dataset doesn't have the creationDate property set
691+ // set all dataset in scenario datasetList to old style
692+ scenarioSaved.datasetList!! .forEach { datasetId ->
693+ val scenarioDataset = datasetApiService.findDatasetById(organizationSaved.id!! , datasetId)
694+ datasetRepository.save(scenarioDataset.apply { creationDate = null })
695+ }
696+
697+ scenarioApiService.deleteScenario(
698+ organizationSaved.id!! , workspaceSaved.id!! , scenarioSaved.id!! )
699+
700+ assertDoesNotThrow {
701+ datasetApiService.findDatasetById(organizationSaved.id!! , datasetSaved.id!! )
702+ }
703+ scenarioSaved.datasetList!! .forEach { dataset ->
704+ assertDoesNotThrow { datasetApiService.findDatasetById(organizationSaved.id!! , dataset) }
705+ }
706+ }
707+
677708 private fun makeWorkspaceEventHubInfo (eventHubAvailable : Boolean ): WorkspaceEventHubInfo {
678709 return WorkspaceEventHubInfo (
679710 eventHubNamespace = " eventHubNamespace" ,
@@ -805,4 +836,17 @@ class ScenarioServiceIntegrationTest : CsmRedisTestBase() {
805836 ScenarioAccessControl (CONNECTED_ADMIN_USER , ROLE_ADMIN ),
806837 ScenarioAccessControl (userName, role))))
807838 }
839+
840+ private fun materializeTwingraph (
841+ dataset : Dataset = datasetSaved,
842+ createTwingraph : Boolean = true
843+ ): Dataset {
844+ dataset.apply {
845+ if (createTwingraph) {
846+ RedisGraph (jedisPool).query(this .twingraphId, " MATCH (n:labelrouge) return 1" )
847+ }
848+ this .status = Dataset .Status .READY
849+ }
850+ return datasetRepository.save(dataset)
851+ }
808852}
0 commit comments