mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-03 23:00:14 -05:00
193 lines
4.7 KiB
JavaScript
193 lines
4.7 KiB
JavaScript
|
const should = require('should');
|
||
|
const sinon = require('sinon');
|
||
|
const serializers = require('../../../../../../../core/server/api/canary/utils/serializers');
|
||
|
const mappers = require('../../../../../../../core/server/api/canary/utils/serializers/output/mappers');
|
||
|
|
||
|
describe('Unit: canary/utils/serializers/output/default', function () {
|
||
|
let toJSONStub;
|
||
|
beforeEach(function () {
|
||
|
toJSONStub = sinon.stub().callsFake(function () {
|
||
|
return {title: this.title, hello: 'world'};
|
||
|
});
|
||
|
});
|
||
|
|
||
|
afterEach(function () {
|
||
|
sinon.restore();
|
||
|
});
|
||
|
|
||
|
it('.all() can map a pojo with one object', function () {
|
||
|
const response = {
|
||
|
title: 'foo'
|
||
|
};
|
||
|
|
||
|
const apiConfig = {
|
||
|
docName: 'stuffs'
|
||
|
};
|
||
|
const frame = {};
|
||
|
|
||
|
serializers.output.default.all(response, apiConfig, frame);
|
||
|
|
||
|
frame.response.should.eql({
|
||
|
stuffs: [response]
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('.all() can map a pojo of many objects', function () {
|
||
|
const response = {
|
||
|
data: [
|
||
|
{
|
||
|
title: 'foo'
|
||
|
},
|
||
|
{
|
||
|
title: 'bar'
|
||
|
}
|
||
|
],
|
||
|
meta: {
|
||
|
total: 2
|
||
|
}
|
||
|
};
|
||
|
|
||
|
const apiConfig = {
|
||
|
docName: 'stuffs'
|
||
|
};
|
||
|
const frame = {};
|
||
|
|
||
|
serializers.output.default.all(response, apiConfig, frame);
|
||
|
|
||
|
frame.response.should.eql({
|
||
|
stuffs: response.data,
|
||
|
meta: response.meta
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('.all() can map a single Bookshelf model', function () {
|
||
|
const response = {
|
||
|
toJSON: toJSONStub,
|
||
|
title: 'foo'
|
||
|
};
|
||
|
|
||
|
const apiConfig = {
|
||
|
docName: 'stuffs'
|
||
|
};
|
||
|
const frame = {};
|
||
|
|
||
|
serializers.output.default.all(response, apiConfig, frame);
|
||
|
|
||
|
frame.response.should.eql({
|
||
|
stuffs: [
|
||
|
{title: 'foo', hello: 'world'}
|
||
|
]
|
||
|
});
|
||
|
|
||
|
sinon.assert.calledOnce(toJSONStub);
|
||
|
});
|
||
|
|
||
|
it('.all() can map a Bookshelf collection', function () {
|
||
|
const response = {
|
||
|
data: [
|
||
|
{
|
||
|
toJSON: toJSONStub,
|
||
|
title: 'foo'
|
||
|
},
|
||
|
{
|
||
|
toJSON: toJSONStub,
|
||
|
title: 'bar'
|
||
|
}
|
||
|
],
|
||
|
meta: {
|
||
|
total: 2
|
||
|
}
|
||
|
};
|
||
|
|
||
|
const apiConfig = {
|
||
|
docName: 'stuffs'
|
||
|
};
|
||
|
const frame = {};
|
||
|
|
||
|
serializers.output.default.all(response, apiConfig, frame);
|
||
|
|
||
|
frame.response.should.eql({
|
||
|
stuffs: [
|
||
|
{title: 'foo', hello: 'world'},
|
||
|
{title: 'bar', hello: 'world'}
|
||
|
],
|
||
|
meta: response.meta
|
||
|
});
|
||
|
|
||
|
sinon.assert.calledTwice(toJSONStub);
|
||
|
});
|
||
|
|
||
|
it('.all() can map a single Bookshelf model with custom mapper', function () {
|
||
|
mappers.stuffs = sinon.stub().callsFake(function (res) {
|
||
|
return {
|
||
|
title: res.title,
|
||
|
custom: 'thing'
|
||
|
};
|
||
|
});
|
||
|
|
||
|
const response = {
|
||
|
toJSON: toJSONStub,
|
||
|
title: 'foo'
|
||
|
};
|
||
|
|
||
|
const apiConfig = {
|
||
|
docName: 'stuffs'
|
||
|
};
|
||
|
const frame = {};
|
||
|
|
||
|
serializers.output.default.all(response, apiConfig, frame);
|
||
|
|
||
|
frame.response.should.eql({
|
||
|
stuffs: [
|
||
|
{title: 'foo', custom: 'thing'}
|
||
|
]
|
||
|
});
|
||
|
|
||
|
sinon.assert.calledOnce(mappers.stuffs);
|
||
|
sinon.assert.notCalled(toJSONStub);
|
||
|
});
|
||
|
|
||
|
it('.all() can map a Bookshelf collection with custom mapper', function () {
|
||
|
mappers.stuffs = sinon.stub().callsFake(function (res) {
|
||
|
return {
|
||
|
title: res.title,
|
||
|
custom: 'thing'
|
||
|
};
|
||
|
});
|
||
|
|
||
|
const response = {
|
||
|
data: [
|
||
|
{
|
||
|
toJSON: toJSONStub,
|
||
|
title: 'foo'
|
||
|
},
|
||
|
{
|
||
|
toJSON: toJSONStub,
|
||
|
title: 'bar'
|
||
|
}
|
||
|
],
|
||
|
meta: {
|
||
|
total: 2
|
||
|
}
|
||
|
};
|
||
|
|
||
|
const apiConfig = {
|
||
|
docName: 'stuffs'
|
||
|
};
|
||
|
const frame = {};
|
||
|
|
||
|
serializers.output.default.all(response, apiConfig, frame);
|
||
|
|
||
|
frame.response.should.eql({
|
||
|
stuffs: [
|
||
|
{title: 'foo', custom: 'thing'},
|
||
|
{title: 'bar', custom: 'thing'}
|
||
|
],
|
||
|
meta: response.meta
|
||
|
});
|
||
|
|
||
|
sinon.assert.calledTwice(mappers.stuffs);
|
||
|
sinon.assert.notCalled(toJSONStub);
|
||
|
});
|
||
|
});
|