spree_core 3.1.5 → 3.1.6

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 (215) hide show
  1. checksums.yaml +4 -4
  2. data/app/models/concerns/spree/ransackable_attributes.rb +6 -1
  3. data/app/models/concerns/spree/user_methods.rb +10 -0
  4. data/app/models/spree/legacy_user.rb +0 -8
  5. data/app/models/spree/order.rb +1 -1
  6. data/app/models/spree/product.rb +8 -0
  7. data/app/models/spree/product/scopes.rb +7 -3
  8. data/app/models/spree/stock_transfer.rb +1 -1
  9. data/config/locales/en.yml +2 -0
  10. data/lib/spree/core/version.rb +1 -1
  11. data/spree_core.gemspec +2 -2
  12. metadata +11 -208
  13. data/spec/fixtures/microdata.html +0 -22
  14. data/spec/fixtures/microdata_itemref.html +0 -15
  15. data/spec/fixtures/microdata_no_itemscope.html +0 -20
  16. data/spec/fixtures/thinking-cat.jpg +0 -0
  17. data/spec/helpers/base_helper_spec.rb +0 -200
  18. data/spec/helpers/products_helper_spec.rb +0 -296
  19. data/spec/lib/calculated_adjustments_spec.rb +0 -7
  20. data/spec/lib/i18n_spec.rb +0 -123
  21. data/spec/lib/search/base_spec.rb +0 -86
  22. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -103
  23. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -110
  24. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -17
  25. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -72
  26. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -39
  27. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +0 -22
  28. data/spec/lib/spree/core/importer/order_spec.rb +0 -605
  29. data/spec/lib/spree/core/number_generator_spec.rb +0 -175
  30. data/spec/lib/spree/core/token_generator_spec.rb +0 -24
  31. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  32. data/spec/lib/spree/core_spec.rb +0 -23
  33. data/spec/lib/spree/localized_number_spec.rb +0 -48
  34. data/spec/lib/spree/migrations_spec.rb +0 -36
  35. data/spec/lib/spree/money_spec.rb +0 -122
  36. data/spec/lib/tasks/exchanges_spec.rb +0 -136
  37. data/spec/mailers/order_mailer_spec.rb +0 -122
  38. data/spec/mailers/reimbursement_mailer_spec.rb +0 -47
  39. data/spec/mailers/shipment_mailer_spec.rb +0 -81
  40. data/spec/mailers/test_mailer_spec.rb +0 -38
  41. data/spec/models/option_type_prototype_spec.rb +0 -9
  42. data/spec/models/spree/ability_spec.rb +0 -251
  43. data/spec/models/spree/address_spec.rb +0 -291
  44. data/spec/models/spree/adjustable/adjuster/base_spec.rb +0 -10
  45. data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +0 -211
  46. data/spec/models/spree/adjustable/adjuster/tax_spec.rb +0 -86
  47. data/spec/models/spree/adjustable/adjustments_updater_spec.rb +0 -26
  48. data/spec/models/spree/adjustment_spec.rb +0 -189
  49. data/spec/models/spree/app_configuration_spec.rb +0 -26
  50. data/spec/models/spree/asset_spec.rb +0 -28
  51. data/spec/models/spree/calculator/default_tax_spec.rb +0 -152
  52. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -25
  53. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -47
  54. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -41
  55. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -15
  56. data/spec/models/spree/calculator/price_sack_spec.rb +0 -30
  57. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -51
  58. data/spec/models/spree/calculator/shipping.rb +0 -8
  59. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -23
  60. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -13
  61. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -52
  62. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -20
  63. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -29
  64. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -40
  65. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -51
  66. data/spec/models/spree/calculator_spec.rb +0 -69
  67. data/spec/models/spree/classification_spec.rb +0 -93
  68. data/spec/models/spree/concerns/display_money_spec.rb +0 -43
  69. data/spec/models/spree/concerns/user_methods_spec.rb +0 -55
  70. data/spec/models/spree/concerns/vat_price_calculation_spec.rb +0 -66
  71. data/spec/models/spree/country_spec.rb +0 -55
  72. data/spec/models/spree/credit_card_spec.rb +0 -328
  73. data/spec/models/spree/customer_return_spec.rb +0 -240
  74. data/spec/models/spree/exchange_spec.rb +0 -75
  75. data/spec/models/spree/gateway/bogus_simple.rb +0 -20
  76. data/spec/models/spree/gateway/bogus_spec.rb +0 -13
  77. data/spec/models/spree/gateway_spec.rb +0 -61
  78. data/spec/models/spree/image_spec.rb +0 -8
  79. data/spec/models/spree/inventory_unit_spec.rb +0 -225
  80. data/spec/models/spree/line_item_spec.rb +0 -327
  81. data/spec/models/spree/option_type_spec.rb +0 -14
  82. data/spec/models/spree/option_value_spec.rb +0 -18
  83. data/spec/models/spree/order/address_spec.rb +0 -50
  84. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  85. data/spec/models/spree/order/callbacks_spec.rb +0 -42
  86. data/spec/models/spree/order/checkout_spec.rb +0 -782
  87. data/spec/models/spree/order/currency_updater_spec.rb +0 -32
  88. data/spec/models/spree/order/finalizing_spec.rb +0 -114
  89. data/spec/models/spree/order/helpers_spec.rb +0 -5
  90. data/spec/models/spree/order/payment_spec.rb +0 -214
  91. data/spec/models/spree/order/risk_assessment_spec.rb +0 -84
  92. data/spec/models/spree/order/shipments_spec.rb +0 -43
  93. data/spec/models/spree/order/state_machine_spec.rb +0 -211
  94. data/spec/models/spree/order/store_credit_spec.rb +0 -426
  95. data/spec/models/spree/order/tax_spec.rb +0 -84
  96. data/spec/models/spree/order/totals_spec.rb +0 -24
  97. data/spec/models/spree/order/updating_spec.rb +0 -18
  98. data/spec/models/spree/order/validations_spec.rb +0 -15
  99. data/spec/models/spree/order_contents_spec.rb +0 -297
  100. data/spec/models/spree/order_inventory_spec.rb +0 -238
  101. data/spec/models/spree/order_merger_spec.rb +0 -135
  102. data/spec/models/spree/order_spec.rb +0 -967
  103. data/spec/models/spree/order_updater_spec.rb +0 -305
  104. data/spec/models/spree/payment/gateway_options_spec.rb +0 -127
  105. data/spec/models/spree/payment/store_credit_spec.rb +0 -60
  106. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -291
  107. data/spec/models/spree/payment_method_spec.rb +0 -103
  108. data/spec/models/spree/payment_spec.rb +0 -919
  109. data/spec/models/spree/preference_spec.rb +0 -80
  110. data/spec/models/spree/preferences/configuration_spec.rb +0 -30
  111. data/spec/models/spree/preferences/preferable_spec.rb +0 -348
  112. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -58
  113. data/spec/models/spree/preferences/store_spec.rb +0 -46
  114. data/spec/models/spree/price_spec.rb +0 -128
  115. data/spec/models/spree/product/scopes_spec.rb +0 -183
  116. data/spec/models/spree/product_duplicator_spec.rb +0 -103
  117. data/spec/models/spree/product_filter_spec.rb +0 -26
  118. data/spec/models/spree/product_option_type_spec.rb +0 -9
  119. data/spec/models/spree/product_promotion_rule_spec.rb +0 -9
  120. data/spec/models/spree/product_property_spec.rb +0 -22
  121. data/spec/models/spree/product_spec.rb +0 -540
  122. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -50
  123. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -148
  124. data/spec/models/spree/promotion/actions/create_line_items_spec.rb +0 -86
  125. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -36
  126. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -75
  127. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -282
  128. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -42
  129. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -90
  130. data/spec/models/spree/promotion/rules/product_spec.rb +0 -143
  131. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -102
  132. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -27
  133. data/spec/models/spree/promotion/rules/user_spec.rb +0 -45
  134. data/spec/models/spree/promotion_action_spec.rb +0 -10
  135. data/spec/models/spree/promotion_category_spec.rb +0 -17
  136. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -102
  137. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -323
  138. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +0 -48
  139. data/spec/models/spree/promotion_handler/page_spec.rb +0 -44
  140. data/spec/models/spree/promotion_rule_spec.rb +0 -29
  141. data/spec/models/spree/promotion_rule_taxon_spec.rb +0 -9
  142. data/spec/models/spree/promotion_rule_user_spec.rb +0 -9
  143. data/spec/models/spree/promotion_spec.rb +0 -644
  144. data/spec/models/spree/property_prototype_spec.rb +0 -9
  145. data/spec/models/spree/property_spec.rb +0 -5
  146. data/spec/models/spree/prototype_spec.rb +0 -5
  147. data/spec/models/spree/prototype_taxon_spec.rb +0 -9
  148. data/spec/models/spree/refund_reason_spec.rb +0 -7
  149. data/spec/models/spree/refund_spec.rb +0 -195
  150. data/spec/models/spree/reimbursement/credit_spec.rb +0 -36
  151. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -140
  152. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -83
  153. data/spec/models/spree/reimbursement_performer_spec.rb +0 -30
  154. data/spec/models/spree/reimbursement_spec.rb +0 -188
  155. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -63
  156. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -53
  157. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -46
  158. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -55
  159. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -101
  160. data/spec/models/spree/return_authorization_reason_spec.rb +0 -7
  161. data/spec/models/spree/return_authorization_spec.rb +0 -230
  162. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -77
  163. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -58
  164. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -61
  165. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -32
  166. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -29
  167. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -35
  168. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -65
  169. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  170. data/spec/models/spree/return_item_spec.rb +0 -731
  171. data/spec/models/spree/returns_calculator_spec.rb +0 -14
  172. data/spec/models/spree/role_spec.rb +0 -7
  173. data/spec/models/spree/shipment_spec.rb +0 -740
  174. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  175. data/spec/models/spree/shipping_category_spec.rb +0 -19
  176. data/spec/models/spree/shipping_method_spec.rb +0 -95
  177. data/spec/models/spree/shipping_rate_spec.rb +0 -140
  178. data/spec/models/spree/state_spec.rb +0 -29
  179. data/spec/models/spree/stock/availability_validator_spec.rb +0 -36
  180. data/spec/models/spree/stock/content_item_spec.rb +0 -31
  181. data/spec/models/spree/stock/coordinator_spec.rb +0 -51
  182. data/spec/models/spree/stock/differentiator_spec.rb +0 -39
  183. data/spec/models/spree/stock/estimator_spec.rb +0 -202
  184. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -38
  185. data/spec/models/spree/stock/package_spec.rb +0 -194
  186. data/spec/models/spree/stock/packer_spec.rb +0 -70
  187. data/spec/models/spree/stock/prioritizer_spec.rb +0 -125
  188. data/spec/models/spree/stock/quantifier_spec.rb +0 -126
  189. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -29
  190. data/spec/models/spree/stock/splitter/base_spec.rb +0 -21
  191. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -47
  192. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -32
  193. data/spec/models/spree/stock_item_spec.rb +0 -428
  194. data/spec/models/spree/stock_location_spec.rb +0 -243
  195. data/spec/models/spree/stock_movement_spec.rb +0 -56
  196. data/spec/models/spree/stock_transfer_spec.rb +0 -50
  197. data/spec/models/spree/store_credit_event_spec.rb +0 -101
  198. data/spec/models/spree/store_credit_spec.rb +0 -786
  199. data/spec/models/spree/store_spec.rb +0 -78
  200. data/spec/models/spree/tax_category_spec.rb +0 -32
  201. data/spec/models/spree/tax_rate_spec.rb +0 -542
  202. data/spec/models/spree/taxon_spec.rb +0 -74
  203. data/spec/models/spree/taxonomy_spec.rb +0 -18
  204. data/spec/models/spree/tracker_spec.rb +0 -21
  205. data/spec/models/spree/user_spec.rb +0 -203
  206. data/spec/models/spree/variant_spec.rb +0 -795
  207. data/spec/models/spree/zone_member_spec.rb +0 -38
  208. data/spec/models/spree/zone_spec.rb +0 -470
  209. data/spec/spec_helper.rb +0 -77
  210. data/spec/support/big_decimal.rb +0 -5
  211. data/spec/support/concerns/adjustment_source.rb +0 -23
  212. data/spec/support/concerns/default_price.rb +0 -37
  213. data/spec/support/rake.rb +0 -13
  214. data/spec/support/test_gateway.rb +0 -2
  215. data/spec/validators/db_maximum_length_validator_spec.rb +0 -22
@@ -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