Skip to content

Commit ec39cc2

Browse files
authored
Merge pull request #66 from eviltester/62-move-tests-into-packages
test migration
2 parents 326292c + ec38a79 commit ec39cc2

129 files changed

Lines changed: 333 additions & 1240 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.eslintrc.cjs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,12 @@ module.exports = {
3232
},
3333
overrides: [
3434
{
35-
files: ["tests/**/*.js", "apps/web/src/tests/jest/**/*.js"],
35+
files: [
36+
"tests/**/*.js",
37+
"apps/**/*.test.js",
38+
"apps/web/src/tests/jest/**/*.js",
39+
"packages/*/src/tests/**/*.js",
40+
],
3641
env: {
3742
jest: true,
3843
node: true,

apps/api/jest.config.cjs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module.exports = {
2+
testEnvironment: "node",
3+
testMatch: ["<rootDir>/src/*.test.js"],
4+
transform: {},
5+
};

apps/api/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"scripts": {
2121
"build": "node -e \"console.log('api: no build step')\"",
2222
"start": "node ./src/index.js",
23-
"test": "node --test ./src/*.test.js"
23+
"test": "node --experimental-vm-modules ../../node_modules/jest/bin/jest.js --config ./jest.config.cjs"
2424
},
2525
"dependencies": {
2626
"@anywaydata/core": "^1.1.0",

apps/api/src/docs.route.test.js

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
1-
import test from 'node:test';
2-
import assert from 'node:assert/strict';
31
import http from 'node:http';
42
import { app } from './index.js';
53

64
let server;
75
let port;
86

9-
test.before(async () => {
7+
beforeAll(async () => {
108
server = http.createServer(app);
119
await new Promise((resolve) => server.listen(0, resolve));
1210
port = server.address().port;
1311
});
1412

15-
test.after(async () => {
13+
afterAll(async () => {
1614
if (!server) {
1715
return;
1816
}
@@ -25,16 +23,16 @@ function url(path) {
2523

2624
test('/v1/openapi.json is available', async () => {
2725
const response = await fetch(url('/v1/openapi.json'));
28-
assert.equal(response.status, 200);
26+
expect(response.status).toBe(200);
2927
const body = await response.json();
30-
assert.ok(body?.openapi);
31-
assert.ok(body?.paths?.['/v1/generate']);
32-
assert.ok(body?.paths?.['/v1/generate/options/{format}']);
28+
expect(body?.openapi).toBeTruthy();
29+
expect(body?.paths?.['/v1/generate']).toBeTruthy();
30+
expect(body?.paths?.['/v1/generate/options/{format}']).toBeTruthy();
3331
});
3432

3533
test('/v1/docs serves Swagger UI', async () => {
3634
const response = await fetch(url('/v1/docs'));
37-
assert.equal(response.status, 200);
35+
expect(response.status).toBe(200);
3836
const html = await response.text();
39-
assert.match(html.toLowerCase(), /swagger/);
37+
expect(html.toLowerCase()).toMatch(/swagger/);
4038
});

apps/api/src/fromschema.route.test.js

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
1-
import test from 'node:test';
2-
import assert from 'node:assert/strict';
31
import http from 'node:http';
42
import { app } from './index.js';
53

64
let server;
75
let port;
86

9-
test.before(async () => {
7+
beforeAll(async () => {
108
server = http.createServer(app);
119
await new Promise((resolve) => server.listen(0, resolve));
1210
port = server.address().port;
1311
});
1412

15-
test.after(async () => {
13+
afterAll(async () => {
1614
if (!server) {
1715
return;
1816
}
@@ -30,10 +28,10 @@ test('/v1/generate/fromschema defaults to rows response', async () => {
3028
body: 'iata\nairline.airline.iataCode',
3129
});
3230

33-
assert.equal(response.status, 200);
31+
expect(response.status).toBe(200);
3432
const body = await response.json();
35-
assert.ok(Array.isArray(body.headers));
36-
assert.ok(Array.isArray(body.rows));
33+
expect(Array.isArray(body.headers)).toBeTruthy();
34+
expect(Array.isArray(body.rows)).toBeTruthy();
3735
});
3836

3937
test('/v1/generate/fromschema supports responseFormat=rendered', async () => {
@@ -43,9 +41,9 @@ test('/v1/generate/fromschema supports responseFormat=rendered', async () => {
4341
body: 'iata\nairline.airline.iataCode',
4442
});
4543

46-
assert.equal(response.status, 200);
44+
expect(response.status).toBe(200);
4745
const body = await response.json();
48-
assert.equal(typeof body.rendered, 'string');
46+
expect(typeof body.rendered).toBe('string');
4947
});
5048

5149
test('/v1/generate/fromschema supports responseFormat=all', async () => {
@@ -55,10 +53,10 @@ test('/v1/generate/fromschema supports responseFormat=all', async () => {
5553
body: 'iata\nairline.airline.iataCode',
5654
});
5755

58-
assert.equal(response.status, 200);
56+
expect(response.status).toBe(200);
5957
const body = await response.json();
60-
assert.ok(Array.isArray(body.rows));
61-
assert.equal(typeof body.rendered, 'string');
58+
expect(Array.isArray(body.rows)).toBeTruthy();
59+
expect(typeof body.rendered).toBe('string');
6260
});
6361

6462
test('/v1/generate/fromschema supports responseFormat=raw', async () => {
@@ -68,8 +66,8 @@ test('/v1/generate/fromschema supports responseFormat=raw', async () => {
6866
body: 'iata\nairline.airline.iataCode',
6967
});
7068

71-
assert.equal(response.status, 200);
72-
assert.match(response.headers.get('content-type') || '', /text\/csv/i);
69+
expect(response.status).toBe(200);
70+
expect(response.headers.get('content-type') || '').toMatch(/text\/csv/i);
7371
});
7472

7573
test('/v1/generate/fromschema rejects missing rowCount', async () => {
@@ -79,7 +77,7 @@ test('/v1/generate/fromschema rejects missing rowCount', async () => {
7977
body: 'iata\nairline.airline.iataCode',
8078
});
8179

82-
assert.equal(response.status, 400);
80+
expect(response.status).toBe(400);
8381
});
8482

8583
test('/v1/generate/fromschema rejects invalid responseFormat', async () => {
@@ -89,7 +87,7 @@ test('/v1/generate/fromschema rejects invalid responseFormat', async () => {
8987
body: 'iata\nairline.airline.iataCode',
9088
});
9189

92-
assert.equal(response.status, 400);
90+
expect(response.status).toBe(400);
9391
});
9492

9593
test('/v1/generate/fromschema rejects invalid outputFormat', async () => {
@@ -99,7 +97,7 @@ test('/v1/generate/fromschema rejects invalid outputFormat', async () => {
9997
body: 'iata\nairline.airline.iataCode',
10098
});
10199

102-
assert.equal(response.status, 400);
100+
expect(response.status).toBe(400);
103101
});
104102

105103
test('/v1/generate/fromschema accepts seed from query string and produces deterministic faker output', async () => {
@@ -110,12 +108,12 @@ test('/v1/generate/fromschema accepts seed from query string and produces determ
110108
const responseA = await fetch(url(path), { method: 'POST', headers, body });
111109
const responseB = await fetch(url(path), { method: 'POST', headers, body });
112110

113-
assert.equal(responseA.status, 200);
114-
assert.equal(responseB.status, 200);
111+
expect(responseA.status).toBe(200);
112+
expect(responseB.status).toBe(200);
115113

116114
const payloadA = await responseA.json();
117115
const payloadB = await responseB.json();
118-
assert.deepEqual(payloadA.rows, payloadB.rows);
116+
expect(payloadA.rows).toEqual(payloadB.rows);
119117
});
120118

121119
test('/v1/generate/fromschema rejects invalid seed query value', async () => {
@@ -125,9 +123,9 @@ test('/v1/generate/fromschema rejects invalid seed query value', async () => {
125123
body: 'iata\nairline.airline.iataCode',
126124
});
127125

128-
assert.equal(response.status, 400);
126+
expect(response.status).toBe(400);
129127
const payload = await response.json();
130-
assert.match(payload.errors?.[0] || '', /seed must be a finite number/i);
128+
expect(payload.errors?.[0] || '').toMatch(/seed must be a finite number/i);
131129
});
132130

133131
test('/v1/generate/fromschema applies unit-test defaults for includeSetup', async () => {
@@ -137,24 +135,24 @@ test('/v1/generate/fromschema applies unit-test defaults for includeSetup', asyn
137135
headers: { 'content-type': 'application/json' },
138136
body: JSON.stringify({ options: { includeSetup: true } }),
139137
});
140-
assert.equal(setDefaults.status, 200);
138+
expect(setDefaults.status).toBe(200);
141139

142140
const response = await fetch(url('/v1/generate/fromschema?rowCount=1&outputFormat=jest&responseFormat=rendered'), {
143141
method: 'POST',
144142
headers: { 'content-type': 'text/plain' },
145143
body: 'Name\nBob',
146144
});
147145

148-
assert.equal(response.status, 200);
146+
expect(response.status).toBe(200);
149147
const body = await response.json();
150-
assert.match(body.rendered, /beforeEach/);
151-
assert.match(body.rendered, /expect\(/);
148+
expect(body.rendered).toMatch(/beforeEach/);
149+
expect(body.rendered).toMatch(/expect\(/);
152150
} finally {
153151
const resetDefaults = await fetch(url('/v1/generate/options/jest/default'), {
154152
method: 'POST',
155153
headers: { 'content-type': 'application/json' },
156154
body: JSON.stringify({}),
157155
});
158-
assert.equal(resetDefaults.status, 200);
156+
expect(resetDefaults.status).toBe(200);
159157
}
160158
});

apps/api/src/generate.route.test.js

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
1-
import test from 'node:test';
2-
import assert from 'node:assert/strict';
31
import http from 'node:http';
42
import { app } from './index.js';
53
import { generateFromTextSpec } from '@anywaydata/core';
64

75
let server;
86
let port;
97

10-
test.before(async () => {
8+
beforeAll(async () => {
119
server = http.createServer(app);
1210
await new Promise((resolve) => server.listen(0, resolve));
1311
port = server.address().port;
1412
});
1513

16-
test.after(async () => {
14+
afterAll(async () => {
1715
if (!server) {
1816
return;
1917
}
@@ -45,11 +43,11 @@ test('/v1/generate returns rows payload for valid JSON request', async () => {
4543
body: JSON.stringify({ textSpec: 'Name\nBob', rowCount: 1, outputFormat: 'json' }),
4644
});
4745

48-
assert.equal(response.status, 200);
46+
expect(response.status).toBe(200);
4947
const body = await response.json();
50-
assert.ok(Array.isArray(body.headers));
51-
assert.ok(Array.isArray(body.rows));
52-
assert.equal(Object.hasOwn(body, 'ok'), false);
48+
expect(Array.isArray(body.headers)).toBeTruthy();
49+
expect(Array.isArray(body.rows)).toBeTruthy();
50+
expect(Object.hasOwn(body, 'ok')).toBe(false);
5351
});
5452

5553
test('/v1/generate returns 400 + JSON diagnostics for invalid spec', async () => {
@@ -59,10 +57,10 @@ test('/v1/generate returns 400 + JSON diagnostics for invalid spec', async () =>
5957
body: JSON.stringify({ textSpec: '', rowCount: 1, outputFormat: 'json' }),
6058
});
6159

62-
assert.equal(response.status, 400);
60+
expect(response.status).toBe(400);
6361
const body = await response.json();
64-
assert.ok(Array.isArray(body.errors));
65-
assert.equal(typeof body.diagnostics, 'object');
62+
expect(Array.isArray(body.errors)).toBeTruthy();
63+
expect(typeof body.diagnostics).toBe('object');
6664
});
6765

6866
test('/v1/generate returns JSON parse errors as JSON payload', async () => {
@@ -72,10 +70,10 @@ test('/v1/generate returns JSON parse errors as JSON payload', async () => {
7270
body: '{"textSpec":"line1\nline2","rowCount":1,"outputFormat":"csv"}',
7371
});
7472

75-
assert.equal(response.status, 400);
76-
assert.match(response.headers.get('content-type') || '', /application\/json/i);
73+
expect(response.status).toBe(400);
74+
expect(response.headers.get('content-type') || '').toMatch(/application\/json/i);
7775
const body = await response.json();
78-
assert.ok(Array.isArray(body.errors));
76+
expect(Array.isArray(body.errors)).toBeTruthy();
7977
});
8078

8179
test('/v1/generate supports responseFormat=rendered', async () => {
@@ -85,10 +83,10 @@ test('/v1/generate supports responseFormat=rendered', async () => {
8583
body: JSON.stringify({ textSpec: 'Name\nBob', rowCount: 1, outputFormat: 'json', responseFormat: 'rendered' }),
8684
});
8785

88-
assert.equal(response.status, 200);
86+
expect(response.status).toBe(200);
8987
const body = await response.json();
90-
assert.equal(typeof body.rendered, 'string');
91-
assert.equal(Object.hasOwn(body, 'rows'), false);
88+
expect(typeof body.rendered).toBe('string');
89+
expect(Object.hasOwn(body, 'rows')).toBe(false);
9290
});
9391

9492
test('/v1/generate supports responseFormat=raw', async () => {
@@ -98,8 +96,8 @@ test('/v1/generate supports responseFormat=raw', async () => {
9896
body: JSON.stringify({ textSpec: 'Name\nBob', rowCount: 1, outputFormat: 'csv', responseFormat: 'raw' }),
9997
});
10098

101-
assert.equal(response.status, 200);
102-
assert.match(response.headers.get('content-type') || '', /text\/csv/i);
99+
expect(response.status).toBe(200);
100+
expect(response.headers.get('content-type') || '').toMatch(/text\/csv/i);
103101
});
104102

105103
test('/v1/generate parity: REST rendered matches core for all unit-test frameworks', async () => {
@@ -118,7 +116,7 @@ test('/v1/generate parity: REST rendered matches core for all unit-test framewor
118116
options,
119117
seed: 123,
120118
});
121-
assert.equal(coreResult.ok, true, `core generation failed for ${outputFormat}`);
119+
expect(coreResult.ok).toBe(true);
122120

123121
const response = await fetch(url('/v1/generate'), {
124122
method: 'POST',
@@ -132,8 +130,8 @@ test('/v1/generate parity: REST rendered matches core for all unit-test framewor
132130
seed: 123,
133131
}),
134132
});
135-
assert.equal(response.status, 200, `api status failed for ${outputFormat}`);
133+
expect(response.status).toBe(200);
136134
const body = await response.json();
137-
assert.equal(body.rendered, coreResult.rendered, `render mismatch for ${outputFormat}`);
135+
expect(body.rendered).toBe(coreResult.rendered);
138136
}
139137
});

0 commit comments

Comments
 (0)