Skip to content

Commit d16781e

Browse files
committed
Rewrite integration tests to work with sharp
Much less manual buffer manipulation needed, here.
1 parent 6f6cafb commit d16781e

File tree

1 file changed

+60
-66
lines changed

1 file changed

+60
-66
lines changed

test/integration.test.ts

Lines changed: 60 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,124 +1,118 @@
11
import supertest from 'supertest';
22
import { expect } from 'chai';
3-
import webserver from './server';
3+
import server from './server';
4+
import sharp = require('sharp');
45

5-
const im = (any: any) => any;
6-
7-
const parseImage = (res, callback) => {
8-
res.setEncoding('binary');
9-
res.data = '';
10-
11-
res.on('data', chunk => {
12-
res.data += chunk;
13-
});
14-
15-
res.on('end', () => {
16-
callback(null, new Buffer(res.data, 'binary'));
17-
});
18-
};
19-
20-
describe.skip('routing', () => {
21-
let request;
6+
describe('middleware', () => {
7+
let metaReader: sharp.Sharp;
228

239
beforeEach(() => {
24-
request = supertest(webserver);
10+
metaReader = sharp();
2511
});
2612

2713
describe('v2 avatar request', () => {
2814
it('responds with an image', done => {
29-
request
15+
supertest(server)
3016
.get('/avatars/abott')
3117
.expect('Content-Type', /image/)
3218
.end(done);
3319
});
3420

3521
it('can resize an image', done => {
36-
request
22+
supertest(server)
3723
.get('/avatars/220/abott')
38-
.parse(parseImage)
39-
.end((err, res) => {
40-
im(res.body).size((_, size) => {
41-
expect(size).to.eql({ height: 220, width: 220 });
42-
done();
43-
});
44-
});
24+
.pipe(metaReader);
25+
26+
metaReader
27+
.metadata()
28+
.then(meta => {
29+
expect(meta.height).to.eql(220);
30+
expect(meta.width).to.eql(220);
31+
done();
32+
})
33+
.catch(done);
4534
});
4635

4736
it('can manually compose an image', done => {
48-
request
37+
supertest(server)
4938
.get('/avatars/face/eyes1/nose4/mouth11/bbb')
5039
.expect(200)
5140
.expect('Content-Type', /image/)
5241
.end(done);
5342
});
5443

5544
it('can manually compose an image with a custom size', done => {
56-
request
45+
supertest(server)
5746
.get('/avatars/face/eyes1/nose4/mouth11/bbb/50')
5847
.expect(200)
5948
.expect('Content-Type', /image/)
60-
.parse(parseImage)
61-
.end((err, res) => {
62-
im(res.body).size((_, size) => {
63-
expect(size).to.eql({ height: 50, width: 50 });
64-
done();
65-
});
66-
});
49+
.pipe(metaReader);
50+
51+
metaReader
52+
.metadata()
53+
.then(meta => {
54+
expect(meta.height).to.eql(50);
55+
expect(meta.width).to.eql(50);
56+
done();
57+
})
58+
.catch(done);
6759
});
6860
});
6961

7062
describe('v2 avatar list requests', () => {
7163
it('responds with json', done => {
72-
request
64+
supertest(server)
7365
.get('/avatars/list')
7466
.expect('Content-Type', /json/)
7567
.end(done);
7668
});
7769

7870
it('responds with a list of possible face parts', done => {
79-
request.get('/avatars/list').end((err, res) => {
80-
const faceParts = res.body.face;
81-
expect(faceParts).to.have.keys('eyes', 'mouth', 'nose');
82-
done();
83-
});
71+
supertest(server)
72+
.get('/avatars/list')
73+
.end((err, res) => {
74+
const faceParts = res.body.face;
75+
expect(faceParts).to.have.keys('eyes', 'mouth', 'nose');
76+
done();
77+
});
8478
});
8579
});
8680

8781
describe('v2 avatar random requests', () => {
8882
it('can randomly generate a new avatar', done => {
8983
const getRandom = () =>
90-
request
84+
supertest(server)
9185
.get('/avatars/random')
9286
.expect(200)
93-
.expect('Content-Type', /image/)
94-
.parse(parseImage);
87+
.expect('Content-Type', /image/);
88+
const metaReader2 = sharp();
9589

96-
getRandom().end((_, r1) => {
97-
getRandom().end((_, r2) => {
98-
// @ts-ignore
99-
im(r1.body).identify('%#', (_, id1) => {
100-
// @ts-ignore
101-
im(r2.body).identify('%#', (_, id2) => {
102-
expect(id1).not.to.equal(id2);
103-
done();
104-
});
105-
});
106-
});
107-
});
90+
getRandom().pipe(metaReader);
91+
getRandom().pipe(metaReader2);
92+
93+
Promise.all([metaReader.metadata(), metaReader2.metadata()])
94+
.then(([meta, meta2]) => {
95+
expect(meta.size).not.to.equal(meta2.size);
96+
done();
97+
})
98+
.catch(done);
10899
});
109100

110101
it('supports a custom size parameter', done => {
111-
request
102+
supertest(server)
112103
.get('/avatars/50/random')
113104
.expect(200)
114105
.expect('Content-Type', /image/)
115-
.parse(parseImage)
116-
.end((err, res) => {
117-
im(res.body).size((_, size) => {
118-
expect(size).to.eql({ height: 50, width: 50 });
119-
done();
120-
});
121-
});
106+
.pipe(metaReader);
107+
108+
metaReader
109+
.metadata()
110+
.then(meta => {
111+
expect(meta.height).to.eql(50);
112+
expect(meta.width).to.eql(50);
113+
done();
114+
})
115+
.catch(done);
122116
});
123117
});
124118
});

0 commit comments

Comments
 (0)