require 'rails_helper'

RSpec.describe Issue1905ExchangeLoginFromRemoteId, type: :db_migration do

  let(:backend) { ::Import::Exchange }

  it 'removes :item_id from attributes' do

    invalid_config = {
      attributes: {
        item_id: 'login',
        some:    'other',
      }
    }

    valid_config = ActiveSupport::HashWithIndifferentAccess.new(
      attributes: {
        some: 'other',
      }
    )

    expect(backend).to receive(:config).and_return(invalid_config)
    allow(backend).to receive(:config).and_call_original

    migrate

    expect(backend.config).to eq(valid_config)
  end

  context 'no changes' do

    it 'performs no action for new systems', system_init_done: false do
      expect(backend).not_to receive(:config)
      migrate
    end

    shared_examples 'irrelevant config' do
      it 'does not change the config' do
        expect(backend).to receive(:config).and_return(config)
        expect(backend).not_to receive(:config=)
        migrate
      end
    end

    context 'blank config' do
      let(:config) { nil }

      it_behaves_like 'irrelevant config'
    end

    context 'blank attributes' do
      let(:config) do
        {
          some: 'config'
        }
      end

      it_behaves_like 'irrelevant config'
    end

    context 'blank attribute :item_id' do
      let(:config) do
        {
          attributes: {
            some: 'mapping'
          }
        }
      end

      it_behaves_like 'irrelevant config'
    end

    context 'attribute :item_id not mapping to login' do

      let(:config) do
        {
          attributes: {
            item_id: 'other_local_attribute'
          }
        }
      end

      it_behaves_like 'irrelevant config'
    end
  end
end
