@beatzball/create-litro 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/recipes/11ty-blog/template/e2e/index.spec.ts +19 -0
- package/dist/recipes/11ty-blog/template/package.json +4 -2
- package/dist/recipes/11ty-blog/template/playwright.config.ts +20 -0
- package/dist/recipes/fullstack/template/e2e/index.spec.ts +19 -0
- package/dist/recipes/fullstack/template/package.json +4 -2
- package/dist/recipes/fullstack/template/playwright.config.ts +20 -0
- package/dist/recipes/starlight/template/e2e/index.spec.ts +32 -0
- package/dist/recipes/starlight/template/package.json +4 -2
- package/dist/recipes/starlight/template/playwright.config.ts +20 -0
- package/package.json +1 -1
- package/recipes/11ty-blog/template/e2e/index.spec.ts +19 -0
- package/recipes/11ty-blog/template/package.json +4 -2
- package/recipes/11ty-blog/template/playwright.config.ts +20 -0
- package/recipes/fullstack/template/e2e/index.spec.ts +19 -0
- package/recipes/fullstack/template/package.json +4 -2
- package/recipes/fullstack/template/playwright.config.ts +20 -0
- package/recipes/starlight/template/e2e/index.spec.ts +32 -0
- package/recipes/starlight/template/package.json +4 -2
- package/recipes/starlight/template/playwright.config.ts +20 -0
- package/vitest.config.ts +10 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# create-litro
|
|
2
2
|
|
|
3
|
+
## 0.2.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 338e2c7: Add Playwright e2e setup to all recipe templates. Each scaffolded project now includes `playwright.config.ts` and `e2e/index.spec.ts` with 3 starter tests, and `@playwright/test` in `devDependencies`.
|
|
8
|
+
|
|
3
9
|
## 0.2.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { test, expect } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
test('home renders page-home component', async ({ page }) => {
|
|
4
|
+
await page.goto('/');
|
|
5
|
+
await page.waitForSelector('page-home');
|
|
6
|
+
await expect(page.locator('page-home')).toBeVisible();
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
test('blog index renders', async ({ page }) => {
|
|
10
|
+
await page.goto('/blog');
|
|
11
|
+
await page.waitForSelector('page-blog');
|
|
12
|
+
await expect(page.locator('page-blog')).toBeVisible();
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
test('blog post renders with h1', async ({ page }) => {
|
|
16
|
+
await page.goto('/blog/hello-world');
|
|
17
|
+
await page.waitForSelector('page-blog-slug');
|
|
18
|
+
await expect(page.locator('page-blog-slug h1')).toBeVisible();
|
|
19
|
+
});
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"dev": "litro dev",
|
|
10
10
|
"build": "litro build",
|
|
11
11
|
"preview": "litro preview",
|
|
12
|
-
"generate": "litro generate"
|
|
12
|
+
"generate": "litro generate",
|
|
13
|
+
"test:e2e": "playwright test"
|
|
13
14
|
},
|
|
14
15
|
"dependencies": {
|
|
15
16
|
"@beatzball/litro": "latest",
|
|
@@ -21,6 +22,7 @@
|
|
|
21
22
|
"devDependencies": {
|
|
22
23
|
"nitropack": "^2.13.1",
|
|
23
24
|
"vite": "^5.4.11",
|
|
24
|
-
"typescript": "^5.7.3"
|
|
25
|
+
"typescript": "^5.7.3",
|
|
26
|
+
"@playwright/test": "^1.48.0"
|
|
25
27
|
}
|
|
26
28
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineConfig, devices } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
testDir: './e2e',
|
|
5
|
+
fullyParallel: false,
|
|
6
|
+
retries: process.env.CI ? 2 : 0,
|
|
7
|
+
workers: 1,
|
|
8
|
+
reporter: 'html',
|
|
9
|
+
use: {
|
|
10
|
+
baseURL: 'http://localhost:3030',
|
|
11
|
+
trace: 'on-first-retry',
|
|
12
|
+
},
|
|
13
|
+
projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }],
|
|
14
|
+
webServer: {
|
|
15
|
+
command: 'pnpm dev',
|
|
16
|
+
url: 'http://localhost:3030',
|
|
17
|
+
reuseExistingServer: !process.env.CI,
|
|
18
|
+
timeout: 60000,
|
|
19
|
+
},
|
|
20
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { test, expect } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
test('SSR renders without JavaScript (DSD in source)', async ({ request }) => {
|
|
4
|
+
const response = await request.get('/');
|
|
5
|
+
const body = await response.text();
|
|
6
|
+
expect(body).toContain('shadowrootmode');
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
test('__litro_data__ is injected into HTML', async ({ request }) => {
|
|
10
|
+
const response = await request.get('/');
|
|
11
|
+
const body = await response.text();
|
|
12
|
+
expect(body).toContain('__litro_data__');
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
test('page-home is visible after hydration', async ({ page }) => {
|
|
16
|
+
await page.goto('/');
|
|
17
|
+
await page.waitForSelector('page-home');
|
|
18
|
+
await expect(page.locator('page-home')).toBeVisible();
|
|
19
|
+
});
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"dev": "litro dev",
|
|
10
10
|
"build": "litro build",
|
|
11
11
|
"preview": "litro preview",
|
|
12
|
-
"generate": "litro generate"
|
|
12
|
+
"generate": "litro generate",
|
|
13
|
+
"test:e2e": "playwright test"
|
|
13
14
|
},
|
|
14
15
|
"dependencies": {
|
|
15
16
|
"@beatzball/litro": "latest",
|
|
@@ -21,6 +22,7 @@
|
|
|
21
22
|
"devDependencies": {
|
|
22
23
|
"nitropack": "^2.13.1",
|
|
23
24
|
"vite": "^5.4.11",
|
|
24
|
-
"typescript": "^5.7.3"
|
|
25
|
+
"typescript": "^5.7.3",
|
|
26
|
+
"@playwright/test": "^1.48.0"
|
|
25
27
|
}
|
|
26
28
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineConfig, devices } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
testDir: './e2e',
|
|
5
|
+
fullyParallel: false,
|
|
6
|
+
retries: process.env.CI ? 2 : 0,
|
|
7
|
+
workers: 1,
|
|
8
|
+
reporter: 'html',
|
|
9
|
+
use: {
|
|
10
|
+
baseURL: 'http://localhost:3030',
|
|
11
|
+
trace: 'on-first-retry',
|
|
12
|
+
},
|
|
13
|
+
projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }],
|
|
14
|
+
webServer: {
|
|
15
|
+
command: 'pnpm dev',
|
|
16
|
+
url: 'http://localhost:3030',
|
|
17
|
+
reuseExistingServer: !process.env.CI,
|
|
18
|
+
timeout: 60000,
|
|
19
|
+
},
|
|
20
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { test, expect } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
const PRERENDERED_ROUTES = [
|
|
4
|
+
'/',
|
|
5
|
+
'/docs/getting-started',
|
|
6
|
+
'/docs/installation',
|
|
7
|
+
'/docs/configuration',
|
|
8
|
+
'/docs/guides-first-page',
|
|
9
|
+
'/docs/guides-deploying',
|
|
10
|
+
'/blog',
|
|
11
|
+
'/blog/welcome',
|
|
12
|
+
'/blog/release-notes',
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
test('home renders page-home component', async ({ page }) => {
|
|
16
|
+
await page.goto('/');
|
|
17
|
+
await page.waitForSelector('page-home');
|
|
18
|
+
await expect(page.locator('page-home')).toBeVisible();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
test('/docs/getting-started renders', async ({ page }) => {
|
|
22
|
+
await page.goto('/docs/getting-started');
|
|
23
|
+
await page.waitForSelector('page-docs-slug');
|
|
24
|
+
await expect(page.locator('page-docs-slug')).toBeVisible();
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test('all prerendered routes return 200', async ({ request }) => {
|
|
28
|
+
for (const route of PRERENDERED_ROUTES) {
|
|
29
|
+
const response = await request.get(route);
|
|
30
|
+
expect(response.status(), `Expected 200 for ${route}`).toBe(200);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"dev": "litro dev",
|
|
10
10
|
"build": "litro build",
|
|
11
11
|
"preview": "litro preview",
|
|
12
|
-
"generate": "litro generate"
|
|
12
|
+
"generate": "litro generate",
|
|
13
|
+
"test:e2e": "playwright test"
|
|
13
14
|
},
|
|
14
15
|
"dependencies": {
|
|
15
16
|
"@beatzball/litro": "latest",
|
|
@@ -21,6 +22,7 @@
|
|
|
21
22
|
"devDependencies": {
|
|
22
23
|
"nitropack": "^2.13.1",
|
|
23
24
|
"vite": "^5.4.11",
|
|
24
|
-
"typescript": "^5.7.3"
|
|
25
|
+
"typescript": "^5.7.3",
|
|
26
|
+
"@playwright/test": "^1.48.0"
|
|
25
27
|
}
|
|
26
28
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineConfig, devices } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
testDir: './e2e',
|
|
5
|
+
fullyParallel: false,
|
|
6
|
+
retries: process.env.CI ? 2 : 0,
|
|
7
|
+
workers: 1,
|
|
8
|
+
reporter: 'html',
|
|
9
|
+
use: {
|
|
10
|
+
baseURL: 'http://localhost:3030',
|
|
11
|
+
trace: 'on-first-retry',
|
|
12
|
+
},
|
|
13
|
+
projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }],
|
|
14
|
+
webServer: {
|
|
15
|
+
command: 'pnpm dev',
|
|
16
|
+
url: 'http://localhost:3030',
|
|
17
|
+
reuseExistingServer: !process.env.CI,
|
|
18
|
+
timeout: 60000,
|
|
19
|
+
},
|
|
20
|
+
});
|
package/package.json
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { test, expect } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
test('home renders page-home component', async ({ page }) => {
|
|
4
|
+
await page.goto('/');
|
|
5
|
+
await page.waitForSelector('page-home');
|
|
6
|
+
await expect(page.locator('page-home')).toBeVisible();
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
test('blog index renders', async ({ page }) => {
|
|
10
|
+
await page.goto('/blog');
|
|
11
|
+
await page.waitForSelector('page-blog');
|
|
12
|
+
await expect(page.locator('page-blog')).toBeVisible();
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
test('blog post renders with h1', async ({ page }) => {
|
|
16
|
+
await page.goto('/blog/hello-world');
|
|
17
|
+
await page.waitForSelector('page-blog-slug');
|
|
18
|
+
await expect(page.locator('page-blog-slug h1')).toBeVisible();
|
|
19
|
+
});
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"dev": "litro dev",
|
|
10
10
|
"build": "litro build",
|
|
11
11
|
"preview": "litro preview",
|
|
12
|
-
"generate": "litro generate"
|
|
12
|
+
"generate": "litro generate",
|
|
13
|
+
"test:e2e": "playwright test"
|
|
13
14
|
},
|
|
14
15
|
"dependencies": {
|
|
15
16
|
"@beatzball/litro": "latest",
|
|
@@ -21,6 +22,7 @@
|
|
|
21
22
|
"devDependencies": {
|
|
22
23
|
"nitropack": "^2.13.1",
|
|
23
24
|
"vite": "^5.4.11",
|
|
24
|
-
"typescript": "^5.7.3"
|
|
25
|
+
"typescript": "^5.7.3",
|
|
26
|
+
"@playwright/test": "^1.48.0"
|
|
25
27
|
}
|
|
26
28
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineConfig, devices } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
testDir: './e2e',
|
|
5
|
+
fullyParallel: false,
|
|
6
|
+
retries: process.env.CI ? 2 : 0,
|
|
7
|
+
workers: 1,
|
|
8
|
+
reporter: 'html',
|
|
9
|
+
use: {
|
|
10
|
+
baseURL: 'http://localhost:3030',
|
|
11
|
+
trace: 'on-first-retry',
|
|
12
|
+
},
|
|
13
|
+
projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }],
|
|
14
|
+
webServer: {
|
|
15
|
+
command: 'pnpm dev',
|
|
16
|
+
url: 'http://localhost:3030',
|
|
17
|
+
reuseExistingServer: !process.env.CI,
|
|
18
|
+
timeout: 60000,
|
|
19
|
+
},
|
|
20
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { test, expect } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
test('SSR renders without JavaScript (DSD in source)', async ({ request }) => {
|
|
4
|
+
const response = await request.get('/');
|
|
5
|
+
const body = await response.text();
|
|
6
|
+
expect(body).toContain('shadowrootmode');
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
test('__litro_data__ is injected into HTML', async ({ request }) => {
|
|
10
|
+
const response = await request.get('/');
|
|
11
|
+
const body = await response.text();
|
|
12
|
+
expect(body).toContain('__litro_data__');
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
test('page-home is visible after hydration', async ({ page }) => {
|
|
16
|
+
await page.goto('/');
|
|
17
|
+
await page.waitForSelector('page-home');
|
|
18
|
+
await expect(page.locator('page-home')).toBeVisible();
|
|
19
|
+
});
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"dev": "litro dev",
|
|
10
10
|
"build": "litro build",
|
|
11
11
|
"preview": "litro preview",
|
|
12
|
-
"generate": "litro generate"
|
|
12
|
+
"generate": "litro generate",
|
|
13
|
+
"test:e2e": "playwright test"
|
|
13
14
|
},
|
|
14
15
|
"dependencies": {
|
|
15
16
|
"@beatzball/litro": "latest",
|
|
@@ -21,6 +22,7 @@
|
|
|
21
22
|
"devDependencies": {
|
|
22
23
|
"nitropack": "^2.13.1",
|
|
23
24
|
"vite": "^5.4.11",
|
|
24
|
-
"typescript": "^5.7.3"
|
|
25
|
+
"typescript": "^5.7.3",
|
|
26
|
+
"@playwright/test": "^1.48.0"
|
|
25
27
|
}
|
|
26
28
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineConfig, devices } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
testDir: './e2e',
|
|
5
|
+
fullyParallel: false,
|
|
6
|
+
retries: process.env.CI ? 2 : 0,
|
|
7
|
+
workers: 1,
|
|
8
|
+
reporter: 'html',
|
|
9
|
+
use: {
|
|
10
|
+
baseURL: 'http://localhost:3030',
|
|
11
|
+
trace: 'on-first-retry',
|
|
12
|
+
},
|
|
13
|
+
projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }],
|
|
14
|
+
webServer: {
|
|
15
|
+
command: 'pnpm dev',
|
|
16
|
+
url: 'http://localhost:3030',
|
|
17
|
+
reuseExistingServer: !process.env.CI,
|
|
18
|
+
timeout: 60000,
|
|
19
|
+
},
|
|
20
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { test, expect } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
const PRERENDERED_ROUTES = [
|
|
4
|
+
'/',
|
|
5
|
+
'/docs/getting-started',
|
|
6
|
+
'/docs/installation',
|
|
7
|
+
'/docs/configuration',
|
|
8
|
+
'/docs/guides-first-page',
|
|
9
|
+
'/docs/guides-deploying',
|
|
10
|
+
'/blog',
|
|
11
|
+
'/blog/welcome',
|
|
12
|
+
'/blog/release-notes',
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
test('home renders page-home component', async ({ page }) => {
|
|
16
|
+
await page.goto('/');
|
|
17
|
+
await page.waitForSelector('page-home');
|
|
18
|
+
await expect(page.locator('page-home')).toBeVisible();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
test('/docs/getting-started renders', async ({ page }) => {
|
|
22
|
+
await page.goto('/docs/getting-started');
|
|
23
|
+
await page.waitForSelector('page-docs-slug');
|
|
24
|
+
await expect(page.locator('page-docs-slug')).toBeVisible();
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test('all prerendered routes return 200', async ({ request }) => {
|
|
28
|
+
for (const route of PRERENDERED_ROUTES) {
|
|
29
|
+
const response = await request.get(route);
|
|
30
|
+
expect(response.status(), `Expected 200 for ${route}`).toBe(200);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"dev": "litro dev",
|
|
10
10
|
"build": "litro build",
|
|
11
11
|
"preview": "litro preview",
|
|
12
|
-
"generate": "litro generate"
|
|
12
|
+
"generate": "litro generate",
|
|
13
|
+
"test:e2e": "playwright test"
|
|
13
14
|
},
|
|
14
15
|
"dependencies": {
|
|
15
16
|
"@beatzball/litro": "latest",
|
|
@@ -21,6 +22,7 @@
|
|
|
21
22
|
"devDependencies": {
|
|
22
23
|
"nitropack": "^2.13.1",
|
|
23
24
|
"vite": "^5.4.11",
|
|
24
|
-
"typescript": "^5.7.3"
|
|
25
|
+
"typescript": "^5.7.3",
|
|
26
|
+
"@playwright/test": "^1.48.0"
|
|
25
27
|
}
|
|
26
28
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineConfig, devices } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
testDir: './e2e',
|
|
5
|
+
fullyParallel: false,
|
|
6
|
+
retries: process.env.CI ? 2 : 0,
|
|
7
|
+
workers: 1,
|
|
8
|
+
reporter: 'html',
|
|
9
|
+
use: {
|
|
10
|
+
baseURL: 'http://localhost:3030',
|
|
11
|
+
trace: 'on-first-retry',
|
|
12
|
+
},
|
|
13
|
+
projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }],
|
|
14
|
+
webServer: {
|
|
15
|
+
command: 'pnpm dev',
|
|
16
|
+
url: 'http://localhost:3030',
|
|
17
|
+
reuseExistingServer: !process.env.CI,
|
|
18
|
+
timeout: 60000,
|
|
19
|
+
},
|
|
20
|
+
});
|