UNPKG

6.95 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 it 'responds to learn', (done) ->
69 adapter.on 'reply', (envelope, strings) ->
70 expect(strings[0]).to.match /OK, foo is now bar/
71 done()
72
73 adapter.receive(new TextMessage user, 'hubot: learn foo = bar')
74
75 it 'responds to !factoid', (done) ->
76 adapter.receive(new TextMessage user, 'hubot: learn foo = bar')
77
78 adapter.on 'send', (envelope, strings) ->
79 expect(strings[0]).to.match /user: bar/
80 done()
81
82 adapter.receive(new TextMessage user, '!foo')
83
84 it 'responds to !factoid @mention', (done) ->
85 adapter.receive(new TextMessage user, 'hubot: learn foo = bar')
86
87 adapter.on 'send', (envelope, strings) ->
88 expect(strings[0]).to.match /@user2: bar/
89 done()
90
91 adapter.receive(new TextMessage user, '!foo @user2')
92
93 it 'responds to learn substitution', (done) ->
94 adapter.receive(new TextMessage user, 'hubot: learn foo = bar')
95
96 adapter.on 'reply', (envelope, strings) ->
97 expect(strings[0]).to.match /OK, foo is now qux/
98 done()
99
100 adapter.receive(new TextMessage user, 'hubot: learn foo =~ s/bar/qux/i')
101
102 it 'responds to forget', (done) ->
103 adapter.receive(new TextMessage user, 'hubot: learn foo = bar')
104
105 adapter.on 'reply', (envelope, strings) ->
106 expect(strings[0]).to.match /OK, forgot foo/
107 done()
108
109 adapter.receive(new TextMessage user, 'hubot: forget foo')
110
111 it 'responds to remember', (done) ->
112 adapter.receive(new TextMessage user, 'hubot: learn foo = bar')
113 adapter.receive(new TextMessage user, 'hubot: forget foo')
114
115 adapter.on 'reply', (envelope, strings) ->
116 expect(strings[0]).to.match /OK, foo is bar/
117 done()
118
119 adapter.receive(new TextMessage user, 'hubot: remember foo')
120
121 it 'responds to factoids', (done) ->
122 adapter.on 'reply', (envelope, strings) ->
123 expect(strings[0]).to.match /http:\/\/not-yet-set\/.*\/factoids/
124 done()
125
126 adapter.receive(new TextMessage user, 'hubot: factoids')
127
128 it 'responds to search', (done) ->
129 adapter.receive(new TextMessage user, 'hubot: learn foobar = baz')
130 adapter.receive(new TextMessage user, 'hubot: learn barbaz = foo')
131 adapter.receive(new TextMessage user, 'hubot: learn qix = bar')
132 adapter.receive(new TextMessage user, 'hubot: learn qux = baz')
133
134 adapter.on 'reply', (envelope, strings) ->
135 expect(strings[0]).to.match /.* the following factoids: .*!foobar/
136 expect(strings[0]).to.match /.* the following factoids: .*!barbaz/
137 expect(strings[0]).to.match /.* the following factoids: .*!qix/
138 expect(strings[0]).not.to.match /.* the following factoids: .*!qux/
139 done()
140
141 adapter.receive(new TextMessage user, 'hubot: search bar')
142
143 it 'responds to alias', (done) ->
144 adapter.receive(new TextMessage user, 'hubot: learn foo = bar')
145
146 adapter.on 'reply', (envelope, strings) ->
147 expect(strings[0]).to.match /OK, aliased baz to foo/
148 done()
149
150 adapter.receive(new TextMessage user, 'hubot: alias baz = foo')
151
152 it 'responds to drop', (done) ->
153 adapter.receive(new TextMessage user, 'hubot: learn foo = bar')
154
155 adapter.on 'reply', (envelope, strings) ->
156 expect(strings[0]).to.match /OK, foo has been dropped/
157 done()
158
159 adapter.receive(new TextMessage user, 'hubot: drop foo')
160
161 it 'responds to invalid !factoid', (done) ->
162 adapter.on 'reply', (envelope, strings) ->
163 expect(strings[0]).to.match /Not a factoid/
164 done()
165
166 adapter.receive(new TextMessage user, '!foo')
167
168 it 'responds to invalid learn substitution', (done) ->
169 adapter.on 'reply', (envelope, strings) ->
170 expect(strings[0]).to.match /Not a factoid/
171 done()
172
173 adapter.receive(new TextMessage user, 'hubot: learn foo =~ s/bar/baz/gi')
174
175 it 'responds to invalid forget', (done) ->
176 adapter.on 'reply', (envelope, strings) ->
177 expect(strings[0]).to.match /Not a factoid/
178 done()
179
180 adapter.receive(new TextMessage user, 'hubot: forget foo')
181
182 it 'responds to invalid drop', (done) ->
183 adapter.on 'reply', (envelope, strings) ->
184 expect(strings[0]).to.match /Not a factoid/
185 done()
186
187 adapter.receive(new TextMessage user, 'hubot: drop foo')
188
189describe 'factoids customization', ->
190 robot = {}
191 user = {}
192 adapter = {}
193 spies = {}
194
195 beforeEach (done) ->
196 process.env.HUBOT_FACTOID_PREFIX = '?'
197 # Create new robot, with http, using mock adapter
198 robot = new Robot null, 'mock-adapter', false
199
200 robot.adapter.on 'connected', =>
201 spies.hear = sinon.spy(robot, 'hear')
202 spies.respond = sinon.spy(robot, 'respond')
203
204 require('../src/factoids')(robot)
205
206 user = robot.brain.userForId '1', {
207 name: 'user'
208 room: '#test'
209 }
210
211 adapter = robot.adapter
212
213 robot.run()
214
215 done()
216
217 afterEach ->
218 robot.shutdown()
219
220 it 'can override prefix', ->
221 expect(spies.hear).to.have.been.calledWith(/^[?]([\w\s-]{2,}\w)( @.+)?/i)