Ghost/test/e2e-api/admin/actions.test.js
Naz 7becf0a2b2 Aliased canary endpoints to point to non-versioned URLs
refs https://github.com/TryGhost/Toolbox/issues/169

- Before releasing Ghost v5 we would like to move all canary-related URLs to a non-versioned format, which will become a default in v5.
- 'canary' is by definition unstable, so breaking any unprepared client explicitly using the canary is expected
- Removed the aliased /content/ and /admin/ apps from app.js because with updated configuration they become duplicates of 'canary' endpoints
2022-03-14 21:22:54 +13:00

134 lines
5.7 KiB
JavaScript

const should = require('should');
const Promise = require('bluebird');
const supertest = require('supertest');
const testUtils = require('../../utils');
const localUtils = require('./utils');
const config = require('../../../core/shared/config');
describe('Actions API', function () {
let request;
before(async function () {
await localUtils.startGhost();
request = supertest.agent(config.get('url'));
await localUtils.doAuth(request, 'integrations', 'api_keys');
});
// @NOTE: This test runs a little slower, because we store Dates without milliseconds.
it('Can request actions for resource', async function () {
let postUpdatedAt;
const res = await request
.post(localUtils.API.getApiQuery('posts/'))
.set('Origin', config.get('url'))
.send({
posts: [{
title: 'test post'
}]
})
.expect('Content-Type', /json/)
.expect('Cache-Control', testUtils.cacheRules.private)
.expect(201);
const postId = res.body.posts[0].id;
postUpdatedAt = res.body.posts[0].updated_at;
const res2 = await request
.get(localUtils.API.getApiQuery(`actions/?filter=resource_id:${postId}&include=actor`))
.set('Origin', config.get('url'))
.expect('Content-Type', /json/)
.expect('Cache-Control', testUtils.cacheRules.private)
.expect(200);
localUtils.API.checkResponse(res2.body, 'actions');
localUtils.API.checkResponse(res2.body.actions[0], 'action');
res2.body.actions.length.should.eql(1);
res2.body.actions[0].resource_type.should.eql('post');
res2.body.actions[0].actor_type.should.eql('user');
res2.body.actions[0].event.should.eql('added');
Object.keys(res2.body.actions[0].actor).length.should.eql(4);
res2.body.actions[0].actor.id.should.eql(testUtils.DataGenerator.Content.users[0].id);
res2.body.actions[0].actor.image.should.eql(testUtils.DataGenerator.Content.users[0].profile_image);
res2.body.actions[0].actor.name.should.eql(testUtils.DataGenerator.Content.users[0].name);
res2.body.actions[0].actor.slug.should.eql(testUtils.DataGenerator.Content.users[0].slug);
await Promise.delay(1000);
const res3 = await request
.put(localUtils.API.getApiQuery(`posts/${postId}/`))
.set('Origin', config.get('url'))
.send({
posts: [{
slug: 'new-slug',
updated_at: postUpdatedAt
}]
})
.expect('Content-Type', /json/)
.expect('Cache-Control', testUtils.cacheRules.private)
.expect(200);
postUpdatedAt = res3.body.posts[0].updated_at;
const res4 = await request
.get(localUtils.API.getApiQuery(`actions/?filter=resource_id:${postId}&include=actor`))
.set('Origin', config.get('url'))
.expect('Content-Type', /json/)
.expect('Cache-Control', testUtils.cacheRules.private)
.expect(200);
localUtils.API.checkResponse(res4.body, 'actions');
localUtils.API.checkResponse(res4.body.actions[0], 'action');
res4.body.actions.length.should.eql(2);
res4.body.actions[0].resource_type.should.eql('post');
res4.body.actions[0].actor_type.should.eql('user');
res4.body.actions[0].event.should.eql('edited');
Object.keys(res4.body.actions[0].actor).length.should.eql(4);
res4.body.actions[0].actor.id.should.eql(testUtils.DataGenerator.Content.users[0].id);
res4.body.actions[0].actor.image.should.eql(testUtils.DataGenerator.Content.users[0].profile_image);
res4.body.actions[0].actor.name.should.eql(testUtils.DataGenerator.Content.users[0].name);
res4.body.actions[0].actor.slug.should.eql(testUtils.DataGenerator.Content.users[0].slug);
await Promise.delay(1000);
const integrationRequest = supertest.agent(config.get('url'));
await integrationRequest
.put(localUtils.API.getApiQuery(`posts/${postId}/`))
.set('Origin', config.get('url'))
.set('Authorization', `Ghost ${localUtils.getValidAdminToken('/admin/')}`)
.send({
posts: [{
featured: true,
updated_at: postUpdatedAt
}]
})
.expect('Content-Type', /json/)
.expect('Cache-Control', testUtils.cacheRules.private)
.expect(200);
const res5 = await request
.get(localUtils.API.getApiQuery(`actions/?filter=resource_id:${postId}&include=actor`))
.set('Origin', config.get('url'))
.expect('Content-Type', /json/)
.expect('Cache-Control', testUtils.cacheRules.private)
.expect(200);
localUtils.API.checkResponse(res5.body, 'actions');
localUtils.API.checkResponse(res5.body.actions[0], 'action');
res5.body.actions.length.should.eql(3);
res5.body.actions[0].resource_type.should.eql('post');
res5.body.actions[0].actor_type.should.eql('integration');
res5.body.actions[0].event.should.eql('edited');
Object.keys(res5.body.actions[0].actor).length.should.eql(4);
res5.body.actions[0].actor.id.should.eql(testUtils.DataGenerator.Content.integrations[0].id);
should.equal(res5.body.actions[0].actor.image, null);
res5.body.actions[0].actor.name.should.eql(testUtils.DataGenerator.Content.integrations[0].name);
res5.body.actions[0].actor.slug.should.eql(testUtils.DataGenerator.Content.integrations[0].slug);
});
});