File: merge_spec.rb

package info (click to toggle)
ruby-http 4.4.1-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 704 kB
  • sloc: ruby: 5,388; makefile: 9
file content (68 lines) | stat: -rw-r--r-- 2,362 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# frozen_string_literal: true

RSpec.describe HTTP::Options, "merge" do
  let(:opts) { HTTP::Options.new }

  it "supports a Hash" do
    old_response = opts.response
    expect(opts.merge(:response => :body).response).to eq(:body)
    expect(opts.response).to eq(old_response)
  end

  it "supports another Options" do
    merged = opts.merge(HTTP::Options.new(:response => :body))
    expect(merged.response).to eq(:body)
  end

  it "merges as excepted in complex cases" do
    # FIXME: yuck :(

    foo = HTTP::Options.new(
      :response  => :body,
      :params    => {:baz => "bar"},
      :form      => {:foo => "foo"},
      :body      => "body-foo",
      :json      => {:foo => "foo"},
      :headers   => {:accept => "json", :foo => "foo"},
      :proxy     => {},
      :features  => {}
    )

    bar = HTTP::Options.new(
      :response   => :parsed_body,
      :persistent => "https://www.googe.com",
      :params     => {:plop => "plip"},
      :form       => {:bar => "bar"},
      :body       => "body-bar",
      :json       => {:bar => "bar"},
      :keep_alive_timeout => 10,
      :headers            => {:accept => "xml", :bar => "bar"},
      :timeout_options    => {:foo => :bar},
      :ssl        => {:foo => "bar"},
      :proxy      => {:proxy_address => "127.0.0.1", :proxy_port => 8080}
    )

    expect(foo.merge(bar).to_hash).to eq(
      :response           => :parsed_body,
      :timeout_class      => described_class.default_timeout_class,
      :timeout_options    => {:foo => :bar},
      :params             => {:plop => "plip"},
      :form               => {:bar => "bar"},
      :body               => "body-bar",
      :json               => {:bar => "bar"},
      :persistent         => "https://www.googe.com",
      :keep_alive_timeout => 10,
      :ssl                => {:foo => "bar"},
      :headers            => {"Foo" => "foo", "Accept" => "xml", "Bar" => "bar"},
      :proxy              => {:proxy_address => "127.0.0.1", :proxy_port => 8080},
      :follow             => nil,
      :socket_class       => described_class.default_socket_class,
      :nodelay            => false,
      :ssl_socket_class   => described_class.default_ssl_socket_class,
      :ssl_context        => nil,
      :cookies            => {},
      :encoding           => nil,
      :features           => {}
    )
  end
end