Skip to content

Commit 30f8dc6

Browse files
committed
Added unit test cases
1 parent 8f44478 commit 30f8dc6

File tree

3 files changed

+105
-61
lines changed
  • plugins/amazonq
    • chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/artifacts
    • shared/jetbrains-community

3 files changed

+105
-61
lines changed

plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/artifacts/ManifestFetcherTest.kt

Lines changed: 0 additions & 59 deletions
This file was deleted.

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/artifacts/ManifestFetcher.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package software.aws.toolkits.jetbrains.services.amazonq.lsp.artifacts
55

66
import com.intellij.openapi.util.text.StringUtil
77
import com.intellij.util.io.DigestUtil
8+
import org.assertj.core.util.VisibleForTesting
89
import software.aws.toolkits.core.utils.error
910
import software.aws.toolkits.core.utils.exists
1011
import software.aws.toolkits.core.utils.getLogger
@@ -38,7 +39,8 @@ class ManifestFetcher {
3839
return fetchManifestFromRemote()
3940
}
4041

41-
private fun fetchManifestFromRemote(): ManifestManager.Manifest? {
42+
@VisibleForTesting
43+
internal fun fetchManifestFromRemote(): ManifestManager.Manifest? {
4244
val manifest: ManifestManager.Manifest?
4345
try {
4446
val manifestString = getTextFromUrl(lspManifestUrl)
@@ -64,7 +66,8 @@ class ManifestFetcher {
6466
}
6567
}
6668

67-
private fun fetchManifestFromLocal(): ManifestManager.Manifest? {
69+
@VisibleForTesting
70+
internal fun fetchManifestFromLocal(): ManifestManager.Manifest? {
6871
val localETag = getManifestETagFromLocal()
6972
val remoteETag = getManifestETagFromUrl()
7073
// If local and remote have same ETag, we can re-use the manifest file from local to fetch artifacts.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
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 io.mockk.every
7+
import io.mockk.mockkStatic
8+
import org.assertj.core.api.Assertions.assertThat
9+
import org.jetbrains.annotations.TestOnly
10+
import org.junit.jupiter.api.BeforeEach
11+
import org.junit.jupiter.api.Test
12+
import org.mockito.kotlin.atLeastOnce
13+
import org.mockito.kotlin.never
14+
import org.mockito.kotlin.reset
15+
import org.mockito.kotlin.spy
16+
import org.mockito.kotlin.verify
17+
import org.mockito.kotlin.whenever
18+
import software.aws.toolkits.jetbrains.core.getTextFromUrl
19+
import software.aws.toolkits.jetbrains.services.amazonq.project.manifest.ManifestManager
20+
21+
@TestOnly
22+
class ManifestFetcherTest {
23+
24+
private lateinit var manifestFetcher: ManifestFetcher
25+
private lateinit var manifest: ManifestManager.Manifest
26+
private lateinit var manifestManager: ManifestManager
27+
28+
@BeforeEach
29+
fun setup() {
30+
manifestFetcher = spy(ManifestFetcher())
31+
manifestManager = spy(ManifestManager())
32+
manifest = ManifestManager.Manifest()
33+
}
34+
35+
@Test
36+
fun `should return null when both local and remote manifests are null`() {
37+
whenever(manifestFetcher.fetchManifestFromLocal()).thenReturn(null)
38+
whenever(manifestFetcher.fetchManifestFromRemote()).thenReturn(null)
39+
40+
assertThat(manifestFetcher.fetch()).isNull()
41+
}
42+
43+
@Test
44+
fun `should return valid result from local should not execute remote method`() {
45+
reset(manifestFetcher)
46+
whenever(manifestFetcher.fetchManifestFromLocal()).thenReturn(manifest)
47+
48+
assertThat(manifestFetcher.fetch()).isNotNull().isEqualTo(manifest)
49+
verify(manifestFetcher, atLeastOnce()).fetchManifestFromLocal()
50+
verify(manifestFetcher, never()).fetchManifestFromRemote()
51+
}
52+
53+
@Test
54+
fun `should return valid result from remote`() {
55+
whenever(manifestFetcher.fetchManifestFromLocal()).thenReturn(null)
56+
whenever(manifestFetcher.fetchManifestFromRemote()).thenReturn(manifest)
57+
58+
assertThat(manifestFetcher.fetch()).isNotNull().isEqualTo(manifest)
59+
verify(manifestFetcher, atLeastOnce()).fetchManifestFromLocal()
60+
verify(manifestFetcher, atLeastOnce()).fetchManifestFromRemote()
61+
}
62+
63+
@Test
64+
fun `fetchManifestFromRemote should return null due to invalid manifestString`() {
65+
mockkStatic("software.aws.toolkits.jetbrains.core.HttpUtilsKt")
66+
every { getTextFromUrl(any()) } returns "ManifestContent"
67+
68+
whenever(manifestManager.readManifestFile("")).thenReturn(null)
69+
70+
assertThat(manifestFetcher.fetchManifestFromRemote()).isNull()
71+
}
72+
73+
@Test
74+
fun `fetchManifestFromRemote should return manifest and update manifest`() {
75+
val validManifest = ManifestManager.Manifest(manifestSchemaVersion = "1.0")
76+
mockkStatic("software.aws.toolkits.jetbrains.core.HttpUtilsKt")
77+
78+
every { getTextFromUrl(any()) } returns "{ \"manifestSchemaVersion\": \"1.0\" }"
79+
80+
val result = manifestFetcher.fetchManifestFromRemote()
81+
assertThat(result).isNotNull().isEqualTo(validManifest)
82+
}
83+
84+
@Test
85+
fun `fetchManifestFromRemote should return null if manifest is deprecated`() {
86+
mockkStatic("software.aws.toolkits.jetbrains.core.HttpUtilsKt")
87+
every { getTextFromUrl(any()) } returns "ManifestContent"
88+
89+
val deprecatedManifest = ManifestManager.Manifest(isManifestDeprecated = true)
90+
91+
whenever(manifestManager.readManifestFile("")).thenReturn(deprecatedManifest)
92+
93+
assertThat(manifestFetcher.fetchManifestFromRemote()).isNull()
94+
}
95+
96+
@Test
97+
fun `fetchManifestFromLocal should return null`() {
98+
assertThat(manifestFetcher.fetchManifestFromLocal()).isNull()
99+
}
100+
}

0 commit comments

Comments
 (0)