rubygems-update 3.4.17 → 3.4.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -0
  3. data/Manifest.txt +7 -4
  4. data/POLICIES.md +2 -2
  5. data/bundler/CHANGELOG.md +30 -0
  6. data/bundler/lib/bundler/build_metadata.rb +2 -2
  7. data/bundler/lib/bundler/cli/binstubs.rb +1 -1
  8. data/bundler/lib/bundler/cli/info.rb +1 -1
  9. data/bundler/lib/bundler/cli/install.rb +1 -1
  10. data/bundler/lib/bundler/cli/outdated.rb +1 -1
  11. data/bundler/lib/bundler/cli/platform.rb +7 -5
  12. data/bundler/lib/bundler/definition.rb +25 -20
  13. data/bundler/lib/bundler/dsl.rb +1 -1
  14. data/bundler/lib/bundler/env.rb +1 -1
  15. data/bundler/lib/bundler/fetcher/compact_index.rb +3 -3
  16. data/bundler/lib/bundler/fetcher/downloader.rb +2 -0
  17. data/bundler/lib/bundler/fetcher/index.rb +1 -2
  18. data/bundler/lib/bundler/fetcher.rb +11 -1
  19. data/bundler/lib/bundler/friendly_errors.rb +1 -1
  20. data/bundler/lib/bundler/gem_helper.rb +3 -4
  21. data/bundler/lib/bundler/installer/parallel_installer.rb +1 -1
  22. data/bundler/lib/bundler/man/bundle-add.1 +1 -1
  23. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  24. data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
  25. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  26. data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
  27. data/bundler/lib/bundler/man/bundle-config.1 +1 -1
  28. data/bundler/lib/bundler/man/bundle-console.1 +1 -1
  29. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  30. data/bundler/lib/bundler/man/bundle-exec.1 +1 -1
  31. data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
  32. data/bundler/lib/bundler/man/bundle-help.1 +1 -1
  33. data/bundler/lib/bundler/man/bundle-info.1 +3 -3
  34. data/bundler/lib/bundler/man/bundle-info.1.ronn +3 -3
  35. data/bundler/lib/bundler/man/bundle-init.1 +1 -1
  36. data/bundler/lib/bundler/man/bundle-inject.1 +1 -1
  37. data/bundler/lib/bundler/man/bundle-install.1 +1 -1
  38. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  39. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  40. data/bundler/lib/bundler/man/bundle-open.1 +1 -1
  41. data/bundler/lib/bundler/man/bundle-outdated.1 +13 -9
  42. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +12 -9
  43. data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
  44. data/bundler/lib/bundler/man/bundle-plugin.1 +1 -1
  45. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  46. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  47. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  48. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  49. data/bundler/lib/bundler/man/bundle-version.1 +1 -1
  50. data/bundler/lib/bundler/man/bundle-viz.1 +1 -1
  51. data/bundler/lib/bundler/man/bundle.1 +1 -1
  52. data/bundler/lib/bundler/man/gemfile.5 +14 -1
  53. data/bundler/lib/bundler/man/gemfile.5.ronn +5 -0
  54. data/bundler/lib/bundler/plugin/index.rb +1 -1
  55. data/bundler/lib/bundler/ruby_dsl.rb +6 -0
  56. data/bundler/lib/bundler/ruby_version.rb +2 -2
  57. data/bundler/lib/bundler/rubygems_integration.rb +1 -1
  58. data/bundler/lib/bundler/source/git.rb +7 -0
  59. data/bundler/lib/bundler/source_list.rb +0 -4
  60. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +1 -1
  61. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +4 -4
  62. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  63. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1 -1
  64. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +2 -2
  65. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +1 -1
  66. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  67. data/bundler/lib/bundler/version.rb +1 -1
  68. data/bundler/lib/bundler.rb +1 -1
  69. data/{bin → exe}/gem +2 -0
  70. data/{bin → exe}/update_rubygems +7 -5
  71. data/lib/rubygems/available_set.rb +1 -0
  72. data/lib/rubygems/basic_specification.rb +1 -0
  73. data/lib/rubygems/bundler_version_finder.rb +1 -1
  74. data/lib/rubygems/command.rb +1 -0
  75. data/lib/rubygems/command_manager.rb +1 -0
  76. data/lib/rubygems/commands/build_command.rb +1 -0
  77. data/lib/rubygems/commands/cert_command.rb +1 -0
  78. data/lib/rubygems/commands/check_command.rb +1 -0
  79. data/lib/rubygems/commands/cleanup_command.rb +1 -0
  80. data/lib/rubygems/commands/contents_command.rb +1 -0
  81. data/lib/rubygems/commands/dependency_command.rb +1 -0
  82. data/lib/rubygems/commands/environment_command.rb +1 -0
  83. data/lib/rubygems/commands/exec_command.rb +1 -0
  84. data/lib/rubygems/commands/fetch_command.rb +1 -0
  85. data/lib/rubygems/commands/generate_index_command.rb +1 -0
  86. data/lib/rubygems/commands/help_command.rb +1 -0
  87. data/lib/rubygems/commands/install_command.rb +1 -0
  88. data/lib/rubygems/commands/list_command.rb +1 -0
  89. data/lib/rubygems/commands/lock_command.rb +1 -0
  90. data/lib/rubygems/commands/mirror_command.rb +1 -0
  91. data/lib/rubygems/commands/open_command.rb +1 -0
  92. data/lib/rubygems/commands/outdated_command.rb +1 -0
  93. data/lib/rubygems/commands/owner_command.rb +1 -0
  94. data/lib/rubygems/commands/pristine_command.rb +1 -0
  95. data/lib/rubygems/commands/push_command.rb +1 -0
  96. data/lib/rubygems/commands/query_command.rb +1 -0
  97. data/lib/rubygems/commands/rdoc_command.rb +1 -0
  98. data/lib/rubygems/commands/search_command.rb +1 -0
  99. data/lib/rubygems/commands/server_command.rb +1 -0
  100. data/lib/rubygems/commands/setup_command.rb +2 -1
  101. data/lib/rubygems/commands/signin_command.rb +1 -0
  102. data/lib/rubygems/commands/signout_command.rb +1 -0
  103. data/lib/rubygems/commands/sources_command.rb +1 -0
  104. data/lib/rubygems/commands/specification_command.rb +1 -0
  105. data/lib/rubygems/commands/stale_command.rb +1 -0
  106. data/lib/rubygems/commands/uninstall_command.rb +1 -0
  107. data/lib/rubygems/commands/unpack_command.rb +1 -0
  108. data/lib/rubygems/commands/update_command.rb +1 -0
  109. data/lib/rubygems/commands/which_command.rb +1 -0
  110. data/lib/rubygems/commands/yank_command.rb +1 -0
  111. data/lib/rubygems/config_file.rb +1 -0
  112. data/lib/rubygems/core_ext/kernel_require.rb +1 -0
  113. data/lib/rubygems/core_ext/tcpsocket_init.rb +2 -0
  114. data/lib/rubygems/defaults.rb +1 -0
  115. data/lib/rubygems/dependency.rb +1 -0
  116. data/lib/rubygems/dependency_installer.rb +1 -0
  117. data/lib/rubygems/dependency_list.rb +1 -0
  118. data/lib/rubygems/deprecate.rb +1 -0
  119. data/lib/rubygems/doctor.rb +1 -0
  120. data/lib/rubygems/errors.rb +1 -0
  121. data/lib/rubygems/ext/build_error.rb +1 -0
  122. data/lib/rubygems/ext/builder.rb +1 -0
  123. data/lib/rubygems/ext/configure_builder.rb +1 -0
  124. data/lib/rubygems/ext/ext_conf_builder.rb +1 -0
  125. data/lib/rubygems/ext.rb +1 -0
  126. data/lib/rubygems/gem_runner.rb +1 -0
  127. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
  128. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
  129. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +78 -0
  130. data/lib/rubygems/gemcutter_utilities.rb +30 -26
  131. data/lib/rubygems/indexer.rb +1 -0
  132. data/lib/rubygems/install_default_message.rb +1 -0
  133. data/lib/rubygems/install_message.rb +1 -0
  134. data/lib/rubygems/install_update_options.rb +1 -0
  135. data/lib/rubygems/installer.rb +1 -0
  136. data/lib/rubygems/local_remote_options.rb +1 -0
  137. data/lib/rubygems/mock_gem_ui.rb +1 -0
  138. data/lib/rubygems/name_tuple.rb +1 -0
  139. data/lib/rubygems/package/digest_io.rb +1 -0
  140. data/lib/rubygems/package/file_source.rb +1 -0
  141. data/lib/rubygems/package/io_source.rb +1 -0
  142. data/lib/rubygems/package/old.rb +1 -0
  143. data/lib/rubygems/package/source.rb +1 -0
  144. data/lib/rubygems/package/tar_header.rb +1 -0
  145. data/lib/rubygems/package/tar_reader/entry.rb +1 -0
  146. data/lib/rubygems/package/tar_reader.rb +1 -0
  147. data/lib/rubygems/package/tar_writer.rb +1 -0
  148. data/lib/rubygems/package.rb +2 -2
  149. data/lib/rubygems/package_task.rb +1 -0
  150. data/lib/rubygems/path_support.rb +1 -0
  151. data/lib/rubygems/platform.rb +1 -0
  152. data/lib/rubygems/psych_tree.rb +1 -0
  153. data/lib/rubygems/rdoc.rb +1 -0
  154. data/lib/rubygems/remote_fetcher.rb +1 -0
  155. data/lib/rubygems/request/http_pool.rb +1 -0
  156. data/lib/rubygems/request/https_pool.rb +1 -0
  157. data/lib/rubygems/request.rb +1 -0
  158. data/lib/rubygems/request_set/gem_dependency_api.rb +1 -0
  159. data/lib/rubygems/request_set/lockfile/parser.rb +2 -1
  160. data/lib/rubygems/request_set/lockfile/tokenizer.rb +2 -0
  161. data/lib/rubygems/request_set/lockfile.rb +1 -0
  162. data/lib/rubygems/request_set.rb +1 -0
  163. data/lib/rubygems/requirement.rb +1 -0
  164. data/lib/rubygems/resolver/activation_request.rb +1 -0
  165. data/lib/rubygems/resolver/api_set.rb +1 -0
  166. data/lib/rubygems/resolver/api_specification.rb +1 -0
  167. data/lib/rubygems/resolver/best_set.rb +1 -0
  168. data/lib/rubygems/resolver/composed_set.rb +1 -0
  169. data/lib/rubygems/resolver/conflict.rb +1 -0
  170. data/lib/rubygems/resolver/current_set.rb +1 -0
  171. data/lib/rubygems/resolver/dependency_request.rb +1 -0
  172. data/lib/rubygems/resolver/git_set.rb +1 -0
  173. data/lib/rubygems/resolver/git_specification.rb +1 -0
  174. data/lib/rubygems/resolver/index_set.rb +1 -0
  175. data/lib/rubygems/resolver/index_specification.rb +1 -0
  176. data/lib/rubygems/resolver/installed_specification.rb +1 -0
  177. data/lib/rubygems/resolver/installer_set.rb +1 -0
  178. data/lib/rubygems/resolver/local_specification.rb +1 -0
  179. data/lib/rubygems/resolver/lock_set.rb +1 -0
  180. data/lib/rubygems/resolver/lock_specification.rb +1 -0
  181. data/lib/rubygems/resolver/molinillo.rb +1 -0
  182. data/lib/rubygems/resolver/requirement_list.rb +1 -0
  183. data/lib/rubygems/resolver/set.rb +1 -0
  184. data/lib/rubygems/resolver/source_set.rb +2 -0
  185. data/lib/rubygems/resolver/spec_specification.rb +1 -0
  186. data/lib/rubygems/resolver/specification.rb +1 -0
  187. data/lib/rubygems/resolver/stats.rb +1 -0
  188. data/lib/rubygems/resolver/vendor_set.rb +1 -0
  189. data/lib/rubygems/resolver/vendor_specification.rb +1 -0
  190. data/lib/rubygems/resolver.rb +1 -0
  191. data/lib/rubygems/s3_uri_signer.rb +4 -2
  192. data/lib/rubygems/safe_yaml.rb +2 -0
  193. data/lib/rubygems/security/policies.rb +1 -0
  194. data/lib/rubygems/security/policy.rb +1 -0
  195. data/lib/rubygems/security/signer.rb +1 -0
  196. data/lib/rubygems/security/trust_dir.rb +1 -0
  197. data/lib/rubygems/security.rb +1 -0
  198. data/lib/rubygems/security_option.rb +1 -0
  199. data/lib/rubygems/source/installed.rb +1 -0
  200. data/lib/rubygems/source/local.rb +1 -0
  201. data/lib/rubygems/source/lock.rb +1 -0
  202. data/lib/rubygems/source/specific_file.rb +1 -0
  203. data/lib/rubygems/source/vendor.rb +1 -0
  204. data/lib/rubygems/spec_fetcher.rb +1 -0
  205. data/lib/rubygems/specification.rb +11 -3
  206. data/lib/rubygems/specification_policy.rb +2 -0
  207. data/lib/rubygems/stub_specification.rb +1 -0
  208. data/lib/rubygems/uninstaller.rb +1 -0
  209. data/lib/rubygems/user_interaction.rb +4 -2
  210. data/lib/rubygems/util/licenses.rb +1 -0
  211. data/lib/rubygems/util/list.rb +1 -0
  212. data/lib/rubygems/util.rb +1 -0
  213. data/lib/rubygems/validator.rb +1 -0
  214. data/lib/rubygems/version_option.rb +1 -0
  215. data/lib/rubygems.rb +3 -3
  216. data/rubygems-update.gemspec +5 -4
  217. data/setup.rb +1 -0
  218. data/test/rubygems/bad_rake.rb +1 -0
  219. data/test/rubygems/bundler_test_gem.rb +3 -1
  220. data/test/rubygems/fake_certlib/openssl.rb +1 -0
  221. data/test/rubygems/good_rake.rb +1 -0
  222. data/test/rubygems/helper.rb +1 -1
  223. data/test/rubygems/installer_test_case.rb +1 -0
  224. data/test/rubygems/multifactor_auth_utilities.rb +111 -0
  225. data/test/rubygems/package/tar_test_case.rb +1 -0
  226. data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -0
  227. data/test/rubygems/plugin/load/rubygems_plugin.rb +1 -0
  228. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -0
  229. data/test/rubygems/rubygems/commands/crash_command.rb +1 -0
  230. data/test/rubygems/rubygems_plugin.rb +1 -0
  231. data/test/rubygems/simple_gem.rb +1 -0
  232. data/test/rubygems/specifications/bar-0.0.2.gemspec +2 -0
  233. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +2 -0
  234. data/test/rubygems/test_bundled_ca.rb +1 -0
  235. data/test/rubygems/test_config.rb +1 -0
  236. data/test/rubygems/test_deprecate.rb +1 -0
  237. data/test/rubygems/test_gem.rb +1 -0
  238. data/test/rubygems/test_gem_available_set.rb +1 -0
  239. data/test/rubygems/test_gem_bundler_version_finder.rb +1 -0
  240. data/test/rubygems/test_gem_command.rb +1 -0
  241. data/test/rubygems/test_gem_command_manager.rb +1 -0
  242. data/test/rubygems/test_gem_commands_build_command.rb +1 -0
  243. data/test/rubygems/test_gem_commands_cert_command.rb +1 -0
  244. data/test/rubygems/test_gem_commands_check_command.rb +1 -0
  245. data/test/rubygems/test_gem_commands_cleanup_command.rb +1 -0
  246. data/test/rubygems/test_gem_commands_contents_command.rb +1 -0
  247. data/test/rubygems/test_gem_commands_dependency_command.rb +1 -0
  248. data/test/rubygems/test_gem_commands_environment_command.rb +1 -0
  249. data/test/rubygems/test_gem_commands_exec_command.rb +2 -0
  250. data/test/rubygems/test_gem_commands_fetch_command.rb +1 -0
  251. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -0
  252. data/test/rubygems/test_gem_commands_help_command.rb +1 -0
  253. data/test/rubygems/test_gem_commands_info_command.rb +1 -0
  254. data/test/rubygems/test_gem_commands_install_command.rb +1 -0
  255. data/test/rubygems/test_gem_commands_list_command.rb +1 -0
  256. data/test/rubygems/test_gem_commands_lock_command.rb +1 -0
  257. data/test/rubygems/test_gem_commands_mirror.rb +1 -0
  258. data/test/rubygems/test_gem_commands_open_command.rb +1 -0
  259. data/test/rubygems/test_gem_commands_outdated_command.rb +1 -0
  260. data/test/rubygems/test_gem_commands_owner_command.rb +68 -39
  261. data/test/rubygems/test_gem_commands_pristine_command.rb +1 -0
  262. data/test/rubygems/test_gem_commands_push_command.rb +68 -37
  263. data/test/rubygems/test_gem_commands_query_command.rb +1 -0
  264. data/test/rubygems/test_gem_commands_search_command.rb +1 -0
  265. data/test/rubygems/test_gem_commands_server_command.rb +1 -0
  266. data/test/rubygems/test_gem_commands_setup_command.rb +1 -1
  267. data/test/rubygems/test_gem_commands_signin_command.rb +1 -0
  268. data/test/rubygems/test_gem_commands_sources_command.rb +1 -0
  269. data/test/rubygems/test_gem_commands_specification_command.rb +1 -0
  270. data/test/rubygems/test_gem_commands_stale_command.rb +1 -0
  271. data/test/rubygems/test_gem_commands_uninstall_command.rb +1 -0
  272. data/test/rubygems/test_gem_commands_unpack_command.rb +1 -0
  273. data/test/rubygems/test_gem_commands_update_command.rb +1 -0
  274. data/test/rubygems/test_gem_commands_which_command.rb +1 -0
  275. data/test/rubygems/test_gem_commands_yank_command.rb +76 -41
  276. data/test/rubygems/test_gem_config_file.rb +1 -0
  277. data/test/rubygems/test_gem_dependency.rb +1 -0
  278. data/test/rubygems/test_gem_dependency_installer.rb +1 -0
  279. data/test/rubygems/test_gem_dependency_list.rb +1 -0
  280. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -0
  281. data/test/rubygems/test_gem_doctor.rb +1 -0
  282. data/test/rubygems/test_gem_ext_builder.rb +4 -3
  283. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +2 -0
  284. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +2 -0
  285. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +2 -0
  286. data/test/rubygems/test_gem_ext_cargo_builder.rb +2 -2
  287. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +1 -0
  288. data/test/rubygems/test_gem_ext_cmake_builder.rb +1 -0
  289. data/test/rubygems/test_gem_ext_configure_builder.rb +1 -0
  290. data/test/rubygems/test_gem_ext_rake_builder.rb +1 -0
  291. data/test/rubygems/test_gem_gem_runner.rb +1 -0
  292. data/test/rubygems/test_gem_gemcutter_utilities.rb +106 -92
  293. data/test/rubygems/test_gem_impossible_dependencies_error.rb +1 -0
  294. data/test/rubygems/test_gem_indexer.rb +1 -0
  295. data/test/rubygems/test_gem_install_update_options.rb +1 -0
  296. data/test/rubygems/test_gem_installer.rb +2 -1
  297. data/test/rubygems/test_gem_local_remote_options.rb +1 -0
  298. data/test/rubygems/test_gem_name_tuple.rb +1 -0
  299. data/test/rubygems/test_gem_package_old.rb +1 -0
  300. data/test/rubygems/test_gem_package_tar_header.rb +1 -0
  301. data/test/rubygems/test_gem_package_tar_reader.rb +1 -0
  302. data/test/rubygems/test_gem_package_tar_reader_entry.rb +1 -0
  303. data/test/rubygems/test_gem_package_tar_writer.rb +1 -0
  304. data/test/rubygems/test_gem_package_task.rb +1 -0
  305. data/test/rubygems/test_gem_path_support.rb +1 -0
  306. data/test/rubygems/test_gem_platform.rb +1 -0
  307. data/test/rubygems/test_gem_rdoc.rb +1 -0
  308. data/test/rubygems/test_gem_remote_fetcher.rb +1 -0
  309. data/test/rubygems/test_gem_request.rb +1 -0
  310. data/test/rubygems/test_gem_request_connection_pools.rb +1 -0
  311. data/test/rubygems/test_gem_request_set.rb +1 -0
  312. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +1 -0
  313. data/test/rubygems/test_gem_request_set_lockfile.rb +1 -0
  314. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +1 -0
  315. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +1 -0
  316. data/test/rubygems/test_gem_requirement.rb +1 -0
  317. data/test/rubygems/test_gem_resolver.rb +1 -0
  318. data/test/rubygems/test_gem_resolver_activation_request.rb +1 -0
  319. data/test/rubygems/test_gem_resolver_api_set.rb +1 -0
  320. data/test/rubygems/test_gem_resolver_api_specification.rb +1 -0
  321. data/test/rubygems/test_gem_resolver_best_set.rb +1 -0
  322. data/test/rubygems/test_gem_resolver_composed_set.rb +1 -0
  323. data/test/rubygems/test_gem_resolver_conflict.rb +1 -0
  324. data/test/rubygems/test_gem_resolver_dependency_request.rb +1 -0
  325. data/test/rubygems/test_gem_resolver_git_set.rb +1 -0
  326. data/test/rubygems/test_gem_resolver_git_specification.rb +2 -1
  327. data/test/rubygems/test_gem_resolver_index_set.rb +1 -0
  328. data/test/rubygems/test_gem_resolver_index_specification.rb +1 -0
  329. data/test/rubygems/test_gem_resolver_installed_specification.rb +1 -0
  330. data/test/rubygems/test_gem_resolver_installer_set.rb +1 -0
  331. data/test/rubygems/test_gem_resolver_local_specification.rb +1 -0
  332. data/test/rubygems/test_gem_resolver_lock_set.rb +1 -0
  333. data/test/rubygems/test_gem_resolver_lock_specification.rb +1 -0
  334. data/test/rubygems/test_gem_resolver_requirement_list.rb +1 -0
  335. data/test/rubygems/test_gem_resolver_specification.rb +1 -0
  336. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -0
  337. data/test/rubygems/test_gem_resolver_vendor_specification.rb +1 -0
  338. data/test/rubygems/test_gem_security.rb +1 -0
  339. data/test/rubygems/test_gem_security_signer.rb +1 -0
  340. data/test/rubygems/test_gem_security_trust_dir.rb +1 -0
  341. data/test/rubygems/test_gem_silent_ui.rb +1 -0
  342. data/test/rubygems/test_gem_source.rb +1 -0
  343. data/test/rubygems/test_gem_source_fetch_problem.rb +1 -0
  344. data/test/rubygems/test_gem_source_git.rb +1 -0
  345. data/test/rubygems/test_gem_source_installed.rb +1 -0
  346. data/test/rubygems/test_gem_source_list.rb +1 -0
  347. data/test/rubygems/test_gem_source_local.rb +1 -0
  348. data/test/rubygems/test_gem_source_lock.rb +1 -0
  349. data/test/rubygems/test_gem_source_specific_file.rb +1 -0
  350. data/test/rubygems/test_gem_source_subpath_problem.rb +1 -0
  351. data/test/rubygems/test_gem_source_vendor.rb +1 -0
  352. data/test/rubygems/test_gem_spec_fetcher.rb +1 -0
  353. data/test/rubygems/test_gem_specification.rb +9 -0
  354. data/test/rubygems/test_gem_stream_ui.rb +34 -3
  355. data/test/rubygems/test_gem_stub_specification.rb +1 -0
  356. data/test/rubygems/test_gem_text.rb +1 -0
  357. data/test/rubygems/test_gem_uninstaller.rb +1 -0
  358. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +1 -0
  359. data/test/rubygems/test_gem_update_suggestion.rb +1 -0
  360. data/test/rubygems/test_gem_uri.rb +2 -0
  361. data/test/rubygems/test_gem_uri_formatter.rb +1 -0
  362. data/test/rubygems/test_gem_util.rb +1 -0
  363. data/test/rubygems/test_gem_version.rb +1 -0
  364. data/test/rubygems/test_gem_version_option.rb +1 -0
  365. data/test/rubygems/test_kernel.rb +1 -0
  366. data/test/rubygems/test_remote_fetch_error.rb +1 -0
  367. data/test/rubygems/test_require.rb +1 -0
  368. data/test/rubygems/test_rubygems.rb +2 -0
  369. data/test/rubygems/test_webauthn_listener.rb +29 -6
  370. data/test/rubygems/test_webauthn_listener_response.rb +8 -8
  371. data/test/rubygems/test_webauthn_poller.rb +124 -0
  372. data/test/rubygems/utilities.rb +1 -0
  373. data/test/test_changelog_generator.rb +1 -1
  374. metadata +39 -10
  375. data/lib/rubygems/webauthn_listener/response.rb +0 -161
  376. data/lib/rubygems/webauthn_listener.rb +0 -92
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemResolver < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemResolverActivationRequest < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemResolverAPISet < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemResolverAPISpecification < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemResolverBestSet < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemResolverComposedSet < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemResolverConflict < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemResolverDependencyRequest < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemResolverGitSet < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/installer"
4
5
 
@@ -63,7 +64,7 @@ class TestGemResolverGitSpecification < Gem::TestCase
63
64
 
64
65
  def test_install_extension
65
66
  pend if Gem.java_platform?
66
- pend if RUBY_PLATFORM.include?("mswin") && ENV.key?("GITHUB_ACTIONS") # not working from the beginning
67
+ pend "terminates on mswin" if vc_windows? && ruby_repo?
67
68
  name, _, repository, = git_gem "a", 1 do |s|
68
69
  s.extensions << "ext/extconf.rb"
69
70
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemResolverIndexSet < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/available_set"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemResolverInstalledSpecification < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemResolverInstallerSet < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/available_set"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemResolverLockSet < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/installer"
4
5
  require "rubygems/resolver"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemResolverRequirementList < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemResolverSpecification < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemResolverVendorSet < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemResolverVendorSpecification < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/security"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  unless Gem::HAVE_OPENSSL
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  unless Gem::HAVE_OPENSSL
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/user_interaction"
4
5
  require "timeout"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/source"
4
5
  require "rubygems/indexer"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemSourceFetchProblem < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/source"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/source"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "rubygems"
3
4
  require "rubygems/source_list"
4
5
  require_relative "helper"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/source"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemSourceLock < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/source"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/source"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/source"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/spec_fetcher"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "benchmark"
3
4
  require_relative "helper"
4
5
  require "date"
@@ -1068,19 +1069,27 @@ dependencies: []
1068
1069
  end
1069
1070
 
1070
1071
  def test_handles_private_null_type
1072
+ yaml_defined = Object.const_defined?("YAML")
1073
+
1071
1074
  path = File.expand_path "data/pry-0.4.7.gemspec.rz", __dir__
1072
1075
 
1073
1076
  data = Marshal.load Gem::Util.inflate(Gem.read_binary(path))
1074
1077
 
1075
1078
  assert_instance_of Gem::Specification, data
1079
+
1080
+ assert_equal(yaml_defined, Object.const_defined?("YAML"))
1076
1081
  end
1077
1082
 
1078
1083
  def test_handles_dependencies_with_syck_requirements_bug
1084
+ yaml_defined = Object.const_defined?("YAML")
1085
+
1079
1086
  path = File.expand_path "data/excon-0.7.7.gemspec.rz", __dir__
1080
1087
 
1081
1088
  data = Marshal.load Gem::Util.inflate(Gem.read_binary(path))
1082
1089
 
1083
1090
  assert_instance_of Gem::Specification, data
1091
+
1092
+ assert_equal(yaml_defined, Object.const_defined?("YAML"))
1084
1093
  end
1085
1094
 
1086
1095
  def test_initialize
@@ -1,12 +1,13 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/user_interaction"
4
5
  require "timeout"
5
6
 
6
7
  class TestGemStreamUI < Gem::TestCase
7
- # increase timeout with MJIT for --jit-wait testing
8
- mjit_enabled = defined?(RubyVM::MJIT) && RubyVM::MJIT.enabled?
9
- SHORT_TIMEOUT = (RUBY_ENGINE == "ruby" && !mjit_enabled) ? 0.1 : 1.0
8
+ # increase timeout with RJIT for --jit-wait testing
9
+ rjit_enabled = defined?(RubyVM::RJIT) && RubyVM::RJIT.enabled?
10
+ SHORT_TIMEOUT = (RUBY_ENGINE == "ruby" && !rjit_enabled) ? 0.1 : 1.0
10
11
 
11
12
  module IsTty
12
13
  attr_accessor :tty
@@ -113,6 +114,36 @@ class TestGemStreamUI < Gem::TestCase
113
114
  assert_equal "which one?\n 1. foo\n 2. bar\n> ", @out.string
114
115
  end
115
116
 
117
+ def test_choose_from_list_0
118
+ @in.puts "0"
119
+ @in.rewind
120
+
121
+ result = @sui.choose_from_list "which one?", %w[foo bar]
122
+
123
+ assert_equal [nil, nil], result
124
+ assert_equal "which one?\n 1. foo\n 2. bar\n> ", @out.string
125
+ end
126
+
127
+ def test_choose_from_list_over
128
+ @in.puts "3"
129
+ @in.rewind
130
+
131
+ result = @sui.choose_from_list "which one?", %w[foo bar]
132
+
133
+ assert_equal [nil, nil], result
134
+ assert_equal "which one?\n 1. foo\n 2. bar\n> ", @out.string
135
+ end
136
+
137
+ def test_choose_from_list_negative
138
+ @in.puts "-1"
139
+ @in.rewind
140
+
141
+ result = @sui.choose_from_list "which one?", %w[foo bar]
142
+
143
+ assert_equal [nil, nil], result
144
+ assert_equal "which one?\n 1. foo\n 2. bar\n> ", @out.string
145
+ end
146
+
116
147
  def test_progress_reporter_silent_nil
117
148
  @cfg.verbose = nil
118
149
  reporter = @sui.progress_reporter 10, "hi"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/stub_specification"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/text"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "installer_test_case"
3
4
  require "rubygems/uninstaller"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemUnsatisfiableDependencyError < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/command"
4
5
  require "rubygems/update_suggestion"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative "helper"
2
4
  require "rubygems/uri"
3
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/uri_formatter"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/util"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/version"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems/command"
4
5
  require "rubygems/version_option"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemKernel < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
 
4
5
  class TestGemRemoteFetchError < Gem::TestCase
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "helper"
3
4
  require "rubygems"
4
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative "helper"
2
4
 
3
5
  class GemTest < Gem::TestCase
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "helper"
4
- require "rubygems/webauthn_listener"
4
+ require "rubygems/gemcutter_utilities/webauthn_listener"
5
+ require "rubygems/gemcutter_utilities"
5
6
 
6
7
  class WebauthnListenerTest < Gem::TestCase
7
8
  def setup
@@ -10,6 +11,28 @@ class WebauthnListenerTest < Gem::TestCase
10
11
  @port = @server.addr[1].to_s
11
12
  end
12
13
 
14
+ def teardown
15
+ @thread.kill.join if @thread
16
+ @server&.close
17
+ super
18
+ end
19
+
20
+ def test_listener_thread_retreives_otp_code
21
+ thread = Gem::GemcutterUtilities::WebauthnListener.listener_thread(Gem.host, @server)
22
+ Gem::MockBrowser.get URI("http://localhost:#{@port}?code=xyz")
23
+
24
+ thread.join
25
+ assert_equal "xyz", thread[:otp]
26
+ end
27
+
28
+ def test_listener_thread_sets_error
29
+ thread = Gem::GemcutterUtilities::WebauthnListener.listener_thread(Gem.host, @server)
30
+ Gem::MockBrowser.post URI("http://localhost:#{@port}?code=xyz")
31
+
32
+ thread.join
33
+ assert_equal "Security device verification failed: Invalid HTTP method POST received.", thread[:error].message
34
+ end
35
+
13
36
  def test_wait_for_otp_code_get_follows_options
14
37
  wait_for_otp_code
15
38
  assert Gem::MockBrowser.options(URI("http://localhost:#{@port}?code=xyz")).is_a? Net::HTTPNoContent
@@ -32,7 +55,7 @@ class WebauthnListenerTest < Gem::TestCase
32
55
  response = Gem::MockBrowser.get URI("http://localhost:#{@port}?code=xyz")
33
56
 
34
57
  assert response.is_a? Net::HTTPOK
35
- assert_equal "text/plain", response["Content-Type"]
58
+ assert_equal "text/plain; charset=utf-8", response["Content-Type"]
36
59
  assert_equal "7", response["Content-Length"]
37
60
  assert_equal Gem.host, response["access-control-allow-origin"]
38
61
  assert_equal "POST", response["access-control-allow-methods"]
@@ -73,7 +96,7 @@ class WebauthnListenerTest < Gem::TestCase
73
96
  response = Gem::MockBrowser.get URI("http://localhost:#{@port}")
74
97
 
75
98
  assert response.is_a? Net::HTTPBadRequest
76
- assert_equal "text/plain", response["Content-Type"]
99
+ assert_equal "text/plain; charset=utf-8", response["Content-Type"]
77
100
  assert_equal "22", response["Content-Length"]
78
101
  assert_equal "close", response["Connection"]
79
102
  assert_equal "missing code parameter", response.body
@@ -87,7 +110,7 @@ class WebauthnListenerTest < Gem::TestCase
87
110
  response = Gem::MockBrowser.get URI("http://localhost:#{@port}?param=xyz")
88
111
 
89
112
  assert response.is_a? Net::HTTPBadRequest
90
- assert_equal "text/plain", response["Content-Type"]
113
+ assert_equal "text/plain; charset=utf-8", response["Content-Type"]
91
114
  assert_equal "22", response["Content-Length"]
92
115
  assert_equal "close", response["Connection"]
93
116
  assert_equal "missing code parameter", response.body
@@ -100,7 +123,7 @@ class WebauthnListenerTest < Gem::TestCase
100
123
 
101
124
  def wait_for_otp_code
102
125
  @thread = Thread.new do
103
- Thread.current[:otp] = Gem::WebauthnListener.wait_for_otp_code(Gem.host, @server)
126
+ Thread.current[:otp] = Gem::GemcutterUtilities::WebauthnListener.new(Gem.host).wait_for_otp_code(@server)
104
127
  end
105
128
  @thread.abort_on_exception = true
106
129
  @thread.report_on_exception = false
@@ -109,7 +132,7 @@ class WebauthnListenerTest < Gem::TestCase
109
132
  def wait_for_otp_code_expect_error_with_message(message)
110
133
  @thread = Thread.new do
111
134
  error = assert_raise Gem::WebauthnVerificationError do
112
- Thread.current[:otp] = Gem::WebauthnListener.wait_for_otp_code(Gem.host, @server)
135
+ Thread.current[:otp] = Gem::GemcutterUtilities::WebauthnListener.new(Gem.host).wait_for_otp_code(@server)
113
136
  end
114
137
 
115
138
  assert_equal message, error.message
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "helper"
4
- require "rubygems/webauthn_listener/response"
4
+ require "rubygems/gemcutter_utilities/webauthn_listener/response"
5
5
 
6
6
  class WebauthnListenerResponseTest < Gem::TestCase
7
7
  def setup
@@ -10,7 +10,7 @@ class WebauthnListenerResponseTest < Gem::TestCase
10
10
  end
11
11
 
12
12
  def test_ok_response_to_s
13
- to_s = Gem::WebauthnListener::OkResponse.new(@host).to_s
13
+ to_s = Gem::GemcutterUtilities::WebauthnListener::OkResponse.new(@host).to_s
14
14
 
15
15
  expected_to_s = <<~RESPONSE
16
16
  HTTP/1.1 200 OK\r
@@ -18,7 +18,7 @@ class WebauthnListenerResponseTest < Gem::TestCase
18
18
  access-control-allow-origin: rubygems.example\r
19
19
  access-control-allow-methods: POST\r
20
20
  access-control-allow-headers: Content-Type, Authorization, x-csrf-token\r
21
- content-type: text/plain\r
21
+ content-type: text/plain; charset=utf-8\r
22
22
  content-length: 7\r
23
23
  \r
24
24
  success
@@ -28,7 +28,7 @@ class WebauthnListenerResponseTest < Gem::TestCase
28
28
  end
29
29
 
30
30
  def test_no_to_s_response_to_s
31
- to_s = Gem::WebauthnListener::NoContentResponse.new(@host).to_s
31
+ to_s = Gem::GemcutterUtilities::WebauthnListener::NoContentResponse.new(@host).to_s
32
32
 
33
33
  expected_to_s = <<~RESPONSE
34
34
  HTTP/1.1 204 No Content\r
@@ -43,7 +43,7 @@ class WebauthnListenerResponseTest < Gem::TestCase
43
43
  end
44
44
 
45
45
  def test_method_not_allowed_response_to_s
46
- to_s = Gem::WebauthnListener::MethodNotAllowedResponse.new(@host).to_s
46
+ to_s = Gem::GemcutterUtilities::WebauthnListener::MethodNotAllowedResponse.new(@host).to_s
47
47
 
48
48
  expected_to_s = <<~RESPONSE
49
49
  HTTP/1.1 405 Method Not Allowed\r
@@ -59,7 +59,7 @@ class WebauthnListenerResponseTest < Gem::TestCase
59
59
  end
60
60
 
61
61
  def test_method_not_found_response_to_s
62
- to_s = Gem::WebauthnListener::NotFoundResponse.new(@host).to_s
62
+ to_s = Gem::GemcutterUtilities::WebauthnListener::NotFoundResponse.new(@host).to_s
63
63
 
64
64
  expected_to_s = <<~RESPONSE
65
65
  HTTP/1.1 404 Not Found\r
@@ -74,7 +74,7 @@ class WebauthnListenerResponseTest < Gem::TestCase
74
74
  end
75
75
 
76
76
  def test_bad_request_response_to_s
77
- to_s = Gem::WebauthnListener::BadRequestResponse.new(@host).to_s
77
+ to_s = Gem::GemcutterUtilities::WebauthnListener::BadRequestResponse.new(@host).to_s
78
78
 
79
79
  expected_to_s = <<~RESPONSE
80
80
  HTTP/1.1 400 Bad Request\r
@@ -82,7 +82,7 @@ class WebauthnListenerResponseTest < Gem::TestCase
82
82
  access-control-allow-origin: rubygems.example\r
83
83
  access-control-allow-methods: POST\r
84
84
  access-control-allow-headers: Content-Type, Authorization, x-csrf-token\r
85
- content-type: text/plain\r
85
+ content-type: text/plain; charset=utf-8\r
86
86
  content-length: 22\r
87
87
  \r
88
88
  missing code parameter