require 'rails_helper'

RSpec.shared_examples Import::Zendesk::ObjectAttribute::Base do
  let(:attribute) do
    double(
      title:                 'Example attribute',
      description:           'Example attribute description',
      removable:             false,
      active:                true,
      position:              12,
      visible_in_portal:     true,
      required_in_portal:    true,
      required:              true,
      type:                  'input',
      custom_field_options:  [],
      regexp_for_validation: '',
    )
  end

  describe 'exception handling' do
    let(:error_text) { Faker::Lorem.sentence }

    it 'extends ObjectManager Attribute exception message' do
      expect(ObjectManager::Attribute).to receive(:add).and_raise(RuntimeError, error_text)

      expect do
        described_class.new('Ticket', 'example_field', attribute)
      end.to raise_error(RuntimeError, /'example_field': #{error_text}$/)
    end
  end

  describe 'argument handling' do
    it 'takes an ObjectLookup name as the first argument' do
      expect(ObjectManager::Attribute)
        .to receive(:add).with(hash_including(object: 'Ticket'))

      described_class.new('Ticket', 'example_field', attribute)
    end

    it 'accepts a constant ObjectLookup name' do
      expect(ObjectManager::Attribute)
        .to receive(:add).with(hash_including(object: 'Ticket'))

      described_class.new(Ticket, 'example_field', attribute)
    end
  end
end
