@@ -5,92 +5,217 @@ simpleEncryptor = require("simple-encryptor")
5
5
nock = require (" nock" )
6
6
7
7
apiToken = " DK89YJJRktQ2X0B3i1o7N96Z75pWL2MR"
8
+ apiTokenBad = " DK89YJJRktQ2X0B3i1o7N96Z75pWL2MZ"
8
9
password = " 19QBn1kzsKyuC9IKHz9byjCL8222wuop"
9
10
encryptor = simpleEncryptor password
10
11
apiTokenEnc = encryptor .encrypt apiToken
12
+ apiTokenEncBad = encryptor .encrypt apiTokenBad
11
13
# process.env.TOGGL_CHANNEL = "user"
12
14
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
+ ])
40
55
updateTimeEntriesTagsAsync : () ->
41
56
return new Promise (resolve ) ->
42
57
resolve ()
43
- proxyquire (" ./../src/script.coffee" , {" toggl-api" : togglStub })
58
+ proxyquire (" ./../src/script.coffee" , {" toggl-api" : TogglStub })
44
59
45
60
helper = new Helper (" ./../src/index.coffee" )
46
61
47
62
describe " hubot-toggl-payment" , ->
48
63
room = null
49
64
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