spree_core 3.3.0.rc1 → 3.3.0.rc2

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 (220) hide show
  1. checksums.yaml +4 -4
  2. data/app/helpers/spree/base_helper.rb +1 -1
  3. data/app/mailers/spree/base_mailer.rb +5 -0
  4. data/app/models/spree/ability.rb +4 -1
  5. data/app/models/spree/image.rb +6 -2
  6. data/app/models/spree/order.rb +10 -9
  7. data/app/models/spree/order/payments.rb +1 -1
  8. data/app/models/spree/payment_method/store_credit.rb +4 -0
  9. data/app/models/spree/shipment.rb +2 -0
  10. data/app/views/spree/shared/_base_mailer_header.html.erb +5 -1
  11. data/app/views/spree/shared/_mailer_line_item.html.erb +5 -1
  12. data/config/routes.rb +0 -3
  13. data/lib/spree/core/components.rb +17 -0
  14. data/lib/spree/core/controller_helpers/auth.rb +3 -1
  15. data/lib/spree/core/engine.rb +1 -0
  16. data/lib/spree/core/validators/email.rb +1 -5
  17. data/lib/spree/core/version.rb +1 -1
  18. data/spree_core.gemspec +1 -1
  19. metadata +4 -204
  20. data/lib/spree/testing_support/shoulda_matcher_configuration.rb +0 -6
  21. data/spec/fixtures/thinking-cat.jpg +0 -0
  22. data/spec/helpers/base_helper_spec.rb +0 -200
  23. data/spec/helpers/products_helper_spec.rb +0 -289
  24. data/spec/lib/calculated_adjustments_spec.rb +0 -7
  25. data/spec/lib/i18n_spec.rb +0 -123
  26. data/spec/lib/search/base_spec.rb +0 -86
  27. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -103
  28. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -110
  29. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -17
  30. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -72
  31. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -39
  32. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +0 -22
  33. data/spec/lib/spree/core/importer/order_spec.rb +0 -607
  34. data/spec/lib/spree/core/number_generator_spec.rb +0 -139
  35. data/spec/lib/spree/core/token_generator_spec.rb +0 -24
  36. data/spec/lib/spree/core/validators/email_spec.rb +0 -54
  37. data/spec/lib/spree/core_spec.rb +0 -23
  38. data/spec/lib/spree/localized_number_spec.rb +0 -54
  39. data/spec/lib/spree/migrations_spec.rb +0 -36
  40. data/spec/lib/spree/money_spec.rb +0 -122
  41. data/spec/lib/tasks/exchanges_spec.rb +0 -136
  42. data/spec/mailers/order_mailer_spec.rb +0 -122
  43. data/spec/mailers/reimbursement_mailer_spec.rb +0 -52
  44. data/spec/mailers/shipment_mailer_spec.rb +0 -81
  45. data/spec/mailers/test_mailer_spec.rb +0 -38
  46. data/spec/models/spree/ability_spec.rb +0 -251
  47. data/spec/models/spree/address_spec.rb +0 -402
  48. data/spec/models/spree/adjustable/adjuster/base_spec.rb +0 -10
  49. data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +0 -211
  50. data/spec/models/spree/adjustable/adjuster/tax_spec.rb +0 -86
  51. data/spec/models/spree/adjustable/adjustments_updater_spec.rb +0 -26
  52. data/spec/models/spree/adjustment_spec.rb +0 -189
  53. data/spec/models/spree/app_configuration_spec.rb +0 -26
  54. data/spec/models/spree/asset_spec.rb +0 -28
  55. data/spec/models/spree/calculator/default_tax_spec.rb +0 -152
  56. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -25
  57. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -47
  58. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -41
  59. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -15
  60. data/spec/models/spree/calculator/price_sack_spec.rb +0 -30
  61. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -47
  62. data/spec/models/spree/calculator/shipping.rb +0 -8
  63. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -23
  64. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -13
  65. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -52
  66. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -20
  67. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -29
  68. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -40
  69. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -51
  70. data/spec/models/spree/calculator_spec.rb +0 -69
  71. data/spec/models/spree/classification_spec.rb +0 -93
  72. data/spec/models/spree/concerns/display_money_spec.rb +0 -43
  73. data/spec/models/spree/concerns/user_methods_spec.rb +0 -82
  74. data/spec/models/spree/concerns/vat_price_calculation_spec.rb +0 -66
  75. data/spec/models/spree/country_spec.rb +0 -55
  76. data/spec/models/spree/credit_card_spec.rb +0 -328
  77. data/spec/models/spree/customer_return_spec.rb +0 -240
  78. data/spec/models/spree/exchange_spec.rb +0 -75
  79. data/spec/models/spree/gateway/bogus_simple.rb +0 -20
  80. data/spec/models/spree/gateway/bogus_spec.rb +0 -13
  81. data/spec/models/spree/gateway_spec.rb +0 -61
  82. data/spec/models/spree/image_spec.rb +0 -8
  83. data/spec/models/spree/inventory_unit_spec.rb +0 -256
  84. data/spec/models/spree/line_item_spec.rb +0 -348
  85. data/spec/models/spree/option_type_prototype_spec.rb +0 -9
  86. data/spec/models/spree/option_type_spec.rb +0 -14
  87. data/spec/models/spree/option_value_spec.rb +0 -18
  88. data/spec/models/spree/order/address_spec.rb +0 -50
  89. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  90. data/spec/models/spree/order/callbacks_spec.rb +0 -42
  91. data/spec/models/spree/order/checkout_spec.rb +0 -770
  92. data/spec/models/spree/order/currency_updater_spec.rb +0 -32
  93. data/spec/models/spree/order/finalizing_spec.rb +0 -114
  94. data/spec/models/spree/order/helpers_spec.rb +0 -5
  95. data/spec/models/spree/order/payment_spec.rb +0 -214
  96. data/spec/models/spree/order/risk_assessment_spec.rb +0 -84
  97. data/spec/models/spree/order/shipments_spec.rb +0 -43
  98. data/spec/models/spree/order/state_machine_spec.rb +0 -212
  99. data/spec/models/spree/order/store_credit_spec.rb +0 -457
  100. data/spec/models/spree/order/tax_spec.rb +0 -84
  101. data/spec/models/spree/order/totals_spec.rb +0 -24
  102. data/spec/models/spree/order/updating_spec.rb +0 -18
  103. data/spec/models/spree/order/validations_spec.rb +0 -15
  104. data/spec/models/spree/order_contents_spec.rb +0 -332
  105. data/spec/models/spree/order_inventory_spec.rb +0 -247
  106. data/spec/models/spree/order_merger_spec.rb +0 -135
  107. data/spec/models/spree/order_spec.rb +0 -1067
  108. data/spec/models/spree/order_updater_spec.rb +0 -305
  109. data/spec/models/spree/payment/gateway_options_spec.rb +0 -127
  110. data/spec/models/spree/payment/store_credit_spec.rb +0 -60
  111. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -291
  112. data/spec/models/spree/payment_method_spec.rb +0 -108
  113. data/spec/models/spree/payment_spec.rb +0 -922
  114. data/spec/models/spree/preference_spec.rb +0 -80
  115. data/spec/models/spree/preferences/configuration_spec.rb +0 -30
  116. data/spec/models/spree/preferences/preferable_spec.rb +0 -344
  117. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -58
  118. data/spec/models/spree/preferences/store_spec.rb +0 -46
  119. data/spec/models/spree/price_spec.rb +0 -128
  120. data/spec/models/spree/product/scopes_spec.rb +0 -174
  121. data/spec/models/spree/product_duplicator_spec.rb +0 -102
  122. data/spec/models/spree/product_filter_spec.rb +0 -26
  123. data/spec/models/spree/product_option_type_spec.rb +0 -9
  124. data/spec/models/spree/product_promotion_rule_spec.rb +0 -9
  125. data/spec/models/spree/product_property_spec.rb +0 -26
  126. data/spec/models/spree/product_spec.rb +0 -626
  127. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -113
  128. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -148
  129. data/spec/models/spree/promotion/actions/create_line_items_spec.rb +0 -86
  130. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -36
  131. data/spec/models/spree/promotion/rules/country_spec.rb +0 -36
  132. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -75
  133. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -282
  134. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -42
  135. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -90
  136. data/spec/models/spree/promotion/rules/product_spec.rb +0 -143
  137. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -102
  138. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -27
  139. data/spec/models/spree/promotion/rules/user_spec.rb +0 -45
  140. data/spec/models/spree/promotion_action_spec.rb +0 -10
  141. data/spec/models/spree/promotion_category_spec.rb +0 -17
  142. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -102
  143. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -323
  144. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +0 -48
  145. data/spec/models/spree/promotion_handler/page_spec.rb +0 -44
  146. data/spec/models/spree/promotion_rule_spec.rb +0 -29
  147. data/spec/models/spree/promotion_rule_taxon_spec.rb +0 -9
  148. data/spec/models/spree/promotion_rule_user_spec.rb +0 -9
  149. data/spec/models/spree/promotion_spec.rb +0 -674
  150. data/spec/models/spree/property_prototype_spec.rb +0 -9
  151. data/spec/models/spree/property_spec.rb +0 -5
  152. data/spec/models/spree/prototype_spec.rb +0 -5
  153. data/spec/models/spree/prototype_taxon_spec.rb +0 -9
  154. data/spec/models/spree/refund_reason_spec.rb +0 -20
  155. data/spec/models/spree/refund_spec.rb +0 -195
  156. data/spec/models/spree/reimbursement/credit_spec.rb +0 -36
  157. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -140
  158. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -83
  159. data/spec/models/spree/reimbursement_performer_spec.rb +0 -30
  160. data/spec/models/spree/reimbursement_spec.rb +0 -188
  161. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -63
  162. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -53
  163. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -46
  164. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -55
  165. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -101
  166. data/spec/models/spree/return_authorization_reason_spec.rb +0 -7
  167. data/spec/models/spree/return_authorization_spec.rb +0 -230
  168. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -77
  169. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -58
  170. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -61
  171. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -32
  172. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -29
  173. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -35
  174. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -65
  175. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  176. data/spec/models/spree/return_item_spec.rb +0 -734
  177. data/spec/models/spree/returns_calculator_spec.rb +0 -14
  178. data/spec/models/spree/role_spec.rb +0 -7
  179. data/spec/models/spree/shipment_spec.rb +0 -744
  180. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  181. data/spec/models/spree/shipping_category_spec.rb +0 -19
  182. data/spec/models/spree/shipping_method_spec.rb +0 -125
  183. data/spec/models/spree/shipping_rate_spec.rb +0 -140
  184. data/spec/models/spree/state_spec.rb +0 -29
  185. data/spec/models/spree/stock/availability_validator_spec.rb +0 -42
  186. data/spec/models/spree/stock/content_item_spec.rb +0 -31
  187. data/spec/models/spree/stock/coordinator_spec.rb +0 -61
  188. data/spec/models/spree/stock/differentiator_spec.rb +0 -39
  189. data/spec/models/spree/stock/estimator_spec.rb +0 -202
  190. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -37
  191. data/spec/models/spree/stock/package_spec.rb +0 -182
  192. data/spec/models/spree/stock/packer_spec.rb +0 -70
  193. data/spec/models/spree/stock/prioritizer_spec.rb +0 -125
  194. data/spec/models/spree/stock/quantifier_spec.rb +0 -126
  195. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -29
  196. data/spec/models/spree/stock/splitter/base_spec.rb +0 -21
  197. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -47
  198. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -32
  199. data/spec/models/spree/stock_item_spec.rb +0 -465
  200. data/spec/models/spree/stock_location_spec.rb +0 -243
  201. data/spec/models/spree/stock_movement_spec.rb +0 -120
  202. data/spec/models/spree/stock_transfer_spec.rb +0 -50
  203. data/spec/models/spree/store_credit_event_spec.rb +0 -101
  204. data/spec/models/spree/store_credit_spec.rb +0 -798
  205. data/spec/models/spree/store_spec.rb +0 -78
  206. data/spec/models/spree/tax_category_spec.rb +0 -32
  207. data/spec/models/spree/tax_rate_spec.rb +0 -561
  208. data/spec/models/spree/taxon_spec.rb +0 -93
  209. data/spec/models/spree/taxonomy_spec.rb +0 -18
  210. data/spec/models/spree/tracker_spec.rb +0 -21
  211. data/spec/models/spree/user_spec.rb +0 -203
  212. data/spec/models/spree/variant_spec.rb +0 -818
  213. data/spec/models/spree/zone_member_spec.rb +0 -38
  214. data/spec/models/spree/zone_spec.rb +0 -472
  215. data/spec/spec_helper.rb +0 -82
  216. data/spec/support/big_decimal.rb +0 -5
  217. data/spec/support/concerns/adjustment_source.rb +0 -23
  218. data/spec/support/concerns/default_price.rb +0 -37
  219. data/spec/support/rake.rb +0 -13
  220. data/spec/support/test_gateway.rb +0 -2
@@ -1,30 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::ReimbursementPerformer, type: :model do
4
- let(:reimbursement) { create(:reimbursement, return_items_count: 1) }
5
- let(:return_item) { reimbursement.return_items.first }
6
- let(:reimbursement_type) { double("ReimbursementType") }
7
- let(:reimbursement_type_hash) { { reimbursement_type => [return_item]} }
8
-
9
- before do
10
- expect(Spree::ReimbursementPerformer).to receive(:calculate_reimbursement_types).and_return(reimbursement_type_hash)
11
- end
12
-
13
- describe ".simulate" do
14
- subject { Spree::ReimbursementPerformer.simulate(reimbursement) }
15
-
16
- it "reimburses each calculated reimbursement types with the correct return items as a simulation" do
17
- expect(reimbursement_type).to receive(:reimburse).with(reimbursement, [return_item], true)
18
- subject
19
- end
20
- end
21
-
22
- describe '.perform' do
23
- subject { Spree::ReimbursementPerformer.perform(reimbursement) }
24
-
25
- it "reimburses each calculated reimbursement types with the correct return items as a simulation" do
26
- expect(reimbursement_type).to receive(:reimburse).with(reimbursement, [return_item], false)
27
- subject
28
- end
29
- end
30
- end
@@ -1,188 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Reimbursement, type: :model do
4
-
5
- describe "#display_total" do
6
- let(:total) { 100.50 }
7
- let(:currency) { "USD" }
8
- let(:order) { Spree::Order.new(currency: currency) }
9
- let(:reimbursement) { Spree::Reimbursement.new(total: total, order: order) }
10
-
11
- subject { reimbursement.display_total }
12
-
13
- it "returns the value as a Spree::Money instance" do
14
- expect(subject).to eq Spree::Money.new(total)
15
- end
16
-
17
- it "uses the order's currency" do
18
- expect(subject.money.currency.to_s).to eq currency
19
- end
20
- end
21
-
22
- describe "#perform!" do
23
- let!(:adjustments) { [] } # placeholder to ensure it gets run prior the "before" at this level
24
-
25
- let!(:tax_rate) { nil }
26
- let!(:tax_zone) { create(:zone_with_country, default_tax: true) }
27
-
28
- let(:order) { create(:order_with_line_items, state: 'payment', line_items_count: 1, line_items_price: line_items_price, shipment_cost: 0) }
29
- let(:line_items_price) { BigDecimal.new(10) }
30
- let(:line_item) { order.line_items.first }
31
- let(:inventory_unit) { line_item.inventory_units.first }
32
- let(:payment) { build(:payment, amount: payment_amount, order: order, state: 'completed') }
33
- let(:payment_amount) { order.total }
34
- let(:customer_return) { build(:customer_return, return_items: [return_item]) }
35
- let(:return_item) { build(:return_item, inventory_unit: inventory_unit) }
36
-
37
- let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) }
38
-
39
- let(:reimbursement) { create(:reimbursement, customer_return: customer_return, order: order, return_items: [return_item]) }
40
-
41
- subject { reimbursement.perform! }
42
-
43
- before do
44
- order.shipments.each do |shipment|
45
- shipment.inventory_units.update_all state: 'shipped'
46
- shipment.update_column('state', 'shipped')
47
- end
48
- order.reload
49
- order.update_with_updater!
50
- if payment
51
- payment.save!
52
- order.next! # confirm
53
- end
54
- order.next! # completed
55
- customer_return.save!
56
- return_item.accept!
57
- end
58
-
59
- it "refunds the total amount" do
60
- subject
61
- expect(reimbursement.unpaid_amount).to eq 0
62
- end
63
-
64
- it "creates a refund" do
65
- expect {
66
- subject
67
- }.to change{ Spree::Refund.count }.by(1)
68
- expect(Spree::Refund.last.amount).to eq order.total
69
- end
70
-
71
- context 'with additional tax' do
72
- let!(:tax_rate) { create(:tax_rate, name: "Sales Tax", amount: 0.10, included_in_price: false, zone: tax_zone) }
73
-
74
- it 'saves the additional tax and refunds the total' do
75
- expect {
76
- subject
77
- }.to change { Spree::Refund.count }.by(1)
78
- return_item.reload
79
- expect(return_item.additional_tax_total).to be > 0
80
- expect(return_item.additional_tax_total).to eq line_item.additional_tax_total
81
- expect(reimbursement.total).to eq line_item.pre_tax_amount + line_item.additional_tax_total
82
- expect(Spree::Refund.last.amount).to eq line_item.pre_tax_amount + line_item.additional_tax_total
83
- end
84
- end
85
-
86
- context 'with included tax' do
87
- let!(:tax_rate) { create(:tax_rate, name: "VAT Tax", amount: 0.1, included_in_price: true, zone: tax_zone) }
88
-
89
- it 'saves the included tax and refunds the total' do
90
- expect {
91
- subject
92
- }.to change { Spree::Refund.count }.by(1)
93
- return_item.reload
94
- expect(return_item.included_tax_total).to be > 0
95
- expect(return_item.included_tax_total).to eq line_item.included_tax_total
96
- expect(reimbursement.total).to eq (line_item.pre_tax_amount + line_item.included_tax_total).round(2)
97
- expect(Spree::Refund.last.amount).to eq (line_item.pre_tax_amount + line_item.included_tax_total).round(2)
98
- end
99
- end
100
-
101
- context 'when reimbursement cannot be fully performed' do
102
- let!(:non_return_refund) { create(:refund, amount: 1, payment: payment) }
103
-
104
- it 'raises IncompleteReimbursement error' do
105
- expect { subject }.to raise_error(Spree::Reimbursement::IncompleteReimbursementError)
106
- end
107
- end
108
-
109
- context "when exchange is required" do
110
- let(:exchange_variant) { build(:variant) }
111
- before { return_item.exchange_variant = exchange_variant }
112
- it "generates an exchange shipment for the order for the exchange items" do
113
- expect { subject }.to change { order.reload.shipments.count }.by 1
114
- expect(order.shipments.last.inventory_units.first.variant).to eq exchange_variant
115
- end
116
- end
117
-
118
- it "triggers the reimbursement mailer to be sent" do
119
- expect(Spree::ReimbursementMailer).to receive(:reimbursement_email).with(reimbursement.id) { double(deliver_later: true) }
120
- subject
121
- end
122
- end
123
-
124
- describe "#return_items_requiring_exchange" do
125
- it "returns only the return items that require an exchange" do
126
- return_items = [double(exchange_required?: true), double(exchange_required?: true),double(exchange_required?: false)]
127
- allow(subject).to receive(:return_items) { return_items }
128
- expect(subject.return_items_requiring_exchange).to eq return_items.take(2)
129
- end
130
- end
131
-
132
- describe "#calculated_total" do
133
- context 'with return item amounts that would round up if added' do
134
- let(:reimbursement) { Spree::Reimbursement.new }
135
-
136
- subject { reimbursement.calculated_total }
137
-
138
- before do
139
- reimbursement.return_items << Spree::ReturnItem.new(pre_tax_amount: 10.003)
140
- reimbursement.return_items << Spree::ReturnItem.new(pre_tax_amount: 10.003)
141
- end
142
-
143
- it 'rounds down' do
144
- expect(subject).to eq 20
145
- end
146
- end
147
-
148
- context 'with a return item amount that should round up' do
149
- let(:reimbursement) { Spree::Reimbursement.new }
150
-
151
- subject { reimbursement.calculated_total }
152
-
153
- before do
154
- reimbursement.return_items << Spree::ReturnItem.new(pre_tax_amount: 19.998)
155
- end
156
-
157
- it 'rounds up' do
158
- expect(subject).to eq 20
159
- end
160
- end
161
- end
162
-
163
- describe '.build_from_customer_return' do
164
- let(:customer_return) { create(:customer_return, line_items_count: 5) }
165
-
166
- let!(:pending_return_item) { customer_return.return_items.first.tap { |ri| ri.update!(acceptance_status: 'pending') } }
167
- let!(:accepted_return_item) { customer_return.return_items.second.tap(&:accept!) }
168
- let!(:rejected_return_item) { customer_return.return_items.third.tap(&:reject!) }
169
- let!(:manual_intervention_return_item) { customer_return.return_items.fourth.tap(&:require_manual_intervention!) }
170
- let!(:already_reimbursed_return_item) { customer_return.return_items.fifth }
171
-
172
- let!(:previous_reimbursement) { create(:reimbursement, order: customer_return.order, return_items: [already_reimbursed_return_item]) }
173
-
174
- subject { Spree::Reimbursement.build_from_customer_return(customer_return) }
175
-
176
- it 'connects to the accepted return items' do
177
- expect(subject.return_items.to_a).to eq [accepted_return_item]
178
- end
179
-
180
- it 'connects to the order' do
181
- expect(subject.order).to eq customer_return.order
182
- end
183
-
184
- it 'connects to the customer_return' do
185
- expect(subject.customer_return).to eq customer_return
186
- end
187
- end
188
- end
@@ -1,63 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::ReimbursementTaxCalculator, type: :model do
4
-
5
- let!(:tax_rate) { nil }
6
-
7
- let(:reimbursement) { create(:reimbursement, return_items_count: 1) }
8
- let(:return_item) { reimbursement.return_items.first }
9
- let(:line_item) { return_item.inventory_unit.line_item }
10
-
11
- subject do
12
- Spree::ReimbursementTaxCalculator.call(reimbursement)
13
- end
14
-
15
- context 'without taxes' do
16
- let!(:tax_rate) { nil }
17
-
18
- it 'leaves the return items additional_tax_total and included_tax_total at zero' do
19
- subject
20
-
21
- expect(return_item.additional_tax_total).to eq 0
22
- expect(return_item.included_tax_total).to eq 0
23
- end
24
- end
25
-
26
- context 'with additional tax' do
27
- let!(:tax_rate) do
28
- create :tax_rate,
29
- name: "Sales Tax",
30
- amount: 0.10,
31
- included_in_price: false,
32
- tax_category: create(:tax_category),
33
- zone: create(:zone_with_country, default_tax: true)
34
- end
35
-
36
- it 'sets additional_tax_total on the return items' do
37
- subject
38
- return_item.reload
39
-
40
- expect(return_item.additional_tax_total).to be > 0
41
- expect(return_item.additional_tax_total).to eq line_item.additional_tax_total
42
- end
43
- end
44
-
45
- context 'with included tax' do
46
- let!(:tax_rate) do
47
- create :tax_rate,
48
- name: "VAT Tax",
49
- amount: 0.10,
50
- included_in_price: true,
51
- tax_category: create(:tax_category),
52
- zone: create(:zone_with_country, default_tax: true)
53
- end
54
-
55
- it 'sets included_tax_total on the return items' do
56
- subject
57
- return_item.reload
58
-
59
- expect(return_item.included_tax_total).to be > 0
60
- expect(return_item.included_tax_total).to eq line_item.included_tax_total
61
- end
62
- end
63
- end
@@ -1,53 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
- describe ReimbursementType::Credit, type: :model do
5
- let(:reimbursement) { create(:reimbursement, return_items_count: 1) }
6
- let(:return_item) { reimbursement.return_items.first }
7
- let(:payment) { reimbursement.order.payments.first }
8
- let(:simulate) { false }
9
- let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) }
10
- let(:creditable) { DummyCreditable.new(amount: 99.99) }
11
-
12
- class DummyCreditable < Spree::Base
13
- attr_accessor :amount
14
- self.table_name = 'spree_payments' # Your creditable class should not use this table
15
- end
16
-
17
- subject { Spree::ReimbursementType::Credit.reimburse(reimbursement, [return_item], simulate)}
18
-
19
- before do
20
- reimbursement.update!(total: reimbursement.calculated_total)
21
- allow(Spree::ReimbursementType::Credit).to receive(:create_creditable).and_return(creditable)
22
- end
23
-
24
- describe '.reimburse' do
25
- context 'simulate is true' do
26
- let(:simulate) { true }
27
-
28
- it 'creates one readonly lump credit for all outstanding balance payable to the customer' do
29
- expect(subject.map(&:class)).to eq [Spree::Reimbursement::Credit]
30
- expect(subject.map(&:readonly?)).to eq [true]
31
- expect(subject.sum(&:amount)).to eq reimbursement.return_items.to_a.sum(&:total)
32
- end
33
-
34
- it 'does not save to the database' do
35
- expect { subject }.to_not change { Spree::Reimbursement::Credit.count }
36
- end
37
- end
38
-
39
- context 'simulate is false' do
40
- let(:simulate) { false }
41
-
42
- before do
43
- expect(creditable).to receive(:save).and_return(true)
44
- end
45
-
46
- it 'creates one lump credit for all outstanding balance payable to the customer' do
47
- expect { subject }.to change { Spree::Reimbursement::Credit.count }.by(1)
48
- expect(subject.sum(&:amount)).to eq reimbursement.return_items.to_a.sum(&:total)
49
- end
50
- end
51
- end
52
- end
53
- end
@@ -1,46 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
- describe ReimbursementType::Exchange, type: :model do
5
- describe '.reimburse' do
6
- let(:reimbursement) { create(:reimbursement, return_items_count: 1) }
7
- let(:return_items) { reimbursement.return_items }
8
- let(:new_exchange) { double("Exchange") }
9
- let(:simulate) { true }
10
-
11
- subject { Spree::ReimbursementType::Exchange.reimburse(reimbursement, return_items, simulate)}
12
-
13
- context 'return items are supplied' do
14
- before do
15
- expect(Spree::Exchange).to receive(:new).with(reimbursement.order, return_items).and_return(new_exchange)
16
- end
17
-
18
- context "simulate is true" do
19
-
20
- it 'does not perform an exchange and returns the exchange object' do
21
- expect(new_exchange).not_to receive(:perform!)
22
- expect(subject).to eq [new_exchange]
23
- end
24
- end
25
-
26
- context "simulate is false" do
27
- let(:simulate) { false }
28
-
29
- it 'performs an exchange and returns the exchange object' do
30
- expect(new_exchange).to receive(:perform!)
31
- expect(subject).to eq [new_exchange]
32
- end
33
- end
34
- end
35
-
36
- context "no return items are supplied" do
37
- let(:return_items) { [] }
38
-
39
- it 'does not perform an exchange and returns an empty array' do
40
- expect(new_exchange).not_to receive(:perform!)
41
- expect(subject).to eq []
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,55 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
- describe ReimbursementType::OriginalPayment, type: :model do
5
- let(:reimbursement) { create(:reimbursement, return_items_count: 1) }
6
- let(:return_item) { reimbursement.return_items.first }
7
- let(:payment) { reimbursement.order.payments.first }
8
- let(:simulate) { false }
9
- let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) }
10
-
11
- subject { Spree::ReimbursementType::OriginalPayment.reimburse(reimbursement, [return_item], simulate)}
12
-
13
- before { reimbursement.update!(total: reimbursement.calculated_total) }
14
-
15
- describe ".reimburse" do
16
- context "simulate is true" do
17
- let(:simulate) { true }
18
-
19
- it "returns an array of readonly refunds" do
20
- expect(subject.map(&:class)).to eq [Spree::Refund]
21
- expect(subject.map(&:readonly?)).to eq [true]
22
- end
23
- end
24
-
25
- context "simulate is false" do
26
- it 'performs the refund' do
27
- expect {
28
- subject
29
- }.to change { payment.refunds.count }.by(1)
30
- expect(payment.refunds.sum(:amount)).to eq reimbursement.return_items.to_a.sum(&:total)
31
- end
32
- end
33
-
34
- context 'when no credit is allowed on the payment' do
35
- before do
36
- expect_any_instance_of(Spree::Payment).to receive(:credit_allowed).and_return 0
37
- end
38
-
39
- it 'returns an empty array' do
40
- expect(subject).to eq []
41
- end
42
- end
43
-
44
- context 'when a payment is negative' do
45
- before do
46
- expect_any_instance_of(Spree::Payment).to receive(:amount).and_return -100
47
- end
48
-
49
- it 'returns an empty array' do
50
- expect(subject).to eq []
51
- end
52
- end
53
- end
54
- end
55
- end
@@ -1,101 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
- describe ReimbursementType::StoreCredit do
5
- let(:reimbursement) { create(:reimbursement, return_items_count: 2) }
6
- let(:return_item) { reimbursement.return_items.first }
7
- let(:return_item2) { reimbursement.return_items.last }
8
- let(:payment) { reimbursement.order.payments.first }
9
- let(:simulate) { false }
10
- let!(:default_refund_reason) do
11
- Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON,
12
- mutable: false)
13
- end
14
-
15
- let!(:primary_credit_type) { create(:primary_credit_type) }
16
- let!(:created_by_user) { create(:user, email: Spree::StoreCredit::DEFAULT_CREATED_BY_EMAIL) }
17
- let!(:default_reimbursement_category) { create(:store_credit_category) }
18
-
19
- subject do
20
- Spree::ReimbursementType::StoreCredit.reimburse(reimbursement, [return_item, return_item2],
21
- simulate)
22
- end
23
-
24
- before { reimbursement.update!(total: reimbursement.calculated_total) }
25
-
26
- describe '.reimburse' do
27
- context 'simulate is true' do
28
- let(:simulate) { true }
29
-
30
- context 'for store credits that the customer used' do
31
- before do
32
- allow(Spree::ReimbursementType::StoreCredit).to receive(:store_credit_payments).and_return([payment])
33
- end
34
-
35
- it 'creates readonly refunds for all store credit payments' do
36
- expect(subject.map(&:class)).to eq [Spree::Refund]
37
- expect(subject.map(&:readonly?)).to eq [true]
38
- end
39
-
40
- it 'does not save to the database' do
41
- expect { subject }.to_not change { payment.refunds.count }
42
- end
43
- end
44
-
45
- context 'for return items that were not paid for with store credit' do
46
- before do
47
- allow(Spree::ReimbursementType::StoreCredit).to receive(:store_credit_payments).and_return([])
48
- end
49
-
50
- context 'creates one readonly lump credit for all outstanding balance payable to the customer' do
51
- it 'creates a credit that is read only' do
52
- expect(subject.map(&:class)).to eq [Spree::Reimbursement::Credit]
53
- expect(subject.map(&:readonly?)).to eq [true]
54
- end
55
-
56
- it 'creates a credit which amounts to the sum of the return items rounded down' do
57
- allow(return_item).to receive(:total).and_return(10.0076)
58
- allow(return_item2).to receive(:total).and_return(10.0023)
59
- expect(subject.sum(&:amount)).to eq 20.0
60
- end
61
- end
62
-
63
- it 'does not save to the database' do
64
- expect { subject }.to_not change { Spree::Reimbursement::Credit.count }
65
- end
66
- end
67
- end
68
-
69
- context 'simulate is false' do
70
- let(:simulate) { false }
71
-
72
- context 'for store credits that the customer used' do
73
- before do
74
- allow(Spree::ReimbursementType::StoreCredit).to receive(:store_credit_payments).and_return([payment])
75
- end
76
-
77
- it 'performs refunds for all store credit payments' do
78
- expect { subject }.to change { payment.refunds.count }.by(1)
79
- expect(payment.refunds.sum(:amount)).to eq reimbursement.return_items.to_a.sum(&:total)
80
- end
81
- end
82
-
83
- context 'for return items that were not paid for with store credit' do
84
- before do
85
- allow(Spree::ReimbursementType::StoreCredit).to receive(:store_credit_payments).and_return([])
86
- end
87
-
88
- it 'creates one lump credit for all outstanding balance payable to the customer' do
89
- expect { subject }.to change { Spree::Reimbursement::Credit.count }.by(1)
90
- expect(subject.sum(&:amount)).to eq reimbursement.return_items.to_a.sum(&:total)
91
- end
92
-
93
- it "creates a store credit with the same currency as the reimbursement's order" do
94
- expect { subject }.to change { Spree::StoreCredit.count }.by(1)
95
- expect(Spree::StoreCredit.last.currency).to eq reimbursement.order.currency
96
- end
97
- end
98
- end
99
- end
100
- end
101
- end