Skip to content

Commit

Permalink
Catchup with the tests
Browse files Browse the repository at this point in the history
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] mtsmfm/hubot-test-helper#32
  • Loading branch information
paroxp committed Dec 22, 2017
1 parent f536fa2 commit d6e6f19
Show file tree
Hide file tree
Showing 6 changed files with 140 additions and 19 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"local-server-start": "docker-compose up --build --force-recreate",
"local-server-stop": "docker-compose down",
"start": "./bin/hubot --name robotk",
"test": "mocha ./**/*.spec.js"
"test": "mocha **/*.spec.js scripts/**/*.spec.js"
},
"dependencies": {
"hubot": "2.19.0",
Expand Down
21 changes: 3 additions & 18 deletions scripts/lit.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,13 @@
// Configuration:
//
// Commands:
// randbot lit <message_link> - Immortalizes a message in #lit... fam
// hubot lit <message_link> - Immortalizes a message in #lit... fam
// hubot lit - Immortalizes a shared message in #lit... fam
//
// Author:
// mikestephens/harasho

const Response = require('../lib/response');

const failureMessages = new Response([
"The fuck you talking 'bout fam?",
'You kiss your mother with hat mouth?',
'Who do you think you are...',
'Arse biscuits.',
"nah, i'll pass :troll:"
]);

const successMessages = new Response([
'I gotchu fam',
"You're the boss! :+1:",
'Thought you may ask for that. I liked that too.',
'really? you seriously think that deserves fam? gee...',
'got your back, jack'
]);
const { failureMessages, successMessages } = require('./utils/lit.messages');

// TODO: make this a configurable values
// paro: Just for the time being, let's keep these separate.
Expand Down
31 changes: 31 additions & 0 deletions scripts/tests/general.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
const Helper = require('hubot-test-helper');
const co = require('co');
const { expect } = require('chai');

const helper = new Helper('../');

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(' '));
});
});
});
40 changes: 40 additions & 0 deletions scripts/tests/lit.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
const Helper = require('hubot-test-helper');
const co = require('co');
const { expect } = require('chai');

const helper = new Helper('../');
const { failureMessages, successMessages } = require('../utils/lit.messages');

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(failureMessages.all());
});
});

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(successMessages.all());
});
});
});
39 changes: 39 additions & 0 deletions scripts/tests/pugme.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
const Helper = require('hubot-test-helper');
const co = require('co');
const { expect } = require('chai');

const helper = new Helper('../');

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!');
});
});
});
26 changes: 26 additions & 0 deletions scripts/utils/lit.messages.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// FIXME: This file is completely obsolete. Ideally, we'd be holding these
// responses in a configuration file somewhere and load them into a Response
// class on request.

const Response = require('../../lib/response');

const failureMessages = new Response([
"The fuck you talking 'bout fam?",
'You kiss your mother with hat mouth?',
'Who do you think you are...',
'Arse biscuits.',
"nah, i'll pass :troll:"
]);

const successMessages = new Response([
'I gotchu fam',
"You're the boss! :+1:",
'Thought you may ask for that. I liked that too.',
'really? you seriously think that deserves fam? gee...',
'got your back, jack'
]);

module.exports = {
failureMessages,
successMessages
};

0 comments on commit d6e6f19

Please sign in to comment.