Ghost/test/unit/api/shared/headers.test.js
Hannah Wolfe a4a9ba7940
🔥 Removed versioned APIs
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
2022-04-28 15:37:09 +01:00

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