Sha256: b365e528a89342feb1fe4bd3b53267e56b4013670f9d2c3289d92503c86bf710

Contents?: true

Size: 1.55 KB

Versions: 44

Compression:

Stored size: 1.55 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_json_keys(path, keys = nil)
    keys, path = path, nil if keys.nil?

    value = follow_path(path.to_s.split('.'))
    case value
    when Hash
      assert_equal keys.sort, value.keys.sort
    else
      assert false, "Expected #{path} to be a Hash, was: #{value.inspect}"
    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

44 entries across 44 versions & 1 rubygems

Version Path
shipit-engine-0.15.0 test/helpers/json_helper.rb
shipit-engine-0.14.0 test/helpers/json_helper.rb
shipit-engine-0.13.0 test/helpers/json_helper.rb
shipit-engine-0.12.1 test/helpers/json_helper.rb
shipit-engine-0.12.0 test/helpers/json_helper.rb
shipit-engine-0.11.0 test/helpers/json_helper.rb
shipit-engine-0.10.0 test/helpers/json_helper.rb
shipit-engine-0.9.0 test/helpers/json_helper.rb
shipit-engine-0.8.9 test/helpers/json_helper.rb
shipit-engine-0.8.8 test/helpers/json_helper.rb
shipit-engine-0.8.7 test/helpers/json_helper.rb
shipit-engine-0.8.6 test/helpers/json_helper.rb
shipit-engine-0.8.5 test/helpers/json_helper.rb
shipit-engine-0.8.4 test/helpers/json_helper.rb
shipit-engine-0.8.3 test/helpers/json_helper.rb
shipit-engine-0.8.2 test/helpers/json_helper.rb
shipit-engine-0.8.1 test/helpers/json_helper.rb
shipit-engine-0.8.0 test/helpers/json_helper.rb
shipit-engine-0.7.0 test/helpers/json_helper.rb
shipit-engine-0.6.4 test/helpers/json_helper.rb