UNPKG

5.64 kBJavaScriptView Raw
1'use strict'
2/* eslint-env node, mocha */
3/* eslint-disable no-unused-expressions */
4
5const expect = require('chai').expect
6const ActiveDirectory = require('../index')
7const config = require('./config')
8
9let server = require('./mockServer')
10
11describe('findUser Method', function () {
12 let ad
13 const settings = require('./settings').findUser
14
15 before(function (done) {
16 server(function (s) {
17 ad = new ActiveDirectory(config)
18 server = s
19 done()
20 })
21 })
22
23 describe('#findUser()', function () {
24 [ 'userPrincipalName', 'sAMAccountName', 'dn' ].forEach((userAttribute) => {
25 const username = settings.username[userAttribute]
26 it(`should return user for (${userAttribute}) ${username}`, function (done) {
27 ad.findUser(username, function (err, user) {
28 expect(err).to.be.null
29 expect(user).to.not.be.null
30 done()
31 })
32 })
33 })
34
35 it('should return undefined if the username doesn\'t exist', function (done) {
36 ad.findUser('!!!NON-EXISTENT USER!!!', function (err, user) {
37 expect(err).to.be.undefined
38 expect(user).to.be.undefined
39 done()
40 })
41 })
42
43 it('should return default user attributes when not specified', function (done) {
44 const defaultAttributes = ActiveDirectory.defaultAttributes.user
45 ad.findUser(settings.username.userPrincipalName, function (err, user) {
46 expect(err).to.be.null
47 expect(user).to.not.be.null
48
49 const attributes = Object.keys(user)
50 expect(attributes.length).to.equal(defaultAttributes.length)
51 expect(attributes).to.be.any.members(defaultAttributes)
52
53 done()
54 })
55 })
56 })
57
58 describe('#findUser(opts)', function () {
59 it('should use the custom opts.filter if provided', function (done) {
60 const opts = {
61 filter: settings.opts.custom
62 }
63 const username = settings.username.userPrincipalName
64 ad.findUser(opts, username, function (err, user) {
65 expect(err).to.be.null
66 expect(user).to.not.be.null
67 expect(user.userPrincipalName).to.not.equal(username)
68 done()
69 })
70 })
71
72 it('should include groups/membership if opts.includeMembership[] = [ \'all\' ]', function (done) {
73 const opts = {
74 includeMembership: [ 'all' ]
75 }
76 const username = settings.username.userPrincipalName
77 ad.findUser(opts, username, function (err, user) {
78 expect(err).to.be.null
79 expect(user).to.not.be.null
80 expect(user.groups.length).to.be.gte(settings.groups.length)
81
82 const cns = user.groups.map((g) => g.cn)
83 expect(cns).to.deep.include.members(settings.groups)
84
85 done()
86 })
87 })
88
89 it('should include groups/membership if opts.includeMembership[] = [ \'user\' ]', function (done) {
90 const opts = {
91 includeMembership: [ 'user' ]
92 }
93 const username = settings.username.userPrincipalName
94 ad.findUser(opts, username, function (err, user) {
95 expect(err).to.be.null
96 expect(user).to.not.be.null
97 expect(user.groups.length).to.be.gte(settings.groups.length)
98
99 const cns = user.groups.map((g) => g.cn)
100 expect(cns).to.deep.include.members(settings.groups)
101
102 done()
103 })
104 })
105
106 it('should return expected groups/membership if opts.includeMembership enabled', function (done) {
107 const opts = {
108 includeMembership: [ 'user', 'all' ]
109 }
110 const username = settings.username.userPrincipalName
111 ad.findUser(opts, username, function (err, user) {
112 expect(err).to.be.null
113 expect(user).to.not.be.null
114 expect(user.groups.length).to.be.gte(settings.groups.length)
115
116 const cns = user.groups.map((g) => g.cn)
117 expect(cns).to.deep.include.members(settings.groups)
118
119 done()
120 })
121 })
122
123 it('should return only the first user if more than one result returned', function (done) {
124 const opts = {
125 filter: settings.opts.multipleFilter
126 }
127 ad.findUser(opts, '' /* ignored since we're setting our own filter */, function (err, user) {
128 expect(err).to.be.null
129 expect(user).to.not.be.null
130 expect(Array.isArray(user)).to.be.false
131
132 done()
133 })
134 })
135
136 it('should return only requested attributes', function (done) {
137 const opts = {
138 attributes: [ 'cn' ]
139 }
140 const username = settings.username.userPrincipalName
141 ad.findUser(opts, username, function (err, user) {
142 expect(err).to.be.null
143 expect(user).to.not.be.null
144
145 const keys = Object.keys(user)
146 expect(keys.length).to.be.lte(opts.attributes.length)
147 expect(keys).to.be.any.members(opts.attributes)
148
149 done()
150 })
151 })
152
153 // https://github.com/jsumners/node-activedirectory/issues/26
154 it('should return unique users', function (done) {
155 let count = 0
156 // The bug was triggered by using a common options object. The method
157 // was creating a pointer to this object and then not updating its
158 // internal reference on subsequent calls (because it was already defined).
159 const opts = {}
160 function findUser (user, cb) {
161 ad.findUser(opts, user, function (err, user) {
162 count += 1
163 if (err) done(err)
164 cb(user)
165 })
166 }
167
168 findUser('username', (result) => {
169 expect(result.sAMAccountName).to.equal('username')
170 if (count === 2) done()
171 })
172
173 findUser('username1', (result) => {
174 expect(result.sAMAccountName).to.equal('username1')
175 if (count === 2) done()
176 })
177 })
178 })
179})