0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-03 23:00:14 -05:00
ghost/test/unit/api/canary/utils/serializers/output/default.test.js

193 lines
4.7 KiB
JavaScript
Raw Normal View History

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);
});
});