summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorGravatar Matthew Phillips <matthew@matthewphillips.info> 2021-03-19 17:17:38 -0400
committerGravatar GitHub <noreply@github.com> 2021-03-19 17:17:38 -0400
commit2082001ff8702ec48072b59caafe85573a3b2891 (patch)
treed160341cc51dd39e562a209cad6db168f768a259 /test
parent17c3c98f07628b43b941b84831e8e1f9bcd7ca46 (diff)
downloadastro-2082001ff8702ec48072b59caafe85573a3b2891.tar.gz
astro-2082001ff8702ec48072b59caafe85573a3b2891.tar.zst
astro-2082001ff8702ec48072b59caafe85573a3b2891.zip
Add snowpack as an example project. (#11)
* Initial tests set up This adds tests using uvu (we can switch if people want) and restructures things a bit so that it's easier to test. Like in snowpack you set up a little project. In our tests you can say: ```js const result = await runtime.load('/blog/hello-world') ``` And analyze the result. I included a `test-helpers.js` which has a function that will turn HTML into a cheerio instance, for inspecting the result HTML. * Bring snowpack example in * Formatting
Diffstat (limited to 'test')
-rw-r--r--test/snowpack-integration.test.js73
1 files changed, 73 insertions, 0 deletions
diff --git a/test/snowpack-integration.test.js b/test/snowpack-integration.test.js
new file mode 100644
index 000000000..d2a75075e
--- /dev/null
+++ b/test/snowpack-integration.test.js
@@ -0,0 +1,73 @@
+import { suite } from 'uvu';
+import * as assert from 'uvu/assert';
+import { createRuntime } from '../lib/runtime.js';
+import { promises as fsPromises } from 'fs';
+import { relative as pathRelative } from 'path';
+import { doc } from './test-utils.js';
+
+const { readdir, stat } = fsPromises;
+
+const SnowpackDev = suite('snowpack.dev');
+
+let runtime;
+
+SnowpackDev.before(async () => {
+ const astroConfig = {
+ projectRoot: new URL('../examples/snowpack/', import.meta.url),
+ hmxRoot: new URL('../examples/snowpack/astro/', import.meta.url),
+ dist: './_site'
+ };
+
+ const logging = {
+ level: 'error',
+ dest: process.stderr
+ };
+
+ runtime = await createRuntime(astroConfig, logging);
+});
+
+SnowpackDev.after(async () => {
+ await runtime.shutdown();
+});
+
+async function* allPageFiles(root) {
+ for (const filename of await readdir(root)) {
+ const fullpath = new URL(filename, root);
+ const info = await stat(fullpath);
+
+ if (info.isDirectory()) {
+ yield* allPageFiles(new URL(fullpath + '/'));
+ } else {
+ yield fullpath;
+ }
+ }
+}
+
+async function* allPages(root) {
+ for await(let fileURL of allPageFiles(root)) {
+ let bare = fileURL.pathname
+ .replace(/\.(hmx|md)$/, '')
+ .replace(/index$/, '')
+
+ yield '/' + pathRelative(root.pathname, bare);
+ }
+}
+
+SnowpackDev.skip('Can load every page', async () => {
+ const failed = [];
+
+ const pageRoot = new URL('../examples/snowpack/astro/pages/', import.meta.url);
+ for await(let pathname of allPages(pageRoot)) {
+ const result = await runtime.load(pathname);
+ if(result.statusCode === 500) {
+ failed.push(result);
+ continue;
+ }
+ assert.equal(result.statusCode, 200, `Loading ${pathname}`);
+ }
+
+ assert.equal(failed.length, 0, 'Failed pages');
+ console.log(failed);
+});
+
+SnowpackDev.run(); \ No newline at end of file