Skip to content

Commit 2ed8be0

Browse files
committed
test: Add tests to validate backwards compatibility of CodeWhispererSettings
1 parent 583bccb commit 2ed8be0

File tree

3 files changed

+71
-0
lines changed

3 files changed

+71
-0
lines changed

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererConfigurableTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import org.mockito.kotlin.doNothing
1313
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManagerListener
1414
import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.CodeWhispererCodeScanManager
1515
import software.aws.toolkits.jetbrains.services.codewhisperer.settings.CodeWhispererConfigurable
16+
import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
1617
import software.aws.toolkits.resources.message
1718
import javax.swing.JCheckBox
1819
import javax.swing.JComponent

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererSettingsTest.kt

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ import com.intellij.openapi.wm.ToolWindowManager
1212
import com.intellij.openapi.wm.impl.status.widget.StatusBarWidgetsManager
1313
import com.intellij.testFramework.replaceService
1414
import com.intellij.testFramework.runInEdtAndWait
15+
import com.intellij.util.xmlb.XmlSerializer
1516
import org.assertj.core.api.Assertions.assertThat
17+
import org.jdom.output.XMLOutputter
1618
import org.junit.Before
1719
import org.junit.Ignore
1820
import org.junit.Test
@@ -30,6 +32,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.status.CodeWhisper
3032
import software.aws.toolkits.jetbrains.services.codewhisperer.toolwindow.CodeWhispererCodeReferenceToolWindowFactory
3133
import software.aws.toolkits.jetbrains.settings.CodeWhispererConfiguration
3234
import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
35+
import software.aws.toolkits.jetbrains.utils.xmlElement
3336
import kotlin.test.fail
3437

3538
class CodeWhispererSettingsTest : CodeWhispererTestBase() {
@@ -145,6 +148,70 @@ class CodeWhispererSettingsTest : CodeWhispererTestBase() {
145148
assertThat(settingsManager.isIncludeCodeWithReference()).isEqualTo(true)
146149
}
147150
}
151+
152+
@Test
153+
fun `serialize settings to ensure backwards compatibility`() {
154+
val element = xmlElement(
155+
"""
156+
<component name="CodeWhispererSettings">
157+
</component>
158+
""".trimIndent()
159+
)
160+
161+
val settings = CodeWhispererSettings.getInstance()
162+
settings.toggleAutoBuildFeature("project1", true)
163+
164+
XmlSerializer.serializeInto(settings.state, element)
165+
166+
val actual = XMLOutputter().outputString(element)
167+
val expected = "<component name=\"CodeWhispererSettings\">\n" +
168+
"<option name=\"autoBuildSetting\">" +
169+
"<map><entry key=\"project1\" value=\"true\" />" +
170+
"</map>" +
171+
"</option>" +
172+
"<option name=\"value\">" +
173+
"<map><entry key=\"IsIncludeCodeWithReference\" value=\"true\" />" +
174+
"</map>" +
175+
"</option>" +
176+
"</component>"
177+
178+
assertThat(actual).isEqualTo(expected)
179+
}
180+
181+
@Test
182+
fun `deserialize empty settings to ensure backwards compatibility`() {
183+
val element = xmlElement(
184+
"""
185+
<component name="CodeWhispererSettings">
186+
</component>
187+
"""
188+
)
189+
val actual = XmlSerializer.deserialize(element, CodeWhispererConfiguration::class.java)
190+
assertThat(actual.autoBuildSetting).hasSize(0)
191+
}
192+
193+
@Test
194+
fun `deserialize existing settings to ensure backwards compatibility`() {
195+
val element = xmlElement(
196+
"""
197+
<component name="CodeWhispererSettings">
198+
<option name="autoBuildSetting">
199+
<map>
200+
<entry key="project1" value="true" />
201+
</map>
202+
</option>
203+
<option>
204+
<map>
205+
<entry key="IsIncludeCodeWithReference" value="true" />
206+
</map>
207+
</option>
208+
</component>
209+
""".trimIndent()
210+
)
211+
val actual = XmlSerializer.deserialize(element, CodeWhispererConfiguration::class.java)
212+
assertThat(actual.autoBuildSetting).hasSize(1)
213+
assertThat(actual.autoBuildSetting["project1"]).isTrue()
214+
}
148215
}
149216

150217
class CodeWhispererSettingUnitTest {

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/settings/CodeWhispererSettings.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,15 +131,18 @@ class CodeWhispererSettings : PersistentStateComponent<CodeWhispererConfiguratio
131131
value.putAll(state.value)
132132
intValue.putAll(state.intValue)
133133
stringValue.putAll(state.stringValue)
134+
autoBuildSetting.putAll(state.autoBuildSetting)
134135
}
135136

136137
override fun loadState(state: CodeWhispererConfiguration) {
137138
this.state.value.clear()
138139
this.state.intValue.clear()
139140
this.state.stringValue.clear()
141+
this.state.autoBuildSetting.clear()
140142
this.state.value.putAll(state.value)
141143
this.state.intValue.putAll(state.intValue)
142144
this.state.stringValue.putAll(state.stringValue)
145+
this.state.autoBuildSetting.putAll(state.autoBuildSetting)
143146
}
144147
}
145148

0 commit comments

Comments
 (0)