UNPKG

5.89 kBJavaScriptView Raw
1'use strict'
2
3/* global describe, it */
4/* eslint-disable no-unused-expressions */
5
6// Assertions and Stubbing
7const chai = require('chai')
8const sinon = require('sinon')
9chai.use(require('sinon-chai'))
10const mockery = require('mockery')
11
12const expect = chai.expect
13
14// Hubot classes
15const Hubot = require('../es2015')
16const User = Hubot.User
17const Brain = Hubot.Brain
18const Robot = Hubot.Robot
19const Adapter = Hubot.Adapter
20const Response = Hubot.Response
21const Listener = Hubot.Listener
22const TextListener = Hubot.TextListener
23const Message = Hubot.Message
24const TextMessage = Hubot.TextMessage
25const EnterMessage = Hubot.EnterMessage
26const LeaveMessage = Hubot.LeaveMessage
27const TopicMessage = Hubot.TopicMessage
28const CatchAllMessage = Hubot.CatchAllMessage
29const loadBot = Hubot.loadBot
30
31describe('hubot/es2015', function () {
32 it('exports User class', function () {
33 class MyUser extends User {}
34 const user = new MyUser('id123', {foo: 'bar'})
35
36 expect(user).to.be.an.instanceof(User)
37 expect(user.id).to.equal('id123')
38 expect(user.foo).to.equal('bar')
39 })
40
41 it('exports Brain class', function () {
42 class MyBrain extends Brain {}
43 const robotMock = {
44 on: sinon.spy()
45 }
46 const brain = new MyBrain(robotMock)
47
48 expect(brain).to.be.an.instanceof(Brain)
49 expect(robotMock.on).to.have.been.called
50
51 brain.set('foo', 'bar')
52 expect(brain.get('foo')).to.equal('bar')
53 })
54
55 it('exports Robot class', function () {
56 mockery.enable({
57 warnOnReplace: false,
58 warnOnUnregistered: false
59 })
60 mockery.registerMock('hubot-mock-adapter', require('./fixtures/mock-adapter'))
61
62 class MyRobot extends Robot {}
63 const robot = new MyRobot(null, 'mock-adapter', false, 'TestHubot')
64
65 expect(robot).to.be.an.instanceof(Robot)
66 expect(robot.name).to.equal('TestHubot')
67
68 mockery.disable()
69 })
70
71 it('exports Adapter class', function () {
72 class MyAdapter extends Adapter {}
73 const adapter = new MyAdapter('myrobot')
74
75 expect(adapter).to.be.an.instanceof(Adapter)
76 expect(adapter.robot).to.equal('myrobot')
77 })
78
79 it('exports Response class', function () {
80 class MyResponse extends Response {}
81 const robotMock = 'robotMock'
82 const messageMock = {
83 room: 'room',
84 user: 'user'
85 }
86 const matchMock = 'matchMock'
87 const response = new MyResponse(robotMock, messageMock, matchMock)
88
89 expect(response).to.be.an.instanceof(Response)
90 expect(response.message).to.equal(messageMock)
91 expect(response.match).to.equal(matchMock)
92 })
93
94 it('exports Listener class', function () {
95 class MyListener extends Listener {}
96 const robotMock = 'robotMock'
97 const matcherMock = 'matchMock'
98 const callback = sinon.spy()
99 const listener = new MyListener(robotMock, matcherMock, callback)
100
101 expect(listener).to.be.an.instanceof(Listener)
102 expect(listener.robot).to.equal(robotMock)
103 expect(listener.matcher).to.equal(matcherMock)
104 expect(listener.options).to.deep.include({
105 id: null
106 })
107 expect(listener.callback).to.equal(callback)
108 })
109
110 it('exports TextListener class', function () {
111 class MyTextListener extends TextListener {}
112 const robotMock = 'robotMock'
113 const regex = /regex/
114 const callback = sinon.spy()
115 const textListener = new MyTextListener(robotMock, regex, callback)
116
117 expect(textListener).to.be.an.instanceof(TextListener)
118 expect(textListener.regex).to.equal(regex)
119 })
120
121 it('exports Message class', function () {
122 class MyMessage extends Message {}
123 const userMock = {
124 room: 'room'
125 }
126 const message = new MyMessage(userMock)
127
128 expect(message).to.be.an.instanceof(Message)
129 expect(message.user).to.equal(userMock)
130 })
131
132 it('exports TextMessage class', function () {
133 class MyTextMessage extends TextMessage {}
134 const userMock = {
135 room: 'room'
136 }
137 const textMessage = new MyTextMessage(userMock, 'bla blah')
138
139 expect(textMessage).to.be.an.instanceof(TextMessage)
140 expect(textMessage).to.be.an.instanceof(Message)
141 expect(textMessage.text).to.equal('bla blah')
142 })
143
144 it('exports EnterMessage class', function () {
145 class MyEnterMessage extends EnterMessage {}
146 const userMock = {
147 room: 'room'
148 }
149 const enterMessage = new MyEnterMessage(userMock)
150
151 expect(enterMessage).to.be.an.instanceof(EnterMessage)
152 expect(enterMessage).to.be.an.instanceof(Message)
153 })
154
155 it('exports LeaveMessage class', function () {
156 class MyLeaveMessage extends LeaveMessage {}
157 const userMock = {
158 room: 'room'
159 }
160 const leaveMessage = new MyLeaveMessage(userMock)
161
162 expect(leaveMessage).to.be.an.instanceof(LeaveMessage)
163 expect(leaveMessage).to.be.an.instanceof(Message)
164 })
165
166 it('exports TopicMessage class', function () {
167 class MyTopicMessage extends TopicMessage {}
168 const userMock = {
169 room: 'room'
170 }
171 const topicMessage = new MyTopicMessage(userMock)
172
173 expect(topicMessage).to.be.an.instanceof(TopicMessage)
174 expect(topicMessage).to.be.an.instanceof(Message)
175 })
176
177 it('exports CatchAllMessage class', function () {
178 class MyCatchAllMessage extends CatchAllMessage {}
179 const messageMock = {
180 user: {
181 room: 'room'
182 }
183 }
184 const catchAllMessage = new MyCatchAllMessage(messageMock)
185
186 expect(catchAllMessage).to.be.an.instanceof(CatchAllMessage)
187 expect(catchAllMessage).to.be.an.instanceof(Message)
188 expect(catchAllMessage.message).to.equal(messageMock)
189 expect(catchAllMessage.user).to.equal(messageMock.user)
190 })
191
192 it('exports loadBot function', function () {
193 sinon.stub(Hubot, 'Robot')
194
195 expect(loadBot).to.be.a('function')
196 Hubot.loadBot('adapterPath', 'adapterName', 'enableHttpd', 'botName', 'botAlias')
197 expect(Hubot.Robot).to.be.called.calledWith('adapterPath', 'adapterName', 'enableHttpd', 'botName', 'botAlias')
198 })
199})