Skip to content

Commit 6d62fbc

Browse files
authored
Test suite (#5)
1 parent 515d524 commit 6d62fbc

File tree

18 files changed

+23600
-44964
lines changed

18 files changed

+23600
-44964
lines changed

.github/workflows/test.yml

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ jobs:
5252
strategy:
5353
matrix:
5454
os: [ ubuntu-latest, macos-latest ]
55-
node: [ "14", "16", "18" ]
56-
framework: [ "next", "nuxt", "angular" ]
55+
node: [ "14", "16" ]
56+
framework: [ "next", "angular", "custom" ]
5757
exclude:
5858
# seeing failures on this one, skip for now
5959
- os: ubuntu-latest
@@ -91,7 +91,8 @@ jobs:
9191
- name: Test
9292
run: |
9393
npm i -g firebase-tools
94-
npm i --only production --prefix $(npm root -g)/firebase-tools --ignore-scripts --force --save . || true
94+
npm i --only production --force --ignore-scripts --save --prefix $(npm root -g)/firebase-tools $(npm pack .)
95+
firebase --open-sesame frameworkawareness
9596
npm run test:${{ matrix.framework }}
9697
env:
9798
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
@@ -102,7 +103,7 @@ jobs:
102103
strategy:
103104
matrix:
104105
os: [ ubuntu-latest, macos-latest ]
105-
node: [ "14", "16", "18" ]
106+
node: [ "14", "16" ]
106107
exclude:
107108
# we build with this combination, safely skip
108109
- os: ubuntu-latest
@@ -128,6 +129,14 @@ jobs:
128129
run: npm ci
129130
- name: Build
130131
run: npm run build
132+
- name: Test
133+
run: |
134+
npm i -g firebase-tools
135+
npm i --only production --force --ignore-scripts --save --prefix $(npm root -g)/firebase-tools $(npm pack .)
136+
firebase --open-sesame frameworkawareness
137+
npm run test
138+
env:
139+
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
131140

132141
# Break the branch protection test into a seperate step, so we can manage the matrix more easily
133142
test_and_contribute:
@@ -140,8 +149,8 @@ jobs:
140149
publish:
141150
runs-on: ubuntu-latest
142151
name: Publish (NPM)
143-
# needs: ['build', 'test']
144152
needs: ['build']
153+
# needs: ['build', 'test']
145154
if: ${{ github.ref == 'refs/heads/main' || github.event_name == 'release' }}
146155
steps:
147156
- name: Checkout

e2e/custom/package-lock.json

Lines changed: 4353 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

e2e/custom/package.json

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"name": "express-app",
3+
"version": "0.0.0",
4+
"scripts": {
5+
"build": "spack && npm run static && npm run prerender",
6+
"static": "cp static/* lib",
7+
"prerender": "ts-node tools/prerender.ts"
8+
},
9+
"directories": {
10+
"serve": "lib"
11+
},
12+
"files": ["lib", "server.js"],
13+
"main": "server.js",
14+
"dependencies": {
15+
"express": "^4.18.0",
16+
"firebase": "^9.6.11",
17+
"rxfire": "^6.0.3",
18+
"rxjs": "^7.5.5"
19+
},
20+
"devDependencies": {
21+
"@swc/cli": "^0.1.57",
22+
"@swc/core": "^1.2.173",
23+
"@types/express": "^4.17.13",
24+
"@types/node": "^17.0.29",
25+
"ts-node": "^10.7.0",
26+
"typescript": "^4.6.3"
27+
}
28+
}

e2e/custom/server.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
const express = require('express');
2+
const { join } = require('path');
3+
4+
const server = express();
5+
const distFolder = join(process.cwd(), 'lib');
6+
7+
server.set('views engine', 'html');
8+
server.set('views', distFolder);
9+
10+
server.get('*.*', express.static(distFolder, {
11+
maxAge: '1y'
12+
}));
13+
14+
server.get('/profile', (req, res) => {
15+
console.log(req);
16+
res.send('...');
17+
});
18+
19+
server.get('/', (req, res) => {
20+
console.log(req);
21+
res.send('...');
22+
});
23+
24+
if (require.main.filename === __filename) {
25+
const port = process.env.PORT || 8080;
26+
server.listen(port);
27+
console.log(`listening on port ${port}...`);
28+
}
29+
30+
exports.app = () => server;

e2e/custom/spack.config.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const { config } = require("@swc/core/spack");
2+
3+
module.exports = config({
4+
entry: {
5+
web: __dirname + "/src/index.ts",
6+
},
7+
output: {
8+
path: __dirname + "/lib",
9+
},
10+
});

e2e/custom/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export {}

e2e/custom/static/styles.css

Whitespace-only changes.

e2e/custom/tools/prerender.ts

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import { mkdirSync, writeFileSync } from 'fs';
2+
import { exit } from 'process';
3+
import { promisify } from 'util';
4+
5+
const sleep = promisify(setTimeout);
6+
7+
const prerender = async () => {
8+
9+
console.log('Starting express server...');
10+
await sleep(1_200);
11+
12+
console.log('Prerendering /...');
13+
writeFileSync('./lib/index.html', '...');
14+
await sleep(200);
15+
16+
console.log('Prerendering /posts...');
17+
writeFileSync('./lib/posts.html', '...');
18+
await sleep(200);
19+
20+
console.log('Prerendering /authors...');
21+
writeFileSync('./lib/authors.html', '...');
22+
await sleep(200);
23+
24+
const words = ['drown',
25+
'wacky',
26+
'shop',
27+
'clip',
28+
'earth',
29+
'astonishing',
30+
'observation',
31+
'range',
32+
'craven',
33+
'sort',
34+
'absorbing',
35+
'classy',
36+
'grateful',
37+
'unequal',
38+
'rude',
39+
'ruddy',
40+
'bait',
41+
'refuse',
42+
'amazing',
43+
'merciful',
44+
'education',
45+
'basket',
46+
'icy'];
47+
48+
const randomWord = () => words[words.length * Math.random() | 0];
49+
const randomPostName = () => [randomWord(), randomWord(), randomWord()].join('-');
50+
51+
try { mkdirSync('./lib/posts') } catch(e) { };
52+
53+
const postCount = 56;
54+
const posts = [];
55+
for (let i = 0; i < postCount; i++) {
56+
posts.push(randomPostName());
57+
}
58+
59+
let i = 0;
60+
for (const post of posts) {
61+
console.log(`Prerendering /posts/${post}... (${i++}/${postCount})`);
62+
try { writeFileSync(`./lib/posts/${post}.html`, '...') } catch(e) {};
63+
await sleep(60);
64+
}
65+
66+
console.log('Prerender complete, terminating express server...');
67+
68+
};
69+
70+
prerender().then(() => exit(0), e => {
71+
console.error(e.message);
72+
exit(1)
73+
});

0 commit comments

Comments
 (0)