solidus_api 2.10.5 → 2.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/app/controllers/spree/api/addresses_controller.rb +1 -1
  4. data/app/controllers/spree/api/base_controller.rb +11 -3
  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 +2 -2
  8. data/app/controllers/spree/api/customer_returns_controller.rb +67 -0
  9. data/app/controllers/spree/api/images_controller.rb +4 -4
  10. data/app/controllers/spree/api/inventory_units_controller.rb +1 -1
  11. data/app/controllers/spree/api/option_types_controller.rb +3 -3
  12. data/app/controllers/spree/api/option_values_controller.rb +2 -2
  13. data/app/controllers/spree/api/orders_controller.rb +1 -1
  14. data/app/controllers/spree/api/payments_controller.rb +1 -1
  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 +3 -3
  18. data/app/controllers/spree/api/resource_controller.rb +2 -2
  19. data/app/controllers/spree/api/return_authorizations_controller.rb +3 -3
  20. data/app/controllers/spree/api/shipments_controller.rb +1 -1
  21. data/app/controllers/spree/api/states_controller.rb +3 -3
  22. data/app/controllers/spree/api/stock_items_controller.rb +2 -2
  23. data/app/controllers/spree/api/stock_locations_controller.rb +3 -3
  24. data/app/controllers/spree/api/stock_movements_controller.rb +3 -3
  25. data/app/controllers/spree/api/stores_controller.rb +3 -3
  26. data/app/controllers/spree/api/taxonomies_controller.rb +2 -2
  27. data/app/controllers/spree/api/taxons_controller.rb +4 -4
  28. data/app/controllers/spree/api/users_controller.rb +13 -0
  29. data/app/controllers/spree/api/variants_controller.rb +3 -3
  30. data/app/controllers/spree/api/zones_controller.rb +2 -2
  31. data/app/helpers/spree/api/api_helpers.rb +18 -5
  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/orders/could_not_transition.json.jbuilder +5 -0
  37. data/config/locales/en.yml +2 -0
  38. data/config/routes.rb +6 -3
  39. data/lib/spree/api/testing_support/helpers.rb +1 -1
  40. data/openapi/authentication.md +9 -1
  41. data/openapi/checkout-flow.md +17 -4
  42. data/openapi/main.hub.yml +1 -1
  43. data/openapi/solidus-api.oas.yml +6753 -0
  44. data/solidus_api.gemspec +19 -19
  45. metadata +14 -114
  46. data/openapi/api.oas2.yml +0 -6108
  47. data/script/rails +0 -10
  48. data/spec/controllers/spree/api/base_controller_spec.rb +0 -118
  49. data/spec/controllers/spree/api/resource_controller_spec.rb +0 -190
  50. data/spec/features/checkout_spec.rb +0 -192
  51. data/spec/fixtures/thinking-cat.jpg +0 -0
  52. data/spec/lib/spree_api_responders_spec.rb +0 -10
  53. data/spec/models/spree/legacy_user_spec.rb +0 -103
  54. data/spec/requests/api/address_books_spec.rb +0 -240
  55. data/spec/requests/jbuilder_cache_spec.rb +0 -34
  56. data/spec/requests/ransackable_attributes_spec.rb +0 -79
  57. data/spec/requests/spree/api/addresses_controller_spec.rb +0 -57
  58. data/spec/requests/spree/api/checkouts_controller_spec.rb +0 -484
  59. data/spec/requests/spree/api/classifications_controller_spec.rb +0 -50
  60. data/spec/requests/spree/api/config_controller_spec.rb +0 -26
  61. data/spec/requests/spree/api/countries_controller_spec.rb +0 -48
  62. data/spec/requests/spree/api/coupon_codes_controller_spec.rb +0 -105
  63. data/spec/requests/spree/api/credit_cards_controller_spec.rb +0 -105
  64. data/spec/requests/spree/api/images_controller_spec.rb +0 -99
  65. data/spec/requests/spree/api/inventory_units_controller_spec.rb +0 -55
  66. data/spec/requests/spree/api/line_items_controller_spec.rb +0 -213
  67. data/spec/requests/spree/api/option_types_controller_spec.rb +0 -116
  68. data/spec/requests/spree/api/option_values_controller_spec.rb +0 -138
  69. data/spec/requests/spree/api/orders_controller_spec.rb +0 -954
  70. data/spec/requests/spree/api/payments_controller_spec.rb +0 -259
  71. data/spec/requests/spree/api/product_properties_controller_spec.rb +0 -114
  72. data/spec/requests/spree/api/products_controller_spec.rb +0 -422
  73. data/spec/requests/spree/api/promotion_application_spec.rb +0 -50
  74. data/spec/requests/spree/api/promotions_controller_spec.rb +0 -67
  75. data/spec/requests/spree/api/properties_controller_spec.rb +0 -102
  76. data/spec/requests/spree/api/return_authorizations_controller_spec.rb +0 -180
  77. data/spec/requests/spree/api/shipments_controller_spec.rb +0 -532
  78. data/spec/requests/spree/api/states_controller_spec.rb +0 -69
  79. data/spec/requests/spree/api/stock_items_controller_spec.rb +0 -311
  80. data/spec/requests/spree/api/stock_locations_controller_spec.rb +0 -170
  81. data/spec/requests/spree/api/stock_movements_controller_spec.rb +0 -81
  82. data/spec/requests/spree/api/store_credit_events_controller_spec.rb +0 -59
  83. data/spec/requests/spree/api/stores_controller_spec.rb +0 -134
  84. data/spec/requests/spree/api/taxonomies_controller_spec.rb +0 -114
  85. data/spec/requests/spree/api/taxons_controller_spec.rb +0 -217
  86. data/spec/requests/spree/api/unauthenticated_products_controller_spec.rb +0 -27
  87. data/spec/requests/spree/api/users_controller_spec.rb +0 -151
  88. data/spec/requests/spree/api/variants_controller_spec.rb +0 -340
  89. data/spec/requests/spree/api/zones_controller_spec.rb +0 -89
  90. data/spec/shared_examples/protect_product_actions.rb +0 -18
  91. data/spec/spec_helper.rb +0 -73
  92. data/spec/support/be_paginated_matcher.rb +0 -9
  93. data/spec/support/controller_hacks.rb +0 -43
  94. data/spec/support/database_cleaner.rb +0 -16
  95. data/spec/support/have_attributes_matcher.rb +0 -11
  96. data/spec/test_views/spree/api/widgets/_widget.json.jbuilder +0 -3
  97. data/spec/test_views/spree/api/widgets/index.json.jbuilder +0 -9
  98. data/spec/test_views/spree/api/widgets/new.json.jbuilder +0 -3
  99. data/spec/test_views/spree/api/widgets/show.json.jbuilder +0 -3
@@ -1,213 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- module Spree
6
- PermittedAttributes.module_eval do
7
- mattr_writer :line_item_attributes
8
- end
9
-
10
- unless PermittedAttributes.line_item_attributes.include? :options
11
- PermittedAttributes.line_item_attributes << { options: [:some_option] }
12
- end
13
-
14
- describe Api::LineItemsController, type: :request do
15
- let!(:order) { create(:order_with_line_items, line_items_count: 1) }
16
-
17
- let(:product) { create(:product) }
18
- let(:attributes) { [:id, :quantity, :price, :variant, :total, :display_amount, :single_display_amount] }
19
- let(:resource_scoping) { { order_id: order.to_param } }
20
-
21
- before do
22
- stub_authentication!
23
- end
24
-
25
- it "can learn how to create a new line item" do
26
- get spree.new_api_order_line_item_path(order)
27
- expect(json_response["attributes"]).to eq(["quantity", "price", "variant_id"])
28
- required_attributes = json_response["required_attributes"]
29
- expect(required_attributes).to include("quantity", "variant_id")
30
- end
31
-
32
- context "authenticating with a token" do
33
- it "can add a new line item to an existing order" do
34
- post spree.api_order_line_items_path(order), params: { line_item: { variant_id: product.master.to_param, quantity: 1 }, order_token: order.guest_token }
35
- expect(response.status).to eq(201)
36
- expect(json_response).to have_attributes(attributes)
37
- expect(json_response["variant"]["name"]).not_to be_blank
38
- end
39
-
40
- it "can add a new line item to an existing order with token in header" do
41
- post spree.api_order_line_items_path(order),
42
- params: { line_item: { variant_id: product.master.to_param, quantity: 1 } },
43
- headers: { 'X-Spree-Order-Token' => order.guest_token }
44
- expect(response.status).to eq(201)
45
- expect(json_response).to have_attributes(attributes)
46
- expect(json_response["variant"]["name"]).not_to be_blank
47
- end
48
- end
49
-
50
- context "as the order owner" do
51
- before do
52
- allow_any_instance_of(Order).to receive_messages user: current_api_user
53
- end
54
-
55
- context "dealing with a completed order" do
56
- let!(:order) { create(:completed_order_with_totals) }
57
-
58
- it "can't add a new line item" do
59
- post spree.api_order_line_items_path(order), params: { line_item: { variant_id: product.master.to_param, quantity: 1 } }
60
- assert_unauthorized!
61
- end
62
-
63
- it "can't update a line item" do
64
- line_item = order.line_items.first
65
- put spree.api_order_line_item_path(order, line_item), params: { line_item: { quantity: 10 } }
66
- assert_unauthorized!
67
- end
68
-
69
- it "can't delete a line item" do
70
- line_item = order.line_items.first
71
- delete spree.api_order_line_item_path(order, line_item)
72
- assert_unauthorized!
73
- end
74
- end
75
-
76
- it "can add a new line item to an existing order" do
77
- post spree.api_order_line_items_path(order), params: { line_item: { variant_id: product.master.to_param, quantity: 1 } }
78
- expect(response.status).to eq(201)
79
- expect(json_response).to have_attributes(attributes)
80
- expect(json_response["variant"]["name"]).not_to be_blank
81
- end
82
-
83
- it "can add a new line item to an existing order with options" do
84
- without_partial_double_verification do
85
- expect_any_instance_of(LineItem).to receive(:some_option=).with("foobar")
86
- end
87
- post spree.api_order_line_items_path(order),
88
- params: {
89
- line_item: {
90
- variant_id: product.master.to_param,
91
- quantity: 1,
92
- options: { some_option: "foobar" }
93
- }
94
- }
95
- expect(response.status).to eq(201)
96
- end
97
-
98
- it "default quantity to 1 if none is given" do
99
- post spree.api_order_line_items_path(order), params: { line_item: { variant_id: product.master.to_param } }
100
- expect(response.status).to eq(201)
101
- expect(json_response).to have_attributes(attributes)
102
- expect(json_response[:quantity]).to eq 1
103
- end
104
-
105
- it "increases a line item's quantity if it exists already" do
106
- order.line_items.create(variant_id: product.master.id, quantity: 10)
107
- post spree.api_order_line_items_path(order), params: { line_item: { variant_id: product.master.to_param, quantity: 1 } }
108
- expect(response.status).to eq(201)
109
- order.reload
110
- expect(order.line_items.count).to eq(2) # 1 original due to factory, + 1 in this test
111
- expect(json_response).to have_attributes(attributes)
112
- expect(json_response["quantity"]).to eq(11)
113
- end
114
-
115
- it "can update a line item on the order" do
116
- line_item = order.line_items.first
117
- put spree.api_order_line_item_path(order, line_item), params: { line_item: { quantity: 101 } }
118
- expect(response.status).to eq(200)
119
- order.reload
120
- expect(order.total).to eq(1010) # 10 original due to factory, + 1000 in this test
121
- expect(json_response).to have_attributes(attributes)
122
- expect(json_response["quantity"]).to eq(101)
123
- end
124
-
125
- it "can update a line item's options on the order" do
126
- without_partial_double_verification do
127
- expect_any_instance_of(LineItem).to receive(:some_option=).with("foobar")
128
- end
129
- line_item = order.line_items.first
130
- put spree.api_order_line_item_path(order, line_item),
131
- params: {
132
- line_item: { quantity: 1, options: { some_option: "foobar" } }
133
- }
134
- expect(response.status).to eq(200)
135
- end
136
-
137
- it "can delete a line item on the order" do
138
- line_item = order.line_items.first
139
- delete spree.api_order_line_item_path(order, line_item)
140
- expect(response.status).to eq(204)
141
- order.reload
142
- expect(order.line_items.count).to eq(0) # 1 original due to factory, - 1 in this test
143
- expect { line_item.reload }.to raise_error(ActiveRecord::RecordNotFound)
144
- end
145
-
146
- context "order contents changed after shipments were created" do
147
- let!(:store) { create(:store) }
148
- let!(:order) { Order.create(store: store) }
149
- let!(:line_item) { order.contents.add(product.master) }
150
-
151
- before { order.create_proposed_shipments }
152
-
153
- it "clear out shipments on create" do
154
- expect(order.reload.shipments).not_to be_empty
155
- post spree.api_order_line_items_path(order), params: { line_item: { variant_id: product.master.to_param, quantity: 1 } }
156
- expect(order.reload.shipments).to be_empty
157
- end
158
-
159
- it "clear out shipments on update" do
160
- expect(order.reload.shipments).not_to be_empty
161
- put spree.api_order_line_item_path(order, line_item), params: { line_item: { quantity: 1000 } }
162
- expect(order.reload.shipments).to be_empty
163
- end
164
-
165
- it "clear out shipments on delete" do
166
- expect(order.reload.shipments).not_to be_empty
167
- delete spree.api_order_line_item_path(order, line_item)
168
- expect(order.reload.shipments).to be_empty
169
- end
170
-
171
- context "order is completed" do
172
- before do
173
- allow(order).to receive_messages completed?: true
174
- allow(Order).to receive_message_chain :includes, find_by!: order
175
- end
176
-
177
- it "doesn't destroy shipments or restart checkout flow" do
178
- expect(order.reload.shipments).not_to be_empty
179
- post spree.api_order_line_items_path(order), params: { line_item: { variant_id: product.master.to_param, quantity: 1 } }
180
- expect(order.reload.shipments).not_to be_empty
181
- end
182
- end
183
- end
184
- end
185
-
186
- context "as just another user" do
187
- before do
188
- user = create(:user)
189
- allow(Spree.user_class).to receive(:find_by).
190
- and_return(user)
191
- end
192
-
193
- it "cannot add a new line item to the order" do
194
- post spree.api_order_line_items_path(order), params: { line_item: { variant_id: product.master.to_param, quantity: 1 } }
195
- assert_unauthorized!
196
- end
197
-
198
- it "cannot update a line item on the order" do
199
- line_item = order.line_items.first
200
- put spree.api_order_line_item_path(order, line_item), params: { line_item: { quantity: 1000 } }
201
- assert_unauthorized!
202
- expect(line_item.reload.quantity).not_to eq(1000)
203
- end
204
-
205
- it "cannot delete a line item on the order" do
206
- line_item = order.line_items.first
207
- delete spree.api_order_line_item_path(order, line_item)
208
- assert_unauthorized!
209
- expect { line_item.reload }.not_to raise_error
210
- end
211
- end
212
- end
213
- end
@@ -1,116 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- module Spree
6
- describe Api::OptionTypesController, type: :request do
7
- let(:attributes) { [:id, :name, :position, :presentation] }
8
- let!(:option_value) { create(:option_value) }
9
- let!(:option_type) { option_value.option_type }
10
-
11
- before do
12
- stub_authentication!
13
- end
14
-
15
- def check_option_values(option_values)
16
- expect(option_values.count).to eq(1)
17
- expect(option_values.first).to have_attributes([:id, :name, :presentation,
18
- :option_type_name, :option_type_id])
19
- end
20
-
21
- it "can list all option types" do
22
- get spree.api_option_types_path
23
- expect(json_response.count).to eq(1)
24
- expect(json_response.first).to have_attributes(attributes)
25
-
26
- check_option_values(json_response.first["option_values"])
27
- end
28
-
29
- it "can search for an option type" do
30
- create(:option_type, name: "buzz")
31
- get spree.api_option_types_path, params: { q: { name_cont: option_type.name } }
32
- expect(json_response.count).to eq(1)
33
- expect(json_response.first).to have_attributes(attributes)
34
- end
35
-
36
- it "can retrieve a list of specific option types" do
37
- option_type_one = create(:option_type)
38
- create(:option_type)
39
- get spree.api_option_types_path, params: { ids: "#{option_type.id},#{option_type_one.id}" }
40
- expect(json_response.count).to eq(2)
41
-
42
- check_option_values(json_response.first["option_values"])
43
- end
44
-
45
- it "can list a single option type" do
46
- get spree.api_option_type_path(option_type)
47
- expect(json_response).to have_attributes(attributes)
48
- check_option_values(json_response["option_values"])
49
- end
50
-
51
- it "cannot create a new option type" do
52
- post spree.api_option_types_path, params: {
53
- option_type: {
54
- name: "Option Type",
55
- presentation: "Option Type"
56
- }
57
- }
58
- assert_unauthorized!
59
- end
60
-
61
- it "cannot alter an option type" do
62
- original_name = option_type.name
63
- put spree.api_option_type_path(option_type), params: {
64
- option_type: {
65
- name: "Option Type"
66
- }
67
- }
68
- assert_not_found!
69
- expect(option_type.reload.name).to eq(original_name)
70
- end
71
-
72
- it "cannot delete an option type" do
73
- delete spree.api_option_type_path(option_type)
74
- assert_not_found!
75
- expect { option_type.reload }.not_to raise_error
76
- end
77
-
78
- context "as an admin" do
79
- sign_in_as_admin!
80
-
81
- it "can create an option type" do
82
- post spree.api_option_types_path, params: {
83
- option_type: {
84
- name: "Option Type",
85
- presentation: "Option Type"
86
- }
87
- }
88
- expect(json_response).to have_attributes(attributes)
89
- expect(response.status).to eq(201)
90
- end
91
-
92
- it "cannot create an option type with invalid attributes" do
93
- post spree.api_option_types_path, params: { option_type: {} }
94
- expect(response.status).to eq(422)
95
- end
96
-
97
- it "can update an option type" do
98
- put spree.api_option_type_path(option_type.id), params: { option_type: { name: "Option Type" } }
99
- expect(response.status).to eq(200)
100
-
101
- option_type.reload
102
- expect(option_type.name).to eq("Option Type")
103
- end
104
-
105
- it "cannot update an option type with invalid attributes" do
106
- put spree.api_option_type_path(option_type.id), params: { option_type: { name: "" } }
107
- expect(response.status).to eq(422)
108
- end
109
-
110
- it "can delete an option type" do
111
- delete spree.api_option_type_path(option_type.id)
112
- expect(response.status).to eq(204)
113
- end
114
- end
115
- end
116
- end
@@ -1,138 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- module Spree
6
- describe Api::OptionValuesController, type: :request do
7
- let(:attributes) { [:id, :name, :presentation, :option_type_name, :option_type_name] }
8
- let!(:option_value) { create(:option_value) }
9
- let!(:option_type) { option_value.option_type }
10
-
11
- before do
12
- stub_authentication!
13
- end
14
-
15
- def check_option_values(option_values)
16
- expect(option_values.count).to eq(1)
17
- expect(option_values.first).to have_attributes([:id, :name, :presentation,
18
- :option_type_name, :option_type_id])
19
- end
20
-
21
- context "without any option type scoping" do
22
- before do
23
- # Create another option value with a brand new option type
24
- create(:option_value, option_type: create(:option_type))
25
- end
26
-
27
- it "can retrieve a list of all option values" do
28
- get spree.api_option_values_path
29
- expect(json_response.count).to eq(2)
30
- expect(json_response.first).to have_attributes(attributes)
31
- end
32
- end
33
-
34
- context "for a particular option type" do
35
- let(:resource_scoping) { { option_type_id: option_type.id } }
36
-
37
- it "can list all option values" do
38
- get spree.api_option_values_path
39
- expect(json_response.count).to eq(1)
40
- expect(json_response.first).to have_attributes(attributes)
41
- end
42
-
43
- it "can search for an option type" do
44
- create(:option_value, name: "buzz")
45
- get spree.api_option_values_path, params: { q: { name_cont: option_value.name } }
46
- expect(json_response.count).to eq(1)
47
- expect(json_response.first).to have_attributes(attributes)
48
- end
49
-
50
- it "can retrieve a list of option types" do
51
- option_value_one = create(:option_value, option_type: option_type)
52
- create(:option_value, option_type: option_type)
53
- get spree.api_option_values_path, params: { ids: [option_value.id, option_value_one.id] }
54
- expect(json_response.count).to eq(2)
55
- end
56
-
57
- it "can list a single option value" do
58
- get spree.api_option_value_path(option_value.id)
59
- expect(json_response).to have_attributes(attributes)
60
- end
61
-
62
- it "cannot create a new option value" do
63
- post spree.api_option_type_option_values_path(option_type), params: {
64
- option_value: {
65
- name: "Option Value",
66
- presentation: "Option Value"
67
- }
68
- }
69
- assert_unauthorized!
70
- end
71
-
72
- it "cannot alter an option value" do
73
- original_name = option_type.name
74
- put spree.api_option_value_path(option_value.id), params: {
75
- id: option_type.id,
76
- option_value: {
77
- name: "Option Value"
78
- }
79
- }
80
- assert_not_found!
81
- expect(option_type.reload.name).to eq(original_name)
82
- end
83
-
84
- it "cannot delete an option value" do
85
- delete spree.api_option_value_path(option_value)
86
- assert_not_found!
87
- expect { option_type.reload }.not_to raise_error
88
- end
89
-
90
- context "as an admin" do
91
- sign_in_as_admin!
92
-
93
- it "can create an option value" do
94
- post spree.api_option_type_option_values_path(option_type), params: {
95
- option_value: {
96
- name: "Option Value",
97
- presentation: "Option Value",
98
- }
99
- }
100
- expect(json_response).to have_attributes(attributes)
101
- expect(response.status).to eq(201)
102
- end
103
-
104
- it "cannot create an option type with invalid attributes" do
105
- post spree.api_option_type_option_values_path(option_type), params: { option_value: { name: "" } }
106
- expect(response.status).to eq(422)
107
- end
108
-
109
- it "can update an option value" do
110
- put spree.api_option_value_path(option_value.id), params: { option_value: {
111
- name: "Option Value"
112
- } }
113
- expect(response.status).to eq(200)
114
-
115
- option_value.reload
116
- expect(option_value.name).to eq("Option Value")
117
- end
118
-
119
- it "permits the correct attributes" do
120
- expect_any_instance_of(Spree::Api::OptionValuesController).to receive(:permitted_option_value_attributes)
121
- put spree.api_option_value_path(option_value), params: { option_value: { name: "" } }
122
- end
123
-
124
- it "cannot update an option value with invalid attributes" do
125
- put spree.api_option_value_path(option_value), params: { option_value: {
126
- name: ""
127
- } }
128
- expect(response.status).to eq(422)
129
- end
130
-
131
- it "can delete an option value" do
132
- delete spree.api_option_value_path(option_value)
133
- expect(response.status).to eq(204)
134
- end
135
- end
136
- end
137
- end
138
- end