From 1c05f8799d5a8783b30f9917b302096013d0b3f4 Mon Sep 17 00:00:00 2001 From: jamesmcnamara Date: Fri, 25 Oct 2024 16:26:34 -0700 Subject: [PATCH] added unit test --- .../initialization/UninstallListenerTest.kt | 61 +++++++++++++------ 1 file changed, 41 insertions(+), 20 deletions(-) diff --git a/src/test/kotlin/com/sourcegraph/cody/initialization/UninstallListenerTest.kt b/src/test/kotlin/com/sourcegraph/cody/initialization/UninstallListenerTest.kt index 6e1eb58d1..94de9990a 100644 --- a/src/test/kotlin/com/sourcegraph/cody/initialization/UninstallListenerTest.kt +++ b/src/test/kotlin/com/sourcegraph/cody/initialization/UninstallListenerTest.kt @@ -1,45 +1,66 @@ package com.sourcegraph.cody.initialization import com.intellij.ide.plugins.* +import com.intellij.openapi.extensions.PluginId import com.intellij.testFramework.fixtures.BasePlatformTestCase import com.sourcegraph.cody.config.CodyAuthenticationManager import com.sourcegraph.cody.telemetry.TelemetryV2 -import com.sourcegraph.config.ConfigUtil.getPluginId +import com.sourcegraph.config.ConfigUtil import io.mockk.* @Suppress("UnstableApiUsage") class UninstallListenerTest : BasePlatformTestCase() { - fun `test plugin uninstall cleans up resources`() { - val uninstallListener = UninstallListener() + private val uninstallListener = UninstallListener() + + // Mock dependencies + // relaxed = true to allow unit returning methods to auto-mock + private val authManager = mockk(relaxed = true) - // Mock dependencies - // relaxed = true to allow unit returning methods to auto-mock - val authManager = mockk(relaxed = true) + override fun setUp() { + super.setUp() + + // setup mock objects mockkObject(CodyAuthenticationManager) - every { - CodyAuthenticationManager.getInstance() - } returns authManager + every { CodyAuthenticationManager.getInstance() } returns authManager mockkObject(TelemetryV2) - every { - TelemetryV2.sendTelemetryEvent(any(), any(), any()) - } returns Unit + every { TelemetryV2.sendTelemetryEvent(any(), any(), any()) } returns Unit + } + private fun getPlugin() = + PluginManagerCore.findPlugin(ConfigUtil.getPluginId()) ?: throw Exception("Plugin not found") + fun `test plugin uninstall cleans up resources`() { // Execute uninstall uninstallListener.runActivity(project) - val plugin = PluginManagerCore.findPlugin(getPluginId()) - plugin ?: throw Exception("Plugin not found") + val plugin = getPlugin() PluginInstaller.prepareToUninstall(plugin) verify { authManager.setActiveAccount(null) authManager.removeAll() - TelemetryV2.sendTelemetryEvent( - any(), - "cody.extension", - "uninstalled", - any() - ) + TelemetryV2.sendTelemetryEvent(any(), "cody.extension", "uninstalled", any()) + } + } + + fun `test plugin uninstall does nothing for unrelated plugins`() { + // Execute uninstall + val plugin = getPlugin() + uninstallListener.runActivity(project) + + // Now mock out config util so that it returns a different plugin id + // so that the UninstallListener thinks it's a different plugin + mockkStatic(ConfigUtil::getPluginId) + every { ConfigUtil.getPluginId() } returns PluginId.getId("com.sourcegraph.cody.test") + + PluginInstaller.prepareToUninstall(plugin) + // Remove the static method mock so that it doesn't interfere with other tests + unmockkStatic(ConfigUtil::getPluginId) + + // Verify that the uninstall listener didn't do anything + verify(exactly = 0) { + authManager.setActiveAccount(null) + authManager.removeAll() + TelemetryV2.sendTelemetryEvent(any(), "cody.extension", "uninstalled", any()) } } }