b6519e0f1f
fixes GRO-34 fixes GRO-33 This is a revision of a previous commit, that broke the browser tests because changes in the data generator (requiring bookshelf had side effects). This adds a new way to run all tests with enforced numeric ObjectIDs. These numeric ids cause issues if they are used withing NQL filters. So they surface tiny bugs in our codebase. You can run tests using this option via: NUMERIC_IDS=1 yarn test:e2e Removed some defensive logic that could be explained by this discovered issue.
137 lines
5.8 KiB
JavaScript
137 lines
5.8 KiB
JavaScript
const should = require('should');
|
|
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=${encodeURIComponent(`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 new Promise((resolve) => {
|
|
setTimeout(resolve, 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=${encodeURIComponent(`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 new Promise((resolve) => {
|
|
setTimeout(resolve, 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=${encodeURIComponent(`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);
|
|
});
|
|
});
|