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,43 +0,0 @@
1
- describe Spree::Order, type: :model do
2
- let(:order) { create(:order_with_totals) }
3
-
4
- context "ensure shipments will be updated" do
5
- before { Spree::Shipment.create!(order: order, stock_location: create(:stock_location)) }
6
-
7
- it "destroys current shipments" do
8
- order.ensure_updated_shipments
9
- expect(order.shipments).to be_empty
10
- end
11
-
12
- it "puts order back in address state" do
13
- order.ensure_updated_shipments
14
- expect(order.state).to eq 'address'
15
- end
16
-
17
- it "resets shipment_total" do
18
- order.update_column(:shipment_total, 5)
19
- order.ensure_updated_shipments
20
- expect(order.shipment_total).to eq(0)
21
- end
22
-
23
- context "except when order is completed, that's OrderInventory job" do
24
- it "doesn't touch anything" do
25
- allow(order).to receive_messages completed?: true
26
- order.update_column(:shipment_total, 5)
27
- order.shipments.create!(stock_location: create(:stock_location))
28
-
29
- expect {
30
- order.ensure_updated_shipments
31
- }.not_to change { order.shipment_total }
32
-
33
- expect {
34
- order.ensure_updated_shipments
35
- }.not_to change { order.shipments }
36
-
37
- expect {
38
- order.ensure_updated_shipments
39
- }.not_to change { order.state }
40
- end
41
- end
42
- end
43
- end
@@ -1,212 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Order, type: :model do
4
- let(:order) { Spree::Order.new }
5
- before do
6
- # Ensure state machine has been re-defined correctly
7
- Spree::Order.define_state_machine!
8
- # We don't care about this validation here
9
- allow(order).to receive(:require_email)
10
- end
11
-
12
- context "#next!" do
13
- context "when current state is confirm" do
14
- before do
15
- order.state = "confirm"
16
- order.run_callbacks(:create)
17
- allow(order).to receive_messages payment_required?: true
18
- allow(order).to receive_messages process_payments!: true
19
- end
20
-
21
- context "when payment processing succeeds" do
22
- before do
23
- order.payments << FactoryGirl.create(:payment, state: 'checkout', order: order)
24
- allow(order).to receive_messages process_payments: true
25
- end
26
-
27
- it "should finalize order when transitioning to complete state" do
28
- expect(order).to receive(:finalize!)
29
- order.next!
30
- end
31
-
32
- context "when credit card processing fails" do
33
- before { allow(order).to receive_messages process_payments!: false }
34
-
35
- it "should not complete the order" do
36
- order.next
37
- expect(order.state).to eq("confirm")
38
- end
39
- end
40
- end
41
-
42
- context "when payment processing fails" do
43
- before { allow(order).to receive_messages process_payments!: false }
44
-
45
- it "cannot transition to complete" do
46
- order.next
47
- expect(order.state).to eq("confirm")
48
- end
49
- end
50
- end
51
-
52
- context "when current state is delivery" do
53
- before do
54
- allow(order).to receive_messages payment_required?: true
55
- allow(order).to receive :apply_free_shipping_promotions
56
- order.state = "delivery"
57
- end
58
-
59
- it "adjusts tax rates when transitioning to delivery" do
60
- # Once for the line items
61
- expect(Spree::TaxRate).to receive(:adjust).once
62
- allow(order).to receive :set_shipments_cost
63
- order.next!
64
- end
65
-
66
- it "adjusts tax rates twice if there are any shipments" do
67
- # Once for the line items, once for the shipments
68
- order.shipments.build stock_location: create(:stock_location)
69
- expect(Spree::TaxRate).to receive(:adjust).twice
70
- allow(order).to receive :set_shipments_cost
71
- order.next!
72
- end
73
- end
74
- end
75
-
76
- context "#can_cancel?" do
77
- %w(pending backorder ready).each do |shipment_state|
78
- it "should be true if shipment_state is #{shipment_state}" do
79
- allow(order).to receive_messages completed?: true
80
- order.shipment_state = shipment_state
81
- expect(order.can_cancel?).to be true
82
- end
83
- end
84
-
85
- (Spree::Shipment.state_machine.states.keys - [:pending, :backorder, :ready]).each do |shipment_state|
86
- it "should be false if shipment_state is #{shipment_state}" do
87
- allow(order).to receive_messages completed?: true
88
- order.shipment_state = shipment_state
89
- expect(order.can_cancel?).to be false
90
- end
91
- end
92
- end
93
-
94
- context "#cancel" do
95
- let!(:variant) { stub_model(Spree::Variant) }
96
- let!(:inventory_units) { [stub_model(Spree::InventoryUnit, variant: variant),
97
- stub_model(Spree::InventoryUnit, variant: variant)] }
98
- let!(:shipment) do
99
- shipment = stub_model(Spree::Shipment)
100
- allow(shipment).to receive_messages inventory_units: inventory_units, order: order
101
- allow(order).to receive_messages shipments: [shipment]
102
- shipment
103
- end
104
-
105
- before do
106
- 2.times do
107
- create(:line_item, order: order, price: 10)
108
- end
109
-
110
- allow(order.line_items).to receive_messages find_by_variant_id: order.line_items.first
111
-
112
- allow(order).to receive_messages completed?: true
113
- allow(order).to receive_messages allow_cancel?: true
114
-
115
- shipments = [shipment]
116
- allow(order).to receive_messages shipments: shipments
117
- allow(shipments).to receive_messages states: []
118
- allow(shipments).to receive_messages ready: []
119
- allow(shipments).to receive_messages pending: []
120
- allow(shipments).to receive_messages shipped: []
121
- allow(shipments).to receive(:sum).with(:cost).and_return(shipment.cost)
122
-
123
- allow_any_instance_of(Spree::OrderUpdater).to receive(:update_adjustment_total) { 10 }
124
- end
125
-
126
- it "should send a cancel email" do
127
- # Stub methods that cause side-effects in this test
128
- allow(shipment).to receive(:cancel!)
129
- allow(order).to receive :restock_items!
130
- mail_message = double "Mail::Message"
131
- order_id = nil
132
- expect(Spree::OrderMailer).to receive(:cancel_email) { |*args|
133
- order_id = args[0]
134
- mail_message
135
- }
136
- expect(mail_message).to receive :deliver_later
137
- order.cancel!
138
- expect(order_id).to eq(order.id)
139
- end
140
-
141
- context "restocking inventory" do
142
- before do
143
- allow(shipment).to receive(:ensure_correct_adjustment)
144
- allow(shipment).to receive(:update_order)
145
- allow(Spree::OrderMailer).to receive(:cancel_email).and_return(mail_message = double)
146
- allow(mail_message).to receive :deliver_later
147
-
148
- end
149
- end
150
-
151
- context "resets payment state" do
152
- let(:payment) { create(:payment, amount: order.total) }
153
-
154
- before do
155
- # TODO: This is ugly :(
156
- # Stubs methods that cause unwanted side effects in this test
157
- allow(Spree::OrderMailer).to receive(:cancel_email).and_return(mail_message = double)
158
- allow(mail_message).to receive :deliver_later
159
- allow(order).to receive :restock_items!
160
- allow(shipment).to receive(:cancel!)
161
- allow(payment).to receive(:cancel!)
162
- allow(order).to receive_message_chain(:payments, :valid, :size).and_return(1)
163
- allow(order).to receive_message_chain(:payments, :completed).and_return([payment])
164
- allow(order).to receive_message_chain(:payments, :completed, :includes).and_return([payment])
165
- allow(order).to receive_message_chain(:payments, :last).and_return(payment)
166
- allow(order).to receive_message_chain(:payments, :store_credits, :pending).and_return([])
167
- end
168
-
169
- context "without shipped items" do
170
- it "should set payment state to 'void'" do
171
- expect { order.cancel! }.to change{ order.reload.payment_state }.to("void")
172
- end
173
- end
174
-
175
- context "with shipped items" do
176
- before do
177
- allow(order).to receive_messages shipment_state: 'partial'
178
- allow(order).to receive_messages outstanding_balance?: false
179
- allow(order).to receive_messages payment_state: "paid"
180
- end
181
-
182
- it "should not alter the payment state" do
183
- order.cancel!
184
- expect(order.payment_state).to eql "paid"
185
- end
186
- end
187
-
188
- context "with payments" do
189
- let(:payment) { create(:payment) }
190
-
191
- it "should automatically refund all payments" do
192
- allow(order).to receive_message_chain(:payments, :valid, :size).and_return(1)
193
- allow(order).to receive_message_chain(:payments, :completed).and_return([payment])
194
- allow(order).to receive_message_chain(:payments, :completed, :includes).and_return([payment])
195
- allow(order).to receive_message_chain(:payments, :last).and_return(payment)
196
- expect(payment).to receive(:cancel!)
197
- order.cancel!
198
- end
199
- end
200
- end
201
- end
202
-
203
- # Another regression test for #729
204
- context "#resume" do
205
- before do
206
- allow(order).to receive_messages email: "user@spreecommerce.org"
207
- allow(order).to receive_messages state: "canceled"
208
- allow(order).to receive_messages allow_resume?: true
209
-
210
- end
211
- end
212
- end
@@ -1,457 +0,0 @@
1
- require 'spec_helper'
2
-
3
- shared_examples "check total store credit from payments" do
4
- context 'with valid payments' do
5
- let(:order) { payment.order }
6
- let!(:payment) { create(:store_credit_payment) }
7
- let!(:second_payment) { create(:store_credit_payment, order: order) }
8
-
9
- subject { order }
10
-
11
- it 'returns the sum of the payment amounts' do
12
- expect(subject.total_applicable_store_credit).to eq (payment.amount + second_payment.amount)
13
- end
14
- end
15
-
16
- context 'without valid payments' do
17
- let(:order) { create(:order) }
18
-
19
- subject { order }
20
-
21
- it 'returns 0' do
22
- expect(subject.total_applicable_store_credit).to be_zero
23
- end
24
- end
25
- end
26
-
27
- describe 'Order' do
28
- describe '#add_store_credit_payments' do
29
- let(:order_total) { 500.00 }
30
-
31
- before { create(:store_credit_payment_method) }
32
-
33
- subject { order.add_store_credit_payments }
34
-
35
- context 'there is no store credit' do
36
- let(:order) { create(:store_credits_order_without_user, total: order_total) }
37
-
38
- before do
39
- # callbacks recalculate total based on line items
40
- # this ensures the total is what we expect
41
- order.update_column(:total, order_total)
42
- subject
43
- order.reload
44
- end
45
-
46
- it 'does not create a store credit payment' do
47
- expect(order.payments.count).to eq 0
48
- end
49
- end
50
-
51
- context 'there is enough store credit to pay for the entire order' do
52
- let(:store_credit) { create(:store_credit, amount: order_total) }
53
- let(:order) { create(:order, user: store_credit.user, total: order_total) }
54
-
55
- before do
56
- subject
57
- order.reload
58
- end
59
-
60
- it 'creates a store credit payment for the full amount' do
61
- expect(order.payments.count).to eq 1
62
- expect(order.payments.first).to be_store_credit
63
- expect(order.payments.first.amount).to eq order_total
64
- end
65
- end
66
-
67
- context 'the available store credit is not enough to pay for the entire order' do
68
- let(:expected_cc_total) { 100.0 }
69
- let(:store_credit_total) { order_total - expected_cc_total }
70
- let(:store_credit) { create(:store_credit, amount: store_credit_total) }
71
- let(:order) { create(:order, user: store_credit.user, total: order_total) }
72
-
73
- before do
74
- # callbacks recalculate total based on line items
75
- # this ensures the total is what we expect
76
- order.update_column(:total, order_total)
77
- subject
78
- order.reload
79
- end
80
-
81
- it 'creates a store credit payment for the available amount' do
82
- expect(order.payments.count).to eq 1
83
- expect(order.payments.first).to be_store_credit
84
- expect(order.payments.first.amount).to eq store_credit_total
85
- end
86
- end
87
-
88
- context 'there are multiple store credits' do
89
- context 'they have different credit type priorities' do
90
- let(:amount_difference) { 100 }
91
- let!(:primary_store_credit) { create(:store_credit, amount: (order_total - amount_difference)) }
92
- let!(:secondary_store_credit) do
93
- create(:store_credit, amount: order_total, user: primary_store_credit.user,
94
- credit_type: create(:secondary_credit_type))
95
- end
96
- let(:order) { create(:order, user: primary_store_credit.user, total: order_total) }
97
-
98
- before do
99
- Timecop.scale(3600)
100
- subject
101
- order.reload
102
- end
103
-
104
- after { Timecop.return }
105
-
106
- it 'uses the primary store credit type over the secondary' do
107
- primary_payment = order.payments.first
108
- secondary_payment = order.payments.last
109
-
110
- expect(order.payments.size).to eq 2
111
- expect(primary_payment.source).to eq primary_store_credit
112
- expect(secondary_payment.source).to eq secondary_store_credit
113
- expect(primary_payment.amount).to eq(order_total - amount_difference)
114
- expect(secondary_payment.amount).to eq(amount_difference)
115
- end
116
- end
117
- end
118
- end
119
-
120
- describe '#remove_store_credit_payments' do
121
- let(:order_total) { 500.00 }
122
- let(:order) { create(:order, user: store_credit.user, total: order_total) }
123
-
124
- subject { order.remove_store_credit_payments }
125
-
126
- context 'when order is not complete' do
127
- let(:store_credit) { create(:store_credit, amount: order_total - 1) }
128
-
129
- before do
130
- create(:store_credit_payment_method)
131
- order.add_store_credit_payments
132
- end
133
-
134
- it { expect { subject }.to change { order.payments.checkout.store_credits.count }.from(1).to(0) }
135
- it { expect { subject }.to change { order.payments.with_state(:invalid).store_credits.count }.from(0).to(1) }
136
- end
137
-
138
- context 'when order is complete' do
139
- let(:order) { create(:completed_order_with_store_credit_payment) }
140
- let(:store_credit_payments) { order.payments.checkout.store_credits }
141
-
142
- before do
143
- subject
144
- order.reload
145
- end
146
-
147
- it { expect(order.payments.checkout.store_credits).to eq store_credit_payments }
148
- end
149
- end
150
-
151
- describe '#covered_by_store_credit' do
152
- context "order doesn't have an associated user" do
153
- subject { create(:store_credits_order_without_user) }
154
-
155
- it 'returns false' do
156
- expect(subject.covered_by_store_credit).to be false
157
- end
158
- end
159
-
160
- context 'order has an associated user' do
161
- let(:user) { create(:user) }
162
-
163
- subject { create(:order, user: user) }
164
-
165
- context 'user has enough store credit to pay for the order' do
166
- before do
167
- allow(user).to receive(:total_available_store_credit).and_return(10.0)
168
- allow(subject).to receive(:total).and_return(5.0)
169
- end
170
-
171
- it 'returns true' do
172
- expect(subject.covered_by_store_credit).to be true
173
- end
174
- end
175
-
176
- context 'user does not have enough store credit to pay for the order' do
177
- before do
178
- allow(user).to receive(:total_available_store_credit).and_return(0.0)
179
- allow(subject).to receive(:total).and_return(5.0)
180
- end
181
-
182
- it 'returns false' do
183
- expect(subject.covered_by_store_credit).to be false
184
- end
185
- end
186
- end
187
- end
188
-
189
- describe '#total_available_store_credit' do
190
- context 'order does not have an associated user' do
191
- subject { create(:store_credits_order_without_user) }
192
-
193
- it 'returns 0' do
194
- expect(subject.total_available_store_credit).to be_zero
195
- end
196
- end
197
-
198
- context 'order has an associated user' do
199
- let(:user) { create(:user) }
200
- let(:available_store_credit) { 25.0 }
201
-
202
- subject { create(:order, user: user) }
203
-
204
- before do
205
- allow(user).to receive(:total_available_store_credit).and_return(available_store_credit)
206
- end
207
-
208
- it "returns the user's available store credit" do
209
- expect(subject.total_available_store_credit).to eq available_store_credit
210
- end
211
- end
212
- end
213
-
214
- describe '#could_use_store_credit?' do
215
- context 'order does not have an associated user' do
216
- subject { create(:store_credits_order_without_user) }
217
-
218
- it { expect(subject.could_use_store_credit?).to be false }
219
- end
220
-
221
- context 'order has an associated user' do
222
- let(:user) { create(:user) }
223
-
224
- subject { create(:order, user: user) }
225
-
226
- context 'without store credit' do
227
- it { expect(subject.could_use_store_credit?).to be false }
228
- end
229
-
230
- context 'with store credit' do
231
- let(:available_store_credit) { 25.0 }
232
-
233
- before do
234
- allow(user).to receive(:total_available_store_credit).and_return(available_store_credit)
235
- end
236
-
237
- it { expect(subject.could_use_store_credit?).to be true }
238
- end
239
- end
240
- end
241
-
242
- describe '#order_total_after_store_credit' do
243
- let(:order_total) { 100.0 }
244
-
245
- subject { create(:order, total: order_total) }
246
-
247
- before do
248
- allow(subject).to receive(:total_applicable_store_credit).and_return(applicable_store_credit)
249
- end
250
-
251
- context "order's user has store credits" do
252
- let(:applicable_store_credit) { 10.0 }
253
-
254
- it 'deducts the applicable store credit' do
255
- expect(subject.order_total_after_store_credit).to eq (order_total - applicable_store_credit)
256
- end
257
- end
258
-
259
- context "order's user does not have any store credits" do
260
- let(:applicable_store_credit) { 0.0 }
261
-
262
- it 'returns the order total' do
263
- expect(subject.order_total_after_store_credit).to eq order_total
264
- end
265
- end
266
- end
267
-
268
- describe '#total_applicable_store_credit' do
269
- context 'order is in the confirm state' do
270
- before { order.update_attributes(state: 'confirm') }
271
- include_examples 'check total store credit from payments'
272
- end
273
-
274
- context 'order is completed' do
275
- before { order.update_attributes(state: 'complete') }
276
- include_examples 'check total store credit from payments'
277
- end
278
-
279
- context 'order is in any state other than confirm or complete' do
280
- context 'the associated user has store credits' do
281
- let(:store_credit) { create(:store_credit) }
282
- let(:order) { create(:order, user: store_credit.user) }
283
-
284
- subject { order }
285
-
286
- context 'the store credit is more than the order total' do
287
- let(:order_total) { store_credit.amount - 1 }
288
-
289
- before { order.update_attributes(total: order_total) }
290
-
291
- it 'returns the order total' do
292
- expect(subject.total_applicable_store_credit).to eq order_total
293
- end
294
- end
295
-
296
- context 'the store credit is less than the order total' do
297
- let(:order_total) { store_credit.amount * 10 }
298
-
299
- before { order.update_attributes(total: order_total) }
300
-
301
- it 'returns the store credit amount' do
302
- expect(subject.total_applicable_store_credit).to eq store_credit.amount
303
- end
304
- end
305
- end
306
-
307
- context 'the associated user does not have store credits' do
308
- let(:order) { create(:order) }
309
-
310
- subject { order }
311
-
312
- it 'returns 0' do
313
- expect(subject.total_applicable_store_credit).to be_zero
314
- end
315
- end
316
-
317
- context 'the order does not have an associated user' do
318
- subject { create(:store_credits_order_without_user) }
319
-
320
- it 'returns 0' do
321
- expect(subject.total_applicable_store_credit).to be_zero
322
- end
323
- end
324
- end
325
- end
326
-
327
- describe '#total_applied_store_credit' do
328
- context 'with valid payments' do
329
- let(:order) { payment.order }
330
- let!(:payment) { create(:store_credit_payment) }
331
- let!(:second_payment) { create(:store_credit_payment, order: order) }
332
-
333
- subject { order }
334
-
335
- it 'returns the sum of the payment amounts' do
336
- expect(subject.total_applied_store_credit).to eq (payment.amount + second_payment.amount)
337
- end
338
- end
339
-
340
- context 'without valid payments' do
341
- let(:order) { create(:order) }
342
-
343
- subject { order }
344
-
345
- it 'returns 0' do
346
- expect(subject.total_applied_store_credit).to be_zero
347
- end
348
- end
349
- end
350
-
351
- describe '#using_store_credit?' do
352
- subject { create(:order) }
353
-
354
- context 'order has store credit payment' do
355
- before { allow(subject).to receive(:total_applied_store_credit).and_return(10.0) }
356
- it { expect(subject.using_store_credit?).to be true }
357
- end
358
-
359
- context 'order has no store credit payments' do
360
- before { allow(subject).to receive(:total_applied_store_credit).and_return(0.0) }
361
- it { expect(subject.using_store_credit?).to be false }
362
- end
363
- end
364
-
365
- describe '#display_total_applicable_store_credit' do
366
- let(:total_applicable_store_credit) { 10.00 }
367
-
368
- subject { create(:order) }
369
-
370
- before do
371
- allow(subject).to receive(:total_applicable_store_credit).and_return(total_applicable_store_credit)
372
- end
373
-
374
- it 'returns a money instance' do
375
- expect(subject.display_total_applicable_store_credit).to be_a(Spree::Money)
376
- end
377
-
378
- it 'returns a negative amount' do
379
- expect(subject.display_total_applicable_store_credit.money.cents).to eq (total_applicable_store_credit * -100.0)
380
- end
381
- end
382
-
383
- describe '#display_total_applied_store_credit' do
384
- let(:total_applied_store_credit) { 10.00 }
385
-
386
- subject { create(:order) }
387
-
388
- before do
389
- allow(subject).to receive(:total_applied_store_credit).and_return(total_applied_store_credit)
390
- end
391
-
392
- it 'returns a money instance' do
393
- expect(subject.display_total_applied_store_credit).to be_a(Spree::Money)
394
- end
395
-
396
- it 'returns a negative amount' do
397
- expect(subject.display_total_applied_store_credit.money.cents).to eq (total_applied_store_credit * -100.0)
398
- end
399
- end
400
-
401
- describe '#display_order_total_after_store_credit' do
402
- let(:order_total_after_store_credit) { 10.00 }
403
-
404
- subject { create(:order) }
405
-
406
- before do
407
- allow(subject).to receive(:order_total_after_store_credit).and_return(order_total_after_store_credit)
408
- end
409
-
410
- it 'returns a money instance' do
411
- expect(subject.display_order_total_after_store_credit).to be_a(Spree::Money)
412
- end
413
-
414
- it 'returns the order_total_after_store_credit amount' do
415
- expect(subject.display_order_total_after_store_credit.money.cents).to eq (order_total_after_store_credit * 100.0)
416
- end
417
- end
418
-
419
- describe '#display_total_available_store_credit' do
420
- let(:total_available_store_credit) { 10.00 }
421
-
422
- subject { create(:order) }
423
-
424
- before do
425
- allow(subject).to receive(:total_available_store_credit).and_return(total_available_store_credit)
426
- end
427
-
428
- it 'returns a money instance' do
429
- expect(subject.display_total_available_store_credit).to be_a(Spree::Money)
430
- end
431
-
432
- it 'returns the total_available_store_credit amount' do
433
- expect(subject.display_total_available_store_credit.money.cents).to eq (total_available_store_credit * 100.0)
434
- end
435
- end
436
-
437
- describe '#display_store_credit_remaining_after_capture' do
438
- let(:total_available_store_credit) { 10.00 }
439
- let(:total_applicable_store_credit) { 5.00 }
440
-
441
- subject { create(:order) }
442
-
443
- before do
444
- allow(subject).to receive(:total_available_store_credit).and_return(total_available_store_credit)
445
- allow(subject).to receive(:total_applicable_store_credit).and_return(total_applicable_store_credit)
446
- end
447
-
448
- it 'returns a money instance' do
449
- expect(subject.display_store_credit_remaining_after_capture).to be_a(Spree::Money)
450
- end
451
-
452
- it "returns all of the user's available store credit minus what's applied to the order amount" do
453
- amount_remaining = total_available_store_credit - total_applicable_store_credit
454
- expect(subject.display_store_credit_remaining_after_capture.money.cents).to eq (amount_remaining * 100.0)
455
- end
456
- end
457
- end