2023-06-29 05:11:46 +08:00
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" ) ;
2023-07-07 01:43:49 +08:00
2023-06-29 05:11:46 +08:00
const user_message = await page . getByTestId ( "user" ) . first ( ) . getByRole ( "img" ) ;
const bot_message = await page
. getByTestId ( "bot" )
. first ( )
. getByRole ( "paragraph" )
. textContent ( ) ;
2024-02-07 15:46:54 +08:00
const image_src = await user_message . getAttribute ( "src" ) ;
2024-02-07 22:57:52 +08:00
expect ( image_src ) . toBeTruthy ( ) ;
2024-02-07 15:46:54 +08:00
expect ( bot_message ) . toBeTruthy ( ) ;
2023-06-29 05:11:46 +08:00
} ) ;
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" ) ;
2023-07-07 01:43:49 +08:00
2023-06-29 05:11:46 +08:00
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" ) ;
2024-02-07 22:57:52 +08:00
await expect ( audio_data ) . toBeTruthy ( ) ;
2023-06-29 05:11:46 +08:00
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" ) ;
2023-07-07 01:43:49 +08:00
2023-06-29 05:11:46 +08:00
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" ) ;
2024-02-07 22:57:52 +08:00
await expect ( video_data ) . toBeTruthy ( ) ;
2023-06-29 05:11:46 +08:00
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 ( ) ;
} ) ;
2023-11-25 02:03:18 +08:00
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 ) ;
} ) ;