Sha256: 6aa874d25c84c70a81fd146e6aadf6f81fdbc82a168a4ca347066e69e77d3b58

Contents?: true

Size: 1.22 KB

Versions: 3

Compression:

Stored size: 1.22 KB

Contents

require "test_helper"

class FormTest < MiniTest::Spec
  Artist = Struct.new(:name)

  class AlbumForm < TestForm
    property :title

    property :hit do
      property :title
    end

    collection :songs do
      property :title
    end

    property :band do # yepp, people do crazy stuff like that.
      property :label do
        property :name
      end
    end
  end

  describe "::dup" do
    let(:cloned) { AlbumForm.clone }

    # #dup is called in Op.inheritable_attr(:contract_class), it must be subclass of the original one.
    it { cloned.wont_equal AlbumForm }
    it { AlbumForm.definitions.wont_equal cloned.definitions }

    it do
      # currently, forms need a name for validation, even without AM.
      cloned.singleton_class.class_eval do
        def name
          "Album"
        end
      end

      cloned.validation do
        params { required(:title).filled }
      end

      cloned.new(OpenStruct.new).validate({})
    end
  end

  describe "#initialize" do
    class ArtistForm < TestForm
      property :name
      property :current_user, virtual: true
    end

    it "allows injecting :virtual options" do
      ArtistForm.new(Artist.new, current_user: Object).current_user.must_equal Object
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
reform-2.3.2 test/form_new_api.rb
reform-2.3.1 test/form_new_api.rb
reform-2.3.0.rc2 test/form_new_api.rb