spree_core 3.3.0.rc1 → 3.3.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
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