UNPKG

7.17 kBtext/coffeescriptView Raw
1chai = require 'chai'
2sinon = require 'sinon'
3chai.use require 'sinon-chai'
4
5expect = chai.expect
6
7Robot = require 'hubot/src/robot'
8TextMessage = require('hubot/src/message').TextMessage
9
10describe 'factoids', ->
11 robot = {}
12 user = {}
13 adapter = {}
14 spies = {}
15
16 beforeEach (done) ->
17 # Create new robot, with http, using mock adapter
18 robot = new Robot null, 'mock-adapter', false
19
20 robot.adapter.on 'connected', =>
21 spies.hear = sinon.spy(robot, 'hear')
22 spies.respond = sinon.spy(robot, 'respond')
23
24 require('../src/factoids')(robot)
25
26 user = robot.brain.userForId '1', {
27 name: 'user'
28 room: '#test'
29 }
30
31 adapter = robot.adapter
32
33 robot.run()
34
35 done()
36
37 afterEach ->
38 robot.shutdown()
39
40 describe 'listeners', ->
41 it 'registered hear !factoid', ->
42 expect(spies.hear).to.have.been.calledWith(/^[!]([\w\s-]{2,}\w)( @.+)?/i)
43
44 it 'registered respond learn', ->
45 expect(spies.respond).to.have.been.calledWith(/learn (.{3,}) = ([^@].+)/i)
46
47 it 'registered respond learn substitution', ->
48 expect(spies.respond).to.have.been.calledWith(/learn (.{3,}) =~ s\/(.+)\/(.+)\/(.*)/i)
49
50 it 'registered respond forget', ->
51 expect(spies.respond).to.have.been.calledWith(/forget (.{3,})/i)
52
53 it 'registered respond remember', ->
54 expect(spies.respond).to.have.been.calledWith(/remember (.{3,})/i)
55
56 it 'registered respond factoids', ->
57 expect(spies.respond).to.have.been.calledWith(/factoids?/i)
58
59 it 'registered respond search', ->
60 expect(spies.respond).to.have.been.calledWith(/search (.{3,})/i)
61
62 it 'registered respond alias', ->
63 expect(spies.respond).to.have.been.calledWith(/alias (.{3,}) = (.{3,})/i)
64
65 it 'registered respond drop', ->
66 expect(spies.respond).to.have.been.calledWith(/drop (.{3,})/i)
67
68 describe 'new factoids', ->
69 it 'responds to learn', (done) ->
70 adapter.on 'reply', (envelope, strings) ->
71 expect(strings[0]).to.match /OK, foo is now bar/
72 done()
73
74 adapter.receive(new TextMessage user, 'hubot: learn foo = bar')
75
76 describe 'existing factoids', ->
77 beforeEach ->
78 robot.brain.data.factoids.foo = value: 'bar'
79 robot.brain.data.factoids.foobar = value: 'baz'
80 robot.brain.data.factoids.barbaz = value: 'foo'
81 robot.brain.data.factoids.qix = value: 'bar'
82 robot.brain.data.factoids.qux = value: 'baz'
83
84 it 'responds to !factoid', (done) ->
85 adapter.on 'send', (envelope, strings) ->
86 expect(strings[0]).to.match /user: bar/
87 done()
88
89 adapter.receive(new TextMessage user, '!foo')
90
91 it 'responds to !factoid @mention', (done) ->
92 adapter.on 'send', (envelope, strings) ->
93 expect(strings[0]).to.match /@user2: bar/
94 done()
95
96 adapter.receive(new TextMessage user, '!foo @user2')
97
98 it 'responds to learn substitution', (done) ->
99 adapter.on 'reply', (envelope, strings) ->
100 expect(strings[0]).to.match /OK, foo is now qux/
101 done()
102
103 adapter.receive(new TextMessage user, 'hubot: learn foo =~ s/bar/qux/i')
104
105 it 'responds to forget', (done) ->
106 adapter.on 'reply', (envelope, strings) ->
107 expect(strings[0]).to.match /OK, forgot foo/
108 done()
109
110 adapter.receive(new TextMessage user, 'hubot: forget foo')
111
112 it 'responds to search', (done) ->
113 adapter.on 'reply', (envelope, strings) ->
114 expect(strings[0]).to.match /.* the following factoids: .*!foobar/
115 expect(strings[0]).to.match /.* the following factoids: .*!barbaz/
116 expect(strings[0]).to.match /.* the following factoids: .*!qix/
117 expect(strings[0]).not.to.match /.* the following factoids: .*!qux/
118 done()
119
120 adapter.receive(new TextMessage user, 'hubot: search bar')
121
122 it 'responds to alias', (done) ->
123 adapter.on 'reply', (envelope, strings) ->
124 expect(strings[0]).to.match /OK, aliased baz to foo/
125 done()
126
127 adapter.receive(new TextMessage user, 'hubot: alias baz = foo')
128
129 it 'responds to drop', (done) ->
130 adapter.on 'reply', (envelope, strings) ->
131 expect(strings[0]).to.match /OK, foo has been dropped/
132 done()
133
134 adapter.receive(new TextMessage user, 'hubot: drop foo')
135
136 describe 'forgotten factoids', ->
137 beforeEach ->
138 robot.brain.data.factoids.foo = value: 'bar', forgotten: true
139
140 it 'responds to remember', (done) ->
141 adapter.on 'reply', (envelope, strings) ->
142 expect(strings[0]).to.match /OK, foo is bar/
143 done()
144
145 adapter.receive(new TextMessage user, 'hubot: remember foo')
146
147 it 'responds to factoids', (done) ->
148 adapter.on 'reply', (envelope, strings) ->
149 expect(strings[0]).to.match /http:\/\/not-yet-set\/.*\/factoids/
150 done()
151
152 adapter.receive(new TextMessage user, 'hubot: factoids')
153
154 describe 'list all factoids', ->
155 beforeEach ->
156 robot.brain.data.factoids.foo = value: 'bar', forgotten: true
157 robot.brain.data.factoids.bas = value: 'baz', forgotten: false
158
159 it 'responds to list all factoids', (done) ->
160 adapter.on 'reply', (envelope, strings) ->
161 expect(strings[0]).to.match /All factoids: \n!bas: baz\n/
162 done()
163
164 adapter.receive(new TextMessage user, 'hubot: list all factoids')
165
166 it 'responds to list all factoids, empty list', (done) ->
167 adapter.on 'reply', (envelope, strings) ->
168 expect(strings[0]).to.match /No factoids defined/
169 done()
170
171 adapter.receive(new TextMessage user, 'hubot: list all factoids')
172
173 it 'responds to invalid !factoid', (done) ->
174 adapter.on 'reply', (envelope, strings) ->
175 expect(strings[0]).to.match /Not a factoid/
176 done()
177
178 adapter.receive(new TextMessage user, '!foo')
179
180 it 'responds to invalid learn substitution', (done) ->
181 adapter.on 'reply', (envelope, strings) ->
182 expect(strings[0]).to.match /Not a factoid/
183 done()
184
185 adapter.receive(new TextMessage user, 'hubot: learn foo =~ s/bar/baz/gi')
186
187 it 'responds to invalid forget', (done) ->
188 adapter.on 'reply', (envelope, strings) ->
189 expect(strings[0]).to.match /Not a factoid/
190 done()
191
192 adapter.receive(new TextMessage user, 'hubot: forget foo')
193
194 it 'responds to invalid drop', (done) ->
195 adapter.on 'reply', (envelope, strings) ->
196 expect(strings[0]).to.match /Not a factoid/
197 done()
198
199 adapter.receive(new TextMessage user, 'hubot: drop foo')
200
201describe 'factoids customization', ->
202 robot = {}
203 user = {}
204 adapter = {}
205 spies = {}
206
207 beforeEach (done) ->
208 process.env.HUBOT_FACTOID_PREFIX = '?'
209 # Create new robot, with http, using mock adapter
210 robot = new Robot null, 'mock-adapter', false
211
212 robot.adapter.on 'connected', =>
213 spies.hear = sinon.spy(robot, 'hear')
214 spies.respond = sinon.spy(robot, 'respond')
215
216 require('../src/factoids')(robot)
217
218 user = robot.brain.userForId '1', {
219 name: 'user'
220 room: '#test'
221 }
222
223 adapter = robot.adapter
224
225 robot.run()
226
227 done()
228
229 afterEach ->
230 robot.shutdown()
231
232 it 'can override prefix', ->
233 expect(spies.hear).to.have.been.calledWith(/^[?]([\w\s-]{2,}\w)( @.+)?/i)