Sha256: c407b507e16563ac9d720c8eedda6eea2adfa9010f0879a72ff44901bd714d76

Contents?: true

Size: 1.2 KB

Versions: 2

Compression:

Stored size: 1.2 KB

Contents

require "dry-auto_inject"
require "formalist/elements/standard"

RSpec.describe "Dependency injection" do
  let(:schema) {
    Dry::Validation.Schema do
      key(:status).required
    end
  }

  subject(:form) {
    Class.new(Formalist::Form) do
      include Test::HashImport["fetch_options"]

      define do
        select_box :status, options: dep(:status_options)
      end

      def status_options
        fetch_options.map { |option| [option, option.capitalize] }
      end
    end.new
  }

  before do
    Test::Container = Class.new do
      extend Dry::Container::Mixin
    end

    Test::Container.register :fetch_options, -> { %w[draft published] }

    auto_inject = Dry::AutoInject(Test::Container)
    Test::HashImport = -> *keys do
      auto_inject.hash[*keys]
    end
  end

  it "supports dependency injection via the initializer's options hash" do
    expect(form.build.to_ast).to eql [
      [:field, [
        :status,
        :select_box,
        nil,
        [],
        [:object, [
          [:options, [:array, [
            [:array, [[:value, ["draft"]], [:value, ["Draft"]]]],
            [:array, [[:value, ["published"]], [:value, ["Published"]]]]
          ]]]
        ]]
      ]]
    ]
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
formalist-0.3.0 spec/integration/dependency_injection_spec.rb
formalist-0.2.3 spec/integration/dependency_injection_spec.rb