Skip to content

Commit 7b72316

Browse files
authored
Add e2e tests for embed frame (#3830)
1 parent adfb118 commit 7b72316

13 files changed

Lines changed: 348 additions & 12 deletions

packages/embed/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export * from './client';
2+
export * from './standalone';

packages/gitbook/e2e/internal.spec.ts

Lines changed: 320 additions & 1 deletion
Large diffs are not rendered by default.

packages/gitbook/e2e/util.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,8 @@ export async function waitForIcons(page: Page) {
455455
*/
456456
async function waitForTOCScrolling(page: Page) {
457457
const viewport = await page.viewportSize();
458-
if (viewport && viewport.width >= 1024) {
458+
if (viewport && viewport.width >= 1024 && !page.url().includes('~gitbook/embed/demo')) {
459+
// The embed demo is an iframe, which means the viewport is only a fraction of the main document. So there is no open TOC to scroll to.
459460
const toc = page.getByTestId('table-of-contents');
460461
await expect(toc).toBeVisible();
461462
await page.evaluate(() => {

packages/gitbook/src/components/AI/server-actions/AIToolCallsSummary.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ function ToolCallSummary(props: { toolCall: AIToolCall; context: GitBookSiteCont
3939
const { toolCall, context } = props;
4040

4141
return (
42-
<div className="mt-2 flex origin-top-left animate-blur-in-slow items-start gap-2 text-sm text-tint-subtle">
42+
<div
43+
data-testid="ai-chat-tool-summary"
44+
className="mt-2 flex origin-top-left animate-blur-in-slow items-start gap-2 text-sm text-tint-subtle"
45+
>
4346
<Icon
4447
icon={getIconForToolCall(toolCall)}
4548
className="mt-1 size-3 shrink-0 text-tint-subtle/8"

packages/gitbook/src/components/AIChat/AIChat.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ export function AIChat() {
7070

7171
return (
7272
<div
73-
data-testid="ai-chat"
7473
className={tcls(
7574
'ai-chat inset-y-0 right-0 z-40 mx-auto flex max-w-3xl scroll-mt-36 px-4 py-4 transition-[width,opacity,margin,display] transition-discrete duration-300 sm:px-6 lg:fixed lg:w-80 lg:p-0 xl:w-96',
7675
chat.opened
@@ -79,7 +78,7 @@ export function AIChat() {
7978
)}
8079
>
8180
<EmbeddableFrame className="relative shrink-0 border-tint-subtle border-l to-tint-base transition-all duration-300 max-lg:circular-corners:rounded-3xl max-lg:rounded-corners:rounded-md max-lg:border lg:w-80 xl:w-96">
82-
<EmbeddableFrameMain>
81+
<EmbeddableFrameMain data-testid="ai-chat">
8382
<EmbeddableFrameHeader>
8483
<AIChatDynamicIcon trademark={config.trademark} />
8584
<EmbeddableFrameHeaderMain>
@@ -239,13 +238,14 @@ export function AIChatBody(props: {
239238
<h5
240239
className="animate-blur-in-slow font-bold text-lg text-tint-strong leading-tight [@container(min-height:400px)]:text-center"
241240
style={{ animationDelay: '.5s' }}
242-
data-testid="ai-chat-time-greeting"
241+
data-testid="ai-chat-greeting-title"
243242
>
244243
{greeting?.title || timeGreeting}
245244
</h5>
246245
<p
247246
className="animate-blur-in-slow text-tint leading-tight [@container(min-height:400px)]:text-center"
248247
style={{ animationDelay: '.6s' }}
248+
data-testid="ai-chat-greeting-subtitle"
249249
>
250250
{greeting?.subtitle ||
251251
t(language, 'ai_chat_assistant_description')}

packages/gitbook/src/components/AIChat/AIChatSuggestedQuestions.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,13 @@ export default function AIChatSuggestedQuestions(props: {
1919
];
2020

2121
return (
22-
<div className="flex flex-col items-start gap-2 self-start">
22+
<div
23+
className="flex flex-col items-start gap-2 self-start"
24+
data-testid="ai-chat-suggested-questions"
25+
>
2326
{suggestions.map((question, index) => (
2427
<Button
28+
data-testid="ai-chat-suggested-question"
2529
key={question}
2630
variant="blank"
2731
size="medium"

packages/gitbook/src/components/AIChat/AIChatToolConfirmations.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ export function AIChatToolConfirmations(props: {
3737
style={{ animationDelay: `${0.5 + index * 0.1}s` }}
3838
>
3939
<Button
40+
data-testid="ai-chat-tool-confirmation"
4041
onClick={() => {
4142
tool.confirm();
4243
}}

packages/gitbook/src/components/Embeddable/EmbeddableAIChat.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ export function EmbeddableAIChat(props: EmbeddableAIChatProps) {
7575
/>
7676
<EmbeddableIframeButtons />
7777
</EmbeddableFrameSidebar>
78-
<EmbeddableFrameMain>
78+
<EmbeddableFrameMain data-testid="ai-chat">
7979
<EmbeddableFrameHeader>
8080
{!tabsRef.current ? (
8181
<AIChatDynamicIcon

packages/gitbook/src/components/Embeddable/EmbeddableDocsPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export async function EmbeddableDocsPage(
4949
/>
5050
<EmbeddableIframeButtons />
5151
</EmbeddableFrameSidebar>
52-
<EmbeddableFrameMain>
52+
<EmbeddableFrameMain data-testid="embed-docs-page">
5353
<div className="relative flex not-hydrated:animate-blur-in-slow flex-col">
5454
<EmbeddableFrameHeader>
5555
<HeaderMobileMenu className="-ml-2 page-no-toc:hidden" />

packages/gitbook/src/components/Embeddable/EmbeddableDocsPageControlButtons.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export function EmbeddableDocsPageControlButtons(props: { href: string }) {
1010
return (
1111
<Button
1212
icon="arrow-up-right-from-square"
13+
data-testid="embed-docs-page-open-in-new-tab"
1314
label={tString(language, 'open_in_new_tab')}
1415
href={href}
1516
target="_blank"

0 commit comments

Comments
 (0)