Sha256: 77899aaf53d142a41381b4676241d9342f617582f201633462e515ba8f05f995

Contents?: true

Size: 1.87 KB

Versions: 19

Compression:

Stored size: 1.87 KB

Contents

RSpec.describe 'Macros / rule' do
  shared_context 'password confirmation high-level rule' do
    subject(:schema) { schema_class.new }

    let(:schema_class) do
      Dry::Validation.Schema(build: false) do
        required(:user).schema do
          required(:password).filled
          required(:password_confirmation).filled

          rule(password_confirmation: %i[password_confirmation password]) do |pc, p|
            pc.eql?(p)
          end
        end
      end
    end

    it 'passes when input is valid' do
      expect(schema.(user: { password: 'foo', password_confirmation: 'foo' })).to be_successful
    end

    it 'fails when the rule failed' do
      expect(schema.(user: { password: 'foo', password_confirmation: 'bar' }).messages).to eql(
        user: { password_confirmation: [error_message] }
      )
    end
  end

  context 'with the default message' do
    let(:error_message) { 'must be equal to foo' }

    include_context 'password confirmation high-level rule'
  end

  context 'with a custom message' do
    let(:error_message) { 'does not match' }

    before do
      schema_class.class_eval do
        def self.messages
          default_messages.merge(en: { errors: { password_confirmation: 'does not match' } })
        end
      end
    end

    include_context 'password confirmation high-level rule'
  end

  context 'with two rules relying on the same value' do
    subject(:schema) do
      Dry::Validation.Schema do
        required(:x).filled(:int?)

        rule(a: [:x]) do |x|
          x.gt?(3)
        end

        rule(b: [:x]) do |x|
          x.gt?(5)
        end
      end
    end

    it 'passes when input is valid' do
      expect(schema.(x: 6)).to be_successful
    end

    it 'fails when rules failed' do
      expect(schema.(x: 2).messages).to eql(
        a: ['must be greater than 3'],
        b: ['must be greater than 5']
      )
    end
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
dry-validation-0.13.3 spec/integration/schema/macros/rule_spec.rb
dry-validation-0.13.2 spec/integration/schema/macros/rule_spec.rb
dry-validation-0.13.1 spec/integration/schema/macros/rule_spec.rb
dry-validation-0.11.2 spec/integration/schema/macros/rule_spec.rb
dry-validation-0.12.3 spec/integration/schema/macros/rule_spec.rb
dry-validation-0.13.0 spec/integration/schema/macros/rule_spec.rb
dry-validation-0.12.2 spec/integration/schema/macros/rule_spec.rb
dry-validation-0.12.1 spec/integration/schema/macros/rule_spec.rb
dry-validation-0.12.0 spec/integration/schema/macros/rule_spec.rb
dry-validation-0.11.1 spec/integration/schema/macros/rule_spec.rb
dry-validation-0.11.0 spec/integration/schema/macros/rule_spec.rb
dry-validation-0.10.7 spec/integration/schema/macros/rule_spec.rb
dry-validation-0.10.6 spec/integration/schema/macros/rule_spec.rb
dry-validation-0.10.5 spec/integration/schema/macros/rule_spec.rb
dry-validation-0.10.4 spec/integration/schema/macros/rule_spec.rb
dry-validation-0.10.3 spec/integration/schema/macros/rule_spec.rb
dry-validation-0.10.2 spec/integration/schema/macros/rule_spec.rb
dry-validation-0.10.1 spec/integration/schema/macros/rule_spec.rb
dry-validation-0.10.0 spec/integration/schema/macros/rule_spec.rb