@@ -5,6 +5,7 @@ package software.aws.toolkits.jetbrains.uitests
5
5
6
6
import com.intellij.driver.sdk.waitForProjectOpen
7
7
import com.intellij.ide.starter.ci.CIServer
8
+ import com.intellij.ide.starter.config.ConfigurationStorage
8
9
import com.intellij.ide.starter.di.di
9
10
import com.intellij.ide.starter.driver.engine.runIdeWithDriver
10
11
import com.intellij.ide.starter.ide.IdeProductProvider
@@ -13,7 +14,7 @@ import com.intellij.ide.starter.models.TestCase
13
14
import com.intellij.ide.starter.project.LocalProjectInfo
14
15
import com.intellij.ide.starter.runner.CurrentTestMethod
15
16
import com.intellij.ide.starter.runner.Starter
16
- import org.junit.jupiter.api.Assertions.assertEquals
17
+ import org.junit.jupiter.api.AfterAll
17
18
import org.junit.jupiter.api.Assertions.assertTrue
18
19
import org.junit.jupiter.api.BeforeEach
19
20
import org.junit.jupiter.api.Test
@@ -22,108 +23,10 @@ import org.kodein.di.bindSingleton
22
23
import java.io.File
23
24
import java.nio.file.Path
24
25
import java.nio.file.Paths
25
- import kotlin.io.path.createParentDirectories
26
- import kotlin.io.path.writeText
27
26
28
27
class TransformChatTest {
29
28
30
- init {
31
- di = DI {
32
- extend(di)
33
- bindSingleton<CIServer >(overrides = true ) { TestCIServer }
34
- }
35
- }
36
-
37
- private val testResourcesPath = " src/test/tstData"
38
-
39
- @BeforeEach
40
- fun setUp () {
41
- // Setup test environment
42
- setupTestEnvironment()
43
- }
44
- private fun setupTestEnvironment () {
45
- // Ensure Puppeteer is installed
46
- val npmInstall = ProcessBuilder ()
47
- .command(" npm" , " install" , " puppeteer" )
48
- .inheritIO()
49
- .start()
50
- .waitFor()
51
-
52
- assertEquals(0 , npmInstall, " Failed to install Puppeteer" )
53
-
54
- }
55
-
56
- @Test
57
- fun `can open up IDE` () {
58
- val testCase = TestCase (
59
- IdeProductProvider .IC ,
60
- LocalProjectInfo (
61
- Paths .get(" tstData" , " Hello" )
62
- )
63
- ).useRelease(" 2024.3" )
64
-
65
-
66
- Paths .get(System .getProperty(" user.home" ), " .aws" , " sso" , " cache" , " ee1d2538cb8d358377d7661466c866af747a8a3f.json" )
67
- .createParentDirectories()
68
- .writeText(
69
- """
70
- auth goes here
71
- """ .trimIndent()
72
- )
73
-
74
- Paths .get(System .getProperty(" user.home" ), " .aws" , " sso" , " cache" , " d3b447f809607422aac1470dd17fbb32e358cdb3.json" )
75
- .writeText(
76
- """
77
- auth goes here
78
- """ .trimIndent()
79
- )
80
-
81
- Starter .newContext(CurrentTestMethod .hyphenateWithClass(), testCase).apply {
82
- System .getProperty(" ui.test.plugins" ).split(File .pathSeparator).forEach { path ->
83
- pluginConfigurator.installPluginFromPath(
84
- Path .of(path)
85
- )
86
- }
87
-
88
- copyExistingConfig(Paths .get(" tstData" , " config" ))
89
- updateGeneralSettings()
90
- }.runIdeWithDriver()
91
- .useDriverAndCloseIde {
92
- waitForProjectOpen()
93
- Thread .sleep(20000 )
94
-
95
-
96
- val result = executeScript(scr)
97
- assertTrue(result.contains(" Choose a module to transform" ))
98
- assertTrue(result.contains(" Choose the target code version" ))
99
- assertTrue(result.contains(" Skip tests form appeared: true" ))
100
- assertTrue(result.contains(" One or multiple diffs form appeared: true" ))
101
- assertTrue(result.contains(" couldn't run the Maven clean install command" ))
102
- }
103
- }
104
-
105
- private fun executeScript (scriptContent : String ): String {
106
- val scriptFile = File (" $testResourcesPath /temp-script.js" )
107
- scriptFile.parentFile.mkdirs()
108
- scriptFile.writeText(scriptContent)
109
-
110
- val process = ProcessBuilder ()
111
- .command(" node" , scriptFile.absolutePath)
112
- .redirectErrorStream(true )
113
- .start()
114
-
115
- val output = process.inputStream.bufferedReader().use { it.readText() }
116
- val exitCode = process.waitFor()
117
-
118
- scriptFile.delete()
119
-
120
- assertEquals(0 , exitCode, " Script execution failed with output: $output " )
121
- return output
122
- }
123
-
124
- }
125
-
126
- private val scr = """
29
+ private val transformHappyPathScript = """
127
30
const puppeteer = require('puppeteer');
128
31
async function testNavigation() {
129
32
const browser = await puppeteer.connect({
@@ -188,3 +91,66 @@ async function testNavigation() {
188
91
}
189
92
testNavigation().catch(console.error)
190
93
""" .trimIndent()
94
+
95
+ init {
96
+ di = DI {
97
+ extend(di)
98
+ bindSingleton<CIServer >(overrides = true ) { TestCIServer }
99
+ val defaults = ConfigurationStorage .instance().defaults.toMutableMap().apply {
100
+ put(" LOG_ENVIRONMENT_VARIABLES" , (! System .getenv(" CI" ).toBoolean()).toString())
101
+ }
102
+
103
+ bindSingleton<ConfigurationStorage >(overrides = true ) {
104
+ ConfigurationStorage (this , defaults)
105
+ }
106
+ }
107
+ }
108
+
109
+ @BeforeEach
110
+ fun setUp () {
111
+ setupTestEnvironment()
112
+ }
113
+
114
+ @Test
115
+ fun `can run a transformation from the chat` () {
116
+ val testCase = TestCase (
117
+ IdeProductProvider .IC ,
118
+ LocalProjectInfo (
119
+ Paths .get(" tstData" , " Hello" )
120
+ )
121
+ ).useRelease(System .getProperty(" org.gradle.project.ideProfileName" ))
122
+
123
+ // inject connection
124
+ useExistingConnectionForTest()
125
+
126
+ Starter .newContext(CurrentTestMethod .hyphenateWithClass(), testCase).apply {
127
+ System .getProperty(" ui.test.plugins" ).split(File .pathSeparator).forEach { path ->
128
+ pluginConfigurator.installPluginFromPath(
129
+ Path .of(path)
130
+ )
131
+ }
132
+
133
+ copyExistingConfig(Paths .get(" tstData" , " configAmazonQTests" ))
134
+ updateGeneralSettings()
135
+ }.runIdeWithDriver()
136
+ .useDriverAndCloseIde {
137
+ waitForProjectOpen()
138
+ // required wait time for the system to be fully ready
139
+ Thread .sleep(30000 )
140
+ val result = executePuppeteerScript(transformHappyPathScript)
141
+ assertTrue(result.contains(" Choose a module to transform" ))
142
+ assertTrue(result.contains(" Choose the target code version" ))
143
+ assertTrue(result.contains(" Skip tests form appeared: true" ))
144
+ assertTrue(result.contains(" One or multiple diffs form appeared: true" ))
145
+ assertTrue(result.contains(" couldn't run the Maven clean install command" ))
146
+ }
147
+ }
148
+
149
+ companion object {
150
+ @JvmStatic
151
+ @AfterAll
152
+ fun clearAwsXml () {
153
+ clearAwsXmlFile()
154
+ }
155
+ }
156
+ }
0 commit comments