mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-29 13:52:10 +03:00
a4a9ba7940
refs: https://github.com/TryGhost/Toolbox/issues/229 - we are getting rid of the concept of having multiple api versions in a single ghost install - removed all the code for multiple api versions & left canary wired up, but without the version in the URL - TODO: reorganise the folders so there's no canary folder when we're closer to shipping we need to minimise the pain of merging changes across from main for now
144 lines
4.8 KiB
JavaScript
144 lines
4.8 KiB
JavaScript
const should = require('should');
|
|
const shared = require('../../../../core/server/api/shared');
|
|
|
|
describe('Unit: api/shared/headers', function () {
|
|
it('empty headers config', function () {
|
|
return shared.headers.get().then((result) => {
|
|
result.should.eql({});
|
|
});
|
|
});
|
|
|
|
describe('config.disposition', function () {
|
|
it('json', function () {
|
|
return shared.headers.get({}, {disposition: {type: 'json', value: 'value'}})
|
|
.then((result) => {
|
|
result.should.eql({
|
|
'Content-Disposition': 'Attachment; filename=\"value\"',
|
|
'Content-Type': 'application/json',
|
|
'Content-Length': 2
|
|
});
|
|
});
|
|
});
|
|
|
|
it('csv', function () {
|
|
return shared.headers.get({}, {disposition: {type: 'csv', value: 'my.csv'}})
|
|
.then((result) => {
|
|
result.should.eql({
|
|
'Content-Disposition': 'Attachment; filename=\"my.csv\"',
|
|
'Content-Type': 'text/csv'
|
|
});
|
|
});
|
|
});
|
|
|
|
it('yaml', function () {
|
|
return shared.headers.get('yaml file', {disposition: {type: 'yaml', value: 'my.yaml'}})
|
|
.then((result) => {
|
|
result.should.eql({
|
|
'Content-Disposition': 'Attachment; filename=\"my.yaml\"',
|
|
'Content-Type': 'application/yaml',
|
|
'Content-Length': 11
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('config.cacheInvalidate', function () {
|
|
it('default', function () {
|
|
return shared.headers.get({}, {cacheInvalidate: true})
|
|
.then((result) => {
|
|
result.should.eql({
|
|
'X-Cache-Invalidate': '/*'
|
|
});
|
|
});
|
|
});
|
|
|
|
it('custom value', function () {
|
|
return shared.headers.get({}, {cacheInvalidate: {value: 'value'}})
|
|
.then((result) => {
|
|
result.should.eql({
|
|
'X-Cache-Invalidate': 'value'
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('location header', function () {
|
|
it('adds header when all needed data is present', function () {
|
|
const apiResult = {
|
|
posts: [{
|
|
id: 'id_value'
|
|
}]
|
|
};
|
|
|
|
const apiConfigHeaders = {};
|
|
const frame = {
|
|
docName: 'posts',
|
|
method: 'add',
|
|
original: {
|
|
url: {
|
|
host: 'example.com',
|
|
pathname: `/api/content/posts/`
|
|
}
|
|
}
|
|
};
|
|
|
|
return shared.headers.get(apiResult, apiConfigHeaders, frame)
|
|
.then((result) => {
|
|
result.should.eql({
|
|
// NOTE: the backslash in the end is important to avoid unecessary 301s using the header
|
|
Location: 'https://example.com/api/content/posts/id_value/'
|
|
});
|
|
});
|
|
});
|
|
|
|
it('adds and resolves header to correct url when pathname does not contain backslash in the end', function () {
|
|
const apiResult = {
|
|
posts: [{
|
|
id: 'id_value'
|
|
}]
|
|
};
|
|
|
|
const apiConfigHeaders = {};
|
|
const frame = {
|
|
docName: 'posts',
|
|
method: 'add',
|
|
original: {
|
|
url: {
|
|
host: 'example.com',
|
|
pathname: `/api/content/posts`
|
|
}
|
|
}
|
|
};
|
|
|
|
return shared.headers.get(apiResult, apiConfigHeaders, frame)
|
|
.then((result) => {
|
|
result.should.eql({
|
|
// NOTE: the backslash in the end is important to avoid unecessary 301s using the header
|
|
Location: 'https://example.com/api/content/posts/id_value/'
|
|
});
|
|
});
|
|
});
|
|
|
|
it('does not add header when missing result values', function () {
|
|
const apiResult = {};
|
|
|
|
const apiConfigHeaders = {};
|
|
const frame = {
|
|
docName: 'posts',
|
|
method: 'add',
|
|
original: {
|
|
url: {
|
|
host: 'example.com',
|
|
pathname: `/api/content/posts/`
|
|
}
|
|
}
|
|
};
|
|
|
|
return shared.headers.get(apiResult, apiConfigHeaders, frame)
|
|
.then((result) => {
|
|
result.should.eql({});
|
|
});
|
|
});
|
|
});
|
|
});
|