From 801c952439a139f5c1eaeea750dd6b3ab6669b95 Mon Sep 17 00:00:00 2001 From: Tatiana Bontsevich Date: Sat, 11 Jan 2025 21:32:58 +0300 Subject: [PATCH 1/6] Implement new environment - /main --- .github/workflows/ci.yml | 7 ++++++- packages/ui/test/ui_test/po/chat.page.js | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4f285b0..ddeed67 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,6 +7,11 @@ on: jobs: build: runs-on: ubuntu-latest + strategy: + matrix: + environment: + - { SERVER_HOST: "https://eye.projectalita.ai", SERVER_PID: "1396", SERVER_TOKEN: "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ1dWlkIjoiZjZiODUxMjMtODk0YS00OWJlLTg5YzQtNDZmZmFhZDVkMDE4IiwiZXhwaXJlcyI6IjIwMjUtMDctMTBUMTU6MDgifQ.4LFVbtLPacqzcvANGjjXJ-oHe-fxQK-haeq850Bl6FkNZhpgV12MIMuJSuCUwgAKxo_OWIonikTeKJCN46j9Lw" } + - { SERVER_HOST: "https://eye.projectalita.ai/main", SERVER_PID: "159", SERVER_TOKEN: "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ1dWlkIjoiNjhlMzI3MjItYWIxNy00NmVmLThmNWYtNmFiYjdhOTg3NDIwIiwiZXhwaXJlcyI6IjIwMjUtMDctMTBUMTU6MDcifQ.e1X78yDbwBDrZXaLUjzV_P1NWf56X8COm2YQpqCJtP5L8rjnPBJoe0yz8MqxQn0DnU80WY7YknJh_W_2nUNy1A" } steps: - uses: actions/checkout@v4 @@ -24,7 +29,7 @@ jobs: run: | cd packages/ui/test/plugin npm install - node server.js -sh https://eye.projectalita.ai -spid 1396 -muid 596884aa-fc90-4e19-8de0-8ef90fa5a9b6 -st eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ1dWlkIjoiOTJkNmRjM2MtNTRmNi00NWI0LWFhM2MtNGNiZjM0MjkzMWFlIiwiZXhwaXJlcyI6IjIwMjUtMDEtMTVUMTQ6NTAifQ.N-wISbLTwvd89-mvqqdxlbNrFJj9CvM3KgmH58idf44OIe9wl1xt_7GzWCpgpOgjKlASdsjLKiQy4gIHCVVvMg & + node server.js -sh ${{ matrix.environment.SERVER_HOST }} -spid ${{ matrix.environment.SERVER_PID }} -muid 596884aa-fc90-4e19-8de0-8ef90fa5a9b6 -st ${{ matrix.environment.SERVER_TOKEN }} & - name: Start chat/webpack run run: | cd packages/ui diff --git a/packages/ui/test/ui_test/po/chat.page.js b/packages/ui/test/ui_test/po/chat.page.js index 3d599c4..84c3d30 100644 --- a/packages/ui/test/ui_test/po/chat.page.js +++ b/packages/ui/test/ui_test/po/chat.page.js @@ -8,7 +8,7 @@ export default class ChatPage { this.sendButton = page.locator('button[data-testid="SendButton"]'); this.chatArea = page.locator('.MuiList-root'); this.chatAreaAnswer = page.locator('.MuiList-root > li:nth-child(2) > div:nth-child(2) span'); - this.chatAreaPromptResult = page.locator('ul li div>p[style="margin-block-start: 0px;"]:nth-child(1)'); + this.chatAreaPromptResult = page.locator('ul li:nth-child(2)>div:nth-child(2)'); this.refreshButton = page.locator('[data-testid="RefreshOutlinedIcon"]'); this.scrollDownArrow = page.locator('[data-testid="KeyboardDoubleArrowDownOutlinedIcon"]'); this.cleanChatButton = page.locator('[data-testid="ClearTheChatButton"]'); From 6d9429b2242d5f2b4f9f5e5cb7269e7c4da1663f Mon Sep 17 00:00:00 2001 From: Tatiana Bontsevich Date: Sat, 18 Jan 2025 21:23:26 +0300 Subject: [PATCH 2/6] Implement new test-cases "Delete a message, clean the chat" --- .github/workflows/ci.yml | 2 + packages/ui/test/ui_test/po/chat.page.js | 68 ++++++++++++++++++++++- packages/ui/test/ui_test/tests/ui.spec.js | 36 ++++++++++++ 3 files changed, 105 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ddeed67..bb4d3ec 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,8 @@ name: Continuous Integration on: + push: + branches: [ main ] pull_request: branches: [ main ] diff --git a/packages/ui/test/ui_test/po/chat.page.js b/packages/ui/test/ui_test/po/chat.page.js index 84c3d30..6cb9d30 100644 --- a/packages/ui/test/ui_test/po/chat.page.js +++ b/packages/ui/test/ui_test/po/chat.page.js @@ -7,6 +7,7 @@ export default class ChatPage { this.messageField = page.locator('textarea#standard-multiline-static'); this.sendButton = page.locator('button[data-testid="SendButton"]'); this.chatArea = page.locator('.MuiList-root'); + this.chatAreaUserMessage = page.locator('ul li:nth-child(1)>div:nth-child(2)'); this.chatAreaAnswer = page.locator('.MuiList-root > li:nth-child(2) > div:nth-child(2) span'); this.chatAreaPromptResult = page.locator('ul li:nth-child(2)>div:nth-child(2)'); this.refreshButton = page.locator('[data-testid="RefreshOutlinedIcon"]'); @@ -21,6 +22,14 @@ export default class ChatPage { this.chosenPromptName = page.locator('//button[@data-testid="SettingsButton"]/preceding-sibling::span'); this.serverError = page.locator('#webpack-dev-server-client-overlay'); this.alertError = page.locator('svg[data-testid="ErrorOutlineIcon"]'); + this.alertMessageIsCopied = page.locator('div.MuiAlert-root'); + this.tooltip = page.locator('.MuiTooltip-tooltip'); + this.alertToDeleteMsgTitle = page.locator('#alert-dialog-title'); + this.alertToDeleteMsgContent = page.locator('#alert-dialog-description'); + this.alertToDeleteMsgBtnCancel = page.locator('div[aria-describedby="alert-dialog-description"] button:nth-child(1)'); + this.alertToDeleteMsgBtnConfirm = page.locator('div[aria-describedby="alert-dialog-description"] button:nth-child(2)'); + this.copyMsgBtn = page.locator('[aria-label="Copy to clipboard"]'); + this.deleteMsgBtn = page.locator('[aria-label="Delete"]'); } async openChat() { @@ -54,7 +63,8 @@ export default class ChatPage { } async changePromptModalVariable(index, inputText) { - await this.promptModalVariable.nth(index).type(inputText); + await this.promptModalVariable.nth(index).fill(''); + await this.promptModalVariable.nth(index).fill(inputText); } async applyPrompt() { @@ -72,6 +82,10 @@ export default class ChatPage { await expect(this.promptModalHeader).toBeVisible(); } + async verifyPromptModalClosed() { + await expect(this.promptModalHeader).not.toBeVisible(); + } + async sendMessage() { await this.sendButton.click(); await this.page.waitForTimeout(500) @@ -108,4 +122,56 @@ export default class ChatPage { throw new Error('Error alert is displayed.'); } } + + async verifyDeleteMessageBtnAndClick(tooltipText) { + await this.chatAreaPromptResult.waitFor(); + await this.chatAreaPromptResult.hover(); + await this.deleteMsgBtn.hover(); + await expect(this.tooltip).toHaveText(tooltipText); + await this.deleteMsgBtn.click(); + } + + async verifyCopyMessageBtnAndClick(tooltipText) { + await this.chatAreaPromptResult.locator('span').waitFor(); + await this.chatAreaPromptResult.hover(); + await this.copyMsgBtn.hover(); + await expect(this.tooltip).toHaveText(tooltipText); + await this.copyMsgBtn.click(); + } + + async checkDeleteMessageAlertComponents(alertText) { + await this.alertToDeleteMsgTitle.waitFor(); + await expect(this.alertToDeleteMsgTitle).toHaveText('Warning'); + await expect(this.alertToDeleteMsgContent).toHaveText(alertText); + await expect(this.alertToDeleteMsgBtnCancel).toHaveText('Cancel'); + await expect(this.alertToDeleteMsgBtnConfirm).toHaveText('Confirm'); + } + + async confirmDeleteMessage() { + await this.alertToDeleteMsgBtnConfirm.click(); + } + + async verifyMessageIsDeleted() { + await expect(this.chatAreaPromptResult).not.toBeVisible(); + } + + async verifyChatIsCleaned() { + await expect(this.chatAreaUserMessage).not.toBeVisible(); + await expect(this.chatAreaPromptResult).not.toBeVisible(); + } + + async verifyCopyMessageAlert(alertText) { + await this.alertMessageIsCopied.waitFor(); + await expect(this.alertMessageIsCopied).toHaveText(alertText); + } + + async verifyMessageIsCopiedToClipboard(copiedText) { + const clipboardContent = await page.evaluate(() => navigator.clipboard.readText()); + await expect(clipboardContent).toBe(copiedText); + } + + async clickCleanChatBtn() { + await this.chatAreaAnswer.waitFor(); + await this.cleanChatButton.click(); + } } diff --git a/packages/ui/test/ui_test/tests/ui.spec.js b/packages/ui/test/ui_test/tests/ui.spec.js index 30cc1e7..a874d7a 100644 --- a/packages/ui/test/ui_test/tests/ui.spec.js +++ b/packages/ui/test/ui_test/tests/ui.spec.js @@ -71,7 +71,11 @@ test.describe('UI tests', () => { await chatPage.applyPrompt(); await chatPage.verifyChosenPrompt('Test Cases Generator'); await chatPage.verifySettingsOpenPromptModal(); + await chatPage.changePromptModalVariable(0,'The project is an online learning platform aimed at delivering interactive courses to users.' + + 'It features user registration, course management, progress tracking, and certificate generation.'); await chatPage.applyPrompt(); + await chatPage.verifyPromptModalClosed(); + await chatPage.verifyChosenPrompt('Test Cases Generator'); }); test('Verify user can choose prompt and receive result', async ({ page }) => { @@ -85,4 +89,36 @@ test.describe('UI tests', () => { await chatPage.sendMessage(); await chatPage.verifyChatPromptResultExists(); }); + + test('Verify user can delete one answer', async ({ page }) => { + const chatPage = new ChatPage(page); + await chatPage.openChat(); + await chatPage.typeInMessageField('start'); + await chatPage.sendMessage(); + await chatPage.verifyDeleteMessageBtnAndClick('Delete'); + await chatPage.checkDeleteMessageAlertComponents(`The deleted message can't be restored. Are you sure to delete the message?`); + await chatPage.confirmDeleteMessage(); + await chatPage.verifyMessageIsDeleted(); + }); + + test('Verify user can clean the chat', async ({ page }) => { + const chatPage = new ChatPage(page); + await chatPage.openChat(); + await chatPage.typeInMessageField('start'); + await chatPage.sendMessage(); + await chatPage.clickCleanChatBtn(); + await chatPage.checkDeleteMessageAlertComponents(`The deleted messages can't be restored. Are you sure to delete all the messages?`); + await chatPage.confirmDeleteMessage(); + await chatPage.verifyChatIsCleaned(); + }); + + test.skip('Verify user can copy an answer to clipboard', async ({ page }) => { + const chatPage = new ChatPage(page); + await chatPage.openChat(); + await chatPage.typeInMessageField('start'); + await chatPage.sendMessage(); + await chatPage.verifyCopyMessageBtnAndClick('Copy to clipboard'); + await chatPage.verifyCopyMessageAlert('The message has been copied to the clipboard'); + await chatPage.verifyMessageIsCopiedToClipboard('Sure! How can I assist you today?'); + }); }); From 38bd19437906f0a7988765f9e8c75ce735841cdb Mon Sep 17 00:00:00 2001 From: Tatiana Bontsevich Date: Tue, 28 Jan 2025 21:14:16 +0300 Subject: [PATCH 3/6] Implement GitHub Secrets --- .github/workflows/ci.yml | 12 +++++++++--- packages/ui/test/ui_test/po/chat.page.js | 18 ------------------ packages/ui/test/ui_test/tests/ui.spec.js | 2 +- 3 files changed, 10 insertions(+), 22 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bb4d3ec..32fcd65 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,8 +12,14 @@ jobs: strategy: matrix: environment: - - { SERVER_HOST: "https://eye.projectalita.ai", SERVER_PID: "1396", SERVER_TOKEN: "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ1dWlkIjoiZjZiODUxMjMtODk0YS00OWJlLTg5YzQtNDZmZmFhZDVkMDE4IiwiZXhwaXJlcyI6IjIwMjUtMDctMTBUMTU6MDgifQ.4LFVbtLPacqzcvANGjjXJ-oHe-fxQK-haeq850Bl6FkNZhpgV12MIMuJSuCUwgAKxo_OWIonikTeKJCN46j9Lw" } - - { SERVER_HOST: "https://eye.projectalita.ai/main", SERVER_PID: "159", SERVER_TOKEN: "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ1dWlkIjoiNjhlMzI3MjItYWIxNy00NmVmLThmNWYtNmFiYjdhOTg3NDIwIiwiZXhwaXJlcyI6IjIwMjUtMDctMTBUMTU6MDcifQ.e1X78yDbwBDrZXaLUjzV_P1NWf56X8COm2YQpqCJtP5L8rjnPBJoe0yz8MqxQn0DnU80WY7YknJh_W_2nUNy1A" } + - SERVER_HOST: "${{ secrets.SERVER_HOST_AI }}" + SERVER_PID: "${{ secrets.SERVER_PID_AI }}" + SERVER_UID: "${{ secrets.SERVER_UID }}" + SERVER_TOKEN: "${{ secrets.SERVER_TOKEN_AI }}" + - SERVER_HOST: "${{ secrets.SERVER_HOST_MAIN }}" + SERVER_PID: "${{ secrets.SERVER_PID_MAIN }}" + SERVER_UID: "${{ secrets.SERVER_UID }}" + SERVER_TOKEN: "${{ secrets.SERVER_TOKEN_MAIN }}" steps: - uses: actions/checkout@v4 @@ -31,7 +37,7 @@ jobs: run: | cd packages/ui/test/plugin npm install - node server.js -sh ${{ matrix.environment.SERVER_HOST }} -spid ${{ matrix.environment.SERVER_PID }} -muid 596884aa-fc90-4e19-8de0-8ef90fa5a9b6 -st ${{ matrix.environment.SERVER_TOKEN }} & + node server.js -sh ${{ matrix.environment.SERVER_HOST }} -spid ${{ matrix.environment.SERVER_PID }} -muid ${{ matrix.environment.SERVER_UID }} -st ${{ matrix.environment.SERVER_TOKEN }} & - name: Start chat/webpack run run: | cd packages/ui diff --git a/packages/ui/test/ui_test/po/chat.page.js b/packages/ui/test/ui_test/po/chat.page.js index 6cb9d30..a4217cf 100644 --- a/packages/ui/test/ui_test/po/chat.page.js +++ b/packages/ui/test/ui_test/po/chat.page.js @@ -131,14 +131,6 @@ export default class ChatPage { await this.deleteMsgBtn.click(); } - async verifyCopyMessageBtnAndClick(tooltipText) { - await this.chatAreaPromptResult.locator('span').waitFor(); - await this.chatAreaPromptResult.hover(); - await this.copyMsgBtn.hover(); - await expect(this.tooltip).toHaveText(tooltipText); - await this.copyMsgBtn.click(); - } - async checkDeleteMessageAlertComponents(alertText) { await this.alertToDeleteMsgTitle.waitFor(); await expect(this.alertToDeleteMsgTitle).toHaveText('Warning'); @@ -160,16 +152,6 @@ export default class ChatPage { await expect(this.chatAreaPromptResult).not.toBeVisible(); } - async verifyCopyMessageAlert(alertText) { - await this.alertMessageIsCopied.waitFor(); - await expect(this.alertMessageIsCopied).toHaveText(alertText); - } - - async verifyMessageIsCopiedToClipboard(copiedText) { - const clipboardContent = await page.evaluate(() => navigator.clipboard.readText()); - await expect(clipboardContent).toBe(copiedText); - } - async clickCleanChatBtn() { await this.chatAreaAnswer.waitFor(); await this.cleanChatButton.click(); diff --git a/packages/ui/test/ui_test/tests/ui.spec.js b/packages/ui/test/ui_test/tests/ui.spec.js index a874d7a..c416b42 100644 --- a/packages/ui/test/ui_test/tests/ui.spec.js +++ b/packages/ui/test/ui_test/tests/ui.spec.js @@ -112,7 +112,7 @@ test.describe('UI tests', () => { await chatPage.verifyChatIsCleaned(); }); - test.skip('Verify user can copy an answer to clipboard', async ({ page }) => { + test.only('Verify user can copy an answer to clipboard', async ({ page }) => { const chatPage = new ChatPage(page); await chatPage.openChat(); await chatPage.typeInMessageField('start'); From bc390acf309cade95fdf9bbd8deaa8889f7e6f20 Mon Sep 17 00:00:00 2001 From: Tatiana Bontsevich Date: Tue, 28 Jan 2025 22:17:31 +0300 Subject: [PATCH 4/6] Correct yml file --- .github/workflows/ci.yml | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 32fcd65..e156b3c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,16 +11,8 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - environment: - - SERVER_HOST: "${{ secrets.SERVER_HOST_AI }}" - SERVER_PID: "${{ secrets.SERVER_PID_AI }}" - SERVER_UID: "${{ secrets.SERVER_UID }}" - SERVER_TOKEN: "${{ secrets.SERVER_TOKEN_AI }}" - - SERVER_HOST: "${{ secrets.SERVER_HOST_MAIN }}" - SERVER_PID: "${{ secrets.SERVER_PID_MAIN }}" - SERVER_UID: "${{ secrets.SERVER_UID }}" - SERVER_TOKEN: "${{ secrets.SERVER_TOKEN_MAIN }}" - + environment: ["AI", "MAIN"] + steps: - uses: actions/checkout@v4 - name: Set up Node.js @@ -33,11 +25,23 @@ jobs: run: | cd packages/ui npm install + - name: Set environment variables + run: | + if [ "${{ matrix.environment }}" == "AI" ]; then + echo "SERVER_HOST=${{ secrets.SERVER_HOST_AI }}" >> $GITHUB_ENV + echo "SERVER_PID=${{ secrets.SERVER_PID_AI }}" >> $GITHUB_ENV + echo "SERVER_TOKEN=${{ secrets.SERVER_TOKEN_AI }}" >> $GITHUB_ENV + elif [ "${{ matrix.environment }}" == "MAIN" ]; then + echo "SERVER_HOST=${{ secrets.SERVER_HOST_MAIN }}" >> $GITHUB_ENV + echo "SERVER_PID=${{ secrets.SERVER_PID_MAIN }}" >> $GITHUB_ENV + echo "SERVER_TOKEN=${{ secrets.SERVER_TOKEN_MAIN }}" >> $GITHUB_ENV + fi + echo "SERVER_UID=${{ secrets.SERVER_UID }}" >> $GITHUB_ENV - name: Start server run: | cd packages/ui/test/plugin npm install - node server.js -sh ${{ matrix.environment.SERVER_HOST }} -spid ${{ matrix.environment.SERVER_PID }} -muid ${{ matrix.environment.SERVER_UID }} -st ${{ matrix.environment.SERVER_TOKEN }} & + node server.js -sh $SERVER_HOST -spid $SERVER_PID -muid $SERVER_UID -st $SERVER_TOKEN & - name: Start chat/webpack run run: | cd packages/ui From a309c28a2e3b884466a4bec22f70c17a1cf3b1c2 Mon Sep 17 00:00:00 2001 From: Tatiana Bontsevich Date: Tue, 28 Jan 2025 22:23:32 +0300 Subject: [PATCH 5/6] Update tests --- packages/ui/test/ui_test/tests/ui.spec.js | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/packages/ui/test/ui_test/tests/ui.spec.js b/packages/ui/test/ui_test/tests/ui.spec.js index c416b42..4970fe3 100644 --- a/packages/ui/test/ui_test/tests/ui.spec.js +++ b/packages/ui/test/ui_test/tests/ui.spec.js @@ -111,14 +111,4 @@ test.describe('UI tests', () => { await chatPage.confirmDeleteMessage(); await chatPage.verifyChatIsCleaned(); }); - - test.only('Verify user can copy an answer to clipboard', async ({ page }) => { - const chatPage = new ChatPage(page); - await chatPage.openChat(); - await chatPage.typeInMessageField('start'); - await chatPage.sendMessage(); - await chatPage.verifyCopyMessageBtnAndClick('Copy to clipboard'); - await chatPage.verifyCopyMessageAlert('The message has been copied to the clipboard'); - await chatPage.verifyMessageIsCopiedToClipboard('Sure! How can I assist you today?'); - }); }); From f2268340ff3b7539c0c1c0c0ba0253a695a7b002 Mon Sep 17 00:00:00 2001 From: Tatiana Bontsevich Date: Tue, 18 Feb 2025 14:40:22 +0300 Subject: [PATCH 6/6] Add vars to yml file --- .github/workflows/ci.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e156b3c..4cca6cc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,15 +28,15 @@ jobs: - name: Set environment variables run: | if [ "${{ matrix.environment }}" == "AI" ]; then - echo "SERVER_HOST=${{ secrets.SERVER_HOST_AI }}" >> $GITHUB_ENV - echo "SERVER_PID=${{ secrets.SERVER_PID_AI }}" >> $GITHUB_ENV + echo "SERVER_HOST=${{ vars.SERVER_HOST_AI }}" >> $GITHUB_ENV + echo "SERVER_PID=${{ vars.SERVER_PID_AI }}" >> $GITHUB_ENV echo "SERVER_TOKEN=${{ secrets.SERVER_TOKEN_AI }}" >> $GITHUB_ENV elif [ "${{ matrix.environment }}" == "MAIN" ]; then - echo "SERVER_HOST=${{ secrets.SERVER_HOST_MAIN }}" >> $GITHUB_ENV - echo "SERVER_PID=${{ secrets.SERVER_PID_MAIN }}" >> $GITHUB_ENV + echo "SERVER_HOST=${{ vars.SERVER_HOST_MAIN }}" >> $GITHUB_ENV + echo "SERVER_PID=${{ vars.SERVER_PID_MAIN }}" >> $GITHUB_ENV echo "SERVER_TOKEN=${{ secrets.SERVER_TOKEN_MAIN }}" >> $GITHUB_ENV fi - echo "SERVER_UID=${{ secrets.SERVER_UID }}" >> $GITHUB_ENV + echo "SERVER_UID=${{ vars.SERVER_UID }}" >> $GITHUB_ENV - name: Start server run: | cd packages/ui/test/plugin