mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-22 18:31:57 +03:00
d6267340a1
closes #11994 - Adds support for ordering based on slug filter that contains a slug-is-in filter. It is applied only to Content API's resources - post, page, tag, author. The order is applied in the same order in which slugs appear in the filter. - For, example providing following query parameter filter for any of the above resources: `?filter=slug:[kitchen-sink,bacon,chorizo]`, would filter them by these slugs and order in the same way defined in the filter - Can be used in handlebars templates in following way: `{{#get "tags" filter="slug:[slugs,of,the,tags,in,order]"}}` - The property conteining this new order is assigned to `autoOrder` instead of `rawOrder` intentionally. This explicit asstignment would allow distinguishing where the 'orderRaw' comes from the model or the API layer. Apart from adding necessary context this separation makes it easier to refactor separately model layer and API specific ordering in the future - This commit also fixes default filtering for `author` resource in Content API. The serializer was never used before as it was missing from `serializers/index.js` module.
57 lines
2.2 KiB
JavaScript
57 lines
2.2 KiB
JavaScript
const should = require('should');
|
|
const supertest = require('supertest');
|
|
const localUtils = require('./utils');
|
|
const testUtils = require('../../../../utils');
|
|
const configUtils = require('../../../../utils/configUtils');
|
|
const config = require('../../../../../core/shared/config');
|
|
|
|
const ghost = testUtils.startGhost;
|
|
|
|
describe('Authors Content API', function () {
|
|
const validKey = localUtils.getValidKey();
|
|
let request;
|
|
|
|
before(function () {
|
|
return ghost()
|
|
.then(function (_ghostServer) {
|
|
request = supertest.agent(config.get('url'));
|
|
})
|
|
.then(function () {
|
|
return testUtils.initFixtures('owner:post', 'users:no-owner', 'user:inactive', 'posts', 'api_keys');
|
|
});
|
|
});
|
|
|
|
afterEach(function () {
|
|
configUtils.restore();
|
|
});
|
|
|
|
it('can read authors with fields', function () {
|
|
return request.get(localUtils.API.getApiQuery(`authors/1/?key=${validKey}&fields=name`))
|
|
.set('Origin', testUtils.API.getURL())
|
|
.expect('Content-Type', /json/)
|
|
.expect('Cache-Control', testUtils.cacheRules.private)
|
|
.expect(200)
|
|
.then((res) => {
|
|
should.not.exist(res.headers['x-cache-invalidate']);
|
|
|
|
// We don't expose any other attrs.
|
|
localUtils.API.checkResponse(res.body.authors[0], 'author', null, null, ['id', 'name']);
|
|
});
|
|
});
|
|
|
|
it('browse authors with slug filter, should order in slug order', function () {
|
|
return request.get(localUtils.API.getApiQuery(`authors/?key=${validKey}&filter=slug:[joe-bloggs,ghost,slimer-mcectoplasm]`))
|
|
.expect('Content-Type', /json/)
|
|
.expect('Cache-Control', testUtils.cacheRules.private)
|
|
.expect(200)
|
|
.then((res) => {
|
|
const jsonResponse = res.body;
|
|
|
|
jsonResponse.authors.should.be.an.Array().with.lengthOf(3);
|
|
jsonResponse.authors[0].slug.should.equal('joe-bloggs');
|
|
jsonResponse.authors[1].slug.should.equal('ghost');
|
|
jsonResponse.authors[2].slug.should.equal('slimer-mcectoplasm');
|
|
});
|
|
});
|
|
});
|