Sha256: 05c4147846f92cfe0191b6ca20a098521c26265e7b4fce7c7b0707e4d16aceb2

Contents?: true

Size: 1.26 KB

Versions: 2

Compression:

Stored size: 1.26 KB

Contents

module JSONHelper
  def assert_json(path = nil, *args)
    value = follow_path(path.to_s.split('.'))
    if block_given?
      yield value
    elsif args.size == 1
      assert_equal args.first, value
    else
      raise ArgumentError, "Missing either expected_value or a block"
    end
  end

  def assert_no_json(path)
    segments = path.to_s.split('.')
    last_segment = segments.pop
    leaf = follow_path(segments)
    case leaf
    when Hash
      refute leaf.key?(last_segment), "Expected #{leaf.inspect} not to include #{last_segment.inspect}"
    when Array
      refute leaf.size > last_segment.to_i, "Expected #{leaf.inspect} to not have element at index #{last_segment.to_i}"
    else
      assert false, "Expected #{leaf.inspect} to be a Hash or Array"
    end
  end

  private

  def follow_path(segments)
    segments.inject(parsed_json) do |object, key|
      case object
      when Hash
        assert_includes object, key
        object[key]
      when Array
        assert object.size > key.to_i, "#{object.inspect} have no property #{key}"
        object[key.to_i]
      else
        assert false, "Expected #{object.inspect} to be a Hash or Array"
      end
    end
  end

  def parsed_json
    @parsed_json ||= ActiveSupport::JSON.decode(response.body)
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
shipit-engine-0.1.0 test/helpers/json_helper.rb
shipit-engine-0.0.1.pre test/helpers/json_helper.rb