Sha256: cb462864da5a9ca9e1c07a8c3c136f1ea0f9f69ea3e31c3812a7853b1c900f15

Contents?: true

Size: 1.77 KB

Versions: 3

Compression:

Stored size: 1.77 KB

Contents

# frozen_string_literal: true

module ApiTester
  # Ensures the fields marked as required in contract are guarded
  module RequiredFields
    def self.go(contract)
      reports = []
      contract.endpoints.each do |endpoint|
        endpoint.methods.each do |method|
          request_def = method.request
          required_fields = request_def.fields.keep_if(&:required)
          combinations = (1..required_fields.size).flat_map { |size| required_fields.combination(size).to_a }
          combinations.each do |remove_fields|
            fields = remove_fields.map do |field|
              { name: field.name, value: nil }
            end
            payload = request_def.altered_payload_with fields
            response = endpoint.call base_url: contract.base_url,
                                     method: method,
                                     payload: payload,
                                     headers: request_def.default_headers
            test = RequiredFieldsTest.new response: response,
                                          payload: payload,
                                          expected_response: endpoint.bad_request_response,
                                          url: endpoint.url,
                                          verb: method.verb
            reports.concat test.check
          end
        end
      end

      reports
    end

    def self.order
      5
    end
  end

  # Test layout used for RequiredFieldsModule
  class RequiredFieldsTest < MethodCaseTest
    def initialize(response:, payload:, expected_response:, url:, verb:)
      super response: response,
            payload: payload,
            expected_response: expected_response,
            url: url,
            verb: verb,
            module_name: 'RequiredFieldsModule'
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
api-tester-1.1.3 lib/api-tester/modules/required_fields.rb
api-tester-1.1.2 lib/api-tester/modules/required_fields.rb
api-tester-1.1.1 lib/api-tester/modules/required_fields.rb