From cefea7a3371b17afa132d03847944fd5b25709e7 Mon Sep 17 00:00:00 2001 From: Rafal Proszowski Date: Fri, 22 Dec 2017 14:31:27 +0000 Subject: [PATCH] Catchup with the tests We'd like to go forward with the confidence of application keep on working. Ideal situation would be to hold a set of tests, covering each line of code in our system. This however proves to be difficult for different reasons. For instance, I'd like to test that `lit` command when successful would create a message in a separate channel. Sounds simple, yet the hubot testing helper does not support the functionality of multiple rooms. This issue has already been raised with upstream [1] and needs yet to be resolved. In order to keep hubot happy, I had to separate the script tests into a separate directory. In fact, two of them, as I've separated the response messages from script file, to be DRY about it when using in tests. The `.messages.js` file is obsolete and _should_ be removed once we come out with ideal configuration system. I took the lousy approach of implementing tests for the other functions. I'm sorry. [1] https://github.com/mtsmfm/hubot-test-helper/issues/32 --- tests/general.spec.js | 31 +++++++++++++++++++++++++++++++ tests/lit.spec.js | 40 ++++++++++++++++++++++++++++++++++++++++ tests/pugme.spec.js | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 tests/general.spec.js create mode 100644 tests/lit.spec.js create mode 100644 tests/pugme.spec.js diff --git a/tests/general.spec.js b/tests/general.spec.js new file mode 100644 index 0000000..7b1e81f --- /dev/null +++ b/tests/general.spec.js @@ -0,0 +1,31 @@ +const Helper = require('hubot-test-helper'); +const co = require('co'); +const { expect } = require('chai'); + +const helper = new Helper('../scripts/'); + +describe('robotk general', () => { + beforeEach(() => { + this.room = helper.createRoom(); + }); + + afterEach(() => { + this.room.destroy(); + }); + + context('user calls robotk by the wrong name', () => { + beforeEach(() => co(function* () { + yield this.room.user.say('alice', "randbot: i don't even know who you are any more"); + }.bind(this))); + + it('should reply to the user with touching story', () => { + expect(this.room.messages.length).to.equal(2); + expect(this.room.messages[1][1]).to.contain([ + 'That was my old form.', + 'I have become perfect.', + 'I am become RoboTK.', + 'You shall address me as such.' + ].join(' ')); + }); + }); +}); diff --git a/tests/lit.spec.js b/tests/lit.spec.js new file mode 100644 index 0000000..36a6c82 --- /dev/null +++ b/tests/lit.spec.js @@ -0,0 +1,40 @@ +const Helper = require('hubot-test-helper'); +const co = require('co'); +const { expect } = require('chai'); + +const helper = new Helper('../scripts/'); +const responses = require('../lib/responses.json'); + +describe('robotk lit', () => { + beforeEach(() => { + this.room = helper.createRoom(); + }); + + afterEach(() => { + this.room.destroy(); + }); + + context('user requires robotk to lit invalid content', () => { + beforeEach(() => co(function* () { + yield this.room.user.say('alice', '@hubot lit that'); + }.bind(this))); + + it('should fail to lit message due to incorrect syntax', () => { + expect(this.room.messages.length).to.equal(2); + expect(this.room.messages[1][1]).to.be.oneOf(responses.lit.failure); + }); + }); + + context('user requires robotk to lit url', () => { + const url = 'https://hashtaggaming.slack.com/archives/test'; + + beforeEach(() => co(function* () { + yield this.room.user.say('alice', `@hubot lit ${url}`); + }.bind(this))); + + it('should lit message successfully', () => { + expect(this.room.messages.length).to.equal(3); + expect(this.room.messages[2][1]).to.be.oneOf(responses.lit.success); + }); + }); +}); diff --git a/tests/pugme.spec.js b/tests/pugme.spec.js new file mode 100644 index 0000000..bd66eac --- /dev/null +++ b/tests/pugme.spec.js @@ -0,0 +1,39 @@ +const Helper = require('hubot-test-helper'); +const co = require('co'); +const { expect } = require('chai'); + +const helper = new Helper('../scripts/'); + +describe('robotk pugme', () => { + beforeEach(() => { + this.room = helper.createRoom(); + }); + + afterEach(() => { + this.room.destroy(); + }); + + context('user requests to pug them', () => { + beforeEach(() => co(function* () { + yield this.room.user.say('alice', '@hubot pug me'); + yield new Promise(resolve => setTimeout(resolve, 1000)); // Damn it yash. + }.bind(this))); + + it('should reply to the user with a pug pic', () => { + expect(this.room.messages.length).to.equal(2); + expect(this.room.messages[1][1]).to.contain('media.tumblr.com'); + }); + }); + + context('user requests to pug bomb them', () => { + beforeEach(() => co(function* () { + yield this.room.user.say('alice', '@hubot pug bomb 3'); + yield new Promise(resolve => setTimeout(resolve, 1000)); // Damn it yash. + }.bind(this))); + + it('should reply to the user with a wave of pug pics', () => { + expect(this.room.messages.length).to.equal(4); + expect(this.room.messages[3][1]).to.contain('You dun goofed now!'); + }); + }); +});