solidus_api 2.9.6 → 2.11.0

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 (111) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +35 -2
  3. data/app/controllers/spree/api/addresses_controller.rb +2 -2
  4. data/app/controllers/spree/api/base_controller.rb +21 -13
  5. data/app/controllers/spree/api/checkouts_controller.rb +1 -11
  6. data/app/controllers/spree/api/countries_controller.rb +2 -2
  7. data/app/controllers/spree/api/credit_cards_controller.rb +3 -3
  8. data/app/controllers/spree/api/customer_returns_controller.rb +67 -0
  9. data/app/controllers/spree/api/images_controller.rb +5 -5
  10. data/app/controllers/spree/api/inventory_units_controller.rb +2 -2
  11. data/app/controllers/spree/api/option_types_controller.rb +4 -4
  12. data/app/controllers/spree/api/option_values_controller.rb +3 -3
  13. data/app/controllers/spree/api/orders_controller.rb +11 -6
  14. data/app/controllers/spree/api/payments_controller.rb +2 -2
  15. data/app/controllers/spree/api/product_properties_controller.rb +9 -14
  16. data/app/controllers/spree/api/promotions_controller.rb +3 -12
  17. data/app/controllers/spree/api/properties_controller.rb +4 -4
  18. data/app/controllers/spree/api/resource_controller.rb +3 -3
  19. data/app/controllers/spree/api/return_authorizations_controller.rb +4 -4
  20. data/app/controllers/spree/api/shipments_controller.rb +2 -2
  21. data/app/controllers/spree/api/states_controller.rb +3 -3
  22. data/app/controllers/spree/api/stock_items_controller.rb +3 -3
  23. data/app/controllers/spree/api/stock_locations_controller.rb +4 -4
  24. data/app/controllers/spree/api/stock_movements_controller.rb +3 -3
  25. data/app/controllers/spree/api/stores_controller.rb +4 -4
  26. data/app/controllers/spree/api/taxonomies_controller.rb +5 -3
  27. data/app/controllers/spree/api/taxons_controller.rb +5 -5
  28. data/app/controllers/spree/api/users_controller.rb +13 -0
  29. data/app/controllers/spree/api/variants_controller.rb +4 -4
  30. data/app/controllers/spree/api/zones_controller.rb +3 -3
  31. data/app/helpers/spree/api/api_helpers.rb +20 -7
  32. data/app/views/spree/api/customer_returns/index.json.jbuilder +6 -0
  33. data/app/views/spree/api/customer_returns/new.json.jbuilder +4 -0
  34. data/app/views/spree/api/customer_returns/show.json.jbuilder +3 -0
  35. data/app/views/spree/api/errors/could_not_transition.json.jbuilder +4 -0
  36. data/app/views/spree/api/images/_image.json.jbuilder +2 -2
  37. data/app/views/spree/api/orders/_order.json.jbuilder +1 -1
  38. data/app/views/spree/api/orders/could_not_transition.json.jbuilder +5 -0
  39. data/app/views/spree/api/shared/_pagination.json.jbuilder +1 -1
  40. data/config/locales/en.yml +2 -0
  41. data/config/routes.rb +6 -3
  42. data/lib/spree/api.rb +0 -7
  43. data/lib/spree/api/config.rb +9 -0
  44. data/lib/spree/api/engine.rb +4 -4
  45. data/lib/spree/api/responders.rb +3 -2
  46. data/lib/spree/api/responders/{rabl_template.rb → jbuilder_template.rb} +3 -1
  47. data/lib/spree/api/testing_support/helpers.rb +1 -1
  48. data/{app/models → lib}/spree/api_configuration.rb +0 -0
  49. data/openapi/.stoplight.yml +7 -0
  50. data/openapi/authentication.md +33 -0
  51. data/openapi/checkout-flow.md +63 -0
  52. data/openapi/errors.md +3 -0
  53. data/openapi/lint.yml +1 -0
  54. data/openapi/main.hub.yml +65 -0
  55. data/openapi/pagination.md +7 -0
  56. data/openapi/solidus-api.oas.yml +6753 -0
  57. data/openapi/theme.css +0 -0
  58. data/solidus_api.gemspec +19 -19
  59. metadata +27 -115
  60. data/script/rails +0 -10
  61. data/spec/controllers/spree/api/base_controller_spec.rb +0 -118
  62. data/spec/controllers/spree/api/resource_controller_spec.rb +0 -190
  63. data/spec/features/checkout_spec.rb +0 -192
  64. data/spec/fixtures/thinking-cat.jpg +0 -0
  65. data/spec/models/spree/legacy_user_spec.rb +0 -103
  66. data/spec/requests/api/address_books_spec.rb +0 -240
  67. data/spec/requests/rabl_cache_spec.rb +0 -34
  68. data/spec/requests/ransackable_attributes_spec.rb +0 -79
  69. data/spec/requests/spree/api/addresses_controller_spec.rb +0 -57
  70. data/spec/requests/spree/api/checkouts_controller_spec.rb +0 -484
  71. data/spec/requests/spree/api/classifications_controller_spec.rb +0 -50
  72. data/spec/requests/spree/api/config_controller_spec.rb +0 -26
  73. data/spec/requests/spree/api/countries_controller_spec.rb +0 -48
  74. data/spec/requests/spree/api/coupon_codes_controller_spec.rb +0 -105
  75. data/spec/requests/spree/api/credit_cards_controller_spec.rb +0 -105
  76. data/spec/requests/spree/api/images_controller_spec.rb +0 -99
  77. data/spec/requests/spree/api/inventory_units_controller_spec.rb +0 -55
  78. data/spec/requests/spree/api/line_items_controller_spec.rb +0 -213
  79. data/spec/requests/spree/api/option_types_controller_spec.rb +0 -116
  80. data/spec/requests/spree/api/option_values_controller_spec.rb +0 -138
  81. data/spec/requests/spree/api/orders_controller_spec.rb +0 -954
  82. data/spec/requests/spree/api/payments_controller_spec.rb +0 -259
  83. data/spec/requests/spree/api/product_properties_controller_spec.rb +0 -114
  84. data/spec/requests/spree/api/products_controller_spec.rb +0 -422
  85. data/spec/requests/spree/api/promotion_application_spec.rb +0 -50
  86. data/spec/requests/spree/api/promotions_controller_spec.rb +0 -67
  87. data/spec/requests/spree/api/properties_controller_spec.rb +0 -102
  88. data/spec/requests/spree/api/return_authorizations_controller_spec.rb +0 -180
  89. data/spec/requests/spree/api/shipments_controller_spec.rb +0 -532
  90. data/spec/requests/spree/api/states_controller_spec.rb +0 -69
  91. data/spec/requests/spree/api/stock_items_controller_spec.rb +0 -311
  92. data/spec/requests/spree/api/stock_locations_controller_spec.rb +0 -170
  93. data/spec/requests/spree/api/stock_movements_controller_spec.rb +0 -81
  94. data/spec/requests/spree/api/store_credit_events_controller_spec.rb +0 -59
  95. data/spec/requests/spree/api/stores_controller_spec.rb +0 -134
  96. data/spec/requests/spree/api/taxonomies_controller_spec.rb +0 -114
  97. data/spec/requests/spree/api/taxons_controller_spec.rb +0 -217
  98. data/spec/requests/spree/api/unauthenticated_products_controller_spec.rb +0 -27
  99. data/spec/requests/spree/api/users_controller_spec.rb +0 -151
  100. data/spec/requests/spree/api/variants_controller_spec.rb +0 -340
  101. data/spec/requests/spree/api/zones_controller_spec.rb +0 -89
  102. data/spec/shared_examples/protect_product_actions.rb +0 -18
  103. data/spec/spec_helper.rb +0 -73
  104. data/spec/support/be_paginated_matcher.rb +0 -9
  105. data/spec/support/controller_hacks.rb +0 -43
  106. data/spec/support/database_cleaner.rb +0 -16
  107. data/spec/support/have_attributes_matcher.rb +0 -11
  108. data/spec/test_views/spree/api/widgets/_widget.json.jbuilder +0 -3
  109. data/spec/test_views/spree/api/widgets/index.json.jbuilder +0 -9
  110. data/spec/test_views/spree/api/widgets/new.json.jbuilder +0 -3
  111. data/spec/test_views/spree/api/widgets/show.json.jbuilder +0 -3
@@ -1,89 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- module Spree
6
- describe Api::ZonesController, type: :request do
7
- let!(:attributes) { [:id, :name, :zone_members] }
8
- let!(:zone) { create(:zone, name: 'Europe') }
9
-
10
- before do
11
- stub_authentication!
12
- end
13
-
14
- it "gets list of zones" do
15
- get spree.api_zones_path
16
- expect(json_response['zones'].first).to have_attributes(attributes)
17
- end
18
-
19
- it 'can control the page size through a parameter' do
20
- create(:zone)
21
- get spree.api_zones_path, params: { per_page: 1 }
22
- expect(json_response['count']).to eq(1)
23
- expect(json_response['current_page']).to eq(1)
24
- expect(json_response['pages']).to eq(2)
25
- end
26
-
27
- it 'can query the results through a paramter' do
28
- expected_result = create(:zone, name: 'South America')
29
- get spree.api_zones_path, params: { q: { name_cont: 'south' } }
30
- expect(json_response['count']).to eq(1)
31
- expect(json_response['zones'].first['name']).to eq expected_result.name
32
- end
33
-
34
- it "gets a zone" do
35
- get spree.api_zone_path(zone)
36
- expect(json_response).to have_attributes(attributes)
37
- expect(json_response['name']).to eq zone.name
38
- expect(json_response['zone_members'].size).to eq zone.zone_members.count
39
- end
40
-
41
- context "as an admin" do
42
- sign_in_as_admin!
43
-
44
- it "can create a new zone" do
45
- params = {
46
- zone: {
47
- name: "North Pole",
48
- zone_members: [
49
- {
50
- zoneable_type: "Spree::Country",
51
- zoneable_id: 1
52
- }
53
- ]
54
- }
55
- }
56
-
57
- post spree.api_zones_path, params: params
58
- expect(response.status).to eq(201)
59
- expect(json_response).to have_attributes(attributes)
60
- expect(json_response["zone_members"]).not_to be_empty
61
- end
62
-
63
- it "updates a zone" do
64
- params = {
65
- zone: {
66
- name: "North Pole",
67
- zone_members: [
68
- {
69
- zoneable_type: "Spree::Country",
70
- zoneable_id: 1
71
- }
72
- ]
73
- }
74
- }
75
-
76
- put spree.api_zone_path(zone), params: params
77
- expect(response.status).to eq(200)
78
- expect(json_response['name']).to eq 'North Pole'
79
- expect(json_response['zone_members']).not_to be_blank
80
- end
81
-
82
- it "can delete a zone" do
83
- delete spree.api_zone_path(zone)
84
- expect(response.status).to eq(204)
85
- expect { zone.reload }.to raise_error(ActiveRecord::RecordNotFound)
86
- end
87
- end
88
- end
89
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- shared_examples "modifying product actions are restricted" do
4
- it "cannot create a new product if not an admin" do
5
- post spree.api_products_path, params: { product: { name: "Brand new product!" } }
6
- assert_unauthorized!
7
- end
8
-
9
- it "cannot update a product" do
10
- put spree.api_product_path(product), params: { product: { name: "I hacked your store!" } }
11
- assert_unauthorized!
12
- end
13
-
14
- it "cannot delete a product" do
15
- delete spree.api_product_path(product)
16
- assert_unauthorized!
17
- end
18
- end
@@ -1,73 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- if ENV["COVERAGE"]
4
- require 'simplecov'
5
- SimpleCov.start('rails')
6
- end
7
-
8
- # This file is copied to spec/ when you run 'rails generate rspec:install'
9
- ENV["RAILS_ENV"] ||= 'test'
10
-
11
- require 'solidus_api'
12
- require 'spree/testing_support/dummy_app'
13
- DummyApp.setup(
14
- gem_root: File.expand_path('..', __dir__),
15
- lib_name: 'solidus_api'
16
- )
17
-
18
- require 'rails-controller-testing'
19
- require 'rspec/rails'
20
- require 'rspec-activemodel-mocks'
21
-
22
- require 'database_cleaner'
23
- require 'with_model'
24
-
25
- # Requires supporting ruby files with custom matchers and macros, etc,
26
- # in spec/support/ and its subdirectories.
27
- Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each { |f| require f }
28
-
29
- require 'spree/testing_support/partial_double_verification'
30
- require 'spree/testing_support/factories'
31
- require 'spree/testing_support/preferences'
32
- require 'spree/testing_support/authorization_helpers'
33
-
34
- require 'spree/api/testing_support/caching'
35
- require 'spree/api/testing_support/helpers'
36
- require 'spree/api/testing_support/setup'
37
-
38
- ActiveJob::Base.queue_adapter = :test
39
-
40
- RSpec.configure do |config|
41
- config.backtrace_exclusion_patterns = [/gems\/activesupport/, /gems\/actionpack/, /gems\/rspec/]
42
- config.color = true
43
- config.infer_spec_type_from_file_location!
44
- config.expect_with :rspec do |c|
45
- c.syntax = :expect
46
- end
47
- config.mock_with :rspec do |c|
48
- c.syntax = :expect
49
- end
50
-
51
- config.include FactoryBot::Syntax::Methods
52
- config.include Spree::Api::TestingSupport::Helpers, type: :request
53
- config.extend Spree::Api::TestingSupport::Setup, type: :request
54
- config.include Spree::Api::TestingSupport::Helpers, type: :controller
55
- config.extend Spree::Api::TestingSupport::Setup, type: :controller
56
- config.include Spree::TestingSupport::Preferences
57
-
58
- config.extend WithModel
59
-
60
- config.before(:each) do
61
- Rails.cache.clear
62
- end
63
-
64
- config.include ActiveJob::TestHelper
65
-
66
- config.use_transactional_fixtures = true
67
-
68
- config.example_status_persistence_file_path = "./spec/examples.txt"
69
-
70
- config.order = :random
71
-
72
- Kernel.srand config.seed
73
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec::Matchers.define :be_paginated do
4
- match do |actual|
5
- %w[count total_count current_page pages per_page].all? do |attr|
6
- actual[attr].is_a?(Integer)
7
- end
8
- end
9
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_support/all'
4
-
5
- module ControllerHacks
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
- routes { Spree::Core::Engine.routes }
10
- end
11
-
12
- def api_get(action, params = {}, session = nil, flash = nil)
13
- api_process(action, params, session, flash, "GET")
14
- end
15
-
16
- def api_post(action, params = {}, session = nil, flash = nil)
17
- api_process(action, params, session, flash, "POST")
18
- end
19
-
20
- def api_put(action, params = {}, session = nil, flash = nil)
21
- api_process(action, params, session, flash, "PUT")
22
- end
23
-
24
- def api_delete(action, params = {}, session = nil, flash = nil)
25
- api_process(action, params, session, flash, "DELETE")
26
- end
27
-
28
- def api_process(action, params = {}, session = nil, flash = nil, method = "get")
29
- scoping = respond_to?(:resource_scoping) ? resource_scoping : {}
30
- process(
31
- action,
32
- method: method,
33
- params: params.merge(scoping),
34
- session: session,
35
- flash: flash,
36
- format: :json
37
- )
38
- end
39
- end
40
-
41
- RSpec.configure do |config|
42
- config.include ControllerHacks, type: :controller
43
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.configure do |config|
4
- config.before(:suite) do
5
- DatabaseCleaner.strategy = :transaction
6
- DatabaseCleaner.clean_with(:truncation)
7
- end
8
-
9
- config.before(:each) do
10
- DatabaseCleaner.start
11
- end
12
-
13
- config.after(:each) do
14
- DatabaseCleaner.clean
15
- end
16
- end
@@ -1,11 +0,0 @@
1
-
2
- # frozen_string_literal: true
3
-
4
- RSpec::Matchers.define :have_attributes do |expected_attributes|
5
- match do |actual|
6
- # actual is a Hash object representing an object, like this:
7
- # { "name" => "Product #1" }
8
- actual_attributes = actual.keys.map(&:to_sym)
9
- expected_attributes.map(&:to_sym).all? { |attr| actual_attributes.include?(attr) }
10
- end
11
- end
@@ -1,3 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- json.(widget, :id, :name, :position)
@@ -1,9 +0,0 @@
1
-
2
- # frozen_string_literal: true
3
-
4
- json.widgets(@collection) do |widget|
5
- json.partial!("spree/api/widgets/widget", widget: widget)
6
- end
7
- json.count @collection.count
8
- json.current_page(params[:page] || 1)
9
- json.pages @collection.total_pages
@@ -1,3 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- json.attributes [:name]
@@ -1,3 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- json.partial!("spree/api/widgets/widget", widget: @object)