Faraday: рдлрд╝реАрдЪрд░ рдЕрдиреБрд░реЛрдз: 'рдлреИрд░рд╛рдбреЗ :: рдлреНрд▓реИрдЯ рдкреИрд░рд╛рдореНрд╕ рдПрдиреНрдХреЛрдбрд░' рдХрд╛ рд╕рдорд░реНрдерди 'рдлреИрд░рд╛рдбреЗ :: рдПрдбреЗрдкреНрдЯрд░ :: рдЯреЗрд╕реНрдЯ' рдореЗрдВ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рдЕрдЧре░ 2021  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: lostisland/faraday

1291 рдиреЗ strict_mode рдХреЛ Faraday::Adapter::Test::Stubs , рдФрд░ рдореБрдЭреЗ рдореЛрдб рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдПрдВ рдЪрд╛рд╣рд┐рдП: Faraday::FlatParamsEncoder ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдореИрдВ рдПрдХ рд╣реА рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ a рд╕рд╛рде рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдХреЛ рдХрдИ рдмрд╛рд░ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдкрд░реАрдХреНрд╖рдг рд╕реНрдЯрдм рд╕реЗ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдиреЛрдВ рд╡рд╛рд▓реЗ рд╕рдорд╛рди рдкреИрд░рд╛рдореАрдЯрд░ рд╕рднреА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред

class Client
  def initialize(conn)
    <strong i="10">@conn</strong> = conn
  end

  def sushi(jname, params: {})
    res = @conn.get("/#{jname}", params)
    data = JSON.parse(res.body)
    data['name']
  end
end

RSpec.describe Client do
  let(:stubs) { Faraday::Adapter::Test::Stubs.new(strict_mode: true) }
  let(:conn)   { Faraday.new(request: { params_encoder: Faraday::FlatParamsEncoder }) { |b| b.adapter(:test, stubs) } }
  let(:client) { Client.new(conn) }

  it 'handles the same multiple URL parameters' do
    # The same parameter `a` is expected to appear multiple times with different values.
    stubs.get('/ebi?a=x&a=y&a=z') { [200, { 'Content-Type' => 'application/json' }, '{"name": "shrimp"}'] }

    # Test should pass
    expect(client.sushi('ebi', params: { a: %w[x y z] })).to eq('shrimp')

    # Test should not pass due to the lack of "x" and "y" for `a`
    # expect(client.sushi('ebi', params: { a: %w[z] })).to eq('shrimp')
    stubs.verify_stubbed_calls
  end
end

рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ? рдЕрдЧрд░ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рддреЛ рдореИрдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

feature help wanted

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╕рд╛рде рд╣реА, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ main рд╢рд╛рдЦрд╛ рдЕрдм рдЖрдЧрд╛рдореА v2.0 рд░рд┐рд▓реАрдЬ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд░рд╣реА рд╣реИред
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ 1.x рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ 1.x рд╢рд╛рдЦрд╛ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рд╛рдп @yykamei , рдЙрдкрд░реЛрдХреНрдд рдореЗрд░реЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдореИрдВ рдПрдХ рдкреАрдЖрд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реВрдВред
рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╕реЗ рдмрд╛рд╣рд░, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдЖрдЦрд┐рд░реА рдЧреБрдЬрд░ рд░рд╣рд╛ рд╣реИ?

рд╕рд╛рде рд╣реА, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ main рд╢рд╛рдЦрд╛ рдЕрдм рдЖрдЧрд╛рдореА v2.0 рд░рд┐рд▓реАрдЬ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд░рд╣реА рд╣реИред
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ 1.x рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ 1.x рд╢рд╛рдЦрд╛ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛

рд╣рд╛рдп @iMacTia , рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╕реЗ рдмрд╛рд╣рд░, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдЖрдЦрд┐рд░реА рдЧреБрдЬрд░ рд░рд╣рд╛ рд╣реИ?

рдУрд╣, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд╡реАрдирддрдо 1.x рд╢рд╛рдЦрд╛ рдореЗрдВ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ Stub#params рдХрд╛ рдирд┐рд░реНрдорд╛рдг Faraday::Utils.parse_nested_query ; рдпрд╣ рдкрд┐рдЫрд▓реЗ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

Randomized with seed 45661

Client
  handles the same multiple URL parameters (FAILED - 1)

Failures:

  1) Client handles the same multiple URL parameters
     Failure/Error:
       raise Stubs::NotFound, "no stubbed request for #{env[:method]} "\
                              "#{normalized_path} #{env[:body]}"

     Faraday::Adapter::Test::Stubs::NotFound:
       no stubbed request for get /ebi?a=x
     # ./lib/faraday/adapter/test.rb:253:in `call'
     # ./lib/faraday/rack_builder.rb:154:in `build_response'
     # ./lib/faraday/connection.rb:511:in `run_request'
     # ./lib/faraday/connection.rb:200:in `get'
     # ./ok.rb:11:in `sushi'
     # ./ok.rb:30:in `block (2 levels) in <top (required)>'

Finished in 0.00391 seconds (files took 0.78136 seconds to load)
1 example, 1 failure

Failed examples:

рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЛрдб рдмрджрд▓рддрд╛ рд╣реВрдВ, рддреЛ рдкрд░реАрдХреНрд╖рд╛ рдкрд╛рд╕ рд╣реЛ рдЬрд╛рдПрдЧреАред рдореИрдВрдиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ред

diff --git a/a.rb b/a.rb
index c4b7084..91d795d 100644
--- a/a.rb
+++ b/a.rb
@@ -27,7 +27,7 @@ RSpec.describe Client do
     expect(client.sushi('ebi', params: { a: %w[x y z] })).to eq('shrimp')

     # Test should not pass due to the lack of "y" and "z" for `a`
-    expect(client.sushi('ebi', params: { a: %w[x] })).to eq('shrimp')
+    expect(client.sushi('ebi', params: { a: %w[z] })).to eq('shrimp')
     stubs.verify_stubbed_calls
   end
 end

рдлрд┐рд░ рднреА рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ

рдпрд╣ рд╕рдорд╕реНрдпрд╛ #1316 рдХреЗ рд╕рд╛рде рд╣рд▓ рд╣реЛ рдЧрдИ рдереАред

рд╢реБрдХреНрд░рд┐рдпрд╛!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

iMacTia picture iMacTia  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

yusefu picture yusefu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Lewiscowles1986 picture Lewiscowles1986  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mvastola picture mvastola  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mokolabs picture mokolabs  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ