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.
Files changed (218) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js +60 -0
  3. data/app/finders/spree/countries/find.rb +31 -0
  4. data/app/finders/spree/credit_cards/find.rb +12 -0
  5. data/app/finders/spree/line_items/find_by_variant.rb +13 -0
  6. data/app/finders/spree/orders/find_current.rb +34 -0
  7. data/app/finders/spree/products/find.rb +93 -0
  8. data/app/finders/spree/taxons/find.rb +79 -0
  9. data/app/helpers/spree/base_helper.rb +7 -3
  10. data/app/helpers/spree/products_helper.rb +2 -1
  11. data/app/models/concerns/spree/adjustment_source.rb +11 -6
  12. data/app/models/concerns/spree/user_address.rb +2 -2
  13. data/app/models/concerns/spree/vat_price_calculation.rb +2 -1
  14. data/app/models/spree/ability.rb +2 -2
  15. data/app/models/spree/address.rb +23 -14
  16. data/app/models/spree/adjustable/adjustments_updater.rb +1 -1
  17. data/app/models/spree/adjustable/promotion_accumulator.rb +2 -1
  18. data/app/models/spree/adjustment.rb +18 -3
  19. data/app/models/spree/asset/support/active_storage.rb +1 -1
  20. data/app/models/spree/calculator.rb +1 -4
  21. data/app/models/spree/calculator/flexi_rate.rb +8 -11
  22. data/app/models/spree/calculator/returns/default_refund_amount.rb +3 -1
  23. data/app/models/spree/calculator/shipping/flexi_rate.rb +13 -13
  24. data/app/models/spree/country.rb +4 -0
  25. data/app/models/spree/credit_card.rb +8 -2
  26. data/app/models/spree/customer_return.rb +1 -0
  27. data/app/models/spree/fulfilment_changer.rb +117 -0
  28. data/app/models/spree/gateway.rb +1 -0
  29. data/app/models/spree/gateway/bogus.rb +3 -2
  30. data/app/models/spree/image.rb +13 -0
  31. data/app/models/spree/image/configuration/active_storage.rb +3 -3
  32. data/app/models/spree/inventory_unit.rb +1 -1
  33. data/app/models/spree/line_item.rb +3 -2
  34. data/app/models/spree/order.rb +72 -28
  35. data/app/models/spree/order/checkout.rb +10 -0
  36. data/app/models/spree/order/store_credit.rb +14 -35
  37. data/app/models/spree/order_contents.rb +22 -118
  38. data/app/models/spree/order_inventory.rb +6 -2
  39. data/app/models/spree/order_merger.rb +1 -3
  40. data/app/models/spree/order_promotion.rb +10 -0
  41. data/app/models/spree/order_updater.rb +11 -8
  42. data/app/models/spree/payment.rb +9 -3
  43. data/app/models/spree/payment/processing.rb +4 -4
  44. data/app/models/spree/preferences/store.rb +3 -3
  45. data/app/models/spree/product.rb +32 -0
  46. data/app/models/spree/product/scopes.rb +13 -34
  47. data/app/models/spree/product_property.rb +1 -1
  48. data/app/models/spree/promotion.rb +2 -0
  49. data/app/models/spree/promotion/actions/create_adjustment.rb +6 -1
  50. data/app/models/spree/promotion/actions/create_item_adjustments.rb +10 -2
  51. data/app/models/spree/promotion/actions/create_line_items.rb +3 -2
  52. data/app/models/spree/promotion/actions/free_shipping.rb +1 -0
  53. data/app/models/spree/promotion/rules/item_total.rb +2 -2
  54. data/app/models/spree/promotion_handler/coupon.rb +10 -6
  55. data/app/models/spree/promotion_handler/page.rb +1 -1
  56. data/app/models/spree/promotion_handler/promotion_duplicator.rb +4 -4
  57. data/app/models/spree/refund.rb +1 -1
  58. data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -0
  59. data/app/models/spree/reimbursement_tax_calculator.rb +2 -2
  60. data/app/models/spree/return_item.rb +7 -4
  61. data/app/models/spree/return_item/eligibility_validator/default.rb +6 -6
  62. data/app/models/spree/return_item/exchange_variant_eligibility/same_product.rb +1 -1
  63. data/app/models/spree/shipment.rb +27 -34
  64. data/app/models/spree/shipping_method.rb +2 -0
  65. data/app/models/spree/shipping_rate.rb +31 -16
  66. data/app/models/spree/stock/adjuster.rb +1 -0
  67. data/app/models/spree/stock/estimator.rb +2 -0
  68. data/app/models/spree/stock/inventory_unit_builder.rb +5 -5
  69. data/app/models/spree/stock/packer.rb +1 -0
  70. data/app/models/spree/stock/quantifier.rb +16 -4
  71. data/app/models/spree/stock_item.rb +1 -0
  72. data/app/models/spree/stock_location.rb +1 -1
  73. data/app/models/spree/stock_movement.rb +1 -0
  74. data/app/models/spree/stock_transfer.rb +1 -1
  75. data/app/models/spree/store_credit.rb +5 -10
  76. data/app/models/spree/tax_rate.rb +3 -0
  77. data/app/models/spree/taxon.rb +2 -2
  78. data/app/models/spree/taxon_image.rb +18 -0
  79. data/app/models/spree/{taxon_icon → taxon_image}/configuration/active_storage.rb +2 -2
  80. data/app/models/spree/{taxon_icon → taxon_image}/configuration/paperclip.rb +1 -1
  81. data/app/models/spree/variant.rb +28 -2
  82. data/app/models/spree/zone.rb +5 -5
  83. data/app/paginators/spree/shared/paginate.rb +19 -0
  84. data/app/services/spree/cart/add_item.rb +43 -0
  85. data/app/services/spree/cart/create.rb +21 -0
  86. data/app/services/spree/cart/recalculate.rb +32 -0
  87. data/app/services/spree/cart/remove_item.rb +37 -0
  88. data/app/services/spree/cart/remove_line_item.rb +16 -0
  89. data/app/services/spree/cart/set_quantity.rb +22 -0
  90. data/app/services/spree/cart/update.rb +37 -0
  91. data/app/services/spree/checkout/add_store_credit.rb +51 -0
  92. data/app/services/spree/checkout/advance.rb +18 -0
  93. data/app/services/spree/checkout/complete.rb +23 -0
  94. data/app/services/spree/checkout/get_shipping_rates.rb +48 -0
  95. data/app/services/spree/checkout/next.rb +13 -0
  96. data/app/services/spree/checkout/remove_store_credit.rb +17 -0
  97. data/app/services/spree/checkout/update.rb +13 -0
  98. data/app/services/spree/compare_line_items.rb +21 -0
  99. data/app/services/spree/generate_token.rb +20 -0
  100. data/app/sorters/spree/products/sort.rb +58 -0
  101. data/config/locales/en.yml +20 -1
  102. data/db/default/spree/countries.rb +1 -1
  103. data/db/default/spree/default_reimbursement_type.rb +1 -1
  104. data/db/default/spree/roles.rb +2 -2
  105. data/db/default/spree/states.rb +2 -1
  106. data/db/default/spree/stores.rb +1 -1
  107. data/db/default/spree/zones.rb +5 -6
  108. data/db/migrate/20120831092320_spree_one_two.rb +36 -36
  109. data/db/migrate/20120831092359_spree_promo_one_two.rb +1 -1
  110. data/db/migrate/20130211190146_create_spree_stock_items.rb +1 -1
  111. data/db/migrate/20130211191120_create_spree_stock_locations.rb +1 -1
  112. data/db/migrate/20130301162924_create_shipping_method_categories.rb +1 -1
  113. data/db/migrate/20130304162240_create_spree_shipping_rates.rb +1 -1
  114. data/db/migrate/20130305143310_create_stock_movements.rb +1 -1
  115. data/db/migrate/20130418125341_create_spree_stock_transfers.rb +1 -1
  116. data/db/migrate/20140205120320_create_spree_payment_capture_events.rb +1 -1
  117. data/db/migrate/20140309023735_migrate_old_preferences.rb +5 -1
  118. data/db/migrate/20140309024355_create_spree_stores.rb +1 -1
  119. data/db/migrate/20140625214618_create_spree_refunds.rb +1 -1
  120. data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +1 -1
  121. data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +1 -1
  122. data/db/migrate/20140713140527_create_spree_refund_reasons.rb +1 -1
  123. data/db/migrate/20140715182625_create_spree_promotion_categories.rb +1 -1
  124. data/db/migrate/20140718133010_create_spree_customer_returns.rb +1 -1
  125. data/db/migrate/20140725131539_create_spree_reimbursements.rb +1 -1
  126. data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +1 -1
  127. data/db/migrate/20150118210639_create_spree_store_credits.rb +1 -1
  128. data/db/migrate/20150118211500_create_spree_store_credit_categories.rb +1 -1
  129. data/db/migrate/20150118212051_create_spree_store_credit_events.rb +1 -1
  130. data/db/migrate/20150118212101_create_spree_store_credit_types.rb +1 -1
  131. data/db/migrate/20150309161154_ensure_payments_have_numbers.rb +6 -2
  132. data/db/migrate/20180613080857_rename_guest_token_to_token_in_orders.rb +5 -0
  133. data/db/migrate/20180915160001_add_timestamps_to_spree_prices.rb +12 -0
  134. data/db/migrate/20181024100754_add_deleted_at_to_spree_credit_cards.rb +6 -0
  135. data/lib/generators/spree/custom_user/custom_user_generator.rb +1 -3
  136. data/lib/generators/spree/dummy/dummy_generator.rb +30 -33
  137. data/lib/generators/spree/dummy/templates/rails/database.yml +6 -1
  138. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
  139. data/lib/generators/spree/dummy_model/dummy_model_generator.rb +1 -1
  140. data/lib/generators/spree/install/install_generator.rb +2 -1
  141. data/lib/spree/core.rb +2 -4
  142. data/lib/spree/core/controller_helpers/auth.rb +15 -5
  143. data/lib/spree/core/controller_helpers/common.rb +0 -11
  144. data/lib/spree/core/controller_helpers/order.rb +6 -6
  145. data/lib/spree/core/controller_helpers/respond_with.rb +3 -1
  146. data/lib/spree/core/controller_helpers/strong_parameters.rb +1 -0
  147. data/lib/spree/core/engine.rb +9 -3
  148. data/lib/spree/core/importer/order.rb +8 -12
  149. data/lib/spree/core/product_duplicator.rb +6 -1
  150. data/lib/spree/core/product_filters.rb +15 -14
  151. data/lib/spree/core/query_filters.rb +11 -0
  152. data/lib/spree/core/query_filters/comparable.rb +46 -0
  153. data/lib/spree/core/query_filters/date.rb +8 -0
  154. data/lib/spree/core/query_filters/number.rb +8 -0
  155. data/lib/spree/core/query_filters/text.rb +32 -0
  156. data/lib/spree/core/token_generator.rb +2 -2
  157. data/lib/spree/core/version.rb +1 -1
  158. data/lib/spree/i18n.rb +1 -1
  159. data/lib/spree/migrations.rb +2 -0
  160. data/lib/spree/money.rb +12 -12
  161. data/lib/spree/permitted_attributes.rb +11 -6
  162. data/lib/spree/service_module.rb +98 -0
  163. data/lib/spree/testing_support/capybara_config.rb +20 -0
  164. data/lib/spree/testing_support/capybara_ext.rb +6 -3
  165. data/lib/spree/testing_support/factories.rb +1 -1
  166. data/lib/spree/testing_support/factories/address_factory.rb +10 -9
  167. data/lib/spree/testing_support/factories/adjustment_factory.rb +8 -6
  168. data/lib/spree/testing_support/factories/country_factory.rb +4 -4
  169. data/lib/spree/testing_support/factories/credit_card_factory.rb +7 -5
  170. data/lib/spree/testing_support/factories/customer_return_factory.rb +1 -1
  171. data/lib/spree/testing_support/factories/image_factory.rb +7 -1
  172. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +5 -4
  173. data/lib/spree/testing_support/factories/line_item_factory.rb +3 -2
  174. data/lib/spree/testing_support/factories/options_factory.rb +2 -3
  175. data/lib/spree/testing_support/factories/order_factory.rb +16 -12
  176. data/lib/spree/testing_support/factories/order_promotion_factory.rb +6 -0
  177. data/lib/spree/testing_support/factories/payment_factory.rb +9 -7
  178. data/lib/spree/testing_support/factories/payment_method_factory.rb +8 -8
  179. data/lib/spree/testing_support/factories/price_factory.rb +2 -2
  180. data/lib/spree/testing_support/factories/product_factory.rb +10 -10
  181. data/lib/spree/testing_support/factories/promotion_category_factory.rb +1 -1
  182. data/lib/spree/testing_support/factories/promotion_factory.rb +14 -4
  183. data/lib/spree/testing_support/factories/property_factory.rb +2 -2
  184. data/lib/spree/testing_support/factories/prototype_factory.rb +3 -3
  185. data/lib/spree/testing_support/factories/refund_factory.rb +6 -6
  186. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  187. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +2 -2
  188. data/lib/spree/testing_support/factories/return_authorization_factory.rb +4 -3
  189. data/lib/spree/testing_support/factories/role_factory.rb +1 -1
  190. data/lib/spree/testing_support/factories/shipment_factory.rb +3 -3
  191. data/lib/spree/testing_support/factories/shipping_method_factory.rb +4 -4
  192. data/lib/spree/testing_support/factories/state_factory.rb +2 -5
  193. data/lib/spree/testing_support/factories/stock_factory.rb +3 -3
  194. data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
  195. data/lib/spree/testing_support/factories/stock_location_factory.rb +7 -7
  196. data/lib/spree/testing_support/factories/stock_movement_factory.rb +3 -3
  197. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +2 -2
  198. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +1 -1
  199. data/lib/spree/testing_support/factories/store_factory.rb +5 -4
  200. data/lib/spree/testing_support/factories/tax_rate_factory.rb +2 -1
  201. data/lib/spree/testing_support/factories/user_factory.rb +4 -4
  202. data/lib/spree/testing_support/factories/variant_factory.rb +15 -15
  203. data/lib/spree/testing_support/factories/zone_factory.rb +3 -3
  204. data/lib/spree/testing_support/image_helpers.rb +19 -0
  205. data/lib/tasks/core.rake +21 -4
  206. data/lib/tasks/exchanges.rake +4 -4
  207. data/spree_core.gemspec +3 -3
  208. data/vendor/assets/javascripts/fetch.umd.js +531 -0
  209. data/vendor/assets/javascripts/polyfill.min.js +1 -0
  210. metadata +50 -17
  211. data/app/assets/javascripts/spree.js.coffee +0 -59
  212. data/app/models/spree/taxon_icon.rb +0 -5
  213. data/lib/generators/spree/dummy/templates/initializers/custom_user.rb +0 -1
  214. data/lib/spree/core/environment.rb +0 -15
  215. data/lib/spree/core/environment/calculators.rb +0 -11
  216. data/lib/spree/core/environment_extension.rb +0 -28
  217. data/lib/spree/core/validators/email.rb +0 -8
  218. 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 = Monetize.parse([amount, (options[:currency] || Spree::Config[:currency])].join)
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
- @money.format(@options)
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(@options.merge(opts))
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(' ', '&nbsp;').html_safe
@@ -53,17 +51,19 @@ module Spree
53
51
  end
54
52
 
55
53
  def decimal_mark
56
- return @money.decimal_mark if @options[:decimal_mark].nil?
57
- @options[:decimal_mark]
54
+ options[:decimal_mark] || money.decimal_mark
58
55
  end
59
56
 
60
57
  def thousands_separator
61
- return @money.thousands_separator if @options[:thousands_separator].nil?
62
- @options[:thousands_separator]
58
+ options[:thousands_separator] || money.thousands_separator
63
59
  end
64
60
 
65
61
  def ==(obj)
66
- @money == obj.money
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 = [:amount, :category_id, :memo]
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(1 + Kernel.rand(5)).join("\n") }
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
- eligible true
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
- eligible true
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) { |n| "NAME_#{n}" }
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 { 1.year.from_now.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
@@ -3,7 +3,7 @@ FactoryBot.define do
3
3
  association(:stock_location, factory: :stock_location)
4
4
 
5
5
  transient do
6
- line_items_count 1
6
+ line_items_count { 1 }
7
7
  return_items_count { line_items_count }
8
8
  end
9
9
 
@@ -1,5 +1,11 @@
1
1
  FactoryBot.define do
2
2
  factory :image, class: Spree::Image do
3
- attachment { File.new(Spree::Core::Engine.root + 'spec/fixtures' + 'thinking-cat.jpg') }
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,8 +1,9 @@
1
1
  FactoryBot.define do
2
2
  factory :line_item, class: Spree::LineItem do
3
- quantity 1
4
- price { BigDecimal.new('10.00') }
5
3
  order
4
+ quantity { 1 }
5
+ price { BigDecimal('10.00') }
6
+ currency { order.currency }
6
7
  transient do
7
8
  association :product
8
9
  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.new(10)
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
- shipment_cost 100
38
- shipping_method_filter Spree::ShippingMethod::DISPLAY_ON_FRONT_END
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
- create_list(:line_item, evaluator.line_items_count, order: order, price: evaluator.line_items_price)
43
- order.line_items.reload
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')