spree_core 4.1.12 → 4.2.0.rc3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/spree/base_controller.rb +1 -2
- data/app/finders/spree/addresses/find.rb +1 -12
- data/app/finders/spree/base_finder.rb +14 -0
- data/app/finders/spree/countries/find.rb +11 -3
- data/app/finders/spree/credit_cards/find.rb +2 -2
- data/app/finders/spree/orders/find_current.rb +1 -1
- data/app/helpers/spree/base_helper.rb +61 -20
- data/app/helpers/spree/mail_helper.rb +29 -0
- data/app/helpers/spree/products_helper.rb +2 -1
- data/app/mailers/spree/base_mailer.rb +19 -5
- data/app/mailers/spree/order_mailer.rb +13 -4
- data/app/mailers/spree/reimbursement_mailer.rb +4 -2
- data/app/mailers/spree/shipment_mailer.rb +4 -2
- data/app/models/concerns/spree/default_price.rb +3 -6
- data/app/models/concerns/spree/user_methods.rb +11 -5
- data/app/models/concerns/spree/user_payment_source.rb +1 -1
- data/app/models/spree/ability.rb +2 -6
- data/app/models/spree/address.rb +17 -1
- data/app/models/spree/adjustment.rb +1 -0
- data/app/models/spree/app_configuration.rb +4 -0
- data/app/models/spree/app_dependencies.rb +4 -2
- data/app/models/spree/base.rb +5 -0
- data/app/models/spree/credit_card.rb +5 -0
- data/app/models/spree/fulfilment_changer.rb +58 -16
- data/app/models/spree/inventory_unit.rb +2 -7
- data/app/models/spree/line_item.rb +11 -7
- data/app/models/spree/log_entry.rb +1 -1
- data/app/models/spree/option_type.rb +7 -1
- data/app/models/spree/order.rb +27 -5
- data/app/models/spree/order/address_book.rb +7 -20
- data/app/models/spree/order/payments.rb +10 -2
- data/app/models/spree/payment.rb +18 -4
- data/app/models/spree/payment/processing.rb +2 -2
- data/app/models/spree/payment_method.rb +3 -3
- data/app/models/spree/preferences/store.rb +1 -1
- data/app/models/spree/price.rb +25 -6
- data/app/models/spree/product.rb +29 -9
- data/app/models/spree/promotion.rb +10 -15
- data/app/models/spree/promotion/rules/product.rb +2 -1
- data/app/models/spree/promotion/rules/user.rb +2 -1
- data/app/models/spree/promotion_handler/coupon.rb +2 -3
- data/app/models/spree/promotion_handler/promotion_duplicator.rb +9 -3
- data/app/models/spree/refund.rb +2 -2
- data/app/models/spree/reimbursement.rb +2 -0
- data/app/models/spree/return_item/eligibility_validator/default.rb +0 -2
- data/app/models/spree/return_item/eligibility_validator/{r_m_a_required.rb → rma_required.rb} +0 -0
- data/app/models/spree/shipment.rb +3 -6
- data/app/models/spree/shipping_method.rb +1 -5
- data/app/models/spree/shipping_rate.rb +2 -11
- data/app/models/spree/stock/availability_validator.rb +3 -4
- data/app/models/spree/stock_item.rb +1 -5
- data/app/models/spree/stock_location.rb +13 -2
- data/app/models/spree/store.rb +51 -2
- data/app/models/spree/store_credit.rb +1 -1
- data/app/models/spree/variant.rb +16 -10
- data/app/models/spree/zone.rb +17 -4
- data/app/presenters/spree/variant_presenter.rb +9 -1
- data/app/presenters/spree/variants/option_types_presenter.rb +1 -0
- data/app/services/spree/account/addresses/create.rb +6 -1
- data/app/services/spree/account/addresses/{base.rb → helper.rb} +1 -3
- data/app/services/spree/account/addresses/update.rb +6 -1
- data/app/services/spree/compare_line_items.rb +4 -2
- data/app/sorters/spree/base_sorter.rb +35 -0
- data/app/sorters/spree/orders/sort.rb +1 -37
- data/app/sorters/spree/products/sort.rb +9 -32
- data/app/validators/email_validator.rb +1 -1
- data/app/views/layouts/spree/base_mailer.html.erb +45 -40
- data/app/views/spree/order_mailer/cancel_email.html.erb +19 -25
- data/app/views/spree/order_mailer/cancel_email.text.erb +24 -2
- data/app/views/spree/order_mailer/confirm_email.html.erb +18 -65
- data/app/views/spree/order_mailer/confirm_email.text.erb +2 -1
- data/app/views/spree/order_mailer/store_owner_notification_email.html.erb +23 -0
- data/app/views/spree/order_mailer/store_owner_notification_email.text.erb +38 -0
- data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +53 -58
- data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +3 -1
- data/app/views/spree/shared/_base_mailer_footer.html.erb +6 -14
- data/app/views/spree/shared/_base_mailer_header.html.erb +12 -32
- data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +293 -625
- data/app/views/spree/shared/_purchased_items_table.html.erb +60 -0
- data/app/views/spree/shared/purchased_items_table/_adjustment.html.erb +13 -0
- data/app/views/spree/shared/purchased_items_table/_line_item.html.erb +27 -0
- data/app/views/spree/shared/purchased_items_table/_subtotal.html.erb +13 -0
- data/app/views/spree/shared/purchased_items_table/_total.html.erb +13 -0
- data/app/views/spree/shipment_mailer/shipped_email.html.erb +31 -36
- data/app/views/spree/shipment_mailer/shipped_email.text.erb +2 -1
- data/config/initializers/assets.rb +1 -0
- data/config/initializers/inflections.rb +3 -0
- data/config/initializers/rails61_fixes.rb +3 -0
- data/config/locales/en.yml +145 -19
- data/db/default/spree/countries.rb +10 -4
- data/db/default/spree/states.rb +42 -5
- data/db/default/spree/stores.rb +17 -12
- data/db/default/spree/zones.rb +1 -1
- data/db/migrate/20130326175857_add_stock_location_to_rma.rb +1 -1
- data/db/migrate/20140309033438_create_store_from_preferences.rb +1 -1
- data/db/migrate/20191017121054_add_supported_currencies_to_store.rb +10 -0
- data/db/migrate/20200102141311_add_social_to_spree_stores.rb +3 -0
- data/db/migrate/20200308210757_add_default_locale_to_spree_store.rb +7 -0
- data/db/migrate/20200310145140_add_customer_support_email_to_spree_store.rb +7 -0
- data/db/migrate/20200421095017_add_compare_at_amount_to_spree_prices.rb +7 -0
- data/db/migrate/20200423123001_add_default_country_id_to_spree_store.rb +9 -0
- data/db/migrate/20200430072209_add_footer_fields_to_spree_stores.rb +8 -0
- data/db/migrate/20200513154939_add_show_property_to_spree_product_properties.rb +5 -0
- data/db/migrate/20200607161221_add_store_owner_order_notification_delivered_to_spree_orders.rb +7 -0
- data/db/migrate/20200607161222_add_new_order_notifications_email_to_spree_stores.rb +7 -0
- data/db/migrate/20200610113542_add_label_to_spree_addresses.rb +5 -0
- data/db/migrate/20200826075557_add_unique_index_on_taxon_id_and_product_id_to_spree_products_taxons.rb +5 -0
- data/db/migrate/20201006110150_add_checkout_zone_field_to_store.rb +12 -0
- data/db/migrate/20201012091259_add_filterable_column_to_spree_option_types.rb +6 -0
- data/db/migrate/20201013084504_add_seo_robots_to_spree_stores.rb +5 -0
- data/db/migrate/20201127084048_add_default_country_kind_to_spree_zones.rb +5 -0
- data/db/migrate/20210112193440_remove_contact_email_from_spree_stores.rb +5 -0
- data/db/migrate/20210114182625_create_spree_payment_methods_stores.rb +10 -0
- data/db/migrate/20210114220232_migrate_data_payment_methods_stores.rb +15 -0
- data/db/migrate/20210117112551_remove_store_id_from_spree_payment_methods.rb +5 -0
- data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -2
- data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -2
- data/lib/generators/spree/mailers_preview/mailers_preview_generator.rb +23 -0
- data/lib/generators/spree/mailers_preview/templates/mailers/previews/order_preview.rb +13 -0
- data/lib/generators/spree/mailers_preview/templates/mailers/previews/reimbursement_preview.rb +5 -0
- data/lib/generators/spree/mailers_preview/templates/mailers/previews/shipment_preview.rb +5 -0
- data/lib/generators/spree/mailers_preview/templates/mailers/previews/user_preview.rb +11 -0
- data/lib/spree/core.rb +2 -0
- data/lib/spree/core/controller_helpers/common.rb +1 -0
- data/lib/spree/core/controller_helpers/currency_helpers.rb +15 -0
- data/lib/spree/core/controller_helpers/order.rb +9 -4
- data/lib/spree/core/controller_helpers/store.rb +12 -1
- data/lib/spree/core/importer/order.rb +9 -9
- data/lib/spree/core/product_filters.rb +3 -3
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/i18n.rb +7 -21
- data/lib/spree/permitted_attributes.rb +8 -5
- data/lib/spree/service_module.rb +6 -2
- data/lib/spree/testing_support/authorization_helpers.rb +7 -4
- data/lib/spree/testing_support/capybara_config.rb +1 -1
- data/lib/spree/testing_support/factories/promotion_factory.rb +29 -17
- data/lib/spree/testing_support/factories/shipment_factory.rb +7 -9
- data/lib/spree/testing_support/factories/store_factory.rb +11 -8
- data/lib/spree/testing_support/factories/zone_factory.rb +16 -13
- data/lib/spree/testing_support/i18n.rb +1 -1
- data/lib/spree/testing_support/order_walkthrough.rb +8 -3
- data/lib/spree/testing_support/rspec_retry_config.rb +10 -0
- data/spree_core.gemspec +10 -8
- data/vendor/assets/javascripts/cleave.js +1669 -0
- metadata +105 -30
- data/app/views/spree/order_mailer/_adjustment.html.erb +0 -8
- data/app/views/spree/order_mailer/_subtotal.html.erb +0 -8
- data/app/views/spree/order_mailer/_total.html.erb +0 -8
- data/lib/spree/i18n/base.rb +0 -17
- data/lib/spree/i18n/initializer.rb +0 -1
@@ -52,10 +52,15 @@ module Spree
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def set_current_order
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
55
|
+
return unless try_spree_current_user && current_order
|
56
|
+
|
57
|
+
orders_scope = try_spree_current_user.orders.
|
58
|
+
incomplete.
|
59
|
+
where.not(id: current_order.id).
|
60
|
+
where(store_id: current_store.id)
|
61
|
+
|
62
|
+
orders_scope.each do |order|
|
63
|
+
current_order.merge!(order, try_spree_current_user)
|
59
64
|
end
|
60
65
|
end
|
61
66
|
|
@@ -5,13 +5,24 @@ module Spree
|
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
7
|
included do
|
8
|
+
helper_method :supported_currencies
|
8
9
|
helper_method :current_currency
|
9
10
|
helper_method :current_store
|
10
11
|
helper_method :current_price_options
|
11
12
|
end
|
12
13
|
|
13
14
|
def current_currency
|
14
|
-
|
15
|
+
if defined?(session) && session.key?(:currency) && supported_currencies.map(&:iso_code).include?(session[:currency])
|
16
|
+
session[:currency]
|
17
|
+
elsif params[:currency].present? && supported_currencies.map(&:iso_code).include?(params[:currency])
|
18
|
+
params[:currency]
|
19
|
+
else
|
20
|
+
current_store.default_currency
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def supported_currencies
|
25
|
+
current_store.supported_currencies_list
|
15
26
|
end
|
16
27
|
|
17
28
|
def current_store
|
@@ -38,7 +38,7 @@ module Spree
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
order.reload
|
41
|
-
rescue
|
41
|
+
rescue StandardError => e
|
42
42
|
order.destroy if order&.persisted?
|
43
43
|
raise e.message
|
44
44
|
end
|
@@ -80,7 +80,7 @@ module Spree
|
|
80
80
|
|
81
81
|
adjustments = s.delete(:adjustments_attributes)
|
82
82
|
create_adjustments_from_params(adjustments, order, shipment)
|
83
|
-
rescue
|
83
|
+
rescue StandardError => e
|
84
84
|
raise "Order import shipments: #{e.message} #{s}"
|
85
85
|
end
|
86
86
|
end
|
@@ -115,7 +115,7 @@ module Spree
|
|
115
115
|
line_item.save!
|
116
116
|
end
|
117
117
|
create_adjustments_from_params(adjustments, order, line_item)
|
118
|
-
rescue
|
118
|
+
rescue StandardError => e
|
119
119
|
raise "Order import line items: #{e.message} #{line_item}"
|
120
120
|
end
|
121
121
|
end
|
@@ -132,7 +132,7 @@ module Spree
|
|
132
132
|
)
|
133
133
|
adjustment.save!
|
134
134
|
adjustment.close!
|
135
|
-
rescue
|
135
|
+
rescue StandardError => e
|
136
136
|
raise "Order import adjustments: #{e.message} #{a}"
|
137
137
|
end
|
138
138
|
end
|
@@ -150,7 +150,7 @@ module Spree
|
|
150
150
|
payment.payment_method = Spree::PaymentMethod.find_by!(name: p[:payment_method])
|
151
151
|
payment.source = create_source_payment_from_params(p[:source], payment) if p[:source]
|
152
152
|
payment.save!
|
153
|
-
rescue
|
153
|
+
rescue StandardError => e
|
154
154
|
raise "Order import payments: #{e.message} #{p}"
|
155
155
|
end
|
156
156
|
end
|
@@ -167,7 +167,7 @@ module Spree
|
|
167
167
|
gateway_payment_profile_id: source_hash[:gateway_payment_profile_id],
|
168
168
|
imported: true
|
169
169
|
)
|
170
|
-
rescue
|
170
|
+
rescue StandardError => e
|
171
171
|
raise "Order import source payments: #{e.message} #{source_hash}"
|
172
172
|
end
|
173
173
|
|
@@ -179,7 +179,7 @@ module Spree
|
|
179
179
|
hash
|
180
180
|
rescue ActiveRecord::RecordNotFound => e
|
181
181
|
raise "Ensure order import variant: Variant w/SKU #{sku} not found."
|
182
|
-
rescue
|
182
|
+
rescue StandardError => e
|
183
183
|
raise "Ensure order import variant: #{e.message} #{hash}"
|
184
184
|
end
|
185
185
|
|
@@ -200,7 +200,7 @@ module Spree
|
|
200
200
|
|
201
201
|
address.delete(:country)
|
202
202
|
address[:country_id] = Spree::Country.where(search).first!.id
|
203
|
-
rescue
|
203
|
+
rescue StandardError => e
|
204
204
|
raise "Ensure order import address country: #{e.message} #{search}"
|
205
205
|
end
|
206
206
|
end
|
@@ -224,7 +224,7 @@ module Spree
|
|
224
224
|
else
|
225
225
|
address[:state_name] = search[:name] || search[:abbr]
|
226
226
|
end
|
227
|
-
rescue
|
227
|
+
rescue StandardError => e
|
228
228
|
raise "Ensure order import address state: #{e.message} #{search}"
|
229
229
|
end
|
230
230
|
end
|
@@ -68,9 +68,9 @@ module Spree
|
|
68
68
|
def self.price_filter
|
69
69
|
v = Spree::Price.arel_table
|
70
70
|
conds = [[Spree.t(:under_price, price: format_price(10)), v[:amount].lteq(10)],
|
71
|
-
["#{format_price(10)} - #{format_price(15)}", v[:amount].
|
72
|
-
["#{format_price(15)} - #{format_price(18)}", v[:amount].
|
73
|
-
["#{format_price(18)} - #{format_price(20)}", v[:amount].
|
71
|
+
["#{format_price(10)} - #{format_price(15)}", v[:amount].between(10..15)],
|
72
|
+
["#{format_price(15)} - #{format_price(18)}", v[:amount].between(15..18)],
|
73
|
+
["#{format_price(18)} - #{format_price(20)}", v[:amount].between(18..20)],
|
74
74
|
[Spree.t(:or_over_price, price: format_price(20)), v[:amount].gteq(20)]]
|
75
75
|
{
|
76
76
|
name: Spree.t(:price_range),
|
data/lib/spree/core/version.rb
CHANGED
data/lib/spree/i18n.rb
CHANGED
@@ -1,35 +1,21 @@
|
|
1
1
|
require 'i18n'
|
2
2
|
require 'active_support/core_ext/array/extract_options'
|
3
|
-
require '
|
3
|
+
require 'action_view'
|
4
4
|
|
5
5
|
module Spree
|
6
|
-
|
7
|
-
|
6
|
+
class TranslationHelperWrapper
|
7
|
+
include ActionView::Helpers::TranslationHelper
|
8
|
+
end
|
8
9
|
|
9
10
|
class << self
|
10
11
|
# Add spree namespace and delegate to Rails TranslationHelper for some nice
|
11
12
|
# extra functionality. e.g return reasonable strings for missing translations
|
12
|
-
def translate(
|
13
|
-
|
13
|
+
def translate(key, options = {})
|
14
|
+
options[:scope] = [*options[:scope]].unshift(:spree).uniq
|
14
15
|
|
15
|
-
options
|
16
|
-
options[:scope] = [*options[:scope]].unshift(:spree)
|
17
|
-
args << options
|
18
|
-
super(*args)
|
16
|
+
TranslationHelperWrapper.new.translate(key, **options)
|
19
17
|
end
|
20
18
|
|
21
19
|
alias t translate
|
22
|
-
|
23
|
-
def context
|
24
|
-
Spree::ViewContext.context
|
25
|
-
end
|
26
|
-
|
27
|
-
def virtual_path
|
28
|
-
if context
|
29
|
-
path = context.instance_variable_get('@virtual_path')
|
30
|
-
|
31
|
-
path&.gsub(/spree/, '')
|
32
|
-
end
|
33
|
-
end
|
34
20
|
end
|
35
21
|
end
|
@@ -33,7 +33,7 @@ module Spree
|
|
33
33
|
:id, :firstname, :lastname, :first_name, :last_name,
|
34
34
|
:address1, :address2, :city, :country_iso, :country_id, :state_id,
|
35
35
|
:zipcode, :phone, :state_name, :alternative_phone, :company,
|
36
|
-
:user_id, :deleted_at,
|
36
|
+
:user_id, :deleted_at, :label,
|
37
37
|
country: [:iso, :name, :iso3, :iso_name],
|
38
38
|
state: [:name, :abbr]
|
39
39
|
]
|
@@ -64,7 +64,7 @@ module Spree
|
|
64
64
|
:meta_keywords, :price, :sku, :deleted_at, :prototype_id,
|
65
65
|
:option_values_hash, :weight, :height, :width, :depth,
|
66
66
|
:shipping_category_id, :tax_category_id,
|
67
|
-
:cost_currency, :cost_price,
|
67
|
+
:cost_currency, :cost_price, :compare_at_price,
|
68
68
|
option_type_ids: [], taxon_ids: []
|
69
69
|
]
|
70
70
|
|
@@ -96,9 +96,12 @@ module Spree
|
|
96
96
|
:quantity, :stock_item, :stock_item_id, :originator, :action
|
97
97
|
]
|
98
98
|
|
99
|
-
@@store_attributes = [:name, :url, :seo_title, :code, :meta_keywords,
|
99
|
+
@@store_attributes = [:name, :url, :seo_title, :code, :meta_keywords, :logo,
|
100
100
|
:meta_description, :default_currency, :mail_from_address,
|
101
|
-
:facebook, :twitter, :instagram
|
101
|
+
:customer_support_email, :facebook, :twitter, :instagram,
|
102
|
+
:description, :address, :contact_phone,
|
103
|
+
:default_locale, :default_country_id, :supported_currencies,
|
104
|
+
:new_order_notifications_email, :mailer_logo, :checkout_zone_id, :seo_robots]
|
102
105
|
|
103
106
|
@@store_credit_attributes = %i[amount currency category_id memo]
|
104
107
|
|
@@ -115,7 +118,7 @@ module Spree
|
|
115
118
|
@@variant_attributes = [
|
116
119
|
:name, :presentation, :cost_price, :discontinue_on, :lock_version,
|
117
120
|
:position, :track_inventory,
|
118
|
-
:product_id, :product, :option_values_attributes, :price,
|
121
|
+
:product_id, :product, :option_values_attributes, :price, :compare_at_price,
|
119
122
|
:weight, :height, :width, :depth, :sku, :cost_currency,
|
120
123
|
options: [:name, :value], option_value_ids: []
|
121
124
|
]
|
data/lib/spree/service_module.rb
CHANGED
@@ -47,7 +47,11 @@ module Spree
|
|
47
47
|
def call(input = nil)
|
48
48
|
input ||= {}
|
49
49
|
@_passed_input = Result.new(true, input)
|
50
|
-
result =
|
50
|
+
result = if input.is_a?(Hash)
|
51
|
+
super(**input)
|
52
|
+
else
|
53
|
+
super(input)
|
54
|
+
end
|
51
55
|
@_passed_input = result if result.is_a? Result
|
52
56
|
enforce_data_format
|
53
57
|
@_passed_input
|
@@ -71,7 +75,7 @@ module Spree
|
|
71
75
|
end
|
72
76
|
|
73
77
|
begin
|
74
|
-
@_passed_input = callable.call(
|
78
|
+
@_passed_input = callable.call(**@_passed_input.value)
|
75
79
|
rescue ArgumentError => e
|
76
80
|
if e.message.include? 'missing'
|
77
81
|
raise IncompatibleParamsPassed, "You didn't pass #{e.message} to callable '#{callable.name}'"
|
@@ -27,13 +27,14 @@ module Spree
|
|
27
27
|
|
28
28
|
def stub_authorization!
|
29
29
|
ability = build_ability
|
30
|
+
ability_class = Spree::Dependencies.ability_class.constantize
|
30
31
|
|
31
32
|
after(:all) do
|
32
|
-
|
33
|
+
ability_class.remove_ability(ability)
|
33
34
|
end
|
34
35
|
|
35
36
|
before(:all) do
|
36
|
-
|
37
|
+
ability_class.register_ability(ability)
|
37
38
|
end
|
38
39
|
|
39
40
|
before do
|
@@ -45,11 +46,13 @@ module Spree
|
|
45
46
|
|
46
47
|
def custom_authorization!(&block)
|
47
48
|
ability = build_ability(&block)
|
49
|
+
ability_class = Spree::Dependencies.ability_class.constantize
|
50
|
+
|
48
51
|
after(:all) do
|
49
|
-
|
52
|
+
ability_class.remove_ability(ability)
|
50
53
|
end
|
51
54
|
before(:all) do
|
52
|
-
|
55
|
+
ability_class.register_ability(ability)
|
53
56
|
end
|
54
57
|
end
|
55
58
|
end
|
@@ -1,4 +1,21 @@
|
|
1
1
|
FactoryBot.define do
|
2
|
+
trait :with_item_total_rule do
|
3
|
+
transient do
|
4
|
+
item_total_threshold_amount { 10 }
|
5
|
+
end
|
6
|
+
|
7
|
+
after(:create) do |promotion, evaluator|
|
8
|
+
rule = Spree::Promotion::Rules::ItemTotal.create!(
|
9
|
+
preferred_operator_min: 'gte',
|
10
|
+
preferred_operator_max: 'lte',
|
11
|
+
preferred_amount_min: evaluator.item_total_threshold_amount,
|
12
|
+
preferred_amount_max: evaluator.item_total_threshold_amount + 100
|
13
|
+
)
|
14
|
+
promotion.rules << rule
|
15
|
+
promotion.save!
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
2
19
|
factory :promotion, class: Spree::Promotion do
|
3
20
|
name { 'Promo' }
|
4
21
|
|
@@ -13,7 +30,16 @@ FactoryBot.define do
|
|
13
30
|
Spree::Promotion::Actions::CreateItemAdjustments.create!(calculator: calculator, promotion: promotion)
|
14
31
|
end
|
15
32
|
end
|
33
|
+
|
34
|
+
trait :with_one_use_per_user_rule do
|
35
|
+
after(:create) do |promotion|
|
36
|
+
rule = Spree::Promotion::Rules::OneUsePerUser.create!
|
37
|
+
promotion.rules << rule
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
16
41
|
factory :promotion_with_item_adjustment, traits: [:with_line_item_adjustment]
|
42
|
+
factory :promotion_with_one_use_per_user_rule, traits: [:with_line_item_adjustment, :with_one_use_per_user_rule]
|
17
43
|
|
18
44
|
trait :with_order_adjustment do
|
19
45
|
transient do
|
@@ -28,24 +54,8 @@ FactoryBot.define do
|
|
28
54
|
promotion.save!
|
29
55
|
end
|
30
56
|
end
|
31
|
-
factory :promotion_with_order_adjustment, traits: [:with_order_adjustment]
|
32
57
|
|
33
|
-
|
34
|
-
transient do
|
35
|
-
item_total_threshold_amount { 10 }
|
36
|
-
end
|
37
|
-
|
38
|
-
after(:create) do |promotion, evaluator|
|
39
|
-
rule = Spree::Promotion::Rules::ItemTotal.create!(
|
40
|
-
preferred_operator_min: 'gte',
|
41
|
-
preferred_operator_max: 'lte',
|
42
|
-
preferred_amount_min: evaluator.item_total_threshold_amount,
|
43
|
-
preferred_amount_max: evaluator.item_total_threshold_amount + 100
|
44
|
-
)
|
45
|
-
promotion.rules << rule
|
46
|
-
promotion.save!
|
47
|
-
end
|
48
|
-
end
|
58
|
+
factory :promotion_with_order_adjustment, traits: [:with_order_adjustment]
|
49
59
|
factory :promotion_with_item_total_rule, traits: [:with_item_total_rule]
|
50
60
|
end
|
51
61
|
|
@@ -57,5 +67,7 @@ FactoryBot.define do
|
|
57
67
|
action.promotion = promotion
|
58
68
|
action.save
|
59
69
|
end
|
70
|
+
|
71
|
+
factory :free_shipping_promotion_with_item_total_rule, traits: [:with_item_total_rule]
|
60
72
|
end
|
61
73
|
end
|
@@ -8,15 +8,13 @@ FactoryBot.define do
|
|
8
8
|
|
9
9
|
after(:create) do |shipment, _evalulator|
|
10
10
|
shipment.add_shipping_method(create(:shipping_method), true)
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
)
|
19
|
-
end
|
11
|
+
shipment.order.line_items.map do |line_item|
|
12
|
+
shipment.inventory_units.create(
|
13
|
+
order_id: shipment.order_id,
|
14
|
+
variant_id: line_item.variant_id,
|
15
|
+
line_item_id: line_item.id,
|
16
|
+
quantity: line_item.quantity
|
17
|
+
)
|
20
18
|
end
|
21
19
|
end
|
22
20
|
end
|
@@ -1,12 +1,15 @@
|
|
1
1
|
FactoryBot.define do
|
2
2
|
factory :store, class: Spree::Store do
|
3
|
-
sequence(:code)
|
4
|
-
name
|
5
|
-
url
|
6
|
-
mail_from_address
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
3
|
+
sequence(:code) { |i| "spree_#{i}" }
|
4
|
+
name { 'Spree Test Store' }
|
5
|
+
url { 'www.example.com' }
|
6
|
+
mail_from_address { 'no-reply@example.com' }
|
7
|
+
customer_support_email { 'support@example.com' }
|
8
|
+
new_order_notifications_email { 'store-owner@example.com' }
|
9
|
+
default_currency { 'USD' }
|
10
|
+
supported_currencies { 'USD,EUR,GBP' }
|
11
|
+
facebook { 'spreecommerce' }
|
12
|
+
twitter { 'spreecommerce' }
|
13
|
+
instagram { 'spreecommerce' }
|
11
14
|
end
|
12
15
|
end
|
@@ -1,24 +1,27 @@
|
|
1
1
|
FactoryBot.define do
|
2
|
-
factory :global_zone, class: Spree::Zone do
|
3
|
-
name { 'GlobalZone' }
|
4
|
-
description { generate(:random_string) }
|
5
|
-
zone_members do |proxy|
|
6
|
-
zone = proxy.instance_eval { @instance }
|
7
|
-
Spree::Country.all.map do |c|
|
8
|
-
Spree::ZoneMember.create(zoneable: c, zone: zone)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
2
|
factory :zone, class: Spree::Zone do
|
14
3
|
name { generate(:random_string) }
|
15
4
|
description { generate(:random_string) }
|
16
5
|
|
17
6
|
factory :zone_with_country do
|
7
|
+
kind { :country }
|
8
|
+
|
18
9
|
zone_members do |proxy|
|
19
10
|
zone = proxy.instance_eval { @instance }
|
20
|
-
|
21
|
-
[Spree::ZoneMember.create(zoneable: country, zone: zone)]
|
11
|
+
|
12
|
+
[Spree::ZoneMember.create(zoneable: create(:country), zone: zone)]
|
13
|
+
end
|
14
|
+
|
15
|
+
factory :global_zone, class: Spree::Zone do
|
16
|
+
sequence(:name) { |n| "GlobalZone_#{n}" }
|
17
|
+
|
18
|
+
zone_members do |proxy|
|
19
|
+
zone = proxy.instance_eval { @instance }
|
20
|
+
|
21
|
+
Spree::Country.all.map do |country|
|
22
|
+
Spree::ZoneMember.where(zoneable: country, zone: zone).first_or_create
|
23
|
+
end
|
24
|
+
end
|
22
25
|
end
|
23
26
|
end
|
24
27
|
end
|