diff --git a/core/server/api/v2/index.js b/core/server/api/v2/index.js index eeb924cfb2..62c17d4a15 100644 --- a/core/server/api/v2/index.js +++ b/core/server/api/v2/index.js @@ -73,5 +73,9 @@ module.exports = { get oembed() { return shared.pipeline(require('./oembed'), localUtils); + }, + + get slack() { + return shared.pipeline(require('./slack'), localUtils); } }; diff --git a/core/server/api/v2/slack.js b/core/server/api/v2/slack.js new file mode 100644 index 0000000000..10d935507f --- /dev/null +++ b/core/server/api/v2/slack.js @@ -0,0 +1,11 @@ +const common = require('../../lib/common'); + +module.exports = { + docName: 'slack', + sendTest: { + permissions: false, + query() { + common.events.emit('slack.test'); + } + } +}; diff --git a/core/server/web/api/v2/admin/routes.js b/core/server/web/api/v2/admin/routes.js index 100f0b51b7..95438b3050 100644 --- a/core/server/web/api/v2/admin/routes.js +++ b/core/server/web/api/v2/admin/routes.js @@ -151,7 +151,7 @@ module.exports = function apiRoutes() { router.post('/mail/test', mw.authAdminAPI, apiv2.http(apiv2.mail.sendTest)); // ## Slack - router.post('/slack/test', mw.authAdminAPI, api.http(api.slack.sendTest)); + router.post('/slack/test', mw.authAdminAPI, apiv2.http(apiv2.slack.sendTest)); // ## Sessions router.get('/session', mw.authAdminAPI, api.http(apiv2.session.read)); diff --git a/core/test/functional/api/v2/admin/slack_spec.js b/core/test/functional/api/v2/admin/slack_spec.js new file mode 100644 index 0000000000..0a5ee28352 --- /dev/null +++ b/core/test/functional/api/v2/admin/slack_spec.js @@ -0,0 +1,51 @@ +const should = require('should'); +const supertest = require('supertest'); +const sinon = require('sinon'); +const testUtils = require('../../../../utils'); +const localUtils = require('./utils'); +const config = require('../../../../../server/config'); +const common = require('../../../../../server/lib/common'); +const ghost = testUtils.startGhost; + +let request; + +describe('Slack API', function () { + let ghostServer; + let sandbox; + before(function () { + sandbox = sinon.sandbox.create(); + + return ghost() + .then(function (_ghostServer) { + ghostServer = _ghostServer; + request = supertest.agent(config.get('url')); + }) + .then(function () { + return localUtils.doAuth(request); + }); + }); + after(function () { + sandbox.restore(); + }); + + it('should be able to post slack test', function (done) { + const eventSpy = sandbox.spy(common.events, 'emit'); + request.post(localUtils.API.getApiQuery('slack/test/')) + .set('Origin', config.get('url')) + .expect('Content-Type', /json/) + .expect('Cache-Control', testUtils.cacheRules.private) + .expect(200) + .end(function (err, res) { + if (err) { + return done(err); + } + + should.not.exist(res.headers['x-cache-invalidate']); + const jsonResponse = res.body; + should.exist(jsonResponse); + eventSpy.calledOnce.should.be.true(); + eventSpy.calledWith('slack.test').should.be.true(); + done(); + }); + }); +});