mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-12 06:25:51 +03:00
f489d7df72
no issue - changes xmlrcp & slack `init` function to be `listen` - update the code to use `listen` instead of `init` - changes the tests to make sure that event listeners are not wired up - adds 100% test coverage Since we added slack event listeners, the xmlrpc event tests have been throwing an error: > Unhandled rejection Error See: http://puu.sh/phvjZ.png This is because both xmlrpc & slack are listening to `post.published` events. xmlrpc didn't require any extra stubbing, but the slack listener did By turning the listeners off after the tests, we reset the environment to not impact the next event test We probably need to do more work like this to improve the systems around event handling and make them more robust
134 lines
4.7 KiB
JavaScript
134 lines
4.7 KiB
JavaScript
/*globals describe, beforeEach, afterEach, it*/
|
|
var _ = require('lodash'),
|
|
nock = require('nock'),
|
|
should = require('should'),
|
|
sinon = require('sinon'),
|
|
rewire = require('rewire'),
|
|
testUtils = require('../utils'),
|
|
configUtils = require('../utils/configUtils'),
|
|
xmlrpc = rewire('../../server/data/xml/xmlrpc'),
|
|
events = require('../../server/events'),
|
|
// storing current environment
|
|
currentEnv = process.env.NODE_ENV;
|
|
|
|
// To stop jshint complaining
|
|
should.equal(true, true);
|
|
|
|
describe('XMLRPC', function () {
|
|
var sandbox, eventStub;
|
|
|
|
beforeEach(function () {
|
|
sandbox = sinon.sandbox.create();
|
|
eventStub = sandbox.stub(events, 'on');
|
|
// give environment a value that will ping
|
|
process.env.NODE_ENV = 'production';
|
|
});
|
|
|
|
afterEach(function () {
|
|
sandbox.restore();
|
|
configUtils.restore();
|
|
nock.cleanAll();
|
|
// reset the environment
|
|
process.env.NODE_ENV = currentEnv;
|
|
});
|
|
|
|
it('listen() should initialise event correctly', function () {
|
|
xmlrpc.listen();
|
|
eventStub.calledOnce.should.be.true();
|
|
eventStub.calledWith('post.published', xmlrpc.__get__('listener')).should.be.true();
|
|
});
|
|
|
|
it('listener() calls ping() with toJSONified model', function () {
|
|
var testPost = _.clone(testUtils.DataGenerator.Content.posts[2]),
|
|
testModel = {toJSON: function () {return testPost; }},
|
|
pingStub = sandbox.stub(),
|
|
resetXmlRpc = xmlrpc.__set__('ping', pingStub),
|
|
listener = xmlrpc.__get__('listener');
|
|
|
|
listener(testModel);
|
|
|
|
pingStub.calledOnce.should.be.true();
|
|
pingStub.calledWith(testPost).should.be.true();
|
|
|
|
// Reset xmlrpc ping method
|
|
resetXmlRpc();
|
|
});
|
|
|
|
describe('ping()', function () {
|
|
var ping = xmlrpc.__get__('ping');
|
|
|
|
it('with a post should execute two pings', function () {
|
|
var ping1 = nock('http://blogsearch.google.com').post('/ping/RPC2').reply(200),
|
|
ping2 = nock('http://rpc.pingomatic.com').post('/').reply(200),
|
|
testPost = _.clone(testUtils.DataGenerator.Content.posts[2]);
|
|
|
|
ping(testPost);
|
|
|
|
ping1.isDone().should.be.true();
|
|
ping2.isDone().should.be.true();
|
|
});
|
|
|
|
it('with default post should not execute pings', function () {
|
|
var ping1 = nock('http://blogsearch.google.com').post('/ping/RPC2').reply(200),
|
|
ping2 = nock('http://rpc.pingomatic.com').post('/').reply(200),
|
|
testPost = _.clone(testUtils.DataGenerator.Content.posts[2]);
|
|
|
|
testPost.slug = 'welcome-to-ghost';
|
|
|
|
ping(testPost);
|
|
|
|
ping1.isDone().should.be.false();
|
|
ping2.isDone().should.be.false();
|
|
});
|
|
|
|
it('with a page should not execute pings', function () {
|
|
var ping1 = nock('http://blogsearch.google.com').post('/ping/RPC2').reply(200),
|
|
ping2 = nock('http://rpc.pingomatic.com').post('/').reply(200),
|
|
testPage = _.clone(testUtils.DataGenerator.Content.posts[5]);
|
|
|
|
ping(testPage);
|
|
|
|
ping1.isDone().should.be.false();
|
|
ping2.isDone().should.be.false();
|
|
});
|
|
|
|
it('when privacy.useRpcPing is false should not execute pings', function () {
|
|
var ping1 = nock('http://blogsearch.google.com').post('/ping/RPC2').reply(200),
|
|
ping2 = nock('http://rpc.pingomatic.com').post('/').reply(200),
|
|
testPost = _.clone(testUtils.DataGenerator.Content.posts[2]);
|
|
|
|
configUtils.set({privacy: {useRpcPing: false}});
|
|
|
|
ping(testPost);
|
|
|
|
ping1.isDone().should.be.false();
|
|
ping2.isDone().should.be.false();
|
|
});
|
|
|
|
it('captures errors from requests', function (done) {
|
|
var ping1 = nock('http://blogsearch.google.com').post('/ping/RPC2').reply(200),
|
|
ping2 = nock('http://rpc.pingomatic.com').post('/').replyWithError('ping site is down'),
|
|
testPost = _.clone(testUtils.DataGenerator.Content.posts[2]),
|
|
errorMock, resetXmlRpc;
|
|
|
|
errorMock = {
|
|
logError: function logError(error) {
|
|
should.exist(error);
|
|
error.message.should.eql('ping site is down');
|
|
|
|
// Reset xmlrpc handleError method and exit test
|
|
resetXmlRpc();
|
|
done();
|
|
}
|
|
};
|
|
|
|
resetXmlRpc = xmlrpc.__set__('errors', errorMock);
|
|
|
|
ping(testPost);
|
|
|
|
ping1.isDone().should.be.true();
|
|
ping2.isDone().should.be.true();
|
|
});
|
|
});
|
|
});
|