package expo.modules.plugin import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder import java.io.File class FindPermissionsToOverrideTest { @get:Rule val tempFolder = TemporaryFolder() private lateinit var manifestWithMaxSdk: File private lateinit var manifestWithoutMaxSdk: File @Before fun setup() { manifestWithMaxSdk = File(tempFolder.root, "max_sdk_manifest.xml") manifestWithMaxSdk.writeText(""" """.trimIndent()) manifestWithoutMaxSdk = File(tempFolder.root, "no_max_sdk_manifest.xml") manifestWithoutMaxSdk.writeText(""" """.trimIndent()) } @Test fun `finds permission that needs to be overridden`() { val permissionInfo = PermissionInfo( maxSdkSources = mutableSetOf(manifestWithMaxSdk.absolutePath), manifestPaths = mutableSetOf( manifestWithMaxSdk.absolutePath, manifestWithoutMaxSdk.absolutePath ) ) val problems = mapOf("android.permission.READ_CONTACTS" to permissionInfo) val overrides = findPermissionsToOverride(problems) assertThat(overrides).hasSize(1) assertThat(overrides).containsKey("android.permission.READ_CONTACTS") } @Test fun `does not find override if no conflict exists`() { val manifestWithMaxSdk2 = File(tempFolder.root, "max_sdk_manifest_2.xml") manifestWithMaxSdk2.writeText(""" """.trimIndent()) val permissionInfo = PermissionInfo( maxSdkSources = mutableSetOf(manifestWithMaxSdk.absolutePath, manifestWithMaxSdk2.absolutePath), manifestPaths = mutableSetOf( manifestWithMaxSdk.absolutePath, manifestWithMaxSdk2.absolutePath ) ) val problems = mapOf("android.permission.READ_CONTACTS" to permissionInfo) val overrides = findPermissionsToOverride(problems) assertThat(overrides).isEmpty() } @Test fun `ignores permission if file does not exist`() { val nonExistentPath = "/path/to/nothing.xml" val permissionInfo = PermissionInfo( maxSdkSources = mutableSetOf(manifestWithMaxSdk.absolutePath), manifestPaths = mutableSetOf( manifestWithMaxSdk.absolutePath, nonExistentPath ) ) val problems = mapOf("android.permission.READ_CONTACTS" to permissionInfo) val overrides = findPermissionsToOverride(problems) assertThat(overrides).isEmpty() } }