@@ -65,6 +65,31 @@ defmodule ReqTest do
6565 assert headers == [ { "x-a" , "2" } , { "x-b" , "1" } ]
6666 end
6767
68+ test "respects userinfo in URL" , c do
69+ pid = self ( )
70+
71+ Bypass . expect ( c . bypass , "GET" , "/" , fn conn ->
72+ case List . keyfind ( conn . req_headers , "authorization" , 0 ) do
73+ { _ , auth_header } -> send ( pid , { :authorization , auth_header } )
74+ _ -> nil
75+ end
76+
77+ Plug.Conn . send_resp ( conn , 200 , "ok" )
78+ end )
79+
80+ with_userinfo = String . replace ( c . url , "http://" , "http://foo:bar@" )
81+ Req . get! ( with_userinfo )
82+ assert_receive { :authorization , "Basic " <> _ }
83+
84+ # explicit :auth option is favored over userinfo in URL
85+ Req . get! ( with_userinfo , auth: { :bearer , "token" } )
86+ assert_receive { :authorization , "Bearer token" }
87+
88+ req = Req . new ( auth: { :bearer , "token" } )
89+ Req . get! ( req , url: with_userinfo )
90+ assert_receive { :authorization , "Bearer token" }
91+ end
92+
6893 test "redact" do
6994 assert inspect ( Req . new ( auth: { :bearer , "foo" } ) ) =~ ~s| auth: {:bearer, "***"}|
7095
0 commit comments