Sha256: a5236c74bbb5b054ea297787fc245a7fb7e7311557b1ad5900186ab8aad01f1e

Contents?: true

Size: 1.96 KB

Versions: 2

Compression:

Stored size: 1.96 KB

Contents

require 'test_helper'

class SkipIfTest < BaseTest

  class AlbumForm < Reform::Form
    property :title

    property :hit, skip_if: lambda { |options| options[:fragment]["title"].blank? } do
      property :title
      validates :title, presence: true
    end

    collection :songs, skip_if: :skip_song?, populate_if_empty: BaseTest::Song do
      property :title
    end

    def skip_song?(options)
      options[:fragment]["title"].nil?
    end
  end


  let (:hit) { Song.new }
  let (:album) { Album.new(nil, hit, [], nil) }

  # deserializes when present.
  it do
    form = AlbumForm.new(album)
    form.validate("hit" => {"title" => "Altar Of Sacrifice"}).must_equal true
    form.hit.title.must_equal "Altar Of Sacrifice"
  end

  # skips deserialization when not present.
  it do
    form = AlbumForm.new(Album.new)
    form.validate("hit" => {"title" => ""}).must_equal true
    form.hit.must_equal nil # hit hasn't been deserialised.
  end

  # skips deserialization when not present.
  it do
    form = AlbumForm.new(Album.new(nil, nil, []))
    form.validate("songs" => [{"title" => "Waste Of Breath"}, {"title" => nil}]).must_equal true
    form.songs.size.must_equal 1
    form.songs[0].title.must_equal "Waste Of Breath"
  end
end

class SkipIfAllBlankTest < BaseTest
  # skip_if: :all_blank"
  class AlbumForm < Reform::Form
    collection :songs, skip_if: :all_blank, populate_if_empty: BaseTest::Song do
      property :title
      property :length
    end
  end

  # create only one object.
  it do
    form = AlbumForm.new(OpenStruct.new(songs: []))
    form.validate("songs" => [{"title"=>"Apathy"}, {"title"=>"", "length" => ""}]).must_equal true
    form.songs.size.must_equal 1
    form.songs[0].title.must_equal "Apathy"
  end

  it do
    form = AlbumForm.new(OpenStruct.new(songs: []))
    form.validate("songs" => [{"title"=>"", "length" => ""}, {"title"=>"Apathy"}]).must_equal true
    form.songs.size.must_equal 1
    form.songs[0].title.must_equal "Apathy"
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
reform-2.1.0 test/skip_if_test.rb
reform-2.1.0.rc1 test/skip_if_test.rb