diff options
author | 2022-10-07 15:36:24 +0200 | |
---|---|---|
committer | 2022-10-07 09:36:24 -0400 | |
commit | 5bbe385b21597f240eafc989c8909768ca96a65a (patch) | |
tree | 00866d7978e0513ff2389cf85c54b82c8f6edb14 /packages/integrations/deno/test/basics.test.ts | |
parent | f38e5560851759323854b70c7a5277ba9bf05710 (diff) | |
download | astro-5bbe385b21597f240eafc989c8909768ca96a65a.tar.gz astro-5bbe385b21597f240eafc989c8909768ca96a65a.tar.zst astro-5bbe385b21597f240eafc989c8909768ca96a65a.zip |
Improve test infrastructure for integrations/deno (#5005)
* Improve test infrastructure for integrations/deno
* Add changeset
* Use declared type
* Remove changeset
* Upgrade deno version in -workflow
Diffstat (limited to '')
-rw-r--r-- | packages/integrations/deno/test/basics.test.ts | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/packages/integrations/deno/test/basics.test.ts b/packages/integrations/deno/test/basics.test.ts new file mode 100644 index 000000000..5449788d7 --- /dev/null +++ b/packages/integrations/deno/test/basics.test.ts @@ -0,0 +1,128 @@ +import { StartServerCallback, runBuildAndStartApp, defaultTestPermissions } from './helpers.ts'; +import { DOMParser } from "https://deno.land/x/deno_dom@v0.1.35-alpha/deno-dom-wasm.ts"; +import { assert, assertEquals } from "https://deno.land/std@0.158.0/testing/asserts.ts"; + +async function startApp(cb: StartServerCallback) { + await runBuildAndStartApp('./fixtures/basics/', cb); +} + +// this needs to be here and not in the specific test case, because +// the variables are loaded in the global scope of the built server +// module, which is only executed once upon the first load +const varContent = 'this is a value stored in env variable'; +Deno.env.set('SOME_VARIABLE', varContent); + +Deno.test({ + name: 'Basics', + permissions: defaultTestPermissions, + async fn() { + await startApp(async (baseUrl: URL) => { + const resp = await fetch(baseUrl); + assertEquals(resp.status, 200); + + const html = await resp.text(); + assert(html); + + const doc = new DOMParser().parseFromString(html, `text/html`); + const div = doc!.querySelector('#react'); + + assert(div, 'div exists'); + }); + }, + sanitizeResources: false, + sanitizeOps: false +}); + +Deno.test({ + name: 'Custom 404', + permissions: defaultTestPermissions, + async fn() { + await startApp(async (baseUrl: URL) => { + const resp = await fetch(new URL("this-does-not-exist", baseUrl)); + assertEquals(resp.status, 404); + + const html = await resp.text(); + assert(html); + + const doc = new DOMParser().parseFromString(html, `text/html`); + const header = doc!.querySelector('#custom-404'); + assert(header, 'displays custom 404'); + }); + }, + sanitizeResources: false, + sanitizeOps: false +}); + +Deno.test({ + name: 'Loads style assets', + permissions: defaultTestPermissions, + async fn() { + await startApp(async (baseUrl: URL) => { + let resp = await fetch(baseUrl); + const html = await resp.text(); + + const doc = new DOMParser().parseFromString(html, `text/html`); + const link = doc!.querySelector('link'); + const href = link!.getAttribute('href'); + + resp = await fetch(new URL(href!, baseUrl)); + assertEquals(resp.status, 200); + const ct = resp.headers.get('content-type'); + assertEquals(ct, 'text/css'); + await resp.body!.cancel(); + }); + }, + sanitizeResources: false, + sanitizeOps: false +}); + +Deno.test({ + name: 'Correctly loads run-time env variables', + permissions: defaultTestPermissions, + async fn() { + await startApp(async (baseUrl: URL) => { + const resp = await fetch(baseUrl); + const html = await resp.text(); + + const doc = new DOMParser().parseFromString(html, `text/html`); + const p = doc!.querySelector('p#env-value'); + assertEquals(p!.innerText, varContent); + }); + }, + sanitizeResources: false, + sanitizeOps: false +}); + +Deno.test({ + name: 'Works with Markdown', + permissions: defaultTestPermissions, + async fn() { + await startApp(async (baseUrl: URL) => { + const resp = await fetch(new URL('markdown', baseUrl)); + const html = await resp.text(); + + const doc = new DOMParser().parseFromString(html, `text/html`); + const h1 = doc!.querySelector('h1'); + assertEquals(h1!.innerText, 'Heading from Markdown'); + }); + }, + sanitizeResources: false, + sanitizeOps: false +}); + +Deno.test({ + name: 'Works with MDX', + permissions: defaultTestPermissions, + async fn() { + await startApp(async (baseUrl: URL) => { + const resp = await fetch(new URL('mdx', baseUrl)); + const html = await resp.text(); + + const doc = new DOMParser().parseFromString(html, `text/html`); + const h1 = doc!.querySelector('h1'); + assertEquals(h1!.innerText, 'Heading from MDX'); + }); + }, + sanitizeResources: false, + sanitizeOps: false +}); |