From 83f50ca90ee5da8bbaeaacb9ff1314308058ed5e Mon Sep 17 00:00:00 2001 From: "Chris (He/Him)" Date: Mon, 29 Dec 2025 15:03:27 +0000 Subject: [PATCH 1/3] Adds integration test for updating subdomain alone Signed-off-by: Chris (He/Him) --- .../com/atlan/pkg/aim/UpdateSubdomainTest.kt | 136 ++++++++++++++++++ .../src/test/resources/subdomain-alone.csv | 2 + 2 files changed, 138 insertions(+) create mode 100644 samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/UpdateSubdomainTest.kt create mode 100644 samples/packages/asset-import/src/test/resources/subdomain-alone.csv diff --git a/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/UpdateSubdomainTest.kt b/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/UpdateSubdomainTest.kt new file mode 100644 index 0000000000..5d05934ea9 --- /dev/null +++ b/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/UpdateSubdomainTest.kt @@ -0,0 +1,136 @@ +/* SPDX-License-Identifier: Apache-2.0 + Copyright 2023 Atlan Pte. Ltd. */ +package com.atlan.pkg.aim + +import AssetImportCfg +import com.atlan.model.assets.Asset +import com.atlan.model.assets.DataDomain +import com.atlan.model.fields.AtlanField +import com.atlan.pkg.PackageTest +import com.atlan.pkg.Utils +import java.nio.file.Paths +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue + +class UpdateSubdomainTest : PackageTest("usd") { + override val logger = Utils.getLogger(this.javaClass.name) + + private val dataDomain = makeUnique("d1") + private val subDomain = makeUnique("sd1") + private lateinit var dd: DataDomain + private lateinit var sd: DataDomain + private val testFile = "subdomain-alone.csv" + + private val files = + listOf( + testFile, + "debug.log", + ) + + private fun prepFile() { + // Prepare a copy of the file with unique names for domains and products + val input = Paths.get("src", "test", "resources", testFile).toFile() + val output = Paths.get(testDirectory, testFile).toFile() + input.useLines { lines -> + lines.forEach { line -> + val revised = + line + .replace("{{DATADOMAIN}}", dataDomain) + .replace("{{SUBDOMAIN}}", subDomain) + output.appendText("$revised\n") + } + } + } + + private val dataDomainAttrs: List = + listOf( + DataDomain.NAME, + DataDomain.ASSET_ICON, + DataDomain.ASSET_THEME_HEX, + DataDomain.ASSET_COVER_IMAGE, + DataDomain.USER_DESCRIPTION, + DataDomain.OWNER_USERS, + DataDomain.OWNER_GROUPS, + DataDomain.CERTIFICATE_STATUS, + DataDomain.CERTIFICATE_STATUS_MESSAGE, + DataDomain.PARENT_DOMAIN, + DataDomain.PARENT_DOMAIN_QUALIFIED_NAME, + DataDomain.SUPER_DOMAIN_QUALIFIED_NAME, + DataDomain.ANNOUNCEMENT_TYPE, + DataDomain.ANNOUNCEMENT_TITLE, + DataDomain.ANNOUNCEMENT_MESSAGE, + DataDomain.SUB_DOMAINS, + ) + + private fun createAssets() { + val ddCreate = DataDomain.creator(dataDomain).build() + val ddResponse = ddCreate.save(client) + dd = ddResponse.getResult(ddCreate) + val sdCreate = + DataDomain.creator(subDomain, dd.qualifiedName).build() + val sdResponse = sdCreate.save(client) + sd = sdResponse.getResult(sdCreate) + } + + override fun setup() { + prepFile() + createAssets() + } + + override fun teardown() { + removeProduct(subDomain) + removeDomain(dataDomain) + } + + @Test(groups = ["aim.usd.create"]) + fun exactlyTwoDomains() { + val d1 = findDataDomain(dataDomain) + assertEquals(dataDomain, d1.name) + assertEquals(1, d1.subDomains.size) + val d2 = findDataDomain(subDomain) + assertEquals(subDomain, d2.name) + assertTrue(d2.subDomains.isNullOrEmpty()) + } + + @Test(groups = ["aim.usd.runUpsert"], dependsOnGroups = ["aim.usd.create"]) + fun upsert() { + runCustomPackage( + AssetImportCfg( + dataProductsFile = Paths.get(testDirectory, testFile).toString(), + dataProductsUpsertSemantic = "upsert", + dataProductsAttrToOverwrite = listOf(), + dataProductsFailOnErrors = true, + ), + Importer::main, + ) + } + + @Test(groups = ["aim.usd.testUpsert"], dependsOnGroups = ["aim.usd.runUpsert"]) + fun domainsUnchanged() { + exactlyTwoDomains() + } + + private fun findDataDomain(domainName: String): DataDomain { + val request = + DataDomain + .select(client) + .where(DataDomain.NAME.eq(domainName)) + .includesOnResults(dataDomainAttrs) + .toRequest() + val response = retrySearchUntil(request, 1) + val dataDomains = response.stream().filter { a: Asset? -> a is DataDomain }.toList() + assertEquals(1, dataDomains.size) + return dataDomains[0] as DataDomain + } + + @Test + fun filesCreated() { + validateFilesExist(files) + } + + @Test + fun errorFreeLog() { + validateErrorFreeLog() + } +} diff --git a/samples/packages/asset-import/src/test/resources/subdomain-alone.csv b/samples/packages/asset-import/src/test/resources/subdomain-alone.csv new file mode 100644 index 0000000000..9e886c109c --- /dev/null +++ b/samples/packages/asset-import/src/test/resources/subdomain-alone.csv @@ -0,0 +1,2 @@ +typeName,name,assetIcon,assetThemeHex,assetCoverImage,parentDomain,dataDomain,dataProductAssetsDSL,displayName,description,userDescription,ownerUsers,ownerGroups +DataDomain,{{SUBDOMAIN}},,,,{{DATADOMAIN}},,,,,Test subdomain,chris,admins From cd2011f31acce319403023425b94cf9b71ac8ea6 Mon Sep 17 00:00:00 2001 From: "Chris (He/Him)" Date: Tue, 30 Dec 2025 11:37:56 +0000 Subject: [PATCH 2/3] Fix integration test Signed-off-by: Chris (He/Him) --- gradle/libs.versions.toml | 2 +- .../test/kotlin/com/atlan/pkg/aim/UpdateSubdomainTest.kt | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 58be981c43..379e685880 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,7 +8,7 @@ testng = "7.11.0" log4j = "2.25.3" wiremock = "3.13.2" jnanoid = "2.0.0" -awssdk = "2.40.16" +awssdk = "2.40.17" gcs = "26.73.0" system-stubs = "2.1.8" fastcsv = "4.1.0" diff --git a/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/UpdateSubdomainTest.kt b/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/UpdateSubdomainTest.kt index 5d05934ea9..ad37343171 100644 --- a/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/UpdateSubdomainTest.kt +++ b/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/UpdateSubdomainTest.kt @@ -79,7 +79,7 @@ class UpdateSubdomainTest : PackageTest("usd") { } override fun teardown() { - removeProduct(subDomain) + removeDomain(subDomain) removeDomain(dataDomain) } @@ -124,12 +124,12 @@ class UpdateSubdomainTest : PackageTest("usd") { return dataDomains[0] as DataDomain } - @Test + @Test(dependsOnGroups = ["aim.usd.*"]) fun filesCreated() { validateFilesExist(files) } - @Test + @Test(dependsOnGroups = ["aim.usd.*"]) fun errorFreeLog() { validateErrorFreeLog() } From f2ecef9a3d14c0dcd256b3ed776600a941c45b23 Mon Sep 17 00:00:00 2001 From: "Chris (He/Him)" Date: Tue, 30 Dec 2025 11:54:13 +0000 Subject: [PATCH 3/3] Fix integration test Signed-off-by: Chris (He/Him) --- .../src/test/kotlin/com/atlan/pkg/aim/UpdateSubdomainTest.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/UpdateSubdomainTest.kt b/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/UpdateSubdomainTest.kt index ad37343171..faf52ddc8b 100644 --- a/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/UpdateSubdomainTest.kt +++ b/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/UpdateSubdomainTest.kt @@ -11,6 +11,7 @@ import com.atlan.pkg.Utils import java.nio.file.Paths import kotlin.test.Test import kotlin.test.assertEquals +import kotlin.test.assertFalse import kotlin.test.assertTrue class UpdateSubdomainTest : PackageTest("usd") { @@ -87,6 +88,7 @@ class UpdateSubdomainTest : PackageTest("usd") { fun exactlyTwoDomains() { val d1 = findDataDomain(dataDomain) assertEquals(dataDomain, d1.name) + assertFalse(d1.subDomains.isNullOrEmpty()) assertEquals(1, d1.subDomains.size) val d2 = findDataDomain(subDomain) assertEquals(subDomain, d2.name)