Clone
services_spec.rb
require 'spec_helper'

describe Locomotive::Steam::Services do

  subject { Locomotive::Steam::Services.build_instance(nil) }

  describe 'configuration with a services hook' do

    before do
      Locomotive::Steam.configure do |config|
        config.services_hook = -> (services) {
          services.repositories = MyService.new
        }
      end
    end

    after { Locomotive::Steam.configure { |c| c.services_hook = nil } }

    it { expect(subject.repositories).to be_instance_of(MyService) }

    describe '#defer' do

      let(:status) { { initialized: false } }

      before do
        Locomotive::Steam.configure do |config|
          config.services_hook = -> (services) {
            services.defer(:repositories) { MyService.new(status) }
          }
        end
      end

      it { subject.repositories; expect(status[:initialized]).to eq false }
      it { subject.repositories.do; expect(status[:initialized]).to eq true }

    end

  end

  class MyService
    def initialize(status = {})
      status[:initialized] = true
    end
    def do; end
  end

end