Skip to content

Commit efb8802

Browse files
committed
Version segregate CodeWhisperer services and test files for 2025.3
- CodeWhispererService/ServiceNew: VirtualFile nullability fixes - ArtifactManagerTest: ProjectExtension -> HeavyPlatformTestCase - DefaultAuthCredentialsServiceTest: ProjectExtension -> HeavyPlatformTestCase - RedshiftUtilsTest: ProjectExtension -> HeavyPlatformTestCase src-242-252/tst-242-252: Original JUnit5 implementations src-253+/tst-253+: Fixed implementations with null checks and JUnit4
1 parent 593a857 commit efb8802

File tree

10 files changed

+1220
-0
lines changed

10 files changed

+1220
-0
lines changed

plugins/amazonq/codewhisperer/jetbrains-community/src-253+/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt

Lines changed: 655 additions & 0 deletions
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package software.aws.toolkits.jetbrains.services.amazonq.lsp.artifacts
5+
6+
import com.intellij.ide.plugins.PluginManagerCore
7+
import com.intellij.openapi.extensions.PluginId
8+
import com.intellij.testFramework.HeavyPlatformTestCase
9+
import com.intellij.util.text.SemVer
10+
import io.mockk.Runs
11+
import io.mockk.coEvery
12+
import io.mockk.coVerify
13+
import io.mockk.every
14+
import io.mockk.just
15+
import io.mockk.mockkStatic
16+
import io.mockk.spyk
17+
import io.mockk.verify
18+
import kotlinx.coroutines.test.runTest
19+
import org.assertj.core.api.Assertions.assertThat
20+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.artifacts.ArtifactManager.SupportedManifestVersionRange
21+
import java.nio.file.Files
22+
import java.nio.file.Path
23+
24+
class ArtifactManagerTest : HeavyPlatformTestCase() {
25+
private lateinit var tempDir: Path
26+
private lateinit var artifactHelper: ArtifactHelper
27+
private lateinit var artifactManager: ArtifactManager
28+
private lateinit var manifestFetcher: ManifestFetcher
29+
private lateinit var manifestVersionRanges: SupportedManifestVersionRange
30+
31+
override fun setUp() {
32+
super.setUp()
33+
tempDir = Files.createTempDirectory("artifact-test")
34+
artifactHelper = spyk(ArtifactHelper(tempDir, 3))
35+
manifestFetcher = spyk(ManifestFetcher())
36+
manifestVersionRanges = SupportedManifestVersionRange(
37+
startVersion = SemVer("1.0.0", 1, 0, 0),
38+
endVersion = SemVer("2.0.0", 2, 0, 0)
39+
)
40+
41+
artifactManager = spyk(ArtifactManager(manifestFetcher, artifactHelper))
42+
}
43+
44+
fun testFetchArtifactFetcherReturnsBundledIfManifestIsNull() = runTest {
45+
every { manifestFetcher.fetch() }.returns(null)
46+
47+
assertThat(artifactManager.fetchArtifact(project))
48+
.isEqualTo(
49+
PluginManagerCore.getPlugin(PluginId.getId("amazon.q"))?.pluginPath?.resolve("flare")
50+
)
51+
}
52+
53+
fun testFetchArtifactDoesNotHaveAnyValidLspVersionsReturnsBundled() = runTest {
54+
every { manifestFetcher.fetch() }.returns(Manifest())
55+
56+
every { artifactManager.getLSPVersionsFromManifestWithSpecifiedRange(any()) }.returns(
57+
ArtifactManager.LSPVersions(deListedVersions = emptyList(), inRangeVersions = emptyList())
58+
)
59+
60+
assertThat(artifactManager.fetchArtifact(project))
61+
.isEqualTo(
62+
PluginManagerCore.getPlugin(PluginId.getId("amazon.q"))?.pluginPath?.resolve("flare")
63+
)
64+
}
65+
66+
fun testGetLSPVersionsFromManifestWithSpecifiedRangeExcludesEndMajorVersion() = runTest {
67+
val newManifest = Manifest(versions = listOf(Version(serverVersion = "2.0.0")))
68+
val result = artifactManager.getLSPVersionsFromManifestWithSpecifiedRange(newManifest)
69+
assertThat(result.inRangeVersions).isEmpty()
70+
}
71+
72+
fun testFetchArtifactIfInRangeVersionsAreNotAvailableShouldFallbackToLocalLsp() = runTest {
73+
val expectedResult = listOf(Pair(tempDir, SemVer("1.0.0", 1, 0, 0)))
74+
75+
every { manifestFetcher.fetch() }.returns(Manifest())
76+
every { artifactHelper.getAllLocalLspArtifactsWithinManifestRange(any()) }.returns(expectedResult)
77+
78+
artifactManager.fetchArtifact(project)
79+
80+
verify(exactly = 1) { manifestFetcher.fetch() }
81+
verify(exactly = 1) { artifactHelper.getAllLocalLspArtifactsWithinManifestRange(any()) }
82+
}
83+
84+
fun testFetchArtifactHaveValidVersionInLocalSystem() = runTest {
85+
val target = VersionTarget(platform = "temp", arch = "temp")
86+
val versions = listOf(Version("1.0.0", targets = listOf(target)))
87+
88+
every { artifactManager.getLSPVersionsFromManifestWithSpecifiedRange(any()) }.returns(
89+
ArtifactManager.LSPVersions(deListedVersions = emptyList(), inRangeVersions = versions)
90+
)
91+
every { manifestFetcher.fetch() }.returns(Manifest())
92+
93+
mockkStatic("software.aws.toolkits.jetbrains.services.amazonq.lsp.artifacts.LspUtilsKt")
94+
every { getCurrentOS() }.returns("temp")
95+
every { getCurrentArchitecture() }.returns("temp")
96+
97+
every { artifactHelper.getExistingLspArtifacts(any(), any()) }.returns(false)
98+
coEvery { artifactHelper.tryDownloadLspArtifacts(any(), any(), any()) } returns tempDir
99+
every { artifactHelper.deleteOlderLspArtifacts(any()) } just Runs
100+
101+
artifactManager.fetchArtifact(project)
102+
103+
coVerify(exactly = 1) { artifactHelper.tryDownloadLspArtifacts(any(), any(), any()) }
104+
verify(exactly = 1) { artifactHelper.deleteOlderLspArtifacts(any()) }
105+
}
106+
107+
fun testFetchArtifactDoesNotHaveValidVersionInLocalSystem() = runTest {
108+
val target = VersionTarget(platform = "temp", arch = "temp")
109+
val versions = listOf(Version("1.0.0", targets = listOf(target)))
110+
val expectedResult = listOf(Pair(tempDir, SemVer("1.0.0", 1, 0, 0)))
111+
112+
every { artifactManager.getLSPVersionsFromManifestWithSpecifiedRange(any()) }.returns(
113+
ArtifactManager.LSPVersions(deListedVersions = emptyList(), inRangeVersions = versions)
114+
)
115+
every { manifestFetcher.fetch() }.returns(Manifest())
116+
117+
mockkStatic("software.aws.toolkits.jetbrains.services.amazonq.lsp.artifacts.LspUtilsKt")
118+
every { getCurrentOS() }.returns("temp")
119+
every { getCurrentArchitecture() }.returns("temp")
120+
121+
every { artifactHelper.getExistingLspArtifacts(any(), any()) }.returns(true)
122+
every { artifactHelper.deleteOlderLspArtifacts(any()) } just Runs
123+
every { artifactHelper.getAllLocalLspArtifactsWithinManifestRange(any()) }.returns(expectedResult)
124+
125+
artifactManager.fetchArtifact(project)
126+
127+
coVerify(exactly = 0) { artifactHelper.tryDownloadLspArtifacts(any(), any(), any()) }
128+
verify(exactly = 1) { artifactHelper.deleteOlderLspArtifacts(any()) }
129+
}
130+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package software.aws.toolkits.jetbrains.services.amazonq.lsp.artifacts
5+
6+
import com.intellij.ide.plugins.PluginManagerCore
7+
import com.intellij.openapi.extensions.PluginId
8+
import com.intellij.testFramework.HeavyPlatformTestCase
9+
import com.intellij.util.text.SemVer
10+
import io.mockk.Runs
11+
import io.mockk.coEvery
12+
import io.mockk.coVerify
13+
import io.mockk.every
14+
import io.mockk.just
15+
import io.mockk.mockkStatic
16+
import io.mockk.spyk
17+
import io.mockk.verify
18+
import kotlinx.coroutines.test.runTest
19+
import org.assertj.core.api.Assertions.assertThat
20+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.artifacts.ArtifactManager.SupportedManifestVersionRange
21+
import java.nio.file.Files
22+
import java.nio.file.Path
23+
24+
class ArtifactManagerTest : HeavyPlatformTestCase() {
25+
private lateinit var tempDir: Path
26+
private lateinit var artifactHelper: ArtifactHelper
27+
private lateinit var artifactManager: ArtifactManager
28+
private lateinit var manifestFetcher: ManifestFetcher
29+
private lateinit var manifestVersionRanges: SupportedManifestVersionRange
30+
31+
override fun setUp() {
32+
super.setUp()
33+
tempDir = Files.createTempDirectory("artifact-test")
34+
artifactHelper = spyk(ArtifactHelper(tempDir, 3))
35+
manifestFetcher = spyk(ManifestFetcher())
36+
manifestVersionRanges = SupportedManifestVersionRange(
37+
startVersion = SemVer("1.0.0", 1, 0, 0),
38+
endVersion = SemVer("2.0.0", 2, 0, 0)
39+
)
40+
41+
artifactManager = spyk(ArtifactManager(manifestFetcher, artifactHelper))
42+
}
43+
44+
fun testFetchArtifactFetcherReturnsBundledIfManifestIsNull() = runTest {
45+
every { manifestFetcher.fetch() }.returns(null)
46+
47+
assertThat(artifactManager.fetchArtifact(project))
48+
.isEqualTo(
49+
PluginManagerCore.getPlugin(PluginId.getId("amazon.q"))?.pluginPath?.resolve("flare")
50+
)
51+
}
52+
53+
fun testFetchArtifactDoesNotHaveAnyValidLspVersionsReturnsBundled() = runTest {
54+
every { manifestFetcher.fetch() }.returns(Manifest())
55+
56+
every { artifactManager.getLSPVersionsFromManifestWithSpecifiedRange(any()) }.returns(
57+
ArtifactManager.LSPVersions(deListedVersions = emptyList(), inRangeVersions = emptyList())
58+
)
59+
60+
assertThat(artifactManager.fetchArtifact(project))
61+
.isEqualTo(
62+
PluginManagerCore.getPlugin(PluginId.getId("amazon.q"))?.pluginPath?.resolve("flare")
63+
)
64+
}
65+
66+
fun testGetLSPVersionsFromManifestWithSpecifiedRangeExcludesEndMajorVersion() = runTest {
67+
val newManifest = Manifest(versions = listOf(Version(serverVersion = "2.0.0")))
68+
val result = artifactManager.getLSPVersionsFromManifestWithSpecifiedRange(newManifest)
69+
assertThat(result.inRangeVersions).isEmpty()
70+
}
71+
72+
fun testFetchArtifactIfInRangeVersionsAreNotAvailableShouldFallbackToLocalLsp() = runTest {
73+
val expectedResult = listOf(Pair(tempDir, SemVer("1.0.0", 1, 0, 0)))
74+
75+
every { manifestFetcher.fetch() }.returns(Manifest())
76+
every { artifactHelper.getAllLocalLspArtifactsWithinManifestRange(any()) }.returns(expectedResult)
77+
78+
artifactManager.fetchArtifact(project)
79+
80+
verify(exactly = 1) { manifestFetcher.fetch() }
81+
verify(exactly = 1) { artifactHelper.getAllLocalLspArtifactsWithinManifestRange(any()) }
82+
}
83+
84+
fun testFetchArtifactHaveValidVersionInLocalSystem() = runTest {
85+
val target = VersionTarget(platform = "temp", arch = "temp")
86+
val versions = listOf(Version("1.0.0", targets = listOf(target)))
87+
88+
every { artifactManager.getLSPVersionsFromManifestWithSpecifiedRange(any()) }.returns(
89+
ArtifactManager.LSPVersions(deListedVersions = emptyList(), inRangeVersions = versions)
90+
)
91+
every { manifestFetcher.fetch() }.returns(Manifest())
92+
93+
mockkStatic("software.aws.toolkits.jetbrains.services.amazonq.lsp.artifacts.LspUtilsKt")
94+
every { getCurrentOS() }.returns("temp")
95+
every { getCurrentArchitecture() }.returns("temp")
96+
97+
every { artifactHelper.getExistingLspArtifacts(any(), any()) }.returns(false)
98+
coEvery { artifactHelper.tryDownloadLspArtifacts(any(), any(), any()) } returns tempDir
99+
every { artifactHelper.deleteOlderLspArtifacts(any()) } just Runs
100+
101+
artifactManager.fetchArtifact(project)
102+
103+
coVerify(exactly = 1) { artifactHelper.tryDownloadLspArtifacts(any(), any(), any()) }
104+
verify(exactly = 1) { artifactHelper.deleteOlderLspArtifacts(any()) }
105+
}
106+
107+
fun testFetchArtifactDoesNotHaveValidVersionInLocalSystem() = runTest {
108+
val target = VersionTarget(platform = "temp", arch = "temp")
109+
val versions = listOf(Version("1.0.0", targets = listOf(target)))
110+
val expectedResult = listOf(Pair(tempDir, SemVer("1.0.0", 1, 0, 0)))
111+
112+
every { artifactManager.getLSPVersionsFromManifestWithSpecifiedRange(any()) }.returns(
113+
ArtifactManager.LSPVersions(deListedVersions = emptyList(), inRangeVersions = versions)
114+
)
115+
every { manifestFetcher.fetch() }.returns(Manifest())
116+
117+
mockkStatic("software.aws.toolkits.jetbrains.services.amazonq.lsp.artifacts.LspUtilsKt")
118+
every { getCurrentOS() }.returns("temp")
119+
every { getCurrentArchitecture() }.returns("temp")
120+
121+
every { artifactHelper.getExistingLspArtifacts(any(), any()) }.returns(true)
122+
every { artifactHelper.deleteOlderLspArtifacts(any()) } just Runs
123+
every { artifactHelper.getAllLocalLspArtifactsWithinManifestRange(any()) }.returns(expectedResult)
124+
125+
artifactManager.fetchArtifact(project)
126+
127+
coVerify(exactly = 0) { artifactHelper.tryDownloadLspArtifacts(any(), any(), any()) }
128+
verify(exactly = 1) { artifactHelper.deleteOlderLspArtifacts(any()) }
129+
}
130+
}

0 commit comments

Comments
 (0)