From d142bd320b4d830a1e99373f48bc6d46fcfa0e8e Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Tue, 4 Mar 2025 14:12:22 -0500 Subject: [PATCH 01/22] test(qdoc): initial tests for latest code changes flow --- .../UpdateReadmeWithLatestChangesFlowTest.kt | 170 +++++++++++++++++ .../UpdateReadmeWithLatestChangesScripts.kt | 176 ++++++++++++++++++ .../uitests/docTests/scripts/Utils.kt | 71 +++++++ .../tstData/qdoc/updateFlow/README.md | 117 ++++++++++++ .../tstData/qdoc/updateFlow/build.gradle | 23 +++ .../updateFlow/config/application-local.yml | 11 ++ .../tstData/qdoc/updateFlow/dockerfile | 10 + .../qdoc/updateFlow/src/com/tancode/App.java | 11 ++ .../tancode/controller/HealthController.java | 36 ++++ .../tancode/controller/SampleController.java | 31 +++ .../src/com/tancode/model/DataItem.java | 23 +++ 11 files changed, 679 insertions(+) create mode 100644 ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt create mode 100644 ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithLatestChangesScripts.kt create mode 100644 ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/Utils.kt create mode 100644 ui-tests-starter/tstData/qdoc/updateFlow/README.md create mode 100644 ui-tests-starter/tstData/qdoc/updateFlow/build.gradle create mode 100644 ui-tests-starter/tstData/qdoc/updateFlow/config/application-local.yml create mode 100644 ui-tests-starter/tstData/qdoc/updateFlow/dockerfile create mode 100644 ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/App.java create mode 100644 ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/HealthController.java create mode 100644 ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/SampleController.java create mode 100644 ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/model/DataItem.java diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt new file mode 100644 index 00000000000..cddb47c6522 --- /dev/null +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt @@ -0,0 +1,170 @@ +// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.uitests.docTests + +import com.intellij.driver.sdk.waitForProjectOpen +import com.intellij.ide.starter.ci.CIServer +import com.intellij.ide.starter.config.ConfigurationStorage +import com.intellij.ide.starter.di.di +import com.intellij.ide.starter.driver.engine.runIdeWithDriver +import com.intellij.ide.starter.ide.IdeProductProvider +import com.intellij.ide.starter.junit5.hyphenateWithClass +import com.intellij.ide.starter.models.TestCase +import com.intellij.ide.starter.project.LocalProjectInfo +import com.intellij.ide.starter.runner.CurrentTestMethod +import com.intellij.ide.starter.runner.Starter +import org.junit.jupiter.api.AfterAll +import org.junit.jupiter.api.Assertions.assertFalse +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.kodein.di.DI +import org.kodein.di.bindSingleton +import software.aws.toolkits.jetbrains.uitests.TestCIServer +import software.aws.toolkits.jetbrains.uitests.clearAwsXmlFile +import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeLatestChangesConfirmOptionsTestScript +import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeLatestChangesMakeChangesFlowTestScript +import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeLatestChangesTestScript +import software.aws.toolkits.jetbrains.uitests.executePuppeteerScript +import software.aws.toolkits.jetbrains.uitests.setupTestEnvironment +import software.aws.toolkits.jetbrains.uitests.useExistingConnectionForTest +import java.io.File +import java.nio.file.Path +import java.nio.file.Paths + +class UpdateReadmeWithLatestChangesFlowTest { + + init { + di = DI { + extend(di) + bindSingleton(overrides = true) { TestCIServer } + val defaults = ConfigurationStorage.instance().defaults.toMutableMap().apply { + put("LOG_ENVIRONMENT_VARIABLES", (!System.getenv("CI").toBoolean()).toString()) + } + + bindSingleton(overrides = true) { + ConfigurationStorage(this, defaults) + } + } + } + + @BeforeEach + fun setUp() { + // Setup test environment + setupTestEnvironment() + } + + @Test + fun `Prompted to confirm selected folder`() { + val testCase = TestCase( + IdeProductProvider.IC, + LocalProjectInfo( + Paths.get("tstData", "qdoc", "updateFlow") + ) + ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) + + // inject connection + useExistingConnectionForTest() + + Starter.newContext(CurrentTestMethod.hyphenateWithClass(), testCase).apply { + System.getProperty("ui.test.plugins").split(File.pathSeparator).forEach { path -> + pluginConfigurator.installPluginFromPath( + Path.of(path) + ) + } + + copyExistingConfig(Paths.get("tstData", "configAmazonQTests")) + updateGeneralSettings() + }.runIdeWithDriver() + .useDriverAndCloseIde { + waitForProjectOpen() + // required wait time for the system to be fully ready + Thread.sleep(30000) + + val result = executePuppeteerScript(updateReadmeLatestChangesConfirmOptionsTestScript) + assertTrue(result.contains("Test Successful")) + assertFalse(result.contains("Error: Test Failed")) + } + } + + @Test + fun `Make Changes button leads to UPDATE with specific changes flow`() { + val testCase = TestCase( + IdeProductProvider.IC, + LocalProjectInfo( + Paths.get("tstData", "qdoc", "updateFlow") + ) + ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) + + // inject connection + useExistingConnectionForTest() + + Starter.newContext(CurrentTestMethod.hyphenateWithClass(), testCase).apply { + System.getProperty("ui.test.plugins").split(File.pathSeparator).forEach { path -> + pluginConfigurator.installPluginFromPath( + Path.of(path) + ) + } + + copyExistingConfig(Paths.get("tstData", "configAmazonQTests")) + updateGeneralSettings() + }.runIdeWithDriver() + .useDriverAndCloseIde { + waitForProjectOpen() + // required wait time for the system to be fully ready + Thread.sleep(30000) + + val result = executePuppeteerScript(updateReadmeLatestChangesMakeChangesFlowTestScript) + assertTrue(result.contains("Test Successful")) + assertFalse(result.contains("Error: Test Failed")) + } + } + + @Test + fun `UpdateReadme with latest changes returns an updated Readme`() { + val testCase = TestCase( + IdeProductProvider.IC, + LocalProjectInfo( + Paths.get("tstData", "qdoc", "updateFlow") + ) + ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) + + // inject connection + useExistingConnectionForTest() + + Starter.newContext(CurrentTestMethod.hyphenateWithClass(), testCase).apply { + System.getProperty("ui.test.plugins").split(File.pathSeparator).forEach { path -> + pluginConfigurator.installPluginFromPath( + Path.of(path) + ) + } + + copyExistingConfig(Paths.get("tstData", "configAmazonQTests")) + updateGeneralSettings() + }.runIdeWithDriver() + .useDriverAndCloseIde { + waitForProjectOpen() + // required wait time for the system to be fully ready + Thread.sleep(30000) + + val result = executePuppeteerScript(updateReadmeLatestChangesTestScript) + assertTrue(result.contains("Test Successful")) + assertFalse(result.contains("Error: Test Failed")) + + val readmePath = Paths.get("tstData", "qdoc", "updateFlow", "README.md") + val readme = File(readmePath.toUri()) + assertTrue(readme.exists()) + assertTrue(readme.readText().contains("tancode")) + assertTrue(readme.readText().contains("HealthController")) + } + } + + companion object { + @JvmStatic + @AfterAll + fun clearAwsXml() { + clearAwsXmlFile() + } + } +} diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithLatestChangesScripts.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithLatestChangesScripts.kt new file mode 100644 index 00000000000..38c8b215779 --- /dev/null +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithLatestChangesScripts.kt @@ -0,0 +1,176 @@ +// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.uitests.docTests.scripts + +// language=TS +val updateReadmeLatestChangesConfirmOptionsScript = """ + const puppeteer = require('puppeteer'); + + async function testNavigation() { + const browser = await puppeteer.connect({ + browserURL: 'http://localhost:9222' + }) + + try { + + const pages = await browser.pages() + + for(const page of pages) { + const contents = await page.evaluate(el => el.innerHTML, await page.${'$'}(':root')); + + const element = await page.${'$'}('.mynah-chat-prompt-input') + if(element) { + + console.log('Typing /doc in the chat window') + + await page.type('.mynah-chat-prompt-input', '/doc') + await page.keyboard.press('Enter') + + console.log('Attempting to find and click Update an existing README button') + await findAndClickButton(page, 'Update an existing README', true, 10000) + console.log('Attempting to find and click Update README to reflect code button') + await findAndClickButton(page, 'Update README to reflect code', true, 10000) + console.log('Attempting to find all available buttons') + const yesButton = await findAndClickButton(page, 'Yes', false, 10000) + const changeFolderButton = await findAndClickButton(page, 'Change folder', false, 10000) + const cancelButton = await findAndClickButton(page, 'Cancel', false, 10000) + + if (!yesButton || !changeFolderButton || !cancelButton) { + console.log('Error: Test Failed') + console.log('Unable to find buttons for Yes/ChangeFolder/Cancel') + } else { + console.log('Found all expected buttons') + console.log('Test Successful') + } + } + } + + } finally { + await browser.close(); + } + } + + testNavigation().catch((error) => { + console.log('Error: Test Failed'); + console.error(error); + }); +""".trimIndent() + +// language=TS +val updateReadmeLatestChangesScript = """ + + const puppeteer = require('puppeteer'); + + async function testNavigation() { + const browser = await puppeteer.connect({ + browserURL: 'http://localhost:9222' + }) + + try { + + const pages = await browser.pages() + + for(const page of pages) { + const contents = await page.evaluate(el => el.innerHTML, await page.${'$'}(':root')); + + const element = await page.${'$'}('.mynah-chat-prompt-input') + + if(element) { + + console.log('Typing /doc in the chat window') + + await page.type('.mynah-chat-prompt-input', '/doc') + await page.keyboard.press('Enter') + + console.log('Attempting to find and click Update an existing README button') + await findAndClickButton(page, 'Update an existing README', true, 10000) + console.log('Attempting to find and click Update README to reflect code button') + await findAndClickButton(page, 'Update README to reflect code', true, 10000) + console.log('Attempting to find and click Yes button to confirm option') + await findAndClickButton(page, 'Yes', true, 10000) + console.log('Waiting for updated README to be generated') + await new Promise(resolve => setTimeout(resolve, 90000)); + console.log('Attempting to find and click Accept button') + await findAndClickButton(page, 'Accept', true, 10000) + + // find and confirm the readme was generated successfully + + + } + } + + } finally { + await browser.close(); + } + } + + testNavigation().catch((error) => { + console.log('Error: Test Failed'); + console.error(error); + }); + +""".trimIndent() + +// language=TS +val updateReadmeLatestChangesMakeChangesFlowScript = """ + + const puppeteer = require('puppeteer'); + + async function testNavigation() { + const browser = await puppeteer.connect({ + browserURL: 'http://localhost:9222' + }); + + try { + + const pages = await browser.pages(); + + for(const page of pages) { + const contents = await page.evaluate(el => el.innerHTML, await page.${'$'}(':root')); + + const element = await page.${'$'}('.mynah-chat-prompt-input'); + if(element) { + + console.log('Typing /doc in the chat window'); + + await page.type('.mynah-chat-prompt-input', '/doc'); + await page.keyboard.press('Enter'); + + console.log('Attempting to find and click Update an existing README button'); + await findAndClickButton(page, 'Update an existing README', true, 10000); + console.log('Attempting to find and click Update README to reflect code button'); + await findAndClickButton(page, 'Update README to reflect code', true, 10000); + console.log('Attempting to find and click Yes button to confirm option'); + await findAndClickButton(page, 'Yes', true, 10000); + console.log('Waiting for updated README to be generated'); + await new Promise(resolve => setTimeout(resolve, 90000)); + console.log('Attempting to find and click Make changes button'); + await findAndClickButton(page, 'Make changes', true, 10000); + const makeChangeText = await page.${'$'}('[placeholder="Describe documentation changes"]'); + if (!makeChangeText) { + console.log('Error: Test Failed'); + console.log('Unable to find placeholder description test in Make Changes flow'); + } else { + console.log('Found expected placeholder text for Make Changes flow'); + console.log('Test Successful'); + } + + } + } + + } finally { + await browser.close(); + } + } + + testNavigation().catch((error) => { + console.log('Error: Test Failed'); + console.error(error); + }); + +""".trimIndent() + +val updateReadmeLatestChangesConfirmOptionsTestScript = updateReadmeLatestChangesConfirmOptionsScript.plus(findAndClickButtonScript) +val updateReadmeLatestChangesTestScript = updateReadmeLatestChangesScript.plus(findAndClickButtonScript) +val updateReadmeLatestChangesMakeChangesFlowTestScript = updateReadmeLatestChangesMakeChangesFlowScript.plus(findAndClickButtonScript) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/Utils.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/Utils.kt new file mode 100644 index 00000000000..c8afeb0d247 --- /dev/null +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/Utils.kt @@ -0,0 +1,71 @@ +// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.uitests.docTests.scripts + +// language=TS +val findAndClickButtonScript = """ +export const findAndClickButton = async ( + page, + buttonText, + clickButton = false, + timeout = 5000 +) => { + try { + // Wait for any matching buttons to be present + await page.waitForSelector('button.mynah-button', { + visible: true, + timeout, + }); + + // Find and verify the specific button + const buttonHandle = await page.evaluateHandle(text => { + const buttons = Array.from( + document.querySelectorAll('button.mynah-button') + ); + return buttons.find(button => { + const label = button.querySelector('.mynah-button-label'); + return label && label.textContent.trim() === text; + }); + }, buttonText); + + // Check if button was found + const button = buttonHandle.asElement(); + if (!button) { + console.log(buttonText); + throw new Error(`Button with text not found`); + } + + // Verify button is visible and enabled + const isVisible = await page.evaluate(el => { + const style = window.getComputedStyle(el); + return ( + style.display !== 'none' && + style.visibility !== 'hidden' && + style.opacity !== '0' + ); + }, button); + + if (!isVisible) { + console.log(buttonText); + throw new Error(`Button with text is not visible`); + } + + if (clickButton) { + // Click the button + await button.click(); + + // Optional wait after click + await new Promise(resolve => setTimeout(resolve, 1000)); + + console.log(`Successfully clicked button with text`); + console.log(buttonText); + } else { + return button; + } + } catch (error) { + console.error(`Error interacting with button:`, buttonText, error); + throw error; + } +}; +""".trimIndent() diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/README.md b/ui-tests-starter/tstData/qdoc/updateFlow/README.md new file mode 100644 index 00000000000..06cfde49d07 --- /dev/null +++ b/ui-tests-starter/tstData/qdoc/updateFlow/README.md @@ -0,0 +1,117 @@ +# Spring Boot REST API for Simple Data Management + +This Spring Boot application provides a RESTful API for managing data items with in-memory storage. It offers a lightweight and efficient way to store and retrieve data items through HTTP endpoints, making it ideal for prototyping and development environments. + +The application is built using Spring Boot 3.2.0 and Java 17, featuring a clean architecture with separate controller and model layers. It includes built-in monitoring capabilities through Spring Actuator and comprehensive logging configuration. The REST API supports basic CRUD operations with JSON payloads, making it easy to integrate with various client applications. + +## Repository Structure +``` +. +├── build.gradle # Gradle build configuration with Spring Boot dependencies +├── config/ +│ └── application-local.yml # Local environment configuration (port, app name, logging) +└── src/ + └── com/example/ + ├── App.java # Main application entry point with Spring Boot configuration + ├── controller/ + │ └── SampleController.java # REST endpoints for data management + └── model/ + └── DataItem.java # Data model class for storing items +``` + +## Usage Instructions + +### Prerequisites +- Java Development Kit (JDK) 17 or higher +- Gradle 8.x (or use the included Gradle wrapper) + +### Installation +1. Clone the repository: +```bash +git clone +cd +``` + +2. Build the application: +```bash +./gradlew build +``` + +### Quick Start +1. Start the application: +```bash +./gradlew bootRun +``` + +2. The application will be available at `http://localhost:8080` + +### More Detailed Examples + +#### Creating or Updating a Data Item +```bash +curl -X PUT http://localhost:8080/api/data/1 \ + -H "Content-Type: application/json" \ + -d '{"content": "Sample content"}' +``` + +Response: +```json +{ + "id": "1", + "content": "Sample content" +} +``` + +#### Retrieving a Data Item +```bash +curl http://localhost:8080/api/data/1 +``` + +Response: +```json +{ + "id": "1", + "content": "Sample content" +} +``` + +### Troubleshooting + +#### Common Issues + +1. Application Fails to Start +- Problem: Port 8080 is already in use +- Error message: `Web server failed to start. Port 8080 was already in use.` +- Solution: Modify the port in `config/application-local.yml`: +```yaml +server: + port: 8081 +``` + +2. Debugging +- Enable debug logging by modifying `config/application-local.yml`: +```yaml +logging: + level: + com.example: DEBUG +``` +- Debug logs will be available in the console output +- Monitor actuator endpoints at `http://localhost:8080/actuator` for application health + +## Data Flow + +The application implements a simple data flow where REST requests are processed through controllers and stored in an in-memory map structure. + +```ascii +Client Request → REST Controller → In-Memory Storage + ↑ | + └────────────────────────────────────┘ + Response with stored data +``` + +Component interactions: +1. Client sends HTTP requests to REST endpoints +2. SampleController handles request validation and routing +3. Data is stored in an in-memory HashMap within the controller +4. Responses are returned as JSON using Spring's ResponseEntity +5. Error handling is managed through HTTP status codes (200 OK, 404 Not Found) \ No newline at end of file diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/build.gradle b/ui-tests-starter/tstData/qdoc/updateFlow/build.gradle new file mode 100644 index 00000000000..cb51cd85dc0 --- /dev/null +++ b/ui-tests-starter/tstData/qdoc/updateFlow/build.gradle @@ -0,0 +1,23 @@ +plugins { + id 'org.springframework.boot' version '3.2.0' + id 'io.spring.dependency-management' version '1.1.4' + id 'java' +} + +group = 'com.example' +version = '1.0-SNAPSHOT' +sourceCompatibility = '17' + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + testImplementation 'org.springframework.boot:spring-boot-starter-test' +} + +test { + useJUnitPlatform() +} diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/config/application-local.yml b/ui-tests-starter/tstData/qdoc/updateFlow/config/application-local.yml new file mode 100644 index 00000000000..19631961e33 --- /dev/null +++ b/ui-tests-starter/tstData/qdoc/updateFlow/config/application-local.yml @@ -0,0 +1,11 @@ +server: + port: 8080 + +spring: + application: + name: sample-rest-app + +logging: + level: + root: INFO + com.example: DEBUG diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/dockerfile b/ui-tests-starter/tstData/qdoc/updateFlow/dockerfile new file mode 100644 index 00000000000..ac5a29037f0 --- /dev/null +++ b/ui-tests-starter/tstData/qdoc/updateFlow/dockerfile @@ -0,0 +1,10 @@ +FROM eclipse-temurin:17-jdk-focal + +WORKDIR /app + +COPY build/libs/*.jar app.jar +COPY config/ config/ + +EXPOSE 8080 + +ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/App.java b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/App.java new file mode 100644 index 00000000000..0130760ee61 --- /dev/null +++ b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/App.java @@ -0,0 +1,11 @@ +package com.tancode; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class App { + public static void main(String[] args) { + SpringApplication.run(App.class, args); + } +} diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/HealthController.java b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/HealthController.java new file mode 100644 index 00000000000..84fb6bcd109 --- /dev/null +++ b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/HealthController.java @@ -0,0 +1,36 @@ +// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package com.tancode.controller; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/api") +public class HealthController { + + @GetMapping("/status") + public ResponseEntity> getStatus() { + Map status = new HashMap<>(); + status.put("timestamp", LocalDateTime.now()); + status.put("service", "sample-rest-app"); + status.put("status", "running"); + + return ResponseEntity.ok(status); + } + + @GetMapping("/health") + public ResponseEntity> healthCheck() { + Map health = new HashMap<>(); + health.put("status", "UP"); + health.put("message", "Service is healthy"); + + return ResponseEntity.ok(health); + } +} diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/SampleController.java b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/SampleController.java new file mode 100644 index 00000000000..19415c0664c --- /dev/null +++ b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/SampleController.java @@ -0,0 +1,31 @@ +package com.tancode.controller; + +import com.example.model.DataItem; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/api") +public class SampleController { + + private final Map dataStore = new HashMap<>(); + + @GetMapping("/data/{id}") + public ResponseEntity getData(@PathVariable String id) { + DataItem item = dataStore.get(id); + if (item != null) { + return ResponseEntity.ok(item); + } + return ResponseEntity.notFound().build(); + } + + @PutMapping("/data/{id}") + public ResponseEntity putData(@PathVariable String id, @RequestBody DataItem item) { + item.setId(id); + dataStore.put(id, item); + return ResponseEntity.ok(item); + } +} diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/model/DataItem.java b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/model/DataItem.java new file mode 100644 index 00000000000..c482a16d1a4 --- /dev/null +++ b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/model/DataItem.java @@ -0,0 +1,23 @@ +package com.tancode.model; + +public class DataItem { + private String id; + private String content; + + // Getters and Setters + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } +} From 62d6bffe34f6e0ffee7d17e443f903e032243213 Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Tue, 4 Mar 2025 15:30:10 -0500 Subject: [PATCH 02/22] update tstData to test --- .../UpdateReadmeWithLatestChangesFlowTest.kt | 6 +- ...UpdateReadmeWithSpecificChangesFlowTest.kt | 134 ++++++++++++++++++ .../UpdateReadmeWithSpecificChangesScripts.kt | 131 +++++++++++++++++ .../tstData/qdoc/{updateFlow => }/README.md | 0 .../qdoc/{updateFlow => }/build.gradle | 0 .../config/application-local.yml | 0 .../tstData/qdoc/{updateFlow => }/dockerfile | 0 .../{updateFlow => }/src/com/tancode/App.java | 0 .../tancode/controller/HealthController.java | 0 .../tancode/controller/SampleController.java | 0 .../src/com/tancode/model/DataItem.java | 0 11 files changed, 268 insertions(+), 3 deletions(-) create mode 100644 ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithSpecificChangesFlowTest.kt create mode 100644 ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithSpecificChangesScripts.kt rename ui-tests-starter/tstData/qdoc/{updateFlow => }/README.md (100%) rename ui-tests-starter/tstData/qdoc/{updateFlow => }/build.gradle (100%) rename ui-tests-starter/tstData/qdoc/{updateFlow => }/config/application-local.yml (100%) rename ui-tests-starter/tstData/qdoc/{updateFlow => }/dockerfile (100%) rename ui-tests-starter/tstData/qdoc/{updateFlow => }/src/com/tancode/App.java (100%) rename ui-tests-starter/tstData/qdoc/{updateFlow => }/src/com/tancode/controller/HealthController.java (100%) rename ui-tests-starter/tstData/qdoc/{updateFlow => }/src/com/tancode/controller/SampleController.java (100%) rename ui-tests-starter/tstData/qdoc/{updateFlow => }/src/com/tancode/model/DataItem.java (100%) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt index cddb47c6522..436fefafd13 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt @@ -60,7 +60,7 @@ class UpdateReadmeWithLatestChangesFlowTest { val testCase = TestCase( IdeProductProvider.IC, LocalProjectInfo( - Paths.get("tstData", "qdoc", "updateFlow") + Paths.get("tstData", "qdoc") ) ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) @@ -93,7 +93,7 @@ class UpdateReadmeWithLatestChangesFlowTest { val testCase = TestCase( IdeProductProvider.IC, LocalProjectInfo( - Paths.get("tstData", "qdoc", "updateFlow") + Paths.get("tstData", "qdoc") ) ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) @@ -126,7 +126,7 @@ class UpdateReadmeWithLatestChangesFlowTest { val testCase = TestCase( IdeProductProvider.IC, LocalProjectInfo( - Paths.get("tstData", "qdoc", "updateFlow") + Paths.get("tstData", "qdoc") ) ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithSpecificChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithSpecificChangesFlowTest.kt new file mode 100644 index 00000000000..868c747782e --- /dev/null +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithSpecificChangesFlowTest.kt @@ -0,0 +1,134 @@ +// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.uitests.docTests + +import com.intellij.driver.sdk.waitForProjectOpen +import com.intellij.ide.starter.ci.CIServer +import com.intellij.ide.starter.config.ConfigurationStorage +import com.intellij.ide.starter.di.di +import com.intellij.ide.starter.driver.engine.runIdeWithDriver +import com.intellij.ide.starter.ide.IdeProductProvider +import com.intellij.ide.starter.junit5.hyphenateWithClass +import com.intellij.ide.starter.models.TestCase +import com.intellij.ide.starter.project.LocalProjectInfo +import com.intellij.ide.starter.runner.CurrentTestMethod +import com.intellij.ide.starter.runner.Starter +import org.junit.jupiter.api.AfterAll +import org.junit.jupiter.api.Assertions.assertFalse +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.kodein.di.DI +import org.kodein.di.bindSingleton +import software.aws.toolkits.jetbrains.uitests.TestCIServer +import software.aws.toolkits.jetbrains.uitests.clearAwsXmlFile +import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeSpecificChangesMakeChangesFlowTestScript +import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeSpecificChangesTestScript +import software.aws.toolkits.jetbrains.uitests.executePuppeteerScript +import software.aws.toolkits.jetbrains.uitests.setupTestEnvironment +import software.aws.toolkits.jetbrains.uitests.useExistingConnectionForTest +import java.io.File +import java.nio.file.Path +import java.nio.file.Paths + +class UpdateReadmeWithSpecificChangesFlowTest { + + init { + di = DI { + extend(di) + bindSingleton(overrides = true) { TestCIServer } + val defaults = ConfigurationStorage.instance().defaults.toMutableMap().apply { + put("LOG_ENVIRONMENT_VARIABLES", (!System.getenv("CI").toBoolean()).toString()) + } + + bindSingleton(overrides = true) { + ConfigurationStorage(this, defaults) + } + } + } + + @BeforeEach + fun setUp() { + // Setup test environment + setupTestEnvironment() + } + + @Test + fun `Make changes button leads to UPDATE with specific changes flow`() { + val testCase = TestCase( + IdeProductProvider.IC, + LocalProjectInfo( + Paths.get("tstData", "qdoc", "updateFlow") + ) + ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) + + // inject connection + useExistingConnectionForTest() + + Starter.newContext(CurrentTestMethod.hyphenateWithClass(), testCase).apply { + System.getProperty("ui.test.plugins").split(File.pathSeparator).forEach { path -> + pluginConfigurator.installPluginFromPath( + Path.of(path) + ) + } + + copyExistingConfig(Paths.get("tstData", "configAmazonQTests")) + updateGeneralSettings() + }.runIdeWithDriver() + .useDriverAndCloseIde { + waitForProjectOpen() + // required wait time for the system to be fully ready + Thread.sleep(30000) + + val result = executePuppeteerScript(updateReadmeSpecificChangesMakeChangesFlowTestScript) + assertTrue(result.contains("Test Successful")) + assertFalse(result.contains("Error: Test Failed")) + } + } + + @Test + fun `UpdateReadme with specific changes returns an updated Readme`() { + val testCase = TestCase( + IdeProductProvider.IC, + LocalProjectInfo( + Paths.get("tstData", "qdoc", "updateFlow") + ) + ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) + + // inject connection + useExistingConnectionForTest() + + Starter.newContext(CurrentTestMethod.hyphenateWithClass(), testCase).apply { + System.getProperty("ui.test.plugins").split(File.pathSeparator).forEach { path -> + pluginConfigurator.installPluginFromPath( + Path.of(path) + ) + } + + copyExistingConfig(Paths.get("tstData", "configAmazonQTests")) + updateGeneralSettings() + }.runIdeWithDriver() + .useDriverAndCloseIde { + waitForProjectOpen() + // required wait time for the system to be fully ready + Thread.sleep(30000) + + val result = executePuppeteerScript(updateReadmeSpecificChangesTestScript) + assertTrue(result.contains("Test Successful")) + assertFalse(result.contains("Error: Test Failed")) + val readmePath = Paths.get("tstData", "qdoc", "updateFlow", "README.md") + val readme = File(readmePath.toUri()) + assertTrue(readme.exists()) + assertTrue(readme.readText().contains("## Programming Languages")) + } + } + + companion object { + @JvmStatic + @AfterAll + fun clearAwsXml() { + clearAwsXmlFile() + } + } +} diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithSpecificChangesScripts.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithSpecificChangesScripts.kt new file mode 100644 index 00000000000..0f0571fe215 --- /dev/null +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithSpecificChangesScripts.kt @@ -0,0 +1,131 @@ +// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.uitests.docTests.scripts + +// language=TS +val updateReadmeSpecificChangesMakeChangesFlowScript = """ + + const puppeteer = require('puppeteer'); + + async function testNavigation() { + const browser = await puppeteer.connect({ + browserURL: 'http://localhost:9222' + }); + + try { + + const pages = await browser.pages(); + + for(const page of pages) { + const contents = await page.evaluate(el => el.innerHTML, await page.${'$'}(':root')); + + const element = await page.${'$'}('.mynah-chat-prompt-input'); + if(element) { + + console.log('Typing /doc in the chat window'); + + await page.type('.mynah-chat-prompt-input', '/doc'); + await page.keyboard.press('Enter'); + + console.log('Attempting to find and click Update an existing README button'); + await findAndClickButton(page, 'Update an existing README', true, 10000); + console.log('Attempting to find and click Make a specific change button'); + await findAndClickButton(page, 'Make a specific change', true, 10000); + console.log('Attempting to find and click Yes button to confirm option'); + await findAndClickButton(page, 'Yes', true, 10000); + + console.log('Typing specific change instructions in the chat window'); + await page.type('.mynah-chat-prompt-input', 'Add new section titled Programming Languages which describes the programming languages and version of programming language used in this project.'); + await page.keyboard.press('Enter'); + + console.log('Waiting for updated README to be generated'); + await new Promise(resolve => setTimeout(resolve, 90000)); + console.log('Attempting to find and click Make changes button'); + await findAndClickButton(page, 'Make changes', true, 10000); + + if (!makeChangeText) { + console.log('Error: Test Failed'); + console.log('Unable to find placeholder description test in Make Changes flow'); + } else { + console.log('Found expected placeholder text for Make Changes flow'); + console.log('Test Successful'); + } + + } + } + + } finally { + await browser.close(); + } + } + + testNavigation().catch((error) => { + console.log('Error: Test Failed'); + console.error(error); + }); + +""".trimIndent() + +// language=TS +val updateReadmeSpecificChangesScript = """ + + const puppeteer = require('puppeteer'); + + async function testNavigation() { + const browser = await puppeteer.connect({ + browserURL: 'http://localhost:9222' + }); + + try { + + const pages = await browser.pages(); + + for(const page of pages) { + const contents = await page.evaluate(el => el.innerHTML, await page.${'$'}(':root')); + + const element = await page.${'$'}('.mynah-chat-prompt-input'); + + if(element) { + + console.log('Typing /doc in the chat window'); + + await page.type('.mynah-chat-prompt-input', '/doc'); + await page.keyboard.press('Enter'); + + console.log('Attempting to find and click Update an existing README button'); + await findAndClickButton(page, 'Update an existing README', true, 10000); + console.log('Attempting to find and click Make a specific change button'); + await findAndClickButton(page, 'Make a specific change', true, 10000); + console.log('Attempting to find and click Yes button to confirm option'); + await findAndClickButton(page, 'Yes', true, 10000); + + console.log('Typing specific change instructions in the chat window'); + await page.type('.mynah-chat-prompt-input', 'Add new section titled Programming Languages which describes the programming languages and version of programming language used in this project.'); + await page.keyboard.press('Enter'); + + console.log('Waiting for updated README to be generated'); + await new Promise(resolve => setTimeout(resolve, 90000)); + + console.log('Attempting to find and click Accept button'); + await findAndClickButton(page, 'Accept', true, 10000); + + // find and confirm the updated readme + + } + } + + } finally { + await browser.close(); + } + } + + testNavigation().catch((error) => { + console.log('Error: Test Failed'); + console.error(error); + }); + +""".trimIndent() + +val updateReadmeSpecificChangesMakeChangesFlowTestScript = updateReadmeSpecificChangesMakeChangesFlowScript.plus(findAndClickButtonScript) +val updateReadmeSpecificChangesTestScript = updateReadmeSpecificChangesScript.plus(findAndClickButtonScript) diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/README.md b/ui-tests-starter/tstData/qdoc/README.md similarity index 100% rename from ui-tests-starter/tstData/qdoc/updateFlow/README.md rename to ui-tests-starter/tstData/qdoc/README.md diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/build.gradle b/ui-tests-starter/tstData/qdoc/build.gradle similarity index 100% rename from ui-tests-starter/tstData/qdoc/updateFlow/build.gradle rename to ui-tests-starter/tstData/qdoc/build.gradle diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/config/application-local.yml b/ui-tests-starter/tstData/qdoc/config/application-local.yml similarity index 100% rename from ui-tests-starter/tstData/qdoc/updateFlow/config/application-local.yml rename to ui-tests-starter/tstData/qdoc/config/application-local.yml diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/dockerfile b/ui-tests-starter/tstData/qdoc/dockerfile similarity index 100% rename from ui-tests-starter/tstData/qdoc/updateFlow/dockerfile rename to ui-tests-starter/tstData/qdoc/dockerfile diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/App.java b/ui-tests-starter/tstData/qdoc/src/com/tancode/App.java similarity index 100% rename from ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/App.java rename to ui-tests-starter/tstData/qdoc/src/com/tancode/App.java diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/HealthController.java b/ui-tests-starter/tstData/qdoc/src/com/tancode/controller/HealthController.java similarity index 100% rename from ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/HealthController.java rename to ui-tests-starter/tstData/qdoc/src/com/tancode/controller/HealthController.java diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/SampleController.java b/ui-tests-starter/tstData/qdoc/src/com/tancode/controller/SampleController.java similarity index 100% rename from ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/SampleController.java rename to ui-tests-starter/tstData/qdoc/src/com/tancode/controller/SampleController.java diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/model/DataItem.java b/ui-tests-starter/tstData/qdoc/src/com/tancode/model/DataItem.java similarity index 100% rename from ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/model/DataItem.java rename to ui-tests-starter/tstData/qdoc/src/com/tancode/model/DataItem.java From 43b46178e9f4f9fc005a3709faf94c36cce0bcc6 Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Wed, 5 Mar 2025 11:49:02 -0500 Subject: [PATCH 03/22] update scripts + move test data to subfolder for update readme tests --- .../docTests/UpdateReadmeWithLatestChangesFlowTest.kt | 6 +++--- .../toolkits/jetbrains/uitests/docTests/scripts/Utils.kt | 2 +- ui-tests-starter/tstData/qdoc/{ => updateFlow}/README.md | 0 ui-tests-starter/tstData/qdoc/{ => updateFlow}/build.gradle | 0 .../qdoc/{ => updateFlow}/config/application-local.yml | 0 ui-tests-starter/tstData/qdoc/{ => updateFlow}/dockerfile | 0 .../tstData/qdoc/{ => updateFlow}/src/com/tancode/App.java | 0 .../src/com/tancode/controller/HealthController.java | 0 .../src/com/tancode/controller/SampleController.java | 0 .../{ => updateFlow}/src/com/tancode/model/DataItem.java | 0 10 files changed, 4 insertions(+), 4 deletions(-) rename ui-tests-starter/tstData/qdoc/{ => updateFlow}/README.md (100%) rename ui-tests-starter/tstData/qdoc/{ => updateFlow}/build.gradle (100%) rename ui-tests-starter/tstData/qdoc/{ => updateFlow}/config/application-local.yml (100%) rename ui-tests-starter/tstData/qdoc/{ => updateFlow}/dockerfile (100%) rename ui-tests-starter/tstData/qdoc/{ => updateFlow}/src/com/tancode/App.java (100%) rename ui-tests-starter/tstData/qdoc/{ => updateFlow}/src/com/tancode/controller/HealthController.java (100%) rename ui-tests-starter/tstData/qdoc/{ => updateFlow}/src/com/tancode/controller/SampleController.java (100%) rename ui-tests-starter/tstData/qdoc/{ => updateFlow}/src/com/tancode/model/DataItem.java (100%) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt index 436fefafd13..cddb47c6522 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt @@ -60,7 +60,7 @@ class UpdateReadmeWithLatestChangesFlowTest { val testCase = TestCase( IdeProductProvider.IC, LocalProjectInfo( - Paths.get("tstData", "qdoc") + Paths.get("tstData", "qdoc", "updateFlow") ) ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) @@ -93,7 +93,7 @@ class UpdateReadmeWithLatestChangesFlowTest { val testCase = TestCase( IdeProductProvider.IC, LocalProjectInfo( - Paths.get("tstData", "qdoc") + Paths.get("tstData", "qdoc", "updateFlow") ) ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) @@ -126,7 +126,7 @@ class UpdateReadmeWithLatestChangesFlowTest { val testCase = TestCase( IdeProductProvider.IC, LocalProjectInfo( - Paths.get("tstData", "qdoc") + Paths.get("tstData", "qdoc", "updateFlow") ) ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/Utils.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/Utils.kt index c8afeb0d247..860a75c4273 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/Utils.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/Utils.kt @@ -5,7 +5,7 @@ package software.aws.toolkits.jetbrains.uitests.docTests.scripts // language=TS val findAndClickButtonScript = """ -export const findAndClickButton = async ( +const findAndClickButton = async ( page, buttonText, clickButton = false, diff --git a/ui-tests-starter/tstData/qdoc/README.md b/ui-tests-starter/tstData/qdoc/updateFlow/README.md similarity index 100% rename from ui-tests-starter/tstData/qdoc/README.md rename to ui-tests-starter/tstData/qdoc/updateFlow/README.md diff --git a/ui-tests-starter/tstData/qdoc/build.gradle b/ui-tests-starter/tstData/qdoc/updateFlow/build.gradle similarity index 100% rename from ui-tests-starter/tstData/qdoc/build.gradle rename to ui-tests-starter/tstData/qdoc/updateFlow/build.gradle diff --git a/ui-tests-starter/tstData/qdoc/config/application-local.yml b/ui-tests-starter/tstData/qdoc/updateFlow/config/application-local.yml similarity index 100% rename from ui-tests-starter/tstData/qdoc/config/application-local.yml rename to ui-tests-starter/tstData/qdoc/updateFlow/config/application-local.yml diff --git a/ui-tests-starter/tstData/qdoc/dockerfile b/ui-tests-starter/tstData/qdoc/updateFlow/dockerfile similarity index 100% rename from ui-tests-starter/tstData/qdoc/dockerfile rename to ui-tests-starter/tstData/qdoc/updateFlow/dockerfile diff --git a/ui-tests-starter/tstData/qdoc/src/com/tancode/App.java b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/App.java similarity index 100% rename from ui-tests-starter/tstData/qdoc/src/com/tancode/App.java rename to ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/App.java diff --git a/ui-tests-starter/tstData/qdoc/src/com/tancode/controller/HealthController.java b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/HealthController.java similarity index 100% rename from ui-tests-starter/tstData/qdoc/src/com/tancode/controller/HealthController.java rename to ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/HealthController.java diff --git a/ui-tests-starter/tstData/qdoc/src/com/tancode/controller/SampleController.java b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/SampleController.java similarity index 100% rename from ui-tests-starter/tstData/qdoc/src/com/tancode/controller/SampleController.java rename to ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/SampleController.java diff --git a/ui-tests-starter/tstData/qdoc/src/com/tancode/model/DataItem.java b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/model/DataItem.java similarity index 100% rename from ui-tests-starter/tstData/qdoc/src/com/tancode/model/DataItem.java rename to ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/model/DataItem.java From a004a2855abb347ea67f250a711ceb66a64db763 Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Wed, 5 Mar 2025 13:38:01 -0500 Subject: [PATCH 04/22] update instructions in update readme with specific changes test --- ...UpdateReadmeWithSpecificChangesFlowTest.kt | 2 +- .../UpdateReadmeWithSpecificChangesScripts.kt | 2 +- .../tstData/qdoc/updateFlow/README.md | 149 +++++++++--------- .../src/com/{ => zetcode}/tancode/App.java | 2 +- .../tancode/controller/HealthController.java | 2 +- .../tancode/controller/SampleController.java | 2 +- .../{ => zetcode}/tancode/model/DataItem.java | 2 +- 7 files changed, 78 insertions(+), 83 deletions(-) rename ui-tests-starter/tstData/qdoc/updateFlow/src/com/{ => zetcode}/tancode/App.java (90%) rename ui-tests-starter/tstData/qdoc/updateFlow/src/com/{ => zetcode}/tancode/controller/HealthController.java (96%) rename ui-tests-starter/tstData/qdoc/updateFlow/src/com/{ => zetcode}/tancode/controller/SampleController.java (95%) rename ui-tests-starter/tstData/qdoc/updateFlow/src/com/{ => zetcode}/tancode/model/DataItem.java (91%) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithSpecificChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithSpecificChangesFlowTest.kt index 868c747782e..d59ada7ddb8 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithSpecificChangesFlowTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithSpecificChangesFlowTest.kt @@ -120,7 +120,7 @@ class UpdateReadmeWithSpecificChangesFlowTest { val readmePath = Paths.get("tstData", "qdoc", "updateFlow", "README.md") val readme = File(readmePath.toUri()) assertTrue(readme.exists()) - assertTrue(readme.readText().contains("## Programming Languages")) + assertTrue(readme.readText().contains("### Installation")) } } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithSpecificChangesScripts.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithSpecificChangesScripts.kt index 0f0571fe215..b609bcf6407 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithSpecificChangesScripts.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithSpecificChangesScripts.kt @@ -101,7 +101,7 @@ val updateReadmeSpecificChangesScript = """ await findAndClickButton(page, 'Yes', true, 10000); console.log('Typing specific change instructions in the chat window'); - await page.type('.mynah-chat-prompt-input', 'Add new section titled Programming Languages which describes the programming languages and version of programming language used in this project.'); + await page.type('.mynah-chat-prompt-input', 'Add a section with Installation instructions for this repository. Title this new section \"### Installation\"'); await page.keyboard.press('Enter'); console.log('Waiting for updated README to be generated'); diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/README.md b/ui-tests-starter/tstData/qdoc/updateFlow/README.md index 06cfde49d07..ab3e65582aa 100644 --- a/ui-tests-starter/tstData/qdoc/updateFlow/README.md +++ b/ui-tests-starter/tstData/qdoc/updateFlow/README.md @@ -1,41 +1,30 @@ -# Spring Boot REST API for Simple Data Management +# Spring Boot REST API Service with Health Monitoring and Data Management -This Spring Boot application provides a RESTful API for managing data items with in-memory storage. It offers a lightweight and efficient way to store and retrieve data items through HTTP endpoints, making it ideal for prototyping and development environments. +This Spring Boot application provides a RESTful API service with health monitoring capabilities and simple data management functionality. It offers a robust foundation for building microservices with built-in health checks and a flexible data storage interface. -The application is built using Spring Boot 3.2.0 and Java 17, featuring a clean architecture with separate controller and model layers. It includes built-in monitoring capabilities through Spring Actuator and comprehensive logging configuration. The REST API supports basic CRUD operations with JSON payloads, making it easy to integrate with various client applications. +The service implements health monitoring endpoints for infrastructure integration and a data management API for storing and retrieving items. Built with Spring Boot 3.2.0 and Java 17, it includes production-ready features through Spring Actuator and comprehensive testing support. The application uses an in-memory data store for demonstration purposes and can be easily extended for production use cases. ## Repository Structure ``` -. -├── build.gradle # Gradle build configuration with Spring Boot dependencies +ui-tests-starter/tstData/qdoc/updateFlow/ +├── build.gradle # Gradle build configuration with Spring Boot 3.2.0 dependencies ├── config/ -│ └── application-local.yml # Local environment configuration (port, app name, logging) -└── src/ - └── com/example/ - ├── App.java # Main application entry point with Spring Boot configuration - ├── controller/ - │ └── SampleController.java # REST endpoints for data management - └── model/ - └── DataItem.java # Data model class for storing items +│ └── application-local.yml # Local environment configuration with server and logging settings +└── src/com/zetcode/tancode/ + ├── App.java # Main Spring Boot application entry point + ├── controller/ + │ ├── HealthController.java # Health and status monitoring endpoints + │ └── SampleController.java # Data management REST endpoints + └── model/ + └── DataItem.java # Data model for item storage ``` ## Usage Instructions - ### Prerequisites -- Java Development Kit (JDK) 17 or higher -- Gradle 8.x (or use the included Gradle wrapper) - -### Installation -1. Clone the repository: -```bash -git clone -cd -``` +- Java Development Kit (JDK) 17 or later +- Gradle 7.x or later +- Port 8080 available on the host machine -2. Build the application: -```bash -./gradlew build -``` ### Quick Start 1. Start the application: @@ -43,75 +32,81 @@ cd ./gradlew bootRun ``` -2. The application will be available at `http://localhost:8080` +2. Verify the service is running: +```bash +curl http://localhost:8080/api/health +``` ### More Detailed Examples - -#### Creating or Updating a Data Item +1. Check service status: ```bash -curl -X PUT http://localhost:8080/api/data/1 \ - -H "Content-Type: application/json" \ - -d '{"content": "Sample content"}' +curl http://localhost:8080/api/status ``` - -Response: +Expected response: ```json { - "id": "1", - "content": "Sample content" + "timestamp": "2024-01-01T12:00:00", + "service": "sample-rest-app", + "status": "running" } ``` -#### Retrieving a Data Item +2. Store a data item: ```bash -curl http://localhost:8080/api/data/1 +curl -X PUT http://localhost:8080/api/data/1 \ + -H "Content-Type: application/json" \ + -d '{"content": "Sample content"}' ``` -Response: -```json -{ - "id": "1", - "content": "Sample content" -} +3. Retrieve a data item: +```bash +curl http://localhost:8080/api/data/1 ``` ### Troubleshooting - -#### Common Issues - -1. Application Fails to Start -- Problem: Port 8080 is already in use -- Error message: `Web server failed to start. Port 8080 was already in use.` -- Solution: Modify the port in `config/application-local.yml`: -```yaml -server: - port: 8081 -``` - -2. Debugging -- Enable debug logging by modifying `config/application-local.yml`: -```yaml -logging: - level: - com.example: DEBUG +1. Service Not Starting +- Problem: Application fails to start +- Diagnosis: + * Check if port 8080 is already in use + * Verify Java version with `java -version` +- Solution: + * Change port in `config/application-local.yml` + * Update Java installation if needed + +2. Debug Mode +- Enable debug logging: + * Set `logging.level.com.example=DEBUG` in application-local.yml +- Log location: Standard output when running locally +- Monitor application logs: +```bash +tail -f logs/application.log ``` -- Debug logs will be available in the console output -- Monitor actuator endpoints at `http://localhost:8080/actuator` for application health ## Data Flow - -The application implements a simple data flow where REST requests are processed through controllers and stored in an in-memory map structure. +The application processes REST requests through controllers, managing data items in an in-memory store while providing health monitoring capabilities. ```ascii -Client Request → REST Controller → In-Memory Storage - ↑ | - └────────────────────────────────────┘ - Response with stored data +Client Request + │ + ▼ +[Spring Boot Server :8080] + │ + ├─── /api/health, /api/status + │ │ + │ HealthController + │ + └─── /api/data/{id} + │ + SampleController + │ + In-Memory Store ``` -Component interactions: -1. Client sends HTTP requests to REST endpoints -2. SampleController handles request validation and routing -3. Data is stored in an in-memory HashMap within the controller -4. Responses are returned as JSON using Spring's ResponseEntity -5. Error handling is managed through HTTP status codes (200 OK, 404 Not Found) \ No newline at end of file +Component Interactions: +1. REST endpoints receive HTTP requests on port 8080 +2. HealthController provides system status and health information +3. SampleController manages data items through GET and PUT operations +4. DataItem objects are stored in an in-memory HashMap +5. All responses are returned as JSON with appropriate HTTP status codes +6. Health checks return UP status when service is operational +7. Data operations are synchronized through Spring's request handling diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/App.java b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/App.java similarity index 90% rename from ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/App.java rename to ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/App.java index 0130760ee61..2c6537580eb 100644 --- a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/App.java +++ b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/App.java @@ -1,4 +1,4 @@ -package com.tancode; +package com.zetcode.tancode; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/HealthController.java b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/controller/HealthController.java similarity index 96% rename from ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/HealthController.java rename to ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/controller/HealthController.java index 84fb6bcd109..091dc79febd 100644 --- a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/HealthController.java +++ b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/controller/HealthController.java @@ -1,7 +1,7 @@ // Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -package com.tancode.controller; +package com.zetcode.tancode.controller; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/SampleController.java b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/controller/SampleController.java similarity index 95% rename from ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/SampleController.java rename to ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/controller/SampleController.java index 19415c0664c..3c7660c4d8d 100644 --- a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/controller/SampleController.java +++ b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/controller/SampleController.java @@ -1,4 +1,4 @@ -package com.tancode.controller; +package com.zetcode.tancode.controller; import com.example.model.DataItem; import org.springframework.http.ResponseEntity; diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/model/DataItem.java b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/model/DataItem.java similarity index 91% rename from ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/model/DataItem.java rename to ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/model/DataItem.java index c482a16d1a4..4847554c81f 100644 --- a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/tancode/model/DataItem.java +++ b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/model/DataItem.java @@ -1,4 +1,4 @@ -package com.tancode.model; +package com.zetcode.tancode.model; public class DataItem { private String id; From 53ceb04ec67bd5136d3ca229caca381958f024a4 Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Wed, 5 Mar 2025 14:12:57 -0500 Subject: [PATCH 05/22] update base readme for testing the update readme flow --- .../tstData/qdoc/updateFlow/README.md | 130 +++++++++--------- 1 file changed, 64 insertions(+), 66 deletions(-) diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/README.md b/ui-tests-starter/tstData/qdoc/updateFlow/README.md index ab3e65582aa..078bb5815c0 100644 --- a/ui-tests-starter/tstData/qdoc/updateFlow/README.md +++ b/ui-tests-starter/tstData/qdoc/updateFlow/README.md @@ -1,29 +1,31 @@ -# Spring Boot REST API Service with Health Monitoring and Data Management +# Spring Boot REST API: A Simple and Robust Microservice Template -This Spring Boot application provides a RESTful API service with health monitoring capabilities and simple data management functionality. It offers a robust foundation for building microservices with built-in health checks and a flexible data storage interface. +This Spring Boot application provides a lightweight REST API template with built-in health monitoring and data management capabilities. It offers a production-ready foundation for building microservices with comprehensive health checks, status monitoring, and data operations. -The service implements health monitoring endpoints for infrastructure integration and a data management API for storing and retrieving items. Built with Spring Boot 3.2.0 and Java 17, it includes production-ready features through Spring Actuator and comprehensive testing support. The application uses an in-memory data store for demonstration purposes and can be easily extended for production use cases. +The application implements a RESTful service with health monitoring endpoints and a flexible data management interface. It features configurable logging levels, actuator endpoints for operational insights, and a clean architecture that separates concerns between controllers and data models. Built with Spring Boot 3.2.0, it leverages modern Java 17 features and includes comprehensive test support through JUnit. ## Repository Structure ``` -ui-tests-starter/tstData/qdoc/updateFlow/ -├── build.gradle # Gradle build configuration with Spring Boot 3.2.0 dependencies +. +├── build.gradle # Gradle build configuration with Spring Boot 3.2.0 and dependencies ├── config/ -│ └── application-local.yml # Local environment configuration with server and logging settings -└── src/com/zetcode/tancode/ - ├── App.java # Main Spring Boot application entry point - ├── controller/ - │ ├── HealthController.java # Health and status monitoring endpoints - │ └── SampleController.java # Data management REST endpoints - └── model/ - └── DataItem.java # Data model for item storage +│ └── application-local.yml # Local environment configuration (port, app name, logging) +└── src/ + └── com/example/ + ├── App.java # Main application entry point with Spring Boot configuration + ├── controller/ # REST API endpoint definitions + │ ├── HealthController.java # Health and status monitoring endpoints + │ └── SampleController.java # Data management endpoints + └── model/ + └── DataItem.java # Data model for API operations ``` ## Usage Instructions + ### Prerequisites -- Java Development Kit (JDK) 17 or later -- Gradle 7.x or later -- Port 8080 available on the host machine +- Java Development Kit (JDK) 17 or higher +- Gradle 8.x or higher +- Basic understanding of Spring Boot and REST APIs ### Quick Start @@ -32,13 +34,14 @@ ui-tests-starter/tstData/qdoc/updateFlow/ ./gradlew bootRun ``` -2. Verify the service is running: +2. Verify the application is running by accessing the health endpoint: ```bash curl http://localhost:8080/api/health ``` ### More Detailed Examples -1. Check service status: + +1. Check Application Status ```bash curl http://localhost:8080/api/status ``` @@ -51,62 +54,57 @@ Expected response: } ``` -2. Store a data item: +2. Health Check ```bash -curl -X PUT http://localhost:8080/api/data/1 \ - -H "Content-Type: application/json" \ - -d '{"content": "Sample content"}' +curl http://localhost:8080/api/health ``` - -3. Retrieve a data item: -```bash -curl http://localhost:8080/api/data/1 +Expected response: +```json +{ + "status": "UP", + "message": "Service is healthy" +} ``` ### Troubleshooting -1. Service Not Starting -- Problem: Application fails to start -- Diagnosis: - * Check if port 8080 is already in use - * Verify Java version with `java -version` -- Solution: - * Change port in `config/application-local.yml` - * Update Java installation if needed - -2. Debug Mode -- Enable debug logging: - * Set `logging.level.com.example=DEBUG` in application-local.yml -- Log location: Standard output when running locally -- Monitor application logs: -```bash -tail -f logs/application.log -``` + +1. Application Won't Start +- **Problem**: Application fails to start with port binding issues +- **Solution**: + ```bash + # Check if port 8080 is already in use + lsof -i :8080 + # Modify port in config/application-local.yml if needed + ``` + +2. Debugging +- Enable debug logging by modifying `config/application-local.yml`: + ```yaml + logging: + level: + com.example: DEBUG + ``` +- Check logs in console output for detailed information +- Use Spring Boot Actuator endpoints for health monitoring: + ```bash + curl http://localhost:8080/actuator/health + ``` ## Data Flow -The application processes REST requests through controllers, managing data items in an in-memory store while providing health monitoring capabilities. + +The application processes HTTP requests through a layered architecture, transforming REST calls into data operations with proper error handling and response formatting. ```ascii -Client Request - │ - ▼ -[Spring Boot Server :8080] - │ - ├─── /api/health, /api/status - │ │ - │ HealthController - │ - └─── /api/data/{id} - │ - SampleController - │ - In-Memory Store +Client Request → Controller Layer → Data Processing → Response + ↑ | | ↓ + └──────────────┴────────Error Handling─────────────┘ ``` -Component Interactions: -1. REST endpoints receive HTTP requests on port 8080 -2. HealthController provides system status and health information -3. SampleController manages data items through GET and PUT operations -4. DataItem objects are stored in an in-memory HashMap -5. All responses are returned as JSON with appropriate HTTP status codes -6. Health checks return UP status when service is operational -7. Data operations are synchronized through Spring's request handling +Key component interactions: +1. Controllers receive HTTP requests and validate inputs +2. Request data is mapped to internal data models +3. Business logic processes the data operations +4. Responses are formatted as JSON and returned to the client +5. Error handling is managed across all layers +6. Health monitoring provides real-time system status +7. Logging captures operation details at configurable levels From 22809cc59b51f1397e5e985e6d7c4a358b480a91 Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Wed, 5 Mar 2025 16:23:56 -0500 Subject: [PATCH 06/22] update test assertions for q doc update flow tests --- .../docTests/UpdateReadmeWithLatestChangesFlowTest.kt | 4 +--- .../docTests/UpdateReadmeWithSpecificChangesFlowTest.kt | 5 ++--- .../scripts/UpdateReadmeWithLatestChangesScripts.kt | 6 +----- .../scripts/UpdateReadmeWithSpecificChangesScripts.kt | 7 ++----- .../tstData/qdoc/updateFlow/settings.gradle.kts | 4 ++++ 5 files changed, 10 insertions(+), 16 deletions(-) create mode 100644 ui-tests-starter/tstData/qdoc/updateFlow/settings.gradle.kts diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt index cddb47c6522..7b5a6b5198b 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt @@ -148,9 +148,7 @@ class UpdateReadmeWithLatestChangesFlowTest { // required wait time for the system to be fully ready Thread.sleep(30000) - val result = executePuppeteerScript(updateReadmeLatestChangesTestScript) - assertTrue(result.contains("Test Successful")) - assertFalse(result.contains("Error: Test Failed")) + executePuppeteerScript(updateReadmeLatestChangesTestScript) val readmePath = Paths.get("tstData", "qdoc", "updateFlow", "README.md") val readme = File(readmePath.toUri()) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithSpecificChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithSpecificChangesFlowTest.kt index d59ada7ddb8..3dea37f7e47 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithSpecificChangesFlowTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithSpecificChangesFlowTest.kt @@ -114,9 +114,8 @@ class UpdateReadmeWithSpecificChangesFlowTest { // required wait time for the system to be fully ready Thread.sleep(30000) - val result = executePuppeteerScript(updateReadmeSpecificChangesTestScript) - assertTrue(result.contains("Test Successful")) - assertFalse(result.contains("Error: Test Failed")) + executePuppeteerScript(updateReadmeSpecificChangesTestScript) + val readmePath = Paths.get("tstData", "qdoc", "updateFlow", "README.md") val readme = File(readmePath.toUri()) assertTrue(readme.exists()) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithLatestChangesScripts.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithLatestChangesScripts.kt index 38c8b215779..270ccfce67e 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithLatestChangesScripts.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithLatestChangesScripts.kt @@ -93,10 +93,6 @@ val updateReadmeLatestChangesScript = """ await new Promise(resolve => setTimeout(resolve, 90000)); console.log('Attempting to find and click Accept button') await findAndClickButton(page, 'Accept', true, 10000) - - // find and confirm the readme was generated successfully - - } } @@ -147,7 +143,7 @@ val updateReadmeLatestChangesMakeChangesFlowScript = """ await new Promise(resolve => setTimeout(resolve, 90000)); console.log('Attempting to find and click Make changes button'); await findAndClickButton(page, 'Make changes', true, 10000); - const makeChangeText = await page.${'$'}('[placeholder="Describe documentation changes"]'); + const makeChangeText = await page.waitForSelector('[placeholder="Describe documentation changes"]'); if (!makeChangeText) { console.log('Error: Test Failed'); console.log('Unable to find placeholder description test in Make Changes flow'); diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithSpecificChangesScripts.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithSpecificChangesScripts.kt index b609bcf6407..db263199051 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithSpecificChangesScripts.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithSpecificChangesScripts.kt @@ -36,14 +36,14 @@ val updateReadmeSpecificChangesMakeChangesFlowScript = """ await findAndClickButton(page, 'Yes', true, 10000); console.log('Typing specific change instructions in the chat window'); - await page.type('.mynah-chat-prompt-input', 'Add new section titled Programming Languages which describes the programming languages and version of programming language used in this project.'); + await page.type('.mynah-chat-prompt-input', 'Add a section with Installation instructions for this repository. Title this new section \"### Installation\"'); await page.keyboard.press('Enter'); console.log('Waiting for updated README to be generated'); await new Promise(resolve => setTimeout(resolve, 90000)); console.log('Attempting to find and click Make changes button'); await findAndClickButton(page, 'Make changes', true, 10000); - + const makeChangeText = await page.waitForSelector('[placeholder="Describe documentation changes"]'); if (!makeChangeText) { console.log('Error: Test Failed'); console.log('Unable to find placeholder description test in Make Changes flow'); @@ -109,9 +109,6 @@ val updateReadmeSpecificChangesScript = """ console.log('Attempting to find and click Accept button'); await findAndClickButton(page, 'Accept', true, 10000); - - // find and confirm the updated readme - } } diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/settings.gradle.kts b/ui-tests-starter/tstData/qdoc/updateFlow/settings.gradle.kts new file mode 100644 index 00000000000..078d86d1d07 --- /dev/null +++ b/ui-tests-starter/tstData/qdoc/updateFlow/settings.gradle.kts @@ -0,0 +1,4 @@ +// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +rootProject.name = "q-doc-update-ui-test" From c00d3cdde4d55b527618563ac1d7a69d8a6dd7f5 Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Thu, 6 Mar 2025 11:48:08 -0500 Subject: [PATCH 07/22] separate out test cases into individual tests --- .../MakeChangesFlowTest.kt | 96 ++++++++++++++++++ .../PromptedToConfirmFolderTest.kt | 97 +++++++++++++++++++ .../UpdateReadmeLatestChangesTest.kt} | 74 +------------- .../MakeChangesFlowTest.kt | 95 ++++++++++++++++++ .../UpdateReadmeSpecificChangesTest.kt} | 40 +------- 5 files changed, 292 insertions(+), 110 deletions(-) create mode 100644 ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt create mode 100644 ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt rename ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/{UpdateReadmeWithLatestChangesFlowTest.kt => updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt} (55%) create mode 100644 ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt rename ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/{UpdateReadmeWithSpecificChangesFlowTest.kt => updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt} (69%) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt new file mode 100644 index 00000000000..89be86e4369 --- /dev/null +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt @@ -0,0 +1,96 @@ +// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.UpdateReadmeLatestChanges + +import com.intellij.driver.sdk.waitForProjectOpen +import com.intellij.ide.starter.ci.CIServer +import com.intellij.ide.starter.config.ConfigurationStorage +import com.intellij.ide.starter.di.di +import com.intellij.ide.starter.driver.engine.runIdeWithDriver +import com.intellij.ide.starter.ide.IdeProductProvider +import com.intellij.ide.starter.junit5.hyphenateWithClass +import com.intellij.ide.starter.models.TestCase +import com.intellij.ide.starter.project.LocalProjectInfo +import com.intellij.ide.starter.runner.CurrentTestMethod +import com.intellij.ide.starter.runner.Starter +import org.junit.jupiter.api.AfterAll +import org.junit.jupiter.api.Assertions.assertFalse +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.kodein.di.DI +import org.kodein.di.bindSingleton +import software.aws.toolkits.jetbrains.uitests.TestCIServer +import software.aws.toolkits.jetbrains.uitests.clearAwsXmlFile +import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeLatestChangesMakeChangesFlowTestScript +import software.aws.toolkits.jetbrains.uitests.executePuppeteerScript +import software.aws.toolkits.jetbrains.uitests.setupTestEnvironment +import software.aws.toolkits.jetbrains.uitests.useExistingConnectionForTest +import java.io.File +import java.nio.file.Path +import java.nio.file.Paths + +class MakeChangesFlowTest { + init { + di = DI { + extend(di) + bindSingleton(overrides = true) { TestCIServer } + val defaults = ConfigurationStorage.instance().defaults.toMutableMap().apply { + put("LOG_ENVIRONMENT_VARIABLES", (!System.getenv("CI").toBoolean()).toString()) + } + + bindSingleton(overrides = true) { + ConfigurationStorage(this, defaults) + } + } + } + + @BeforeEach + fun setUp() { + // Setup test environment + setupTestEnvironment() + } + + @Test + fun `Make Changes button leads to UPDATE with specific changes flow`() { + val testCase = TestCase( + IdeProductProvider.IC, + LocalProjectInfo( + Paths.get("tstData", "qdoc", "updateFlow") + ) + ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) + + // inject connection + useExistingConnectionForTest() + + Starter.newContext(CurrentTestMethod.hyphenateWithClass(), testCase).apply { + System.getProperty("ui.test.plugins").split(File.pathSeparator).forEach { path -> + pluginConfigurator.installPluginFromPath( + Path.of(path) + ) + } + + copyExistingConfig(Paths.get("tstData", "configAmazonQTests")) + updateGeneralSettings() + }.runIdeWithDriver() + .useDriverAndCloseIde { + waitForProjectOpen() + // required wait time for the system to be fully ready + Thread.sleep(30000) + + val result = executePuppeteerScript(updateReadmeLatestChangesMakeChangesFlowTestScript) + assertTrue(result.contains("Test Successful")) + assertFalse(result.contains("Error: Test Failed")) + } + } + + companion object { + @JvmStatic + @AfterAll + fun clearAwsXml() { + clearAwsXmlFile() + } + } +} + diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt new file mode 100644 index 00000000000..76f846dd98e --- /dev/null +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt @@ -0,0 +1,97 @@ +// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.UpdateReadmeLatestChanges + +import com.intellij.driver.sdk.waitForProjectOpen +import com.intellij.ide.starter.ci.CIServer +import com.intellij.ide.starter.config.ConfigurationStorage +import com.intellij.ide.starter.di.di +import com.intellij.ide.starter.driver.engine.runIdeWithDriver +import com.intellij.ide.starter.ide.IdeProductProvider +import com.intellij.ide.starter.junit5.hyphenateWithClass +import com.intellij.ide.starter.models.TestCase +import com.intellij.ide.starter.project.LocalProjectInfo +import com.intellij.ide.starter.runner.CurrentTestMethod +import com.intellij.ide.starter.runner.Starter +import org.junit.jupiter.api.AfterAll +import org.junit.jupiter.api.Assertions.assertFalse +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.kodein.di.DI +import org.kodein.di.bindSingleton +import software.aws.toolkits.jetbrains.uitests.TestCIServer +import software.aws.toolkits.jetbrains.uitests.clearAwsXmlFile +import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeLatestChangesConfirmOptionsTestScript +import software.aws.toolkits.jetbrains.uitests.executePuppeteerScript +import software.aws.toolkits.jetbrains.uitests.setupTestEnvironment +import software.aws.toolkits.jetbrains.uitests.useExistingConnectionForTest +import java.io.File +import java.nio.file.Path +import java.nio.file.Paths + +class PromptedToConfirmFolderTest { + + init { + di = DI { + extend(di) + bindSingleton(overrides = true) { TestCIServer } + val defaults = ConfigurationStorage.instance().defaults.toMutableMap().apply { + put("LOG_ENVIRONMENT_VARIABLES", (!System.getenv("CI").toBoolean()).toString()) + } + + bindSingleton(overrides = true) { + ConfigurationStorage(this, defaults) + } + } + } + + @BeforeEach + fun setUp() { + // Setup test environment + setupTestEnvironment() + } + + @Test + fun `Prompted to confirm selected folder`() { + val testCase = TestCase( + IdeProductProvider.IC, + LocalProjectInfo( + Paths.get("tstData", "qdoc", "updateFlow") + ) + ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) + + // inject connection + useExistingConnectionForTest() + + Starter.newContext(CurrentTestMethod.hyphenateWithClass(), testCase).apply { + System.getProperty("ui.test.plugins").split(File.pathSeparator).forEach { path -> + pluginConfigurator.installPluginFromPath( + Path.of(path) + ) + } + + copyExistingConfig(Paths.get("tstData", "configAmazonQTests")) + updateGeneralSettings() + }.runIdeWithDriver() + .useDriverAndCloseIde { + waitForProjectOpen() + // required wait time for the system to be fully ready + Thread.sleep(30000) + + val result = executePuppeteerScript(updateReadmeLatestChangesConfirmOptionsTestScript) + assertTrue(result.contains("Test Successful")) + assertFalse(result.contains("Error: Test Failed")) + } + } + + companion object { + @JvmStatic + @AfterAll + fun clearAwsXml() { + clearAwsXmlFile() + } + } +} + diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt similarity index 55% rename from ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt rename to ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt index 7b5a6b5198b..54a584158d9 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithLatestChangesFlowTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt @@ -1,7 +1,7 @@ // Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -package software.aws.toolkits.jetbrains.uitests.docTests +package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.UpdateReadmeLatestChanges import com.intellij.driver.sdk.waitForProjectOpen import com.intellij.ide.starter.ci.CIServer @@ -15,7 +15,6 @@ import com.intellij.ide.starter.project.LocalProjectInfo import com.intellij.ide.starter.runner.CurrentTestMethod import com.intellij.ide.starter.runner.Starter import org.junit.jupiter.api.AfterAll -import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test @@ -23,8 +22,6 @@ import org.kodein.di.DI import org.kodein.di.bindSingleton import software.aws.toolkits.jetbrains.uitests.TestCIServer import software.aws.toolkits.jetbrains.uitests.clearAwsXmlFile -import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeLatestChangesConfirmOptionsTestScript -import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeLatestChangesMakeChangesFlowTestScript import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeLatestChangesTestScript import software.aws.toolkits.jetbrains.uitests.executePuppeteerScript import software.aws.toolkits.jetbrains.uitests.setupTestEnvironment @@ -33,8 +30,7 @@ import java.io.File import java.nio.file.Path import java.nio.file.Paths -class UpdateReadmeWithLatestChangesFlowTest { - +class UpdateReadmeLatestChangesTest { init { di = DI { extend(di) @@ -55,72 +51,6 @@ class UpdateReadmeWithLatestChangesFlowTest { setupTestEnvironment() } - @Test - fun `Prompted to confirm selected folder`() { - val testCase = TestCase( - IdeProductProvider.IC, - LocalProjectInfo( - Paths.get("tstData", "qdoc", "updateFlow") - ) - ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) - - // inject connection - useExistingConnectionForTest() - - Starter.newContext(CurrentTestMethod.hyphenateWithClass(), testCase).apply { - System.getProperty("ui.test.plugins").split(File.pathSeparator).forEach { path -> - pluginConfigurator.installPluginFromPath( - Path.of(path) - ) - } - - copyExistingConfig(Paths.get("tstData", "configAmazonQTests")) - updateGeneralSettings() - }.runIdeWithDriver() - .useDriverAndCloseIde { - waitForProjectOpen() - // required wait time for the system to be fully ready - Thread.sleep(30000) - - val result = executePuppeteerScript(updateReadmeLatestChangesConfirmOptionsTestScript) - assertTrue(result.contains("Test Successful")) - assertFalse(result.contains("Error: Test Failed")) - } - } - - @Test - fun `Make Changes button leads to UPDATE with specific changes flow`() { - val testCase = TestCase( - IdeProductProvider.IC, - LocalProjectInfo( - Paths.get("tstData", "qdoc", "updateFlow") - ) - ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) - - // inject connection - useExistingConnectionForTest() - - Starter.newContext(CurrentTestMethod.hyphenateWithClass(), testCase).apply { - System.getProperty("ui.test.plugins").split(File.pathSeparator).forEach { path -> - pluginConfigurator.installPluginFromPath( - Path.of(path) - ) - } - - copyExistingConfig(Paths.get("tstData", "configAmazonQTests")) - updateGeneralSettings() - }.runIdeWithDriver() - .useDriverAndCloseIde { - waitForProjectOpen() - // required wait time for the system to be fully ready - Thread.sleep(30000) - - val result = executePuppeteerScript(updateReadmeLatestChangesMakeChangesFlowTestScript) - assertTrue(result.contains("Test Successful")) - assertFalse(result.contains("Error: Test Failed")) - } - } - @Test fun `UpdateReadme with latest changes returns an updated Readme`() { val testCase = TestCase( diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt new file mode 100644 index 00000000000..5bd321be198 --- /dev/null +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt @@ -0,0 +1,95 @@ +// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.UpdateReadmeSpecificChanges + +import com.intellij.driver.sdk.waitForProjectOpen +import com.intellij.ide.starter.ci.CIServer +import com.intellij.ide.starter.config.ConfigurationStorage +import com.intellij.ide.starter.di.di +import com.intellij.ide.starter.driver.engine.runIdeWithDriver +import com.intellij.ide.starter.ide.IdeProductProvider +import com.intellij.ide.starter.junit5.hyphenateWithClass +import com.intellij.ide.starter.models.TestCase +import com.intellij.ide.starter.project.LocalProjectInfo +import com.intellij.ide.starter.runner.CurrentTestMethod +import com.intellij.ide.starter.runner.Starter +import org.junit.jupiter.api.AfterAll +import org.junit.jupiter.api.Assertions.assertFalse +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.kodein.di.DI +import org.kodein.di.bindSingleton +import software.aws.toolkits.jetbrains.uitests.TestCIServer +import software.aws.toolkits.jetbrains.uitests.clearAwsXmlFile +import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeSpecificChangesMakeChangesFlowTestScript +import software.aws.toolkits.jetbrains.uitests.executePuppeteerScript +import software.aws.toolkits.jetbrains.uitests.setupTestEnvironment +import software.aws.toolkits.jetbrains.uitests.useExistingConnectionForTest +import java.io.File +import java.nio.file.Path +import java.nio.file.Paths + +class MakeChangesFlowTest { + init { + di = DI { + extend(di) + bindSingleton(overrides = true) { TestCIServer } + val defaults = ConfigurationStorage.instance().defaults.toMutableMap().apply { + put("LOG_ENVIRONMENT_VARIABLES", (!System.getenv("CI").toBoolean()).toString()) + } + + bindSingleton(overrides = true) { + ConfigurationStorage(this, defaults) + } + } + } + + @BeforeEach + fun setUp() { + // Setup test environment + setupTestEnvironment() + } + + @Test + fun `Make changes button leads to UPDATE with specific changes flow`() { + val testCase = TestCase( + IdeProductProvider.IC, + LocalProjectInfo( + Paths.get("tstData", "qdoc", "updateFlow") + ) + ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) + + // inject connection + useExistingConnectionForTest() + + Starter.newContext(CurrentTestMethod.hyphenateWithClass(), testCase).apply { + System.getProperty("ui.test.plugins").split(File.pathSeparator).forEach { path -> + pluginConfigurator.installPluginFromPath( + Path.of(path) + ) + } + + copyExistingConfig(Paths.get("tstData", "configAmazonQTests")) + updateGeneralSettings() + }.runIdeWithDriver() + .useDriverAndCloseIde { + waitForProjectOpen() + // required wait time for the system to be fully ready + Thread.sleep(30000) + + val result = executePuppeteerScript(updateReadmeSpecificChangesMakeChangesFlowTestScript) + assertTrue(result.contains("Test Successful")) + assertFalse(result.contains("Error: Test Failed")) + } + } + + companion object { + @JvmStatic + @AfterAll + fun clearAwsXml() { + clearAwsXmlFile() + } + } +} diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithSpecificChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt similarity index 69% rename from ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithSpecificChangesFlowTest.kt rename to ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt index 3dea37f7e47..c8ddda2f98b 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/UpdateReadmeWithSpecificChangesFlowTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt @@ -1,7 +1,7 @@ // Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -package software.aws.toolkits.jetbrains.uitests.docTests +package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.UpdateReadmeSpecificChanges import com.intellij.driver.sdk.waitForProjectOpen import com.intellij.ide.starter.ci.CIServer @@ -15,7 +15,6 @@ import com.intellij.ide.starter.project.LocalProjectInfo import com.intellij.ide.starter.runner.CurrentTestMethod import com.intellij.ide.starter.runner.Starter import org.junit.jupiter.api.AfterAll -import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test @@ -23,7 +22,6 @@ import org.kodein.di.DI import org.kodein.di.bindSingleton import software.aws.toolkits.jetbrains.uitests.TestCIServer import software.aws.toolkits.jetbrains.uitests.clearAwsXmlFile -import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeSpecificChangesMakeChangesFlowTestScript import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeSpecificChangesTestScript import software.aws.toolkits.jetbrains.uitests.executePuppeteerScript import software.aws.toolkits.jetbrains.uitests.setupTestEnvironment @@ -32,8 +30,7 @@ import java.io.File import java.nio.file.Path import java.nio.file.Paths -class UpdateReadmeWithSpecificChangesFlowTest { - +class UpdateReadmeSpecificChangesTest { init { di = DI { extend(di) @@ -54,39 +51,6 @@ class UpdateReadmeWithSpecificChangesFlowTest { setupTestEnvironment() } - @Test - fun `Make changes button leads to UPDATE with specific changes flow`() { - val testCase = TestCase( - IdeProductProvider.IC, - LocalProjectInfo( - Paths.get("tstData", "qdoc", "updateFlow") - ) - ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) - - // inject connection - useExistingConnectionForTest() - - Starter.newContext(CurrentTestMethod.hyphenateWithClass(), testCase).apply { - System.getProperty("ui.test.plugins").split(File.pathSeparator).forEach { path -> - pluginConfigurator.installPluginFromPath( - Path.of(path) - ) - } - - copyExistingConfig(Paths.get("tstData", "configAmazonQTests")) - updateGeneralSettings() - }.runIdeWithDriver() - .useDriverAndCloseIde { - waitForProjectOpen() - // required wait time for the system to be fully ready - Thread.sleep(30000) - - val result = executePuppeteerScript(updateReadmeSpecificChangesMakeChangesFlowTestScript) - assertTrue(result.contains("Test Successful")) - assertFalse(result.contains("Error: Test Failed")) - } - } - @Test fun `UpdateReadme with specific changes returns an updated Readme`() { val testCase = TestCase( From 525d784012fec4b078d6af4658bc539d2b0077da Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Thu, 6 Mar 2025 12:04:43 -0500 Subject: [PATCH 08/22] remove gradle settings file for q doc update flow test repo --- ui-tests-starter/tstData/qdoc/updateFlow/build.gradle | 2 +- ui-tests-starter/tstData/qdoc/updateFlow/settings.gradle.kts | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) delete mode 100644 ui-tests-starter/tstData/qdoc/updateFlow/settings.gradle.kts diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/build.gradle b/ui-tests-starter/tstData/qdoc/updateFlow/build.gradle index cb51cd85dc0..1c195edfa02 100644 --- a/ui-tests-starter/tstData/qdoc/updateFlow/build.gradle +++ b/ui-tests-starter/tstData/qdoc/updateFlow/build.gradle @@ -4,7 +4,7 @@ plugins { id 'java' } -group = 'com.example' +group = 'com.zetcode.tancode' version = '1.0-SNAPSHOT' sourceCompatibility = '17' diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/settings.gradle.kts b/ui-tests-starter/tstData/qdoc/updateFlow/settings.gradle.kts deleted file mode 100644 index 078d86d1d07..00000000000 --- a/ui-tests-starter/tstData/qdoc/updateFlow/settings.gradle.kts +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. -// SPDX-License-Identifier: Apache-2.0 - -rootProject.name = "q-doc-update-ui-test" From fa120b2d28823f8ed672da6aa40c20d298f38f81 Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Thu, 6 Mar 2025 13:35:56 -0500 Subject: [PATCH 09/22] log result from scripts for debugging --- .../UpdateReadmeLatestChanges/MakeChangesFlowTest.kt | 1 + .../UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt | 1 + .../UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt | 1 + .../UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt | 1 + .../UpdateReadmeSpecificChangesTest.kt | 1 + 5 files changed, 5 insertions(+) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt index 89be86e4369..63d25dfb2b9 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt @@ -80,6 +80,7 @@ class MakeChangesFlowTest { Thread.sleep(30000) val result = executePuppeteerScript(updateReadmeLatestChangesMakeChangesFlowTestScript) + println("result: $result") assertTrue(result.contains("Test Successful")) assertFalse(result.contains("Error: Test Failed")) } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt index 76f846dd98e..27026110b75 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt @@ -81,6 +81,7 @@ class PromptedToConfirmFolderTest { Thread.sleep(30000) val result = executePuppeteerScript(updateReadmeLatestChangesConfirmOptionsTestScript) + println("result: $result") assertTrue(result.contains("Test Successful")) assertFalse(result.contains("Error: Test Failed")) } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt index 54a584158d9..de255d15835 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt @@ -83,6 +83,7 @@ class UpdateReadmeLatestChangesTest { val readmePath = Paths.get("tstData", "qdoc", "updateFlow", "README.md") val readme = File(readmePath.toUri()) assertTrue(readme.exists()) + println("result: ${readme.readText()}") assertTrue(readme.readText().contains("tancode")) assertTrue(readme.readText().contains("HealthController")) } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt index 5bd321be198..1e7366038b9 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt @@ -80,6 +80,7 @@ class MakeChangesFlowTest { Thread.sleep(30000) val result = executePuppeteerScript(updateReadmeSpecificChangesMakeChangesFlowTestScript) + println("result: $result") assertTrue(result.contains("Test Successful")) assertFalse(result.contains("Error: Test Failed")) } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt index c8ddda2f98b..3fb3818de71 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt @@ -83,6 +83,7 @@ class UpdateReadmeSpecificChangesTest { val readmePath = Paths.get("tstData", "qdoc", "updateFlow", "README.md") val readme = File(readmePath.toUri()) assertTrue(readme.exists()) + println("result: ${readme.readText()}") assertTrue(readme.readText().contains("### Installation")) } } From f1fa2c88fceb15abe4e6cc95bbe5e3a2d3e42ec4 Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Thu, 6 Mar 2025 13:53:57 -0500 Subject: [PATCH 10/22] manually restore readme after each test run --- .../MakeChangesFlowTest.kt | 15 +++++++++++++++ .../PromptedToConfirmFolderTest.kt | 15 +++++++++++++++ .../UpdateReadmeLatestChangesTest.kt | 15 +++++++++++++++ .../MakeChangesFlowTest.kt | 15 +++++++++++++++ .../UpdateReadmeSpecificChangesTest.kt | 15 +++++++++++++++ 5 files changed, 75 insertions(+) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt index 63d25dfb2b9..eddef2d7f87 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt @@ -92,6 +92,21 @@ class MakeChangesFlowTest { fun clearAwsXml() { clearAwsXmlFile() } + + @JvmStatic + @AfterAll + fun tearDown() { + val path = Paths.get("tstData", "qdoc", "updateFlow", "README.md").toUri() + + val process = ProcessBuilder("git", "restore", path.path).start() + val exitCode = process.waitFor() + if (exitCode != 0) { + println("Warning: git stash command failed with exit code $exitCode") + process.errorStream.bufferedReader().use { reader -> + println("Error: ${reader.readText()}") + } + } + } } } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt index 27026110b75..36e205fd6e4 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt @@ -93,6 +93,21 @@ class PromptedToConfirmFolderTest { fun clearAwsXml() { clearAwsXmlFile() } + + @JvmStatic + @AfterAll + fun tearDown() { + val path = Paths.get("tstData", "qdoc", "updateFlow", "README.md").toUri() + + val process = ProcessBuilder("git", "restore", path.path).start() + val exitCode = process.waitFor() + if (exitCode != 0) { + println("Warning: git stash command failed with exit code $exitCode") + process.errorStream.bufferedReader().use { reader -> + println("Error: ${reader.readText()}") + } + } + } } } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt index de255d15835..3a1b3177f62 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt @@ -95,5 +95,20 @@ class UpdateReadmeLatestChangesTest { fun clearAwsXml() { clearAwsXmlFile() } + + @JvmStatic + @AfterAll + fun tearDown() { + val path = Paths.get("tstData", "qdoc", "updateFlow", "README.md").toUri() + + val process = ProcessBuilder("git", "restore", path.path).start() + val exitCode = process.waitFor() + if (exitCode != 0) { + println("Warning: git stash command failed with exit code $exitCode") + process.errorStream.bufferedReader().use { reader -> + println("Error: ${reader.readText()}") + } + } + } } } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt index 1e7366038b9..0257b4dc9eb 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt @@ -92,5 +92,20 @@ class MakeChangesFlowTest { fun clearAwsXml() { clearAwsXmlFile() } + + @JvmStatic + @AfterAll + fun tearDown() { + val path = Paths.get("tstData", "qdoc", "updateFlow", "README.md").toUri() + + val process = ProcessBuilder("git", "restore", path.path).start() + val exitCode = process.waitFor() + if (exitCode != 0) { + println("Warning: git stash command failed with exit code $exitCode") + process.errorStream.bufferedReader().use { reader -> + println("Error: ${reader.readText()}") + } + } + } } } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt index 3fb3818de71..c956cba2447 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt @@ -94,5 +94,20 @@ class UpdateReadmeSpecificChangesTest { fun clearAwsXml() { clearAwsXmlFile() } + + @JvmStatic + @AfterAll + fun tearDown() { + val path = Paths.get("tstData", "qdoc", "updateFlow", "README.md").toUri() + + val process = ProcessBuilder("git", "restore", path.path).start() + val exitCode = process.waitFor() + if (exitCode != 0) { + println("Warning: git stash command failed with exit code $exitCode") + process.errorStream.bufferedReader().use { reader -> + println("Error: ${reader.readText()}") + } + } + } } } From c4a34f5cc22f88c332b93990a7537ace2ed0f3c6 Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Thu, 6 Mar 2025 14:32:30 -0500 Subject: [PATCH 11/22] add end of assertions println for debugging + update readme --- .../MakeChangesFlowTest.kt | 1 + .../PromptedToConfirmFolderTest.kt | 1 + .../UpdateReadmeLatestChangesTest.kt | 5 +- .../MakeChangesFlowTest.kt | 1 + .../UpdateReadmeSpecificChangesTest.kt | 3 +- .../tstData/qdoc/updateFlow/README.md | 126 +++++++++--------- 6 files changed, 70 insertions(+), 67 deletions(-) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt index eddef2d7f87..b098758d69d 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt @@ -83,6 +83,7 @@ class MakeChangesFlowTest { println("result: $result") assertTrue(result.contains("Test Successful")) assertFalse(result.contains("Error: Test Failed")) + println("assertions done") } } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt index 36e205fd6e4..d8668302913 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt @@ -84,6 +84,7 @@ class PromptedToConfirmFolderTest { println("result: $result") assertTrue(result.contains("Test Successful")) assertFalse(result.contains("Error: Test Failed")) + println("assertions done") } } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt index 3a1b3177f62..b83dda511ba 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt @@ -84,8 +84,9 @@ class UpdateReadmeLatestChangesTest { val readme = File(readmePath.toUri()) assertTrue(readme.exists()) println("result: ${readme.readText()}") - assertTrue(readme.readText().contains("tancode")) - assertTrue(readme.readText().contains("HealthController")) + assertTrue(readme.readText().contains("tancode", ignoreCase = true)) + assertTrue(readme.readText().contains("healthcontroller.java", ignoreCase = true)) + println("assertions done") } } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt index 0257b4dc9eb..a7bf7b838ef 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt @@ -83,6 +83,7 @@ class MakeChangesFlowTest { println("result: $result") assertTrue(result.contains("Test Successful")) assertFalse(result.contains("Error: Test Failed")) + println("assertions done") } } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt index c956cba2447..89e6d0f07ce 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt @@ -84,7 +84,8 @@ class UpdateReadmeSpecificChangesTest { val readme = File(readmePath.toUri()) assertTrue(readme.exists()) println("result: ${readme.readText()}") - assertTrue(readme.readText().contains("### Installation")) + assertTrue(readme.readText().contains("Installation", ignoreCase = true)) + println("assertions done") } } diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/README.md b/ui-tests-starter/tstData/qdoc/updateFlow/README.md index 078bb5815c0..7cec42a23d0 100644 --- a/ui-tests-starter/tstData/qdoc/updateFlow/README.md +++ b/ui-tests-starter/tstData/qdoc/updateFlow/README.md @@ -1,110 +1,108 @@ -# Spring Boot REST API: A Simple and Robust Microservice Template +# Spring Boot REST API for Simple Data Management -This Spring Boot application provides a lightweight REST API template with built-in health monitoring and data management capabilities. It offers a production-ready foundation for building microservices with comprehensive health checks, status monitoring, and data operations. +This Spring Boot application provides a lightweight REST API for managing data items with a simple key-value storage mechanism. It offers a clean and efficient way to store and retrieve data items through RESTful endpoints with built-in monitoring capabilities via Spring Actuator. -The application implements a RESTful service with health monitoring endpoints and a flexible data management interface. It features configurable logging levels, actuator endpoints for operational insights, and a clean architecture that separates concerns between controllers and data models. Built with Spring Boot 3.2.0, it leverages modern Java 17 features and includes comprehensive test support through JUnit. +The application implements a RESTful service with in-memory storage, making it ideal for prototyping, testing, or scenarios requiring temporary data persistence. It features comprehensive logging configuration, health monitoring through Spring Actuator, and follows Spring Boot best practices for configuration management. The service is built using Java 17 and managed with Gradle, ensuring modern Java features and reliable dependency management. ## Repository Structure ``` . -├── build.gradle # Gradle build configuration with Spring Boot 3.2.0 and dependencies +├── build.gradle # Gradle build configuration with Spring Boot dependencies ├── config/ -│ └── application-local.yml # Local environment configuration (port, app name, logging) +│ └── application-local.yml # Local environment configuration (port, logging, app name) └── src/ └── com/example/ - ├── App.java # Main application entry point with Spring Boot configuration - ├── controller/ # REST API endpoint definitions - │ ├── HealthController.java # Health and status monitoring endpoints - │ └── SampleController.java # Data management endpoints + ├── App.java # Main application entry point with Spring Boot configuration + ├── controller/ + │ └── SampleController.java # REST endpoints for data management └── model/ - └── DataItem.java # Data model for API operations + └── DataItem.java # Data model class for storing items ``` ## Usage Instructions ### Prerequisites - Java Development Kit (JDK) 17 or higher -- Gradle 8.x or higher -- Basic understanding of Spring Boot and REST APIs +- Gradle 8.x (or use the included Gradle wrapper) - -### Quick Start -1. Start the application: -```bash -./gradlew bootRun -``` - -2. Verify the application is running by accessing the health endpoint: -```bash -curl http://localhost:8080/api/health -``` +2. The application will be available at `http://localhost:8080` ### More Detailed Examples -1. Check Application Status +#### Storing a Data Item ```bash -curl http://localhost:8080/api/status +curl -X PUT http://localhost:8080/api/data/123 \ + -H "Content-Type: application/json" \ + -d '{"content": "Sample content"}' ``` + Expected response: ```json { - "timestamp": "2024-01-01T12:00:00", - "service": "sample-rest-app", - "status": "running" + "id": "123", + "content": "Sample content" } ``` -2. Health Check +#### Retrieving a Data Item ```bash -curl http://localhost:8080/api/health +curl http://localhost:8080/api/data/123 ``` + Expected response: ```json { - "status": "UP", - "message": "Service is healthy" + "id": "123", + "content": "Sample content" } ``` ### Troubleshooting -1. Application Won't Start -- **Problem**: Application fails to start with port binding issues -- **Solution**: - ```bash - # Check if port 8080 is already in use - lsof -i :8080 - # Modify port in config/application-local.yml if needed - ``` - -2. Debugging -- Enable debug logging by modifying `config/application-local.yml`: - ```yaml - logging: - level: - com.example: DEBUG - ``` -- Check logs in console output for detailed information -- Use Spring Boot Actuator endpoints for health monitoring: - ```bash - curl http://localhost:8080/actuator/health - ``` +#### Common Issues + +1. Application fails to start +- **Problem**: Port 8080 already in use +- **Solution**: Modify the port in `config/application-local.yml`: +```yaml +server: + port: 8081 +``` + +2. Logging issues +- **Problem**: Insufficient logging information +- **Solution**: Adjust logging levels in `application-local.yml`: +```yaml +logging: + level: + com.example: DEBUG +``` + +#### Debugging +- Enable debug logging by adding `--debug` flag: +```bash +./gradlew bootRun --debug +``` +- View logs in console output +- Application logs are written to standard output and can be redirected to a file: +```bash +./gradlew bootRun > application.log +``` ## Data Flow -The application processes HTTP requests through a layered architecture, transforming REST calls into data operations with proper error handling and response formatting. +The application implements a simple data flow where REST requests are processed through controllers and stored in an in-memory map structure. ```ascii -Client Request → Controller Layer → Data Processing → Response - ↑ | | ↓ - └──────────────┴────────Error Handling─────────────┘ +Client Request → REST Controller → In-Memory Storage + ↑ | + └────────────────────────────────────┘ + Response with stored data ``` Key component interactions: -1. Controllers receive HTTP requests and validate inputs -2. Request data is mapped to internal data models -3. Business logic processes the data operations -4. Responses are formatted as JSON and returned to the client -5. Error handling is managed across all layers -6. Health monitoring provides real-time system status -7. Logging captures operation details at configurable levels +1. REST requests are received by `SampleController` +2. Controller methods handle GET and PUT operations +3. Data is stored in an in-memory HashMap within the controller +4. Responses are wrapped in Spring's ResponseEntity for proper HTTP status codes +5. Spring Boot handles JSON serialization/deserialization automatically From e6b30c0a01dd1a82650c12d5214bc38d843e6a1b Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Mon, 10 Mar 2025 16:29:18 -0400 Subject: [PATCH 12/22] update q tests config for debugging --- .../tstData/configAmazonQTests/options/ide.general.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ui-tests-starter/tstData/configAmazonQTests/options/ide.general.xml b/ui-tests-starter/tstData/configAmazonQTests/options/ide.general.xml index 9cd270cc445..c622b0c438c 100644 --- a/ui-tests-starter/tstData/configAmazonQTests/options/ide.general.xml +++ b/ui-tests-starter/tstData/configAmazonQTests/options/ide.general.xml @@ -1,7 +1,8 @@ - + + From b730f6d772174ddc45cef82fb93ac771536c01e4 Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Tue, 11 Mar 2025 11:37:33 -0400 Subject: [PATCH 13/22] update config and rename dummy repo files for create readme tests --- .../docTests/scripts/UpdateReadmeWithSpecificChangesScripts.kt | 2 +- .../UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt | 2 +- .../tstData/configAmazonQTests/options/ide.general.xml | 3 +-- .../src/com/{zetcode/tancode => sample/qdoc}/App.java | 2 +- .../tancode => sample/qdoc}/controller/HealthController.java | 2 +- .../tancode => sample/qdoc}/controller/SampleController.java | 2 +- .../com/{zetcode/tancode => sample/qdoc}/model/DataItem.java | 2 +- 7 files changed, 7 insertions(+), 8 deletions(-) rename ui-tests-starter/tstData/qdoc/updateFlow/src/com/{zetcode/tancode => sample/qdoc}/App.java (90%) rename ui-tests-starter/tstData/qdoc/updateFlow/src/com/{zetcode/tancode => sample/qdoc}/controller/HealthController.java (96%) rename ui-tests-starter/tstData/qdoc/updateFlow/src/com/{zetcode/tancode => sample/qdoc}/controller/SampleController.java (95%) rename ui-tests-starter/tstData/qdoc/updateFlow/src/com/{zetcode/tancode => sample/qdoc}/model/DataItem.java (91%) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithSpecificChangesScripts.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithSpecificChangesScripts.kt index db263199051..c891a0df665 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithSpecificChangesScripts.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/UpdateReadmeWithSpecificChangesScripts.kt @@ -46,7 +46,7 @@ val updateReadmeSpecificChangesMakeChangesFlowScript = """ const makeChangeText = await page.waitForSelector('[placeholder="Describe documentation changes"]'); if (!makeChangeText) { console.log('Error: Test Failed'); - console.log('Unable to find placeholder description test in Make Changes flow'); + console.log('Unable to find placeholder description text in Make Changes flow'); } else { console.log('Found expected placeholder text for Make Changes flow'); console.log('Test Successful'); diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt index b83dda511ba..d008eea8875 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt @@ -84,7 +84,7 @@ class UpdateReadmeLatestChangesTest { val readme = File(readmePath.toUri()) assertTrue(readme.exists()) println("result: ${readme.readText()}") - assertTrue(readme.readText().contains("tancode", ignoreCase = true)) + assertTrue(readme.readText().contains("sample/qdoc", ignoreCase = true)) assertTrue(readme.readText().contains("healthcontroller.java", ignoreCase = true)) println("assertions done") } diff --git a/ui-tests-starter/tstData/configAmazonQTests/options/ide.general.xml b/ui-tests-starter/tstData/configAmazonQTests/options/ide.general.xml index c622b0c438c..99ab6758018 100644 --- a/ui-tests-starter/tstData/configAmazonQTests/options/ide.general.xml +++ b/ui-tests-starter/tstData/configAmazonQTests/options/ide.general.xml @@ -1,8 +1,7 @@ - + - diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/App.java b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/sample/qdoc/App.java similarity index 90% rename from ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/App.java rename to ui-tests-starter/tstData/qdoc/updateFlow/src/com/sample/qdoc/App.java index 2c6537580eb..07f0371c403 100644 --- a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/App.java +++ b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/sample/qdoc/App.java @@ -1,4 +1,4 @@ -package com.zetcode.tancode; +package com.sample.qdoc; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/controller/HealthController.java b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/sample/qdoc/controller/HealthController.java similarity index 96% rename from ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/controller/HealthController.java rename to ui-tests-starter/tstData/qdoc/updateFlow/src/com/sample/qdoc/controller/HealthController.java index 091dc79febd..c22644eee7e 100644 --- a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/controller/HealthController.java +++ b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/sample/qdoc/controller/HealthController.java @@ -1,7 +1,7 @@ // Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -package com.zetcode.tancode.controller; +package com.sample.qdoc.controller; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/controller/SampleController.java b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/sample/qdoc/controller/SampleController.java similarity index 95% rename from ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/controller/SampleController.java rename to ui-tests-starter/tstData/qdoc/updateFlow/src/com/sample/qdoc/controller/SampleController.java index 3c7660c4d8d..a2f00e40d1b 100644 --- a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/controller/SampleController.java +++ b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/sample/qdoc/controller/SampleController.java @@ -1,4 +1,4 @@ -package com.zetcode.tancode.controller; +package com.sample.qdoc.controller; import com.example.model.DataItem; import org.springframework.http.ResponseEntity; diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/model/DataItem.java b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/sample/qdoc/model/DataItem.java similarity index 91% rename from ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/model/DataItem.java rename to ui-tests-starter/tstData/qdoc/updateFlow/src/com/sample/qdoc/model/DataItem.java index 4847554c81f..ab7415b7023 100644 --- a/ui-tests-starter/tstData/qdoc/updateFlow/src/com/zetcode/tancode/model/DataItem.java +++ b/ui-tests-starter/tstData/qdoc/updateFlow/src/com/sample/qdoc/model/DataItem.java @@ -1,4 +1,4 @@ -package com.zetcode.tancode.model; +package com.sample.qdoc.model; public class DataItem { private String id; From deb3d94224463ebd634da1057318a75c1dfac7e1 Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Tue, 11 Mar 2025 11:41:30 -0400 Subject: [PATCH 14/22] update build file for create readme tests sample repo --- ui-tests-starter/tstData/qdoc/updateFlow/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/build.gradle b/ui-tests-starter/tstData/qdoc/updateFlow/build.gradle index 1c195edfa02..07aaeeb9d9f 100644 --- a/ui-tests-starter/tstData/qdoc/updateFlow/build.gradle +++ b/ui-tests-starter/tstData/qdoc/updateFlow/build.gradle @@ -4,7 +4,7 @@ plugins { id 'java' } -group = 'com.zetcode.tancode' +group = 'com.sample.qdoc' version = '1.0-SNAPSHOT' sourceCompatibility = '17' From 7264ff0a2b7bd5dce911de66e270608a2848cbd3 Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Tue, 11 Mar 2025 14:30:29 -0400 Subject: [PATCH 15/22] update to print the result on failures only --- .../UpdateReadmeLatestChanges/MakeChangesFlowTest.kt | 7 +++++-- .../PromptedToConfirmFolderTest.kt | 7 +++++-- .../UpdateReadmeLatestChangesTest.kt | 8 +++++--- .../UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt | 7 +++++-- .../UpdateReadmeSpecificChangesTest.kt | 8 +++++--- 5 files changed, 25 insertions(+), 12 deletions(-) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt index b098758d69d..e89121f0e87 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt @@ -80,10 +80,13 @@ class MakeChangesFlowTest { Thread.sleep(30000) val result = executePuppeteerScript(updateReadmeLatestChangesMakeChangesFlowTestScript) - println("result: $result") + + if (result.contains("Error: Test Failed")) { + println("result: $result") + } + assertTrue(result.contains("Test Successful")) assertFalse(result.contains("Error: Test Failed")) - println("assertions done") } } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt index d8668302913..66a19f27ac7 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt @@ -81,10 +81,13 @@ class PromptedToConfirmFolderTest { Thread.sleep(30000) val result = executePuppeteerScript(updateReadmeLatestChangesConfirmOptionsTestScript) - println("result: $result") + + if (result.contains("Error: Test Failed")) { + println("result: $result") + } + assertTrue(result.contains("Test Successful")) assertFalse(result.contains("Error: Test Failed")) - println("assertions done") } } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt index d008eea8875..9f02ce98dbd 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt @@ -78,15 +78,17 @@ class UpdateReadmeLatestChangesTest { // required wait time for the system to be fully ready Thread.sleep(30000) - executePuppeteerScript(updateReadmeLatestChangesTestScript) + val result = executePuppeteerScript(updateReadmeLatestChangesTestScript) + + if (result.contains("Error: Test Failed")) { + println("result: $result") + } val readmePath = Paths.get("tstData", "qdoc", "updateFlow", "README.md") val readme = File(readmePath.toUri()) assertTrue(readme.exists()) - println("result: ${readme.readText()}") assertTrue(readme.readText().contains("sample/qdoc", ignoreCase = true)) assertTrue(readme.readText().contains("healthcontroller.java", ignoreCase = true)) - println("assertions done") } } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt index a7bf7b838ef..48b5fedad04 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt @@ -80,10 +80,13 @@ class MakeChangesFlowTest { Thread.sleep(30000) val result = executePuppeteerScript(updateReadmeSpecificChangesMakeChangesFlowTestScript) - println("result: $result") + + if (result.contains("Error: Test Failed")) { + println("result: $result") + } + assertTrue(result.contains("Test Successful")) assertFalse(result.contains("Error: Test Failed")) - println("assertions done") } } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt index 89e6d0f07ce..e71c70bc345 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt @@ -78,14 +78,16 @@ class UpdateReadmeSpecificChangesTest { // required wait time for the system to be fully ready Thread.sleep(30000) - executePuppeteerScript(updateReadmeSpecificChangesTestScript) + val result = executePuppeteerScript(updateReadmeSpecificChangesTestScript) + + if (result.contains("Error: Test Failed")) { + println("result: $result") + } val readmePath = Paths.get("tstData", "qdoc", "updateFlow", "README.md") val readme = File(readmePath.toUri()) assertTrue(readme.exists()) - println("result: ${readme.readText()}") assertTrue(readme.readText().contains("Installation", ignoreCase = true)) - println("assertions done") } } From de4afb278ce61a41865fcda8a5424194fdbf16c6 Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Wed, 12 Mar 2025 13:37:09 -0400 Subject: [PATCH 16/22] remove unused file from test dummy repo --- ui-tests-starter/tstData/qdoc/updateFlow/dockerfile | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 ui-tests-starter/tstData/qdoc/updateFlow/dockerfile diff --git a/ui-tests-starter/tstData/qdoc/updateFlow/dockerfile b/ui-tests-starter/tstData/qdoc/updateFlow/dockerfile deleted file mode 100644 index ac5a29037f0..00000000000 --- a/ui-tests-starter/tstData/qdoc/updateFlow/dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM eclipse-temurin:17-jdk-focal - -WORKDIR /app - -COPY build/libs/*.jar app.jar -COPY config/ config/ - -EXPOSE 8080 - -ENTRYPOINT ["java", "-jar", "app.jar"] From 50923b7659f94fd71352bf602599b3fbca3af603 Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Thu, 13 Mar 2025 13:33:22 -0400 Subject: [PATCH 17/22] fix detekt issues --- .../UpdateReadmeLatestChanges/MakeChangesFlowTest.kt | 3 +-- .../UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt | 3 +-- .../UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt | 2 +- .../UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt | 2 +- .../UpdateReadmeSpecificChangesTest.kt | 2 +- 5 files changed, 5 insertions(+), 7 deletions(-) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt index e89121f0e87..f2b7182b580 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt @@ -1,7 +1,7 @@ // Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.UpdateReadmeLatestChanges +package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.updateReadmeLatestChanges import com.intellij.driver.sdk.waitForProjectOpen import com.intellij.ide.starter.ci.CIServer @@ -113,4 +113,3 @@ class MakeChangesFlowTest { } } } - diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt index 66a19f27ac7..eb88fd256ba 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt @@ -1,7 +1,7 @@ // Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.UpdateReadmeLatestChanges +package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.updateReadmeLatestChanges import com.intellij.driver.sdk.waitForProjectOpen import com.intellij.ide.starter.ci.CIServer @@ -114,4 +114,3 @@ class PromptedToConfirmFolderTest { } } } - diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt index 9f02ce98dbd..401d0bdecf1 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt @@ -1,7 +1,7 @@ // Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.UpdateReadmeLatestChanges +package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.updateReadmeLatestChanges import com.intellij.driver.sdk.waitForProjectOpen import com.intellij.ide.starter.ci.CIServer diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt index 48b5fedad04..72eca0b4d09 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt @@ -1,7 +1,7 @@ // Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.UpdateReadmeSpecificChanges +package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.updateReadmeSpecificChanges import com.intellij.driver.sdk.waitForProjectOpen import com.intellij.ide.starter.ci.CIServer diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt index e71c70bc345..eaa5fb54728 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt @@ -1,7 +1,7 @@ // Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.UpdateReadmeSpecificChanges +package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.updateReadmeSpecificChanges import com.intellij.driver.sdk.waitForProjectOpen import com.intellij.ide.starter.ci.CIServer From 0ca4932a387d7bacc8941fb49ad982f60176900c Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Thu, 13 Mar 2025 14:07:17 -0400 Subject: [PATCH 18/22] fix detekt issues for package declaration --- .../MakeChangesFlowTest.kt | 0 .../PromptedToConfirmFolderTest.kt | 0 .../UpdateReadmeLatestChangesTest.kt | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/{UpdateReadmeLatestChanges => updateReadmeLatestChanges}/MakeChangesFlowTest.kt (100%) rename ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/{UpdateReadmeLatestChanges => updateReadmeLatestChanges}/PromptedToConfirmFolderTest.kt (100%) rename ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/{UpdateReadmeLatestChanges => updateReadmeLatestChanges}/UpdateReadmeLatestChangesTest.kt (100%) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/updateReadmeLatestChanges/MakeChangesFlowTest.kt similarity index 100% rename from ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/MakeChangesFlowTest.kt rename to ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/updateReadmeLatestChanges/MakeChangesFlowTest.kt diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/updateReadmeLatestChanges/PromptedToConfirmFolderTest.kt similarity index 100% rename from ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/PromptedToConfirmFolderTest.kt rename to ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/updateReadmeLatestChanges/PromptedToConfirmFolderTest.kt diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/updateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt similarity index 100% rename from ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt rename to ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/updateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt From 7f9f8816c4509adb4f47675c3099ef31d7619d65 Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Thu, 13 Mar 2025 14:44:12 -0400 Subject: [PATCH 19/22] move tests cases into single test class for update readme tests --- .../jetbrains/uitests/docTests/Utils.kt | 25 ++++ .../scripts/{Utils.kt => ScriptUtils.kt} | 0 .../UpdateReadmeLatestChangesTest.kt | 99 ++++++++++++--- .../MakeChangesFlowTest.kt | 115 ----------------- .../UpdateReadmeSpecificChangesTest.kt | 60 ++++++--- .../MakeChangesFlowTest.kt | 115 ----------------- .../PromptedToConfirmFolderTest.kt | 116 ------------------ 7 files changed, 152 insertions(+), 378 deletions(-) create mode 100644 ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/Utils.kt rename ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/{Utils.kt => ScriptUtils.kt} (100%) rename ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/{updateReadmeLatestChanges => }/UpdateReadmeLatestChangesTest.kt (55%) delete mode 100644 ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt rename ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/{UpdateReadmeSpecificChanges => }/UpdateReadmeSpecificChangesTest.kt (69%) delete mode 100644 ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/updateReadmeLatestChanges/MakeChangesFlowTest.kt delete mode 100644 ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/updateReadmeLatestChanges/PromptedToConfirmFolderTest.kt diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/Utils.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/Utils.kt new file mode 100644 index 00000000000..9d4d8efd7d3 --- /dev/null +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/Utils.kt @@ -0,0 +1,25 @@ +// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.uitests.docTests + +import java.nio.file.Paths + +fun prepTestData(isCreate: Boolean) { + val process: Process + if (isCreate) { + val path = Paths.get("tstData", "qdoc", "createFlow", "README.md").toUri() + process = ProcessBuilder("rm", path.path).start() + } else { + val path = Paths.get("tstData", "qdoc", "updateFlow", "README.md").toUri() + process = ProcessBuilder("git", "restore", path.path).start() + } + + val exitCode = process.waitFor() + if (exitCode != 0) { + println("Warning: git stash command failed with exit code $exitCode") + process.errorStream.bufferedReader().use { reader -> + println("Error: ${reader.readText()}") + } + } +} diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/Utils.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/ScriptUtils.kt similarity index 100% rename from ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/Utils.kt rename to ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/scripts/ScriptUtils.kt diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/updateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChangesTest.kt similarity index 55% rename from ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/updateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt rename to ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChangesTest.kt index 401d0bdecf1..074979c804b 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/updateReadmeLatestChanges/UpdateReadmeLatestChangesTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChangesTest.kt @@ -1,7 +1,7 @@ // Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.updateReadmeLatestChanges +package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests import com.intellij.driver.sdk.waitForProjectOpen import com.intellij.ide.starter.ci.CIServer @@ -15,6 +15,7 @@ import com.intellij.ide.starter.project.LocalProjectInfo import com.intellij.ide.starter.runner.CurrentTestMethod import com.intellij.ide.starter.runner.Starter import org.junit.jupiter.api.AfterAll +import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test @@ -22,6 +23,9 @@ import org.kodein.di.DI import org.kodein.di.bindSingleton import software.aws.toolkits.jetbrains.uitests.TestCIServer import software.aws.toolkits.jetbrains.uitests.clearAwsXmlFile +import software.aws.toolkits.jetbrains.uitests.docTests.prepTestData +import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeLatestChangesConfirmOptionsTestScript +import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeLatestChangesMakeChangesFlowTestScript import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeLatestChangesTestScript import software.aws.toolkits.jetbrains.uitests.executePuppeteerScript import software.aws.toolkits.jetbrains.uitests.setupTestEnvironment @@ -49,6 +53,84 @@ class UpdateReadmeLatestChangesTest { fun setUp() { // Setup test environment setupTestEnvironment() + // prep test data - restore readme contents + prepTestData(false) + } + + @Test + fun `Make Changes button leads to UPDATE with specific changes flow`() { + val testCase = TestCase( + IdeProductProvider.IC, + LocalProjectInfo( + Paths.get("tstData", "qdoc", "updateFlow") + ) + ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) + + // inject connection + useExistingConnectionForTest() + + Starter.newContext(CurrentTestMethod.hyphenateWithClass(), testCase).apply { + System.getProperty("ui.test.plugins").split(File.pathSeparator).forEach { path -> + pluginConfigurator.installPluginFromPath( + Path.of(path) + ) + } + + copyExistingConfig(Paths.get("tstData", "configAmazonQTests")) + updateGeneralSettings() + }.runIdeWithDriver() + .useDriverAndCloseIde { + waitForProjectOpen() + // required wait time for the system to be fully ready + Thread.sleep(30000) + + val result = executePuppeteerScript(updateReadmeLatestChangesMakeChangesFlowTestScript) + + if (result.contains("Error: Test Failed")) { + println("result: $result") + } + + assertTrue(result.contains("Test Successful")) + assertFalse(result.contains("Error: Test Failed")) + } + } + + @Test + fun `Prompted to confirm selected folder`() { + val testCase = TestCase( + IdeProductProvider.IC, + LocalProjectInfo( + Paths.get("tstData", "qdoc", "updateFlow") + ) + ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) + + // inject connection + useExistingConnectionForTest() + + Starter.newContext(CurrentTestMethod.hyphenateWithClass(), testCase).apply { + System.getProperty("ui.test.plugins").split(File.pathSeparator).forEach { path -> + pluginConfigurator.installPluginFromPath( + Path.of(path) + ) + } + + copyExistingConfig(Paths.get("tstData", "configAmazonQTests")) + updateGeneralSettings() + }.runIdeWithDriver() + .useDriverAndCloseIde { + waitForProjectOpen() + // required wait time for the system to be fully ready + Thread.sleep(30000) + + val result = executePuppeteerScript(updateReadmeLatestChangesConfirmOptionsTestScript) + + if (result.contains("Error: Test Failed")) { + println("result: $result") + } + + assertTrue(result.contains("Test Successful")) + assertFalse(result.contains("Error: Test Failed")) + } } @Test @@ -98,20 +180,5 @@ class UpdateReadmeLatestChangesTest { fun clearAwsXml() { clearAwsXmlFile() } - - @JvmStatic - @AfterAll - fun tearDown() { - val path = Paths.get("tstData", "qdoc", "updateFlow", "README.md").toUri() - - val process = ProcessBuilder("git", "restore", path.path).start() - val exitCode = process.waitFor() - if (exitCode != 0) { - println("Warning: git stash command failed with exit code $exitCode") - process.errorStream.bufferedReader().use { reader -> - println("Error: ${reader.readText()}") - } - } - } } } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt deleted file mode 100644 index 72eca0b4d09..00000000000 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/MakeChangesFlowTest.kt +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. -// SPDX-License-Identifier: Apache-2.0 - -package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.updateReadmeSpecificChanges - -import com.intellij.driver.sdk.waitForProjectOpen -import com.intellij.ide.starter.ci.CIServer -import com.intellij.ide.starter.config.ConfigurationStorage -import com.intellij.ide.starter.di.di -import com.intellij.ide.starter.driver.engine.runIdeWithDriver -import com.intellij.ide.starter.ide.IdeProductProvider -import com.intellij.ide.starter.junit5.hyphenateWithClass -import com.intellij.ide.starter.models.TestCase -import com.intellij.ide.starter.project.LocalProjectInfo -import com.intellij.ide.starter.runner.CurrentTestMethod -import com.intellij.ide.starter.runner.Starter -import org.junit.jupiter.api.AfterAll -import org.junit.jupiter.api.Assertions.assertFalse -import org.junit.jupiter.api.Assertions.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -import org.kodein.di.DI -import org.kodein.di.bindSingleton -import software.aws.toolkits.jetbrains.uitests.TestCIServer -import software.aws.toolkits.jetbrains.uitests.clearAwsXmlFile -import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeSpecificChangesMakeChangesFlowTestScript -import software.aws.toolkits.jetbrains.uitests.executePuppeteerScript -import software.aws.toolkits.jetbrains.uitests.setupTestEnvironment -import software.aws.toolkits.jetbrains.uitests.useExistingConnectionForTest -import java.io.File -import java.nio.file.Path -import java.nio.file.Paths - -class MakeChangesFlowTest { - init { - di = DI { - extend(di) - bindSingleton(overrides = true) { TestCIServer } - val defaults = ConfigurationStorage.instance().defaults.toMutableMap().apply { - put("LOG_ENVIRONMENT_VARIABLES", (!System.getenv("CI").toBoolean()).toString()) - } - - bindSingleton(overrides = true) { - ConfigurationStorage(this, defaults) - } - } - } - - @BeforeEach - fun setUp() { - // Setup test environment - setupTestEnvironment() - } - - @Test - fun `Make changes button leads to UPDATE with specific changes flow`() { - val testCase = TestCase( - IdeProductProvider.IC, - LocalProjectInfo( - Paths.get("tstData", "qdoc", "updateFlow") - ) - ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) - - // inject connection - useExistingConnectionForTest() - - Starter.newContext(CurrentTestMethod.hyphenateWithClass(), testCase).apply { - System.getProperty("ui.test.plugins").split(File.pathSeparator).forEach { path -> - pluginConfigurator.installPluginFromPath( - Path.of(path) - ) - } - - copyExistingConfig(Paths.get("tstData", "configAmazonQTests")) - updateGeneralSettings() - }.runIdeWithDriver() - .useDriverAndCloseIde { - waitForProjectOpen() - // required wait time for the system to be fully ready - Thread.sleep(30000) - - val result = executePuppeteerScript(updateReadmeSpecificChangesMakeChangesFlowTestScript) - - if (result.contains("Error: Test Failed")) { - println("result: $result") - } - - assertTrue(result.contains("Test Successful")) - assertFalse(result.contains("Error: Test Failed")) - } - } - - companion object { - @JvmStatic - @AfterAll - fun clearAwsXml() { - clearAwsXmlFile() - } - - @JvmStatic - @AfterAll - fun tearDown() { - val path = Paths.get("tstData", "qdoc", "updateFlow", "README.md").toUri() - - val process = ProcessBuilder("git", "restore", path.path).start() - val exitCode = process.waitFor() - if (exitCode != 0) { - println("Warning: git stash command failed with exit code $exitCode") - process.errorStream.bufferedReader().use { reader -> - println("Error: ${reader.readText()}") - } - } - } - } -} diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChangesTest.kt similarity index 69% rename from ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt rename to ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChangesTest.kt index eaa5fb54728..432ab74fa47 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChanges/UpdateReadmeSpecificChangesTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChangesTest.kt @@ -1,7 +1,7 @@ // Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.updateReadmeSpecificChanges +package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests import com.intellij.driver.sdk.waitForProjectOpen import com.intellij.ide.starter.ci.CIServer @@ -15,6 +15,7 @@ import com.intellij.ide.starter.project.LocalProjectInfo import com.intellij.ide.starter.runner.CurrentTestMethod import com.intellij.ide.starter.runner.Starter import org.junit.jupiter.api.AfterAll +import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test @@ -22,6 +23,8 @@ import org.kodein.di.DI import org.kodein.di.bindSingleton import software.aws.toolkits.jetbrains.uitests.TestCIServer import software.aws.toolkits.jetbrains.uitests.clearAwsXmlFile +import software.aws.toolkits.jetbrains.uitests.docTests.prepTestData +import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeSpecificChangesMakeChangesFlowTestScript import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeSpecificChangesTestScript import software.aws.toolkits.jetbrains.uitests.executePuppeteerScript import software.aws.toolkits.jetbrains.uitests.setupTestEnvironment @@ -49,6 +52,46 @@ class UpdateReadmeSpecificChangesTest { fun setUp() { // Setup test environment setupTestEnvironment() + // prep test data - restore readme contents + prepTestData(false) + } + + @Test + fun `Make changes button leads to UPDATE with specific changes flow`() { + val testCase = TestCase( + IdeProductProvider.IC, + LocalProjectInfo( + Paths.get("tstData", "qdoc", "updateFlow") + ) + ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) + + // inject connection + useExistingConnectionForTest() + + Starter.newContext(CurrentTestMethod.hyphenateWithClass(), testCase).apply { + System.getProperty("ui.test.plugins").split(File.pathSeparator).forEach { path -> + pluginConfigurator.installPluginFromPath( + Path.of(path) + ) + } + + copyExistingConfig(Paths.get("tstData", "configAmazonQTests")) + updateGeneralSettings() + }.runIdeWithDriver() + .useDriverAndCloseIde { + waitForProjectOpen() + // required wait time for the system to be fully ready + Thread.sleep(30000) + + val result = executePuppeteerScript(updateReadmeSpecificChangesMakeChangesFlowTestScript) + + if (result.contains("Error: Test Failed")) { + println("result: $result") + } + + assertTrue(result.contains("Test Successful")) + assertFalse(result.contains("Error: Test Failed")) + } } @Test @@ -97,20 +140,5 @@ class UpdateReadmeSpecificChangesTest { fun clearAwsXml() { clearAwsXmlFile() } - - @JvmStatic - @AfterAll - fun tearDown() { - val path = Paths.get("tstData", "qdoc", "updateFlow", "README.md").toUri() - - val process = ProcessBuilder("git", "restore", path.path).start() - val exitCode = process.waitFor() - if (exitCode != 0) { - println("Warning: git stash command failed with exit code $exitCode") - process.errorStream.bufferedReader().use { reader -> - println("Error: ${reader.readText()}") - } - } - } } } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/updateReadmeLatestChanges/MakeChangesFlowTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/updateReadmeLatestChanges/MakeChangesFlowTest.kt deleted file mode 100644 index f2b7182b580..00000000000 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/updateReadmeLatestChanges/MakeChangesFlowTest.kt +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. -// SPDX-License-Identifier: Apache-2.0 - -package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.updateReadmeLatestChanges - -import com.intellij.driver.sdk.waitForProjectOpen -import com.intellij.ide.starter.ci.CIServer -import com.intellij.ide.starter.config.ConfigurationStorage -import com.intellij.ide.starter.di.di -import com.intellij.ide.starter.driver.engine.runIdeWithDriver -import com.intellij.ide.starter.ide.IdeProductProvider -import com.intellij.ide.starter.junit5.hyphenateWithClass -import com.intellij.ide.starter.models.TestCase -import com.intellij.ide.starter.project.LocalProjectInfo -import com.intellij.ide.starter.runner.CurrentTestMethod -import com.intellij.ide.starter.runner.Starter -import org.junit.jupiter.api.AfterAll -import org.junit.jupiter.api.Assertions.assertFalse -import org.junit.jupiter.api.Assertions.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -import org.kodein.di.DI -import org.kodein.di.bindSingleton -import software.aws.toolkits.jetbrains.uitests.TestCIServer -import software.aws.toolkits.jetbrains.uitests.clearAwsXmlFile -import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeLatestChangesMakeChangesFlowTestScript -import software.aws.toolkits.jetbrains.uitests.executePuppeteerScript -import software.aws.toolkits.jetbrains.uitests.setupTestEnvironment -import software.aws.toolkits.jetbrains.uitests.useExistingConnectionForTest -import java.io.File -import java.nio.file.Path -import java.nio.file.Paths - -class MakeChangesFlowTest { - init { - di = DI { - extend(di) - bindSingleton(overrides = true) { TestCIServer } - val defaults = ConfigurationStorage.instance().defaults.toMutableMap().apply { - put("LOG_ENVIRONMENT_VARIABLES", (!System.getenv("CI").toBoolean()).toString()) - } - - bindSingleton(overrides = true) { - ConfigurationStorage(this, defaults) - } - } - } - - @BeforeEach - fun setUp() { - // Setup test environment - setupTestEnvironment() - } - - @Test - fun `Make Changes button leads to UPDATE with specific changes flow`() { - val testCase = TestCase( - IdeProductProvider.IC, - LocalProjectInfo( - Paths.get("tstData", "qdoc", "updateFlow") - ) - ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) - - // inject connection - useExistingConnectionForTest() - - Starter.newContext(CurrentTestMethod.hyphenateWithClass(), testCase).apply { - System.getProperty("ui.test.plugins").split(File.pathSeparator).forEach { path -> - pluginConfigurator.installPluginFromPath( - Path.of(path) - ) - } - - copyExistingConfig(Paths.get("tstData", "configAmazonQTests")) - updateGeneralSettings() - }.runIdeWithDriver() - .useDriverAndCloseIde { - waitForProjectOpen() - // required wait time for the system to be fully ready - Thread.sleep(30000) - - val result = executePuppeteerScript(updateReadmeLatestChangesMakeChangesFlowTestScript) - - if (result.contains("Error: Test Failed")) { - println("result: $result") - } - - assertTrue(result.contains("Test Successful")) - assertFalse(result.contains("Error: Test Failed")) - } - } - - companion object { - @JvmStatic - @AfterAll - fun clearAwsXml() { - clearAwsXmlFile() - } - - @JvmStatic - @AfterAll - fun tearDown() { - val path = Paths.get("tstData", "qdoc", "updateFlow", "README.md").toUri() - - val process = ProcessBuilder("git", "restore", path.path).start() - val exitCode = process.waitFor() - if (exitCode != 0) { - println("Warning: git stash command failed with exit code $exitCode") - process.errorStream.bufferedReader().use { reader -> - println("Error: ${reader.readText()}") - } - } - } - } -} diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/updateReadmeLatestChanges/PromptedToConfirmFolderTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/updateReadmeLatestChanges/PromptedToConfirmFolderTest.kt deleted file mode 100644 index eb88fd256ba..00000000000 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/updateReadmeLatestChanges/PromptedToConfirmFolderTest.kt +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. -// SPDX-License-Identifier: Apache-2.0 - -package software.aws.toolkits.jetbrains.uitests.docTests.updateReadmeTests.updateReadmeLatestChanges - -import com.intellij.driver.sdk.waitForProjectOpen -import com.intellij.ide.starter.ci.CIServer -import com.intellij.ide.starter.config.ConfigurationStorage -import com.intellij.ide.starter.di.di -import com.intellij.ide.starter.driver.engine.runIdeWithDriver -import com.intellij.ide.starter.ide.IdeProductProvider -import com.intellij.ide.starter.junit5.hyphenateWithClass -import com.intellij.ide.starter.models.TestCase -import com.intellij.ide.starter.project.LocalProjectInfo -import com.intellij.ide.starter.runner.CurrentTestMethod -import com.intellij.ide.starter.runner.Starter -import org.junit.jupiter.api.AfterAll -import org.junit.jupiter.api.Assertions.assertFalse -import org.junit.jupiter.api.Assertions.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -import org.kodein.di.DI -import org.kodein.di.bindSingleton -import software.aws.toolkits.jetbrains.uitests.TestCIServer -import software.aws.toolkits.jetbrains.uitests.clearAwsXmlFile -import software.aws.toolkits.jetbrains.uitests.docTests.scripts.updateReadmeLatestChangesConfirmOptionsTestScript -import software.aws.toolkits.jetbrains.uitests.executePuppeteerScript -import software.aws.toolkits.jetbrains.uitests.setupTestEnvironment -import software.aws.toolkits.jetbrains.uitests.useExistingConnectionForTest -import java.io.File -import java.nio.file.Path -import java.nio.file.Paths - -class PromptedToConfirmFolderTest { - - init { - di = DI { - extend(di) - bindSingleton(overrides = true) { TestCIServer } - val defaults = ConfigurationStorage.instance().defaults.toMutableMap().apply { - put("LOG_ENVIRONMENT_VARIABLES", (!System.getenv("CI").toBoolean()).toString()) - } - - bindSingleton(overrides = true) { - ConfigurationStorage(this, defaults) - } - } - } - - @BeforeEach - fun setUp() { - // Setup test environment - setupTestEnvironment() - } - - @Test - fun `Prompted to confirm selected folder`() { - val testCase = TestCase( - IdeProductProvider.IC, - LocalProjectInfo( - Paths.get("tstData", "qdoc", "updateFlow") - ) - ).useRelease(System.getProperty("org.gradle.project.ideProfileName")) - - // inject connection - useExistingConnectionForTest() - - Starter.newContext(CurrentTestMethod.hyphenateWithClass(), testCase).apply { - System.getProperty("ui.test.plugins").split(File.pathSeparator).forEach { path -> - pluginConfigurator.installPluginFromPath( - Path.of(path) - ) - } - - copyExistingConfig(Paths.get("tstData", "configAmazonQTests")) - updateGeneralSettings() - }.runIdeWithDriver() - .useDriverAndCloseIde { - waitForProjectOpen() - // required wait time for the system to be fully ready - Thread.sleep(30000) - - val result = executePuppeteerScript(updateReadmeLatestChangesConfirmOptionsTestScript) - - if (result.contains("Error: Test Failed")) { - println("result: $result") - } - - assertTrue(result.contains("Test Successful")) - assertFalse(result.contains("Error: Test Failed")) - } - } - - companion object { - @JvmStatic - @AfterAll - fun clearAwsXml() { - clearAwsXmlFile() - } - - @JvmStatic - @AfterAll - fun tearDown() { - val path = Paths.get("tstData", "qdoc", "updateFlow", "README.md").toUri() - - val process = ProcessBuilder("git", "restore", path.path).start() - val exitCode = process.waitFor() - if (exitCode != 0) { - println("Warning: git stash command failed with exit code $exitCode") - process.errorStream.bufferedReader().use { reader -> - println("Error: ${reader.readText()}") - } - } - } - } -} From e99c056408d0e1880cd038ec5da9b2770bb4e1ac Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Thu, 13 Mar 2025 15:14:53 -0400 Subject: [PATCH 20/22] move envSetup to BeforeAll and testDataSetup to BeforeEach --- .../UpdateReadmeLatestChangesTest.kt | 12 +++++++++--- .../UpdateReadmeSpecificChangesTest.kt | 12 +++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChangesTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChangesTest.kt index 074979c804b..7ada936bb9d 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChangesTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChangesTest.kt @@ -17,6 +17,7 @@ import com.intellij.ide.starter.runner.Starter import org.junit.jupiter.api.AfterAll import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.BeforeAll import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.kodein.di.DI @@ -50,9 +51,7 @@ class UpdateReadmeLatestChangesTest { } @BeforeEach - fun setUp() { - // Setup test environment - setupTestEnvironment() + fun setUpTest() { // prep test data - restore readme contents prepTestData(false) } @@ -180,5 +179,12 @@ class UpdateReadmeLatestChangesTest { fun clearAwsXml() { clearAwsXmlFile() } + + @JvmStatic + @BeforeAll + fun setUpTestClass(): Unit { + // Setup test environment + setupTestEnvironment() + } } } diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChangesTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChangesTest.kt index 432ab74fa47..869861a9da8 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChangesTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChangesTest.kt @@ -17,6 +17,7 @@ import com.intellij.ide.starter.runner.Starter import org.junit.jupiter.api.AfterAll import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.BeforeAll import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.kodein.di.DI @@ -49,9 +50,7 @@ class UpdateReadmeSpecificChangesTest { } @BeforeEach - fun setUp() { - // Setup test environment - setupTestEnvironment() + fun setUpTest() { // prep test data - restore readme contents prepTestData(false) } @@ -140,5 +139,12 @@ class UpdateReadmeSpecificChangesTest { fun clearAwsXml() { clearAwsXmlFile() } + + @JvmStatic + @BeforeAll + fun setUpTestClass(): Unit { + // Setup test environment + setupTestEnvironment() + } } } From cc99a6ce30cdc254d213bbfcc6fda3f911a979db Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Thu, 13 Mar 2025 15:17:21 -0400 Subject: [PATCH 21/22] fix detekt issues --- .../updateReadmeTests/UpdateReadmeSpecificChangesTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChangesTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChangesTest.kt index 869861a9da8..da34bf27e12 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChangesTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeSpecificChangesTest.kt @@ -142,7 +142,7 @@ class UpdateReadmeSpecificChangesTest { @JvmStatic @BeforeAll - fun setUpTestClass(): Unit { + fun setUpTestClass() { // Setup test environment setupTestEnvironment() } From e828a95268381c5c3cb01516092f82a31424c5c9 Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Thu, 13 Mar 2025 15:17:21 -0400 Subject: [PATCH 22/22] fix detekt issues --- .../docTests/updateReadmeTests/UpdateReadmeLatestChangesTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChangesTest.kt b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChangesTest.kt index 7ada936bb9d..3b76fe41c2d 100644 --- a/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChangesTest.kt +++ b/ui-tests-starter/tst-243+/software/aws/toolkits/jetbrains/uitests/docTests/updateReadmeTests/UpdateReadmeLatestChangesTest.kt @@ -182,7 +182,7 @@ class UpdateReadmeLatestChangesTest { @JvmStatic @BeforeAll - fun setUpTestClass(): Unit { + fun setUpTestClass() { // Setup test environment setupTestEnvironment() }