ldapquery/spec/unit/ldapquery_spec.rb
Zach Leslie cb15ae8e70 Rewrite for testability
Testing the methods inside of the function is a complete pain.  This
moves the code out to use the PuppetX pattern and adds some basic unit
tests that validate the logic.
2015-05-20 12:55:18 -07:00

78 lines
2.4 KiB
Ruby

require 'spec_helper'
require 'puppet_x/ldapquery'
require 'net/ldap'
describe 'PuppetX::LDAPquery' do
describe 'results' do
let (:conf) { {
:host => 'ldap.example.com',
:port => 9009,
} }
let (:base) { 'dc=example,dc=com' }
it "should fail with no filter" do
filter = ''
attributes = ['uid']
expect { PuppetX::LDAPquery.new(filter, attributes).results }.to raise_error
end
it "should not fail when using defaults in puppet.conf" do
filter = '(uid=zach)'
attributes = ['uid']
l = PuppetX::LDAPquery.new(filter, attributes, base)
expect { l.get_config }.to_not raise_error
end
it 'should return the desired results' do
filter = '(uid=zach)'
attributes = ['uid']
wanted = [{"dn"=>"uid=zach,ou=users,dc=puppetlabs,dc=com", "uid"=>"zach"}]
entries = Marshal.load(File.read("spec/fixtures/entries_single.obj"))
l = PuppetX::LDAPquery.new(filter, attributes, base)
expect(l).to receive(:get_entries).and_return(entries)
expect(l.results).to match(wanted)
end
context "a multivalued attribute is requested" do
it 'should return the attribute values as an array to the attribute' do
filter = '(uid=zach)'
attributes = ['objectClass']
wanted = [{"dn"=>"uid=zach,ou=users,dc=puppetlabs,dc=com",
"objectclass"=> [
"posixAccount",
"shadowAccount",
"inetOrgPerson",
"puppetPerson",
"ldapPublicKey",
"top"]}]
entries = Marshal.load(File.read("spec/fixtures/entries_objectClass.obj"))
l = PuppetX::LDAPquery.new(filter, attributes, base)
expect(l).to receive(:get_entries).and_return(entries)
expect(l.results).to match(wanted)
end
it 'should return the attributes without new lines' do
filter = '(uid=zach)'
attributes = ['sshPublicKey']
wanted = [{"dn"=>"uid=zach,ou=users,dc=puppetlabs,dc=com",
"sshpublickey"=>
["ssh-rsa AAAAB...1== user@somewhere",
"ssh-rsa AAAAB...2== user@somewhereelse"]}]
entries = Marshal.load(File.read("spec/fixtures/entries_multivalue.obj"))
l = PuppetX::LDAPquery.new(filter, attributes, base)
expect(l).to receive(:get_entries).and_return(entries)
expect(l.results).to match(wanted)
end
end
end
end