spec/integration/schema/form_spec.rb in dry-validation-0.7.1 vs spec/integration/schema/form_spec.rb in dry-validation-0.7.2

- old
+ new

@@ -117,6 +117,44 @@ loc: { lat: 123.456, lng: 456.123 } } ) end end + + describe 'with nested schema in a high-level rule' do + subject(:schema) do + Dry::Validation.Form do + key(:address).maybe + + key(:delivery).required(:bool?) + + rule(address: [:delivery, :address]) do |delivery, address| + delivery.true?.then(address.schema(AddressSchema)) + end + end + end + + before do + AddressSchema = Dry::Validation.Form do + key(:city).required + key(:zipcode).required(:int?) + end + end + + after do + Object.send(:remove_const, :AddressSchema) + end + + it 'applies nested form schema' do + result = schema.(delivery: '1', address: { city: 'NYC', zipcode: '123' }) + expect(result).to be_success + + result = schema.(delivery: '1', address: { city: 'NYC', zipcode: 'foo' }) + expect(result.messages).to eql( + address: { zipcode: ['must be an integer'] } + ) + + result = schema.(delivery: '0', address: nil) + expect(result).to be_success + end + end end