gradio/js/app/test/chatbot_multimodal.spec.ts
Dawood Khan bf26b5f66d
Chatbot Tests (#4662)
* playwright tests for chatbot

* more tests

* changelog

* Update CHANGELOG.md

* fix upload file delay (#4661)

* fix

* changes

* changes

---------

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* Forward `tqdm` constructor arguments to `Progress` component (#4475)

* Forward tqdm constructor arguments to Progress component

Signed-off-by: Ilya Trushkin <ilya.trushkin@intel.com>

* lint

* reorder args

* added tests

---------

Signed-off-by: Ilya Trushkin <ilya.trushkin@intel.com>
Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* Remove cleared_value (#4685)

* Remove cleared_value

* CHANGELOG

* Add requirements.txt to dialogpt demo (#4686)

* Add requirements.txt

* Update demo notebook

* Add torch

* remove streaming demo + more tests

* Fix blocks_kitchen_sink and streaming_stt demos (#4699)

* Add code

* Add json file

* Remove streaming_stt demo

* Undo generate_notebooks

* Add blocks_kitchen_sink

* fix tests

* Update js/app/test/chatbot_multimodal.spec.ts

Co-authored-by: pngwn <hello@pngwn.io>

* Update js/app/test/chatbot_multimodal.spec.ts

Co-authored-by: pngwn <hello@pngwn.io>

* Update js/app/test/chatbot_multimodal.spec.ts

Co-authored-by: pngwn <hello@pngwn.io>

* Update js/app/test/chatbot_multimodal.spec.ts

Co-authored-by: pngwn <hello@pngwn.io>

* Update js/app/test/chatbot_multimodal.spec.ts

Co-authored-by: pngwn <hello@pngwn.io>

* Update js/app/test/chatbot_multimodal.spec.ts

Co-authored-by: pngwn <hello@pngwn.io>

* Update js/app/test/chatbot_multimodal.spec.ts

Co-authored-by: pngwn <hello@pngwn.io>

* Update js/app/test/chatbot_multimodal.spec.ts

Co-authored-by: pngwn <hello@pngwn.io>

* Update js/app/test/chatbot_multimodal.spec.ts

Co-authored-by: pngwn <hello@pngwn.io>

* update notebook

* remove debug

* remove debug

---------

Signed-off-by: Ilya Trushkin <ilya.trushkin@intel.com>
Co-authored-by: aliabid94 <aabid94@gmail.com>
Co-authored-by: Abubakar Abid <abubakar@huggingface.co>
Co-authored-by: Ilya Trushkin <ilya.trushkin@intel.com>
Co-authored-by: Freddy Boulton <alfonsoboulton@gmail.com>
Co-authored-by: pngwn <hello@pngwn.io>
2023-06-28 17:11:46 -04:00

108 lines
5.6 KiB
TypeScript

import { test, expect } from "@gradio/tootils";
test("text input by a user should be shown in the chatbot as a paragraph", async ({ page }) => {
const textbox = await page.getByTestId('textbox');
await textbox.fill("Lorem ipsum");
await page.keyboard.press('Enter');
const user_message = await page.getByTestId('user').first().getByRole('paragraph').textContent();
const bot_message = await page.getByTestId('bot').first().getByRole('paragraph').textContent();
await expect(user_message).toEqual("Lorem ipsum");
await expect(bot_message).toBeTruthy();
});
test("images uploaded by a user should be shown in the chat", async ({ page }) => {
const fileChooserPromise = page.waitForEvent('filechooser');
await page.getByRole('button', { name: '📁' }).click();
const fileChooser = await fileChooserPromise;
await fileChooser.setFiles("./test/files/cheetah1.jpg");
await page.keyboard.press('Enter');
const user_message = await page.getByTestId('user').first().getByRole('img');
const bot_message = await page.getByTestId('bot').first().getByRole('paragraph').textContent();
const image_data = await user_message.getAttribute("src");
await expect(image_data).toContain("cheetah1.jpg");
await expect(bot_message).toBeTruthy();
});
test("audio uploaded by a user should be shown in the chatbot", async ({ page }) => {
const fileChooserPromise = page.waitForEvent('filechooser');
await page.getByRole('button', { name: '📁' }).click();
const fileChooser = await fileChooserPromise;
await fileChooser.setFiles("../../test/test_files/audio_sample.wav");
await page.keyboard.press('Enter');
const user_message = await page.getByTestId('user').first().locator('audio');
const bot_message = await page.getByTestId('bot').first().getByRole('paragraph').textContent();
const audio_data = await user_message.getAttribute("src");
await expect(audio_data).toContain("audio_sample.wav");
await expect(bot_message).toBeTruthy();
});
test("videos uploaded by a user should be shown in the chatbot", async ({ page }) => {
const fileChooserPromise = page.waitForEvent('filechooser');
await page.getByRole('button', { name: '📁' }).click();
const fileChooser = await fileChooserPromise;
await fileChooser.setFiles("../../test/test_files/video_sample.mp4");
await page.keyboard.press('Enter');
const user_message = await page.getByTestId('user').first().locator('video');
const bot_message = await page.getByTestId('bot').first().getByRole('paragraph').textContent();
const video_data = await user_message.getAttribute("src");
await expect(video_data).toContain("video_sample.mp4");
await expect(bot_message).toBeTruthy();
});
test("markdown input by a user should be correctly formatted: bold, italics, links", async ({ page }) => {
const textbox = await page.getByTestId('textbox');
await textbox.fill("This is **bold text**. This is *italic text*. This is a [link](https://gradio.app).");
await page.keyboard.press('Enter');
const user_message = await page.getByTestId('user').first().getByRole('paragraph').innerHTML();
const bot_message = await page.getByTestId('bot').first().getByRole('paragraph').textContent();
await expect(user_message).toEqual('This is <strong>bold text</strong>. This is <em>italic text</em>. This is a <a href=\"https://gradio.app\" target=\"_blank\" rel=\"noopener noreferrer\">link</a>.');
await expect(bot_message).toBeTruthy();
});
test("inline code markdown input by the user should be correctly formatted", async ({ page }) => {
const textbox = await page.getByTestId('textbox');
await textbox.fill("This is `code`.");
await page.keyboard.press('Enter');
const user_message = await page.getByTestId('user').first().getByRole('paragraph').innerHTML();
const bot_message = await page.getByTestId('bot').first().getByRole('paragraph').textContent();
await expect(user_message).toEqual("This is <code>code</code>.");
await expect(bot_message).toBeTruthy();
});
test("markdown code blocks input by a user should be rendered correctly with the correct language tag", async ({ page }) => {
const textbox = await page.getByTestId('textbox');
await textbox.fill("```python\nprint('Hello')\nprint('World!')\n```");
await page.keyboard.press('Enter');
const user_message = await page.getByTestId('user').first().locator('pre').innerHTML();
const bot_message = await page.getByTestId('bot').first().getByRole('paragraph').textContent();
await expect(user_message).toContain("language-python");
await expect(bot_message).toBeTruthy();
});
test("LaTeX input by a user should be rendered correctly", async ({ page }) => {
const textbox = await page.getByTestId('textbox');
await textbox.fill("This is LaTeX $$x^2$$");
await page.keyboard.press('Enter');
const user_message = await page.getByTestId('user').first().getByRole('paragraph').innerHTML();
const bot_message = await page.getByTestId('bot').first().getByRole('paragraph').textContent();
await expect(user_message).toContain("katex-display");
await expect(bot_message).toBeTruthy();
});
test("when a new message is sent the chatbot should scroll to the latest message", async ({ page }) => {
const textbox = await page.getByTestId('textbox');
const line_break = "<br>"
await textbox.fill(line_break.repeat(30));
await page.keyboard.press('Enter');
const bot_message = await page.getByTestId('bot').first().getByRole('paragraph');
await expect(bot_message).toBeVisible();
const bot_message_text = bot_message.textContent();
await expect(bot_message_text).toBeTruthy();
});