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.
- checksums.yaml +4 -4
- data/lib/spree/core/version.rb +1 -1
- data/spree_core.gemspec +1 -1
- metadata +3 -206
- data/spec/fixtures/microdata.html +0 -22
- data/spec/fixtures/microdata_itemref.html +0 -15
- data/spec/fixtures/microdata_no_itemscope.html +0 -20
- data/spec/fixtures/thinking-cat.jpg +0 -0
- data/spec/helpers/base_helper_spec.rb +0 -200
- data/spec/helpers/products_helper_spec.rb +0 -289
- data/spec/lib/calculated_adjustments_spec.rb +0 -7
- data/spec/lib/i18n_spec.rb +0 -123
- data/spec/lib/search/base_spec.rb +0 -86
- data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -103
- data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -110
- data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -17
- data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -72
- data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -39
- data/spec/lib/spree/core/delegate_belongs_to_spec.rb +0 -22
- data/spec/lib/spree/core/importer/order_spec.rb +0 -605
- data/spec/lib/spree/core/number_generator_spec.rb +0 -175
- data/spec/lib/spree/core/token_generator_spec.rb +0 -24
- data/spec/lib/spree/core/validators/email_spec.rb +0 -53
- data/spec/lib/spree/core_spec.rb +0 -23
- data/spec/lib/spree/localized_number_spec.rb +0 -48
- data/spec/lib/spree/migrations_spec.rb +0 -36
- data/spec/lib/spree/money_spec.rb +0 -122
- data/spec/lib/tasks/exchanges_spec.rb +0 -136
- data/spec/mailers/order_mailer_spec.rb +0 -122
- data/spec/mailers/reimbursement_mailer_spec.rb +0 -47
- data/spec/mailers/shipment_mailer_spec.rb +0 -81
- data/spec/mailers/test_mailer_spec.rb +0 -38
- data/spec/models/option_type_prototype_spec.rb +0 -9
- data/spec/models/spree/ability_spec.rb +0 -251
- data/spec/models/spree/address_spec.rb +0 -402
- data/spec/models/spree/adjustable/adjuster/base_spec.rb +0 -10
- data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +0 -211
- data/spec/models/spree/adjustable/adjuster/tax_spec.rb +0 -86
- data/spec/models/spree/adjustable/adjustments_updater_spec.rb +0 -26
- data/spec/models/spree/adjustment_spec.rb +0 -189
- data/spec/models/spree/app_configuration_spec.rb +0 -26
- data/spec/models/spree/asset_spec.rb +0 -28
- data/spec/models/spree/calculator/default_tax_spec.rb +0 -152
- data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -25
- data/spec/models/spree/calculator/flat_rate_spec.rb +0 -47
- data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -41
- data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -15
- data/spec/models/spree/calculator/price_sack_spec.rb +0 -30
- data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -47
- data/spec/models/spree/calculator/shipping.rb +0 -8
- data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -23
- data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -13
- data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -52
- data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -20
- data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -29
- data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -40
- data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -51
- data/spec/models/spree/calculator_spec.rb +0 -69
- data/spec/models/spree/classification_spec.rb +0 -93
- data/spec/models/spree/concerns/display_money_spec.rb +0 -43
- data/spec/models/spree/concerns/user_methods_spec.rb +0 -82
- data/spec/models/spree/concerns/vat_price_calculation_spec.rb +0 -66
- data/spec/models/spree/country_spec.rb +0 -55
- data/spec/models/spree/credit_card_spec.rb +0 -328
- data/spec/models/spree/customer_return_spec.rb +0 -240
- data/spec/models/spree/exchange_spec.rb +0 -75
- data/spec/models/spree/gateway/bogus_simple.rb +0 -20
- data/spec/models/spree/gateway/bogus_spec.rb +0 -13
- data/spec/models/spree/gateway_spec.rb +0 -61
- data/spec/models/spree/image_spec.rb +0 -8
- data/spec/models/spree/inventory_unit_spec.rb +0 -256
- data/spec/models/spree/line_item_spec.rb +0 -346
- data/spec/models/spree/option_type_spec.rb +0 -14
- data/spec/models/spree/option_value_spec.rb +0 -18
- data/spec/models/spree/order/address_spec.rb +0 -50
- data/spec/models/spree/order/adjustments_spec.rb +0 -29
- data/spec/models/spree/order/callbacks_spec.rb +0 -42
- data/spec/models/spree/order/checkout_spec.rb +0 -770
- data/spec/models/spree/order/currency_updater_spec.rb +0 -32
- data/spec/models/spree/order/finalizing_spec.rb +0 -114
- data/spec/models/spree/order/helpers_spec.rb +0 -5
- data/spec/models/spree/order/payment_spec.rb +0 -214
- data/spec/models/spree/order/risk_assessment_spec.rb +0 -84
- data/spec/models/spree/order/shipments_spec.rb +0 -43
- data/spec/models/spree/order/state_machine_spec.rb +0 -212
- data/spec/models/spree/order/store_credit_spec.rb +0 -426
- data/spec/models/spree/order/tax_spec.rb +0 -84
- data/spec/models/spree/order/totals_spec.rb +0 -24
- data/spec/models/spree/order/updating_spec.rb +0 -18
- data/spec/models/spree/order/validations_spec.rb +0 -15
- data/spec/models/spree/order_contents_spec.rb +0 -297
- data/spec/models/spree/order_inventory_spec.rb +0 -239
- data/spec/models/spree/order_merger_spec.rb +0 -135
- data/spec/models/spree/order_spec.rb +0 -1046
- data/spec/models/spree/order_updater_spec.rb +0 -305
- data/spec/models/spree/payment/gateway_options_spec.rb +0 -127
- data/spec/models/spree/payment/store_credit_spec.rb +0 -60
- data/spec/models/spree/payment_method/store_credit_spec.rb +0 -291
- data/spec/models/spree/payment_method_spec.rb +0 -103
- data/spec/models/spree/payment_spec.rb +0 -919
- data/spec/models/spree/preference_spec.rb +0 -80
- data/spec/models/spree/preferences/configuration_spec.rb +0 -30
- data/spec/models/spree/preferences/preferable_spec.rb +0 -344
- data/spec/models/spree/preferences/scoped_store_spec.rb +0 -58
- data/spec/models/spree/preferences/store_spec.rb +0 -46
- data/spec/models/spree/price_spec.rb +0 -128
- data/spec/models/spree/product/scopes_spec.rb +0 -183
- data/spec/models/spree/product_duplicator_spec.rb +0 -103
- data/spec/models/spree/product_filter_spec.rb +0 -26
- data/spec/models/spree/product_option_type_spec.rb +0 -9
- data/spec/models/spree/product_promotion_rule_spec.rb +0 -9
- data/spec/models/spree/product_property_spec.rb +0 -26
- data/spec/models/spree/product_spec.rb +0 -629
- data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -113
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -148
- data/spec/models/spree/promotion/actions/create_line_items_spec.rb +0 -86
- data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -36
- data/spec/models/spree/promotion/rules/country_spec.rb +0 -36
- data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -75
- data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -282
- data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -42
- data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -90
- data/spec/models/spree/promotion/rules/product_spec.rb +0 -143
- data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -102
- data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -27
- data/spec/models/spree/promotion/rules/user_spec.rb +0 -45
- data/spec/models/spree/promotion_action_spec.rb +0 -10
- data/spec/models/spree/promotion_category_spec.rb +0 -17
- data/spec/models/spree/promotion_handler/cart_spec.rb +0 -102
- data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -323
- data/spec/models/spree/promotion_handler/free_shipping_spec.rb +0 -48
- data/spec/models/spree/promotion_handler/page_spec.rb +0 -44
- data/spec/models/spree/promotion_rule_spec.rb +0 -29
- data/spec/models/spree/promotion_rule_taxon_spec.rb +0 -9
- data/spec/models/spree/promotion_rule_user_spec.rb +0 -9
- data/spec/models/spree/promotion_spec.rb +0 -679
- data/spec/models/spree/property_prototype_spec.rb +0 -9
- data/spec/models/spree/property_spec.rb +0 -5
- data/spec/models/spree/prototype_spec.rb +0 -5
- data/spec/models/spree/prototype_taxon_spec.rb +0 -9
- data/spec/models/spree/refund_reason_spec.rb +0 -20
- data/spec/models/spree/refund_spec.rb +0 -195
- data/spec/models/spree/reimbursement/credit_spec.rb +0 -36
- data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -140
- data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -83
- data/spec/models/spree/reimbursement_performer_spec.rb +0 -30
- data/spec/models/spree/reimbursement_spec.rb +0 -188
- data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -63
- data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -53
- data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -46
- data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -55
- data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -101
- data/spec/models/spree/return_authorization_reason_spec.rb +0 -7
- data/spec/models/spree/return_authorization_spec.rb +0 -230
- data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -77
- data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -58
- data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -61
- data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -32
- data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -29
- data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -35
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -65
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
- data/spec/models/spree/return_item_spec.rb +0 -731
- data/spec/models/spree/returns_calculator_spec.rb +0 -14
- data/spec/models/spree/role_spec.rb +0 -7
- data/spec/models/spree/shipment_spec.rb +0 -742
- data/spec/models/spree/shipping_calculator_spec.rb +0 -45
- data/spec/models/spree/shipping_category_spec.rb +0 -19
- data/spec/models/spree/shipping_method_spec.rb +0 -95
- data/spec/models/spree/shipping_rate_spec.rb +0 -140
- data/spec/models/spree/state_spec.rb +0 -29
- data/spec/models/spree/stock/availability_validator_spec.rb +0 -36
- data/spec/models/spree/stock/content_item_spec.rb +0 -31
- data/spec/models/spree/stock/coordinator_spec.rb +0 -61
- data/spec/models/spree/stock/differentiator_spec.rb +0 -39
- data/spec/models/spree/stock/estimator_spec.rb +0 -202
- data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -38
- data/spec/models/spree/stock/package_spec.rb +0 -182
- data/spec/models/spree/stock/packer_spec.rb +0 -70
- data/spec/models/spree/stock/prioritizer_spec.rb +0 -125
- data/spec/models/spree/stock/quantifier_spec.rb +0 -126
- data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -29
- data/spec/models/spree/stock/splitter/base_spec.rb +0 -21
- data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -47
- data/spec/models/spree/stock/splitter/weight_spec.rb +0 -32
- data/spec/models/spree/stock_item_spec.rb +0 -432
- data/spec/models/spree/stock_location_spec.rb +0 -243
- data/spec/models/spree/stock_movement_spec.rb +0 -120
- data/spec/models/spree/stock_transfer_spec.rb +0 -50
- data/spec/models/spree/store_credit_event_spec.rb +0 -101
- data/spec/models/spree/store_credit_spec.rb +0 -786
- data/spec/models/spree/store_spec.rb +0 -78
- data/spec/models/spree/tax_category_spec.rb +0 -32
- data/spec/models/spree/tax_rate_spec.rb +0 -561
- data/spec/models/spree/taxon_spec.rb +0 -85
- data/spec/models/spree/taxonomy_spec.rb +0 -18
- data/spec/models/spree/tracker_spec.rb +0 -21
- data/spec/models/spree/user_spec.rb +0 -203
- data/spec/models/spree/variant_spec.rb +0 -818
- data/spec/models/spree/zone_member_spec.rb +0 -38
- data/spec/models/spree/zone_spec.rb +0 -472
- data/spec/spec_helper.rb +0 -79
- data/spec/support/big_decimal.rb +0 -5
- data/spec/support/concerns/adjustment_source.rb +0 -23
- data/spec/support/concerns/default_price.rb +0 -37
- data/spec/support/rake.rb +0 -13
- data/spec/support/test_gateway.rb +0 -2
|
@@ -1,282 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Spree::Promotion::Rules::ItemTotal, type: :model do
|
|
4
|
-
let(:rule) { Spree::Promotion::Rules::ItemTotal.new }
|
|
5
|
-
let(:order) { double(:order) }
|
|
6
|
-
|
|
7
|
-
before { rule.preferred_amount_min = 50 }
|
|
8
|
-
before { rule.preferred_amount_max = 60 }
|
|
9
|
-
|
|
10
|
-
context "preferred operator_min set to gt and preferred operator_max set to lt" do
|
|
11
|
-
before do
|
|
12
|
-
rule.preferred_operator_min = 'gt'
|
|
13
|
-
rule.preferred_operator_max = 'lt'
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
context "and item total is lower than prefered maximum amount" do
|
|
17
|
-
|
|
18
|
-
context "and item total is higher than prefered minimum amount" do
|
|
19
|
-
it "should be eligible" do
|
|
20
|
-
allow(order).to receive_messages item_total: 51
|
|
21
|
-
expect(rule).to be_eligible(order)
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
context "and item total is equal to the prefered minimum amount" do
|
|
26
|
-
|
|
27
|
-
before { allow(order).to receive_messages item_total: 50 }
|
|
28
|
-
|
|
29
|
-
it "should not be eligible" do
|
|
30
|
-
expect(rule).to_not be_eligible(order)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "set an error message" do
|
|
34
|
-
rule.eligible?(order)
|
|
35
|
-
expect(rule.eligibility_errors.full_messages.first).
|
|
36
|
-
to eq "This coupon code can't be applied to orders less than or equal to $50.00."
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
context "and item total is lower to the prefered minimum amount" do
|
|
41
|
-
before { allow(order).to receive_messages item_total: 49 }
|
|
42
|
-
|
|
43
|
-
it "should not be eligible" do
|
|
44
|
-
expect(rule).to_not be_eligible(order)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "set an error message" do
|
|
48
|
-
rule.eligible?(order)
|
|
49
|
-
expect(rule.eligibility_errors.full_messages.first).
|
|
50
|
-
to eq "This coupon code can't be applied to orders less than or equal to $50.00."
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
context "and item total is equal to the prefered maximum amount" do
|
|
56
|
-
before { allow(order).to receive_messages item_total: 60 }
|
|
57
|
-
|
|
58
|
-
it "should not be eligible" do
|
|
59
|
-
expect(rule).to_not be_eligible(order)
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
it "set an error message" do
|
|
63
|
-
rule.eligible?(order)
|
|
64
|
-
expect(rule.eligibility_errors.full_messages.first).
|
|
65
|
-
to eq "This coupon code can't be applied to orders higher than $60.00."
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
context "and item total is higher than the prefered maximum amount" do
|
|
70
|
-
before { allow(order).to receive_messages item_total: 61 }
|
|
71
|
-
|
|
72
|
-
it "should not be eligible" do
|
|
73
|
-
expect(rule).to_not be_eligible(order)
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
it "set an error message" do
|
|
77
|
-
rule.eligible?(order)
|
|
78
|
-
expect(rule.eligibility_errors.full_messages.first).
|
|
79
|
-
to eq "This coupon code can't be applied to orders higher than $60.00."
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
context "preferred operator set to gt and preferred operator_max set to lte" do
|
|
86
|
-
before do
|
|
87
|
-
rule.preferred_operator_min = 'gt'
|
|
88
|
-
rule.preferred_operator_max = 'lte'
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
context "and item total is lower than prefered maximum amount" do
|
|
92
|
-
|
|
93
|
-
context "and item total is higher than prefered minimum amount" do
|
|
94
|
-
it "should be eligible" do
|
|
95
|
-
allow(order).to receive_messages item_total: 51
|
|
96
|
-
expect(rule).to be_eligible(order)
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
context "and item total is equal to the prefered minimum amount" do
|
|
101
|
-
|
|
102
|
-
before { allow(order).to receive_messages item_total: 50 }
|
|
103
|
-
|
|
104
|
-
it "should not be eligible" do
|
|
105
|
-
expect(rule).to_not be_eligible(order)
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
it "set an error message" do
|
|
109
|
-
rule.eligible?(order)
|
|
110
|
-
expect(rule.eligibility_errors.full_messages.first).
|
|
111
|
-
to eq "This coupon code can't be applied to orders less than or equal to $50.00."
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
context "and item total is lower to the prefered minimum amount" do
|
|
116
|
-
before { allow(order).to receive_messages item_total: 49 }
|
|
117
|
-
|
|
118
|
-
it "should not be eligible" do
|
|
119
|
-
expect(rule).to_not be_eligible(order)
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
it "set an error message" do
|
|
123
|
-
rule.eligible?(order)
|
|
124
|
-
expect(rule.eligibility_errors.full_messages.first).
|
|
125
|
-
to eq "This coupon code can't be applied to orders less than or equal to $50.00."
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
context "and item total is equal to the prefered maximum amount" do
|
|
131
|
-
before { allow(order).to receive_messages item_total: 60 }
|
|
132
|
-
|
|
133
|
-
it "should not be eligible" do
|
|
134
|
-
expect(rule).to be_eligible(order)
|
|
135
|
-
end
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
context "and item total is higher than the prefered maximum amount" do
|
|
139
|
-
before { allow(order).to receive_messages item_total: 61 }
|
|
140
|
-
|
|
141
|
-
it "should not be eligible" do
|
|
142
|
-
expect(rule).to_not be_eligible(order)
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
it "set an error message" do
|
|
146
|
-
rule.eligible?(order)
|
|
147
|
-
expect(rule.eligibility_errors.full_messages.first).
|
|
148
|
-
to eq "This coupon code can't be applied to orders higher than $60.00."
|
|
149
|
-
end
|
|
150
|
-
end
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
context "preferred operator set to gte and preferred operator_max set to lt" do
|
|
154
|
-
before do
|
|
155
|
-
rule.preferred_operator_min = 'gte'
|
|
156
|
-
rule.preferred_operator_max = 'lt'
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
context "and item total is lower than prefered maximum amount" do
|
|
160
|
-
|
|
161
|
-
context "and item total is higher than prefered minimum amount" do
|
|
162
|
-
it "should be eligible" do
|
|
163
|
-
allow(order).to receive_messages item_total: 51
|
|
164
|
-
expect(rule).to be_eligible(order)
|
|
165
|
-
end
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
context "and item total is equal to the prefered minimum amount" do
|
|
169
|
-
|
|
170
|
-
before { allow(order).to receive_messages item_total: 50 }
|
|
171
|
-
|
|
172
|
-
it "should not be eligible" do
|
|
173
|
-
expect(rule).to be_eligible(order)
|
|
174
|
-
end
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
context "and item total is lower to the prefered minimum amount" do
|
|
178
|
-
before { allow(order).to receive_messages item_total: 49 }
|
|
179
|
-
|
|
180
|
-
it "should not be eligible" do
|
|
181
|
-
expect(rule).to_not be_eligible(order)
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
it "set an error message" do
|
|
185
|
-
rule.eligible?(order)
|
|
186
|
-
expect(rule.eligibility_errors.full_messages.first).
|
|
187
|
-
to eq "This coupon code can't be applied to orders less than $50.00."
|
|
188
|
-
end
|
|
189
|
-
end
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
context "and item total is equal to the prefered maximum amount" do
|
|
193
|
-
before { allow(order).to receive_messages item_total: 60 }
|
|
194
|
-
|
|
195
|
-
it "should not be eligible" do
|
|
196
|
-
expect(rule).to_not be_eligible(order)
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
it "set an error message" do
|
|
200
|
-
rule.eligible?(order)
|
|
201
|
-
expect(rule.eligibility_errors.full_messages.first).
|
|
202
|
-
to eq "This coupon code can't be applied to orders higher than $60.00."
|
|
203
|
-
end
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
context "and item total is higher than the prefered maximum amount" do
|
|
207
|
-
before { allow(order).to receive_messages item_total: 61 }
|
|
208
|
-
|
|
209
|
-
it "should not be eligible" do
|
|
210
|
-
expect(rule).to_not be_eligible(order)
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
it "set an error message" do
|
|
214
|
-
rule.eligible?(order)
|
|
215
|
-
expect(rule.eligibility_errors.full_messages.first).
|
|
216
|
-
to eq "This coupon code can't be applied to orders higher than $60.00."
|
|
217
|
-
end
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
context "preferred operator set to gte and preferred operator_max set to lte" do
|
|
223
|
-
before do
|
|
224
|
-
rule.preferred_operator_min = 'gte'
|
|
225
|
-
rule.preferred_operator_max = 'lte'
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
context "and item total is lower than prefered maximum amount" do
|
|
229
|
-
context "and item total is higher than prefered minimum amount" do
|
|
230
|
-
it "should be eligible" do
|
|
231
|
-
allow(order).to receive_messages item_total: 51
|
|
232
|
-
expect(rule).to be_eligible(order)
|
|
233
|
-
end
|
|
234
|
-
end
|
|
235
|
-
|
|
236
|
-
context "and item total is equal to the prefered minimum amount" do
|
|
237
|
-
|
|
238
|
-
before { allow(order).to receive_messages item_total: 50 }
|
|
239
|
-
|
|
240
|
-
it "should not be eligible" do
|
|
241
|
-
expect(rule).to be_eligible(order)
|
|
242
|
-
end
|
|
243
|
-
end
|
|
244
|
-
|
|
245
|
-
context "and item total is lower to the prefered minimum amount" do
|
|
246
|
-
before { allow(order).to receive_messages item_total: 49 }
|
|
247
|
-
|
|
248
|
-
it "should not be eligible" do
|
|
249
|
-
expect(rule).to_not be_eligible(order)
|
|
250
|
-
end
|
|
251
|
-
|
|
252
|
-
it "set an error message" do
|
|
253
|
-
rule.eligible?(order)
|
|
254
|
-
expect(rule.eligibility_errors.full_messages.first).
|
|
255
|
-
to eq "This coupon code can't be applied to orders less than $50.00."
|
|
256
|
-
end
|
|
257
|
-
end
|
|
258
|
-
end
|
|
259
|
-
|
|
260
|
-
context "and item total is equal to the prefered maximum amount" do
|
|
261
|
-
before { allow(order).to receive_messages item_total: 60 }
|
|
262
|
-
|
|
263
|
-
it "should not be eligible" do
|
|
264
|
-
expect(rule).to be_eligible(order)
|
|
265
|
-
end
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
context "and item total is higher than the prefered maximum amount" do
|
|
269
|
-
before { allow(order).to receive_messages item_total: 61 }
|
|
270
|
-
|
|
271
|
-
it "should not be eligible" do
|
|
272
|
-
expect(rule).to_not be_eligible(order)
|
|
273
|
-
end
|
|
274
|
-
|
|
275
|
-
it "set an error message" do
|
|
276
|
-
rule.eligible?(order)
|
|
277
|
-
expect(rule.eligibility_errors.full_messages.first).
|
|
278
|
-
to eq "This coupon code can't be applied to orders higher than $60.00."
|
|
279
|
-
end
|
|
280
|
-
end
|
|
281
|
-
end
|
|
282
|
-
end
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Spree::Promotion::Rules::OneUsePerUser, type: :model do
|
|
4
|
-
let(:rule) { described_class.new }
|
|
5
|
-
|
|
6
|
-
describe '#eligible?(order)' do
|
|
7
|
-
subject { rule.eligible?(order) }
|
|
8
|
-
let(:order) { double Spree::Order, user: user }
|
|
9
|
-
let(:user) { double Spree::LegacyUser }
|
|
10
|
-
let(:promotion) { stub_model Spree::Promotion, used_by?: used_by }
|
|
11
|
-
let(:used_by) { false }
|
|
12
|
-
|
|
13
|
-
before { rule.promotion = promotion }
|
|
14
|
-
|
|
15
|
-
context 'when the order is assigned to a user' do
|
|
16
|
-
context 'when the user has used this promotion before' do
|
|
17
|
-
let(:used_by) { true }
|
|
18
|
-
|
|
19
|
-
it { is_expected.to be false }
|
|
20
|
-
it "sets an error message" do
|
|
21
|
-
subject
|
|
22
|
-
expect(rule.eligibility_errors.full_messages.first).
|
|
23
|
-
to eq "This coupon code can only be used once per user."
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
context 'when the user has not used this promotion before' do
|
|
28
|
-
it { is_expected.to be true }
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
context 'when the order is not assigned to a user' do
|
|
33
|
-
let(:user) { nil }
|
|
34
|
-
it { is_expected.to be false }
|
|
35
|
-
it "sets an error message" do
|
|
36
|
-
subject
|
|
37
|
-
expect(rule.eligibility_errors.full_messages.first).
|
|
38
|
-
to eq "You need to login before applying this coupon code."
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Spree::Promotion::Rules::OptionValue do
|
|
4
|
-
let(:rule) { Spree::Promotion::Rules::OptionValue.new }
|
|
5
|
-
|
|
6
|
-
describe "#preferred_eligible_values" do
|
|
7
|
-
subject { rule.preferred_eligible_values }
|
|
8
|
-
it "assigns a nicely formatted hash" do
|
|
9
|
-
rule.preferred_eligible_values = Hash["5" => "1,2", "6" => "1"]
|
|
10
|
-
expect(subject).to eq Hash[5 => [1, 2], 6 => [1]]
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
describe "#applicable?" do
|
|
15
|
-
subject { rule.applicable?(promotable) }
|
|
16
|
-
context "when promotable is an order" do
|
|
17
|
-
let(:promotable) { Spree::Order.new }
|
|
18
|
-
it { should be true }
|
|
19
|
-
end
|
|
20
|
-
context "when promotable is not an order" do
|
|
21
|
-
let(:promotable) { Spree::LineItem.new }
|
|
22
|
-
it { should be false }
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
describe "#eligible?" do
|
|
27
|
-
let(:variant) { create :variant }
|
|
28
|
-
let(:line_item) { create :line_item, variant: variant }
|
|
29
|
-
let(:promotable) { line_item.order }
|
|
30
|
-
subject { rule.eligible?(promotable) }
|
|
31
|
-
context "when there are any applicable line items" do
|
|
32
|
-
before do
|
|
33
|
-
rule.preferred_eligible_values = Hash[variant.product.id => [
|
|
34
|
-
variant.option_values.pluck(:id).first
|
|
35
|
-
]]
|
|
36
|
-
end
|
|
37
|
-
it { should be true }
|
|
38
|
-
end
|
|
39
|
-
context "when there are no applicable line items" do
|
|
40
|
-
before do
|
|
41
|
-
rule.preferred_eligible_values = Hash[99 => [99]]
|
|
42
|
-
end
|
|
43
|
-
it { should be false }
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
describe "#actionable?" do
|
|
48
|
-
let(:line_item) { create :line_item }
|
|
49
|
-
let(:option_value_blue) do
|
|
50
|
-
create(
|
|
51
|
-
:option_value,
|
|
52
|
-
name: 'Blue',
|
|
53
|
-
presentation: 'Blue',
|
|
54
|
-
option_type: create(
|
|
55
|
-
:option_type,
|
|
56
|
-
name: 'foo-colour',
|
|
57
|
-
presentation: 'Colour'
|
|
58
|
-
)
|
|
59
|
-
)
|
|
60
|
-
end
|
|
61
|
-
let(:option_value_medium) do
|
|
62
|
-
create(
|
|
63
|
-
:option_value,
|
|
64
|
-
name: 'Medium',
|
|
65
|
-
presentation: 'M'
|
|
66
|
-
)
|
|
67
|
-
end
|
|
68
|
-
before do
|
|
69
|
-
line_item.variant.option_values << option_value_blue
|
|
70
|
-
rule.preferred_eligible_values = Hash[product_id => option_value_ids]
|
|
71
|
-
end
|
|
72
|
-
subject { rule.actionable?(line_item) }
|
|
73
|
-
context "when the line item has the correct product" do
|
|
74
|
-
let(:product_id) { line_item.product.id }
|
|
75
|
-
context "when all of the option values match" do
|
|
76
|
-
let(:option_value_ids) { [option_value_blue.id] }
|
|
77
|
-
it { should be true }
|
|
78
|
-
end
|
|
79
|
-
context "when not all of the option values match" do
|
|
80
|
-
let(:option_value_ids) { [option_value_blue.id, option_value_medium.id] }
|
|
81
|
-
it { should be false }
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
context "when the line item's product doesn't match" do
|
|
85
|
-
let(:product_id) { 99 }
|
|
86
|
-
let(:option_value_ids) { [99] }
|
|
87
|
-
it { should be false }
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
end
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Spree::Promotion::Rules::Product, type: :model do
|
|
4
|
-
let(:rule) { Spree::Promotion::Rules::Product.new(rule_options) }
|
|
5
|
-
let(:rule_options) { {} }
|
|
6
|
-
|
|
7
|
-
context "#eligible?(order)" do
|
|
8
|
-
let(:order) { Spree::Order.new }
|
|
9
|
-
|
|
10
|
-
it "should be eligible if there are no products" do
|
|
11
|
-
allow(rule).to receive_messages(eligible_products: [])
|
|
12
|
-
expect(rule).to be_eligible(order)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
before do
|
|
16
|
-
3.times { |i| instance_variable_set("@product#{i}", mock_model(Spree::Product)) }
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
context "with 'any' match policy" do
|
|
20
|
-
let(:rule_options) { super().merge(preferred_match_policy: 'any') }
|
|
21
|
-
|
|
22
|
-
it "should be eligible if any of the products is in eligible products" do
|
|
23
|
-
allow(order).to receive_messages(products: [@product1, @product2])
|
|
24
|
-
allow(rule).to receive_messages(eligible_products: [@product2, @product3])
|
|
25
|
-
expect(rule).to be_eligible(order)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
context "when none of the products are eligible products" do
|
|
29
|
-
before do
|
|
30
|
-
allow(order).to receive_messages(products: [@product1])
|
|
31
|
-
allow(rule).to receive_messages(eligible_products: [@product2, @product3])
|
|
32
|
-
end
|
|
33
|
-
it { expect(rule).not_to be_eligible(order) }
|
|
34
|
-
it "sets an error message" do
|
|
35
|
-
rule.eligible?(order)
|
|
36
|
-
expect(rule.eligibility_errors.full_messages.first).
|
|
37
|
-
to eq "You need to add an applicable product before applying this coupon code."
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
context "with 'all' match policy" do
|
|
43
|
-
let(:rule_options) { super().merge(preferred_match_policy: 'all') }
|
|
44
|
-
|
|
45
|
-
it "should be eligible if all of the eligible products are ordered" do
|
|
46
|
-
allow(order).to receive_messages(products: [@product3, @product2, @product1])
|
|
47
|
-
allow(rule).to receive_messages(eligible_products: [@product2, @product3])
|
|
48
|
-
expect(rule).to be_eligible(order)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
context "when any of the eligible products is not ordered" do
|
|
52
|
-
before do
|
|
53
|
-
allow(order).to receive_messages(products: [@product1, @product2])
|
|
54
|
-
allow(rule).to receive_messages(eligible_products: [@product1, @product2, @product3])
|
|
55
|
-
end
|
|
56
|
-
it { expect(rule).not_to be_eligible(order) }
|
|
57
|
-
it "sets an error message" do
|
|
58
|
-
rule.eligible?(order)
|
|
59
|
-
expect(rule.eligibility_errors.full_messages.first).
|
|
60
|
-
to eq "This coupon code can't be applied because you don't have all of the necessary products in your cart."
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
context "with 'none' match policy" do
|
|
66
|
-
let(:rule_options) { super().merge(preferred_match_policy: 'none') }
|
|
67
|
-
|
|
68
|
-
it "should be eligible if none of the order's products are in eligible products" do
|
|
69
|
-
allow(order).to receive_messages(products: [@product1])
|
|
70
|
-
allow(rule).to receive_messages(eligible_products: [@product2, @product3])
|
|
71
|
-
expect(rule).to be_eligible(order)
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
context "when any of the order's products are in eligible products" do
|
|
75
|
-
before do
|
|
76
|
-
allow(order).to receive_messages(products: [@product1, @product2])
|
|
77
|
-
allow(rule).to receive_messages(eligible_products: [@product2, @product3])
|
|
78
|
-
end
|
|
79
|
-
it { expect(rule).not_to be_eligible(order) }
|
|
80
|
-
it "sets an error message" do
|
|
81
|
-
rule.eligible?(order)
|
|
82
|
-
expect(rule.eligibility_errors.full_messages.first).
|
|
83
|
-
to eq "Your cart contains a product that prevents this coupon code from being applied."
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
describe '#actionable?' do
|
|
90
|
-
subject do
|
|
91
|
-
rule.actionable?(line_item)
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
let(:rule_line_item) { Spree::LineItem.new(product: rule_product) }
|
|
95
|
-
let(:other_line_item) { Spree::LineItem.new(product: other_product) }
|
|
96
|
-
|
|
97
|
-
let(:rule_options) { super().merge(products: [rule_product]) }
|
|
98
|
-
let(:rule_product) { mock_model(Spree::Product) }
|
|
99
|
-
let(:other_product) { mock_model(Spree::Product) }
|
|
100
|
-
|
|
101
|
-
context "with 'any' match policy" do
|
|
102
|
-
let(:rule_options) { super().merge(preferred_match_policy: 'any') }
|
|
103
|
-
|
|
104
|
-
context 'for product in rule' do
|
|
105
|
-
let(:line_item) { rule_line_item }
|
|
106
|
-
it { should be_truthy }
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
context 'for product not in rule' do
|
|
110
|
-
let(:line_item) { other_line_item }
|
|
111
|
-
it { should be_falsey }
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
context "with 'all' match policy" do
|
|
116
|
-
let(:rule_options) { super().merge(preferred_match_policy: 'all') }
|
|
117
|
-
|
|
118
|
-
context 'for product in rule' do
|
|
119
|
-
let(:line_item) { rule_line_item }
|
|
120
|
-
it { should be_truthy }
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
context 'for product not in rule' do
|
|
124
|
-
let(:line_item) { other_line_item }
|
|
125
|
-
it { should be_falsey }
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
context "with 'none' match policy" do
|
|
130
|
-
let(:rule_options) { super().merge(preferred_match_policy: 'none') }
|
|
131
|
-
|
|
132
|
-
context 'for product in rule' do
|
|
133
|
-
let(:line_item) { rule_line_item }
|
|
134
|
-
it { should be_falsey }
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
context 'for product not in rule' do
|
|
138
|
-
let(:line_item) { other_line_item }
|
|
139
|
-
it { should be_truthy }
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
end
|
|
143
|
-
end
|