solidus_core 1.0.2 → 1.0.3

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 (216) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -0
  3. data/Gemfile +3 -0
  4. data/Rakefile +16 -0
  5. data/script/rails +9 -0
  6. data/solidus_core.gemspec +48 -0
  7. data/spec/fixtures/thinking-cat.jpg +0 -0
  8. data/spec/helpers/base_helper_spec.rb +173 -0
  9. data/spec/helpers/order_helper_spec.rb +12 -0
  10. data/spec/helpers/products_helper_spec.rb +220 -0
  11. data/spec/helpers/taxons_helper_spec.rb +17 -0
  12. data/spec/lib/calculated_adjustments_spec.rb +7 -0
  13. data/spec/lib/i18n_spec.rb +123 -0
  14. data/spec/lib/search/base_spec.rb +86 -0
  15. data/spec/lib/search/variant_spec.rb +92 -0
  16. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +66 -0
  17. data/spec/lib/spree/core/controller_helpers/order_spec.rb +92 -0
  18. data/spec/lib/spree/core/controller_helpers/search_spec.rb +17 -0
  19. data/spec/lib/spree/core/controller_helpers/store_spec.rb +16 -0
  20. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +39 -0
  21. data/spec/lib/spree/core/current_store_spec.rb +36 -0
  22. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +22 -0
  23. data/spec/lib/spree/core/importer/order_spec.rb +431 -0
  24. data/spec/lib/spree/core/role_configuration_spec.rb +138 -0
  25. data/spec/lib/spree/core/validators/email_spec.rb +48 -0
  26. data/spec/lib/spree/localized_number_spec.rb +38 -0
  27. data/spec/lib/spree/migrations_spec.rb +36 -0
  28. data/spec/lib/spree/money_spec.rb +127 -0
  29. data/spec/lib/tasks/exchanges_spec.rb +231 -0
  30. data/spec/lib/tasks/migrations/copy_shipped_shipments_to_cartons_spec.rb +115 -0
  31. data/spec/lib/tasks/order_capturing_spec.rb +56 -0
  32. data/spec/mailers/carton_mailer_spec.rb +43 -0
  33. data/spec/mailers/order_mailer_spec.rb +122 -0
  34. data/spec/mailers/reimbursement_mailer_spec.rb +40 -0
  35. data/spec/mailers/test_mailer_spec.rb +15 -0
  36. data/spec/models/spree/ability_spec.rb +276 -0
  37. data/spec/models/spree/address_spec.rb +250 -0
  38. data/spec/models/spree/adjustment_reason_spec.rb +13 -0
  39. data/spec/models/spree/adjustment_spec.rb +177 -0
  40. data/spec/models/spree/app_configuration_spec.rb +20 -0
  41. data/spec/models/spree/asset_spec.rb +24 -0
  42. data/spec/models/spree/calculator/default_tax_spec.rb +127 -0
  43. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +25 -0
  44. data/spec/models/spree/calculator/flat_rate_spec.rb +47 -0
  45. data/spec/models/spree/calculator/flexi_rate_spec.rb +41 -0
  46. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +15 -0
  47. data/spec/models/spree/calculator/price_sack_spec.rb +30 -0
  48. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +51 -0
  49. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +23 -0
  50. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +13 -0
  51. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +52 -0
  52. data/spec/models/spree/calculator/shipping/per_item_spec.rb +20 -0
  53. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +30 -0
  54. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +36 -0
  55. data/spec/models/spree/calculator/tiered_percent_spec.rb +47 -0
  56. data/spec/models/spree/calculator_spec.rb +36 -0
  57. data/spec/models/spree/carton_spec.rb +133 -0
  58. data/spec/models/spree/classification_spec.rb +15 -0
  59. data/spec/models/spree/concerns/display_money_spec.rb +43 -0
  60. data/spec/models/spree/concerns/user_methods_spec.rb +41 -0
  61. data/spec/models/spree/credit_card_spec.rb +334 -0
  62. data/spec/models/spree/customer_return_spec.rb +276 -0
  63. data/spec/models/spree/exchange_spec.rb +79 -0
  64. data/spec/models/spree/gateway/bogus_simple.rb +20 -0
  65. data/spec/models/spree/gateway/bogus_spec.rb +13 -0
  66. data/spec/models/spree/gateway_spec.rb +82 -0
  67. data/spec/models/spree/inventory_unit_spec.rb +307 -0
  68. data/spec/models/spree/item_adjustments_spec.rb +256 -0
  69. data/spec/models/spree/line_item_spec.rb +191 -0
  70. data/spec/models/spree/option_type_spec.rb +14 -0
  71. data/spec/models/spree/option_value_spec.rb +22 -0
  72. data/spec/models/spree/order/address_spec.rb +50 -0
  73. data/spec/models/spree/order/adjustments_spec.rb +39 -0
  74. data/spec/models/spree/order/callbacks_spec.rb +42 -0
  75. data/spec/models/spree/order/checkout_spec.rb +902 -0
  76. data/spec/models/spree/order/currency_updater_spec.rb +32 -0
  77. data/spec/models/spree/order/finalizing_spec.rb +111 -0
  78. data/spec/models/spree/order/payment_spec.rb +210 -0
  79. data/spec/models/spree/order/risk_assessment_spec.rb +68 -0
  80. data/spec/models/spree/order/state_machine_spec.rb +221 -0
  81. data/spec/models/spree/order/tax_spec.rb +84 -0
  82. data/spec/models/spree/order/totals_spec.rb +24 -0
  83. data/spec/models/spree/order/updating_spec.rb +18 -0
  84. data/spec/models/spree/order/validations_spec.rb +15 -0
  85. data/spec/models/spree/order_cancellations_spec.rb +120 -0
  86. data/spec/models/spree/order_capturing_spec.rb +116 -0
  87. data/spec/models/spree/order_contents_spec.rb +265 -0
  88. data/spec/models/spree/order_inventory_spec.rb +228 -0
  89. data/spec/models/spree/order_mutex_spec.rb +85 -0
  90. data/spec/models/spree/order_promotion_spec.rb +31 -0
  91. data/spec/models/spree/order_shipping_spec.rb +247 -0
  92. data/spec/models/spree/order_spec.rb +1412 -0
  93. data/spec/models/spree/order_stock_location_spec.rb +18 -0
  94. data/spec/models/spree/order_updater_spec.rb +299 -0
  95. data/spec/models/spree/payment_method/store_credit_spec.rb +294 -0
  96. data/spec/models/spree/payment_method_spec.rb +96 -0
  97. data/spec/models/spree/payment_spec.rb +1044 -0
  98. data/spec/models/spree/permission_sets/base_spec.rb +12 -0
  99. data/spec/models/spree/permission_sets/configuration_display.rb +82 -0
  100. data/spec/models/spree/permission_sets/configuration_management_spec.rb +50 -0
  101. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +22 -0
  102. data/spec/models/spree/permission_sets/order_display_spec.rb +49 -0
  103. data/spec/models/spree/permission_sets/order_management_spec.rb +36 -0
  104. data/spec/models/spree/permission_sets/product_display_spec.rb +60 -0
  105. data/spec/models/spree/permission_sets/product_management_spec.rb +40 -0
  106. data/spec/models/spree/permission_sets/promotion_display_spec.rb +34 -0
  107. data/spec/models/spree/permission_sets/promotion_management_spec.rb +26 -0
  108. data/spec/models/spree/permission_sets/report_display_spec.rb +24 -0
  109. data/spec/models/spree/permission_sets/restricted_transfer_management_spec.rb +132 -0
  110. data/spec/models/spree/permission_sets/stock_display_spec.rb +26 -0
  111. data/spec/models/spree/permission_sets/stock_management_spec.rb +24 -0
  112. data/spec/models/spree/permission_sets/user_display_spec.rb +36 -0
  113. data/spec/models/spree/permission_sets/user_management_spec.rb +28 -0
  114. data/spec/models/spree/preference_spec.rb +80 -0
  115. data/spec/models/spree/preferences/configuration_spec.rb +30 -0
  116. data/spec/models/spree/preferences/preferable_spec.rb +294 -0
  117. data/spec/models/spree/preferences/scoped_store_spec.rb +58 -0
  118. data/spec/models/spree/preferences/static_model_preferences_spec.rb +78 -0
  119. data/spec/models/spree/preferences/statically_configurable_spec.rb +60 -0
  120. data/spec/models/spree/preferences/store_spec.rb +39 -0
  121. data/spec/models/spree/price_spec.rb +42 -0
  122. data/spec/models/spree/product/scopes_spec.rb +148 -0
  123. data/spec/models/spree/product_duplicator_spec.rb +103 -0
  124. data/spec/models/spree/product_filter_spec.rb +26 -0
  125. data/spec/models/spree/product_property_spec.rb +20 -0
  126. data/spec/models/spree/product_spec.rb +437 -0
  127. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +96 -0
  128. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +165 -0
  129. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +115 -0
  130. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +40 -0
  131. data/spec/models/spree/promotion/rules/first_order_spec.rb +75 -0
  132. data/spec/models/spree/promotion/rules/item_total_spec.rb +67 -0
  133. data/spec/models/spree/promotion/rules/nth_order_spec.rb +70 -0
  134. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +42 -0
  135. data/spec/models/spree/promotion/rules/option_value_spec.rb +94 -0
  136. data/spec/models/spree/promotion/rules/product_spec.rb +143 -0
  137. data/spec/models/spree/promotion/rules/taxon_spec.rb +102 -0
  138. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +27 -0
  139. data/spec/models/spree/promotion/rules/user_spec.rb +37 -0
  140. data/spec/models/spree/promotion_builder_spec.rb +118 -0
  141. data/spec/models/spree/promotion_category_spec.rb +17 -0
  142. data/spec/models/spree/promotion_code/code_builder_spec.rb +79 -0
  143. data/spec/models/spree/promotion_code_spec.rb +187 -0
  144. data/spec/models/spree/promotion_handler/cart_spec.rb +114 -0
  145. data/spec/models/spree/promotion_handler/coupon_spec.rb +335 -0
  146. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +47 -0
  147. data/spec/models/spree/promotion_handler/page_spec.rb +44 -0
  148. data/spec/models/spree/promotion_rule_spec.rb +28 -0
  149. data/spec/models/spree/promotion_spec.rb +767 -0
  150. data/spec/models/spree/refund_spec.rb +204 -0
  151. data/spec/models/spree/reimbursement/credit_spec.rb +36 -0
  152. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +140 -0
  153. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +83 -0
  154. data/spec/models/spree/reimbursement_performer_spec.rb +30 -0
  155. data/spec/models/spree/reimbursement_spec.rb +231 -0
  156. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +51 -0
  157. data/spec/models/spree/reimbursement_type/credit_spec.rb +53 -0
  158. data/spec/models/spree/reimbursement_type/exchange_spec.rb +46 -0
  159. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +107 -0
  160. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +97 -0
  161. data/spec/models/spree/return_authorization_spec.rb +290 -0
  162. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +77 -0
  163. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +58 -0
  164. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +85 -0
  165. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +32 -0
  166. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +29 -0
  167. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +35 -0
  168. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +65 -0
  169. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +43 -0
  170. data/spec/models/spree/return_item_spec.rb +775 -0
  171. data/spec/models/spree/returns_calculator_spec.rb +14 -0
  172. data/spec/models/spree/shipment_spec.rb +709 -0
  173. data/spec/models/spree/shipping_calculator_spec.rb +45 -0
  174. data/spec/models/spree/shipping_method_spec.rb +88 -0
  175. data/spec/models/spree/shipping_rate_spec.rb +142 -0
  176. data/spec/models/spree/state_spec.rb +14 -0
  177. data/spec/models/spree/stock/availability_validator_spec.rb +83 -0
  178. data/spec/models/spree/stock/coordinator_spec.rb +116 -0
  179. data/spec/models/spree/stock/differentiator_spec.rb +39 -0
  180. data/spec/models/spree/stock/estimator_spec.rb +146 -0
  181. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +38 -0
  182. data/spec/models/spree/stock/package_spec.rb +163 -0
  183. data/spec/models/spree/stock/packer_spec.rb +91 -0
  184. data/spec/models/spree/stock/prioritizer_spec.rb +125 -0
  185. data/spec/models/spree/stock/quantifier_spec.rb +115 -0
  186. data/spec/models/spree/stock/splitter/backordered_spec.rb +29 -0
  187. data/spec/models/spree/stock/splitter/base_spec.rb +21 -0
  188. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +50 -0
  189. data/spec/models/spree/stock/splitter/weight_spec.rb +29 -0
  190. data/spec/models/spree/stock_item_spec.rb +426 -0
  191. data/spec/models/spree/stock_location_spec.rb +279 -0
  192. data/spec/models/spree/stock_movement_spec.rb +56 -0
  193. data/spec/models/spree/stock_transfer_spec.rb +290 -0
  194. data/spec/models/spree/store_credit_category_spec.rb +17 -0
  195. data/spec/models/spree/store_credit_event_spec.rb +314 -0
  196. data/spec/models/spree/store_credit_spec.rb +876 -0
  197. data/spec/models/spree/store_spec.rb +55 -0
  198. data/spec/models/spree/tax_category_spec.rb +27 -0
  199. data/spec/models/spree/tax_rate_spec.rb +378 -0
  200. data/spec/models/spree/taxon_spec.rb +74 -0
  201. data/spec/models/spree/taxonomy_spec.rb +18 -0
  202. data/spec/models/spree/tracker_spec.rb +21 -0
  203. data/spec/models/spree/transfer_item_spec.rb +264 -0
  204. data/spec/models/spree/unit_cancel_spec.rb +148 -0
  205. data/spec/models/spree/user_spec.rb +223 -0
  206. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +23 -0
  207. data/spec/models/spree/variant/scopes_spec.rb +55 -0
  208. data/spec/models/spree/variant_spec.rb +546 -0
  209. data/spec/models/spree/zone_spec.rb +305 -0
  210. data/spec/spec_helper.rb +78 -0
  211. data/spec/support/big_decimal.rb +5 -0
  212. data/spec/support/concerns/default_price.rb +34 -0
  213. data/spec/support/dummy_ability.rb +4 -0
  214. data/spec/support/test_gateway.rb +2 -0
  215. metadata +229 -3
  216. data/lib/spree/testing_support/rspec-activemodel-mocks_patch.rb +0 -8
@@ -0,0 +1,276 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::CustomerReturn, :type => :model do
4
+ before do
5
+ allow_any_instance_of(Spree::Order).to receive_messages(return!: true)
6
+ end
7
+
8
+ describe ".validation" do
9
+ describe "#return_items_belong_to_same_order" do
10
+ let(:customer_return) { build(:customer_return) }
11
+
12
+ let(:first_inventory_unit) { build(:inventory_unit) }
13
+ let(:first_return_item) { build(:return_item, inventory_unit: first_inventory_unit) }
14
+
15
+ let(:second_inventory_unit) { build(:inventory_unit, order: second_order) }
16
+ let(:second_return_item) { build(:return_item, inventory_unit: second_inventory_unit) }
17
+
18
+ subject { customer_return.valid? }
19
+
20
+ before do
21
+ customer_return.return_items << first_return_item
22
+ customer_return.return_items << second_return_item
23
+ end
24
+
25
+ context "return items are part of different orders" do
26
+ let(:second_order) { create(:order) }
27
+
28
+ it "is not valid" do
29
+ expect(subject).to eq false
30
+ end
31
+
32
+ it "adds an error message" do
33
+ subject
34
+ expect(customer_return.errors.full_messages).to include(Spree.t(:return_items_cannot_be_associated_with_multiple_orders))
35
+ end
36
+
37
+ end
38
+
39
+ context "return items are part of the same order" do
40
+ let(:second_order) { first_inventory_unit.order }
41
+
42
+ it "is valid" do
43
+ expect(subject).to eq true
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ describe ".before_create" do
50
+ describe "#generate_number" do
51
+ context "number is assigned" do
52
+ let(:customer_return) { Spree::CustomerReturn.new(number: '123') }
53
+
54
+ it "should return the assigned number" do
55
+ customer_return.save
56
+ expect(customer_return.number).to eq('123')
57
+ end
58
+ end
59
+
60
+ context "number is not assigned" do
61
+ let(:customer_return) { Spree::CustomerReturn.new(number: nil) }
62
+
63
+ before do
64
+ allow(customer_return).to receive_messages(valid?: true, process_return!: true)
65
+ end
66
+
67
+ it "should assign number with random CR number" do
68
+ customer_return.save
69
+ expect(customer_return.number).to match(/CR\d{9}/)
70
+ end
71
+ end
72
+ end
73
+ end
74
+
75
+ describe "#total" do
76
+ let(:pre_tax_amount) { 15.0 }
77
+ let(:tax_amount) { 5.0 }
78
+ let(:customer_return) { create(:customer_return, line_items_count: 2) }
79
+
80
+ before do
81
+ Spree::ReturnItem.where(customer_return_id: customer_return.id).update_all(pre_tax_amount: pre_tax_amount, additional_tax_total: tax_amount)
82
+ customer_return.reload
83
+ end
84
+
85
+ subject { customer_return.total }
86
+
87
+ it "returns the sum of the return item's total amount" do
88
+ expect(subject).to eq ((pre_tax_amount * 2) + (tax_amount * 2))
89
+ end
90
+ end
91
+
92
+ describe "#display_total" do
93
+ let(:customer_return) { Spree::CustomerReturn.new }
94
+
95
+ it "returns a Spree::Money" do
96
+ allow(customer_return).to receive_messages(total: 21.22)
97
+ expect(customer_return.display_total).to eq(Spree::Money.new(21.22))
98
+ end
99
+ end
100
+
101
+ describe "#pre_tax_total" do
102
+ let(:pre_tax_amount) { 15.0 }
103
+ let(:customer_return) { create(:customer_return, line_items_count: 2) }
104
+
105
+ before do
106
+ Spree::ReturnItem.where(customer_return_id: customer_return.id).update_all(pre_tax_amount: pre_tax_amount)
107
+ end
108
+
109
+ subject { customer_return.pre_tax_total }
110
+
111
+ it "returns the sum of the return item's pre_tax_amount" do
112
+ expect(subject).to eq (pre_tax_amount * 2)
113
+ end
114
+ end
115
+
116
+ describe "#display_pre_tax_total" do
117
+ let(:customer_return) { Spree::CustomerReturn.new }
118
+
119
+ it "returns a Spree::Money" do
120
+ allow(customer_return).to receive_messages(pre_tax_total: 21.22)
121
+ expect(customer_return.display_pre_tax_total).to eq(Spree::Money.new(21.22))
122
+ end
123
+ end
124
+
125
+ describe "#order" do
126
+ let(:return_item) { create(:return_item) }
127
+ let(:customer_return) { build(:customer_return, return_items: [return_item]) }
128
+
129
+ subject { customer_return.order }
130
+
131
+ it "returns the order associated with the return item's inventory unit" do
132
+ expect(subject).to eq return_item.inventory_unit.order
133
+ end
134
+ end
135
+
136
+ describe "#order_id" do
137
+ subject { customer_return.order_id }
138
+
139
+ context "return item is not associated yet" do
140
+ let(:customer_return) { build(:customer_return) }
141
+
142
+ it "is nil" do
143
+ expect(subject).to be_nil
144
+ end
145
+ end
146
+
147
+ context "has an associated return item" do
148
+ let(:return_item) { create(:return_item) }
149
+ let(:customer_return) { build(:customer_return, return_items: [return_item]) }
150
+
151
+ it "is the return item's inventory unit's order id" do
152
+ expect(subject).to eq return_item.inventory_unit.order.id
153
+ end
154
+ end
155
+ end
156
+
157
+ context ".after_save" do
158
+ let(:inventory_unit) { create(:inventory_unit, state: 'shipped', order: create(:shipped_order)) }
159
+ let(:return_item) { build(:return_item, inventory_unit: inventory_unit) }
160
+
161
+ context "to the initial stock location" do
162
+
163
+ it "should mark the received inventory units are returned" do
164
+ create(:customer_return_without_return_items, return_items: [return_item], stock_location_id: inventory_unit.shipment.stock_location_id)
165
+ return_item.receive!
166
+ expect(inventory_unit.reload.state).to eq 'returned'
167
+ end
168
+
169
+ it "should update the stock item counts in the stock location" do
170
+ expect do
171
+ create(:customer_return_without_return_items, return_items: [return_item], stock_location_id: inventory_unit.shipment.stock_location_id)
172
+ return_item.receive!
173
+ end.to change { inventory_unit.find_stock_item.count_on_hand }.by(1)
174
+ end
175
+
176
+ context 'with Config.track_inventory_levels == false' do
177
+ before do
178
+ Spree::Config.track_inventory_levels = false
179
+ expect(Spree::StockItem).not_to receive(:find_by)
180
+ expect(Spree::StockMovement).not_to receive(:create!)
181
+ end
182
+
183
+ it "should NOT update the stock item counts in the stock location" do
184
+ count_on_hand = inventory_unit.find_stock_item.count_on_hand
185
+ create(:customer_return_without_return_items, return_items: [return_item], stock_location_id: inventory_unit.shipment.stock_location_id)
186
+ expect(inventory_unit.find_stock_item.count_on_hand).to eql count_on_hand
187
+ end
188
+ end
189
+ end
190
+
191
+ context "to a different stock location" do
192
+ let(:new_stock_location) { create(:stock_location, :name => "other") }
193
+
194
+ it "should update the stock item counts in new stock location" do
195
+ expect {
196
+ create(:customer_return_without_return_items, return_items: [return_item], stock_location_id: new_stock_location.id)
197
+ return_item.receive!
198
+ }.to change {
199
+ Spree::StockItem.where(variant_id: inventory_unit.variant_id, stock_location_id: new_stock_location.id).first.count_on_hand
200
+ }.by(1)
201
+ end
202
+
203
+ it "should NOT raise an error when no stock item exists in the stock location" do
204
+ inventory_unit.find_stock_item.destroy
205
+ expect { create(:customer_return_without_return_items, return_items: [return_item], stock_location_id: new_stock_location.id) }.not_to raise_error
206
+ end
207
+
208
+ it "should not update the stock item counts in the original stock location" do
209
+ count_on_hand = inventory_unit.find_stock_item.count_on_hand
210
+ create(:customer_return_without_return_items, return_items: [return_item], stock_location_id: new_stock_location.id)
211
+ expect(inventory_unit.find_stock_item.count_on_hand).to eq(count_on_hand)
212
+ end
213
+ end
214
+
215
+ context "it was not received" do
216
+
217
+ before do
218
+ return_item.update_attributes!(reception_status: "lost_in_transit")
219
+ end
220
+
221
+ it 'should not updated inventory unit to returned' do
222
+ create(:customer_return_without_return_items, return_items: [return_item], stock_location_id: inventory_unit.shipment.stock_location_id)
223
+ expect(inventory_unit.reload.state).to eq 'shipped'
224
+ end
225
+
226
+ it "should not update the stock item counts in the stock location" do
227
+ expect do
228
+ create(:customer_return_without_return_items, return_items: [return_item], stock_location_id: inventory_unit.shipment.stock_location_id)
229
+ end.to_not change { inventory_unit.find_stock_item.count_on_hand }
230
+ end
231
+ end
232
+ end
233
+
234
+ describe '#fully_reimbursed?' do
235
+ let(:customer_return) { create(:customer_return) }
236
+
237
+ let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) }
238
+
239
+ subject { customer_return.fully_reimbursed? }
240
+
241
+ context 'when some return items are undecided' do
242
+ it { is_expected.to be false }
243
+ end
244
+
245
+ context 'when all return items are decided' do
246
+
247
+ context 'when all return items are rejected' do
248
+ before { customer_return.return_items.each(&:reject!) }
249
+
250
+ it { is_expected.to be true }
251
+ end
252
+
253
+ context 'when all return items are accepted' do
254
+ before { customer_return.return_items.each(&:accept!) }
255
+
256
+ context 'when some return items have no reimbursement' do
257
+ it { is_expected.to be false }
258
+ end
259
+
260
+ context 'when all return items have a reimbursement' do
261
+ let!(:reimbursement) { create(:reimbursement, customer_return: customer_return) }
262
+
263
+ context 'when some reimbursements are not reimbursed' do
264
+ it { is_expected.to be false }
265
+ end
266
+
267
+ context 'when all reimbursements are reimbursed' do
268
+ before { reimbursement.perform! }
269
+
270
+ it { is_expected.to be true }
271
+ end
272
+ end
273
+ end
274
+ end
275
+ end
276
+ end
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+
3
+ module Spree
4
+ describe Exchange, :type => :model do
5
+ let(:order) { Spree::Order.new }
6
+
7
+ let(:return_item_1) { build(:exchange_return_item) }
8
+ let(:return_item_2) { build(:exchange_return_item) }
9
+ let(:return_items) { [return_item_1, return_item_2] }
10
+ let(:exchange) { Exchange.new(order, return_items) }
11
+
12
+ describe "#description" do
13
+ before do
14
+ allow(return_item_1).to receive(:variant) { double(options_text: "foo") }
15
+ allow(return_item_1).to receive(:exchange_variant) { double(options_text: "bar") }
16
+ allow(return_item_2).to receive(:variant) { double(options_text: "baz") }
17
+ allow(return_item_2).to receive(:exchange_variant) { double(options_text: "qux") }
18
+ end
19
+
20
+ it "describes the return items' change in options" do
21
+ expect(exchange.description).to match /foo => bar/
22
+ expect(exchange.description).to match /baz => qux/
23
+ end
24
+ end
25
+
26
+ describe "#display_amount" do
27
+ it "is the total amount of all return items" do
28
+ expect(exchange.display_amount).to eq Spree::Money.new(0.0)
29
+ end
30
+ end
31
+
32
+ describe "#perform!" do
33
+ let(:return_item) { create(:exchange_return_item, inventory_unit: inventory_unit) }
34
+ let(:return_items) { [return_item] }
35
+
36
+ let(:inventory_unit) { create(:inventory_unit, order: order, line_item: line_item) }
37
+ let(:order) { create(:shipped_order, line_items_count: 1) }
38
+ let(:line_item) { order.line_items.first }
39
+
40
+ subject { exchange.perform! }
41
+ before { return_item.exchange_variant.stock_items.first.adjust_count_on_hand(20) }
42
+
43
+ it "creates shipments for the order with the return items exchange inventory units" do
44
+ expect { subject }.to change { order.shipments.count }.by(1)
45
+ new_shipment = order.shipments.last
46
+ expect(new_shipment).to be_ready
47
+ new_inventory_units = new_shipment.inventory_units
48
+ expect(new_inventory_units.count).to eq 1
49
+ expect(new_inventory_units.first.original_return_item).to eq return_item
50
+ expect(new_inventory_units.first.line_item).to eq return_item.inventory_unit.line_item
51
+ end
52
+
53
+ context "when it cannot create shipments for all items" do
54
+ before do
55
+ StockItem.where(:variant_id => return_item.exchange_variant_id).destroy_all
56
+ end
57
+
58
+ it 'raises an UnableToCreateShipments error' do
59
+ expect {
60
+ subject
61
+ }.to raise_error(Spree::Exchange::UnableToCreateShipments)
62
+ end
63
+ end
64
+ end
65
+
66
+ describe "#to_key" do # for dom_id
67
+ it { expect(Exchange.new(nil, nil).to_key).to be_nil }
68
+ end
69
+
70
+ describe ".param_key" do # for dom_id
71
+ it { expect(Exchange.param_key).to eq "spree_exchange" }
72
+ end
73
+
74
+ describe ".model_name" do # for dom_id
75
+ it { expect(Exchange.model_name).to eq Spree::Exchange }
76
+ end
77
+
78
+ end
79
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Gateway::BogusSimple, :type => :model do
4
+
5
+ subject { Spree::Gateway::BogusSimple.new }
6
+
7
+ # regression test for #3824
8
+ describe "#capture" do
9
+ it "returns success with the right response code" do
10
+ response = subject.capture(123, '12345', {})
11
+ expect(response.message).to include("success")
12
+ end
13
+
14
+ it "returns failure with the wrong response code" do
15
+ response = subject.capture(123, 'wrong', {})
16
+ expect(response.message).to include("failure")
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ module Spree
4
+ describe Gateway::Bogus, :type => :model do
5
+ let(:bogus) { create(:credit_card_payment_method) }
6
+ let!(:cc) { create(:credit_card, payment_method: bogus, gateway_customer_profile_id: "BGS-RERTERT") }
7
+
8
+ it "disable recurring contract by destroying payment source" do
9
+ bogus.disable_customer_profile(cc)
10
+ expect(cc.gateway_customer_profile_id).to be_nil
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,82 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Gateway, :type => :model do
4
+ class Provider
5
+ def initialize(options)
6
+ end
7
+
8
+ def imaginary_method
9
+ 'imaginary!'
10
+ end
11
+ end
12
+
13
+ class TestGateway < Spree::Gateway
14
+ def provider_class
15
+ Provider
16
+ end
17
+ end
18
+
19
+ it "passes through all arguments on a method_missing call" do
20
+ expect(TestGateway.new.imaginary_method).to eq 'imaginary!'
21
+ end
22
+
23
+ context "fetching payment sources" do
24
+ let(:user) { create :user }
25
+ let(:order) { Spree::Order.create(user: user, completed_at: completed_at) }
26
+
27
+ let(:payment_method) { create(:credit_card_payment_method) }
28
+
29
+ let(:cc) do
30
+ create(:credit_card,
31
+ payment_method: payment_method,
32
+ gateway_customer_profile_id: "EFWE",
33
+ user: cc_user)
34
+ end
35
+
36
+ let(:payment) do
37
+ create(:payment, order: order, source: cc, payment_method: payment_method)
38
+ end
39
+
40
+ context 'order is not complete and credit card user is nil' do
41
+ let(:cc_user) { nil }
42
+ let(:completed_at) { nil }
43
+
44
+ it "finds no credit cards associated to the order" do
45
+ expect(payment_method.reusable_sources(payment.order)).to be_empty
46
+ end
47
+ end
48
+
49
+ context 'order is complete but credit card user is nil' do
50
+ let(:cc_user) { nil }
51
+ let(:completed_at) { Date.yesterday }
52
+
53
+ it "finds credit cards associated on a order completed" do
54
+ expect(payment_method.reusable_sources(payment.order)).to eq [cc]
55
+ end
56
+ end
57
+
58
+ context 'order is not complete but credit card has user' do
59
+ let(:cc_user) { user }
60
+ let(:completed_at) { nil }
61
+
62
+ it "finds credit cards associated to the user" do
63
+ expect(payment_method.reusable_sources(payment.order)).to eq [cc]
64
+ end
65
+ end
66
+ end
67
+
68
+ context 'using preference_source' do
69
+ let(:klass){ Spree::Gateway::Bogus }
70
+ before do
71
+ Spree::Config.static_model_preferences.add(klass, 'test_preference_source', server: 'bar')
72
+ end
73
+ after do
74
+ Spree::Config.static_model_preferences.for_class(klass).clear
75
+ end
76
+ let(:payment_method){ create(:credit_card_payment_method, preference_source: 'test_preference_source') }
77
+
78
+ it "reads static preferences" do
79
+ expect(payment_method.options).to eq({:server=>"bar"})
80
+ end
81
+ end
82
+ end