diff --git a/Gemfile b/Gemfile index 71a6aafac..b8cd52e56 100644 --- a/Gemfile +++ b/Gemfile @@ -20,6 +20,7 @@ group :test do gem 'rexml', '>= 3.2.4' end gem 'base64' + gem 'faraday-http-cache', '~> 2.5', '>= 2.5.1' gem 'json', '>= 2.3.0' gem 'jwt', '~> 2.2', '>= 2.2.1' gem 'mime-types', '~> 3.3', '>= 3.3.1' @@ -30,6 +31,7 @@ group :test do gem 'rspec', '~> 3.9' gem 'simplecov', require: false gem 'test-queue' + gem 'timecop', '~> 0.9.8' gem 'vcr', '~> 6.1' gem 'webmock', '~> 3.8', '>= 3.8.2' end diff --git a/lib/octokit/client.rb b/lib/octokit/client.rb index cf9236854..cb15dc08d 100644 --- a/lib/octokit/client.rb +++ b/lib/octokit/client.rb @@ -259,6 +259,7 @@ def client_without_redirects(options = {}) conn_opts[:proxy] = @proxy if @proxy conn_opts[:ssl] = { verify_mode: @ssl_verify_mode } if @ssl_verify_mode conn = Faraday.new(conn_opts) do |http| + http_cache_middleware = http.builder.handlers.delete(Faraday::HttpCache) if Faraday.const_defined?(:HttpCache) if basic_authenticated? http.request(*FARADAY_BASIC_AUTH_KEYS, @login, @password) elsif token_authenticated? @@ -266,6 +267,7 @@ def client_without_redirects(options = {}) elsif bearer_authenticated? http.request :authorization, 'Bearer', @bearer_token end + http.builder.handlers.push(http_cache_middleware) unless http_cache_middleware.nil? http.headers['accept'] = options[:accept] if options.key?(:accept) end conn.builder.delete(Octokit::Middleware::FollowRedirects) diff --git a/lib/octokit/connection.rb b/lib/octokit/connection.rb index 1ee5c2019..089b60481 100644 --- a/lib/octokit/connection.rb +++ b/lib/octokit/connection.rb @@ -106,6 +106,7 @@ def agent http.headers[:accept] = default_media_type http.headers[:content_type] = 'application/json' http.headers[:user_agent] = user_agent + http_cache_middleware = http.builder.handlers.delete(Faraday::HttpCache) if Faraday.const_defined?(:HttpCache) if basic_authenticated? http.request(*FARADAY_BASIC_AUTH_KEYS, @login, @password) elsif token_authenticated? @@ -115,6 +116,7 @@ def agent elsif application_authenticated? http.request(*FARADAY_BASIC_AUTH_KEYS, @client_id, @client_secret) end + http.builder.handlers.push(http_cache_middleware) unless http_cache_middleware.nil? end end diff --git a/spec/cassettes/Octokit_Client_Repositories/_repositories/performs_requests_per_user_when_using_caching_middleware.json b/spec/cassettes/Octokit_Client_Repositories/_repositories/performs_requests_per_user_when_using_caching_middleware.json new file mode 100644 index 000000000..170e6869d --- /dev/null +++ b/spec/cassettes/Octokit_Client_Repositories/_repositories/performs_requests_per_user_when_using_caching_middleware.json @@ -0,0 +1,237 @@ +{ + "http_interactions": [ + { + "request": { + "method": "get", + "uri": "https://github.com/gitapi/user/repos", + "body": { + "encoding": "US-ASCII", + "base64_string": "" + }, + "headers": { + "Accept": [ + "application/vnd.github.v3+json" + ], + "User-Agent": [ + "Octokit Ruby Gem 8.0.0" + ], + "Content-Type": [ + "application/json" + ], + "Authorization": [ + "token <>" + ], + "Accept-Encoding": [ + "gzip;q=1.0,deflate;q=0.6,identity;q=0.3" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "OK" + }, + "headers": { + "Server": [ + "GitHub.com" + ], + "Date": [ + "Thu, 18 Jan 2024 12:19:38 GMT" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Cache-Control": [ + "private, max-age=60, s-maxage=60" + ], + "Vary": [ + "Accept, Authorization, Cookie, X-GitHub-OTP", + "Accept-Encoding, Accept, X-Requested-With" + ], + "Etag": [ + "W/\"8310debcd3dc6e6d0d73d8572f82d3f287917b8e261073bbe46b83c96311133d\"" + ], + "X-Oauth-Scopes": [ + "admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, admin:ssh_signing_key, audit_log, codespace, copilot, delete:packages, delete_repo, gist, notifications, project, repo, user, workflow, write:discussion, write:packages" + ], + "X-Accepted-Oauth-Scopes": [ + "" + ], + "X-Github-Media-Type": [ + "github.v3; format=json" + ], + "X-Github-Api-Version-Selected": [ + "2022-11-28" + ], + "X-Ratelimit-Limit": [ + "5000" + ], + "X-Ratelimit-Remaining": [ + "4988" + ], + "X-Ratelimit-Reset": [ + "1705581494" + ], + "X-Ratelimit-Used": [ + "12" + ], + "X-Ratelimit-Resource": [ + "core" + ], + "Access-Control-Expose-Headers": [ + "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset" + ], + "Access-Control-Allow-Origin": [ + "*" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubdomains; preload" + ], + "X-Frame-Options": [ + "deny" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "X-Xss-Protection": [ + "0" + ], + "Referrer-Policy": [ + "origin-when-cross-origin, strict-origin-when-cross-origin" + ], + "Content-Security-Policy": [ + "default-src 'none'" + ], + "X-Github-Request-Id": [ + "F39E:505BC:B66211A:B83D6EA:65A91759" + ] + }, + "body": { + "encoding": "ASCII-8BIT", + "base64_string": "W3siaWQiOjc0NDc4MTA2Niwibm9kZV9pZCI6IlJfa2dET0xHUjFDZyIsIm5h\nbWUiOiJyZXBvc2l0b3J5LW9uZSIsImZ1bGxfbmFtZSI6ImRpbWEtZ2l0aHVi\nLW9jdG9raXQtdGVzdC9yZXBvc2l0b3J5LW9uZSIsInByaXZhdGUiOmZhbHNl\nLCJvd25lciI6eyJsb2dpbiI6ImRpbWEtZ2l0aHViLW9jdG9raXQtdGVzdCIs\nImlkIjoxNTY5NzY5MDAsIm5vZGVfaWQiOiJVX2tnRE9DVnRIQkEiLCJhdmF0\nYXJfdXJsIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNv\nbS91LzE1Njk3NjkwMD92PTQiLCJncmF2YXRhcl9pZCI6IiIsInVybCI6Imh0\ndHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvZGltYS1naXRodWItb2N0b2tp\ndC10ZXN0IiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vZGltYS1n\naXRodWItb2N0b2tpdC10ZXN0IiwiZm9sbG93ZXJzX3VybCI6Imh0dHBzOi8v\nYXBpLmdpdGh1Yi5jb20vdXNlcnMvZGltYS1naXRodWItb2N0b2tpdC10ZXN0\nL2ZvbGxvd2VycyIsImZvbGxvd2luZ191cmwiOiJodHRwczovL2FwaS5naXRo\ndWIuY29tL3VzZXJzL2RpbWEtZ2l0aHViLW9jdG9raXQtdGVzdC9mb2xsb3dp\nbmd7L290aGVyX3VzZXJ9IiwiZ2lzdHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0\naHViLmNvbS91c2Vycy9kaW1hLWdpdGh1Yi1vY3Rva2l0LXRlc3QvZ2lzdHN7\nL2dpc3RfaWR9Iiwic3RhcnJlZF91cmwiOiJodHRwczovL2FwaS5naXRodWIu\nY29tL3VzZXJzL2RpbWEtZ2l0aHViLW9jdG9raXQtdGVzdC9zdGFycmVkey9v\nd25lcn17L3JlcG99Iiwic3Vic2NyaXB0aW9uc191cmwiOiJodHRwczovL2Fw\naS5naXRodWIuY29tL3VzZXJzL2RpbWEtZ2l0aHViLW9jdG9raXQtdGVzdC9z\ndWJzY3JpcHRpb25zIiwib3JnYW5pemF0aW9uc191cmwiOiJodHRwczovL2Fw\naS5naXRodWIuY29tL3VzZXJzL2RpbWEtZ2l0aHViLW9jdG9raXQtdGVzdC9v\ncmdzIiwicmVwb3NfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vy\ncy9kaW1hLWdpdGh1Yi1vY3Rva2l0LXRlc3QvcmVwb3MiLCJldmVudHNfdXJs\nIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9kaW1hLWdpdGh1Yi1v\nY3Rva2l0LXRlc3QvZXZlbnRzey9wcml2YWN5fSIsInJlY2VpdmVkX2V2ZW50\nc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2RpbWEtZ2l0\naHViLW9jdG9raXQtdGVzdC9yZWNlaXZlZF9ldmVudHMiLCJ0eXBlIjoiVXNl\nciIsInNpdGVfYWRtaW4iOmZhbHNlfSwiaHRtbF91cmwiOiJodHRwczovL2dp\ndGh1Yi5jb20vZGltYS1naXRodWItb2N0b2tpdC10ZXN0L3JlcG9zaXRvcnkt\nb25lIiwiZGVzY3JpcHRpb24iOm51bGwsImZvcmsiOmZhbHNlLCJ1cmwiOiJo\ndHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2RpbWEtZ2l0aHViLW9jdG9r\naXQtdGVzdC9yZXBvc2l0b3J5LW9uZSIsImZvcmtzX3VybCI6Imh0dHBzOi8v\nYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGltYS1naXRodWItb2N0b2tpdC10ZXN0\nL3JlcG9zaXRvcnktb25lL2ZvcmtzIiwia2V5c191cmwiOiJodHRwczovL2Fw\naS5naXRodWIuY29tL3JlcG9zL2RpbWEtZ2l0aHViLW9jdG9raXQtdGVzdC9y\nZXBvc2l0b3J5LW9uZS9rZXlzey9rZXlfaWR9IiwiY29sbGFib3JhdG9yc191\ncmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2RpbWEtZ2l0aHVi\nLW9jdG9raXQtdGVzdC9yZXBvc2l0b3J5LW9uZS9jb2xsYWJvcmF0b3Jzey9j\nb2xsYWJvcmF0b3J9IiwidGVhbXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHVi\nLmNvbS9yZXBvcy9kaW1hLWdpdGh1Yi1vY3Rva2l0LXRlc3QvcmVwb3NpdG9y\neS1vbmUvdGVhbXMiLCJob29rc191cmwiOiJodHRwczovL2FwaS5naXRodWIu\nY29tL3JlcG9zL2RpbWEtZ2l0aHViLW9jdG9raXQtdGVzdC9yZXBvc2l0b3J5\nLW9uZS9ob29rcyIsImlzc3VlX2V2ZW50c191cmwiOiJodHRwczovL2FwaS5n\naXRodWIuY29tL3JlcG9zL2RpbWEtZ2l0aHViLW9jdG9raXQtdGVzdC9yZXBv\nc2l0b3J5LW9uZS9pc3N1ZXMvZXZlbnRzey9udW1iZXJ9IiwiZXZlbnRzX3Vy\nbCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGltYS1naXRodWIt\nb2N0b2tpdC10ZXN0L3JlcG9zaXRvcnktb25lL2V2ZW50cyIsImFzc2lnbmVl\nc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2RpbWEtZ2l0\naHViLW9jdG9raXQtdGVzdC9yZXBvc2l0b3J5LW9uZS9hc3NpZ25lZXN7L3Vz\nZXJ9IiwiYnJhbmNoZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9y\nZXBvcy9kaW1hLWdpdGh1Yi1vY3Rva2l0LXRlc3QvcmVwb3NpdG9yeS1vbmUv\nYnJhbmNoZXN7L2JyYW5jaH0iLCJ0YWdzX3VybCI6Imh0dHBzOi8vYXBpLmdp\ndGh1Yi5jb20vcmVwb3MvZGltYS1naXRodWItb2N0b2tpdC10ZXN0L3JlcG9z\naXRvcnktb25lL3RhZ3MiLCJibG9ic191cmwiOiJodHRwczovL2FwaS5naXRo\ndWIuY29tL3JlcG9zL2RpbWEtZ2l0aHViLW9jdG9raXQtdGVzdC9yZXBvc2l0\nb3J5LW9uZS9naXQvYmxvYnN7L3NoYX0iLCJnaXRfdGFnc191cmwiOiJodHRw\nczovL2FwaS5naXRodWIuY29tL3JlcG9zL2RpbWEtZ2l0aHViLW9jdG9raXQt\ndGVzdC9yZXBvc2l0b3J5LW9uZS9naXQvdGFnc3svc2hhfSIsImdpdF9yZWZz\nX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGltYS1naXRo\ndWItb2N0b2tpdC10ZXN0L3JlcG9zaXRvcnktb25lL2dpdC9yZWZzey9zaGF9\nIiwidHJlZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9k\naW1hLWdpdGh1Yi1vY3Rva2l0LXRlc3QvcmVwb3NpdG9yeS1vbmUvZ2l0L3Ry\nZWVzey9zaGF9Iiwic3RhdHVzZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHVi\nLmNvbS9yZXBvcy9kaW1hLWdpdGh1Yi1vY3Rva2l0LXRlc3QvcmVwb3NpdG9y\neS1vbmUvc3RhdHVzZXMve3NoYX0iLCJsYW5ndWFnZXNfdXJsIjoiaHR0cHM6\nLy9hcGkuZ2l0aHViLmNvbS9yZXBvcy9kaW1hLWdpdGh1Yi1vY3Rva2l0LXRl\nc3QvcmVwb3NpdG9yeS1vbmUvbGFuZ3VhZ2VzIiwic3RhcmdhemVyc191cmwi\nOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2RpbWEtZ2l0aHViLW9j\ndG9raXQtdGVzdC9yZXBvc2l0b3J5LW9uZS9zdGFyZ2F6ZXJzIiwiY29udHJp\nYnV0b3JzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGlt\nYS1naXRodWItb2N0b2tpdC10ZXN0L3JlcG9zaXRvcnktb25lL2NvbnRyaWJ1\ndG9ycyIsInN1YnNjcmliZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5j\nb20vcmVwb3MvZGltYS1naXRodWItb2N0b2tpdC10ZXN0L3JlcG9zaXRvcnkt\nb25lL3N1YnNjcmliZXJzIiwic3Vic2NyaXB0aW9uX3VybCI6Imh0dHBzOi8v\nYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGltYS1naXRodWItb2N0b2tpdC10ZXN0\nL3JlcG9zaXRvcnktb25lL3N1YnNjcmlwdGlvbiIsImNvbW1pdHNfdXJsIjoi\naHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9kaW1hLWdpdGh1Yi1vY3Rv\na2l0LXRlc3QvcmVwb3NpdG9yeS1vbmUvY29tbWl0c3svc2hhfSIsImdpdF9j\nb21taXRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGlt\nYS1naXRodWItb2N0b2tpdC10ZXN0L3JlcG9zaXRvcnktb25lL2dpdC9jb21t\naXRzey9zaGF9IiwiY29tbWVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHVi\nLmNvbS9yZXBvcy9kaW1hLWdpdGh1Yi1vY3Rva2l0LXRlc3QvcmVwb3NpdG9y\neS1vbmUvY29tbWVudHN7L251bWJlcn0iLCJpc3N1ZV9jb21tZW50X3VybCI6\nImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGltYS1naXRodWItb2N0\nb2tpdC10ZXN0L3JlcG9zaXRvcnktb25lL2lzc3Vlcy9jb21tZW50c3svbnVt\nYmVyfSIsImNvbnRlbnRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20v\ncmVwb3MvZGltYS1naXRodWItb2N0b2tpdC10ZXN0L3JlcG9zaXRvcnktb25l\nL2NvbnRlbnRzL3srcGF0aH0iLCJjb21wYXJlX3VybCI6Imh0dHBzOi8vYXBp\nLmdpdGh1Yi5jb20vcmVwb3MvZGltYS1naXRodWItb2N0b2tpdC10ZXN0L3Jl\ncG9zaXRvcnktb25lL2NvbXBhcmUve2Jhc2V9Li4ue2hlYWR9IiwibWVyZ2Vz\nX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGltYS1naXRo\ndWItb2N0b2tpdC10ZXN0L3JlcG9zaXRvcnktb25lL21lcmdlcyIsImFyY2hp\ndmVfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9kaW1hLWdp\ndGh1Yi1vY3Rva2l0LXRlc3QvcmVwb3NpdG9yeS1vbmUve2FyY2hpdmVfZm9y\nbWF0fXsvcmVmfSIsImRvd25sb2Fkc191cmwiOiJodHRwczovL2FwaS5naXRo\ndWIuY29tL3JlcG9zL2RpbWEtZ2l0aHViLW9jdG9raXQtdGVzdC9yZXBvc2l0\nb3J5LW9uZS9kb3dubG9hZHMiLCJpc3N1ZXNfdXJsIjoiaHR0cHM6Ly9hcGku\nZ2l0aHViLmNvbS9yZXBvcy9kaW1hLWdpdGh1Yi1vY3Rva2l0LXRlc3QvcmVw\nb3NpdG9yeS1vbmUvaXNzdWVzey9udW1iZXJ9IiwicHVsbHNfdXJsIjoiaHR0\ncHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9kaW1hLWdpdGh1Yi1vY3Rva2l0\nLXRlc3QvcmVwb3NpdG9yeS1vbmUvcHVsbHN7L251bWJlcn0iLCJtaWxlc3Rv\nbmVzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGltYS1n\naXRodWItb2N0b2tpdC10ZXN0L3JlcG9zaXRvcnktb25lL21pbGVzdG9uZXN7\nL251bWJlcn0iLCJub3RpZmljYXRpb25zX3VybCI6Imh0dHBzOi8vYXBpLmdp\ndGh1Yi5jb20vcmVwb3MvZGltYS1naXRodWItb2N0b2tpdC10ZXN0L3JlcG9z\naXRvcnktb25lL25vdGlmaWNhdGlvbnN7P3NpbmNlLGFsbCxwYXJ0aWNpcGF0\naW5nfSIsImxhYmVsc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3Jl\ncG9zL2RpbWEtZ2l0aHViLW9jdG9raXQtdGVzdC9yZXBvc2l0b3J5LW9uZS9s\nYWJlbHN7L25hbWV9IiwicmVsZWFzZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0\naHViLmNvbS9yZXBvcy9kaW1hLWdpdGh1Yi1vY3Rva2l0LXRlc3QvcmVwb3Np\ndG9yeS1vbmUvcmVsZWFzZXN7L2lkfSIsImRlcGxveW1lbnRzX3VybCI6Imh0\ndHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGltYS1naXRodWItb2N0b2tp\ndC10ZXN0L3JlcG9zaXRvcnktb25lL2RlcGxveW1lbnRzIiwiY3JlYXRlZF9h\ndCI6IjIwMjQtMDEtMThUMDE6NDU6MDZaIiwidXBkYXRlZF9hdCI6IjIwMjQt\nMDEtMThUMDE6NDU6MDdaIiwicHVzaGVkX2F0IjoiMjAyNC0wMS0xOFQwMTo0\nNTowN1oiLCJnaXRfdXJsIjoiZ2l0Oi8vZ2l0aHViLmNvbS9kaW1hLWdpdGh1\nYi1vY3Rva2l0LXRlc3QvcmVwb3NpdG9yeS1vbmUuZ2l0Iiwic3NoX3VybCI6\nImdpdEBnaXRodWIuY29tOmRpbWEtZ2l0aHViLW9jdG9raXQtdGVzdC9yZXBv\nc2l0b3J5LW9uZS5naXQiLCJjbG9uZV91cmwiOiJodHRwczovL2dpdGh1Yi5j\nb20vZGltYS1naXRodWItb2N0b2tpdC10ZXN0L3JlcG9zaXRvcnktb25lLmdp\ndCIsInN2bl91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vZGltYS1naXRodWIt\nb2N0b2tpdC10ZXN0L3JlcG9zaXRvcnktb25lIiwiaG9tZXBhZ2UiOm51bGws\nInNpemUiOjAsInN0YXJnYXplcnNfY291bnQiOjAsIndhdGNoZXJzX2NvdW50\nIjowLCJsYW5ndWFnZSI6bnVsbCwiaGFzX2lzc3VlcyI6dHJ1ZSwiaGFzX3By\nb2plY3RzIjp0cnVlLCJoYXNfZG93bmxvYWRzIjp0cnVlLCJoYXNfd2lraSI6\ndHJ1ZSwiaGFzX3BhZ2VzIjpmYWxzZSwiaGFzX2Rpc2N1c3Npb25zIjpmYWxz\nZSwiZm9ya3NfY291bnQiOjAsIm1pcnJvcl91cmwiOm51bGwsImFyY2hpdmVk\nIjpmYWxzZSwiZGlzYWJsZWQiOmZhbHNlLCJvcGVuX2lzc3Vlc19jb3VudCI6\nMCwibGljZW5zZSI6bnVsbCwiYWxsb3dfZm9ya2luZyI6dHJ1ZSwiaXNfdGVt\ncGxhdGUiOmZhbHNlLCJ3ZWJfY29tbWl0X3NpZ25vZmZfcmVxdWlyZWQiOmZh\nbHNlLCJ0b3BpY3MiOltdLCJ2aXNpYmlsaXR5IjoicHVibGljIiwiZm9ya3Mi\nOjAsIm9wZW5faXNzdWVzIjowLCJ3YXRjaGVycyI6MCwiZGVmYXVsdF9icmFu\nY2giOiJtYWluIiwicGVybWlzc2lvbnMiOnsiYWRtaW4iOnRydWUsIm1haW50\nYWluIjp0cnVlLCJwdXNoIjp0cnVlLCJ0cmlhZ2UiOnRydWUsInB1bGwiOnRy\ndWV9fV0=\n" + } + }, + "recorded_at": "Thu, 18 Jan 2024 12:19:38 GMT" + }, + { + "request": { + "method": "get", + "uri": "https://github.com/gitapi/user/repos", + "body": { + "encoding": "US-ASCII", + "base64_string": "" + }, + "headers": { + "Accept": [ + "application/vnd.github.v3+json" + ], + "User-Agent": [ + "Octokit Ruby Gem 8.0.0" + ], + "Content-Type": [ + "application/json" + ], + "Authorization": [ + "token <>" + ], + "Accept-Encoding": [ + "gzip;q=1.0,deflate;q=0.6,identity;q=0.3" + ] + } + }, + "response": { + "status": { + "code": 200, + "message": "OK" + }, + "headers": { + "Server": [ + "GitHub.com" + ], + "Date": [ + "Thu, 18 Jan 2024 12:19:40 GMT" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Cache-Control": [ + "private, max-age=60, s-maxage=60" + ], + "Vary": [ + "Accept, Authorization, Cookie, X-GitHub-OTP", + "Accept-Encoding, Accept, X-Requested-With" + ], + "Etag": [ + "W/\"91fc9ca4f67da4d142b645664b6a6bb5435fd8b4cbd102ed5a8dc46cdf3499f1\"" + ], + "X-Oauth-Scopes": [ + "admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, admin:ssh_signing_key, audit_log, codespace, copilot, delete:packages, delete_repo, gist, notifications, project, repo, user, workflow, write:discussion, write:packages" + ], + "X-Accepted-Oauth-Scopes": [ + "" + ], + "X-Github-Media-Type": [ + "github.v3; format=json" + ], + "X-Github-Api-Version-Selected": [ + "2022-11-28" + ], + "X-Ratelimit-Limit": [ + "5000" + ], + "X-Ratelimit-Remaining": [ + "4990" + ], + "X-Ratelimit-Reset": [ + "1705581494" + ], + "X-Ratelimit-Used": [ + "10" + ], + "X-Ratelimit-Resource": [ + "core" + ], + "Access-Control-Expose-Headers": [ + "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset" + ], + "Access-Control-Allow-Origin": [ + "*" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubdomains; preload" + ], + "X-Frame-Options": [ + "deny" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "X-Xss-Protection": [ + "0" + ], + "Referrer-Policy": [ + "origin-when-cross-origin, strict-origin-when-cross-origin" + ], + "Content-Security-Policy": [ + "default-src 'none'" + ], + "X-Github-Request-Id": [ + "F3A1:2BCADA:A79D161:A9786D2:65A9175C" + ] + }, + "body": { + "encoding": "ASCII-8BIT", + "base64_string": "W3siaWQiOjc0NDk2NDk1MSwibm9kZV9pZCI6IlJfa2dET0xHZERWdyIsIm5h\nbWUiOiJyZXBvc2l0b3J5LXR3byIsImZ1bGxfbmFtZSI6ImRpbWEtZ2l0aHVi\nLW9jdG9raXQtdGVzdC10d28vcmVwb3NpdG9yeS10d28iLCJwcml2YXRlIjpm\nYWxzZSwib3duZXIiOnsibG9naW4iOiJkaW1hLWdpdGh1Yi1vY3Rva2l0LXRl\nc3QtdHdvIiwiaWQiOjE1NzAxNzIwMCwibm9kZV9pZCI6IlVfa2dET0NWdmtj\nQSIsImF2YXRhcl91cmwiOiJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNv\nbnRlbnQuY29tL3UvMTU3MDE3MjAwP3Y9NCIsImdyYXZhdGFyX2lkIjoiIiwi\ndXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9kaW1hLWdpdGh1\nYi1vY3Rva2l0LXRlc3QtdHdvIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1\nYi5jb20vZGltYS1naXRodWItb2N0b2tpdC10ZXN0LXR3byIsImZvbGxvd2Vy\nc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2RpbWEtZ2l0\naHViLW9jdG9raXQtdGVzdC10d28vZm9sbG93ZXJzIiwiZm9sbG93aW5nX3Vy\nbCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvZGltYS1naXRodWIt\nb2N0b2tpdC10ZXN0LXR3by9mb2xsb3dpbmd7L290aGVyX3VzZXJ9IiwiZ2lz\ndHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9kaW1hLWdp\ndGh1Yi1vY3Rva2l0LXRlc3QtdHdvL2dpc3Rzey9naXN0X2lkfSIsInN0YXJy\nZWRfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9kaW1hLWdp\ndGh1Yi1vY3Rva2l0LXRlc3QtdHdvL3N0YXJyZWR7L293bmVyfXsvcmVwb30i\nLCJzdWJzY3JpcHRpb25zX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20v\ndXNlcnMvZGltYS1naXRodWItb2N0b2tpdC10ZXN0LXR3by9zdWJzY3JpcHRp\nb25zIiwib3JnYW5pemF0aW9uc191cmwiOiJodHRwczovL2FwaS5naXRodWIu\nY29tL3VzZXJzL2RpbWEtZ2l0aHViLW9jdG9raXQtdGVzdC10d28vb3JncyIs\nInJlcG9zX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvZGlt\nYS1naXRodWItb2N0b2tpdC10ZXN0LXR3by9yZXBvcyIsImV2ZW50c191cmwi\nOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2RpbWEtZ2l0aHViLW9j\ndG9raXQtdGVzdC10d28vZXZlbnRzey9wcml2YWN5fSIsInJlY2VpdmVkX2V2\nZW50c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2RpbWEt\nZ2l0aHViLW9jdG9raXQtdGVzdC10d28vcmVjZWl2ZWRfZXZlbnRzIiwidHlw\nZSI6IlVzZXIiLCJzaXRlX2FkbWluIjpmYWxzZX0sImh0bWxfdXJsIjoiaHR0\ncHM6Ly9naXRodWIuY29tL2RpbWEtZ2l0aHViLW9jdG9raXQtdGVzdC10d28v\ncmVwb3NpdG9yeS10d28iLCJkZXNjcmlwdGlvbiI6bnVsbCwiZm9yayI6ZmFs\nc2UsInVybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGltYS1n\naXRodWItb2N0b2tpdC10ZXN0LXR3by9yZXBvc2l0b3J5LXR3byIsImZvcmtz\nX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGltYS1naXRo\ndWItb2N0b2tpdC10ZXN0LXR3by9yZXBvc2l0b3J5LXR3by9mb3JrcyIsImtl\neXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9kaW1hLWdp\ndGh1Yi1vY3Rva2l0LXRlc3QtdHdvL3JlcG9zaXRvcnktdHdvL2tleXN7L2tl\neV9pZH0iLCJjb2xsYWJvcmF0b3JzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1\nYi5jb20vcmVwb3MvZGltYS1naXRodWItb2N0b2tpdC10ZXN0LXR3by9yZXBv\nc2l0b3J5LXR3by9jb2xsYWJvcmF0b3Jzey9jb2xsYWJvcmF0b3J9IiwidGVh\nbXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9kaW1hLWdp\ndGh1Yi1vY3Rva2l0LXRlc3QtdHdvL3JlcG9zaXRvcnktdHdvL3RlYW1zIiwi\naG9va3NfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9kaW1h\nLWdpdGh1Yi1vY3Rva2l0LXRlc3QtdHdvL3JlcG9zaXRvcnktdHdvL2hvb2tz\nIiwiaXNzdWVfZXZlbnRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20v\ncmVwb3MvZGltYS1naXRodWItb2N0b2tpdC10ZXN0LXR3by9yZXBvc2l0b3J5\nLXR3by9pc3N1ZXMvZXZlbnRzey9udW1iZXJ9IiwiZXZlbnRzX3VybCI6Imh0\ndHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGltYS1naXRodWItb2N0b2tp\ndC10ZXN0LXR3by9yZXBvc2l0b3J5LXR3by9ldmVudHMiLCJhc3NpZ25lZXNf\ndXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9kaW1hLWdpdGh1\nYi1vY3Rva2l0LXRlc3QtdHdvL3JlcG9zaXRvcnktdHdvL2Fzc2lnbmVlc3sv\ndXNlcn0iLCJicmFuY2hlc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29t\nL3JlcG9zL2RpbWEtZ2l0aHViLW9jdG9raXQtdGVzdC10d28vcmVwb3NpdG9y\neS10d28vYnJhbmNoZXN7L2JyYW5jaH0iLCJ0YWdzX3VybCI6Imh0dHBzOi8v\nYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGltYS1naXRodWItb2N0b2tpdC10ZXN0\nLXR3by9yZXBvc2l0b3J5LXR3by90YWdzIiwiYmxvYnNfdXJsIjoiaHR0cHM6\nLy9hcGkuZ2l0aHViLmNvbS9yZXBvcy9kaW1hLWdpdGh1Yi1vY3Rva2l0LXRl\nc3QtdHdvL3JlcG9zaXRvcnktdHdvL2dpdC9ibG9ic3svc2hhfSIsImdpdF90\nYWdzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGltYS1n\naXRodWItb2N0b2tpdC10ZXN0LXR3by9yZXBvc2l0b3J5LXR3by9naXQvdGFn\nc3svc2hhfSIsImdpdF9yZWZzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5j\nb20vcmVwb3MvZGltYS1naXRodWItb2N0b2tpdC10ZXN0LXR3by9yZXBvc2l0\nb3J5LXR3by9naXQvcmVmc3svc2hhfSIsInRyZWVzX3VybCI6Imh0dHBzOi8v\nYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGltYS1naXRodWItb2N0b2tpdC10ZXN0\nLXR3by9yZXBvc2l0b3J5LXR3by9naXQvdHJlZXN7L3NoYX0iLCJzdGF0dXNl\nc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2RpbWEtZ2l0\naHViLW9jdG9raXQtdGVzdC10d28vcmVwb3NpdG9yeS10d28vc3RhdHVzZXMv\ne3NoYX0iLCJsYW5ndWFnZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNv\nbS9yZXBvcy9kaW1hLWdpdGh1Yi1vY3Rva2l0LXRlc3QtdHdvL3JlcG9zaXRv\ncnktdHdvL2xhbmd1YWdlcyIsInN0YXJnYXplcnNfdXJsIjoiaHR0cHM6Ly9h\ncGkuZ2l0aHViLmNvbS9yZXBvcy9kaW1hLWdpdGh1Yi1vY3Rva2l0LXRlc3Qt\ndHdvL3JlcG9zaXRvcnktdHdvL3N0YXJnYXplcnMiLCJjb250cmlidXRvcnNf\ndXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9kaW1hLWdpdGh1\nYi1vY3Rva2l0LXRlc3QtdHdvL3JlcG9zaXRvcnktdHdvL2NvbnRyaWJ1dG9y\ncyIsInN1YnNjcmliZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20v\ncmVwb3MvZGltYS1naXRodWItb2N0b2tpdC10ZXN0LXR3by9yZXBvc2l0b3J5\nLXR3by9zdWJzY3JpYmVycyIsInN1YnNjcmlwdGlvbl91cmwiOiJodHRwczov\nL2FwaS5naXRodWIuY29tL3JlcG9zL2RpbWEtZ2l0aHViLW9jdG9raXQtdGVz\ndC10d28vcmVwb3NpdG9yeS10d28vc3Vic2NyaXB0aW9uIiwiY29tbWl0c191\ncmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2RpbWEtZ2l0aHVi\nLW9jdG9raXQtdGVzdC10d28vcmVwb3NpdG9yeS10d28vY29tbWl0c3svc2hh\nfSIsImdpdF9jb21taXRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20v\ncmVwb3MvZGltYS1naXRodWItb2N0b2tpdC10ZXN0LXR3by9yZXBvc2l0b3J5\nLXR3by9naXQvY29tbWl0c3svc2hhfSIsImNvbW1lbnRzX3VybCI6Imh0dHBz\nOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGltYS1naXRodWItb2N0b2tpdC10\nZXN0LXR3by9yZXBvc2l0b3J5LXR3by9jb21tZW50c3svbnVtYmVyfSIsImlz\nc3VlX2NvbW1lbnRfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBv\ncy9kaW1hLWdpdGh1Yi1vY3Rva2l0LXRlc3QtdHdvL3JlcG9zaXRvcnktdHdv\nL2lzc3Vlcy9jb21tZW50c3svbnVtYmVyfSIsImNvbnRlbnRzX3VybCI6Imh0\ndHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGltYS1naXRodWItb2N0b2tp\ndC10ZXN0LXR3by9yZXBvc2l0b3J5LXR3by9jb250ZW50cy97K3BhdGh9Iiwi\nY29tcGFyZV91cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2Rp\nbWEtZ2l0aHViLW9jdG9raXQtdGVzdC10d28vcmVwb3NpdG9yeS10d28vY29t\ncGFyZS97YmFzZX0uLi57aGVhZH0iLCJtZXJnZXNfdXJsIjoiaHR0cHM6Ly9h\ncGkuZ2l0aHViLmNvbS9yZXBvcy9kaW1hLWdpdGh1Yi1vY3Rva2l0LXRlc3Qt\ndHdvL3JlcG9zaXRvcnktdHdvL21lcmdlcyIsImFyY2hpdmVfdXJsIjoiaHR0\ncHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9kaW1hLWdpdGh1Yi1vY3Rva2l0\nLXRlc3QtdHdvL3JlcG9zaXRvcnktdHdvL3thcmNoaXZlX2Zvcm1hdH17L3Jl\nZn0iLCJkb3dubG9hZHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9y\nZXBvcy9kaW1hLWdpdGh1Yi1vY3Rva2l0LXRlc3QtdHdvL3JlcG9zaXRvcnkt\ndHdvL2Rvd25sb2FkcyIsImlzc3Vlc191cmwiOiJodHRwczovL2FwaS5naXRo\ndWIuY29tL3JlcG9zL2RpbWEtZ2l0aHViLW9jdG9raXQtdGVzdC10d28vcmVw\nb3NpdG9yeS10d28vaXNzdWVzey9udW1iZXJ9IiwicHVsbHNfdXJsIjoiaHR0\ncHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9kaW1hLWdpdGh1Yi1vY3Rva2l0\nLXRlc3QtdHdvL3JlcG9zaXRvcnktdHdvL3B1bGxzey9udW1iZXJ9IiwibWls\nZXN0b25lc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2Rp\nbWEtZ2l0aHViLW9jdG9raXQtdGVzdC10d28vcmVwb3NpdG9yeS10d28vbWls\nZXN0b25lc3svbnVtYmVyfSIsIm5vdGlmaWNhdGlvbnNfdXJsIjoiaHR0cHM6\nLy9hcGkuZ2l0aHViLmNvbS9yZXBvcy9kaW1hLWdpdGh1Yi1vY3Rva2l0LXRl\nc3QtdHdvL3JlcG9zaXRvcnktdHdvL25vdGlmaWNhdGlvbnN7P3NpbmNlLGFs\nbCxwYXJ0aWNpcGF0aW5nfSIsImxhYmVsc191cmwiOiJodHRwczovL2FwaS5n\naXRodWIuY29tL3JlcG9zL2RpbWEtZ2l0aHViLW9jdG9raXQtdGVzdC10d28v\ncmVwb3NpdG9yeS10d28vbGFiZWxzey9uYW1lfSIsInJlbGVhc2VzX3VybCI6\nImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGltYS1naXRodWItb2N0\nb2tpdC10ZXN0LXR3by9yZXBvc2l0b3J5LXR3by9yZWxlYXNlc3svaWR9Iiwi\nZGVwbG95bWVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBv\ncy9kaW1hLWdpdGh1Yi1vY3Rva2l0LXRlc3QtdHdvL3JlcG9zaXRvcnktdHdv\nL2RlcGxveW1lbnRzIiwiY3JlYXRlZF9hdCI6IjIwMjQtMDEtMThUMTE6MTU6\nMzVaIiwidXBkYXRlZF9hdCI6IjIwMjQtMDEtMThUMTE6MTU6MzVaIiwicHVz\naGVkX2F0IjoiMjAyNC0wMS0xOFQxMToxNTozNVoiLCJnaXRfdXJsIjoiZ2l0\nOi8vZ2l0aHViLmNvbS9kaW1hLWdpdGh1Yi1vY3Rva2l0LXRlc3QtdHdvL3Jl\ncG9zaXRvcnktdHdvLmdpdCIsInNzaF91cmwiOiJnaXRAZ2l0aHViLmNvbTpk\naW1hLWdpdGh1Yi1vY3Rva2l0LXRlc3QtdHdvL3JlcG9zaXRvcnktdHdvLmdp\ndCIsImNsb25lX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9kaW1hLWdpdGh1\nYi1vY3Rva2l0LXRlc3QtdHdvL3JlcG9zaXRvcnktdHdvLmdpdCIsInN2bl91\ncmwiOiJodHRwczovL2dpdGh1Yi5jb20vZGltYS1naXRodWItb2N0b2tpdC10\nZXN0LXR3by9yZXBvc2l0b3J5LXR3byIsImhvbWVwYWdlIjpudWxsLCJzaXpl\nIjowLCJzdGFyZ2F6ZXJzX2NvdW50IjowLCJ3YXRjaGVyc19jb3VudCI6MCwi\nbGFuZ3VhZ2UiOm51bGwsImhhc19pc3N1ZXMiOnRydWUsImhhc19wcm9qZWN0\ncyI6dHJ1ZSwiaGFzX2Rvd25sb2FkcyI6dHJ1ZSwiaGFzX3dpa2kiOnRydWUs\nImhhc19wYWdlcyI6ZmFsc2UsImhhc19kaXNjdXNzaW9ucyI6ZmFsc2UsImZv\ncmtzX2NvdW50IjowLCJtaXJyb3JfdXJsIjpudWxsLCJhcmNoaXZlZCI6ZmFs\nc2UsImRpc2FibGVkIjpmYWxzZSwib3Blbl9pc3N1ZXNfY291bnQiOjAsImxp\nY2Vuc2UiOm51bGwsImFsbG93X2ZvcmtpbmciOnRydWUsImlzX3RlbXBsYXRl\nIjpmYWxzZSwid2ViX2NvbW1pdF9zaWdub2ZmX3JlcXVpcmVkIjpmYWxzZSwi\ndG9waWNzIjpbXSwidmlzaWJpbGl0eSI6InB1YmxpYyIsImZvcmtzIjowLCJv\ncGVuX2lzc3VlcyI6MCwid2F0Y2hlcnMiOjAsImRlZmF1bHRfYnJhbmNoIjoi\nbWFpbiIsInBlcm1pc3Npb25zIjp7ImFkbWluIjp0cnVlLCJtYWludGFpbiI6\ndHJ1ZSwicHVzaCI6dHJ1ZSwidHJpYWdlIjp0cnVlLCJwdWxsIjp0cnVlfX1d\n" + } + }, + "recorded_at": "Thu, 18 Jan 2024 12:19:40 GMT" + } + ], + "recorded_with": "VCR 6.2.0" +} \ No newline at end of file diff --git a/spec/octokit/client/pull_requests_spec.rb b/spec/octokit/client/pull_requests_spec.rb index 9f7e30681..0980f6d6b 100644 --- a/spec/octokit/client/pull_requests_spec.rb +++ b/spec/octokit/client/pull_requests_spec.rb @@ -121,7 +121,7 @@ end context 'without line argument' do - let(:new_comment) { super().except(:line) } + let(:new_comment) { super().tap { |hash| hash.delete(:line) } } it 'creates a new comment on a pull request at the file level' do assert_requested :post, github_url("/repos/#{@test_repo}/pulls/#{@pull.number}/comments") diff --git a/spec/octokit/client/repositories_spec.rb b/spec/octokit/client/repositories_spec.rb index 4a83a7ff5..f7cd64107 100644 --- a/spec/octokit/client/repositories_spec.rb +++ b/spec/octokit/client/repositories_spec.rb @@ -1,5 +1,8 @@ # frozen_string_literal: true +require 'faraday-http-cache' +require 'timecop' + describe Octokit::Client::Repositories do before do Octokit.reset! @@ -260,6 +263,22 @@ expect(repositories).to be_kind_of Array assert_requested :get, github_url('/user/repos') end + it 'performs requests per user when using caching middleware' do + Timecop.freeze(VCR.current_cassette.originally_recorded_at || Time.now) do + client_with_caching = oauth_client_with_http_cache_middleware(access_token: test_github_token) + client_with_caching.repositories + client_with_caching.repositories + + client_with_caching_two = oauth_client_with_http_cache_middleware(access_token: test_github_token_two) + client_with_caching_two.repositories + client_with_caching_two.repositories + + client_with_caching.repositories + client_with_caching_two.repositories + + assert_requested :get, github_url('/user/repos'), times: 2 + end + end end # .repositories describe '.all_repositories', :vcr do diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 3b1dc992a..f2d13e1e6 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -52,6 +52,9 @@ c.filter_sensitive_data('<>') do test_github_token end + c.filter_sensitive_data('<>') do + test_github_token_two + end c.filter_sensitive_data('') do test_github_collaborator_token end @@ -182,6 +185,10 @@ def test_github_token ENV.fetch 'OCTOKIT_TEST_GITHUB_TOKEN', 'x' * 40 end +def test_github_token_two + ENV.fetch 'OCTOKIT_TEST_GITHUB_TOKEN_TWO', 'y' * 40 +end + def test_github_collaborator_token ENV.fetch 'OCTOKIT_TEST_GITHUB_COLLABORATOR_TOKEN', 'x' * 40 end @@ -321,8 +328,8 @@ def basic_auth_client(login: test_github_login, password: test_github_password) Octokit::Client.new(login: login, password: password) end -def oauth_client - Octokit::Client.new(access_token: test_github_token) +def oauth_client(access_token: test_github_token) + Octokit::Client.new(access_token: access_token) end def enterprise_admin_client @@ -343,6 +350,24 @@ def enterprise_admin_client client end +def http_cache_middleware_store + @http_cache_middleware_store ||= Faraday::HttpCache::MemoryStore.new +end + +def oauth_client_with_http_cache_middleware(access_token: test_github_token) + stack = Faraday::RackBuilder.new do |builder| + builder.use Faraday::HttpCache, serializer: Marshal, store: http_cache_middleware_store, shared_cache: false + builder.adapter Faraday.default_adapter + end + + client = oauth_client(access_token: access_token) + + client.configure do |c| + c.middleware = stack + end + client +end + def enterprise_management_console_client stack = Faraday::RackBuilder.new do |builder| builder.request :multipart