| 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(); | |
| }); | |
| test("chatbot like and dislike functionality", async ({ page }) => { | |
| await page.getByTestId("textbox").click(); | |
| await page.getByTestId("textbox").fill("hello"); | |
| await page.keyboard.press("Enter"); | |
| await page.getByLabel("like", { exact: true }).click(); | |
| await page.getByLabel("dislike").click(); | |
| expect(await page.getByLabel("clicked dislike").count()).toEqual(1); | |
| expect(await page.getByLabel("clicked like").count()).toEqual(0); | |
| }); | |