Sha256: 2157358f5e552ec372fe11cecd616d41a98ff34ed6fe98550755711e5b81aae1

Contents?: true

Size: 1.5 KB

Versions: 2

Compression:

Stored size: 1.5 KB

Contents

describe "assignment by custom key" do
  context "with mixin syntax" do
    before do
      class Test::Order
        extend Dry::Initializer

        param  :user,    model: "User", find_by: "name"
        option :product, model: Item,   find_by: :name
      end
    end

    let!(:user) { User.create name: "Dude" }
    let!(:item) { Item.create name: "The thing" }

    it "works when records are present" do
      subject = Test::Order.new("Dude", product: "The thing")

      expect(subject.user).to eql user
      expect(subject.product).to eql item
    end

    it "works when records are absent" do
      subject = Test::Order.new("Man", product: "Something strange")

      expect(subject.user).to be_nil
      expect(subject.product).to be_nil
    end
  end

  context "with container syntax" do
    before do
      class Test::Order
        include Dry::Initializer.define -> do
          param  :user,    model: "User", find_by: "name"
          option :product, model: Item,   find_by: :name
        end
      end
    end

    let!(:user) { User.create name: "Dude" }
    let!(:item) { Item.create name: "The thing" }

    it "works when records are present" do
      subject = Test::Order.new("Dude", product: "The thing")

      expect(subject.user).to eql user
      expect(subject.product).to eql item
    end

    it "works when records are absent" do
      subject = Test::Order.new("Man", product: "Something strange")

      expect(subject.user).to be_nil
      expect(subject.product).to be_nil
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dry-initializer-rails-2.0.0 spec/dry/initializer/assignment_by_custom_key_spec.rb
dry-initializer-rails-1.0.0 spec/dry/initializer/assignment_by_custom_key_spec.rb