@quarks/quarks-iam
Version:
A modern authorization server built to authenticate your users and protect your APIs
138 lines (85 loc) • 3.08 kB
text/coffeescript
chai = require 'chai'
sinon = require 'sinon'
sinonChai = require 'sinon-chai'
expect = chai.expect
chai.use sinonChai
chai.should()
Client = require '../../../models/Client'
{verifyClient} = require '../../../oidc'
describe 'Verify Client', ->
{req,res,next,err} = {}
describe 'with missing redirect_uri', ->
before (done) ->
req = { connectParams: {} }
verifyClient req, res, (error) ->
err = error
done()
it 'should provide an AuthorizationError', ->
err.name.should.equal 'AuthorizationError'
it 'should provide an error code', ->
err.error.should.equal 'invalid_request'
it 'should provide an error description', ->
err.error_description.should.equal 'Missing redirect uri'
it 'should provide a status code', ->
err.statusCode.should.equal 400
describe 'with missing client_id', ->
before (done) ->
req =
connectParams:
redirect_uri: 'https://redirect.uri'
verifyClient req, res, (error) ->
err = error
done()
it 'should provide an AuthorizationError', ->
err.name.should.equal 'AuthorizationError'
it 'should provide an error code', ->
err.error.should.equal 'unauthorized_client'
it 'should provide an error description', ->
err.error_description.should.equal 'Missing client id'
it 'should provide a status code', ->
err.statusCode.should.equal 403
describe 'with unknown client id', ->
before (done) ->
sinon.stub(Client, 'get').callsArgWith(2, null, null)
req =
connectParams:
redirect_uri: 'https://redirect.uri'
client_id: 'unknown'
res = {}
next = sinon.spy()
verifyClient req, res, (error) ->
err = error
done()
after ->
Client.get.restore()
it 'should provide an AuthorizationError', ->
err.name.should.equal 'AuthorizationError'
it 'should provide an error code', ->
err.error.should.equal 'unauthorized_client'
it 'should provide an error description', ->
err.error_description.should.equal 'Unknown client'
it 'should provide a status code', ->
err.statusCode.should.equal 401
describe 'with mismatching redirect uri', ->
before (done) ->
client = { redirect_uris: [] }
sinon.stub(Client, 'get').callsArgWith(2, null, client)
req =
connectParams:
redirect_uri: 'https://mismatching.uri/cb'
client_id: 'id'
res = {}
next = sinon.spy()
verifyClient req, res, (error) ->
err = error
done()
after ->
Client.get.restore()
it 'should provide an AuthorizationError', ->
err.name.should.equal 'AuthorizationError'
it 'should provide an error code', ->
err.error.should.equal 'invalid_request'
it 'should provide an error description', ->
err.error_description.should.equal 'Mismatching redirect uri'
it 'should provide a status code', ->
err.statusCode.should.equal 400