Sha256: fcb62b9ccdd2f6fdecbaf15fb31bc86ea24badb8c34d3c595ae0049b3818abf3

Contents?: true

Size: 1.84 KB

Versions: 3

Compression:

Stored size: 1.84 KB

Contents

# encoding: utf-8

describe ServiceObjects::Helpers::Dependable do

  let(:test_class) { Class.new      }
  subject          { test_class.new }

  before  { test_class.extend described_class }

  describe ".depends_on" do

    shared_examples "dependency declarator" do

      it "[defines dependency getter]" do
        expect(subject).to respond_to dependency_name
      end

      it "[defines dependency sette]r" do
        expect(subject).to respond_to("#{ dependency_name }=").with(1).argument
      end

      it "[sets default dependency]" do
        expect(subject.send dependency_name).to eq default_value
      end

      it "[resets dependency to default implementation]" do
        expect { subject.send "#{ dependency_name }=", nil }
          .not_to change { subject.send dependency_name }
      end

    end # examples definition

    context "without arguments" do

      it "fails" do
        expect { test_class.depends_on }.to raise_error
      end

    end # context

    context "with one argument" do

      let(:default_value)   { ServiceObjects::NULL }
      let(:dependency_name) { :get_item  }

      before { test_class.depends_on :get_item }

      it_behaves_like "dependency declarator"

    end # context

    context "with two arguments" do

      let(:default_value)   { Class.new  }
      let(:dependency_name) { :get_item  }

      before { test_class.depends_on :get_item, default: default_value }

      it_behaves_like "dependency declarator"

    end # context

    context "repeatedly" do

      let(:default_value)   { Class.new  }
      let(:dependency_name) { :get_item  }

      before { test_class.depends_on :get_item }
      before { test_class.depends_on :get_item, default: default_value }

      it_behaves_like "dependency declarator"

    end # context

  end # describe .depends_on

end # describe ServiceObject::Helpers::Dependable

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
service_objects-0.1.0 spec/tests/helpers/dependable_spec.rb
service_objects-0.0.2 spec/tests/helpers/dependable_spec.rb
service_objects-0.0.1 spec/tests/helpers/dependable_spec.rb