Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: add test setup for dev overlay #8932

Merged
merged 5 commits into from
Oct 27, 2023
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 90 additions & 0 deletions packages/astro/e2e/dev-overlay.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import { expect } from '@playwright/test';
import { testFactory } from './test-utils.js';

const test = testFactory({
root: './fixtures/dev-overlay/',
});

let devServer;

test.beforeAll(async ({ astro }) => {
devServer = await astro.startDevServer();
});

test.afterAll(async () => {
await devServer.stop();
});

test.describe('Dev Overlay zzz', () => {
test('dev overlay exists in the page', async ({ page, astro }) => {
await page.goto(astro.resolveUrl('/'));

const devOVerlay = page.locator('astro-dev-overlay');
await expect(devOVerlay).toHaveCount(1);
});

test('can open Astro plugin', async ({ page, astro }) => {
await page.goto(astro.resolveUrl('/'));

const overlay = page.locator('astro-dev-overlay');
const pluginButton = overlay.locator('button[data-plugin-id="astro"]');
await pluginButton.click();

const astroPluginCanvas = overlay.locator(
'astro-dev-overlay-plugin-canvas[data-plugin-id="astro"]'
);
const astroWindow = astroPluginCanvas.locator('astro-dev-overlay-window');
await expect(astroWindow).toHaveCount(1);
await expect(astroWindow).toBeVisible();

// Toggle plugin off
await pluginButton.click();
await expect(astroWindow).not.toBeVisible();
});

test('xray shows highlights and tooltips', async ({ page, astro }) => {
await page.goto(astro.resolveUrl('/'));

const overlay = page.locator('astro-dev-overlay');
const pluginButton = overlay.locator('button[data-plugin-id="astro:xray"]');
await pluginButton.click();

const xrayCanvas = overlay.locator(
'astro-dev-overlay-plugin-canvas[data-plugin-id="astro:xray"]'
);
const xrayHighlight = xrayCanvas.locator('astro-dev-overlay-highlight');
await expect(xrayHighlight).toBeVisible();

await xrayHighlight.hover();
const xrayHighlightTooltip = xrayHighlight.locator('astro-dev-overlay-tooltip');
await expect(xrayHighlightTooltip).toBeVisible();

// Toggle plugin off
await pluginButton.click();
await expect(xrayHighlight).not.toBeVisible();
await expect(xrayHighlightTooltip).not.toBeVisible();
});

test('audit shows higlights and tooltips', async ({ page, astro }) => {
await page.goto(astro.resolveUrl('/'));

const overlay = page.locator('astro-dev-overlay');
const pluginButton = overlay.locator('button[data-plugin-id="astro:audit"]');
await pluginButton.click();

const auditCanvas = overlay.locator(
'astro-dev-overlay-plugin-canvas[data-plugin-id="astro:audit"]'
);
const auditHighlight = auditCanvas.locator('astro-dev-overlay-highlight');
await expect(auditHighlight).toBeVisible();

await auditHighlight.hover();
const auditHighlightTooltip = auditHighlight.locator('astro-dev-overlay-tooltip');
await expect(auditHighlightTooltip).toBeVisible();

// Toggle plugin off
await pluginButton.click();
await expect(auditHighlight).not.toBeVisible();
await expect(auditHighlightTooltip).not.toBeVisible();
});
});
8 changes: 8 additions & 0 deletions packages/astro/e2e/fixtures/dev-overlay/astro.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import preact from '@astrojs/preact';

export default {
integrations: [preact()],
experimental: {
devOverlay: true
}
};
10 changes: 10 additions & 0 deletions packages/astro/e2e/fixtures/dev-overlay/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"name": "@e2e/dev-overlay",
"version": "0.0.0",
"private": true,
"dependencies": {
"@astrojs/preact": "workspace:*",
"astro": "workspace:*",
"preact": "^10.17.1"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export function HelloWorld({ name }) {
return <div>Hello {name}! I'm a component!</div>;
}
7 changes: 7 additions & 0 deletions packages/astro/e2e/fixtures/dev-overlay/src/pages/index.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
import { HelloWorld } from "../components/HelloWorld";
---

<HelloWorld name={"Dev Overlay"} client:load />

<img src="https://astro.build/assets/press/astro-logo-dark.svg" />
6 changes: 3 additions & 3 deletions packages/astro/src/runtime/client/dev-overlay/overlay.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ document.addEventListener('DOMContentLoaded', async () => {

constructor() {
super();
this.shadowRoot = this.attachShadow({ mode: 'closed' });
this.shadowRoot = this.attachShadow({ mode: 'open' });
}

// connect component
Expand All @@ -79,7 +79,7 @@ document.addEventListener('DOMContentLoaded', async () => {
bottom: 7.5%;
left: calc(50% + 32px);
transform: translate(-50%, 0%);
z-index: 999999;
z-index: 9999999999;
display: flex;
gap: 8px;
align-items: center;
Expand Down Expand Up @@ -478,7 +478,7 @@ document.addEventListener('DOMContentLoaded', async () => {

constructor() {
super();
this.shadowRoot = this.attachShadow({ mode: 'closed' });
this.shadowRoot = this.attachShadow({ mode: 'open' });
}

// connect component
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,11 @@ export class DevOverlayTooltip extends HTMLElement {
padding: 8px;
}

.section-content {
max-height: 250px;
overflow-y: scroll;
}
Comment on lines +60 to +63
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The virtual Playwright window is quite small, and somehow in some cases it couldn't see the tooltip. This is generally just a good change, because the tooltip could get quite long (ex: the docs sidebars)


.modal-title {
display: flex;
justify-content: space-between;
Expand Down Expand Up @@ -126,7 +131,7 @@ export class DevOverlayTooltip extends HTMLElement {
}</div>`
: ''
}
${section.content ? `<div>${section.content}</div>` : ''}
${section.content ? `<div class="section-content">${section.content}</div>` : ''}
${section.clickDescription ? `<span class="modal-cta">${section.clickDescription}</span>` : ''}
`;
fragment.append(sectionElement);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export class DevOverlayWindow extends HTMLElement {
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
color: rgba(204, 206, 216, 1);
position: fixed;
z-index: 9999999999;
z-index: 999999999;
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This caused the window to appear over the dev overlay, which made it impossible to click.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might be nice to extract each z-index we need to a custom property at the root of the dev overlay component? Then this would be slightly easier to manage in one place.

If there's a good reason you're not already doing that, ignore me!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's no reason not to, I think. Will refactor in a separate PR!

top: 55%;
left: 50%;
transform: translate(-50%, -50%);
Expand Down
12 changes: 12 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading