spree_core 3.6.6 → 3.7.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/spree.js +60 -0
- data/app/finders/spree/countries/find.rb +31 -0
- data/app/finders/spree/credit_cards/find.rb +12 -0
- data/app/finders/spree/line_items/find_by_variant.rb +13 -0
- data/app/finders/spree/orders/find_current.rb +34 -0
- data/app/finders/spree/products/find.rb +93 -0
- data/app/finders/spree/taxons/find.rb +79 -0
- data/app/helpers/spree/base_helper.rb +7 -3
- data/app/helpers/spree/products_helper.rb +2 -1
- data/app/models/concerns/spree/adjustment_source.rb +11 -6
- data/app/models/concerns/spree/user_address.rb +2 -2
- data/app/models/concerns/spree/vat_price_calculation.rb +2 -1
- data/app/models/spree/ability.rb +2 -2
- data/app/models/spree/address.rb +23 -14
- data/app/models/spree/adjustable/adjustments_updater.rb +1 -1
- data/app/models/spree/adjustable/promotion_accumulator.rb +2 -1
- data/app/models/spree/adjustment.rb +18 -3
- data/app/models/spree/asset/support/active_storage.rb +1 -1
- data/app/models/spree/calculator.rb +1 -4
- data/app/models/spree/calculator/flexi_rate.rb +8 -11
- data/app/models/spree/calculator/returns/default_refund_amount.rb +3 -1
- data/app/models/spree/calculator/shipping/flexi_rate.rb +13 -13
- data/app/models/spree/country.rb +4 -0
- data/app/models/spree/credit_card.rb +8 -2
- data/app/models/spree/customer_return.rb +1 -0
- data/app/models/spree/fulfilment_changer.rb +117 -0
- data/app/models/spree/gateway.rb +1 -0
- data/app/models/spree/gateway/bogus.rb +3 -2
- data/app/models/spree/image.rb +13 -0
- data/app/models/spree/image/configuration/active_storage.rb +3 -3
- data/app/models/spree/inventory_unit.rb +1 -1
- data/app/models/spree/line_item.rb +3 -2
- data/app/models/spree/order.rb +72 -28
- data/app/models/spree/order/checkout.rb +10 -0
- data/app/models/spree/order/store_credit.rb +14 -35
- data/app/models/spree/order_contents.rb +22 -118
- data/app/models/spree/order_inventory.rb +6 -2
- data/app/models/spree/order_merger.rb +1 -3
- data/app/models/spree/order_promotion.rb +10 -0
- data/app/models/spree/order_updater.rb +11 -8
- data/app/models/spree/payment.rb +9 -3
- data/app/models/spree/payment/processing.rb +4 -4
- data/app/models/spree/preferences/store.rb +3 -3
- data/app/models/spree/product.rb +32 -0
- data/app/models/spree/product/scopes.rb +13 -34
- data/app/models/spree/product_property.rb +1 -1
- data/app/models/spree/promotion.rb +2 -0
- data/app/models/spree/promotion/actions/create_adjustment.rb +6 -1
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +10 -2
- data/app/models/spree/promotion/actions/create_line_items.rb +3 -2
- data/app/models/spree/promotion/actions/free_shipping.rb +1 -0
- data/app/models/spree/promotion/rules/item_total.rb +2 -2
- data/app/models/spree/promotion_handler/coupon.rb +10 -6
- data/app/models/spree/promotion_handler/page.rb +1 -1
- data/app/models/spree/promotion_handler/promotion_duplicator.rb +4 -4
- data/app/models/spree/refund.rb +1 -1
- data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -0
- data/app/models/spree/reimbursement_tax_calculator.rb +2 -2
- data/app/models/spree/return_item.rb +7 -4
- data/app/models/spree/return_item/eligibility_validator/default.rb +6 -6
- data/app/models/spree/return_item/exchange_variant_eligibility/same_product.rb +1 -1
- data/app/models/spree/shipment.rb +27 -34
- data/app/models/spree/shipping_method.rb +2 -0
- data/app/models/spree/shipping_rate.rb +31 -16
- data/app/models/spree/stock/adjuster.rb +1 -0
- data/app/models/spree/stock/estimator.rb +2 -0
- data/app/models/spree/stock/inventory_unit_builder.rb +5 -5
- data/app/models/spree/stock/packer.rb +1 -0
- data/app/models/spree/stock/quantifier.rb +16 -4
- data/app/models/spree/stock_item.rb +1 -0
- data/app/models/spree/stock_location.rb +1 -1
- data/app/models/spree/stock_movement.rb +1 -0
- data/app/models/spree/stock_transfer.rb +1 -1
- data/app/models/spree/store_credit.rb +5 -10
- data/app/models/spree/tax_rate.rb +3 -0
- data/app/models/spree/taxon.rb +2 -2
- data/app/models/spree/taxon_image.rb +18 -0
- data/app/models/spree/{taxon_icon → taxon_image}/configuration/active_storage.rb +2 -2
- data/app/models/spree/{taxon_icon → taxon_image}/configuration/paperclip.rb +1 -1
- data/app/models/spree/variant.rb +28 -2
- data/app/models/spree/zone.rb +5 -5
- data/app/paginators/spree/shared/paginate.rb +19 -0
- data/app/services/spree/cart/add_item.rb +43 -0
- data/app/services/spree/cart/create.rb +21 -0
- data/app/services/spree/cart/recalculate.rb +32 -0
- data/app/services/spree/cart/remove_item.rb +37 -0
- data/app/services/spree/cart/remove_line_item.rb +16 -0
- data/app/services/spree/cart/set_quantity.rb +22 -0
- data/app/services/spree/cart/update.rb +37 -0
- data/app/services/spree/checkout/add_store_credit.rb +51 -0
- data/app/services/spree/checkout/advance.rb +18 -0
- data/app/services/spree/checkout/complete.rb +23 -0
- data/app/services/spree/checkout/get_shipping_rates.rb +48 -0
- data/app/services/spree/checkout/next.rb +13 -0
- data/app/services/spree/checkout/remove_store_credit.rb +17 -0
- data/app/services/spree/checkout/update.rb +13 -0
- data/app/services/spree/compare_line_items.rb +21 -0
- data/app/services/spree/generate_token.rb +20 -0
- data/app/sorters/spree/products/sort.rb +58 -0
- data/config/locales/en.yml +20 -1
- data/db/default/spree/countries.rb +1 -1
- data/db/default/spree/default_reimbursement_type.rb +1 -1
- data/db/default/spree/roles.rb +2 -2
- data/db/default/spree/states.rb +2 -1
- data/db/default/spree/stores.rb +1 -1
- data/db/default/spree/zones.rb +5 -6
- data/db/migrate/20120831092320_spree_one_two.rb +36 -36
- data/db/migrate/20120831092359_spree_promo_one_two.rb +1 -1
- data/db/migrate/20130211190146_create_spree_stock_items.rb +1 -1
- data/db/migrate/20130211191120_create_spree_stock_locations.rb +1 -1
- data/db/migrate/20130301162924_create_shipping_method_categories.rb +1 -1
- data/db/migrate/20130304162240_create_spree_shipping_rates.rb +1 -1
- data/db/migrate/20130305143310_create_stock_movements.rb +1 -1
- data/db/migrate/20130418125341_create_spree_stock_transfers.rb +1 -1
- data/db/migrate/20140205120320_create_spree_payment_capture_events.rb +1 -1
- data/db/migrate/20140309023735_migrate_old_preferences.rb +5 -1
- data/db/migrate/20140309024355_create_spree_stores.rb +1 -1
- data/db/migrate/20140625214618_create_spree_refunds.rb +1 -1
- data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +1 -1
- data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +1 -1
- data/db/migrate/20140713140527_create_spree_refund_reasons.rb +1 -1
- data/db/migrate/20140715182625_create_spree_promotion_categories.rb +1 -1
- data/db/migrate/20140718133010_create_spree_customer_returns.rb +1 -1
- data/db/migrate/20140725131539_create_spree_reimbursements.rb +1 -1
- data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +1 -1
- data/db/migrate/20150118210639_create_spree_store_credits.rb +1 -1
- data/db/migrate/20150118211500_create_spree_store_credit_categories.rb +1 -1
- data/db/migrate/20150118212051_create_spree_store_credit_events.rb +1 -1
- data/db/migrate/20150118212101_create_spree_store_credit_types.rb +1 -1
- data/db/migrate/20150309161154_ensure_payments_have_numbers.rb +6 -2
- data/db/migrate/20180613080857_rename_guest_token_to_token_in_orders.rb +5 -0
- data/db/migrate/20180915160001_add_timestamps_to_spree_prices.rb +12 -0
- data/db/migrate/20181024100754_add_deleted_at_to_spree_credit_cards.rb +6 -0
- data/lib/generators/spree/custom_user/custom_user_generator.rb +1 -3
- data/lib/generators/spree/dummy/dummy_generator.rb +30 -33
- data/lib/generators/spree/dummy/templates/rails/database.yml +6 -1
- data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
- data/lib/generators/spree/dummy_model/dummy_model_generator.rb +1 -1
- data/lib/generators/spree/install/install_generator.rb +2 -1
- data/lib/spree/core.rb +2 -4
- data/lib/spree/core/controller_helpers/auth.rb +15 -5
- data/lib/spree/core/controller_helpers/common.rb +0 -11
- data/lib/spree/core/controller_helpers/order.rb +6 -6
- data/lib/spree/core/controller_helpers/respond_with.rb +3 -1
- data/lib/spree/core/controller_helpers/strong_parameters.rb +1 -0
- data/lib/spree/core/engine.rb +9 -3
- data/lib/spree/core/importer/order.rb +8 -12
- data/lib/spree/core/product_duplicator.rb +6 -1
- data/lib/spree/core/product_filters.rb +15 -14
- data/lib/spree/core/query_filters.rb +11 -0
- data/lib/spree/core/query_filters/comparable.rb +46 -0
- data/lib/spree/core/query_filters/date.rb +8 -0
- data/lib/spree/core/query_filters/number.rb +8 -0
- data/lib/spree/core/query_filters/text.rb +32 -0
- data/lib/spree/core/token_generator.rb +2 -2
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/i18n.rb +1 -1
- data/lib/spree/migrations.rb +2 -0
- data/lib/spree/money.rb +12 -12
- data/lib/spree/permitted_attributes.rb +11 -6
- data/lib/spree/service_module.rb +98 -0
- data/lib/spree/testing_support/capybara_config.rb +20 -0
- data/lib/spree/testing_support/capybara_ext.rb +6 -3
- data/lib/spree/testing_support/factories.rb +1 -1
- data/lib/spree/testing_support/factories/address_factory.rb +10 -9
- data/lib/spree/testing_support/factories/adjustment_factory.rb +8 -6
- data/lib/spree/testing_support/factories/country_factory.rb +4 -4
- data/lib/spree/testing_support/factories/credit_card_factory.rb +7 -5
- data/lib/spree/testing_support/factories/customer_return_factory.rb +1 -1
- data/lib/spree/testing_support/factories/image_factory.rb +7 -1
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +5 -4
- data/lib/spree/testing_support/factories/line_item_factory.rb +3 -2
- data/lib/spree/testing_support/factories/options_factory.rb +2 -3
- data/lib/spree/testing_support/factories/order_factory.rb +16 -12
- data/lib/spree/testing_support/factories/order_promotion_factory.rb +6 -0
- data/lib/spree/testing_support/factories/payment_factory.rb +9 -7
- data/lib/spree/testing_support/factories/payment_method_factory.rb +8 -8
- data/lib/spree/testing_support/factories/price_factory.rb +2 -2
- data/lib/spree/testing_support/factories/product_factory.rb +10 -10
- data/lib/spree/testing_support/factories/promotion_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/promotion_factory.rb +14 -4
- data/lib/spree/testing_support/factories/property_factory.rb +2 -2
- data/lib/spree/testing_support/factories/prototype_factory.rb +3 -3
- data/lib/spree/testing_support/factories/refund_factory.rb +6 -6
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
- data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +2 -2
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +4 -3
- data/lib/spree/testing_support/factories/role_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipment_factory.rb +3 -3
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +4 -4
- data/lib/spree/testing_support/factories/state_factory.rb +2 -5
- data/lib/spree/testing_support/factories/stock_factory.rb +3 -3
- data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_location_factory.rb +7 -7
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +3 -3
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +2 -2
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_factory.rb +5 -4
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +2 -1
- data/lib/spree/testing_support/factories/user_factory.rb +4 -4
- data/lib/spree/testing_support/factories/variant_factory.rb +15 -15
- data/lib/spree/testing_support/factories/zone_factory.rb +3 -3
- data/lib/spree/testing_support/image_helpers.rb +19 -0
- data/lib/tasks/core.rake +21 -4
- data/lib/tasks/exchanges.rake +4 -4
- data/spree_core.gemspec +3 -3
- data/vendor/assets/javascripts/fetch.umd.js +531 -0
- data/vendor/assets/javascripts/polyfill.min.js +1 -0
- metadata +50 -17
- data/app/assets/javascripts/spree.js.coffee +0 -59
- data/app/models/spree/taxon_icon.rb +0 -5
- data/lib/generators/spree/dummy/templates/initializers/custom_user.rb +0 -1
- data/lib/spree/core/environment.rb +0 -15
- data/lib/spree/core/environment/calculators.rb +0 -11
- data/lib/spree/core/environment_extension.rb +0 -28
- data/lib/spree/core/validators/email.rb +0 -8
- data/lib/spree/promo/environment.rb +0 -9
data/lib/spree/money.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'money'
|
4
2
|
|
5
3
|
Money.locale_backend = :i18n
|
@@ -9,6 +7,7 @@ module Spree
|
|
9
7
|
class <<self
|
10
8
|
attr_accessor :default_formatting_rules
|
11
9
|
end
|
10
|
+
|
12
11
|
self.default_formatting_rules = {
|
13
12
|
# Ruby money currently has this as false, which is wrong for the vast
|
14
13
|
# majority of locales.
|
@@ -16,11 +15,10 @@ module Spree
|
|
16
15
|
}
|
17
16
|
|
18
17
|
attr_reader :money
|
19
|
-
|
20
|
-
delegate :cents, :currency, to: :money
|
18
|
+
delegate :cents, :currency, to: :money
|
21
19
|
|
22
20
|
def initialize(amount, options = {})
|
23
|
-
@money
|
21
|
+
@money = Monetize.parse([amount, (options[:currency] || Spree::Config[:currency])].join)
|
24
22
|
@options = Spree::Money.default_formatting_rules.merge(options)
|
25
23
|
end
|
26
24
|
|
@@ -29,7 +27,7 @@ module Spree
|
|
29
27
|
end
|
30
28
|
|
31
29
|
def to_s
|
32
|
-
|
30
|
+
money.format(options)
|
33
31
|
end
|
34
32
|
|
35
33
|
# 1) prevent blank, breaking spaces
|
@@ -39,7 +37,7 @@ module Spree
|
|
39
37
|
opts[:html_wrap] = opts[:html]
|
40
38
|
opts.delete(:html)
|
41
39
|
|
42
|
-
output = money.format(
|
40
|
+
output = money.format(options.merge(opts))
|
43
41
|
if opts[:html_wrap]
|
44
42
|
output.gsub!(/<\/?[^>]*>/, '') # we don't want wrap every element in span
|
45
43
|
output = output.sub(' ', ' ').html_safe
|
@@ -53,17 +51,19 @@ module Spree
|
|
53
51
|
end
|
54
52
|
|
55
53
|
def decimal_mark
|
56
|
-
|
57
|
-
@options[:decimal_mark]
|
54
|
+
options[:decimal_mark] || money.decimal_mark
|
58
55
|
end
|
59
56
|
|
60
57
|
def thousands_separator
|
61
|
-
|
62
|
-
@options[:thousands_separator]
|
58
|
+
options[:thousands_separator] || money.thousands_separator
|
63
59
|
end
|
64
60
|
|
65
61
|
def ==(obj)
|
66
|
-
|
62
|
+
money == obj.money
|
67
63
|
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
attr_reader :options
|
68
68
|
end
|
69
69
|
end
|
@@ -72,34 +72,39 @@ module Spree
|
|
72
72
|
|
73
73
|
@@shipment_attributes = [
|
74
74
|
:order, :special_instructions, :stock_location_id, :id,
|
75
|
-
:tracking, :address, :inventory_units, :selected_shipping_rate_id
|
75
|
+
:tracking, :address, :inventory_units, :selected_shipping_rate_id
|
76
|
+
]
|
76
77
|
|
77
78
|
# month / year may be provided by some sources, or others may elect to use one field
|
78
79
|
@@source_attributes = [
|
79
80
|
:number, :month, :year, :expiry, :verification_value,
|
80
81
|
:first_name, :last_name, :cc_type, :gateway_customer_profile_id,
|
81
|
-
:gateway_payment_profile_id, :last_digits, :name, :encrypted_data
|
82
|
+
:gateway_payment_profile_id, :last_digits, :name, :encrypted_data
|
83
|
+
]
|
82
84
|
|
83
85
|
@@stock_item_attributes = [:variant, :stock_location, :backorderable, :variant_id]
|
84
86
|
|
85
87
|
@@stock_location_attributes = [
|
86
88
|
:name, :active, :address1, :address2, :city, :zipcode,
|
87
89
|
:backorderable_default, :state_name, :state_id, :country_id, :phone,
|
88
|
-
:propagate_all_variants
|
90
|
+
:propagate_all_variants
|
91
|
+
]
|
89
92
|
|
90
93
|
@@stock_movement_attributes = [
|
91
|
-
:quantity, :stock_item, :stock_item_id, :originator, :action
|
94
|
+
:quantity, :stock_item, :stock_item_id, :originator, :action
|
95
|
+
]
|
92
96
|
|
93
97
|
@@store_attributes = [:name, :url, :seo_title, :code, :meta_keywords,
|
94
98
|
:meta_description, :default_currency, :mail_from_address]
|
95
99
|
|
96
|
-
@@store_credit_attributes = [
|
100
|
+
@@store_credit_attributes = %i[amount currency category_id memo]
|
97
101
|
|
98
102
|
@@taxonomy_attributes = [:name]
|
99
103
|
|
100
104
|
@@taxon_attributes = [
|
101
105
|
:name, :parent_id, :position, :icon, :description, :permalink, :taxonomy_id,
|
102
|
-
:meta_description, :meta_keywords, :meta_title, :child_index
|
106
|
+
:meta_description, :meta_keywords, :meta_title, :child_index
|
107
|
+
]
|
103
108
|
|
104
109
|
# TODO: Should probably use something like Spree.user_class.attributes
|
105
110
|
@@user_attributes = [:email, :password, :password_confirmation]
|
@@ -0,0 +1,98 @@
|
|
1
|
+
module Spree
|
2
|
+
module ServiceModule
|
3
|
+
module Callable
|
4
|
+
def call(*args)
|
5
|
+
new.call(*args).tap do |result|
|
6
|
+
return yield(result) if block_given?
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class MethodNotImplemented < StandardError; end
|
12
|
+
class WrongDataPassed < StandardError; end
|
13
|
+
class NonCallablePassedToRun < StandardError; end
|
14
|
+
class IncompatibleParamsPassed < StandardError; end
|
15
|
+
|
16
|
+
Result = Struct.new(:success, :value, :error) do
|
17
|
+
def success?
|
18
|
+
success
|
19
|
+
end
|
20
|
+
|
21
|
+
def failure?
|
22
|
+
!success
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
ResultError = Struct.new(:value) do
|
27
|
+
def to_s
|
28
|
+
return value.full_messages.join(', ') if value&.respond_to?(:full_messages)
|
29
|
+
|
30
|
+
value.to_s
|
31
|
+
end
|
32
|
+
|
33
|
+
def to_h
|
34
|
+
return value.messages if value&.respond_to?(:messages)
|
35
|
+
|
36
|
+
{}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
module Base
|
41
|
+
def self.prepended(base)
|
42
|
+
class << base
|
43
|
+
prepend Callable
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def call(input = nil)
|
48
|
+
input ||= {}
|
49
|
+
@_passed_input = Result.new(true, input)
|
50
|
+
result = super
|
51
|
+
@_passed_input = result if result.is_a? Result
|
52
|
+
enforce_data_format
|
53
|
+
@_passed_input
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def run(callable)
|
59
|
+
return unless @_passed_input.success?
|
60
|
+
|
61
|
+
if callable.instance_of? Symbol
|
62
|
+
unless respond_to?(callable, true)
|
63
|
+
raise MethodNotImplemented, "You didn't implement #{callable} method. Implement it before calling this class"
|
64
|
+
end
|
65
|
+
|
66
|
+
callable = method(callable)
|
67
|
+
end
|
68
|
+
|
69
|
+
unless callable.respond_to?(:call)
|
70
|
+
raise NonCallablePassedToRun, 'You can pass only symbol with method name or instance of callable class to run method'
|
71
|
+
end
|
72
|
+
|
73
|
+
begin
|
74
|
+
@_passed_input = callable.call(@_passed_input.value)
|
75
|
+
rescue ArgumentError => e
|
76
|
+
if e.message.include? 'missing'
|
77
|
+
raise IncompatibleParamsPassed, "You didn't pass #{e.message} to callable '#{callable.name}'"
|
78
|
+
else
|
79
|
+
raise IncompatibleParamsPassed, "You passed #{e.message} to callable '#{callable.name}'"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def success(value)
|
85
|
+
Result.new(true, value, nil)
|
86
|
+
end
|
87
|
+
|
88
|
+
def failure(value, error = nil)
|
89
|
+
error = value.errors if error.nil? && value.respond_to?(:errors)
|
90
|
+
Result.new(false, value, ResultError.new(error))
|
91
|
+
end
|
92
|
+
|
93
|
+
def enforce_data_format
|
94
|
+
raise WrongDataPassed, "You didn't use `success` or `failure` method to return value from method." unless @_passed_input.instance_of? Result
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'capybara-screenshot/rspec'
|
2
|
+
|
3
|
+
Capybara.save_path = ENV['CIRCLE_ARTIFACTS'] if ENV['CIRCLE_ARTIFACTS']
|
4
|
+
|
5
|
+
if ENV['WEBDRIVER'] == 'accessible'
|
6
|
+
require 'capybara/accessible'
|
7
|
+
Capybara.javascript_driver = :accessible
|
8
|
+
else
|
9
|
+
Capybara.register_driver :chrome do |app|
|
10
|
+
Capybara::Selenium::Driver.new app,
|
11
|
+
browser: :chrome,
|
12
|
+
options: Selenium::WebDriver::Chrome::Options.new(args: %w[disable-popup-blocking headless disable-gpu window-size=1920,1080])
|
13
|
+
end
|
14
|
+
Capybara.javascript_driver = :chrome
|
15
|
+
|
16
|
+
Capybara::Screenshot.register_driver(:chrome) do |driver, path|
|
17
|
+
driver.browser.save_screenshot(path)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
Capybara.default_max_wait_time = 45
|
@@ -1,4 +1,9 @@
|
|
1
1
|
module CapybaraExt
|
2
|
+
# https://bugs.chromium.org/p/chromedriver/issues/detail?id=1771
|
3
|
+
def native_fill_in(selector, text)
|
4
|
+
text.to_s.split('').each { |char| find_field(selector).native.send_keys(char) }
|
5
|
+
end
|
6
|
+
|
2
7
|
def page!
|
3
8
|
save_and_open_page
|
4
9
|
end
|
@@ -101,9 +106,7 @@ module CapybaraExt
|
|
101
106
|
def wait_for_ajax(delay = Capybara.default_max_wait_time)
|
102
107
|
Timeout.timeout(delay) do
|
103
108
|
active = page.evaluate_script('typeof jQuery !== "undefined" && jQuery.active')
|
104
|
-
until active.zero?
|
105
|
-
active = page.evaluate_script('typeof jQuery !== "undefined" && jQuery.active')
|
106
|
-
end
|
109
|
+
active = page.evaluate_script('typeof jQuery !== "undefined" && jQuery.active') until active.zero?
|
107
110
|
end
|
108
111
|
end
|
109
112
|
|
@@ -12,7 +12,7 @@ end
|
|
12
12
|
|
13
13
|
FactoryBot.define do
|
14
14
|
sequence(:random_string) { FFaker::Lorem.sentence }
|
15
|
-
sequence(:random_description) { FFaker::Lorem.paragraphs(
|
15
|
+
sequence(:random_description) { FFaker::Lorem.paragraphs(Kernel.rand(1..5)).join("\n") }
|
16
16
|
sequence(:random_email) { FFaker::Internet.email }
|
17
17
|
|
18
18
|
sequence(:sku) { |n| "SKU-#{n}" }
|
@@ -1,16 +1,17 @@
|
|
1
1
|
FactoryBot.define do
|
2
2
|
factory :address, aliases: [:bill_address, :ship_address], class: Spree::Address do
|
3
|
-
firstname 'John'
|
4
|
-
lastname 'Doe'
|
5
|
-
company 'Company'
|
6
|
-
address1 '10 Lovely Street'
|
7
|
-
address2 'Northwest'
|
8
|
-
city 'Herndon'
|
9
|
-
zipcode '35005'
|
10
|
-
phone '555-555-0199'
|
11
|
-
alternative_phone '555-555-0199'
|
3
|
+
firstname { 'John' }
|
4
|
+
lastname { 'Doe' }
|
5
|
+
company { 'Company' }
|
6
|
+
address1 { '10 Lovely Street' }
|
7
|
+
address2 { 'Northwest' }
|
8
|
+
city { 'Herndon' }
|
9
|
+
zipcode { '35005' }
|
10
|
+
phone { '555-555-0199' }
|
11
|
+
alternative_phone { '555-555-0199' }
|
12
12
|
|
13
13
|
state { |address| address.association(:state) || Spree::State.last }
|
14
|
+
|
14
15
|
country do |address|
|
15
16
|
if address.state
|
16
17
|
address.state.country
|
@@ -1,18 +1,20 @@
|
|
1
1
|
FactoryBot.define do
|
2
2
|
factory :adjustment, class: Spree::Adjustment do
|
3
3
|
association(:adjustable, factory: :order)
|
4
|
-
amount 100.0
|
5
|
-
label 'Shipping'
|
6
4
|
association(:source, factory: :tax_rate)
|
7
|
-
|
5
|
+
|
6
|
+
amount { 100.0 }
|
7
|
+
label { 'Shipping' }
|
8
|
+
eligible { true }
|
8
9
|
end
|
9
10
|
|
10
11
|
factory :tax_adjustment, class: Spree::Adjustment do
|
11
12
|
association(:adjustable, factory: :line_item)
|
12
|
-
amount 10.0
|
13
|
-
label 'VAT 5%'
|
14
13
|
association(:source, factory: :tax_rate)
|
15
|
-
|
14
|
+
|
15
|
+
amount { 10.0 }
|
16
|
+
label { 'VAT 5%' }
|
17
|
+
eligible { true }
|
16
18
|
|
17
19
|
after(:create) do |adjustment|
|
18
20
|
# Set correct tax category, so that adjustment amount is not 0
|
@@ -1,9 +1,9 @@
|
|
1
1
|
FactoryBot.define do
|
2
2
|
factory :country, class: Spree::Country do
|
3
3
|
sequence(:iso_name) { |n| "ISO_NAME_#{n}" }
|
4
|
-
sequence(:name)
|
5
|
-
iso 'US'
|
6
|
-
iso3 'USA'
|
7
|
-
numcode 840
|
4
|
+
sequence(:name) { |n| "NAME_#{n}" }
|
5
|
+
iso { 'US' }
|
6
|
+
iso3 { 'USA' }
|
7
|
+
numcode { 840 }
|
8
8
|
end
|
9
9
|
end
|
@@ -1,10 +1,12 @@
|
|
1
1
|
FactoryBot.define do
|
2
2
|
factory :credit_card, class: Spree::CreditCard do
|
3
|
-
verification_value 123
|
4
|
-
month 12
|
5
|
-
year
|
6
|
-
number '4111111111111111'
|
7
|
-
name 'Spree Commerce'
|
3
|
+
verification_value { 123 }
|
4
|
+
month { 12 }
|
5
|
+
year { 1.year.from_now.year }
|
6
|
+
number { '4111111111111111' }
|
7
|
+
name { 'Spree Commerce' }
|
8
|
+
cc_type { 'visa' }
|
9
|
+
|
8
10
|
association(:payment_method, factory: :credit_card_payment_method)
|
9
11
|
end
|
10
12
|
end
|
@@ -1,5 +1,11 @@
|
|
1
1
|
FactoryBot.define do
|
2
2
|
factory :image, class: Spree::Image do
|
3
|
-
|
3
|
+
if Rails.application.config.use_paperclip
|
4
|
+
attachment { File.new(Spree::Core::Engine.root + 'spec/fixtures' + 'thinking-cat.jpg') }
|
5
|
+
else
|
6
|
+
before(:create) do |image|
|
7
|
+
image.attachment.attach(io: File.new(Spree::Core::Engine.root + 'spec/fixtures' + 'thinking-cat.jpg'), filename: 'thinking-cat.jpg')
|
8
|
+
end
|
9
|
+
end
|
4
10
|
end
|
5
11
|
end
|
@@ -3,15 +3,16 @@ FactoryBot.define do
|
|
3
3
|
variant
|
4
4
|
order
|
5
5
|
line_item
|
6
|
-
state 'on_hand'
|
6
|
+
state { 'on_hand' }
|
7
|
+
|
7
8
|
association(:shipment, factory: :shipment, state: 'pending')
|
8
9
|
# return_authorization
|
9
10
|
|
10
11
|
# this trait usage increases build speed ~ 2x
|
11
12
|
trait :without_assoc do
|
12
|
-
shipment nil
|
13
|
-
order nil
|
14
|
-
line_item nil
|
13
|
+
shipment { nil }
|
14
|
+
order { nil }
|
15
|
+
line_item { nil }
|
15
16
|
end
|
16
17
|
end
|
17
18
|
end
|
@@ -1,13 +1,12 @@
|
|
1
1
|
FactoryBot.define do
|
2
2
|
factory :option_value, class: Spree::OptionValue do
|
3
3
|
sequence(:name) { |n| "Size-#{n}" }
|
4
|
-
|
5
|
-
presentation 'S'
|
4
|
+
presentation { 'S' }
|
6
5
|
option_type
|
7
6
|
end
|
8
7
|
|
9
8
|
factory :option_type, class: Spree::OptionType do
|
10
9
|
sequence(:name) { |n| "foo-size-#{n}" }
|
11
|
-
presentation 'Size'
|
10
|
+
presentation { 'Size' }
|
12
11
|
end
|
13
12
|
end
|
@@ -2,12 +2,13 @@ FactoryBot.define do
|
|
2
2
|
factory :order, class: Spree::Order do
|
3
3
|
user
|
4
4
|
bill_address
|
5
|
-
completed_at nil
|
6
|
-
email { user.email }
|
7
5
|
store
|
6
|
+
completed_at { nil }
|
7
|
+
email { user.email }
|
8
|
+
currency { 'USD' }
|
8
9
|
|
9
10
|
transient do
|
10
|
-
line_items_price BigDecimal
|
11
|
+
line_items_price { BigDecimal(10) }
|
11
12
|
end
|
12
13
|
|
13
14
|
factory :order_with_totals do
|
@@ -19,7 +20,7 @@ FactoryBot.define do
|
|
19
20
|
|
20
21
|
factory :order_with_line_item_quantity do
|
21
22
|
transient do
|
22
|
-
line_items_quantity 1
|
23
|
+
line_items_quantity { 1 }
|
23
24
|
end
|
24
25
|
|
25
26
|
after(:create) do |order, evaluator|
|
@@ -33,14 +34,17 @@ FactoryBot.define do
|
|
33
34
|
ship_address
|
34
35
|
|
35
36
|
transient do
|
36
|
-
line_items_count 1
|
37
|
-
|
38
|
-
|
37
|
+
line_items_count { 1 }
|
38
|
+
without_line_items { false }
|
39
|
+
shipment_cost { 100 }
|
40
|
+
shipping_method_filter { Spree::ShippingMethod::DISPLAY_ON_FRONT_END }
|
39
41
|
end
|
40
42
|
|
41
43
|
after(:create) do |order, evaluator|
|
42
|
-
|
43
|
-
|
44
|
+
unless evaluator.without_line_items
|
45
|
+
create_list(:line_item, evaluator.line_items_count, order: order, price: evaluator.line_items_price)
|
46
|
+
order.line_items.reload
|
47
|
+
end
|
44
48
|
|
45
49
|
create(:shipment, order: order, cost: evaluator.shipment_cost)
|
46
50
|
order.shipments.reload
|
@@ -49,7 +53,7 @@ FactoryBot.define do
|
|
49
53
|
end
|
50
54
|
|
51
55
|
factory :completed_order_with_totals do
|
52
|
-
state 'complete'
|
56
|
+
state { 'complete' }
|
53
57
|
|
54
58
|
after(:create) do |order, evaluator|
|
55
59
|
order.refresh_shipment_rates(evaluator.shipping_method_filter)
|
@@ -69,8 +73,8 @@ FactoryBot.define do
|
|
69
73
|
end
|
70
74
|
|
71
75
|
factory :order_ready_to_ship do
|
72
|
-
payment_state 'paid'
|
73
|
-
shipment_state 'ready'
|
76
|
+
payment_state { 'paid' }
|
77
|
+
shipment_state { 'ready' }
|
74
78
|
|
75
79
|
after(:create) do |order|
|
76
80
|
create(:payment, amount: order.total, order: order, state: 'completed')
|