think-payload
Version:
Payload for ThinkJS 3.x
186 lines (171 loc) • 4.49 kB
JavaScript
const path = require('path');
const test = require('ava');
const request = require('supertest');
const payload = require('../index.js');
const Koa = require('koa');
const app = new Koa();
app.use(payload({
extendTypes: {
json: ['application/json-patch+json']
},
explicitArray: false,
uploadDir: path.join(__dirname, '../tmpdir')
}));
app.use((ctx) => {
ctx.body = ctx.request.body;
});
test.cb('should skip middleware', t => {
request(app.callback())
.post('/')
.set('Content-Type', 'text/plain')
.expect(200)
.end((err, res) => {
if (err) throw err;
t.is(res.text, '');
t.end();
});
});
test.cb('should be able to receive json type requests', t => {
request(app.callback())
.post('/')
.set('Content-Type', 'application/json')
.send({name: 'Berwin'})
.expect('Content-Type', /json/)
.expect(200)
.end((err, res) => {
if (err) throw err;
t.is(res.body.post.name, 'Berwin');
t.end();
});
});
test.cb('should be thrown 400 errors, Because the parameter format is not json', t => {
request(app.callback())
.post('/')
.set('Content-Type', 'application/json')
.send('Berwin')
.expect(400)
.end((err, res) => {
if (err) throw err;
t.is(res.text, 'Incorrect parameter format');
t.end();
});
});
test.cb('should support extend types requests', t => {
request(app.callback())
.post('/')
.set('Content-Type', 'application/json-patch+json')
.send({name: 'Berwin'})
.expect('Content-Type', /json/)
.expect(200)
.end((err, res) => {
if (err) throw err;
t.is(res.body.post.name, 'Berwin');
t.end();
});
});
test.cb('should be able to receive form type requests', t => {
request(app.callback())
.post('/')
.set('Content-Type', 'application/x-www-form-urlencoded')
.send({name: 'Berwin'})
.expect('Content-Type', /json/)
.expect(200)
.end((err, res) => {
if (err) throw err;
t.is(res.body.post.name, 'Berwin');
t.end();
});
});
test.cb('should be able to receive text type requests', t => {
request(app.callback())
.post('/')
.set('Content-Type', 'text/plain')
.send('Berwin')
.expect(200)
.end((err, res) => {
if (err) throw err;
t.is(res.text, 'Berwin');
t.end();
});
});
test.cb('should be able to receive multipart type requests', t => {
request(app.callback())
.post('/')
.attach('xxfile', path.join(__dirname, '../index.js'))
.expect(200)
.end((err, res) => {
if (err) throw err;
t.truthy(res.body.file.xxfile.path.indexOf(path.join(__dirname, '../tmpdir')) !== -1);
t.is(res.body.file.xxfile.name, 'index.js');
t.is(res.body.file.xxfile.type, 'application/javascript');
t.end();
});
});
test.cb('should be able to receive multi file', t => {
request(app.callback())
.post('/')
.attach('a', path.join(__dirname, '../index.js'))
.attach('b', path.join(__dirname, '../package.json'))
.expect(200)
.end((err, res) => {
if (err) throw err;
t.is(res.body.file.a.type, 'application/javascript');
t.is(res.body.file.b.type, 'application/json');
t.end();
});
});
test.cb('should be able to receive both file and text', t => {
request(app.callback())
.post('/')
.attach('xxfile', path.join(__dirname, '../index.js'))
.field('text', 'test text')
.expect(200)
.end((err, res) => {
if (err) throw err;
t.is(res.body.post.text, 'test text');
t.is(res.body.file.xxfile.name, 'index.js');
t.is(res.body.file.xxfile.type, 'application/javascript');
t.end();
});
});
test.cb('should be able to receive xml type requests', t => {
request(app.callback())
.post('/')
.set('Content-Type', 'text/xml')
.send("<root>Hello Berwin!</root>")
.expect(200)
.end((err, res) => {
if (err) throw err;
t.is(res.body.post.root, 'Hello Berwin!');
t.end();
});
});
test.cb('xml support parameters', t => {
request(app.callback())
.post('/')
.set('Content-Type', 'text/xml')
.send("<root><name>Hello Berwin!</name></root>")
.expect(200)
.end((err, res) => {
if (err) throw err;
t.is(res.body.post.root.name, 'Hello Berwin!');
t.end();
});
});
test.cb('should throw error', t => {
const app2 = new Koa();
app2.onerror = (err) => {
t.is(err.message, 'test throw error');
};
app2.use(payload());
app2.use((ctx) => {
throw new Error('test throw error');
});
request(app2.callback())
.post('/')
.expect(500)
.end((err, res) => {
if (err) throw err;
t.end();
});
});