require 'rails_helper'

RSpec.describe CreateLdapUserJob, type: :job do
  let(:ldap_client_mock) { instance_double(Net::LDAP) }

  subject(:job) {
    allow_any_instance_of(described_class).to receive(:ldap_client).and_return(ldap_client_mock)

    described_class.perform_later(
      'halfinney', 'kosmos.org', 'halfinney@example.com',
      'remember-remember-the-5th-of-november'
    )
  }

  it "creates a new document with the correct attributes" do
    allow(ldap_client_mock).to receive(:add) # spy on mock

    perform_enqueued_jobs { job }

    expect(ldap_client_mock).to have_received(:add).with(
      dn: "cn=halfinney,ou=kosmos.org,cn=users,dc=kosmos,dc=org",
      attributes: {
        objectclass: ["top", "account", "person", "extensibleObject"],
        cn: "halfinney",
        sn: "halfinney",
        uid: "halfinney",
        mail: "halfinney@example.com",
        userPassword: "remember-remember-the-5th-of-november"
      }
    )
  end

  after do
    clear_enqueued_jobs
    clear_performed_jobs
  end
end
