-
-
Notifications
You must be signed in to change notification settings - Fork 15
/
test.js
80 lines (69 loc) · 2.09 KB
/
test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import process from 'node:process';
import {createServer} from 'node:http';
import test from 'ava';
import got from 'got';
import nock from 'nock';
import testListen from 'test-listen';
import fixture from './example-response.json' with {type: 'json'};
import githubFixture from './github-response.json' with {type: 'json'};
const ORIGIN = process.env.ACCESS_ALLOW_ORIGIN;
const TOKEN = process.env.GITHUB_TOKEN;
const USERNAME = process.env.GITHUB_USERNAME;
process.env.CACHE_MAX_AGE = 300;
process.env.MAX_REPOS = 6;
let url;
test.before(async () => {
process.env.ACCESS_ALLOW_ORIGIN = '*';
process.env.GITHUB_TOKEN = 'unicorn';
process.env.GITHUB_USERNAME = 'sindresorhus';
const response = {
data: {
user: {
repositories: {
edges: githubFixture.slice(6),
},
},
},
};
const maxReposResponse = {
data: {
user: {
repositories: {
edges: githubFixture.slice(0, 6),
},
},
},
};
nock('https://api.github.com/graphql')
.persist()
.filteringPath(pth => `${pth}/`)
.matchHeader('authorization', `bearer ${process.env.GITHUB_TOKEN}`)
.post('/')
.reply(200, response)
.post('/max-repos')
.reply(200, maxReposResponse);
const {default: main} = await import('./index.js');
url = await testListen(createServer(main));
});
test.after(() => {
process.env.ACCESS_ALLOW_ORIGIN = ORIGIN;
process.env.GITHUB_TOKEN = TOKEN;
process.env.GITHUB_USERNAME = USERNAME;
});
test('fetch latest repos for user', async t => {
const body = await got(url).json();
t.deepEqual(body, fixture);
if (body.length > 0) {
t.is(typeof body[0].stargazers, 'number');
t.is(typeof body[0].forks, 'number');
}
});
test('ensure number of repos returned equals `process.env.MAX_REPOS`', async t => {
const body = await got(`${url}/max-repos`).json();
t.deepEqual(body.length, Number(process.env.MAX_REPOS), `Expected ${process.env.MAX_REPOS}, but got ${body.length}`);
});
test('set origin header', async t => {
const {headers} = await got(url, {responseType: 'json'});
t.is(headers['access-control-allow-origin'], '*');
t.is(headers['cache-control'], 's-maxage=86400, max-age=0');
});