spree_core 3.2.1 → 3.2.2

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 (207) hide show
  1. checksums.yaml +4 -4
  2. data/lib/spree/core/version.rb +1 -1
  3. data/spree_core.gemspec +1 -1
  4. metadata +3 -206
  5. data/spec/fixtures/microdata.html +0 -22
  6. data/spec/fixtures/microdata_itemref.html +0 -15
  7. data/spec/fixtures/microdata_no_itemscope.html +0 -20
  8. data/spec/fixtures/thinking-cat.jpg +0 -0
  9. data/spec/helpers/base_helper_spec.rb +0 -200
  10. data/spec/helpers/products_helper_spec.rb +0 -289
  11. data/spec/lib/calculated_adjustments_spec.rb +0 -7
  12. data/spec/lib/i18n_spec.rb +0 -123
  13. data/spec/lib/search/base_spec.rb +0 -86
  14. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -103
  15. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -110
  16. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -17
  17. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -72
  18. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -39
  19. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +0 -22
  20. data/spec/lib/spree/core/importer/order_spec.rb +0 -605
  21. data/spec/lib/spree/core/number_generator_spec.rb +0 -175
  22. data/spec/lib/spree/core/token_generator_spec.rb +0 -24
  23. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  24. data/spec/lib/spree/core_spec.rb +0 -23
  25. data/spec/lib/spree/localized_number_spec.rb +0 -48
  26. data/spec/lib/spree/migrations_spec.rb +0 -36
  27. data/spec/lib/spree/money_spec.rb +0 -122
  28. data/spec/lib/tasks/exchanges_spec.rb +0 -136
  29. data/spec/mailers/order_mailer_spec.rb +0 -122
  30. data/spec/mailers/reimbursement_mailer_spec.rb +0 -47
  31. data/spec/mailers/shipment_mailer_spec.rb +0 -81
  32. data/spec/mailers/test_mailer_spec.rb +0 -38
  33. data/spec/models/option_type_prototype_spec.rb +0 -9
  34. data/spec/models/spree/ability_spec.rb +0 -251
  35. data/spec/models/spree/address_spec.rb +0 -402
  36. data/spec/models/spree/adjustable/adjuster/base_spec.rb +0 -10
  37. data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +0 -211
  38. data/spec/models/spree/adjustable/adjuster/tax_spec.rb +0 -86
  39. data/spec/models/spree/adjustable/adjustments_updater_spec.rb +0 -26
  40. data/spec/models/spree/adjustment_spec.rb +0 -189
  41. data/spec/models/spree/app_configuration_spec.rb +0 -26
  42. data/spec/models/spree/asset_spec.rb +0 -28
  43. data/spec/models/spree/calculator/default_tax_spec.rb +0 -152
  44. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -25
  45. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -47
  46. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -41
  47. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -15
  48. data/spec/models/spree/calculator/price_sack_spec.rb +0 -30
  49. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -47
  50. data/spec/models/spree/calculator/shipping.rb +0 -8
  51. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -23
  52. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -13
  53. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -52
  54. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -20
  55. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -29
  56. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -40
  57. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -51
  58. data/spec/models/spree/calculator_spec.rb +0 -69
  59. data/spec/models/spree/classification_spec.rb +0 -93
  60. data/spec/models/spree/concerns/display_money_spec.rb +0 -43
  61. data/spec/models/spree/concerns/user_methods_spec.rb +0 -82
  62. data/spec/models/spree/concerns/vat_price_calculation_spec.rb +0 -66
  63. data/spec/models/spree/country_spec.rb +0 -55
  64. data/spec/models/spree/credit_card_spec.rb +0 -328
  65. data/spec/models/spree/customer_return_spec.rb +0 -240
  66. data/spec/models/spree/exchange_spec.rb +0 -75
  67. data/spec/models/spree/gateway/bogus_simple.rb +0 -20
  68. data/spec/models/spree/gateway/bogus_spec.rb +0 -13
  69. data/spec/models/spree/gateway_spec.rb +0 -61
  70. data/spec/models/spree/image_spec.rb +0 -8
  71. data/spec/models/spree/inventory_unit_spec.rb +0 -256
  72. data/spec/models/spree/line_item_spec.rb +0 -346
  73. data/spec/models/spree/option_type_spec.rb +0 -14
  74. data/spec/models/spree/option_value_spec.rb +0 -18
  75. data/spec/models/spree/order/address_spec.rb +0 -50
  76. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  77. data/spec/models/spree/order/callbacks_spec.rb +0 -42
  78. data/spec/models/spree/order/checkout_spec.rb +0 -770
  79. data/spec/models/spree/order/currency_updater_spec.rb +0 -32
  80. data/spec/models/spree/order/finalizing_spec.rb +0 -114
  81. data/spec/models/spree/order/helpers_spec.rb +0 -5
  82. data/spec/models/spree/order/payment_spec.rb +0 -214
  83. data/spec/models/spree/order/risk_assessment_spec.rb +0 -84
  84. data/spec/models/spree/order/shipments_spec.rb +0 -43
  85. data/spec/models/spree/order/state_machine_spec.rb +0 -212
  86. data/spec/models/spree/order/store_credit_spec.rb +0 -426
  87. data/spec/models/spree/order/tax_spec.rb +0 -84
  88. data/spec/models/spree/order/totals_spec.rb +0 -24
  89. data/spec/models/spree/order/updating_spec.rb +0 -18
  90. data/spec/models/spree/order/validations_spec.rb +0 -15
  91. data/spec/models/spree/order_contents_spec.rb +0 -297
  92. data/spec/models/spree/order_inventory_spec.rb +0 -239
  93. data/spec/models/spree/order_merger_spec.rb +0 -135
  94. data/spec/models/spree/order_spec.rb +0 -1046
  95. data/spec/models/spree/order_updater_spec.rb +0 -305
  96. data/spec/models/spree/payment/gateway_options_spec.rb +0 -127
  97. data/spec/models/spree/payment/store_credit_spec.rb +0 -60
  98. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -291
  99. data/spec/models/spree/payment_method_spec.rb +0 -103
  100. data/spec/models/spree/payment_spec.rb +0 -919
  101. data/spec/models/spree/preference_spec.rb +0 -80
  102. data/spec/models/spree/preferences/configuration_spec.rb +0 -30
  103. data/spec/models/spree/preferences/preferable_spec.rb +0 -344
  104. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -58
  105. data/spec/models/spree/preferences/store_spec.rb +0 -46
  106. data/spec/models/spree/price_spec.rb +0 -128
  107. data/spec/models/spree/product/scopes_spec.rb +0 -183
  108. data/spec/models/spree/product_duplicator_spec.rb +0 -103
  109. data/spec/models/spree/product_filter_spec.rb +0 -26
  110. data/spec/models/spree/product_option_type_spec.rb +0 -9
  111. data/spec/models/spree/product_promotion_rule_spec.rb +0 -9
  112. data/spec/models/spree/product_property_spec.rb +0 -26
  113. data/spec/models/spree/product_spec.rb +0 -629
  114. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -113
  115. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -148
  116. data/spec/models/spree/promotion/actions/create_line_items_spec.rb +0 -86
  117. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -36
  118. data/spec/models/spree/promotion/rules/country_spec.rb +0 -36
  119. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -75
  120. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -282
  121. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -42
  122. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -90
  123. data/spec/models/spree/promotion/rules/product_spec.rb +0 -143
  124. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -102
  125. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -27
  126. data/spec/models/spree/promotion/rules/user_spec.rb +0 -45
  127. data/spec/models/spree/promotion_action_spec.rb +0 -10
  128. data/spec/models/spree/promotion_category_spec.rb +0 -17
  129. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -102
  130. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -323
  131. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +0 -48
  132. data/spec/models/spree/promotion_handler/page_spec.rb +0 -44
  133. data/spec/models/spree/promotion_rule_spec.rb +0 -29
  134. data/spec/models/spree/promotion_rule_taxon_spec.rb +0 -9
  135. data/spec/models/spree/promotion_rule_user_spec.rb +0 -9
  136. data/spec/models/spree/promotion_spec.rb +0 -679
  137. data/spec/models/spree/property_prototype_spec.rb +0 -9
  138. data/spec/models/spree/property_spec.rb +0 -5
  139. data/spec/models/spree/prototype_spec.rb +0 -5
  140. data/spec/models/spree/prototype_taxon_spec.rb +0 -9
  141. data/spec/models/spree/refund_reason_spec.rb +0 -20
  142. data/spec/models/spree/refund_spec.rb +0 -195
  143. data/spec/models/spree/reimbursement/credit_spec.rb +0 -36
  144. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -140
  145. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -83
  146. data/spec/models/spree/reimbursement_performer_spec.rb +0 -30
  147. data/spec/models/spree/reimbursement_spec.rb +0 -188
  148. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -63
  149. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -53
  150. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -46
  151. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -55
  152. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -101
  153. data/spec/models/spree/return_authorization_reason_spec.rb +0 -7
  154. data/spec/models/spree/return_authorization_spec.rb +0 -230
  155. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -77
  156. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -58
  157. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -61
  158. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -32
  159. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -29
  160. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -35
  161. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -65
  162. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  163. data/spec/models/spree/return_item_spec.rb +0 -731
  164. data/spec/models/spree/returns_calculator_spec.rb +0 -14
  165. data/spec/models/spree/role_spec.rb +0 -7
  166. data/spec/models/spree/shipment_spec.rb +0 -742
  167. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  168. data/spec/models/spree/shipping_category_spec.rb +0 -19
  169. data/spec/models/spree/shipping_method_spec.rb +0 -95
  170. data/spec/models/spree/shipping_rate_spec.rb +0 -140
  171. data/spec/models/spree/state_spec.rb +0 -29
  172. data/spec/models/spree/stock/availability_validator_spec.rb +0 -36
  173. data/spec/models/spree/stock/content_item_spec.rb +0 -31
  174. data/spec/models/spree/stock/coordinator_spec.rb +0 -61
  175. data/spec/models/spree/stock/differentiator_spec.rb +0 -39
  176. data/spec/models/spree/stock/estimator_spec.rb +0 -202
  177. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -38
  178. data/spec/models/spree/stock/package_spec.rb +0 -182
  179. data/spec/models/spree/stock/packer_spec.rb +0 -70
  180. data/spec/models/spree/stock/prioritizer_spec.rb +0 -125
  181. data/spec/models/spree/stock/quantifier_spec.rb +0 -126
  182. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -29
  183. data/spec/models/spree/stock/splitter/base_spec.rb +0 -21
  184. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -47
  185. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -32
  186. data/spec/models/spree/stock_item_spec.rb +0 -432
  187. data/spec/models/spree/stock_location_spec.rb +0 -243
  188. data/spec/models/spree/stock_movement_spec.rb +0 -120
  189. data/spec/models/spree/stock_transfer_spec.rb +0 -50
  190. data/spec/models/spree/store_credit_event_spec.rb +0 -101
  191. data/spec/models/spree/store_credit_spec.rb +0 -786
  192. data/spec/models/spree/store_spec.rb +0 -78
  193. data/spec/models/spree/tax_category_spec.rb +0 -32
  194. data/spec/models/spree/tax_rate_spec.rb +0 -561
  195. data/spec/models/spree/taxon_spec.rb +0 -85
  196. data/spec/models/spree/taxonomy_spec.rb +0 -18
  197. data/spec/models/spree/tracker_spec.rb +0 -21
  198. data/spec/models/spree/user_spec.rb +0 -203
  199. data/spec/models/spree/variant_spec.rb +0 -818
  200. data/spec/models/spree/zone_member_spec.rb +0 -38
  201. data/spec/models/spree/zone_spec.rb +0 -472
  202. data/spec/spec_helper.rb +0 -79
  203. data/spec/support/big_decimal.rb +0 -5
  204. data/spec/support/concerns/adjustment_source.rb +0 -23
  205. data/spec/support/concerns/default_price.rb +0 -37
  206. data/spec/support/rake.rb +0 -13
  207. data/spec/support/test_gateway.rb +0 -2
@@ -1,113 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Promotion::Actions::CreateAdjustment, type: :model do
4
- let(:order) { create(:order_with_line_items, line_items_count: 1) }
5
- let(:promotion) { create(:promotion) }
6
- let(:action) { Spree::Promotion::Actions::CreateAdjustment.new }
7
- let(:payload) { { order: order } }
8
-
9
- it_behaves_like 'an adjustment source'
10
-
11
- describe '#compute_amount' do
12
- subject { described_class.new }
13
-
14
- let(:shipping_discount) { 10 }
15
- let(:order) do
16
- double(:order, item_total: 30, ship_total: 10, shipping_discount: shipping_discount)
17
- end
18
-
19
- context 'when shipping_discount is applied' do
20
- context 'and total is less than discount' do
21
- it 'returns discount amount eq to total' do
22
- allow(subject).to receive(:compute).with(order).and_return(100)
23
-
24
- expect(subject.compute_amount(order)).to eq -30
25
- end
26
- end
27
-
28
- context 'and total is equal to discount' do
29
- it 'returns discount amount' do
30
- allow(subject).to receive(:compute).with(order).and_return(30)
31
-
32
- expect(subject.compute_amount(order)).to eq -30
33
- end
34
- end
35
-
36
- context 'and total is greater than discount' do
37
- it 'returns discount amount' do
38
- allow(subject).to receive(:compute).with(order).and_return(10)
39
-
40
- expect(subject.compute_amount(order)).to eq -10
41
- end
42
- end
43
- end
44
-
45
- context 'when shipping_discount is not applied' do
46
- let(:shipping_discount) { 0 }
47
-
48
- context 'and total is less than discount' do
49
- it 'returns discount amount eq to total' do
50
- allow(subject).to receive(:compute).with(order).and_return(100)
51
-
52
- expect(subject.compute_amount(order)).to eq -40
53
- end
54
- end
55
-
56
- context 'and total is equal to discount' do
57
- it 'returns discount amount' do
58
- allow(subject).to receive(:compute).with(order).and_return(40)
59
-
60
- expect(subject.compute_amount(order)).to eq -40
61
- end
62
- end
63
-
64
- context 'and total is greater than discount' do
65
- it 'returns discount amount' do
66
- allow(subject).to receive(:compute).with(order).and_return(10)
67
-
68
- expect(subject.compute_amount(order)).to eq -10
69
- end
70
- end
71
- end
72
- end
73
-
74
- # From promotion spec:
75
- context "#perform" do
76
- before do
77
- action.calculator = Spree::Calculator::FlatRate.new(preferred_amount: 10)
78
- promotion.promotion_actions = [action]
79
- allow(action).to receive_messages(promotion: promotion)
80
- end
81
-
82
- # Regression test for #3966
83
- it "does not apply an adjustment if the amount is 0" do
84
- action.calculator.preferred_amount = 0
85
- action.perform(payload)
86
- expect(promotion.credits_count).to eq(0)
87
- expect(order.adjustments.count).to eq(0)
88
- end
89
-
90
- it "should create a discount with correct negative amount" do
91
- order.shipments.create!(cost: 10, stock_location: create(:stock_location))
92
-
93
- action.perform(payload)
94
- expect(promotion.credits_count).to eq(1)
95
- expect(order.adjustments.count).to eq(1)
96
- expect(order.adjustments.first.amount.to_i).to eq(-10)
97
- end
98
-
99
- it "should create a discount accessible through both order_id and adjustable_id" do
100
- action.perform(payload)
101
- expect(order.adjustments.count).to eq(1)
102
- expect(order.all_adjustments.count).to eq(1)
103
- end
104
-
105
- it "should not create a discount when order already has one from this promotion" do
106
- order.shipments.create!(cost: 10, stock_location: create(:stock_location))
107
-
108
- action.perform(payload)
109
- action.perform(payload)
110
- expect(promotion.credits_count).to eq(1)
111
- end
112
- end
113
- end
@@ -1,148 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
- class Promotion
5
- module Actions
6
- describe CreateItemAdjustments, type: :model do
7
- let(:order) { create(:order) }
8
- let(:promotion) { create(:promotion) }
9
- let(:action) { CreateItemAdjustments.new }
10
- let!(:line_item) { create(:line_item, order: order) }
11
- let(:payload) { { order: order, promotion: promotion } }
12
-
13
- before do
14
- allow(action).to receive(:promotion).and_return(promotion)
15
- promotion.promotion_actions = [action]
16
- end
17
-
18
- it_behaves_like 'an adjustment source'
19
-
20
- context "#perform" do
21
- # Regression test for #3966
22
- context "when calculator computes 0" do
23
- before do
24
- allow(action).to receive_messages compute_amount: 0
25
- end
26
-
27
- it "does not create an adjustment when calculator returns 0" do
28
- action.perform(payload)
29
- expect(action.adjustments).to be_empty
30
- end
31
- end
32
-
33
- context "when calculator returns a non-zero value" do
34
- before do
35
- promotion.promotion_actions = [action]
36
- allow(action).to receive_messages compute_amount: 10
37
- end
38
-
39
- it "creates adjustment with item as adjustable" do
40
- action.perform(payload)
41
- expect(action.adjustments.count).to eq(1)
42
- expect(line_item.reload.adjustments).to eq(action.adjustments)
43
- end
44
-
45
- it "creates adjustment with self as source" do
46
- action.perform(payload)
47
- expect(line_item.reload.adjustments.first.source).to eq action
48
- end
49
-
50
- it "does not perform twice on the same item" do
51
- 2.times { action.perform(payload) }
52
- expect(action.adjustments.count).to eq(1)
53
- end
54
-
55
- context "with products rules" do
56
- let!(:second_line_item) { create(:line_item, order: order) }
57
- let(:rule) { double Spree::Promotion::Rules::Product }
58
-
59
- before do
60
- allow(promotion).to receive(:eligible_rules) { [rule] }
61
- allow(rule).to receive(:actionable?).and_return(true, false)
62
- end
63
-
64
- it "does not create adjustments for line_items not in product rule" do
65
- action.perform(payload)
66
- expect(action.adjustments.count).to eql 1
67
- expect(line_item.reload.adjustments).to match_array action.adjustments
68
- expect(second_line_item.reload.adjustments).to be_empty
69
- end
70
- end
71
- end
72
- end
73
-
74
- context "#compute_amount" do
75
- before { promotion.promotion_actions = [action] }
76
-
77
- context "when the adjustable is actionable" do
78
- it "calls compute on the calculator" do
79
- allow(action.calculator).to receive(:compute).and_return(10)
80
- expect(action.calculator).to receive(:compute).with(line_item)
81
- action.compute_amount(line_item)
82
- end
83
-
84
- context "calculator returns amount greater than item total" do
85
- before do
86
- expect(action.calculator).to receive(:compute).with(line_item).and_return(300)
87
- allow(line_item).to receive_messages(amount: 100)
88
- end
89
-
90
- it "does not exceed it" do
91
- expect(action.compute_amount(line_item)).to eql(-100)
92
- end
93
- end
94
- end
95
-
96
- context "when the adjustable is not actionable" do
97
- before { allow(promotion).to receive(:line_item_actionable?) { false } }
98
-
99
- it 'returns 0' do
100
- expect(action.compute_amount(line_item)).to eql(0)
101
- end
102
- end
103
- end
104
-
105
- context "#destroy" do
106
- let!(:action) { CreateItemAdjustments.create! }
107
- let(:other_action) { CreateItemAdjustments.create! }
108
- before { promotion.promotion_actions = [other_action] }
109
-
110
- it "destroys adjustments for incompleted orders" do
111
- order = Order.create
112
- action.adjustments.create!(label: "Check",
113
- amount: 0,
114
- order: order,
115
- adjustable: line_item)
116
-
117
- expect {
118
- action.destroy
119
- }.to change { Adjustment.count }.by(-1)
120
- end
121
-
122
- it "nullifies adjustments for completed orders" do
123
- order = Order.create(completed_at: Time.current)
124
- adjustment = action.adjustments.create!(label: "Check",
125
- amount: 0,
126
- order: order,
127
- adjustable: line_item)
128
-
129
- expect {
130
- action.destroy
131
- }.to change { adjustment.reload.source_id }.from(action.id).to nil
132
- end
133
-
134
- it "doesnt mess with unrelated adjustments" do
135
- other_action.adjustments.create!(label: "Check",
136
- amount: 0,
137
- order: order,
138
- adjustable: line_item)
139
-
140
- expect {
141
- action.destroy
142
- }.not_to change { other_action.adjustments.count }
143
- end
144
- end
145
- end
146
- end
147
- end
148
- end
@@ -1,86 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Promotion::Actions::CreateLineItems, type: :model do
4
- let(:order) { create(:order) }
5
- let(:action) { Spree::Promotion::Actions::CreateLineItems.create }
6
- let(:promotion) { stub_model(Spree::Promotion) }
7
- let(:shirt) { create(:variant) }
8
- let(:mug) { create(:variant) }
9
- let(:payload) { { order: order } }
10
-
11
- def empty_stock(variant)
12
- variant.stock_items.update_all(backorderable: false)
13
- variant.stock_items.each(&:reduce_count_on_hand_to_zero)
14
- end
15
-
16
- context "#perform" do
17
- before do
18
- allow(action).to receive_messages promotion: promotion
19
- action.promotion_action_line_items.create!(
20
- variant: mug,
21
- quantity: 1
22
- )
23
- action.promotion_action_line_items.create!(
24
- variant: shirt,
25
- quantity: 2
26
- )
27
- end
28
-
29
- context "order is eligible" do
30
- before do
31
- allow(promotion).to receive_messages eligible: true
32
- end
33
-
34
- it "adds line items to order with correct variant and quantity" do
35
- action.perform(payload)
36
- expect(order.line_items.count).to eq(2)
37
- line_item = order.line_items.find_by_variant_id(mug.id)
38
- expect(line_item).not_to be_nil
39
- expect(line_item.quantity).to eq(1)
40
- end
41
-
42
- it "only adds the delta of quantity to an order" do
43
- order.contents.add(shirt, 1)
44
- action.perform(payload)
45
- line_item = order.line_items.find_by_variant_id(shirt.id)
46
- expect(line_item).not_to be_nil
47
- expect(line_item.quantity).to eq(2)
48
- end
49
-
50
- it "doesn't add if the quantity is greater" do
51
- order.contents.add(shirt, 3)
52
- action.perform(payload)
53
- line_item = order.line_items.find_by_variant_id(shirt.id)
54
- expect(line_item).not_to be_nil
55
- expect(line_item.quantity).to eq(3)
56
- end
57
-
58
- it "doesn't try to add an item if it's out of stock" do
59
- empty_stock(mug)
60
- empty_stock(shirt)
61
-
62
- expect(order.contents).to_not receive(:add)
63
- action.perform(order: order)
64
- end
65
- end
66
- end
67
-
68
- describe "#item_available?" do
69
- let(:item_out_of_stock) do
70
- action.promotion_action_line_items.create!(variant: mug, quantity: 1)
71
- end
72
-
73
- let(:item_in_stock) do
74
- action.promotion_action_line_items.create!(variant: shirt, quantity: 1)
75
- end
76
-
77
- it "returns false if the item is out of stock" do
78
- empty_stock(mug)
79
- expect(action.item_available? item_out_of_stock).to be false
80
- end
81
-
82
- it "returns true if the item is in stock" do
83
- expect(action.item_available? item_in_stock).to be true
84
- end
85
- end
86
- end
@@ -1,36 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Promotion::Actions::FreeShipping, type: :model do
4
- let(:order) { create(:completed_order_with_totals) }
5
- let(:promotion) { create(:promotion) }
6
- let(:action) { Spree::Promotion::Actions::FreeShipping.create }
7
- let(:payload) { { order: order } }
8
-
9
- it_behaves_like 'an adjustment source'
10
-
11
- # From promotion spec:
12
- context "#perform" do
13
- before do
14
- order.shipments << create(:shipment)
15
- promotion.promotion_actions << action
16
- end
17
-
18
- it "should create a discount with correct negative amount" do
19
- expect(order.shipments.count).to eq(2)
20
- expect(order.shipments.first.cost).to eq(100)
21
- expect(order.shipments.last.cost).to eq(100)
22
- expect(action.perform(payload)).to be true
23
- expect(promotion.credits_count).to eq(2)
24
- expect(order.shipment_adjustments.count).to eq(2)
25
- expect(order.shipment_adjustments.first.amount.to_i).to eq(-100)
26
- expect(order.shipment_adjustments.last.amount.to_i).to eq(-100)
27
- end
28
-
29
- it "should not create a discount when order already has one from this promotion" do
30
- expect(action.perform(payload)).to be true
31
- expect(action.perform(payload)).to be false
32
- expect(promotion.credits_count).to eq(2)
33
- expect(order.shipment_adjustments.count).to eq(2)
34
- end
35
- end
36
- end
@@ -1,36 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Promotion::Rules::Country, type: :model do
4
- let(:rule) { Spree::Promotion::Rules::Country.new }
5
- let(:order) { create(:order) }
6
- let(:country) { create(:country) }
7
- let(:other_country) { create(:country) }
8
-
9
- before { allow(Spree::Country).to receive(:default) { other_country.id } }
10
-
11
- context 'preferred country is set' do
12
- before { rule.preferred_country_id = country.id }
13
-
14
- it 'should be eligible for correct country' do
15
- allow(order).to receive_message_chain(:ship_address, :country_id) { country.id }
16
- expect(rule).to be_eligible(order)
17
- end
18
-
19
- it 'should not be eligible for incorrect country' do
20
- allow(order).to receive_message_chain(:ship_address, :country_id) { other_country.id }
21
- expect(rule).not_to be_eligible(order)
22
- end
23
- end
24
-
25
- context 'preferred country is not set' do
26
- it 'should be eligible for default country' do
27
- allow(order).to receive_message_chain(:ship_address, :country_id) { other_country.id }
28
- expect(rule).to be_eligible(order)
29
- end
30
-
31
- it 'should not be eligible for incorrect country' do
32
- allow(order).to receive_message_chain(:ship_address, :country_id) { country.id }
33
- expect(rule).not_to be_eligible(order)
34
- end
35
- end
36
- end
@@ -1,75 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Promotion::Rules::FirstOrder, type: :model do
4
- let(:rule) { Spree::Promotion::Rules::FirstOrder.new }
5
- let(:order) { mock_model(Spree::Order, user: nil, email: nil) }
6
- let(:user) { mock_model(Spree::LegacyUser) }
7
-
8
- context "without a user or email" do
9
- it { expect(rule).not_to be_eligible(order) }
10
- it "sets an error message" do
11
- rule.eligible?(order)
12
- expect(rule.eligibility_errors.full_messages.first).
13
- to eq "You need to login or provide your email before applying this coupon code."
14
- end
15
- end
16
-
17
- context "first order" do
18
- context "for a signed user" do
19
- context "with no completed orders" do
20
- before(:each) do
21
- allow(user).to receive_message_chain(:orders, complete: [])
22
- end
23
-
24
- specify do
25
- allow(order).to receive_messages(user: user)
26
- expect(rule).to be_eligible(order)
27
- end
28
-
29
- it "should be eligible when user passed in payload data" do
30
- expect(rule).to be_eligible(order, user: user)
31
- end
32
- end
33
-
34
- context "with completed orders" do
35
- before(:each) do
36
- allow(order).to receive_messages(user: user)
37
- end
38
-
39
- it "should be eligible when checked against first completed order" do
40
- allow(user).to receive_message_chain(:orders, complete: [order])
41
- expect(rule).to be_eligible(order)
42
- end
43
-
44
- context "with another order" do
45
- before { allow(user).to receive_message_chain(:orders, complete: [mock_model(Spree::Order)]) }
46
- it { expect(rule).not_to be_eligible(order) }
47
- it "sets an error message" do
48
- rule.eligible?(order)
49
- expect(rule.eligibility_errors.full_messages.first).
50
- to eq "This coupon code can only be applied to your first order."
51
- end
52
- end
53
- end
54
- end
55
-
56
- context "for a guest user" do
57
- let(:email) { 'user@spreecommerce.org' }
58
- before { allow(order).to receive_messages email: 'user@spreecommerce.org' }
59
-
60
- context "with no other orders" do
61
- it { expect(rule).to be_eligible(order) }
62
- end
63
-
64
- context "with another order" do
65
- before { allow(rule).to receive_messages(orders_by_email: [mock_model(Spree::Order)]) }
66
- it { expect(rule).not_to be_eligible(order) }
67
- it "sets an error message" do
68
- rule.eligible?(order)
69
- expect(rule.eligibility_errors.full_messages.first).
70
- to eq "This coupon code can only be applied to your first order."
71
- end
72
- end
73
- end
74
- end
75
- end