Skip to content

Commit 9d8d222

Browse files
authored
Merge pull request #7728 from Shane-Donlon/docs-e2e-page-loads
e2e(docs) add initial tests
2 parents 06970e5 + 1bdcf2d commit 9d8d222

26 files changed

+2253
-65
lines changed

β€Že2e/docs-e2e/.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
# Playwright
3+
node_modules/
4+
/test-results/
5+
/playwright-report/
6+
/blob-report/
7+
/playwright/.cache/

β€Že2e/docs-e2e/package.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"name": "docs-e2e",
3+
"description": "",
4+
"version": "1.0.0",
5+
"author": "",
6+
"devDependencies": {
7+
"@playwright/test": "1.50.1",
8+
"@types/node": "20.19.0"
9+
},
10+
"keywords": [],
11+
"license": "ISC",
12+
"main": "index.js",
13+
"scripts": {
14+
"test": "pnpm exec playwright test --config=playwright.config.ts --project=chromium",
15+
"test-ui": "pnpm exec playwright test --config=playwright.config.ts --project=chromium --ui"
16+
},
17+
"type": "commonjs"
18+
}

β€Že2e/docs-e2e/playwright.config.ts

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import { defineConfig, devices } from '@playwright/test';
2+
3+
/** Read environment variables from file. https://github.com/motdotla/dotenv */
4+
// import dotenv from 'dotenv';
5+
// import path from 'path';
6+
// dotenv.config({ path: path.resolve(__dirname, '.env') });
7+
8+
/** See https://playwright.dev/docs/test-configuration. */
9+
10+
const TestingURL = 'http://127.0.0.1:3000';
11+
12+
export default defineConfig({
13+
testDir: './tests',
14+
/* Global timeout for each test */
15+
timeout: 60_000,
16+
expect: { timeout: 60_000 },
17+
/* Run tests in files in parallel */
18+
fullyParallel: true,
19+
/* Fail the build on CI if you accidentally left test.only in the source code. */
20+
forbidOnly: !!process.env.CI,
21+
/* Retry on CI only */
22+
retries: process.env.CI ? 2 : 0,
23+
/* Opt out of parallel tests on CI. */
24+
workers: process.env.CI ? 1 : undefined,
25+
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
26+
reporter: 'html',
27+
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
28+
use: {
29+
/* Base URL to use in actions like `await page.goto('/')`. */
30+
baseURL: TestingURL,
31+
actionTimeout: 30_000,
32+
navigationTimeout: 60_000,
33+
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
34+
trace: 'on-first-retry',
35+
},
36+
37+
/* Configure projects for major browsers */
38+
projects: [
39+
{
40+
name: 'chromium',
41+
use: { ...devices['Desktop Chrome'] },
42+
},
43+
{
44+
name: 'chrome',
45+
use: { ...devices['Desktop Chrome'] },
46+
},
47+
48+
{
49+
name: 'firefox',
50+
use: { ...devices['Desktop Firefox'] },
51+
},
52+
53+
{
54+
name: 'webkit',
55+
use: { ...devices['Desktop Safari'] },
56+
},
57+
58+
/* Test against mobile viewports. */
59+
// {
60+
// name: 'Mobile Chrome',
61+
// use: { ...devices['Pixel 5'] },
62+
// },
63+
// {
64+
// name: 'Mobile Safari',
65+
// use: { ...devices['iPhone 12'] },
66+
// },
67+
68+
/* Test against branded browsers. */
69+
// {
70+
// name: 'Microsoft Edge',
71+
// use: { ...devices['Desktop Edge'], channel: 'msedge' },
72+
// },
73+
// {
74+
// name: 'Google Chrome',
75+
// use: { ...devices['Desktop Chrome'], channel: 'chrome' },
76+
// },
77+
],
78+
79+
/* Run your local dev server before starting the tests */
80+
webServer: {
81+
command: 'pnpm -C ../../ run docs.dev',
82+
url: TestingURL,
83+
reuseExistingServer: !process.env.CI,
84+
},
85+
});
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
import { test, expect } from '@playwright/test';
2+
3+
test('Advanced Dollar Function page loads', async ({ page }) => {
4+
await page.goto('/docs/advanced/dollar/');
5+
6+
await expect(page).toHaveTitle('The $ dollar sign | Advanced πŸ“š Qwik Documentation');
7+
});
8+
9+
test('Advanced Containers page loads', async ({ page }) => {
10+
await page.goto('/docs/advanced/containers/');
11+
await expect(page).toHaveTitle('Containers | Advanced πŸ“š Qwik Documentation');
12+
});
13+
14+
test('Advanced QRL page loads', async ({ page }) => {
15+
await page.goto('/docs/advanced/qrl/');
16+
await expect(page).toHaveTitle('QRL | Advanced πŸ“š Qwik Documentation');
17+
});
18+
19+
test('Advanced Library page loads', async ({ page }) => {
20+
await page.goto('/docs/advanced/library/');
21+
await expect(page).toHaveTitle('Component library | Advanced πŸ“š Qwik Documentation');
22+
});
23+
24+
test('Advanced Qwikloader page loads', async ({ page }) => {
25+
await page.goto('/docs/advanced/qwikloader/');
26+
await expect(page).toHaveTitle('Qwikloader | Advanced πŸ“š Qwik Documentation');
27+
});
28+
29+
test('Advanced Optimizer page loads', async ({ page }) => {
30+
await page.goto('/docs/advanced/optimizer/');
31+
await expect(page).toHaveTitle('Optimizer Rules | Advanced πŸ“š Qwik Documentation');
32+
});
33+
34+
test('Advanced Prefetching Modules page loads', async ({ page }) => {
35+
await page.goto('/docs/advanced/modules-prefetching/');
36+
await expect(page).toHaveTitle('Prefetching | Advanced πŸ“š Qwik Documentation');
37+
});
38+
39+
test('Advanced Custom Build Directory page loads', async ({ page }) => {
40+
await page.goto('/docs/advanced/custom-build-dir/');
41+
await expect(page).toHaveTitle('Custom Build Output Directory | Advanced πŸ“š Qwik Documentation');
42+
});
43+
44+
test('Advanced Vite page loads', async ({ page }) => {
45+
await page.goto('/docs/advanced/vite/');
46+
await expect(page).toHaveTitle('Vite | Advanced πŸ“š Qwik Documentation');
47+
});
48+
49+
test('Advanced Routing page loads', async ({ page }) => {
50+
await page.goto('/docs/advanced/routing/');
51+
await expect(page).toHaveTitle('Advanced Routing | Qwik City πŸ“š Qwik Documentation');
52+
});
53+
54+
test('Advanced Plugins page loads', async ({ page }) => {
55+
await page.goto('/docs/advanced/plugins/');
56+
await expect(page).toHaveTitle('Qwik Plugins | Qwik City πŸ“š Qwik Documentation');
57+
});
58+
59+
test('Advanced Request Handling page loads', async ({ page }) => {
60+
await page.goto('/docs/advanced/request-handling/');
61+
await expect(page).toHaveTitle('Request Handling | Advanced πŸ“š Qwik Documentation');
62+
});
63+
64+
test('Advanced Speculative Module Fetching page loads', async ({ page }) => {
65+
await page.goto('/docs/advanced/speculative-module-fetching/');
66+
await expect(page).toHaveTitle('Speculative Module Fetching | Advanced πŸ“š Qwik Documentation');
67+
});
68+
69+
test('Advanced Menu page loads', async ({ page }) => {
70+
await page.goto('/docs/advanced/menu/');
71+
await expect(page).toHaveTitle('Menu | Advanced πŸ“š Qwik Documentation');
72+
});
73+
74+
test('Advanced Generating Sitemaps page loads', async ({ page }) => {
75+
await page.goto('/docs/advanced/sitemaps/');
76+
await expect(page).toHaveTitle('Generating Sitemaps | Advanced πŸ“š Qwik Documentation');
77+
});
78+
79+
test('Advanced ESLint-Rules page loads', async ({ page }) => {
80+
await page.goto('/docs/advanced/eslint/');
81+
// currently does not have a custom title
82+
await expect(page).toHaveTitle('Qwik - Framework reimagined for the edge');
83+
});
84+
85+
test('Advanced Content Security Policy page loads', async ({ page }) => {
86+
await page.goto('/docs/advanced/content-security-policy/');
87+
await expect(page).toHaveTitle('Content Security Policy | Advanced πŸ“š Qwik Documentation');
88+
});
89+
90+
test('Advanced Complex Forms page loads', async ({ page }) => {
91+
await page.goto('/docs/advanced/complex-forms/');
92+
await expect(page).toHaveTitle('Complex Forms | Advanced πŸ“š Qwik Documentation');
93+
});
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { test, expect } from '@playwright/test';
2+
3+
test('Community Projects page loads', async ({ page }) => {
4+
await page.goto('/community/projects/');
5+
await expect(page).toHaveTitle('Projects | Qwik Community πŸ“š Qwik Documentation');
6+
});
7+
8+
test('Community Groups page loads', async ({ page }) => {
9+
await page.goto('/community/groups/');
10+
await expect(page).toHaveTitle('Groups | Qwik Community πŸ“š Qwik Documentation');
11+
});
12+
13+
test('Community Values page loads', async ({ page }) => {
14+
await page.goto('/community/values/');
15+
await expect(page).toHaveTitle('Values | Qwik Community πŸ“š Qwik Documentation');
16+
});
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { test, expect } from '@playwright/test';
2+
3+
test('Concepts Think Qwik page loads', async ({ page }) => {
4+
await page.goto('/docs/concepts/think-qwik/');
5+
await expect(page).toHaveTitle('Think Qwik | Concepts πŸ“š Qwik Documentation');
6+
});
7+
8+
test('Concepts Resumable page loads', async ({ page }) => {
9+
await page.goto('/docs/concepts/resumable/');
10+
await expect(page).toHaveTitle('Resumable | Concepts πŸ“š Qwik Documentation');
11+
});
12+
13+
test('Concepts Progressive page loads', async ({ page }) => {
14+
await page.goto('/docs/concepts/progressive/');
15+
await expect(page).toHaveTitle('Progressive | Concepts πŸ“š Qwik Documentation');
16+
});
17+
18+
test('Concepts Reactivity page loads', async ({ page }) => {
19+
await page.goto('/docs/concepts/reactivity/');
20+
await expect(page).toHaveTitle('Reactivity | Concepts πŸ“š Qwik Documentation');
21+
});
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import { test, expect } from '@playwright/test';
2+
3+
test('Cookbook Overview page loads', async ({ page }) => {
4+
await page.goto('/docs/cookbook/');
5+
await expect(page).toHaveTitle('Cookbook | Overview πŸ“š Qwik Documentation');
6+
});
7+
8+
test('Cookbook Algolia Search page loads', async ({ page }) => {
9+
await page.goto('/docs/cookbook/algolia-search/');
10+
await expect(page).toHaveTitle('Cookbook | Algolia Search πŸ“š Qwik Documentation');
11+
});
12+
13+
test('Cookbook Combine Request Handlers page loads', async ({ page }) => {
14+
await page.goto('/docs/cookbook/combine-request-handlers/');
15+
await expect(page).toHaveTitle('Cookbook | Combine Request Handlers πŸ“š Qwik Documentation');
16+
});
17+
18+
test('Cookbook Debouncer page loads', async ({ page }) => {
19+
await page.goto('/docs/cookbook/debouncer/');
20+
await expect(page).toHaveTitle('Cookbook | Debouncer πŸ“š Qwik Documentation');
21+
});
22+
23+
test('Cookbook Fonts page loads', async ({ page }) => {
24+
await page.goto('/docs/cookbook/fonts/');
25+
await expect(page).toHaveTitle('Cookbook | Font optimization πŸ“š Qwik Documentation');
26+
});
27+
28+
test('Cookbook Glob Import & Dynamic Import page loads', async ({ page }) => {
29+
await page.goto('/docs/cookbook/glob-import/');
30+
await expect(page).toHaveTitle(
31+
'Cookbook | Glob Import with import.meta.glob πŸ“š Qwik Documentation'
32+
);
33+
});
34+
35+
test('Cookbook NavLink Component page loads', async ({ page }) => {
36+
await page.goto('/docs/cookbook/nav-link/');
37+
await expect(page).toHaveTitle('Cookbook | Navbar link πŸ“š Qwik Documentation');
38+
});
39+
40+
test('Cookbook Deploy with Node using Docker page loads', async ({ page }) => {
41+
await page.goto('/docs/cookbook/node-docker-deploy/');
42+
await expect(page).toHaveTitle('Cookbook | Deploy with Node using Docker πŸ“š Qwik Documentation');
43+
});
44+
45+
test('Cookbook Portals page loads', async ({ page }) => {
46+
await page.goto('/docs/cookbook/portals/');
47+
await expect(page).toHaveTitle('Cookbook | Portals πŸ“š Qwik Documentation');
48+
});
49+
50+
test('Cookbook Streaming/deferred loaders page loads', async ({ page }) => {
51+
await page.goto('/docs/cookbook/streaming-deferred-loaders/');
52+
await expect(page).toHaveTitle('Cookbook | Streaming/deferred loaders πŸ“š Qwik Documentation');
53+
});
54+
55+
test('Cookbook sync$ Events page loads', async ({ page }) => {
56+
await page.goto('/docs/cookbook/sync-events/');
57+
await expect(page).toHaveTitle('Cookbook | Synchronous Events with State πŸ“š Qwik Documentation');
58+
});
59+
60+
test('Cookbook Theme Management page loads', async ({ page }) => {
61+
await page.goto('/docs/cookbook/theme-management/');
62+
await expect(page).toHaveTitle('Cookbook | Dark and Light Theme πŸ“š Qwik Documentation');
63+
});
64+
65+
test('Cookbook Drag & Drop page loads', async ({ page }) => {
66+
await page.goto('/docs/cookbook/drag&drop/');
67+
await expect(page).toHaveTitle('Cookbook | Drag & Drop πŸ“š Qwik Documentation');
68+
});
69+
70+
test('Cookbook View Transition API page loads', async ({ page }) => {
71+
await page.goto('/docs/cookbook/view-transition/');
72+
await expect(page).toHaveTitle('Cookbook | View Transition API πŸ“š Qwik Documentation');
73+
});
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import { test, expect } from '@playwright/test';
2+
3+
test('Deployments Overview page loads', async ({ page }) => {
4+
await page.goto('/docs/deployments/');
5+
await expect(page).toHaveTitle('Deployments | Guides πŸ“š Qwik Documentation');
6+
});
7+
8+
test('Deployments Azure Static Web Apps Middleware page loads', async ({ page }) => {
9+
await page.goto('/docs/deployments/azure-swa/');
10+
await expect(page).toHaveTitle('Azure Static Web Apps | Deployments πŸ“š Qwik Documentation');
11+
});
12+
13+
test('Deployments AWS Adapter page loads', async ({ page }) => {
14+
await page.goto('/docs/deployments/aws-lambda/');
15+
await expect(page).toHaveTitle('AWS Lambda | Deployments πŸ“š Qwik Documentation');
16+
});
17+
18+
test('Deployments Firebase Adapter page loads', async ({ page }) => {
19+
await page.goto('/docs/deployments/firebase/');
20+
await expect(page).toHaveTitle('Firebase | Deployments πŸ“š Qwik Documentation');
21+
});
22+
23+
test('Deployments Google Cloud Run Middleware page loads', async ({ page }) => {
24+
await page.goto('/docs/deployments/gcp-cloud-run/');
25+
await expect(page).toHaveTitle('Cloud Run Middleware | Deployments πŸ“š Qwik Documentation');
26+
});
27+
28+
test('Deployments Cloudflare Pages Adapter page loads', async ({ page }) => {
29+
await page.goto('/docs/deployments/cloudflare-pages/');
30+
await expect(page).toHaveTitle(
31+
'Cloudflare Pages Adapter and Middleware | Deployments πŸ“š Qwik Documentation'
32+
);
33+
});
34+
35+
test('Deployments Deno Middleware page loads', async ({ page }) => {
36+
await page.goto('/docs/deployments/deno/');
37+
await expect(page).toHaveTitle('Deno Middleware | Deployments πŸ“š Qwik Documentation');
38+
});
39+
40+
test('Deployments Bun Middleware page loads', async ({ page }) => {
41+
await page.goto('/docs/deployments/bun/');
42+
await expect(page).toHaveTitle('Bun Middleware | Deployments πŸ“š Qwik Documentation');
43+
});
44+
45+
test('Deployments Netlify Edge Adapter page loads', async ({ page }) => {
46+
await page.goto('/docs/deployments/netlify-edge/');
47+
await expect(page).toHaveTitle(
48+
'Netlify Edge Adapter and Middleware | Deployments πŸ“š Qwik Documentation'
49+
);
50+
});
51+
52+
test('Deployments Node Middleware page loads', async ({ page }) => {
53+
await page.goto('/docs/deployments/node/');
54+
await expect(page).toHaveTitle('Node Middleware | Deployments πŸ“š Qwik Documentation');
55+
});
56+
57+
test('Deployments Vercel Edge Adapter page loads', async ({ page }) => {
58+
await page.goto('/docs/deployments/vercel-edge/');
59+
await expect(page).toHaveTitle(
60+
'Vercel Edge Adapter and Middleware | Deployments πŸ“š Qwik Documentation'
61+
);
62+
});
63+
64+
test('Deployments Static Site Adapter page loads', async ({ page }) => {
65+
await page.goto('/docs/deployments/static/');
66+
await expect(page).toHaveTitle('Static Site πŸ“š Qwik Documentation');
67+
});

0 commit comments

Comments
Β (0)