require 'rails_helper'

RSpec.describe 'Profile settings', type: :feature do
  let(:user) { create :user, cn: "mwahlberg" }

  before do
    login_as user, :scope => :user
  end

  feature "Update display name" do
    before do
      allow(user).to receive(:display_name).and_return("Mark")
      allow_any_instance_of(User).to receive(:dn).and_return("cn=mwahlberg,ou=kosmos.org,cn=users,dc=kosmos,dc=org")
      allow_any_instance_of(User).to receive(:ldap_entry).and_return({
        uid: user.cn, ou: user.ou, display_name: "Mark"
      })
    end

    scenario 'fails with validation error' do
      visit setting_path(:profile)
      fill_in 'Display name', with: "M"
      click_button "Save"

      expect(current_url).to eq(setting_url(:profile))
      expect(page).to have_field('Display name', with: 'M')
      within ".error-msg" do
        expect(page).to have_content("is too short")
      end
    end

    scenario 'works with valid input' do
      expect(LdapManager::UpdateDisplayName).to receive(:call)
        .with(user.dn, "Marky Mark").and_return(true)

      visit setting_path(:profile)
      fill_in 'Display name', with: "Marky Mark"
      click_button "Save"

      expect(current_url).to eq(setting_url(:profile))
      within ".flash-msg" do
        expect(page).to have_content("Settings saved")
      end
    end
  end
end
