@keepsolutions/scimgateway
Version:
Using SCIM protocol as a gateway for user provisioning to other endpoints
468 lines (441 loc) • 16.1 kB
JavaScript
const expect = require('chai').expect
const scimgateway = require('../../lib/plugin-restful.js')
const server_8886 = require('supertest').agent('http://localhost:8886') // module request is an alternative
const auth = 'Basic ' + Buffer.from('gwadmin:password').toString('base64')
var options = {
headers: {
'Content-Type': 'application/json',
Authorization: auth
}
}
describe('plugin-restful tests', () => {
it('exploreUsers test (1)', function (done) {
server_8886.get('/Users' +
'?startIndex=1&count=100')
.set(options.headers)
.end(function (err, res) {
if (err) { }
const users = res.body
expect(res.statusCode).to.equal(200)
expect(users.totalResults).to.equal(2)
expect(users.itemsPerPage).to.equal(2)
expect(users.startIndex).to.equal(1)
expect(users).to.not.equal('undefined')
expect(users.Resources[0].userName).to.equal('bjensen')
expect(users.Resources[0].id).to.equal('bjensen')
expect(users.Resources[0].name.givenName).to.equal('Barbara')
expect(users.Resources[0].groups[0].value).to.equal('Admins')
expect(users.Resources[0].groups[0].display).to.equal('Admins')
expect(users.Resources[0].groups[0].type).to.equal('direct')
expect(users.Resources[1].userName).to.equal('jsmith')
expect(users.Resources[1].id).to.equal('jsmith')
expect(users.Resources[1].name.givenName).to.equal('John')
expect(users.Resources[1].groups[0].value).to.equal('Employees')
expect(users.Resources[1].groups[0].display).to.equal('Employees')
expect(users.Resources[1].groups[0].type).to.equal('direct')
done()
})
})
it('exploreUsers test (2)', function (done) {
server_8886.get('/Users' +
'?attributes=userName&startIndex=1&count=100')
.set(options.headers)
.end(function (err, res) {
if (err) { }
const users = res.body
expect(res.statusCode).to.equal(200)
expect(users.totalResults).to.equal(2)
expect(users.itemsPerPage).to.equal(2)
expect(users.startIndex).to.equal(1)
expect(users).to.not.equal('undefined')
expect(users.Resources[0].userName).to.equal('bjensen')
expect(users.Resources[0].id).to.equal(undefined)
expect(users.Resources[0].groups).to.equal(undefined)
expect(users.Resources[1].userName).to.equal('jsmith')
expect(users.Resources[1].id).to.equal(undefined)
expect(users.Resources[1].groups).to.equal(undefined)
done()
})
})
it('exploreGroups test', (done) => {
server_8886.get('/Groups' +
'?attributes=displayName&startIndex=1&count=100')
.set(options.headers)
.end(function (err, res) {
if (err) {}
const groups = res.body
expect(res.statusCode).to.equal(200)
expect(groups.totalResults).to.equal(2)
expect(groups.itemsPerPage).to.equal(2)
expect(groups.startIndex).to.equal(1)
expect(groups).to.not.equal(undefined)
expect(groups.Resources[0].displayName).to.equal('Admins')
expect(groups.Resources[0].id).to.equal(undefined)
expect(groups.Resources[0].externalId).to.equal(undefined)
expect(groups.Resources[1].displayName).to.equal('Employees')
expect(groups.Resources[1].id).to.equal(undefined)
expect(groups.Resources[1].externalId).to.equal(undefined)
done()
})
})
it('getUser test (1)', function (done) {
server_8886.get('/Users/bjensen')
.set(options.headers)
.end(function (err, res) {
if (err) {}
const user = res.body
expect(res.statusCode).to.equal(200)
expect(user).to.not.equal(undefined)
expect(user.id).to.equal('bjensen')
expect(user.active).to.equal(true)
expect(user.name.givenName).to.equal('Barbara')
expect(user.name.familyName).to.equal('Jensen')
expect(user.name.formatted).to.equal('Ms. Barbara J Jensen, III')
expect(user.entitlements).to.equal(undefined)
expect(user.phoneNumbers[0].type).to.equal('work')
expect(user.phoneNumbers[0].value).to.equal('555-555-5555')
expect(user.emails[0].type).to.equal('work')
expect(user.emails[0].value).to.equal('bjensen@example.com')
expect(user.groups[0].value).to.equal('Admins')
expect(user.groups[0].display).to.equal('Admins')
expect(user.groups[0].type).to.equal('direct')
expect(user.meta.location).to.not.equal(undefined)
expect(user.schemas[0]).to.equal('urn:ietf:params:scim:schemas:core:2.0:User')
done()
})
})
it('getUser test (2)', function (done) {
server_8886.get('/Users' +
'?filter=userName eq "bjensen"&attributes=attributes=ims,locale,name.givenName,externalId,preferredLanguage,userType,id,title,timezone,name.middleName,name.familyName,nickName,name.formatted,meta.location,userName,name.honorificSuffix,meta.version,meta.lastModified,meta.created,name.honorificPrefix,emails,phoneNumbers,photos,x509Certificates.value,profileUrl,roles,active,addresses,displayName,entitlements')
.set(options.headers)
.end(function (err, res) {
if (err) {}
let user = res.body
user = user.Resources[0]
expect(res.statusCode).to.equal(200)
expect(user).to.not.equal(undefined)
expect(user.id).to.equal('bjensen')
expect(user.active).to.equal(true)
expect(user.name.givenName).to.equal('Barbara')
expect(user.name.familyName).to.equal('Jensen')
expect(user.name.formatted).to.equal('Ms. Barbara J Jensen, III')
expect(user.entitlements).to.equal(undefined)
expect(user.phoneNumbers[0].type).to.equal('work')
expect(user.phoneNumbers[0].value).to.equal('555-555-5555')
expect(user.emails[0].type).to.equal('work')
expect(user.emails[0].value).to.equal('bjensen@example.com')
expect(user.groups).to.equal(undefined)
done()
})
})
it('getUser test (3)', function (done) {
server_8886.get('/Users' +
'?filter=emails.value eq "bjensen@example.com"&attributes=emails,id,name.givenName')
.set(options.headers)
.end(function (err, res) {
if (err) { }
let user = res.body
user = user.Resources[0]
expect(res.statusCode).to.equal(200)
expect(user).to.not.equal(undefined)
expect(user.emails[0].value).to.equal('bjensen@example.com')
expect(user.id).to.equal('bjensen')
expect(user.name.givenName).to.equal('Barbara')
expect(user.active).to.equal(undefined)
expect(user.entitlements).to.equal(undefined)
expect(user.phoneNumbers).to.equal(undefined)
done()
})
})
it('getGroup test (1)', function (done) {
server_8886.get('/Groups/Admins')
.set(options.headers)
.end(function (err, res) {
if (err) {}
const group = res.body
expect(res.statusCode).to.equal(200)
expect(group).to.not.equal(undefined)
expect(group.schemas).to.not.equal(undefined)
expect(group.meta.location).to.not.equal(undefined)
expect(group.displayName).to.equal('Admins')
expect(group.id).to.equal('Admins')
expect(group.members[0].value).to.equal('bjensen')
// expect(group.members[0].display).to.equal('bjensen');
done()
})
})
it('getGroup test (2)', function (done) {
server_8886.get('/Groups' +
'?filter=displayName eq "Admins"&attributes=externalId,id,members.value,displayName')
.set(options.headers)
.end(function (err, res) {
if (err) {}
const groups = res.body
expect(res.statusCode).to.equal(200)
expect(groups).to.not.equal(undefined)
expect(groups.schemas).to.not.equal(undefined)
expect(groups.Resources[0].displayName).to.equal('Admins')
expect(groups.Resources[0].id).to.equal('Admins')
expect(groups.Resources[0].members[0].value).to.equal('bjensen')
// expect(groups.Resources[0].members[0].display).to.equal('bjensen');
done()
})
})
it('getGroupMembers test', (done) => {
server_8886.get('/Groups' +
'?filter=members.value eq "bjensen"&attributes=members.value,displayName')
.set(options.headers)
.end(function (err, res) {
if (err) {}
const groupMembers = res.body
expect(res.statusCode).to.equal(200)
expect(groupMembers).to.not.equal('undefined')
expect(groupMembers.Resources[0].displayName).to.equal('Admins')
expect(groupMembers.Resources[0].members[0].value).to.equal('bjensen')
expect(groupMembers.Resources[0].totalResults).to.equal(groupMembers.Resources[0].members[0].length)
done()
})
})
it('createUser test', (done) => {
const newUser = {
userName: 'jgilber',
active: true,
password: 'secretpassword',
name: {
formatted: 'Mr. Jeff Gilbert',
familyName: 'Gilbert',
givenName: 'Jeff'
},
title: 'test title',
emails: [{
value: 'jgilber@example.com',
type: 'work'
}],
phoneNumbers: [{
value: 'tel:555-555-8376',
type: 'work'
}],
entitlements: [{
value: 'Test Company',
type: 'company'
}]
}
server_8886.post('/Users')
.set(options.headers)
.send(newUser)
.end(function (err, res) {
expect(err).to.equal(null)
expect(res.statusCode).to.equal(201)
expect(res.body.meta.location).to.equal('http://localhost:8886/Users/jgilber')
done()
})
})
it('getUser just created test', (done) => {
server_8886.get('/Users/jgilber')
.set(options.headers)
.end(function (err, res) {
if (err) {}
const user = res.body
expect(res.statusCode).to.equal(200)
expect(user).to.not.equal(undefined)
expect(user.id).to.equal('jgilber')
expect(user.active).to.equal(true)
expect(user.name.givenName).to.equal('Jeff')
expect(user.name.familyName).to.equal('Gilbert')
expect(user.name.formatted).to.equal('Mr. Jeff Gilbert')
expect(user.title).to.equal('test title')
expect(user.emails[0].value).to.equal('jgilber@example.com')
expect(user.emails[0].type).to.equal('work')
expect(user.entitlements[0].value).to.equal('Test Company')
expect(user.entitlements[0].type).to.equal('company')
expect(user.phoneNumbers[0].value).to.equal('tel:555-555-8376')
expect(user.phoneNumbers[0].type).to.equal('work')
done()
})
})
// scim v1.1
/*
it('modifyUser test', (done) => {
var user = {
name: {
givenName: 'Jeff-Modified'
},
active: false,
phoneNumbers: [{
type: 'work',
value: 'tel:123'
}],
emails: [{
operation: 'delete',
type: 'work',
value: 'jgilber@example.com'
}],
meta: { attributes: ['name.familyName'] }
}
server_8886.patch('/Users/jgilber')
.set(options.headers)
.send(user)
.end(function (err, res) {
expect(err).to.equal(null)
expect(res.statusCode).to.equal(204)
done()
})
})
*/
it('modifyUser test', (done) => {
var user = {
Operations: [
{
op: 'replace',
value: {
name: {
givenName: 'Jeff-Modified',
familyName: ''
},
active: false,
phoneNumbers: [{
type: 'work',
value: 'tel:123'
}]
/* alternative to below
emails: [{
type: 'work',
value: ''
}]
*/
}
},
{
op: 'remove',
path: 'emails[type eq \"work\"].value'
}
]
}
server_8886.patch('/Users/jgilber')
.set(options.headers)
.send(user)
.end(function (err, res) {
expect(err).to.equal(null)
expect(res.statusCode).to.equal(204)
done()
})
})
it('getUser just modified test', (done) => {
server_8886.get('/Users/jgilber')
.set(options.headers)
.end(function (err, res) {
if (err) {}
const user = res.body
expect(res.statusCode).to.equal(200)
expect(user).to.not.equal(undefined)
expect(user.id).to.equal('jgilber')
expect(user.active).to.equal(false) // modified
expect(user.name.givenName).to.equal('Jeff-Modified') // modified
expect(user.name.familyName).to.equal('')
expect(user.name.formatted).to.equal('Mr. Jeff Gilbert')
expect(user.title).to.equal('test title')
expect(user.emails).to.equal(undefined) // deleted
expect(user.entitlements[0].value).to.equal('Test Company')
expect(user.entitlements[0].type).to.equal('company')
expect(user.phoneNumbers[0].value).to.equal('tel:123') // modiied
expect(user.phoneNumbers[0].type).to.equal('work')
done()
})
})
it('deleteUser test', (done) => {
server_8886.delete('/Users/jgilber')
.set(options.headers)
.end(function (err, res) {
expect(err).to.equal(null)
expect(res.statusCode).to.equal(204)
done()
})
})
it('createGroup test', (done) => {
const newGroup = {
displayName: 'GoGoRest',
externalId: undefined,
members: [{
value: 'bjensen'
}]
}
server_8886.post('/Groups')
.set(options.headers)
.send(newGroup)
.end(function (err, res) {
expect(err).to.equal(null)
expect(res.statusCode).to.equal(201)
expect(res.body.meta.location).to.equal('http://localhost:8886/Groups/GoGoRest')
done()
})
})
it('getGroup just created test', (done) => {
server_8886.get('/Groups/GoGoRest')
.set(options.headers)
.end(function (err, res) {
if (err) {}
const group = res.body
expect(res.statusCode).to.equal(200)
expect(group).to.not.equal('undefined')
expect(group.displayName).to.equal('GoGoRest')
expect(group.id).to.equal('GoGoRest')
done()
})
})
it('modifyGroupMembers test', (done) => {
server_8886.patch('/Groups/GoGoRest?attributes=members')
.set(options.headers)
// .send({ members: [{ value: 'jsmith' }, { operation: 'delete', value: 'bjensen' }], schemas: ['urn:scim:schemas:core:1.0'] }) // scim v1.1
.send({
Operations: [
{
op: 'add',
path: 'members',
value: [
{ value: 'jsmith' }
]
},
{
op: 'remove',
path: 'members',
value: [
{ value: 'bjensen' }
]
}
]
})
.end(function (err, res) {
const group = res.body
expect(err).to.equal(null)
expect(res.statusCode).to.equal(200)
expect(group.members).to.not.equal('undefined')
expect(group.schemas[0]).to.equal('urn:ietf:params:scim:schemas:core:2.0:Group')
done()
})
})
it('getGroup just modified members test', (done) => {
server_8886.get('/Groups/GoGoRest')
.set(options.headers)
.end(function (err, res) {
if (err) {}
const group = res.body
expect(res.statusCode).to.equal(200)
expect(group).to.not.equal('undefined')
expect(group.displayName).to.equal('GoGoRest')
expect(group.id).to.equal('GoGoRest')
expect(group.members.length).to.equal(1)
expect(group.members[0].value).to.equal('jsmith')
done()
})
})
it('deleteGroup test', (done) => {
server_8886.delete('/Groups/GoGoRest')
.set(options.headers)
.end(function (err, res) {
expect(err).to.equal(null)
expect(res.statusCode).to.equal(204)
done()
})
})
})