mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-10 23:36:14 -05:00
refs https://github.com/TryGhost/Team/issues/694 - This refactor is not ideal but moves us closer to the desired form of class with injectable (and testable) parameters. Allowed to refactor the test slightly so at least we can check if schedulerd subscribed events work and if they trigger the adapter with correct data - Ideally the api/model calls shoudl be abstracted away as well, but that's for another time - Also got rid of completely pointless "adapters/scheduling" unit test. All it was checking was if the "init" method was called int the passe in object
84 lines
3.1 KiB
JavaScript
84 lines
3.1 KiB
JavaScript
const errors = require('@tryghost/errors');
|
|
const should = require('should');
|
|
const sinon = require('sinon');
|
|
const Promise = require('bluebird');
|
|
const moment = require('moment');
|
|
const testUtils = require('../../../../utils');
|
|
const models = require('../../../../../core/server/models');
|
|
const events = require('../../../../../core/server/lib/common/events');
|
|
const schedulingUtils = require('../../../../../core/server/adapters/scheduling/utils');
|
|
const SchedulingDefault = require('../../../../../core/server/adapters/scheduling/SchedulingDefault');
|
|
const urlUtils = require('../../../../../core/shared/url-utils');
|
|
const PostScheduler = require('../../../../../core/server/adapters/scheduling/post-scheduling/post-scheduler');
|
|
|
|
describe('Scheduling: Post Scheduler', function () {
|
|
let adapter;
|
|
|
|
before(function () {
|
|
models.init();
|
|
});
|
|
|
|
beforeEach(function () {
|
|
adapter = new SchedulingDefault();
|
|
|
|
sinon.stub(schedulingUtils, 'createAdapter').returns(Promise.resolve(adapter));
|
|
|
|
sinon.spy(adapter, 'schedule');
|
|
sinon.spy(adapter, 'unschedule');
|
|
});
|
|
|
|
afterEach(function () {
|
|
sinon.restore();
|
|
});
|
|
|
|
describe('fn:constructor', function () {
|
|
describe('success', function () {
|
|
it('will be scheduled', async function () {
|
|
const post = models.Post.forge(testUtils.DataGenerator.forKnex.createPost({
|
|
id: 1337,
|
|
mobiledoc: testUtils.DataGenerator.markdownToMobiledoc('something')
|
|
}));
|
|
|
|
new PostScheduler({
|
|
apiUrl: 'localhost:1111/',
|
|
integration: {
|
|
api_keys: [{
|
|
id: 'integrationUniqueId',
|
|
secret: 'super-secret'
|
|
}]
|
|
},
|
|
adapter,
|
|
scheduledResources: {
|
|
posts: []
|
|
},
|
|
events
|
|
});
|
|
|
|
events.emit('post.scheduled', post);
|
|
|
|
// let the events bubble up
|
|
await Promise.delay(100);
|
|
|
|
adapter.schedule.called.should.eql(true);
|
|
|
|
adapter.schedule.calledOnce.should.eql(true);
|
|
|
|
adapter.schedule.args[0][0].time.should.equal(moment(post.get('published_at')).valueOf());
|
|
adapter.schedule.args[0][0].url.should.startWith(urlUtils.urlJoin('localhost:1111/', 'schedules', 'posts', post.get('id'), '?token='));
|
|
adapter.schedule.args[0][0].extra.httpMethod.should.eql('PUT');
|
|
should.equal(null, adapter.schedule.args[0][0].extra.oldTime);
|
|
});
|
|
});
|
|
|
|
describe('error', function () {
|
|
it('no apiUrl parameter passed', function () {
|
|
try {
|
|
new PostScheduler();
|
|
throw new Error('should have thrown');
|
|
} catch (err) {
|
|
(err instanceof errors.IncorrectUsageError).should.eql(true);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
});
|