-
-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #117 from vikejs/phonzammi/dev
feat: add support for checking crawlers/bots & integrate renderToStringAsync()
- Loading branch information
Showing
17 changed files
with
155 additions
and
33 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
import { testRun } from "./.testRun"; | ||
testRun("pnpm run dev"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
import { testRun } from "./.testRun"; | ||
testRun("pnpm run preview"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
export { testRun }; | ||
|
||
import { test, expect, run, page, partRegex, getServerUrl, autoRetry } from "@brillout/test-e2e"; | ||
const dataHk = partRegex`data-hk=${/[0-9-]+/}`; | ||
|
||
function testRun(cmd: `pnpm run ${"dev" | "preview"}`) { | ||
run(cmd); | ||
|
||
const content = "Return of the Jedi"; | ||
const loading = "Loading movies..."; | ||
const titleDefault = "My Vike + Solid App"; | ||
const titleOverriden = "6 Star Wars movies"; | ||
const titleAsScript = `<script>document.title = "${titleOverriden}"</script>`; | ||
const description = partRegex`<meta ${dataHk} name="description" content="List of 6 Star Wars movies.">`; | ||
test("HTML (as user)", async () => { | ||
const html = await fetchAsUser("/"); | ||
expect(html).toContain(content); | ||
expect(html).toContain(loading); | ||
expect(html).toContain(titleAsScript); | ||
expect(getTitle(html)).toBe(titleDefault); | ||
expect(html.split("<title>").length).toBe(2); | ||
expect(html).not.toMatch(description); | ||
}); | ||
test("HTML (as bot)", async () => { | ||
const html = await fetchAsBot("/"); | ||
expect(html).toContain(content); | ||
expect(html).not.toContain(loading); | ||
expect(html).not.toContain(titleAsScript); | ||
expect(getTitle(html)).toBe(titleOverriden); | ||
expect(html.split("<title>").length).toBe(2); | ||
expect(html).toMatch(description); | ||
}); | ||
test("DOM", async () => { | ||
await page.goto(getServerUrl() + "/"); | ||
const body = await page.textContent("body"); | ||
// Playwright seems to await the HTML stream | ||
expect(body).not.toContain(loading); | ||
expect(body).toContain(content); | ||
await testCounter(); | ||
}); | ||
} | ||
|
||
function getTitle(html: string) { | ||
const title = html.match(/<title>(.*?)<\/title>/i)?.[1]; | ||
return title; | ||
} | ||
|
||
async function testCounter() { | ||
// autoRetry() for awaiting client-side code loading & executing | ||
await autoRetry( | ||
async () => { | ||
expect(await page.textContent("button")).toBe("Counter 0"); | ||
await page.click("button"); | ||
expect(await page.textContent("button")).toContain("Counter 1"); | ||
}, | ||
{ timeout: 5 * 1000 }, | ||
); | ||
} | ||
|
||
async function fetchAsBot(pathname: string) { | ||
return await fetchHtml(pathname, "curl/8.5.0"); | ||
} | ||
async function fetchAsUser(pathname: string) { | ||
return await fetchHtml(pathname, "chrome"); | ||
} | ||
async function fetchHtml(pathname: string, userAgent: string) { | ||
const response = await fetch(getServerUrl() + pathname, { headers: { ["User-Agent"]: userAgent } }); | ||
const html = await response.text(); | ||
return html; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
declare module "isbot-fast" { | ||
function isBot(userAgent: string): boolean; | ||
export = isBot; | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.