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/posts.test.js
Hannah Wolfe 70d15e077b
Refactored mapper into individual files (#14328)
refs: https://github.com/TryGhost/Toolbox/issues/245

- Ghost's API framework has a mixed up concept of what a serializer is. Mappers are true serializers! What we call serializers are little more than a small formatting step.
- This PR splits mappers into individual files and uses the endpoint's docname as the mapper name. This will help us to automate the calling of a mapper for an endpoint later.
- This is one tiny step in reworking the framework to need less code to make it work, and to have clearer concepts for how to do things.
2022-03-16 12:44:11 +00:00

57 lines
1.7 KiB
JavaScript

const should = require('should');
const sinon = require('sinon');
const testUtils = require('../../../../../../utils');
const mappers = require('../../../../../../../core/server/api/canary/utils/serializers/output/mappers');
const membersService = require('../../../../../../../core/server/services/members');
const serializers = require('../../../../../../../core/server/api/canary/utils/serializers');
describe('Unit: canary/utils/serializers/output/posts', function () {
let postModel;
beforeEach(function () {
postModel = (data) => {
return Object.assign(data, {toJSON: sinon.stub().returns(data)});
};
sinon.stub(membersService, 'api').get(() => {
return {
productRepository: {
list: () => {
return {data: null};
}
}
};
});
sinon.stub(mappers, 'posts').returns({});
});
afterEach(function () {
sinon.restore();
});
it('calls the mapper', async function () {
const apiConfig = {};
const frame = {
options: {
withRelated: ['tags', 'authors'],
context: {
private: false
}
}
};
const ctrlResponse = {
data: [
postModel(testUtils.DataGenerator.forKnex.createPost({})),
postModel(testUtils.DataGenerator.forKnex.createPost({}))
],
meta: {}
};
await serializers.output.posts.all(ctrlResponse, apiConfig, frame);
mappers.posts.callCount.should.equal(2);
mappers.posts.getCall(0).args.should.eql([ctrlResponse.data[0], frame, {tiers: []}]);
});
});