package com.meesho.utilities import com.lesfurets.jenkins.unit.BasePipelineTest import org.junit.Before import org.junit.Test import static org.junit.Assert.* /** * Unit tests for constructParam.groovy policy-enforcement methods. * * Strategy: Jenkins DSL steps (git, readYaml, dir) are registered as no-op mocks. * readYaml is overridden per-test to return controlled whitelist data. * This isolates each method's branch-decision logic from the live GitHub clone. */ class ConstructParamTest extends BasePipelineTest { def script // Controlled whitelist sets — each test overrides as needed via helper.registerAllowedMethod Set sonarWhitelist = [] as Set Set appConfigDisabledWhitelist = [] as Set Set allowedNonDevelopWhitelist = [] as Set Set validateCacWhitelist = [] as Set Set multizoneDeployables = [] as Set @Override @Before void setUp() { super.setUp() // No-op Jenkins DSL steps helper.registerAllowedMethod('dir', [String, Closure]) { path, body -> body() } helper.registerAllowedMethod('git', [Map]) { /* no-op clone */ } helper.registerAllowedMethod('echo', [String]) { /* no-op */ } // readYaml returns whitelists driven by the test's set fields helper.registerAllowedMethod('readYaml', [Map]) { args -> String file = args.file as String if (file.contains('skip-sonar-whitelist')) return [repos: sonarWhitelist.toList()] if (file.contains('app-config-disabled')) return [repos: appConfigDisabledWhitelist.toList()] if (file.contains('allowedNonDevelopPrDeploymentToInt')) return [repos: allowedNonDevelopWhitelist.toList()] if (file.contains('ValidateCacConfig')) return [repos: validateCacWhitelist.toList()] if (file.contains('multizone-enabled-repos')) return [multizone_enabled_deployables: multizoneDeployables.toList()] return [repos: []] } script = loadScript('src/com/meesho/utilities/constructParam.groovy') } // ──────────────────────────────── // skipSonarCheckForbidden() // ──────────────────────────────── @Test void skipSonarCheckForbidden_returnsFalse_forNonMavenBuilds() { binding.setProperty('env', [BRANCH_NAME: 'main']) def config = [dockerBuildVersion: 'go-1.22', repo_name: 'my-service', skip_sonar: true] assertFalse(script.skipSonarCheckForbidden(config, ['main': 'prd'])) } @Test void skipSonarCheckForbidden_returnsFalse_forNodeBuild() { binding.setProperty('env', [BRANCH_NAME: 'main']) def config = [dockerBuildVersion: 'node-20', repo_name: 'my-service', skip_sonar: true] assertFalse(script.skipSonarCheckForbidden(config, ['main': 'prd'])) } @Test void skipSonarCheckForbidden_returnsFalse_forHotfixBranch() { binding.setProperty('env', [BRANCH_NAME: 'hotfix/fix-login']) def config = [dockerBuildVersion: 'maven-21', repo_name: 'my-service', skip_sonar: true] assertFalse(script.skipSonarCheckForbidden(config, ['main': 'prd'])) } @Test void skipSonarCheckForbidden_returnsFalse_forStgEnvironment() { binding.setProperty('env', [BRANCH_NAME: 'develop']) def config = [dockerBuildVersion: 'maven-21', repo_name: 'my-service', skip_sonar: true] assertFalse(script.skipSonarCheckForbidden(config, ['develop': 'stg'])) } @Test void skipSonarCheckForbidden_returnsFalse_forIntEnvironment() { binding.setProperty('env', [BRANCH_NAME: 'feature/xyz']) def config = [dockerBuildVersion: 'maven-21', repo_name: 'my-service', skip_sonar: true] // branch not in map → defaults to "int" assertFalse(script.skipSonarCheckForbidden(config, ['main': 'prd'])) } @Test void skipSonarCheckForbidden_returnsFalse_whenRepoIsInSonarWhitelist() { binding.setProperty('env', [BRANCH_NAME: 'main']) sonarWhitelist = ['whitelisted-service'] as Set def config = [dockerBuildVersion: 'maven-21', repo_name: 'whitelisted-service', skip_sonar: true] assertFalse(script.skipSonarCheckForbidden(config, ['main': 'prd'])) } @Test void skipSonarCheckForbidden_returnsTrue_whenSkipSonarTrue_onMavenPrdBuild() { binding.setProperty('env', [BRANCH_NAME: 'main']) sonarWhitelist = [] as Set def config = [dockerBuildVersion: 'maven-21', repo_name: 'my-service', skip_sonar: true] assertTrue(script.skipSonarCheckForbidden(config, ['main': 'prd'])) } @Test void skipSonarCheckForbidden_returnsFalse_whenSkipSonarFalse_onMavenPrdBuild() { binding.setProperty('env', [BRANCH_NAME: 'main']) sonarWhitelist = [] as Set def config = [dockerBuildVersion: 'maven-21', repo_name: 'my-service', skip_sonar: false] assertFalse(script.skipSonarCheckForbidden(config, ['main': 'prd'])) } @Test void skipSonarCheckForbidden_returnsTrue_forMaven17PrdBuildWithSkipSonar() { binding.setProperty('env', [BRANCH_NAME: 'main']) sonarWhitelist = [] as Set def config = [dockerBuildVersion: 'maven-17', repo_name: 'my-service', skip_sonar: true] assertTrue(script.skipSonarCheckForbidden(config, ['main': 'prd'])) } // ──────────────────────────────── // appConfigDisabledForbidden() // ──────────────────────────────── @Test void appConfigDisabledForbidden_returnsFalse_whenEnvironmentIsNotStg() { binding.setProperty('env', [CHANGE_TARGET: 'main']) assertFalse(script.appConfigDisabledForbidden(false, 'my-service', 'prd', 'maven-21')) } @Test void appConfigDisabledForbidden_returnsFalse_whenEnvironmentIsInt() { binding.setProperty('env', [CHANGE_TARGET: 'main']) assertFalse(script.appConfigDisabledForbidden(false, 'my-service', 'int', 'maven-21')) } @Test void appConfigDisabledForbidden_returnsFalse_whenBuildIsGo() { binding.setProperty('env', [CHANGE_TARGET: 'develop']) assertFalse(script.appConfigDisabledForbidden(false, 'my-service', 'stg', 'go-1.22')) } @Test void appConfigDisabledForbidden_returnsFalse_whenBuildIsNode() { binding.setProperty('env', [CHANGE_TARGET: 'develop']) assertFalse(script.appConfigDisabledForbidden(false, 'my-service', 'stg', 'node-20')) } @Test void appConfigDisabledForbidden_returnsFalse_whenRepoIsInWhitelist() { binding.setProperty('env', [CHANGE_TARGET: 'develop']) appConfigDisabledWhitelist = ['legacy-service'] as Set assertFalse(script.appConfigDisabledForbidden(false, 'legacy-service', 'stg', 'maven-21')) } @Test void appConfigDisabledForbidden_returnsTrue_forMavenStgBuildWithAppConfigDisabled() { binding.setProperty('env', [CHANGE_TARGET: 'develop']) appConfigDisabledWhitelist = [] as Set assertTrue(script.appConfigDisabledForbidden(false, 'my-service', 'stg', 'maven-21')) } @Test void appConfigDisabledForbidden_returnsFalse_forMavenStgBuildWithAppConfigEnabled() { binding.setProperty('env', [CHANGE_TARGET: 'develop']) appConfigDisabledWhitelist = [] as Set assertFalse(script.appConfigDisabledForbidden(true, 'my-service', 'stg', 'maven-21')) } @Test void appConfigDisabledForbidden_returnsTrue_forGradleStgBuildWithAppConfigDisabled() { binding.setProperty('env', [CHANGE_TARGET: 'develop']) appConfigDisabledWhitelist = [] as Set assertTrue(script.appConfigDisabledForbidden(false, 'my-service', 'stg', 'gradle')) } // ──────────────────────────────── // allowedNonDevelopPrDeploymentToIntRepos() // ──────────────────────────────── @Test void allowedNonDevelopPr_returnsFalse_whenRepoNotInWhitelist() { allowedNonDevelopWhitelist = [] as Set assertFalse(script.allowedNonDevelopPrDeploymentToIntRepos('my-service')) } @Test void allowedNonDevelopPr_returnsTrue_whenRepoIsInWhitelist() { allowedNonDevelopWhitelist = ['allowed-service'] as Set assertTrue(script.allowedNonDevelopPrDeploymentToIntRepos('allowed-service')) } @Test void allowedNonDevelopPr_isCaseSensitive() { allowedNonDevelopWhitelist = ['My-Service'] as Set assertFalse(script.allowedNonDevelopPrDeploymentToIntRepos('my-service')) } @Test void allowedNonDevelopPr_returnsFalse_forEmptyRepoName() { allowedNonDevelopWhitelist = [] as Set assertFalse(script.allowedNonDevelopPrDeploymentToIntRepos('')) } // ──────────────────────────────── // ValidateCacConfigForRepo() // ──────────────────────────────── @Test void validateCacConfig_returnsTrue_whenRepoIsInWhitelist() { binding.setProperty('env', [CHANGE_TARGET: 'develop']) validateCacWhitelist = ['cac-enabled-service'] as Set assertTrue(script.ValidateCacConfigForRepo(false, 'cac-enabled-service')) } @Test void validateCacConfig_returnsPassedInValue_whenRepoNotInWhitelist() { binding.setProperty('env', [CHANGE_TARGET: 'develop']) validateCacWhitelist = [] as Set assertTrue(script.ValidateCacConfigForRepo(true, 'my-service')) assertFalse(script.ValidateCacConfigForRepo(false, 'my-service')) } @Test void validateCacConfig_whitelistOverridesFalseValidateConfig() { binding.setProperty('env', [CHANGE_TARGET: 'develop']) validateCacWhitelist = ['forced-service'] as Set assertTrue(script.ValidateCacConfigForRepo(false, 'forced-service')) } @Test void validateCacConfig_whitelistDoesNotOverrideTrueValidateConfig() { // If repo is NOT in whitelist but ValidateConfig=true, it should still return true binding.setProperty('env', [CHANGE_TARGET: 'develop']) validateCacWhitelist = [] as Set assertTrue(script.ValidateCacConfigForRepo(true, 'my-service')) } // ──────────────────────────────── // isMultizoneEnabled() // ──────────────────────────────── @Test void isMultizoneEnabled_returnsFalse_whenDeployableNotInList() { multizoneDeployables = [] as Set assertFalse(script.isMultizoneEnabled('my-deployable')) } @Test void isMultizoneEnabled_returnsTrue_whenDeployableIsInList() { multizoneDeployables = ['critical-app'] as Set assertTrue(script.isMultizoneEnabled('critical-app')) } @Test void isMultizoneEnabled_isExactMatch_prefixNotSufficient() { multizoneDeployables = ['critical-app'] as Set assertFalse(script.isMultizoneEnabled('critical')) assertFalse(script.isMultizoneEnabled('critical-app-v2')) } @Test void isMultizoneEnabled_isCaseSensitive() { multizoneDeployables = ['Critical-App'] as Set assertFalse(script.isMultizoneEnabled('critical-app')) } }