active_cached_resource 0.1.0 → 0.1.1

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 (316) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/LICENSE +21 -0
  4. data/lib/active_cached_resource/caching.rb +104 -1
  5. data/lib/active_cached_resource/configuration.rb +22 -1
  6. data/lib/active_cached_resource/logger.rb +14 -0
  7. data/lib/active_cached_resource/model.rb +18 -0
  8. data/lib/active_cached_resource/version.rb +1 -8
  9. metadata +2 -308
  10. data/.rspec +0 -3
  11. data/.rubocop.yml +0 -23
  12. data/.standard.yml +0 -2
  13. data/Rakefile +0 -29
  14. data/example/consumer/.dockerignore +0 -41
  15. data/example/consumer/.gitattributes +0 -9
  16. data/example/consumer/.gitignore +0 -36
  17. data/example/consumer/.kamal/hooks/docker-setup.sample +0 -3
  18. data/example/consumer/.kamal/hooks/post-deploy.sample +0 -14
  19. data/example/consumer/.kamal/hooks/post-proxy-reboot.sample +0 -3
  20. data/example/consumer/.kamal/hooks/pre-build.sample +0 -51
  21. data/example/consumer/.kamal/hooks/pre-connect.sample +0 -47
  22. data/example/consumer/.kamal/hooks/pre-deploy.sample +0 -109
  23. data/example/consumer/.kamal/hooks/pre-proxy-reboot.sample +0 -3
  24. data/example/consumer/.kamal/secrets +0 -17
  25. data/example/consumer/Dockerfile +0 -65
  26. data/example/consumer/Gemfile +0 -17
  27. data/example/consumer/Rakefile +0 -6
  28. data/example/consumer/app/controllers/application_controller.rb +0 -2
  29. data/example/consumer/app/controllers/concerns/.keep +0 -0
  30. data/example/consumer/app/jobs/application_job.rb +0 -7
  31. data/example/consumer/app/mailers/application_mailer.rb +0 -4
  32. data/example/consumer/app/models/application_record.rb +0 -3
  33. data/example/consumer/app/models/concerns/.keep +0 -0
  34. data/example/consumer/app/models/person.rb +0 -9
  35. data/example/consumer/app/views/layouts/mailer.html.erb +0 -13
  36. data/example/consumer/app/views/layouts/mailer.text.erb +0 -1
  37. data/example/consumer/bin/brakeman +0 -7
  38. data/example/consumer/bin/bundle +0 -109
  39. data/example/consumer/bin/dev +0 -2
  40. data/example/consumer/bin/docker-entrypoint +0 -14
  41. data/example/consumer/bin/jobs +0 -6
  42. data/example/consumer/bin/kamal +0 -27
  43. data/example/consumer/bin/rails +0 -4
  44. data/example/consumer/bin/rake +0 -4
  45. data/example/consumer/bin/rubocop +0 -8
  46. data/example/consumer/bin/setup +0 -34
  47. data/example/consumer/bin/thrust +0 -5
  48. data/example/consumer/config/application.rb +0 -20
  49. data/example/consumer/config/boot.rb +0 -3
  50. data/example/consumer/config/cache.yml +0 -16
  51. data/example/consumer/config/credentials.yml.enc +0 -1
  52. data/example/consumer/config/database.yml +0 -14
  53. data/example/consumer/config/deploy.yml +0 -116
  54. data/example/consumer/config/environment.rb +0 -5
  55. data/example/consumer/config/environments/development.rb +0 -64
  56. data/example/consumer/config/environments/production.rb +0 -85
  57. data/example/consumer/config/environments/test.rb +0 -50
  58. data/example/consumer/config/initializers/cors.rb +0 -16
  59. data/example/consumer/config/initializers/filter_parameter_logging.rb +0 -8
  60. data/example/consumer/config/initializers/inflections.rb +0 -16
  61. data/example/consumer/config/locales/en.yml +0 -31
  62. data/example/consumer/config/puma.rb +0 -41
  63. data/example/consumer/config/queue.yml +0 -18
  64. data/example/consumer/config/recurring.yml +0 -10
  65. data/example/consumer/config/routes.rb +0 -10
  66. data/example/consumer/config.ru +0 -6
  67. data/example/consumer/db/cache_schema.rb +0 -14
  68. data/example/consumer/db/queue_schema.rb +0 -129
  69. data/example/consumer/db/seeds.rb +0 -0
  70. data/example/consumer/lib/tasks/.keep +0 -0
  71. data/example/consumer/log/.keep +0 -0
  72. data/example/consumer/public/robots.txt +0 -1
  73. data/example/consumer/script/.keep +0 -0
  74. data/example/consumer/storage/.keep +0 -0
  75. data/example/consumer/tmp/.keep +0 -0
  76. data/example/consumer/tmp/cache/.keep +0 -0
  77. data/example/consumer/tmp/pids/.keep +0 -0
  78. data/example/consumer/tmp/storage/.keep +0 -0
  79. data/example/consumer/vendor/.keep +0 -0
  80. data/example/provider/.dockerignore +0 -41
  81. data/example/provider/.gitattributes +0 -9
  82. data/example/provider/.gitignore +0 -32
  83. data/example/provider/.kamal/hooks/docker-setup.sample +0 -3
  84. data/example/provider/.kamal/hooks/post-deploy.sample +0 -14
  85. data/example/provider/.kamal/hooks/post-proxy-reboot.sample +0 -3
  86. data/example/provider/.kamal/hooks/pre-build.sample +0 -51
  87. data/example/provider/.kamal/hooks/pre-connect.sample +0 -47
  88. data/example/provider/.kamal/hooks/pre-deploy.sample +0 -109
  89. data/example/provider/.kamal/hooks/pre-proxy-reboot.sample +0 -3
  90. data/example/provider/.kamal/secrets +0 -17
  91. data/example/provider/Dockerfile +0 -65
  92. data/example/provider/Gemfile +0 -14
  93. data/example/provider/Rakefile +0 -6
  94. data/example/provider/app/controllers/application_controller.rb +0 -2
  95. data/example/provider/app/controllers/concerns/.keep +0 -0
  96. data/example/provider/app/controllers/people_controller.rb +0 -68
  97. data/example/provider/app/jobs/application_job.rb +0 -7
  98. data/example/provider/app/mailers/application_mailer.rb +0 -4
  99. data/example/provider/app/models/address.rb +0 -3
  100. data/example/provider/app/models/application_record.rb +0 -3
  101. data/example/provider/app/models/company.rb +0 -3
  102. data/example/provider/app/models/concerns/.keep +0 -0
  103. data/example/provider/app/models/person.rb +0 -6
  104. data/example/provider/app/views/layouts/mailer.html.erb +0 -13
  105. data/example/provider/app/views/layouts/mailer.text.erb +0 -1
  106. data/example/provider/bin/brakeman +0 -7
  107. data/example/provider/bin/bundle +0 -109
  108. data/example/provider/bin/dev +0 -2
  109. data/example/provider/bin/docker-entrypoint +0 -14
  110. data/example/provider/bin/jobs +0 -6
  111. data/example/provider/bin/kamal +0 -27
  112. data/example/provider/bin/rails +0 -4
  113. data/example/provider/bin/rake +0 -4
  114. data/example/provider/bin/rubocop +0 -8
  115. data/example/provider/bin/setup +0 -34
  116. data/example/provider/bin/thrust +0 -5
  117. data/example/provider/config/application.rb +0 -44
  118. data/example/provider/config/boot.rb +0 -3
  119. data/example/provider/config/cache.yml +0 -16
  120. data/example/provider/config/credentials.yml.enc +0 -1
  121. data/example/provider/config/database.yml +0 -20
  122. data/example/provider/config/deploy.yml +0 -116
  123. data/example/provider/config/environment.rb +0 -5
  124. data/example/provider/config/environments/development.rb +0 -64
  125. data/example/provider/config/environments/production.rb +0 -85
  126. data/example/provider/config/environments/test.rb +0 -50
  127. data/example/provider/config/initializers/cors.rb +0 -16
  128. data/example/provider/config/initializers/filter_parameter_logging.rb +0 -8
  129. data/example/provider/config/initializers/inflections.rb +0 -16
  130. data/example/provider/config/locales/en.yml +0 -31
  131. data/example/provider/config/puma.rb +0 -41
  132. data/example/provider/config/queue.yml +0 -18
  133. data/example/provider/config/recurring.yml +0 -10
  134. data/example/provider/config/routes.rb +0 -4
  135. data/example/provider/config.ru +0 -6
  136. data/example/provider/db/cache_schema.rb +0 -14
  137. data/example/provider/db/migrate/20241202183937_create_people.rb +0 -11
  138. data/example/provider/db/migrate/20241202183955_create_addresses.rb +0 -13
  139. data/example/provider/db/migrate/20241202184017_create_companies.rb +0 -14
  140. data/example/provider/db/queue_schema.rb +0 -129
  141. data/example/provider/db/schema.rb +0 -47
  142. data/example/provider/db/seeds.rb +0 -18
  143. data/example/provider/lib/tasks/.keep +0 -0
  144. data/example/provider/log/.keep +0 -0
  145. data/example/provider/public/robots.txt +0 -1
  146. data/example/provider/script/.keep +0 -0
  147. data/example/provider/storage/.keep +0 -0
  148. data/example/provider/tmp/.keep +0 -0
  149. data/example/provider/tmp/pids/.keep +0 -0
  150. data/example/provider/tmp/storage/.keep +0 -0
  151. data/example/provider/vendor/.keep +0 -0
  152. data/lib/activeresource/.gitignore +0 -15
  153. data/lib/activeresource/examples/performance.rb +0 -72
  154. data/lib/activeresource/test/abstract_unit.rb +0 -154
  155. data/lib/activeresource/test/cases/active_job_serializer_test.rb +0 -53
  156. data/lib/activeresource/test/cases/association_test.rb +0 -104
  157. data/lib/activeresource/test/cases/associations/builder/belongs_to_test.rb +0 -42
  158. data/lib/activeresource/test/cases/associations/builder/has_many_test.rb +0 -28
  159. data/lib/activeresource/test/cases/associations/builder/has_one_test.rb +0 -28
  160. data/lib/activeresource/test/cases/authorization_test.rb +0 -276
  161. data/lib/activeresource/test/cases/base/custom_methods_test.rb +0 -155
  162. data/lib/activeresource/test/cases/base/equality_test.rb +0 -53
  163. data/lib/activeresource/test/cases/base/load_test.rb +0 -249
  164. data/lib/activeresource/test/cases/base/schema_test.rb +0 -428
  165. data/lib/activeresource/test/cases/base_errors_test.rb +0 -129
  166. data/lib/activeresource/test/cases/base_test.rb +0 -1622
  167. data/lib/activeresource/test/cases/callbacks_test.rb +0 -155
  168. data/lib/activeresource/test/cases/collection_test.rb +0 -196
  169. data/lib/activeresource/test/cases/connection_test.rb +0 -357
  170. data/lib/activeresource/test/cases/finder_test.rb +0 -217
  171. data/lib/activeresource/test/cases/format_test.rb +0 -137
  172. data/lib/activeresource/test/cases/http_mock_test.rb +0 -213
  173. data/lib/activeresource/test/cases/inheritence_test.rb +0 -19
  174. data/lib/activeresource/test/cases/inheriting_hash_test.rb +0 -25
  175. data/lib/activeresource/test/cases/log_subscriber_test.rb +0 -64
  176. data/lib/activeresource/test/cases/reflection_test.rb +0 -65
  177. data/lib/activeresource/test/cases/validations_test.rb +0 -78
  178. data/lib/activeresource/test/fixtures/address.rb +0 -20
  179. data/lib/activeresource/test/fixtures/beast.rb +0 -16
  180. data/lib/activeresource/test/fixtures/comment.rb +0 -5
  181. data/lib/activeresource/test/fixtures/customer.rb +0 -5
  182. data/lib/activeresource/test/fixtures/fixtures.rbi +0 -46
  183. data/lib/activeresource/test/fixtures/inventory.rb +0 -14
  184. data/lib/activeresource/test/fixtures/person.rb +0 -15
  185. data/lib/activeresource/test/fixtures/pet.rb +0 -6
  186. data/lib/activeresource/test/fixtures/post.rb +0 -5
  187. data/lib/activeresource/test/fixtures/product.rb +0 -11
  188. data/lib/activeresource/test/fixtures/project.rb +0 -19
  189. data/lib/activeresource/test/fixtures/proxy.rb +0 -6
  190. data/lib/activeresource/test/fixtures/sound.rb +0 -11
  191. data/lib/activeresource/test/fixtures/street_address.rb +0 -6
  192. data/lib/activeresource/test/fixtures/subscription_plan.rb +0 -7
  193. data/lib/activeresource/test/fixtures/weather.rb +0 -21
  194. data/lib/activeresource/test/setter_trap.rb +0 -28
  195. data/lib/activeresource/test/singleton_test.rb +0 -138
  196. data/lib/activeresource/test/threadsafe_attributes_test.rb +0 -91
  197. data/sorbet/config +0 -6
  198. data/sorbet/rbi/annotations/.gitattributes +0 -1
  199. data/sorbet/rbi/annotations/activemodel.rbi +0 -89
  200. data/sorbet/rbi/annotations/activesupport.rbi +0 -457
  201. data/sorbet/rbi/annotations/minitest.rbi +0 -119
  202. data/sorbet/rbi/annotations/rainbow.rbi +0 -269
  203. data/sorbet/rbi/dsl/.gitattributes +0 -1
  204. data/sorbet/rbi/dsl/active_support/callbacks.rbi +0 -21
  205. data/sorbet/rbi/gems/.gitattributes +0 -1
  206. data/sorbet/rbi/gems/actioncable@8.0.1.rbi +0 -252
  207. data/sorbet/rbi/gems/actionmailbox@8.0.1.rbi +0 -9
  208. data/sorbet/rbi/gems/actionmailer@8.0.1.rbi +0 -9
  209. data/sorbet/rbi/gems/actionpack@8.0.1.rbi +0 -21111
  210. data/sorbet/rbi/gems/actiontext@8.0.1.rbi +0 -9
  211. data/sorbet/rbi/gems/actionview@8.0.1.rbi +0 -16409
  212. data/sorbet/rbi/gems/activejob@8.0.1.rbi +0 -90
  213. data/sorbet/rbi/gems/activemodel-serializers-xml@1.0.3.rbi +0 -166
  214. data/sorbet/rbi/gems/activemodel@8.0.1.rbi +0 -6865
  215. data/sorbet/rbi/gems/activerecord@8.0.1.rbi +0 -43277
  216. data/sorbet/rbi/gems/activestorage@8.0.1.rbi +0 -9
  217. data/sorbet/rbi/gems/activesupport@8.0.1.rbi +0 -21426
  218. data/sorbet/rbi/gems/ast@2.4.2.rbi +0 -585
  219. data/sorbet/rbi/gems/base64@0.2.0.rbi +0 -509
  220. data/sorbet/rbi/gems/benchmark@0.4.0.rbi +0 -618
  221. data/sorbet/rbi/gems/bigdecimal@3.1.8.rbi +0 -78
  222. data/sorbet/rbi/gems/builder@3.3.0.rbi +0 -9
  223. data/sorbet/rbi/gems/bump@0.10.0.rbi +0 -169
  224. data/sorbet/rbi/gems/byebug@11.1.3.rbi +0 -3607
  225. data/sorbet/rbi/gems/coderay@1.1.3.rbi +0 -3427
  226. data/sorbet/rbi/gems/concurrent-ruby@1.3.4.rbi +0 -11645
  227. data/sorbet/rbi/gems/connection_pool@2.4.1.rbi +0 -9
  228. data/sorbet/rbi/gems/crass@1.0.6.rbi +0 -623
  229. data/sorbet/rbi/gems/date@3.4.1.rbi +0 -75
  230. data/sorbet/rbi/gems/diff-lcs@1.5.1.rbi +0 -1131
  231. data/sorbet/rbi/gems/docile@1.4.1.rbi +0 -377
  232. data/sorbet/rbi/gems/drb@2.2.1.rbi +0 -1347
  233. data/sorbet/rbi/gems/erubi@1.13.0.rbi +0 -150
  234. data/sorbet/rbi/gems/globalid@1.2.1.rbi +0 -9
  235. data/sorbet/rbi/gems/i18n@1.14.6.rbi +0 -2359
  236. data/sorbet/rbi/gems/io-console@0.8.0.rbi +0 -9
  237. data/sorbet/rbi/gems/json@2.9.0.rbi +0 -1944
  238. data/sorbet/rbi/gems/language_server-protocol@3.17.0.3.rbi +0 -14238
  239. data/sorbet/rbi/gems/lint_roller@1.1.0.rbi +0 -240
  240. data/sorbet/rbi/gems/logger@1.6.3.rbi +0 -940
  241. data/sorbet/rbi/gems/loofah@2.23.1.rbi +0 -1081
  242. data/sorbet/rbi/gems/mail@2.8.1.rbi +0 -9
  243. data/sorbet/rbi/gems/marcel@1.0.4.rbi +0 -9
  244. data/sorbet/rbi/gems/method_source@1.1.0.rbi +0 -304
  245. data/sorbet/rbi/gems/mini_mime@1.1.5.rbi +0 -9
  246. data/sorbet/rbi/gems/minitest@5.25.4.rbi +0 -1547
  247. data/sorbet/rbi/gems/mocha@2.7.1.rbi +0 -12
  248. data/sorbet/rbi/gems/msgpack@1.7.5.rbi +0 -320
  249. data/sorbet/rbi/gems/net-imap@0.5.2.rbi +0 -9
  250. data/sorbet/rbi/gems/net-pop@0.1.2.rbi +0 -9
  251. data/sorbet/rbi/gems/net-protocol@0.2.2.rbi +0 -292
  252. data/sorbet/rbi/gems/net-smtp@0.5.0.rbi +0 -9
  253. data/sorbet/rbi/gems/netrc@0.11.0.rbi +0 -159
  254. data/sorbet/rbi/gems/nio4r@2.7.4.rbi +0 -9
  255. data/sorbet/rbi/gems/nokogiri@1.17.2.rbi +0 -8201
  256. data/sorbet/rbi/gems/parallel@1.26.3.rbi +0 -291
  257. data/sorbet/rbi/gems/parser@3.3.6.0.rbi +0 -5519
  258. data/sorbet/rbi/gems/prism@1.2.0.rbi +0 -39085
  259. data/sorbet/rbi/gems/pry-byebug@3.10.1.rbi +0 -1151
  260. data/sorbet/rbi/gems/pry@0.14.2.rbi +0 -10076
  261. data/sorbet/rbi/gems/psych@5.2.1.rbi +0 -1785
  262. data/sorbet/rbi/gems/racc@1.8.1.rbi +0 -162
  263. data/sorbet/rbi/gems/rack-session@2.0.0.rbi +0 -727
  264. data/sorbet/rbi/gems/rack-test@2.1.0.rbi +0 -747
  265. data/sorbet/rbi/gems/rack@3.1.8.rbi +0 -4905
  266. data/sorbet/rbi/gems/rackup@2.2.1.rbi +0 -230
  267. data/sorbet/rbi/gems/rails-dom-testing@2.2.0.rbi +0 -758
  268. data/sorbet/rbi/gems/rails-html-sanitizer@1.6.2.rbi +0 -785
  269. data/sorbet/rbi/gems/rails@8.0.1.rbi +0 -9
  270. data/sorbet/rbi/gems/railties@8.0.1.rbi +0 -6347
  271. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +0 -403
  272. data/sorbet/rbi/gems/rake@13.2.1.rbi +0 -3028
  273. data/sorbet/rbi/gems/rbi@0.2.1.rbi +0 -4535
  274. data/sorbet/rbi/gems/rdoc@6.9.1.rbi +0 -12593
  275. data/sorbet/rbi/gems/regexp_parser@2.9.3.rbi +0 -3772
  276. data/sorbet/rbi/gems/reline@0.6.0.rbi +0 -2454
  277. data/sorbet/rbi/gems/rexml@3.4.0.rbi +0 -4871
  278. data/sorbet/rbi/gems/rspec-core@3.13.2.rbi +0 -11284
  279. data/sorbet/rbi/gems/rspec-expectations@3.13.3.rbi +0 -8183
  280. data/sorbet/rbi/gems/rspec-mocks@3.13.2.rbi +0 -5341
  281. data/sorbet/rbi/gems/rspec-support@3.13.2.rbi +0 -1630
  282. data/sorbet/rbi/gems/rspec@3.13.0.rbi +0 -83
  283. data/sorbet/rbi/gems/rubocop-ast@1.37.0.rbi +0 -7713
  284. data/sorbet/rbi/gems/rubocop-md@1.2.4.rbi +0 -123
  285. data/sorbet/rbi/gems/rubocop-minitest@0.36.0.rbi +0 -2613
  286. data/sorbet/rbi/gems/rubocop-packaging@0.5.2.rbi +0 -388
  287. data/sorbet/rbi/gems/rubocop-performance@1.23.0.rbi +0 -9
  288. data/sorbet/rbi/gems/rubocop-rails@2.27.0.rbi +0 -9535
  289. data/sorbet/rbi/gems/rubocop@1.69.2.rbi +0 -59600
  290. data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +0 -1318
  291. data/sorbet/rbi/gems/ruby2_keywords@0.0.5.rbi +0 -9
  292. data/sorbet/rbi/gems/securerandom@0.4.1.rbi +0 -78
  293. data/sorbet/rbi/gems/simplecov-html@0.13.1.rbi +0 -225
  294. data/sorbet/rbi/gems/simplecov@0.22.0.rbi +0 -2149
  295. data/sorbet/rbi/gems/simplecov_json_formatter@0.1.4.rbi +0 -9
  296. data/sorbet/rbi/gems/spoom@1.5.0.rbi +0 -4932
  297. data/sorbet/rbi/gems/sqlite3@2.3.1.rbi +0 -1824
  298. data/sorbet/rbi/gems/standard-custom@1.0.2.rbi +0 -9
  299. data/sorbet/rbi/gems/standard-performance@1.6.0.rbi +0 -9
  300. data/sorbet/rbi/gems/standard@1.43.0.rbi +0 -926
  301. data/sorbet/rbi/gems/stringio@3.1.2.rbi +0 -9
  302. data/sorbet/rbi/gems/tapioca@0.16.4.rbi +0 -3597
  303. data/sorbet/rbi/gems/thor@1.3.2.rbi +0 -4378
  304. data/sorbet/rbi/gems/timeout@0.4.2.rbi +0 -151
  305. data/sorbet/rbi/gems/tzinfo@2.0.6.rbi +0 -5918
  306. data/sorbet/rbi/gems/unicode-display_width@3.1.2.rbi +0 -130
  307. data/sorbet/rbi/gems/unicode-emoji@4.0.4.rbi +0 -251
  308. data/sorbet/rbi/gems/uri@1.0.2.rbi +0 -2377
  309. data/sorbet/rbi/gems/useragent@0.16.11.rbi +0 -9
  310. data/sorbet/rbi/gems/websocket-driver@0.7.6.rbi +0 -9
  311. data/sorbet/rbi/gems/websocket-extensions@0.1.5.rbi +0 -9
  312. data/sorbet/rbi/gems/yard-sorbet@0.9.0.rbi +0 -435
  313. data/sorbet/rbi/gems/yard@0.9.37.rbi +0 -18504
  314. data/sorbet/rbi/gems/zeitwerk@2.7.1.rbi +0 -9
  315. data/sorbet/tapioca/config.yml +0 -13
  316. data/sorbet/tapioca/require.rb +0 -13
@@ -1,276 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "base64"
4
- require "abstract_unit"
5
-
6
- class AuthorizationTest < ActiveSupport::TestCase
7
- Response = Struct.new(:code)
8
-
9
- def setup
10
- @conn = ActiveResource::Connection.new("http://localhost")
11
- @matz = { person: { id: 1, name: "Matz" } }.to_json
12
- @david = { person: { id: 2, name: "David" } }.to_json
13
- @authenticated_conn = ActiveResource::Connection.new("http://david:test123@localhost")
14
- @basic_authorization_request_header = { "Authorization" => "Basic ZGF2aWQ6dGVzdDEyMw==" }
15
- @jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
16
- @bearer_token_authorization_request_header = { "Authorization" => "Bearer #{@jwt}" }
17
- end
18
-
19
- private
20
- def decode(response)
21
- @authenticated_conn.format.decode(response.body)
22
- end
23
- end
24
-
25
- class BasicAuthorizationTest < AuthorizationTest
26
- def setup
27
- super
28
- @authenticated_conn.auth_type = :basic
29
-
30
- ActiveResource::HttpMock.respond_to do |mock|
31
- mock.get "/people/2.json", @basic_authorization_request_header, @david
32
- mock.get "/people/1.json", @basic_authorization_request_header, nil, 401, "WWW-Authenticate" => "i_should_be_ignored"
33
- mock.get "/people/3.json", @bearer_token_authorization_request_header, @david
34
- mock.put "/people/2.json", @basic_authorization_request_header, nil, 204
35
- mock.delete "/people/2.json", @basic_authorization_request_header, nil, 200
36
- mock.post "/people/2/addresses.json", @basic_authorization_request_header, nil, 201, "Location" => "/people/1/addresses/5"
37
- mock.head "/people/2.json", @basic_authorization_request_header, nil, 200
38
- end
39
- end
40
-
41
- def test_get
42
- david = decode(@authenticated_conn.get("/people/2.json"))
43
- assert_equal "David", david["name"]
44
- end
45
-
46
- def test_post
47
- response = @authenticated_conn.post("/people/2/addresses.json")
48
- assert_equal "/people/1/addresses/5", response["Location"]
49
- end
50
-
51
- def test_put
52
- response = @authenticated_conn.put("/people/2.json")
53
- assert_equal 204, response.code
54
- end
55
-
56
- def test_delete
57
- response = @authenticated_conn.delete("/people/2.json")
58
- assert_equal 200, response.code
59
- end
60
-
61
- def test_head
62
- response = @authenticated_conn.head("/people/2.json")
63
- assert_equal 200, response.code
64
- end
65
-
66
- def test_retry_on_401_doesnt_happen_with_basic_auth
67
- assert_raise(ActiveResource::UnauthorizedAccess) { @authenticated_conn.get("/people/1.json") }
68
- assert_equal "", @authenticated_conn.send(:response_auth_header)
69
- end
70
-
71
- def test_raises_invalid_request_on_unauthorized_requests
72
- assert_raise(ActiveResource::InvalidRequestError) { @conn.get("/people/2.json") }
73
- assert_raise(ActiveResource::InvalidRequestError) { @conn.post("/people/2/addresses.json") }
74
- assert_raise(ActiveResource::InvalidRequestError) { @conn.put("/people/2.json") }
75
- assert_raise(ActiveResource::InvalidRequestError) { @conn.delete("/people/2.json") }
76
- assert_raise(ActiveResource::InvalidRequestError) { @conn.head("/people/2.json") }
77
- end
78
-
79
-
80
- def test_authorization_header
81
- authorization_header = @authenticated_conn.__send__(:authorization_header, :get, URI.parse("/people/2.json"))
82
- assert_equal @basic_authorization_request_header["Authorization"], authorization_header["Authorization"]
83
- authorization = authorization_header["Authorization"].to_s.split
84
-
85
- assert_equal "Basic", authorization[0]
86
- assert_equal ["david", "test123"], ::Base64.decode64(authorization[1]).split(":")[0..1]
87
- end
88
-
89
- def test_authorization_header_with_username_but_no_password
90
- @conn = ActiveResource::Connection.new("http://david:@localhost")
91
- authorization_header = @conn.__send__(:authorization_header, :get, URI.parse("/people/2.json"))
92
- authorization = authorization_header["Authorization"].to_s.split
93
-
94
- assert_equal "Basic", authorization[0]
95
- assert_equal ["david"], ::Base64.decode64(authorization[1]).split(":")[0..1]
96
- end
97
-
98
- def test_authorization_header_with_password_but_no_username
99
- @conn = ActiveResource::Connection.new("http://:test123@localhost")
100
- authorization_header = @conn.__send__(:authorization_header, :get, URI.parse("/people/2.json"))
101
- authorization = authorization_header["Authorization"].to_s.split
102
-
103
- assert_equal "Basic", authorization[0]
104
- assert_equal ["", "test123"], ::Base64.decode64(authorization[1]).split(":")[0..1]
105
- end
106
-
107
- def test_authorization_header_with_decoded_credentials_from_url
108
- @conn = ActiveResource::Connection.new("http://my%40email.com:%31%32%33@localhost")
109
- authorization_header = @conn.__send__(:authorization_header, :get, URI.parse("/people/2.json"))
110
- authorization = authorization_header["Authorization"].to_s.split
111
-
112
- assert_equal "Basic", authorization[0]
113
- assert_equal ["my@email.com", "123"], ::Base64.decode64(authorization[1]).split(":")[0..1]
114
- end
115
-
116
- def test_authorization_header_explicitly_setting_username_and_password
117
- @authenticated_conn = ActiveResource::Connection.new("http://@localhost")
118
- @authenticated_conn.user = "david"
119
- @authenticated_conn.password = "test123"
120
- authorization_header = @authenticated_conn.__send__(:authorization_header, :get, URI.parse("/people/2.json"))
121
- assert_equal @basic_authorization_request_header["Authorization"], authorization_header["Authorization"]
122
- authorization = authorization_header["Authorization"].to_s.split
123
-
124
- assert_equal "Basic", authorization[0]
125
- assert_equal ["david", "test123"], ::Base64.decode64(authorization[1]).split(":")[0..1]
126
- end
127
-
128
- def test_authorization_header_explicitly_setting_username_but_no_password
129
- @conn = ActiveResource::Connection.new("http://@localhost")
130
- @conn.user = "david"
131
- authorization_header = @conn.__send__(:authorization_header, :get, URI.parse("/people/2.json"))
132
- authorization = authorization_header["Authorization"].to_s.split
133
-
134
- assert_equal "Basic", authorization[0]
135
- assert_equal ["david"], ::Base64.decode64(authorization[1]).split(":")[0..1]
136
- end
137
-
138
- def test_authorization_header_explicitly_setting_password_but_no_username
139
- @conn = ActiveResource::Connection.new("http://@localhost")
140
- @conn.password = "test123"
141
- authorization_header = @conn.__send__(:authorization_header, :get, URI.parse("/people/2.json"))
142
- authorization = authorization_header["Authorization"].to_s.split
143
-
144
- assert_equal "Basic", authorization[0]
145
- assert_equal ["", "test123"], ::Base64.decode64(authorization[1]).split(":")[0..1]
146
- end
147
-
148
- def test_authorization_header_if_credentials_supplied_and_auth_type_is_basic
149
- authorization_header = @authenticated_conn.__send__(:authorization_header, :get, URI.parse("/people/2.json"))
150
- assert_equal @basic_authorization_request_header["Authorization"], authorization_header["Authorization"]
151
- authorization = authorization_header["Authorization"].to_s.split
152
-
153
- assert_equal "Basic", authorization[0]
154
- assert_equal ["david", "test123"], ::Base64.decode64(authorization[1]).split(":")[0..1]
155
- end
156
-
157
- def test_authorization_header_explicitly_setting_jwt_and_auth_type_is_bearer
158
- @conn = ActiveResource::Connection.new("http://localhost")
159
- @conn.auth_type = :bearer
160
- @conn.bearer_token = @jwt
161
- authorization_header = @conn.__send__(:authorization_header, :get, URI.parse("/people/3.json"))
162
- assert_equal @bearer_token_authorization_request_header["Authorization"], authorization_header["Authorization"]
163
- authorization = authorization_header["Authorization"].to_s.split
164
-
165
- assert_equal "Bearer", authorization[0]
166
- assert_equal @jwt, authorization[1]
167
- end
168
-
169
- def test_authorization_header_if_no_jwt_and_auth_type_is_bearer
170
- @conn = ActiveResource::Connection.new("http://localhost")
171
- @conn.auth_type = :bearer
172
- authorization_header = @conn.__send__(:authorization_header, :get, URI.parse("/people/3.json"))
173
- assert_nil authorization_header["Authorization"]
174
- end
175
-
176
- def test_client_nonce_is_not_nil
177
- assert_not_nil ActiveResource::Connection.new("http://david:test123@localhost").send(:client_nonce)
178
- end
179
- end
180
-
181
- class DigestAuthorizationTest < AuthorizationTest
182
- def setup
183
- super
184
- @authenticated_conn.auth_type = :digest
185
-
186
- # Make client nonce deterministic
187
- def @authenticated_conn.client_nonce; "i-am-a-client-nonce" end
188
-
189
- @nonce = "MTI0OTUxMzc4NzpjYWI3NDM3NDNmY2JmODU4ZjQ2ZjcwNGZkMTJiMjE0NA=="
190
-
191
- ActiveResource::HttpMock.respond_to do |mock|
192
- mock.get "/people/2.json", { "Authorization" => blank_digest_auth_header("/people/2.json", "fad396f6a34aeba28e28b9b96ddbb671") }, nil, 401, "WWW-Authenticate" => response_digest_auth_header
193
- mock.get "/people/2.json", { "Authorization" => request_digest_auth_header("/people/2.json", "c064d5ba8891a25290c76c8c7d31fb7b") }, @david, 200
194
- mock.get "/people/1.json", { "Authorization" => request_digest_auth_header("/people/1.json", "f9c0b594257bb8422af4abd429c5bb70") }, @matz, 200
195
-
196
- mock.put "/people/2.json", { "Authorization" => blank_digest_auth_header("/people/2.json", "50a685d814f94665b9d160fbbaa3958a") }, nil, 401, "WWW-Authenticate" => response_digest_auth_header
197
- mock.put "/people/2.json", { "Authorization" => request_digest_auth_header("/people/2.json", "5a75cde841122d8e0f20f8fd1f98a743") }, nil, 204
198
-
199
- mock.delete "/people/2.json", { "Authorization" => blank_digest_auth_header("/people/2.json", "846f799107eab5ca4285b909ee299a33") }, nil, 401, "WWW-Authenticate" => response_digest_auth_header
200
- mock.delete "/people/2.json", { "Authorization" => request_digest_auth_header("/people/2.json", "9f5b155224edbbb69fd99d8ce094681e") }, nil, 200
201
-
202
- mock.post "/people/2/addresses.json", { "Authorization" => blank_digest_auth_header("/people/2/addresses.json", "6984d405ff3d9ed07bbf747dcf16afb0") }, nil, 401, "WWW-Authenticate" => response_digest_auth_header
203
- mock.post "/people/2/addresses.json", { "Authorization" => request_digest_auth_header("/people/2/addresses.json", "4bda6a28dbf930b5af9244073623bd04") }, nil, 201, "Location" => "/people/1/addresses/5"
204
-
205
- mock.head "/people/2.json", { "Authorization" => blank_digest_auth_header("/people/2.json", "15e5ed84ba5c4cfcd5c98a36c2e4f421") }, nil, 401, "WWW-Authenticate" => response_digest_auth_header
206
- mock.head "/people/2.json", { "Authorization" => request_digest_auth_header("/people/2.json", "d4c6d2bcc8717abb2e2ccb8c49ee6a91") }, nil, 200
207
- end
208
- end
209
-
210
- def test_authorization_header_if_credentials_supplied_and_auth_type_is_digest
211
- authorization_header = @authenticated_conn.__send__(:authorization_header, :get, URI.parse("/people/2.json"))
212
- assert_equal blank_digest_auth_header("/people/2.json", "fad396f6a34aeba28e28b9b96ddbb671"), authorization_header["Authorization"]
213
- end
214
-
215
- def test_authorization_header_with_query_string_if_auth_type_is_digest
216
- authorization_header = @authenticated_conn.__send__(:authorization_header, :get, URI.parse("/people/2.json?only=name"))
217
- assert_equal blank_digest_auth_header("/people/2.json?only=name", "f8457b0b5d21b6b80737a386217afb24"), authorization_header["Authorization"]
218
- end
219
-
220
- def test_get_with_digest_auth_handles_initial_401_response_and_retries
221
- response = @authenticated_conn.get("/people/2.json")
222
- assert_equal "David", decode(response)["name"]
223
- end
224
-
225
- def test_post_with_digest_auth_handles_initial_401_response_and_retries
226
- response = @authenticated_conn.post("/people/2/addresses.json")
227
- assert_equal "/people/1/addresses/5", response["Location"]
228
- assert_equal 201, response.code
229
- end
230
-
231
- def test_put_with_digest_auth_handles_initial_401_response_and_retries
232
- response = @authenticated_conn.put("/people/2.json")
233
- assert_equal 204, response.code
234
- end
235
-
236
- def test_delete_with_digest_auth_handles_initial_401_response_and_retries
237
- response = @authenticated_conn.delete("/people/2.json")
238
- assert_equal 200, response.code
239
- end
240
-
241
- def test_head_with_digest_auth_handles_initial_401_response_and_retries
242
- response = @authenticated_conn.head("/people/2.json")
243
- assert_equal 200, response.code
244
- end
245
-
246
- def test_get_with_digest_auth_caches_nonce
247
- response = @authenticated_conn.get("/people/2.json")
248
- assert_equal "David", decode(response)["name"]
249
-
250
- # There is no mock for this request with a non-cached nonce.
251
- response = @authenticated_conn.get("/people/1.json")
252
- assert_equal "Matz", decode(response)["name"]
253
- end
254
-
255
- def test_raises_invalid_request_on_unauthorized_requests_with_digest_auth
256
- @conn.auth_type = :digest
257
- assert_raise(ActiveResource::InvalidRequestError) { @conn.get("/people/2.json") }
258
- assert_raise(ActiveResource::InvalidRequestError) { @conn.post("/people/2/addresses.json") }
259
- assert_raise(ActiveResource::InvalidRequestError) { @conn.put("/people/2.json") }
260
- assert_raise(ActiveResource::InvalidRequestError) { @conn.delete("/people/2.json") }
261
- assert_raise(ActiveResource::InvalidRequestError) { @conn.head("/people/2.json") }
262
- end
263
-
264
- private
265
- def blank_digest_auth_header(uri, response)
266
- %Q(Digest username="david", realm="", qop="", uri="#{uri}", nonce="", nc="0", cnonce="i-am-a-client-nonce", response="#{response}")
267
- end
268
-
269
- def request_digest_auth_header(uri, response)
270
- %Q(Digest username="david", realm="RailsTestApp", qop="auth", uri="#{uri}", nonce="#{@nonce}", nc="0", cnonce="i-am-a-client-nonce", response="#{response}", opaque="ef6dfb078ba22298d366f99567814ffb")
271
- end
272
-
273
- def response_digest_auth_header
274
- %Q(Digest realm="RailsTestApp", qop="auth", algorithm=MD5, nonce="#{@nonce}", opaque="ef6dfb078ba22298d366f99567814ffb")
275
- end
276
- end
@@ -1,155 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "abstract_unit"
4
- require "fixtures/person"
5
- require "fixtures/street_address"
6
- require "active_support/core_ext/hash/conversions"
7
-
8
- class CustomMethodsTest < ActiveSupport::TestCase
9
- def setup
10
- @matz = { person: { id: 1, name: "Matz" } }.to_json
11
- @matz_deep = { person: { id: 1, name: "Matz", other: "other" } }.to_json
12
- @matz_array = { people: [{ person: { id: 1, name: "Matz" } }] }.to_json
13
- @ryan = { person: { name: "Ryan" } }.to_json
14
- @addy = { address: { id: 1, street: "12345 Street" } }.to_json
15
- @addy_deep = { address: { id: 1, street: "12345 Street", zip: "27519" } }.to_json
16
-
17
- ActiveResource::HttpMock.respond_to do |mock|
18
- mock.get "/people/1.json", {}, @matz
19
- mock.get "/people/1/shallow.json", {}, @matz
20
- mock.get "/people/1/deep.json", {}, @matz_deep
21
- mock.get "/people/retrieve.json?name=Matz", {}, @matz_array
22
- mock.get "/people/managers.json", {}, @matz_array
23
- mock.post "/people/hire.json?name=Matz", {}, nil, 201
24
- mock.put "/people/1/promote.json?position=Manager", {}, nil, 204
25
- mock.put "/people/promote.json?name=Matz", {}, nil, 204, {}
26
- mock.put "/people/sort.json?by=name", {}, nil, 204
27
- mock.delete "/people/deactivate.json?name=Matz", {}, nil, 200
28
- mock.delete "/people/1/deactivate.json", {}, nil, 200
29
- mock.post "/people/new/register.json", {}, @ryan, 201, "Location" => "/people/5.json"
30
- mock.post "/people/1/register.json", {}, @matz, 201
31
- mock.get "/people/1/addresses/1.json", {}, @addy
32
- mock.get "/people/1/addresses/1/deep.json", {}, @addy_deep
33
- mock.put "/people/1/addresses/1/normalize_phone.json?locale=US", {}, nil, 204
34
- mock.put "/people/1/addresses/sort.json?by=name", {}, nil, 204
35
- mock.post "/people/1/addresses/new/link.json", {}, { address: { street: "12345 Street" } }.to_json, 201, "Location" => "/people/1/addresses/2.json"
36
- end
37
-
38
- Person.user = nil
39
- Person.password = nil
40
- end
41
-
42
- def teardown
43
- ActiveResource::HttpMock.reset!
44
- end
45
-
46
- def test_custom_collection_method
47
- # GET
48
- assert_equal([{ "id" => 1, "name" => "Matz" }], Person.get(:retrieve, name: "Matz"))
49
-
50
- # POST
51
- assert_equal(ActiveResource::Response.new("", 201, {}), Person.post(:hire, name: "Matz"))
52
-
53
- # PUT
54
- assert_equal ActiveResource::Response.new("", 204, {}),
55
- Person.put(:promote, { name: "Matz" }, "atestbody")
56
- assert_equal ActiveResource::Response.new("", 204, {}), Person.put(:sort, by: "name")
57
-
58
- # DELETE
59
- Person.delete :deactivate, name: "Matz"
60
-
61
- # Nested resource
62
- assert_equal ActiveResource::Response.new("", 204, {}), StreetAddress.put(:sort, person_id: 1, by: "name")
63
- end
64
-
65
- def test_custom_element_method
66
- # Test GET against an element URL
67
- assert_equal Person.find(1).get(:shallow), "id" => 1, "name" => "Matz"
68
- assert_equal Person.find(1).get(:deep), "id" => 1, "name" => "Matz", "other" => "other"
69
-
70
- # Test PUT against an element URL
71
- assert_equal ActiveResource::Response.new("", 204, {}), Person.find(1).put(:promote, { position: "Manager" }, "body")
72
-
73
- # Test DELETE against an element URL
74
- assert_equal ActiveResource::Response.new("", 200, {}), Person.find(1).delete(:deactivate)
75
-
76
- # With nested resources
77
- assert_equal StreetAddress.find(1, params: { person_id: 1 }).get(:deep),
78
- "id" => 1, "street" => "12345 Street", "zip" => "27519"
79
- assert_equal ActiveResource::Response.new("", 204, {}),
80
- StreetAddress.find(1, params: { person_id: 1 }).put(:normalize_phone, locale: "US")
81
- end
82
-
83
- def test_custom_new_element_method
84
- # Test POST against a new element URL
85
- ryan = Person.new(name: "Ryan")
86
- assert_equal ActiveResource::Response.new(@ryan, 201, "Location" => "/people/5.json"), ryan.post(:register)
87
- expected_request = ActiveResource::Request.new(:post, "/people/new/register.json", @ryan)
88
- assert_equal expected_request.body, ActiveResource::HttpMock.requests.first.body
89
-
90
- # Test POST against a nested collection URL
91
- addy = StreetAddress.new(street: "123 Test Dr.", person_id: 1)
92
- assert_equal ActiveResource::Response.new({ address: { street: "12345 Street" } }.to_json,
93
- 201, "Location" => "/people/1/addresses/2.json"),
94
- addy.post(:link)
95
-
96
- matz = Person.find(1)
97
- assert_equal ActiveResource::Response.new(@matz, 201), matz.post(:register)
98
- end
99
-
100
- def test_find_custom_resources
101
- assert_equal "Matz", Person.find(:all, from: :managers).first.name
102
- end
103
-
104
- def test_paths_with_format
105
- path_with_format = "/people/active.json"
106
-
107
- ActiveResource::HttpMock.respond_to do |mock|
108
- mock.get path_with_format, {}, @matz
109
- mock.post path_with_format, {}, nil
110
- mock.patch path_with_format, {}, nil
111
- mock.delete path_with_format, {}, nil
112
- mock.put path_with_format, {}, nil
113
- end
114
-
115
- [:get, :post, :delete, :patch, :put].each_with_index do |method, index|
116
- Person.send(method, :active)
117
- expected_request = ActiveResource::Request.new(method, path_with_format)
118
- assert_equal expected_request.path, ActiveResource::HttpMock.requests[index].path
119
- assert_equal expected_request.method, ActiveResource::HttpMock.requests[index].method
120
- end
121
- end
122
-
123
- def test_paths_without_format
124
- ActiveResource::Base.include_format_in_path = false
125
- path_without_format = "/people/active"
126
-
127
- ActiveResource::HttpMock.respond_to do |mock|
128
- mock.get path_without_format, {}, @matz
129
- mock.post path_without_format, {}, nil
130
- mock.patch path_without_format, {}, nil
131
- mock.delete path_without_format, {}, nil
132
- mock.put path_without_format, {}, nil
133
- end
134
-
135
- [:get, :post, :delete, :patch, :put].each_with_index do |method, index|
136
- Person.send(method, :active)
137
- expected_request = ActiveResource::Request.new(method, path_without_format)
138
- assert_equal expected_request.path, ActiveResource::HttpMock.requests[index].path
139
- assert_equal expected_request.method, ActiveResource::HttpMock.requests[index].method
140
- end
141
- ensure
142
- ActiveResource::Base.include_format_in_path = true
143
- end
144
-
145
- def test_custom_element_method_identifier_encoding
146
- luis = { person: { id: "luís", name: "Luís" } }.to_json
147
-
148
- ActiveResource::HttpMock.respond_to do |mock|
149
- mock.get "/people/lu%C3%ADs.json", {}, luis
150
- mock.put "/people/lu%C3%ADs/deactivate.json", {}, luis, 204
151
- end
152
-
153
- assert_equal ActiveResource::Response.new(luis, 204), Person.find("luís").put(:deactivate)
154
- end
155
- end
@@ -1,53 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "abstract_unit"
4
- require "fixtures/person"
5
- require "fixtures/street_address"
6
-
7
- class BaseEqualityTest < ActiveSupport::TestCase
8
- def setup
9
- @new = Person.new
10
- @one = Person.new(id: 1)
11
- @two = Person.new(id: 2)
12
- @street = StreetAddress.new(id: 2)
13
- end
14
-
15
- def test_should_equal_self
16
- assert @new == @new, "@new == @new"
17
- assert @one == @one, "@one == @one"
18
- end
19
-
20
- def test_shouldnt_equal_new_resource
21
- assert @new != @one, "@new != @one"
22
- assert @one != @new, "@one != @new"
23
- end
24
-
25
- def test_shouldnt_equal_different_class
26
- assert @two != @street, "person != street_address with same id"
27
- assert @street != @two, "street_address != person with same id"
28
- end
29
-
30
- def test_eql_should_alias_equals_operator
31
- assert_equal @new == @new, @new.eql?(@new)
32
- assert_equal @new == @one, @new.eql?(@one)
33
-
34
- assert_equal @one == @one, @one.eql?(@one)
35
- assert_equal @one == @new, @one.eql?(@new)
36
-
37
- assert_equal @one == @street, @one.eql?(@street)
38
- end
39
-
40
- def test_hash_should_be_id_hash
41
- [@new, @one, @two, @street].each do |resource|
42
- assert_equal resource.id.hash, resource.hash
43
- end
44
- end
45
-
46
- def test_with_prefix_options
47
- assert_equal @one == @one, @one.eql?(@one)
48
- assert_equal @one == @one.dup, @one.eql?(@one.dup)
49
- new_one = @one.dup
50
- new_one.prefix_options = { foo: "bar" }
51
- assert_not_equal @one, new_one
52
- end
53
- end