Skip to content

Error when validating array items with different conditionally required properties #2473

Open
@dub-wt

Description

@dub-wt

Hello,

If we define different properties required for array items by given condition then validation fails even if correct request is sent.

Please check the example below:

it 'test to demonstrate the validation issue' do
  subject.params do
    requires :a, type: String, allow_blank: false, values: %w[x y z]
    given a: ->(val) { val == 'z' } do
      requires :inner3, type: Array, allow_blank: false do
        requires :bar, type: String, allow_blank: false

        given bar: ->(val) { val == 'b' } do
          requires :baz, type: Array do
            requires :new_category, type: String
          end
        end

        given bar: ->(val) { val == 'c' } do
          requires :baz, type: Array do
            requires :baz_category, type: String
          end
        end

      end
    end
  end
  subject.post('/nested-dependency') { declared(params).to_json }

  test = {
    a: 'z',
    inner3: [
      { bar: 'b', baz: [{ new_category: 'nope' }] },
      { bar: 'c', baz: [{ baz_category: 'nope' }] }
    ]
  }

  post '/nested-dependency', **test

  expect(last_response.status).to eq(200)
end

Expected behavior: 200 OK

Actual behavior: 400 Bad request, "inner3[1][baz][0][new_category] is missing, inner3[1][baz][0][baz_category] is missing"

Thank you.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions