33
44package software.aws.toolkits.jetbrains.services.amazonq.lsp.artifacts
55
6+ import com.intellij.openapi.project.Project
67import com.intellij.util.text.SemVer
78import io.mockk.Runs
9+ import io.mockk.coEvery
810import io.mockk.every
911import io.mockk.just
12+ import io.mockk.mockk
1013import io.mockk.mockkStatic
1114import io.mockk.spyk
1215import io.mockk.verify
16+ import kotlinx.coroutines.runBlocking
1317import org.assertj.core.api.Assertions.assertThatThrownBy
1418import org.jetbrains.annotations.TestOnly
1519import org.junit.jupiter.api.BeforeEach
@@ -29,6 +33,7 @@ class ArtifactManagerTest {
2933 private lateinit var artifactManager: ArtifactManager
3034 private lateinit var manifestFetcher: ManifestFetcher
3135 private lateinit var manifestVersionRanges: SupportedManifestVersionRange
36+ private lateinit var mockProject: Project
3237
3338 @BeforeEach
3439 fun setUp () {
@@ -38,15 +43,19 @@ class ArtifactManagerTest {
3843 startVersion = SemVer (" 1.0.0" , 1 , 0 , 0 ),
3944 endVersion = SemVer (" 2.0.0" , 2 , 0 , 0 )
4045 )
41- artifactManager = ArtifactManager (manifestFetcher, artifactHelper, manifestVersionRanges)
46+ mockProject = mockk<Project >(relaxed = true ) {
47+ every { basePath } returns tempDir.toString()
48+ every { name } returns " TestProject"
49+ }
50+ artifactManager = ArtifactManager (mockProject, manifestFetcher, artifactHelper, manifestVersionRanges)
4251 }
4352
4453 @Test
4554 fun `fetch artifact fetcher throws exception if manifest is null` () {
4655 every { manifestFetcher.fetch() }.returns(null )
4756
4857 assertThatThrownBy {
49- artifactManager.fetchArtifact()
58+ runBlocking { artifactManager.fetchArtifact() }
5059 }
5160 .isInstanceOf(LspException ::class .java)
5261 .hasFieldOrPropertyWithValue(" errorCode" , LspException .ErrorCode .MANIFEST_FETCH_FAILED )
@@ -55,14 +64,14 @@ class ArtifactManagerTest {
5564 @Test
5665 fun `fetch artifact does not have any valid lsp versions` () {
5766 every { manifestFetcher.fetch() }.returns(ManifestManager .Manifest ())
58- artifactManager = spyk(ArtifactManager (manifestFetcher, artifactHelper, manifestVersionRanges))
67+ artifactManager = spyk(ArtifactManager (mockProject, manifestFetcher, artifactHelper, manifestVersionRanges))
5968
6069 every { artifactManager.getLSPVersionsFromManifestWithSpecifiedRange(any()) }.returns(
6170 ArtifactManager .LSPVersions (deListedVersions = emptyList(), inRangeVersions = emptyList())
6271 )
6372
6473 assertThatThrownBy {
65- artifactManager.fetchArtifact()
74+ runBlocking { artifactManager.fetchArtifact() }
6675 }
6776 .isInstanceOf(LspException ::class .java)
6877 .hasFieldOrPropertyWithValue(" errorCode" , LspException .ErrorCode .NO_COMPATIBLE_LSP_VERSION )
@@ -75,7 +84,7 @@ class ArtifactManagerTest {
7584 every { manifestFetcher.fetch() }.returns(ManifestManager .Manifest ())
7685 every { artifactHelper.getAllLocalLspArtifactsWithinManifestRange(any()) }.returns(expectedResult)
7786
78- artifactManager.fetchArtifact()
87+ runBlocking { artifactManager.fetchArtifact() }
7988
8089 verify(exactly = 1 ) { manifestFetcher.fetch() }
8190 verify(exactly = 1 ) { artifactHelper.getAllLocalLspArtifactsWithinManifestRange(any()) }
@@ -86,7 +95,7 @@ class ArtifactManagerTest {
8695 val target = ManifestManager .VersionTarget (platform = " temp" , arch = " temp" )
8796 val versions = listOf (ManifestManager .Version (" 1.0.0" , targets = listOf (target)))
8897
89- artifactManager = spyk(ArtifactManager (manifestFetcher, artifactHelper, manifestVersionRanges))
98+ artifactManager = spyk(ArtifactManager (mockProject, manifestFetcher, artifactHelper, manifestVersionRanges))
9099
91100 every { artifactManager.getLSPVersionsFromManifestWithSpecifiedRange(any()) }.returns(
92101 ArtifactManager .LSPVersions (deListedVersions = emptyList(), inRangeVersions = versions)
@@ -98,21 +107,22 @@ class ArtifactManagerTest {
98107 every { getCurrentArchitecture() }.returns(" temp" )
99108
100109 every { artifactHelper.getExistingLspArtifacts(any(), any()) }.returns(false )
101- every { artifactHelper.tryDownloadLspArtifacts(any(), any()) } just Runs
110+ coEvery { artifactHelper.tryDownloadLspArtifacts(any(), any(), any()) } returns tempDir
102111 every { artifactHelper.deleteOlderLspArtifacts(any()) } just Runs
103112
104- artifactManager.fetchArtifact()
113+ runBlocking { artifactManager.fetchArtifact() }
105114
106- verify(exactly = 1 ) { artifactHelper.tryDownloadLspArtifacts(any(), any()) }
115+ verify(exactly = 1 ) { runBlocking { artifactHelper.tryDownloadLspArtifacts(any(), any(), any()) } }
107116 verify(exactly = 1 ) { artifactHelper.deleteOlderLspArtifacts(any()) }
108117 }
109118
110119 @Test
111120 fun `fetch artifact does not have valid version in local system` () {
112121 val target = ManifestManager .VersionTarget (platform = " temp" , arch = " temp" )
113122 val versions = listOf (ManifestManager .Version (" 1.0.0" , targets = listOf (target)))
123+ val expectedResult = listOf (Pair (tempDir, SemVer (" 1.0.0" , 1 , 0 , 0 )))
114124
115- artifactManager = spyk(ArtifactManager (manifestFetcher, artifactHelper, manifestVersionRanges))
125+ artifactManager = spyk(ArtifactManager (mockProject, manifestFetcher, artifactHelper, manifestVersionRanges))
116126
117127 every { artifactManager.getLSPVersionsFromManifestWithSpecifiedRange(any()) }.returns(
118128 ArtifactManager .LSPVersions (deListedVersions = emptyList(), inRangeVersions = versions)
@@ -125,10 +135,11 @@ class ArtifactManagerTest {
125135
126136 every { artifactHelper.getExistingLspArtifacts(any(), any()) }.returns(true )
127137 every { artifactHelper.deleteOlderLspArtifacts(any()) } just Runs
138+ every { artifactHelper.getAllLocalLspArtifactsWithinManifestRange(any()) }.returns(expectedResult)
128139
129- artifactManager.fetchArtifact()
140+ runBlocking { artifactManager.fetchArtifact() }
130141
131- verify(exactly = 0 ) { artifactHelper.tryDownloadLspArtifacts(any(), any()) }
142+ verify(exactly = 0 ) { runBlocking { artifactHelper.tryDownloadLspArtifacts(any(), any(), any()) } }
132143 verify(exactly = 1 ) { artifactHelper.deleteOlderLspArtifacts(any()) }
133144 }
134145}
0 commit comments