@@ -171,4 +171,74 @@ describe 'conjur_authz', ()->
171171 assert ! err
172172 assert ! allowed
173173 done ()
174-
174+
175+ describe " #graph" , ->
176+ defaultOpts = { ancestors : true , descendants : true }
177+ defaultGraph = [[' parent' , ' child' ]]
178+ defaultRoles = [' a' , ' b' ]
179+ stubGet = (result , roles , options , graph ) ->
180+ options ||= defaultOpts
181+ graph ||= defaultGraph
182+ roles ||= defaultRoles
183+ gently .expect g .rest , ' get' , (url , opts ) ->
184+ assert .equal url, g .format (' http://example.com/%s/roles?%s&ancestors=%s&descendants=%s%s' ,
185+ account, g .arrayParam (' roles' , roles),
186+ options .ancestors , options .descendants , if options .fromRole then " &from_role=" + g .pathEscape (options .fromRole ) else ' ' );
187+ {
188+ on : (arg , callback ) ->
189+ assert .equal arg, ' complete'
190+ if result == ' error'
191+ callback new Error (' error' )
192+ else if result == ' errorCode'
193+ callback null , {statusCode : 500 }
194+ else
195+ callback graph, {statusCode : 200 }
196+ }
197+
198+ stubGetSuccess = stubGet .bind (null , ' success' )
199+ stubGetError = stubGet .bind (null , ' error' )
200+ stubGetFailure = stubGet .bind (null , ' errorCode' )
201+
202+ callRoleGraph = (roleIds , options , callback ) ->
203+ conjur_authz .connect (' http://example.com' , token).graph account, roleIds, options, callback
204+
205+
206+ it ' accepts a string' , (done ) ->
207+ stubGetSuccess [ ' role' ]
208+ callRoleGraph ' role' , defaultOpts, ->
209+ done ()
210+
211+ it ' accepts an array' , (done ) ->
212+ stubGetSuccess [' role1' , ' role2' ]
213+ callRoleGraph [' role1' , ' role2' ], defaultOpts, ->
214+ done ()
215+
216+ it ' fires the callback with an error when an error occurs' , (done ) ->
217+ stubGetError [' role' ]
218+ cb = (err , res ) ->
219+ assert .notEqual err, null
220+ assert .equal res, null
221+ done ()
222+ callRoleGraph ' role' , defaultOpts, cb
223+
224+ it ' fires the callback with an error when the response status is not 200' , (done ) ->
225+ stubGetFailure [' role' ]
226+ cb = (err , res ) ->
227+ assert .notEqual err, null
228+ assert .equal res, null
229+ done ()
230+ callRoleGraph ' role' , defaultOpts, cb
231+
232+ it ' fires the callback with (null, graph) when the request succeeds' , (done ) ->
233+ stubGetSuccess [' role' ]
234+ cb = (err , res ) ->
235+ assert .equal null , err
236+ assert .deepEqual res, defaultGraph
237+ done ()
238+ callRoleGraph ' role' , defaultOpts, cb
239+
240+
241+
242+
243+
244+
0 commit comments