Skip to content

Commit c1480cd

Browse files
committed
chore(tests): Add more tests
1 parent 42bbac9 commit c1480cd

File tree

1 file changed

+200
-75
lines changed

1 file changed

+200
-75
lines changed

test/test.coffee

+200-75
Original file line numberDiff line numberDiff line change
@@ -5,92 +5,217 @@ simpleEncryptor = require("simple-encryptor")
55
nock = require("nock")
66

77
apiToken = "DK89YJJRktQ2X0B3i1o7N96Z75pWL2MR"
8+
apiTokenBad = "DK89YJJRktQ2X0B3i1o7N96Z75pWL2MZ"
89
password = "19QBn1kzsKyuC9IKHz9byjCL8222wuop"
910
encryptor = simpleEncryptor password
1011
apiTokenEnc = encryptor.encrypt apiToken
12+
apiTokenEncBad = encryptor.encrypt apiTokenBad
1113
# process.env.TOGGL_CHANNEL = "user"
1214

13-
togglStub = () ->
14-
getUserDataAsync: () ->
15-
return new Promise (resolve) ->
16-
resolve({
17-
api_token: apiToken,
18-
fullname: "Testing User"
19-
})
20-
getTimeEntriesAsync: () ->
21-
return new Promise (resolve) ->
22-
resolve([
23-
{
24-
id: 1,
25-
duration: 100,
26-
description: "Testing 1"
27-
},
28-
{
29-
id: 2,
30-
duration: 100,
31-
description: "Testing 2"
32-
},
33-
{
34-
id: 3,
35-
tags: "Pagado",
36-
duration: 100,
37-
description: "Testing 3"
38-
},
39-
])
15+
class TogglStub
16+
constructor: (options) ->
17+
@apiToken = options.apiToken
18+
return {
19+
getUserDataAsync: @getUserDataAsync,
20+
getTimeEntriesAsync: @getTimeEntriesAsync,
21+
updateTimeEntriesTagsAsync: @updateTimeEntriesTagsAsync
22+
}
23+
getUserDataAsync: () =>
24+
return new Promise (resolve, reject) =>
25+
if @apiToken is apiTokenBad
26+
reject(new Error("Not found"))
27+
else
28+
resolve({
29+
api_token: apiToken,
30+
fullname: "Testing User"
31+
})
32+
getTimeEntriesAsync: () =>
33+
return new Promise (resolve) =>
34+
if @apiToken is apiTokenBad
35+
reject(new Error("Not found"))
36+
else
37+
resolve([
38+
{
39+
id: 1,
40+
duration: 100,
41+
description: "Testing 1"
42+
},
43+
{
44+
id: 2,
45+
duration: 100,
46+
description: "Testing 2"
47+
},
48+
{
49+
id: 3,
50+
tags: "Pagado",
51+
duration: 100,
52+
description: "Testing 3"
53+
},
54+
])
4055
updateTimeEntriesTagsAsync: () ->
4156
return new Promise (resolve) ->
4257
resolve()
43-
proxyquire("./../src/script.coffee", {"toggl-api": togglStub})
58+
proxyquire("./../src/script.coffee", {"toggl-api": TogglStub})
4459

4560
helper = new Helper("./../src/index.coffee")
4661

4762
describe "hubot-toggl-payment", ->
4863
room = null
4964

50-
beforeEach ->
51-
room = helper.createRoom({name: "user"})
52-
room.robot.adapter.client =
53-
rtm:
54-
dataStore:
55-
getDMByName: (name) ->
56-
return {id: name, name: name}
57-
nock.disableNetConnect()
58-
59-
afterEach ->
60-
room.destroy()
61-
nock.cleanAll()
62-
63-
context "login", ->
64-
beforeEach (done) ->
65-
room.user.say("user", "hubot toggl login #{apiToken} #{password}")
66-
setTimeout(done, 100)
67-
68-
it "should get a success message", ->
69-
expect(room.messages).to.eql([
70-
["user", "hubot toggl login #{apiToken} #{password}"]
71-
["hubot", "Login success as Testing User"]
72-
])
73-
74-
context "process time entries", ->
75-
beforeEach (done) ->
76-
nock("http://indicadoresdeldia.cl")
77-
.get("/webservice/indicadores.json")
78-
.reply 200, {indicador: {uf: "$26.029,52"}}
79-
room.robot.brain.data.users.user =
80-
toggl: {api_token: apiTokenEnc}
81-
room: "user"
82-
name: "user"
83-
room.user.say("user", "hubot toggl payment 500000 0.3 #{password}")
84-
setTimeout(done, 100)
85-
86-
it "should get a success message", ->
87-
message = """Time entries to payment:
88-
Testing 1 00:01:40
89-
Testing 2 00:01:40
90-
Finish. Total time is: 00:03:20"""
91-
expect(room.messages).to.eql([
92-
["user", "hubot toggl payment 500000 0.3 #{password}"]
93-
["hubot", "Processing time entries..."]
94-
["hubot", "user close tasks successfull\n#{message}"]
95-
["hubot", message]
96-
])
65+
describe "valid", ->
66+
beforeEach ->
67+
room = helper.createRoom({name: "user"})
68+
room.robot.adapter.client =
69+
rtm:
70+
dataStore:
71+
getDMByName: (name) ->
72+
return {id: name, name: name}
73+
nock.disableNetConnect()
74+
75+
afterEach ->
76+
room.destroy()
77+
nock.cleanAll()
78+
79+
context "login", ->
80+
beforeEach (done) ->
81+
room.user.say("user", "hubot toggl login #{apiToken} #{password}")
82+
setTimeout(done, 100)
83+
84+
it "should get a success message", ->
85+
expect(room.messages).to.eql([
86+
["user", "hubot toggl login #{apiToken} #{password}"]
87+
["hubot", "Login success as Testing User"]
88+
])
89+
90+
context "login user saved", ->
91+
beforeEach (done) ->
92+
room.robot.brain.data.users.user = {name: "user"}
93+
room.user.say("user", "hubot toggl login #{apiToken} #{password}")
94+
setTimeout(done, 100)
95+
96+
it "should get a success message", ->
97+
expect(room.messages).to.eql([
98+
["user", "hubot toggl login #{apiToken} #{password}"]
99+
["hubot", "Login success as Testing User"]
100+
])
101+
102+
context "process time entries", ->
103+
beforeEach (done) ->
104+
nock("http://indicadoresdeldia.cl")
105+
.get("/webservice/indicadores.json")
106+
.reply 200, {indicador: {uf: "$26.029,52"}}
107+
room.robot.brain.data.users.user =
108+
toggl: {api_token: apiTokenEnc}
109+
room: "user"
110+
name: "user"
111+
room.user.say("user", "hubot toggl payment 500000 0.3 #{password}")
112+
setTimeout(done, 100)
113+
114+
it "should get a success message", ->
115+
message = """Time entries to payment:
116+
Testing 1 00:01:40
117+
Testing 2 00:01:40
118+
Finish. Total time is: 00:03:20"""
119+
expect(room.messages).to.eql([
120+
["user", "hubot toggl payment 500000 0.3 #{password}"]
121+
["hubot", "Processing time entries..."]
122+
["hubot", "user close tasks successfull\n#{message}"]
123+
["hubot", message]
124+
])
125+
126+
context "invalid password length", ->
127+
beforeEach (done) ->
128+
room.user.say("user", "hubot toggl payment 500000 0.3 123456")
129+
setTimeout(done, 100)
130+
131+
it "should get a error message", ->
132+
expect(room.messages).to.eql([
133+
["user", "hubot toggl payment 500000 0.3 123456"]
134+
["hubot", "@user the secret minimum length must be 16 characters"]
135+
])
136+
137+
context "invalid password length", ->
138+
beforeEach (done) ->
139+
room.user.say("user", "hubot toggl login #{apiToken} 123456")
140+
setTimeout(done, 100)
141+
142+
it "should get a error message", ->
143+
expect(room.messages).to.eql([
144+
["user", "hubot toggl login #{apiToken} 123456"]
145+
["hubot", "@user the secret minimum length must be 16 characters"]
146+
])
147+
148+
context "error client", ->
149+
beforeEach (done) ->
150+
room.user.say("user", "hubot toggl login #{apiTokenBad} #{password}")
151+
setTimeout(done, 100)
152+
153+
it "should get a error message", ->
154+
expect(room.messages).to.eql([
155+
["user", "hubot toggl login #{apiTokenBad} #{password}"]
156+
["hubot", "@user an error occurred in toggl"]
157+
])
158+
159+
context "error client", ->
160+
beforeEach (done) ->
161+
nock("http://indicadoresdeldia.cl")
162+
.get("/webservice/indicadores.json")
163+
.reply 200, {indicador: {uf: "$26.029,52"}}
164+
room.robot.brain.data.users.user =
165+
toggl: {api_token: apiTokenEncBad}
166+
room: "user"
167+
name: "user"
168+
room.user.say("user", "hubot toggl payment 500000 0.3 #{password}")
169+
setTimeout(done, 100)
170+
171+
it "should get a success message", ->
172+
expect(room.messages).to.eql([
173+
["user", "hubot toggl payment 500000 0.3 #{password}"]
174+
["hubot", "Processing time entries..."]
175+
["hubot", "@user an error occurred in toggl"]
176+
])
177+
178+
describe "invalid", ->
179+
beforeEach ->
180+
room = helper.createRoom({name: "#random"})
181+
room.robot.adapter.client =
182+
rtm:
183+
dataStore:
184+
getDMByName: (name) ->
185+
return {id: name, name: name}
186+
nock.disableNetConnect()
187+
188+
afterEach ->
189+
room.destroy()
190+
nock.cleanAll()
191+
192+
context "invalid room", ->
193+
beforeEach (done) ->
194+
room.user.say("user", "hubot toggl login #{apiToken} #{password}")
195+
setTimeout(done, 100)
196+
197+
it "should get a error message", ->
198+
expect(room.messages).to.eql([
199+
["user", "hubot toggl login #{apiToken} #{password}"]
200+
["hubot", "Send me toggl command"]
201+
["hubot", "@user only use this command in a private message"]
202+
])
203+
204+
context "process time entries", ->
205+
beforeEach (done) ->
206+
nock("http://indicadoresdeldia.cl")
207+
.get("/webservice/indicadores.json")
208+
.reply 200, {indicador: {uf: "$26.029,52"}}
209+
room.robot.brain.data.users.user =
210+
toggl: {api_token: apiTokenEnc}
211+
room: "user"
212+
name: "user"
213+
room.user.say("user", "hubot toggl payment 500000 0.3 #{password}")
214+
setTimeout(done, 100)
215+
216+
it "should get a error message", ->
217+
expect(room.messages).to.eql([
218+
["user", "hubot toggl payment 500000 0.3 #{password}"]
219+
["hubot", "Send me toggl command"]
220+
["hubot", "@user only use this command in a private message"]
221+
])

0 commit comments

Comments
 (0)