class Webspicy::Specification::Pre::RobustToInvalidInput

Public Class Methods

match(service, pre) click to toggle source
# File lib/webspicy/specification/pre/robust_to_invalid_input.rb, line 7
def self.match(service, pre)
  self.new
end

Public Instance Methods

counterexamples(service) click to toggle source
# File lib/webspicy/specification/pre/robust_to_invalid_input.rb, line 15
def counterexamples(service)
  spec = service.specification
  first = service.examples.first
  cexamples = []
  cexamples += url_randomness_counterexamples(service, first) if first
  cexamples += empty_input_counterexamples(service, first) if first
  cexamples
end
match(service, pre) click to toggle source
# File lib/webspicy/specification/pre/robust_to_invalid_input.rb, line 11
def match(service, pre)
  self
end

Protected Instance Methods

empty_input_counterexamples(service, first) click to toggle source
# File lib/webspicy/specification/pre/robust_to_invalid_input.rb, line 40
def empty_input_counterexamples(service, first)
  placeholders = service.specification.url_placeholders
  empty_input = first.params.reject{|k| !placeholders.include?(k) }
  if invalid_input?(service, empty_input)
    [first.mutate({
      :description => "it is robust to an invalid empty input (RobustToInvalidInput)",
      :dress_params => false,
      :params => empty_input,
      :expected => {
        status: Support::StatusRange.str("4xx")
      },
      :assert => []
    })]
  else
    []
  end
end
invalid_input?(service, empty_input) click to toggle source
# File lib/webspicy/specification/pre/robust_to_invalid_input.rb, line 58
def invalid_input?(service, empty_input)
  service.input_schema.dress(empty_input)
  false
rescue Finitio::Error
  true
end
url_randomness_counterexamples(service, first) click to toggle source
# File lib/webspicy/specification/pre/robust_to_invalid_input.rb, line 26
def url_randomness_counterexamples(service, first)
  service.specification.url_placeholders.map{|p|
    first.mutate({
      :description => "it is robust to URL randomness on param `#{p}` (RobustToInvalidInput)",
      :dress_params => false,
      :params => first.params.merge(p => (SecureRandom.random_number * 100000000).to_i),
      :expected => {
        status: Support::StatusRange.str("4xx")
      },
      :assert => []
    })
  }
end