UNPKG

@keepsolutions/scimgateway

Version:

Using SCIM protocol as a gateway for user provisioning to other endpoints

588 lines (560 loc) 21.7 kB
'use strict' const expect = require('chai').expect const scimgateway = require('../../lib/plugin-loki.js') const server_8880 = require('supertest').agent('http://localhost:8880') // module request is an alternative const auth = 'Basic ' + Buffer.from('gwadmin:password').toString('base64') const options = { headers: { 'Content-Type': 'application/json', Authorization: auth } } describe('plugin-loki tests', () => { it('exploreUsers test (1)', function (done) { server_8880.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_8880.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_8880.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_8880.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[0].type).to.equal('newentitlement') expect(user.entitlements[0].value).to.equal('bjensen entitlement') 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['urn:ietf:params:scim:schemas:extension:enterprise:2.0:User'].manager.value).to.equal('jsmith') expect(user.meta.location).to.not.equal(undefined) expect(user.schemas[0]).to.equal('urn:ietf:params:scim:schemas:core:2.0:User') expect(user.schemas[1]).to.equal('urn:ietf:params:scim:schemas:extension:enterprise:2.0:User') done() }) }) it('getUser test (2)', function (done) { server_8880.get('/Users' + '?filter=userName eq "bjensen"&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[0].type).to.equal('newentitlement') expect(user.entitlements[0].value).to.equal('bjensen entitlement') 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_8880.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) expect(user.groups).to.equal(undefined) done() }) }) it('getGroup test (1)', function (done) { server_8880.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_8880.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_8880.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' }], addresses: [{ type: 'work', streetAddress: 'City Plaza', postalCode: '9559' }], 'urn:ietf:params:scim:schemas:extension:enterprise:2.0:User': { employeeNumber: '123456', test1: 'xxx', test2: 'yyy' } } server_8880.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:8880/Users/jgilber') done() }) }) it('getUser just created test', (done) => { server_8880.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].type).to.equal('work') expect(user.emails[0].value).to.equal('jgilber@example.com') expect(user.entitlements[0].type).to.equal('company') expect(user.entitlements[0].value).to.equal('Test Company') expect(user.phoneNumbers[0].type).to.equal('work') expect(user.phoneNumbers[0].value).to.equal('tel:555-555-8376') expect(user.addresses[0].type).to.equal('work') expect(user.addresses[0].streetAddress).to.equal('City Plaza') expect(user.addresses[0].postalCode).to.equal('9559') expect(user['urn:ietf:params:scim:schemas:extension:enterprise:2.0:User'].employeeNumber).to.equal('123456') expect(user['urn:ietf:params:scim:schemas:extension:enterprise:2.0:User'].test1).to.equal('xxx') expect(user['urn:ietf:params:scim:schemas:extension:enterprise:2.0:User'].test2).to.equal('yyy') expect(user.schemas[0]).to.equal('urn:ietf:params:scim:schemas:core:2.0:User') expect(user.schemas[1]).to.equal('urn:ietf:params:scim:schemas:extension:enterprise:2.0:User') done() }) }) // scim v1.1 /* it('modifyUser test', (done) => { var user = { name: { givenName: 'Jeff-Modified' }, active: false, title: 'New title', phoneNumbers: [{ type: 'work', value: 'tel:123' }], entitlements: [{ type: 'company', value: 'New Company' }], emails: [{ operation: 'delete', type: 'work', value: 'jgilber@example.com' }], addresses: [{ type: 'work', streetAddress: 'New Address', postalCode: '1111' }], meta: { attributes: ['name.familyName'] } } */ it('modifyUser test', (done) => { var user = { Operations: [ { op: 'replace', path: 'name.givenName', value: 'Jeff-Modified' }, { op: 'replace', path: 'active', value: false }, { op: 'replace', path: 'phoneNumbers[type eq \"work\"].value', value: 'tel:123' }, { op: 'replace', value: { title: 'New title', entitlements: [{ value: 'New Company', type: 'company' }] } }, { op: 'remove', path: 'emails[type eq \"work\"].value' }, { op: 'replace', path: 'addresses[type eq \"work\"]', value: { type: 'work', streetAddress: 'New Address', postalCode: '1111' } }, { op: 'Remove', path: 'urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:employeeNumber' }, { op: 'add', path: 'urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department', value: 'Top Floor' }, { op: 'add', path: 'urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:manager.value', value: 'bjensen' }, { op: 'replace', path: 'urn:ietf:params:scim:schemas:extension:enterprise:2.0:User', value: { test1: 'test1-value', test2: 'test2-value' } } ] } server_8880.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_8880.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(undefined) // cleared - scim 1.1 expect(user.name.formatted).to.equal('Mr. Jeff Gilbert') expect(user.title).to.equal('New title') // modified expect(user.emails).to.equal(undefined) // deleted expect(user.entitlements[0].type).to.equal('company') expect(user.entitlements[0].value).to.equal('New Company') // modified expect(user.phoneNumbers[0].type).to.equal('work') expect(user.phoneNumbers[0].value).to.equal('tel:123') // modiied expect(user.addresses[0].type).to.equal('work') expect(user.addresses[0].streetAddress).to.equal('New Address') // modified expect(user.addresses[0].postalCode).to.equal('1111') // modified expect(user['urn:ietf:params:scim:schemas:extension:enterprise:2.0:User'].employeeNumber).to.equal(undefined) // deleted expect(user['urn:ietf:params:scim:schemas:extension:enterprise:2.0:User'].department).to.equal('Top Floor') // added expect(user['urn:ietf:params:scim:schemas:extension:enterprise:2.0:User'].manager.value).to.equal('bjensen') // added expect(user['urn:ietf:params:scim:schemas:extension:enterprise:2.0:User'].test1).to.equal('test1-value') // modified expect(user['urn:ietf:params:scim:schemas:extension:enterprise:2.0:User'].test2).to.equal('test2-value') // modified done() }) }) it('modifyUser PUT test', (done) => { const putUser = { name: { formatted: 'Mr. Jeff Gilbert-2', familyName: 'Gilbert-2', givenName: 'Jeff-2' }, emails: [{ value: 'jgilber-2@example.com', type: 'work' }], phoneNumbers: [{ value: 'tel:555-555-8376', type: 'home' }], addresses: [{ type: 'work', streetAddress: 'City Plaza-2', postalCode: '9559-2' }], 'urn:ietf:params:scim:schemas:extension:enterprise:2.0:User': { employeeNumber: '1111' } } server_8880.put('/Users/jgilber') .set(options.headers) .send(putUser) .end(function (err, res) { if (err) { } const user = res.body expect(err).to.equal(null) expect(res.statusCode).to.equal(200) expect(user).to.not.equal(undefined) expect(user.id).to.equal('jgilber') expect(user.active).to.equal(false) expect(user.name.givenName).to.equal('Jeff-2') // modified expect(user.name.formatted).to.equal('Mr. Jeff Gilbert-2') // modified expect(user.title).to.equal(undefined) // deleted expect(user.emails[0].type).to.equal('work') expect(user.emails[0].value).to.equal('jgilber-2@example.com') // modified expect(user.entitlements).to.equal(undefined) // deleted expect(user.addresses[0].streetAddress).to.equal('City Plaza-2') // modified expect(user.addresses[0].postalCode).to.equal('9559-2') // modified expect(user['urn:ietf:params:scim:schemas:extension:enterprise:2.0:User'].employeeNumber).to.equal('1111') // modified expect(user['urn:ietf:params:scim:schemas:extension:enterprise:2.0:User'].department).to.equal(undefined) // deleted expect(user['urn:ietf:params:scim:schemas:extension:enterprise:2.0:User'].manager).to.equal(undefined) // deleted expect(user['urn:ietf:params:scim:schemas:extension:enterprise:2.0:User'].test1).to.equal(undefined) // deleted expect(user['urn:ietf:params:scim:schemas:extension:enterprise:2.0:User'].test2).to.equal(undefined) // deleted done() }) }) it('deleteUser test', (done) => { server_8880.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: 'GoGoLoki', externalId: undefined, members: [{ value: 'bjensen' }] } server_8880.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:8880/Groups/GoGoLoki') done() }) }) it('getGroup just created test', (done) => { server_8880.get('/Groups/GoGoLoki') .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('GoGoLoki') expect(group.id).to.equal('GoGoLoki') done() }) }) it('modifyGroupMembers test', (done) => { server_8880.patch('/Groups/GoGoLoki?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_8880.get('/Groups/GoGoLoki') .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('GoGoLoki') expect(group.id).to.equal('GoGoLoki') expect(group.members.length).to.equal(1) // bjensen removed expect(group.members[0].value).to.equal('jsmith') // added done() }) }) it('deleteGroup test', (done) => { server_8880.delete('/Groups/GoGoLoki') .set(options.headers) .end(function (err, res) { expect(err).to.equal(null) expect(res.statusCode).to.equal(204) done() }) }) })