Skip to content

Commit

Permalink
test: add test setup for dev overlay (#8932)
Browse files Browse the repository at this point in the history
  • Loading branch information
Princesseuh authored Oct 27, 2023
1 parent 15acd86 commit 5fed432
Show file tree
Hide file tree
Showing 10 changed files with 145 additions and 5 deletions.
5 changes: 5 additions & 0 deletions .changeset/new-candles-beam.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'astro': patch
---

Fixed window component appearing over the dev overlay on small windows. Added a maximum length to sections of the tooltip component
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;
}
.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;
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.

0 comments on commit 5fed432

Please sign in to comment.