diff --git a/.standard.yml b/.standard.yml new file mode 100644 index 00000000000..009954f8190 --- /dev/null +++ b/.standard.yml @@ -0,0 +1,6 @@ +parallel: true +format: progress +ruby_version: 3.1 +ignore: + - "*/spec/dummy/**/*" + - "sandbox/**/*" diff --git a/Gemfile b/Gemfile index e2646df4f4f..421a958904f 100644 --- a/Gemfile +++ b/Gemfile @@ -1,86 +1,84 @@ # frozen_string_literal: true -source 'https://rubygems.org' +source "https://rubygems.org" gemspec require: false # rubocop:disable Bundler/DuplicatedGem -if /(stable|main)/.match? ENV['RAILS_VERSION'] - gem 'rails', github: 'rails', require: false, branch: ENV['RAILS_VERSION'] +if /(stable|main)/.match? ENV["RAILS_VERSION"] + gem "rails", github: "rails", require: false, branch: ENV["RAILS_VERSION"] else - gem 'rails', ENV['RAILS_VERSION'] || ['> 7.0', '< 8.1.0.beta1'], require: false + gem "rails", ENV["RAILS_VERSION"] || ["> 7.0", "< 8.1.0.beta1"], require: false end # rubocop:enable Bundler/DuplicatedGem gem "debug" -gem 'launchy', require: false - -dbs = ENV['DB_ALL'] ? 'all' : ENV.fetch('DB', 'sqlite') -gem 'mysql2', '~> 0.5.0', require: false if dbs.match?(/all|mysql/) -gem 'pg', '~> 1.0', require: false if dbs.match?(/all|postgres/) -gem 'fast_sqlite', require: false if dbs.match?(/all|sqlite/) -gem 'sqlite3', '>= 2.1', require: false if dbs.match?(/all|sqlite/) - -gem 'database_cleaner', '~> 2.0', require: false -gem 'rspec-activemodel-mocks', '~> 1.1', require: false -gem 'rspec-rails', '~> 6.0.3', require: false -gem 'rspec-retry', '~> 0.6.2', require: false -gem 'simplecov', require: false -gem 'simplecov-cobertura', require: false -gem 'rack', '< 3', require: false -gem 'rake', require: false, groups: [:lint, :release] -gem 'rails-controller-testing', require: false -gem 'puma', '< 7', require: false -gem 'i18n-tasks', '~> 0.9', require: false -gem 'rspec_junit_formatter', require: false -gem 'yard', require: false -gem 'db-query-matchers', require: false +gem "launchy", require: false + +dbs = ENV["DB_ALL"] ? "all" : ENV.fetch("DB", "sqlite") +gem "mysql2", "~> 0.5.0", require: false if dbs.match?(/all|mysql/) +gem "pg", "~> 1.0", require: false if dbs.match?(/all|postgres/) +gem "fast_sqlite", require: false if dbs.match?(/all|sqlite/) +gem "sqlite3", ">= 2.1", require: false if dbs.match?(/all|sqlite/) + +gem "database_cleaner", "~> 2.0", require: false +gem "rspec-activemodel-mocks", "~> 1.1", require: false +gem "rspec-rails", "~> 6.0.3", require: false +gem "rspec-retry", "~> 0.6.2", require: false +gem "simplecov", require: false +gem "simplecov-cobertura", require: false +gem "rack", "< 3", require: false +gem "rake", require: false, groups: [:lint, :release] +gem "rails-controller-testing", require: false +gem "puma", "< 7", require: false +gem "i18n-tasks", "~> 0.9", require: false +gem "rspec_junit_formatter", require: false +gem "yard", require: false +gem "db-query-matchers", require: false # Ensure the requirement is also updated in core/lib/spree/testing_support/factory_bot.rb -gem 'factory_bot_rails', '>= 4.8', require: false +gem "factory_bot_rails", ">= 4.8", require: false group :backend do - gem 'capybara', '~> 3.13', require: false - gem 'capybara-screenshot', '>= 1.0.18', require: false - gem 'selenium-webdriver', require: false + gem "capybara", "~> 3.13", require: false + gem "capybara-screenshot", ">= 1.0.18", require: false + gem "selenium-webdriver", require: false # JavaScript testing - gem 'teaspoon', require: false - gem 'teaspoon-mocha', require: false - gem 'webrick', require: false + gem "teaspoon", require: false + gem "teaspoon-mocha", require: false + gem "webrick", require: false end group :admin do - gem 'tailwindcss-rails', '~> 3.0', require: false + gem "tailwindcss-rails", "~> 3.0", require: false end group :admin, :legacy_promotions, :promotions do - gem 'solidus_admin', path: 'admin', require: false - gem 'axe-core-rspec', '~> 4.8', require: false - gem 'axe-core-capybara', '~> 4.8', require: false + gem "solidus_admin", path: "admin", require: false + gem "axe-core-rspec", "~> 4.8", require: false + gem "axe-core-capybara", "~> 4.8", require: false end group :legacy_promotions, :promotions do - gem 'solidus_legacy_promotions', path: 'legacy_promotions', require: false - gem 'solidus_backend', path: 'backend', require: false + gem "solidus_legacy_promotions", path: "legacy_promotions", require: false + gem "solidus_backend", path: "backend", require: false end group :promotions do - gem 'solidus_promotions', path: 'promotions', require: false - gem 'shoulda-matchers', '~> 5.0', require: false + gem "solidus_promotions", path: "promotions", require: false + gem "shoulda-matchers", "~> 5.0", require: false end group :lint do - gem 'erb-formatter', '~> 0.7', require: false - gem 'rubocop', '~> 1', require: false - gem 'rubocop-performance', '~> 1.4', require: false - gem 'rubocop-rails', '~> 2.9', require: false + gem "erb-formatter", "~> 0.7", require: false + gem "standard", "~> 1.50", require: false end group :release do - gem 'octokit', '~> 7.1', require: false - gem 'faraday-retry', '~> 2.0', require: false + gem "octokit", "~> 7.1", require: false + gem "faraday-retry", "~> 2.0", require: false end -custom_gemfile = File.expand_path('Gemfile-custom', __dir__) -eval File.read(custom_gemfile), nil, custom_gemfile, 0 if File.exist?(custom_gemfile) +custom_gemfile = File.expand_path("Gemfile-custom", __dir__) +eval File.read(custom_gemfile), nil, custom_gemfile, 0 if File.exist?(custom_gemfile) # rubocop:disable Security/Eval diff --git a/Rakefile b/Rakefile index a7dca64a10b..6d2c7337304 100644 --- a/Rakefile +++ b/Rakefile @@ -1,6 +1,6 @@ # frozen_string_literal: true -import 'tasks/cleaning.rake' -import 'tasks/releasing.rake' -import 'tasks/testing.rake' -import 'tasks/linting.rake' +import "tasks/cleaning.rake" +import "tasks/releasing.rake" +import "tasks/testing.rake" +import "tasks/linting.rake" diff --git a/admin/Rakefile b/admin/Rakefile index 7364bc85419..209a0632497 100644 --- a/admin/Rakefile +++ b/admin/Rakefile @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'rubygems' -require 'rake' -require 'rake/testtask' -require 'rspec/core/rake_task' -require 'spree/testing_support/dummy_app/rake_tasks' -require 'solidus_admin/testing_support/dummy_app/rake_tasks' -require 'bundler/gem_tasks' +require "rubygems" +require "rake" +require "rake/testtask" +require "rspec/core/rake_task" +require "spree/testing_support/dummy_app/rake_tasks" +require "solidus_admin/testing_support/dummy_app/rake_tasks" +require "bundler/gem_tasks" namespace :tailwindcss do tailwindcss_command = [ @@ -18,31 +18,31 @@ namespace :tailwindcss do "--input", "#{__dir__}/app/assets/stylesheets/solidus_admin/application.tailwind.css", "--output", - "#{__dir__}/app/assets/builds/solidus_admin/tailwind.css", + "#{__dir__}/app/assets/builds/solidus_admin/tailwind.css" ] - desc 'Build Tailwind CSS' + desc "Build Tailwind CSS" task :build do sh tailwindcss_command.shelljoin end - desc 'Watch Tailwind CSS' + desc "Watch Tailwind CSS" task :watch do - sh (tailwindcss_command + ['--watch']).shelljoin + sh (tailwindcss_command + ["--watch"]).shelljoin end end -task build: 'tailwindcss:build' +task build: "tailwindcss:build" RSpec::Core::RakeTask.new task default: :spec DummyApp::RakeTasks.new( gem_root: File.expand_path(__dir__), - lib_name: 'solidus_admin' + lib_name: "solidus_admin" ) -task test_app: 'db:reset' +task test_app: "db:reset" # Namespace release tags, e.g. 'solidus_admin/v1.2.3' -Bundler::GemHelper.tag_prefix = 'solidus_admin/' +Bundler::GemHelper.tag_prefix = "solidus_admin/" diff --git a/admin/app/components/solidus_admin/adjustment_reasons/index/component.rb b/admin/app/components/solidus_admin/adjustment_reasons/index/component.rb index 520007d4a0b..5f9e355f62f 100644 --- a/admin/app/components/solidus_admin/adjustment_reasons/index/component.rb +++ b/admin/app/components/solidus_admin/adjustment_reasons/index/component.rb @@ -16,11 +16,11 @@ def search_key def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: solidus_admin.new_adjustment_reason_path(**search_filter_params), - data: { turbo_frame: :resource_form }, + data: {turbo_frame: :resource_form}, icon: "add-line", - class: "align-self-end w-full", + class: "align-self-end w-full" ) end @@ -37,11 +37,11 @@ def edit_path(adjustment_reason) def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.adjustment_reasons_path(**search_filter_params), method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end @@ -51,24 +51,24 @@ def columns header: :name, data: ->(adjustment_reason) do link_to adjustment_reason.name, edit_path(adjustment_reason), - class: 'body-link', - data: { turbo_frame: :resource_form } + class: "body-link", + data: {turbo_frame: :resource_form} end }, { header: :code, data: ->(adjustment_reason) do link_to adjustment_reason.code, edit_path(adjustment_reason), - class: 'body-link', - data: { turbo_frame: :resource_form } + class: "body-link", + data: {turbo_frame: :resource_form} end }, { header: :active, data: ->(adjustment_reason) do - adjustment_reason.active? ? component('ui/badge').yes : component('ui/badge').no + adjustment_reason.active? ? component("ui/badge").yes : component("ui/badge").no end - }, + } ] end end diff --git a/admin/app/components/solidus_admin/base_component.rb b/admin/app/components/solidus_admin/base_component.rb index 37daa9fea48..49d3f27272b 100644 --- a/admin/app/components/solidus_admin/base_component.rb +++ b/admin/app/components/solidus_admin/base_component.rb @@ -19,12 +19,12 @@ def icon_tag(name, **attrs) def missing_translation(key, options) keys = I18n.normalize_keys(options[:locale] || I18n.locale, key, options[:scope]) - logger.debug " [#{self.class}] Missing translation: #{keys.join('.')}" + logger.debug " [#{self.class}] Missing translation: #{keys.join(".")}" if (options[:locale] || I18n.default_locale) != :en t(key, **options, locale: :en) else - "translation missing: #{keys.join('.')}" + "translation missing: #{keys.join(".")}" end end diff --git a/admin/app/components/solidus_admin/layout/flashes/alerts/component.rb b/admin/app/components/solidus_admin/layout/flashes/alerts/component.rb index 7fbdb102c79..28acb97440b 100644 --- a/admin/app/components/solidus_admin/layout/flashes/alerts/component.rb +++ b/admin/app/components/solidus_admin/layout/flashes/alerts/component.rb @@ -11,7 +11,7 @@ class SolidusAdmin::Layout::Flashes::Alerts::Component < SolidusAdmin::BaseCompo # and default title (see +SolidusAdmin::UI::Alert::Component+). def initialize(alerts:) if alerts.is_a?(String) - alerts = { danger: { message: alerts } } + alerts = {danger: {message: alerts}} end @alerts = alerts.slice(*SolidusAdmin::UI::Alert::Component::SCHEMES.keys) diff --git a/admin/app/components/solidus_admin/layout/navigation/account/component.rb b/admin/app/components/solidus_admin/layout/navigation/account/component.rb index e5a448cde66..44b038efa75 100644 --- a/admin/app/components/solidus_admin/layout/navigation/account/component.rb +++ b/admin/app/components/solidus_admin/layout/navigation/account/component.rb @@ -12,7 +12,7 @@ def locale_options_for_select(available_locales) available_locales.map do |locale| [ t("spree.i18n.this_file_language", locale:, default: locale.to_s, fallback: false), - locale, + locale ] end.sort end @@ -22,14 +22,14 @@ def theme_options_for_select end def autosubmit_select_tag(name, options, icon:, &block) - form_tag(request.fullpath, method: :get, 'data-turbo': false, class: "w-full") do + form_tag(request.fullpath, method: :get, "data-turbo": false, class: "w-full") do safe_join([ block_given? ? capture(&block) : nil, tag.label(safe_join([ icon_tag(icon, class: "w-full max-w-[20px] h-5 fill-current shrink"), tag.select(options, name:, onchange: "this.form.requestSubmit()", class: "w-full appearance-none grow bg-transparent outline-none"), - icon_tag("expand-up-down-line", class: "w-full max-w-[20px] h-5 fill-current shrink"), - ]), class: "flex gap-2 items-center px-2"), + icon_tag("expand-up-down-line", class: "w-full max-w-[20px] h-5 fill-current shrink") + ]), class: "flex gap-2 items-center px-2") ]) end end diff --git a/admin/app/components/solidus_admin/layout/page_helpers.rb b/admin/app/components/solidus_admin/layout/page_helpers.rb index 20f580b7edc..300528e58f4 100644 --- a/admin/app/components/solidus_admin/layout/page_helpers.rb +++ b/admin/app/components/solidus_admin/layout/page_helpers.rb @@ -8,7 +8,7 @@ def page(**attrs, &block) def page_header_actions(&block) tag.div(safe_join([ - capture(&block), + capture(&block) ]), class: "flex gap-2 items-center") end @@ -19,7 +19,7 @@ def page_header_back(back_path) def page_header_title(title, &block) tag.h1(safe_join([ tag.span(title, class: "font-semibold text-xl"), - (capture(&block) if block_given?) || "", + (capture(&block) if block) || "" ]), class: "flex-1 text-2xl font-bold") end diff --git a/admin/app/components/solidus_admin/layout/skip_link/component.rb b/admin/app/components/solidus_admin/layout/skip_link/component.rb index 227e4fd57e8..70341081573 100644 --- a/admin/app/components/solidus_admin/layout/skip_link/component.rb +++ b/admin/app/components/solidus_admin/layout/skip_link/component.rb @@ -7,8 +7,8 @@ def initialize(href:) def call link_to t(".skip_link"), - @href, - class: %{ + @href, + class: %( sr-only focus:not-sr-only inline-block @@ -17,6 +17,6 @@ def call font-normal text-sm text-white bg-black - } + ) end end diff --git a/admin/app/components/solidus_admin/option_types/index/component.rb b/admin/app/components/solidus_admin/option_types/index/component.rb index 288931a0fd2..c5eafc5a582 100644 --- a/admin/app/components/solidus_admin/option_types/index/component.rb +++ b/admin/app/components/solidus_admin/option_types/index/component.rb @@ -8,16 +8,16 @@ def model_class def sortable_options { url: ->(option_type) { solidus_admin.move_option_type_path(option_type) }, - param: 'position', + param: "position" } end def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: spree.new_admin_option_type_path, - icon: "add-line", + icon: "add-line" ) end @@ -32,18 +32,18 @@ def next_page_path def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.option_types_path, method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end def columns [ name_column, - presentation_column, + presentation_column ] end @@ -52,7 +52,7 @@ def name_column header: :name, data: ->(option_type) do link_to option_type.name, edit_path(option_type), - class: 'body-link' + class: "body-link" end } end diff --git a/admin/app/components/solidus_admin/orders/index/component.rb b/admin/app/components/solidus_admin/orders/index/component.rb index d3a79735290..d46cb12f73e 100644 --- a/admin/app/components/solidus_admin/orders/index/component.rb +++ b/admin/app/components/solidus_admin/orders/index/component.rb @@ -24,27 +24,27 @@ def row_fade(order) def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: spree.new_admin_order_path, - icon: "add-line", + icon: "add-line" ) end def scopes [ - { label: t('.scopes.complete'), name: 'completed', default: true }, - { label: t('.scopes.in_progress'), name: 'in_progress' }, - { label: t('.scopes.returned'), name: 'returned' }, - { label: t('.scopes.canceled'), name: 'canceled' }, - { label: t('.scopes.all_orders'), name: 'all' }, + {label: t(".scopes.complete"), name: "completed", default: true}, + {label: t(".scopes.in_progress"), name: "in_progress"}, + {label: t(".scopes.returned"), name: "returned"}, + {label: t(".scopes.canceled"), name: "canceled"}, + {label: t(".scopes.all_orders"), name: "all"} ] end def filters [ { - label: t('.filters.status'), - combinator: 'or', + label: t(".filters.status"), + combinator: "or", attribute: "state", predicate: "eq", options: Spree::Order.state_machines[:state].states.map do |state| @@ -55,8 +55,8 @@ def filters end }, { - label: t('.filters.shipment_state'), - combinator: 'or', + label: t(".filters.shipment_state"), + combinator: "or", attribute: "shipment_state", predicate: "eq", options: %i[backorder canceled partial pending ready shipped].map do |option| @@ -67,8 +67,8 @@ def filters end }, { - label: t('.filters.payment_state'), - combinator: 'or', + label: t(".filters.payment_state"), + combinator: "or", attribute: "payment_state", predicate: "eq", options: %i[balance_due checkout completed credit_owed invalid paid pending processing void].map do |option| @@ -79,8 +79,8 @@ def filters end }, { - label: t('.filters.store'), - combinator: 'or', + label: t(".filters.store"), + combinator: "or", attribute: "store_id", predicate: "eq", options: Spree::Store.all.pluck(:name, :id) @@ -97,7 +97,7 @@ def columns total_column, items_column, payment_column, - shipment_column, + shipment_column ] end @@ -106,7 +106,7 @@ def number_column header: :order, data: ->(order) do if !row_fade(order) - content_tag :div, order.number, class: 'font-semibold' + content_tag :div, order.number, class: "font-semibold" else content_tag :div, order.number end @@ -119,12 +119,12 @@ def state_column header: :state, data: ->(order) do color = { - 'complete' => :green, - 'returned' => :red, - 'canceled' => :blue, - 'cart' => :graphite_light, + "complete" => :green, + "returned" => :red, + "canceled" => :blue, + "cart" => :graphite_light }[order.state] || :yellow - component('ui/badge').new(name: order.state.humanize, color:) + component("ui/badge").new(name: order.state.humanize, color:) end } end @@ -140,7 +140,7 @@ def date_column def customer_column { - col: { class: "w-[400px]" }, + col: {class: "w-[400px]"}, header: :customer, data: ->(order) do customer_email = order.email @@ -162,7 +162,7 @@ def items_column { header: :items, data: ->(order) do - content_tag :div, t('.columns.items', count: order.line_items.sum(:quantity)) + content_tag :div, t(".columns.items", count: order.line_items.sum(:quantity)) end } end @@ -171,7 +171,7 @@ def payment_column { header: :payment, data: ->(order) do - component('ui/badge').new(name: order.payment_state.humanize, color: order.paid? ? :green : :yellow) if order.payment_state? + component("ui/badge").new(name: order.payment_state.humanize, color: order.paid? ? :green : :yellow) if order.payment_state? end } end @@ -180,7 +180,7 @@ def shipment_column { header: :shipment, data: ->(order) do - component('ui/badge').new(name: order.shipment_state.humanize, color: order.shipped? ? :green : :yellow) if order.shipment_state? + component("ui/badge").new(name: order.shipment_state.humanize, color: order.shipped? ? :green : :yellow) if order.shipment_state? end } end diff --git a/admin/app/components/solidus_admin/orders/show/address/component.rb b/admin/app/components/solidus_admin/orders/show/address/component.rb index 343c70e4f9b..7dddb826372 100644 --- a/admin/app/components/solidus_admin/orders/show/address/component.rb +++ b/admin/app/components/solidus_admin/orders/show/address/component.rb @@ -3,9 +3,9 @@ class SolidusAdmin::Orders::Show::Address::Component < SolidusAdmin::BaseComponent include SolidusAdmin::Layout::PageHelpers - VALID_TYPES = ['ship', 'bill'].freeze + VALID_TYPES = ["ship", "bill"].freeze - def initialize(order:, address:, user: nil, type: 'ship') + def initialize(order:, address:, user: nil, type: "ship") @order = order @user = user @address = address @@ -23,10 +23,10 @@ def address_frame_id def use_attribute case @type - when 'ship' - 'use_shipping' - when 'bill' - 'use_billing' + when "ship" + "use_shipping" + when "bill" + "use_billing" end end @@ -43,7 +43,7 @@ def format_address(address) tag.br, address.country.name, tag.br, - address.phone, + address.phone ], " ") end diff --git a/admin/app/components/solidus_admin/orders/show/adjustments/index/adjustable/spree_shipment/component.rb b/admin/app/components/solidus_admin/orders/show/adjustments/index/adjustable/spree_shipment/component.rb index 99515df64de..0342e70f06e 100644 --- a/admin/app/components/solidus_admin/orders/show/adjustments/index/adjustable/spree_shipment/component.rb +++ b/admin/app/components/solidus_admin/orders/show/adjustments/index/adjustable/spree_shipment/component.rb @@ -2,7 +2,7 @@ class SolidusAdmin::Orders::Show::Adjustments::Index::Adjustable::SpreeShipment::Component < SolidusAdmin::Orders::Show::Adjustments::Index::Adjustable::Component def caption - "#{t('spree.shipment')} ##{adjustable.number}" + "#{t("spree.shipment")} ##{adjustable.number}" end def detail diff --git a/admin/app/components/solidus_admin/orders/show/adjustments/index/component.rb b/admin/app/components/solidus_admin/orders/show/adjustments/index/component.rb index 7a06b5abd72..9e295709c4d 100644 --- a/admin/app/components/solidus_admin/orders/show/adjustments/index/component.rb +++ b/admin/app/components/solidus_admin/orders/show/adjustments/index/component.rb @@ -37,10 +37,10 @@ def batch_actions }, { label: t(".actions.delete"), - action: spree.admin_order_adjustment_path(@order, '[]'), + action: spree.admin_order_adjustment_path(@order, "[]"), method: :delete, icon: "delete-bin-7-line" - }, + } ] end @@ -57,13 +57,13 @@ def columns { header: :state, wrap: true, - col: { class: 'w-[calc(5rem+2rem+2.5rem+1px)]' }, + col: {class: "w-[calc(5rem+2rem+2.5rem+1px)]"}, data: ->(adjustment) { if adjustment.finalized? - icon = 'lock-fill' + icon = "lock-fill" title = t(".state.locked") else - icon = 'lock-unlock-line' + icon = "lock-unlock-line" title = t(".state.unlocked") end icon_tag(icon, class: "w-5 h-5 align-middle") + tag.span(title) @@ -71,26 +71,26 @@ def columns }, { header: :adjustable, - col: { class: 'w-56' }, + col: {class: "w-56"}, data: ->(adjustment) { render_thumbnail_with_caption(adjustment, :adjustable) } }, { header: :source, - col: { class: "w-56" }, + col: {class: "w-56"}, data: ->(adjustment) { render_thumbnail_with_caption(adjustment, :source) } }, { header: :amount, - col: { class: 'w-24' }, + col: {class: "w-24"}, data: ->(adjustment) { tag.span adjustment.display_amount.to_html, class: "grow text-right whitespace-nowrap" } }, { - header: tag.span(t(".actions.title"), class: 'sr-only'), - col: { class: 'w-24' }, + header: tag.span(t(".actions.title"), class: "sr-only"), + col: {class: "w-24"}, wrap: false, data: ->(adjustment) do actions = [] @@ -99,7 +99,7 @@ def columns actions << link_to( t(".actions.edit"), spree.edit_admin_order_adjustment_path(@order, adjustment), - class: 'body-link', + class: "body-link" ) end @@ -108,32 +108,32 @@ def columns t(".actions.unlock"), solidus_admin.unlock_order_adjustments_path(@order, id: adjustment), "data-turbo-method": :put, - "data-turbo-confirm": t('.confirm'), - class: 'body-link', + "data-turbo-confirm": t(".confirm"), + class: "body-link" ) else actions << link_to( t(".actions.lock"), solidus_admin.lock_order_adjustments_path(@order, id: adjustment), "data-turbo-method": :put, - "data-turbo-confirm": t('.confirm'), - class: 'body-link', + "data-turbo-confirm": t(".confirm"), + class: "body-link" ) actions << link_to( t(".actions.delete"), spree.admin_order_adjustment_path(@order, adjustment), "data-turbo-method": :delete, - "data-turbo-confirm": t('.confirm'), - class: 'body-link !text-red-500', + "data-turbo-confirm": t(".confirm"), + class: "body-link !text-red-500" ) end - render component('ui/dropdown').new( + render component("ui/dropdown").new( direction: :right, - class: 'relative w-fit m-auto', + class: "relative w-fit m-auto" ).with_content(safe_join(actions)) end - }, + } ] end diff --git a/admin/app/components/solidus_admin/orders/show/component.rb b/admin/app/components/solidus_admin/orders/show/component.rb index 7279d93cc70..ccc457d5d18 100644 --- a/admin/app/components/solidus_admin/orders/show/component.rb +++ b/admin/app/components/solidus_admin/orders/show/component.rb @@ -13,6 +13,7 @@ def form_id def format_address(address) return unless address + safe_join([ address.name, tag.br, @@ -25,7 +26,7 @@ def format_address(address) tag.br, address.country.name, tag.br, - address.phone, + address.phone ], " ") end diff --git a/admin/app/components/solidus_admin/payment_methods/index/component.rb b/admin/app/components/solidus_admin/payment_methods/index/component.rb index 7bf64ffa63f..aadf5f08487 100644 --- a/admin/app/components/solidus_admin/payment_methods/index/component.rb +++ b/admin/app/components/solidus_admin/payment_methods/index/component.rb @@ -20,37 +20,37 @@ def row_url(payment_method) def sortable_options { url: ->(payment_method) { solidus_admin.move_payment_method_path(payment_method) }, - param: 'position', + param: "position" } end def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: spree.new_admin_payment_method_path, - icon: "add-line", + icon: "add-line" ) end def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.payment_methods_path, method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end def scopes [ - { name: :all, label: t('.scopes.all'), default: true }, - { name: :active, label: t('.scopes.active') }, - { name: :inactive, label: t('.scopes.inactive') }, - { name: :storefront, label: t('.scopes.storefront') }, - { name: :admin, label: t('.scopes.admin') }, + {name: :all, label: t(".scopes.all"), default: true}, + {name: :active, label: t(".scopes.active")}, + {name: :inactive, label: t(".scopes.inactive")}, + {name: :storefront, label: t(".scopes.storefront")}, + {name: :admin, label: t(".scopes.admin")} ] end @@ -72,9 +72,9 @@ def columns header: :available_to_users, data: ->(payment_method) do if payment_method.available_to_users? - component('ui/badge').yes + component("ui/badge").yes else - component('ui/badge').no + component("ui/badge").no end end }, @@ -82,9 +82,9 @@ def columns header: :available_to_admin, data: ->(payment_method) do if payment_method.available_to_admin? - component('ui/badge').yes + component("ui/badge").yes else - component('ui/badge').no + component("ui/badge").no end end }, @@ -92,12 +92,12 @@ def columns header: :status, data: ->(payment_method) do if payment_method.active? - render component('ui/badge').new(name: t('.status.active'), color: :green) + render component("ui/badge").new(name: t(".status.active"), color: :green) else - render component('ui/badge').new(name: t('.status.inactive'), color: :graphite_light) + render component("ui/badge").new(name: t(".status.inactive"), color: :graphite_light) end end - }, + } ] end end diff --git a/admin/app/components/solidus_admin/products/index/component.rb b/admin/app/components/solidus_admin/products/index/component.rb index 6a015ebcbd2..82a59ee0a6e 100644 --- a/admin/app/components/solidus_admin/products/index/component.rb +++ b/admin/app/components/solidus_admin/products/index/component.rb @@ -20,46 +20,46 @@ def row_url(product) def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: spree.new_admin_product_path, - icon: "add-line", + icon: "add-line" ) end def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.products_path, method: :delete, - icon: 'delete-bin-7-line', - require_confirmation: true, + icon: "delete-bin-7-line", + require_confirmation: true }, { - label: t('.batch_actions.discontinue'), + label: t(".batch_actions.discontinue"), action: solidus_admin.discontinue_products_path, method: :put, - icon: 'pause-circle-line', - require_confirmation: true, + icon: "pause-circle-line", + require_confirmation: true }, { - label: t('.batch_actions.activate'), + label: t(".batch_actions.activate"), action: solidus_admin.activate_products_path, method: :put, - icon: 'play-circle-line', - require_confirmation: true, - }, + icon: "play-circle-line", + require_confirmation: true + } ] end def scopes [ - { name: :all, label: t('.scopes.all'), default: true }, - { name: :in_stock, label: t('.scopes.in_stock') }, - { name: :out_of_stock, label: t('.scopes.out_of_stock') }, - { name: :available, label: t('.scopes.available') }, - { name: :discontinued, label: t('.scopes.discontinued') }, - { name: :deleted, label: t('.scopes.deleted') }, + {name: :all, label: t(".scopes.all"), default: true}, + {name: :in_stock, label: t(".scopes.in_stock")}, + {name: :out_of_stock, label: t(".scopes.out_of_stock")}, + {name: :available, label: t(".scopes.available")}, + {name: :discontinued, label: t(".scopes.discontinued")}, + {name: :deleted, label: t(".scopes.deleted")} ] end @@ -67,10 +67,10 @@ def filters Spree::OptionType.all.map do |option_type| { label: option_type.presentation, - combinator: 'or', + combinator: "or", attribute: "option_values_id", predicate: "in", - options: option_type.option_values.pluck(:name, :id), + options: option_type.option_values.pluck(:name, :id) } end end @@ -81,19 +81,19 @@ def columns name_column, status_column, price_column, - stock_column, + stock_column ] end def image_column { - col: { class: "w-[72px]" }, - header: tag.span('aria-label': t('.image'), role: 'text'), + col: {class: "w-[72px]"}, + header: tag.span("aria-label": t(".image"), role: "text"), data: ->(product) do image = product.gallery.images.first or return render( - component('ui/thumbnail').new( + component("ui/thumbnail").new( src: image.url(:small), alt: product.name ) @@ -114,14 +114,14 @@ def name_column def status_column { header: :status, - data: ->(product) { component('products/status').from_product(product) } + data: ->(product) { component("products/status").from_product(product) } } end def stock_column { header: :stock, - data: ->(product) { component('products/stock').from_product(product) } + data: ->(product) { component("products/stock").from_product(product) } } end diff --git a/admin/app/components/solidus_admin/products/show/component.rb b/admin/app/components/solidus_admin/products/show/component.rb index 66ae89250fd..bbd98cfc693 100644 --- a/admin/app/components/solidus_admin/products/show/component.rb +++ b/admin/app/components/solidus_admin/products/show/component.rb @@ -16,7 +16,7 @@ def form_id def taxon_options @taxon_options ||= Spree::Taxon.order(:lft).pluck(:name, :id, :lft, :depth).map do name, id, _lft, depth = _1 - ["#{'    ' * depth} → #{name}", id] + ["#{"    " * depth} → #{name}", id] end end diff --git a/admin/app/components/solidus_admin/products/status/component.rb b/admin/app/components/solidus_admin/products/status/component.rb index 01fe489abfe..660f1927263 100644 --- a/admin/app/components/solidus_admin/products/status/component.rb +++ b/admin/app/components/solidus_admin/products/status/component.rb @@ -28,7 +28,7 @@ def initialize(status:) end def call - render component('ui/badge').new( + render component("ui/badge").new( name: t(".#{@status}"), color: STATUSES.fetch(@status) ) diff --git a/admin/app/components/solidus_admin/products/stock/component.rb b/admin/app/components/solidus_admin/products/stock/component.rb index 32aecdecd40..f245bd8c284 100644 --- a/admin/app/components/solidus_admin/products/stock/component.rb +++ b/admin/app/components/solidus_admin/products/stock/component.rb @@ -4,14 +4,14 @@ class SolidusAdmin::Products::Stock::Component < SolidusAdmin::BaseComponent def self.from_product(product) new( on_hand: product.total_on_hand, - variants_count: product.variants.count, + variants_count: product.variants.count ) end def self.from_variant(variant) new( on_hand: variant.total_on_hand, - variants_count: nil, + variants_count: nil ) end @@ -24,15 +24,15 @@ def call stock_info = case @on_hand when Float::INFINITY - tag.span t('.stock.in_stock', on_hand: t('.stock.infinity')), class: 'text-forest' + tag.span t(".stock.in_stock", on_hand: t(".stock.infinity")), class: "text-forest" when 1..Float::INFINITY - tag.span t('.stock.in_stock', on_hand: @on_hand), class: 'text-forest' + tag.span t(".stock.in_stock", on_hand: @on_hand), class: "text-forest" else - tag.span t('.stock.in_stock', on_hand: @on_hand), class: 'text-red-500' + tag.span t(".stock.in_stock", on_hand: @on_hand), class: "text-red-500" end - variant_info = t('.for_variants', count: @variants_count) if @variants_count + variant_info = t(".for_variants", count: @variants_count) if @variants_count - tag.span safe_join([stock_info, variant_info], ' ') + tag.span safe_join([stock_info, variant_info], " ") end end diff --git a/admin/app/components/solidus_admin/properties/index/component.rb b/admin/app/components/solidus_admin/properties/index/component.rb index e902f80aa16..af11117d1fe 100644 --- a/admin/app/components/solidus_admin/properties/index/component.rb +++ b/admin/app/components/solidus_admin/properties/index/component.rb @@ -6,7 +6,7 @@ def model_class end def title - t('solidus_admin.properties.title') + t("solidus_admin.properties.title") end def search_key @@ -28,28 +28,28 @@ def turbo_frames def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: solidus_admin.new_property_path(**search_filter_params), - data: { turbo_frame: :resource_form }, - icon: "add-line", + data: {turbo_frame: :resource_form}, + icon: "add-line" ) end def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.properties_path(**search_filter_params), method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end def columns [ name_column, - presentation_column, + presentation_column ] end @@ -58,8 +58,8 @@ def name_column header: :name, data: ->(property) do link_to property.name, edit_path(property), - data: { turbo_frame: :resource_form }, - class: 'body-link' + data: {turbo_frame: :resource_form}, + class: "body-link" end } end @@ -69,8 +69,8 @@ def presentation_column header: :presentation, data: ->(property) do link_to property.presentation, edit_path(property), - data: { turbo_frame: :resource_form }, - class: 'body-link' + data: {turbo_frame: :resource_form}, + class: "body-link" end } end diff --git a/admin/app/components/solidus_admin/refund_reasons/index/component.rb b/admin/app/components/solidus_admin/refund_reasons/index/component.rb index 01c4046fd0a..a5206a576f4 100644 --- a/admin/app/components/solidus_admin/refund_reasons/index/component.rb +++ b/admin/app/components/solidus_admin/refund_reasons/index/component.rb @@ -26,22 +26,22 @@ def turbo_frames def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: solidus_admin.new_refund_reason_path(**search_filter_params), - data: { turbo_frame: :resource_form }, + data: {turbo_frame: :resource_form}, icon: "add-line", - class: "align-self-end w-full", + class: "align-self-end w-full" ) end def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.refund_reasons_path(**search_filter_params), method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end @@ -51,24 +51,24 @@ def columns header: :name, data: ->(refund_reason) do link_to refund_reason.name, edit_path(refund_reason), - data: { turbo_frame: :resource_form }, - class: 'body-link' + data: {turbo_frame: :resource_form}, + class: "body-link" end }, { header: :code, data: ->(refund_reason) do link_to_if refund_reason.code, refund_reason.code, edit_path(refund_reason), - data: { turbo_frame: :resource_form }, - class: 'body-link' + data: {turbo_frame: :resource_form}, + class: "body-link" end }, { header: :active, data: ->(refund_reason) do - refund_reason.active? ? component('ui/badge').yes : component('ui/badge').no + refund_reason.active? ? component("ui/badge").yes : component("ui/badge").no end - }, + } ] end end diff --git a/admin/app/components/solidus_admin/refunds_and_returns/component.rb b/admin/app/components/solidus_admin/refunds_and_returns/component.rb index 7920c482f73..ea37af530ad 100644 --- a/admin/app/components/solidus_admin/refunds_and_returns/component.rb +++ b/admin/app/components/solidus_admin/refunds_and_returns/component.rb @@ -4,7 +4,7 @@ class SolidusAdmin::RefundsAndReturns::Component < SolidusAdmin::UI::Pages::Inde def title page_header_title safe_join([ tag.div(t(".title")), - tag.div(t(".subtitle"), class: "font-normal text-sm text-gray-500"), + tag.div(t(".subtitle"), class: "font-normal text-sm text-gray-500") ]) end @@ -13,28 +13,28 @@ def tabs { text: Spree::RefundReason.model_name.human(count: 2), href: solidus_admin.refund_reasons_path, - current: model_class == Spree::RefundReason, + current: model_class == Spree::RefundReason }, { text: Spree::ReimbursementType.model_name.human(count: 2), href: solidus_admin.reimbursement_types_path, - current: model_class == Spree::ReimbursementType, + current: model_class == Spree::ReimbursementType }, { text: Spree::ReturnReason.model_name.human(count: 2), href: solidus_admin.return_reasons_path, - current: model_class == Spree::ReturnReason, + current: model_class == Spree::ReturnReason }, { text: Spree::AdjustmentReason.model_name.human(count: 2), href: solidus_admin.adjustment_reasons_path, - current: model_class == Spree::AdjustmentReason, + current: model_class == Spree::AdjustmentReason }, { text: Spree::StoreCreditReason.model_name.human(count: 2), href: solidus_admin.store_credit_reasons_path, - current: model_class == Spree::StoreCreditReason, - }, + current: model_class == Spree::StoreCreditReason + } ] end end diff --git a/admin/app/components/solidus_admin/reimbursement_types/index/component.rb b/admin/app/components/solidus_admin/reimbursement_types/index/component.rb index 39ea3bc77e7..b3a54378f0e 100644 --- a/admin/app/components/solidus_admin/reimbursement_types/index/component.rb +++ b/admin/app/components/solidus_admin/reimbursement_types/index/component.rb @@ -19,9 +19,9 @@ def columns { header: :active, data: ->(reimbursement_type) do - reimbursement_type.active? ? component('ui/badge').yes : component('ui/badge').no + reimbursement_type.active? ? component("ui/badge").yes : component("ui/badge").no end - }, + } ] end end diff --git a/admin/app/components/solidus_admin/return_reasons/index/component.rb b/admin/app/components/solidus_admin/return_reasons/index/component.rb index e8fb147dd7a..a0d7f5e0164 100644 --- a/admin/app/components/solidus_admin/return_reasons/index/component.rb +++ b/admin/app/components/solidus_admin/return_reasons/index/component.rb @@ -26,22 +26,22 @@ def turbo_frames def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: solidus_admin.new_return_reason_path(**search_filter_params), - data: { turbo_frame: :resource_form }, + data: {turbo_frame: :resource_form}, icon: "add-line", - class: "align-self-end w-full", + class: "align-self-end w-full" ) end def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.return_reasons_path, method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end @@ -51,16 +51,16 @@ def columns header: :name, data: ->(return_reason) do link_to return_reason.name, edit_path(return_reason), - data: { turbo_frame: :resource_form }, - class: 'body-link' + data: {turbo_frame: :resource_form}, + class: "body-link" end }, { header: :active, data: ->(return_reason) do - return_reason.active? ? component('ui/badge').yes : component('ui/badge').no + return_reason.active? ? component("ui/badge").yes : component("ui/badge").no end - }, + } ] end end diff --git a/admin/app/components/solidus_admin/roles/index/component.rb b/admin/app/components/solidus_admin/roles/index/component.rb index 4a8f513301e..69372055945 100644 --- a/admin/app/components/solidus_admin/roles/index/component.rb +++ b/admin/app/components/solidus_admin/roles/index/component.rb @@ -20,10 +20,10 @@ def edit_path(role) def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: solidus_admin.new_role_path(**search_filter_params), - data: { turbo_frame: :resource_form }, - icon: "add-line", + data: {turbo_frame: :resource_form}, + icon: "add-line" ) end @@ -36,18 +36,18 @@ def turbo_frames def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.roles_path(**search_filter_params), method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end def scopes [ - { name: :all, label: t('.scopes.all'), default: true }, - { name: :admin, label: t('.scopes.admin') }, + {name: :all, label: t(".scopes.all"), default: true}, + {name: :admin, label: t(".scopes.admin")} ] end @@ -61,15 +61,15 @@ def columns header: :role, data: ->(role) do link_to role.name, edit_path(role), - data: { turbo_frame: :resource_form }, + data: {turbo_frame: :resource_form}, class: "body-link" - end, + end }, { header: :description, data: ->(role) do link_to_if role.description, role.description, edit_path(role), - data: { turbo_frame: :resource_form }, + data: {turbo_frame: :resource_form}, class: "body-link" end } diff --git a/admin/app/components/solidus_admin/shipping/component.rb b/admin/app/components/solidus_admin/shipping/component.rb index f9f6fe39579..16842117471 100644 --- a/admin/app/components/solidus_admin/shipping/component.rb +++ b/admin/app/components/solidus_admin/shipping/component.rb @@ -4,7 +4,7 @@ class SolidusAdmin::Shipping::Component < SolidusAdmin::UI::Pages::Index::Compon def title page_header_title safe_join([ tag.div(t(".title")), - tag.div(t(".subtitle"), class: "font-normal text-sm text-gray-500"), + tag.div(t(".subtitle"), class: "font-normal text-sm text-gray-500") ]) end @@ -13,18 +13,18 @@ def tabs { text: Spree::ShippingMethod.model_name.human.pluralize, href: solidus_admin.shipping_methods_path, - current: model_class == Spree::ShippingMethod, + current: model_class == Spree::ShippingMethod }, { text: Spree::ShippingCategory.model_name.human.pluralize, href: solidus_admin.shipping_categories_path, - current: model_class == Spree::ShippingCategory, + current: model_class == Spree::ShippingCategory }, { text: Spree::StockLocation.model_name.human.pluralize, href: solidus_admin.stock_locations_path, - current: model_class == Spree::StockLocation, - }, + current: model_class == Spree::StockLocation + } ] end end diff --git a/admin/app/components/solidus_admin/shipping_categories/index/component.rb b/admin/app/components/solidus_admin/shipping_categories/index/component.rb index 2c303296914..2f30e29418b 100644 --- a/admin/app/components/solidus_admin/shipping_categories/index/component.rb +++ b/admin/app/components/solidus_admin/shipping_categories/index/component.rb @@ -8,11 +8,11 @@ def model_class def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: solidus_admin.new_shipping_category_path(**search_filter_params), - data: { turbo_frame: :resource_form }, + data: {turbo_frame: :resource_form}, icon: "add-line", - class: "align-self-end w-full", + class: "align-self-end w-full" ) end @@ -37,11 +37,11 @@ def search_url def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.shipping_categories_path(**search_filter_params), method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end @@ -51,10 +51,10 @@ def columns header: :name, data: ->(shipping_category) do link_to shipping_category.name, edit_url(shipping_category), - data: { turbo_frame: :resource_form }, + data: {turbo_frame: :resource_form}, class: "body-link" end - }, + } ] end end diff --git a/admin/app/components/solidus_admin/shipping_methods/index/component.rb b/admin/app/components/solidus_admin/shipping_methods/index/component.rb index 69a3f3fbe3f..8299436c5cf 100644 --- a/admin/app/components/solidus_admin/shipping_methods/index/component.rb +++ b/admin/app/components/solidus_admin/shipping_methods/index/component.rb @@ -20,21 +20,21 @@ def search_key def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: spree.new_admin_shipping_method_path, icon: "add-line", - class: "align-self-end w-full", + class: "align-self-end w-full" ) end def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.shipping_methods_path, method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end @@ -42,20 +42,20 @@ def columns [ { header: :name, - data: -> { [_1.admin_name.presence, _1.name].compact.join(' / ') }, + data: -> { [_1.admin_name.presence, _1.name].compact.join(" / ") } }, { header: :zone, - data: -> { _1.zones.pluck(:name).to_sentence }, + data: -> { _1.zones.pluck(:name).to_sentence } }, { header: :calculator, - data: -> { _1.calculator&.description }, + data: -> { _1.calculator&.description } }, { header: :available_to_users, - data: -> { _1.available_to_users? ? component('ui/badge').yes : component('ui/badge').no }, - }, + data: -> { _1.available_to_users? ? component("ui/badge").yes : component("ui/badge").no } + } ] end end diff --git a/admin/app/components/solidus_admin/stock_items/edit/component.rb b/admin/app/components/solidus_admin/stock_items/edit/component.rb index 63ccf53032e..f36b316e9b7 100644 --- a/admin/app/components/solidus_admin/stock_items/edit/component.rb +++ b/admin/app/components/solidus_admin/stock_items/edit/component.rb @@ -3,7 +3,7 @@ class SolidusAdmin::StockItems::Edit::Component < SolidusAdmin::Resources::Edit::Component def title [ - "#{Spree::StockLocation.model_name.human}: #{@stock_item.stock_location.name}", - ].join(' / ') + "#{Spree::StockLocation.model_name.human}: #{@stock_item.stock_location.name}" + ].join(" / ") end end diff --git a/admin/app/components/solidus_admin/stock_items/index/component.rb b/admin/app/components/solidus_admin/stock_items/index/component.rb index 38906599e98..756201758bd 100644 --- a/admin/app/components/solidus_admin/stock_items/index/component.rb +++ b/admin/app/components/solidus_admin/stock_items/index/component.rb @@ -19,19 +19,19 @@ def edit_path(stock_item) def scopes [ - { label: t('.scopes.all_stock_items'), name: 'all', default: true }, - { label: t('.scopes.back_orderable'), name: 'back_orderable' }, - { label: t('.scopes.out_of_stock'), name: 'out_of_stock' }, - { label: t('.scopes.low_stock'), name: 'low_stock' }, - { label: t('.scopes.in_stock'), name: 'in_stock' }, + {label: t(".scopes.all_stock_items"), name: "all", default: true}, + {label: t(".scopes.back_orderable"), name: "back_orderable"}, + {label: t(".scopes.out_of_stock"), name: "out_of_stock"}, + {label: t(".scopes.low_stock"), name: "low_stock"}, + {label: t(".scopes.in_stock"), name: "in_stock"} ] end def filters [ { - label: t('.filters.stock_locations'), - combinator: 'or', + label: t(".filters.stock_locations"), + combinator: "or", attribute: "stock_location_id", predicate: "eq", options: Spree::StockLocation.all.map do |stock_location| @@ -42,8 +42,8 @@ def filters end }, { - label: t('.filters.variants'), - combinator: 'or', + label: t(".filters.variants"), + combinator: "or", attribute: "variant_id", predicate: "eq", options: Spree::Variant.all.map do |variant| @@ -52,7 +52,7 @@ def filters variant.id ] end - }, + } ] end @@ -65,19 +65,19 @@ def columns stock_location_column, back_orderable_column, count_on_hand_column, - stock_movements_column, + stock_movements_column ] end def image_column { - col: { class: "w-[72px]" }, - header: tag.span('aria-label': Spree::Image.model_name.human, role: 'text'), + col: {class: "w-[72px]"}, + header: tag.span("aria-label": Spree::Image.model_name.human, role: "text"), data: ->(stock_item) do image = stock_item.variant.gallery.images.first or return render( - component('ui/thumbnail').new( + component("ui/thumbnail").new( src: image.url(:small), alt: stock_item.variant.name ) @@ -91,8 +91,8 @@ def name_column header: :name, data: ->(stock_item) do link_to stock_item.variant.name, edit_path(stock_item), - data: { turbo_frame: :resource_form }, - class: 'body-link' + data: {turbo_frame: :resource_form}, + class: "body-link" end } end @@ -102,8 +102,8 @@ def sku_column header: :sku, data: ->(stock_item) do link_to stock_item.variant.sku, edit_path(stock_item), - data: { turbo_frame: :resource_form }, - class: 'body-link' + data: {turbo_frame: :resource_form}, + class: "body-link" end } end @@ -115,7 +115,7 @@ def variant_column content_tag(:div, class: "space-y-0.5") do safe_join( stock_item.variant.option_values.sort_by(&:option_type_name).map do |option_value| - render(component('ui/badge').new(name: "#{option_value.option_type_presentation}: #{option_value.presentation}")) + render(component("ui/badge").new(name: "#{option_value.option_type_presentation}: #{option_value.presentation}")) end ) end @@ -126,7 +126,7 @@ def variant_column def stock_location_column { header: :stock_location, - data: ->(stock_item) { stock_item.stock_location.name }, + data: ->(stock_item) { stock_item.stock_location.name } } end @@ -145,9 +145,9 @@ def stock_movements_column "#{count} #{Spree::StockMovement.model_name.human(count:).downcase}", spree.admin_stock_location_stock_movements_path( _1.stock_location.id, - q: { variant_sku_eq: _1.variant.sku }, + q: {variant_sku_eq: _1.variant.sku} ), - class: 'body-link' + class: "body-link" ) end } @@ -157,7 +157,7 @@ def back_orderable_column { header: :back_orderable, data: ->(stock_item) do - stock_item.backorderable? ? component('ui/badge').yes : component('ui/badge').no + stock_item.backorderable? ? component("ui/badge").yes : component("ui/badge").no end } end diff --git a/admin/app/components/solidus_admin/stock_locations/index/component.rb b/admin/app/components/solidus_admin/stock_locations/index/component.rb index 53f2482bdf6..b4e2a113c00 100644 --- a/admin/app/components/solidus_admin/stock_locations/index/component.rb +++ b/admin/app/components/solidus_admin/stock_locations/index/component.rb @@ -8,10 +8,10 @@ def model_class def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: solidus_admin.new_stock_location_path, icon: "add-line", - class: "align-self-end w-full", + class: "align-self-end w-full" ) end @@ -30,11 +30,11 @@ def edit_path(stock_location) def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.stock_locations_path, method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end @@ -54,7 +54,7 @@ def columns state_column, backorderable_column, default_column, - stock_movements_column, + stock_movements_column ] end @@ -64,7 +64,7 @@ def name_column { header: :name, data: ->(stock_location) do - link_to stock_location.name, edit_path(stock_location), class: 'body-link' + link_to stock_location.name, edit_path(stock_location), class: "body-link" end } end @@ -74,7 +74,8 @@ def code_column header: :code, data: ->(stock_location) do return if stock_location.code.blank? - link_to stock_location.code, edit_path(stock_location), class: 'body-link' + + link_to stock_location.code, edit_path(stock_location), class: "body-link" end } end @@ -84,7 +85,8 @@ def admin_name_column header: :admin_name, data: ->(stock_location) do return if stock_location.admin_name.blank? - link_to stock_location.admin_name, edit_path(stock_location), class: 'body-link' + + link_to stock_location.admin_name, edit_path(stock_location), class: "body-link" end } end @@ -94,9 +96,9 @@ def state_column header: :state, data: ->(stock_location) do color = stock_location.active? ? :green : :graphite_light - text = stock_location.active? ? t('.active') : t('.inactive') + text = stock_location.active? ? t(".active") : t(".inactive") - component('ui/badge').new(name: text, color:) + component("ui/badge").new(name: text, color:) end } end @@ -105,7 +107,7 @@ def backorderable_column { header: :backorderable, data: -> do - _1.backorderable_default ? component('ui/badge').yes : component('ui/badge').no + _1.backorderable_default ? component("ui/badge").yes : component("ui/badge").no end } end @@ -114,7 +116,7 @@ def default_column { header: :default, data: -> do - _1.default ? component('ui/badge').yes : component('ui/badge').no + _1.default ? component("ui/badge").yes : component("ui/badge").no end } end @@ -128,7 +130,7 @@ def stock_movements_column link_to( "#{count} #{Spree::StockMovement.model_name.human(count:).downcase}", spree.admin_stock_location_stock_movements_path(stock_location), - class: 'body-link' + class: "body-link" ) end } diff --git a/admin/app/components/solidus_admin/stock_locations/new/component.rb b/admin/app/components/solidus_admin/stock_locations/new/component.rb index 91934fb26d6..e63ec887c8c 100644 --- a/admin/app/components/solidus_admin/stock_locations/new/component.rb +++ b/admin/app/components/solidus_admin/stock_locations/new/component.rb @@ -4,7 +4,7 @@ class SolidusAdmin::StockLocations::New::Component < SolidusAdmin::Resources::Ne include SolidusAdmin::Layout::PageHelpers def initialize(*args) - super(*args) + super ensure_country end diff --git a/admin/app/components/solidus_admin/store_credit_reasons/index/component.rb b/admin/app/components/solidus_admin/store_credit_reasons/index/component.rb index c1186925d28..894e163488d 100644 --- a/admin/app/components/solidus_admin/store_credit_reasons/index/component.rb +++ b/admin/app/components/solidus_admin/store_credit_reasons/index/component.rb @@ -8,11 +8,11 @@ def model_class def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: solidus_admin.new_store_credit_reason_path(**search_filter_params), - data: { turbo_frame: :resource_form }, + data: {turbo_frame: :resource_form}, icon: "add-line", - class: "align-self-end w-full", + class: "align-self-end w-full" ) end @@ -37,11 +37,11 @@ def search_key def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.store_credit_reasons_path(**search_filter_params), method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end @@ -51,16 +51,16 @@ def columns header: :name, data: ->(store_credit_reason) do link_to store_credit_reason.name, edit_path(store_credit_reason), - data: { turbo_frame: :resource_form }, - class: 'body-link' + data: {turbo_frame: :resource_form}, + class: "body-link" end }, { header: :active, data: ->(store_credit_reason) do - store_credit_reason.active? ? component('ui/badge').yes : component('ui/badge').no + store_credit_reason.active? ? component("ui/badge").yes : component("ui/badge").no end - }, + } ] end end diff --git a/admin/app/components/solidus_admin/stores/index/component.rb b/admin/app/components/solidus_admin/stores/index/component.rb index 5df8aa80005..ead30ff4527 100644 --- a/admin/app/components/solidus_admin/stores/index/component.rb +++ b/admin/app/components/solidus_admin/stores/index/component.rb @@ -20,20 +20,20 @@ def row_url(store) def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: spree.new_admin_store_path, - icon: "add-line", + icon: "add-line" ) end def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.stores_path, method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end @@ -50,9 +50,9 @@ def columns { header: :default, data: ->(store) do - store.default? ? component('ui/badge').yes : component('ui/badge').no + store.default? ? component("ui/badge").yes : component("ui/badge").no end - }, + } ] end end diff --git a/admin/app/components/solidus_admin/tax_categories/index/component.rb b/admin/app/components/solidus_admin/tax_categories/index/component.rb index d7d2f40567c..219a66d1d48 100644 --- a/admin/app/components/solidus_admin/tax_categories/index/component.rb +++ b/admin/app/components/solidus_admin/tax_categories/index/component.rb @@ -16,11 +16,11 @@ def search_url def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: solidus_admin.new_tax_category_path(**search_filter_params), - data: { turbo_frame: :resource_form }, + data: {turbo_frame: :resource_form}, icon: "add-line", - class: "align-self-end w-full", + class: "align-self-end w-full" ) end @@ -37,11 +37,11 @@ def search_key def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.tax_categories_path(**search_filter_params), method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end @@ -51,36 +51,36 @@ def columns header: :name, data: ->(tax_category) do link_to tax_category.name, edit_path(tax_category), - data: { turbo_frame: :resource_form }, - class: 'body-link' + data: {turbo_frame: :resource_form}, + class: "body-link" end }, { header: :tax_code, data: ->(tax_category) do link_to_if tax_category.tax_code, tax_category.tax_code, edit_path(tax_category), - data: { turbo_frame: :resource_form }, - class: 'body-link' + data: {turbo_frame: :resource_form}, + class: "body-link" end }, { header: :description, data: ->(tax_category) do link_to_if tax_category.description, tax_category.description, edit_path(tax_category), - data: { turbo_frame: :resource_form }, - class: 'body-link' + data: {turbo_frame: :resource_form}, + class: "body-link" end }, { header: :is_default, data: ->(tax_category) { if tax_category.is_default? - component('ui/badge').yes + component("ui/badge").yes else - component('ui/badge').no + component("ui/badge").no end - }, - }, + } + } ] end end diff --git a/admin/app/components/solidus_admin/tax_rates/index/component.rb b/admin/app/components/solidus_admin/tax_rates/index/component.rb index 148d280a682..a2b893df482 100644 --- a/admin/app/components/solidus_admin/tax_rates/index/component.rb +++ b/admin/app/components/solidus_admin/tax_rates/index/component.rb @@ -16,10 +16,10 @@ def search_url def actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: spree.new_admin_tax_rate_path, icon: "add-line", - class: "align-self-end w-full", + class: "align-self-end w-full" ) end @@ -30,11 +30,11 @@ def search_key def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.tax_rates_path, method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end @@ -44,13 +44,13 @@ def filters label: Spree::Zone.model_name.human, attribute: :zone_id, predicate: :eq, - options: Spree::Zone.pluck(:name, :id), + options: Spree::Zone.pluck(:name, :id) }, { label: Spree::TaxCategory.model_name.human, attribute: :tax_categories_id, predicate: :in, - options: Spree::TaxCategory.pluck(:name, :id), + options: Spree::TaxCategory.pluck(:name, :id) } ] end @@ -59,30 +59,30 @@ def columns [ { header: :zone, - data: -> { _1.zone&.name }, + data: -> { _1.zone&.name } }, :name, { header: :tax_categories, - data: -> { _1.tax_categories.map(&:name).join(', ') }, + data: -> { _1.tax_categories.map(&:name).join(", ") } }, { header: :amount, - data: -> { _1.display_amount }, + data: -> { _1.display_amount } }, { header: :included_in_price, - data: -> { _1.included_in_price? ? component('ui/badge').yes : component('ui/badge').no }, + data: -> { _1.included_in_price? ? component("ui/badge").yes : component("ui/badge").no } }, { header: :show_rate_in_label, - data: -> { _1.show_rate_in_label? ? component('ui/badge').yes : component('ui/badge').no }, + data: -> { _1.show_rate_in_label? ? component("ui/badge").yes : component("ui/badge").no } }, :expires_at, { header: Spree::Calculator.model_name.human, data: -> { _1.calculator&.class&.model_name&.human } - }, + } ] end end diff --git a/admin/app/components/solidus_admin/taxes/component.rb b/admin/app/components/solidus_admin/taxes/component.rb index 366c193c676..69238a6d2a8 100644 --- a/admin/app/components/solidus_admin/taxes/component.rb +++ b/admin/app/components/solidus_admin/taxes/component.rb @@ -4,7 +4,7 @@ class SolidusAdmin::Taxes::Component < SolidusAdmin::UI::Pages::Index::Component def title safe_join([ tag.div(t(".title")), - tag.div(t(".subtitle"), class: "font-normal text-sm text-gray-500"), + tag.div(t(".subtitle"), class: "font-normal text-sm text-gray-500") ]) end @@ -13,13 +13,13 @@ def tabs { text: Spree::TaxCategory.model_name.human.pluralize, href: solidus_admin.tax_categories_path, - current: model_class == Spree::TaxCategory, + current: model_class == Spree::TaxCategory }, { text: Spree::TaxRate.model_name.human.pluralize, href: solidus_admin.tax_rates_path, - current: model_class == Spree::TaxRate, - }, + current: model_class == Spree::TaxRate + } ] end end diff --git a/admin/app/components/solidus_admin/taxonomies/index/component.rb b/admin/app/components/solidus_admin/taxonomies/index/component.rb index e1a47ae8f60..beeceff1f52 100644 --- a/admin/app/components/solidus_admin/taxonomies/index/component.rb +++ b/admin/app/components/solidus_admin/taxonomies/index/component.rb @@ -12,33 +12,33 @@ def row_url(taxonomy) def sortable_options { url: ->(taxonomy) { solidus_admin.move_taxonomy_path(taxonomy) }, - param: 'position', + param: "position" } end def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: spree.new_admin_taxonomy_path, - icon: "add-line", + icon: "add-line" ) end def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.taxonomies_path, method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end def columns [ - name_column, + name_column ] end diff --git a/admin/app/components/solidus_admin/ui/alert/component.rb b/admin/app/components/solidus_admin/ui/alert/component.rb index 5605ce4b596..bc1cbc89fa0 100644 --- a/admin/app/components/solidus_admin/ui/alert/component.rb +++ b/admin/app/components/solidus_admin/ui/alert/component.rb @@ -13,26 +13,26 @@ class SolidusAdmin::UI::Alert::Component < SolidusAdmin::BaseComponent ], info: %w[ border-gray-500 bg-gray-50 - ], + ] } ICONS = { success: { name: "checkbox-circle-fill", - class: "fill-forest", + class: "fill-forest" }, warning: { name: "error-warning-fill", - class: "fill-orange", + class: "fill-orange" }, danger: { name: "error-warning-fill", - class: "fill-red-500", + class: "fill-red-500" }, info: { name: "information-fill", - class: "fill-gray-500", - }, + class: "fill-gray-500" + } } def initialize(title:, message:, scheme: :success) diff --git a/admin/app/components/solidus_admin/ui/badge/component.rb b/admin/app/components/solidus_admin/ui/badge/component.rb index 3b34af32549..1f13fbfe1b3 100644 --- a/admin/app/components/solidus_admin/ui/badge/component.rb +++ b/admin/app/components/solidus_admin/ui/badge/component.rb @@ -3,27 +3,27 @@ class SolidusAdmin::UI::Badge::Component < SolidusAdmin::BaseComponent COLORS = { graphite_light: "text-black bg-graphite-light", - red: 'text-red-500 bg-red-100', - green: 'text-forest bg-seafoam', - blue: 'text-blue bg-sky', - black: 'text-white bg-black', - yellow: 'text-orange bg-papaya-whip', + red: "text-red-500 bg-red-100", + green: "text-forest bg-seafoam", + blue: "text-blue bg-sky", + black: "text-white bg-black", + yellow: "text-orange bg-papaya-whip" }.freeze SIZES = { - s: 'px-2 py-0.5 text-xs font-semibold', - m: 'px-3 py-0.5 text-sm font-semibold', - l: 'px-3 py-0.5 text-base font-semibold', + s: "px-2 py-0.5 text-xs font-semibold", + m: "px-3 py-0.5 text-sm font-semibold", + l: "px-3 py-0.5 text-base font-semibold" }.freeze def initialize(name:, color: :graphite_light, size: :m) @name = name @class_name = [ - 'inline-flex items-center rounded-full whitespace-nowrap', # layout + "inline-flex items-center rounded-full whitespace-nowrap", # layout SIZES.fetch(size.to_sym), # size - COLORS.fetch(color.to_sym), # color - ].join(' ') + COLORS.fetch(color.to_sym) # color + ].join(" ") end def self.yes diff --git a/admin/app/components/solidus_admin/ui/button/component.rb b/admin/app/components/solidus_admin/ui/button/component.rb index a667c6ab37b..5f8c404ff2d 100644 --- a/admin/app/components/solidus_admin/ui/button/component.rb +++ b/admin/app/components/solidus_admin/ui/button/component.rb @@ -2,65 +2,65 @@ class SolidusAdmin::UI::Button::Component < SolidusAdmin::BaseComponent SIZES = { - s: %{ + s: %( h-7 w-7 p-1 text-xs font-semibold leading-none - }, - m: %{ + ), + m: %( h-9 w-9 p-1.5 text-sm font-semibold leading-none - }, - l: %{ + ), + l: %( h-12 w-12 p-2 text-base font-semibold leading-none - }, + ) } TEXT_PADDINGS = { - s: %{px-1.5 w-auto}, - m: %{px-3 w-auto}, - l: %{px-4 w-auto}, + s: %(px-1.5 w-auto), + m: %(px-3 w-auto), + l: %(px-4 w-auto) } ICON_SIZES = { - s: %{w-[1.4em] h-[1.4em]}, - m: %{w-[1.35em] h-[1.35em]}, - l: %{w-[1.5em] h-[1.5em]}, + s: %(w-[1.4em] h-[1.4em]), + m: %(w-[1.35em] h-[1.35em]), + l: %(w-[1.5em] h-[1.5em]) } SCHEMES = { - primary: %{ + primary: %( text-white bg-black hover:text-white hover:bg-gray-600 active:text-white active:bg-gray-800 aria-current:text-white aria-current:bg-gray-800 focus:text-white focus:bg-gray-700 disabled:text-gray-400 disabled:bg-gray-100 aria-disabled:text-gray-400 aria-disabled:bg-gray-100 - }, - secondary: %{ + ), + secondary: %( text-gray-700 bg-white border border-1 border-gray-200 hover:bg-gray-50 active:bg-gray-100 aria-current:bg-gray-100 focus:bg-gray-50 disabled:text-gray-300 disabled:bg-white aria-disabled:text-gray-300 aria-disabled:bg-white - }, - danger: %{ + ), + danger: %( text-red-500 bg-white border border-1 border-red-500 hover:bg-red-500 hover:border-red-600 hover:text-white active:bg-red-600 active:border-red-700 active:text-white aria-current:bg-red-600 aria-current:border-red-700 aria-current:text-white focus:bg-red-50 focus:bg-red-500 focus:border-red-600 focus:text-white disabled:text-red-300 disabled:bg-white disabled:border-red-200 aria-disabled:text-red-300 aria-disabled:bg-white aria-disabled:border-red-200 - }, - ghost: %{ + ), + ghost: %( text-gray-700 bg-transparent hover:bg-gray-50 active:bg-gray-100 aria-current:bg-gray-100 focus:bg-gray-50 focus:ring-gray-300 focus:ring-2 disabled:text-gray-300 disabled:bg-transparent disabled:border-gray-300 aria-disabled:text-gray-300 aria-disabled:bg-transparent aria-disabled:border-gray-300 - }, + ) } def self.back(path:, **options) @@ -102,35 +102,35 @@ def initialize( @attributes = attributes @attributes[:class] = [ - 'justify-start items-center justify-center gap-1 inline-flex rounded', - 'focus:ring focus:ring-gray-300 focus:ring-0.5 focus:ring-offset-0 [&:focus-visible]:outline-none', + "justify-start items-center justify-center gap-1 inline-flex rounded", + "focus:ring focus:ring-gray-300 focus:ring-0.5 focus:ring-offset-0 [&:focus-visible]:outline-none", SIZES.fetch(size.to_sym), (TEXT_PADDINGS.fetch(size.to_sym) if @text), SCHEMES.fetch(scheme.to_sym), - @attributes[:class], - ].join(' ') + @attributes[:class] + ].join(" ") @icon_classes = [ - 'fill-current', - ICON_SIZES.fetch(size.to_sym), + "fill-current", + ICON_SIZES.fetch(size.to_sym) ] end def self.submit(resource:, **attrs) unless (text = attrs.delete(:text)) resource_name = resource.model_name.human - text = resource.new_record? ? t('.submit.create', resource_name:) : t('.submit.update', resource_name:) + text = resource.new_record? ? t(".submit.create", resource_name:) : t(".submit.update", resource_name:) end new(text:, type: :submit, **attrs) end def self.cancel - new(scheme: :secondary, text: t('.cancel')) + new(scheme: :secondary, text: t(".cancel")) end def call content = [] - content << render(component('ui/icon').new(name: @icon, class: @icon_classes)) if @icon + content << render(component("ui/icon").new(name: @icon, class: @icon_classes)) if @icon content << @text if @text content_tag(@tag, safe_join(content), **@attributes) diff --git a/admin/app/components/solidus_admin/ui/checkbox/component.rb b/admin/app/components/solidus_admin/ui/checkbox/component.rb index 14619f36a22..362cab98106 100644 --- a/admin/app/components/solidus_admin/ui/checkbox/component.rb +++ b/admin/app/components/solidus_admin/ui/checkbox/component.rb @@ -2,8 +2,8 @@ class SolidusAdmin::UI::Checkbox::Component < SolidusAdmin::BaseComponent SIZES = { - s: 'w-4 h-4', - m: 'w-5 h-5', + s: "w-4 h-4", + m: "w-5 h-5" }.freeze def initialize(size: :m, **attributes) @@ -13,7 +13,7 @@ def initialize(size: :m, **attributes) def call tag.input( - type: 'checkbox', + type: "checkbox", class: " #{SIZES.fetch(@size)} form-checkbox @@ -36,7 +36,7 @@ def call checked:focus:bg-gray-700 checked:disabled:border-gray-300 checked:disabled:bg-gray-300 ", - **@attributes, + **@attributes ) end end diff --git a/admin/app/components/solidus_admin/ui/dropdown/component.rb b/admin/app/components/solidus_admin/ui/dropdown/component.rb index 28f10366fa9..913a6f744ad 100644 --- a/admin/app/components/solidus_admin/ui/dropdown/component.rb +++ b/admin/app/components/solidus_admin/ui/dropdown/component.rb @@ -3,12 +3,12 @@ class SolidusAdmin::UI::Dropdown::Component < SolidusAdmin::BaseComponent DIRECTIONS = { left: "right-0", - right: "left-0", + right: "left-0" } SIZES = { s: "w-5 h-5", - m: "w-[22px] h-[22px]", + m: "w-[22px] h-[22px]" } def initialize(text: nil, size: :m, direction: :left, **attributes) @@ -21,7 +21,7 @@ def initialize(text: nil, size: :m, direction: :left, **attributes) @attributes[:"data-action"] = "turbo:before-cache@window->#{stimulus_id}#close #{attributes[:"data-action"]}" @attributes[:class] = " font-normal - #{@size == :m ? 'text-base' : 'text-sm'} + #{(@size == :m) ? "text-base" : "text-sm"} #{@attributes[:class]} " end diff --git a/admin/app/components/solidus_admin/ui/forms/address/component.rb b/admin/app/components/solidus_admin/ui/forms/address/component.rb index a94f8addbe2..92c0decc6e6 100644 --- a/admin/app/components/solidus_admin/ui/forms/address/component.rb +++ b/admin/app/components/solidus_admin/ui/forms/address/component.rb @@ -20,7 +20,7 @@ def initialize(addressable:, form_field_name:, disabled: false, fieldset: :conta addressable:, form_field_name:, extends:, - excludes:, + excludes: ) end diff --git a/admin/app/components/solidus_admin/ui/forms/address/fields/country_and_state/component.rb b/admin/app/components/solidus_admin/ui/forms/address/fields/country_and_state/component.rb index 5168c0e08b6..4f806cd98de 100644 --- a/admin/app/components/solidus_admin/ui/forms/address/fields/country_and_state/component.rb +++ b/admin/app/components/solidus_admin/ui/forms/address/fields/country_and_state/component.rb @@ -10,6 +10,7 @@ def initialize(addressable:, form_field_name:) def state_options return [] unless @addressable.country + @addressable.country.states.map { |s| [s.name, s.id] } end end diff --git a/admin/app/components/solidus_admin/ui/forms/address/fieldsets/contact/component.rb b/admin/app/components/solidus_admin/ui/forms/address/fieldsets/contact/component.rb index 1490a2509d7..eb9ae648142 100644 --- a/admin/app/components/solidus_admin/ui/forms/address/fieldsets/contact/component.rb +++ b/admin/app/components/solidus_admin/ui/forms/address/fieldsets/contact/component.rb @@ -10,7 +10,7 @@ def fields_map country_and_state: -> { component("ui/forms/address/fields/country_and_state").new(form_field_name: @form_field_name, addressable: @addressable) }, phone: -> { component("ui/forms/field").text_field(@form_field_name, :phone, object: @addressable) }, email: -> { component("ui/forms/field").text_field(@form_field_name, :email, object: @addressable) }, - reverse_charge: -> { component("ui/forms/address/fields/reverse_charge_fields").new(form_field_name: @form_field_name, addressable: @addressable) }, + reverse_charge: -> { component("ui/forms/address/fields/reverse_charge_fields").new(form_field_name: @form_field_name, addressable: @addressable) } } end end diff --git a/admin/app/components/solidus_admin/ui/forms/address/fieldsets/contact_info/component.rb b/admin/app/components/solidus_admin/ui/forms/address/fieldsets/contact_info/component.rb index f9447404683..8a99bcd32ce 100644 --- a/admin/app/components/solidus_admin/ui/forms/address/fieldsets/contact_info/component.rb +++ b/admin/app/components/solidus_admin/ui/forms/address/fieldsets/contact_info/component.rb @@ -4,7 +4,7 @@ class SolidusAdmin::UI::Forms::Address::Fieldsets::ContactInfo::Component < Soli def fields_map { phone: -> { component("ui/forms/field").text_field(@form_field_name, :phone, object: @addressable) }, - email: -> { component("ui/forms/field").text_field(@form_field_name, :email, object: @addressable) }, + email: -> { component("ui/forms/field").text_field(@form_field_name, :email, object: @addressable) } } end end diff --git a/admin/app/components/solidus_admin/ui/forms/address/fieldsets/location/component.rb b/admin/app/components/solidus_admin/ui/forms/address/fieldsets/location/component.rb index 9f225aca1d7..f90cbdba411 100644 --- a/admin/app/components/solidus_admin/ui/forms/address/fieldsets/location/component.rb +++ b/admin/app/components/solidus_admin/ui/forms/address/fieldsets/location/component.rb @@ -8,7 +8,7 @@ def fields_map city_and_zipcode: -> { component("ui/forms/address/fields/city_and_zipcode").new(form_field_name: @form_field_name, addressable: @addressable) }, country_and_state: -> { component("ui/forms/address/fields/country_and_state").new(form_field_name: @form_field_name, addressable: @addressable) }, phone: -> { component("ui/forms/field").text_field(@form_field_name, :phone, object: @addressable) }, - email: -> { component("ui/forms/field").text_field(@form_field_name, :email, object: @addressable) }, + email: -> { component("ui/forms/field").text_field(@form_field_name, :email, object: @addressable) } } end end diff --git a/admin/app/components/solidus_admin/ui/forms/checkbox/component.rb b/admin/app/components/solidus_admin/ui/forms/checkbox/component.rb index 7dbcaee0e7c..d44919c65f3 100644 --- a/admin/app/components/solidus_admin/ui/forms/checkbox/component.rb +++ b/admin/app/components/solidus_admin/ui/forms/checkbox/component.rb @@ -2,13 +2,13 @@ class SolidusAdmin::UI::Forms::Checkbox::Component < SolidusAdmin::BaseComponent FONT_WEIGHTS = { - normal: 'font-normal', - semibold: 'font-semibold', + normal: "font-normal", + semibold: "font-semibold" }.freeze FONT_SIZES = { - xs: 'text-xs', - s: 'text-sm', + xs: "text-xs", + s: "text-sm" }.freeze renders_one :label, ->(text:, weight: :normal, size: :s, **options) do diff --git a/admin/app/components/solidus_admin/ui/forms/field/component.rb b/admin/app/components/solidus_admin/ui/forms/field/component.rb index 341a786f36c..e1af7e47615 100644 --- a/admin/app/components/solidus_admin/ui/forms/field/component.rb +++ b/admin/app/components/solidus_admin/ui/forms/field/component.rb @@ -27,8 +27,8 @@ def self.text_field(form, method, object: nil, hint: nil, tip: nil, size: :m, ** tag: :input, size:, value: object.public_send(method), - error: (errors.to_sentence.capitalize if errors), - **attributes, + error: errors&.to_sentence&.capitalize, + **attributes } ) end @@ -41,10 +41,10 @@ def self.select(form, method, choices, object: nil, hint: nil, tip: nil, size: : hint:, tip:, size: size, - name: "#{object_name}[#{method}]#{'[]' if attributes[:multiple].present?}", + name: "#{object_name}[#{method}]#{"[]" if attributes[:multiple].present?}", choices:, value: object.try(method), - error: (errors.to_sentence.capitalize if errors), + error: errors&.to_sentence&.capitalize, **attributes ) end @@ -62,8 +62,8 @@ def self.text_area(form, method, object: nil, hint: nil, tip: nil, size: :m, **a size:, tag: :textarea, value: object.public_send(method), - error: (errors.to_sentence.capitalize if errors), - **attributes, + error: errors&.to_sentence&.capitalize, + **attributes } ) end @@ -75,14 +75,14 @@ def self.toggle(form, method, object: nil, hint: nil, tip: nil, size: :m, **attr label:, hint:, tip:, - error: errors, + error: errors ).with_content( - component('ui/forms/switch').new( + component("ui/forms/switch").new( name: "#{object_name}[#{method}]", size:, checked: object.public_send(method), include_hidden: true, - **attributes, + **attributes ) ) end diff --git a/admin/app/components/solidus_admin/ui/forms/input/component.rb b/admin/app/components/solidus_admin/ui/forms/input/component.rb index 586c2a65271..e2aa5e18f2c 100644 --- a/admin/app/components/solidus_admin/ui/forms/input/component.rb +++ b/admin/app/components/solidus_admin/ui/forms/input/component.rb @@ -16,7 +16,7 @@ class SolidusAdmin::UI::Forms::Input::Component < SolidusAdmin::BaseComponent MULTILINE_HEIGHTS = { s: %w[min-h-[84px]], m: %w[min-h-[108px]], - l: %w[min-h-[144px]], + l: %w[min-h-[144px]] }.freeze TYPES = Set.new(%i[ @@ -71,7 +71,7 @@ def initialize(tag: :input, size: :m, error: nil, **attributes) ], SIZES[size], specialized_classes, - attributes[:class], + attributes[:class] ].compact.join(" ") @tag = tag diff --git a/admin/app/components/solidus_admin/ui/forms/search/result/component.rb b/admin/app/components/solidus_admin/ui/forms/search/result/component.rb index 08add6e78dd..3b62d448f0b 100644 --- a/admin/app/components/solidus_admin/ui/forms/search/result/component.rb +++ b/admin/app/components/solidus_admin/ui/forms/search/result/component.rb @@ -5,8 +5,8 @@ def call tag.div( content, class: "rounded p-2 hover:bg-gray-25 aria-selected:bg-gray-25 cursor-pointer", - "data-#{component('ui/forms/search').stimulus_id}-target": "result", - "data-action": "click->#{component('ui/forms/search').stimulus_id}#clickedResult", + "data-#{component("ui/forms/search").stimulus_id}-target": "result", + "data-action": "click->#{component("ui/forms/search").stimulus_id}#clickedResult" ) end end diff --git a/admin/app/components/solidus_admin/ui/forms/select/component.rb b/admin/app/components/solidus_admin/ui/forms/select/component.rb index 349e2429d2a..6c87b65fb90 100644 --- a/admin/app/components/solidus_admin/ui/forms/select/component.rb +++ b/admin/app/components/solidus_admin/ui/forms/select/component.rb @@ -4,25 +4,25 @@ class SolidusAdmin::UI::Forms::Select::Component < SolidusAdmin::BaseComponent FONT_SIZES = { s: "[&>.control]:text-xs [&_.dropdown]:text-xs", m: "[&>.control]:text-sm [&_.dropdown]:text-sm", - l: "[&>.control]:text-base [&_.dropdown]:text-base", + l: "[&>.control]:text-base [&_.dropdown]:text-base" }.freeze HEIGHTS = { control: { s: "[&>.control]:min-h-7", m: "[&>.control]:min-h-9", - l: "[&>.control]:min-h-12", + l: "[&>.control]:min-h-12" }, option: { s: "[&_.option]:h-7", m: "[&_.option]:h-9", - l: "[&_.option]:h-12", + l: "[&_.option]:h-12" }, item: { s: "[&_.item]:h-5", m: "[&_.item]:h-5.5", - l: "[&_.item]:h-8", - }, + l: "[&_.item]:h-8" + } }.freeze # Render custom select component, which uses "solidus_select" custom element diff --git a/admin/app/components/solidus_admin/ui/forms/switch/component.rb b/admin/app/components/solidus_admin/ui/forms/switch/component.rb index 232b79eb31f..f44f5554011 100644 --- a/admin/app/components/solidus_admin/ui/forms/switch/component.rb +++ b/admin/app/components/solidus_admin/ui/forms/switch/component.rb @@ -2,8 +2,8 @@ class SolidusAdmin::UI::Forms::Switch::Component < SolidusAdmin::BaseComponent SIZES = { - s: 'w-8 h-5 after:w-4 after:h-4 after:checked:translate-x-3', - m: 'w-10 h-6 after:w-5 after:h-5 after:checked:translate-x-4', + s: "w-8 h-5 after:w-4 after:h-4 after:checked:translate-x-3", + m: "w-10 h-6 after:w-5 after:h-5 after:checked:translate-x-4" }.freeze def initialize(size: :m, include_hidden: false, **attributes) @@ -34,8 +34,8 @@ def initialize(size: :m, include_hidden: false, **attributes) def call input = tag.input( - type: 'checkbox', - **@attributes, + type: "checkbox", + **@attributes ) @include_hidden ? hidden_field_tag(@attributes.fetch(:name), false) + input : input diff --git a/admin/app/components/solidus_admin/ui/icon/component.rb b/admin/app/components/solidus_admin/ui/icon/component.rb index d2736e6afd6..adee360fed9 100644 --- a/admin/app/components/solidus_admin/ui/icon/component.rb +++ b/admin/app/components/solidus_admin/ui/icon/component.rb @@ -15,11 +15,11 @@ def initialize(name:, **attrs) @attrs = attrs # Hide the icon from screen readers by default. - @attrs['aria-hidden'] = true unless @attrs.key?('aria-hidden') + @attrs["aria-hidden"] = true unless @attrs.key?("aria-hidden") # Default icons without style to 16x16, mostly useful in test snapshots. - @attrs['width'] = '16' - @attrs['height'] = '16' + @attrs["width"] = "16" + @attrs["height"] = "16" end def call diff --git a/admin/app/components/solidus_admin/ui/pages/index/component.rb b/admin/app/components/solidus_admin/ui/pages/index/component.rb index 3acfdcc85a5..2ddf2583a92 100644 --- a/admin/app/components/solidus_admin/ui/pages/index/component.rb +++ b/admin/app/components/solidus_admin/ui/pages/index/component.rb @@ -6,19 +6,48 @@ class SolidusAdmin::UI::Pages::Index::Component < SolidusAdmin::BaseComponent Tab = Struct.new(:text, :href, :current, keyword_init: true) # Template methods - def tabs; end - def model_class; end - def back_url; end - def search_key; end - def search_url; end - def page_actions; end - def sidebar; end - def sortable_options; end - def row_url(_record); end - def batch_actions; []; end - def scopes; []; end - def filters; []; end - def columns; []; end + def tabs + end + + def model_class + end + + def back_url + end + + def search_key + end + + def search_url + end + + def page_actions + end + + def sidebar + end + + def sortable_options + end + + def row_url(_record) + end + + def batch_actions + [] + end + + def scopes + [] + end + + def filters + [] + end + + def columns + [] + end def initialize(page:) @page = page @@ -67,7 +96,7 @@ def search_options url: search_url, searchbar_key: search_key, filters:, - scopes:, + scopes: } end @@ -76,12 +105,12 @@ def render_title safe_join [ (page_header_back back_url if back_url), - page_header_title(title), + page_header_title(title) ] end def render_table - render component('ui/table').new( + render component("ui/table").new( id: stimulus_id, data: { class: model_class, @@ -93,10 +122,10 @@ def render_table batch_actions:, url: -> { row_url(_1) }, page: @page.number, - per_page: @page.recordset.ratios.fixed, + per_page: @page.recordset.ratios.fixed }, search: search_options, - sortable: sortable_options, + sortable: sortable_options ) end diff --git a/admin/app/components/solidus_admin/ui/panel/component.rb b/admin/app/components/solidus_admin/ui/panel/component.rb index 6f86f8509fc..2b2e98b7d62 100644 --- a/admin/app/components/solidus_admin/ui/panel/component.rb +++ b/admin/app/components/solidus_admin/ui/panel/component.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true class SolidusAdmin::UI::Panel::Component < SolidusAdmin::BaseComponent - renders_one :action, ->(name:, href:, icon: 'add-box-fill', **args) { + renders_one :action, ->(name:, href:, icon: "add-box-fill", **args) { link_to( - icon_tag(icon, class: 'w-[1.4em] h-[1.4em]') + name, + icon_tag(icon, class: "w-[1.4em] h-[1.4em]") + name, href, **args, - class: 'flex gap-1 hover:underline' + class: "flex gap-1 hover:underline" ) } @@ -33,8 +33,8 @@ def render_section(wide: false, high: false, **args, &block) tag.section(**args, class: " border-gray-100 border-t w-full first-of-type:border-t-0 flex flex-col gap-6 - #{'px-6' unless wide} - #{'py-4' unless high} + #{"px-6" unless wide} + #{"py-4" unless high} #{args[:class]} ", &block) end diff --git a/admin/app/components/solidus_admin/ui/radio/component.rb b/admin/app/components/solidus_admin/ui/radio/component.rb index c618e731cad..5f7b92d0ce5 100644 --- a/admin/app/components/solidus_admin/ui/radio/component.rb +++ b/admin/app/components/solidus_admin/ui/radio/component.rb @@ -3,7 +3,7 @@ class SolidusAdmin::UI::Radio::Component < SolidusAdmin::BaseComponent SIZES = { s: "size-4 checked:border-[5px]", - m: "size-5 checked:border-[6px]", + m: "size-5 checked:border-[6px]" }.freeze def initialize(size: :m, **attributes) diff --git a/admin/app/components/solidus_admin/ui/tab/component.rb b/admin/app/components/solidus_admin/ui/tab/component.rb index a943b57bb57..cf767c4e043 100644 --- a/admin/app/components/solidus_admin/ui/tab/component.rb +++ b/admin/app/components/solidus_admin/ui/tab/component.rb @@ -4,7 +4,7 @@ class SolidusAdmin::UI::Tab::Component < SolidusAdmin::BaseComponent SIZES = { s: %w[h-7 px-1.5 font-semibold text-sm], m: %w[h-9 px-3 font-semibold text-sm], - l: %w[h-12 px-4 font-semibold text-base], + l: %w[h-12 px-4 font-semibold text-base] } def initialize(text:, tag: :a, size: :m, current: false, disabled: false, **attributes) @@ -13,8 +13,8 @@ def initialize(text:, tag: :a, size: :m, current: false, disabled: false, **attr @size = size @attributes = attributes - @attributes[:'aria-current'] = current - @attributes[:'aria-disabled'] = disabled + @attributes[:"aria-current"] = current + @attributes[:"aria-disabled"] = disabled @attributes[:class] = [ %w[ rounded justify-start items-center inline-flex py-1.5 cursor-pointer @@ -30,7 +30,7 @@ def initialize(text:, tag: :a, size: :m, current: false, disabled: false, **attr aria-disabled:bg-gray-75 aria-disabled:text-gray-400 ], SIZES.fetch(@size.to_sym), - @attributes.delete(:class), + @attributes.delete(:class) ].join(" ") end diff --git a/admin/app/components/solidus_admin/ui/table/component.rb b/admin/app/components/solidus_admin/ui/table/component.rb index d8396aa2629..77d4977d914 100644 --- a/admin/app/components/solidus_admin/ui/table/component.rb +++ b/admin/app/components/solidus_admin/ui/table/component.rb @@ -19,11 +19,11 @@ def initialize(**args) end def singular_name - self[:class].model_name.human if self[:class] + self[:class]&.model_name&.human end def plural_name - self[:class].model_name.human.pluralize if self[:class] + self[:class]&.model_name&.human&.pluralize end end @@ -75,7 +75,7 @@ def selectable_column form: batch_actions_form_id, "data-action": "#{stimulus_id}#selectAllRows", "data-#{stimulus_id}-target": "headerCheckbox", - "aria-label": t('.select_all'), + "aria-label": t(".select_all") ) }, data: ->(data) { @@ -85,10 +85,10 @@ def selectable_column value: data.id, "data-action": "#{stimulus_id}#selectRow", "data-#{stimulus_id}-target": "checkbox", - "aria-label": t('.select_row'), + "aria-label": t(".select_row") ) }, - col: { class: 'w-[52px]' }, + col: {class: "w-[52px]"} ) end @@ -105,7 +105,7 @@ def render_batch_action_button(batch_action) name: request_forgery_protection_token, value: form_authenticity_token(form_options: { action: batch_action.action, - method: batch_action.method, + method: batch_action.method }), formaction: batch_action.action, formmethod: batch_action.method, @@ -113,7 +113,7 @@ def render_batch_action_button(batch_action) type: :submit, icon: batch_action.icon, text: batch_action.label, - scheme: :secondary, + scheme: :secondary } if batch_action.require_confirmation @@ -138,7 +138,7 @@ def render_ransack_filter_dropdown(filter, index) predicate: filter.predicate, options: filter.options, form: search_form_id, - index:, + index: ) end @@ -147,7 +147,7 @@ def render_header_cell(cell, **attrs) cell = @data[:class].human_attribute_name(cell) if cell.is_a?(Symbol) cell = cell.render_in(self) if cell.respond_to?(:render_in) - content_tag(:th, cell, class: %{ + content_tag(:th, cell, class: %( border-b border-gray-100 px-4 @@ -155,7 +155,7 @@ def render_header_cell(cell, **attrs) font-semibold vertical-align-middle leading-none - }, **attrs) + ), **attrs) end def render_data_cell(column, data) @@ -187,6 +187,7 @@ def initial_mode def should_enable_sortable? return false if @sortable.nil? return true if @search.nil? + @search.on_default_scope? end end diff --git a/admin/app/components/solidus_admin/ui/table/ransack_filter/component.rb b/admin/app/components/solidus_admin/ui/table/ransack_filter/component.rb index 55003ae0dbe..752bfddc408 100644 --- a/admin/app/components/solidus_admin/ui/table/ransack_filter/component.rb +++ b/admin/app/components/solidus_admin/ui/table/ransack_filter/component.rb @@ -12,7 +12,7 @@ class SolidusAdmin::UI::Table::RansackFilter::Component < SolidusAdmin::BaseComp def initialize( presentation:, combinator:, attribute:, predicate:, options:, form:, index:, search_param: :q -) + ) @presentation = presentation @group = "#{search_param}[g][#{index}]" @combinator = build(:combinator, combinator) @@ -43,7 +43,7 @@ def before_render # @param opt_index [Integer] The index of the option, if applicable. # @return [FormAttribute] The built form attribute. def build(type, value, opt_index = nil) - suffix = SUFFIXES[type] % { index: opt_index || @index } + suffix = SUFFIXES[type] % {index: opt_index || @index} Attribute.new("#{@group}#{suffix}", value) end @@ -53,14 +53,14 @@ def build(type, value, opt_index = nil) # @return [Boolean] Returns true if the checkbox should be checked, false otherwise. def checked?(value) conditions = params.dig(:q, :g, @index.to_s, :c) - conditions && conditions.values.any? { |c| c[:v]&.include?(value.to_s) } + conditions&.values&.any? { |c| c[:v]&.include?(value.to_s) } end SUFFIXES = { - combinator: '[m]', - attribute: '[c][%s][a][]', - predicate: '[c][%s][p]', - option: '[c][%s][v][]' + combinator: "[m]", + attribute: "[c][%s][a][]", + predicate: "[c][%s][p]", + option: "[c][%s][v][]" } Selection = Struct.new(:id, :presentation, :attribute, :predicate, :option, :checked) diff --git a/admin/app/components/solidus_admin/ui/thumbnail/component.rb b/admin/app/components/solidus_admin/ui/thumbnail/component.rb index c8dd1ade52a..8d5672c58da 100644 --- a/admin/app/components/solidus_admin/ui/thumbnail/component.rb +++ b/admin/app/components/solidus_admin/ui/thumbnail/component.rb @@ -2,9 +2,9 @@ class SolidusAdmin::UI::Thumbnail::Component < SolidusAdmin::BaseComponent SIZES = { - s: 'h-6 w-6', - m: 'h-10 w-10', - l: 'h-20 w-20', + s: "h-6 w-6", + m: "h-10 w-10", + l: "h-20 w-20" }.freeze def initialize(icon: nil, size: :m, **attributes) diff --git a/admin/app/components/solidus_admin/ui/toast/component.rb b/admin/app/components/solidus_admin/ui/toast/component.rb index 150cd4b535b..7de58ab0d9b 100644 --- a/admin/app/components/solidus_admin/ui/toast/component.rb +++ b/admin/app/components/solidus_admin/ui/toast/component.rb @@ -7,7 +7,7 @@ class SolidusAdmin::UI::Toast::Component < SolidusAdmin::BaseComponent ], error: %w[ bg-red-500 text-white - ], + ] } def initialize(text:, icon: nil, scheme: :default) diff --git a/admin/app/components/solidus_admin/ui/toggletip/component.rb b/admin/app/components/solidus_admin/ui/toggletip/component.rb index 8e96603efc2..5e75f688fa8 100644 --- a/admin/app/components/solidus_admin/ui/toggletip/component.rb +++ b/admin/app/components/solidus_admin/ui/toggletip/component.rb @@ -9,7 +9,7 @@ class SolidusAdmin::UI::Toggletip::Component < SolidusAdmin::BaseComponent above: { arrow: "before:bottom-0 before:left-1/2 before:translate-y-[50%] before:translate-x-[-50%]", bubble: "translate-x-[calc(-50%+(1rem/2))] translate-y-[calc(-100%-1rem-(0.375rem/2))]" - }, + } }.freeze def initialize(text:, position: :above, **attributes) diff --git a/admin/app/components/solidus_admin/users/edit/component.rb b/admin/app/components/solidus_admin/users/edit/component.rb index b8c637ecf6c..7bb25883cc1 100644 --- a/admin/app/components/solidus_admin/users/edit/component.rb +++ b/admin/app/components/solidus_admin/users/edit/component.rb @@ -13,7 +13,7 @@ def form_id def role_options Spree::Role.all.map do |role| - { label: role.name, id: role.id } + {label: role.name, id: role.id} end end end diff --git a/admin/app/components/solidus_admin/users/edit/tabs/component.rb b/admin/app/components/solidus_admin/users/edit/tabs/component.rb index a6283bcad42..e0dddad9977 100644 --- a/admin/app/components/solidus_admin/users/edit/tabs/component.rb +++ b/admin/app/components/solidus_admin/users/edit/tabs/component.rb @@ -8,7 +8,7 @@ def initialize(user:, current:) def call rendered_tabs = tabs.map do |tab| - render component("ui/button").new(tag: :a, scheme: :ghost, text: tab[:text], 'aria-current': tab[:current], href: tab[:href]) + render component("ui/button").new(tag: :a, scheme: :ghost, text: tab[:text], "aria-current": tab[:current], href: tab[:href]) end safe_join(rendered_tabs) @@ -19,28 +19,28 @@ def tabs { text: t(".account"), href: solidus_admin.user_path(@user), - current: @current == :account, + current: @current == :account }, { text: t(".addresses"), href: solidus_admin.addresses_user_path(@user), - current: @current == :addresses, + current: @current == :addresses }, { text: t(".order_history"), href: solidus_admin.orders_user_path(@user), - current: @current == :orders, + current: @current == :orders }, { text: t(".items"), href: solidus_admin.items_user_path(@user), - current: @current == :items, + current: @current == :items }, { text: t(".store_credit"), href: solidus_admin.user_store_credits_path(@user), - current: @current == :store_credits, - }, + current: @current == :store_credits + } ] end end diff --git a/admin/app/components/solidus_admin/users/index/component.rb b/admin/app/components/solidus_admin/users/index/component.rb index 9a2041936e3..1a5c3743911 100644 --- a/admin/app/components/solidus_admin/users/index/component.rb +++ b/admin/app/components/solidus_admin/users/index/component.rb @@ -22,30 +22,30 @@ def row_url(user) def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: spree.new_admin_user_path, - icon: "add-line", + icon: "add-line" ) end def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.users_path, method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end def scopes [ - { name: :all, label: t('.scopes.all'), default: true }, - { name: :customers, label: t('.scopes.customers') }, - { name: :admin, label: t('.scopes.admin') }, - { name: :with_orders, label: t('.scopes.with_orders') }, - { name: :without_orders, label: t('.scopes.without_orders') }, + {name: :all, label: t(".scopes.all"), default: true}, + {name: :customers, label: t(".scopes.customers")}, + {name: :admin, label: t(".scopes.admin")}, + {name: :with_orders, label: t(".scopes.with_orders")}, + {name: :without_orders, label: t(".scopes.without_orders")} ] end @@ -64,35 +64,35 @@ def columns [ { header: :email, - data: :email, + data: :email }, { header: :roles, data: ->(user) do - roles = user.spree_roles.presence || [Spree::Role.new(name: 'customer')] + roles = user.spree_roles.presence || [Spree::Role.new(name: "customer")] safe_join(roles.map { color = case _1.name - when 'admin' then :blue - when 'customer' then :green + when "admin" then :blue + when "customer" then :green else :graphite_light end - render component('ui/badge').new(name: _1.name, color:) + render component("ui/badge").new(name: _1.name, color:) }) - end, + end }, { header: :order_count, - data: ->(user) { user.order_count }, + data: ->(user) { user.order_count } }, { header: :lifetime_value, - data: -> { _1.display_lifetime_value.to_html }, + data: -> { _1.display_lifetime_value.to_html } }, { header: :last_active, - data: ->(user) { last_login(user) }, - }, + data: ->(user) { last_login(user) } + } ] end end diff --git a/admin/app/components/solidus_admin/users/items/component.rb b/admin/app/components/solidus_admin/users/items/component.rb index 821a781e187..399b6d3cb4b 100644 --- a/admin/app/components/solidus_admin/users/items/component.rb +++ b/admin/app/components/solidus_admin/users/items/component.rb @@ -29,13 +29,13 @@ def columns quantity_column, total_column, state_column, - number_column, + number_column ] end def date_column { - col: { class: "w-[8%]" }, + col: {class: "w-[8%]"}, header: :date, data: ->(item) do content_tag :div, l(item.order.created_at, format: :short), class: "text-sm" @@ -45,13 +45,13 @@ def date_column def image_column { - col: { class: "w-[8%]" }, - header: tag.span('aria-label': Spree::Image.model_name.human, role: 'text'), + col: {class: "w-[8%]"}, + header: tag.span("aria-label": Spree::Image.model_name.human, role: "text"), data: ->(item) do image = item.variant.gallery.images.first || item.variant.product.gallery.images.first or return render( - component('ui/thumbnail').new( + component("ui/thumbnail").new( src: image.url(:small), alt: item.product.name ) @@ -62,7 +62,7 @@ def image_column def description_column { - col: { class: "w-[24%]" }, + col: {class: "w-[24%]"}, header: t(".description_column_header"), data: ->(item) { item_name_with_variant_and_sku(item) } } @@ -70,7 +70,7 @@ def description_column def price_column { - col: { class: "w-[10%]" }, + col: {class: "w-[10%]"}, header: :price, data: ->(item) do content_tag :div, item.single_money.to_html @@ -80,7 +80,7 @@ def price_column def quantity_column { - col: { class: "w-[7%]" }, + col: {class: "w-[7%]"}, header: :qty, data: ->(item) do content_tag :div, item.quantity @@ -90,7 +90,7 @@ def quantity_column def total_column { - col: { class: "w-[10%]" }, + col: {class: "w-[10%]"}, header: t(".total_column_header"), data: ->(item) do content_tag :div, item.money.to_html @@ -100,23 +100,23 @@ def total_column def state_column { - col: { class: "w-[15%]" }, + col: {class: "w-[15%]"}, header: :state, data: ->(item) do color = { - 'complete' => :green, - 'returned' => :red, - 'canceled' => :blue, - 'cart' => :graphite_light, + "complete" => :green, + "returned" => :red, + "canceled" => :blue, + "cart" => :graphite_light }[item.order.state] || :yellow - component('ui/badge').new(name: item.order.state.humanize, color: color) + component("ui/badge").new(name: item.order.state.humanize, color: color) end } end def number_column { - col: { class: "w-[18%]" }, + col: {class: "w-[18%]"}, header: t(".number_column_header"), data: ->(item) do content_tag :div, item.order.number, class: "font-semibold text-sm" @@ -130,7 +130,7 @@ def item_name_with_variant_and_sku(item) content = [] content << item.product.name content << "(#{item.variant.options_text})" if item.variant.option_values.any? - content << "#{t('spree.sku')}: #{item.variant.sku}" if item.variant.sku.present? + content << "#{t("spree.sku")}: #{item.variant.sku}" if item.variant.sku.present? # The `.html_safe` is required for the description to display as desired. # rubocop:disable Rails/OutputSafety diff --git a/admin/app/components/solidus_admin/users/orders/component.rb b/admin/app/components/solidus_admin/users/orders/component.rb index 31bd73fea48..baac53de89b 100644 --- a/admin/app/components/solidus_admin/users/orders/component.rb +++ b/admin/app/components/solidus_admin/users/orders/component.rb @@ -31,7 +31,7 @@ def columns date_column, payment_column, shipment_column, - total_column, + total_column ] end @@ -40,7 +40,7 @@ def number_column header: :order, data: ->(order) do if !row_fade(order) - content_tag :div, order.number, class: 'font-semibold' + content_tag :div, order.number, class: "font-semibold" else content_tag :div, order.number end @@ -53,12 +53,12 @@ def state_column header: :state, data: ->(order) do color = { - 'complete' => :green, - 'returned' => :red, - 'canceled' => :blue, - 'cart' => :graphite_light, + "complete" => :green, + "returned" => :red, + "canceled" => :blue, + "cart" => :graphite_light }[order.state] || :yellow - component('ui/badge').new(name: order.state.humanize, color: color) + component("ui/badge").new(name: order.state.humanize, color: color) end } end @@ -85,7 +85,7 @@ def payment_column { header: :payment, data: ->(order) do - component('ui/badge').new(name: order.payment_state.humanize, color: order.paid? ? :green : :yellow) if order.payment_state? + component("ui/badge").new(name: order.payment_state.humanize, color: order.paid? ? :green : :yellow) if order.payment_state? end } end @@ -94,7 +94,7 @@ def shipment_column { header: :shipment, data: ->(order) do - component('ui/badge').new(name: order.shipment_state.humanize, color: order.shipped? ? :green : :yellow) if order.shipment_state? + component("ui/badge").new(name: order.shipment_state.humanize, color: order.shipped? ? :green : :yellow) if order.shipment_state? end } end diff --git a/admin/app/components/solidus_admin/users/store_credits/index/component.rb b/admin/app/components/solidus_admin/users/store_credits/index/component.rb index fdd3958eb82..bd88f398a38 100644 --- a/admin/app/components/solidus_admin/users/store_credits/index/component.rb +++ b/admin/app/components/solidus_admin/users/store_credits/index/component.rb @@ -28,54 +28,54 @@ def columns [ { header: :credited, - col: { class: "w-[12%]" }, + col: {class: "w-[12%]"}, data: ->(store_credit) do link_to store_credit.display_amount.to_html, show_path(store_credit), class: "body-link text-sm" end }, { header: :authorized, - col: { class: "w-[13%]" }, + col: {class: "w-[13%]"}, data: ->(store_credit) do link_to store_credit.display_amount_authorized.to_html, show_path(store_credit), class: "body-link text-sm" end }, { header: :used, - col: { class: "w-[9%]" }, + col: {class: "w-[9%]"}, data: ->(store_credit) do link_to store_credit.display_amount_used.to_html, show_path(store_credit), class: "body-link text-sm" end }, { header: :type, - col: { class: "w-[13%]" }, + col: {class: "w-[13%]"}, data: ->(store_credit) do - component('ui/badge').new(name: store_credit.credit_type.name, color: :blue) + component("ui/badge").new(name: store_credit.credit_type.name, color: :blue) end }, { header: :created_by, - col: { class: "w-[22%]" }, + col: {class: "w-[22%]"}, data: ->(store_credit) do content_tag :div, store_credit.created_by_email, class: "text-sm" end }, { header: :issued_on, - col: { class: "w-[16%]" }, + col: {class: "w-[16%]"}, data: ->(store_credit) do content_tag :span, I18n.l(store_credit.created_at.to_date), class: "text-sm" end }, { header: :invalidated, - col: { class: "w-[15%]" }, + col: {class: "w-[15%]"}, data: ->(store_credit) do if store_credit.invalidated? - component('ui/badge').new(name: :yes, color: :red, size: :m) + component("ui/badge").new(name: :yes, color: :red, size: :m) else - component('ui/badge').new(name: :no, color: :green, size: :m) + component("ui/badge").new(name: :no, color: :green, size: :m) end end } diff --git a/admin/app/components/solidus_admin/users/store_credits/show/component.rb b/admin/app/components/solidus_admin/users/store_credits/show/component.rb index 867a408c399..b0598ade9a0 100644 --- a/admin/app/components/solidus_admin/users/store_credits/show/component.rb +++ b/admin/app/components/solidus_admin/users/store_credits/show/component.rb @@ -38,53 +38,53 @@ def columns [ { header: :date, - col: { class: "w-[15%]" }, + col: {class: "w-[15%]"}, data: ->(event) do content_tag :span, I18n.l(event.created_at, format: :short), class: "text-sm" end }, { header: :action, - col: { class: "w-[10%]" }, + col: {class: "w-[10%]"}, data: ->(event) do content_tag :span, store_credit_event_admin_action_name(event), class: "text-sm" end }, { header: :credited, - col: { class: "w-[10%]" }, + col: {class: "w-[10%]"}, data: ->(event) do content_tag :span, event.display_amount, class: "text-sm" end }, { header: :created_by, - col: { class: "w-[20%]" }, + col: {class: "w-[20%]"}, data: ->(event) do content_tag :span, store_credit_event_originator_link(event), class: "body-link text-sm" end }, { header: :total_amount, - col: { class: "w-[10%]" }, + col: {class: "w-[10%]"}, data: ->(event) do content_tag :span, event.display_user_total_amount, class: "text-sm" end }, { header: :total_unused, - col: { class: "w-[10%]" }, + col: {class: "w-[10%]"}, data: ->(event) do content_tag :span, event.display_remaining_amount, class: "text-sm" end }, { header: :reason_for_updating, - col: { class: "w-[25%]" }, + col: {class: "w-[25%]"}, data: ->(event) do content_tag :span, event.store_credit_reason&.name, class: "text-sm" end - }, + } ] end end diff --git a/admin/app/components/solidus_admin/users_and_roles/component.rb b/admin/app/components/solidus_admin/users_and_roles/component.rb index 450aa352d0c..f3a81b1dda0 100644 --- a/admin/app/components/solidus_admin/users_and_roles/component.rb +++ b/admin/app/components/solidus_admin/users_and_roles/component.rb @@ -3,7 +3,7 @@ class SolidusAdmin::UsersAndRoles::Component < SolidusAdmin::UI::Pages::Index::Component def title page_header_title safe_join([ - tag.div(t(".title")), + tag.div(t(".title")) ]) end @@ -12,13 +12,13 @@ def tabs { text: Spree.user_class.model_name.human(count: 2), href: solidus_admin.users_path, - current: model_class == Spree.user_class, + current: model_class == Spree.user_class }, { text: Spree::Role.model_name.human(count: 2), href: solidus_admin.roles_path, - current: model_class == Spree::Role, - }, + current: model_class == Spree::Role + } ] end end diff --git a/admin/app/components/solidus_admin/zones/index/component.rb b/admin/app/components/solidus_admin/zones/index/component.rb index 747bf3399d1..763e83c7174 100644 --- a/admin/app/components/solidus_admin/zones/index/component.rb +++ b/admin/app/components/solidus_admin/zones/index/component.rb @@ -6,7 +6,7 @@ def model_class end def title - t('solidus_admin.zones.title') + t("solidus_admin.zones.title") end def search_key @@ -28,22 +28,22 @@ def turbo_frames def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: solidus_admin.new_zone_path(**search_filter_params), - data: { turbo_frame: :resource_form }, + data: {turbo_frame: :resource_form}, icon: "add-line", - class: "align-self-end w-full", + class: "align-self-end w-full" ) end def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.zones_path, method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end @@ -60,7 +60,7 @@ def columns name_column, description_column, kind_column, - zone_members_column, + zone_members_column ] end @@ -69,8 +69,8 @@ def name_column header: :name, data: ->(zone) do link_to zone.name, edit_path(zone), - data: { turbo_frame: :resource_form }, - class: 'body-link' + data: {turbo_frame: :resource_form}, + class: "body-link" end } end @@ -80,8 +80,8 @@ def description_column header: :description, data: ->(zone) do link_to zone.description, edit_path(zone), - data: { turbo_frame: :resource_form }, - class: 'body-link' + data: {turbo_frame: :resource_form}, + class: "body-link" end } end @@ -89,14 +89,14 @@ def description_column def kind_column { header: :kind, - data: -> { component('ui/badge').new(name: _1.kind, color: _1.kind == 'country' ? :green : :blue) }, + data: -> { component("ui/badge").new(name: _1.kind, color: (_1.kind == "country") ? :green : :blue) } } end def zone_members_column { header: :zone_members, - data: -> { _1.zone_members.map(&:zoneable).map(&:name).to_sentence }, + data: -> { _1.zone_members.map(&:zoneable).map(&:name).to_sentence } } end end diff --git a/admin/app/controllers/concerns/solidus_admin/moveable.rb b/admin/app/controllers/concerns/solidus_admin/moveable.rb index a1f3756d0de..d99e6670386 100644 --- a/admin/app/controllers/concerns/solidus_admin/moveable.rb +++ b/admin/app/controllers/concerns/solidus_admin/moveable.rb @@ -23,7 +23,7 @@ def load_moveable end def moveable_class - "Spree::#{self.class.name.demodulize.remove('Controller').singularize}".constantize + "Spree::#{self.class.name.demodulize.remove("Controller").singularize}".constantize rescue NameError raise NameError, "could not infer model class from #{self.class.name}. Please override `moveable_class` to specify it explicitly." diff --git a/admin/app/controllers/solidus_admin/addresses_controller.rb b/admin/app/controllers/solidus_admin/addresses_controller.rb index 88749621ae9..08c8efa9c63 100644 --- a/admin/app/controllers/solidus_admin/addresses_controller.rb +++ b/admin/app/controllers/solidus_admin/addresses_controller.rb @@ -10,11 +10,11 @@ class AddressesController < BaseController def show respond_to do |format| format.html do - render component('orders/show/address').new( + render component("orders/show/address").new( order: @order, user: @order.user, address: @address, - type: address_type, + type: address_type ) end end @@ -27,7 +27,7 @@ def edit def update if @order.contents.update_cart(order_params) respond_to do |format| - flash[:notice] = t('.success') + flash[:notice] = t(".success") format.html { redirect_to order_path(@order), status: :see_other } format.turbo_stream { render turbo_stream: '' } @@ -37,11 +37,11 @@ def update respond_to do |format| format.html do - render component('orders/show/address').new( + render component("orders/show/address").new( order: @order, user: @order.user, - address: @order.send("#{address_type}_address"), - type: address_type, + address: @order.send(:"#{address_type}_address"), + type: address_type ), status: :unprocessable_entity end end @@ -51,14 +51,12 @@ def update private def load_address - if params[:address_id].present? && @order.user - @address = - @order.user.addresses.find_by(id: params[:address_id]) || + @address = if params[:address_id].present? && @order.user + @order.user.addresses.find_by(id: params[:address_id]) || @order.user.addresses.build(country: default_country) else - @address = - @order.public_send("#{address_type}_address") || - @order.public_send("build_#{address_type}_address", country: default_country) + @order.public_send(:"#{address_type}_address") || + @order.public_send(:"build_#{address_type}_address", country: default_country) end end @@ -68,7 +66,7 @@ def address_type def validate_address_type unless address_type - flash[:error] = t('.errors.address_type_invalid') + flash[:error] = t(".errors.address_type_invalid") redirect_to spree.admin_order_url(@order) end end diff --git a/admin/app/controllers/solidus_admin/adjustments_controller.rb b/admin/app/controllers/solidus_admin/adjustments_controller.rb index f085652211e..1c2ddb5bbec 100644 --- a/admin/app/controllers/solidus_admin/adjustments_controller.rb +++ b/admin/app/controllers/solidus_admin/adjustments_controller.rb @@ -9,9 +9,9 @@ def index respond_to do |format| format.html do - render component('orders/show/adjustments/index').new( + render component("orders/show/adjustments/index").new( order: @order, - adjustments: @adjustments, + adjustments: @adjustments ) end end @@ -20,7 +20,7 @@ def index def lock @adjustments = @order.all_adjustments.not_finalized.where(id: params[:id]) @adjustments.each(&:finalize!) - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_to order_adjustments_path(@order), status: :see_other end @@ -28,7 +28,7 @@ def lock def unlock @adjustments = @order.all_adjustments.finalized.where(id: params[:id]) @adjustments.each(&:unfinalize!) - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_to order_adjustments_path(@order), status: :see_other end @@ -36,7 +36,7 @@ def unlock def destroy @adjustments = @order.all_adjustments.where(id: params[:id]) @adjustments.destroy_all - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_to order_adjustments_path(@order), status: :see_other end diff --git a/admin/app/controllers/solidus_admin/base_controller.rb b/admin/app/controllers/solidus_admin/base_controller.rb index 8854547389a..0cbab846afb 100644 --- a/admin/app/controllers/solidus_admin/base_controller.rb +++ b/admin/app/controllers/solidus_admin/base_controller.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'geared_pagination' +require "geared_pagination" module SolidusAdmin class BaseController < ApplicationController @@ -17,17 +17,17 @@ class BaseController < ApplicationController layout :set_layout - helper 'solidus_admin/components' - helper 'solidus_admin/layout' - helper 'solidus_admin/flash' + helper "solidus_admin/components" + helper "solidus_admin/layout" + helper "solidus_admin/flash" private def set_layout if turbo_frame_request? - 'turbo_rails/frame' + "turbo_rails/frame" else - 'solidus_admin/application' + "solidus_admin/application" end end end diff --git a/admin/app/controllers/solidus_admin/controller_helpers/authorization.rb b/admin/app/controllers/solidus_admin/controller_helpers/authorization.rb index f067f0751a3..ba932ce111a 100644 --- a/admin/app/controllers/solidus_admin/controller_helpers/authorization.rb +++ b/admin/app/controllers/solidus_admin/controller_helpers/authorization.rb @@ -7,7 +7,7 @@ module SolidusAdmin::ControllerHelpers::Authorization before_action :authorize_solidus_admin_user! rescue_from CanCan::AccessDenied do - render 'unauthorized', status: :forbidden + render "unauthorized", status: :forbidden end end diff --git a/admin/app/controllers/solidus_admin/controller_helpers/locale.rb b/admin/app/controllers/solidus_admin/controller_helpers/locale.rb index 69e2c92fa27..38342228f38 100644 --- a/admin/app/controllers/solidus_admin/controller_helpers/locale.rb +++ b/admin/app/controllers/solidus_admin/controller_helpers/locale.rb @@ -17,7 +17,7 @@ def update_user_locale if requested_locale.to_sym != user_locale session[set_user_language_locale_key] = requested_locale - flash[:notice] = t('spree.locale_changed') + flash[:notice] = t("spree.locale_changed") redirect_to params.except(:switch_to_locale).permit!.to_h.merge(account_menu_open: true) end end diff --git a/admin/app/controllers/solidus_admin/controller_helpers/search.rb b/admin/app/controllers/solidus_admin/controller_helpers/search.rb index 1bf5d0d79fd..d9b2364c8fd 100644 --- a/admin/app/controllers/solidus_admin/controller_helpers/search.rb +++ b/admin/app/controllers/solidus_admin/controller_helpers/search.rb @@ -8,7 +8,7 @@ def search_scope(name, default: false, &block) search_scopes << SearchScope.new( name: name.to_s, block:, - default:, + default: ) end diff --git a/admin/app/controllers/solidus_admin/controller_helpers/theme.rb b/admin/app/controllers/solidus_admin/controller_helpers/theme.rb index 93ba1f60a34..51c584a3003 100644 --- a/admin/app/controllers/solidus_admin/controller_helpers/theme.rb +++ b/admin/app/controllers/solidus_admin/controller_helpers/theme.rb @@ -13,13 +13,13 @@ def update_user_theme requested_theme = params[:switch_to_theme].presence or return # Avoid interpolating user content into the session key - system_theme = params[:system_theme].presence == "dark" ? "dark" : "light" + system_theme = (params[:system_theme].presence == "dark") ? "dark" : "light" session_key = :"admin_#{system_theme}_theme" if theme_is_available?(requested_theme) && requested_theme.to_sym != session[session_key] session[session_key] = requested_theme - flash[:notice] = t('spree.theme_changed') + flash[:notice] = t("spree.theme_changed") redirect_to params.except(:switch_to_theme, :system_theme).permit!.to_h.merge(account_menu_open: true) end end diff --git a/admin/app/controllers/solidus_admin/customers_controller.rb b/admin/app/controllers/solidus_admin/customers_controller.rb index b86ef95c1e6..c3ed1f6d467 100644 --- a/admin/app/controllers/solidus_admin/customers_controller.rb +++ b/admin/app/controllers/solidus_admin/customers_controller.rb @@ -6,16 +6,16 @@ class SolidusAdmin::CustomersController < SolidusAdmin::BaseController def show respond_to do |format| format.html do - render component('orders/show/email').new(order: @order) + render component("orders/show/email").new(order: @order) end end end def destroy if @order.update(user: nil) - flash[:notice] = t('.success') + flash[:notice] = t(".success") else - flash[:error] = t('.error') + flash[:error] = t(".error") end redirect_to order_path(@order), status: :see_other diff --git a/admin/app/controllers/solidus_admin/line_items_controller.rb b/admin/app/controllers/solidus_admin/line_items_controller.rb index b4ea905fb58..246b57c0490 100644 --- a/admin/app/controllers/solidus_admin/line_items_controller.rb +++ b/admin/app/controllers/solidus_admin/line_items_controller.rb @@ -8,7 +8,7 @@ def destroy @line_item.destroy! - redirect_to order_path(@order), status: :see_other, notice: t('.success') + redirect_to order_path(@order), status: :see_other, notice: t(".success") end def create @@ -17,7 +17,7 @@ def create @variant = Spree::Variant.find(variant_id) @line_item = @order.contents.add(@variant) - redirect_to order_path(@order), status: :see_other, notice: t('.success') + redirect_to order_path(@order), status: :see_other, notice: t(".success") end def update @@ -28,7 +28,7 @@ def update @line_item = @order.contents.add(@line_item.variant, desired_quantity - @line_item.quantity) - redirect_to order_path(@order), status: :see_other, notice: t('.success') + redirect_to order_path(@order), status: :see_other, notice: t(".success") end private diff --git a/admin/app/controllers/solidus_admin/option_types_controller.rb b/admin/app/controllers/solidus_admin/option_types_controller.rb index 18b9ce8f1df..9b6147b6d9f 100644 --- a/admin/app/controllers/solidus_admin/option_types_controller.rb +++ b/admin/app/controllers/solidus_admin/option_types_controller.rb @@ -8,13 +8,13 @@ class OptionTypesController < SolidusAdmin::BaseController def index option_types = apply_search_to( Spree::OptionType.all, - param: :q, + param: :q ) set_page_and_extract_portion_from(option_types) respond_to do |format| - format.html { render component('option_types/index').new(page: @page) } + format.html { render component("option_types/index").new(page: @page) } end end @@ -23,7 +23,7 @@ def destroy Spree::OptionType.transaction { @option_types.destroy_all } - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_back_or_to option_types_path, status: :see_other end end diff --git a/admin/app/controllers/solidus_admin/orders_controller.rb b/admin/app/controllers/solidus_admin/orders_controller.rb index 0b2df6cb324..3d6a601a956 100644 --- a/admin/app/controllers/solidus_admin/orders_controller.rb +++ b/admin/app/controllers/solidus_admin/orders_controller.rb @@ -14,13 +14,13 @@ class OrdersController < SolidusAdmin::BaseController def index orders = apply_search_to( Spree::Order.order(created_at: :desc, id: :desc), - param: :q, + param: :q ) set_page_and_extract_portion_from(orders) respond_to do |format| - format.html { render component('orders/index').new(page: @page) } + format.html { render component("orders/index").new(page: @page) } end end @@ -38,7 +38,7 @@ def show load_order respond_to do |format| - format.html { render component('orders/show').new(order: @order) } + format.html { render component("orders/show").new(order: @order) } end end @@ -46,12 +46,12 @@ def update load_order @order.assign_attributes(order_params) - @order.email ||= @order.user.email if @order.user && @order.user.changed? + @order.email ||= @order.user.email if @order&.user&.changed? if @order.save - flash[:notice] = t('.success') + flash[:notice] = t(".success") else - flash[:error] = t('.error') + flash[:error] = t(".error") end respond_to do |format| @@ -71,7 +71,7 @@ def variants_for # We need to eager load active storage attachments when using it if Spree::Image.include?(Spree::Image::ActiveStorageAttachment) image_includes = { - attachment_attachment: { blob: { variant_records: { image_attachment: :blob } } } + attachment_attachment: {blob: {variant_records: {image_attachment: :blob}}} } end @@ -84,11 +84,11 @@ def variants_for :prices, images: image_includes || {}, option_values: :option_type, - stock_items: :stock_location, + stock_items: :stock_location ) respond_to do |format| - format.html { render component('orders/cart/result').with_collection(@variants, order: @order), layout: false } + format.html { render component("orders/cart/result").with_collection(@variants, order: @order), layout: false } end end @@ -104,7 +104,7 @@ def customers_for .limit(10) respond_to do |format| - format.html { render component('orders/show/customer_search/result').with_collection(@users, order: @order), layout: false } + format.html { render component("orders/show/customer_search/result").with_collection(@users, order: @order), layout: false } end end diff --git a/admin/app/controllers/solidus_admin/payment_methods_controller.rb b/admin/app/controllers/solidus_admin/payment_methods_controller.rb index fc3ce0316dd..cb2b213003b 100644 --- a/admin/app/controllers/solidus_admin/payment_methods_controller.rb +++ b/admin/app/controllers/solidus_admin/payment_methods_controller.rb @@ -14,13 +14,13 @@ class PaymentMethodsController < SolidusAdmin::BaseController def index payment_methods = apply_search_to( Spree::PaymentMethod.ordered_by_position, - param: :q, + param: :q ) set_page_and_extract_portion_from(payment_methods) respond_to do |format| - format.html { render component('payment_methods/index').new(page: @page) } + format.html { render component("payment_methods/index").new(page: @page) } end end @@ -29,7 +29,7 @@ def destroy Spree::PaymentMethod.transaction { @payment_methods.destroy_all } - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_back_or_to payment_methods_path, status: :see_other end end diff --git a/admin/app/controllers/solidus_admin/products_controller.rb b/admin/app/controllers/solidus_admin/products_controller.rb index 4475d11cb47..b7a3a9c99b0 100644 --- a/admin/app/controllers/solidus_admin/products_controller.rb +++ b/admin/app/controllers/solidus_admin/products_controller.rb @@ -14,16 +14,16 @@ class ProductsController < SolidusAdmin::BaseController def index products = apply_search_to( Spree::Product.includes(:master, :variants), - param: :q, + param: :q ) set_page_and_extract_portion_from( products, - ordered_by: { updated_at: :desc, id: :desc }, + ordered_by: {updated_at: :desc, id: :desc} ) respond_to do |format| - format.html { render component('products/index').new(page: @page) } + format.html { render component("products/index").new(page: @page) } end end @@ -35,7 +35,7 @@ def show @product = Spree::Product.with_discarded.friendly.find(params[:id]) respond_to do |format| - format.html { render component('products/show').new(product: @product) } + format.html { render component("products/show").new(product: @product) } end end @@ -43,17 +43,17 @@ def update @product = Spree::Product.friendly.find(params[:id]) if @product.update(product_params) - flash[:notice] = t('spree.successfully_updated', resource: [ + flash[:notice] = t("spree.successfully_updated", resource: [ Spree::Product.model_name.human, - @product.name.inspect, - ].join(' ')) + @product.name.inspect + ].join(" ")) redirect_to action: :show, status: :see_other else flash.now[:error] = @product.errors.full_messages.join(", ") respond_to do |format| - format.html { render component('products/show').new(product: @product), status: :unprocessable_entity } + format.html { render component("products/show").new(product: @product), status: :unprocessable_entity } end end end @@ -65,7 +65,7 @@ def destroy @products.discard_all end - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_to products_path, status: :see_other end @@ -77,7 +77,7 @@ def discontinue .update_all(discontinue_on: Time.current) end - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_to products_path, status: :see_other end @@ -95,7 +95,7 @@ def activate .update_all(discontinue_on: nil) end - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_to products_path, status: :see_other end diff --git a/admin/app/controllers/solidus_admin/reimbursement_types_controller.rb b/admin/app/controllers/solidus_admin/reimbursement_types_controller.rb index 530578386ee..f3dda852015 100644 --- a/admin/app/controllers/solidus_admin/reimbursement_types_controller.rb +++ b/admin/app/controllers/solidus_admin/reimbursement_types_controller.rb @@ -7,13 +7,13 @@ class ReimbursementTypesController < SolidusAdmin::BaseController def index reimbursement_types = apply_search_to( Spree::ReimbursementType.unscoped.order(id: :desc), - param: :q, + param: :q ) set_page_and_extract_portion_from(reimbursement_types) respond_to do |format| - format.html { render component('reimbursement_types/index').new(page: @page) } + format.html { render component("reimbursement_types/index").new(page: @page) } end end diff --git a/admin/app/controllers/solidus_admin/resources_controller.rb b/admin/app/controllers/solidus_admin/resources_controller.rb index 19f93fe10c9..2f5c682cde0 100644 --- a/admin/app/controllers/solidus_admin/resources_controller.rb +++ b/admin/app/controllers/solidus_admin/resources_controller.rb @@ -36,7 +36,7 @@ def create @resource = resource_class.new(permitted_resource_params) if @resource.save - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_to after_create_path, status: :see_other else page_component = new_component.new(@resource) @@ -50,7 +50,7 @@ def edit def update if @resource.update(permitted_resource_params) - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_to after_update_path, status: :see_other else page_component = edit_component.new(@resource) @@ -63,7 +63,7 @@ def destroy resource_class.transaction { @resource.destroy_all } - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_back_or_to after_destroy_path, status: :see_other end @@ -76,16 +76,16 @@ def search_filter_params def set_paginated_resources @resources ||= apply_search_to( resources_collection, - param: :q, - ).tap do |resources| - instance_variable_set("@#{plural_resource_name}", resources) - # sets @page instance variable in geared_pagination gem - set_page_and_extract_portion_from(resources, ordered_by: resources_sorting_options, per_page:) - end + param: :q + ).tap do |resources| + instance_variable_set("@#{plural_resource_name}", resources) + # sets @page instance variable in geared_pagination gem + set_page_and_extract_portion_from(resources, ordered_by: resources_sorting_options, per_page:) + end end def resources_sorting_options - { id: :desc } + {id: :desc} end def per_page @@ -98,7 +98,7 @@ def resources_collection def set_resource @resource ||= resource_class.find(params[:id]).tap do |resource| - instance_variable_set("@#{resource_name}", resource) + instance_variable_set("@#{resource_name}", resource) end end diff --git a/admin/app/controllers/solidus_admin/shipping_methods_controller.rb b/admin/app/controllers/solidus_admin/shipping_methods_controller.rb index 6b079943e29..5481f381911 100644 --- a/admin/app/controllers/solidus_admin/shipping_methods_controller.rb +++ b/admin/app/controllers/solidus_admin/shipping_methods_controller.rb @@ -7,13 +7,13 @@ class ShippingMethodsController < SolidusAdmin::BaseController def index shipping_methods = apply_search_to( Spree::ShippingMethod.order(id: :desc), - param: :q, + param: :q ) set_page_and_extract_portion_from(shipping_methods) respond_to do |format| - format.html { render component('shipping_methods/index').new(page: @page) } + format.html { render component("shipping_methods/index").new(page: @page) } end end @@ -22,7 +22,7 @@ def destroy Spree::ShippingMethod.transaction { @shipping_methods.destroy_all } - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_back_or_to shipping_methods_path, status: :see_other end diff --git a/admin/app/controllers/solidus_admin/states_controller.rb b/admin/app/controllers/solidus_admin/states_controller.rb index 4fb8fb67dcb..10555d1210c 100644 --- a/admin/app/controllers/solidus_admin/states_controller.rb +++ b/admin/app/controllers/solidus_admin/states_controller.rb @@ -11,7 +11,7 @@ def resource_class end def resources_sorting_options - { name: :asc } + {name: :asc} end def blueprint diff --git a/admin/app/controllers/solidus_admin/stock_items_controller.rb b/admin/app/controllers/solidus_admin/stock_items_controller.rb index 98d2cf098af..46650575b91 100644 --- a/admin/app/controllers/solidus_admin/stock_items_controller.rb +++ b/admin/app/controllers/solidus_admin/stock_items_controller.rb @@ -6,13 +6,13 @@ class StockItemsController < SolidusAdmin::ResourcesController search_scope(:all, default: true) { _1 } search_scope(:back_orderable) { _1.where(backorderable: true) } - search_scope(:out_of_stock) { _1.where('count_on_hand <= 0') } - search_scope(:low_stock) { _1.where('count_on_hand > 0 AND count_on_hand < ?', SolidusAdmin::Config[:low_stock_value]) } - search_scope(:in_stock) { _1.where('count_on_hand > 0') } + search_scope(:out_of_stock) { _1.where("count_on_hand <= 0") } + search_scope(:low_stock) { _1.where("count_on_hand > 0 AND count_on_hand < ?", SolidusAdmin::Config[:low_stock_value]) } + search_scope(:in_stock) { _1.where("count_on_hand > 0") } def index respond_to do |format| - format.html { render component('stock_items/index').new(page: @page) } + format.html { render component("stock_items/index").new(page: @page) } end end @@ -39,7 +39,7 @@ def resources_sorting_options { variant_id: :desc, stock_location_id: :desc, - id: :desc, + id: :desc } end diff --git a/admin/app/controllers/solidus_admin/store_credits_controller.rb b/admin/app/controllers/solidus_admin/store_credits_controller.rb index 5d0ceb5b24b..2eb000746ef 100644 --- a/admin/app/controllers/solidus_admin/store_credits_controller.rb +++ b/admin/app/controllers/solidus_admin/store_credits_controller.rb @@ -48,7 +48,7 @@ def create return unless ensure_store_credit_category { render_new_with_errors } if @store_credit.save - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_to after_create_path, status: :see_other else render_new_with_errors @@ -72,7 +72,7 @@ def update_amount return unless ensure_store_credit_reason { render_edit_with_errors } if @store_credit.update_amount(permitted_resource_params[:amount], @store_credit_reason, spree_current_user) - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_to after_update_path, status: :see_other else render_edit_with_errors @@ -84,7 +84,7 @@ def edit_memo format.html { render component("users/store_credits/edit_memo").new( user: @user, - store_credit: @store_credit, + store_credit: @store_credit ) } end @@ -92,10 +92,10 @@ def edit_memo def update_memo if @store_credit.update(memo: permitted_resource_params[:memo]) - flash[:notice] = t('.success') + flash[:notice] = t(".success") else # Memo update failures are nearly impossible to trigger due to lack of validation. - flash[:error] = t('.failure') + flash[:error] = t(".failure") end redirect_to after_update_path, status: :see_other @@ -117,11 +117,11 @@ def invalidate return unless ensure_store_credit_reason { render_edit_with_errors } if @store_credit.invalidate(@store_credit_reason, spree_current_user) - flash[:notice] = t('.success') + flash[:notice] = t(".success") else # Ensure store_credit_reason handles invalid param/form submissions and modal re-rendering. # This is just a fallback error state in case anything goes wrong with StoreCredit#invalidate. - flash[:error] = t('.failure') + flash[:error] = t(".failure") end redirect_to after_update_path, status: :see_other diff --git a/admin/app/controllers/solidus_admin/stores_controller.rb b/admin/app/controllers/solidus_admin/stores_controller.rb index c653163d5c9..7372f756b90 100644 --- a/admin/app/controllers/solidus_admin/stores_controller.rb +++ b/admin/app/controllers/solidus_admin/stores_controller.rb @@ -13,7 +13,7 @@ def index set_page_and_extract_portion_from(stores) respond_to do |format| - format.html { render component('stores/index').new(page: @page) } + format.html { render component("stores/index").new(page: @page) } end end @@ -22,7 +22,7 @@ def destroy Spree::Store.transaction { @stores.destroy_all } - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_back_or_to stores_path, status: :see_other end diff --git a/admin/app/controllers/solidus_admin/tax_rates_controller.rb b/admin/app/controllers/solidus_admin/tax_rates_controller.rb index 75c2f239eb4..d9ea9043daa 100644 --- a/admin/app/controllers/solidus_admin/tax_rates_controller.rb +++ b/admin/app/controllers/solidus_admin/tax_rates_controller.rb @@ -7,13 +7,13 @@ class TaxRatesController < SolidusAdmin::BaseController def index tax_rates = apply_search_to( Spree::TaxRate.order(created_at: :desc, id: :desc), - param: :q, + param: :q ) set_page_and_extract_portion_from(tax_rates) respond_to do |format| - format.html { render component('tax_rates/index').new(page: @page) } + format.html { render component("tax_rates/index").new(page: @page) } end end @@ -22,7 +22,7 @@ def destroy Spree::TaxRate.transaction { @tax_rates.destroy_all } - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_back_or_to tax_rates_path, status: :see_other end diff --git a/admin/app/controllers/solidus_admin/taxonomies_controller.rb b/admin/app/controllers/solidus_admin/taxonomies_controller.rb index 3c6b4cdc2db..f34af4b42e6 100644 --- a/admin/app/controllers/solidus_admin/taxonomies_controller.rb +++ b/admin/app/controllers/solidus_admin/taxonomies_controller.rb @@ -8,13 +8,13 @@ class TaxonomiesController < SolidusAdmin::BaseController def index taxonomies = apply_search_to( Spree::Taxonomy.all, - param: :q, + param: :q ) set_page_and_extract_portion_from(taxonomies) respond_to do |format| - format.html { render component('taxonomies/index').new(page: @page) } + format.html { render component("taxonomies/index").new(page: @page) } end end @@ -23,7 +23,7 @@ def destroy Spree::Taxonomy.transaction { @taxonomies.destroy_all } - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_back_or_to taxonomies_path, status: :see_other end end diff --git a/admin/app/controllers/solidus_admin/users_controller.rb b/admin/app/controllers/solidus_admin/users_controller.rb index 04eaa09ac1e..e8a00373628 100644 --- a/admin/app/controllers/solidus_admin/users_controller.rb +++ b/admin/app/controllers/solidus_admin/users_controller.rb @@ -8,28 +8,28 @@ class UsersController < SolidusAdmin::BaseController before_action :set_user, only: [:edit, :addresses, :update_addresses, :orders, :items] search_scope(:all, default: true) - search_scope(:customers) { _1.left_outer_joins(:role_users).where(role_users: { id: nil }) } + search_scope(:customers) { _1.left_outer_joins(:role_users).where(role_users: {id: nil}) } search_scope(:admin) { _1.joins(:role_users).distinct } search_scope(:with_orders) { _1.joins(:orders).distinct } - search_scope(:without_orders) { _1.left_outer_joins(:orders).where(orders: { id: nil }) } + search_scope(:without_orders) { _1.left_outer_joins(:orders).where(orders: {id: nil}) } def index users = apply_search_to( Spree.user_class.order(created_at: :desc, id: :desc), - param: :q, + param: :q ) set_page_and_extract_portion_from(users) respond_to do |format| - format.html { render component('users/index').new(page: @page) } + format.html { render component("users/index").new(page: @page) } end end def addresses respond_to do |format| format.turbo_stream { render turbo_stream: '' } - format.html { render component('users/addresses').new(user: @user) } + format.html { render component("users/addresses").new(user: @user) } end end @@ -41,11 +41,11 @@ def update_addresses respond_to do |format| format.turbo_stream { render turbo_stream: '' } - format.html { render component('users/addresses').new(user: @user) } + format.html { render component("users/addresses").new(user: @user) } end else respond_to do |format| - format.html { render component('users/addresses').new(user: @user, address: @address, type: @type), status: :unprocessable_entity } + format.html { render component("users/addresses").new(user: @user, address: @address, type: @type), status: :unprocessable_entity } end end end @@ -54,7 +54,7 @@ def orders set_orders respond_to do |format| - format.html { render component('users/orders').new(user: @user, orders: @orders) } + format.html { render component("users/orders").new(user: @user, orders: @orders) } end end @@ -62,13 +62,13 @@ def items set_items respond_to do |format| - format.html { render component('users/items').new(user: @user, items: @items) } + format.html { render component("users/items").new(user: @user, items: @items) } end end def edit respond_to do |format| - format.html { render component('users/edit').new(user: @user) } + format.html { render component("users/edit").new(user: @user) } end end @@ -77,7 +77,7 @@ def destroy Spree.user_class.transaction { @users.destroy_all } - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_back_or_to users_path, status: :see_other end @@ -117,7 +117,7 @@ def set_orders def set_items params[:q] ||= {} - @search = Spree::Order.reverse_chronological.includes(line_items: { variant: [:product, { option_values: :option_type }] }).ransack(params[:q].merge(user_id_eq: @user.id)) + @search = Spree::Order.reverse_chronological.includes(line_items: {variant: [:product, {option_values: :option_type}]}).ransack(params[:q].merge(user_id_eq: @user.id)) @orders = @search.result.page(params[:page]).per(Spree::Config[:admin_products_per_page]) @items = @orders&.map(&:line_items)&.flatten end diff --git a/admin/app/helpers/solidus_admin/last_login_helper.rb b/admin/app/helpers/solidus_admin/last_login_helper.rb index 95f49b00c00..b0a85e7dcf2 100644 --- a/admin/app/helpers/solidus_admin/last_login_helper.rb +++ b/admin/app/helpers/solidus_admin/last_login_helper.rb @@ -3,10 +3,10 @@ module SolidusAdmin module LastLoginHelper def last_login(user) - return t('solidus_admin.users.last_login.never') if user.try(:last_sign_in_at).blank? + return t("solidus_admin.users.last_login.never") if user.try(:last_sign_in_at).blank? t( - 'solidus_admin.users.last_login.login_time_ago', + "solidus_admin.users.last_login.login_time_ago", # @note The second `.try` is here for the specs and for setups that use a # custom User class which may not have this attribute. last_login_time: time_ago_in_words(user.try(:last_sign_in_at)) diff --git a/admin/app/helpers/solidus_admin/permission_sets_helper.rb b/admin/app/helpers/solidus_admin/permission_sets_helper.rb index 78567bbf0ca..48ed82e9a78 100644 --- a/admin/app/helpers/solidus_admin/permission_sets_helper.rb +++ b/admin/app/helpers/solidus_admin/permission_sets_helper.rb @@ -18,13 +18,13 @@ def organize_permissions(permission_sets:, view_label:, edit_label:) case permission.privilege when "display" grouped_permissions[group_key] ||= [] - grouped_permissions[group_key] << { label: view_label, id: permission.id } + grouped_permissions[group_key] << {label: view_label, id: permission.id} when "management" grouped_permissions[group_key] ||= [] - grouped_permissions[group_key] << { label: edit_label, id: permission.id } + grouped_permissions[group_key] << {label: edit_label, id: permission.id} else grouped_permissions[:other] ||= [] - grouped_permissions[:other] << { label: permission.name, id: permission.id } + grouped_permissions[:other] << {label: permission.name, id: permission.id} end end end diff --git a/admin/app/helpers/solidus_admin/stimulus_helper.rb b/admin/app/helpers/solidus_admin/stimulus_helper.rb index e70b4d35781..d76f69eb05c 100644 --- a/admin/app/helpers/solidus_admin/stimulus_helper.rb +++ b/admin/app/helpers/solidus_admin/stimulus_helper.rb @@ -7,7 +7,7 @@ module SolidusAdmin module StimulusHelper def stimulus_controller - { "data-controller": stimulus_id } + {"data-controller": stimulus_id} end def stimulus_action(action, on: nil) @@ -15,15 +15,15 @@ def stimulus_action(action, on: nil) action_construct << "#{on}->" if on.present? action_construct << "#{stimulus_id}##{action}" - { "data-action": action_construct.join } + {"data-action": action_construct.join} end def stimulus_target(target) - { "data-#{stimulus_id}-target": target } + {"data-#{stimulus_id}-target": target} end def stimulus_value(name:, value:) - { "data-#{stimulus_id}-#{name}-value": value } + {"data-#{stimulus_id}-#{name}-value": value} end end end diff --git a/admin/app/helpers/solidus_admin/void_elements_helper.rb b/admin/app/helpers/solidus_admin/void_elements_helper.rb index 65d9117f3e2..60949bb599f 100644 --- a/admin/app/helpers/solidus_admin/void_elements_helper.rb +++ b/admin/app/helpers/solidus_admin/void_elements_helper.rb @@ -3,7 +3,7 @@ module SolidusAdmin module VoidElementsHelper # https://github.com/rails/rails/blob/194d697036c61af0caa66de5659721ded2478ce9/actionview/lib/action_view/helpers/tag_helper.rb#L84 - HTML_VOID_ELEMENTS = %i(area base br col embed hr img input keygen link meta source track wbr) + HTML_VOID_ELEMENTS = %i[area base br col embed hr img input keygen link meta source track wbr] # @param element [Symbol] def void_element?(element) diff --git a/admin/bin/rails b/admin/bin/rails index 96a8d7cd25a..bee32484e2f 100755 --- a/admin/bin/rails +++ b/admin/bin/rails @@ -2,11 +2,11 @@ # This command will automatically be run when you run "rails" with Rails gems # installed from the root of your application. -ENGINE_ROOT = File.expand_path('..', __dir__) -ENGINE_PATH = File.expand_path('../lib/solidus_admin/engine', __dir__) +ENGINE_ROOT = File.expand_path("..", __dir__) +ENGINE_PATH = File.expand_path("../lib/solidus_admin/engine", __dir__) # Set up gems listed in the Gemfile. -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __dir__) +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __dir__) require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"]) require "rails/all" diff --git a/admin/config/initializers/view_component.rb b/admin/config/initializers/view_component.rb index beb9345c26a..8aa5596a4b8 100644 --- a/admin/config/initializers/view_component.rb +++ b/admin/config/initializers/view_component.rb @@ -6,7 +6,7 @@ Rails.application.config.view_component.instrumentation_enabled = true Rails.application.config.view_component.use_deprecated_instrumentation_name = false - bold = "\e[1m" + bold = "\e[1m" clear = "\e[0m" ActiveSupport::Notifications.subscribe("render.view_component") do |*args| diff --git a/admin/config/routes.rb b/admin/config/routes.rb index 57306812340..a28453c74a7 100644 --- a/admin/config/routes.rb +++ b/admin/config/routes.rb @@ -6,10 +6,10 @@ resource :account, only: :show resources :countries, only: [] do - get 'states', to: 'countries#states' + get "states", to: "countries#states" end - resources :states, only: [:index], defaults: { format: :json } + resources :states, only: [:index], defaults: {format: :json} admin_resources :products, only: [:index, :update, :destroy] do collection do @@ -21,13 +21,13 @@ # Needs a constraint to avoid interpreting "new" as a product's slug admin_resources :products, only: [ :show, :edit - ], constraints: ->{ SolidusAdmin::Config.enable_alpha_features? && _1.path != "/admin/products/new" } + ], constraints: -> { SolidusAdmin::Config.enable_alpha_features? && _1.path != "/admin/products/new" } admin_resources :orders, only: [:index] admin_resources :orders, except: [ :destroy, :index - ], constraints: ->{ SolidusAdmin::Config.enable_alpha_features? } do + ], constraints: -> { SolidusAdmin::Config.enable_alpha_features? } do resources :adjustments, only: [:index] do collection do delete :destroy diff --git a/admin/lib/generators/solidus_admin/component/component_generator.rb b/admin/lib/generators/solidus_admin/component/component_generator.rb index 3386a835808..942e5fdadd6 100644 --- a/admin/lib/generators/solidus_admin/component/component_generator.rb +++ b/admin/lib/generators/solidus_admin/component/component_generator.rb @@ -2,7 +2,7 @@ module SolidusAdmin class ComponentGenerator < Rails::Generators::NamedBase - source_root File.expand_path('templates', __dir__) + source_root File.expand_path("templates", __dir__) argument :attributes, type: :array, default: [], banner: "attribute" @@ -38,7 +38,7 @@ def create_component_files if options["preview"] preview_destination_path = destination("_preview.rb", root: "spec/components/previews") template "component_preview.rb", preview_destination_path - template "component_preview_overview.html.erb", preview_destination_path.sub(/\.rb/, '/overview.html.erb') + template "component_preview_overview.html.erb", preview_destination_path.sub(".rb", "/overview.html.erb") end end @@ -110,8 +110,8 @@ def attributes_html end def stimulus_html - %{\n } + - %{\n

Hello

} + %(\n ) + + %(\n

Hello

) end def i18n_html @@ -123,11 +123,11 @@ def initialize_html "

Add #{class_name} HTML here

", (attributes_html if attributes.present?), (stimulus_html if options["js"]), - (i18n_html if options["i18n"]), + (i18n_html if options["i18n"]) ].compact.join("\n ") end - def inline_html(indent: '') + def inline_html(indent: "") @inline_html.gsub!(/^/, indent).strip end end diff --git a/admin/lib/generators/solidus_admin/install/install_generator.rb b/admin/lib/generators/solidus_admin/install/install_generator.rb index a8754c50f19..5966699a1f7 100644 --- a/admin/lib/generators/solidus_admin/install/install_generator.rb +++ b/admin/lib/generators/solidus_admin/install/install_generator.rb @@ -3,8 +3,8 @@ module SolidusAdmin module Generators class InstallGenerator < Rails::Generators::Base - class_option :lookbook, type: :boolean, default: !!ENV['SOLIDUS_ADMIN_LOOKBOOK'], desc: 'Install Lookbook for component previews' - class_option :tailwind, type: :boolean, default: false, desc: 'Install TailwindCSS for custom components' + class_option :lookbook, type: :boolean, default: !!ENV["SOLIDUS_ADMIN_LOOKBOOK"], desc: "Install Lookbook for component previews" + class_option :tailwind, type: :boolean, default: false, desc: "Install TailwindCSS for custom components" source_root "#{__dir__}/templates" @@ -18,7 +18,7 @@ def install_solidus_core_support end def copy_initializer - template 'config/initializers/solidus_admin.rb.tt', 'config/initializers/solidus_admin.rb' + template "config/initializers/solidus_admin.rb.tt", "config/initializers/solidus_admin.rb" end def ignore_tailwind_build_files @@ -38,7 +38,7 @@ def install_lookbook gem "actioncable" end - require 'bundler' + require "bundler" Bundler.with_unbundled_env do execute_command :bundle, :install end diff --git a/admin/lib/solidus_admin/configuration.rb b/admin/lib/solidus_admin/configuration.rb index 8a286b319ef..669b8e67e12 100644 --- a/admin/lib/solidus_admin/configuration.rb +++ b/admin/lib/solidus_admin/configuration.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'spree/preferences/configuration' -require 'solidus_admin/component_registry' +require "spree/preferences/configuration" +require "solidus_admin/component_registry" module SolidusAdmin # Configuration for the admin interface. @@ -23,14 +23,14 @@ class Configuration < Spree::Preferences::Configuration preference :importmap_cache_sweepers, :array, default: [ "#{ENGINE_ROOT}/app/assets/javascripts", "#{ENGINE_ROOT}/app/javascript", - "#{ENGINE_ROOT}/app/components", + "#{ENGINE_ROOT}/app/components" ] # List of paths to importmap files to be loaded. # # @see https://github.com/rails/importmap-rails#composing-import-maps preference :importmap_paths, :array, default: [ - "#{ENGINE_ROOT}/config/importmap.rb", + "#{ENGINE_ROOT}/config/importmap.rb" ] # @!attribute [rw] low_stock_value @@ -46,7 +46,7 @@ class Configuration < Spree::Preferences::Configuration # Default: false preference :enable_alpha_features, :boolean, default: false - alias enable_alpha_features? enable_alpha_features + alias_method :enable_alpha_features?, :enable_alpha_features preference :storefront_product_path_proc, :proc, default: ->(_version) { ->(product) { "/products/#{product.slug}" } @@ -124,7 +124,7 @@ def menu_items key: "settings", route: -> { spree.admin_stores_path }, icon: "settings-line", - position: 60, + position: 60 } ] end @@ -158,7 +158,7 @@ def import_menu_items_from_backend! when /^ri-/ item.icon.delete_prefix("ri-") when String - 'record-circle-line' # fallback on a generic icon + "record-circle-line" # fallback on a generic icon end { @@ -167,7 +167,7 @@ def import_menu_items_from_backend! icon:, route:, children: item.children.map.with_index(&menu_item_to_hash), - match_path:, + match_path: } end @@ -186,7 +186,7 @@ def components preference :current_user_method, :string, default: :spree_current_user # The path used to logout the user in the admin interface. - preference :logout_link_path, :string, default: '/admin/logout' + preference :logout_link_path, :string, default: "/admin/logout" # The HTTP method used to logout the user in the admin interface. preference :logout_link_method, :string, default: :delete @@ -194,18 +194,18 @@ def components # @!attribute [rw] themes # @return [Hash] A hash containing the themes that are available for the admin panel preference :themes, :hash, default: { - solidus: 'solidus_admin/application', - solidus_dark: 'solidus_admin/dark', - solidus_dimmed: 'solidus_admin/dimmed', + solidus: "solidus_admin/application", + solidus_dark: "solidus_admin/dark", + solidus_dimmed: "solidus_admin/dimmed" } # @!attribute [rw] theme # @return [String] Default admin theme name - preference :theme, :string, default: 'solidus' + preference :theme, :string, default: "solidus" # @!attribute [rw] dark_theme # @return [String] Default admin theme name - preference :dark_theme, :string, default: 'solidus_dark' + preference :dark_theme, :string, default: "solidus_dark" def theme_path(user_theme) themes.fetch(user_theme&.to_sym, themes[theme.to_sym]) diff --git a/admin/lib/solidus_admin/engine.rb b/admin/lib/solidus_admin/engine.rb index 3e43bbd8b16..013b1b02803 100644 --- a/admin/lib/solidus_admin/engine.rb +++ b/admin/lib/solidus_admin/engine.rb @@ -29,7 +29,7 @@ class Engine < ::Rails::Engine initializer "solidus_admin.inflections" do # Support for UI as an acronym - ActiveSupport::Inflector.inflections { |inflect| inflect.acronym 'UI' } + ActiveSupport::Inflector.inflections { |inflect| inflect.acronym "UI" } end initializer "solidus_admin.importmap" do @@ -61,7 +61,7 @@ class Engine < ::Rails::Engine initializer "solidus_admin.importmap.assets" do |app| app.config.assets.paths += [ SolidusAdmin::Engine.root.join("app/javascript"), - SolidusAdmin::Engine.root.join("app/components"), + SolidusAdmin::Engine.root.join("app/components") ] end diff --git a/admin/lib/solidus_admin/importmap.rb b/admin/lib/solidus_admin/importmap.rb index 3f71d3f7fe8..f6a18fe5865 100644 --- a/admin/lib/solidus_admin/importmap.rb +++ b/admin/lib/solidus_admin/importmap.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'importmap-rails' +require "importmap-rails" module SolidusAdmin::Importmap class Reloader diff --git a/admin/lib/solidus_admin/menu_item.rb b/admin/lib/solidus_admin/menu_item.rb index 30fb803a35a..70fdc4e4740 100644 --- a/admin/lib/solidus_admin/menu_item.rb +++ b/admin/lib/solidus_admin/menu_item.rb @@ -75,7 +75,7 @@ def path(url_helpers) # @param fullpath [String] the full path of the current request # @return [Boolean] def current?(url_helpers, fullpath) - path(url_helpers) == fullpath.gsub(/\?.*$/, '') + path(url_helpers) == fullpath.gsub(/\?.*$/, "") end # Returns whether the item should be marked as active diff --git a/admin/lib/solidus_admin/preview.rb b/admin/lib/solidus_admin/preview.rb index 8c22d089ede..81a9153b3c4 100644 --- a/admin/lib/solidus_admin/preview.rb +++ b/admin/lib/solidus_admin/preview.rb @@ -28,6 +28,7 @@ module ControllerHelper included do include SolidusAdmin::ControllerHelpers::Authentication + helper ActionView::Helpers helper SolidusAdmin::ComponentsHelper helper_method :current_component diff --git a/admin/lib/solidus_admin/testing_support/admin_assets.rb b/admin/lib/solidus_admin/testing_support/admin_assets.rb index b9562ea4648..9ec7f191f67 100644 --- a/admin/lib/solidus_admin/testing_support/admin_assets.rb +++ b/admin/lib/solidus_admin/testing_support/admin_assets.rb @@ -3,7 +3,7 @@ RSpec.configure do |config| config.when_first_matching_example_defined(solidus_admin: true) do config.before(:suite) do - system('bin/rails solidus_admin:tailwindcss:build') or abort 'Failed to build Tailwind CSS' + system("bin/rails solidus_admin:tailwindcss:build") or abort "Failed to build Tailwind CSS" Rails.application.precompiled_assets end end diff --git a/admin/lib/solidus_admin/testing_support/feature_helpers.rb b/admin/lib/solidus_admin/testing_support/feature_helpers.rb index bf47f18d52c..9f58461a782 100644 --- a/admin/lib/solidus_admin/testing_support/feature_helpers.rb +++ b/admin/lib/solidus_admin/testing_support/feature_helpers.rb @@ -19,11 +19,11 @@ def stub_authorization!(user) end def find_row(text) - find('table tbody tr td', text:) + find("table tbody tr td", text:) end def find_row_checkbox(text) - find('table tbody tr', text:).find('td:first-child input[type="checkbox"]') + find("table tbody tr", text:).find('td:first-child input[type="checkbox"]') end def select_row(text) diff --git a/admin/lib/solidus_admin/testing_support/shared_examples/bulk_delete_resources.rb b/admin/lib/solidus_admin/testing_support/shared_examples/bulk_delete_resources.rb index 5a64c3fd47f..e9de47bdc3e 100644 --- a/admin/lib/solidus_admin/testing_support/shared_examples/bulk_delete_resources.rb +++ b/admin/lib/solidus_admin/testing_support/shared_examples/bulk_delete_resources.rb @@ -1,20 +1,20 @@ # frozen_string_literal: true -RSpec.shared_examples_for 'feature: bulk delete resources' do - it 'allows to bulk delete resources' do - create(resource_factory, name: 'Bulk delete item 1') - create(resource_factory, name: 'Bulk delete item 2') +RSpec.shared_examples_for "feature: bulk delete resources" do + it "allows to bulk delete resources" do + create(resource_factory, name: "Bulk delete item 1") + create(resource_factory, name: "Bulk delete item 2") visit index_path - expect(page).to have_content('Bulk delete item 1') - expect(page).to have_content('Bulk delete item 2') + expect(page).to have_content("Bulk delete item 1") + expect(page).to have_content("Bulk delete item 2") - select_row('Bulk delete item 1') - select_row('Bulk delete item 2') - click_on 'Delete' + select_row("Bulk delete item 1") + select_row("Bulk delete item 2") + click_on "Delete" - expect(page).to have_content('were successfully removed.') - expect(page).not_to have_content('Bulk delete item 1') - expect(page).not_to have_content('Bulk delete item 2') + expect(page).to have_content("were successfully removed.") + expect(page).not_to have_content("Bulk delete item 1") + expect(page).not_to have_content("Bulk delete item 2") end end diff --git a/admin/lib/solidus_admin/testing_support/shared_examples/crud_resource_requests.rb b/admin/lib/solidus_admin/testing_support/shared_examples/crud_resource_requests.rb index 8049a450da2..4502c1f3719 100644 --- a/admin/lib/solidus_admin/testing_support/shared_examples/crud_resource_requests.rb +++ b/admin/lib/solidus_admin/testing_support/shared_examples/crud_resource_requests.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -RSpec.shared_examples_for 'CRUD resource requests' do |resource_name| +RSpec.shared_examples_for "CRUD resource requests" do |resource_name| let(:admin_user) { create(:admin_user) } let(:resource) { create(factory) } @@ -30,34 +30,34 @@ context "with valid parameters" do it "creates a new #{resource_name.humanize}" do expect { - post url_helpers.public_send("#{resource_name.pluralize}_path"), params: { resource_name => valid_attributes } + post url_helpers.public_send("#{resource_name.pluralize}_path"), params: {resource_name => valid_attributes} }.to change(resource_class, :count).by(1) end it "redirects to the index page with a 303 See Other status" do - post url_helpers.public_send("#{resource_name.pluralize}_path"), params: { resource_name => valid_attributes } + post url_helpers.public_send("#{resource_name.pluralize}_path"), params: {resource_name => valid_attributes} expect(response).to redirect_to(url_helpers.public_send("#{resource_name.pluralize}_path")) expect(response).to have_http_status(:see_other) end it "displays a success flash message" do - post url_helpers.public_send("#{resource_name.pluralize}_path"), params: { resource_name => valid_attributes } + post url_helpers.public_send("#{resource_name.pluralize}_path"), params: {resource_name => valid_attributes} follow_redirect! expect(response.body).to include("#{resource_name.humanize} was successfully created.") end end context "with invalid parameters" do - let(:invalid_attributes) { { name: "", code: "", active: true } } + let(:invalid_attributes) { {name: "", code: "", active: true} } it "does not create a new #{resource_name.humanize}" do expect { - post url_helpers.public_send("#{resource_name.pluralize}_path"), params: { resource_name => invalid_attributes } + post url_helpers.public_send("#{resource_name.pluralize}_path"), params: {resource_name => invalid_attributes} }.not_to change(resource_class, :count) end it "renders the new template with unprocessable_entity status" do - post url_helpers.public_send("#{resource_name.pluralize}_path"), params: { resource_name => invalid_attributes } + post url_helpers.public_send("#{resource_name.pluralize}_path"), params: {resource_name => invalid_attributes} expect(response).to have_http_status(:unprocessable_entity) end end @@ -73,7 +73,7 @@ describe "PATCH /update" do context "with valid parameters" do it "updates the #{resource_name.humanize}" do - patch url_helpers.public_send("#{resource_name}_path", resource), params: { resource_name => valid_attributes } + patch url_helpers.public_send("#{resource_name}_path", resource), params: {resource_name => valid_attributes} resource.reload valid_attributes.each do |attr, value| expect(resource.public_send(attr)).to eq(value) @@ -81,13 +81,13 @@ end it "redirects to the index page with a 303 See Other status" do - patch url_helpers.public_send("#{resource_name}_path", resource), params: { resource_name => valid_attributes } + patch url_helpers.public_send("#{resource_name}_path", resource), params: {resource_name => valid_attributes} expect(response).to redirect_to(url_helpers.public_send("#{resource_name.pluralize}_path")) expect(response).to have_http_status(:see_other) end it "displays a success flash message" do - patch url_helpers.public_send("#{resource_name}_path", resource), params: { resource_name => valid_attributes } + patch url_helpers.public_send("#{resource_name}_path", resource), params: {resource_name => valid_attributes} follow_redirect! expect(response.body).to include("#{resource_name.humanize} was successfully updated.") end @@ -96,12 +96,12 @@ context "with invalid parameters" do it "does not update the #{resource_name.humanize}" do expect { - patch url_helpers.public_send("#{resource_name}_path", resource), params: { resource_name => invalid_attributes } + patch url_helpers.public_send("#{resource_name}_path", resource), params: {resource_name => invalid_attributes} }.not_to change { resource.reload } end it "renders the edit template with unprocessable_entity status" do - patch url_helpers.public_send("#{resource_name}_path", resource), params: { resource_name => invalid_attributes } + patch url_helpers.public_send("#{resource_name}_path", resource), params: {resource_name => invalid_attributes} expect(response).to have_http_status(:unprocessable_entity) end end @@ -125,7 +125,7 @@ expect(response.body).to include("#{resource_name.humanize.pluralize} were successfully removed.") end - it 'allows to bulk delete resources' do + it "allows to bulk delete resources" do ids = [create(factory), create(factory)].map(&:id) expect { delete url_helpers.public_send("#{resource_name.pluralize}_path", id: ids) diff --git a/admin/lib/solidus_admin/testing_support/shared_examples/moveable.rb b/admin/lib/solidus_admin/testing_support/shared_examples/moveable.rb index a321ea5faa4..fbd30ec0a4f 100644 --- a/admin/lib/solidus_admin/testing_support/shared_examples/moveable.rb +++ b/admin/lib/solidus_admin/testing_support/shared_examples/moveable.rb @@ -13,7 +13,7 @@ describe "PATCH /move" do it "updates record's position" do - expect { patch request_path, params: { position: 2 } }.to change { record.reload.position }.from(1).to(2) + expect { patch request_path, params: {position: 2} }.to change { record.reload.position }.from(1).to(2) expect(response).to have_http_status(:no_content) end end @@ -24,8 +24,8 @@ let(:scope) { "body" } before do - create(factory, displayed_attribute => "First", position: 1, **factory_attrs) - create(factory, displayed_attribute => "Second", position: 2, **factory_attrs) + create(factory, displayed_attribute => "First", :position => 1, **factory_attrs) + create(factory, displayed_attribute => "Second", :position => 2, **factory_attrs) visit path end diff --git a/admin/lib/solidus_admin/testing_support/shared_examples/promotion_categories_features.rb b/admin/lib/solidus_admin/testing_support/shared_examples/promotion_categories_features.rb index 88a676f1e77..08f59c410a7 100644 --- a/admin/lib/solidus_admin/testing_support/shared_examples/promotion_categories_features.rb +++ b/admin/lib/solidus_admin/testing_support/shared_examples/promotion_categories_features.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require 'solidus_admin/testing_support/shared_examples/bulk_delete_resources' +require "solidus_admin/testing_support/shared_examples/bulk_delete_resources" -RSpec.shared_examples_for 'promotion categories features' do +RSpec.shared_examples_for "promotion categories features" do before { sign_in create(:admin_user, email: "admin@example.com") } it "lists promotion categories", :js do @@ -16,7 +16,7 @@ expect(page).to be_axe_clean end - it 'allows to create new promo category' do + it "allows to create new promo category" do visit index_path click_on "Add new" @@ -36,7 +36,7 @@ expect(model_class.count).to eq(1) end - it 'allows to update promo category' do + it "allows to update promo category" do create(factory_name, name: "Soon to expire", code: "ste.1") visit index_path @@ -53,7 +53,7 @@ expect(page).to have_content("exp.2") end - it 'allows to bulk delete promo category', :js do + it "allows to bulk delete promo category", :js do create(factory_name, name: "Soon to expire", code: "ste.1") create(factory_name, name: "Expired", code: "exp.2") diff --git a/admin/lib/tasks/tailwind.rake b/admin/lib/tasks/tailwind.rake index f304a585c9b..4ff3cb8f8f2 100644 --- a/admin/lib/tasks/tailwind.rake +++ b/admin/lib/tasks/tailwind.rake @@ -2,7 +2,7 @@ namespace :solidus_admin do namespace :tailwindcss do - desc 'Install Tailwind CSS on the host application' + desc "Install Tailwind CSS on the host application" task :install do system "#{RbConfig.ruby} ./bin/rails app:template LOCATION='#{__dir__}/../solidus_admin/install_tailwindcss.rb'" end diff --git a/admin/solidus_admin.gemspec b/admin/solidus_admin.gemspec index a2c6f9f911c..663e6188875 100644 --- a/admin/solidus_admin.gemspec +++ b/admin/solidus_admin.gemspec @@ -1,21 +1,21 @@ # frozen_string_literal: true -require_relative '../core/lib/spree/core/version' -require_relative './lib/solidus_admin/version' +require_relative "../core/lib/spree/core/version" +require_relative "lib/solidus_admin/version" Gem::Specification.new do |s| - s.platform = Gem::Platform::RUBY - s.name = 'solidus_admin' - s.version = SolidusAdmin::VERSION - s.summary = 'Admin interface for the Solidus e-commerce framework.' + s.platform = Gem::Platform::RUBY + s.name = "solidus_admin" + s.version = SolidusAdmin::VERSION + s.summary = "Admin interface for the Solidus e-commerce framework." s.description = s.summary - s.author = 'Solidus Team' - s.email = 'contact@solidus.io' - s.homepage = 'https://github.com/solidusio/solidus/blob/main/admin/README.md' - s.license = 'BSD-3-Clause' + s.author = "Solidus Team" + s.email = "contact@solidus.io" + s.homepage = "https://github.com/solidusio/solidus/blob/main/admin/README.md" + s.license = "BSD-3-Clause" - s.metadata['rubygems_mfa_required'] = 'true' + s.metadata["rubygems_mfa_required"] = "true" s.metadata["homepage_uri"] = s.homepage s.metadata["source_code_uri"] = "https://github.com/solidusio/solidus/tree/main/api" @@ -25,15 +25,15 @@ Gem::Specification.new do |s| f.match(%r{^(spec|bin)/}) end + ["app/assets/builds/solidus_admin/tailwind.css"] - s.required_ruby_version = '>= 3.1.0' - s.required_rubygems_version = '>= 1.8.23' - - s.add_dependency 'blueprinter' - s.add_dependency 'geared_pagination', '~> 1.1' - s.add_dependency 'importmap-rails', ['>= 2.0', '< 3'] - s.add_dependency 'solidus_backend' - s.add_dependency 'solidus_core', '> 4.2' - s.add_dependency 'stimulus-rails', '~> 1.2' - s.add_dependency 'turbo-rails', '~> 2.0' - s.add_dependency 'view_component', '~> 3.9' + s.required_ruby_version = ">= 3.1.0" + s.required_rubygems_version = ">= 1.8.23" + + s.add_dependency "blueprinter" + s.add_dependency "geared_pagination", "~> 1.1" + s.add_dependency "importmap-rails", [">= 2.0", "< 3"] + s.add_dependency "solidus_backend" + s.add_dependency "solidus_core", "> 4.2" + s.add_dependency "stimulus-rails", "~> 1.2" + s.add_dependency "turbo-rails", "~> 2.0" + s.add_dependency "view_component", "~> 3.9" end diff --git a/admin/spec/blueprints/solidus_admin/state_blueprint_spec.rb b/admin/spec/blueprints/solidus_admin/state_blueprint_spec.rb index 59cb871b5d3..5cb7b142fbf 100644 --- a/admin/spec/blueprints/solidus_admin/state_blueprint_spec.rb +++ b/admin/spec/blueprints/solidus_admin/state_blueprint_spec.rb @@ -15,7 +15,7 @@ end describe "state_with_country" do - let(:options) { { view: :state_with_country } } + let(:options) { {view: :state_with_country} } it "returns correct data" do expect(result).to eq(id: state.id, name: state.state_with_country) diff --git a/admin/spec/components/previews/solidus_admin/ui/badge/component_preview.rb b/admin/spec/components/previews/solidus_admin/ui/badge/component_preview.rb index af118443aa0..e39bf0541cf 100644 --- a/admin/spec/components/previews/solidus_admin/ui/badge/component_preview.rb +++ b/admin/spec/components/previews/solidus_admin/ui/badge/component_preview.rb @@ -6,7 +6,7 @@ class SolidusAdmin::UI::Badge::ComponentPreview < ViewComponent::Preview # @param name text def overview(name: "Label") - render_with_template(locals: { name: }) + render_with_template(locals: {name:}) end # @param name text diff --git a/admin/spec/components/previews/solidus_admin/ui/button/component_preview.rb b/admin/spec/components/previews/solidus_admin/ui/button/component_preview.rb index e2935ac94e2..2a920857cfe 100644 --- a/admin/spec/components/previews/solidus_admin/ui/button/component_preview.rb +++ b/admin/spec/components/previews/solidus_admin/ui/button/component_preview.rb @@ -7,14 +7,14 @@ class SolidusAdmin::UI::Button::ComponentPreview < ViewComponent::Preview # @param text text # @param show_icon toggle def overview(text: "Button", show_icon: true) - render_with_template locals: { text:, show_icon: } + render_with_template locals: {text:, show_icon:} end # @param size select { choices: [s, m, l] } # @param scheme select { choices: [primary, secondary, ghost] } # @param icon select "Of all icon names we show only 10, chosen randomly" :icon_options # @param text text - def playground(size: :m, scheme: :primary, text: "Button", icon: 'search-line') + def playground(size: :m, scheme: :primary, text: "Button", icon: "search-line") render component("ui/button").new(size:, scheme:, text:, icon: icon.presence) end @@ -25,6 +25,6 @@ def group private def icon_options - @icon_options ||= ['search-line'] + component('ui/icon')::NAMES.to_a.sample(10) + @icon_options ||= ["search-line"] + component("ui/icon")::NAMES.to_a.sample(10) end end diff --git a/admin/spec/components/previews/solidus_admin/ui/details_list/component_preview.rb b/admin/spec/components/previews/solidus_admin/ui/details_list/component_preview.rb index a31906bb834..21b95aeb1a0 100644 --- a/admin/spec/components/previews/solidus_admin/ui/details_list/component_preview.rb +++ b/admin/spec/components/previews/solidus_admin/ui/details_list/component_preview.rb @@ -9,7 +9,7 @@ def overview end # @param items select { choices: [[Order details, './data/example1.json'], [Product details, './data/example2.json'], [Account details, './data/example3.json']] } - def playground(items: './data/example1.json') + def playground(items: "./data/example1.json") parsed_items = JSON.parse( File.read(File.join(__dir__, items)), symbolize_names: true diff --git a/admin/spec/components/previews/solidus_admin/ui/dropdown/component_preview.rb b/admin/spec/components/previews/solidus_admin/ui/dropdown/component_preview.rb index b9c19e409ed..3de2a0a620f 100644 --- a/admin/spec/components/previews/solidus_admin/ui/dropdown/component_preview.rb +++ b/admin/spec/components/previews/solidus_admin/ui/dropdown/component_preview.rb @@ -17,10 +17,10 @@ def playground(text: "text", size: :m, direction: :right, open: false) text:, size: size.to_sym, direction: direction.to_sym, - style: "float: #{direction == :left ? 'right' : 'left'}", - open:, + style: "float: #{(direction == :left) ? "right" : "left"}", + open: ).with_content( - tag.span("Lorem ipsum dolor sit amet"), + tag.span("Lorem ipsum dolor sit amet") ) end end diff --git a/admin/spec/components/previews/solidus_admin/ui/forms/address/component_preview.rb b/admin/spec/components/previews/solidus_admin/ui/forms/address/component_preview.rb index 2317b916dd8..08296c7a211 100644 --- a/admin/spec/components/previews/solidus_admin/ui/forms/address/component_preview.rb +++ b/admin/spec/components/previews/solidus_admin/ui/forms/address/component_preview.rb @@ -6,12 +6,12 @@ class SolidusAdmin::UI::Forms::Address::ComponentPreview < ViewComponent::Previe # @param fieldset [Symbol] select { choices: [contact, location] } def overview(fieldset: :contact) - render_with_template(locals: { addressable: fake_address, fieldset: }) + render_with_template(locals: {addressable: fake_address, fieldset:}) end # @param fieldset [Symbol] select { choices: [contact, location] } def with_extended_fields(fieldset: :contact) - render_with_template(locals: { addressable: fake_address, fieldset: }) + render_with_template(locals: {addressable: fake_address, fieldset:}) end def with_custom_fieldset @@ -21,7 +21,7 @@ def self.human_attribute_name(attribute) end end.new - render_with_template(locals: { addressable: }) + render_with_template(locals: {addressable:}) end # @param disabled toggle @@ -33,7 +33,7 @@ def playground(disabled: false, fieldset: :contact, excludes: "") addressable: fake_address, disabled:, fieldset:, - excludes: excludes.present? ? excludes.split(",") : [], + excludes: excludes.present? ? excludes.split(",") : [] ) end diff --git a/admin/spec/components/previews/solidus_admin/ui/forms/checkbox/component_preview.rb b/admin/spec/components/previews/solidus_admin/ui/forms/checkbox/component_preview.rb index 54628dfcb42..6e090919a21 100644 --- a/admin/spec/components/previews/solidus_admin/ui/forms/checkbox/component_preview.rb +++ b/admin/spec/components/previews/solidus_admin/ui/forms/checkbox/component_preview.rb @@ -33,7 +33,7 @@ def overview # @param hint toggle # @param hint_text text # @param hint_position select { choices: [above, below] } - def playground(caption_size: :s, caption_weight: :normal, caption_classes: '', hint: true, hint_text: "This will be helpful", hint_position: :above) + def playground(caption_size: :s, caption_weight: :normal, caption_classes: "", hint: true, hint_text: "This will be helpful", hint_position: :above) render current_component.new(object_name: "store", method: :active, checked: true) do |component| component.with_label(text: "Active", size: caption_size, weight: caption_weight, classes: caption_classes) component.with_hint(text: hint_text, position: hint_position) if hint diff --git a/admin/spec/components/previews/solidus_admin/ui/forms/input/component_preview.rb b/admin/spec/components/previews/solidus_admin/ui/forms/input/component_preview.rb index 406b43fc8d4..2c491295144 100644 --- a/admin/spec/components/previews/solidus_admin/ui/forms/input/component_preview.rb +++ b/admin/spec/components/previews/solidus_admin/ui/forms/input/component_preview.rb @@ -18,7 +18,7 @@ def input_playground(error: false, size: "m", value: "value", type: "text") type: type.to_sym, error: error ? "There is an error" : nil, size: size.to_sym, - value:, + value: ) end @@ -29,7 +29,7 @@ def textarea_playground(error: false, size: "m", content: "value") render component("ui/forms/input").new( tag: :textarea, size: size.to_sym, - error: error ? "There is an error" : nil, + error: error ? "There is an error" : nil ).with_content(content) end diff --git a/admin/spec/components/previews/solidus_admin/ui/forms/select/component_preview.rb b/admin/spec/components/previews/solidus_admin/ui/forms/select/component_preview.rb index 1f0bb73bdfb..4ca5989412a 100644 --- a/admin/spec/components/previews/solidus_admin/ui/forms/select/component_preview.rb +++ b/admin/spec/components/previews/solidus_admin/ui/forms/select/component_preview.rb @@ -14,7 +14,7 @@ def overview # @param loading_more_message text # @param no_results_message text def remote_with_pagination(multiple: false, latency: false, loading_message: nil, loading_more_message: nil, no_results_message: nil) - args = { label: "Search", name: "select", multiple:, choices: [], placeholder: "Type to search" } + args = {label: "Search", name: "select", multiple:, choices: [], placeholder: "Type to search"} delay_url = "app.requestly.io/delay/2000/" if latency src = "https://#{delay_url}api.github.com/search/repositories" args.merge!( @@ -26,7 +26,7 @@ def remote_with_pagination(multiple: false, latency: false, loading_message: nil "data-no-preload": "true", "data-loading-message": loading_message, "data-loading-more-message": loading_more_message, - "data-no-results-message": no_results_message, + "data-no-results-message": no_results_message ) render component("ui/forms/select").new(**args) diff --git a/admin/spec/components/previews/solidus_admin/ui/forms/switch_field/component_preview.rb b/admin/spec/components/previews/solidus_admin/ui/forms/switch_field/component_preview.rb index 6afd19eab64..0f9deae3f85 100644 --- a/admin/spec/components/previews/solidus_admin/ui/forms/switch_field/component_preview.rb +++ b/admin/spec/components/previews/solidus_admin/ui/forms/switch_field/component_preview.rb @@ -32,7 +32,7 @@ def playground( tip:, size: size.to_sym, checked:, - disabled:, + disabled: ) end end diff --git a/admin/spec/components/previews/solidus_admin/ui/icon/component_preview.rb b/admin/spec/components/previews/solidus_admin/ui/icon/component_preview.rb index d65ef66251d..9263de5385d 100644 --- a/admin/spec/components/previews/solidus_admin/ui/icon/component_preview.rb +++ b/admin/spec/components/previews/solidus_admin/ui/icon/component_preview.rb @@ -10,7 +10,7 @@ def overview # @param name select "Of all icon names we show only 10, chosen randomly" :name_options def playground(name: name_options.first) - render component("ui/icon").new(name:, class: 'w-10 h-10') + render component("ui/icon").new(name:, class: "w-10 h-10") end private diff --git a/admin/spec/components/previews/solidus_admin/ui/pages/index/component_preview.rb b/admin/spec/components/previews/solidus_admin/ui/pages/index/component_preview.rb index b84349a9a74..c70ec974e69 100644 --- a/admin/spec/components/previews/solidus_admin/ui/pages/index/component_preview.rb +++ b/admin/spec/components/previews/solidus_admin/ui/pages/index/component_preview.rb @@ -32,16 +32,16 @@ def columns def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: spree.new_admin_order_path, - icon: "add-line", + icon: "add-line" ) end def batch_actions [{ label: "Print", - action: "print", + action: "print" }] end end diff --git a/admin/spec/components/previews/solidus_admin/ui/tab/component_preview.rb b/admin/spec/components/previews/solidus_admin/ui/tab/component_preview.rb index e34be48af31..9c38dcb2506 100644 --- a/admin/spec/components/previews/solidus_admin/ui/tab/component_preview.rb +++ b/admin/spec/components/previews/solidus_admin/ui/tab/component_preview.rb @@ -6,7 +6,7 @@ class SolidusAdmin::UI::Tab::ComponentPreview < ViewComponent::Preview # @param text text def overview(text: "text") - render_with_template locals: { text: } + render_with_template locals: {text:} end # @param text text diff --git a/admin/spec/components/previews/solidus_admin/ui/table/component_preview.rb b/admin/spec/components/previews/solidus_admin/ui/table/component_preview.rb index 238959dead0..9aba7898249 100644 --- a/admin/spec/components/previews/solidus_admin/ui/table/component_preview.rb +++ b/admin/spec/components/previews/solidus_admin/ui/table/component_preview.rb @@ -11,10 +11,10 @@ class SolidusAdmin::UI::Table::ComponentPreview < ViewComponent::Preview # @param sortable select :sortable_select def overview(search_bar: false, filters: false, batch_actions: false, scopes: false, sortable: nil) render current_component.new( - id: 'simple-list', + id: "simple-list", data: table_data(batch_actions, sortable), search: search_bar ? search_options(filters, scopes) : nil, - sortable: sortable ? sortable_options(sortable) : nil, + sortable: sortable ? sortable_options(sortable) : nil ) end @@ -29,17 +29,17 @@ def sortable_select def table_data(batch_actions, sortable) columns = [ - { header: :id, data: -> { _1.id.to_s } }, - { header: :name, data: :name }, - { header: -> { "Availability at #{Time.current}" }, data: -> { "#{time_ago_in_words _1.available_on} ago" } }, - { header: -> { component("ui/badge").new(name: "$$$") }, data: -> { component("ui/badge").new(name: _1.display_price, color: :green) } }, - { header: "Generated at", data: Time.current.to_s }, + {header: :id, data: -> { _1.id.to_s }}, + {header: :name, data: :name}, + {header: -> { "Availability at #{Time.current}" }, data: -> { "#{time_ago_in_words _1.available_on} ago" }}, + {header: -> { component("ui/badge").new(name: "$$$") }, data: -> { component("ui/badge").new(name: _1.display_price, color: :green) }}, + {header: "Generated at", data: Time.current.to_s} ] if sortable == "handle" columns.unshift({ header: "", - data: ->(_) { component("ui/icon").new(name: 'draggable', class: 'w-5 h-5 cursor-pointer handle') } + data: ->(_) { component("ui/icon").new(name: "draggable", class: "w-5 h-5 cursor-pointer handle") } }) end { @@ -47,7 +47,7 @@ def table_data(batch_actions, sortable) rows: Array.new(10) { |n| Spree::Product.new(id: n, name: "Product #{n}", price: n * 10.0, available_on: n.days.ago) }, columns:, prev: nil, - next: '#2', + next: "#2" }.tap do |data| data[:batch_actions] = batch_actions_data if batch_actions end @@ -59,27 +59,27 @@ def batch_actions_data label: "Delete", action: "#", method: :delete, - icon: 'delete-bin-7-line', + icon: "delete-bin-7-line" }, { label: "Discontinue", action: "#", method: :put, - icon: 'pause-circle-line', + icon: "pause-circle-line" }, { label: "Activate", action: "#", method: :put, - icon: 'play-circle-line', - }, + icon: "play-circle-line" + } ] end def search_options(filters, scopes) { name: :no_key, - url: '#', + url: "#", scopes: scopes ? scope_options : nil, filters: filters ? filter_options : nil } @@ -87,8 +87,8 @@ def search_options(filters, scopes) def scope_options [ - { name: :all, label: "All", default: true }, - { name: :deleted, label: "Deleted" } + {name: :all, label: "All", default: true}, + {name: :deleted, label: "Deleted"} ] end @@ -96,7 +96,7 @@ def filter_options [ { presentation: "Filter", - combinator: 'or', + combinator: "or", attribute: "attribute", predicate: "eq", options: [ @@ -109,9 +109,9 @@ def filter_options def sortable_options(sortable) options = { url: ->(_) { "#" }, - param: 'position' + param: "position" } - options[:handle] = '.handle' if sortable == "handle" + options[:handle] = ".handle" if sortable == "handle" options end end diff --git a/admin/spec/components/previews/solidus_admin/ui/table/pagination/component_preview.rb b/admin/spec/components/previews/solidus_admin/ui/table/pagination/component_preview.rb index e0e4d0db9b7..c824a19f4d7 100644 --- a/admin/spec/components/previews/solidus_admin/ui/table/pagination/component_preview.rb +++ b/admin/spec/components/previews/solidus_admin/ui/table/pagination/component_preview.rb @@ -10,10 +10,10 @@ def overview # @param prev_link # @param next_link - def playground(prev_link: '#1', next_link: '#2') + def playground(prev_link: "#1", next_link: "#2") render current_component.new( prev_link: prev_link.presence, - next_link: next_link.presence, + next_link: next_link.presence ) end end diff --git a/admin/spec/components/previews/solidus_admin/ui/table/ransack_filter/component_preview.rb b/admin/spec/components/previews/solidus_admin/ui/table/ransack_filter/component_preview.rb index 799fd3b5bb8..273e9e78a47 100644 --- a/admin/spec/components/previews/solidus_admin/ui/table/ransack_filter/component_preview.rb +++ b/admin/spec/components/previews/solidus_admin/ui/table/ransack_filter/component_preview.rb @@ -13,7 +13,7 @@ def overview def playground(presentation: "Filter", search_bar: 10) render current_component.new( presentation:, - combinator: 'or', + combinator: "or", attribute: "attribute", predicate: "eq", options: Array.new(search_bar.to_i) { |o| [o, 0] }, diff --git a/admin/spec/components/solidus_admin/base_component_spec.rb b/admin/spec/components/solidus_admin/base_component_spec.rb index 6794d308022..9c76df23b90 100644 --- a/admin/spec/components/solidus_admin/base_component_spec.rb +++ b/admin/spec/components/solidus_admin/base_component_spec.rb @@ -56,7 +56,7 @@ def call translation = component.translate("foo.bar.baz") expect(translation).to eq("translation missing: en.foo.bar.baz") - expect(debug_logs).to include(%{ [Foo::Component] Missing translation: en.foo.bar.baz}) + expect(debug_logs).to include(%( [Foo::Component] Missing translation: en.foo.bar.baz)) end end end diff --git a/admin/spec/components/solidus_admin/layout/flashes/alerts/component_spec.rb b/admin/spec/components/solidus_admin/layout/flashes/alerts/component_spec.rb index 046f737bcd5..ddc57bddfcf 100644 --- a/admin/spec/components/solidus_admin/layout/flashes/alerts/component_spec.rb +++ b/admin/spec/components/solidus_admin/layout/flashes/alerts/component_spec.rb @@ -7,7 +7,7 @@ context "when alerts passed as Hash" do let(:alerts) do - { warning: { title: "Be careful", message: "Something fishy going on" } } + {warning: {title: "Be careful", message: "Something fishy going on"}} end it "renders correctly" do @@ -36,8 +36,8 @@ describe "multiple alerts" do let(:alerts) do { - warning: { title: "Be careful", message: "Something fishy going on" }, - success: { title: "It worked", message: "Nothing to worry about!" } + warning: {title: "Be careful", message: "Something fishy going on"}, + success: {title: "It worked", message: "Nothing to worry about!"} } end diff --git a/admin/spec/components/solidus_admin/layout/flashes/toasts/component_spec.rb b/admin/spec/components/solidus_admin/layout/flashes/toasts/component_spec.rb index 1161a3cbb48..eca68d573eb 100644 --- a/admin/spec/components/solidus_admin/layout/flashes/toasts/component_spec.rb +++ b/admin/spec/components/solidus_admin/layout/flashes/toasts/component_spec.rb @@ -6,7 +6,7 @@ let(:component) { described_class.new(toasts:) } describe "error toast" do - let(:toasts) { { error: "Some error" } } + let(:toasts) { {error: "Some error"} } it "renders correctly" do render_inline(component) @@ -19,7 +19,7 @@ end describe "default toast" do - let(:toasts) { { notice: "All good" } } + let(:toasts) { {notice: "All good"} } it "renders correctly" do render_inline(component) diff --git a/admin/spec/components/solidus_admin/layout/navigation/account/component_spec.rb b/admin/spec/components/solidus_admin/layout/navigation/account/component_spec.rb index e4dfbaf3094..06821d89c64 100644 --- a/admin/spec/components/solidus_admin/layout/navigation/account/component_spec.rb +++ b/admin/spec/components/solidus_admin/layout/navigation/account/component_spec.rb @@ -8,7 +8,7 @@ user_label: "Alice", account_path: "/admin/account", logout_path: "/admin/logout", - logout_method: :delete, + logout_method: :delete ) render_inline(component) diff --git a/admin/spec/components/solidus_admin/products/status/component_spec.rb b/admin/spec/components/solidus_admin/products/status/component_spec.rb index 87ecedb0909..3538ee85044 100644 --- a/admin/spec/components/solidus_admin/products/status/component_spec.rb +++ b/admin/spec/components/solidus_admin/products/status/component_spec.rb @@ -17,7 +17,7 @@ render_inline described_class.from_product(product) - within('tbody') { expect(rendered_content).to have_text("Discontinued") } + within("tbody") { expect(rendered_content).to have_text("Discontinued") } end end end diff --git a/admin/spec/components/solidus_admin/products/stock/component_spec.rb b/admin/spec/components/solidus_admin/products/stock/component_spec.rb index 6c73a56be8e..74674252037 100644 --- a/admin/spec/components/solidus_admin/products/stock/component_spec.rb +++ b/admin/spec/components/solidus_admin/products/stock/component_spec.rb @@ -15,7 +15,7 @@ expect(described_class).to have_received(:new).with( on_hand: 123, - variants_count: nil, + variants_count: nil ) end end @@ -28,7 +28,7 @@ expect(described_class).to have_received(:new).with( on_hand: 123, - variants_count: 0, + variants_count: 0 ) end end diff --git a/admin/spec/components/solidus_admin/ui/button/component_spec.rb b/admin/spec/components/solidus_admin/ui/button/component_spec.rb index cfaf018417c..f7ee9f14bea 100644 --- a/admin/spec/components/solidus_admin/ui/button/component_spec.rb +++ b/admin/spec/components/solidus_admin/ui/button/component_spec.rb @@ -45,7 +45,7 @@ it "renders Back button" do render_inline(component) - expect(page).to have_link(href: '/index', title: 'Back') + expect(page).to have_link(href: "/index", title: "Back") end end @@ -54,7 +54,7 @@ it "renders Discard button" do render_inline(component) - expect(page).to have_link(href: '/index') + expect(page).to have_link(href: "/index") expect(page).to have_content("Discard") end end diff --git a/admin/spec/controllers/solidus_admin/base_controller_spec.rb b/admin/spec/controllers/solidus_admin/base_controller_spec.rb index 8c22c4a7fdf..fd4912092f0 100644 --- a/admin/spec/controllers/solidus_admin/base_controller_spec.rb +++ b/admin/spec/controllers/solidus_admin/base_controller_spec.rb @@ -6,7 +6,7 @@ controller(SolidusAdmin::BaseController) do def index authorize! :update, Spree::Order - render plain: 'test' + render plain: "test" end end @@ -17,12 +17,12 @@ def index it "redirects to unauthorized for no user" do get :index - expect(response).to redirect_to '/unauthorized' + expect(response).to redirect_to "/unauthorized" end context "with a user without update permission" do before do - user = create(:user, email: 'user@example.com') + user = create(:user, email: "user@example.com") allow_any_instance_of(SolidusAdmin::BaseController).to receive(:spree_current_user).and_return(user) end @@ -35,7 +35,7 @@ def index context "successful request" do before do - user = create(:admin_user, email: 'admin@example.com') + user = create(:admin_user, email: "admin@example.com") allow_any_instance_of(SolidusAdmin::BaseController).to receive(:spree_current_user).and_return(user) end diff --git a/admin/spec/features/accounts_spec.rb b/admin/spec/features/accounts_spec.rb index 8f22e31d722..431955f8afd 100644 --- a/admin/spec/features/accounts_spec.rb +++ b/admin/spec/features/accounts_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Accounts", type: :feature do it "shows account info" do - user = create(:admin_user, email: 'admin@example.com') + user = create(:admin_user, email: "admin@example.com") stub_authorization! user sign_in user @@ -17,18 +17,18 @@ it "can change locale and theme", :js do I18n.config.available_locales_set << :"en-UK" I18n.config.available_locales_set << "en-UK" - I18n.backend.store_translations('en-UK', spree: { i18n: { this_file_language: "English (UK)" } }) + I18n.backend.store_translations("en-UK", spree: {i18n: {this_file_language: "English (UK)"}}) - user = create(:admin_user, email: 'admin@example.com') + user = create(:admin_user, email: "admin@example.com") stub_authorization! user sign_in user visit "/admin/products" - find('summary', text: user.email).click + find("summary", text: user.email).click expect(page).to have_content("English (US)") select "English (UK)", from: "switch_to_locale" expect(page).to have_content("English (UK)") - select "English (US)", from: 'switch_to_locale' + select "English (US)", from: "switch_to_locale" expect(page).to have_content("English (US)") within('.dark\:hidden') { select "Solidus dark", from: "switch_to_theme" } diff --git a/admin/spec/features/adjustment_reasons_spec.rb b/admin/spec/features/adjustment_reasons_spec.rb index 782fadc99ac..58981c170af 100644 --- a/admin/spec/features/adjustment_reasons_spec.rb +++ b/admin/spec/features/adjustment_reasons_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'spec_helper' -require 'solidus_admin/testing_support/shared_examples/bulk_delete_resources' +require "spec_helper" +require "solidus_admin/testing_support/shared_examples/bulk_delete_resources" describe "Adjustment Reasons", type: :feature do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } it "lists adjustment reasons and allows deleting them", :js do create(:adjustment_reason, name: "Default-adjustment-reason") diff --git a/admin/spec/features/option_types_spec.rb b/admin/spec/features/option_types_spec.rb index 10181e7d009..d4910ea12b3 100644 --- a/admin/spec/features/option_types_spec.rb +++ b/admin/spec/features/option_types_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Option Types", :js, type: :feature do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } it "lists option types and allows deleting them" do create(:option_type, name: "color", presentation: "Color") diff --git a/admin/spec/features/orders/adjustments_spec.rb b/admin/spec/features/orders/adjustments_spec.rb index f88d36ebea8..6496e53eb3c 100644 --- a/admin/spec/features/orders/adjustments_spec.rb +++ b/admin/spec/features/orders/adjustments_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Order", :js, type: :feature do let(:order) { create(:order, number: "R123456789") } before do allow(SolidusAdmin::Config).to receive(:enable_alpha_features?) { true } - sign_in create(:admin_user, email: 'admin@example.com') + sign_in create(:admin_user, email: "admin@example.com") end it "allows locking and unlocking adjustments" do diff --git a/admin/spec/features/orders/index_spec.rb b/admin/spec/features/orders/index_spec.rb index 5f10d2443e0..dea5ff6c2a4 100644 --- a/admin/spec/features/orders/index_spec.rb +++ b/admin/spec/features/orders/index_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Orders", type: :feature do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } it "lists orders", :js do create(:order, number: "R123456789", total: 19.99) @@ -17,15 +17,15 @@ expect(page).to be_axe_clean end - context 'with different currency' do + context "with different currency" do around do |example| currency_was = Spree::Config.currency - Spree::Config.currency = 'EUR' + Spree::Config.currency = "EUR" example.run Spree::Config.currency = currency_was end - it 'displays correct currency' do + it "displays correct currency" do create(:order, total: 19.99) visit "/admin/orders" click_on "In Progress" @@ -50,10 +50,10 @@ click_on "Filter" within("div[role='search']") do - find('details', text: "Store").click + find("details", text: "Store").click expect(page).to have_content("Another Store") - find('label', text: "Another Store").click + find("label", text: "Another Store").click end expect(page).to have_content(order_in_another_store.number) diff --git a/admin/spec/features/orders/show_spec.rb b/admin/spec/features/orders/show_spec.rb index 610bee167c2..bb49cf173d6 100644 --- a/admin/spec/features/orders/show_spec.rb +++ b/admin/spec/features/orders/show_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Order", :js, type: :feature do before do allow(SolidusAdmin::Config).to receive(:enable_alpha_features?) { true } - sign_in create(:admin_user, email: 'admin@example.com') + sign_in create(:admin_user, email: "admin@example.com") end it "allows detaching a customer from an order" do @@ -103,8 +103,8 @@ context "in cart state" do it "allows managing the cart" do - create(:product, name: "Just a product", slug: 'just-a-prod', price: 19.99) - create(:product, name: "Just another product", slug: 'just-another-prod', price: 29.99) + create(:product, name: "Just a product", slug: "just-a-prod", price: 19.99) + create(:product, name: "Just another product", slug: "just-another-prod", price: 29.99) create(:order, number: "R123456789", total: 19.99, state: "cart") visit "/admin/orders/R123456789/edit" @@ -139,12 +139,12 @@ end end - describe 'summary panel' do - shared_examples_for 'summary panel' do + describe "summary panel" do + shared_examples_for "summary panel" do let!(:order) { create(:order, number: "R123456789", total: 4.99, currency:) } - let(:currency) { 'USD' } + let(:currency) { "USD" } - it 'displays order summary correctly' do + it "displays order summary correctly" do visit "/admin/orders/R123456789" expect(page).to have_content("Summary") @@ -159,9 +159,9 @@ include_examples "summary panel" - context 'with different currency' do + context "with different currency" do include_examples "summary panel" do - let(:currency) { 'EUR' } + let(:currency) { "EUR" } end end end diff --git a/admin/spec/features/payment_methods_spec.rb b/admin/spec/features/payment_methods_spec.rb index 06b4dc0f3ab..55c365e046e 100644 --- a/admin/spec/features/payment_methods_spec.rb +++ b/admin/spec/features/payment_methods_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" require "solidus_admin/testing_support/shared_examples/moveable" describe "Payment Methods", :js, type: :feature do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } it "lists users and allows deleting them" do create(:check_payment_method, name: "Check", active: true) diff --git a/admin/spec/features/product_spec.rb b/admin/spec/features/product_spec.rb index 396ab30a2cf..f140cb695d9 100644 --- a/admin/spec/features/product_spec.rb +++ b/admin/spec/features/product_spec.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Product", type: :feature do before do allow(SolidusAdmin::Config).to receive(:enable_alpha_features?) { true } - sign_in create(:admin_user, email: 'admin@example.com') + sign_in create(:admin_user, email: "admin@example.com") end it "lists products", :js do - create(:product, name: "Just a product", slug: 'just-a-prod', price: 19.99) + create(:product, name: "Just a product", slug: "just-a-prod", price: 19.99) visit "/admin/products/just-a-prod" @@ -27,7 +27,7 @@ end it "redirects the edit route to the show path" do - create(:product, slug: 'just-a-prod') + create(:product, slug: "just-a-prod") visit "/admin/products/just-a-prod/edit" @@ -35,19 +35,19 @@ end it "can update a product", :js do - create(:product, name: "Just a product", slug: 'just-a-prod', price: 19.99) + create(:product, name: "Just a product", slug: "just-a-prod", price: 19.99) visit "/admin/products/just-a-prod" fill_in "Name", with: "Just a product (updated)" - uncheck 'Promotable' - within('header') { click_button "Save" } + uncheck "Promotable" + within("header") { click_button "Save" } expect(page).to have_content("Just a product (updated)") expect(checkbox("Promotable")).not_to be_checked fill_in "Name", with: "" - within('header') { click_button "Save" } + within("header") { click_button "Save" } expect(page).to have_content("Name can't be blank") expect(page).to be_axe_clean diff --git a/admin/spec/features/products_spec.rb b/admin/spec/features/products_spec.rb index 6efb41af821..d46aeb9950c 100644 --- a/admin/spec/features/products_spec.rb +++ b/admin/spec/features/products_spec.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Products", type: :feature do before do allow(SolidusAdmin::Config).to receive(:enable_alpha_features?) { true } - sign_in create(:admin_user, email: 'admin@example.com') + sign_in create(:admin_user, email: "admin@example.com") end it "lists products", :js do - create(:product, name: "Just a product", slug: 'just-a-prod', price: 19.99) + create(:product, name: "Just a product", slug: "just-a-prod", price: 19.99) visit "/admin/products" @@ -17,7 +17,7 @@ expect(page).to have_content("$19.99") expect(page).to be_axe_clean - find_row('Just a product').click + find_row("Just a product").click expect(page).to have_current_path("/admin/products/just-a-prod") expect(page).to have_content("Manage images") @@ -46,32 +46,32 @@ create(:product, name: "Another product", price: 29.99) visit "/admin/products" - find('main tbody tr:nth-child(2)').find('input').check + find("main tbody tr:nth-child(2)").find("input").check accept_confirm("Are you sure you want to discontinue 1 product?") do click_button "Discontinue" end expect(page).to have_content("Products were successfully discontinued.", wait: 5) - within('main tbody tr:nth-child(2)') { + within("main tbody tr:nth-child(2)") { expect(page).to have_content("Just a product") expect(page).to have_content("Discontinued") expect(page).not_to have_content("Available") } - within('main tbody tr:nth-child(1)') { + within("main tbody tr:nth-child(1)") { expect(page).to have_content("Another product") expect(page).not_to have_content("Discontinued") expect(page).to have_content("Available") } - find('main tbody tr:nth-child(2)').find('input').check + find("main tbody tr:nth-child(2)").find("input").check accept_confirm("Are you sure you want to activate 1 product?") do click_button "Activate" end expect(page).to have_content("Products were successfully activated.", wait: 5) - within('tbody') do + within("tbody") do expect(page).to have_content("Just a product") expect(page).to have_content("Another product") expect(page).not_to have_content("Discontinued") diff --git a/admin/spec/features/properties_spec.rb b/admin/spec/features/properties_spec.rb index dda90f87642..f60b34de179 100644 --- a/admin/spec/features/properties_spec.rb +++ b/admin/spec/features/properties_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'spec_helper' -require 'solidus_admin/testing_support/shared_examples/bulk_delete_resources' +require "spec_helper" +require "solidus_admin/testing_support/shared_examples/bulk_delete_resources" describe "Properties", type: :feature do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } it "lists properties and allows deleting them", :js do create(:property, name: "Type prop", presentation: "Type prop") diff --git a/admin/spec/features/refund_reasons_spec.rb b/admin/spec/features/refund_reasons_spec.rb index 4a9f80d7e89..9c0baf92770 100644 --- a/admin/spec/features/refund_reasons_spec.rb +++ b/admin/spec/features/refund_reasons_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'spec_helper' -require 'solidus_admin/testing_support/shared_examples/bulk_delete_resources' +require "spec_helper" +require "solidus_admin/testing_support/shared_examples/bulk_delete_resources" describe "Refund Reasons", type: :feature do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } it "lists refund reasons and allows deleting them", :js do create(:refund_reason, name: "Default-refund-reason") diff --git a/admin/spec/features/reimbursement_types_spec.rb b/admin/spec/features/reimbursement_types_spec.rb index 76cc25edadc..1efa37c6d02 100644 --- a/admin/spec/features/reimbursement_types_spec.rb +++ b/admin/spec/features/reimbursement_types_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Reimbursement Types", :js, type: :feature do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } it "lists Reimbursement Types and allows deleting them" do create(:reimbursement_type, name: "Default-reimbursement-type") diff --git a/admin/spec/features/return_reasons_spec.rb b/admin/spec/features/return_reasons_spec.rb index 68f30dc2a31..e9c50bb07ad 100644 --- a/admin/spec/features/return_reasons_spec.rb +++ b/admin/spec/features/return_reasons_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'spec_helper' -require 'solidus_admin/testing_support/shared_examples/bulk_delete_resources' +require "spec_helper" +require "solidus_admin/testing_support/shared_examples/bulk_delete_resources" describe "Return Reasons", type: :feature do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } it "lists Return Reasons and allows deleting them", :js do create(:return_reason, name: "Default-return-reason") diff --git a/admin/spec/features/roles_spec.rb b/admin/spec/features/roles_spec.rb index a35b58978a3..6ac0e300ba3 100644 --- a/admin/spec/features/roles_spec.rb +++ b/admin/spec/features/roles_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'spec_helper' -require 'solidus_admin/testing_support/shared_examples/bulk_delete_resources' +require "spec_helper" +require "solidus_admin/testing_support/shared_examples/bulk_delete_resources" describe "Roles", type: :feature do before do - sign_in create(:admin_user, email: 'admin@example.com') + sign_in create(:admin_user, email: "admin@example.com") end let!(:settings_edit_permission) { @@ -26,8 +26,8 @@ } it "lists roles and allows deleting them", :js do - create(:role, name: "Customer Role" ) - Spree::Role.find_or_create_by(name: 'admin') + create(:role, name: "Customer Role") + Spree::Role.find_or_create_by(name: "admin") visit "/admin/roles" expect(page).to have_content("Users and Roles") @@ -79,7 +79,7 @@ expect(page).to have_content("Settings") expect(page).to have_content("Edit") expect(page).to have_content("View") - find('label', text: 'View').find('input[type=checkbox]').click + find("label", text: "View").find("input[type=checkbox]").click end click_on "Add Role" @@ -95,7 +95,7 @@ context "with invalid data" do context "with a non-unique name" do before do - create(:role, name: "Customer Role" ) + create(:role, name: "Customer Role") end it "fails to create a new role, keeping page and q params" do @@ -128,7 +128,7 @@ expect(page).to have_selector("dialog", wait: 5) expect(page).to have_content("Edit Role") expect(Spree::Role.find_by(name: "Reviewer").permission_set_ids) - .to contain_exactly(settings_edit_permission.id) + .to contain_exactly(settings_edit_permission.id) end it "is accessible", :js do @@ -150,9 +150,9 @@ expect(page).to have_content("Settings") expect(page).to have_content("Edit") expect(page).to have_content("View") - expect(find('label', text: 'Edit').find('input[type=checkbox]').checked?).to eq(true) - find('label', text: 'Edit').find('input[type=checkbox]').uncheck - find('label', text: 'View').find('input[type=checkbox]').check + expect(find("label", text: "Edit").find("input[type=checkbox]").checked?).to eq(true) + find("label", text: "Edit").find("input[type=checkbox]").uncheck + find("label", text: "View").find("input[type=checkbox]").check end click_on "Update Role" @@ -163,7 +163,7 @@ expect(Spree::Role.find_by(name: "Publisher")).to be_present expect(Spree::Role.find_by(name: "Publisher").permission_set_ids) .to contain_exactly( - settings_view_permission.id, + settings_view_permission.id ) expect(page.current_url).to include(query) end diff --git a/admin/spec/features/shipping_categories_spec.rb b/admin/spec/features/shipping_categories_spec.rb index 8a4e362f8c4..6c8535bca95 100644 --- a/admin/spec/features/shipping_categories_spec.rb +++ b/admin/spec/features/shipping_categories_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'spec_helper' -require 'solidus_admin/testing_support/shared_examples/bulk_delete_resources' +require "spec_helper" +require "solidus_admin/testing_support/shared_examples/bulk_delete_resources" describe "Shipping Categories", type: :feature do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } it "lists shipping categories and allows deleting them", :js do create(:shipping_category, name: "Default-shipping") diff --git a/admin/spec/features/shipping_methods_spec.rb b/admin/spec/features/shipping_methods_spec.rb index 28471fd9e4c..8b8de195321 100644 --- a/admin/spec/features/shipping_methods_spec.rb +++ b/admin/spec/features/shipping_methods_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Shipping Methods", type: :feature do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } it "lists shipping methods and allows deleting them", :js do create(:shipping_method, name: "FAAAST") diff --git a/admin/spec/features/stock_items_spec.rb b/admin/spec/features/stock_items_spec.rb index 6e07172fb62..8a6bb2048e5 100644 --- a/admin/spec/features/stock_items_spec.rb +++ b/admin/spec/features/stock_items_spec.rb @@ -1,18 +1,18 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Stock Items", :js, type: :feature do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } # We don't want multiple stock items per variant, and stock locations are created implicitly otherwise, # and their default is to create stock items for all variants, which in this spec we do manually. - let!(:stock_location) { create(:stock_location, name: 'default', propagate_all_variants: false) } + let!(:stock_location) { create(:stock_location, name: "default", propagate_all_variants: false) } - let(:backorderable_variant) { create(:variant, sku: 'backorderable', stock_items: []) } - let(:non_backorderable_variant) { create(:variant, sku: 'non-backorderable', stock_items: []) } - let(:out_of_stock_variant) { create(:variant, sku: 'out-of-stock', stock_items: []) } - let(:low_stock_variant) { create(:variant, sku: 'low-stock', stock_items: []) } + let(:backorderable_variant) { create(:variant, sku: "backorderable", stock_items: []) } + let(:non_backorderable_variant) { create(:variant, sku: "non-backorderable", stock_items: []) } + let(:out_of_stock_variant) { create(:variant, sku: "out-of-stock", stock_items: []) } + let(:low_stock_variant) { create(:variant, sku: "low-stock", stock_items: []) } let!(:backorderable) { create(:stock_item, variant: backorderable_variant, backorderable: true) } let!(:non_backorderable) { create(:stock_item, variant: non_backorderable_variant, backorderable: false) } let!(:out_of_stock) { create(:stock_item, variant: out_of_stock_variant, backorderable: false, on_hand: 0) } @@ -28,35 +28,35 @@ expect(page).to have_content(low_stock.variant.sku) # Edit stock item - find('td', text: 'non-backorderable').click + find("td", text: "non-backorderable").click fill_in :quantity_adjustment, with: 1 click_on "Save" - expect(find('tr', text: 'non-backorderable')).to have_content('11') - expect(find('tr', text: 'non-backorderable')).to have_content('1 stock movement') + expect(find("tr", text: "non-backorderable")).to have_content("11") + expect(find("tr", text: "non-backorderable")).to have_content("1 stock movement") - click_on 'Back Orderable' - expect(page).to have_css('[aria-current="true"]', text: 'Back Orderable') + click_on "Back Orderable" + expect(page).to have_css('[aria-current="true"]', text: "Back Orderable") expect(page).to_not have_content(non_backorderable.variant.sku) expect(page).to have_content(backorderable.variant.sku) expect(page).to_not have_content(out_of_stock.variant.sku) expect(page).to_not have_content(low_stock.variant.sku) - click_on 'Out Of Stock' - expect(page).to have_css('[aria-current="true"]', text: 'Out Of Stock') + click_on "Out Of Stock" + expect(page).to have_css('[aria-current="true"]', text: "Out Of Stock") expect(page).to_not have_content(non_backorderable.variant.sku) expect(page).to_not have_content(backorderable.variant.sku) expect(page).to have_content(out_of_stock.variant.sku) expect(page).to_not have_content(low_stock.variant.sku) - click_on 'Low Stock' - expect(page).to have_css('[aria-current="true"]', text: 'Low Stock') + click_on "Low Stock" + expect(page).to have_css('[aria-current="true"]', text: "Low Stock") expect(page).to_not have_content(non_backorderable.variant.sku) expect(page).to_not have_content(backorderable.variant.sku) expect(page).to_not have_content(out_of_stock.variant.sku) expect(page).to have_content(low_stock.variant.sku) - click_on 'In Stock' - expect(page).to have_css('[aria-current="true"]', text: 'In Stock') + click_on "In Stock" + expect(page).to have_css('[aria-current="true"]', text: "In Stock") expect(page).to have_content(non_backorderable.variant.sku) expect(page).to have_content(backorderable.variant.sku) expect(page).to_not have_content(out_of_stock.variant.sku) diff --git a/admin/spec/features/stock_locations/form_spec.rb b/admin/spec/features/stock_locations/form_spec.rb index 3f778ba2102..b725aa9d0dd 100644 --- a/admin/spec/features/stock_locations/form_spec.rb +++ b/admin/spec/features/stock_locations/form_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Stock Location Form", :js, type: :feature do before do @@ -8,12 +8,12 @@ create(:country, iso:).tap { create(:state, country: _1, name: "Fictitious State in #{iso}") } end - sign_in create(:admin_user, email: 'admin@example.com') + sign_in create(:admin_user, email: "admin@example.com") visit "/admin/stock_locations" click_on "Add new" end - it 'shows page with form for stock location' do + it "shows page with form for stock location" do expect(page).to have_current_path(solidus_admin.new_stock_location_path) expect(page).to have_content("New Stock Location") expect(page).to have_content("Address") @@ -24,14 +24,14 @@ expect(page).to be_axe_clean end - describe 'navigation buttons' do - it 'allows to go back' do - click_on 'Back' + describe "navigation buttons" do + it "allows to go back" do + click_on "Back" expect(page).to have_current_path(solidus_admin.stock_locations_path) end - it 'allows to discard changes' do - click_on 'Discard' + it "allows to discard changes" do + click_on "Discard" expect(page).to have_current_path(solidus_admin.stock_locations_path) end end diff --git a/admin/spec/features/stock_locations/index_spec.rb b/admin/spec/features/stock_locations/index_spec.rb index 16815215e63..95d0dd2f4da 100644 --- a/admin/spec/features/stock_locations/index_spec.rb +++ b/admin/spec/features/stock_locations/index_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Stock Locations", :js, type: :feature do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } it "lists stock locations and allows deleting them" do create(:stock_location, name: "Default-location") diff --git a/admin/spec/features/store_credit_reasons_spec.rb b/admin/spec/features/store_credit_reasons_spec.rb index 85ef3fb1ff5..57e8edefc61 100644 --- a/admin/spec/features/store_credit_reasons_spec.rb +++ b/admin/spec/features/store_credit_reasons_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'spec_helper' -require 'solidus_admin/testing_support/shared_examples/bulk_delete_resources' +require "spec_helper" +require "solidus_admin/testing_support/shared_examples/bulk_delete_resources" describe "Store Credit Reasons", type: :feature do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } it "lists store credit reasons and allows deleting them", :js do create(:store_credit_reason, name: "Default-store-credit-reason") diff --git a/admin/spec/features/stores_spec.rb b/admin/spec/features/stores_spec.rb index 921393a584d..2ea2e938d3f 100644 --- a/admin/spec/features/stores_spec.rb +++ b/admin/spec/features/stores_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Stores", :js, type: :feature do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } it "lists stores and allows deleting them" do create(:store, name: "B2C Store") diff --git a/admin/spec/features/tax_categories_spec.rb b/admin/spec/features/tax_categories_spec.rb index 181370af557..2718e0a4dd9 100644 --- a/admin/spec/features/tax_categories_spec.rb +++ b/admin/spec/features/tax_categories_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'spec_helper' -require 'solidus_admin/testing_support/shared_examples/bulk_delete_resources' +require "spec_helper" +require "solidus_admin/testing_support/shared_examples/bulk_delete_resources" describe "Tax categories", type: :feature do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } it "lists tax categories and allows deleting them", :js do create(:tax_category, name: "Clothing") diff --git a/admin/spec/features/tax_rates_spec.rb b/admin/spec/features/tax_rates_spec.rb index c0e1809c7a9..d37a6409060 100644 --- a/admin/spec/features/tax_rates_spec.rb +++ b/admin/spec/features/tax_rates_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Tax rates", :js, type: :feature do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } it "lists tax rates and allows deleting them" do create(:tax_rate, name: "Clothing") diff --git a/admin/spec/features/taxonomies_spec.rb b/admin/spec/features/taxonomies_spec.rb index 33fab23194e..2ab8a2ef825 100644 --- a/admin/spec/features/taxonomies_spec.rb +++ b/admin/spec/features/taxonomies_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" require "solidus_admin/testing_support/shared_examples/moveable" describe "Taxonomies", :js, type: :feature do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } it "lists taxonomies and allows deleting them" do create(:taxonomy, name: "Categories") diff --git a/admin/spec/features/users_spec.rb b/admin/spec/features/users_spec.rb index cc9c6a5d7fc..7b5e2dc6da1 100644 --- a/admin/spec/features/users_spec.rb +++ b/admin/spec/features/users_spec.rb @@ -206,16 +206,16 @@ expect(page).not_to have_content("No Orders found.") end - context 'with a different currency' do + context "with a different currency" do around do |example| currency_was = Spree::Config.currency - Spree::Config.currency = 'EUR' + Spree::Config.currency = "EUR" example.run Spree::Config.currency = currency_was end - it 'displays correct currency' do - page.assert_selector('section table td:last-child', exact_text: /€\d\.\d{2}/, count: user.orders.count) + it "displays correct currency" do + page.assert_selector("section table td:last-child", exact_text: /€\d\.\d{2}/, count: user.orders.count) end end end diff --git a/admin/spec/features/zones_spec.rb b/admin/spec/features/zones_spec.rb index 3d30e3deacb..e571310eff2 100644 --- a/admin/spec/features/zones_spec.rb +++ b/admin/spec/features/zones_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Zones", :js, type: :feature do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } let(:canada) { create(:country, iso: "CA") } let(:france) { create(:country, iso: "FR") } let(:usa) { create(:country) } diff --git a/admin/spec/generator/solidus_admin/component_generator_spec.rb b/admin/spec/generator/solidus_admin/component_generator_spec.rb index 09acb64bb3a..be2d9586874 100644 --- a/admin/spec/generator/solidus_admin/component_generator_spec.rb +++ b/admin/spec/generator/solidus_admin/component_generator_spec.rb @@ -1,35 +1,35 @@ # frozen_string_literal: true -require 'spec_helper' -require 'generators/solidus_admin/component/component_generator' +require "spec_helper" +require "generators/solidus_admin/component/component_generator" RSpec.describe SolidusAdmin::ComponentGenerator, type: :generator do it "creates a component with the given name" do run_generator %w[ui/foo bar baz] aggregate_failures do - expect(engine_path('app/components/solidus_admin/ui/foo/component.rb').read) - .to include('class SolidusAdmin::UI::Foo::Component <') + expect(engine_path("app/components/solidus_admin/ui/foo/component.rb").read) + .to include("class SolidusAdmin::UI::Foo::Component <") .and include(%{def initialize(bar:, baz:)}) - expect(engine_path('app/components/solidus_admin/ui/foo/component.yml').read) + expect(engine_path("app/components/solidus_admin/ui/foo/component.yml").read) .to match(/^en:$/) - expect(engine_path('app/components/solidus_admin/ui/foo/component.html.erb').read) - .to start_with(%{
}) end end diff --git a/admin/spec/helpers/solidus_admin/last_login_helper_spec.rb b/admin/spec/helpers/solidus_admin/last_login_helper_spec.rb index 9b2099f6973..ddb60bae128 100644 --- a/admin/spec/helpers/solidus_admin/last_login_helper_spec.rb +++ b/admin/spec/helpers/solidus_admin/last_login_helper_spec.rb @@ -21,8 +21,8 @@ expect(helper) .to receive(:time_ago_in_words) - .with(last_sign_in_time) - .and_return("2 days") + .with(last_sign_in_time) + .and_return("2 days") expect(helper.last_login(user)).to eq("2 days ago") end diff --git a/admin/spec/helpers/solidus_admin/layout_helper_spec.rb b/admin/spec/helpers/solidus_admin/layout_helper_spec.rb index cfe47f94961..852c09a2380 100644 --- a/admin/spec/helpers/solidus_admin/layout_helper_spec.rb +++ b/admin/spec/helpers/solidus_admin/layout_helper_spec.rb @@ -3,7 +3,7 @@ require "spec_helper" RSpec.describe SolidusAdmin::LayoutHelper, :helper do - describe '#current_locale' do + describe "#current_locale" do it "returns the current locale" do expect( helper.current_locale(backend: double(locale: :en)) @@ -11,7 +11,7 @@ end end - describe '#solidus_admin_title' do + describe "#solidus_admin_title" do it "includes the store name" do expect( helper.solidus_admin_title(store_name: "My Store") @@ -19,7 +19,7 @@ end it "includes the translated controller base name" do - expect(helper.solidus_admin_title(store_name: "My Store", controller_name: 'products')).to eq("My Store - Products") + expect(helper.solidus_admin_title(store_name: "My Store", controller_name: "products")).to eq("My Store - Products") end end end diff --git a/admin/spec/helpers/solidus_admin/solidus_form_helper_spec.rb b/admin/spec/helpers/solidus_admin/solidus_form_helper_spec.rb index 68b716a1b29..0c071f87d2b 100644 --- a/admin/spec/helpers/solidus_admin/solidus_form_helper_spec.rb +++ b/admin/spec/helpers/solidus_admin/solidus_form_helper_spec.rb @@ -3,7 +3,7 @@ require "spec_helper" RSpec.describe SolidusAdmin::SolidusFormHelper, :helper do - describe '#solidus_form_for' do + describe "#solidus_form_for" do it "renders form" do result = helper.solidus_form_for(Spree::Product.new, url: "/products") {} expect(result).to include(" { "/foo/bar/#{_1.slug}" } @@ -45,41 +45,41 @@ allow(Spree::Backend::Config).to receive(:menu_items).and_return([ Spree::BackendConfiguration::MenuItem.new( label: :item1, - icon: 'ri-inbox-line', + icon: "ri-inbox-line", condition: -> {}, match_path: %r{/foo}, - url: :foo, + url: :foo ), Spree::BackendConfiguration::MenuItem.new( label: :item2, - icon: 'shopping-cart', + icon: "shopping-cart", condition: -> {}, match_path: -> {}, url: "/bar" ), Spree::BackendConfiguration::MenuItem.new( label: :item3, - icon: 'shopping-cart', + icon: "shopping-cart", condition: -> {}, match_path: "foo", - url: -> {}, + url: -> {} ), Spree::BackendConfiguration::MenuItem.new( label: :item4, - icon: 'shopping-cart', + icon: "shopping-cart", condition: -> {}, match_path: nil, url: nil, children: [ Spree::BackendConfiguration::MenuItem.new( label: :item4_1, - icon: 'shopping-cart', + icon: "shopping-cart", condition: -> {}, match_path: nil, - url: nil, - ), - ], - ), + url: nil + ) + ] + ) ]) config = described_class.new @@ -88,45 +88,45 @@ expect(config.menu_items).to match([ { key: :item1, - icon: 'inbox-line', + icon: "inbox-line", route: a_kind_of(Proc), children: [], match_path: a_kind_of(Proc), - position: 0, + position: 0 }, { key: :item2, - icon: 'record-circle-line', + icon: "record-circle-line", route: a_kind_of(Proc), children: [], match_path: a_kind_of(Proc), - position: 1, + position: 1 }, { key: :item3, - icon: 'record-circle-line', + icon: "record-circle-line", route: a_kind_of(Proc), children: [], match_path: a_kind_of(Proc), - position: 2, + position: 2 }, { key: :item4, - icon: 'record-circle-line', + icon: "record-circle-line", route: a_kind_of(Proc), children: [ { key: :item4_1, - icon: 'record-circle-line', + icon: "record-circle-line", route: a_kind_of(Proc), children: [], match_path: a_kind_of(Proc), - position: 0, - }, + position: 0 + } ], match_path: a_kind_of(Proc), - position: 3, - }, + position: 3 + } ]) end end diff --git a/admin/spec/solidus_admin/form_builder_spec.rb b/admin/spec/solidus_admin/form_builder_spec.rb index 248150edda9..f7ba0787295 100644 --- a/admin/spec/solidus_admin/form_builder_spec.rb +++ b/admin/spec/solidus_admin/form_builder_spec.rb @@ -5,7 +5,7 @@ RSpec.describe SolidusAdmin::FormBuilder do let(:object) { Spree::Product.new } let(:builder) do - described_class.new(:product, object, ActionView::Base.empty, { html: { id: "_form" } }) + described_class.new(:product, object, ActionView::Base.empty, {html: {id: "_form"}}) end describe "#text_field" do @@ -62,7 +62,7 @@ it "renders checkboxes" do result = builder.checkbox_row( :taxon_ids, - options: [{ id: 1, label: "One" }, { id: 2, label: "Two" }], + options: [{id: 1, label: "One"}, {id: 2, label: "Two"}], row_title: "Taxons" ) expect(result).to include(" { solidus_admin.foo_path }, position: 1) - url_helpers = url_helpers(solidus_admin: { foo_path: "/foo" }) + url_helpers = url_helpers(solidus_admin: {foo_path: "/foo"}) expect(item.path(url_helpers)).to eq("/foo") end @@ -49,7 +49,7 @@ def url_helpers(solidus_admin: {}, spree: {}) describe "#current?" do it "returns true when the path matches the current request path" do item = described_class.new(key: "foo", route: :foo_path, position: 1) - url_helpers = url_helpers(solidus_admin: { foo_path: "/foo" }) + url_helpers = url_helpers(solidus_admin: {foo_path: "/foo"}) expect( item.current?(url_helpers, "/foo") @@ -58,7 +58,7 @@ def url_helpers(solidus_admin: {}, spree: {}) it "returns true when the path matches the current request base path" do item = described_class.new(key: "foo", route: :foo_path, position: 1) - url_helpers = url_helpers(solidus_admin: { foo_path: "/foo" }) + url_helpers = url_helpers(solidus_admin: {foo_path: "/foo"}) expect( item.current?(url_helpers, "/foo?bar=baz") @@ -67,7 +67,7 @@ def url_helpers(solidus_admin: {}, spree: {}) it "returns false when the path does not match the current request base path" do item = described_class.new(key: "foo", route: :foo_path, position: 1) - url_helpers = url_helpers(solidus_admin: { foo_path: "/foo" }) + url_helpers = url_helpers(solidus_admin: {foo_path: "/foo"}) expect( item.current?(url_helpers, "/bar") @@ -78,7 +78,7 @@ def url_helpers(solidus_admin: {}, spree: {}) describe "#active?" do it "returns true when it's the current item" do item = described_class.new(key: "foo", route: :foo_path, position: 1) - url_helpers = url_helpers(solidus_admin: { foo_path: "/foo" }) + url_helpers = url_helpers(solidus_admin: {foo_path: "/foo"}) expect( item.active?(url_helpers, "/foo") @@ -89,7 +89,7 @@ def url_helpers(solidus_admin: {}, spree: {}) item = described_class.new( key: "foo", route: :foo_path, position: 1, children: [described_class.new(key: "bar", route: :bar_path, position: 1)] ) - url_helpers = url_helpers(solidus_admin: { foo_path: "/foo", bar_path: "/bar" }) + url_helpers = url_helpers(solidus_admin: {foo_path: "/foo", bar_path: "/bar"}) expect( item.active?(url_helpers, "/bar") @@ -97,7 +97,7 @@ def url_helpers(solidus_admin: {}, spree: {}) end it "returns true when the match_path proc is present and matches" do - url_helpers = url_helpers(solidus_admin: { foo_path: "/foo" }) + url_helpers = url_helpers(solidus_admin: {foo_path: "/foo"}) item = described_class.new( key: "foo", route: :foo_path, position: 1, match_path: ->(path) { path.start_with?("/bar") } ) @@ -107,7 +107,7 @@ def url_helpers(solidus_admin: {}, spree: {}) it "returns false otherwise" do item = described_class.new(key: "foo", route: :foo_path, position: 1) - url_helpers = url_helpers(solidus_admin: { foo_path: "/foo" }) + url_helpers = url_helpers(solidus_admin: {foo_path: "/foo"}) expect( item.active?(url_helpers, "/bar") diff --git a/admin/spec/solidus_admin_spec.rb b/admin/spec/solidus_admin_spec.rb index 98998282276..f905a2fe468 100644 --- a/admin/spec/solidus_admin_spec.rb +++ b/admin/spec/solidus_admin_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe SolidusAdmin do - it 'has a version number' do + it "has a version number" do expect(SolidusAdmin::VERSION).not_to be nil end end diff --git a/admin/spec/spec_helper.rb b/admin/spec/spec_helper.rb index be6b774a657..f0f2bf958e8 100644 --- a/admin/spec/spec_helper.rb +++ b/admin/spec/spec_helper.rb @@ -2,7 +2,7 @@ # SIMPLECOV if ENV["COVERAGE"] - require 'simplecov' + require "simplecov" if ENV["COVERAGE_DIR"] SimpleCov.coverage_dir(ENV["COVERAGE_DIR"]) end @@ -10,55 +10,55 @@ require "simplecov-cobertura" SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter end - SimpleCov.command_name('solidus:admin') + SimpleCov.command_name("solidus:admin") SimpleCov.merge_timeout(3600) - SimpleCov.start('rails') do - add_filter '/shared_examples/' + SimpleCov.start("rails") do + add_filter "/shared_examples/" end end -require 'solidus_admin' -require 'rails-controller-testing' +require "solidus_admin" +require "rails-controller-testing" Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f } # SOLIDUS DUMMY APP -require 'spree/testing_support/dummy_app' +require "spree/testing_support/dummy_app" DummyApp.setup( - gem_root: File.expand_path('..', __dir__), - lib_name: 'solidus_admin' + gem_root: File.expand_path("..", __dir__), + lib_name: "solidus_admin" ) # Calling `draw` will completely rewrite the routes defined in the dummy app, # so we need to include the main solidus route. DummyApp::Application.routes.draw do - mount SolidusAdmin::Engine, at: '/admin' - mount Spree::Core::Engine, at: '/' + mount SolidusAdmin::Engine, at: "/admin" + mount Spree::Core::Engine, at: "/" end require "solidus_admin/testing_support/admin_assets" # RAILS require "rspec/rails" -ENV["RAILS_ENV"] ||= 'test' +ENV["RAILS_ENV"] ||= "test" Rails.application.config.i18n.raise_on_missing_translations = true # CAPYBARA & SELENIUM require "capybara/rspec" -require 'capybara-screenshot/rspec' +require "capybara-screenshot/rspec" require "spree/testing_support/capybara_driver" -Capybara.save_path = ENV['CIRCLE_ARTIFACTS'] if ENV['CIRCLE_ARTIFACTS'] +Capybara.save_path = ENV["CIRCLE_ARTIFACTS"] if ENV["CIRCLE_ARTIFACTS"] Capybara.exact = true Capybara.disable_animation = true -Capybara.default_max_wait_time = ENV['DEFAULT_MAX_WAIT_TIME'].to_f if ENV['DEFAULT_MAX_WAIT_TIME'].present? +Capybara.default_max_wait_time = ENV["DEFAULT_MAX_WAIT_TIME"].to_f if ENV["DEFAULT_MAX_WAIT_TIME"].present? Capybara.enable_aria_label = true # DATABASE CLEANER -require 'database_cleaner' +require "database_cleaner" # FACTORY BOT -require 'spree/testing_support/factory_bot' +require "spree/testing_support/factory_bot" Spree::TestingSupport::FactoryBot.add_paths_and_load! # VIEW COMPONENTS @@ -75,8 +75,8 @@ require "solidus_admin/testing_support/feature_helpers" # AXE - ACCESSIBILITY -require 'axe-rspec' -require 'axe-capybara' +require "axe-rspec" +require "axe-capybara" # DB Query Matchers require "db-query-matchers" @@ -123,7 +123,7 @@ config.include FileUtils, type: :generator config.before type: :generator do self.generator_class = described_class - self.destination_root = SolidusAdmin::Engine.root.join('../tmp/solidus_admin_generators') + self.destination_root = SolidusAdmin::Engine.root.join("../tmp/solidus_admin_generators") ::Rails::Generators.namespace = SolidusAdmin prepare_destination end diff --git a/api/Rakefile b/api/Rakefile index 5eafefdd818..4c28f7fdff9 100644 --- a/api/Rakefile +++ b/api/Rakefile @@ -1,18 +1,18 @@ # frozen_string_literal: true -require 'rubygems' -require 'rake' -require 'rake/testtask' -require 'rspec/core/rake_task' -require 'spree/testing_support/dummy_app/rake_tasks' -require 'bundler/gem_tasks' +require "rubygems" +require "rake" +require "rake/testtask" +require "rspec/core/rake_task" +require "spree/testing_support/dummy_app/rake_tasks" +require "bundler/gem_tasks" RSpec::Core::RakeTask.new task default: :spec DummyApp::RakeTasks.new( gem_root: File.expand_path(__dir__), - lib_name: 'solidus_api' + lib_name: "solidus_api" ) -task test_app: 'db:reset' +task test_app: "db:reset" diff --git a/api/app/controllers/spree/api/addresses_controller.rb b/api/app/controllers/spree/api/addresses_controller.rb index e8f8ac2e63f..6d5260812df 100644 --- a/api/app/controllers/spree/api/addresses_controller.rb +++ b/api/app/controllers/spree/api/addresses_controller.rb @@ -15,11 +15,10 @@ def update authorize! :update, @order, order_token find_address - if @order.update({ "#{@order_source}_attributes" => address_params }) - @address = @order.send(@order_source) + @address = @order.send(@order_source) + if @order.update({"#{@order_source}_attributes" => address_params}) respond_with(@address, default_template: :show) else - @address = @order.send(@order_source) invalid_resource!(@address) end end diff --git a/api/app/controllers/spree/api/base_controller.rb b/api/app/controllers/spree/api/base_controller.rb index 39eb481831b..5b172a341b8 100644 --- a/api/app/controllers/spree/api/base_controller.rb +++ b/api/app/controllers/spree/api/base_controller.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spree/api/responders' +require "spree/api/responders" module Spree module Api @@ -19,7 +19,7 @@ class BaseController < ActionController::Base self.admin_line_item_attributes = [:price, :variant_id, :sku] class_attribute :admin_metadata_attributes - self.admin_metadata_attributes = [{ admin_metadata: {} }] + self.admin_metadata_attributes = [{admin_metadata: {}}] before_action :deprecated_load_user before_action :authorize_for_order, if: proc { order_token.present? } @@ -147,7 +147,7 @@ def api_key def bearer_token pattern = /^Bearer / header = request.headers["Authorization"] - header.gsub(pattern, '') if header.present? && header.match(pattern) + header.gsub(pattern, "") if header.present? && header.match(pattern) end def order_token @@ -175,7 +175,7 @@ def product_scope end def variants_associations - [{ option_values: :option_type }, :prices, :images] + [{option_values: :option_type}, :prices, :images] end def product_includes @@ -202,16 +202,16 @@ def insufficient_stock_error(exception) render( json: { errors: [I18n.t(:quantity_is_not_available, scope: "spree.api.order")], - type: 'insufficient_stock' + type: "insufficient_stock" }, status: :unprocessable_entity ) end def paginate(resource) - resource. - page(params[:page]). - per(params[:per_page] || default_per_page) + resource + .page(params[:page]) + .per(params[:per_page] || default_per_page) end def default_per_page @@ -221,7 +221,7 @@ def default_per_page def invalid_transition(error) logger.error("invalid_transition #{error.event} from #{error.from} for #{error.object.class.name}. Error: #{error.inspect}") - render "spree/api/errors/could_not_transition", locals: { resource: error.object }, status: :unprocessable_entity + render "spree/api/errors/could_not_transition", locals: {resource: error.object}, status: :unprocessable_entity end end end diff --git a/api/app/controllers/spree/api/checkouts_controller.rb b/api/app/controllers/spree/api/checkouts_controller.rb index 32152d949bc..ea860e01627 100644 --- a/api/app/controllers/spree/api/checkouts_controller.rb +++ b/api/app/controllers/spree/api/checkouts_controller.rb @@ -16,26 +16,26 @@ class CheckoutsController < Spree::Api::BaseController def next authorize! :update, @order, order_token if !expected_total_ok?(params[:expected_total]) - respond_with(@order, default_template: 'spree/api/orders/expected_total_mismatch', status: 400) + respond_with(@order, default_template: "spree/api/orders/expected_total_mismatch", status: 400) return end @order.next! - respond_with(@order, default_template: 'spree/api/orders/show', status: 200) + respond_with(@order, default_template: "spree/api/orders/show", status: 200) end def advance authorize! :update, @order, order_token @order.contents.advance - respond_with(@order, default_template: 'spree/api/orders/show', status: 200) + respond_with(@order, default_template: "spree/api/orders/show", status: 200) end def complete authorize! :update, @order, order_token if !expected_total_ok?(params[:expected_total]) - respond_with(@order, default_template: 'spree/api/orders/expected_total_mismatch', status: 400) + respond_with(@order, default_template: "spree/api/orders/expected_total_mismatch", status: 400) else @order.complete! - respond_with(@order, default_template: 'spree/api/orders/show', status: 200) + respond_with(@order, default_template: "spree/api/orders/show", status: 200) end end @@ -51,7 +51,7 @@ def update if @order.completed? || @order.next! state_callback(:after) - respond_with(@order, default_template: 'spree/api/orders/show') + respond_with(@order, default_template: "spree/api/orders/show") end else invalid_resource!(@order) @@ -124,6 +124,7 @@ def order_id def expected_total_ok?(expected_total) return true if expected_total.blank? + @order.total == BigDecimal(expected_total) end end diff --git a/api/app/controllers/spree/api/countries_controller.rb b/api/app/controllers/spree/api/countries_controller.rb index dc9a7845fe7..c4b8365accd 100644 --- a/api/app/controllers/spree/api/countries_controller.rb +++ b/api/app/controllers/spree/api/countries_controller.rb @@ -6,11 +6,11 @@ class CountriesController < Spree::Api::BaseController skip_before_action :authenticate_user def index - @countries = Spree::Country. - accessible_by(current_ability). - ransack(params[:q]). - result. - order('name ASC') + @countries = Spree::Country + .accessible_by(current_ability) + .ransack(params[:q]) + .result + .order("name ASC") country = Spree::Country.order("updated_at ASC").last diff --git a/api/app/controllers/spree/api/coupon_codes_controller.rb b/api/app/controllers/spree/api/coupon_codes_controller.rb index b6863ddad3e..ed88491ebcc 100644 --- a/api/app/controllers/spree/api/coupon_codes_controller.rb +++ b/api/app/controllers/spree/api/coupon_codes_controller.rb @@ -13,10 +13,10 @@ def create @handler = Spree::Config.promotions.coupon_code_handler_class.new(@order).apply if @handler.successful? - render 'spree/api/promotions/handler', status: 200 + render "spree/api/promotions/handler", status: 200 else logger.error("apply_coupon_code_error=#{@handler.error.inspect}") - render 'spree/api/promotions/handler', status: 422 + render "spree/api/promotions/handler", status: 422 end end @@ -27,10 +27,10 @@ def destroy @handler = Spree::Config.promotions.coupon_code_handler_class.new(@order).remove if @handler.successful? - render 'spree/api/promotions/handler', status: 200 + render "spree/api/promotions/handler", status: 200 else logger.error("remove_coupon_code_error=#{@handler.error.inspect}") - render 'spree/api/promotions/handler', status: 422 + render "spree/api/promotions/handler", status: 422 end end diff --git a/api/app/controllers/spree/api/customer_returns_controller.rb b/api/app/controllers/spree/api/customer_returns_controller.rb index fc16de5dc0a..02567a0d5a2 100644 --- a/api/app/controllers/spree/api/customer_returns_controller.rb +++ b/api/app/controllers/spree/api/customer_returns_controller.rb @@ -22,11 +22,11 @@ def create def index authorize! :index, CustomerReturn - @customer_returns = @order. - customer_returns. - accessible_by(current_ability). - ransack(params[:q]). - result + @customer_returns = @order + .customer_returns + .accessible_by(current_ability) + .ransack(params[:q]) + .result @customer_returns = paginate(@customer_returns) @@ -66,17 +66,17 @@ def customer_return_params def build_customer_return customer_return_attributes = customer_return_params - return_items_params = customer_return_attributes. - delete(:return_items_attributes) + return_items_params = customer_return_attributes + .delete(:return_items_attributes) @customer_return = CustomerReturn.new(customer_return_attributes) @customer_return.return_items = return_items_params.map do |item_params| return_item = if item_params[:id] - Spree::ReturnItem.find(item_params[:id]) - else - Spree::ReturnItem.new - end + Spree::ReturnItem.find(item_params[:id]) + else + Spree::ReturnItem.new + end return_item.assign_attributes(item_params) diff --git a/api/app/controllers/spree/api/inventory_units_controller.rb b/api/app/controllers/spree/api/inventory_units_controller.rb index 7a25ec4fee1..c3ffd5937c2 100644 --- a/api/app/controllers/spree/api/inventory_units_controller.rb +++ b/api/app/controllers/spree/api/inventory_units_controller.rb @@ -16,7 +16,7 @@ def update inventory_unit.transaction do if inventory_unit.update(inventory_unit_params) fire - render :show, status: 200 + render :show, status: :ok else invalid_resource!(inventory_unit) end @@ -30,20 +30,19 @@ def inventory_unit end def prepare_event - return unless @event = params[:fire] + @event = params[:fire] + return unless @event can_event = "can_#{@event}?" - unless inventory_unit.respond_to?(can_event) && - inventory_unit.send(can_event) - render json: { exception: "cannot transition to #{@event}" }, - status: 200 + unless inventory_unit.respond_to?(can_event) && inventory_unit.send(can_event) + render json: {exception: "cannot transition to #{@event}"}, status: :ok false end end def fire - inventory_unit.send("#{@event}!") if @event + inventory_unit.send(:"#{@event}!") if @event end def inventory_unit_params diff --git a/api/app/controllers/spree/api/line_items_controller.rb b/api/app/controllers/spree/api/line_items_controller.rb index 0ac0b9ea63f..d5475ad673a 100644 --- a/api/app/controllers/spree/api/line_items_controller.rb +++ b/api/app/controllers/spree/api/line_items_controller.rb @@ -55,16 +55,16 @@ def find_line_item end def line_items_attributes - { line_items_attributes: { - id: params[:id], - quantity: params[:line_item][:quantity], - options: line_item_params[:options] || {}, - **extract_metadata - } } + {line_items_attributes: { + id: params[:id], + quantity: params[:line_item][:quantity], + options: line_item_params[:options] || {}, + **extract_metadata + }} end def extract_metadata - metadata = { customer_metadata: line_item_params[:customer_metadata] } + metadata = {customer_metadata: line_item_params[:customer_metadata]} if current_user_roles&.include?("admin") metadata[:admin_metadata] = line_item_params[:admin_metadata] diff --git a/api/app/controllers/spree/api/option_types_controller.rb b/api/app/controllers/spree/api/option_types_controller.rb index 88fa157faf2..b49fbf3adfa 100644 --- a/api/app/controllers/spree/api/option_types_controller.rb +++ b/api/app/controllers/spree/api/option_types_controller.rb @@ -4,10 +4,10 @@ module Spree module Api class OptionTypesController < Spree::Api::BaseController def index - if params[:ids] - @option_types = Spree::OptionType.includes(:option_values).accessible_by(current_ability).where(id: params[:ids].split(',')) + @option_types = if params[:ids] + Spree::OptionType.includes(:option_values).accessible_by(current_ability).where(id: params[:ids].split(",")) else - @option_types = Spree::OptionType.includes(:option_values).accessible_by(current_ability).load.ransack(params[:q]).result + Spree::OptionType.includes(:option_values).accessible_by(current_ability).load.ransack(params[:q]).result end respond_with(@option_types) end diff --git a/api/app/controllers/spree/api/option_values_controller.rb b/api/app/controllers/spree/api/option_values_controller.rb index 0feea2337e5..e1b72237482 100644 --- a/api/app/controllers/spree/api/option_values_controller.rb +++ b/api/app/controllers/spree/api/option_values_controller.rb @@ -4,10 +4,10 @@ module Spree module Api class OptionValuesController < Spree::Api::BaseController def index - if params[:ids] - @option_values = scope.where(id: params[:ids]) + @option_values = if params[:ids] + scope.where(id: params[:ids]) else - @option_values = scope.ransack(params[:q]).result.distinct + scope.ransack(params[:q]).result.distinct end respond_with(@option_values) end @@ -45,10 +45,10 @@ def destroy private def scope - if params[:option_type_id] - @scope ||= Spree::OptionType.find(params[:option_type_id]).option_values.accessible_by(current_ability) + @scope ||= if params[:option_type_id] + Spree::OptionType.find(params[:option_type_id]).option_values.accessible_by(current_ability) else - @scope ||= Spree::OptionValue.accessible_by(current_ability).load + Spree::OptionValue.accessible_by(current_ability).load end end diff --git a/api/app/controllers/spree/api/orders_controller.rb b/api/app/controllers/spree/api/orders_controller.rb index 45f0cf56d52..249baf174c8 100644 --- a/api/app/controllers/spree/api/orders_controller.rb +++ b/api/app/controllers/spree/api/orders_controller.rb @@ -58,7 +58,7 @@ def empty def index authorize! :admin, Order orders_includes = [ - { user: :store_credits }, + {user: :store_credits}, :line_items, :valid_store_credit_payments ] @@ -91,8 +91,9 @@ def update end def current - if current_api_user && @order = current_api_user.last_incomplete_spree_order(store: current_store) - respond_with(@order, default_template: :show, locals: { root_object: @order }) + @order = current_api_user.last_incomplete_spree_order(store: current_store) + if current_api_user && @order + respond_with(@order, default_template: :show, locals: {root_object: @order}) else head :no_content end @@ -122,7 +123,7 @@ def order_params def prevent_customer_metadata_update return unless @order&.completed? && cannot?(:admin, Spree::Order) - params[:order].delete(:customer_metadata) if params[:order] + params[:order]&.delete(:customer_metadata) end def normalize_params @@ -169,13 +170,13 @@ def permitted_payment_attributes end def find_order(_lock = false) - @order = Spree::Order. - includes(line_items: [:adjustments, { variant: :images }], - payments: :payment_method, - shipments: { - shipping_rates: { shipping_method: :zones, taxes: :tax_rate } - }). - find_by!(number: params[:id]) + @order = Spree::Order + .includes(line_items: [:adjustments, {variant: :images}], + payments: :payment_method, + shipments: { + shipping_rates: {shipping_method: :zones, taxes: :tax_rate} + }) + .find_by!(number: params[:id]) end def order_id diff --git a/api/app/controllers/spree/api/payments_controller.rb b/api/app/controllers/spree/api/payments_controller.rb index ca6bea4ae47..de38078f55e 100644 --- a/api/app/controllers/spree/api/payments_controller.rb +++ b/api/app/controllers/spree/api/payments_controller.rb @@ -30,7 +30,7 @@ def create def update authorize! params[:action], @payment if !@payment.pending? - render 'update_forbidden', status: 403 + render "update_forbidden", status: 403 elsif @payment.update(payment_params) respond_with(@payment, default_template: :show) else @@ -71,7 +71,7 @@ def find_payment def perform_payment_action(action, *args) authorize! action, Payment - @payment.send("#{action}!", *args) + @payment.send(:"#{action}!", *args) respond_with(@payment, default_template: :show) end diff --git a/api/app/controllers/spree/api/product_properties_controller.rb b/api/app/controllers/spree/api/product_properties_controller.rb index 97b7f432d64..02e595af80c 100644 --- a/api/app/controllers/spree/api/product_properties_controller.rb +++ b/api/app/controllers/spree/api/product_properties_controller.rb @@ -7,11 +7,11 @@ class ProductPropertiesController < Spree::Api::BaseController before_action :product_property, only: [:show, :update, :destroy] def index - @product_properties = @product. - product_properties. - accessible_by(current_ability). - ransack(params[:q]). - result + @product_properties = @product + .product_properties + .accessible_by(current_ability) + .ransack(params[:q]) + .result @product_properties = paginate(@product_properties) @@ -60,7 +60,7 @@ def find_product def product_property if @product @product_property ||= @product.product_properties.find_by(id: params[:id]) - @product_property ||= @product.product_properties.includes(:property).where(spree_properties: { name: params[:id] }).first! + @product_property ||= @product.product_properties.includes(:property).where(spree_properties: {name: params[:id]}).first! authorize! :show, @product_property end end diff --git a/api/app/controllers/spree/api/products_controller.rb b/api/app/controllers/spree/api/products_controller.rb index effd6a178c3..b2cf5a06c69 100644 --- a/api/app/controllers/spree/api/products_controller.rb +++ b/api/app/controllers/spree/api/products_controller.rb @@ -12,17 +12,17 @@ def index :variants, :option_types, :product_properties, - { classifications: :taxon } + {classifications: :taxon} ] @products = product_scope - .ransack(params[:q]) - .result - .includes(products_includes) + .ransack(params[:q]) + .result + .includes(products_includes) end @products = paginate(@products.distinct) expires_in 15.minutes, public: true - headers['Surrogate-Control'] = "max-age=#{15.minutes}" + headers["Surrogate-Control"] = "max-age=#{15.minutes}" respond_with(@products) end @@ -32,8 +32,8 @@ def new def show @product = find_product(params[:id]) expires_in 15.minutes, public: true - headers['Surrogate-Control'] = "max-age=#{15.minutes}" - headers['Surrogate-Key'] = "product_id=1" + headers["Surrogate-Control"] = "max-age=#{15.minutes}" + headers["Surrogate-Key"] = "product_id=1" respond_with(@product) end @@ -75,7 +75,7 @@ def create params[:product][:available_on] ||= Time.current set_up_shipping_category - options = { variants_attrs: variants_params, options_attrs: option_types_params } + options = {variants_attrs: variants_params, options_attrs: option_types_params} @product = Core::Importer::Product.new(nil, product_params, options).create if @product.persisted? @@ -89,7 +89,7 @@ def update @product = find_product(params[:id]) authorize! :update, @product - options = { variants_attrs: variants_params, options_attrs: option_types_params } + options = {variants_attrs: variants_params, options_attrs: option_types_params} @product = Core::Importer::Product.new(@product, product_params, options).update if @product.errors.empty? @@ -111,7 +111,7 @@ def destroy def product_params product_params = params.require(:product).permit(permitted_product_attributes) if product_params[:taxon_ids].present? - product_params[:taxon_ids] = product_params[:taxon_ids].split(',') + product_params[:taxon_ids] = product_params[:taxon_ids].split(",") end product_params end @@ -133,7 +133,8 @@ def option_types_params end def set_up_shipping_category - if shipping_category = params[:product].delete(:shipping_category) + shipping_category = params[:product].delete(:shipping_category) + if shipping_category id = Spree::ShippingCategory.find_or_create_by(name: shipping_category).id params[:product][:shipping_category_id] = id end diff --git a/api/app/controllers/spree/api/return_authorizations_controller.rb b/api/app/controllers/spree/api/return_authorizations_controller.rb index 718e5119b0c..2a5e77ab22a 100644 --- a/api/app/controllers/spree/api/return_authorizations_controller.rb +++ b/api/app/controllers/spree/api/return_authorizations_controller.rb @@ -27,11 +27,11 @@ def destroy def index authorize! :admin, ReturnAuthorization - @return_authorizations = @order. - return_authorizations. - accessible_by(current_ability). - ransack(params[:q]). - result + @return_authorizations = @order + .return_authorizations + .accessible_by(current_ability) + .ransack(params[:q]) + .result @return_authorizations = paginate(@return_authorizations) diff --git a/api/app/controllers/spree/api/shipments_controller.rb b/api/app/controllers/spree/api/shipments_controller.rb index 7268f615f47..ac5d97145d3 100644 --- a/api/app/controllers/spree/api/shipments_controller.rb +++ b/api/app/controllers/spree/api/shipments_controller.rb @@ -14,7 +14,7 @@ def mine @shipments = Spree::Shipment .reverse_chronological .joins(:order) - .where(spree_orders: { user_id: current_api_user.id }) + .where(spree_orders: {user_id: current_api_user.id}) .includes(mine_includes) .ransack(params[:q]).result @@ -57,7 +57,7 @@ def ready @shipment.ready! else logger.error("cannot_ready_shipment shipment_state=#{@shipment.state}") - render('spree/api/shipments/cannot_ready_shipment', status: 422) && return + render("spree/api/shipments/cannot_ready_shipment", status: 422) && return end end respond_with(@shipment, default_template: :show) @@ -66,7 +66,7 @@ def ready def ship authorize! :ship, @shipment unless @shipment.shipped? - @shipment.suppress_mailer = (params[:send_mailer] == 'false') + @shipment.suppress_mailer = (params[:send_mailer] == "false") @shipment.ship! end respond_with(@shipment, default_template: :show) @@ -75,7 +75,7 @@ def ship def add quantity = params[:quantity].to_i - @shipment.order.contents.add(variant, quantity, { shipment: @shipment }) + @shipment.order.contents.add(variant, quantity, {shipment: @shipment}) respond_with(@shipment, default_template: :show) end @@ -86,7 +86,7 @@ def remove @shipment.errors.add(:base, :cannot_remove_items_shipment_state, state: @shipment.state) invalid_resource!(@shipment) else - @shipment.order.contents.remove(variant, quantity, { shipment: @shipment }) + @shipment.order.contents.remove(variant, quantity, {shipment: @shipment}) @shipment.reload if @shipment.persisted? respond_with(@shipment, default_template: :show) end @@ -110,19 +110,19 @@ def transfer_to_shipment ) if fulfilment_changer.run! - render json: { success: true, message: t('spree.api.shipment.transfer_success') }, status: :accepted + render json: {success: true, message: t("spree.api.shipment.transfer_success")}, status: :accepted else - render json: { success: false, message: fulfilment_changer.errors.full_messages.to_sentence }, status: :accepted + render json: {success: false, message: fulfilment_changer.errors.full_messages.to_sentence}, status: :accepted end end private def load_transfer_params - @original_shipment = Spree::Shipment.find_by!(number: params[:original_shipment_number]) - @order = @original_shipment.order - @variant = Spree::Variant.find(params[:variant_id]) - @quantity = params[:quantity].to_i + @original_shipment = Spree::Shipment.find_by!(number: params[:original_shipment_number]) + @order = @original_shipment.order + @variant = Spree::Variant.find(params[:variant_id]) + @quantity = params[:quantity].to_i authorize! [:update, :destroy], @original_shipment authorize! :create, Shipment end diff --git a/api/app/controllers/spree/api/states_controller.rb b/api/app/controllers/spree/api/states_controller.rb index 87f96aa8ed7..1a0788334b6 100644 --- a/api/app/controllers/spree/api/states_controller.rb +++ b/api/app/controllers/spree/api/states_controller.rb @@ -6,8 +6,8 @@ class StatesController < Spree::Api::BaseController skip_before_action :authenticate_user def index - @states = scope.ransack(params[:q]).result. - includes(:country).order('name ASC') + @states = scope.ransack(params[:q]).result + .includes(:country).order("name ASC") if params[:page] || params[:per_page] @states = paginate(@states) diff --git a/api/app/controllers/spree/api/stock_items_controller.rb b/api/app/controllers/spree/api/stock_items_controller.rb index 6fddc0999fb..b15e4e7675b 100644 --- a/api/app/controllers/spree/api/stock_items_controller.rb +++ b/api/app/controllers/spree/api/stock_items_controller.rb @@ -62,7 +62,7 @@ def load_stock_location end def scope - includes = { variant: [{ option_values: :option_type }, :product] } + includes = {variant: [{option_values: :option_type}, :product]} @stock_location.stock_items.accessible_by(current_ability).includes(includes) end @@ -77,14 +77,15 @@ def count_on_hand_adjustment def adjust_stock_item_count_on_hand(count_on_hand_adjustment) if @stock_item.count_on_hand + count_on_hand_adjustment < 0 - raise StockLocation::InvalidMovementError.new(t('spree.api.stock_not_below_zero')) + raise StockLocation::InvalidMovementError.new(t("spree.api.stock_not_below_zero")) end + @stock_movement = @stock_location.move(@stock_item.variant, count_on_hand_adjustment, current_api_user) @stock_item = @stock_movement.stock_item end def render_stock_items_error - render json: { error: t('spree.api.stock_not_below_zero') }, status: 422 + render json: {error: t("spree.api.stock_not_below_zero")}, status: 422 end end end diff --git a/api/app/controllers/spree/api/stock_locations_controller.rb b/api/app/controllers/spree/api/stock_locations_controller.rb index 37892c5b615..a933ef723d4 100644 --- a/api/app/controllers/spree/api/stock_locations_controller.rb +++ b/api/app/controllers/spree/api/stock_locations_controller.rb @@ -6,11 +6,11 @@ class StockLocationsController < Spree::Api::BaseController def index authorize! :index, StockLocation - @stock_locations = StockLocation. - accessible_by(current_ability). - order('name ASC'). - ransack(params[:q]). - result + @stock_locations = StockLocation + .accessible_by(current_ability) + .order("name ASC") + .ransack(params[:q]) + .result @stock_locations = paginate(@stock_locations) diff --git a/api/app/controllers/spree/api/taxonomies_controller.rb b/api/app/controllers/spree/api/taxonomies_controller.rb index a15d703a487..9b22ef7f829 100644 --- a/api/app/controllers/spree/api/taxonomies_controller.rb +++ b/api/app/controllers/spree/api/taxonomies_controller.rb @@ -43,18 +43,18 @@ def destroy private def taxonomies - @taxonomies = Taxonomy. - accessible_by(current_ability). - order('name'). - includes(root: :children). - ransack(params[:q]). - result + @taxonomies = Taxonomy + .accessible_by(current_ability) + .order("name") + .includes(root: :children) + .ransack(params[:q]) + .result end def taxonomy - @taxonomy ||= Spree::Taxonomy.accessible_by(current_ability, :show). - includes(root: :children). - find(params[:id]) + @taxonomy ||= Spree::Taxonomy.accessible_by(current_ability, :show) + .includes(root: :children) + .find(params[:id]) end def taxonomy_params diff --git a/api/app/controllers/spree/api/taxons_controller.rb b/api/app/controllers/spree/api/taxons_controller.rb index 70da15d8645..7a84308004e 100644 --- a/api/app/controllers/spree/api/taxons_controller.rb +++ b/api/app/controllers/spree/api/taxons_controller.rb @@ -4,12 +4,12 @@ module Spree module Api class TaxonsController < Spree::Api::BaseController def index - if taxonomy - @taxons = taxonomy.root.children + @taxons = if taxonomy + taxonomy.root.children elsif params[:ids] - @taxons = Spree::Taxon.accessible_by(current_ability).where(id: params[:ids].split(',')) + Spree::Taxon.accessible_by(current_ability).where(id: params[:ids].split(",")) else - @taxons = Spree::Taxon.accessible_by(current_ability).order(:taxonomy_id, :lft).ransack(params[:q]).result + Spree::Taxon.accessible_by(current_ability).order(:taxonomy_id, :lft).ransack(params[:q]).result end unless params[:without_children] @@ -36,7 +36,7 @@ def create taxonomy = Spree::Taxonomy.find_by(id: params[:taxonomy_id]) if taxonomy.nil? - @taxon.errors.add(:taxonomy_id, I18n.t('spree.api.invalid_taxonomy_id')) + @taxon.errors.add(:taxonomy_id, I18n.t("spree.api.invalid_taxonomy_id")) invalid_resource!(@taxon) && return end @@ -78,7 +78,7 @@ def products product_properties: true, classifications: true } - @product_attributes = %i(id name display_price) + @product_attributes = %i[id name display_price] end render "spree/api/products/index" end diff --git a/api/app/controllers/spree/api/variants_controller.rb b/api/app/controllers/spree/api/variants_controller.rb index 39b584ec76f..fe739b30ce6 100644 --- a/api/app/controllers/spree/api/variants_controller.rb +++ b/api/app/controllers/spree/api/variants_controller.rb @@ -63,10 +63,10 @@ def product end def scope - if @product - variants = @product.variants_including_master + variants = if @product + @product.variants_including_master else - variants = Spree::Variant + Spree::Variant end if current_ability.can?(:manage, Variant) && params[:show_deleted] @@ -89,7 +89,7 @@ def variant_params end def include_list - [{ option_values: :option_type }, :product, :prices, :images, { stock_items: :stock_location }] + [{option_values: :option_type}, :product, :prices, :images, {stock_items: :stock_location}] end end end diff --git a/api/app/controllers/spree/api/zones_controller.rb b/api/app/controllers/spree/api/zones_controller.rb index 9e5f47838ca..9fd92ac226d 100644 --- a/api/app/controllers/spree/api/zones_controller.rb +++ b/api/app/controllers/spree/api/zones_controller.rb @@ -20,11 +20,11 @@ def destroy end def index - @zones = Spree::Zone. - accessible_by(current_ability). - order('name ASC'). - ransack(params[:q]). - result + @zones = Spree::Zone + .accessible_by(current_ability) + .order("name ASC") + .ransack(params[:q]) + .result @zones = paginate(@zones) diff --git a/api/app/views/spree/api/addresses/_address.json.jbuilder b/api/app/views/spree/api/addresses/_address.json.jbuilder index 388d5bf5846..ac9094efe9b 100644 --- a/api/app/views/spree/api/addresses/_address.json.jbuilder +++ b/api/app/views/spree/api/addresses/_address.json.jbuilder @@ -1,17 +1,17 @@ # frozen_string_literal: true json.cache! address do - json.(address, *address_attributes) + json.call(address, *address_attributes) json.country do if address.country - json.(address.country, *country_attributes) + json.call(address.country, *country_attributes) else json.nil! end end json.state do if address.state - json.(address.state, *state_attributes) + json.call(address.state, *state_attributes) else json.nil! end diff --git a/api/app/views/spree/api/adjustments/_adjustment.json.jbuilder b/api/app/views/spree/api/adjustments/_adjustment.json.jbuilder index 5205c5327ca..e09a86786c9 100644 --- a/api/app/views/spree/api/adjustments/_adjustment.json.jbuilder +++ b/api/app/views/spree/api/adjustments/_adjustment.json.jbuilder @@ -1,6 +1,6 @@ # frozen_string_literal: true json.cache! [I18n.locale, adjustment] do - json.(adjustment, *adjustment_attributes) + json.call(adjustment, *adjustment_attributes) json.display_amount(adjustment.display_amount.to_s) end diff --git a/api/app/views/spree/api/countries/index.json.jbuilder b/api/app/views/spree/api/countries/index.json.jbuilder index efe2b0208c8..fcdeb619d29 100644 --- a/api/app/views/spree/api/countries/index.json.jbuilder +++ b/api/app/views/spree/api/countries/index.json.jbuilder @@ -1,4 +1,4 @@ # frozen_string_literal: true -json.countries(@countries) { |country| json.(country, *country_attributes) } -json.partial! 'spree/api/shared/pagination', pagination: @countries +json.countries(@countries) { |country| json.call(country, *country_attributes) } +json.partial! "spree/api/shared/pagination", pagination: @countries diff --git a/api/app/views/spree/api/countries/show.json.jbuilder b/api/app/views/spree/api/countries/show.json.jbuilder index 83e608fdc89..94898f10a00 100644 --- a/api/app/views/spree/api/countries/show.json.jbuilder +++ b/api/app/views/spree/api/countries/show.json.jbuilder @@ -1,6 +1,6 @@ # frozen_string_literal: true -json.(@country, *country_attributes) +json.call(@country, *country_attributes) json.states(@country.states) do |state| - json.(state, :id, :name, :abbr, :country_id) + json.call(state, :id, :name, :abbr, :country_id) end diff --git a/api/app/views/spree/api/credit_cards/_credit_card.json.jbuilder b/api/app/views/spree/api/credit_cards/_credit_card.json.jbuilder index 35e336910ac..2b48e279088 100644 --- a/api/app/views/spree/api/credit_cards/_credit_card.json.jbuilder +++ b/api/app/views/spree/api/credit_cards/_credit_card.json.jbuilder @@ -1,7 +1,7 @@ # frozen_string_literal: true json.cache! [I18n.locale, credit_card] do - json.(credit_card, *creditcard_attributes) + json.call(credit_card, *creditcard_attributes) json.address do if credit_card.address json.partial!("spree/api/addresses/address", address: credit_card.address) diff --git a/api/app/views/spree/api/credit_cards/index.json.jbuilder b/api/app/views/spree/api/credit_cards/index.json.jbuilder index 374346646ae..13573b769ab 100644 --- a/api/app/views/spree/api/credit_cards/index.json.jbuilder +++ b/api/app/views/spree/api/credit_cards/index.json.jbuilder @@ -3,4 +3,4 @@ json.credit_cards(@credit_cards) do |credit_card| json.partial!("spree/api/credit_cards/credit_card", credit_card:) end -json.partial! 'spree/api/shared/pagination', pagination: @credit_cards +json.partial! "spree/api/shared/pagination", pagination: @credit_cards diff --git a/api/app/views/spree/api/customer_returns/index.json.jbuilder b/api/app/views/spree/api/customer_returns/index.json.jbuilder index db96fca4a62..276c83e35a6 100644 --- a/api/app/views/spree/api/customer_returns/index.json.jbuilder +++ b/api/app/views/spree/api/customer_returns/index.json.jbuilder @@ -1,6 +1,6 @@ # frozen_string_literal: true json.customer_returns(@customer_returns) do |customer_return| - json.(customer_return, *customer_return_attributes) + json.call(customer_return, *customer_return_attributes) end -json.partial! 'spree/api/shared/pagination', pagination: @customer_returns +json.partial! "spree/api/shared/pagination", pagination: @customer_returns diff --git a/api/app/views/spree/api/customer_returns/show.json.jbuilder b/api/app/views/spree/api/customer_returns/show.json.jbuilder index d4fc47847a8..d182e6c73c7 100644 --- a/api/app/views/spree/api/customer_returns/show.json.jbuilder +++ b/api/app/views/spree/api/customer_returns/show.json.jbuilder @@ -1,3 +1,3 @@ # frozen_string_literal: true -json.(@customer_return, *customer_return_attributes) +json.call(@customer_return, *customer_return_attributes) diff --git a/api/app/views/spree/api/errors/invalid_api_key.json.jbuilder b/api/app/views/spree/api/errors/invalid_api_key.json.jbuilder index ef6fb11954b..6eb6759ded1 100644 --- a/api/app/views/spree/api/errors/invalid_api_key.json.jbuilder +++ b/api/app/views/spree/api/errors/invalid_api_key.json.jbuilder @@ -1,3 +1,3 @@ # frozen_string_literal: true -json.error(I18n.t('spree.api.invalid_api_key', key: api_key)) +json.error(I18n.t("spree.api.invalid_api_key", key: api_key)) diff --git a/api/app/views/spree/api/images/_image.json.jbuilder b/api/app/views/spree/api/images/_image.json.jbuilder index 83b1df55909..b5f22e06694 100644 --- a/api/app/views/spree/api/images/_image.json.jbuilder +++ b/api/app/views/spree/api/images/_image.json.jbuilder @@ -1,7 +1,7 @@ # frozen_string_literal: true -json.(image, *image_attributes) -json.(image, :viewable_type, :viewable_id) +json.call(image, *image_attributes) +json.call(image, :viewable_type, :viewable_id) Spree::Image.attachment_definitions[:attachment][:styles].each_key do |key| json.set! "#{key}_url", image.url(key) diff --git a/api/app/views/spree/api/inventory_units/show.json.jbuilder b/api/app/views/spree/api/inventory_units/show.json.jbuilder index e41cc54d0bc..5a4d3c30cca 100644 --- a/api/app/views/spree/api/inventory_units/show.json.jbuilder +++ b/api/app/views/spree/api/inventory_units/show.json.jbuilder @@ -1,3 +1,3 @@ # frozen_string_literal: true -json.(@inventory_unit, *inventory_unit_attributes) +json.call(@inventory_unit, *inventory_unit_attributes) diff --git a/api/app/views/spree/api/line_items/_line_item.json.jbuilder b/api/app/views/spree/api/line_items/_line_item.json.jbuilder index 3229f371489..f188b44bdb1 100644 --- a/api/app/views/spree/api/line_items/_line_item.json.jbuilder +++ b/api/app/views/spree/api/line_items/_line_item.json.jbuilder @@ -1,13 +1,13 @@ # frozen_string_literal: true json.cache! [I18n.locale, line_item] do - json.(line_item, *line_item_attributes) + json.call(line_item, *line_item_attributes) json.single_display_amount(line_item.single_display_amount.to_s) json.display_amount(line_item.display_amount.to_s) json.total(line_item.total) json.variant do json.partial!("spree/api/variants/small", variant: line_item.variant) - json.(line_item.variant, :product_id) + json.call(line_item.variant, :product_id) json.images(line_item.variant.gallery.images) do |image| json.partial!("spree/api/images/image", image:) end diff --git a/api/app/views/spree/api/option_types/_option_type.json.jbuilder b/api/app/views/spree/api/option_types/_option_type.json.jbuilder index 71bf2481ebc..0126fba48d9 100644 --- a/api/app/views/spree/api/option_types/_option_type.json.jbuilder +++ b/api/app/views/spree/api/option_types/_option_type.json.jbuilder @@ -1,6 +1,6 @@ # frozen_string_literal: true -json.(option_type, *option_type_attributes) +json.call(option_type, *option_type_attributes) json.option_values(option_type.option_values) do |option_value| - json.(option_value, *option_value_attributes) + json.call(option_value, *option_value_attributes) end diff --git a/api/app/views/spree/api/option_values/_option_value.json.jbuilder b/api/app/views/spree/api/option_values/_option_value.json.jbuilder index 9c7ab9ecef0..bdc4e8ab977 100644 --- a/api/app/views/spree/api/option_values/_option_value.json.jbuilder +++ b/api/app/views/spree/api/option_values/_option_value.json.jbuilder @@ -1,3 +1,3 @@ # frozen_string_literal: true -json.(option_value, *option_value_attributes) +json.call(option_value, *option_value_attributes) diff --git a/api/app/views/spree/api/orders/_big.json.jbuilder b/api/app/views/spree/api/orders/_big.json.jbuilder index 35e50f82c3a..52b0d306e6f 100644 --- a/api/app/views/spree/api/orders/_big.json.jbuilder +++ b/api/app/views/spree/api/orders/_big.json.jbuilder @@ -2,7 +2,7 @@ json.partial!("spree/api/orders/order", order:) json.payment_methods(order.available_payment_methods) do |payment_method| - json.(payment_method, :id, :name, :partial_name) + json.call(payment_method, :id, :name, :partial_name) json.method_type payment_method.partial_name end json.bill_address do @@ -23,8 +23,8 @@ json.line_items(order.line_items) do |line_item| json.partial!("spree/api/line_items/line_item", line_item:) end json.payments(order.payments) do |payment| - json.(payment, *payment_attributes) - json.payment_method { json.(payment.payment_method, :id, :name) } + json.call(payment, *payment_attributes) + json.payment_method { json.call(payment.payment_method, :id, :name) } json.source do ## # payment.source could be a Spree::Payment. If it is then we need to call diff --git a/api/app/views/spree/api/orders/_order.json.jbuilder b/api/app/views/spree/api/orders/_order.json.jbuilder index 13990c78799..f8784f17f2a 100644 --- a/api/app/views/spree/api/orders/_order.json.jbuilder +++ b/api/app/views/spree/api/orders/_order.json.jbuilder @@ -1,7 +1,7 @@ # frozen_string_literal: true json.cache! [I18n.locale, order] do - json.(order, *order_attributes) + json.call(order, *order_attributes) json.display_item_total(order.display_item_total.to_s) json.total_quantity(order.line_items.to_a.sum(&:quantity)) json.display_total(order.display_total.to_s) diff --git a/api/app/views/spree/api/orders/index.json.jbuilder b/api/app/views/spree/api/orders/index.json.jbuilder index 5ad9b405d2f..df9a142b340 100644 --- a/api/app/views/spree/api/orders/index.json.jbuilder +++ b/api/app/views/spree/api/orders/index.json.jbuilder @@ -3,4 +3,4 @@ json.orders(@orders) do |order| json.partial!("spree/api/orders/order", order:) end -json.partial! 'spree/api/shared/pagination', pagination: @orders +json.partial! "spree/api/shared/pagination", pagination: @orders diff --git a/api/app/views/spree/api/orders/mine.json.jbuilder b/api/app/views/spree/api/orders/mine.json.jbuilder index a3e1d075f8f..7cc44d858bd 100644 --- a/api/app/views/spree/api/orders/mine.json.jbuilder +++ b/api/app/views/spree/api/orders/mine.json.jbuilder @@ -3,4 +3,4 @@ json.orders(@orders) do |order| json.partial!("spree/api/orders/big", order:) end -json.partial! 'spree/api/shared/pagination', pagination: @orders +json.partial! "spree/api/shared/pagination", pagination: @orders diff --git a/api/app/views/spree/api/payments/credit_over_limit.json.jbuilder b/api/app/views/spree/api/payments/credit_over_limit.json.jbuilder index 2d50c14e8e8..fc0d5bbdc36 100644 --- a/api/app/views/spree/api/payments/credit_over_limit.json.jbuilder +++ b/api/app/views/spree/api/payments/credit_over_limit.json.jbuilder @@ -1,3 +1,3 @@ # frozen_string_literal: true -json.error(I18n.t('spree.api.payment.credit_over_limit', limit: @payment.credit_allowed)) +json.error(I18n.t("spree.api.payment.credit_over_limit", limit: @payment.credit_allowed)) diff --git a/api/app/views/spree/api/payments/index.json.jbuilder b/api/app/views/spree/api/payments/index.json.jbuilder index a44b41ca461..dbbd28b00cf 100644 --- a/api/app/views/spree/api/payments/index.json.jbuilder +++ b/api/app/views/spree/api/payments/index.json.jbuilder @@ -1,4 +1,4 @@ # frozen_string_literal: true -json.payments(@payments) { |payment| json.(payment, *payment_attributes) } -json.partial! 'spree/api/shared/pagination', pagination: @payments +json.payments(@payments) { |payment| json.call(payment, *payment_attributes) } +json.partial! "spree/api/shared/pagination", pagination: @payments diff --git a/api/app/views/spree/api/payments/new.json.jbuilder b/api/app/views/spree/api/payments/new.json.jbuilder index ea32d9d9871..2f3796f5360 100644 --- a/api/app/views/spree/api/payments/new.json.jbuilder +++ b/api/app/views/spree/api/payments/new.json.jbuilder @@ -2,5 +2,5 @@ json.attributes([*payment_attributes]) json.payment_methods(@payment_methods) do |payment_method| - json.(payment_method, *payment_method_attributes) + json.call(payment_method, *payment_method_attributes) end diff --git a/api/app/views/spree/api/payments/show.json.jbuilder b/api/app/views/spree/api/payments/show.json.jbuilder index c927375c66d..679bd8af5aa 100644 --- a/api/app/views/spree/api/payments/show.json.jbuilder +++ b/api/app/views/spree/api/payments/show.json.jbuilder @@ -1,3 +1,3 @@ # frozen_string_literal: true -json.(@payment, *payment_attributes) +json.call(@payment, *payment_attributes) diff --git a/api/app/views/spree/api/payments/source_views/_gateway.json.jbuilder b/api/app/views/spree/api/payments/source_views/_gateway.json.jbuilder index a4e3b8e7a1b..41092dfb731 100644 --- a/api/app/views/spree/api/payments/source_views/_gateway.json.jbuilder +++ b/api/app/views/spree/api/payments/source_views/_gateway.json.jbuilder @@ -5,4 +5,4 @@ if current_user_roles.include?("admin") attrs += [:gateway_customer_profile_id, :gateway_payment_profile_id] end -json.(payment_source, *attrs) +json.call(payment_source, *attrs) diff --git a/api/app/views/spree/api/payments/source_views/_store_credit.json.jbuilder b/api/app/views/spree/api/payments/source_views/_store_credit.json.jbuilder index 44a494f8df3..198718321be 100644 --- a/api/app/views/spree/api/payments/source_views/_store_credit.json.jbuilder +++ b/api/app/views/spree/api/payments/source_views/_store_credit.json.jbuilder @@ -1,5 +1,5 @@ # frozen_string_literal: true -json.(payment_source, :id, :memo, :created_at) +json.call(payment_source, :id, :memo, :created_at) json.created_by payment_source.created_by.email json.category payment_source.category, :id, :name diff --git a/api/app/views/spree/api/payments/update_forbidden.json.jbuilder b/api/app/views/spree/api/payments/update_forbidden.json.jbuilder index 2c00a7a9f15..28afd62dc54 100644 --- a/api/app/views/spree/api/payments/update_forbidden.json.jbuilder +++ b/api/app/views/spree/api/payments/update_forbidden.json.jbuilder @@ -1,3 +1,3 @@ # frozen_string_literal: true -json.error(I18n.t('spree.api.payment.update_forbidden', state: @payment.state)) +json.error(I18n.t("spree.api.payment.update_forbidden", state: @payment.state)) diff --git a/api/app/views/spree/api/product_properties/index.json.jbuilder b/api/app/views/spree/api/product_properties/index.json.jbuilder index fb5831b5934..da061ffe822 100644 --- a/api/app/views/spree/api/product_properties/index.json.jbuilder +++ b/api/app/views/spree/api/product_properties/index.json.jbuilder @@ -1,6 +1,6 @@ # frozen_string_literal: true json.product_properties(@product_properties) do |product_property| - json.(product_property, *product_property_attributes) + json.call(product_property, *product_property_attributes) end -json.partial! 'spree/api/shared/pagination', pagination: @product_properties +json.partial! "spree/api/shared/pagination", pagination: @product_properties diff --git a/api/app/views/spree/api/product_properties/show.json.jbuilder b/api/app/views/spree/api/product_properties/show.json.jbuilder index dfea7440bfa..efac0e712c4 100644 --- a/api/app/views/spree/api/product_properties/show.json.jbuilder +++ b/api/app/views/spree/api/product_properties/show.json.jbuilder @@ -1,3 +1,3 @@ # frozen_string_literal: true -json.(@product_property, *product_property_attributes) +json.call(@product_property, *product_property_attributes) diff --git a/api/app/views/spree/api/products/_product.json.jbuilder b/api/app/views/spree/api/products/_product.json.jbuilder index 9f7b02ef5af..f01fca9cd60 100644 --- a/api/app/views/spree/api/products/_product.json.jbuilder +++ b/api/app/views/spree/api/products/_product.json.jbuilder @@ -1,8 +1,8 @@ # frozen_string_literal: true @product_attributes ||= product_attributes -json.cache! [I18n.locale, current_user_roles.include?('admin'), current_pricing_options, @product_attributes, @exclude_data, product] do - json.(product, *(@product_attributes - [:total_on_hand])) +json.cache! [I18n.locale, current_user_roles.include?("admin"), current_pricing_options, @product_attributes, @exclude_data, product] do + json.call(product, *(@product_attributes - [:total_on_hand])) json.total_on_hand(total_on_hand_for(product)) json.price(product.price_for_options(current_pricing_options)&.amount) json.display_price(product.price_for_options(current_pricing_options)&.money&.to_s) @@ -19,17 +19,17 @@ json.cache! [I18n.locale, current_user_roles.include?('admin'), current_pricing_ end unless @exclude_data[:option_types] json.option_types(product.option_types) do |option_type| - json.(option_type, *option_type_attributes) + json.call(option_type, *option_type_attributes) end end unless @exclude_data[:product_properties] json.product_properties(product.product_properties) do |product_property| - json.(product_property, *product_property_attributes) + json.call(product_property, *product_property_attributes) end end unless @exclude_data[:classifications] json.classifications(product.classifications) do |classification| - json.(classification, :taxon_id, :position) + json.call(classification, :taxon_id, :position) json.taxon do json.partial!("spree/api/taxons/taxon", taxon: classification.taxon) end diff --git a/api/app/views/spree/api/products/index.json.jbuilder b/api/app/views/spree/api/products/index.json.jbuilder index 89b7fa7d905..9ed0ff6ef37 100644 --- a/api/app/views/spree/api/products/index.json.jbuilder +++ b/api/app/views/spree/api/products/index.json.jbuilder @@ -1,6 +1,6 @@ # frozen_string_literal: true -json.partial! 'spree/api/shared/pagination', pagination: @products +json.partial! "spree/api/shared/pagination", pagination: @products json.products(@products) do |product| json.partial!("spree/api/products/product", product:) end diff --git a/api/app/views/spree/api/promotions/show.json.jbuilder b/api/app/views/spree/api/promotions/show.json.jbuilder index 970419508eb..5fd0e07f421 100644 --- a/api/app/views/spree/api/promotions/show.json.jbuilder +++ b/api/app/views/spree/api/promotions/show.json.jbuilder @@ -1,3 +1,3 @@ # frozen_string_literal: true -json.(@promotion, *promotion_attributes) +json.call(@promotion, *promotion_attributes) diff --git a/api/app/views/spree/api/properties/index.json.jbuilder b/api/app/views/spree/api/properties/index.json.jbuilder index 470af0769b0..04e144e87f1 100644 --- a/api/app/views/spree/api/properties/index.json.jbuilder +++ b/api/app/views/spree/api/properties/index.json.jbuilder @@ -1,6 +1,6 @@ # frozen_string_literal: true json.properties(@properties) do |property| - json.(property, *property_attributes) + json.call(property, *property_attributes) end -json.partial! 'spree/api/shared/pagination', pagination: @properties +json.partial! "spree/api/shared/pagination", pagination: @properties diff --git a/api/app/views/spree/api/properties/show.json.jbuilder b/api/app/views/spree/api/properties/show.json.jbuilder index 80d2a97087e..cd21a32cd03 100644 --- a/api/app/views/spree/api/properties/show.json.jbuilder +++ b/api/app/views/spree/api/properties/show.json.jbuilder @@ -1,3 +1,3 @@ # frozen_string_literal: true -json.(@property, *property_attributes) +json.call(@property, *property_attributes) diff --git a/api/app/views/spree/api/return_authorizations/index.json.jbuilder b/api/app/views/spree/api/return_authorizations/index.json.jbuilder index 3baf83d8876..62bc15be2bc 100644 --- a/api/app/views/spree/api/return_authorizations/index.json.jbuilder +++ b/api/app/views/spree/api/return_authorizations/index.json.jbuilder @@ -1,6 +1,6 @@ # frozen_string_literal: true json.return_authorizations(@return_authorizations) do |return_authorization| - json.(return_authorization, *return_authorization_attributes) + json.call(return_authorization, *return_authorization_attributes) end -json.partial! 'spree/api/shared/pagination', pagination: @return_authorizations +json.partial! "spree/api/shared/pagination", pagination: @return_authorizations diff --git a/api/app/views/spree/api/return_authorizations/show.json.jbuilder b/api/app/views/spree/api/return_authorizations/show.json.jbuilder index e122038e52f..de4ffb527d7 100644 --- a/api/app/views/spree/api/return_authorizations/show.json.jbuilder +++ b/api/app/views/spree/api/return_authorizations/show.json.jbuilder @@ -1,3 +1,3 @@ # frozen_string_literal: true -json.(@return_authorization, *return_authorization_attributes) +json.call(@return_authorization, *return_authorization_attributes) diff --git a/api/app/views/spree/api/shared/_pagination.json.jbuilder b/api/app/views/spree/api/shared/_pagination.json.jbuilder index 3b88545d39e..4804409a4f0 100644 --- a/api/app/views/spree/api/shared/_pagination.json.jbuilder +++ b/api/app/views/spree/api/shared/_pagination.json.jbuilder @@ -1,7 +1,7 @@ # frozen_string_literal: true -json.count pagination.count -json.total_count pagination.total_count +json.count pagination.count +json.total_count pagination.total_count json.current_page pagination.current_page -json.pages pagination.total_pages -json.per_page pagination.limit_value +json.pages pagination.total_pages +json.per_page pagination.limit_value diff --git a/api/app/views/spree/api/shipments/_big.json.jbuilder b/api/app/views/spree/api/shipments/_big.json.jbuilder index 20fa51ed0eb..5a2cd23deea 100644 --- a/api/app/views/spree/api/shipments/_big.json.jbuilder +++ b/api/app/views/spree/api/shipments/_big.json.jbuilder @@ -1,19 +1,19 @@ # frozen_string_literal: true json.cache! [I18n.locale, shipment] do - json.(shipment, *shipment_attributes) + json.call(shipment, *shipment_attributes) json.partial!("spree/api/shipments/small", shipment:) json.inventory_units(shipment.inventory_units) do |inventory_unit| - json.(inventory_unit, *inventory_unit_attributes) + json.call(inventory_unit, *inventory_unit_attributes) json.variant do json.partial!("spree/api/variants/small", variant: inventory_unit.variant) - json.(inventory_unit.variant, :product_id) + json.call(inventory_unit.variant, :product_id) json.images(inventory_unit.variant.gallery.images) do |image| json.partial!("spree/api/images/image", image:) end end json.line_item do - json.(inventory_unit.line_item, *line_item_attributes) + json.call(inventory_unit.line_item, *line_item_attributes) json.single_display_amount(inventory_unit.line_item.single_display_amount.to_s) json.display_amount(inventory_unit.line_item.display_amount.to_s) json.total(inventory_unit.line_item.total) @@ -32,15 +32,15 @@ json.cache! [I18n.locale, shipment] do json.partial!("spree/api/addresses/address", address: shipment.order.shipping_address) end json.payments(shipment.order.payments) do |payment| - json.(payment, :id, :amount, :display_amount, :state) + json.call(payment, :id, :amount, :display_amount, :state) if payment.source json.source do attrs = [:id] (attrs << :cc_type) if payment.source.respond_to?(:cc_type) - json.(payment.source, *attrs) + json.call(payment.source, *attrs) end end - json.payment_method { json.(payment.payment_method, :id, :name) } + json.payment_method { json.call(payment.payment_method, :id, :name) } end end end diff --git a/api/app/views/spree/api/shipments/_small.json.jbuilder b/api/app/views/spree/api/shipments/_small.json.jbuilder index 549c10c0320..af9b470a11b 100644 --- a/api/app/views/spree/api/shipments/_small.json.jbuilder +++ b/api/app/views/spree/api/shipments/_small.json.jbuilder @@ -1,7 +1,7 @@ # frozen_string_literal: true json.cache! [I18n.locale, shipment] do - json.(shipment, *shipment_attributes) + json.call(shipment, *shipment_attributes) json.order_id(shipment.order.number) json.stock_location_name(shipment.stock_location.name) json.shipping_rates(shipment.shipping_rates) do |shipping_rate| @@ -15,12 +15,12 @@ json.cache! [I18n.locale, shipment] do end end json.shipping_methods(shipment.shipping_methods) do |shipping_method| - json.(shipping_method, :id, :code, :name) + json.call(shipping_method, :id, :code, :name) json.zones(shipping_method.zones) do |zone| - json.(zone, :id, :name, :description) + json.call(zone, :id, :name, :description) end json.shipping_categories(shipping_method.shipping_categories) do |shipping_category| - json.(shipping_category, :id, :name) + json.call(shipping_category, :id, :name) end end json.manifest(shipment.manifest) do |manifest_item| diff --git a/api/app/views/spree/api/shipments/estimated_rates.json.jbuilder b/api/app/views/spree/api/shipments/estimated_rates.json.jbuilder index 091a61781d6..97e6e3f2f4e 100644 --- a/api/app/views/spree/api/shipments/estimated_rates.json.jbuilder +++ b/api/app/views/spree/api/shipments/estimated_rates.json.jbuilder @@ -1,6 +1,6 @@ # frozen_string_literal: true json.shipping_rates @shipping_rates do |shipping_rate| - json.(shipping_rate, :name, :cost, :shipping_method_id, :shipping_method_code) + json.call(shipping_rate, :name, :cost, :shipping_method_id, :shipping_method_code) json.display_cost(shipping_rate.display_cost.to_s) end diff --git a/api/app/views/spree/api/shipments/mine.json.jbuilder b/api/app/views/spree/api/shipments/mine.json.jbuilder index a93e0111bb7..968a3a9004a 100644 --- a/api/app/views/spree/api/shipments/mine.json.jbuilder +++ b/api/app/views/spree/api/shipments/mine.json.jbuilder @@ -1,6 +1,6 @@ # frozen_string_literal: true -json.partial! 'spree/api/shared/pagination', pagination: @shipments +json.partial! "spree/api/shared/pagination", pagination: @shipments json.shipments(@shipments) do |shipment| json.partial!("spree/api/shipments/big", shipment:) end diff --git a/api/app/views/spree/api/shipments/show.json.jbuilder b/api/app/views/spree/api/shipments/show.json.jbuilder index 9e3467e543e..39121ed5758 100644 --- a/api/app/views/spree/api/shipments/show.json.jbuilder +++ b/api/app/views/spree/api/shipments/show.json.jbuilder @@ -1,7 +1,7 @@ # frozen_string_literal: true json.cache! [I18n.locale, @shipment] do - json.(@shipment, *shipment_attributes) + json.call(@shipment, *shipment_attributes) json.order_id(@shipment.order.number) json.stock_location_name(@shipment.stock_location.name) json.shipping_rates(@shipment.shipping_rates) do |shipping_rate| @@ -15,12 +15,12 @@ json.cache! [I18n.locale, @shipment] do end end json.shipping_methods(@shipment.shipping_methods) do |shipping_method| - json.(shipping_method, :id, :name) + json.call(shipping_method, :id, :name) json.zones(shipping_method.zones) do |zone| - json.(zone, :id, :name, :description) + json.call(zone, :id, :name, :description) end json.shipping_categories(shipping_method.shipping_categories) do |shipping_category| - json.(shipping_category, :id, :name) + json.call(shipping_category, :id, :name) end end json.manifest(@shipment.manifest) do |manifest_item| diff --git a/api/app/views/spree/api/shipping_rates/_shipping_rate.json.jbuilder b/api/app/views/spree/api/shipping_rates/_shipping_rate.json.jbuilder index 5090d539be4..923bea5571d 100644 --- a/api/app/views/spree/api/shipping_rates/_shipping_rate.json.jbuilder +++ b/api/app/views/spree/api/shipping_rates/_shipping_rate.json.jbuilder @@ -1,4 +1,4 @@ # frozen_string_literal: true -json.(shipping_rate, :id, :name, :cost, :selected, :shipping_method_id, :shipping_method_code) +json.call(shipping_rate, :id, :name, :cost, :selected, :shipping_method_id, :shipping_method_code) json.display_cost(shipping_rate.display_cost.to_s) diff --git a/api/app/views/spree/api/states/index.json.jbuilder b/api/app/views/spree/api/states/index.json.jbuilder index b8fbd262880..f543c945876 100644 --- a/api/app/views/spree/api/states/index.json.jbuilder +++ b/api/app/views/spree/api/states/index.json.jbuilder @@ -1,7 +1,7 @@ # frozen_string_literal: true json.states_required(@country.states_required) if @country -json.states(@states) { |state| json.(state, *state_attributes) } +json.states(@states) { |state| json.call(state, *state_attributes) } if @states.respond_to?(:total_pages) - json.partial! 'spree/api/shared/pagination', pagination: @states + json.partial! "spree/api/shared/pagination", pagination: @states end diff --git a/api/app/views/spree/api/states/show.json.jbuilder b/api/app/views/spree/api/states/show.json.jbuilder index 8562d26cf49..bb156bc50ce 100644 --- a/api/app/views/spree/api/states/show.json.jbuilder +++ b/api/app/views/spree/api/states/show.json.jbuilder @@ -1,3 +1,3 @@ # frozen_string_literal: true -json.(@state, *state_attributes) +json.call(@state, *state_attributes) diff --git a/api/app/views/spree/api/stock_items/_stock_item.json.jbuilder b/api/app/views/spree/api/stock_items/_stock_item.json.jbuilder index 8a21b8aeba3..1e39431380c 100644 --- a/api/app/views/spree/api/stock_items/_stock_item.json.jbuilder +++ b/api/app/views/spree/api/stock_items/_stock_item.json.jbuilder @@ -1,6 +1,6 @@ # frozen_string_literal: true -json.(stock_item, *stock_item_attributes) +json.call(stock_item, *stock_item_attributes) json.variant do json.partial!("spree/api/variants/small", variant: stock_item.variant) end diff --git a/api/app/views/spree/api/stock_items/index.json.jbuilder b/api/app/views/spree/api/stock_items/index.json.jbuilder index 361f9c0ab19..90e2281c382 100644 --- a/api/app/views/spree/api/stock_items/index.json.jbuilder +++ b/api/app/views/spree/api/stock_items/index.json.jbuilder @@ -3,4 +3,4 @@ json.stock_items(@stock_items) do |stock_item| json.partial!("spree/api/stock_items/stock_item", stock_item:) end -json.partial! 'spree/api/shared/pagination', pagination: @stock_items +json.partial! "spree/api/shared/pagination", pagination: @stock_items diff --git a/api/app/views/spree/api/stock_locations/_stock_location.json.jbuilder b/api/app/views/spree/api/stock_locations/_stock_location.json.jbuilder index 0f7d27c0647..71addbb7efc 100644 --- a/api/app/views/spree/api/stock_locations/_stock_location.json.jbuilder +++ b/api/app/views/spree/api/stock_locations/_stock_location.json.jbuilder @@ -1,16 +1,16 @@ # frozen_string_literal: true -json.(stock_location, *stock_location_attributes) +json.call(stock_location, *stock_location_attributes) json.country do if stock_location.country - json.(stock_location.country, *country_attributes) + json.call(stock_location.country, *country_attributes) else json.nil! end end json.state do if stock_location.state - json.(stock_location.state, *state_attributes) + json.call(stock_location.state, *state_attributes) else json.nil! end diff --git a/api/app/views/spree/api/stock_locations/index.json.jbuilder b/api/app/views/spree/api/stock_locations/index.json.jbuilder index 489c4b7cc49..436803c2164 100644 --- a/api/app/views/spree/api/stock_locations/index.json.jbuilder +++ b/api/app/views/spree/api/stock_locations/index.json.jbuilder @@ -3,4 +3,4 @@ json.stock_locations(@stock_locations) do |stock_location| json.partial!("spree/api/stock_locations/stock_location", stock_location:) end -json.partial! 'spree/api/shared/pagination', pagination: @stock_locations +json.partial! "spree/api/shared/pagination", pagination: @stock_locations diff --git a/api/app/views/spree/api/stock_movements/_stock_movement.json.jbuilder b/api/app/views/spree/api/stock_movements/_stock_movement.json.jbuilder index 24f733cf34a..80e40e35587 100644 --- a/api/app/views/spree/api/stock_movements/_stock_movement.json.jbuilder +++ b/api/app/views/spree/api/stock_movements/_stock_movement.json.jbuilder @@ -1,6 +1,6 @@ # frozen_string_literal: true -json.(stock_movement, *stock_movement_attributes) +json.call(stock_movement, *stock_movement_attributes) json.stock_item do json.partial!("spree/api/stock_items/stock_item", stock_item: stock_movement.stock_item) end diff --git a/api/app/views/spree/api/stock_movements/index.json.jbuilder b/api/app/views/spree/api/stock_movements/index.json.jbuilder index 124035c6ac1..8073187912d 100644 --- a/api/app/views/spree/api/stock_movements/index.json.jbuilder +++ b/api/app/views/spree/api/stock_movements/index.json.jbuilder @@ -3,4 +3,4 @@ json.stock_movements(@stock_movements) do |stock_movement| json.partial!("spree/api/stock_movements/stock_movement", stock_movement:) end -json.partial! 'spree/api/shared/pagination', pagination: @stock_movements +json.partial! "spree/api/shared/pagination", pagination: @stock_movements diff --git a/api/app/views/spree/api/store_credit_events/mine.json.jbuilder b/api/app/views/spree/api/store_credit_events/mine.json.jbuilder index 6a89236f2a5..3644b246a8c 100644 --- a/api/app/views/spree/api/store_credit_events/mine.json.jbuilder +++ b/api/app/views/spree/api/store_credit_events/mine.json.jbuilder @@ -1,7 +1,7 @@ # frozen_string_literal: true json.store_credit_events(@store_credit_events) do |store_credit_event| - json.(store_credit_event, *store_credit_history_attributes) + json.call(store_credit_event, *store_credit_history_attributes) json.order_number(store_credit_event.order.try(:number)) end -json.partial! 'spree/api/shared/pagination', pagination: @store_credit_events +json.partial! "spree/api/shared/pagination", pagination: @store_credit_events diff --git a/api/app/views/spree/api/stores/index.json.jbuilder b/api/app/views/spree/api/stores/index.json.jbuilder index 89076d318c9..35f4557e9ef 100644 --- a/api/app/views/spree/api/stores/index.json.jbuilder +++ b/api/app/views/spree/api/stores/index.json.jbuilder @@ -1,3 +1,3 @@ # frozen_string_literal: true -json.stores(@stores) { |store| json.(store, *store_attributes) } +json.stores(@stores) { |store| json.call(store, *store_attributes) } diff --git a/api/app/views/spree/api/stores/show.json.jbuilder b/api/app/views/spree/api/stores/show.json.jbuilder index 3e9bf01ca14..84c286ae281 100644 --- a/api/app/views/spree/api/stores/show.json.jbuilder +++ b/api/app/views/spree/api/stores/show.json.jbuilder @@ -1,3 +1,3 @@ # frozen_string_literal: true -json.(@store, *store_attributes) +json.call(@store, *store_attributes) diff --git a/api/app/views/spree/api/taxonomies/_nested.json.jbuilder b/api/app/views/spree/api/taxonomies/_nested.json.jbuilder index d3865f76383..33e841144b9 100644 --- a/api/app/views/spree/api/taxonomies/_nested.json.jbuilder +++ b/api/app/views/spree/api/taxonomies/_nested.json.jbuilder @@ -1,10 +1,10 @@ # frozen_string_literal: true -json.(taxonomy, *taxonomy_attributes) +json.call(taxonomy, *taxonomy_attributes) json.root do - json.(taxonomy.root, *taxon_attributes) + json.call(taxonomy.root, *taxon_attributes) json.taxons(taxonomy.root.children) do |taxon| - json.(taxon, *taxon_attributes) + json.call(taxon, *taxon_attributes) json.partial!("spree/api/taxons/taxons", taxon:) end end diff --git a/api/app/views/spree/api/taxonomies/_taxonomy.json.jbuilder b/api/app/views/spree/api/taxonomies/_taxonomy.json.jbuilder index 4a2cb4b6179..6e177a3974c 100644 --- a/api/app/views/spree/api/taxonomies/_taxonomy.json.jbuilder +++ b/api/app/views/spree/api/taxonomies/_taxonomy.json.jbuilder @@ -3,11 +3,11 @@ if params[:set] == "nested" json.partial!("spree/api/taxonomies/nested", taxonomy:) else - json.(taxonomy, *taxonomy_attributes) + json.call(taxonomy, *taxonomy_attributes) json.root do - json.(taxonomy.root, *taxon_attributes) + json.call(taxonomy.root, *taxon_attributes) json.taxons(taxonomy.root.children) do |taxon| - json.(taxon, *taxon_attributes) + json.call(taxon, *taxon_attributes) end end end diff --git a/api/app/views/spree/api/taxonomies/index.json.jbuilder b/api/app/views/spree/api/taxonomies/index.json.jbuilder index 09976f688de..c496b01e884 100644 --- a/api/app/views/spree/api/taxonomies/index.json.jbuilder +++ b/api/app/views/spree/api/taxonomies/index.json.jbuilder @@ -3,4 +3,4 @@ json.taxonomies(@taxonomies) do |taxonomy| json.partial!("spree/api/taxonomies/taxonomy", taxonomy:) end -json.partial! 'spree/api/shared/pagination', pagination: @taxonomies +json.partial! "spree/api/shared/pagination", pagination: @taxonomies diff --git a/api/app/views/spree/api/taxons/_taxon.json.jbuilder b/api/app/views/spree/api/taxons/_taxon.json.jbuilder index caaf6364fad..3c08b9f48c5 100644 --- a/api/app/views/spree/api/taxons/_taxon.json.jbuilder +++ b/api/app/views/spree/api/taxons/_taxon.json.jbuilder @@ -1,4 +1,4 @@ # frozen_string_literal: true -json.(taxon, *taxon_attributes) -json.taxons(taxon.children) { |taxon| json.(taxon, *taxon_attributes) } +json.call(taxon, *taxon_attributes) +json.taxons(taxon.children) { |taxon| json.call(taxon, *taxon_attributes) } diff --git a/api/app/views/spree/api/taxons/_taxons.json.jbuilder b/api/app/views/spree/api/taxons/_taxons.json.jbuilder index d24ef637402..80242248b5b 100644 --- a/api/app/views/spree/api/taxons/_taxons.json.jbuilder +++ b/api/app/views/spree/api/taxons/_taxons.json.jbuilder @@ -1,6 +1,6 @@ # frozen_string_literal: true json.taxons(taxon.children) do |taxon| - json.(taxon, *taxon_attributes) + json.call(taxon, *taxon_attributes) json.partial!("spree/api/taxons/taxons", taxon:) end diff --git a/api/app/views/spree/api/taxons/index.json.jbuilder b/api/app/views/spree/api/taxons/index.json.jbuilder index 7db246367c9..d631797b4f8 100644 --- a/api/app/views/spree/api/taxons/index.json.jbuilder +++ b/api/app/views/spree/api/taxons/index.json.jbuilder @@ -1,8 +1,8 @@ # frozen_string_literal: true -json.partial! 'spree/api/shared/pagination', pagination: @taxons +json.partial! "spree/api/shared/pagination", pagination: @taxons json.taxons(@taxons) do |taxon| - json.(taxon, *taxon_attributes) + json.call(taxon, *taxon_attributes) unless params[:without_children] json.partial!("spree/api/taxons/taxons", taxon:) end diff --git a/api/app/views/spree/api/users/_user.json.jbuilder b/api/app/views/spree/api/users/_user.json.jbuilder index ebd7d591379..ab01ae0894e 100644 --- a/api/app/views/spree/api/users/_user.json.jbuilder +++ b/api/app/views/spree/api/users/_user.json.jbuilder @@ -1,6 +1,6 @@ # frozen_string_literal: true -json.(user, *user_attributes) +json.call(user, *user_attributes) json.bill_address do if user.bill_address json.partial!("spree/api/addresses/address", address: user.bill_address) diff --git a/api/app/views/spree/api/users/index.json.jbuilder b/api/app/views/spree/api/users/index.json.jbuilder index 792316772f9..c34acc9e112 100644 --- a/api/app/views/spree/api/users/index.json.jbuilder +++ b/api/app/views/spree/api/users/index.json.jbuilder @@ -3,4 +3,4 @@ json.users(@users) do |user| json.partial!("spree/api/users/user", user:) end -json.partial! 'spree/api/shared/pagination', pagination: @users +json.partial! "spree/api/shared/pagination", pagination: @users diff --git a/api/app/views/spree/api/variants/_big.json.jbuilder b/api/app/views/spree/api/variants/_big.json.jbuilder index 7bcbd571719..651b52615d7 100644 --- a/api/app/views/spree/api/variants/_big.json.jbuilder +++ b/api/app/views/spree/api/variants/_big.json.jbuilder @@ -1,13 +1,13 @@ # frozen_string_literal: true json.cache! [I18n.locale, Spree::StockLocation.accessible_by(current_ability), variant] do - json.(variant, *variant_attributes) + json.call(variant, *variant_attributes) json.partial!("spree/api/variants/small", variant:) json.variant_properties(variant.variant_properties) do |variant_property| - json.(variant_property, *variant_property_attributes) + json.call(variant_property, *variant_property_attributes) end json.stock_items(variant.stock_items.accessible_by(current_ability)) do |stock_item| - json.(stock_item, :id, :count_on_hand, :stock_location_id, :backorderable) + json.call(stock_item, :id, :count_on_hand, :stock_location_id, :backorderable) json.available stock_item.available? json.stock_location_name(stock_item.stock_location.name) end diff --git a/api/app/views/spree/api/variants/_small.json.jbuilder b/api/app/views/spree/api/variants/_small.json.jbuilder index 942556afe30..2d8792ab070 100644 --- a/api/app/views/spree/api/variants/_small.json.jbuilder +++ b/api/app/views/spree/api/variants/_small.json.jbuilder @@ -1,7 +1,7 @@ # frozen_string_literal: true json.cache! [I18n.locale, current_pricing_options, variant] do - json.(variant, *variant_attributes) + json.call(variant, *variant_attributes) json.price(variant.price_for_options(current_pricing_options)&.amount) json.display_price(variant.price_for_options(current_pricing_options)&.money&.to_s) json.options_text(variant.options_text) @@ -13,7 +13,7 @@ json.cache! [I18n.locale, current_pricing_options, variant] do json.is_destroyed(variant.destroyed?) json.option_values(variant.option_values) do |option_value| - json.(option_value, *option_value_attributes) + json.call(option_value, *option_value_attributes) end json.images(variant.gallery.images) do |image| json.partial!("spree/api/images/image", image:) diff --git a/api/app/views/spree/api/variants/index.json.jbuilder b/api/app/views/spree/api/variants/index.json.jbuilder index d82c68c4f3b..a6984619d6a 100644 --- a/api/app/views/spree/api/variants/index.json.jbuilder +++ b/api/app/views/spree/api/variants/index.json.jbuilder @@ -1,6 +1,6 @@ # frozen_string_literal: true -json.partial! 'spree/api/shared/pagination', pagination: @variants +json.partial! "spree/api/shared/pagination", pagination: @variants json.variants(@variants) do |variant| json.partial!("spree/api/variants/big", variant:) end diff --git a/api/app/views/spree/api/zones/_zone.json.jbuilder b/api/app/views/spree/api/zones/_zone.json.jbuilder index 0e7093298bb..26f8d955555 100644 --- a/api/app/views/spree/api/zones/_zone.json.jbuilder +++ b/api/app/views/spree/api/zones/_zone.json.jbuilder @@ -1,6 +1,6 @@ # frozen_string_literal: true -json.(zone, :id, :name, :description) +json.call(zone, :id, :name, :description) json.zone_members(zone.zone_members) do |zone_member| - json.(zone_member, :id, :name, :zoneable_type, :zoneable_id) + json.call(zone_member, :id, :name, :zoneable_type, :zoneable_id) end diff --git a/api/app/views/spree/api/zones/index.json.jbuilder b/api/app/views/spree/api/zones/index.json.jbuilder index 99e78bde657..11e70b66000 100644 --- a/api/app/views/spree/api/zones/index.json.jbuilder +++ b/api/app/views/spree/api/zones/index.json.jbuilder @@ -3,4 +3,4 @@ json.zones(@zones) do |zone| json.partial!("spree/api/zones/zone", zone:) end -json.partial! 'spree/api/shared/pagination', pagination: @zones +json.partial! "spree/api/shared/pagination", pagination: @zones diff --git a/api/bin/rails b/api/bin/rails index d4dc97baf8d..7eb65bdf310 100755 --- a/api/bin/rails +++ b/api/bin/rails @@ -2,11 +2,11 @@ # This command will automatically be run when you run "rails" with Rails gems # installed from the root of your application. -ENGINE_ROOT = File.expand_path('..', __dir__) -ENGINE_PATH = File.expand_path('../lib/spree/api/engine', __dir__) +ENGINE_ROOT = File.expand_path("..", __dir__) +ENGINE_PATH = File.expand_path("../lib/spree/api/engine", __dir__) # Set up gems listed in the Gemfile. -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __dir__) +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __dir__) require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"]) require "rails/all" diff --git a/api/config/routes.rb b/api/config/routes.rb index c90b6ba4ff0..7bfdc962909 100644 --- a/api/config/routes.rb +++ b/api/config/routes.rb @@ -3,11 +3,11 @@ Spree::Core::Engine.routes.draw do namespace :admin do resources :users do - resource :api_key, controller: 'users/api_key', only: [:create, :destroy] + resource :api_key, controller: "users/api_key", only: [:create, :destroy] end end - namespace :api, defaults: { format: 'json' } do + namespace :api, defaults: {format: "json"} do resources :promotions, only: [:show] resources :products do @@ -58,7 +58,7 @@ end resources :option_values, only: :index - get '/orders/mine', to: 'orders#mine', as: 'my_orders' + get "/orders/mine", to: "orders#mine", as: "my_orders" get "/orders/current", to: "orders#current", as: "current_order" resources :orders, concerns: :order_routes do @@ -77,8 +77,8 @@ resources :shipments, only: [:create, :update] do collection do - post 'transfer_to_location' - post 'transfer_to_shipment' + post "transfer_to_location" + post "transfer_to_shipment" get :mine end @@ -125,9 +125,9 @@ end end - get '/config/money', to: 'config#money' - get '/config', to: 'config#show' - put '/classifications', to: 'classifications#update', as: :classifications - get '/taxons/products', to: 'taxons#products', as: :taxon_products + get "/config/money", to: "config#money" + get "/config", to: "config#show" + put "/classifications", to: "classifications#update", as: :classifications + get "/taxons/products", to: "taxons#products", as: :taxon_products end end diff --git a/api/lib/solidus_api.rb b/api/lib/solidus_api.rb index b7ed61deddc..76ff3f7786a 100644 --- a/api/lib/solidus_api.rb +++ b/api/lib/solidus_api.rb @@ -1,3 +1,3 @@ # frozen_string_literal: true -require 'spree_api' +require "spree_api" diff --git a/api/lib/spree/api.rb b/api/lib/spree/api.rb index 775b5e95208..c0b32905db9 100644 --- a/api/lib/spree/api.rb +++ b/api/lib/spree/api.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require 'spree/core' +require "spree/core" -require 'spree/api/engine' +require "spree/api/engine" diff --git a/api/lib/spree/api/config.rb b/api/lib/spree/api/config.rb index e93b5c12cc2..d791320585a 100644 --- a/api/lib/spree/api/config.rb +++ b/api/lib/spree/api/config.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spree/api_configuration' +require "spree/api_configuration" module Spree module Api diff --git a/api/lib/spree/api/engine.rb b/api/lib/spree/api/engine.rb index bec2e05ee45..a11a6fe6a70 100644 --- a/api/lib/spree/api/engine.rb +++ b/api/lib/spree/api/engine.rb @@ -1,19 +1,20 @@ # frozen_string_literal: true -require 'spree/api/config' +require "spree/api/config" module Spree module Api class Engine < Rails::Engine isolate_namespace Spree - engine_name 'spree_api' + engine_name "spree_api" # Leave initializer empty for backwards-compatibility. Other apps # might still rely on this event. - initializer "spree.api.environment", before: :load_config_initializers do; end + initializer "spree.api.environment", before: :load_config_initializers do + end config.after_initialize do - Spree::Api::Config.check_load_defaults_called('Spree::Api::Config') + Spree::Api::Config.check_load_defaults_called("Spree::Api::Config") end end end diff --git a/api/lib/spree/api/responders.rb b/api/lib/spree/api/responders.rb index 5a0d7232316..2bb4bf50960 100644 --- a/api/lib/spree/api/responders.rb +++ b/api/lib/spree/api/responders.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'responders' -require 'spree/api/responders/jbuilder_template' +require "responders" +require "spree/api/responders/jbuilder_template" module Spree module Api diff --git a/api/lib/spree/api/testing_support/helpers.rb b/api/lib/spree/api/testing_support/helpers.rb index ab6818bb853..6d6549ed5c4 100644 --- a/api/lib/spree/api/testing_support/helpers.rb +++ b/api/lib/spree/api/testing_support/helpers.rb @@ -14,12 +14,12 @@ def json_response end def assert_not_found! - expect(json_response).to eq({ "error" => "The resource you were looking for could not be found." }) + expect(json_response).to eq({"error" => "The resource you were looking for could not be found."}) expect(response.status).to eq 404 end def assert_unauthorized! - expect(json_response).to eq({ "error" => "You are not authorized to perform that action." }) + expect(json_response).to eq({"error" => "You are not authorized to perform that action."}) expect(response.status).to eq 401 end @@ -47,7 +47,7 @@ def image(filename) end def upload_image(filename) - Rack::Test::UploadedFile.new(File.open(image(filename).path), 'image/jpeg') + Rack::Test::UploadedFile.new(File.open(image(filename).path), "image/jpeg") end end end diff --git a/api/lib/spree/api/testing_support/setup.rb b/api/lib/spree/api/testing_support/setup.rb index caa21b2eeb7..76b6ae07432 100644 --- a/api/lib/spree/api/testing_support/setup.rb +++ b/api/lib/spree/api/testing_support/setup.rb @@ -6,7 +6,7 @@ module TestingSupport module Setup def sign_in_as_admin! let!(:current_api_user) do - stub_model(Spree::LegacyUser, spree_roles: [Spree::Role.find_or_initialize_by(name: 'admin')]) + stub_model(Spree::LegacyUser, spree_roles: [Spree::Role.find_or_initialize_by(name: "admin")]) end end end diff --git a/api/lib/spree/api_configuration.rb b/api/lib/spree/api_configuration.rb index fbc659a9a52..7770879db24 100644 --- a/api/lib/spree/api_configuration.rb +++ b/api/lib/spree/api_configuration.rb @@ -44,13 +44,13 @@ class ApiConfiguration < Preferences::Configuration # Spree::Api::Config.metadata_api_parameters contains the models # to which the admin_metadata attribute is added preference :metadata_api_parameters, :array, default: [ - [:order, 'Spree::Order'], - [:customer_return, 'Spree::CustomerReturn'], - [:payment, 'Spree::Payment'], - [:return_authorization, 'Spree::ReturnAuthorization'], - [:shipment, 'Spree::Shipment'], - [:user, 'Spree.user_class'], - [:line_item, 'Spree::LineItem'] + [:order, "Spree::Order"], + [:customer_return, "Spree::CustomerReturn"], + [:payment, "Spree::Payment"], + [:return_authorization, "Spree::ReturnAuthorization"], + [:shipment, "Spree::Shipment"], + [:user, "Spree.user_class"], + [:line_item, "Spree::LineItem"] ] # Spree::Api::Config.metadata_permit_parameters contains the models @@ -144,7 +144,7 @@ def promotion_attributes=(value) end alias_method :preferred_promotion_attributes=, :promotion_attributes= promotion_attributes_deprecation_message = "Spree::ApiConfiguration#promotion_attributes= is deprecated. Please use Spree::Config.promotions.promotion_api_attributes= instead." - deprecate "promotion_attributes=" => promotion_attributes_deprecation_message, deprecator: Spree.deprecator + deprecate "promotion_attributes=" => promotion_attributes_deprecation_message, :deprecator => Spree.deprecator preference :store_attributes, :array, default: [ :id, :name, :url, :meta_description, :meta_keywords, :seo_title, diff --git a/api/lib/spree_api.rb b/api/lib/spree_api.rb index 588e13686e6..a3517d56bb7 100644 --- a/api/lib/spree_api.rb +++ b/api/lib/spree_api.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require 'spree/api' -require 'spree/api/responders' -require 'jbuilder' +require "spree/api" +require "spree/api/responders" +require "jbuilder" diff --git a/api/solidus_api.gemspec b/api/solidus_api.gemspec index f9ef877d116..f31bae5b4b8 100644 --- a/api/solidus_api.gemspec +++ b/api/solidus_api.gemspec @@ -1,30 +1,30 @@ # frozen_string_literal: true -require_relative '../core/lib/spree/core/version.rb' +require_relative "../core/lib/spree/core/version" Gem::Specification.new do |s| - s.platform = Gem::Platform::RUBY - s.name = "solidus_api" - s.version = Spree.solidus_version - s.summary = 'REST API for the Solidus e-commerce framework.' + s.platform = Gem::Platform::RUBY + s.name = "solidus_api" + s.version = Spree.solidus_version + s.summary = "REST API for the Solidus e-commerce framework." s.description = s.summary - s.author = 'Solidus Team' - s.email = 'contact@solidus.io' - s.homepage = 'http://solidus.io' - s.license = 'BSD-3-Clause' + s.author = "Solidus Team" + s.email = "contact@solidus.io" + s.homepage = "http://solidus.io" + s.license = "BSD-3-Clause" - s.metadata['rubygems_mfa_required'] = 'true' + s.metadata["rubygems_mfa_required"] = "true" s.files = `git ls-files -z`.split("\x0").reject do |f| f.match(%r{^(spec|bin)/}) end - s.required_ruby_version = '>= 3.1.0' - s.required_rubygems_version = '>= 1.8.23' + s.required_ruby_version = ">= 3.1.0" + s.required_rubygems_version = ">= 1.8.23" - s.add_dependency 'jbuilder', '~> 2.8' - s.add_dependency 'kaminari-activerecord', '~> 1.1' - s.add_dependency 'responders' - s.add_dependency 'solidus_core', s.version + s.add_dependency "jbuilder", "~> 2.8" + s.add_dependency "kaminari-activerecord", "~> 1.1" + s.add_dependency "responders" + s.add_dependency "solidus_core", s.version end diff --git a/api/spec/controllers/spree/api/base_controller_spec.rb b/api/spec/controllers/spree/api/base_controller_spec.rb index 21813a19e05..1ce40193bf6 100644 --- a/api/spec/controllers/spree/api/base_controller_spec.rb +++ b/api/spec/controllers/spree/api/base_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Api::BaseController, type: :controller do render_views @@ -8,20 +8,20 @@ rescue_from Spree::Order::InsufficientStock, with: :insufficient_stock_error def index - render json: { "products" => [] } + render json: {"products" => []} end def create params.require(:order).permit(:number) - render json: { "order" => {} } + render json: {"order" => {}} end end before do @routes = ActionDispatch::Routing::RouteSet.new.tap do |r| r.draw do - get 'index', to: 'spree/api/base#index' - post 'create', to: 'spree/api/base#create' + get "index", to: "spree/api/base#index" + post "create", to: "spree/api/base#create" end end end @@ -31,14 +31,14 @@ def create context "if params are missing" do it "returns an unprocessable_entity" do - post :create, params: { token: "fake_key" } + post :create, params: {token: "fake_key"} expect(response.status).to eq(422) end end context "if params are not missing" do it "does not return an unprocessable_entity" do - post :create, params: { token: "fake_key", order: { number: "R12345" } } + post :create, params: {token: "fake_key", order: {number: "R12345"}} expect(response.status).to eq(200) end end @@ -49,19 +49,19 @@ def create context "with a correct order token" do it "succeeds" do - get :index, params: { order_token: order.guest_token, order_id: order.number } + get :index, params: {order_token: order.guest_token, order_id: order.number} expect(response.status).to eq(200) end it "succeeds with an order_number parameter" do - get :index, params: { order_token: order.guest_token, order_number: order.number } + get :index, params: {order_token: order.guest_token, order_number: order.number} expect(response.status).to eq(200) end end context "with an incorrect order token" do it "returns unauthorized" do - get :index, params: { order_token: "NOT_A_TOKEN", order_id: order.number } + get :index, params: {order_token: "NOT_A_TOKEN", order_id: order.number} expect(response.status).to eq(401) end end @@ -70,20 +70,20 @@ def create context "cannot make a request to the API" do it "without an API key" do get :index - expect(json_response).to eq({ "error" => "You must specify an API key." }) + expect(json_response).to eq({"error" => "You must specify an API key."}) expect(response.status).to eq(401) end it "with an invalid API key" do request.headers["Authorization"] = "Bearer fake_key" get :index, params: {} - expect(json_response).to eq({ "error" => "Invalid API key (fake_key) specified." }) + expect(json_response).to eq({"error" => "Invalid API key (fake_key) specified."}) expect(response.status).to eq(401) end it "using an invalid token param" do - get :index, params: { token: "fake_key" } - expect(json_response).to eq({ "error" => "Invalid API key (fake_key) specified." }) + get :index, params: {token: "fake_key"} + expect(json_response).to eq({"error" => "Invalid API key (fake_key) specified."}) end end @@ -91,11 +91,11 @@ def create expect(controller.respond_to?(:product_includes, true)).to be end - context 'insufficient stock' do + context "insufficient stock" do before do expect(subject).to receive(:authenticate_user).and_return(true) expect(subject).to receive(:index).and_raise(Spree::Order::InsufficientStock) - get :index, params: { token: "fake_key" } + get :index, params: {token: "fake_key"} end it "should return a 422" do @@ -104,36 +104,36 @@ def create it "returns an error message" do expect(json_response).to eq( - { "errors" => ["Quantity is not available for items in your order"], "type" => "insufficient_stock" } + {"errors" => ["Quantity is not available for items in your order"], "type" => "insufficient_stock"} ) end end - context 'lock_order' do + context "lock_order" do let!(:order) { create :order } controller(Spree::Api::BaseController) do around_action :lock_order def index - render json: { "products" => [] } + render json: {"products" => []} end end - context 'without an existing lock' do - it 'succeeds' do - get :index, params: { order_token: order.guest_token, order_id: order.number } + context "without an existing lock" do + it "succeeds" do + get :index, params: {order_token: order.guest_token, order_id: order.number} expect(response.status).to eq(200) end end - context 'with an existing lock' do + context "with an existing lock" do around do |example| Spree::OrderMutex.with_lock!(order) { example.run } end - it 'returns a 409 conflict' do - get :index, params: { order_token: order.guest_token, order_id: order.number } + it "returns a 409 conflict" do + get :index, params: {order_token: order.guest_token, order_id: order.number} expect(response.status).to eq(409) end end @@ -162,7 +162,7 @@ def requires_authentication? it "serializes the errors" do expect(JSON.parse(response.body)["errors"]).to( - match(hash_including({ "base" => ["Insufficient Funds"] })) + match(hash_including({"base" => ["Insufficient Funds"]})) ) end end @@ -187,7 +187,7 @@ def requires_authentication? it "serializes the gateway errors with existing order errors" do expect(JSON.parse(response.body)["errors"]).to eq({ "base" => ["Insufficient Funds"], - "email" => ["isn't cool enough"], + "email" => ["isn't cool enough"] }) end end diff --git a/api/spec/features/checkout_spec.rb b/api/spec/features/checkout_spec.rb index 02f1a6d1b4a..1e5df569cc2 100644 --- a/api/spec/features/checkout_spec.rb +++ b/api/spec/features/checkout_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree - describe 'Api Feature Specs', type: :request do + describe "Api Feature Specs", type: :request do before do stub_spree_preferences(Spree::Api::Config, requires_authentication: false) end @@ -26,7 +26,7 @@ def parsed def login expect { - post '/api/users', params: { + post "/api/users", params: { user: { email: "featurecheckoutuser@example.com", password: "featurecheckoutuser" @@ -34,16 +34,16 @@ def login } }.to change { Spree.user_class.count }.by 1 expect(response).to have_http_status(:created) - @user = Spree.user_class.find(parsed['id']) + @user = Spree.user_class.find(parsed["id"]) # copied from api testing helpers support since we can't really sign in allow(Spree::LegacyUser).to receive(:find_by).with(hash_including(:spree_api_key)) { @user } end def create_order(order_params: {}) - expect { post '/api/orders', params: order_params }.to change { Order.count }.by 1 + expect { post "/api/orders", params: order_params }.to change { Order.count }.by 1 expect(response).to have_http_status(:created) - @order = Order.find(parsed['id']) + @order = Order.find(parsed["id"]) expect(@order.email).to eq "featurecheckoutuser@example.com" end @@ -55,7 +55,7 @@ def update_order(order_params: {}) def create_line_item(variant, quantity = 1) expect { post "/api/orders/#{@order.number}/line_items", - params: { line_item: { variant_id: variant.id, quantity: } } + params: {line_item: {variant_id: variant.id, quantity:}} }.to change { @order.line_items.count }.by 1 expect(response).to have_http_status(:created) end @@ -65,14 +65,14 @@ def add_address(address, billing: true) # It seems we are missing an order-scoped address api endpoint since we need # to use update here. expect { - update_order(order_params: { order: { address_type => address.as_json.except('id') } }) + update_order(order_params: {order: {address_type => address.as_json.except("id")}}) }.to change { @order.reload.public_send(address_type) }.to address end def add_payment expect { post "/api/orders/#{@order.number}/payments", - params: { payment: { payment_method_id: payment_method.id } } + params: {payment: {payment_method_id: payment_method.id}} }.to change { @order.reload.payments.count }.by 1 expect(response).to have_http_status(:created) expect(@order.payments.last.payment_method).to eq payment_method @@ -90,7 +90,7 @@ def complete def assert_order_expectations @order.reload - expect(@order.state).to eq 'complete' + expect(@order.state).to eq "complete" expect(@order.completed_at).to be_a ActiveSupport::TimeWithZone expect(@order.item_total).to eq 600.00 expect(@order.total).to eq 610.00 @@ -127,12 +127,12 @@ def assert_order_expectations create_order(order_params: { order: { - bill_address: bill_address.as_json.except('id'), - ship_address: ship_address.as_json.except('id'), + bill_address: bill_address.as_json.except("id"), + ship_address: ship_address.as_json.except("id"), line_items: { - 0 => { variant_id: variant_1.id, quantity: 2 }, - 1 => { variant_id: variant_2.id, quantity: 2 } - }, + 0 => {variant_id: variant_1.id, quantity: 2}, + 1 => {variant_id: variant_2.id, quantity: 2} + } # Would like to do this, but it puts the payment in a complete state, # which the order does not like when transitioning from confirm to complete # since it looks to process pending payments. @@ -154,12 +154,12 @@ def assert_order_expectations create_order update_order(order_params: { order: { - bill_address: bill_address.as_json.except('id'), - ship_address: ship_address.as_json.except('id'), + bill_address: bill_address.as_json.except("id"), + ship_address: ship_address.as_json.except("id"), line_items: { - 0 => { variant_id: variant_1.id, quantity: 2 }, - 1 => { variant_id: variant_2.id, quantity: 2 } - }, + 0 => {variant_id: variant_1.id, quantity: 2}, + 1 => {variant_id: variant_2.id, quantity: 2} + } # Would like to do this, but it puts the payment in a complete state, # which the order does not like when transitioning from confirm to complete # since it looks to process pending payments. diff --git a/api/spec/i18n_spec.rb b/api/spec/i18n_spec.rb index ba3a4868bef..890699c396b 100644 --- a/api/spec/i18n_spec.rb +++ b/api/spec/i18n_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'i18n/tasks' +require "i18n/tasks" RSpec.describe I18n do let(:i18n) { I18n::Tasks::BaseTask.new } @@ -8,17 +8,17 @@ let(:unused_keys) { i18n.unused_keys } let(:inconsistent_interpolations) { i18n.inconsistent_interpolations } - it 'does not have missing keys' do + it "does not have missing keys" do expect(missing_keys).to be_empty, - "Missing #{missing_keys.leaves.count} i18n keys, run `i18n-tasks missing' to show them" + "Missing #{missing_keys.leaves.count} i18n keys, run `i18n-tasks missing' to show them" end - it 'does not have unused keys' do + it "does not have unused keys" do expect(unused_keys).to be_empty, - "#{unused_keys.leaves.count} unused i18n keys, run `i18n-tasks unused' to show them" + "#{unused_keys.leaves.count} unused i18n keys, run `i18n-tasks unused' to show them" end - it 'files are normalized' do + it "files are normalized" do non_normalized = i18n.non_normalized_paths error_message = "The following files need to be normalized:\n" \ "#{non_normalized.map { |path| " #{path}" }.join("\n")}\n" \ @@ -26,7 +26,7 @@ expect(non_normalized).to be_empty, error_message end - it 'does not have inconsistent interpolations' do + it "does not have inconsistent interpolations" do error_message = "#{inconsistent_interpolations.leaves.count} i18n keys have inconsistent interpolations.\n" \ "Run `i18n-tasks check-consistent-interpolations' to show them" expect(inconsistent_interpolations).to be_empty, error_message diff --git a/api/spec/models/spree/legacy_user_spec.rb b/api/spec/models/spree/legacy_user_spec.rb index 5340e69d308..f678fb475bb 100644 --- a/api/spec/models/spree/legacy_user_spec.rb +++ b/api/spec/models/spree/legacy_user_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree describe LegacyUser, type: :model do @@ -17,13 +17,13 @@ module Spree end it "can clear an API key" do - user.spree_api_key = 'abc123' + user.spree_api_key = "abc123" expect(user).to receive(:save!) expect { user.clear_spree_api_key! }.to change(user, :spree_api_key).to be_blank end it "can clear an api key without persisting" do - user.spree_api_key = 'abc123' + user.spree_api_key = "abc123" expect(user).not_to receive(:save!) expect { user.clear_spree_api_key }.to change(user, :spree_api_key).to be_blank end @@ -49,12 +49,12 @@ module Spree end context "roles_for_auto_api_key is defined" do - let(:role) { create(:role, name: 'hobbit') } + let(:role) { create(:role, name: "hobbit") } let(:undesired_role) { create(:role, name: "foo") } before { user.clear_spree_api_key! - stub_spree_preferences(roles_for_auto_api_key: ['hobbit']) + stub_spree_preferences(roles_for_auto_api_key: ["hobbit"]) } it { expect { subject }.to change { user.reload.spree_api_key }.from(nil) } @@ -62,8 +62,8 @@ module Spree end context "for all roles" do - let(:role) { create(:role, name: 'hobbit') } - let(:other_role) { create(:role, name: 'wizard') } + let(:role) { create(:role, name: "hobbit") } + let(:other_role) { create(:role, name: "wizard") } let(:other_user) { create(:user) } before { diff --git a/api/spec/requests/jbuilder_cache_spec.rb b/api/spec/requests/jbuilder_cache_spec.rb index 204b5966e79..326b2d8b9b9 100644 --- a/api/spec/requests/jbuilder_cache_spec.rb +++ b/api/spec/requests/jbuilder_cache_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Jbuilder Cache", type: :request, caching: true do - let!(:user) { create(:admin_user) } + let!(:user) { create(:admin_user) } before do create(:variant) @@ -12,23 +12,23 @@ end it "doesn't create a cache key collision for models with different jbuilder templates" do - get "/api/variants", params: { token: user.spree_api_key } + get "/api/variants", params: {token: user.spree_api_key} expect(response.status).to eq(200) # Make sure we get a non master variant - variant_a = JSON.parse(response.body)['variants'].find do |v| - !v['is_master'] + variant_a = JSON.parse(response.body)["variants"].find do |v| + !v["is_master"] end - expect(variant_a['is_master']).to be false - expect(variant_a['stock_items']).not_to be_nil + expect(variant_a["is_master"]).to be false + expect(variant_a["stock_items"]).not_to be_nil - get "/api/products/#{Spree::Product.first.id}", params: { token: user.spree_api_key } + get "/api/products/#{Spree::Product.first.id}", params: {token: user.spree_api_key} expect(response.status).to eq(200) - variant_b = JSON.parse(response.body)['variants'].last - expect(variant_b['is_master']).to be false + variant_b = JSON.parse(response.body)["variants"].last + expect(variant_b["is_master"]).to be false - expect(variant_a['id']).to eq(variant_b['id']) - expect(variant_b['stock_items']).to be_nil + expect(variant_a["id"]).to eq(variant_b["id"]) + expect(variant_b["stock_items"]).to be_nil end end diff --git a/api/spec/requests/ransackable_attributes_spec.rb b/api/spec/requests/ransackable_attributes_spec.rb index 95cbf7fa24c..850cca220a1 100644 --- a/api/spec/requests/ransackable_attributes_spec.rb +++ b/api/spec/requests/ransackable_attributes_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Ransackable Attributes" do let(:user) { create(:user).tap(&:generate_spree_api_key!) } @@ -9,10 +9,10 @@ it "does not allow the filtering of variants by order attributes" do 2.times { create(:variant) } - get "/api/variants?q[orders_email_start]=#{order.email}", params: { token: user.spree_api_key } + get "/api/variants?q[orders_email_start]=#{order.email}", params: {token: user.spree_api_key} variants_response = JSON.parse(response.body) - expect(variants_response['total_count']).to eq(Spree::Variant.count) + expect(variants_response["total_count"]).to eq(Spree::Variant.count) end end @@ -20,10 +20,10 @@ it "does not allow the filtering of variants by user attributes" do 2.times { create(:variant) } - get "/api/variants?q[orders_user_email_start]=#{order.user.email}", params: { token: user.spree_api_key } + get "/api/variants?q[orders_user_email_start]=#{order.user.email}", params: {token: user.spree_api_key} variants_response = JSON.parse(response.body) - expect(variants_response['total_count']).to eq(Spree::Variant.count) + expect(variants_response["total_count"]).to eq(Spree::Variant.count) end end @@ -33,9 +33,9 @@ variant = create(:variant, product:) other_variant = create(:variant) - get "/api/variants?q[product_name_or_sku_cont]=fritos", params: { token: user.spree_api_key } + get "/api/variants?q[product_name_or_sku_cont]=fritos", params: {token: user.spree_api_key} - skus = JSON.parse(response.body)['variants'].map { |x| x['sku'] } + skus = JSON.parse(response.body)["variants"].map { |x| x["sku"] } expect(skus).to include variant.sku expect(skus).not_to include other_variant.sku end @@ -46,19 +46,19 @@ create(:product, description: "special product") create(:product) - get "/api/products?q[description_cont]=special", params: { token: user.spree_api_key } + get "/api/products?q[description_cont]=special", params: {token: user.spree_api_key} products_response = JSON.parse(response.body) - expect(products_response['total_count']).to eq(Spree::Product.count) + expect(products_response["total_count"]).to eq(Spree::Product.count) end it "id is filterable by default" do product = create(:product) other_product = create(:product) - get "/api/products?q[id_eq]=#{product.id}", params: { token: user.spree_api_key } + get "/api/products?q[id_eq]=#{product.id}", params: {token: user.spree_api_key} - product_names = JSON.parse(response.body)['products'].map { |x| x['name'] } + product_names = JSON.parse(response.body)["products"].map { |x| x["name"] } expect(product_names).to include product.name expect(product_names).not_to include other_product.name end @@ -69,9 +69,9 @@ product = create(:product, name: "Fritos") other_product = create(:product) - get "/api/products?q[name_cont]=fritos", params: { token: user.spree_api_key } + get "/api/products?q[name_cont]=fritos", params: {token: user.spree_api_key} - product_names = JSON.parse(response.body)['products'].map { |x| x['name'] } + product_names = JSON.parse(response.body)["products"].map { |x| x["name"] } expect(product_names).to include product.name expect(product_names).not_to include other_product.name end diff --git a/api/spec/requests/spree/api/address_books_spec.rb b/api/spec/requests/spree/api/address_books_spec.rb index b0c0be43c21..b51c62b6455 100644 --- a/api/spec/requests/spree/api/address_books_spec.rb +++ b/api/spec/requests/spree/api/address_books_spec.rb @@ -1,70 +1,70 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Address books', type: :request do + describe "Address books", type: :request do let!(:state) { create(:state) } let!(:harry_address_attributes) do { - 'name' => 'Harry Potter', - 'address1' => '4 Privet Drive', - 'address2' => 'cupboard under the stairs', - 'city' => 'Surrey', - 'zipcode' => '10010', - 'phone' => '555-5555', - 'state_id' => state.id, - 'country_id' => state.country.id + "name" => "Harry Potter", + "address1" => "4 Privet Drive", + "address2" => "cupboard under the stairs", + "city" => "Surrey", + "zipcode" => "10010", + "phone" => "555-5555", + "state_id" => state.id, + "country_id" => state.country.id } end let!(:ron_address_attributes) do { - 'name' => 'Ron Weasly', - 'address1' => 'Ottery St. Catchpole', - 'address2' => '4th floor', - 'city' => 'Devon, West Country', - 'zipcode' => '10010', - 'phone' => '555-5555', - 'state_id' => state.id, - 'country_id' => state.country.id + "name" => "Ron Weasly", + "address1" => "Ottery St. Catchpole", + "address2" => "4th floor", + "city" => "Devon, West Country", + "zipcode" => "10010", + "phone" => "555-5555", + "state_id" => state.id, + "country_id" => state.country.id } end - context 'as address book owner' do - context 'with ability' do - it 'returns my address book' do - user = create(:user, spree_api_key: 'galleon') + context "as address book owner" do + context "with ability" do + it "returns my address book" do + user = create(:user, spree_api_key: "galleon") user.save_in_address_book(harry_address_attributes, true) user.save_in_address_book(ron_address_attributes, false) get "/api/users/#{user.id}/address_book", - headers: { Authorization: 'Bearer galleon' } + headers: {Authorization: "Bearer galleon"} json_response = JSON.parse(response.body) expect(response.status).to eq(200) expect(json_response.length).to eq(2) expect(json_response).to include( - hash_including(harry_address_attributes.merge!('default' => true)), - hash_including(ron_address_attributes.merge!('default' => false)) - ) + hash_including(harry_address_attributes.merge!("default" => true)), + hash_including(ron_address_attributes.merge!("default" => false)) + ) end - it 'updates my address book' do - user = create(:user, spree_api_key: 'galleon') + it "updates my address book" do + user = create(:user, spree_api_key: "galleon") address = user.save_in_address_book(harry_address_attributes, true) - harry_address_attributes['name'] = 'Ron Weasly' + harry_address_attributes["name"] = "Ron Weasly" expect { put "/api/users/#{user.id}/address_book", - params: { address_book: harry_address_attributes.merge('id' => address.id) }, - headers: { Authorization: 'Bearer galleon' } + params: {address_book: harry_address_attributes.merge("id" => address.id)}, + headers: {Authorization: "Bearer galleon"} }.to change { Spree::Address.count }.from(1).to(2) expect { put "/api/users/#{user.id}/address_book", - params: { address_book: harry_address_attributes.merge('id' => address.id) }, - headers: { Authorization: 'Bearer galleon' } + params: {address_book: harry_address_attributes.merge("id" => address.id)}, + headers: {Authorization: "Bearer galleon"} }.not_to change { Spree::UserAddress.count }.from(1) expect(response.status).to eq(200) @@ -72,8 +72,8 @@ module Spree::Api end context "when updating a default address" do - let(:user) { create(:user, spree_api_key: 'galleon') } - let(:changes) { { name: "Hermione Granger", id: user.ship_address.id} } + let(:user) { create(:user, spree_api_key: "galleon") } + let(:changes) { {name: "Hermione Granger", id: user.ship_address.id} } before do # Create "Harry Potter" default shipping address user.save_in_address_book(harry_address_attributes, true) @@ -82,8 +82,8 @@ module Spree::Api it "changes the address and marks the changed address as default" do expect { put "/api/users/#{user.id}/address_book", - params: { address_book: harry_address_attributes.merge(changes) }, - headers: { Authorization: 'Bearer galleon' } + params: {address_book: harry_address_attributes.merge(changes)}, + headers: {Authorization: "Bearer galleon"} }.to change { user.reload.ship_address.name }.from("Harry Potter").to("Hermione Granger") expect(response.status).to eq(200) @@ -91,10 +91,10 @@ module Spree::Api end context "when updating a default address with email, VAT-ID and reverse charge status" do - let(:user) { create(:user, spree_api_key: 'galleon') } + let(:user) { create(:user, spree_api_key: "galleon") } let(:changes) { - { name: "Hermione Granger", email: "hermoine@rowlingmags.com", vat_id: "AB1234567", - reverse_charge_status: "enabled", id: user.ship_address.id} + {name: "Hermione Granger", email: "hermoine@rowlingmags.com", vat_id: "AB1234567", + reverse_charge_status: "enabled", id: user.ship_address.id} } before do # Create "Harry Potter" default shipping address @@ -104,8 +104,8 @@ module Spree::Api it "changes the address and marks the changed address as default" do expect { put "/api/users/#{user.id}/address_book", - params: { address_book: harry_address_attributes.merge(changes) }, - headers: { Authorization: 'Bearer galleon' } + params: {address_book: harry_address_attributes.merge(changes)}, + headers: {Authorization: "Bearer galleon"} }.to change { user.reload.ship_address.name }.from("Harry Potter").to("Hermione Granger") expect(json_response.first["reverse_charge_status"]).to eq("enabled") @@ -115,50 +115,50 @@ module Spree::Api end end - context 'when creating an address' do - it 'marks the update_target' do - user = create(:user, spree_api_key: 'galleon') + context "when creating an address" do + it "marks the update_target" do + user = create(:user, spree_api_key: "galleon") expect { put "/api/users/#{user.id}/address_book", - params: { address_book: harry_address_attributes }, - headers: { Authorization: 'Bearer galleon' } + params: {address_book: harry_address_attributes}, + headers: {Authorization: "Bearer galleon"} }.to change { Spree::UserAddress.count }.by(1) user_address = Spree::UserAddress.last expect(response.status).to eq(200) - update_target_ids = JSON.parse(response.body).select { |target| target['update_target'] }.map { |location| location['id'] } + update_target_ids = JSON.parse(response.body).select { |target| target["update_target"] }.map { |location| location["id"] } expect(update_target_ids).to eq([user_address.address_id]) end end - context 'when updating an address' do - it 'marks the update_target' do - user = create(:user, spree_api_key: 'galleon') + context "when updating an address" do + it "marks the update_target" do + user = create(:user, spree_api_key: "galleon") address = user.save_in_address_book(harry_address_attributes, true) expect { put "/api/users/#{user.id}/address_book", - params: { address_book: harry_address_attributes }, - headers: { Authorization: 'Bearer galleon' } + params: {address_book: harry_address_attributes}, + headers: {Authorization: "Bearer galleon"} }.to_not change { Spree::UserAddress.count } expect(response.status).to eq(200) - update_target_ids = JSON.parse(response.body).select { |target| target['update_target'] }.map { |location| location['id'] } + update_target_ids = JSON.parse(response.body).select { |target| target["update_target"] }.map { |location| location["id"] } expect(update_target_ids).to eq([address.id]) end end - it 'removes the address from my address book' do + it "removes the address from my address book" do address = create(:address) - user = create(:user, spree_api_key: 'galleon') + user = create(:user, spree_api_key: "galleon") user.save_in_address_book(address.attributes, false) expect { delete "/api/users/#{user.id}/address_book", - params: { address_id: address.id }, - headers: { Authorization: 'Bearer galleon' } + params: {address_id: address.id}, + headers: {Authorization: "Bearer galleon"} }.to change { user.reload.user_addresses.count }.from(1).to(0) expect(response.status).to eq(200) @@ -166,11 +166,11 @@ module Spree::Api end end - context 'on behalf of address book owner' do - context 'with ability' do + context "on behalf of address book owner" do + context "with ability" do before do - Spree::Config.roles.assign_permissions 'Prefect', [Spree::PermissionSets::UserManagement] - create(:user, spree_api_key: 'galleon', spree_roles: [build(:role, name: 'Prefect')]) + Spree::Config.roles.assign_permissions "Prefect", [Spree::PermissionSets::UserManagement] + create(:user, spree_api_key: "galleon", spree_roles: [build(:role, name: "Prefect")]) end it "returns another user's address book" do @@ -179,32 +179,32 @@ module Spree::Api other_user.save_in_address_book(ron_address_attributes, false) get "/api/users/#{other_user.id}/address_book", - headers: { Authorization: 'Bearer galleon' } + headers: {Authorization: "Bearer galleon"} json_response = JSON.parse(response.body) expect(response.status).to eq(200) expect(json_response.length).to eq(2) expect(json_response).to include( - hash_including(harry_address_attributes.merge!('default' => true)), - hash_including(ron_address_attributes.merge!('default' => false)) - ) + hash_including(harry_address_attributes.merge!("default" => true)), + hash_including(ron_address_attributes.merge!("default" => false)) + ) end it "updates another user's address" do other_user = create(:user) address = other_user.save_in_address_book(harry_address_attributes, true) - updated_harry_address = harry_address_attributes.merge('name' => 'Ron Weasly') + updated_harry_address = harry_address_attributes.merge("name" => "Ron Weasly") expect { put "/api/users/#{other_user.id}/address_book", - params: { address_book: updated_harry_address.merge('id' => address.id) }, - headers: { Authorization: 'Bearer galleon' } + params: {address_book: updated_harry_address.merge("id" => address.id)}, + headers: {Authorization: "Bearer galleon"} }.to change { Spree::Address.count }.from(1).to(2) expect { put "/api/users/#{other_user.id}/address_book", - params: { address_book: updated_harry_address.merge('id' => address.id) }, - headers: { Authorization: 'Bearer galleon' } + params: {address_book: updated_harry_address.merge("id" => address.id)}, + headers: {Authorization: "Bearer galleon"} }.not_to change { Spree::UserAddress.count }.from(1) expect(response.status).to eq(200) @@ -218,51 +218,51 @@ module Spree::Api expect { delete "/api/users/#{other_user.id}/address_book", - params: { address_id: address.id }, - headers: { Authorization: 'Bearer galleon' } + params: {address_id: address.id}, + headers: {Authorization: "Bearer galleon"} }.to change { other_user.reload.user_addresses.count }.from(1).to(0) expect(response.status).to eq(200) end end - context 'without ability' do - it 'does not return another user address book' do - create(:user, spree_api_key: 'galleon') + context "without ability" do + it "does not return another user address book" do + create(:user, spree_api_key: "galleon") other_user = create(:user) other_user.save_in_address_book(harry_address_attributes, true) get "/api/users/#{other_user.id}/address_book", - headers: { Authorization: 'Bearer galleon' } + headers: {Authorization: "Bearer galleon"} expect(response.status).to eq(401) end - it 'does not update another user address' do + it "does not update another user address" do address = create(:address) other_user = create(:user) other_user_address = other_user.save_in_address_book(address.attributes, true) - create(:user, spree_api_key: 'galleon') + create(:user, spree_api_key: "galleon") expect { put "/api/users/#{other_user.id}/address_book", - params: { address_book: other_user_address.attributes.merge('address1' => 'Hogwarts') }, - headers: { Authorization: 'Bearer galleon' } + params: {address_book: other_user_address.attributes.merge("address1" => "Hogwarts")}, + headers: {Authorization: "Bearer galleon"} }.not_to change { Spree::UserAddress.count } expect(response.status).to eq(401) end - it 'does not archive another user address' do + it "does not archive another user address" do address = create(:address) other_user = create(:user) other_user.save_in_address_book(address.attributes, true) - create(:user, spree_api_key: 'galleon') + create(:user, spree_api_key: "galleon") expect { delete "/api/users/#{other_user.id}/address_book", - params: { address_id: address.id }, - headers: { Authorization: 'Bearer galleon' } + params: {address_id: address.id}, + headers: {Authorization: "Bearer galleon"} }.not_to change { other_user.user_addresses.count } expect(response.status).to eq(401) @@ -270,22 +270,22 @@ module Spree::Api end end - context 'unauthenticated' do + context "unauthenticated" do before do @user = create(:user) end - it 'GET returns a 401' do + it "GET returns a 401" do get "/api/users/#{@user.id}/address_book" expect(response.status).to eq(401) end - it 'UPDATE returns a 401' do + it "UPDATE returns a 401" do put "/api/users/#{@user.id}/address_book" expect(response.status).to eq(401) end - it 'DELETE returns a 401' do + it "DELETE returns a 401" do delete "/api/users/#{@user.id}/address_book" expect(response.status).to eq(401) end diff --git a/api/spec/requests/spree/api/addresses_spec.rb b/api/spec/requests/spree/api/addresses_spec.rb index 1babcb792e0..fa4f374b596 100644 --- a/api/spec/requests/spree/api/addresses_spec.rb +++ b/api/spec/requests/spree/api/addresses_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Addresses', type: :request do + describe "Addresses", type: :request do before do stub_authentication! @address = create(:address) @@ -18,21 +18,21 @@ module Spree::Api context "with their own address" do it "gets an address" do get spree.api_order_address_path(@order, @address.id) - expect(json_response['address1']).to eq @address.address1 + expect(json_response["address1"]).to eq @address.address1 end it "update replaces the readonly Address associated to the Order" do - put spree.api_order_address_path(@order, @address.id), params: { address: { address1: "123 Test Lane" } } + put spree.api_order_address_path(@order, @address.id), params: {address: {address1: "123 Test Lane"}} expect(Spree::Order.find(@order.id).bill_address_id).not_to eq @address.id - expect(json_response['address1']).to eq '123 Test Lane' + expect(json_response["address1"]).to eq "123 Test Lane" end it "receives the errors object if address is invalid" do - put spree.api_order_address_path(@order, @address.id), params: { address: { address1: "" } } + put spree.api_order_address_path(@order, @address.id), params: {address: {address1: ""}} - expect(json_response['error']).not_to be_nil - expect(json_response['errors']).not_to be_nil - expect(json_response['errors']['address1'].first).to eq "can't be blank" + expect(json_response["error"]).not_to be_nil + expect(json_response["errors"]).not_to be_nil + expect(json_response["errors"]["address1"].first).to eq "can't be blank" end end end diff --git a/api/spec/requests/spree/api/checkouts_spec.rb b/api/spec/requests/spree/api/checkouts_spec.rb index 60dae84935f..c5b5e29105f 100644 --- a/api/spec/requests/spree/api/checkouts_spec.rb +++ b/api/spec/requests/spree/api/checkouts_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Checkouts', type: :request do + describe "Checkouts", type: :request do before(:each) do stub_authentication! stub_spree_preferences(track_inventory_levels: false) - country_zone = create(:zone, name: 'CountryZone') + country_zone = create(:zone, name: "CountryZone") @state = create(:state) @country = @state.country country_zone.members.create(zoneable: @country) @@ -33,34 +33,34 @@ module Spree::Api it "should transition a recently created order from cart to address" do expect(order.state).to eq "cart" expect(order.email).not_to be_nil - put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token } + put spree.api_checkout_path(order.to_param), params: {order_token: order.guest_token} expect(order.reload.state).to eq "address" end it "should transition a recently created order from cart to address with order token in header" do expect(order.state).to eq "cart" expect(order.email).not_to be_nil - put spree.api_checkout_path(order), headers: { "X-Spree-Order-Token" => order.guest_token } + put spree.api_checkout_path(order), headers: {"X-Spree-Order-Token" => order.guest_token} expect(order.reload.state).to eq "address" end it "can take line_items_attributes as a parameter" do line_item = order.line_items.first - put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { line_items_attributes: { 0 => { id: line_item.id, quantity: 1 } } } } + put spree.api_checkout_path(order.to_param), params: {order_token: order.guest_token, order: {line_items_attributes: {0 => {id: line_item.id, quantity: 1}}}} expect(response.status).to eq(200) expect(order.reload.state).to eq "address" end it "can take line_items as a parameter" do line_item = order.line_items.first - put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { line_items: { 0 => { id: line_item.id, quantity: 1 } } } } + put spree.api_checkout_path(order.to_param), params: {order_token: order.guest_token, order: {line_items: {0 => {id: line_item.id, quantity: 1}}}} expect(response.status).to eq(200) expect(order.reload.state).to eq "address" end it "will return an error if the order cannot transition" do - order.update!(state: 'address', ship_address: nil) - put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token } + order.update!(state: "address", ship_address: nil) + put spree.api_checkout_path(order.to_param), params: {order_token: order.guest_token} expect(response.status).to eq(422) end @@ -71,16 +71,16 @@ module Spree::Api let(:address) do { - name: 'John Doe', - address1: '7735 Old Georgetown Road', - city: 'Bethesda', - phone: '3014445002', - zipcode: '20814', - state_id: @state.id, + name: "John Doe", + address1: "7735 Old Georgetown Road", + city: "Bethesda", + phone: "3014445002", + zipcode: "20814", + state_id: @state.id, country_id: @country.id, - email: 'john@doe.com', - vat_id: 'ab1235', - reverse_charge_status: 'disabled' + email: "john@doe.com", + vat_id: "ab1235", + reverse_charge_status: "disabled" } end @@ -92,19 +92,19 @@ module Spree::Api MSG put spree.api_checkout_path(order), - params: { order_token: order.guest_token, order: { + params: {order_token: order.guest_token, order: { bill_address_attributes: address, ship_address_attributes: address - } } - expect(json_response['state']).to eq('delivery') - expect(json_response['bill_address']['name']).to eq('John Doe') - expect(json_response['bill_address']['email']).to eq('john@doe.com') - expect(json_response['bill_address']['vat_id']).to eq('ab1235') - expect(json_response['bill_address']['reverse_charge_status']).to eq('disabled') - expect(json_response['ship_address']['name']).to eq('John Doe') - expect(json_response['ship_address']['email']).to eq('john@doe.com') - expect(json_response['ship_address']['vat_id']).to eq('ab1235') - expect(json_response['ship_address']['reverse_charge_status']).to eq('disabled') + }} + expect(json_response["state"]).to eq("delivery") + expect(json_response["bill_address"]["name"]).to eq("John Doe") + expect(json_response["bill_address"]["email"]).to eq("john@doe.com") + expect(json_response["bill_address"]["vat_id"]).to eq("ab1235") + expect(json_response["bill_address"]["reverse_charge_status"]).to eq("disabled") + expect(json_response["ship_address"]["name"]).to eq("John Doe") + expect(json_response["ship_address"]["email"]).to eq("john@doe.com") + expect(json_response["ship_address"]["vat_id"]).to eq("ab1235") + expect(json_response["ship_address"]["reverse_charge_status"]).to eq("disabled") expect(response.status).to eq(200) end @@ -113,11 +113,11 @@ module Spree::Api it "can update addresses but not transition to delivery w/o shipping setup" do Spree::ShippingMethod.all.find_each(&:destroy) put spree.api_checkout_path(order), - params: { order_token: order.guest_token, order: { + params: {order_token: order.guest_token, order: { bill_address_attributes: address, ship_address_attributes: address - } } - expect(json_response['error']).to eq(I18n.t(:could_not_transition, scope: "spree.api", resource: "order")) + }} + expect(json_response["error"]).to eq(I18n.t(:could_not_transition, scope: "spree.api", resource: "order")) expect(response.status).to eq(422) end @@ -130,14 +130,14 @@ module Spree::Api MSG put spree.api_checkout_path(order), - params: { order_token: order.guest_token, order: { + params: {order_token: order.guest_token, order: { bill_address_attributes: address, ship_address_attributes: address - } } + }} # Shipments manifests should not return the ENTIRE variant # This information is already present within the order's line items - expect(json_response['shipments'].first['manifest'].first['variant']).to be_nil - expect(json_response['shipments'].first['manifest'].first['variant_id']).to_not be_nil + expect(json_response["shipments"].first["manifest"].first["variant"]).to be_nil + expect(json_response["shipments"].first["manifest"].first["variant_id"]).to_not be_nil end end @@ -146,25 +146,25 @@ module Spree::Api shipment = create(:shipment, order:) shipment.refresh_rates shipping_rate = shipment.shipping_rates.where(selected: false).first - put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { shipments_attributes: { "0" => { selected_shipping_rate_id: shipping_rate.id, id: shipment.id } } } } + put spree.api_checkout_path(order.to_param), params: {order_token: order.guest_token, order: {shipments_attributes: {"0" => {selected_shipping_rate_id: shipping_rate.id, id: shipment.id}}}} expect(response.status).to eq(200) # Find the correct shipment... - json_shipment = json_response['shipments'].detect { |value| value["id"] == shipment.id } + json_shipment = json_response["shipments"].detect { |value| value["id"] == shipment.id } # Find the correct shipping rate for that shipment... - json_shipping_rate = json_shipment['shipping_rates'].detect { |value| value["id"] == shipping_rate.id } + json_shipping_rate = json_shipment["shipping_rates"].detect { |value| value["id"] == shipping_rate.id } # ... And finally ensure that it's selected - expect(json_shipping_rate['selected']).to be true + expect(json_shipping_rate["selected"]).to be true # Order should automatically transfer to payment because all criteria are met - expect(json_response['state']).to eq('payment') + expect(json_response["state"]).to eq("payment") end it "can update payment method and transition from payment to confirm" do order.update_column(:state, "payment") allow_any_instance_of(Spree::PaymentMethod::BogusCreditCard).to receive(:source_required?).and_return(false) - put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { payments_attributes: [{ payment_method_id: @payment_method.id }] } } - expect(json_response['state']).to eq('confirm') - expect(json_response['payments'][0]['payment_method']['name']).to eq(@payment_method.name) - expect(json_response['payments'][0]['amount']).to eq(order.total.to_s) + put spree.api_checkout_path(order.to_param), params: {order_token: order.guest_token, order: {payments_attributes: [{payment_method_id: @payment_method.id}]}} + expect(json_response["state"]).to eq("confirm") + expect(json_response["payments"][0]["payment_method"]["name"]).to eq(@payment_method.name) + expect(json_response["payments"][0]["amount"]).to eq(order.total.to_s) expect(response.status).to eq(200) end @@ -174,7 +174,7 @@ module Spree::Api allow_any_instance_of(Spree::PaymentMethod::BogusCreditCard).to receive(:source_required?).and_return(false) @payment_method.update!(available_to_users: false) expect { - put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { payments_attributes: [{ payment_method_id: @payment_method.id }] } } + put spree.api_checkout_path(order.to_param), params: {order_token: order.guest_token, order: {payments_attributes: [{payment_method_id: @payment_method.id}]}} }.not_to change { Spree::Payment.count } expect(response.status).to eq(404) end @@ -182,13 +182,13 @@ module Spree::Api it "returns errors when source is required and missing" do order.update_column(:state, "payment") - put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { payments_attributes: [{ payment_method_id: @payment_method.id }] } } + put spree.api_checkout_path(order.to_param), params: {order_token: order.guest_token, order: {payments_attributes: [{payment_method_id: @payment_method.id}]}} expect(response.status).to eq(422) - source_errors = json_response['errors']['payments.source'] + source_errors = json_response["errors"]["payments.source"] expect(source_errors).to include("can't be blank") end - describe 'setting the payment amount' do + describe "setting the payment amount" do let(:order) { create(:order_with_line_items, state: :payment) } let(:params) do { @@ -204,14 +204,14 @@ module Spree::Api } end - it 'sets the payment amount to the order total' do + it "sets the payment amount to the order total" do put(spree.api_checkout_path(order), params:) expect(response.status).to eq(200) - expect(json_response['payments'][0]['amount']).to eq(order.total.to_s) + expect(json_response["payments"][0]["amount"]).to eq(order.total.to_s) end end - describe 'payment method with source and transition from payment to confirm' do + describe "payment method with source and transition from payment to confirm" do before do order.update_column(:state, "payment") end @@ -230,15 +230,15 @@ module Spree::Api } end - it 'succeeds' do + it "succeeds" do put(spree.api_checkout_path(order), params:) expect(response.status).to eq(200) - expect(json_response['payments'][0]['payment_method']['name']).to eq(@payment_method.name) - expect(json_response['payments'][0]['amount']).to eq(order.total.to_s) + expect(json_response["payments"][0]["payment_method"]["name"]).to eq(@payment_method.name) + expect(json_response["payments"][0]["amount"]).to eq(order.total.to_s) end end - context 'when source is missing attributes' do + context "when source is missing attributes" do before do order.update_column(:state, "payment") end @@ -250,18 +250,18 @@ module Spree::Api payments_attributes: [ { payment_method_id: @payment_method.id.to_s, - source_attributes: { name: "Spree" } + source_attributes: {name: "Spree"} } ] } } end - it 'returns errors' do + it "returns errors" do put(spree.api_checkout_path(order), params:) expect(response.status).to eq(422) - cc_errors = json_response['errors']['payments.Credit Card'] + cc_errors = json_response["errors"]["payments.Credit Card"] expect(cc_errors).to include("Card Number can't be blank") expect(cc_errors).to include("Month is not a number") expect(cc_errors).to include("Year is not a number") @@ -269,7 +269,7 @@ module Spree::Api end end - context 'reusing a credit card' do + context "reusing a credit card" do before do order.update_column(:state, "payment") end @@ -282,7 +282,7 @@ module Spree::Api { source_attributes: { wallet_payment_source_id: wallet_payment_source.id.to_param, - verification_value: '456' + verification_value: "456" } } ] @@ -298,12 +298,12 @@ module Spree::Api create(:credit_card, user_id: order.user_id, payment_method_id: @payment_method.id) end - it 'succeeds' do + it "succeeds" do # unfortunately the credit card gets reloaded by `@order.next` before # the controller action finishes so this is the best way I could think # of to test that the verification_value gets set. expect_any_instance_of(Spree::CreditCard).to( - receive(:verification_value=).with('456').and_call_original + receive(:verification_value=).with("456").and_call_original ) put(spree.api_checkout_path(order), params:) @@ -326,7 +326,7 @@ module Spree::Api } ], ship_address_attributes: { - zipcode: 'MALICIOUS ZIPCODE' + zipcode: "MALICIOUS ZIPCODE" } } } @@ -337,8 +337,8 @@ module Spree::Api end it "returns the order if the order is already complete" do - order.update_columns(completed_at: Time.current, state: 'complete') - put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token } + order.update_columns(completed_at: Time.current, state: "complete") + put spree.api_checkout_path(order.to_param), params: {order_token: order.guest_token} assert_unauthorized! end @@ -348,8 +348,8 @@ module Spree::Api # Regression test for https://github.com/spree/spree/issues/3784 it "can update the special instructions for an order" do instructions = "Don't drop it. (Please)" - put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { special_instructions: instructions } } - expect(json_response['special_instructions']).to eql(instructions) + put spree.api_checkout_path(order.to_param), params: {order_token: order.guest_token, order: {special_instructions: instructions}} + expect(json_response["special_instructions"]).to eql(instructions) end end @@ -358,15 +358,15 @@ module Spree::Api it "can assign a user to the order" do user = create(:user) # Need to pass email as well so that validations succeed - put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { user_id: user.id, email: "guest@solidus.io" } } + put spree.api_checkout_path(order.to_param), params: {order_token: order.guest_token, order: {user_id: user.id, email: "guest@solidus.io"}} expect(response.status).to eq(200) - expect(json_response['user_id']).to eq(user.id) + expect(json_response["user_id"]).to eq(user.id) end end it "can assign an email to the order" do - put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { email: "guest@solidus.io" } } - expect(json_response['email']).to eq("guest@solidus.io") + put spree.api_checkout_path(order.to_param), params: {order_token: order.guest_token, order: {email: "guest@solidus.io"}} + expect(json_response["email"]).to eq("guest@solidus.io") expect(response.status).to eq(200) end end @@ -376,27 +376,27 @@ module Spree::Api it "cannot transition to address without a line item" do order.line_items.delete_all order.update_column(:email, "solidus@example.com") - put spree.next_api_checkout_path(order), params: { order_token: order.guest_token } + put spree.next_api_checkout_path(order), params: {order_token: order.guest_token} expect(response.status).to eq(422) - expect(json_response["errors"]["base"]).to include(I18n.t('spree.there_are_no_items_for_this_order')) + expect(json_response["errors"]["base"]).to include(I18n.t("spree.there_are_no_items_for_this_order")) end it "can transition an order to the next state" do order.update_column(:email, "solidus@example.com") - put spree.next_api_checkout_path(order), params: { order_token: order.guest_token } + put spree.next_api_checkout_path(order), params: {order_token: order.guest_token} expect(response.status).to eq(200) - expect(json_response['state']).to eq('address') + expect(json_response["state"]).to eq("address") end it "cannot transition if order email is blank" do order.update_columns( - state: 'address', + state: "address", email: nil ) - put spree.next_api_checkout_path(order), params: { id: order.to_param, order_token: order.guest_token } + put spree.next_api_checkout_path(order), params: {id: order.to_param, order_token: order.guest_token} expect(response.status).to eq(422) - expect(json_response['error']).to match(/could not be transitioned/) + expect(json_response["error"]).to match(/could not be transitioned/) end end @@ -406,7 +406,7 @@ module Spree::Api put spree.complete_api_checkout_path(order), params: end - let(:params) { { order_token: order.guest_token } } + let(:params) { {order_token: order.guest_token} } let(:order) { create(:order_with_line_items) } before do @@ -416,13 +416,13 @@ module Spree::Api it "can transition from confirm to complete" do allow_any_instance_of(Spree::Order).to receive_messages(payment_required?: false) subject - expect(json_response['state']).to eq('complete') + expect(json_response["state"]).to eq("complete") expect(response.status).to eq(200) end it "returns a sensible error when no payment method is specified" do subject - expect(json_response["errors"]["base"]).to include(I18n.t('spree.no_payment_found')) + expect(json_response["errors"]["base"]).to include(I18n.t("spree.no_payment_found")) end context "with mismatched expected_total" do @@ -431,19 +431,19 @@ module Spree::Api it "returns an error if expected_total is present and does not match actual total" do subject expect(response.status).to eq(400) - expect(json_response['errors']['expected_total']).to include(I18n.t('spree.api.order.expected_total_mismatch')) + expect(json_response["errors"]["expected_total"]).to include(I18n.t("spree.api.order.expected_total_mismatch")) end end - context 'when cannot complete' do + context "when cannot complete" do let(:order) { create(:order) } - before { order.update(state: 'cart') } + before { order.update(state: "cart") } - it 'returns a state machine error' do + it "returns a state machine error" do subject - expect(json_response['error']).to eq(I18n.t(:could_not_transition, scope: "spree.api", resource: 'order')) + expect(json_response["error"]).to eq(I18n.t(:could_not_transition, scope: "spree.api", resource: "order")) expect(response.status).to eq(422) end end @@ -453,14 +453,14 @@ module Spree::Api context "PUT 'advance'" do let!(:order) { create(:order_with_line_items) } - it 'continues to advance an order while it can move forward' do + it "continues to advance an order while it can move forward" do expect_any_instance_of(Spree::Order).to receive(:next).exactly(3).times.and_return(true, true, false) - put spree.advance_api_checkout_path(order), params: { order_token: order.guest_token } + put spree.advance_api_checkout_path(order), params: {order_token: order.guest_token} end - it 'returns the order' do - put spree.advance_api_checkout_path(order), params: { order_token: order.guest_token } - expect(json_response['id']).to eq(order.id) + it "returns the order" do + put spree.advance_api_checkout_path(order), params: {order_token: order.guest_token} + expect(json_response["id"]).to eq(order.id) end end end diff --git a/api/spec/requests/spree/api/classifications_spec.rb b/api/spec/requests/spree/api/classifications_spec.rb index 1024c5d3fe7..f38c0a412e9 100644 --- a/api/spec/requests/spree/api/classifications_spec.rb +++ b/api/spec/requests/spree/api/classifications_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Classifications', type: :request do + describe "Classifications", type: :request do let(:taxon) do taxon = create(:taxon) @@ -20,7 +20,7 @@ module Spree::Api context "as a user" do it "cannot change the order of a product" do - put spree.api_classifications_path, params: { taxon_id: taxon, product_id: taxon.products.first, position: 1 } + put spree.api_classifications_path, params: {taxon_id: taxon, product_id: taxon.products.first, position: 1} expect(response.status).to eq(401) end end @@ -33,7 +33,7 @@ module Spree::Api it "can change the order a product" do classification = taxon.classifications.find_by(product_id: last_product.id) expect(classification.position).to eq(3) - put spree.api_classifications_path, params: { taxon_id: taxon.id, product_id: last_product.id, position: 0 } + put spree.api_classifications_path, params: {taxon_id: taxon.id, product_id: last_product.id, position: 0} expect(response.status).to eq(200) expect(classification.reload.position).to eq(1) end @@ -41,7 +41,7 @@ module Spree::Api it "should touch the taxon" do taxon.update(updated_at: Time.current - 10.seconds) taxon_last_updated_at = taxon.updated_at - put spree.api_classifications_path, params: { taxon_id: taxon.id, product_id: last_product.id, position: 0 } + put spree.api_classifications_path, params: {taxon_id: taxon.id, product_id: last_product.id, position: 0} taxon.reload expect(taxon_last_updated_at.to_i).to_not eq(taxon.updated_at.to_i) end diff --git a/api/spec/requests/spree/api/config_spec.rb b/api/spec/requests/spree/api/config_spec.rb index 24cd7cd644e..c9bc2e046f2 100644 --- a/api/spec/requests/spree/api/config_spec.rb +++ b/api/spec/requests/spree/api/config_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Configuration', type: :request do + describe "Configuration", type: :request do let!(:default_country) { create :country, iso: "US" } before do @@ -11,13 +11,13 @@ module Spree::Api end it "returns Spree::Money settings" do - get '/api/config/money' + get "/api/config/money" expect(response).to be_successful expect(json_response["symbol"]).to eq("$") end it "returns some configuration settings" do - get '/api/config' + get "/api/config" expect(response).to be_successful expect(json_response["default_country_iso"]).to eq("US") end diff --git a/api/spec/requests/spree/api/countries_spec.rb b/api/spec/requests/spree/api/countries_spec.rb index bbb66ecf808..6d6b2668630 100644 --- a/api/spec/requests/spree/api/countries_spec.rb +++ b/api/spec/requests/spree/api/countries_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Countries', type: :request do + describe "Countries", type: :request do before do stub_authentication! @state = create(:state) @@ -12,7 +12,7 @@ module Spree::Api it "gets all countries" do get spree.api_countries_path - expect(json_response['countries'].first['iso3']).to eq @country.iso3 + expect(json_response["countries"].first["iso3"]).to eq @country.iso3 end context "with two countries" do @@ -20,29 +20,29 @@ module Spree::Api it "can view all countries" do get spree.api_countries_path - expect(json_response['count']).to eq(2) - expect(json_response['current_page']).to eq(1) - expect(json_response['pages']).to eq(1) + expect(json_response["count"]).to eq(2) + expect(json_response["current_page"]).to eq(1) + expect(json_response["pages"]).to eq(1) end - it 'can query the results through a paramter' do - get spree.api_countries_path, params: { q: { name_cont: 'zam' } } - expect(json_response['count']).to eq(1) - expect(json_response['countries'].first['name']).to eq @zambia.name + it "can query the results through a paramter" do + get spree.api_countries_path, params: {q: {name_cont: "zam"}} + expect(json_response["count"]).to eq(1) + expect(json_response["countries"].first["name"]).to eq @zambia.name end - it 'can control the page size through a parameter' do - get spree.api_countries_path, params: { per_page: 1 } - expect(json_response['count']).to eq(1) - expect(json_response['current_page']).to eq(1) - expect(json_response['pages']).to eq(2) + it "can control the page size through a parameter" do + get spree.api_countries_path, params: {per_page: 1} + expect(json_response["count"]).to eq(1) + expect(json_response["current_page"]).to eq(1) + expect(json_response["pages"]).to eq(2) end end it "includes states" do get spree.api_country_path(@country.id) - states = json_response['states'] - expect(states.first['name']).to eq @state.name + states = json_response["states"] + expect(states.first["name"]).to eq @state.name end end end diff --git a/api/spec/requests/spree/api/coupon_codes_spec.rb b/api/spec/requests/spree/api/coupon_codes_spec.rb index 993d5852422..388c29f48f7 100644 --- a/api/spec/requests/spree/api/coupon_codes_spec.rb +++ b/api/spec/requests/spree/api/coupon_codes_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Coupon codes', type: :request do + describe "Coupon codes", type: :request do let(:current_api_user) do user = Spree.user_class.new(email: "solidus@example.com") user.generate_spree_api_key! @@ -15,16 +15,16 @@ module Spree::Api expect(Spree::Config.promotions.coupon_code_handler_class).to receive(:new).and_return(handler) end - describe '#create' do + describe "#create" do before do allow_any_instance_of(Spree::Order).to receive_messages user: current_api_user end - context 'when successful' do + context "when successful" do let(:order) { create(:order_with_line_items) } let(:successful_application) do double( - 'handler', + "handler", successful?: true, success: "The coupon code was successfully applied to your order.", error: nil, @@ -33,11 +33,11 @@ module Spree::Api end let(:handler) do - double('handler', apply: successful_application) + double("handler", apply: successful_application) end - it 'applies the coupon' do - post spree.api_order_coupon_codes_path(order), params: { coupon_code: "10OFF" } + it "applies the coupon" do + post spree.api_order_coupon_codes_path(order), params: {coupon_code: "10OFF"} expect(response.status).to eq(200) expect(json_response).to eq({ @@ -49,29 +49,29 @@ module Spree::Api end end - context 'when unsuccessful' do + context "when unsuccessful" do let(:order) { create(:order) } let(:unsuccessful_application) do double( - 'handler', + "handler", successful?: false, success: nil, - error: "This coupon code could not be applied to the cart at this time.", + error: "This coupon code could not be applied to the cart at this time.", status_code: "coupon_code_unknown_error" ) end let(:handler) do - double('handler', apply: unsuccessful_application) + double("handler", apply: unsuccessful_application) end - it 'returns an error' do - post spree.api_order_coupon_codes_path(order), params: { coupon_code: "10OFF" } + it "returns an error" do + post spree.api_order_coupon_codes_path(order), params: {coupon_code: "10OFF"} expect(response.status).to eq(422) expect(json_response).to eq({ "success" => nil, - "error" => I18n.t('spree.coupon_code_unknown_error'), + "error" => I18n.t("spree.coupon_code_unknown_error"), "successful" => false, "status_code" => "coupon_code_unknown_error" }) @@ -79,17 +79,17 @@ module Spree::Api end end - describe '#destroy' do + describe "#destroy" do let(:order) { create(:order_with_line_items, user: current_api_user) } subject do delete spree.api_order_coupon_code_path(order, "10OFF") end - context 'when successful' do + context "when successful" do let(:successful_removal) do double( - 'handler', + "handler", successful?: true, success: "The coupon code was successfully removed from this order.", error: nil, @@ -98,14 +98,14 @@ module Spree::Api end let(:handler) do - double('handler', remove: successful_removal) + double("handler", remove: successful_removal) end - it 'removes the coupon' do + it "removes the coupon" do subject expect(response.status).to eq(200) expect(json_response).to eq({ - "success" => I18n.t('spree.coupon_code_removed'), + "success" => I18n.t("spree.coupon_code_removed"), "error" => nil, "successful" => true, "status_code" => "coupon_code_removed" @@ -113,10 +113,10 @@ module Spree::Api end end - context 'when unsuccessful' do + context "when unsuccessful" do let(:unsuccessful_removal) do double( - 'handler', + "handler", successful?: false, success: nil, error: "The coupon code you are trying to remove is not present on this order.", @@ -125,16 +125,16 @@ module Spree::Api end let(:handler) do - double('handler', remove: unsuccessful_removal) + double("handler", remove: unsuccessful_removal) end - it 'returns an error' do + it "returns an error" do subject expect(response.status).to eq(422) expect(json_response).to eq({ "success" => nil, - "error" => I18n.t('spree.coupon_code_not_present'), + "error" => I18n.t("spree.coupon_code_not_present"), "successful" => false, "status_code" => "coupon_code_not_present" }) diff --git a/api/spec/requests/spree/api/credit_cards_spec.rb b/api/spec/requests/spree/api/credit_cards_spec.rb index aea0c96252b..1388391d890 100644 --- a/api/spec/requests/spree/api/credit_cards_spec.rb +++ b/api/spec/requests/spree/api/credit_cards_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Credit cards', type: :request do - describe '#index' do + describe "Credit cards", type: :request do + describe "#index" do let!(:admin_user) do create(:admin_user) end @@ -77,15 +77,15 @@ module Spree::Api create(:credit_card, user_id: normal_user.id, gateway_customer_profile_id: "another-normal-user-random") end - it 'can control the page size through a parameter' do - get spree.api_user_credit_cards_path(current_api_user.id), params: { per_page: 1 } - expect(json_response['count']).to eq(1) - expect(json_response['current_page']).to eq(1) - expect(json_response['pages']).to eq(2) + it "can control the page size through a parameter" do + get spree.api_user_credit_cards_path(current_api_user.id), params: {per_page: 1} + expect(json_response["count"]).to eq(1) + expect(json_response["current_page"]).to eq(1) + expect(json_response["pages"]).to eq(2) end it "can query the results through a parameter" do - get spree.api_user_credit_cards_path(current_api_user.id), params: { q: { id_eq: normal_user_card.id } } + get spree.api_user_credit_cards_path(current_api_user.id), params: {q: {id_eq: normal_user_card.id}} expect(json_response["credit_cards"].count).to eq(1) expect(json_response["count"]).to eq(1) expect(json_response["current_page"]).to eq(1) @@ -95,31 +95,31 @@ module Spree::Api end end - describe '#update' do - let(:credit_card) { create(:credit_card, name: 'Joe Shmoe', user: credit_card_user) } + describe "#update" do + let(:credit_card) { create(:credit_card, name: "Joe Shmoe", user: credit_card_user) } let(:credit_card_user) { create(:user) } before do stub_authentication! end - context 'when the user is authorized' do + context "when the user is authorized" do let(:current_api_user) { credit_card_user } - it 'updates the credit card' do + it "updates the credit card" do expect { - put spree.api_credit_card_path(credit_card.to_param), params: { credit_card: { name: 'Jordan Brough' } } + put spree.api_credit_card_path(credit_card.to_param), params: {credit_card: {name: "Jordan Brough"}} }.to change { credit_card.reload.name - }.from('Joe Shmoe').to('Jordan Brough') + }.from("Joe Shmoe").to("Jordan Brough") end end - context 'when the user is not authorized' do + context "when the user is not authorized" do let(:current_api_user) { create(:user) } - it 'rejects the request' do - put spree.api_credit_card_path(credit_card.to_param), params: { credit_card: { name: 'Jordan Brough' } } + it "rejects the request" do + put spree.api_credit_card_path(credit_card.to_param), params: {credit_card: {name: "Jordan Brough"}} expect(response.status).to eq(401) end end diff --git a/api/spec/requests/spree/api/customer_returns_spec.rb b/api/spec/requests/spree/api/customer_returns_spec.rb index a735a999af6..41366686bd0 100644 --- a/api/spec/requests/spree/api/customer_returns_spec.rb +++ b/api/spec/requests/spree/api/customer_returns_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Customer returns', type: :request do + describe "Customer returns", type: :request do let!(:order) { create(:shipped_order) } let(:attributes) { [:id, :number, :stock_location_id] } @@ -64,14 +64,14 @@ module Spree::Api get spree.api_order_customer_return_path(customer_return.order, customer_return.id) - expect(json_response).to have_key('admin_metadata') + expect(json_response).to have_key("admin_metadata") end it "can get a list of customer returns" do FactoryBot.create(:customer_return, shipped_order: order) FactoryBot.create(:customer_return, shipped_order: order) - get spree.api_order_customer_returns_path(order), params: { order_id: order.number } + get spree.api_order_customer_returns_path(order), params: {order_id: order.number} expect(response.status).to eq(200) @@ -81,25 +81,25 @@ module Spree::Api expect(customer_returns.first).not_to eq(customer_returns.last) end - it 'can control the page size through a parameter' do + it "can control the page size through a parameter" do FactoryBot.create(:customer_return, shipped_order: order) FactoryBot.create(:customer_return, shipped_order: order) - get spree.api_order_customer_returns_path(order), params: { order_id: order.number, per_page: 1 } + get spree.api_order_customer_returns_path(order), params: {order_id: order.number, per_page: 1} - expect(json_response['count']).to eq(1) - expect(json_response['current_page']).to eq(1) - expect(json_response['pages']).to eq(2) + expect(json_response["count"]).to eq(1) + expect(json_response["current_page"]).to eq(1) + expect(json_response["pages"]).to eq(2) end - it 'can query the results through a parameter' do + it "can query the results through a parameter" do FactoryBot.create(:customer_return, shipped_order: order) - expected_result = FactoryBot.create(:customer_return, number: 'CR12', shipped_order: order) + expected_result = FactoryBot.create(:customer_return, number: "CR12", shipped_order: order) - get spree.api_order_customer_returns_path(order), params: { q: { number_eq: 'CR12' } } + get spree.api_order_customer_returns_path(order), params: {q: {number_eq: "CR12"}} - expect(json_response['count']).to eq(1) - expect(json_response["customer_returns"].first['number']).to eq expected_result.number + expect(json_response["count"]).to eq(1) + expect(json_response["customer_returns"].first["number"]).to eq expected_result.number end it "can learn how to create a new customer return" do @@ -113,7 +113,7 @@ module Spree::Api final_stock_location = FactoryBot.create(:stock_location) customer_return = FactoryBot.create(:customer_return, stock_location: initial_stock_location) - put spree.api_order_customer_return_path(customer_return.order, customer_return.id), params: { order_id: customer_return.order.number, customer_return: { stock_location_id: final_stock_location.id } } + put spree.api_order_customer_return_path(customer_return.order, customer_return.id), params: {order_id: customer_return.order.number, customer_return: {stock_location_id: final_stock_location.id}} expect(response.status).to eq(200) expect(json_response).to have_attributes(attributes) @@ -126,28 +126,28 @@ module Spree::Api customer_return = FactoryBot.create(:customer_return, stock_location: initial_stock_location) put spree.api_order_customer_return_path(customer_return.order, customer_return.id), - params: { - order_id: customer_return.order.number, - customer_return: { stock_location_id: final_stock_location.id, admin_metadata: { 'order_number' => 'PN345678' } } - } + params: { + order_id: customer_return.order.number, + customer_return: {stock_location_id: final_stock_location.id, admin_metadata: {"order_number" => "PN345678"}} + } expect(response.status).to eq(200) expect(json_response).to have_attributes(attributes) expect(json_response["stock_location_id"]).to eq final_stock_location.id - expect(json_response["admin_metadata"]).to eq({ 'order_number' => 'PN345678' }) + expect(json_response["admin_metadata"]).to eq({"order_number" => "PN345678"}) end context "when creating new return items" do it "can create a new customer return" do stock_location = FactoryBot.create(:stock_location) unit = FactoryBot.create(:inventory_unit, state: "shipped") - cr_params = { stock_location_id: stock_location.id, - return_items_attributes: [{ - inventory_unit_id: unit.id, - reception_status_event: "receive", - }] } + cr_params = {stock_location_id: stock_location.id, + return_items_attributes: [{ + inventory_unit_id: unit.id, + reception_status_event: "receive" + }]} - post spree.api_order_customer_returns_path(order), params: { order_id: order.number, customer_return: cr_params } + post spree.api_order_customer_returns_path(order), params: {order_id: order.number, customer_return: cr_params} expect(response.status).to eq(201) expect(json_response).to have_attributes(attributes) @@ -184,17 +184,17 @@ module Spree::Api end it "can create a new customer return" do - expect { subject }.to change { Spree::CustomerReturn.count }. - from(0).to(1) + expect { subject }.to change { Spree::CustomerReturn.count } + .from(0).to(1) expect(response).to have_http_status(:success) expect(json_response).to have_attributes(attributes) end it "does not change the reception status of the return item" do - expect { subject }. - to_not change { return_item.reload.reception_status }. - from("awaiting") + expect { subject } + .to_not change { return_item.reload.reception_status } + .from("awaiting") end context "with reception_status_event provided for return item" do @@ -208,9 +208,9 @@ module Spree::Api end it "updates the reception status of the return item" do - expect { subject }. - to change { return_item.reload.reception_status }. - from("awaiting").to("received") + expect { subject } + .to change { return_item.reload.reception_status } + .from("awaiting").to("received") end end end diff --git a/api/spec/requests/spree/api/images_spec.rb b/api/spec/requests/spree/api/images_spec.rb index dc1054fdffe..7c697d9fe2d 100644 --- a/api/spec/requests/spree/api/images_spec.rb +++ b/api/spec/requests/spree/api/images_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Images', type: :request do + describe "Images", type: :request do let!(:product) { create(:product) } let!(:attributes) { [:id, :position, :attachment_content_type, - :attachment_file_name, :type, :attachment_updated_at, :attachment_width, - :attachment_height, :alt] + :attachment_file_name, :type, :attachment_updated_at, :attachment_width, + :attachment_height, :alt] } before do @@ -22,10 +22,10 @@ module Spree::Api expect do post spree.api_product_images_path(product.id), params: { image: { - attachment: upload_image('blank.jpg'), - viewable_type: 'Spree::Variant', + attachment: upload_image("blank.jpg"), + viewable_type: "Spree::Variant", viewable_id: product.master.to_param - }, + } } expect(response.status).to eq(201) expect(json_response).to have_attributes(attributes) @@ -33,7 +33,7 @@ module Spree::Api end context "working with an existing product image" do - let!(:product_image) { product.master.images.create!(attachment: image('blank.jpg')) } + let!(:product_image) { product.master.images.create!(attachment: image("blank.jpg")) } it "can get a single product image" do get spree.api_product_image_path(product.id, product_image) @@ -63,7 +63,7 @@ module Spree::Api it "can update image data" do expect(product_image.position).to eq(1) - put spree.api_variant_image_path(product.master.id, product_image), params: { image: { position: 2 } } + put spree.api_variant_image_path(product.master.id, product_image), params: {image: {position: 2}} expect(response.status).to eq(200) expect(json_response).to have_attributes(attributes) expect(product_image.reload.position).to eq(2) @@ -87,27 +87,27 @@ module Spree::Api end end - context 'when image belongs to another product' do + context "when image belongs to another product" do let!(:product_image) { another_product.master.images.create!(attachment: image("blank.jpg")) } let(:another_product) { create(:product) } it "cannot get an image of another product" do get spree.api_product_image_path(product.id, product_image) expect(response.status).to eq(404) - expect(json_response['error']).to eq(I18n.t(:resource_not_found, scope: "spree.api")) + expect(json_response["error"]).to eq(I18n.t(:resource_not_found, scope: "spree.api")) end it "cannot get an image of another variant" do get spree.api_variant_image_path(product.master.id, product_image) expect(response.status).to eq(404) - expect(json_response['error']).to eq(I18n.t(:resource_not_found, scope: "spree.api")) + expect(json_response["error"]).to eq(I18n.t(:resource_not_found, scope: "spree.api")) end it "cannot update image of another product" do expect(product_image.position).to eq(1) - put spree.api_variant_image_path(product.master.id, product_image), params: { image: { position: 2 } } + put spree.api_variant_image_path(product.master.id, product_image), params: {image: {position: 2}} expect(response.status).to eq(404) - expect(json_response['error']).to eq(I18n.t(:resource_not_found, scope: "spree.api")) + expect(json_response["error"]).to eq(I18n.t(:resource_not_found, scope: "spree.api")) end end end diff --git a/api/spec/requests/spree/api/inventory_units_spec.rb b/api/spec/requests/spree/api/inventory_units_spec.rb index 8c594b671d3..be2b30422c9 100644 --- a/api/spec/requests/spree/api/inventory_units_spec.rb +++ b/api/spec/requests/spree/api/inventory_units_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Inventory units', type: :request do + describe "Inventory units", type: :request do let!(:inventory_unit) { create(:inventory_unit) } before do @@ -16,38 +16,38 @@ module Spree::Api it "gets an inventory unit" do get spree.api_inventory_unit_path(inventory_unit) - expect(json_response['state']).to eq inventory_unit.state + expect(json_response["state"]).to eq inventory_unit.state end it "updates an inventory unit" do put spree.api_inventory_unit_path(inventory_unit), params: { - inventory_unit: { variant_id: variant.id } + inventory_unit: {variant_id: variant.id} } - expect(json_response['variant_id']).to eq variant.id + expect(json_response["variant_id"]).to eq variant.id end - context 'fires state event' do - it 'if supplied with :fire param' do + context "fires state event" do + it "if supplied with :fire param" do put spree.api_inventory_unit_path(inventory_unit), params: { - fire: 'ship', - inventory_unit: { variant_id: variant.id } + fire: "ship", + inventory_unit: {variant_id: variant.id} } - expect(json_response['state']).to eq 'shipped' + expect(json_response["state"]).to eq "shipped" end - it 'and returns exception if cannot fire' do + it "and returns exception if cannot fire" do put spree.api_inventory_unit_path(inventory_unit), params: { - fire: 'return' + fire: "return" } - expect(json_response['exception']).to match /cannot transition to return/ + expect(json_response["exception"]).to match(/cannot transition to return/) end - it 'and returns exception bad state' do + it "and returns exception bad state" do put spree.api_inventory_unit_path(inventory_unit), params: { - fire: 'bad' + fire: "bad" } - expect(json_response['exception']).to match /cannot transition to bad/ + expect(json_response["exception"]).to match(/cannot transition to bad/) end end end diff --git a/api/spec/requests/spree/api/line_items_spec.rb b/api/spec/requests/spree/api/line_items_spec.rb index 421148c0b55..e7d72e76fdc 100644 --- a/api/spec/requests/spree/api/line_items_spec.rb +++ b/api/spec/requests/spree/api/line_items_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api Spree::PermittedAttributes.module_eval do @@ -8,15 +8,15 @@ module Spree::Api end unless Spree::PermittedAttributes.line_item_attributes.include? :options - Spree::PermittedAttributes.line_item_attributes << { options: [:some_option] } + Spree::PermittedAttributes.line_item_attributes << {options: [:some_option]} end - describe 'Line items', type: :request do + describe "Line items", type: :request do let!(:order) { create(:order_with_line_items, line_items_count: 1) } let(:product) { create(:product) } let(:attributes) { [:id, :quantity, :price, :variant, :total, :display_amount, :single_display_amount] } - let(:resource_scoping) { { order_id: order.to_param } } + let(:resource_scoping) { {order_id: order.to_param} } before do stub_authentication! @@ -31,7 +31,7 @@ module Spree::Api context "authenticating with a token" do it "can add a new line item to an existing order" do - post spree.api_order_line_items_path(order), params: { line_item: { variant_id: product.master.to_param, quantity: 1 }, order_token: order.guest_token } + post spree.api_order_line_items_path(order), params: {line_item: {variant_id: product.master.to_param, quantity: 1}, order_token: order.guest_token} expect(response.status).to eq(201) expect(json_response).to have_attributes(attributes) expect(json_response["variant"]["name"]).not_to be_blank @@ -39,8 +39,8 @@ module Spree::Api it "can add a new line item to an existing order with token in header" do post spree.api_order_line_items_path(order), - params: { line_item: { variant_id: product.master.to_param, quantity: 1 } }, - headers: { 'X-Spree-Order-Token' => order.guest_token } + params: {line_item: {variant_id: product.master.to_param, quantity: 1}}, + headers: {"X-Spree-Order-Token" => order.guest_token} expect(response.status).to eq(201) expect(json_response).to have_attributes(attributes) expect(json_response["variant"]["name"]).not_to be_blank @@ -56,13 +56,13 @@ module Spree::Api let!(:order) { create(:completed_order_with_totals) } it "can't add a new line item" do - post spree.api_order_line_items_path(order), params: { line_item: { variant_id: product.master.to_param, quantity: 1 } } + post spree.api_order_line_items_path(order), params: {line_item: {variant_id: product.master.to_param, quantity: 1}} assert_unauthorized! end it "can't update a line item" do line_item = order.line_items.first - put spree.api_order_line_item_path(order, line_item), params: { line_item: { quantity: 10 } } + put spree.api_order_line_item_path(order, line_item), params: {line_item: {quantity: 10}} assert_unauthorized! end @@ -74,7 +74,7 @@ module Spree::Api end it "can add a new line item to an existing order" do - post spree.api_order_line_items_path(order), params: { line_item: { variant_id: product.master.to_param, quantity: 1 } } + post spree.api_order_line_items_path(order), params: {line_item: {variant_id: product.master.to_param, quantity: 1}} expect(response.status).to eq(201) expect(json_response).to have_attributes(attributes) expect(json_response["variant"]["name"]).not_to be_blank @@ -85,47 +85,47 @@ module Spree::Api expect_any_instance_of(Spree::LineItem).to receive(:some_option=).with("foobar") end post spree.api_order_line_items_path(order), - params: { - line_item: { - variant_id: product.master.to_param, - quantity: 1, - options: { some_option: "foobar" } - } - } + params: { + line_item: { + variant_id: product.master.to_param, + quantity: 1, + options: {some_option: "foobar"} + } + } expect(response.status).to eq(201) end it "cannot see admin_metadata" do post spree.api_order_line_items_path(order), - params: { - line_item: { variant_id: product.master.to_param, quantity: 1 }, - order_token: order.guest_token - } + params: { + line_item: {variant_id: product.master.to_param, quantity: 1}, + order_token: order.guest_token + } expect(response.status).to eq(201) - expect(json_response).not_to have_key('admin_metadata') + expect(json_response).not_to have_key("admin_metadata") end it "allows creating line item with customer metadata but not admin metadata" do post spree.api_order_line_items_path(order), - params: { - line_item: { variant_id: product.master.to_param, - quantity: 1, - customer_metadata: { "Company" => "Sample Company" } } - } - - expect(json_response['customer_metadata']).to eq({ "Company" => "Sample Company" }) - expect(json_response).not_to have_key('admin_metadata') + params: { + line_item: {variant_id: product.master.to_param, + quantity: 1, + customer_metadata: {"Company" => "Sample Company"}} + } + + expect(json_response["customer_metadata"]).to eq({"Company" => "Sample Company"}) + expect(json_response).not_to have_key("admin_metadata") end - it '#create calls #invalid_resource! if adding a line item fails validation' do + it "#create calls #invalid_resource! if adding a line item fails validation" do allow_any_instance_of(Spree::LineItem).to receive(:valid?).and_return(false) expect_any_instance_of(Spree::Api::BaseController).to receive(:invalid_resource!).once - post spree.api_order_line_items_path(order), params: { line_item: { variant_id: product.master.to_param, quantity: 1 } } + post spree.api_order_line_items_path(order), params: {line_item: {variant_id: product.master.to_param, quantity: 1}} end it "default quantity to 1 if none is given" do - post spree.api_order_line_items_path(order), params: { line_item: { variant_id: product.master.to_param } } + post spree.api_order_line_items_path(order), params: {line_item: {variant_id: product.master.to_param}} expect(response.status).to eq(201) expect(json_response).to have_attributes(attributes) expect(json_response[:quantity]).to eq 1 @@ -133,7 +133,7 @@ module Spree::Api it "increases a line item's quantity if it exists already" do order.line_items.create(variant_id: product.master.id, quantity: 10) - post spree.api_order_line_items_path(order), params: { line_item: { variant_id: product.master.to_param, quantity: 1 } } + post spree.api_order_line_items_path(order), params: {line_item: {variant_id: product.master.to_param, quantity: 1}} expect(response.status).to eq(201) order.reload expect(order.line_items.count).to eq(2) # 1 original due to factory, + 1 in this test @@ -143,7 +143,7 @@ module Spree::Api it "can update a line item on the order" do line_item = order.line_items.first - put spree.api_order_line_item_path(order, line_item), params: { line_item: { quantity: 101 } } + put spree.api_order_line_item_path(order, line_item), params: {line_item: {quantity: 101}} expect(response.status).to eq(200) order.reload expect(order.total).to eq(1010) # 10 original due to factory, + 1000 in this test @@ -155,7 +155,7 @@ module Spree::Api line_item = order.line_items.first put spree.api_order_line_item_path(order, line_item), - params: { line_item: { quantity: 101, customer_metadata: { "adding_quantity" => "true" } } } + params: {line_item: {quantity: 101, customer_metadata: {"adding_quantity" => "true"}}} expect(response.status).to eq(200) @@ -164,7 +164,7 @@ module Spree::Api expect(order.total).to eq(1010) # 10 original due to factory, + 1000 in this test expect(json_response).to have_attributes(attributes) expect(json_response["quantity"]).to eq(101) - expect(json_response['customer_metadata']).to eq({ "adding_quantity" => "true" }) + expect(json_response["customer_metadata"]).to eq({"adding_quantity" => "true"}) end it "can update a line item's options on the order" do @@ -173,9 +173,9 @@ module Spree::Api end line_item = order.line_items.first put spree.api_order_line_item_path(order, line_item), - params: { - line_item: { quantity: 1, options: { some_option: "foobar" } } - } + params: { + line_item: {quantity: 1, options: {some_option: "foobar"}} + } expect(response.status).to eq(200) end @@ -197,13 +197,13 @@ module Spree::Api it "clear out shipments on create" do expect(order.reload.shipments).not_to be_empty - post spree.api_order_line_items_path(order), params: { line_item: { variant_id: product.master.to_param, quantity: 1 } } + post spree.api_order_line_items_path(order), params: {line_item: {variant_id: product.master.to_param, quantity: 1}} expect(order.reload.shipments).to be_empty end it "clear out shipments on update" do expect(order.reload.shipments).not_to be_empty - put spree.api_order_line_item_path(order, line_item), params: { line_item: { quantity: 1000 } } + put spree.api_order_line_item_path(order, line_item), params: {line_item: {quantity: 1000}} expect(order.reload.shipments).to be_empty end @@ -221,7 +221,7 @@ module Spree::Api it "doesn't destroy shipments or restart checkout flow" do expect(order.reload.shipments).not_to be_empty - post spree.api_order_line_items_path(order), params: { line_item: { variant_id: product.master.to_param, quantity: 1 } } + post spree.api_order_line_items_path(order), params: {line_item: {variant_id: product.master.to_param, quantity: 1}} expect(order.reload.shipments).not_to be_empty end end @@ -233,44 +233,44 @@ module Spree::Api it "can see admin_metadata" do post spree.api_order_line_items_path(order), - params: { - line_item: { variant_id: product.master.to_param, quantity: 1 }, - order_token: order.guest_token - } + params: { + line_item: {variant_id: product.master.to_param, quantity: 1}, + order_token: order.guest_token + } expect(response.status).to eq(201) - expect(json_response).to have_key('admin_metadata') + expect(json_response).to have_key("admin_metadata") end it "allows creating line item with customer metadata and admin metadata" do post spree.api_order_line_items_path(order), - params: { - line_item: { variant_id: product.master.to_param, - quantity: 1, - customer_metadata: { "Company" => "Sample Company" }, - admin_metadata: { "discount" => "not_applicable" } } - } - - expect(json_response['customer_metadata']).to eq({ "Company" => "Sample Company" }) - expect(json_response['admin_metadata']).to eq({ "discount" => "not_applicable" }) + params: { + line_item: {variant_id: product.master.to_param, + quantity: 1, + customer_metadata: {"Company" => "Sample Company"}, + admin_metadata: {"discount" => "not_applicable"}} + } + + expect(json_response["customer_metadata"]).to eq({"Company" => "Sample Company"}) + expect(json_response["admin_metadata"]).to eq({"discount" => "not_applicable"}) end end context "as just another user" do before do user = create(:user) - allow(Spree.user_class).to receive(:find_by). - and_return(user) + allow(Spree.user_class).to receive(:find_by) + .and_return(user) end it "cannot add a new line item to the order" do - post spree.api_order_line_items_path(order), params: { line_item: { variant_id: product.master.to_param, quantity: 1 } } + post spree.api_order_line_items_path(order), params: {line_item: {variant_id: product.master.to_param, quantity: 1}} assert_unauthorized! end it "cannot update a line item on the order" do line_item = order.line_items.first - put spree.api_order_line_item_path(order, line_item), params: { line_item: { quantity: 1000 } } + put spree.api_order_line_item_path(order, line_item), params: {line_item: {quantity: 1000}} assert_unauthorized! expect(line_item.reload.quantity).not_to eq(1000) end diff --git a/api/spec/requests/spree/api/option_types_spec.rb b/api/spec/requests/spree/api/option_types_spec.rb index d2db2630490..a4b78c24f4d 100644 --- a/api/spec/requests/spree/api/option_types_spec.rb +++ b/api/spec/requests/spree/api/option_types_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Option types', type: :request do + describe "Option types", type: :request do let(:attributes) { [:id, :name, :position, :presentation] } let!(:option_value) { create(:option_value) } let!(:option_type) { option_value.option_type } @@ -15,7 +15,7 @@ module Spree::Api def check_option_values(option_values) expect(option_values.count).to eq(1) expect(option_values.first).to have_attributes([:id, :name, :presentation, - :option_type_name, :option_type_id]) + :option_type_name, :option_type_id]) end it "can list all option types" do @@ -28,7 +28,7 @@ def check_option_values(option_values) it "can search for an option type" do create(:option_type, name: "buzz") - get spree.api_option_types_path, params: { q: { name_cont: option_type.name } } + get spree.api_option_types_path, params: {q: {name_cont: option_type.name}} expect(json_response.count).to eq(1) expect(json_response.first).to have_attributes(attributes) end @@ -36,7 +36,7 @@ def check_option_values(option_values) it "can retrieve a list of specific option types" do option_type_one = create(:option_type) create(:option_type) - get spree.api_option_types_path, params: { ids: "#{option_type.id},#{option_type_one.id}" } + get spree.api_option_types_path, params: {ids: "#{option_type.id},#{option_type_one.id}"} expect(json_response.count).to eq(2) check_option_values(json_response.first["option_values"]) @@ -106,12 +106,12 @@ def check_option_values(option_values) end it "cannot create an option type with invalid attributes" do - post spree.api_option_types_path, params: { option_type: {} } + post spree.api_option_types_path, params: {option_type: {}} expect(response.status).to eq(422) end it "can update an option type" do - put spree.api_option_type_path(option_type.id), params: { option_type: { name: "Option Type" } } + put spree.api_option_type_path(option_type.id), params: {option_type: {name: "Option Type"}} expect(response.status).to eq(200) option_type.reload @@ -119,7 +119,7 @@ def check_option_values(option_values) end it "cannot update an option type with invalid attributes" do - put spree.api_option_type_path(option_type.id), params: { option_type: { name: "" } } + put spree.api_option_type_path(option_type.id), params: {option_type: {name: ""}} expect(response.status).to eq(422) end diff --git a/api/spec/requests/spree/api/option_values_spec.rb b/api/spec/requests/spree/api/option_values_spec.rb index a6f5ef02b1a..c2e8f6c1b7c 100644 --- a/api/spec/requests/spree/api/option_values_spec.rb +++ b/api/spec/requests/spree/api/option_values_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Option values', type: :request do + describe "Option values", type: :request do let(:attributes) { [:id, :name, :presentation, :option_type_name, :option_type_name] } let!(:option_value) { create(:option_value) } let!(:option_type) { option_value.option_type } @@ -31,14 +31,14 @@ module Spree::Api let!(:variant) { create(:variant, product:, option_values: [product_option_value]) } it "can filter by product" do - get spree.api_option_values_path(q: { variants_product_id_eq: product.id } ) + get spree.api_option_values_path(q: {variants_product_id_eq: product.id}) expect(json_response.count).to eq(1) expect(json_response.first["presentation"]).to eq("BLACK") end end context "for a particular option type" do - let(:resource_scoping) { { option_type_id: option_type.id } } + let(:resource_scoping) { {option_type_id: option_type.id} } it "can list all option values" do get spree.api_option_values_path @@ -48,7 +48,7 @@ module Spree::Api it "can search for an option type" do create(:option_value, name: "buzz") - get spree.api_option_values_path, params: { q: { name_cont: option_value.name } } + get spree.api_option_values_path, params: {q: {name_cont: option_value.name}} expect(json_response.count).to eq(1) expect(json_response.first).to have_attributes(attributes) end @@ -56,7 +56,7 @@ module Spree::Api it "can retrieve a list of option types" do option_value_one = create(:option_value, option_type:) create(:option_value, option_type:) - get spree.api_option_values_path, params: { ids: [option_value.id, option_value_one.id] } + get spree.api_option_values_path, params: {ids: [option_value.id, option_value_one.id]} expect(json_response.count).to eq(2) end @@ -67,10 +67,10 @@ module Spree::Api it "cannot create a new option value" do post spree.api_option_type_option_values_path(option_type), params: { - option_value: { - name: "Option Value", - presentation: "Option Value" - } + option_value: { + name: "Option Value", + presentation: "Option Value" + } } assert_unauthorized! end @@ -78,11 +78,11 @@ module Spree::Api it "cannot alter an option value" do original_name = option_type.name put spree.api_option_value_path(option_value.id), params: { - id: option_type.id, - option_value: { - name: "Option Value" - } - } + id: option_type.id, + option_value: { + name: "Option Value" + } + } assert_not_found! expect(option_type.reload.name).to eq(original_name) end @@ -98,24 +98,24 @@ module Spree::Api it "can create an option value" do post spree.api_option_type_option_values_path(option_type), params: { - option_value: { - name: "Option Value", - presentation: "Option Value", - } + option_value: { + name: "Option Value", + presentation: "Option Value" + } } expect(json_response).to have_attributes(attributes) expect(response.status).to eq(201) end it "cannot create an option type with invalid attributes" do - post spree.api_option_type_option_values_path(option_type), params: { option_value: { name: "" } } + post spree.api_option_type_option_values_path(option_type), params: {option_value: {name: ""}} expect(response.status).to eq(422) end it "can update an option value" do - put spree.api_option_value_path(option_value.id), params: { option_value: { - name: "Option Value" - } } + put spree.api_option_value_path(option_value.id), params: {option_value: { + name: "Option Value" + }} expect(response.status).to eq(200) option_value.reload @@ -124,13 +124,13 @@ module Spree::Api it "permits the correct attributes" do expect_any_instance_of(Spree::Api::OptionValuesController).to receive(:permitted_option_value_attributes) - put spree.api_option_value_path(option_value), params: { option_value: { name: "" } } + put spree.api_option_value_path(option_value), params: {option_value: {name: ""}} end it "cannot update an option value with invalid attributes" do - put spree.api_option_value_path(option_value), params: { option_value: { - name: "" - } } + put spree.api_option_value_path(option_value), params: {option_value: { + name: "" + }} expect(response.status).to eq(422) end diff --git a/api/spec/requests/spree/api/orders_spec.rb b/api/spec/requests/spree/api/orders_spec.rb index 80bbad26fe2..f1894f37405 100644 --- a/api/spec/requests/spree/api/orders_spec.rb +++ b/api/spec/requests/spree/api/orders_spec.rb @@ -1,23 +1,23 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Orders', type: :request do + describe "Orders", type: :request do let!(:order) { create(:order) } let(:variant) { create(:variant) } let(:line_item) { create(:line_item) } let(:attributes) { [:number, :item_total, :display_total, :total, - :state, :adjustment_total, - :user_id, :created_at, :updated_at, - :completed_at, :payment_total, :shipment_state, - :payment_state, :email, :special_instructions, - :total_quantity, :display_item_total, :currency, :customer_metadata] + :state, :adjustment_total, + :user_id, :created_at, :updated_at, + :completed_at, :payment_total, :shipment_state, + :payment_state, :email, :special_instructions, + :total_quantity, :display_item_total, :currency, :customer_metadata] } - let(:address_params) { { country_id: Country.first.id, state_id: State.first.id } } + let(:address_params) { {country_id: Country.first.id, state_id: State.first.id} } let(:current_api_user) do user = Spree.user_class.new(email: "solidus@example.com") @@ -31,11 +31,11 @@ module Spree::Api describe "POST create" do let(:target_user) { create :user } - let(:date_override) { Time.parse('2015-01-01') } - let(:attributes) { { user_id: target_user.id, created_at: date_override, email: target_user.email } } + let(:date_override) { Time.parse("2015-01-01") } + let(:attributes) { {user_id: target_user.id, created_at: date_override, email: target_user.email} } subject do - post spree.api_orders_path, params: { order: attributes } + post spree.api_orders_path, params: {order: attributes} response end @@ -54,11 +54,11 @@ module Spree::Api it { is_expected.to be_successful } - context 'creating payment' do - let(:attributes) { super().merge(payments_attributes: [{ payment_method_id: payment_method.id }]) } + context "creating payment" do + let(:attributes) { super().merge(payments_attributes: [{payment_method_id: payment_method.id}]) } context "with allowed payment method" do - let!(:payment_method) { create(:check_payment_method, name: "allowed" ) } + let!(:payment_method) { create(:check_payment_method, name: "allowed") } it { is_expected.to be_successful } it "creates a payment" do expect { @@ -85,23 +85,23 @@ module Spree::Api end let(:attributes_with_metadata) { - { email: "foo@foobar.com", - customer_metadata: { 'Note' => 'Do not ring the bell' }, - admin_metadata: { 'Customer_type' => 'Corporate giant' } } + {email: "foo@foobar.com", + customer_metadata: {"Note" => "Do not ring the bell"}, + admin_metadata: {"Customer_type" => "Corporate giant"}} } - let(:order_update_data_with_admin_metadata){ + let(:order_update_data_with_admin_metadata) { { email: "new_email@update.com", - admin_metadata: { 'Serial_number' => 'Sn98765' } + admin_metadata: {"Serial_number" => "Sn98765"} } } it "allows creating order with customer metadata but not admin metadata" do - post spree.api_orders_path, params: { order: attributes_with_metadata } + post spree.api_orders_path, params: {order: attributes_with_metadata} - expect(json_response['customer_metadata']).to eq({ 'Note' => 'Do not ring the bell' }) - expect(json_response).not_to have_key('admin_metadata') + expect(json_response["customer_metadata"]).to eq({"Note" => "Do not ring the bell"}) + expect(json_response).not_to have_key("admin_metadata") created_order = Spree::Order.last @@ -111,10 +111,10 @@ module Spree::Api it "allows updating order but ignores admin metadata" do order = create(:order) - put spree.api_order_path(order), params: { order: order_update_data_with_admin_metadata } + put spree.api_order_path(order), params: {order: order_update_data_with_admin_metadata} - expect(json_response['email']).to eq( "new_email@update.com" ) - expect(json_response).not_to have_key('admin_metadata') + expect(json_response["email"]).to eq("new_email@update.com") + expect(json_response).not_to have_key("admin_metadata") order.reload @@ -126,18 +126,18 @@ module Spree::Api get spree.api_order_path(order) - expect(json_response).not_to have_key('admin_metadata') + expect(json_response).not_to have_key("admin_metadata") end it "cannot update customer metadata if the order is complete" do order = create(:order) order.completed_at = Time.current - order.state = 'complete' + order.state = "complete" order.save! - put spree.api_order_path(order), params: { order: attributes_with_metadata } + put spree.api_order_path(order), params: {order: attributes_with_metadata} - expect(json_response['customer_metadata']).to eq({}) + expect(json_response["customer_metadata"]).to eq({}) end end @@ -157,13 +157,13 @@ module Spree::Api it { is_expected.to be_successful } end - context 'when the line items have custom attributes' do + context "when the line items have custom attributes" do it "can create an order with line items that have custom permitted attributes" do - Spree::PermittedAttributes.line_item_attributes << { options: [:some_option] } + Spree::PermittedAttributes.line_item_attributes << {options: [:some_option]} without_partial_double_verification do - expect_any_instance_of(Spree::LineItem).to receive(:some_option=).once.with('4') + expect_any_instance_of(Spree::LineItem).to receive(:some_option=).once.with("4") end - post spree.api_orders_path, params: { order: { line_items: { "0" => { variant_id: variant.to_param, quantity: 5, options: { some_option: 4 } } } } } + post spree.api_orders_path, params: {order: {line_items: {"0" => {variant_id: variant.to_param, quantity: 5, options: {some_option: 4}}}}} expect(response.status).to eq(201) order = Spree::Order.last expect(order.line_items.count).to eq(1) @@ -173,10 +173,10 @@ module Spree::Api describe "PUT update" do let(:user) { create :user } - let(:order_params) { { number: "anothernumber", user_id: user.id, email: "foo@foobar.com" } } + let(:order_params) { {number: "anothernumber", user_id: user.id, email: "foo@foobar.com"} } let(:can_admin) { false } subject do - put spree.api_order_path(order), params: { order: order_params } + put spree.api_order_path(order), params: {order: order_params} response end @@ -202,15 +202,15 @@ module Spree::Api it "does not change forbidden attributes" do expect { subject - }.to_not change{ order.reload.number } + }.to_not change { order.reload.number } end - context 'creating payment' do + context "creating payment" do let!(:order) { create(:order_with_line_items) } - let(:order_params) { super().merge(payments_attributes: [{ payment_method_id: payment_method.id }]) } + let(:order_params) { super().merge(payments_attributes: [{payment_method_id: payment_method.id}]) } context "with allowed payment method" do - let!(:payment_method) { create(:check_payment_method, name: "allowed" ) } + let!(:payment_method) { create(:check_payment_method, name: "allowed") } it { is_expected.to be_successful } it "creates a payment" do expect { @@ -218,22 +218,22 @@ module Spree::Api }.to change { Spree::Payment.count }.by(1) end - context 'trying to change the address' do + context "trying to change the address" do let(:order_params) do super().merge( ship_address_attributes: { - zipcode: '90100' + zipcode: "90100" } ) end - it 'changes the address' do + it "changes the address" do expect { subject }.to change { order.reload.ship_address.zipcode } end - it 'invalidates the shipments' do + it "invalidates the shipments" do expect { subject }.to change { order.reload.shipments }.to([]) @@ -265,8 +265,8 @@ module Spree::Api end it "updates the otherwise forbidden attributes" do - expect{ subject }.to change{ order.reload.number }. - to("anothernumber") + expect { subject }.to change { order.reload.number } + .to("anothernumber") end end end @@ -291,7 +291,7 @@ module Spree::Api let(:order) { create(:order, line_items: [line_item], store:) } it "can view all of their own orders for the current store" do - get spree.api_my_orders_path, headers: { 'SERVER_NAME' => store.url } + get spree.api_my_orders_path, headers: {"SERVER_NAME" => store.url} expect(response.status).to eq(200) expect(json_response["pages"]).to eq(1) @@ -303,14 +303,14 @@ module Spree::Api end it "cannot view orders for a different store" do - get spree.api_my_orders_path, headers: { 'SERVER_NAME' => 'foo' } + get spree.api_my_orders_path, headers: {"SERVER_NAME" => "foo"} expect(response.status).to eq(200) expect(json_response["orders"].length).to eq(0) end it "can filter the returned results" do - get spree.api_my_orders_path, params: { q: { completed_at_not_null: 1 } }, headers: { 'SERVER_NAME' => store.url } + get spree.api_my_orders_path, params: {q: {completed_at_not_null: 1}}, headers: {"SERVER_NAME" => store.url} expect(response.status).to eq(200) expect(json_response["orders"].length).to eq(0) @@ -326,7 +326,7 @@ module Spree::Api order_four = Spree::Order.create(user: order.user, completed_at: nil, created_at: 0.days.ago, store:) expect(order_four.created_at).to be > order_three.created_at - get spree.api_my_orders_path, headers: { 'SERVER_NAME' => store.url } + get spree.api_my_orders_path, headers: {"SERVER_NAME" => store.url} expect(response.status).to eq(200) expect(json_response["pages"]).to eq(1) orders = json_response["orders"] @@ -337,20 +337,20 @@ module Spree::Api end end - describe 'current' do + describe "current" do let(:current_api_user) { order.user } let!(:order) { create(:order, line_items: [line_item]) } it "uses the user's last_incomplete_spree_order logic with the current store" do expect(current_api_user).to receive(:last_incomplete_spree_order).with(store: Spree::Store.default) - get spree.api_current_order_path(format: 'json') + get spree.api_current_order_path(format: "json") end context "when the current user is not present" do let(:current_api_user) { nil } before do - get spree.api_current_order_path(format: 'json'), params: { order_token: } + get spree.api_current_order_path(format: "json"), params: {order_token:} end context "when the spree guest token is not present" do @@ -379,7 +379,7 @@ module Spree::Api expect(json_response["adjustments"]).to be_empty end - describe 'GET #show' do + describe "GET #show" do let(:order) { create :order_with_line_items } let(:adjustment) { FactoryBot.create(:adjustment, adjustable: order, order:) } @@ -389,76 +389,76 @@ module Spree::Api allow_any_instance_of(Spree::Order).to receive_messages user: current_api_user end - context 'when inventory information is present' do - it 'contains stock information on variant' do + context "when inventory information is present" do + it "contains stock information on variant" do subject - variant = json_response['line_items'][0]['variant'] + variant = json_response["line_items"][0]["variant"] expect(variant).to_not be_nil - expect(variant['in_stock']).to eq(false) - expect(variant['total_on_hand']).to eq(0) - expect(variant['is_backorderable']).to eq(true) - expect(variant['is_destroyed']).to eq(false) + expect(variant["in_stock"]).to eq(false) + expect(variant["total_on_hand"]).to eq(0) + expect(variant["is_backorderable"]).to eq(true) + expect(variant["is_destroyed"]).to eq(false) end end - context 'when an item does not track inventory' do + context "when an item does not track inventory" do before do order.line_items.first.variant.update!(track_inventory: false) end - it 'contains stock information on variant' do + it "contains stock information on variant" do subject - variant = json_response['line_items'][0]['variant'] + variant = json_response["line_items"][0]["variant"] expect(variant).to_not be_nil - expect(variant['in_stock']).to eq(true) - expect(variant['total_on_hand']).to eq(nil) - expect(variant['is_backorderable']).to eq(true) - expect(variant['is_destroyed']).to eq(false) + expect(variant["in_stock"]).to eq(true) + expect(variant["total_on_hand"]).to eq(nil) + expect(variant["is_backorderable"]).to eq(true) + expect(variant["is_destroyed"]).to eq(false) end end - context 'when shipment adjustments are present' do + context "when shipment adjustments are present" do before do order.shipments.first.adjustments << adjustment end - it 'contains adjustments on shipment' do + it "contains adjustments on shipment" do subject # Test to insure shipment has adjustments - shipment = json_response['shipments'][0] + shipment = json_response["shipments"][0] expect(shipment).to_not be_nil - expect(shipment['adjustments'][0]).not_to be_empty - expect(shipment['adjustments'][0]['label']).to eq(adjustment.label) + expect(shipment["adjustments"][0]).not_to be_empty + expect(shipment["adjustments"][0]["label"]).to eq(adjustment.label) end end - context 'when credit cards are present' do + context "when credit cards are present" do let!(:payment) { create(:credit_card_payment, order:, source: credit_card) } let(:credit_card) { create(:credit_card, address: create(:address)) } - it 'contains the credit cards' do + it "contains the credit cards" do subject - credit_cards = json_response['credit_cards'] + credit_cards = json_response["credit_cards"] expect(credit_cards.size).to eq 1 - expect(credit_cards[0]['id']).to eq payment.source.id - expect(credit_cards[0]['address']['id']).to eq credit_card.address_id + expect(credit_cards[0]["id"]).to eq payment.source.id + expect(credit_cards[0]["address"]["id"]).to eq credit_card.address_id end - it 'renders the payment source view for gateway' do + it "renders the payment source view for gateway" do subject - expect(response).to render_template partial: 'spree/api/payments/source_views/_gateway' + expect(response).to render_template partial: "spree/api/payments/source_views/_gateway" end end - context 'when store credit is present' do + context "when store credit is present" do let!(:payment) { create(:store_credit_payment, order:, source: store_credit) } let(:store_credit) { create(:store_credit) } - it 'renders the payment source view for store credit' do + it "renders the payment source view for store credit" do subject - expect(response).to render_template partial: 'spree/api/payments/source_views/_store_credit' + expect(response).to render_template partial: "spree/api/payments/source_views/_store_credit" end end end @@ -477,12 +477,12 @@ module Spree::Api end it "can view an order if the token is known" do - get spree.api_order_path(order), params: { order_token: order.guest_token } + get spree.api_order_path(order), params: {order_token: order.guest_token} expect(response.status).to eq(200) end it "can view an order if the token is passed in header" do - get spree.api_order_path(order), headers: { "X-Spree-Order-Token" => order.guest_token } + get spree.api_order_path(order), headers: {"X-Spree-Order-Token" => order.guest_token} expect(response.status).to eq(200) end @@ -494,7 +494,7 @@ module Spree::Api end it "can create an order" do - post spree.api_orders_path, params: { order: { line_items: { "0" => { variant_id: variant.to_param, quantity: 5 } } } } + post spree.api_orders_path, params: {order: {line_items: {"0" => {variant_id: variant.to_param, quantity: 5}}}} expect(response.status).to eq(201) order = Spree::Order.last @@ -502,7 +502,7 @@ module Spree::Api expect(order.line_items.first.variant).to eq(variant) expect(order.line_items.first.quantity).to eq(5) - expect(json_response['number']).to be_present + expect(json_response["number"]).to be_present expect(json_response["token"]).not_to be_blank expect(json_response["state"]).to eq("cart") expect(order.user).to eq(current_api_user) @@ -511,9 +511,9 @@ module Spree::Api end it "assigns email when creating a new order" do - post spree.api_orders_path, params: { order: { email: "guest@solidus.io" } } - expect(json_response['email']).not_to eq current_api_user.email - expect(json_response['email']).to eq "guest@solidus.io" + post spree.api_orders_path, params: {order: {email: "guest@solidus.io"}} + expect(json_response["email"]).not_to eq current_api_user.email + expect(json_response["email"]).to eq "guest@solidus.io" end context "specifying additional parameters for a line items" do @@ -546,7 +546,7 @@ module Spree::Api order: { line_items: { "0" => { - variant_id: variant.to_param, quantity: 5, options: { special: "foo" } + variant_id: variant.to_param, quantity: 5, options: {special: "foo"} } } } @@ -574,9 +574,9 @@ module Spree::Api let!(:current_api_user) { create :admin_user } it "is able to set any default unpermitted attribute" do - post spree.api_orders_path, params: { order: { number: "WOW" } } + post spree.api_orders_path, params: {order: {number: "WOW"}} expect(response.status).to eq 201 - expect(json_response['number']).to eq "WOW" + expect(json_response["number"]).to eq "WOW" end end @@ -591,65 +591,65 @@ module Spree::Api let!(:line_item) { order.contents.add(variant, 1) } let!(:payment_method) { create(:check_payment_method) } - let(:address_params) { { country_id: country.id } } + let(:address_params) { {country_id: country.id} } let(:billing_address) { - { name: "Tiago Motta", address1: "Av Paulista", - city: "Sao Paulo", zipcode: "01310-300", phone: "12345678", - country_id: country.id, state_id: state.id } + {name: "Tiago Motta", address1: "Av Paulista", + city: "Sao Paulo", zipcode: "01310-300", phone: "12345678", + country_id: country.id, state_id: state.id} } let(:shipping_address) { - { name: "Tiago Motta", address1: "Av Paulista", - city: "Sao Paulo", zipcode: "01310-300", phone: "12345678", - country_id: country.id, state_id: state.id } + {name: "Tiago Motta", address1: "Av Paulista", + city: "Sao Paulo", zipcode: "01310-300", phone: "12345678", + country_id: country.id, state_id: state.id} } - let(:country) { create(:country, { name: "Brazil", iso_name: "BRAZIL", iso: "BR", iso3: "BRA", numcode: 76 }) } - let(:state) { create(:state, country_iso: 'BR') } + let(:country) { create(:country, {name: "Brazil", iso_name: "BRAZIL", iso: "BR", iso3: "BRA", numcode: 76}) } + let(:state) { create(:state, country_iso: "BR") } before { allow_any_instance_of(Spree::Order).to receive_messages user: current_api_user } it "updates quantities of existing line items" do - put spree.api_order_path(order), params: { order: { + put spree.api_order_path(order), params: {order: { line_items: { - "0" => { id: line_item.id, quantity: 10 } + "0" => {id: line_item.id, quantity: 10} } - } } + }} expect(response.status).to eq(200) - expect(json_response['line_items'].count).to eq(1) - expect(json_response['line_items'].first['quantity']).to eq(10) + expect(json_response["line_items"].count).to eq(1) + expect(json_response["line_items"].first["quantity"]).to eq(10) end it "adds an extra line item" do variant_two = create(:variant) - put spree.api_order_path(order), params: { order: { + put spree.api_order_path(order), params: {order: { line_items: { - "0" => { id: line_item.id, quantity: 10 }, - "1" => { variant_id: variant_two.id, quantity: 1 } + "0" => {id: line_item.id, quantity: 10}, + "1" => {variant_id: variant_two.id, quantity: 1} } - } } + }} expect(response.status).to eq(200) - expect(json_response['line_items'].count).to eq(2) - expect(json_response['line_items'][0]['quantity']).to eq(10) - expect(json_response['line_items'][1]['variant_id']).to eq(variant_two.id) - expect(json_response['line_items'][1]['quantity']).to eq(1) + expect(json_response["line_items"].count).to eq(2) + expect(json_response["line_items"][0]["quantity"]).to eq(10) + expect(json_response["line_items"][1]["variant_id"]).to eq(variant_two.id) + expect(json_response["line_items"][1]["quantity"]).to eq(1) end it "cannot change the price of an existing line item" do - put spree.api_order_path(order), params: { order: { + put spree.api_order_path(order), params: {order: { line_items: { - 0 => { id: line_item.id, price: 0 } + 0 => {id: line_item.id, price: 0} } - } } + }} expect(response.status).to eq(200) - expect(json_response['line_items'].count).to eq(1) - expect(json_response['line_items'].first['price'].to_f).to_not eq(0) - expect(json_response['line_items'].first['price'].to_f).to eq(line_item.variant.price) + expect(json_response["line_items"].count).to eq(1) + expect(json_response["line_items"].first["price"].to_f).to_not eq(0) + expect(json_response["line_items"].first["price"].to_f).to eq(line_item.variant.price) end it "can add billing address" do - put spree.api_order_path(order), params: { order: { bill_address_attributes: billing_address } } + put spree.api_order_path(order), params: {order: {bill_address_attributes: billing_address}} expect(order.reload.bill_address).to_not be_nil end @@ -657,18 +657,18 @@ module Spree::Api it "receives error message if trying to add billing address with errors" do billing_address[:city] = "" - put spree.api_order_path(order), params: { order: { bill_address_attributes: billing_address } } + put spree.api_order_path(order), params: {order: {bill_address_attributes: billing_address}} - expect(json_response['error']).not_to be_nil - expect(json_response['errors']).not_to be_nil - expect(json_response['errors']['bill_address.city'].first).to eq "can't be blank" + expect(json_response["error"]).not_to be_nil + expect(json_response["errors"]).not_to be_nil + expect(json_response["errors"]["bill_address.city"].first).to eq "can't be blank" end it "can add shipping address" do order.update!(ship_address_id: nil) expect { - put spree.api_order_path(order), params: { order: { ship_address_attributes: shipping_address } } + put spree.api_order_path(order), params: {order: {ship_address_attributes: shipping_address}} }.to change { order.reload.ship_address }.from(nil) end @@ -677,17 +677,17 @@ module Spree::Api shipping_address[:city] = "" - put spree.api_order_path(order), params: { order: { ship_address_attributes: shipping_address } } + put spree.api_order_path(order), params: {order: {ship_address_attributes: shipping_address}} - expect(json_response['error']).not_to be_nil - expect(json_response['errors']).not_to be_nil - expect(json_response['errors']['ship_address.city'].first).to eq "can't be blank" + expect(json_response["error"]).not_to be_nil + expect(json_response["errors"]).not_to be_nil + expect(json_response["errors"]["ship_address.city"].first).to eq "can't be blank" end it "cannot set the user_id for the order" do user = Spree.user_class.create original_id = order.user_id - put spree.api_order_path(order), params: { order: { user_id: user.id } } + put spree.api_order_path(order), params: {order: {user_id: user.id}} expect(response.status).to eq 200 expect(json_response["user_id"]).to eq(original_id) end @@ -696,11 +696,11 @@ module Spree::Api before { order.create_proposed_shipments } it "clears out all existing shipments on line item update" do - put spree.api_order_path(order), params: { order: { + put spree.api_order_path(order), params: {order: { line_items: { - 0 => { id: line_item.id, quantity: 10 } + 0 => {id: line_item.id, quantity: 10} } - } } + }} expect(order.reload.shipments).to be_empty end end @@ -713,7 +713,7 @@ module Spree::Api create(:adjustment, order:, adjustable: order) put spree.empty_api_order_path(order) expect(response.status).to eq(200) - expect(json_response['id']).to eq(order.id) + expect(json_response["id"]).to eq(order.id) order.reload expect(order.line_items).to be_empty expect(order.adjustments).to be_empty @@ -724,22 +724,22 @@ module Spree::Api get spree.api_order_path(order) - expect(json_response['line_items'].first['variant']).to have_attributes([:images]) + expect(json_response["line_items"].first["variant"]).to have_attributes([:images]) end it "lists variants product id" do get spree.api_order_path(order) - expect(json_response['line_items'].first['variant']).to have_attributes([:product_id]) + expect(json_response["line_items"].first["variant"]).to have_attributes([:product_id]) end it "includes the tax_total in the response" do get spree.api_order_path(order) - expect(json_response['included_tax_total']).to eq('0.0') - expect(json_response['additional_tax_total']).to eq('0.0') - expect(json_response['display_included_tax_total']).to eq('$0.00') - expect(json_response['display_additional_tax_total']).to eq('$0.00') + expect(json_response["included_tax_total"]).to eq("0.0") + expect(json_response["additional_tax_total"]).to eq("0.0") + expect(json_response["display_included_tax_total"]).to eq("$0.00") + expect(json_response["display_additional_tax_total"]).to eq("$0.00") end it "lists line item adjustments" do @@ -750,9 +750,9 @@ module Spree::Api adjustment.update_column(:amount, 5) get spree.api_order_path(order) - adjustment = json_response['line_items'].first['adjustments'].first - expect(adjustment['label']).to eq("10% off!") - expect(adjustment['amount']).to eq("5.0") + adjustment = json_response["line_items"].first["adjustments"].first + expect(adjustment["label"]).to eq("10% off!") + expect(adjustment["amount"]).to eq("5.0") end it "lists payments source without gateway info" do @@ -786,8 +786,8 @@ module Spree::Api it "includes the ship_total in the response" do get spree.api_order_path(order) - expect(json_response['ship_total']).to eq '10.0' - expect(json_response['display_ship_total']).to eq '$10.00' + expect(json_response["ship_total"]).to eq "10.0" + expect(json_response["display_ship_total"]).to eq "$10.00" end it "returns available shipments for an order" do @@ -879,7 +879,7 @@ module Spree::Api # Test for https://github.com/spree/spree/issues/1763 it "can control the page size through a parameter" do - get spree.api_orders_path, params: { per_page: 1 } + get spree.api_orders_path, params: {per_page: 1} expect(json_response["orders"].count).to eq(1) expect(json_response["orders"].first).to have_attributes(attributes) expect(json_response["count"]).to eq(1) @@ -891,13 +891,13 @@ module Spree::Api context "search" do before do create(:order) - Spree::Order.last.update_attribute(:email, 'solidus@solidus.io') + Spree::Order.last.update_attribute(:email, "solidus@solidus.io") end let(:expected_result) { Spree::Order.last } it "can query the results through a parameter" do - get spree.api_orders_path, params: { q: { email_cont: 'solidus' } } + get spree.api_orders_path, params: {q: {email_cont: "solidus"}} expect(json_response["orders"].count).to eq(1) expect(json_response["orders"].first).to have_attributes(attributes) expect(json_response["orders"].first["email"]).to eq(expected_result.email) @@ -930,7 +930,7 @@ module Spree::Api it "can set the user_id for the order" do user = Spree.user_class.create - post spree.api_orders_path, params: { order: { user_id: user.id } } + post spree.api_orders_path, params: {order: {user_id: user.id}} expect(response.status).to eq 201 expect(json_response["user_id"]).to eq(user.id) end @@ -939,7 +939,7 @@ module Spree::Api let(:params) do { payments: [{ - amount: '10.0', + amount: "10.0", payment_method: create(:payment_method).name, source: { month: "01", @@ -954,18 +954,18 @@ module Spree::Api context "with source" do it "creates a payment" do - post spree.api_orders_path, params: { order: params } - payment = json_response['payments'].first + post spree.api_orders_path, params: {order: params} + payment = json_response["payments"].first expect(response.status).to eq 201 - expect(payment['amount']).to eql "10.0" - expect(payment['source']['last_digits']).to eql "1111" + expect(payment["amount"]).to eql "10.0" + expect(payment["source"]["last_digits"]).to eql "1111" end context "when payment_method is missing" do it "returns an error" do params[:payments][0].delete(:payment_method) - post spree.api_orders_path, params: { order: params } + post spree.api_orders_path, params: {order: params} expect(response.status).to eq 404 end end @@ -976,7 +976,7 @@ module Spree::Api context "updating" do it "can set the user_id for the order" do user = Spree.user_class.create - put spree.api_order_path(order), params: { order: { user_id: user.id } } + put spree.api_order_path(order), params: {order: {user_id: user.id}} expect(response.status).to eq 200 expect(json_response["user_id"]).to eq(user.id) end @@ -984,42 +984,42 @@ module Spree::Api it "cannot cancel not completed order" do put spree.cancel_api_order_path(order) - expect(json_response['error']).to eq(I18n.t(:could_not_transition, scope: "spree.api", resource: 'order')) + expect(json_response["error"]).to eq(I18n.t(:could_not_transition, scope: "spree.api", resource: "order")) expect(response.status).to eq(422) end it "can update a order admin_metadata" do - put spree.api_order_path(order), params: { order: { admin_metadata: { 'order_number' => 'PN345678' } } } + put spree.api_order_path(order), params: {order: {admin_metadata: {"order_number" => "PN345678"}}} expect(response.status).to eq(200) - expect(json_response["admin_metadata"]).to eq({ 'order_number' => 'PN345678' }) + expect(json_response["admin_metadata"]).to eq({"order_number" => "PN345678"}) end it "can update customer metadata if the order is complete" do order = create(:order) order.completed_at = Time.current - order.state = 'complete' + order.state = "complete" order.save! - put spree.api_order_path(order), params: { order: { customer_metadata: { 'Note' => 'Do not ring the bell' }, admin_metadata: { 'order_number' => 'PN345678' } } } + put spree.api_order_path(order), params: {order: {customer_metadata: {"Note" => "Do not ring the bell"}, admin_metadata: {"order_number" => "PN345678"}}} - expect(json_response['customer_metadata']).to eq({ 'Note' => 'Do not ring the bell' }) - expect(json_response["admin_metadata"]).to eq({ 'order_number' => 'PN345678' }) + expect(json_response["customer_metadata"]).to eq({"Note" => "Do not ring the bell"}) + expect(json_response["admin_metadata"]).to eq({"order_number" => "PN345678"}) end it "can view admin_metadata" do get spree.api_order_path(order) - expect(json_response).to have_key('admin_metadata') + expect(json_response).to have_key("admin_metadata") end end context "can cancel an order" do before do order.completed_at = Time.current - order.state = 'complete' - order.shipment_state = 'ready' + order.state = "complete" + order.shipment_state = "ready" order.save! end diff --git a/api/spec/requests/spree/api/payments_spec.rb b/api/spec/requests/spree/api/payments_spec.rb index cbe42f47415..d427716be84 100644 --- a/api/spec/requests/spree/api/payments_spec.rb +++ b/api/spec/requests/spree/api/payments_spec.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Payments', type: :request do + describe "Payments", type: :request do let!(:order) { create(:order_with_line_items) } let!(:payment) { create(:payment, order:, amount: order.amount) } let!(:attributes) { [:id, :source_type, :source_id, :amount, :display_amount, - :payment_method_id, :state, :avs_response, - :created_at, :updated_at, :customer_metadata] + :payment_method_id, :state, :avs_response, + :created_at, :updated_at, :customer_metadata] } before do @@ -29,7 +29,7 @@ module Spree::Api it "cannot view admin_metadata" do get spree.api_order_payments_path(order) - expect(json_response).not_to have_key('admin_metadata') + expect(json_response).not_to have_key("admin_metadata") end it "can learn how to create a new payment" do @@ -45,25 +45,25 @@ module Spree::Api end it "can create a new payment" do - post spree.api_order_payments_path(order), params: { payment: { payment_method_id: Spree::PaymentMethod.first.id, amount: 50 } } + post spree.api_order_payments_path(order), params: {payment: {payment_method_id: Spree::PaymentMethod.first.id, amount: 50}} expect(response.status).to eq(201) expect(json_response).to have_attributes(attributes) end it "allows creating payment with customer metadata but not admin metadata" do post spree.api_order_payments_path(order), - params: { - payment: { - customer_metadata: { 'type' => 'credit card' }, - payment_method_id: Spree::PaymentMethod.first.id, - amount: 50, - source_attributes: { gateway_payment_profile_id: 1 } - } - } + params: { + payment: { + customer_metadata: {"type" => "credit card"}, + payment_method_id: Spree::PaymentMethod.first.id, + amount: 50, + source_attributes: {gateway_payment_profile_id: 1} + } + } expect(response.status).to eq(201) - expect(json_response['customer_metadata']).to eq({ "type" => "credit card" }) - expect(json_response).not_to have_key('admin_metadata') + expect(json_response["customer_metadata"]).to eq({"type" => "credit card"}) + expect(json_response).not_to have_key("admin_metadata") end context "disallowed payment method" do @@ -71,7 +71,7 @@ module Spree::Api Spree::PaymentMethod.first.update!(available_to_users: false) expect { - post spree.api_order_payments_path(order), params: { payment: { payment_method_id: Spree::PaymentMethod.first.id, amount: 50 } } + post spree.api_order_payments_path(order), params: {payment: {payment_method_id: Spree::PaymentMethod.first.id, amount: 50}} }.not_to change { Spree::Payment.count } expect(response.status).to eq(404) end @@ -81,16 +81,16 @@ module Spree::Api context "payment source is required" do context "no source is provided" do it "returns errors" do - post spree.api_order_payments_path(order), params: { payment: { payment_method_id: Spree::PaymentMethod.first.id, amount: 50 } } + post spree.api_order_payments_path(order), params: {payment: {payment_method_id: Spree::PaymentMethod.first.id, amount: 50}} expect(response.status).to eq(422) - expect(json_response['error']).to eq("Invalid resource. Please fix errors and try again.") - expect(json_response['errors']['source']).to eq(["can't be blank"]) + expect(json_response["error"]).to eq("Invalid resource. Please fix errors and try again.") + expect(json_response["errors"]["source"]).to eq(["can't be blank"]) end end context "source is provided" do it "can create a new payment" do - post spree.api_order_payments_path(order), params: { payment: { payment_method_id: Spree::PaymentMethod.first.id, amount: 50, source_attributes: { gateway_payment_profile_id: 1 } } } + post spree.api_order_payments_path(order), params: {payment: {payment_method_id: Spree::PaymentMethod.first.id, amount: 50, source_attributes: {gateway_payment_profile_id: 1}}} expect(response.status).to eq(201) expect(json_response).to have_attributes(attributes) end @@ -103,7 +103,7 @@ module Spree::Api end it "cannot update a payment" do - put spree.api_order_payment_path(order, payment), params: { payment: { amount: 2.01 } } + put spree.api_order_payment_path(order, payment), params: {payment: {amount: 2.01}} assert_unauthorized! end @@ -124,7 +124,7 @@ module Spree::Api end it "can view the payments for an order given the order token" do - get spree.api_order_payments_path(order), params: { order_token: order.guest_token } + get spree.api_order_payments_path(order), params: {order_token: order.guest_token} expect(json_response["payments"].first).to have_attributes(attributes) end end @@ -147,15 +147,15 @@ module Spree::Api expect(json_response["count"]).to eq(2) end - it 'can control the page size through a parameter' do - get spree.api_order_payments_path(order), params: { per_page: 1 } - expect(json_response['count']).to eq(1) - expect(json_response['current_page']).to eq(1) - expect(json_response['pages']).to eq(2) + it "can control the page size through a parameter" do + get spree.api_order_payments_path(order), params: {per_page: 1} + expect(json_response["count"]).to eq(1) + expect(json_response["current_page"]).to eq(1) + expect(json_response["pages"]).to eq(2) end it "can query the results through a parameter" do - get spree.api_order_payments_path(order), params: { q: { id_eq: @payment.id } } + get spree.api_order_payments_path(order), params: {q: {id_eq: @payment.id}} expect(json_response["payments"].count).to eq(1) expect(json_response["count"]).to eq(1) expect(json_response["current_page"]).to eq(1) @@ -166,46 +166,46 @@ module Spree::Api context "for a given payment" do context "updating" do it "can update" do - payment.update(state: 'pending') - put spree.api_order_payment_path(order, payment), params: { payment: { amount: 2.01 } } + payment.update(state: "pending") + put spree.api_order_payment_path(order, payment), params: {payment: {amount: 2.01}} expect(response.status).to eq(200) expect(payment.reload.amount).to eq(2.01) end context "update fails" do it "returns a 422 status when the amount is invalid" do - payment.update(state: 'pending') - put spree.api_order_payment_path(order, payment), params: { payment: { amount: 'invalid' } } + payment.update(state: "pending") + put spree.api_order_payment_path(order, payment), params: {payment: {amount: "invalid"}} expect(response.status).to eq(422) expect(json_response["error"]).to eq("Invalid resource. Please fix errors and try again.") expect(payment.reload.state).to eq("pending") end it "returns a 403 status when the payment is not pending" do - payment.update(state: 'completed') - put spree.api_order_payment_path(order, payment), params: { payment: { amount: 2.01 } } + payment.update(state: "completed") + put spree.api_order_payment_path(order, payment), params: {payment: {amount: 2.01}} expect(response.status).to eq(403) expect(json_response["error"]).to eq("This payment cannot be updated because it is completed.") end it "can update a payment admin_metadata" do - payment.update(state: 'pending') + payment.update(state: "pending") put spree.api_order_payment_path(order, payment), - params: { - payment: { - amount: 2.01, - admin_metadata: { 'order_number' => 'PN345678' } + params: { + payment: { + amount: 2.01, + admin_metadata: {"order_number" => "PN345678"} + } } - } expect(response.status).to eq(200) - expect(json_response["admin_metadata"]).to eq({ 'order_number' => 'PN345678' }) + expect(json_response["admin_metadata"]).to eq({"order_number" => "PN345678"}) end it "can view admin_metadata" do get spree.api_order_payments_path(order) - expect(json_response["payments"].first).to have_key('admin_metadata') + expect(json_response["payments"].first).to have_key("admin_metadata") end end end diff --git a/api/spec/requests/spree/api/product_properties_spec.rb b/api/spec/requests/spree/api/product_properties_spec.rb index f74870a8028..696b667e1bd 100644 --- a/api/spec/requests/spree/api/product_properties_spec.rb +++ b/api/spec/requests/spree/api/product_properties_spec.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'spec_helper' -require 'shared_examples/protect_product_actions' +require "spec_helper" +require "shared_examples/protect_product_actions" module Spree::Api - describe 'Product properties', type: :request do + describe "Product properties", type: :request do let!(:product) { create(:product) } let!(:property_1) { product.product_properties.create(property_name: "My Property 1", value: "my value 1", position: 0) } let!(:property_2) { product.product_properties.create(property_name: "My Property 2", value: "my value 2", position: 1) } let(:attributes) { [:id, :product_id, :property_id, :value, :property_name] } - let(:resource_scoping) { { product_id: product.to_param } } + let(:resource_scoping) { {product_id: product.to_param} } before do stub_authentication! @@ -34,18 +34,18 @@ module Spree::Api end it "can control the page size through a parameter" do - get spree.api_product_product_properties_path(product), params: { per_page: 1 } - expect(json_response['product_properties'].count).to eq(1) - expect(json_response['current_page']).to eq(1) - expect(json_response['pages']).to eq(2) + get spree.api_product_product_properties_path(product), params: {per_page: 1} + expect(json_response["product_properties"].count).to eq(1) + expect(json_response["current_page"]).to eq(1) + expect(json_response["pages"]).to eq(2) end - it 'can query the results through a parameter' do - Spree::ProductProperty.last.update_attribute(:value, 'loose') + it "can query the results through a parameter" do + Spree::ProductProperty.last.update_attribute(:value, "loose") property = Spree::ProductProperty.last - get spree.api_product_product_properties_path(product), params: { q: { value_cont: 'loose' } } - expect(json_response['count']).to eq(1) - expect(json_response['product_properties'].first['value']).to eq property.value + get spree.api_product_product_properties_path(product), params: {q: {value_cont: "loose"}} + expect(json_response["count"]).to eq(1) + expect(json_response["product_properties"].first["value"]).to eq property.value end it "can see a single product_property" do @@ -60,12 +60,12 @@ module Spree::Api end it "cannot create a new product property if not an admin" do - post spree.api_product_product_properties_path(product), params: { product_property: { property_name: "My Property 3" } } + post spree.api_product_product_properties_path(product), params: {product_property: {property_name: "My Property 3"}} assert_unauthorized! end it "cannot update a product property" do - put spree.api_product_product_property_path(product, property_1.property_name), params: { product_property: { value: "my value 456" } } + put spree.api_product_product_property_path(product, property_1.property_name), params: {product_property: {value: "my value 456"}} assert_unauthorized! end @@ -80,14 +80,14 @@ module Spree::Api it "can create a new product property" do expect do - post spree.api_product_product_properties_path(product), params: { product_property: { property_name: "My Property 3", value: "my value 3" } } + post spree.api_product_product_properties_path(product), params: {product_property: {property_name: "My Property 3", value: "my value 3"}} end.to change(product.product_properties, :count).by(1) expect(json_response).to have_attributes(attributes) expect(response.status).to eq(201) end it "can update a product property" do - put spree.api_product_product_property_path(product, property_1.property_name), params: { product_property: { value: "my value 456" } } + put spree.api_product_product_property_path(product, property_1.property_name), params: {product_property: {value: "my value 456"}} expect(response.status).to eq(200) end @@ -97,14 +97,14 @@ module Spree::Api expect { property_1.reload }.to raise_error(ActiveRecord::RecordNotFound) end - context 'when product property does not exist' do - it 'cannot update because is not found' do - put spree.api_product_product_property_path(product, 'no property'), params: { product_property: { value: "my value 456" } } + context "when product property does not exist" do + it "cannot update because is not found" do + put spree.api_product_product_property_path(product, "no property"), params: {product_property: {value: "my value 456"}} expect(response.status).to eq(404) end - it 'cannot delete because is not found' do - delete spree.api_product_product_property_path(product, 'no property') + it "cannot delete because is not found" do + delete spree.api_product_product_property_path(product, "no property") expect(response.status).to eq(404) end end diff --git a/api/spec/requests/spree/api/products_spec.rb b/api/spec/requests/spree/api/products_spec.rb index 072f3a224c1..8396e5db193 100644 --- a/api/spec/requests/spree/api/products_spec.rb +++ b/api/spec/requests/spree/api/products_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'spec_helper' -require 'shared_examples/protect_product_actions' +require "spec_helper" +require "shared_examples/protect_product_actions" module Spree::Api - describe 'Products', type: :request do + describe "Products", type: :request do let!(:product) { create(:product) } let!(:inactive_product) { create(:product, available_on: Time.current.tomorrow, name: "inactive") } let(:base_attributes) { Spree::Api::Config.product_attributes } @@ -12,16 +12,16 @@ module Spree::Api let(:new_attributes) { base_attributes } let(:product_data) do - { name: "The Other Product", - price: 19.99, - shipping_category_id: create(:shipping_category).id } + {name: "The Other Product", + price: 19.99, + shipping_category_id: create(:shipping_category).id} end let(:attributes_for_variant) do attributes = attributes_for(:variant).except(:option_values, :product) attributes.merge({ options: [ - { name: "size", value: "small" }, - { name: "color", value: "black" } + {name: "size", value: "small"}, + {name: "color", value: "black"} ] }) end @@ -59,7 +59,7 @@ module Spree::Api end it "retrieves a list of products by id" do - get spree.api_products_path, params: { ids: [product.id] } + get spree.api_products_path, params: {ids: [product.id]} expect(json_response["products"].first).to have_attributes(show_attributes) expect(json_response["total_count"]).to eq(1) expect(json_response["current_page"]).to eq(1) @@ -78,7 +78,7 @@ module Spree::Api it "retrieves a list of products by ids string" do second_product = create(:product) - get spree.api_products_path, params: { ids: [product.id, second_product.id].join(",") } + get spree.api_products_path, params: {ids: [product.id, second_product.id].join(",")} expect(json_response["products"].first).to have_attributes(show_attributes) expect(json_response["products"][1]).to have_attributes(show_attributes) expect(json_response["total_count"]).to eq(2) @@ -88,7 +88,7 @@ module Spree::Api end it "does not return inactive products when queried by ids" do - get spree.api_products_path, params: { ids: [inactive_product.id] } + get spree.api_products_path, params: {ids: [inactive_product.id]} expect(json_response["count"]).to eq(0) end @@ -100,26 +100,26 @@ module Spree::Api context "pagination" do it "can select the next page of products" do create(:product) - get spree.api_products_path, params: { page: 2, per_page: 1 } + get spree.api_products_path, params: {page: 2, per_page: 1} expect(json_response["products"].first).to have_attributes(show_attributes) expect(json_response["total_count"]).to eq(2) expect(json_response["current_page"]).to eq(2) expect(json_response["pages"]).to eq(2) end - it 'can control the page size through a parameter' do + it "can control the page size through a parameter" do create(:product) - get spree.api_products_path, params: { per_page: 1 } - expect(json_response['count']).to eq(1) - expect(json_response['total_count']).to eq(2) - expect(json_response['current_page']).to eq(1) - expect(json_response['pages']).to eq(2) + get spree.api_products_path, params: {per_page: 1} + expect(json_response["count"]).to eq(1) + expect(json_response["total_count"]).to eq(2) + expect(json_response["current_page"]).to eq(1) + expect(json_response["pages"]).to eq(2) end end it "can search for products" do create(:product, name: "The best product in the world") - get spree.api_products_path, params: { q: { name_cont: "best" } } + get spree.api_products_path, params: {q: {name_cont: "best"}} expect(json_response["products"].first).to have_attributes(show_attributes) expect(json_response["count"]).to eq(1) end @@ -134,27 +134,27 @@ module Spree::Api get spree.api_product_path(product) expect(json_response).to have_attributes(show_attributes) - expect(json_response['variants'].first).to have_attributes([:name, - :is_master, - :price, - :images, - :in_stock]) - - expect(json_response['variants'].first['images'].first).to have_attributes([:attachment_file_name, - :attachment_width, - :attachment_height, - :attachment_content_type, - :mini_url, - :small_url, - :product_url, - :large_url]) + expect(json_response["variants"].first).to have_attributes([:name, + :is_master, + :price, + :images, + :in_stock]) + + expect(json_response["variants"].first["images"].first).to have_attributes([:attachment_file_name, + :attachment_width, + :attachment_height, + :attachment_content_type, + :mini_url, + :small_url, + :product_url, + :large_url]) expect(json_response["product_properties"].first).to have_attributes([:value, - :product_id, - :property_name]) + :product_id, + :property_name]) expect(json_response["classifications"].first).to have_attributes([:taxon_id, :position, :taxon]) - expect(json_response["classifications"].first['taxon']).to have_attributes([:id, :name, :pretty_name, :permalink, :taxonomy_id, :parent_id]) + expect(json_response["classifications"].first["taxon"]).to have_attributes([:id, :name, :pretty_name, :permalink, :taxonomy_id, :parent_id]) end context "tracking is disabled" do @@ -232,7 +232,7 @@ module Spree::Api end it "can include deleted products" do - get spree.api_products_path, params: { show_deleted: 1 } + get spree.api_products_path, params: {show_deleted: 1} expect(json_response["products"].count).to eq(3) end end @@ -240,9 +240,9 @@ module Spree::Api describe "creating a product" do it "can create a new product" do post spree.api_products_path, params: { - product: { name: "The Other Product", - price: 19.99, - shipping_category_id: create(:shipping_category).id } + product: {name: "The Other Product", + price: 19.99, + shipping_category_id: create(:shipping_category).id} } expect(json_response).to have_attributes(base_attributes) expect(response.status).to eq(201) @@ -251,46 +251,46 @@ module Spree::Api it "creates with embedded variants" do product_data[:variants] = [attributes_for_variant, attributes_for_variant] - post spree.api_products_path, params: { product: product_data } + post spree.api_products_path, params: {product: product_data} expect(response.status).to eq 201 - variants = json_response['variants'] + variants = json_response["variants"] expect(variants.count).to eq(2) - expect(variants.last['option_values'][0]['name']).to eq('small') - expect(variants.last['option_values'][0]['option_type_name']).to eq('size') + expect(variants.last["option_values"][0]["name"]).to eq("small") + expect(variants.last["option_values"][0]["option_type_name"]).to eq("size") - expect(json_response['option_types'].count).to eq(2) # size, color + expect(json_response["option_types"].count).to eq(2) # size, color end it "can create a new product with embedded product_properties" do product_data[:product_properties_attributes] = [{ - property_name: "fabric", - value: "cotton" - }] + property_name: "fabric", + value: "cotton" + }] - post spree.api_products_path, params: { product: product_data } + post spree.api_products_path, params: {product: product_data} - expect(json_response['product_properties'][0]['property_name']).to eq('fabric') - expect(json_response['product_properties'][0]['value']).to eq('cotton') + expect(json_response["product_properties"][0]["property_name"]).to eq("fabric") + expect(json_response["product_properties"][0]["value"]).to eq("cotton") end it "can create a new product with option_types" do - product_data[:option_types] = ['size', 'color'] + product_data[:option_types] = ["size", "color"] - post spree.api_products_path, params: { product: product_data } - expect(json_response['option_types'].count).to eq(2) + post spree.api_products_path, params: {product: product_data} + expect(json_response["option_types"].count).to eq(2) end it "creates with shipping categories" do - hash = { name: "The Other Product", - price: 19.99, - shipping_category: "Free Ships" } + hash = {name: "The Other Product", + price: 19.99, + shipping_category: "Free Ships"} - post spree.api_products_path, params: { product: hash } + post spree.api_products_path, params: {product: hash} expect(response.status).to eq 201 shipping_id = Spree::ShippingCategory.find_by(name: "Free Ships").id - expect(json_response['shipping_category_id']).to eq shipping_id + expect(json_response["shipping_category_id"]).to eq shipping_id end context "when tracking is disabled" do @@ -306,27 +306,27 @@ module Spree::Api } expect(response.status).to eq(201) - expect(json_response['total_on_hand']).to eq nil + expect(json_response["total_on_hand"]).to eq nil end end it "puts the created product in the given taxon" do product_data[:taxon_ids] = taxon_1.id.to_s - post spree.api_products_path, params: { product: product_data } + post spree.api_products_path, params: {product: product_data} expect(json_response["taxon_ids"]).to eq([taxon_1.id]) end it "puts primary taxon for the product" do product_data[:primary_taxon_id] = taxon_1.id.to_s - post spree.api_products_path, params: { product: product_data } + post spree.api_products_path, params: {product: product_data} expect(json_response["primary_taxon_id"]).to eq(taxon_1.id) end # Regression test for https://github.com/spree/spree/issues/4123 it "puts the created product in the given taxons" do - product_data[:taxon_ids] = [taxon_1.id, taxon_2.id].join(',') - post spree.api_products_path, params: { product: product_data } + product_data[:taxon_ids] = [taxon_1.id, taxon_2.id].join(",") + post spree.api_products_path, params: {product: product_data} expect(json_response["taxon_ids"]).to eq([taxon_1.id, taxon_2.id]) end @@ -337,14 +337,14 @@ module Spree::Api end it "can still create a product" do - post spree.api_products_path, params: { product: product_data, token: "fake" } + post spree.api_products_path, params: {product: product_data, token: "fake"} expect(json_response).to have_attributes(show_attributes) expect(response.status).to eq(201) end end it "cannot create a new product with invalid attributes" do - post spree.api_products_path, params: { product: { foo: :bar } } + post spree.api_products_path, params: {product: {foo: :bar}} expect(response.status).to eq(422) expect(json_response["error"]).to eq("Invalid resource. Please fix errors and try again.") errors = json_response["errors"] @@ -352,54 +352,54 @@ module Spree::Api end end - context 'updating a product' do + context "updating a product" do it "can update a product" do - put spree.api_product_path(product), params: { product: { name: "New and Improved Product!" } } + put spree.api_product_path(product), params: {product: {name: "New and Improved Product!"}} expect(response.status).to eq(200) end it "can create new option types on a product" do - put spree.api_product_path(product), params: { product: { option_types: ['shape', 'color'] } } - expect(json_response['option_types'].count).to eq(2) + put spree.api_product_path(product), params: {product: {option_types: ["shape", "color"]}} + expect(json_response["option_types"].count).to eq(2) end it "can create new variants on a product" do - put spree.api_product_path(product), params: { product: { variants: [attributes_for_variant, attributes_for_variant.merge(sku: "ABC-#{Kernel.rand(9999)}")] } } + put spree.api_product_path(product), params: {product: {variants: [attributes_for_variant, attributes_for_variant.merge(sku: "ABC-#{Kernel.rand(9999)}")]}} expect(response.status).to eq 200 - expect(json_response['variants'].count).to eq(2) # 2 variants + expect(json_response["variants"].count).to eq(2) # 2 variants - variants = json_response['variants'].reject { |variant| variant['is_master'] } - size_option_value = variants.last['option_values'].detect{ |value| value['option_type_name'] == 'size' } - expect(size_option_value['name']).to eq('small') + variants = json_response["variants"].reject { |variant| variant["is_master"] } + size_option_value = variants.last["option_values"].detect { |value| value["option_type_name"] == "size" } + expect(size_option_value["name"]).to eq("small") - expect(json_response['option_types'].count).to eq(2) # size, color + expect(json_response["option_types"].count).to eq(2) # size, color end it "can update an existing variant on a product" do variant_hash = { - sku: '123', price: 19.99, options: [{ name: "size", value: "small" }] + sku: "123", price: 19.99, options: [{name: "size", value: "small"}] } - variant_id = product.variants.create!({ product: }.merge(variant_hash)).id + variant_id = product.variants.create!({product:}.merge(variant_hash)).id - put spree.api_product_path(product), params: { product: { + put spree.api_product_path(product), params: {product: { variants: [ variant_hash.merge( id: variant_id.to_s, - sku: '456', - options: [{ name: "size", value: "large" }] + sku: "456", + options: [{name: "size", value: "large"}] ) ] - } } + }} - expect(json_response['variants'].count).to eq(1) - variants = json_response['variants'].reject { |variant| variant['is_master'] } - expect(variants.last['option_values'][0]['name']).to eq('large') - expect(variants.last['sku']).to eq('456') + expect(json_response["variants"].count).to eq(1) + variants = json_response["variants"].reject { |variant| variant["is_master"] } + expect(variants.last["option_values"][0]["name"]).to eq("large") + expect(variants.last["sku"]).to eq("456") expect(variants.count).to eq(1) end it "cannot update a product with an invalid attribute" do - put spree.api_product_path(product), params: { product: { name: "" } } + put spree.api_product_path(product), params: {product: {name: ""}} expect(response.status).to eq(422) expect(json_response["error"]).to eq("Invalid resource. Please fix errors and try again.") expect(json_response["errors"]["name"]).to eq(["can't be blank"]) @@ -407,20 +407,20 @@ module Spree::Api # Regression test for https://github.com/spree/spree/issues/4123 it "puts the created product in the given taxon" do - put spree.api_product_path(product), params: { product: { taxon_ids: taxon_1.id.to_s } } + put spree.api_product_path(product), params: {product: {taxon_ids: taxon_1.id.to_s}} expect(json_response["taxon_ids"]).to eq([taxon_1.id]) end it "puts primary taxon for the updated product" do product.primary_taxon_id = taxon_2.id - put spree.api_product_path(product), params: { product: { primary_taxon_id: taxon_1.id } } + put spree.api_product_path(product), params: {product: {primary_taxon_id: taxon_1.id}} expect(json_response["primary_taxon_id"]).to eq(taxon_1.id) end # Regression test for https://github.com/spree/spree/issues/4123 it "puts the created product in the given taxons" do - put spree.api_product_path(product), params: { product: { taxon_ids: [taxon_1.id, taxon_2.id].join(',') } } + put spree.api_product_path(product), params: {product: {taxon_ids: [taxon_1.id, taxon_2.id].join(",")}} expect(json_response["taxon_ids"]).to match_array([taxon_1.id, taxon_2.id]) end end diff --git a/api/spec/requests/spree/api/promotions_spec.rb b/api/spec/requests/spree/api/promotions_spec.rb index b6b16f0a921..44974168576 100644 --- a/api/spec/requests/spree/api/promotions_spec.rb +++ b/api/spec/requests/spree/api/promotions_spec.rb @@ -1,17 +1,17 @@ # frozen_string_literal: true -require 'spec_helper' -require 'ostruct' +require "spec_helper" +require "ostruct" module Spree::Api - describe 'Promotions', type: :request do + describe "Promotions", type: :request do shared_examples "a JSON response" do - it 'should be ok' do + it "should be ok" do subject expect(response).to be_ok end - it 'should return JSON' do + it "should return JSON" do subject payload = HashWithIndifferentAccess.new(JSON.parse(response.body)) expect(payload).to_not be_nil @@ -28,24 +28,24 @@ module Spree::Api let(:found_promotion) do ::OpenStruct.new( id: 1, - name: 'Test Promotion', - description: 'Promotion for testing purposes', - path: '/api/promotions/test-promo', + name: "Test Promotion", + description: "Promotion for testing purposes", + path: "/api/promotions/test-promo", starts_at: 1.day.ago, expires_at: 1.day.from_now, type: "something", usage_limit: 100, - advertise: false, + advertise: false ) end - describe 'GET #show' do + describe "GET #show" do subject { get spree.api_promotion_path("1") } - context 'when admin' do + context "when admin" do sign_in_as_admin! - context 'when finding by a promotion' do + context "when finding by a promotion" do before do allow(Spree::Config.promotions.promotion_finder_class).to receive(:by_code_or_id).and_return(found_promotion) end @@ -53,24 +53,24 @@ module Spree::Api it_behaves_like "a JSON response" end - context 'when id does not exist' do + context "when id does not exist" do before do allow(Spree::Config.promotions.promotion_finder_class).to receive(:by_code_or_id).and_raise(ActiveRecord::RecordNotFound) end - it 'should be 404' do + it "should be 404" do subject expect(response.status).to eq(404) end end end - context 'when non admin' do + context "when non admin" do before do allow(Spree::Config.promotions.promotion_finder_class).to receive(:by_code_or_id).and_return(found_promotion) end - it 'should be unauthorized' do + it "should be unauthorized" do subject assert_unauthorized! end diff --git a/api/spec/requests/spree/api/properties_spec.rb b/api/spec/requests/spree/api/properties_spec.rb index cd84c1395f2..09ea66990ca 100644 --- a/api/spec/requests/spree/api/properties_spec.rb +++ b/api/spec/requests/spree/api/properties_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Properties', type: :request do + describe "Properties", type: :request do let!(:property_1) { Spree::Property.create!(name: "foo", presentation: "Foo") } let!(:property_2) { Spree::Property.create!(name: "bar", presentation: "Bar") } @@ -20,26 +20,26 @@ module Spree::Api end it "can control the page size through a parameter" do - get spree.api_properties_path, params: { per_page: 1 } - expect(json_response['properties'].count).to eq(1) - expect(json_response['current_page']).to eq(1) - expect(json_response['pages']).to eq(2) + get spree.api_properties_path, params: {per_page: 1} + expect(json_response["properties"].count).to eq(1) + expect(json_response["current_page"]).to eq(1) + expect(json_response["pages"]).to eq(2) end - it 'can query the results through a parameter' do - get spree.api_properties_path, params: { q: { name_cont: 'ba' } } - expect(json_response['count']).to eq(1) - expect(json_response['properties'].first['presentation']).to eq property_2.presentation + it "can query the results through a parameter" do + get spree.api_properties_path, params: {q: {name_cont: "ba"}} + expect(json_response["count"]).to eq(1) + expect(json_response["properties"].first["presentation"]).to eq property_2.presentation end it "retrieves a list of properties by id" do - get spree.api_properties_path, params: { ids: [property_1.id] } + get spree.api_properties_path, params: {ids: [property_1.id]} expect(json_response["properties"].first).to have_attributes(attributes) expect(json_response["count"]).to eq(1) end it "retrieves a list of properties by ids string" do - get spree.api_properties_path, params: { ids: [property_1.id, property_2.id].join(",") } + get spree.api_properties_path, params: {ids: [property_1.id, property_2.id].join(",")} expect(json_response["properties"].first).to have_attributes(attributes) expect(json_response["properties"][1]).to have_attributes(attributes) expect(json_response["count"]).to eq(2) @@ -62,12 +62,12 @@ module Spree::Api end it "cannot create a new property if not an admin" do - post spree.api_properties_path, params: { property: { name: "My Property 3" } } + post spree.api_properties_path, params: {property: {name: "My Property 3"}} assert_unauthorized! end it "cannot update a property if not admin" do - put spree.api_property_path(property_1.name), params: { property: { presentation: "my value 456" } } + put spree.api_property_path(property_1.name), params: {property: {presentation: "my value 456"}} assert_unauthorized! end @@ -82,14 +82,14 @@ module Spree::Api it "can create a new property" do expect(Spree::Property.count).to eq(2) - post spree.api_properties_path, params: { property: { name: "My Property 3", presentation: "my value 3" } } + post spree.api_properties_path, params: {property: {name: "My Property 3", presentation: "my value 3"}} expect(json_response).to have_attributes(attributes) expect(response.status).to eq(201) expect(Spree::Property.count).to eq(3) end it "can update a property" do - put spree.api_property_path(property_1.name), params: { property: { presentation: "my value 456" } } + put spree.api_property_path(property_1.name), params: {property: {presentation: "my value 456"}} expect(response.status).to eq(200) end diff --git a/api/spec/requests/spree/api/return_authorizations_spec.rb b/api/spec/requests/spree/api/return_authorizations_spec.rb index c755f141c77..a2a341c6e7b 100644 --- a/api/spec/requests/spree/api/return_authorizations_spec.rb +++ b/api/spec/requests/spree/api/return_authorizations_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Return authorizations', type: :request do + describe "Return authorizations", type: :request do let!(:order) { create(:shipped_order) } let(:product) { create(:product) } @@ -13,20 +13,20 @@ module Spree::Api stub_authentication! end - shared_examples_for 'a return authorization creator' do + shared_examples_for "a return authorization creator" do it "can create a new return authorization" do stock_location = FactoryBot.create(:stock_location) reason = FactoryBot.create(:return_reason) reimbursement = FactoryBot.create(:reimbursement_type) unit = FactoryBot.create(:inventory_unit) - rma_params = { stock_location_id: stock_location.id, - return_reason_id: reason.id, - return_items_attributes: [{ - inventory_unit_id: unit.id, - preferred_reimbursement_type_id: reimbursement.id, - }], - memo: "Defective" } - post spree.api_order_return_authorizations_path(order), params: { order_id: order.number, return_authorization: rma_params } + rma_params = {stock_location_id: stock_location.id, + return_reason_id: reason.id, + return_items_attributes: [{ + inventory_unit_id: unit.id, + preferred_reimbursement_type_id: reimbursement.id + }], + memo: "Defective"} + post spree.api_order_return_authorizations_path(order), params: {order_id: order.number, return_authorization: rma_params} expect(response.status).to eq(201) expect(json_response).to have_attributes(attributes) expect(json_response["state"]).not_to be_blank @@ -94,29 +94,29 @@ module Spree::Api it "can get a list of return authorizations" do FactoryBot.create(:return_authorization, order:) FactoryBot.create(:return_authorization, order:) - get spree.api_order_return_authorizations_path(order), params: { order_id: order.number } + get spree.api_order_return_authorizations_path(order), params: {order_id: order.number} expect(response.status).to eq(200) return_authorizations = json_response["return_authorizations"] expect(return_authorizations.first).to have_attributes(attributes) expect(return_authorizations.first).not_to eq(return_authorizations.last) end - it 'can control the page size through a parameter' do + it "can control the page size through a parameter" do FactoryBot.create(:return_authorization, order:) FactoryBot.create(:return_authorization, order:) - get spree.api_order_return_authorizations_path(order), params: { order_id: order.number, per_page: 1 } - expect(json_response['count']).to eq(1) - expect(json_response['current_page']).to eq(1) - expect(json_response['pages']).to eq(2) + get spree.api_order_return_authorizations_path(order), params: {order_id: order.number, per_page: 1} + expect(json_response["count"]).to eq(1) + expect(json_response["current_page"]).to eq(1) + expect(json_response["pages"]).to eq(2) end - it 'can query the results through a paramter' do + it "can query the results through a paramter" do FactoryBot.create(:return_authorization, order:) - expected_result = create(:return_authorization, memo: 'damaged') + expected_result = create(:return_authorization, memo: "damaged") order.return_authorizations << expected_result - get spree.api_order_return_authorizations_path(order), params: { q: { memo_cont: 'damaged' } } - expect(json_response['count']).to eq(1) - expect(json_response['return_authorizations'].first['memo']).to eq expected_result.memo + get spree.api_order_return_authorizations_path(order), params: {q: {memo_cont: "damaged"}} + expect(json_response["count"]).to eq(1) + expect(json_response["return_authorizations"].first["memo"]).to eq expected_result.memo end it "can learn how to create a new return authorization" do @@ -129,7 +129,7 @@ module Spree::Api it "can update a return authorization on the order" do FactoryBot.create(:return_authorization, order:) return_authorization = order.return_authorizations.first - put spree.api_order_return_authorization_path(order, return_authorization.id), params: { return_authorization: { memo: "ABC" } } + put spree.api_order_return_authorization_path(order, return_authorization.id), params: {return_authorization: {memo: "ABC"}} expect(response.status).to eq(200) expect(json_response).to have_attributes(attributes) end @@ -160,7 +160,7 @@ module Spree::Api expect(response.status).to eq(200) expect(json_response).to have_attributes(attributes) - expect(json_response).to have_key('admin_metadata') + expect(json_response).to have_key("admin_metadata") end it "can update a return authorization on the order and metadata" do @@ -168,12 +168,12 @@ module Spree::Api return_authorization = order.return_authorizations.first - put spree.api_order_return_authorization_path(order, return_authorization.id), params: { return_authorization: { memo: "ABC", admin_metadata: { 'return_type' => 'warranty claim' }, customer_metadata: { 'return_reason' => 'product not working' } } } + put spree.api_order_return_authorization_path(order, return_authorization.id), params: {return_authorization: {memo: "ABC", admin_metadata: {"return_type" => "warranty claim"}, customer_metadata: {"return_reason" => "product not working"}}} expect(response.status).to eq(200) expect(json_response).to have_attributes(attributes) - expect(json_response["admin_metadata"]).to eq({ 'return_type' => 'warranty claim' }) - expect(json_response["customer_metadata"]).to eq({ 'return_reason' => 'product not working' }) + expect(json_response["admin_metadata"]).to eq({"return_type" => "warranty claim"}) + expect(json_response["customer_metadata"]).to eq({"return_reason" => "product not working"}) end it_behaves_like "a return authorization creator" @@ -181,14 +181,14 @@ module Spree::Api context "as just another user" do it "cannot add a return authorization to the order" do - post spree.api_order_return_authorizations_path(order), params: { return_autorization: { order_id: order.number, memo: "Defective" } } + post spree.api_order_return_authorizations_path(order), params: {return_autorization: {order_id: order.number, memo: "Defective"}} assert_unauthorized! end it "cannot update a return authorization on the order" do FactoryBot.create(:return_authorization, order:) return_authorization = order.return_authorizations.first - put spree.api_order_return_authorization_path(order, return_authorization.id), params: { return_authorization: { memo: "ABC" } } + put spree.api_order_return_authorization_path(order, return_authorization.id), params: {return_authorization: {memo: "ABC"}} assert_unauthorized! expect(return_authorization.reload.memo).not_to eq("ABC") end diff --git a/api/spec/requests/spree/api/shipments_spec.rb b/api/spec/requests/spree/api/shipments_spec.rb index 4ad42e05b5d..5d25355d3aa 100644 --- a/api/spec/requests/spree/api/shipments_spec.rb +++ b/api/spec/requests/spree/api/shipments_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Shipments', type: :request do + describe "Shipments", type: :request do include ActiveSupport::Testing::TimeHelpers let!(:shipment) { create(:shipment, inventory_units: [build(:inventory_unit, shipment: nil)]) } @@ -13,7 +13,7 @@ module Spree::Api stub_authentication! end - let!(:resource_scoping) { { id: shipment.to_param, shipment: { order_id: shipment.order.to_param } } } + let!(:resource_scoping) { {id: shipment.to_param, shipment: {order_id: shipment.order.to_param}} } context "as a non-admin" do it "cannot make a shipment ready" do @@ -49,10 +49,10 @@ module Spree::Api sign_in_as_admin! - describe 'POST #create' do + describe "POST #create" do let(:params) do { - shipment: { order_id: order.number }, + shipment: {order_id: order.number}, stock_location_id: stock_location.to_param } end @@ -61,7 +61,7 @@ module Spree::Api post spree.api_shipments_path, params: end - it 'creates a new shipment' do + it "creates a new shipment" do subject expect(response).to be_ok expect(json_response).to have_attributes(attributes) @@ -72,15 +72,15 @@ module Spree::Api params.delete(:stock_location_id) end - it 'returns proper error' do + it "returns proper error" do subject expect(response.status).to eq(422) - expect(json_response['exception']).to match(/param is missing or the value is empty( or invalid)?: stock_location_id/) + expect(json_response["exception"]).to match(/param is missing or the value is empty( or invalid)?: stock_location_id/) end end end - it 'can update a shipment' do + it "can update a shipment" do params = { shipment: { stock_location_id: stock_location.to_param @@ -89,24 +89,24 @@ module Spree::Api put(spree.api_shipment_path(shipment), params:) expect(response.status).to eq(200) - expect(json_response['stock_location_name']).to eq(stock_location.name) + expect(json_response["stock_location_name"]).to eq(stock_location.name) end it "can update a shipment and it's metadata" do params = { shipment: { stock_location_id: stock_location.to_param, - admin_metadata: { 'delivery_type' => 'express' }, - customer_metadata: { 'timing' => 'standard' } + admin_metadata: {"delivery_type" => "express"}, + customer_metadata: {"timing" => "standard"} } } put(spree.api_shipment_path(shipment), params:) expect(response.status).to eq(200) - expect(json_response['stock_location_name']).to eq(stock_location.name) - expect(json_response["admin_metadata"]).to eq({ 'delivery_type' => 'express' }) - expect(json_response["customer_metadata"]).to eq({ 'timing' => 'standard' }) + expect(json_response["stock_location_name"]).to eq(stock_location.name) + expect(json_response["admin_metadata"]).to eq({"delivery_type" => "express"}) + expect(json_response["customer_metadata"]).to eq({"timing" => "standard"}) end it "can make a shipment ready" do @@ -124,48 +124,48 @@ module Spree::Api expect(response.status).to eq(422) end - context 'for completed orders' do + context "for completed orders" do let(:order) { create :completed_order_with_totals } let(:shipment) { order.shipments.first } - it 'adds a variant to a shipment' do - put spree.add_api_shipment_path(shipment), params: { variant_id: variant.to_param, quantity: 2 } + it "adds a variant to a shipment" do + put spree.add_api_shipment_path(shipment), params: {variant_id: variant.to_param, quantity: 2} expect(response.status).to eq(200) - expect(json_response['manifest'].detect { |h| h['variant']['id'] == variant.id }["quantity"]).to eq(2) + expect(json_response["manifest"].detect { |h| h["variant"]["id"] == variant.id }["quantity"]).to eq(2) end - it 'removes a variant from a shipment' do + it "removes a variant from a shipment" do order.contents.add(variant, 2) - put spree.remove_api_shipment_path(shipment), params: { variant_id: variant.to_param, quantity: 1 } + put spree.remove_api_shipment_path(shipment), params: {variant_id: variant.to_param, quantity: 1} expect(response.status).to eq(200) - expect(json_response['manifest'].detect { |h| h['variant']['id'] == variant.id }["quantity"]).to eq(1) + expect(json_response["manifest"].detect { |h| h["variant"]["id"] == variant.id }["quantity"]).to eq(1) end - it 'removes a destroyed variant from a shipment' do + it "removes a destroyed variant from a shipment" do order.contents.add(variant, 2) variant.discard - put spree.remove_api_shipment_path(shipment), params: { variant_id: variant.to_param, quantity: 1 } + put spree.remove_api_shipment_path(shipment), params: {variant_id: variant.to_param, quantity: 1} expect(response.status).to eq(200) - expect(json_response['manifest'].detect { |h| h['variant']['id'] == variant.id }["quantity"]).to eq(1) + expect(json_response["manifest"].detect { |h| h["variant"]["id"] == variant.id }["quantity"]).to eq(1) end end - context 'for ready shipments' do - let(:order) { create :order_ready_to_ship, line_items_attributes: [{ variant:, quantity: 1 }] } + context "for ready shipments" do + let(:order) { create :order_ready_to_ship, line_items_attributes: [{variant:, quantity: 1}] } let(:shipment) { order.shipments.first } - it 'adds a variant to a shipment' do - put spree.add_api_shipment_path(shipment), params: { variant_id: variant.to_param, quantity: 1 } + it "adds a variant to a shipment" do + put spree.add_api_shipment_path(shipment), params: {variant_id: variant.to_param, quantity: 1} expect(response.status).to eq(200) - expect(json_response['manifest'].detect { |h| h['variant']['id'] == variant.id }['quantity']).to eq(2) + expect(json_response["manifest"].detect { |h| h["variant"]["id"] == variant.id }["quantity"]).to eq(2) end - it 'removes a variant from a shipment' do - put spree.remove_api_shipment_path(shipment), params: { variant_id: variant.to_param, quantity: 1 } + it "removes a variant from a shipment" do + put spree.remove_api_shipment_path(shipment), params: {variant_id: variant.to_param, quantity: 1} expect(response.status).to eq(200) - expect(json_response['manifest'].detect { |h| h['variant']['id'] == variant.id }).to be nil + expect(json_response["manifest"].detect { |h| h["variant"]["id"] == variant.id }).to be nil end end @@ -173,31 +173,31 @@ module Spree::Api let(:order) { create :shipped_order } let(:shipment) { order.shipments.first } - it 'adds a variant to a shipment' do - put spree.add_api_shipment_path(shipment), params: { variant_id: variant.to_param, quantity: 2 } + it "adds a variant to a shipment" do + put spree.add_api_shipment_path(shipment), params: {variant_id: variant.to_param, quantity: 2} expect(response.status).to eq(200) - expect(json_response['manifest'].detect { |h| h['variant']['id'] == variant.id }["quantity"]).to eq(2) + expect(json_response["manifest"].detect { |h| h["variant"]["id"] == variant.id }["quantity"]).to eq(2) end - it 'cannot remove a variant from a shipment' do - put spree.remove_api_shipment_path(shipment), params: { variant_id: variant.to_param, quantity: 1 } + it "cannot remove a variant from a shipment" do + put spree.remove_api_shipment_path(shipment), params: {variant_id: variant.to_param, quantity: 1} expect(response.status).to eq(422) - expect(json_response['errors']['base'].join).to match /Cannot remove items/ + expect(json_response["errors"]["base"].join).to match(/Cannot remove items/) end end - context 'for empty shipments' do + context "for empty shipments" do let(:order) { create :completed_order_with_totals } let(:shipment) { order.shipments.create(stock_location:) } - it 'adds a variant to a shipment' do - put spree.add_api_shipment_path(shipment), params: { variant_id: variant.to_param, quantity: 2 } + it "adds a variant to a shipment" do + put spree.add_api_shipment_path(shipment), params: {variant_id: variant.to_param, quantity: 2} expect(response.status).to eq(200) - expect(json_response['manifest'].detect { |h| h['variant']['id'] == variant.id }["quantity"]).to eq(2) + expect(json_response["manifest"].detect { |h| h["variant"]["id"] == variant.id }["quantity"]).to eq(2) end end - describe '#mine' do + describe "#mine" do subject do get spree.mine_api_shipments_path, params: end @@ -208,15 +208,15 @@ module Spree::Api let(:current_api_user) { shipped_order.user } let!(:shipped_order) { create(:shipped_order) } - it 'succeeds' do + it "succeeds" do subject expect(response.status).to eq 200 end - describe 'json output' do - let(:rendered_shipment_ids) { json_response['shipments'].map { |s| s['id'] } } + describe "json output" do + let(:rendered_shipment_ids) { json_response["shipments"].map { |s| s["id"] } } - it 'contains the shipments' do + it "contains the shipments" do subject expect(rendered_shipment_ids).to match_array current_api_user.orders.flat_map(&:shipments).map(&:id) end @@ -224,40 +224,40 @@ module Spree::Api context "credit card payment" do before { subject } - it 'contains the id and cc_type of the credit card' do - expect(json_response['shipments'][0]['order']['payments'][0]['source'].keys).to match_array ["id", "cc_type"] + it "contains the id and cc_type of the credit card" do + expect(json_response["shipments"][0]["order"]["payments"][0]["source"].keys).to match_array ["id", "cc_type"] end end context "store credit payment" do let(:current_api_user) { shipped_order.user } - let(:shipped_order) { create(:shipped_order, payment_type: :store_credit_payment) } + let(:shipped_order) { create(:shipped_order, payment_type: :store_credit_payment) } before { subject } - it 'only contains the id of the payment source' do - expect(json_response['shipments'][0]['order']['payments'][0]['source'].keys).to match_array ["id"] + it "only contains the id of the payment source" do + expect(json_response["shipments"][0]["order"]["payments"][0]["source"].keys).to match_array ["id"] end end context "check payment" do let(:current_api_user) { shipped_order.user } - let(:shipped_order) { create(:shipped_order, payment_type: :check_payment) } + let(:shipped_order) { create(:shipped_order, payment_type: :check_payment) } before { subject } - it 'does not try to render a nil source' do - expect(json_response['shipments'][0]['order']['payments'][0]['source']).to eq(nil) + it "does not try to render a nil source" do + expect(json_response["shipments"][0]["order"]["payments"][0]["source"]).to eq(nil) end end end - context 'with filtering' do - let(:params) { { q: { order_completed_at_not_null: 1 } } } + context "with filtering" do + let(:params) { {q: {order_completed_at_not_null: 1}} } let!(:incomplete_order) { create(:order_with_line_items, user: current_api_user) } - it 'filters' do + it "filters" do subject expect(assigns(:shipments).map(&:id)).to match_array current_api_user.orders.complete.flat_map(&:shipments).map(&:id) end @@ -292,7 +292,7 @@ module Spree::Api it "returns rates available to user" do subject - expect(json_response['shipping_rates']).to include( + expect(json_response["shipping_rates"]).to include( { "name" => user_shipping_method.name, "cost" => "100.0", @@ -305,7 +305,7 @@ module Spree::Api it "returns rates available to admin" do subject - expect(json_response['shipping_rates']).to include( + expect(json_response["shipping_rates"]).to include( { "name" => admin_shipping_method.name, "cost" => "10.0", @@ -323,7 +323,7 @@ module Spree::Api let(:send_mailer) { nil } subject do - put spree.ship_api_shipment_path(shipment), params: { send_mailer: } + put spree.ship_api_shipment_path(shipment), params: {send_mailer:} end context "the user is allowed to ship the shipment" do @@ -333,33 +333,33 @@ module Spree::Api travel_to(now) do subject shipment.reload - expect(shipment.state).to eq 'shipped' + expect(shipment.state).to eq "shipped" expect(shipment.shipped_at.to_i).to eq now.to_i end end - describe 'sent emails' do + describe "sent emails" do subject { perform_enqueued_jobs { super() } } context "send_mailer not present" do it "sends the shipped shipments mailer" do expect { subject }.to change { ActionMailer::Base.deliveries.size }.by(1) - expect(ActionMailer::Base.deliveries.last.subject).to match /Shipment Notification/ + expect(ActionMailer::Base.deliveries.last.subject).to match(/Shipment Notification/) end end context "send_mailer set to false" do - let(:send_mailer) { 'false' } + let(:send_mailer) { "false" } it "does not send the shipped shipments mailer" do expect { subject }.to_not change { ActionMailer::Base.deliveries.size } end end context "send_mailer set to true" do - let(:send_mailer) { 'true' } + let(:send_mailer) { "true" } it "sends the shipped shipments mailer" do expect { subject }.to change { ActionMailer::Base.deliveries.size }.by(1) - expect(ActionMailer::Base.deliveries.last.subject).to match /Shipment Notification/ + expect(ActionMailer::Base.deliveries.last.subject).to match(/Shipment Notification/) end end end @@ -405,7 +405,7 @@ module Spree::Api end describe "transfers" do - let(:user) { create(:admin_user, spree_api_key: 'abc123') } + let(:user) { create(:admin_user, spree_api_key: "abc123") } let(:current_api_user) { user } let(:stock_item) { create(:stock_item, backorderable: false) } let(:variant) { stock_item.variant } @@ -480,7 +480,7 @@ module Spree::Api end context "if the user can not update shipments" do - let(:user) { create(:user, spree_api_key: 'abc123') } + let(:user) { create(:user, spree_api_key: "abc123") } custom_authorization! do |_| can :show, Spree::Shipment @@ -496,7 +496,7 @@ module Spree::Api end context "if the user can not destroy shipments" do - let(:user) { create(:user, spree_api_key: 'abc123') } + let(:user) { create(:user, spree_api_key: "abc123") } custom_authorization! do |_| can :show, Spree::Shipment diff --git a/api/spec/requests/spree/api/states_spec.rb b/api/spec/requests/spree/api/states_spec.rb index 117b8001fee..5cb69d0c5a6 100644 --- a/api/spec/requests/spree/api/states_spec.rb +++ b/api/spec/requests/spree/api/states_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'States', type: :request do + describe "States", type: :request do let(:australia) { create(:country, iso: "AU") } let!(:state) { create(:state, country: australia, name: "Victoria") } let(:attributes) { [:id, :name, :abbr, :country_id] } @@ -15,19 +15,19 @@ module Spree::Api it "gets all states" do get spree.api_states_path expect(json_response["states"].first).to have_attributes(attributes) - expect(json_response['states'].first['name']).to eq(state.name) + expect(json_response["states"].first["name"]).to eq(state.name) end it "gets all the states for a particular country" do get spree.api_country_states_path(state.country) expect(json_response["states"].first).to have_attributes(attributes) - expect(json_response['states'].first['name']).to eq(state.name) + expect(json_response["states"].first["name"]).to eq(state.name) end context "pagination" do it "can select the next page and control page size" do create(:state) - get spree.api_states_path, params: { page: 2, per_page: 1 } + get spree.api_states_path, params: {page: 2, per_page: 1} expect(json_response).to be_paginated expect(json_response["states"].size).to eq(1) @@ -56,9 +56,9 @@ module Spree::Api expect(json_response["states"].first).to have_attributes(attributes) end - it 'can query the results through a paramter' do - get spree.api_states_path, params: { q: { name_cont: 'Vic' } } - expect(json_response['states'].first['name']).to eq("Victoria") + it "can query the results through a paramter" do + get spree.api_states_path, params: {q: {name_cont: "Vic"}} + expect(json_response["states"].first["name"]).to eq("Victoria") end end diff --git a/api/spec/requests/spree/api/stock_items_spec.rb b/api/spec/requests/spree/api/stock_items_spec.rb index cb2872c2d9f..b194bd3ec95 100644 --- a/api/spec/requests/spree/api/stock_items_spec.rb +++ b/api/spec/requests/spree/api/stock_items_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Stock items', type: :request do + describe "Stock items", type: :request do let!(:stock_location) { create(:stock_location_with_items) } let!(:stock_item) { stock_location.stock_items.order(:id).first } let!(:attributes) { [:id, :count_on_hand, :backorderable, - :stock_location_id, :variant_id] + :stock_location_id, :variant_id] } before do @@ -20,8 +20,8 @@ module Spree::Api it "can list stock items for an active stock location" do get spree.api_stock_location_stock_items_path(stock_location) expect(response).to be_successful - expect(json_response['stock_items'].first).to have_attributes(attributes) - expect(json_response['stock_items'].first['variant']['sku']).to match /\ASKU-\d+\z/ + expect(json_response["stock_items"].first).to have_attributes(attributes) + expect(json_response["stock_items"].first["variant"]["sku"]).to match(/\ASKU-\d+\z/) end it "cannot list stock items for an inactive stock location" do @@ -35,7 +35,7 @@ module Spree::Api it "can see a stock item for an active stock location" do get spree.api_stock_location_stock_item_path(stock_location, stock_item) expect(json_response).to have_attributes(attributes) - expect(json_response['count_on_hand']).to eq stock_item.count_on_hand + expect(json_response["count_on_hand"]).to eq stock_item.count_on_hand end it "cannot see a stock item for an inactive stock location" do @@ -51,7 +51,7 @@ module Spree::Api params = { stock_item: { variant_id: variant.id, - count_on_hand: '20' + count_on_hand: "20" } } @@ -78,38 +78,38 @@ module Spree::Api context "as an admin" do sign_in_as_admin! - it 'can list stock items' do + it "can list stock items" do get spree.api_stock_location_stock_items_path(stock_location) - expect(json_response['stock_items'].first).to have_attributes(attributes) - expect(json_response['stock_items'].first['variant']['sku']).to include 'SKU' + expect(json_response["stock_items"].first).to have_attributes(attributes) + expect(json_response["stock_items"].first["variant"]["sku"]).to include "SKU" end - it 'requires a stock_location_id to be passed as a parameter' do + it "requires a stock_location_id to be passed as a parameter" do get spree.api_stock_items_path - expect(json_response['exception']).to match(/param is missing or the value is empty( or invalid)?: stock_location_id/) + expect(json_response["exception"]).to match(/param is missing or the value is empty( or invalid)?: stock_location_id/) expect(response.status).to eq(422) end - it 'can control the page size through a parameter' do - get spree.api_stock_location_stock_items_path(stock_location), params: { per_page: 1 } - expect(json_response['count']).to eq(1) - expect(json_response['current_page']).to eq(1) + it "can control the page size through a parameter" do + get spree.api_stock_location_stock_items_path(stock_location), params: {per_page: 1} + expect(json_response["count"]).to eq(1) + expect(json_response["current_page"]).to eq(1) end - it 'can query the results through a paramter' do + it "can query the results through a paramter" do stock_item.update_column(:count_on_hand, 30) - get spree.api_stock_location_stock_items_path(stock_location), params: { q: { count_on_hand_eq: '30' } } - expect(json_response['count']).to eq(1) - expect(json_response['stock_items'].first['count_on_hand']).to eq 30 + get spree.api_stock_location_stock_items_path(stock_location), params: {q: {count_on_hand_eq: "30"}} + expect(json_response["count"]).to eq(1) + expect(json_response["stock_items"].first["count_on_hand"]).to eq 30 end - it 'gets a stock item' do + it "gets a stock item" do get spree.api_stock_location_stock_item_path(stock_location, stock_item) expect(json_response).to have_attributes(attributes) - expect(json_response['count_on_hand']).to eq stock_item.count_on_hand + expect(json_response["count_on_hand"]).to eq stock_item.count_on_hand end - context 'creating a stock item' do + context "creating a stock item" do let!(:variant) do variant = create(:variant) # Creating a variant also creates stock items. @@ -117,7 +117,7 @@ module Spree::Api Spree::StockItem.delete_all variant end - let(:count_on_hand) { '20' } + let(:count_on_hand) { "20" } let(:params) do { stock_item: { @@ -131,18 +131,18 @@ module Spree::Api post spree.api_stock_location_stock_items_path(stock_location), params: end - it 'can create a new stock item' do + it "can create a new stock item" do subject expect(response.status).to eq 201 expect(json_response).to have_attributes(attributes) end - it 'creates a stock movement' do + it "creates a stock movement" do expect { subject }.to change { Spree::StockMovement.count }.by(1) expect(assigns(:stock_movement).quantity).to eq 20 end - context 'variant tracks inventory' do + context "variant tracks inventory" do before do expect(variant.track_inventory).to eq true end @@ -153,7 +153,7 @@ module Spree::Api end end - context 'variant does not track inventory' do + context "variant does not track inventory" do before do variant.update(track_inventory: false) end @@ -165,18 +165,18 @@ module Spree::Api end context "attempting to set negative inventory" do - let(:count_on_hand) { '-1' } + let(:count_on_hand) { "-1" } it "does not allow negative inventory for the stock item" do subject expect(response.status).to eq 422 - expect(response.body).to match I18n.t('spree.api.stock_not_below_zero') + expect(response.body).to match I18n.t("spree.api.stock_not_below_zero") expect(assigns(:stock_item).count_on_hand).to eq 0 end end end - context 'updating a stock item' do + context "updating a stock item" do before do expect(stock_item.count_on_hand).to eq 10 end @@ -185,7 +185,7 @@ module Spree::Api put spree.api_stock_item_path(stock_item), params: end - context 'adjusting count_on_hand' do + context "adjusting count_on_hand" do let(:count_on_hand) { 40 } let(:params) do { @@ -196,30 +196,30 @@ module Spree::Api } end - it 'can update a stock item to add new inventory' do + it "can update a stock item to add new inventory" do subject expect(response.status).to eq 200 - expect(json_response['count_on_hand']).to eq 50 - expect(json_response['backorderable']).to eq true + expect(json_response["count_on_hand"]).to eq 50 + expect(json_response["backorderable"]).to eq true end - it 'creates a stock movement for the adjusted quantity' do + it "creates a stock movement for the adjusted quantity" do expect { subject }.to change { Spree::StockMovement.count }.by(1) expect(Spree::StockMovement.last.quantity).to eq 40 end - context 'tracking inventory' do + context "tracking inventory" do before do expect(stock_item.should_track_inventory?).to eq true end it "sets the stock item's count_on_hand" do - subject - expect(assigns(:stock_item).count_on_hand).to eq 50 + subject + expect(assigns(:stock_item).count_on_hand).to eq 50 end end - context 'not tracking inventory' do + context "not tracking inventory" do before do stock_item.variant.update(track_inventory: false) end @@ -231,18 +231,18 @@ module Spree::Api end context "attempting to set negative inventory" do - let(:count_on_hand) { '-11' } + let(:count_on_hand) { "-11" } it "does not allow negative inventory for the stock item" do subject expect(response.status).to eq 422 - expect(response.body).to match I18n.t('spree.api.stock_not_below_zero') + expect(response.body).to match I18n.t("spree.api.stock_not_below_zero") expect(assigns(:stock_item).count_on_hand).to eq 10 end end end - context 'setting count_on_hand' do + context "setting count_on_hand" do let(:count_on_hand) { 40 } let(:params) do { @@ -255,18 +255,18 @@ module Spree::Api } end - it 'can set a stock item to modify the current inventory' do + it "can set a stock item to modify the current inventory" do subject expect(response.status).to eq 200 - expect(json_response['count_on_hand']).to eq 40 + expect(json_response["count_on_hand"]).to eq 40 end - it 'creates a stock movement for the adjusted quantity' do + it "creates a stock movement for the adjusted quantity" do expect { subject }.to change { Spree::StockMovement.count }.by(1) expect(assigns(:stock_movement).quantity).to eq 30 end - context 'tracking inventory' do + context "tracking inventory" do before do expect(stock_item.should_track_inventory?).to eq true end @@ -277,7 +277,7 @@ module Spree::Api end end - context 'not tracking inventory' do + context "not tracking inventory" do before do stock_item.variant.update(track_inventory: false) end @@ -289,19 +289,19 @@ module Spree::Api end context "attempting to set negative inventory" do - let(:count_on_hand) { '-1' } + let(:count_on_hand) { "-1" } it "does not allow negative inventory for the stock item" do subject expect(response.status).to eq 422 - expect(response.body).to match I18n.t('spree.api.stock_not_below_zero') + expect(response.body).to match I18n.t("spree.api.stock_not_below_zero") expect(assigns(:stock_item).count_on_hand).to eq 10 end end end end - it 'can delete a stock item' do + it "can delete a stock item" do delete spree.api_stock_item_path(stock_item) expect(response.status).to eq(204) expect { Spree::StockItem.find(stock_item.id) }.to raise_error(ActiveRecord::RecordNotFound) diff --git a/api/spec/requests/spree/api/stock_locations_spec.rb b/api/spec/requests/spree/api/stock_locations_spec.rb index 3794fc77604..04d2b364f43 100644 --- a/api/spec/requests/spree/api/stock_locations_spec.rb +++ b/api/spec/requests/spree/api/stock_locations_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Stock locations', type: :request do + describe "Stock locations", type: :request do let!(:stock_location) { create(:stock_location) } let!(:attributes) { [:id, :name, :address1, :address2, :city, :state_id, :state_name, :country_id, :zipcode, :phone, :active] } @@ -16,7 +16,7 @@ module Spree::Api it "can see active stock locations" do get spree.api_stock_locations_path expect(response).to be_successful - stock_locations = json_response['stock_locations'].map { |sl| sl['name'] } + stock_locations = json_response["stock_locations"].map { |sl| sl["name"] } expect(stock_locations).to include stock_location.name end @@ -24,7 +24,7 @@ module Spree::Api stock_location.update!(active: false) get spree.api_stock_locations_path expect(response).to be_successful - stock_locations = json_response['stock_locations'].map { |sl| sl['name'] } + stock_locations = json_response["stock_locations"].map { |sl| sl["name"] } expect(stock_locations).not_to include stock_location.name end end @@ -33,7 +33,7 @@ module Spree::Api it "can see active stock locations" do get spree.api_stock_location_path(stock_location) expect(response).to be_successful - expect(json_response['name']).to eq stock_location.name + expect(json_response["name"]).to eq stock_location.name end it "cannot see inactive stock locations" do @@ -59,7 +59,7 @@ module Spree::Api describe "#update" do it "cannot update a stock location" do - put spree.api_stock_location_path(stock_location), params: { stock_location: { name: "South Pole" } } + put spree.api_stock_location_path(stock_location), params: {stock_location: {name: "South Pole"}} expect(response.status).to eq(401) end end @@ -79,7 +79,7 @@ module Spree::Api it "can see active stock locations" do get spree.api_stock_locations_path expect(response).to be_successful - stock_locations = json_response['stock_locations'].map { |sl| sl['name'] } + stock_locations = json_response["stock_locations"].map { |sl| sl["name"] } expect(stock_locations).to include stock_location.name end @@ -87,30 +87,30 @@ module Spree::Api stock_location.update!(active: false) get spree.api_stock_locations_path expect(response).to be_successful - stock_locations = json_response['stock_locations'].map { |sl| sl['name'] } + stock_locations = json_response["stock_locations"].map { |sl| sl["name"] } expect(stock_locations).to include stock_location.name end it "gets stock location information" do get spree.api_stock_locations_path - expect(json_response['stock_locations'].first).to have_attributes(attributes) - expect(json_response['stock_locations'].first['country']).not_to be_nil - expect(json_response['stock_locations'].first['state']).not_to be_nil + expect(json_response["stock_locations"].first).to have_attributes(attributes) + expect(json_response["stock_locations"].first["country"]).not_to be_nil + expect(json_response["stock_locations"].first["state"]).not_to be_nil end - it 'can control the page size through a parameter' do + it "can control the page size through a parameter" do create(:stock_location) - get spree.api_stock_locations_path, params: { per_page: 1 } - expect(json_response['count']).to eq(1) - expect(json_response['current_page']).to eq(1) - expect(json_response['pages']).to eq(2) + get spree.api_stock_locations_path, params: {per_page: 1} + expect(json_response["count"]).to eq(1) + expect(json_response["current_page"]).to eq(1) + expect(json_response["pages"]).to eq(2) end - it 'can query the results through a paramter' do - expected_result = create(:stock_location, name: 'South America') - get spree.api_stock_locations_path, params: { q: { name_cont: 'south' } } - expect(json_response['count']).to eq(1) - expect(json_response['stock_locations'].first['name']).to eq expected_result.name + it "can query the results through a paramter" do + expected_result = create(:stock_location, name: "South America") + get spree.api_stock_locations_path, params: {q: {name_cont: "south"}} + expect(json_response["count"]).to eq(1) + expect(json_response["stock_locations"].first["name"]).to eq expected_result.name end end @@ -118,14 +118,14 @@ module Spree::Api it "can see active stock locations" do get spree.api_stock_location_path(stock_location) expect(response).to be_successful - expect(json_response['name']).to eq stock_location.name + expect(json_response["name"]).to eq stock_location.name end it "can see inactive stock locations" do stock_location.update!(active: false) get spree.api_stock_location_path(stock_location) expect(response).to be_successful - expect(json_response['name']).to eq stock_location.name + expect(json_response["name"]).to eq stock_location.name end end @@ -154,7 +154,7 @@ module Spree::Api put(spree.api_stock_location_path(stock_location), params:) expect(response.status).to eq(200) - expect(json_response['name']).to eq 'South Pole' + expect(json_response["name"]).to eq "South Pole" end end diff --git a/api/spec/requests/spree/api/stock_movements_spec.rb b/api/spec/requests/spree/api/stock_movements_spec.rb index 1cd499002e4..7ce914b39c5 100644 --- a/api/spec/requests/spree/api/stock_movements_spec.rb +++ b/api/spec/requests/spree/api/stock_movements_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Stock movements', type: :request do + describe "Stock movements", type: :request do let!(:stock_location) { create(:stock_location_with_items) } let!(:stock_item) { stock_location.stock_items.order(:id).first } let!(:stock_movement) { create(:stock_movement, stock_item:) } @@ -13,18 +13,18 @@ module Spree::Api stub_authentication! end - context 'as a user' do - it 'cannot see a list of stock movements' do + context "as a user" do + it "cannot see a list of stock movements" do get spree.api_stock_location_stock_movements_path(stock_location) expect(response.status).to eq(401) end - it 'cannot see a stock movement' do + it "cannot see a stock movement" do get spree.api_stock_location_stock_movement_path(stock_location, stock_movement) expect(response.status).to eq(404) end - it 'cannot create a stock movement' do + it "cannot create a stock movement" do params = { stock_movement: { stock_item_id: stock_item.to_param @@ -36,36 +36,36 @@ module Spree::Api end end - context 'as an admin' do + context "as an admin" do sign_in_as_admin! - it 'gets list of stock movements' do + it "gets list of stock movements" do get spree.api_stock_location_stock_movements_path(stock_location) - expect(json_response['stock_movements'].first).to have_attributes(attributes) - expect(json_response['stock_movements'].first['stock_item']['count_on_hand']).to eq 11 + expect(json_response["stock_movements"].first).to have_attributes(attributes) + expect(json_response["stock_movements"].first["stock_item"]["count_on_hand"]).to eq 11 end - it 'can control the page size through a parameter' do + it "can control the page size through a parameter" do create(:stock_movement, stock_item:) - get spree.api_stock_location_stock_movements_path(stock_location), params: { per_page: 1 } - expect(json_response['count']).to eq(1) - expect(json_response['current_page']).to eq(1) - expect(json_response['pages']).to eq(2) + get spree.api_stock_location_stock_movements_path(stock_location), params: {per_page: 1} + expect(json_response["count"]).to eq(1) + expect(json_response["current_page"]).to eq(1) + expect(json_response["pages"]).to eq(2) end - it 'can query the results through a paramter' do + it "can query the results through a paramter" do create(:stock_movement, :received, quantity: 10, stock_item:) - get spree.api_stock_location_stock_movements_path(stock_location), params: { q: { quantity_eq: '10' } } - expect(json_response['count']).to eq(1) + get spree.api_stock_location_stock_movements_path(stock_location), params: {q: {quantity_eq: "10"}} + expect(json_response["count"]).to eq(1) end - it 'gets a stock movement' do + it "gets a stock movement" do get spree.api_stock_location_stock_movement_path(stock_location, stock_movement) expect(json_response).to have_attributes(attributes) - expect(json_response['stock_item_id']).to eq stock_movement.stock_item_id + expect(json_response["stock_item_id"]).to eq stock_movement.stock_item_id end - it 'can create a new stock movement' do + it "can create a new stock movement" do params = { stock_movement: { stock_item_id: stock_item.to_param diff --git a/api/spec/requests/spree/api/store_credit_events_spec.rb b/api/spec/requests/spree/api/store_credit_events_spec.rb index 9627f709f92..705898e4242 100644 --- a/api/spec/requests/spree/api/store_credit_events_spec.rb +++ b/api/spec/requests/spree/api/store_credit_events_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Store credit events', type: :request do + describe "Store credit events", type: :request do let(:api_user) { create(:user, :with_api_key) } describe "GET mine" do subject do - get spree.mine_api_store_credit_events_path(format: :json), headers: { Authorization: "Bearer #{api_key}" } + get spree.mine_api_store_credit_events_path(format: :json), headers: {Authorization: "Bearer #{api_key}"} end context "no current api user" do diff --git a/api/spec/requests/spree/api/stores_spec.rb b/api/spec/requests/spree/api/stores_spec.rb index ab9dec43ba1..e036e081d9c 100644 --- a/api/spec/requests/spree/api/stores_spec.rb +++ b/api/spec/requests/spree/api/stores_spec.rb @@ -3,7 +3,7 @@ require "spec_helper" module Spree::Api - describe 'Stores', type: :request do + describe "Stores", type: :request do let!(:store) do create(:store, name: "My Spree Store", url: "spreestore.example.com") end @@ -32,7 +32,7 @@ module Spree::Api "meta_description" => nil, "meta_keywords" => nil, "seo_title" => nil, - "reverse_charge_status" => 'disabled', + "reverse_charge_status" => "disabled", "mail_from_address" => "solidus@example.org", "bcc_email" => nil, "default_currency" => nil, @@ -47,7 +47,7 @@ module Spree::Api "meta_description" => nil, "meta_keywords" => nil, "seo_title" => nil, - "reverse_charge_status" => 'disabled', + "reverse_charge_status" => "disabled", "mail_from_address" => "solidus@example.org", "bcc_email" => nil, "default_currency" => nil, @@ -67,7 +67,7 @@ module Spree::Api "meta_description" => nil, "meta_keywords" => nil, "seo_title" => nil, - "reverse_charge_status" => 'disabled', + "reverse_charge_status" => "disabled", "mail_from_address" => "solidus@example.org", "bcc_email" => nil, "default_currency" => nil, @@ -84,7 +84,7 @@ module Spree::Api url: "spree123.example.com", mail_from_address: "me@example.com" } - post spree.api_stores_path, params: { store: store_hash } + post spree.api_stores_path, params: {store: store_hash} expect(response.status).to eq(201) end @@ -94,7 +94,7 @@ module Spree::Api mail_from_address: "me@example.com", bcc_email: "bcc@example.net" } - put spree.api_store_path(store), params: { store: store_hash } + put spree.api_store_path(store), params: {store: store_hash} expect(response.status).to eq(200) expect(store.reload.url).to eql "spree123.example.com" expect(store.reload.mail_from_address).to eql "me@example.com" @@ -125,9 +125,9 @@ module Spree::Api mail_from_address: "me@example.com", reverse_charge_status: "enabled" } - post spree.api_stores_path, params: { store: store_hash } + post spree.api_stores_path, params: {store: store_hash} expect(response.status).to eq(201) - expect(json_response["reverse_charge_status"]).to eq('enabled') + expect(json_response["reverse_charge_status"]).to eq("enabled") end it "can update an existing store with reverse_charge_status" do @@ -137,7 +137,7 @@ module Spree::Api bcc_email: "bcc@example.net", reverse_charge_status: "disabled" } - put spree.api_store_path(store), params: { store: store_hash } + put spree.api_store_path(store), params: {store: store_hash} expect(response.status).to eq(200) expect(store.reload.url).to eql "spree123.example.com" expect(store.reload.mail_from_address).to eql "me@example.com" @@ -159,12 +159,12 @@ module Spree::Api end it "cannot create a new store" do - post spree.api_stores_path, params: { store: {} } + post spree.api_stores_path, params: {store: {}} expect(response.status).to eq(401) end it "cannot update an existing store" do - put spree.api_store_path(store), params: { store: {} } + put spree.api_store_path(store), params: {store: {}} expect(response.status).to eq(401) end end diff --git a/api/spec/requests/spree/api/taxonomies_spec.rb b/api/spec/requests/spree/api/taxonomies_spec.rb index ff927b5b215..e1ea3144b1b 100644 --- a/api/spec/requests/spree/api/taxonomies_spec.rb +++ b/api/spec/requests/spree/api/taxonomies_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Taxonomies', type: :request do + describe "Taxonomies", type: :request do let(:taxonomy) { create(:taxonomy) } let(:taxon) { create(:taxon, name: "Ruby", taxonomy:) } let(:taxon2) { create(:taxon, name: "Rails", taxonomy:) } @@ -20,43 +20,43 @@ module Spree::Api it "gets all taxonomies" do get spree.api_taxonomies_path - expect(json_response["taxonomies"].first['name']).to eq taxonomy.name - expect(json_response["taxonomies"].first['root']['taxons'].count).to eq 1 + expect(json_response["taxonomies"].first["name"]).to eq taxonomy.name + expect(json_response["taxonomies"].first["root"]["taxons"].count).to eq 1 end - it 'can control the page size through a parameter' do + it "can control the page size through a parameter" do create(:taxonomy) - get spree.api_taxonomies_path, params: { per_page: 1 } - expect(json_response['count']).to eq(1) - expect(json_response['current_page']).to eq(1) - expect(json_response['pages']).to eq(2) + get spree.api_taxonomies_path, params: {per_page: 1} + expect(json_response["count"]).to eq(1) + expect(json_response["current_page"]).to eq(1) + expect(json_response["pages"]).to eq(2) end - it 'can query the results through a paramter' do - expected_result = create(:taxonomy, name: 'Style') - get spree.api_taxonomies_path, params: { q: { name_cont: 'style' } } - expect(json_response['count']).to eq(1) - expect(json_response['taxonomies'].first['name']).to eq expected_result.name + it "can query the results through a paramter" do + expected_result = create(:taxonomy, name: "Style") + get spree.api_taxonomies_path, params: {q: {name_cont: "style"}} + expect(json_response["count"]).to eq(1) + expect(json_response["taxonomies"].first["name"]).to eq expected_result.name end it "gets a single taxonomy" do get spree.api_taxonomy_path(taxonomy.id) - expect(json_response['name']).to eq taxonomy.name + expect(json_response["name"]).to eq taxonomy.name - children = json_response['root']['taxons'] + children = json_response["root"]["taxons"] expect(children.count).to eq 1 - expect(children.first['name']).to eq taxon.name - expect(children.first.key?('taxons')).to be false + expect(children.first["name"]).to eq taxon.name + expect(children.first.key?("taxons")).to be false end it "gets a single taxonomy with set=nested" do - get spree.api_taxonomy_path(taxonomy.id), params: { set: 'nested' } + get spree.api_taxonomy_path(taxonomy.id), params: {set: "nested"} - expect(json_response['name']).to eq taxonomy.name + expect(json_response["name"]).to eq taxonomy.name - children = json_response['root']['taxons'] - expect(children.first.key?('taxons')).to be true + children = json_response["root"]["taxons"] + expect(children.first.key?("taxons")).to be true end it "can learn how to create a new taxonomy" do @@ -67,12 +67,12 @@ module Spree::Api end it "cannot create a new taxonomy if not an admin" do - post spree.api_taxonomies_path, params: { taxonomy: { name: "Location" } } + post spree.api_taxonomies_path, params: {taxonomy: {name: "Location"}} assert_unauthorized! end it "cannot update a taxonomy if not an admin" do - put spree.api_taxonomy_path(taxonomy.id), params: { taxonomy: { name: "I hacked your store!" } } + put spree.api_taxonomy_path(taxonomy.id), params: {taxonomy: {name: "I hacked your store!"}} assert_unauthorized! end @@ -86,22 +86,22 @@ module Spree::Api sign_in_as_admin! it "can create a taxonomy" do - post spree.api_taxonomies_path, params: { taxonomy: { name: "Colors" } } + post spree.api_taxonomies_path, params: {taxonomy: {name: "Colors"}} expect(json_response).to have_attributes(attributes) expect(response.status).to eq(201) end it "cannot create a new taxonomy with invalid attributes" do - post spree.api_taxonomies_path, params: { taxonomy: {} } + post spree.api_taxonomies_path, params: {taxonomy: {}} expect(response.status).to eq(422) expect(json_response["error"]).to eq("Invalid resource. Please fix errors and try again.") end it "can update a taxonomy" do - put spree.api_taxonomy_path(taxonomy), params: { taxonomy: { name: "Colours" } } + put spree.api_taxonomy_path(taxonomy), params: {taxonomy: {name: "Colours"}} expect(json_response).to have_attributes(attributes) expect(response.status).to eq(200) - expect(taxonomy.reload.name).to eql 'Colours' + expect(taxonomy.reload.name).to eql "Colours" end it "can destroy" do diff --git a/api/spec/requests/spree/api/taxons_spec.rb b/api/spec/requests/spree/api/taxons_spec.rb index d93ff52e549..03a46f0489f 100644 --- a/api/spec/requests/spree/api/taxons_spec.rb +++ b/api/spec/requests/spree/api/taxons_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Taxons', type: :request do + describe "Taxons", type: :request do let!(:taxonomy) { create(:taxonomy) } let!(:taxon) { create(:taxon, name: "Ruby", parent: taxonomy.root, taxonomy:) } let!(:taxon2) { create(:taxon, name: "Rails", parent: taxon, taxonomy:) } @@ -18,26 +18,26 @@ module Spree::Api it "gets all taxons for a taxonomy" do get spree.api_taxonomy_taxons_path(taxonomy) - expect(json_response['taxons'].first['name']).to eq taxon.name - children = json_response['taxons'].first['taxons'] + expect(json_response["taxons"].first["name"]).to eq taxon.name + children = json_response["taxons"].first["taxons"] expect(children.count).to eq 1 - expect(children.first['name']).to eq taxon2.name - expect(children.first['taxons'].count).to eq 1 + expect(children.first["name"]).to eq taxon2.name + expect(children.first["taxons"].count).to eq 1 end # Regression test for https://github.com/spree/spree/issues/4112 it "does not include children when asked not to" do - get spree.api_taxonomy_taxons_path(taxonomy), params: { without_children: 1 } + get spree.api_taxonomy_taxons_path(taxonomy), params: {without_children: 1} - expect(json_response['taxons'].first['name']).to eq(taxon.name) - expect(json_response['taxons'].first['taxons']).to be_nil + expect(json_response["taxons"].first["name"]).to eq(taxon.name) + expect(json_response["taxons"].first["taxons"]).to be_nil end it "paginates through taxons" do new_taxon = create(:taxon, name: "Go", taxonomy:) taxonomy.root.children << new_taxon expect(taxonomy.root.children.count).to eql(2) - get spree.api_taxonomy_taxons_path(taxonomy), params: { page: 1, per_page: 1 } + get spree.api_taxonomy_taxons_path(taxonomy), params: {page: 1, per_page: 1} expect(json_response["count"]).to eql(1) expect(json_response["total_count"]).to eql(2) expect(json_response["current_page"]).to eql(1) @@ -45,67 +45,67 @@ module Spree::Api expect(json_response["pages"]).to eql(2) end - describe 'searching' do - context 'with a name' do + describe "searching" do + context "with a name" do before do - get spree.api_taxons_path, params: { q: { name_cont: name } } + get spree.api_taxons_path, params: {q: {name_cont: name}} end - context 'with one result' do + context "with one result" do let(:name) { "Ruby" } it "returns an array including the matching taxon" do - expect(json_response['taxons'].count).to eq(1) - expect(json_response['taxons'].first['name']).to eq "Ruby" + expect(json_response["taxons"].count).to eq(1) + expect(json_response["taxons"].first["name"]).to eq "Ruby" end end - context 'with no results' do + context "with no results" do let(:name) { "Imaginary" } - it 'returns an empty array of taxons' do - expect(json_response.keys).to include('taxons') - expect(json_response['taxons'].count).to eq(0) + it "returns an empty array of taxons" do + expect(json_response.keys).to include("taxons") + expect(json_response["taxons"].count).to eq(0) end end end - context 'with no filters' do + context "with no filters" do it "gets all taxons" do get spree.api_taxons_path - expect(json_response['taxons'].first['name']).to eq taxonomy.root.name - children = json_response['taxons'].first['taxons'] + expect(json_response["taxons"].first["name"]).to eq taxonomy.root.name + children = json_response["taxons"].first["taxons"] expect(children.count).to eq 1 - expect(children.first['name']).to eq taxon.name - expect(children.first['taxons'].count).to eq 1 + expect(children.first["name"]).to eq taxon.name + expect(children.first["taxons"].count).to eq 1 end end end - context 'filtering by taxon ids' do - it 'returns only requested id' do - get spree.api_taxons_path, params: { ids: [rails_v3_2_2.id] } + context "filtering by taxon ids" do + it "returns only requested id" do + get spree.api_taxons_path, params: {ids: [rails_v3_2_2.id]} - expect(json_response['taxons'].size).to eq 1 + expect(json_response["taxons"].size).to eq 1 end - it 'returns only requested ids' do + it "returns only requested ids" do # We need a completly new branch to avoid having parent that can be preloaded from the rails ancestors - python = create(:taxon, name: "Python", parent: taxonomy.root, taxonomy:) + python = create(:taxon, name: "Python", parent: taxonomy.root, taxonomy:) python_three = create(:taxon, name: "3.0", parent: python, taxonomy:) - get spree.api_taxons_path, params: { ids: [rails_v3_2_2.id, python_three.id] } + get spree.api_taxons_path, params: {ids: [rails_v3_2_2.id, python_three.id]} - expect(json_response['taxons'].size).to eq 2 + expect(json_response["taxons"].size).to eq 2 end end it "gets a single taxon" do get spree.api_taxonomy_taxon_path(taxonomy, taxon.id) - expect(json_response['name']).to eq taxon.name - expect(json_response['taxons'].count).to eq 1 + expect(json_response["name"]).to eq taxon.name + expect(json_response["taxons"].count).to eq 1 end it "can learn how to create a new taxon" do @@ -116,12 +116,12 @@ module Spree::Api end it "cannot create a new taxon if not an admin" do - post spree.api_taxonomy_taxons_path(taxonomy), params: { taxon: { name: "Location" } } + post spree.api_taxonomy_taxons_path(taxonomy), params: {taxon: {name: "Location"}} assert_unauthorized! end it "cannot update a taxon if not an admin" do - put spree.api_taxonomy_taxon_path(taxonomy, taxon.id), params: { taxon: { name: "I hacked your store!" } } + put spree.api_taxonomy_taxon_path(taxonomy, taxon.id), params: {taxon: {name: "I hacked your store!"}} assert_unauthorized! end @@ -136,7 +136,7 @@ module Spree::Api end it "returns all the products with detailed information" do - get spree.api_taxon_products_path, params: { id: taxon.id } + get spree.api_taxon_products_path, params: {id: taxon.id} expect(response).to be_successful expect(json_response["products"].size).to eq(2) @@ -144,7 +144,7 @@ module Spree::Api end it "returns a simplified json response when simple: true is passed" do - get spree.api_taxon_products_path, params: { id: taxon.id, simple: true } + get spree.api_taxon_products_path, params: {id: taxon.id, simple: true} expect(response).to be_successful expect(json_response["products"].size).to eq(2) @@ -152,9 +152,9 @@ module Spree::Api end it "can query the resulting products through a parameter" do - create(:product, name: 'Watch', taxons: [taxon]) + create(:product, name: "Watch", taxons: [taxon]) - get spree.api_taxon_products_path, params: { id: taxon.id, q: { name_eq: 'Watch' } } + get spree.api_taxon_products_path, params: {id: taxon.id, q: {name_eq: "Watch"}} expect(response).to be_successful expect(json_response["products"].size).to eq(1) @@ -167,11 +167,11 @@ module Spree::Api end it "handles exclude_data correctly" do - get spree.api_taxon_products_path, params: { id: taxon.id, simple: true } + get spree.api_taxon_products_path, params: {id: taxon.id, simple: true} expect(response).to be_successful simple_response = json_response - get spree.api_taxon_products_path, params: { id: taxon.id } + get spree.api_taxon_products_path, params: {id: taxon.id} expect(response).to be_successful full_response = json_response @@ -190,12 +190,12 @@ module Spree::Api sign_in_as_admin! it "can create" do - post spree.api_taxonomy_taxons_path(taxonomy), params: { taxon: { name: "Colors" } } + post spree.api_taxonomy_taxons_path(taxonomy), params: {taxon: {name: "Colors"}} expect(json_response).to have_attributes(attributes) expect(response.status).to eq(201) expect(taxonomy.reload.root.children.count).to eq 2 - taxon = Spree::Taxon.where(name: 'Colors').first + taxon = Spree::Taxon.where(name: "Colors").first expect(taxon.parent_id).to eq taxonomy.root.id expect(taxon.taxonomy_id).to eq taxonomy.id @@ -203,14 +203,14 @@ module Spree::Api it "can update the position in the list" do taxonomy.root.children << taxon2 - put spree.api_taxonomy_taxon_path(taxonomy, taxon.id), params: { taxon: { parent_id: taxon.parent_id, child_index: 2 } } + put spree.api_taxonomy_taxon_path(taxonomy, taxon.id), params: {taxon: {parent_id: taxon.parent_id, child_index: 2}} expect(response.status).to eq(200) expect(taxonomy.reload.root.children[0]).to eql taxon2 expect(taxonomy.reload.root.children[1]).to eql taxon end it "cannot create a new taxon with invalid attributes" do - post spree.api_taxonomy_taxons_path(taxonomy), params: { taxon: { name: '' } } + post spree.api_taxonomy_taxons_path(taxonomy), params: {taxon: {name: ""}} expect(response.status).to eq(422) expect(json_response["error"]).to eq("Invalid resource. Please fix errors and try again.") @@ -218,7 +218,7 @@ module Spree::Api end it "cannot create a new taxon with invalid taxonomy_id" do - post spree.api_taxonomy_taxons_path(1000), params: { taxon: { name: "Colors" } } + post spree.api_taxonomy_taxons_path(1000), params: {taxon: {name: "Colors"}} expect(response.status).to eq(422) expect(json_response["error"]).to eq("Invalid resource. Please fix errors and try again.") diff --git a/api/spec/requests/spree/api/unauthenticated_products_spec.rb b/api/spec/requests/spree/api/unauthenticated_products_spec.rb index 5d526057ae3..1cf0f6204bc 100644 --- a/api/spec/requests/spree/api/unauthenticated_products_spec.rb +++ b/api/spec/requests/spree/api/unauthenticated_products_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'shared_examples/protect_product_actions' -require 'spec_helper' +require "shared_examples/protect_product_actions" +require "spec_helper" module Spree::Api - describe 'Unauthorized products', type: :request do + describe "Unauthorized products", type: :request do let!(:product) { create(:product) } let(:attributes) { [:id, :name, :description, :price, :available_on, :slug, :meta_description, :meta_keywords, :taxon_ids, :meta_title] } diff --git a/api/spec/requests/spree/api/users_spec.rb b/api/spec/requests/spree/api/users_spec.rb index e29bbe25ea9..f339e464113 100644 --- a/api/spec/requests/spree/api/users_spec.rb +++ b/api/spec/requests/spree/api/users_spec.rb @@ -1,70 +1,70 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Users', type: :request do + describe "Users", type: :request do let(:user) { create(:user, spree_api_key: SecureRandom.hex) } - let(:stranger) { create(:user, email: 'stranger@example.com') } + let(:stranger) { create(:user, email: "stranger@example.com") } let(:attributes) { [:id, :email, :created_at, :updated_at, :customer_metadata] } context "as a normal user" do it "can get own details" do - get spree.api_user_path(user.id), params: { token: user.spree_api_key } + get spree.api_user_path(user.id), params: {token: user.spree_api_key} - expect(json_response['email']).to eq user.email + expect(json_response["email"]).to eq user.email end it "can view customer_metadata" do - get spree.api_user_path(user.id), params: { token: user.spree_api_key } + get spree.api_user_path(user.id), params: {token: user.spree_api_key} - expect(json_response['email']).to eq user.email - expect(json_response).to have_key('customer_metadata') + expect(json_response["email"]).to eq user.email + expect(json_response).to have_key("customer_metadata") end it "cannot view admin_metadata" do - get spree.api_user_path(user.id), params: { token: user.spree_api_key } + get spree.api_user_path(user.id), params: {token: user.spree_api_key} - expect(json_response['email']).to eq user.email - expect(json_response).not_to have_key('admin_metadata') + expect(json_response["email"]).to eq user.email + expect(json_response).not_to have_key("admin_metadata") end it "cannot get other users details" do - get spree.api_user_path(stranger.id), params: { token: user.spree_api_key } + get spree.api_user_path(stranger.id), params: {token: user.spree_api_key} assert_not_found! end it "can learn how to create a new user" do - get spree.new_api_user_path, params: { token: user.spree_api_key } + get spree.new_api_user_path, params: {token: user.spree_api_key} expect(json_response["attributes"]).to eq(attributes.map(&:to_s)) end it "can create a new user" do user_params = { - email: 'new@example.com', password: 'spree123', password_confirmation: 'spree123' + email: "new@example.com", password: "spree123", password_confirmation: "spree123" } - post spree.api_users_path, params: { user: user_params, token: user.spree_api_key } - expect(json_response['email']).to eq 'new@example.com' + post spree.api_users_path, params: {user: user_params, token: user.spree_api_key} + expect(json_response["email"]).to eq "new@example.com" end it "can create a new user with customer_metadata" do user_params = { - email: 'new@example.com', password: 'spree123', password_confirmation: 'spree123', customer_metadata: { 'username' => 'newuser' } + email: "new@example.com", password: "spree123", password_confirmation: "spree123", customer_metadata: {"username" => "newuser"} } - post spree.api_users_path, params: { user: user_params, token: user.spree_api_key } + post spree.api_users_path, params: {user: user_params, token: user.spree_api_key} - expect(json_response['email']).to eq 'new@example.com' - expect(json_response['customer_metadata']).to eq({ 'username' => 'newuser' }) - expect(json_response).not_to have_key('admin_metadata') + expect(json_response["email"]).to eq "new@example.com" + expect(json_response["customer_metadata"]).to eq({"username" => "newuser"}) + expect(json_response).not_to have_key("admin_metadata") end it "cannot create a new user with invalid attributes" do allow_any_instance_of(Spree::LegacyUser).to receive(:save).and_return(false) - post spree.api_users_path, params: { user: { email: 'foo@example.com' }, token: user.spree_api_key } + post spree.api_users_path, params: {user: {email: "foo@example.com"}, token: user.spree_api_key} expect(response.status).to eq(422) expect(json_response["error"]).to eq("Invalid resource. Please fix errors and try again.") end @@ -73,30 +73,30 @@ module Spree::Api country = create(:country) state = create(:state) - put spree.api_user_path(user.id), params: { token: user.spree_api_key, user: { + put spree.api_user_path(user.id), params: {token: user.spree_api_key, user: { email: "mine@example.com", bill_address_attributes: { - name: 'First Last', - address1: '1 Test Rd', - city: 'City', + name: "First Last", + address1: "1 Test Rd", + city: "City", country_id: country.id, state_id: state.id, - zipcode: '55555', - phone: '5555555555' + zipcode: "55555", + phone: "5555555555" }, ship_address_attributes: { - name: 'First Last', - address1: '1 Test Rd', - city: 'City', + name: "First Last", + address1: "1 Test Rd", + city: "City", country_id: country.id, state_id: state.id, - zipcode: '55555', - phone: '5555555555' + zipcode: "55555", + phone: "5555555555" } - } } - expect(json_response['email']).to eq 'mine@example.com' - expect(json_response['bill_address']).to_not be_nil - expect(json_response['ship_address']).to_not be_nil + }} + expect(json_response["email"]).to eq "mine@example.com" + expect(json_response["bill_address"]).to_not be_nil + expect(json_response["ship_address"]).to_not be_nil end it "can update own details in JSON with unwrapped parameters (Rails default)" do @@ -104,56 +104,56 @@ module Spree::Api state = create(:state) put spree.api_user_path(user.id), - headers: { "CONTENT_TYPE": "application/json" }, + headers: {CONTENT_TYPE: "application/json"}, params: { token: user.spree_api_key, email: "mine@example.com", bill_address_attributes: { - name: 'First Last', - address1: '1 Test Rd', - city: 'City', + name: "First Last", + address1: "1 Test Rd", + city: "City", country_id: country.id, state_id: state.id, - zipcode: '55555', - phone: '5555555555' + zipcode: "55555", + phone: "5555555555" }, ship_address_attributes: { - name: 'First Last', - address1: '1 Test Rd', - city: 'City', + name: "First Last", + address1: "1 Test Rd", + city: "City", country_id: country.id, state_id: state.id, - zipcode: '55555', - phone: '5555555555' + zipcode: "55555", + phone: "5555555555" } }.to_json - expect(json_response['email']).to eq 'mine@example.com' - expect(json_response['bill_address']).to_not be_nil - expect(json_response['ship_address']).to_not be_nil + expect(json_response["email"]).to eq "mine@example.com" + expect(json_response["bill_address"]).to_not be_nil + expect(json_response["ship_address"]).to_not be_nil end it "cannot update other users details" do - put spree.api_user_path(stranger.id), params: { token: user.spree_api_key, user: { email: "mine@example.com" } } + put spree.api_user_path(stranger.id), params: {token: user.spree_api_key, user: {email: "mine@example.com"}} assert_not_found! end it "cannot delete itself" do - delete spree.api_user_path(user.id), params: { token: user.spree_api_key } + delete spree.api_user_path(user.id), params: {token: user.spree_api_key} expect(response.status).to eq(401) end it "cannot delete other user" do - delete spree.api_user_path(stranger.id), params: { token: user.spree_api_key } + delete spree.api_user_path(stranger.id), params: {token: user.spree_api_key} assert_not_found! end it "should only get own details on index" do 2.times { create(:user) } - get spree.api_users_path, params: { token: user.spree_api_key } + get spree.api_users_path, params: {token: user.spree_api_key} expect(Spree.user_class.count).to eq 3 - expect(json_response['count']).to eq 1 - expect(json_response['users'].size).to eq 1 + expect(json_response["count"]).to eq 1 + expect(json_response["users"].size).to eq 1 end end @@ -169,55 +169,55 @@ module Spree::Api get spree.api_users_path expect(Spree.user_class.count).to eq 2 - expect(json_response['count']).to eq 2 - expect(json_response['users'].size).to eq 2 + expect(json_response["count"]).to eq 2 + expect(json_response["users"].size).to eq 2 end - it 'can control the page size through a parameter' do + it "can control the page size through a parameter" do 2.times { create(:user) } - get spree.api_users_path, params: { per_page: 1 } - expect(json_response['count']).to eq(1) - expect(json_response['current_page']).to eq(1) - expect(json_response['pages']).to eq(2) + get spree.api_users_path, params: {per_page: 1} + expect(json_response["count"]).to eq(1) + expect(json_response["current_page"]).to eq(1) + expect(json_response["pages"]).to eq(2) end - it 'can query the results through a paramter' do - expected_result = create(:user, email: 'brian@solidus.io') - get spree.api_users_path, params: { q: { email_cont: 'brian' } } - expect(json_response['count']).to eq(1) - expect(json_response['users'].first['email']).to eq expected_result.email + it "can query the results through a paramter" do + expected_result = create(:user, email: "brian@solidus.io") + get spree.api_users_path, params: {q: {email_cont: "brian"}} + expect(json_response["count"]).to eq(1) + expect(json_response["users"].first["email"]).to eq expected_result.email end - it 'can view admin_metadata' do + it "can view admin_metadata" do allow(Spree::LegacyUser).to receive(:find_by).with(hash_including(:spree_api_key)) { current_api_user } 2.times { create(:user) } get spree.api_users_path expect(Spree.user_class.count).to eq 2 - expect(json_response['count']).to eq 2 - expect(json_response['users'].size).to eq 2 - expect(json_response['users'].first).to have_key('admin_metadata') + expect(json_response["count"]).to eq 2 + expect(json_response["users"].size).to eq 2 + expect(json_response["users"].first).to have_key("admin_metadata") end it "can create" do - post spree.api_users_path, params: { user: { email: "new@example.com", password: 'spree123', password_confirmation: 'spree123' } } + post spree.api_users_path, params: {user: {email: "new@example.com", password: "spree123", password_confirmation: "spree123"}} expect(json_response).to have_attributes(attributes) expect(response.status).to eq(201) end it "can update" do - post spree.api_users_path, params: { user: { email: "existing@example.com" } } + post spree.api_users_path, params: {user: {email: "existing@example.com"}} expect(json_response).to have_attributes(attributes) expect(response.status).to eq(201) end it "can update admin_metadata" do - post spree.api_users_path, params: { user: { email: "existing@example.com", admin_metadata: { 'user_type' => 'regular' } } } + post spree.api_users_path, params: {user: {email: "existing@example.com", admin_metadata: {"user_type" => "regular"}}} expect(json_response).to have_attributes(attributes) expect(response.status).to eq(201) - expect(json_response["admin_metadata"]).to eq({ 'user_type' => 'regular' }) + expect(json_response["admin_metadata"]).to eq({"user_type" => "regular"}) end it "can destroy user without orders" do @@ -242,22 +242,22 @@ module Spree::Api create(:completed_order_with_totals, user:) delete spree.api_user_path(user) expect(response.status).to eq(422) - expect(json_response).to eq({ "error" => "Cannot delete record." }) + expect(json_response).to eq({"error" => "Cannot delete record."}) end it "returns distinct search results" do - distinct_user = create(:user, email: 'distinct_test@solidus.com') + distinct_user = create(:user, email: "distinct_test@solidus.com") distinct_user.addresses << create(:address) distinct_user.addresses << create(:address) get spree.api_users_path, params: { q: { - m: 'or', - email_start: 'distinct_test', - name_start: 'distinct_test' + m: "or", + email_start: "distinct_test", + name_start: "distinct_test" } } - expect(json_response['count']).to eq(1) - expect(json_response['users'].first['email']).to eq distinct_user.email + expect(json_response["count"]).to eq(1) + expect(json_response["users"].first["email"]).to eq distinct_user.email end end end diff --git a/api/spec/requests/spree/api/variants_spec.rb b/api/spec/requests/spree/api/variants_spec.rb index b1c3e708988..c991b26e324 100644 --- a/api/spec/requests/spree/api/variants_spec.rb +++ b/api/spec/requests/spree/api/variants_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Variants', type: :request do + describe "Variants", type: :request do let!(:product) { create(:product) } let!(:variant) do variant = product.master @@ -30,35 +30,35 @@ module Spree::Api expect(json_response["pages"]).to eq(1) end - it 'can control the page size through a parameter' do + it "can control the page size through a parameter" do create(:variant) - get spree.api_variants_path, params: { per_page: 1 } - expect(json_response['count']).to eq(1) - expect(json_response['current_page']).to eq(1) - expect(json_response['pages']).to eq(3) + get spree.api_variants_path, params: {per_page: 1} + expect(json_response["count"]).to eq(1) + expect(json_response["current_page"]).to eq(1) + expect(json_response["pages"]).to eq(3) end - it 'can query the results through the search class' do - expected_result = create(:variant, sku: 'FOOBAR') - get spree.api_variants_path, params: { variant_search_term: 'FOO' } - expect(json_response['count']).to eq(1) - expect(json_response['variants'].first['sku']).to eq expected_result.sku + it "can query the results through the search class" do + expected_result = create(:variant, sku: "FOOBAR") + get spree.api_variants_path, params: {variant_search_term: "FOO"} + expect(json_response["count"]).to eq(1) + expect(json_response["variants"].first["sku"]).to eq expected_result.sku end - it 'can query the results through ransack' do - expected_result = create(:variant, sku: 'FOOBAR') - get spree.api_variants_path, params: { variant_search_term: nil, q: { sku_cont: 'FOO' } } - expect(json_response['count']).to eq(1) - expect(json_response['variants'].first['sku']).to eq expected_result.sku + it "can query the results through ransack" do + expected_result = create(:variant, sku: "FOOBAR") + get spree.api_variants_path, params: {variant_search_term: nil, q: {sku_cont: "FOO"}} + expect(json_response["count"]).to eq(1) + expect(json_response["variants"].first["sku"]).to eq expected_result.sku end it "variants returned contain option values data" do get spree.api_variants_path option_values = json_response["variants"].last["option_values"] expect(option_values.first).to have_attributes([:name, - :presentation, - :option_type_name, - :option_type_id]) + :presentation, + :option_type_name, + :option_type_id]) end it "variants returned contain images data" do @@ -67,14 +67,14 @@ module Spree::Api get spree.api_variants_path expect(json_response["variants"].last).to have_attributes([:images]) - expect(json_response['variants'].first['images'].first).to have_attributes([:attachment_file_name, - :attachment_width, - :attachment_height, - :attachment_content_type, - :mini_url, - :small_url, - :product_url, - :large_url]) + expect(json_response["variants"].first["images"].first).to have_attributes([:attachment_file_name, + :attachment_width, + :attachment_height, + :attachment_content_type, + :mini_url, + :small_url, + :product_url, + :large_url]) end # Regression test for https://github.com/spree/spree/issues/2141 @@ -89,14 +89,14 @@ module Spree::Api end it "is not returned even when show_deleted is passed" do - get spree.api_variants_path, params: { show_deleted: true } + get spree.api_variants_path, params: {show_deleted: true} expect(json_response["variants"].count).to eq(0) end end context "stock filtering" do context "only variants in stock" do - subject { get spree.api_variants_path, params: { in_stock_only: "true" } } + subject { get spree.api_variants_path, params: {in_stock_only: "true"} } context "variant is out of stock" do before do @@ -122,7 +122,7 @@ module Spree::Api end context "only suplliable variants" do - subject { get spree.api_variants_path, params: { suppliable_only: "true" } } + subject { get spree.api_variants_path, params: {suppliable_only: "true"} } context "variant is backorderable" do before do @@ -148,7 +148,7 @@ module Spree::Api end context "all variants" do - subject { get spree.api_variants_path, params: { in_stock_only: "false" } } + subject { get spree.api_variants_path, params: {in_stock_only: "false"} } context "variant is out of stock" do before do @@ -177,7 +177,7 @@ module Spree::Api context "pagination" do it "can select the next page of variants" do create(:variant) - get spree.api_variants_path, params: { page: 2, per_page: 1 } + get spree.api_variants_path, params: {page: 2, per_page: 1} expect(json_response["variants"].first).to have_attributes(show_attributes) expect(json_response["total_count"]).to eq(3) expect(json_response["current_page"]).to eq(2) @@ -191,8 +191,8 @@ module Spree::Api it "only returns stock items for active stock locations" do get spree.api_variants_path - variant = json_response['variants'].first - stock_items = variant['stock_items'].map { |si| si['stock_location_name'] } + variant = json_response["variants"].first + stock_items = variant["stock_items"].map { |si| si["stock_location_name"] } expect(stock_items).to include stock_location.name expect(stock_items).not_to include inactive_stock_location.name @@ -211,9 +211,9 @@ module Spree::Api expect(json_response["stock_items"]).to be_present option_values = json_response["option_values"] expect(option_values.first).to have_attributes([:name, - :presentation, - :option_type_name, - :option_type_id]) + :presentation, + :option_type_name, + :option_type_id]) end it "can see a single variant with images" do @@ -224,9 +224,9 @@ module Spree::Api expect(json_response).to have_attributes(show_attributes + [:images]) option_values = json_response["option_values"] expect(option_values.first).to have_attributes([:name, - :presentation, - :option_type_name, - :option_type_id]) + :presentation, + :option_type_name, + :option_type_id]) end context "variant doesn't have variant properties" do @@ -264,7 +264,7 @@ module Spree::Api it "still displays valid json with total_on_hand Float::INFINITY" do expect(response.status).to eq(200) - expect(json_response['total_on_hand']).to eq nil + expect(json_response["total_on_hand"]).to eq nil end end end @@ -276,12 +276,12 @@ module Spree::Api end it "cannot create a new variant if not an admin" do - post spree.api_product_variants_path(product), params: { variant: { sku: "12345" } } + post spree.api_product_variants_path(product), params: {variant: {sku: "12345"}} assert_unauthorized! end it "cannot update a variant" do - put spree.api_variant_path(variant), params: { variant: { sku: "12345" } } + put spree.api_variant_path(variant), params: {variant: {sku: "12345"}} assert_not_found! end @@ -301,13 +301,13 @@ module Spree::Api end it "are visible by admin" do - get spree.api_variants_path, params: { show_deleted: 1 } + get spree.api_variants_path, params: {show_deleted: 1} expect(json_response["variants"].count).to eq(1) end end it "can create a new variant" do - post spree.api_product_variants_path(product), params: { variant: { sku: "12345" } } + post spree.api_product_variants_path(product), params: {variant: {sku: "12345"}} expect(json_response).to have_attributes(new_attributes) expect(response.status).to eq(201) expect(json_response["sku"]).to eq("12345") @@ -333,8 +333,8 @@ module Spree::Api variant: { sku: "12345", options: [{ - name: 'Color', - value: 'White' + name: "Color", + value: "White" }] } } @@ -344,13 +344,13 @@ module Spree::Api it "creates a new variant with tax category" do tax_category = create(:tax_category) - post spree.api_product_variants_path(product), params: { variant: { sku: "12345", tax_category_id: tax_category.id } } + post spree.api_product_variants_path(product), params: {variant: {sku: "12345", tax_category_id: tax_category.id}} expect(Spree::Variant.find_by_sku("12345").tax_category).to eq(tax_category) end it "can update a variant" do - put spree.api_variant_path(variant), params: { variant: { sku: "12345" } } + put spree.api_variant_path(variant), params: {variant: {sku: "12345"}} expect(response.status).to eq(200) end @@ -360,7 +360,7 @@ module Spree::Api expect { Spree::Variant.find(variant.id) }.to raise_error(ActiveRecord::RecordNotFound) end - it 'variants returned contain cost price data' do + it "variants returned contain cost price data" do get spree.api_variants_path expect(json_response["variants"].first.key?(:cost_price)).to eq true end diff --git a/api/spec/requests/spree/api/zones_spec.rb b/api/spec/requests/spree/api/zones_spec.rb index 4a121504def..187263c35ba 100644 --- a/api/spec/requests/spree/api/zones_spec.rb +++ b/api/spec/requests/spree/api/zones_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree::Api - describe 'Zones', type: :request do + describe "Zones", type: :request do let!(:attributes) { [:id, :name, :zone_members] } - let!(:zone) { create(:zone, name: 'Europe') } + let!(:zone) { create(:zone, name: "Europe") } before do stub_authentication! @@ -13,29 +13,29 @@ module Spree::Api it "gets list of zones" do get spree.api_zones_path - expect(json_response['zones'].first).to have_attributes(attributes) + expect(json_response["zones"].first).to have_attributes(attributes) end - it 'can control the page size through a parameter' do + it "can control the page size through a parameter" do create(:zone) - get spree.api_zones_path, params: { per_page: 1 } - expect(json_response['count']).to eq(1) - expect(json_response['current_page']).to eq(1) - expect(json_response['pages']).to eq(2) + get spree.api_zones_path, params: {per_page: 1} + expect(json_response["count"]).to eq(1) + expect(json_response["current_page"]).to eq(1) + expect(json_response["pages"]).to eq(2) end - it 'can query the results through a paramter' do - expected_result = create(:zone, name: 'South America') - get spree.api_zones_path, params: { q: { name_cont: 'south' } } - expect(json_response['count']).to eq(1) - expect(json_response['zones'].first['name']).to eq expected_result.name + it "can query the results through a paramter" do + expected_result = create(:zone, name: "South America") + get spree.api_zones_path, params: {q: {name_cont: "south"}} + expect(json_response["count"]).to eq(1) + expect(json_response["zones"].first["name"]).to eq expected_result.name end it "gets a zone" do get spree.api_zone_path(zone) expect(json_response).to have_attributes(attributes) - expect(json_response['name']).to eq zone.name - expect(json_response['zone_members'].size).to eq zone.zone_members.count + expect(json_response["name"]).to eq zone.name + expect(json_response["zone_members"].size).to eq zone.zone_members.count end context "as an admin" do @@ -75,8 +75,8 @@ module Spree::Api put(spree.api_zone_path(zone), params:) expect(response.status).to eq(200) - expect(json_response['name']).to eq 'North Pole' - expect(json_response['zone_members']).not_to be_blank + expect(json_response["name"]).to eq "North Pole" + expect(json_response["zone_members"]).not_to be_blank end it "can delete a zone" do diff --git a/api/spec/shared_examples/protect_product_actions.rb b/api/spec/shared_examples/protect_product_actions.rb index 0a6559521a9..ac3ef6e7b42 100644 --- a/api/spec/shared_examples/protect_product_actions.rb +++ b/api/spec/shared_examples/protect_product_actions.rb @@ -2,12 +2,12 @@ shared_examples "modifying product actions are restricted" do it "cannot create a new product if not an admin" do - post spree.api_products_path, params: { product: { name: "Brand new product!" } } + post spree.api_products_path, params: {product: {name: "Brand new product!"}} assert_unauthorized! end it "cannot update a product" do - put spree.api_product_path(product), params: { product: { name: "I hacked your store!" } } + put spree.api_product_path(product), params: {product: {name: "I hacked your store!"}} assert_unauthorized! end diff --git a/api/spec/spec_helper.rb b/api/spec/spec_helper.rb index b78e88c0b6f..0b20288d960 100644 --- a/api/spec/spec_helper.rb +++ b/api/spec/spec_helper.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true if ENV["COVERAGE"] - require 'simplecov' + require "simplecov" if ENV["COVERAGE_DIR"] SimpleCov.coverage_dir(ENV["COVERAGE_DIR"]) end @@ -9,39 +9,39 @@ require "simplecov-cobertura" SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter end - SimpleCov.command_name('solidus:api') + SimpleCov.command_name("solidus:api") SimpleCov.merge_timeout(3600) - SimpleCov.start('rails') + SimpleCov.start("rails") end # This file is copied to spec/ when you run 'rails generate rspec:install' -ENV["RAILS_ENV"] ||= 'test' +ENV["RAILS_ENV"] ||= "test" -require 'solidus_api' -require 'spree/testing_support/dummy_app' +require "solidus_api" +require "spree/testing_support/dummy_app" DummyApp.setup( - gem_root: File.expand_path('..', __dir__), - lib_name: 'solidus_api' + gem_root: File.expand_path("..", __dir__), + lib_name: "solidus_api" ) -require 'rails-controller-testing' -require 'rspec/rails' -require 'rspec-activemodel-mocks' +require "rails-controller-testing" +require "rspec/rails" +require "rspec-activemodel-mocks" -require 'database_cleaner' +require "database_cleaner" # Requires supporting ruby files with custom matchers and macros, etc, # in spec/support/ and its subdirectories. Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each { |f| require f } -require 'spree/testing_support/factory_bot' -require 'spree/testing_support/partial_double_verification' -require 'spree/testing_support/preferences' -require 'spree/testing_support/authorization_helpers' +require "spree/testing_support/factory_bot" +require "spree/testing_support/partial_double_verification" +require "spree/testing_support/preferences" +require "spree/testing_support/authorization_helpers" -require 'spree/api/testing_support/caching' -require 'spree/api/testing_support/helpers' -require 'spree/api/testing_support/setup' +require "spree/api/testing_support/caching" +require "spree/api/testing_support/helpers" +require "spree/api/testing_support/setup" ActiveJob::Base.queue_adapter = :test diff --git a/api/spec/support/controller_hacks.rb b/api/spec/support/controller_hacks.rb index c1765cce24d..259109d2846 100644 --- a/api/spec/support/controller_hacks.rb +++ b/api/spec/support/controller_hacks.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'active_support/all' +require "active_support/all" module ControllerHacks extend ActiveSupport::Concern diff --git a/api/spec/support/have_attributes_matcher.rb b/api/spec/support/have_attributes_matcher.rb index 52916adf911..f3c4d81c08f 100644 --- a/api/spec/support/have_attributes_matcher.rb +++ b/api/spec/support/have_attributes_matcher.rb @@ -1,4 +1,3 @@ - # frozen_string_literal: true RSpec::Matchers.define :have_attributes do |expected_attributes| diff --git a/backend/Rakefile b/backend/Rakefile index 54eddff77b2..c129ea8a56b 100644 --- a/backend/Rakefile +++ b/backend/Rakefile @@ -1,32 +1,32 @@ # frozen_string_literal: true -require 'rubygems' -require 'rake' -require 'rake/testtask' -require 'rspec/core/rake_task' -require 'bundler/gem_tasks' +require "rubygems" +require "rake" +require "rake/testtask" +require "rspec/core/rake_task" +require "bundler/gem_tasks" -require 'solidus_backend' -require 'spree/testing_support/dummy_app/rake_tasks' +require "solidus_backend" +require "spree/testing_support/dummy_app/rake_tasks" RSpec::Core::RakeTask.new -task default: [:spec, 'spec:js'] +task default: [:spec, "spec:js"] DummyApp::RakeTasks.new( gem_root: File.expand_path(__dir__), - lib_name: 'solidus_backend' + lib_name: "solidus_backend" ) task :teaspoon do - require 'teaspoon' - Rake::Task['dummy_environment'].invoke + require "teaspoon" + Rake::Task["dummy_environment"].invoke require "teaspoon/console" options = { files: ENV["files"].nil? ? [] : ENV["files"].split(","), suite: ENV["suite"], coverage: ENV["coverage"], - driver_options: ENV["driver_options"], + driver_options: ENV["driver_options"] } options.delete_if { |_k, v| v.nil? } @@ -35,13 +35,13 @@ task :teaspoon do end desc "Run javascript specs" -task 'spec:js' => :teaspoon +task "spec:js" => :teaspoon namespace :teaspoon do task :server do - require 'teaspoon' - Rake::Task['dummy_environment'].invoke - require 'teaspoon/server' + require "teaspoon" + Rake::Task["dummy_environment"].invoke + require "teaspoon/server" server = Teaspoon::Server.new server.start @@ -50,4 +50,4 @@ namespace :teaspoon do end end -task test_app: 'db:reset' +task test_app: "db:reset" diff --git a/backend/app/controllers/spree/admin/adjustments_controller.rb b/backend/app/controllers/spree/admin/adjustments_controller.rb index bbd6b363764..66e2d06fbce 100644 --- a/backend/app/controllers/spree/admin/adjustments_controller.rb +++ b/backend/app/controllers/spree/admin/adjustments_controller.rb @@ -3,7 +3,7 @@ module Spree module Admin class AdjustmentsController < ResourceController - belongs_to 'spree/order', find_by: :number + belongs_to "spree/order", find_by: :number create.after :update_totals destroy.after :update_totals diff --git a/backend/app/controllers/spree/admin/base_controller.rb b/backend/app/controllers/spree/admin/base_controller.rb index 45067ae6081..8d634c49228 100644 --- a/backend/app/controllers/spree/admin/base_controller.rb +++ b/backend/app/controllers/spree/admin/base_controller.rb @@ -3,8 +3,8 @@ module Spree module Admin class BaseController < Spree::BaseController - helper 'spree/admin/navigation' - layout 'spree/layouts/admin' + helper "spree/admin/navigation" + layout "spree/layouts/admin" before_action :authorize_admin @@ -21,10 +21,10 @@ def action end def authorize_admin - if respond_to?(:model_class, true) && model_class - record = model_class + record = if respond_to?(:model_class, true) && model_class + model_class else - record = controller_name.to_sym + controller_name.to_sym end authorize! :admin, record authorize! action, record @@ -39,13 +39,13 @@ def generate_admin_api_key end def flash_message_for(object, event_sym) - resource_desc = object.class.model_name.human + resource_desc = object.class.model_name.human resource_desc += " \"#{object.name}\"" if object.respond_to?(:name) && object.name.present? - t(event_sym, resource: resource_desc, scope: 'spree') + t(event_sym, resource: resource_desc, scope: "spree") end def render_js_for_destroy - render partial: '/spree/admin/shared/destroy' + render partial: "/spree/admin/shared/destroy" end def config_locale @@ -55,7 +55,7 @@ def config_locale def lock_order Spree::OrderMutex.with_lock!(@order) { yield } rescue Spree::OrderMutex::LockFailed - flash[:error] = t('spree.order_mutex_admin_error') + flash[:error] = t("spree.order_mutex_admin_error") redirect_to order_mutex_redirect_path end diff --git a/backend/app/controllers/spree/admin/cancellations_controller.rb b/backend/app/controllers/spree/admin/cancellations_controller.rb index 8d075c3888f..f0480f40ce3 100644 --- a/backend/app/controllers/spree/admin/cancellations_controller.rb +++ b/backend/app/controllers/spree/admin/cancellations_controller.rb @@ -14,15 +14,15 @@ def short_ship inventory_units = Spree::InventoryUnit.where(id: inventory_unit_ids) if inventory_units.size != inventory_unit_ids.size - flash[:error] = t('spree.unable_to_find_all_inventory_units') + flash[:error] = t("spree.unable_to_find_all_inventory_units") redirect_to admin_order_cancellations_path(@order) elsif inventory_units.empty? - flash[:error] = t('spree.no_inventory_selected') + flash[:error] = t("spree.no_inventory_selected") redirect_to admin_order_cancellations_path(@order) else @order.cancellations.short_ship(inventory_units, created_by:) - flash[:success] = t('spree.inventory_canceled') + flash[:success] = t("spree.inventory_canceled") redirect_to edit_admin_order_url(@order) end end diff --git a/backend/app/controllers/spree/admin/customer_returns_controller.rb b/backend/app/controllers/spree/admin/customer_returns_controller.rb index 29f15bf992f..eb0d07c7f5f 100644 --- a/backend/app/controllers/spree/admin/customer_returns_controller.rb +++ b/backend/app/controllers/spree/admin/customer_returns_controller.rb @@ -3,13 +3,13 @@ module Spree module Admin class CustomerReturnsController < ResourceController - helper 'spree/admin/reimbursement_type' - belongs_to 'spree/order', find_by: :number + helper "spree/admin/reimbursement_type" + belongs_to "spree/order", find_by: :number before_action :parent # ensure order gets loaded to support our pseudo parent-child relationship before_action :load_form_data, only: [:new, :edit] before_action :build_return_items_from_params, only: [:create] - create.fails :load_form_data + create.fails :load_form_data create.after :order_process_return def edit @@ -62,19 +62,21 @@ def load_return_reasons end def permitted_resource_params - @permitted_resource_params ||= params.require('customer_return').permit(permitted_customer_return_attributes) + @permitted_resource_params ||= params.require("customer_return").permit(permitted_customer_return_attributes) end def build_return_items_from_params return_items_params = permitted_resource_params.delete(:return_items_attributes).values @customer_return.return_items = return_items_params.map do |item_params| - next unless item_params.delete('returned') == '1' + next unless item_params.delete("returned") == "1" + return_item = item_params[:id] ? Spree::ReturnItem.find(item_params[:id]) : Spree::ReturnItem.new return_item.assign_attributes(item_params) if item_params[:reception_status_event].blank? - return redirect_to(new_object_url, flash: { error: 'Reception status choice required' }) + return redirect_to(new_object_url, flash: {error: "Reception status choice required"}) end + return_item end.compact end diff --git a/backend/app/controllers/spree/admin/images_controller.rb b/backend/app/controllers/spree/admin/images_controller.rb index f281da56ac2..9fad6baf329 100644 --- a/backend/app/controllers/spree/admin/images_controller.rb +++ b/backend/app/controllers/spree/admin/images_controller.rb @@ -22,13 +22,13 @@ def load_data @variants = @product.variants.collect do |variant| [variant.sku_and_options_text, variant.id] end - @variants.insert(0, [t('spree.all'), @product.master.id]) + @variants.insert(0, [t("spree.all"), @product.master.id]) rescue ActiveRecord::RecordNotFound resource_not_found(flash_class: Spree::Product, redirect_url: admin_products_path) end def set_viewable - @image.viewable_type = 'Spree::Variant' + @image.viewable_type = "Spree::Variant" @image.viewable_id = params[:image][:viewable_id] end end diff --git a/backend/app/controllers/spree/admin/locale_controller.rb b/backend/app/controllers/spree/admin/locale_controller.rb index 69fe5a3e7f7..5376b906ff2 100644 --- a/backend/app/controllers/spree/admin/locale_controller.rb +++ b/backend/app/controllers/spree/admin/locale_controller.rb @@ -12,13 +12,13 @@ def set I18n.locale = requested_locale session[set_user_language_locale_key] = requested_locale respond_to do |format| - format.json { render json: { locale: requested_locale, location: spree.admin_url } } - format.html { redirect_back_or_to spree.admin_url, notice: t('spree.locale_changed') } + format.json { render json: {locale: requested_locale, location: spree.admin_url} } + format.html { redirect_back_or_to spree.admin_url, notice: t("spree.locale_changed") } end else respond_to do |format| - format.json { render json: { locale: I18n.locale }, status: 404 } - format.html { redirect_back_or_to spree.admin_url, error: t('spree.error') } + format.json { render json: {locale: I18n.locale}, status: 404 } + format.html { redirect_back_or_to spree.admin_url, error: t("spree.error") } end end end diff --git a/backend/app/controllers/spree/admin/option_types_controller.rb b/backend/app/controllers/spree/admin/option_types_controller.rb index 23c52941fec..123e543805d 100644 --- a/backend/app/controllers/spree/admin/option_types_controller.rb +++ b/backend/app/controllers/spree/admin/option_types_controller.rb @@ -31,7 +31,7 @@ def setup_new_option_value def set_available_option_types @available_option_types = if @product.option_type_ids.any? - Spree::OptionType.where('id NOT IN (?)', @product.option_type_ids) + Spree::OptionType.where("id NOT IN (?)", @product.option_type_ids) else Spree::OptionType.all end diff --git a/backend/app/controllers/spree/admin/orders/customer_details_controller.rb b/backend/app/controllers/spree/admin/orders/customer_details_controller.rb index 5306a6dfe94..9aa48007d70 100644 --- a/backend/app/controllers/spree/admin/orders/customer_details_controller.rb +++ b/backend/app/controllers/spree/admin/orders/customer_details_controller.rb @@ -35,7 +35,7 @@ def update @order.refresh_shipment_rates end - flash[:success] = t('spree.customer_details_updated') + flash[:success] = t("spree.customer_details_updated") redirect_to edit_admin_order_url(@order) else render action: :edit @@ -74,7 +74,7 @@ def should_associate_user? end def insufficient_stock_error - flash[:error] = t('spree.insufficient_stock_for_order') + flash[:error] = t("spree.insufficient_stock_for_order") redirect_to edit_admin_order_customer_url(@order) end end diff --git a/backend/app/controllers/spree/admin/orders_controller.rb b/backend/app/controllers/spree/admin/orders_controller.rb index 3d989459af5..b84d5623405 100644 --- a/backend/app/controllers/spree/admin/orders_controller.rb +++ b/backend/app/controllers/spree/admin/orders_controller.rb @@ -16,10 +16,10 @@ def show def index params[:q] ||= {} - params[:q][:completed_at_not_null] ||= '1' if Spree::Config[:show_only_complete_orders_by_default] - @show_only_completed = params[:q][:completed_at_not_null] == '1' - params[:q][:s] ||= @show_only_completed ? 'completed_at desc' : 'created_at desc' - params[:q][:completed_at_not_null] = '' unless @show_only_completed + params[:q][:completed_at_not_null] ||= "1" if Spree::Config[:show_only_complete_orders_by_default] + @show_only_completed = params[:q][:completed_at_not_null] == "1" + params[:q][:s] ||= @show_only_completed ? "completed_at desc" : "created_at desc" + params[:q][:completed_at_not_null] = "" unless @show_only_completed # As date params are deleted if @show_only_completed, store # the original date so we can restore them into the params @@ -31,18 +31,18 @@ def index if params[:q][:created_at_gt].present? params[:q][:created_at_gt] = begin - Time.zone.parse(params[:q][:created_at_gt]).beginning_of_day - rescue StandardError - "" - end + Time.zone.parse(params[:q][:created_at_gt]).beginning_of_day + rescue + "" + end end if params[:q][:created_at_lt].present? params[:q][:created_at_lt] = begin - Time.zone.parse(params[:q][:created_at_lt]).end_of_day - rescue StandardError - "" - end + Time.zone.parse(params[:q][:created_at_lt]).end_of_day + rescue + "" + end end if @show_only_completed @@ -51,9 +51,9 @@ def index end @search = Spree::Order.accessible_by(current_ability, :index).ransack(params[:q]) - @orders = @search.result.includes([:user]). - page(params[:page]). - per(params[:per_page] || Spree::Config[:orders_per_page]) + @orders = @search.result.includes([:user]) + .page(params[:page]) + .per(params[:per_page] || Spree::Config[:orders_per_page]) # Restore dates params[:q][:created_at_gt] = created_at_gt @@ -82,15 +82,15 @@ def cart def advance if @order.completed? - flash[:notice] = t('spree.order_already_completed') + flash[:notice] = t("spree.order_already_completed") redirect_to edit_admin_order_url(@order) else @order.contents.advance if @order.can_complete? - flash[:success] = t('spree.order_ready_for_confirm') + flash[:success] = t("spree.order_ready_for_confirm") else - flash[:error] = @order.errors.full_messages.join(', ') + flash[:error] = @order.errors.full_messages.join(", ") end redirect_to confirm_admin_order_url(@order) end @@ -101,14 +101,14 @@ def confirm if @order.completed? redirect_to edit_admin_order_url(@order) elsif !@order.can_complete? - render template: 'spree/admin/orders/confirm_advance' + render template: "spree/admin/orders/confirm_advance" end end # PUT def complete @order.complete! - flash[:success] = t('spree.order_completed') + flash[:success] = t("spree.order_completed") redirect_to edit_admin_order_url(@order) rescue StateMachines::InvalidTransition => error flash[:error] = error.message @@ -117,25 +117,25 @@ def complete def cancel @order.canceled_by(spree_current_user) - flash[:success] = t('spree.order_canceled') + flash[:success] = t("spree.order_canceled") redirect_to(spree.edit_admin_order_path(@order)) end def resume @order.resume! - flash[:success] = t('spree.order_resumed') + flash[:success] = t("spree.order_resumed") redirect_to(spree.edit_admin_order_path(@order)) end def approve @order.contents.approve(user: spree_current_user) - flash[:success] = t('spree.order_approved') + flash[:success] = t("spree.order_approved") redirect_to(spree.edit_admin_order_path(@order)) end def resend Spree::Config.order_mailer_class.confirm_email(@order, true).deliver_later - flash[:success] = t('spree.order_email_resent') + flash[:success] = t("spree.order_email_resent") redirect_to(spree.edit_admin_order_path(@order)) end @@ -143,7 +143,7 @@ def resend def unfinalize_adjustments adjustments = @order.all_adjustments.finalized adjustments.each(&:unfinalize!) - flash[:success] = t('spree.all_adjustments_unfinalized') + flash[:success] = t("spree.all_adjustments_unfinalized") respond_with(@order) { |format| format.html { redirect_to(spree.admin_order_adjustments_path(@order)) } } end @@ -151,7 +151,7 @@ def unfinalize_adjustments def finalize_adjustments adjustments = @order.all_adjustments.not_finalized adjustments.each(&:finalize!) - flash[:success] = t('spree.all_adjustments_finalized') + flash[:success] = t("spree.all_adjustments_finalized") respond_with(@order) { |format| format.html { redirect_to(spree.admin_order_adjustments_path(@order)) } } end @@ -175,7 +175,7 @@ def load_order # Used for extensions which need to provide their own custom event links on the order details view. def initialize_order_events - @order_events = %w{approve cancel resume} + @order_events = %w[approve cancel resume] end def model_class @@ -183,13 +183,13 @@ def model_class end def insufficient_stock_error - flash[:error] = t('spree.insufficient_stock_for_order') + flash[:error] = t("spree.insufficient_stock_for_order") redirect_to cart_admin_order_url(@order) end def require_ship_address if @order.ship_address.nil? - flash[:notice] = t('spree.fill_in_customer_info') + flash[:notice] = t("spree.fill_in_customer_info") redirect_to edit_admin_order_customer_url(@order) end end diff --git a/backend/app/controllers/spree/admin/payment_methods_controller.rb b/backend/app/controllers/spree/admin/payment_methods_controller.rb index 2dbfb621803..c9d44274888 100644 --- a/backend/app/controllers/spree/admin/payment_methods_controller.rb +++ b/backend/app/controllers/spree/admin/payment_methods_controller.rb @@ -15,7 +15,7 @@ def create invoke_callbacks(:create, :before) if @payment_method.save invoke_callbacks(:create, :after) - flash[:success] = t('spree.successfully_created', resource: t('spree.payment_method')) + flash[:success] = t("spree.successfully_created", resource: t("spree.payment_method")) redirect_to edit_admin_payment_method_path(@payment_method) else invoke_callbacks(:create, :fails) @@ -36,7 +36,7 @@ def update if @payment_method.update(attributes) invoke_callbacks(:update, :after) - flash[:success] = t('spree.successfully_updated', resource: t('spree.payment_method')) + flash[:success] = t("spree.successfully_updated", resource: t("spree.payment_method")) redirect_to edit_admin_payment_method_path(@payment_method) else invoke_callbacks(:update, :fails) @@ -61,7 +61,7 @@ def validate_payment_method_type end if !@payment_method_type - flash[:error] = t('spree.invalid_payment_method_type') + flash[:error] = t("spree.invalid_payment_method_type") redirect_to new_admin_payment_method_path end end diff --git a/backend/app/controllers/spree/admin/payments_controller.rb b/backend/app/controllers/spree/admin/payments_controller.rb index d8d83e0bf2c..76fa151b221 100644 --- a/backend/app/controllers/spree/admin/payments_controller.rb +++ b/backend/app/controllers/spree/admin/payments_controller.rb @@ -27,7 +27,7 @@ def new def create @payment = PaymentCreate.new(@order, object_params).build - if @payment.payment_method.source_required? && params[:card].present? && params[:card] != 'new' + if @payment.payment_method.source_required? && params[:card].present? && params[:card] != "new" @payment.source = @payment.payment_method.payment_source_class.find_by(id: params[:card]) end @@ -45,7 +45,7 @@ def create flash[:success] = flash_message_for(@payment, :successfully_created) redirect_to admin_order_payments_path(@order) else - flash[:error] = t('spree.payment_could_not_be_created') + flash[:error] = t("spree.payment_could_not_be_created") render :new end rescue Spree::Core::GatewayError => error @@ -59,10 +59,10 @@ def fire # Because we have a transition method also called void, we do this to avoid conflicts. event = "void_transaction" if event == "void" - if @payment.send("#{event}!") - flash[:success] = t('spree.payment_updated') + if @payment.send(:"#{event}!") + flash[:success] = t("spree.payment_updated") else - flash[:error] = t('spree.cannot_perform_operation') + flash[:error] = t("spree.cannot_perform_operation") end rescue Spree::Core::GatewayError => ge flash[:error] = ge.message.to_s @@ -83,10 +83,10 @@ def object_params def load_data @amount = params[:amount] || load_order.total @payment_methods = Spree::PaymentMethod.active.available_to_admin.ordered_by_position - if @payment && @payment.payment_method - @payment_method = @payment.payment_method + @payment_method = if @payment&.payment_method + @payment.payment_method else - @payment_method = @payment_methods.first + @payment_methods.first end end @@ -113,13 +113,13 @@ def model_class def require_bill_address if Spree::Config[:order_bill_address_used] && @order.bill_address.nil? - flash[:notice] = t('spree.fill_in_customer_info') + flash[:notice] = t("spree.fill_in_customer_info") redirect_to edit_admin_order_customer_url(@order) end end def insufficient_stock_error - flash[:error] = t('spree.insufficient_stock_for_order') + flash[:error] = t("spree.insufficient_stock_for_order") redirect_to new_admin_order_payment_url(@order) end end diff --git a/backend/app/controllers/spree/admin/prices_controller.rb b/backend/app/controllers/spree/admin/prices_controller.rb index 8bcd204973d..446ce444ab1 100644 --- a/backend/app/controllers/spree/admin/prices_controller.rb +++ b/backend/app/controllers/spree/admin/prices_controller.rb @@ -3,7 +3,7 @@ module Spree module Admin class PricesController < ResourceController - belongs_to 'spree/product', find_by: :slug + belongs_to "spree/product", find_by: :slug def index params[:q] ||= {} diff --git a/backend/app/controllers/spree/admin/product_properties_controller.rb b/backend/app/controllers/spree/admin/product_properties_controller.rb index 248ae76d8a7..0605fd69e82 100644 --- a/backend/app/controllers/spree/admin/product_properties_controller.rb +++ b/backend/app/controllers/spree/admin/product_properties_controller.rb @@ -3,7 +3,7 @@ module Spree module Admin class ProductPropertiesController < ResourceController - belongs_to 'spree/product', find_by: :slug, includes: { product_properties: :property } + belongs_to "spree/product", find_by: :slug, includes: {product_properties: :property} before_action :find_properties before_action :setup_property, only: :index, if: -> { can?(:create, model_class) } before_action :setup_variant_property_rules, only: :index diff --git a/backend/app/controllers/spree/admin/products_controller.rb b/backend/app/controllers/spree/admin/products_controller.rb index b25eb2c30ec..492287f0b47 100644 --- a/backend/app/controllers/spree/admin/products_controller.rb +++ b/backend/app/controllers/spree/admin/products_controller.rb @@ -3,7 +3,7 @@ module Spree module Admin class ProductsController < ResourceController - helper 'spree/products' + helper "spree/products" before_action :load_data, except: [:index] update.before :update_before @@ -25,7 +25,7 @@ def destroy @product = Spree::Product.friendly.find(params[:id]) @product.discard - flash[:success] = t('spree.notice_messages.product_deleted') + flash[:success] = t("spree.notice_messages.product_deleted") respond_with(@product) do |format| format.html { redirect_to collection_url } @@ -37,9 +37,9 @@ def clone @new = @product.duplicate if @new.save - flash[:success] = t('spree.notice_messages.product_cloned') + flash[:success] = t("spree.notice_messages.product_cloned") else - flash[:error] = t('spree.notice_messages.product_not_cloned') + flash[:error] = t("spree.notice_messages.product_not_cloned") end redirect_to edit_admin_product_url(@new) @@ -53,10 +53,10 @@ def set_default_tax_category def split_params if params[:product][:taxon_ids].present? - params[:product][:taxon_ids] = params[:product][:taxon_ids].split(',') + params[:product][:taxon_ids] = params[:product][:taxon_ids].split(",") end if params[:product][:option_type_ids].present? - params[:product][:option_type_ids] = params[:product][:option_type_ids].split(',') + params[:product][:option_type_ids] = params[:product][:option_type_ids].split(",") end end @@ -85,26 +85,28 @@ def load_data def collection return @collection if @collection + params[:q] ||= {} params[:q][:s] ||= "name asc" # @search needs to be defined as this is passed to search_form_for @search = super.ransack(params[:q]) - @collection = @search.result. - order(id: :asc). - includes(product_includes). - page(params[:page]). - per(Spree::Config[:admin_products_per_page]) + @collection = @search.result + .order(id: :asc) + .includes(product_includes) + .page(params[:page]) + .per(Spree::Config[:admin_products_per_page]) end def update_before # note: we only reset the product properties if we're receiving a post # from the form on that tab return unless params[:clear_product_properties] + params[:product] ||= {} end def product_includes - [:variant_images, { variants: [:images], master: [:images, :prices] }] + [:variant_images, {variants: [:images], master: [:images, :prices]}] end def clone_object_url(resource) @@ -127,14 +129,14 @@ def render_after_update_error # Stops people submitting blank slugs, causing errors when they try to # update the product again @product.slug = @product.slug_was if @product.slug.blank? - render action: 'edit' + render action: "edit" end def normalize_variant_property_rules return unless updating_variant_property_rules? params[:product][:variant_property_rules_attributes].each_value do |param_attrs| - param_attrs[:option_value_ids] = param_attrs[:option_value_ids].split(',') + param_attrs[:option_value_ids] = param_attrs[:option_value_ids].split(",") end end end diff --git a/backend/app/controllers/spree/admin/properties_controller.rb b/backend/app/controllers/spree/admin/properties_controller.rb index aab13303dc7..078430c5d2d 100644 --- a/backend/app/controllers/spree/admin/properties_controller.rb +++ b/backend/app/controllers/spree/admin/properties_controller.rb @@ -11,14 +11,15 @@ def index def collection return @collection if @collection + # params[:q] can be blank upon pagination params[:q] = {} if params[:q].blank? @collection = super @search = @collection.ransack(params[:q]) - @collection = @search.result. - page(params[:page]). - per(Spree::Config[:properties_per_page]) + @collection = @search.result + .page(params[:page]) + .per(Spree::Config[:properties_per_page]) @collection end diff --git a/backend/app/controllers/spree/admin/refunds_controller.rb b/backend/app/controllers/spree/admin/refunds_controller.rb index 10b6de39c40..04d42a484fd 100644 --- a/backend/app/controllers/spree/admin/refunds_controller.rb +++ b/backend/app/controllers/spree/admin/refunds_controller.rb @@ -3,7 +3,7 @@ module Spree module Admin class RefundsController < ResourceController - belongs_to 'spree/payment' + belongs_to "spree/payment" before_action :load_order helper_method :refund_reasons @@ -21,7 +21,7 @@ def create else flash.now[:error] = @refund.errors.full_messages.join(", ") respond_with(@refund) do |format| - format.html { render action: 'new' } + format.html { render action: "new" } end end end diff --git a/backend/app/controllers/spree/admin/reimbursements_controller.rb b/backend/app/controllers/spree/admin/reimbursements_controller.rb index 9059f400daf..e3aeb391c40 100644 --- a/backend/app/controllers/spree/admin/reimbursements_controller.rb +++ b/backend/app/controllers/spree/admin/reimbursements_controller.rb @@ -3,9 +3,9 @@ module Spree module Admin class ReimbursementsController < ResourceController - helper 'spree/admin/reimbursement_type' - helper 'spree/admin/customer_returns' - belongs_to 'spree/order', find_by: :number + helper "spree/admin/reimbursement_type" + helper "spree/admin/customer_returns" + belongs_to "spree/order", find_by: :number before_action :load_stock_locations, only: :edit before_action :load_simulated_refunds, only: :edit @@ -50,11 +50,7 @@ def location_after_save # Perhaps we should add a reimbursement new page of some sort. def render_after_create_error flash.keep - if request.referer - redirect_to request.referer - else - redirect_to admin_url - end + redirect_to request.referer || admin_url end def load_stock_locations diff --git a/backend/app/controllers/spree/admin/resource_controller.rb b/backend/app/controllers/spree/admin/resource_controller.rb index 5b0a350d839..ff60d7bf181 100644 --- a/backend/app/controllers/spree/admin/resource_controller.rb +++ b/backend/app/controllers/spree/admin/resource_controller.rb @@ -17,7 +17,7 @@ def new respond_with(@object) do |format| format.html { render layout: !request.xhr? } if request.xhr? - format.js { render layout: false } + format.js { render layout: false } end end end @@ -26,7 +26,7 @@ def edit respond_with(@object) do |format| format.html { render layout: !request.xhr? } if request.xhr? - format.js { render layout: false } + format.js { render layout: false } end end end @@ -62,7 +62,7 @@ def create flash[:success] = flash_message_for(@object, :successfully_created) respond_with(@object) do |format| format.html { redirect_to location_after_save } - format.js { render layout: false } + format.js { render layout: false } end else invoke_callbacks(:create, :fails) @@ -112,7 +112,7 @@ def destroy flash[:success] = flash_message_for(@object, :successfully_removed) respond_with(@object) do |format| format.html { redirect_to location_after_destroy } - format.js { render partial: "spree/admin/shared/destroy" } + format.js { render partial: "spree/admin/shared/destroy" } end else invoke_callbacks(:destroy, :fails) @@ -152,7 +152,7 @@ def model_class end def parent_model_name - self.class.parent_data[:model_name].gsub('spree/', '') + self.class.parent_data[:model_name].gsub("spree/", "") end def object_name @@ -168,14 +168,14 @@ def load_resource # access to individual records, not just entire models. authorize! action, @object - instance_variable_set("@#{object_name}", @object) + instance_variable_set(:"@#{object_name}", @object) else @collection ||= collection # note: we don't call authorize here as the collection method should use # CanCan's accessible_by method to restrict the actual records returned - instance_variable_set("@#{controller_name}", @collection) + instance_variable_set(:"@#{controller_name}", @collection) end end @@ -189,9 +189,9 @@ def load_resource_instance def parent @parent ||= self.class.parent_data[:model_class] - .includes(self.class.parent_data[:includes]) - .find_by!(self.class.parent_data[:find_by] => params["#{parent_model_name}_id"]) - instance_variable_set("@#{parent_model_name}", @parent) + .includes(self.class.parent_data[:includes]) + .find_by!(self.class.parent_data[:find_by] => params["#{parent_model_name}_id"]) + instance_variable_set(:"@#{parent_model_name}", @parent) rescue ActiveRecord::RecordNotFound => e resource_not_found(flash_class: e.model.constantize, redirect_url: routes_proxy.polymorphic_url([:admin, parent_model_name.pluralize.to_sym])) end @@ -253,7 +253,7 @@ def edit_object_url(object, options = {}) end def object_url(object = nil, options = {}) - target = object ? object : @object + target = object || @object if parent? routes_proxy.polymorphic_url([:admin, parent, target], options) @@ -294,11 +294,11 @@ def new_actions end def render_after_create_error - render action: 'new' + render action: "new" end def render_after_update_error - render action: 'edit' + render action: "edit" end def resource_invalid(exception) diff --git a/backend/app/controllers/spree/admin/return_authorizations_controller.rb b/backend/app/controllers/spree/admin/return_authorizations_controller.rb index 9955343ceaa..832a4d3107d 100644 --- a/backend/app/controllers/spree/admin/return_authorizations_controller.rb +++ b/backend/app/controllers/spree/admin/return_authorizations_controller.rb @@ -3,25 +3,25 @@ module Spree module Admin class ReturnAuthorizationsController < ResourceController - belongs_to 'spree/order', find_by: :number + belongs_to "spree/order", find_by: :number before_action :load_form_data, only: [:new, :edit] - create.fails :load_form_data - update.fails :load_form_data + create.fails :load_form_data + update.fails :load_form_data def fire action_from_params = "#{params[:e]}!" - if @return_authorization.state_events.include?(params[:e].to_sym) && - @return_authorization.send(action_from_params) + flash_message = if @return_authorization.state_events.include?(params[:e].to_sym) && + @return_authorization.send(action_from_params) - flash_message = { success: t('spree.return_authorization_updated') } + {success: t("spree.return_authorization_updated")} else - flash_message = { error: t('spree.return_authorization_fire_error') } + {error: t("spree.return_authorization_fire_error")} end redirect_back(fallback_location: admin_order_return_authorizations_path(@order), - flash: flash_message) + flash: flash_message) end private diff --git a/backend/app/controllers/spree/admin/return_items_controller.rb b/backend/app/controllers/spree/admin/return_items_controller.rb index f9400f93324..8d6bdc75a6d 100644 --- a/backend/app/controllers/spree/admin/return_items_controller.rb +++ b/backend/app/controllers/spree/admin/return_items_controller.rb @@ -11,7 +11,7 @@ def location_after_save def render_after_update_error redirect_back(fallback_location: location_after_save, - flash: { error: @object.errors.full_messages.join(', ') }) + flash: {error: @object.errors.full_messages.join(", ")}) end end end diff --git a/backend/app/controllers/spree/admin/search_controller.rb b/backend/app/controllers/spree/admin/search_controller.rb index 60fe94049e7..bc96b33fe63 100644 --- a/backend/app/controllers/spree/admin/search_controller.rb +++ b/backend/app/controllers/spree/admin/search_controller.rb @@ -9,12 +9,12 @@ class SearchController < Spree::Admin::BaseController # TODO: Clean this up by moving searching out to user_class_extensions # And then JSON building with something like Active Model Serializers def users - if params[:ids] + @users = if params[:ids] # split here may be String#split or Array#split, so we must flatten the results - @users = Spree.user_class.where(id: params[:ids].split(',').flatten) + Spree.user_class.where(id: params[:ids].split(",").flatten) else - @users = Spree.user_class.ransack({ - m: 'or', + Spree.user_class.ransack({ + m: "or", email_start: params[:q], name_start: params[:q] }).result.limit(10) @@ -22,16 +22,16 @@ def users end def products - if params[:ids] + @products = if params[:ids] # split here may be String#split or Array#split, so we must flatten the results - @products = Spree::Product.where(id: params[:ids].split(",").flatten) + Spree::Product.where(id: params[:ids].split(",").flatten) else - @products = Spree::Product.ransack(params[:q]).result + Spree::Product.ransack(params[:q]).result end @products = list_products expires_in 15.minutes, public: true - headers['Surrogate-Control'] = "max-age=#{15.minutes}" + headers["Surrogate-Control"] = "max-age=#{15.minutes}" end private diff --git a/backend/app/controllers/spree/admin/shipping_methods_controller.rb b/backend/app/controllers/spree/admin/shipping_methods_controller.rb index 85bbd548f30..f2271a2886d 100644 --- a/backend/app/controllers/spree/admin/shipping_methods_controller.rb +++ b/backend/app/controllers/spree/admin/shipping_methods_controller.rb @@ -22,6 +22,7 @@ def destroy def set_shipping_category return true if params["shipping_method"][:shipping_categories] == "" + @shipping_method.shipping_categories = Spree::ShippingCategory.where(id: params["shipping_method"][:shipping_categories]) @shipping_method.save params[:shipping_method].delete(:shipping_categories) @@ -29,6 +30,7 @@ def set_shipping_category def set_zones return true if params["shipping_method"][:zones] == "" + @shipping_method.zones = Spree::Zone.where(id: params["shipping_method"][:zones]) @shipping_method.save params[:shipping_method].delete(:zones) diff --git a/backend/app/controllers/spree/admin/stock_items_controller.rb b/backend/app/controllers/spree/admin/stock_items_controller.rb index 8750bc9ca71..6568cdb4f46 100644 --- a/backend/app/controllers/spree/admin/stock_items_controller.rb +++ b/backend/app/controllers/spree/admin/stock_items_controller.rb @@ -5,8 +5,8 @@ module Admin class StockItemsController < ResourceController class_attribute :variant_display_attributes self.variant_display_attributes = [ - { translation_key: :sku, attr_name: :sku }, - { translation_key: :name, attr_name: :name } + {translation_key: :sku, attr_name: :sku}, + {translation_key: :name, attr_name: :name} ] update.before :determine_backorderable @@ -46,11 +46,11 @@ def load_stock_management_data :@stock_locations, :stock_item_stock_locations, Spree.deprecator, - "Please, do not use @stock_item_stock_locations anymore in the views, use @stock_locations", + "Please, do not use @stock_item_stock_locations anymore in the views, use @stock_locations" ) @variant_display_attributes = self.class.variant_display_attributes - @variants = Spree::Config.variant_search_class.new(params[:variant_search_term], scope: variant_scope).results. - order(id: :desc).page(params[:page]).per(params[:per_page] || Spree::Config[:orders_per_page]) + @variants = Spree::Config.variant_search_class.new(params[:variant_search_term], scope: variant_scope).results + .order(id: :desc).page(params[:page]).per(params[:per_page] || Spree::Config[:orders_per_page]) end def variant_scope diff --git a/backend/app/controllers/spree/admin/stock_locations_controller.rb b/backend/app/controllers/spree/admin/stock_locations_controller.rb index 740b422f8f2..2f9bd12519d 100644 --- a/backend/app/controllers/spree/admin/stock_locations_controller.rb +++ b/backend/app/controllers/spree/admin/stock_locations_controller.rb @@ -10,7 +10,7 @@ class StockLocationsController < ResourceController def set_country @stock_location.country = Spree::Country.default rescue ActiveRecord::RecordNotFound - flash[:error] = t('spree.stock_locations_need_a_default_country') + flash[:error] = t("spree.stock_locations_need_a_default_country") redirect_to(admin_stock_locations_path) && return end diff --git a/backend/app/controllers/spree/admin/stock_movements_controller.rb b/backend/app/controllers/spree/admin/stock_movements_controller.rb index a26568125f8..096d1659344 100644 --- a/backend/app/controllers/spree/admin/stock_movements_controller.rb +++ b/backend/app/controllers/spree/admin/stock_movements_controller.rb @@ -3,7 +3,7 @@ module Spree module Admin class StockMovementsController < ResourceController - belongs_to 'spree/stock_location' + belongs_to "spree/stock_location" before_action :parent def index @@ -20,10 +20,10 @@ def permitted_resource_params end def collection - super. - recent. - includes(stock_item: { variant: :product }). - page(params[:page]) + super + .recent + .includes(stock_item: {variant: :product}) + .page(params[:page]) end end end diff --git a/backend/app/controllers/spree/admin/store_credits_controller.rb b/backend/app/controllers/spree/admin/store_credits_controller.rb index df377ee94aa..de861f4b344 100644 --- a/backend/app/controllers/spree/admin/store_credits_controller.rb +++ b/backend/app/controllers/spree/admin/store_credits_controller.rb @@ -3,7 +3,7 @@ module Spree module Admin class StoreCreditsController < ResourceController - belongs_to 'spree/user', model_class: Spree.user_class + belongs_to "spree/user", model_class: Spree.user_class before_action :load_categories, only: [:new] before_action :load_reasons, only: [:edit_amount, :edit_validity] before_action :ensure_store_credit_reason, only: [:update_amount, :invalidate] @@ -27,7 +27,7 @@ def create redirect_to admin_user_store_credits_path(@user) else load_categories - flash[:error] = "#{t('spree.admin.store_credits.unable_to_create')} #{@store_credit.errors.full_messages}" + flash[:error] = "#{t("spree.admin.store_credits.unable_to_create")} #{@store_credit.errors.full_messages}" render :new end end @@ -38,11 +38,11 @@ def update if @store_credit.save respond_to do |format| - format.json { render json: { message: flash_message_for(@store_credit, :successfully_updated) }, status: :ok } + format.json { render json: {message: flash_message_for(@store_credit, :successfully_updated)}, status: :ok } end else respond_to do |format| - format.json { render json: { message: "#{t('spree.admin.store_credits.unable_to_update')} #{@store_credit.errors.full_messages}" }, status: :bad_request } + format.json { render json: {message: "#{t("spree.admin.store_credits.unable_to_update")} #{@store_credit.errors.full_messages}"}, status: :bad_request } end end end @@ -70,8 +70,8 @@ def invalidate private def permitted_resource_params - params.require(:store_credit).permit([:amount, :currency, :category_id, :memo]). - merge(created_by: spree_current_user) + params.require(:store_credit).permit([:amount, :currency, :category_id, :memo]) + .merge(created_by: spree_current_user) end def collection @@ -89,7 +89,7 @@ def load_categories def ensure_store_credit_reason @store_credit_reason = Spree::StoreCreditReason.find_by(id: params[:store_credit_reason_id]) unless @store_credit_reason - @store_credit.errors.add(:base, t('spree.admin.store_credits.errors.store_credit_reason_required')) + @store_credit.errors.add(:base, t("spree.admin.store_credits.errors.store_credit_reason_required")) render_edit_page end end @@ -97,14 +97,14 @@ def ensure_store_credit_reason def render_edit_page if action == :update_amount template = :edit_amount - translation_key = 'update' + translation_key = "update" else template = :edit_validity - translation_key = 'invalidate' + translation_key = "invalidate" end load_reasons - flash[:error] = "#{t("spree.admin.store_credits.unable_to_#{translation_key}")}: #{@store_credit.errors.full_messages.join(', ')}" + flash[:error] = "#{t("spree.admin.store_credits.unable_to_#{translation_key}")}: #{@store_credit.errors.full_messages.join(", ")}" render(template) && return end diff --git a/backend/app/controllers/spree/admin/style_guide_controller.rb b/backend/app/controllers/spree/admin/style_guide_controller.rb index 41c4b412ffe..aacd759f33e 100644 --- a/backend/app/controllers/spree/admin/style_guide_controller.rb +++ b/backend/app/controllers/spree/admin/style_guide_controller.rb @@ -4,37 +4,37 @@ module Spree module Admin class StyleGuideController < Spree::Admin::BaseController respond_to :html - layout 'spree/layouts/admin_style_guide' + layout "spree/layouts/admin_style_guide" def index @topics = { typography: [ - 'fonts', - 'colors', - 'lists', - 'icons' + "fonts", + "colors", + "lists", + "icons" ], forms: [ - 'building_forms', - 'buttons', - 'helper_text', - 'inputs', - 'labels', - 'validation' + "building_forms", + "buttons", + "helper_text", + "inputs", + "labels", + "validation" ], components: [ - 'pills', - 'modals', - 'tabs' + "pills", + "modals", + "tabs" ], messaging: [ - 'loading', - 'flashes', - 'tooltips' + "loading", + "flashes", + "tooltips" ], tables: [ - 'building_tables', - 'pagination' + "building_tables", + "pagination" ] } end diff --git a/backend/app/controllers/spree/admin/taxons/attachment_controller.rb b/backend/app/controllers/spree/admin/taxons/attachment_controller.rb index 443d860d7c4..dd8612f12dc 100644 --- a/backend/app/controllers/spree/admin/taxons/attachment_controller.rb +++ b/backend/app/controllers/spree/admin/taxons/attachment_controller.rb @@ -8,9 +8,9 @@ def destroy taxonomy = Spree::Taxonomy.find(params[:taxonomy_id]) taxon = taxonomy.taxons.find(params[:taxon_id]) if taxon.destroy_attachment(params[:attachment_definition]) - flash[:success] = t('spree.successfully_removed', resource: params[:attachment_definition].titleize) + flash[:success] = t("spree.successfully_removed", resource: params[:attachment_definition].titleize) else - flash[:error] = t('spree.taxon_attachment_removal_error') + flash[:error] = t("spree.taxon_attachment_removal_error") end redirect_to edit_admin_taxonomy_taxon_path(taxonomy, taxon.id) end diff --git a/backend/app/controllers/spree/admin/taxons_controller.rb b/backend/app/controllers/spree/admin/taxons_controller.rb index 1271b3af123..89ab6734d4c 100644 --- a/backend/app/controllers/spree/admin/taxons_controller.rb +++ b/backend/app/controllers/spree/admin/taxons_controller.rb @@ -10,10 +10,10 @@ def index end def search - if params[:ids] - @taxons = Spree::Taxon.where(id: params[:ids].split(',')) + @taxons = if params[:ids] + Spree::Taxon.where(id: params[:ids].split(",")) else - @taxons = Spree::Taxon.limit(20).ransack(name_cont: params[:q]).result + Spree::Taxon.limit(20).ransack(name_cont: params[:q]).result end end @@ -25,7 +25,7 @@ def create format.json { render json: @taxon.to_json } end else - flash[:error] = t('spree.errors.messages.could_not_create_taxon') + flash[:error] = t("spree.errors.messages.could_not_create_taxon") respond_with(@taxon) do |format| format.html { redirect_to @taxonomy ? edit_admin_taxonomy_url(@taxonomy) : admin_taxonomies_url } end @@ -76,7 +76,7 @@ def update def destroy @taxon = Spree::Taxon.find(params[:id]) @taxon.destroy - respond_with(@taxon) { |format| format.json { render json: '' } } + respond_with(@taxon) { |format| format.json { render json: "" } } end private diff --git a/backend/app/controllers/spree/admin/theme_controller.rb b/backend/app/controllers/spree/admin/theme_controller.rb index b00852afe91..7553306e7a9 100644 --- a/backend/app/controllers/spree/admin/theme_controller.rb +++ b/backend/app/controllers/spree/admin/theme_controller.rb @@ -9,14 +9,14 @@ def set requested_theme = params[:switch_to_theme].presence # Avoid interpolating user content into the session key - system_theme = params[:system_theme].presence == "dark" ? "dark" : "light" + system_theme = (params[:system_theme].presence == "dark") ? "dark" : "light" session_key = :"admin_#{system_theme}_theme" if theme_is_available?(requested_theme) session[session_key] = requested_theme - redirect_back_or_to spree.admin_url, notice: t('spree.theme_changed') + redirect_back_or_to spree.admin_url, notice: t("spree.theme_changed") else - redirect_back_or_to spree.admin_url, error: t('spree.error') + redirect_back_or_to spree.admin_url, error: t("spree.error") end end diff --git a/backend/app/controllers/spree/admin/users/api_key_controller.rb b/backend/app/controllers/spree/admin/users/api_key_controller.rb index 894c2ae4705..7920393e440 100644 --- a/backend/app/controllers/spree/admin/users/api_key_controller.rb +++ b/backend/app/controllers/spree/admin/users/api_key_controller.rb @@ -6,14 +6,14 @@ module Users class ApiKeyController < Spree::Admin::BaseController def create if user.generate_spree_api_key! - flash[:success] = t('spree.admin.api.key_generated') + flash[:success] = t("spree.admin.api.key_generated") end redirect_to edit_admin_user_path(user) end def destroy if user.clear_spree_api_key! - flash[:success] = t('spree.admin.api.key_cleared') + flash[:success] = t("spree.admin.api.key_cleared") end redirect_to edit_admin_user_path(user) end diff --git a/backend/app/controllers/spree/admin/users_controller.rb b/backend/app/controllers/spree/admin/users_controller.rb index 177827780af..0275b2c7503 100644 --- a/backend/app/controllers/spree/admin/users_controller.rb +++ b/backend/app/controllers/spree/admin/users_controller.rb @@ -26,7 +26,7 @@ def create set_roles set_stock_locations - flash[:success] = t('spree.created_successfully') + flash[:success] = t("spree.created_successfully") redirect_to edit_admin_user_url(@user) else load_roles @@ -42,7 +42,7 @@ def update set_roles set_stock_locations - flash[:success] = t('spree.account_updated') + flash[:success] = t("spree.account_updated") redirect_to edit_admin_user_url(@user) else load_roles @@ -56,7 +56,7 @@ def update def addresses if request.put? if @user.update(user_params) - flash.now[:success] = t('spree.account_updated') + flash.now[:success] = t("spree.account_updated") end render :addresses @@ -74,9 +74,9 @@ def items @search = Spree::Order.includes( line_items: { - variant: [:product, { option_values: :option_type }] + variant: [:product, {option_values: :option_type}] } -).ransack(params[:q].merge(user_id_eq: @user.id)) + ).ransack(params[:q].merge(user_id_eq: @user.id)) @orders = @search.result.page(params[:page]).per(Spree::Config[:admin_products_per_page]) end @@ -104,7 +104,7 @@ def user_params end if can? :manage, Spree::StockLocation - attributes += [{ stock_location_ids: [] }] + attributes += [{stock_location_ids: []}] end unless can? :update_password, @user diff --git a/backend/app/controllers/spree/admin/variant_property_rule_values_controller.rb b/backend/app/controllers/spree/admin/variant_property_rule_values_controller.rb index a0527ff7c67..6f7efb30f4e 100644 --- a/backend/app/controllers/spree/admin/variant_property_rule_values_controller.rb +++ b/backend/app/controllers/spree/admin/variant_property_rule_values_controller.rb @@ -3,7 +3,7 @@ module Spree module Admin class VariantPropertyRuleValuesController < ResourceController - belongs_to 'spree/product', find_by: :slug + belongs_to "spree/product", find_by: :slug end end end diff --git a/backend/app/controllers/spree/admin/variants_controller.rb b/backend/app/controllers/spree/admin/variants_controller.rb index 069192b1fc1..489de4dbdd9 100644 --- a/backend/app/controllers/spree/admin/variants_controller.rb +++ b/backend/app/controllers/spree/admin/variants_controller.rb @@ -3,9 +3,9 @@ module Spree module Admin class VariantsController < ResourceController - helper 'spree/admin/products' + helper "spree/admin/products" - belongs_to 'spree/product', find_by: :slug + belongs_to "spree/product", find_by: :slug new_action.before :new_before before_action :redirect_on_empty_option_values, only: [:new] before_action :load_data, only: [:new, :create, :edit, :update] @@ -13,17 +13,17 @@ class VariantsController < ResourceController private def new_before - @object.attributes = @object.product.master.attributes.except('id', 'created_at', 'deleted_at', - 'sku', 'is_master') + @object.attributes = @object.product.master.attributes.except("id", "created_at", "deleted_at", + "sku", "is_master") # Shallow Clone of the default price to populate the price field. @object.prices.build(@object.product.master.default_price.attributes.except("id", "created_at", "updated_at", "deleted_at")) end def collection - if params[:deleted] == "on" - base_variant_scope ||= super.with_discarded + base_variant_scope ||= if params[:deleted] == "on" + super.with_discarded else - base_variant_scope ||= super + super end search = Spree::Config.variant_search_class.new(params[:variant_search_term], scope: base_variant_scope) @@ -36,7 +36,7 @@ def load_data end def variant_includes - [{ option_values: :option_type }, :prices] + [{option_values: :option_type}, :prices] end def redirect_on_empty_option_values diff --git a/backend/app/helpers/spree/admin/adjustments_helper.rb b/backend/app/helpers/spree/admin/adjustments_helper.rb index 79370fa6f4f..7fb6f626eb8 100644 --- a/backend/app/helpers/spree/admin/adjustments_helper.rb +++ b/backend/app/helpers/spree/admin/adjustments_helper.rb @@ -4,18 +4,18 @@ module Spree module Admin module AdjustmentsHelper def adjustment_state(adjustment) - icon = adjustment.finalized? ? 'lock' : 'unlock' - content_tag(:span, '', class: "fa fa-#{icon}") + icon = adjustment.finalized? ? "lock" : "unlock" + content_tag(:span, "", class: "fa fa-#{icon}") end def display_adjustable(adjustable) case adjustable when Spree::LineItem - display_line_item(adjustable) + display_line_item(adjustable) when Spree::Shipment - display_shipment(adjustable) + display_shipment(adjustable) when Spree::Order - display_order(adjustable) + display_order(adjustable) end end @@ -32,14 +32,14 @@ def display_line_item(line_item) def display_shipment(shipment) parts = [ - "#{t('spree.shipment')} ##{shipment.number}", + "#{t("spree.shipment")} ##{shipment.number}", shipment.display_cost ] safe_join(parts, "
".html_safe) end def display_order(_order) - t('spree.order') + t("spree.order") end end end diff --git a/backend/app/helpers/spree/admin/base_helper.rb b/backend/app/helpers/spree/admin/base_helper.rb index b1e6d33bb9d..ca25e98ff67 100644 --- a/backend/app/helpers/spree/admin/base_helper.rb +++ b/backend/app/helpers/spree/admin/base_helper.rb @@ -5,11 +5,11 @@ module Admin module BaseHelper def field_container(model, method, options = {}, &block) css_classes = options[:class].to_a - css_classes << 'field' + css_classes << "field" if error_message_on(model, method).present? - css_classes << 'withError' + css_classes << "withError" end - content_tag(:div, capture(&block), class: css_classes.join(' '), id: "#{model}_#{method}_field") + content_tag(:div, capture(&block), class: css_classes.join(" "), id: "#{model}_#{method}_field") end def error_message_on(object, method, _options = {}) @@ -18,15 +18,15 @@ def error_message_on(object, method, _options = {}) if obj && obj.errors[method].present? errors = safe_join(obj.errors[method], "
".html_safe) - content_tag(:span, errors, class: 'formError') + content_tag(:span, errors, class: "formError") else - '' + "" end end def admin_hint(title, text) - content_tag(:span, class: 'hint-tooltip', title:, data: { content: text }) do - content_tag(:i, '', class: 'fa fa-info-circle') + content_tag(:span, class: "hint-tooltip", title:, data: {content: text}) do + content_tag(:i, "", class: "fa fa-info-circle") end end @@ -34,16 +34,16 @@ def datepicker_field_value(date, with_time: false) return if date.blank? format = if with_time - t('spree.date_picker.format_with_time', default: '%Y/%m/%d %H:%M') + t("spree.date_picker.format_with_time", default: "%Y/%m/%d %H:%M") else - t('spree.date_picker.format', default: '%Y/%m/%d') + t("spree.date_picker.format", default: "%Y/%m/%d") end l(date, format:) end def spree_dom_id(record) - dom_id(record, 'spree') + dom_id(record, "spree") end def admin_layout(layout = nil) diff --git a/backend/app/helpers/spree/admin/navigation_helper.rb b/backend/app/helpers/spree/admin/navigation_helper.rb index 259745214b3..30aa763a1df 100644 --- a/backend/app/helpers/spree/admin/navigation_helper.rb +++ b/backend/app/helpers/spree/admin/navigation_helper.rb @@ -19,9 +19,9 @@ def render_admin_breadcrumbs admin_breadcrumb(content_for(:page_title)) end - content_tag :ol, class: 'breadcrumb' do + content_tag :ol, class: "breadcrumb" do segments = admin_breadcrumbs.map do |level| - content_tag(:li, level, class: "breadcrumb-item #{level == admin_breadcrumbs.last ? 'active' : ''}") + content_tag(:li, level, class: "breadcrumb-item #{"active" if level == admin_breadcrumbs.last}") end safe_join(segments) end @@ -33,9 +33,9 @@ def admin_page_title elsif content_for?(:page_title) content_for(:page_title) elsif admin_breadcrumbs.any? - admin_breadcrumbs.map { |breadcrumb| strip_tags(breadcrumb) }.reverse.join(' - ') + admin_breadcrumbs.map { |breadcrumb| strip_tags(breadcrumb) }.reverse.join(" - ") else - t(controller.controller_name, default: controller.controller_name.titleize, scope: 'spree') + t(controller.controller_name, default: controller.controller_name.titleize, scope: "spree") end end @@ -75,76 +75,76 @@ def tab(*args, &block) request.fullpath.starts_with?(options[:url]) end - css_classes << 'selected' if options[:selected] + css_classes << "selected" if options[:selected] if options[:icon] link = link_to_with_icon(options[:icon], label, options[:url]) - css_classes << 'tab-with-icon' + css_classes << "tab-with-icon" else link = link_to(label, options[:url]) end block_content = capture(&block) if block_given? - content_tag('li', link + block_content.to_s, class: css_classes.join(' ') ) + content_tag("li", link + block_content.to_s, class: css_classes.join(" ")) end def link_to_clone(resource, options = {}) - options[:data] = { action: 'clone' } + options[:data] = {action: "clone"} options[:method] = :post - link_to_with_icon('copy', t('spree.clone'), clone_object_url(resource), options) + link_to_with_icon("copy", t("spree.clone"), clone_object_url(resource), options) end def link_to_new(resource) - options[:data] = { action: 'new' } - link_to_with_icon('plus', t('spree.new'), edit_object_url(resource)) + options[:data] = {action: "new"} + link_to_with_icon("plus", t("spree.new"), edit_object_url(resource)) end def link_to_edit(resource, options = {}) url = options[:url] || edit_object_url(resource) - options[:data] = { action: 'edit' } - link_to_with_icon('edit', t('spree.actions.edit'), url, options) + options[:data] = {action: "edit"} + link_to_with_icon("edit", t("spree.actions.edit"), url, options) end def link_to_edit_url(url, options = {}) - options[:data] = { action: 'edit' } - link_to_with_icon('edit', t('spree.actions.edit'), url, options) + options[:data] = {action: "edit"} + link_to_with_icon("edit", t("spree.actions.edit"), url, options) end def link_to_delete(resource, options = {}) url = options[:url] || object_url(resource) - name = options[:name] || t('spree.actions.delete') - confirm = options[:confirm] || t('spree.are_you_sure') + name = options[:name] || t("spree.actions.delete") + confirm = options[:confirm] || t("spree.are_you_sure") options[:class] = "#{options[:class]} delete-resource".strip - options[:data] = { confirm:, action: 'remove' } - link_to_with_icon 'trash', name, url, options + options[:data] = {confirm:, action: "remove"} + link_to_with_icon "trash", name, url, options end def link_to_with_icon(icon_name, text, url, options = {}) options[:class] = "#{options[:class]} icon_link with-tip".strip - if icon_name.starts_with?('ri-') - svg_map = image_path('spree/backend/themes/solidus_admin/remixicon.symbol.svg') + if icon_name.starts_with?("ri-") + svg_map = image_path("spree/backend/themes/solidus_admin/remixicon.symbol.svg") icon_tag = tag.svg( - tag.use('xlink:href': "#{svg_map}##{icon_name}"), - 'aria-hidden': true, - style: "fill: currentColor;", + tag.use("xlink:href": "#{svg_map}##{icon_name}"), + "aria-hidden": true, + style: "fill: currentColor;" ) else options[:class] << " fa fa-#{icon_name}" - icon_tag = ''.html_safe + icon_tag = "".html_safe end - options[:class] += ' no-text' if options[:no_text] + options[:class] += " no-text" if options[:no_text] options[:title] = text if options[:no_text] - text = options[:no_text] ? '' : content_tag(:span, text, class: 'text') + text = options[:no_text] ? "" : content_tag(:span, text, class: "text") options.delete(:no_text) link_to(icon_tag + text, url, options) end def solidus_icon(icon_name) - icon_name ? content_tag(:i, '', class: icon_name) : '' + icon_name ? content_tag(:i, "", class: icon_name) : "" end - def configurations_menu_item(link_text, url, description = '') + def configurations_menu_item(link_text, url, description = "") %( #{link_to(link_text, url)} #{description} @@ -154,9 +154,9 @@ def configurations_menu_item(link_text, url, description = '') def configurations_sidebar_menu_item(link_text, url, options = {}) is_active = url.ends_with?(controller.controller_name) || - url.ends_with?("#{controller.controller_name}/edit") || - url.ends_with?("#{controller.controller_name.singularize}/edit") - options[:class] = is_active ? 'active' : nil + url.ends_with?("#{controller.controller_name}/edit") || + url.ends_with?("#{controller.controller_name.singularize}/edit") + options[:class] = is_active ? "active" : nil content_tag(:li, options) do link_to(link_text, url) end @@ -164,12 +164,12 @@ def configurations_sidebar_menu_item(link_text, url, options = {}) def settings_tab_item(link_text, url, options = {}) is_active = url.ends_with?(controller.controller_name) || - url.ends_with?("#{controller.controller_name}/edit") || - url.ends_with?("#{controller.controller_name.singularize}/edit") - options[:class] = 'fa' - options[:class] += ' active' if is_active + url.ends_with?("#{controller.controller_name}/edit") || + url.ends_with?("#{controller.controller_name.singularize}/edit") + options[:class] = "fa" + options[:class] += " active" if is_active options[:data] ||= {} - options[:data][:hook] = "admin_settings_#{link_text.downcase.tr(' ', '_')}" + options[:data][:hook] = "admin_settings_#{link_text.downcase.tr(" ", "_")}" content_tag(:li, options) do link_to(link_text, url) end diff --git a/backend/app/helpers/spree/admin/orders_helper.rb b/backend/app/helpers/spree/admin/orders_helper.rb index ef14aac8d6a..610b80e442b 100644 --- a/backend/app/helpers/spree/admin/orders_helper.rb +++ b/backend/app/helpers/spree/admin/orders_helper.rb @@ -9,14 +9,14 @@ module OrdersHelper def event_links links = [] @order_events.sort.each do |event| - next unless @order.send("can_#{event}?") + next unless @order.send(:"can_#{event}?") translated_event = t(event, scope: [:spree, :admin, :order, :events]) links << button_to( translated_event, [event.to_sym, :admin, @order], method: :put, - data: { confirm: t(:order_sure_want_to, event: translated_event, scope: :spree) } + data: {confirm: t(:order_sure_want_to, event: translated_event, scope: :spree)} ) end safe_join(links, " ".html_safe) @@ -72,7 +72,7 @@ def cvv_response_code "P" => "Not Processed", "S" => "Issuer indicates that CVV2 data should be present on the card, but the merchant has indicated data is not present on the card", "U" => "Issuer has not certified for CVV2 or Issuer has not provided Visa with the CVV2 encryption keys", - "" => "Transaction failed because wrong CVV2 number was entered or no CVV2 number was entered" + "" => "Transaction failed because wrong CVV2 number was entered or no CVV2 number was entered" } end end diff --git a/backend/app/helpers/spree/admin/reimbursement_type_helper.rb b/backend/app/helpers/spree/admin/reimbursement_type_helper.rb index 466df97b749..66ff3f538cf 100644 --- a/backend/app/helpers/spree/admin/reimbursement_type_helper.rb +++ b/backend/app/helpers/spree/admin/reimbursement_type_helper.rb @@ -4,7 +4,7 @@ module Spree module Admin module ReimbursementTypeHelper def reimbursement_type_name(reimbursement_type) - reimbursement_type.present? ? reimbursement_type.name.humanize : '' + reimbursement_type.present? ? reimbursement_type.name.humanize : "" end end end diff --git a/backend/app/helpers/spree/admin/stock_locations_helper.rb b/backend/app/helpers/spree/admin/stock_locations_helper.rb index 491e6e04841..2fdba9ecf3f 100644 --- a/backend/app/helpers/spree/admin/stock_locations_helper.rb +++ b/backend/app/helpers/spree/admin/stock_locations_helper.rb @@ -4,7 +4,7 @@ module Spree module Admin module StockLocationsHelper def admin_stock_location_display_name(stock_location) - [stock_location.admin_name, stock_location.name].reject(&:blank?).join(' / ') + [stock_location.admin_name, stock_location.name].reject(&:blank?).join(" / ") end end end diff --git a/backend/app/helpers/spree/admin/store_credit_events_helper.rb b/backend/app/helpers/spree/admin/store_credit_events_helper.rb index 6b2188f67db..5f03d5a5bca 100644 --- a/backend/app/helpers/spree/admin/store_credit_events_helper.rb +++ b/backend/app/helpers/spree/admin/store_credit_events_helper.rb @@ -6,18 +6,18 @@ module Spree::Admin::StoreCreditEventsHelper Spree::Payment.to_s => { new_tab: true, href_type: :payment, - translation_key: 'admin.store_credits.payment_originator' + translation_key: "admin.store_credits.payment_originator" }, Spree::Refund.to_s => { new_tab: true, href_type: :payments, - translation_key: 'admin.store_credits.refund_originator' + translation_key: "admin.store_credits.refund_originator" } } def store_credit_event_admin_action_name(store_credit_event) if Spree::StoreCreditEvent::NON_EXPOSED_ACTIONS.include?(store_credit_event.action) || - store_credit_event.action == Spree::StoreCredit::VOID_ACTION + store_credit_event.action == Spree::StoreCredit::VOID_ACTION t("spree.store_credit.display_action.admin.#{store_credit_event.action}") else store_credit_event.display_action @@ -35,35 +35,35 @@ def store_credit_event_originator_link(store_credit_event) options = {} link_options = originator_links[store_credit_event.originator.class.to_s] - options[:target] = '_blank' if link_options[:new_tab] + options[:target] = "_blank" if link_options[:new_tab] # Although not all href_types are used in originator_links # they are necessary because they may be used within extensions case link_options[:href_type] when :user link_to( - t(link_options[:translation_key], email: originator.email, scope: 'spree'), + t(link_options[:translation_key], email: originator.email, scope: "spree"), spree.edit_admin_user_path(originator), options ) when :line_item order = originator.line_item.order link_to( - t(link_options[:translation_key], order_number: order.number, scope: 'spree'), + t(link_options[:translation_key], order_number: order.number, scope: "spree"), spree.edit_admin_order_path(order), options ) when :payment order = originator.order link_to( - t(link_options[:translation_key], order_number: order.number, scope: 'spree'), + t(link_options[:translation_key], order_number: order.number, scope: "spree"), spree.admin_order_payment_path(order, originator), options ) when :payments order = originator.payment.order link_to( - t(link_options[:translation_key], order_number: order.number, scope: 'spree'), + t(link_options[:translation_key], order_number: order.number, scope: "spree"), spree.admin_order_payments_path(order), options ) @@ -80,7 +80,7 @@ def add_user_originator_link originator_links[Spree.user_class.to_s] = { new_tab: true, href_type: :user, - translation_key: 'admin.store_credits.user_originator' + translation_key: "admin.store_credits.user_originator" } end end diff --git a/backend/app/views/spree/admin/search/users.json.jbuilder b/backend/app/views/spree/admin/search/users.json.jbuilder index b9aad3d7190..d1a487caa84 100644 --- a/backend/app/views/spree/admin/search/users.json.jbuilder +++ b/backend/app/views/spree/admin/search/users.json.jbuilder @@ -21,7 +21,7 @@ json.array!(@users) do |user| ] json.ship_address do if user.ship_address - json.(user.ship_address, *address_fields) + json.call(user.ship_address, *address_fields) if user.ship_address.state json.state do json.name user.ship_address.state.name @@ -37,7 +37,7 @@ json.array!(@users) do |user| json.bill_address do if user.bill_address - json.(user.bill_address, *address_fields) + json.call(user.bill_address, *address_fields) if user.bill_address.state json.state do json.name user.bill_address.state.name diff --git a/backend/bin/rails b/backend/bin/rails index f7c63474f51..1ef60c48828 100755 --- a/backend/bin/rails +++ b/backend/bin/rails @@ -2,11 +2,11 @@ # This command will automatically be run when you run "rails" with Rails gems # installed from the root of your application. -ENGINE_ROOT = File.expand_path('..', __dir__) -ENGINE_PATH = File.expand_path('../lib/spree/backend/engine', __dir__) +ENGINE_ROOT = File.expand_path("..", __dir__) +ENGINE_PATH = File.expand_path("../lib/spree/backend/engine", __dir__) # Set up gems listed in the Gemfile. -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __dir__) +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __dir__) require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"]) require "rails/all" diff --git a/backend/config/initializers/assets.rb b/backend/config/initializers/assets.rb index 3a95af077af..7c6e3dc7e44 100644 --- a/backend/config/initializers/assets.rb +++ b/backend/config/initializers/assets.rb @@ -1,3 +1,3 @@ # frozen_string_literal: true -Rails.application.config.assets.precompile << 'solidus_backend_manifest.js' +Rails.application.config.assets.precompile << "solidus_backend_manifest.js" diff --git a/backend/config/initializers/form_builder.rb b/backend/config/initializers/form_builder.rb index 52ef402dc0d..ff9d9c81105 100644 --- a/backend/config/initializers/form_builder.rb +++ b/backend/config/initializers/form_builder.rb @@ -19,4 +19,4 @@ def field_hint(method, options = {}) end end -ActionView::Base.field_error_proc = proc{ |html_tag, _instance| "#{html_tag}".html_safe } +ActionView::Base.field_error_proc = proc { |html_tag, _instance| "#{html_tag}".html_safe } diff --git a/backend/config/routes.rb b/backend/config/routes.rb index a0fc0fad00e..7afb7bd0bf2 100644 --- a/backend/config/routes.rb +++ b/backend/config/routes.rb @@ -2,11 +2,11 @@ Spree::Core::Engine.routes.draw do namespace :admin do - get '/search/users', to: "search#users", as: :search_users - get '/search/products', to: "search#products", as: :search_products + get "/search/users", to: "search#users", as: :search_users + get "/search/products", to: "search#products", as: :search_products - put '/locale/set', to: 'locale#set', defaults: { format: :json }, as: :set_locale - put '/theme/set', to: 'theme#set', defaults: { format: :json }, as: :set_theme + put "/locale/set", to: "locale#set", defaults: {format: :json}, as: :set_locale + put "/theme/set", to: "theme#set", defaults: {format: :json}, as: :set_theme resources :dashboards, only: [] do collection do @@ -45,7 +45,7 @@ resources :variants_including_master, only: [:update] resources :prices, only: [:destroy, :index, :edit, :update, :new, :create] end - get '/products/:product_slug/stock', to: "stock_items#index", as: :product_stock + get "/products/:product_slug/stock", to: "stock_items#index", as: :product_stock resources :option_types do collection do @@ -54,11 +54,11 @@ end end - delete '/option_values/:id', to: "option_values#destroy", as: :option_value + delete "/option_values/:id", to: "option_values#destroy", as: :option_value resources :properties - delete '/product_properties/:id', to: "product_properties#destroy", as: :product_property + delete "/product_properties/:id", to: "product_properties#destroy", as: :product_property resources :orders do member do @@ -118,7 +118,7 @@ post :update_positions end resources :taxons do - resource :attachment, controller: 'taxons/attachment', only: [:destroy] + resource :attachment, controller: "taxons/attachment", only: [:destroy] end end @@ -174,5 +174,5 @@ resources :style_guide, only: [:index] end - get '/admin', to: 'admin/root#index', as: :admin + get "/admin", to: "admin/root#index", as: :admin end diff --git a/backend/lib/solidus_backend.rb b/backend/lib/solidus_backend.rb index 274c12f955e..2829492ca95 100644 --- a/backend/lib/solidus_backend.rb +++ b/backend/lib/solidus_backend.rb @@ -1,3 +1,3 @@ # frozen_string_literal: true -require 'spree_backend' +require "spree_backend" diff --git a/backend/lib/spree/backend.rb b/backend/lib/spree/backend.rb index b7197426617..b9c4f5e49aa 100644 --- a/backend/lib/spree/backend.rb +++ b/backend/lib/spree/backend.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'spree_core' -require 'spree_api' +require "spree_core" +require "spree_api" -require 'jquery-rails' -require 'sassc-rails' -require 'handlebars_assets' -require 'font-awesome-rails' -require 'jbuilder' -require 'kaminari' -require 'responders' +require "jquery-rails" +require "sassc-rails" +require "handlebars_assets" +require "font-awesome-rails" +require "jbuilder" +require "kaminari" +require "responders" -require 'spree/backend/action_callbacks' -require 'spree/backend/callbacks' -require 'spree/backend/engine' +require "spree/backend/action_callbacks" +require "spree/backend/callbacks" +require "spree/backend/engine" diff --git a/backend/lib/spree/backend/callbacks.rb b/backend/lib/spree/backend/callbacks.rb index f6946c75830..06a0554fa77 100644 --- a/backend/lib/spree/backend/callbacks.rb +++ b/backend/lib/spree/backend/callbacks.rb @@ -41,10 +41,11 @@ def custom_callback(action) def invoke_callbacks(action, callback_type) callbacks = self.class.callbacks || {} return if callbacks[action].nil? + case callback_type.to_sym when :before then callbacks[action].before_methods.each { |method| send method } - when :after then callbacks[action].after_methods.each { |method| send method } - when :fails then callbacks[action].fails_methods.each { |method| send method } + when :after then callbacks[action].after_methods.each { |method| send method } + when :fails then callbacks[action].fails_methods.each { |method| send method } end end end diff --git a/backend/lib/spree/backend/config.rb b/backend/lib/spree/backend/config.rb index b99e5df7da8..43c34b096fb 100644 --- a/backend/lib/spree/backend/config.rb +++ b/backend/lib/spree/backend/config.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spree/backend_configuration' +require "spree/backend_configuration" module Spree module Backend diff --git a/backend/lib/spree/backend/engine.rb b/backend/lib/spree/backend/engine.rb index 42f32f74bd9..7085a94ceb6 100644 --- a/backend/lib/spree/backend/engine.rb +++ b/backend/lib/spree/backend/engine.rb @@ -1,16 +1,17 @@ # frozen_string_literal: true -require 'spree/backend/config' +require "spree/backend/config" module Spree module Backend class Engine < ::Rails::Engine # Leave initializer empty for backwards-compatability. Other apps # might still rely on this event. - initializer "spree.backend.environment", before: :load_config_initializers do; end + initializer "spree.backend.environment", before: :load_config_initializers do + end config.after_initialize do - Spree::Backend::Config.check_load_defaults_called('Spree::Backend::Config') + Spree::Backend::Config.check_load_defaults_called("Spree::Backend::Config") end end end diff --git a/backend/lib/spree/backend_configuration.rb b/backend/lib/spree/backend_configuration.rb index 5621fb4641a..85d97cb8769 100644 --- a/backend/lib/spree/backend_configuration.rb +++ b/backend/lib/spree/backend_configuration.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'spree/preferences/configuration' -require 'spree/backend_configuration/menu_item' +require "spree/preferences/configuration" +require "spree/backend_configuration/menu_item" module Spree class BackendConfiguration < Preferences::Configuration @@ -10,13 +10,13 @@ class BackendConfiguration < Preferences::Configuration # @!attribute [rw] themes # @return [Hash] A hash containing the themes that are available for the admin panel preference :themes, :hash, default: { - classic: 'spree/backend/all', - classic_dark: 'spree/backend/themes/classic_dark', - classic_dark_dimmed: 'spree/backend/themes/classic_dimmed', - solidus: 'spree/backend/themes/solidus_admin', - solidus_dark: 'spree/backend/themes/solidus_admin_dark', - solidus_dimmed: 'spree/backend/themes/solidus_admin_dimmed', - solidus_admin: 'spree/backend/themes/solidus_admin' + classic: "spree/backend/all", + classic_dark: "spree/backend/themes/classic_dark", + classic_dark_dimmed: "spree/backend/themes/classic_dimmed", + solidus: "spree/backend/themes/solidus_admin", + solidus_dark: "spree/backend/themes/solidus_admin_dark", + solidus_dimmed: "spree/backend/themes/solidus_admin_dimmed", + solidus_admin: "spree/backend/themes/solidus_admin" } # @!attribute [rw] show_reverse_charge_fields @@ -38,7 +38,7 @@ class BackendConfiguration < Preferences::Configuration ransack: :state_eq, label: -> { I18n.t(:status, scope: :spree) }, options: -> { - Spree::Order.state_machines[:state].states.collect { |s| [I18n.t(s.name, scope: 'spree.order_state'), s.value] } + Spree::Order.state_machines[:state].states.collect { |s| [I18n.t(s.name, scope: "spree.order_state"), s.value] } } } }, @@ -92,7 +92,7 @@ class BackendConfiguration < Preferences::Configuration locals: { ransack: :store_id_eq, label: -> { I18n.t(:store, scope: :spree) }, - options: -> { Spree::Store.all.map { |store| [store.name, store.id] } }, + options: -> { Spree::Store.all.map { |store| [store.name, store.id] } } }, if: -> { Spree::Store.many? } }, @@ -108,11 +108,11 @@ class BackendConfiguration < Preferences::Configuration # @!attribute [rw] theme # @return [String] Default admin theme name - versioned_preference :theme, :string, initial_value: 'classic', boundaries: { "4.2.0" => "solidus_admin", "4.4.0" => "solidus" } + versioned_preference :theme, :string, initial_value: "classic", boundaries: {"4.2.0" => "solidus_admin", "4.4.0" => "solidus"} # @!attribute [rw] dark_theme # @return [String] Dark admin theme name - versioned_preference :dark_theme, :string, initial_value: 'classic', boundaries: { "4.2.0" => "solidus_admin", "4.4.0" => 'solidus_dark' } + versioned_preference :dark_theme, :string, initial_value: "classic", boundaries: {"4.2.0" => "solidus_admin", "4.4.0" => "solidus_dark"} def theme_path(user_theme) themes.fetch(user_theme&.to_sym, themes.fetch(theme.to_sym)) @@ -121,7 +121,7 @@ def theme_path(user_theme) # @!attribute [rw] admin_updated_navbar # @return [Boolean] Should the updated navbar be used in admin (default: +false+) # - versioned_preference :admin_updated_navbar, :boolean, initial_value: false, boundaries: { "4.2.0" => true } + versioned_preference :admin_updated_navbar, :boolean, initial_value: false, boundaries: {"4.2.0" => true} preference :frontend_product_path, :proc, @@ -135,14 +135,14 @@ def theme_path(user_theme) # @!attribute [rw] prefer_menu_item_partials # @return [Boolean] Whether or not to prefer menu item partials when both a partial and children are present. - versioned_preference :prefer_menu_item_partials, :boolean, initial_value: true, boundaries: { "4.2.0" => false } + versioned_preference :prefer_menu_item_partials, :boolean, initial_value: true, boundaries: {"4.2.0" => false} - autoload :ORDER_TABS, 'spree/backend_configuration/deprecated_tab_constants' - autoload :PRODUCT_TABS, 'spree/backend_configuration/deprecated_tab_constants' - autoload :CONFIGURATION_TABS, 'spree/backend_configuration/deprecated_tab_constants' - autoload :PROMOTION_TABS, 'spree/backend_configuration/deprecated_tab_constants' - autoload :STOCK_TABS, 'spree/backend_configuration/deprecated_tab_constants' - autoload :USER_TABS, 'spree/backend_configuration/deprecated_tab_constants' + autoload :ORDER_TABS, "spree/backend_configuration/deprecated_tab_constants" + autoload :PRODUCT_TABS, "spree/backend_configuration/deprecated_tab_constants" + autoload :CONFIGURATION_TABS, "spree/backend_configuration/deprecated_tab_constants" + autoload :PROMOTION_TABS, "spree/backend_configuration/deprecated_tab_constants" + autoload :STOCK_TABS, "spree/backend_configuration/deprecated_tab_constants" + autoload :USER_TABS, "spree/backend_configuration/deprecated_tab_constants" # By default, this is set to +Spree::UnauthorizedRedirectHandler+. If you need your admin to behave # differently when a user is unauthorized, you can create your own class that respects the same interface. @@ -176,7 +176,7 @@ def menu_items @menu_items ||= [ MenuItem.new( label: :orders, - icon: admin_updated_navbar ? 'ri-inbox-line' : 'shopping-cart', + icon: admin_updated_navbar ? "ri-inbox-line" : "shopping-cart", condition: -> { can?(:admin, Spree::Order) }, match_path: %r{/( adjustments| @@ -188,79 +188,79 @@ def menu_items payments| return_authorizations| shipments - )}x, + )}x ), MenuItem.new( label: :products, - icon: admin_updated_navbar ? 'ri-price-tag-3-line' : 'th-large', + icon: admin_updated_navbar ? "ri-price-tag-3-line" : "th-large", condition: -> { can?(:admin, Spree::Product) }, - partial: 'spree/admin/shared/product_sub_menu', + partial: "spree/admin/shared/product_sub_menu", data_hook: :admin_product_sub_tabs, children: [ MenuItem.new( label: :products, condition: -> { can? :admin, Spree::Product }, - match_path: '/products', + match_path: "/products" ), MenuItem.new( label: :option_types, condition: -> { can? :admin, Spree::OptionType }, - match_path: '/option_types', + match_path: "/option_types" ), MenuItem.new( label: :properties, - condition: -> { can? :admin, Spree::Property }, + condition: -> { can? :admin, Spree::Property } ), MenuItem.new( label: :taxonomies, - condition: -> { can? :admin, Spree::Taxonomy }, + condition: -> { can? :admin, Spree::Taxonomy } ), MenuItem.new( url: :admin_taxons_path, condition: -> { can? :admin, Spree::Taxon }, label: :display_order, - match_path: '/taxons', - ), - ], + match_path: "/taxons" + ) + ] ), MenuItem.new( label: :stock, - icon: admin_updated_navbar ? 'ri-stack-line' : 'cubes', + icon: admin_updated_navbar ? "ri-stack-line" : "cubes", match_path: %r{/(stock_items)}, condition: -> { can?(:admin, Spree::StockItem) }, - url: :admin_stock_items_path, + url: :admin_stock_items_path ), MenuItem.new( label: :users, - icon: admin_updated_navbar ? 'ri-user-line' : 'user', + icon: admin_updated_navbar ? "ri-user-line" : "user", match_path: %r{/(users|store_credits)}, condition: -> { Spree.user_class && can?(:admin, Spree.user_class) }, - url: :admin_users_path, + url: :admin_users_path ), MenuItem.new( label: :settings, - icon: admin_updated_navbar ? 'ri-settings-line' : 'wrench', + icon: admin_updated_navbar ? "ri-settings-line" : "wrench", data_hook: :admin_settings_sub_tabs, - partial: 'spree/admin/shared/settings_sub_menu', + partial: "spree/admin/shared/settings_sub_menu", condition: -> { can? :admin, Spree::Store }, url: :admin_stores_path, children: [ MenuItem.new( label: :stores, condition: -> { can? :admin, Spree::Store }, - url: :admin_stores_path, + url: :admin_stores_path ), MenuItem.new( label: :payments, condition: -> { can? :admin, Spree::PaymentMethod }, - url: :admin_payment_methods_path, + url: :admin_payment_methods_path ), MenuItem.new( label: :taxes, condition: -> { can?(:admin, Spree::TaxCategory) || can?(:admin, Spree::TaxRate) }, url: :admin_tax_categories_path, - match_path: %r(tax_categories|tax_rates), + match_path: %r{tax_categories|tax_rates} ), MenuItem.new( label: :checkout, @@ -271,7 +271,7 @@ def menu_items can?(:show, Spree::AdjustmentReason) }, url: :admin_refund_reasons_path, - match_path: %r(refund_reasons|reimbursement_types|return_reasons|adjustment_reasons|store_credit_reasons) + match_path: %r{refund_reasons|reimbursement_types|return_reasons|adjustment_reasons|store_credit_reasons} ), MenuItem.new( label: :shipping, @@ -281,14 +281,14 @@ def menu_items can?(:admin, Spree::StockLocation) }, url: :admin_shipping_methods_path, - match_path: %r(shipping_methods|shipping_categories|stock_locations), + match_path: %r{shipping_methods|shipping_categories|stock_locations} ), MenuItem.new( label: :zones, condition: -> { can?(:admin, Spree::Zone) }, - url: :admin_zones_path, - ), - ], + url: :admin_zones_path + ) + ] ) ] end diff --git a/backend/lib/spree/backend_configuration/deprecated_tab_constants.rb b/backend/lib/spree/backend_configuration/deprecated_tab_constants.rb index 5cce5c1e181..ba8930e254f 100644 --- a/backend/lib/spree/backend_configuration/deprecated_tab_constants.rb +++ b/backend/lib/spree/backend_configuration/deprecated_tab_constants.rb @@ -4,26 +4,26 @@ "Spree::BackendConfiguration::*_TABS is deprecated. Please use Spree::BackendConfiguration::MenuItem(match_path:) instead." ) -Spree::BackendConfiguration::ORDER_TABS ||= [ +Spree::BackendConfiguration::ORDER_TABS = [ :orders, :payments, :creditcard_payments, :shipments, :credit_cards, :return_authorizations, :customer_returns, :adjustments, :customer_details ] -Spree::BackendConfiguration::PRODUCT_TABS ||= [ +Spree::BackendConfiguration::PRODUCT_TABS = [ :products, :option_types, :properties, :variants, :product_properties, :taxonomies, :taxons ] -Spree::BackendConfiguration::PROMOTION_TABS ||= [ +Spree::BackendConfiguration::PROMOTION_TABS = [ :promotions, :promotion_categories ] -Spree::BackendConfiguration::STOCK_TABS ||= [ +Spree::BackendConfiguration::STOCK_TABS = [ :stock_items ] -Spree::BackendConfiguration::USER_TABS ||= [ +Spree::BackendConfiguration::USER_TABS = [ :users, :store_credits ] -Spree::BackendConfiguration::CONFIGURATION_TABS ||= [ +Spree::BackendConfiguration::CONFIGURATION_TABS = [ :stores, :tax_categories, :tax_rates, :zones, :payment_methods, :shipping_methods, diff --git a/backend/lib/spree/backend_configuration/menu_item.rb b/backend/lib/spree/backend_configuration/menu_item.rb index 76f0fe5060b..78621c3bf05 100644 --- a/backend/lib/spree/backend_configuration/menu_item.rb +++ b/backend/lib/spree/backend_configuration/menu_item.rb @@ -94,7 +94,7 @@ def match_path?(request) def url url = @url.call if @url.respond_to?(:call) url ||= spree.public_send(@url) if @url.is_a?(Symbol) && spree.respond_to?(@url) - url ||= spree.send("admin_#{@label}_path") if @url.nil? && @label && spree.respond_to?("admin_#{@label}_path") + url ||= spree.send(:"admin_#{@label}_path") if @url.nil? && @label && spree.respond_to?(:"admin_#{@label}_path") url ||= @url.to_s url end diff --git a/backend/lib/spree_backend.rb b/backend/lib/spree_backend.rb index 962c031a338..1aba947452c 100644 --- a/backend/lib/spree_backend.rb +++ b/backend/lib/spree_backend.rb @@ -1,3 +1,3 @@ # frozen_string_literal: true -require 'spree/backend' +require "spree/backend" diff --git a/backend/solidus_backend.gemspec b/backend/solidus_backend.gemspec index 15783c7061d..605f5a63444 100644 --- a/backend/solidus_backend.gemspec +++ b/backend/solidus_backend.gemspec @@ -1,37 +1,37 @@ # frozen_string_literal: true -require_relative '../core/lib/spree/core/version.rb' +require_relative "../core/lib/spree/core/version" Gem::Specification.new do |s| - s.platform = Gem::Platform::RUBY - s.name = 'solidus_backend' - s.version = Spree.solidus_version - s.summary = 'Admin interface for the Solidus e-commerce framework.' + s.platform = Gem::Platform::RUBY + s.name = "solidus_backend" + s.version = Spree.solidus_version + s.summary = "Admin interface for the Solidus e-commerce framework." s.description = s.summary - s.author = 'Solidus Team' - s.email = 'contact@solidus.io' - s.homepage = 'http://solidus.io' - s.license = 'BSD-3-Clause' + s.author = "Solidus Team" + s.email = "contact@solidus.io" + s.homepage = "http://solidus.io" + s.license = "BSD-3-Clause" - s.metadata['rubygems_mfa_required'] = 'true' + s.metadata["rubygems_mfa_required"] = "true" s.files = `git ls-files -z`.split("\x0").reject do |f| f.match(%r{^(spec|bin)/}) end - s.required_ruby_version = '>= 3.1.0' - s.required_rubygems_version = '>= 1.8.23' + s.required_ruby_version = ">= 3.1.0" + s.required_rubygems_version = ">= 1.8.23" - s.add_dependency 'solidus_api', s.version - s.add_dependency 'solidus_core', s.version + s.add_dependency "solidus_api", s.version + s.add_dependency "solidus_core", s.version - s.add_dependency 'font-awesome-rails', '~> 4.0' - s.add_dependency 'jbuilder', '~> 2.8' - s.add_dependency 'jquery-rails' - s.add_dependency 'kaminari', '~> 1.1' - s.add_dependency 'responders' - s.add_dependency 'sassc-rails' + s.add_dependency "font-awesome-rails", "~> 4.0" + s.add_dependency "jbuilder", "~> 2.8" + s.add_dependency "jquery-rails" + s.add_dependency "kaminari", "~> 1.1" + s.add_dependency "responders" + s.add_dependency "sassc-rails" - s.add_dependency 'handlebars_assets', '~> 0.23' + s.add_dependency "handlebars_assets", "~> 0.23" end diff --git a/backend/spec/controllers/spree/admin/base_controller_spec.rb b/backend/spec/controllers/spree/admin/base_controller_spec.rb index 1deb00d5a72..ee106119cab 100644 --- a/backend/spec/controllers/spree/admin/base_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/base_controller_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Admin::BaseController, type: :controller do controller(Spree::Admin::BaseController) do def index authorize! :update, Spree::Order - render plain: 'test' + render plain: "test" end end @@ -17,14 +17,14 @@ def index it "redirects to unauthorized" do get :index - expect(response).to redirect_to '/unauthorized' + expect(response).to redirect_to "/unauthorized" end context "when an unauthorized redirect handler is provided" do around do |example| old_redirect_lambda = Spree::Admin::BaseController.unauthorized_redirect Spree.deprecator.silence do - Spree::Admin::BaseController.unauthorized_redirect = -> { redirect_to '/custom_unauthorized' } + Spree::Admin::BaseController.unauthorized_redirect = -> { redirect_to "/custom_unauthorized" } end example.run Spree.deprecator.silence do @@ -34,7 +34,7 @@ def index it "redirects to the custom unauthorized path" do get :index - expect(response).to redirect_to '/custom_unauthorized' + expect(response).to redirect_to "/custom_unauthorized" end end end diff --git a/backend/spec/controllers/spree/admin/cancellations_controller_spec.rb b/backend/spec/controllers/spree/admin/cancellations_controller_spec.rb index 88dc509ca08..dcc30e5521f 100644 --- a/backend/spec/controllers/spree/admin/cancellations_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/cancellations_controller_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Admin::CancellationsController do stub_authorization! describe "#index" do - subject { get :index, params: { order_id: order.number } } + subject { get :index, params: {order_id: order.number} } let(:order) { create(:order_ready_to_ship, line_items_count: 1) } @@ -20,7 +20,7 @@ context "existent order id not given" do it "redirects and flashes about the non-existent order" do - get :index, params: { order_id: 'non-existent-order' } + get :index, params: {order_id: "non-existent-order"} expect(response).to redirect_to(spree.admin_orders_path) expect(flash[:error]).to eql("Order is not found") end @@ -28,13 +28,13 @@ end describe "#cancel" do - subject { post :short_ship, params: { order_id: order.number, inventory_unit_ids: inventory_units.map(&:id) } } + subject { post :short_ship, params: {order_id: order.number, inventory_unit_ids: inventory_units.map(&:id)} } - let(:order) { create(:order_with_line_items, line_items_attributes: [{ quantity: 4 }]) } + let(:order) { create(:order_with_line_items, line_items_attributes: [{quantity: 4}]) } let(:referer) { "order_admin_page" } context "no inventory unit ids are provided" do - subject { post :short_ship, params: { order_id: order.number } } + subject { post :short_ship, params: {order_id: order.number} } it "redirects back" do subject @@ -43,7 +43,7 @@ it "sets an error message" do subject - expect(flash[:error]).to eq I18n.t('spree.no_inventory_selected') + expect(flash[:error]).to eq I18n.t("spree.no_inventory_selected") end end @@ -57,7 +57,7 @@ it "sets an error message" do subject - expect(flash[:error]).to eq I18n.t('spree.unable_to_find_all_inventory_units') + expect(flash[:error]).to eq I18n.t("spree.unable_to_find_all_inventory_units") end end @@ -71,7 +71,7 @@ it "sets an success message" do subject - expect(flash[:success]).to eq I18n.t('spree.inventory_canceled') + expect(flash[:success]).to eq I18n.t("spree.inventory_canceled") end it "creates a unit cancel" do @@ -80,7 +80,7 @@ it "cancels the inventory" do subject - expect(order.reload.inventory_units.map(&:state).uniq).to match_array(['canceled']) + expect(order.reload.inventory_units.map(&:state).uniq).to match_array(["canceled"]) end it "adjusts the order" do diff --git a/backend/spec/controllers/spree/admin/customer_returns_controller_spec.rb b/backend/spec/controllers/spree/admin/customer_returns_controller_spec.rb index 4fd763d209d..84e53e0d621 100644 --- a/backend/spec/controllers/spree/admin/customer_returns_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/customer_returns_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree module Admin @@ -8,11 +8,11 @@ module Admin stub_authorization! describe "#index" do - let(:order) { customer_return.order } + let(:order) { customer_return.order } let(:customer_return) { create(:customer_return) } subject do - get :index, params: { order_id: customer_return.order.to_param } + get :index, params: {order_id: customer_return.order.to_param} end before { subject } @@ -28,7 +28,7 @@ module Admin context "existent order id not given" do it "redirects and flashes about the non-existent order" do - get :index, params: { order_id: 'non-existent-order' } + get :index, params: {order_id: "non-existent-order"} expect(response).to redirect_to(spree.admin_orders_path) expect(flash[:error]).to eql("Order is not found") end @@ -36,12 +36,12 @@ module Admin describe "#new" do let(:order) { create(:shipped_order, line_items_count: 1) } - let!(:inactive_reimbursement_type) { create(:reimbursement_type, active: false) } - let!(:first_active_reimbursement_type) { create(:reimbursement_type) } + let!(:inactive_reimbursement_type) { create(:reimbursement_type, active: false) } + let!(:first_active_reimbursement_type) { create(:reimbursement_type) } let!(:second_active_reimbursement_type) { create(:reimbursement_type) } subject do - get :new, params: { order_id: order.to_param } + get :new, params: {order_id: order.to_param} end it "loads the order" do @@ -126,17 +126,17 @@ module Admin end describe "#edit" do - let(:order) { customer_return.order } + let(:order) { customer_return.order } let(:customer_return) { create(:customer_return, line_items_count: 3) } let!(:inactive_rma_reason) { create(:return_reason, active: false) } - let!(:accepted_return_item) { customer_return.return_items.order('id').first.tap(&:accept!) } - let!(:rejected_return_item) { customer_return.return_items.order('id').second.tap(&:reject!) } - let!(:manual_intervention_return_item) { customer_return.return_items.order('id').third.tap(&:require_manual_intervention!) } + let!(:accepted_return_item) { customer_return.return_items.order("id").first.tap(&:accept!) } + let!(:rejected_return_item) { customer_return.return_items.order("id").second.tap(&:reject!) } + let!(:manual_intervention_return_item) { customer_return.return_items.order("id").third.tap(&:require_manual_intervention!) } subject do - get :edit, params: { order_id: order.to_param, id: customer_return.to_param } + get :edit, params: {order_id: order.to_param, id: customer_return.to_param} end it "loads the order" do @@ -193,7 +193,7 @@ module Admin describe "#create" do let(:order) { create(:shipped_order, line_items_count: 1) } - let(:reception_status_event) { 'receive' } + let(:reception_status_event) { "receive" } let(:stock_location_id) { order.shipments.last.stock_location.id } let(:customer_return_params) do { @@ -220,22 +220,28 @@ module Admin expect(response).to redirect_to spree.edit_admin_order_customer_return_path(order, id: Spree::CustomerReturn.last.id) end - it 'executes the reception status event on the return items' do + it "executes the reception status event on the return items" do subject customer_return = Spree::CustomerReturn.last - expect(customer_return.return_items.map(&:reception_status).uniq).to eq ['received'] + expect(customer_return.return_items.map(&:reception_status).uniq).to eq ["received"] end context "missing stock location" do - let(:stock_location_id) { '' } - it { expect{ subject }.to_not change { Spree::CustomerReturn.count } } - it { subject; expect(response).to render_template(:new) } + let(:stock_location_id) { "" } + it { expect { subject }.to_not change { Spree::CustomerReturn.count } } + it { + subject + expect(response).to render_template(:new) + } end context "missing reception status event" do - let(:reception_status_event) { '' } - it { expect{ subject }.to_not change { Spree::CustomerReturn.count } } - it { subject; expect(response).to redirect_to spree.new_admin_order_customer_return_path(order) } + let(:reception_status_event) { "" } + it { expect { subject }.to_not change { Spree::CustomerReturn.count } } + it { + subject + expect(response).to redirect_to spree.new_admin_order_customer_return_path(order) + } end end end diff --git a/backend/spec/controllers/spree/admin/images_controller_spec.rb b/backend/spec/controllers/spree/admin/images_controller_spec.rb index 629d32da62a..bf187578d5d 100644 --- a/backend/spec/controllers/spree/admin/images_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/images_controller_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Admin::ImagesController, type: :controller do stub_authorization! it "cannot find a non-existent product" do - get :index, params: { product_id: "non-existent-product" } + get :index, params: {product_id: "non-existent-product"} expect(response).to redirect_to(spree.admin_products_path) expect(flash[:error]).to eql("Product is not found") end diff --git a/backend/spec/controllers/spree/admin/locale_controller_spec.rb b/backend/spec/controllers/spree/admin/locale_controller_spec.rb index 02a7c05b562..e34f5fa1b5b 100644 --- a/backend/spec/controllers/spree/admin/locale_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/locale_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" RSpec.describe Spree::Admin::LocaleController, type: :controller do stub_authorization! @@ -12,32 +12,32 @@ I18n.reload! end - context 'switch_to_locale specified' do + context "switch_to_locale specified" do let(:json_response) { JSON.parse(response.body, symbolize_names: true) } before do - get :set, params: { switch_to_locale:, format: :json } + get :set, params: {switch_to_locale:, format: :json} end - context 'available locale' do - let(:switch_to_locale) { 'fr' } + context "available locale" do + let(:switch_to_locale) { "fr" } - it 'sets locale and returns the location for the redirect' do + it "sets locale and returns the location for the redirect" do expect(I18n.locale).to eq :fr expect(session[:admin_locale]).to eq(switch_to_locale) - expect(json_response). - to eq({ locale: switch_to_locale, - location: spree.admin_url(host: 'test.host') }) + expect(json_response) + .to eq({locale: switch_to_locale, + location: spree.admin_url(host: "test.host")}) expect(response).to have_http_status(:ok) end end - context 'unavailable locale' do - let(:switch_to_locale) { 'klingon' } + context "unavailable locale" do + let(:switch_to_locale) { "klingon" } - it 'does not change locale and returns 404' do + it "does not change locale and returns 404" do expect(I18n.locale).to eq :en - expect(json_response).to eq({ locale: 'en', }) + expect(json_response).to eq({locale: "en"}) expect(response).to have_http_status(:not_found) end end diff --git a/backend/spec/controllers/spree/admin/missing_products_controller_spec.rb b/backend/spec/controllers/spree/admin/missing_products_controller_spec.rb index 5aa61c86935..e74b1a5ff9c 100644 --- a/backend/spec/controllers/spree/admin/missing_products_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/missing_products_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" # This test exists in this file because in the standard admin/products_controller spec # There is the stub_authorization call. This call is not triggered for this test because # the load_resource filter in Spree::Admin::ResourceController is prepended to the filter chain @@ -11,7 +11,7 @@ # Regression test for GH https://github.com/spree/spree/issues/538 it "cannot find a non-existent product" do - get :edit, params: { id: "non-existent-product" } + get :edit, params: {id: "non-existent-product"} expect(response).to redirect_to(spree.admin_products_path) expect(flash[:error]).to eql("Product is not found") end diff --git a/backend/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb b/backend/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb index 23a9bc79ec9..aef8a28964a 100644 --- a/backend/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb @@ -7,13 +7,13 @@ context "with authorization" do stub_authorization! - context '#edit' do - context 'when order has no shipping nor billing address' do + context "#edit" do + context "when order has no shipping nor billing address" do let(:order) { create(:order, number: "R123456789", ship_address: nil, bill_address: nil) } context "with a checkout_zone set as the country of Canada" do - let!(:united_states) { create(:country, iso: 'US', states_required: true) } - let!(:canada) { create(:country, iso: 'CA', states_required: true) } + let!(:united_states) { create(:country, iso: "US", states_required: true) } + let!(:canada) { create(:country, iso: "CA", states_required: true) } let!(:checkout_zone) { create(:zone, name: "Checkout Zone", countries: [canada]) } before do @@ -25,13 +25,13 @@ stub_spree_preferences(default_country_iso: Spree::Country.find_by!(iso: "CA").iso) end - it 'defaults the shipping address country to Canada' do - get :edit, params: { order_id: order.number } + it "defaults the shipping address country to Canada" do + get :edit, params: {order_id: order.number} expect(assigns(:order).shipping_address.country_id).to eq canada.id end - it 'defaults the billing address country to Canada' do - get :edit, params: { order_id: order.number } + it "defaults the billing address country to Canada" do + get :edit, params: {order_id: order.number} expect(assigns(:order).billing_address.country_id).to eq canada.id end end @@ -41,13 +41,13 @@ stub_spree_preferences(default_country_iso: Spree::Country.find_by!(iso: "US").iso) end - it 'defaults the shipping address country to nil' do - get :edit, params: { order_id: order.number } + it "defaults the shipping address country to nil" do + get :edit, params: {order_id: order.number} expect(assigns(:order).shipping_address.country_id).to be_nil end - it 'defaults the billing address country to nil' do - get :edit, params: { order_id: order.number } + it "defaults the billing address country to nil" do + get :edit, params: {order_id: order.number} expect(assigns(:order).billing_address.country_id).to be_nil end end @@ -55,7 +55,7 @@ end context "existent order id not given" do it "redirects and flashes about the non-existent order" do - get :edit, params: { order_id: 'non-existent-order' } + get :edit, params: {order_id: "non-existent-order"} expect(response).to redirect_to(spree.admin_orders_path) expect(flash[:error]).to eql("Order is not found") end @@ -71,64 +71,64 @@ it "updates + advances the order" do expect(contents).to receive(:update_cart) { true } expect(contents).to receive(:advance) { false } - attributes = { order_id: order.number, order: { email: "" } } + attributes = {order_id: order.number, order: {email: ""}} put :update, params: attributes end it "does refresh the shipment rates with all shipping methods" do expect(order).to receive(:refresh_shipment_rates) - attributes = { order_id: order.number, order: { email: "" } } + attributes = {order_id: order.number, order: {email: ""}} put :update, params: attributes end # Regression spec - context 'completed order' do + context "completed order" do let(:order) { create(:shipped_order) } let(:attributes) do { order_id: order.number, - guest_checkout: 'false', + guest_checkout: "false", user_id: order.user_id, - order: { email: "foo@bar.com" } + order: {email: "foo@bar.com"} } end - it 'allows the updating of an email address' do - expect { put :update, params: attributes }.to change { order.reload.email }.to eq 'foo@bar.com' + it "allows the updating of an email address" do + expect { put :update, params: attributes }.to change { order.reload.email }.to eq "foo@bar.com" expect(response).to be_redirect end end context "false guest checkout param" do - let!(:assigned_user){ create :user } + let!(:assigned_user) { create :user } it "attempts to associate the user" do attributes = { order_id: order.number, user_id: assigned_user.id, - guest_checkout: 'false', - order: { email: "" } + guest_checkout: "false", + order: {email: ""} } expect { put :update, params: attributes - }.to change{ order.reload.user }.to(assigned_user) + }.to change { order.reload.user }.to(assigned_user) end end context "not false guest checkout param" do it "does not attempt to associate the user" do allow(order).to receive_messages(update: true, - next: false, - refresh_shipment_rates: true) + next: false, + refresh_shipment_rates: true) attributes = { order_id: order.number, - order: { email: "foo@example.com" } + order: {email: "foo@example.com"} } expect { put :update, params: attributes - }.not_to change{ order.reload.user } + }.not_to change { order.reload.user } end end end diff --git a/backend/spec/controllers/spree/admin/orders_controller_spec.rb b/backend/spec/controllers/spree/admin/orders_controller_spec.rb index 0569abbb979..33f177b8e59 100644 --- a/backend/spec/controllers/spree/admin/orders_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/orders_controller_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'spec_helper' -require 'cancan' +require "spec_helper" +require "cancan" describe Spree::Admin::OrdersController, type: :controller do let!(:store) { create(:store) } @@ -15,15 +15,15 @@ let(:order) do mock_model( Spree::Order, - completed?: true, - total: 100, - number: 'R123456789', + completed?: true, + total: 100, + number: "R123456789", all_adjustments: adjustments, ship_address: mock_model(Spree::Address) ) end - let(:adjustments) { double('adjustments') } + let(:adjustments) { double("adjustments") } before do allow(Spree::Order).to receive_message_chain(:includes, find_by!: order) @@ -33,24 +33,24 @@ context "#approve" do it "approves an order" do expect(order.contents).to receive(:approve).with(user: controller.spree_current_user) - put :approve, params: { id: order.number } - expect(flash[:success]).to eq I18n.t('spree.order_approved') + put :approve, params: {id: order.number} + expect(flash[:success]).to eq I18n.t("spree.order_approved") end end context "#cancel" do it "cancels an order" do expect(order).to receive(:canceled_by).with(controller.spree_current_user) - put :cancel, params: { id: order.number } - expect(flash[:success]).to eq I18n.t('spree.order_canceled') + put :cancel, params: {id: order.number} + expect(flash[:success]).to eq I18n.t("spree.order_canceled") end end context "#resume" do it "resumes an order" do expect(order).to receive(:resume!) - put :resume, params: { id: order.number } - expect(flash[:success]).to eq I18n.t('spree.order_resumed') + put :resume, params: {id: order.number} + expect(flash[:success]).to eq I18n.t("spree.order_resumed") end end @@ -60,14 +60,14 @@ mail_message = double "Mail::Message" expect(Spree::OrderMailer).to receive(:confirm_email).with(order, true).and_return mail_message expect(mail_message).to receive :deliver_later - post :resend, params: { id: order.number } - expect(flash[:success]).to eq I18n.t('spree.order_email_resent') + post :resend, params: {id: order.number} + expect(flash[:success]).to eq I18n.t("spree.order_email_resent") end end context "pagination" do it "can page through the orders" do - get :index, params: { page: 2, per_page: 10 } + get :index, params: {page: 2, per_page: 10} expect(assigns[:orders].offset_value).to eq(10) expect(assigns[:orders].limit_value).to eq(10) end @@ -89,7 +89,7 @@ it "sets frontend_viewable to false" do expect(Spree::Core::Importer::Order).to receive(:import) - .with(nil, hash_including(frontend_viewable: false )) + .with(nil, hash_including(frontend_viewable: false)) .and_return(order) get :new end @@ -98,18 +98,18 @@ expect(Spree::Core::Importer::Order).to receive(:import) .with(user, hash_including(store_id: controller.current_store.id)) .and_return(order) - get :new, params: { user_id: user.id } + get :new, params: {user_id: user.id} end context "when a user_id is passed as a parameter" do - let(:user) { mock_model(Spree.user_class, ship_address: mock_model(Spree::Address), bill_address: nil) } + let(:user) { mock_model(Spree.user_class, ship_address: mock_model(Spree::Address), bill_address: nil) } before { allow(Spree.user_class).to receive_messages find_by: user } it "imports a new order and assigns the user to the order" do expect(Spree::Core::Importer::Order).to receive(:import) .with(user, hash_including(created_by_id: controller.spree_current_user.id)) .and_return(order) - get :new, params: { user_id: user.id } + get :new, params: {user_id: user.id} end end @@ -125,13 +125,13 @@ it "does not refresh rates if the order is completed" do allow(order).to receive_messages completed?: true expect(order).not_to receive :refresh_shipment_rates - get :edit, params: { id: order.number } + get :edit, params: {id: order.number} end it "does not refresh the rates if the order is incomplete" do allow(order).to receive_messages completed?: false expect(order).not_to receive :refresh_shipment_rates - get :edit, params: { id: order.number } + get :edit, params: {id: order.number} end context "when order does not have a ship address" do @@ -139,20 +139,20 @@ allow(order).to receive_messages ship_address: nil end - context 'when order_bill_address_used is true' do + context "when order_bill_address_used is true" do before { stub_spree_preferences(order_bill_address_used: true) } it "should redirect to the customer details page" do - get :edit, params: { id: order.number } + get :edit, params: {id: order.number} expect(response).to redirect_to(spree.edit_admin_order_customer_path(order)) end end - context 'when order_bill_address_used is false' do + context "when order_bill_address_used is false" do before { stub_spree_preferences(order_bill_address_used: false) } it "should redirect to the customer details page" do - get :edit, params: { id: order.number } + get :edit, params: {id: order.number} expect(response).to redirect_to(spree.edit_admin_order_customer_path(order)) end end @@ -161,86 +161,86 @@ describe "#show" do it "redirects to :edit" do - get :show, params: { id: order.number } + get :show, params: {id: order.number} expect(response).to redirect_to(spree.edit_admin_order_path(order.number)) end end - describe '#advance' do + describe "#advance" do subject do - put :advance, params: { id: order.number } + put :advance, params: {id: order.number} end - context 'when incomplete' do + context "when incomplete" do before do allow(order).to receive(:completed?).and_return(false, true) allow(order).to receive(:next).and_return(true, false) end - context 'when successful' do + context "when successful" do before { allow(order).to receive(:can_complete?).and_return(true) } - it 'messages and redirects' do + it "messages and redirects" do subject - expect(flash[:success]).to eq I18n.t('spree.order_ready_for_confirm') + expect(flash[:success]).to eq I18n.t("spree.order_ready_for_confirm") expect(response).to redirect_to(spree.confirm_admin_order_path(order)) end end - context 'when unsuccessful' do + context "when unsuccessful" do before do allow(order).to receive(:can_complete?).and_return(false) - allow(order).to receive(:errors).and_return(double(full_messages: ['invalid address', 'invalid email'])) + allow(order).to receive(:errors).and_return(double(full_messages: ["invalid address", "invalid email"])) end - it 'messages and redirects' do + it "messages and redirects" do subject - expect(flash[:error]).to eq 'invalid address, invalid email' + expect(flash[:error]).to eq "invalid address, invalid email" expect(response).to redirect_to(spree.confirm_admin_order_path(order)) end end end - context 'when already completed' do + context "when already completed" do before { allow(order).to receive_messages completed?: true } - it 'messages and redirects' do + it "messages and redirects" do subject - expect(flash[:notice]).to eq I18n.t('spree.order_already_completed') + expect(flash[:notice]).to eq I18n.t("spree.order_already_completed") expect(response).to redirect_to(spree.edit_admin_order_path(order)) end end end - context '#confirm' do + context "#confirm" do subject do - get :confirm, params: { id: order.number } + get :confirm, params: {id: order.number} end - context 'when in confirm' do + context "when in confirm" do before { allow(order).to receive_messages completed?: false, can_complete?: true } - it 'renders the confirm page' do + it "renders the confirm page" do subject expect(response.status).to eq 200 expect(response).to render_template(:confirm) end end - context 'when before confirm' do + context "when before confirm" do before { allow(order).to receive_messages completed?: false, can_complete?: false } - it 'renders the confirm_advance template (to allow refreshing of the order)' do + it "renders the confirm_advance template (to allow refreshing of the order)" do subject expect(response.status).to eq 200 expect(response).to render_template(:confirm_advance) end end - context 'when already completed' do + context "when already completed" do before { allow(order).to receive_messages completed?: true } - it 'redirects to edit' do + it "redirects to edit" do subject expect(response).to redirect_to(spree.edit_admin_order_path(order)) end @@ -249,43 +249,43 @@ context "#complete" do subject do - put :complete, params: { id: order.number } + put :complete, params: {id: order.number} end - context 'when successful' do + context "when successful" do before { allow(order).to receive(:complete!) } - it 'completes the order' do + it "completes the order" do expect(order).to receive(:complete!) subject end - it 'messages and redirects' do + it "messages and redirects" do subject - expect(flash[:success]).to eq I18n.t('spree.order_completed') + expect(flash[:success]).to eq I18n.t("spree.order_completed") expect(response).to redirect_to(spree.edit_admin_order_path(order)) end end - context 'with an StateMachines::InvalidTransition error' do + context "with an StateMachines::InvalidTransition error" do let(:order) { create(:order) } - it 'messages and redirects' do + it "messages and redirects" do subject expect(response).to redirect_to(spree.confirm_admin_order_path(order)) expect(flash[:error].to_s).to include("Cannot transition state via :complete from :cart") end end - context 'insufficient stock to complete the order' do + context "insufficient stock to complete the order" do before do expect(order).to receive(:complete!).and_raise Spree::Order::InsufficientStock end - it 'messages and redirects' do + it "messages and redirects" do subject expect(response).to redirect_to(spree.cart_admin_order_path(order)) - expect(flash[:error].to_s).to eq I18n.t('spree.insufficient_stock_for_order') + expect(flash[:error].to_s).to eq I18n.t("spree.insufficient_stock_for_order") end end end @@ -296,26 +296,26 @@ before do allow(controller).to receive_messages spree_current_user: user - user.spree_roles << Spree::Role.find_or_create_by(name: 'admin') + user.spree_roles << Spree::Role.find_or_create_by(name: "admin") create_list(:completed_order_with_totals, 2) expect(Spree::Order.count).to eq 2 end - context 'by line_items_variant_id_in' do + context "by line_items_variant_id_in" do it "does not display duplicated results" do - get :index, params: { q: { + get :index, params: {q: { line_items_variant_id_in: Spree::Order.first.variants.map(&:id) - } } + }} expect(assigns[:orders].size).to eq 1 end end - context 'by email' do + context "by email" do it "does not display duplicated results" do - get :index, params: { q: { + get :index, params: {q: { email_start: Spree::Order.first.email - } } + }} expect(assigns[:orders].size).to eq 1 expect(assigns[:orders][0].email).to eq(Spree::Order.first.email) end @@ -327,17 +327,17 @@ let!(:finalized_adjustment) { create(:adjustment, finalized: true, adjustable: order, order:) } it "changes all the finalized adjustments to unfinalized" do - post :unfinalize_adjustments, params: { id: order.number } + post :unfinalize_adjustments, params: {id: order.number} expect(finalized_adjustment.reload.finalized).to eq(false) end it "sets the flash success message" do - post :unfinalize_adjustments, params: { id: order.number } - expect(flash[:success]).to eql('All adjustments successfully unfinalized!') + post :unfinalize_adjustments, params: {id: order.number} + expect(flash[:success]).to eql("All adjustments successfully unfinalized!") end it "redirects back" do - post :unfinalize_adjustments, params: { id: order.number } + post :unfinalize_adjustments, params: {id: order.number} expect(response).to redirect_to(spree.admin_order_adjustments_path(order)) end end @@ -347,48 +347,48 @@ let!(:not_finalized_adjustment) { create(:adjustment, finalized: false, adjustable: order, order:) } it "changes all the unfinalized adjustments to finalized" do - post :finalize_adjustments, params: { id: order.number } + post :finalize_adjustments, params: {id: order.number} expect(not_finalized_adjustment.reload.finalized).to eq(true) end it "sets the flash success message" do - post :finalize_adjustments, params: { id: order.number } - expect(flash[:success]).to eql('All adjustments successfully finalized!') + post :finalize_adjustments, params: {id: order.number} + expect(flash[:success]).to eql("All adjustments successfully finalized!") end it "redirects back" do - post :finalize_adjustments, params: { id: order.number } + post :finalize_adjustments, params: {id: order.number} expect(response).to redirect_to(spree.admin_order_adjustments_path(order)) end end end - context '#authorize_admin' do + context "#authorize_admin" do let!(:user) { create(:user) } - let!(:order) { create(:completed_order_with_totals, number: 'R987654321') } + let!(:order) { create(:completed_order_with_totals, number: "R987654321") } before do allow(controller).to receive_messages spree_current_user: user end - it 'should grant access to users with an admin role' do - user.spree_roles << Spree::Role.find_or_create_by(name: 'admin') + it "should grant access to users with an admin role" do + user.spree_roles << Spree::Role.find_or_create_by(name: "admin") get :index expect(response).to render_template :index end - it 'should deny access to users without an admin role' do + it "should deny access to users without an admin role" do allow(user).to receive_messages has_spree_role?: false get :index - expect(response).to redirect_to('/unauthorized') + expect(response).to redirect_to("/unauthorized") end - context 'with only permissions on Order' do + context "with only permissions on Order" do stub_authorization! do |_ability| - can [:admin, :manage], Spree::Order, number: 'R987654321' + can [:admin, :manage], Spree::Order, number: "R987654321" end - it 'should restrict returned order(s) on index when using OrderSpecificAbility' do + it "should restrict returned order(s) on index when using OrderSpecificAbility" do number = order.number 3.times { create(:completed_order_with_totals) } @@ -397,8 +397,8 @@ allow(user).to receive_messages has_spree_role?: false get :index expect(response).to render_template :index - expect(assigns['orders'].size).to eq 1 - expect(assigns['orders'].first.number).to eq number + expect(assigns["orders"].size).to eq 1 + expect(assigns["orders"].first.number).to eq number end end end @@ -407,7 +407,7 @@ stub_authorization! it "cannot find non-existent order" do - get :edit, params: { id: 0 } + get :edit, params: {id: 0} expect(response).to redirect_to(spree.admin_orders_path) expect(flash[:error]).to eql("Order is not found") end diff --git a/backend/spec/controllers/spree/admin/payment_methods_controller_spec.rb b/backend/spec/controllers/spree/admin/payment_methods_controller_spec.rb index e815d5f3c7b..459decca987 100644 --- a/backend/spec/controllers/spree/admin/payment_methods_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/payment_methods_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree class GatewayWithPassword < PaymentMethod @@ -20,7 +20,7 @@ class GatewayWithPassword < PaymentMethod # regression test for https://github.com/spree/spree/issues/2094 it "does not clear password on update" do expect(payment_method.preferred_password).to eq("haxme") - put :update, params: { id: payment_method.id, payment_method: { type: payment_method.class.to_s, preferred_password: "" } } + put :update, params: {id: payment_method.id, payment_method: {type: payment_method.class.to_s, preferred_password: ""}} expect(response).to redirect_to(spree.edit_admin_payment_method_path(payment_method)) payment_method.reload @@ -30,13 +30,13 @@ class GatewayWithPassword < PaymentMethod context "tries to save invalid payment" do it "doesn't break, responds nicely" do - post :create, params: { payment_method: { name: "", type: "Spree::PaymentMethod::BogusCreditCard" } } + post :create, params: {payment_method: {name: "", type: "Spree::PaymentMethod::BogusCreditCard"}} end end it "can create a payment method of a valid type" do expect { - post :create, params: { payment_method: { name: "Test Method", type: "Spree::PaymentMethod::BogusCreditCard" } } + post :create, params: {payment_method: {name: "Test Method", type: "Spree::PaymentMethod::BogusCreditCard"}} }.to change(Spree::PaymentMethod, :count).by(1) expect(response).to be_redirect @@ -45,7 +45,7 @@ class GatewayWithPassword < PaymentMethod it "can not create a payment method of an invalid type" do expect { - post :create, params: { payment_method: { name: "Invalid Payment Method", type: "Spree::InvalidType" } } + post :create, params: {payment_method: {name: "Invalid Payment Method", type: "Spree::InvalidType"}} }.to change(Spree::PaymentMethod, :count).by(0) expect(response).to be_redirect @@ -78,7 +78,7 @@ class GatewayWithPassword < PaymentMethod end it { is_expected.to be_successful } - it { is_expected.to render_template "index" } + it { is_expected.to render_template "index" } it "respects the order of payment methods by position" do subject @@ -92,18 +92,18 @@ class GatewayWithPassword < PaymentMethod { id: payment_method.id, payment_method: { - name: 'Check', - type: 'Spree::PaymentMethod::Check' + name: "Check", + type: "Spree::PaymentMethod::Check" } } end - it 'updates the resource' do + it "updates the resource" do put(:update, params:) expect(response).to redirect_to(spree.edit_admin_payment_method_path(payment_method)) response_payment_method = Spree::PaymentMethod.find(payment_method.id) - expect(response_payment_method.name).to eql('Check') + expect(response_payment_method.name).to eql("Check") end end end diff --git a/backend/spec/controllers/spree/admin/payments_controller_spec.rb b/backend/spec/controllers/spree/admin/payments_controller_spec.rb index da351bcbeb3..39f4b1ab9e0 100644 --- a/backend/spec/controllers/spree/admin/payments_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/payments_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree module Admin @@ -12,7 +12,7 @@ module Admin let(:user) { create(:admin_user) } let(:order) { create(:order) } - describe '#create' do + describe "#create" do context "with a valid credit card" do let(:order) { create(:order_with_line_items, state: "payment") } let(:payment_method) { create(:credit_card_payment_method, available_to_admin: true, available_to_users: false) } @@ -27,7 +27,7 @@ module Admin name: "Test User", number: "4111 1111 1111 1111", expiry: "09 / #{Time.current.year + 1}", - verification_value: "123" + verification_value: "123" } } } @@ -39,12 +39,12 @@ module Admin it "should process payment correctly" do expect(order.payments.count).to eq(1) - expect(order.payments.last.state).to eq 'checkout' + expect(order.payments.last.state).to eq "checkout" expect(response).to redirect_to(spree.admin_order_payments_path(order)) - expect(order.reload.state).to eq('confirm') + expect(order.reload.state).to eq("confirm") end - context 'with credit card address fields' do + context "with credit card address fields" do let(:address) { build(:address) } let(:attributes) do @@ -55,17 +55,17 @@ module Admin let(:address_attributes) do { - 'name' => address.name, - 'address1' => address.address1, - 'city' => address.city, - 'country_id' => address.country_id, - 'state_id' => address.state_id, - 'zipcode' => address.zipcode, - 'phone' => address.phone + "name" => address.name, + "address1" => address.address1, + "city" => address.city, + "country_id" => address.country_id, + "state_id" => address.state_id, + "zipcode" => address.zipcode, + "phone" => address.phone } end - it 'associates the address' do + it "associates the address" do expect(order.payments.count).to eq(1) credit_card = order.payments.last.source expect(credit_card.address.as_json).to include(address_attributes) @@ -74,7 +74,7 @@ module Admin end end - describe '#new' do + describe "#new" do # Regression test for https://github.com/spree/spree/issues/3233 context "with a backend payment method" do context "and the payment method is active" do @@ -83,7 +83,7 @@ module Admin end it "loads the payment method" do - get :new, params: { order_id: order.number } + get :new, params: {order_id: order.number} expect(response.status).to eq(200) expect(assigns[:payment_methods]).to include(@payment_method) end @@ -95,7 +95,7 @@ module Admin end it "does not load the payment method" do - get :new, params: { order_id: order.number } + get :new, params: {order_id: order.number} expect(response.status).to eq(200) expect(assigns[:payment_methods]).to be_empty end @@ -105,7 +105,7 @@ module Admin check = create :check_payment_method, position: 2 credit_card = create :payment_method, position: 1 - get :new, params: { order_id: order.number } + get :new, params: {order_id: order.number} expect(assigns(:payment_methods)).to eq [ credit_card, check @@ -115,7 +115,7 @@ module Admin end end - describe '#index' do + describe "#index" do context "order has billing address" do before do order.bill_address = create(:address) @@ -124,18 +124,18 @@ module Admin context "order does not have payments" do it "redirect to new payments page" do - get :index, params: { amount: 100, order_id: order.number } + get :index, params: {amount: 100, order_id: order.number} expect(response).to redirect_to(spree.new_admin_order_payment_path(order)) end end context "order has payments" do before do - order.payments << create(:payment, amount: order.total, order:, state: 'completed') + order.payments << create(:payment, amount: order.total, order:, state: "completed") end it "shows the payments page" do - get :index, params: { amount: 100, order_id: order.number } + get :index, params: {amount: 100, order_id: order.number} expect(response.code).to eq "200" end end @@ -148,62 +148,66 @@ module Admin end it "should redirect to the customer details page" do - get :index, params: { amount: 100, order_id: order.number } + get :index, params: {amount: 100, order_id: order.number} expect(response).to redirect_to(spree.edit_admin_order_customer_path(order)) end end context "existent order id not given" do it "redirects and flashes about the non-existent order" do - get :index, params: { order_id: 'non-existent-order' } + get :index, params: {order_id: "non-existent-order"} expect(response).to redirect_to(spree.admin_orders_path) expect(flash[:error]).to eql("Order is not found") end end end - describe '#fire' do - describe 'authorization' do - let(:payment) { create(:payment, state: 'checkout', amount: 10) } + describe "#fire" do + describe "authorization" do + let(:payment) { create(:payment, state: "checkout", amount: 10) } let(:order) { payment.order } - context 'the user is authorized' do - class CaptureAllowedAbility - include CanCan::Ability + context "the user is authorized" do + let(:capture_allowed_ability) do + Class.new do + include CanCan::Ability - def initialize(_user) - can :capture, Spree::Payment + def initialize(_user) + can :capture, Spree::Payment + end end end before do - Spree::Ability.register_ability(CaptureAllowedAbility) + Spree::Ability.register_ability(capture_allowed_ability) end - it 'allows the action' do + it "allows the action" do expect { - post(:fire, params: { id: payment.to_param, e: 'capture', order_id: order.to_param }) - }.to change { payment.reload.state }.from('checkout').to('completed') + post(:fire, params: {id: payment.to_param, e: "capture", order_id: order.to_param}) + }.to change { payment.reload.state }.from("checkout").to("completed") end - context 'the user is not authorized' do - class CaptureNotAllowedAbility - include CanCan::Ability + context "the user is not authorized" do + let(:capture_not_allowed_ability) do + Class.new do + include CanCan::Ability - def initialize(_user) - cannot :capture, Spree::Payment + def initialize(_user) + cannot :capture, Spree::Payment + end end end before do - Spree::Ability.register_ability(CaptureNotAllowedAbility) + Spree::Ability.register_ability(capture_not_allowed_ability) end - it 'does not allow the action' do + it "does not allow the action" do expect { - post(:fire, params: { id: payment.to_param, e: 'capture', order_id: order.to_param }) + post(:fire, params: {id: payment.to_param, e: "capture", order_id: order.to_param}) }.to_not change { payment.reload.state } - expect(flash[:error]).to eq('Authorization Failure') + expect(flash[:error]).to eq("Authorization Failure") end end end diff --git a/backend/spec/controllers/spree/admin/prices_controller_spec.rb b/backend/spec/controllers/spree/admin/prices_controller_spec.rb index e2e785b24d2..dee67612fd2 100644 --- a/backend/spec/controllers/spree/admin/prices_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/prices_controller_spec.rb @@ -1,23 +1,23 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Admin::PricesController do stub_authorization! let!(:product) { create(:product) } - describe '#index' do + describe "#index" do context "when only given a product" do let(:product) { create(:product) } let!(:deleted_master_price) { create(:price, variant: product.master).tap(&:discard!) } - subject { get :index, params: { product_id: product.slug } } + subject { get :index, params: {product_id: product.slug} } it { is_expected.to be_successful } - it 'assigns usable instance variables' do + it "assigns usable instance variables" do subject expect(assigns(:search)).to be_a(Ransack::Search) expect(assigns(:variant_prices)).to be_empty @@ -33,11 +33,11 @@ let!(:deleted_variant_price) { create(:price, variant:).tap(&:discard!) } - subject { get :index, params: { product_id: product.slug, variant_id: variant.id } } + subject { get :index, params: {product_id: product.slug, variant_id: variant.id} } it { is_expected.to be_successful } - it 'assigns usable instance variables' do + it "assigns usable instance variables" do subject expect(assigns(:search)).to be_a(Ransack::Search) expect(assigns(:variant_prices)).to eq(product.prices.kept.for_variant) @@ -48,7 +48,7 @@ end end context "existent product id not given" do - subject { get :index, params: { product_id: 'non-existent-product' } } + subject { get :index, params: {product_id: "non-existent-product"} } it "cannot find non-existent product" do subject diff --git a/backend/spec/controllers/spree/admin/product_properties_controller_spec.rb b/backend/spec/controllers/spree/admin/product_properties_controller_spec.rb index b373b85c9d4..d88e9c555e0 100644 --- a/backend/spec/controllers/spree/admin/product_properties_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/product_properties_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree module Admin @@ -13,7 +13,7 @@ module Admin context "no option values are provided" do let(:product) { create(:product) } let(:parameters) do - { product_id: product.to_param } + {product_id: product.to_param} end before { subject } @@ -29,10 +29,10 @@ module Admin end context "option values are provided" do - let(:size) { create(:option_type, name: 'size') } + let(:size) { create(:option_type, name: "size") } let(:product) { create(:product, option_types: [size]) } - let(:size_small) { create(:option_value, name: 'small', option_type: size) } - let(:size_large) { create(:option_value, name: 'large', option_type: size) } + let(:size_small) { create(:option_value, name: "small", option_type: size) } + let(:size_large) { create(:option_value, name: "large", option_type: size) } let!(:first_rule) { create(:variant_property_rule, product:, option_value: size_small) } context "no rules match the option values" do @@ -68,7 +68,7 @@ module Admin context "existent product id not given" do let(:parameters) do { - product_id: 'non-existent-product' + product_id: "non-existent-product" } end diff --git a/backend/spec/controllers/spree/admin/products_controller_spec.rb b/backend/spec/controllers/spree/admin/products_controller_spec.rb index 867a83378ee..58d4598cf44 100644 --- a/backend/spec/controllers/spree/admin/products_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/products_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Admin::ProductsController, type: :controller do stub_authorization! @@ -11,29 +11,29 @@ # Regression test for https://github.com/spree/spree/issues/1259 it "can find a product by SKU" do product = create(:product, sku: "ABC123") - get :index, params: { q: { sku_start: "ABC123" } } + get :index, params: {q: {sku_start: "ABC123"}} expect(assigns[:collection]).not_to be_empty expect(assigns[:collection]).to include(product) end # Regression test for https://github.com/spree/spree/issues/1903 - context 'when soft deleted products exist' do + context "when soft deleted products exist" do let!(:soft_deleted_product) { create(:product, sku: "ABC123") } before { soft_deleted_product.discard } - context 'when params[:q][:with_discarded] is not set' do - let(:params) { { q: {} } } + context "when params[:q][:with_discarded] is not set" do + let(:params) { {q: {}} } - it 'filters out soft-deleted products by default' do + it "filters out soft-deleted products by default" do get(:index, params:) expect(assigns[:collection]).to_not include(soft_deleted_product) end end context 'when params[:q][:with_discarded] is set to "true"' do - let(:params) { { q: { with_discarded: 'true' } } } + let(:params) { {q: {with_discarded: "true"}} } - it 'includes soft-deleted products' do + it "includes soft-deleted products" do get(:index, params:) expect(assigns[:collection]).to include(soft_deleted_product) end @@ -45,7 +45,7 @@ context "adding properties to a product" do let!(:product) { create(:product) } specify do - put :update, params: { id: product.to_param, product: { product_properties_attributes: { "1" => { property_name: "Foo", value: "bar" } } } } + put :update, params: {id: product.to_param, product: {product_properties_attributes: {"1" => {property_name: "Foo", value: "bar"}}}} expect(flash[:success]).to eq("Product #{product.name.inspect} has been successfully updated!") end end @@ -58,13 +58,13 @@ it "creates a product" do post :create, params: { - product: { - name: "Product #1 - 9632", - description: "As seen on TV!", - price: 19.99, - shipping_category_id: Spree::ShippingCategory.first.id, - } - } + product: { + name: "Product #1 - 9632", + description: "As seen on TV!", + price: 19.99, + shipping_category_id: Spree::ShippingCategory.first.id + } + } expect(flash[:success]).to eq("Product \"Product #1 - 9632\" has been successfully created!") end @@ -73,14 +73,14 @@ it "creates a product with a taxon" do post :create, params: { - product: { - name: "Product #1 - 9632", - description: "As seen on TV!", - price: 19.99, - shipping_category_id: Spree::ShippingCategory.first.id, - taxon_ids: first_taxon.id.to_s - } - } + product: { + name: "Product #1 - 9632", + description: "As seen on TV!", + price: 19.99, + shipping_category_id: Spree::ShippingCategory.first.id, + taxon_ids: first_taxon.id.to_s + } + } expect(flash[:success]).to eq("Product \"Product #1 - 9632\" has been successfully created!") end @@ -89,14 +89,14 @@ it "creates a product with multiple taxons" do post :create, params: { - product: { - name: "Product #1 - 9632", - description: "As seen on TV!", - price: 19.99, - shipping_category_id: Spree::ShippingCategory.first.id, - taxon_ids: "#{first_taxon.id}, #{second_taxon.id}" - } - } + product: { + name: "Product #1 - 9632", + description: "As seen on TV!", + price: 19.99, + shipping_category_id: Spree::ShippingCategory.first.id, + taxon_ids: "#{first_taxon.id}, #{second_taxon.id}" + } + } expect(flash[:success]).to eq("Product \"Product #1 - 9632\" has been successfully created!") end end @@ -108,7 +108,7 @@ let(:first_taxon) { create(:taxon) } it "adds a single taxon to a product" do - put :update, params: { id: product.to_param, product: { taxon_ids: first_taxon.id.to_s } } + put :update, params: {id: product.to_param, product: {taxon_ids: first_taxon.id.to_s}} expect(flash[:success]).to eq("Product #{product.name.inspect} has been successfully updated!") end @@ -116,7 +116,7 @@ let(:second_taxon) { create(:taxon) } it "adds multiple taxons to a product" do - put :update, params: { id: product.to_param, product: { taxon_ids: "#{first_taxon.id}, #{second_taxon.id}" } } + put :update, params: {id: product.to_param, product: {taxon_ids: "#{first_taxon.id}, #{second_taxon.id}"}} expect(flash[:success]).to eq("Product #{product.name.inspect} has been successfully updated!") end end @@ -169,12 +169,12 @@ it "creates a variant property rule value for the 'First' value" do subject - expect(product.variant_property_rule_values.find_by(value: 'First')).to_not be_nil + expect(product.variant_property_rule_values.find_by(value: "First")).to_not be_nil end it "creates a variant property rule value for the 'Second' value" do subject - expect(product.variant_property_rule_values.find_by(value: 'Second')).to_not be_nil + expect(product.variant_property_rule_values.find_by(value: "Second")).to_not be_nil end it "redirects to the product properties page" do @@ -233,12 +233,12 @@ it "creates the 'First Edit' value" do subject - expect(rule.values.find_by(value: 'First Edit')).to_not be_nil + expect(rule.values.find_by(value: "First Edit")).to_not be_nil end it "creates the 'Second Edit' value" do subject - expect(rule.values.find_by(value: 'Second Edit')).to_not be_nil + expect(rule.values.find_by(value: "Second Edit")).to_not be_nil end it "redirects to the product properties page" do @@ -252,7 +252,7 @@ it "duplicates the product" do expect do - post :clone, params: { id: product.id } + post :clone, params: {id: product.id} end.to change { Spree::Product.count }.by(1) end end @@ -266,7 +266,7 @@ end it "deletes all the variants (including master) for the product" do - delete :destroy, params: { id: product } + delete :destroy, params: {id: product} expect(product.reload.deleted_at).not_to be_nil product.variants_including_master.each do |variant| expect(variant.reload.deleted_at).not_to be_nil diff --git a/backend/spec/controllers/spree/admin/refunds_controller_spec.rb b/backend/spec/controllers/spree/admin/refunds_controller_spec.rb index 8a6e12d1fa5..98873d68b2f 100644 --- a/backend/spec/controllers/spree/admin/refunds_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/refunds_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Admin::RefundsController do stub_authorization! @@ -29,7 +29,7 @@ context "and no Spree::Core::GatewayError is raised" do it "creates a refund record" do - expect{ subject }.to change(Spree::Refund, :count).by(1) + expect { subject }.to change(Spree::Refund, :count).by(1) end it "calls #perform!" do @@ -41,18 +41,18 @@ context "a Spree::Core::GatewayError is raised" do before do - expect_any_instance_of(Spree::Refund). - to receive(:process!). - and_raise(Spree::Core::GatewayError.new('An error has occurred')) + expect_any_instance_of(Spree::Refund) + .to receive(:process!) + .and_raise(Spree::Core::GatewayError.new("An error has occurred")) end it "does not create a refund record" do - expect{ subject }.to_not change { Spree::Refund.count } + expect { subject }.to_not change { Spree::Refund.count } end it "sets an error message with the correct text" do subject - expect(flash[:error]).to eq 'An error has occurred' + expect(flash[:error]).to eq "An error has occurred" end it { is_expected.to render_template(:new) } diff --git a/backend/spec/controllers/spree/admin/reimbursements_controller_spec.rb b/backend/spec/controllers/spree/admin/reimbursements_controller_spec.rb index 1f0829f79b5..9b0b0f87ee0 100644 --- a/backend/spec/controllers/spree/admin/reimbursements_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/reimbursements_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Admin::ReimbursementsController, type: :controller do stub_authorization! @@ -12,18 +12,18 @@ let(:user) { stub_model(Spree::LegacyUser, has_spree_role?: true, id: 1) } before do - allow_any_instance_of(described_class).to receive(:spree_current_user). - and_return(user) + allow_any_instance_of(described_class).to receive(:spree_current_user) + .and_return(user) end - describe '#edit' do + describe "#edit" do let(:reimbursement) { create(:reimbursement) } let(:order) { reimbursement.order } let!(:active_stock_location) { create(:stock_location, active: true) } let!(:inactive_stock_location) { create(:stock_location, active: false) } subject do - get :edit, params: { order_id: order.to_param, id: reimbursement.to_param } + get :edit, params: {order_id: order.to_param, id: reimbursement.to_param} end it "loads all the active stock locations" do @@ -33,7 +33,7 @@ end end - describe '#create' do + describe "#create" do let(:customer_return) { create(:customer_return, line_items_count: 1) } let(:order) { customer_return.order } let(:return_item) { customer_return.return_items.first } @@ -41,48 +41,48 @@ before { return_item.receive! } subject do - post :create, params: { order_id: order.to_param, build_from_customer_return_id: customer_return.id } + post :create, params: {order_id: order.to_param, build_from_customer_return_id: customer_return.id} end - it 'creates the reimbursement' do + it "creates the reimbursement" do expect { subject }.to change { order.reimbursements.count }.by(1) expect(assigns(:reimbursement).return_items.to_a).to eq customer_return.return_items.to_a end - it 'order is recalculated' do - expect { subject }.to change { order.reload.payment_state }.from('paid').to('credit_owed') + it "order is recalculated" do + expect { subject }.to change { order.reload.payment_state }.from("paid").to("credit_owed") end - it 'redirects to the edit page' do + it "redirects to the edit page" do subject expect(response).to redirect_to(spree.edit_admin_order_reimbursement_path(order, assigns(:reimbursement))) end - context 'when create fails' do + context "when create fails" do before do allow_any_instance_of(Spree::Reimbursement).to receive(:valid?) do |reimbursement, *_args| - reimbursement.errors.add(:base, 'something bad happened') + reimbursement.errors.add(:base, "something bad happened") false end end - context 'when a referer header is present' do + context "when a referer header is present" do let(:referer) { spree.edit_admin_order_customer_return_path(order, customer_return) } - it 'redirects to the referer' do + it "redirects to the referer" do request.env["HTTP_REFERER"] = referer expect { - post :create, params: { order_id: order.to_param } + post :create, params: {order_id: order.to_param} }.to_not change { Spree::Reimbursement.count } expect(response).to redirect_to(referer) expect(flash[:error]).to eq("something bad happened") end end - context 'when a referer header is not present' do - it 'redirects to the admin root' do + context "when a referer header is not present" do + it "redirects to the admin root" do expect { - post :create, params: { order_id: order.to_param } + post :create, params: {order_id: order.to_param} }.to_not change { Spree::Reimbursement.count } expect(response).to redirect_to(spree.admin_path) expect(flash[:error]).to eq("something bad happened") @@ -99,15 +99,15 @@ let(:payment) { order.payments.first } subject do - post :perform, params: { order_id: order.to_param, id: reimbursement.to_param } + post :perform, params: {order_id: order.to_param, id: reimbursement.to_param} end - it 'redirects to customer return page' do + it "redirects to customer return page" do subject expect(response).to redirect_to spree.admin_order_reimbursement_path(order, reimbursement) end - it 'performs the reimbursement' do + it "performs the reimbursement" do expect { subject }.to change { payment.refunds.count }.by(1) @@ -118,16 +118,16 @@ context "a Spree::Core::GatewayError is raised" do before(:each) do def controller.perform - raise Spree::Core::GatewayError.new('An error has occurred') + raise Spree::Core::GatewayError.new("An error has occurred") end end it "sets an error message with the correct text" do subject - expect(flash[:error]).to eq 'An error has occurred' + expect(flash[:error]).to eq "An error has occurred" end - it 'redirects to the edit page' do + it "redirects to the edit page" do subject redirect_path = spree.edit_admin_order_reimbursement_path(order, assigns(:reimbursement)) expect(response).to redirect_to(redirect_path) diff --git a/backend/spec/controllers/spree/admin/resource_controller_spec.rb b/backend/spec/controllers/spree/admin/resource_controller_spec.rb index 90f392686ba..3ced50d6ec7 100644 --- a/backend/spec/controllers/spree/admin/resource_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/resource_controller_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree module Admin class WidgetsController < Spree::Admin::ResourceController - prepend_view_path('spec/test_views') + prepend_view_path("spec/test_views") def model_class Widget @@ -40,7 +40,8 @@ class Widget < ActiveRecord::Base before_destroy :check_destroy_constraints def check_destroy_constraints - return unless name == 'undestroyable' + return unless name == "undestroyable" + errors.add :base, "You can't destroy undestroyable things!" errors.add :base, "Terrible things might happen." throw(:abort) @@ -72,137 +73,137 @@ def check_destroy_constraints Rails.application.reload_routes! end - describe '#new' do + describe "#new" do subject do get :new end - it 'succeeds' do + it "succeeds" do subject expect(response).to be_successful end end - describe '#edit' do - let(:widget) { Widget.create!(name: 'a widget') } + describe "#edit" do + let(:widget) { Widget.create!(name: "a widget") } subject do - get :edit, params: { id: widget.to_param } + get :edit, params: {id: widget.to_param} end - it 'succeeds' do + it "succeeds" do subject expect(response).to be_successful end end - describe '#create' do + describe "#create" do let(:params) do - { widget: { name: 'a widget' } } + {widget: {name: "a widget"}} end subject { post :create, params: } - it 'creates the resource' do + it "creates the resource" do expect { subject }.to change { Widget.count }.by(1) end - context 'failure' do + context "failure" do let(:params) do - { widget: { name: '' } } # blank name generates an error + {widget: {name: ""}} # blank name generates an error end - it 'sets a flash error' do + it "sets a flash error" do subject - expect(flash[:error]).to eq assigns(:widget).errors.full_messages.join(', ') + expect(flash[:error]).to eq assigns(:widget).errors.full_messages.join(", ") end end - context 'without any parameters' do + context "without any parameters" do let(:params) { {} } before do - allow_any_instance_of(Widget).to receive(:name).and_return('some name') + allow_any_instance_of(Widget).to receive(:name).and_return("some name") end - it 'creates the resource' do + it "creates the resource" do expect { subject }.to change { Widget.count }.by(1) end end end - describe '#update' do - let(:widget) { Widget.create!(name: 'a widget') } + describe "#update" do + let(:widget) { Widget.create!(name: "a widget") } let(:params) do { id: widget.to_param, - widget: { name: 'widget renamed' } + widget: {name: "widget renamed"} } end subject { put :update, params: } - it 'updates the resource' do - expect { subject }.to change { widget.reload.name }.from('a widget').to('widget renamed') + it "updates the resource" do + expect { subject }.to change { widget.reload.name }.from("a widget").to("widget renamed") end - context 'failure' do + context "failure" do let(:params) do { id: widget.to_param, - widget: { name: '' }, # a blank name will trigger a validation error + widget: {name: ""} # a blank name will trigger a validation error } end - it 'sets a flash error' do + it "sets a flash error" do subject - expect(flash[:error]).to eq assigns(:widget).errors.full_messages.join(', ') + expect(flash[:error]).to eq assigns(:widget).errors.full_messages.join(", ") end end - context 'resource invalid' do + context "resource invalid" do before do allow_any_instance_of(Widget).to receive(:update).and_raise(ActiveRecord::RecordInvalid) end - it 'returns to edit page with error' do + it "returns to edit page with error" do put(:update, params:) - expect(flash[:error]).to eq('Record invalid') + expect(flash[:error]).to eq("Record invalid") end end end - describe '#destroy' do - let!(:widget) { Widget.create!(name: 'a widget') } - let(:params) { { id: widget.id } } + describe "#destroy" do + let!(:widget) { Widget.create!(name: "a widget") } + let(:params) { {id: widget.id} } subject { delete :destroy, params: } - it 'destroys the resource' do + it "destroys the resource" do expect { subject }.to change { Widget.count }.from(1).to(0) end - context 'failure' do - let(:widget) { Widget.create!(name: 'undestroyable') } - let(:params) { { id: widget.id } } + context "failure" do + let(:widget) { Widget.create!(name: "undestroyable") } + let(:params) { {id: widget.id} } - context 'js format' do - subject { delete :destroy, params:, format: 'js' } + context "js format" do + subject { delete :destroy, params:, format: "js" } - it 'responds with error message' do + it "responds with error message" do subject expect(response).to be_unprocessable expect(response.body).to eq assigns(:widget).errors.full_messages.to_sentence end end - context 'html format' do + context "html format" do subject { delete :destroy, params: } - it 'responds with error message' do + it "responds with error message" do subject expect(response).to be_redirect expect(flash[:error]).to eq assigns(:widget).errors.full_messages.to_sentence @@ -211,85 +212,85 @@ def check_destroy_constraints end end - describe '#update_positions' do - let(:widget_1) { Widget.create!(name: 'widget 1', position: 1) } - let(:widget_2) { Widget.create!(name: 'widget 2', position: 2) } + describe "#update_positions" do + let(:widget_1) { Widget.create!(name: "widget 1", position: 1) } + let(:widget_2) { Widget.create!(name: "widget 2", position: 2) } subject do - post :update_positions, params: { id: widget_1.to_param, - positions: { widget_1.id => '2', widget_2.id => '1' }, format: 'js' } + post :update_positions, params: {id: widget_1.to_param, + positions: {widget_1.id => "2", widget_2.id => "1"}, format: "js"} end - it 'updates the position of widget 1' do + it "updates the position of widget 1" do expect { subject }.to change { widget_1.reload.position }.from(1).to(2) end - it 'updates the position of widget 2' do + it "updates the position of widget 2" do expect { subject }.to change { widget_2.reload.position }.from(2).to(1) end - context 'passing a not persisted item' do + context "passing a not persisted item" do subject do - post :update_positions, params: { id: widget_1.to_param, - positions: { widget_1.id => '2', widget_2.id => '1', 'widget' => '3' }, format: 'js' } + post :update_positions, params: {id: widget_1.to_param, + positions: {widget_1.id => "2", widget_2.id => "1", "widget" => "3"}, format: "js"} end - it 'only updates the position of persisted attributes' do + it "only updates the position of persisted attributes" do subject - expect(Widget.all.order('position')).to eq [widget_2, widget_1] + expect(Widget.all.order("position")).to eq [widget_2, widget_1] end end context "with take care of acts_as_list's after update callback" do - let(:widget_1) { Widget.create!(id: 4, name: 'widget 4', position: 1) } - let(:widget_2) { Widget.create!(id: 2, name: 'widget 3', position: 2) } - let(:widget_3) { Widget.create!(id: 1, name: 'widget 2', position: 3) } - let(:widget_4) { Widget.create!(id: 3, name: 'widget 1', position: 4) } + let(:widget_1) { Widget.create!(id: 4, name: "widget 4", position: 1) } + let(:widget_2) { Widget.create!(id: 2, name: "widget 3", position: 2) } + let(:widget_3) { Widget.create!(id: 1, name: "widget 2", position: 3) } + let(:widget_4) { Widget.create!(id: 3, name: "widget 1", position: 4) } subject do - post :update_positions, params: { id: widget_1.to_param, - positions: { widget_3.id => '4', widget_2.id => '3', widget_4.id => '1', widget_1.id => '2' }, format: 'js' } + post :update_positions, params: {id: widget_1.to_param, + positions: {widget_3.id => "4", widget_2.id => "3", widget_4.id => "1", widget_1.id => "2"}, format: "js"} end - it 'updates the position of all widgets' do + it "updates the position of all widgets" do subject - expect(Widget.all.order('position').map(&:id)).to eq [widget_4, widget_1, widget_2, widget_3].map(&:id) + expect(Widget.all.order("position").map(&:id)).to eq [widget_4, widget_1, widget_2, widget_3].map(&:id) end context "not passing all elements" do subject do - post :update_positions, params: { id: widget_1.to_param, - positions: { widget_3.id => '1', widget_2.id => '2', widget_4.id => '3' }, format: 'js' } + post :update_positions, params: {id: widget_1.to_param, + positions: {widget_3.id => "1", widget_2.id => "2", widget_4.id => "3"}, format: "js"} end - it 'updates the position of all widgets' do + it "updates the position of all widgets" do widget_1 # trigger the creation widget_2 # trigger the creation widget_3 # trigger the creation widget_4 # trigger the creation - expect(Widget.all.order('position').map(&:id)).to eq [widget_1, widget_2, widget_3, widget_4].map(&:id) + expect(Widget.all.order("position").map(&:id)).to eq [widget_1, widget_2, widget_3, widget_4].map(&:id) subject - expect(Widget.all.order('position').pluck(:position).uniq).to eq [1, 2, 3, 4] # trivial test to show no duplicate position integer - expect(Widget.all.order('position').map(&:id)).to eq [widget_3, widget_2, widget_4, widget_1].map(&:id) + expect(Widget.all.order("position").pluck(:position).uniq).to eq [1, 2, 3, 4] # trivial test to show no duplicate position integer + expect(Widget.all.order("position").map(&:id)).to eq [widget_3, widget_2, widget_4, widget_1].map(&:id) end end end end - describe 'rescue_from ActveRecord::RecordNotFound' do - let(:widget) { Widget.create!(name: 'a widget') } + describe "rescue_from ActveRecord::RecordNotFound" do + let(:widget) { Widget.create!(name: "a widget") } subject do - get :edit, params: { id: widget.to_param } + get :edit, params: {id: widget.to_param} end - it 'shows an error message with a reference to the model that was not found and redirect to the collection' do + it "shows an error message with a reference to the model that was not found and redirect to the collection" do allow(controller).to receive(:edit) { Spree::Product.find(123) } subject - expect(response).to redirect_to('/admin/widgets') - expect(flash[:error]).to eql('Product is not found') + expect(response).to redirect_to("/admin/widgets") + expect(flash[:error]).to eql("Product is not found") end end diff --git a/backend/spec/controllers/spree/admin/return_authorizations_controller_spec.rb b/backend/spec/controllers/spree/admin/return_authorizations_controller_spec.rb index 96ed7e65768..ce2020bddad 100644 --- a/backend/spec/controllers/spree/admin/return_authorizations_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/return_authorizations_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Admin::ReturnAuthorizationsController, type: :controller do stub_authorization! @@ -8,54 +8,54 @@ # Regression test for https://github.com/spree/spree/issues/1370 #3 let!(:order) { create(:shipped_order, line_items_count: 3) } let!(:return_reason) { create(:return_reason) } - let(:inventory_unit_1) { order.inventory_units.order('id asc')[0] } - let(:inventory_unit_2) { order.inventory_units.order('id asc')[1] } - let(:inventory_unit_3) { order.inventory_units.order('id asc')[2] } + let(:inventory_unit_1) { order.inventory_units.order("id asc")[0] } + let(:inventory_unit_2) { order.inventory_units.order("id asc")[1] } + let(:inventory_unit_3) { order.inventory_units.order("id asc")[2] } - describe '#fire' do + describe "#fire" do let(:return_authorization) { create(:return_authorization, order:) } - context 'with the event parameter set' do + context "with the event parameter set" do let(:params) do { id: return_authorization.to_param, order_id: return_authorization.order.to_param, - e: event, + e: event } end - context 'when event method exists on return authorization' do - let(:event) { 'cancel' } + context "when event method exists on return authorization" do + let(:event) { "cancel" } - it 'sends method with ! to return authorization and redirect back' do + it "sends method with ! to return authorization and redirect back" do get(:fire, params:) expect(response).to redirect_to(admin_order_return_authorizations_path(order)) - expect(flash[:success]).to eq 'Return merchandise authorization updated' + expect(flash[:success]).to eq "Return merchandise authorization updated" end end - context 'when event method does not exist on return authorization' do - let(:event) { 'do_something_crazy' } + context "when event method does not exist on return authorization" do + let(:event) { "do_something_crazy" } - it 'redirects back with an error message' do + it "redirects back with an error message" do get(:fire, params:) expect(response).to redirect_to(admin_order_return_authorizations_path(order)) - expect(flash[:error]).to eq 'Cannot perform this action on return merchandise authorization' + expect(flash[:error]).to eq "Cannot perform this action on return merchandise authorization" end end - context 'when event method exists but it is not a state machine event' do - let(:event) { 'destroy' } + context "when event method exists but it is not a state machine event" do + let(:event) { "destroy" } - it 'redirects back with an error message' do + it "redirects back with an error message" do expect(return_authorization).not_to receive :destroy! get(:fire, params:) expect(response).to redirect_to(admin_order_return_authorizations_path(order)) - expect(flash[:error]).to eq 'Cannot perform this action on return merchandise authorization' + expect(flash[:error]).to eq "Cannot perform this action on return merchandise authorization" end end end @@ -70,7 +70,7 @@ let(:return_authorization) { return_item.return_authorization } it "loads all the active rma reasons" do - get :edit, params: { id: return_authorization.to_param, order_id: return_authorization.order.to_param } + get :edit, params: {id: return_authorization.to_param, order_id: return_authorization.order.to_param} expect(assigns(:reasons)).to include(return_reason) expect(assigns(:reasons)).to include(inactive_rma_reason) expect(assigns(:reasons)).not_to include(other_inactive_rma_reason) @@ -81,50 +81,50 @@ let(:return_authorization) { create(:return_authorization, reason: return_reason) } it "loads all the active rma reasons" do - get :edit, params: { id: return_authorization.to_param, order_id: return_authorization.order.to_param } + get :edit, params: {id: return_authorization.to_param, order_id: return_authorization.order.to_param} expect(assigns(:reasons)).to eq [return_reason] end end context "return authorization doesn't have an associated reason" do it "loads all the active rma reasons" do - get :new, params: { order_id: order.to_param } + get :new, params: {order_id: order.to_param} expect(assigns(:reasons)).to eq [return_reason] end end end describe "#load_return_items" do - shared_context 'without existing return items' do - context 'without existing return items' do - it 'has 3 new @form_return_items' do + shared_context "without existing return items" do + context "without existing return items" do + it "has 3 new @form_return_items" do subject expect(assigns(:form_return_items).size).to eq 3 - expect(assigns(:form_return_items).select(&:new_record?).size).to eq 3 + expect(assigns(:form_return_items).count(&:new_record?)).to eq 3 end end end - shared_context 'with existing return items' do - context 'with existing return items' do + shared_context "with existing return items" do + context "with existing return items" do let!(:return_item_1) { create(:return_item, inventory_unit: inventory_unit_1, return_authorization:) } - it 'has 1 existing return item and 2 new return items' do + it "has 1 existing return item and 2 new return items" do subject expect(assigns(:form_return_items).size).to eq 3 expect(assigns(:form_return_items).select(&:persisted?)).to eq [return_item_1] - expect(assigns(:form_return_items).select(&:new_record?).size).to eq 2 + expect(assigns(:form_return_items).count(&:new_record?)).to eq 2 end end end - context '#new' do - subject { get :new, params: { order_id: order.to_param } } + context "#new" do + subject { get :new, params: {order_id: order.to_param} } - include_context 'without existing return items' + include_context "without existing return items" end - context '#edit' do + context "#edit" do subject do get :edit, params: { id: return_authorization.to_param, @@ -134,25 +134,25 @@ let(:return_authorization) { create(:return_authorization, order:) } - include_context 'without existing return items' - include_context 'with existing return items' + include_context "without existing return items" + include_context "with existing return items" end - context '#create failed' do + context "#create failed" do subject do post :create, params: { - return_authorization: { stock_location_id: nil }, # return authorization requires valid stock location, so this will fail + return_authorization: {stock_location_id: nil}, # return authorization requires valid stock location, so this will fail order_id: order.to_param } end - include_context 'without existing return items' + include_context "without existing return items" end - context '#update failed' do + context "#update failed" do subject do put :update, params: { - return_authorization: { stock_location_id: nil }, # return authorization requires valid stock location, so this will fail + return_authorization: {stock_location_id: nil}, # return authorization requires valid stock location, so this will fail id: return_authorization.to_param, order_id: order.to_param } @@ -160,19 +160,19 @@ let(:return_authorization) { create(:return_authorization, order:) } - include_context 'without existing return items' - include_context 'with existing return items' + include_context "without existing return items" + include_context "with existing return items" end end describe "#load_reimbursement_types" do - let(:order) { create(:order) } - let!(:inactive_reimbursement_type) { create(:reimbursement_type, active: false) } - let!(:first_active_reimbursement_type) { create(:reimbursement_type) } + let(:order) { create(:order) } + let!(:inactive_reimbursement_type) { create(:reimbursement_type, active: false) } + let!(:first_active_reimbursement_type) { create(:reimbursement_type) } let!(:second_active_reimbursement_type) { create(:reimbursement_type) } before do - get :new, params: { order_id: order.to_param } + get :new, params: {order_id: order.to_param} end it "loads all the active reimbursement types" do @@ -183,11 +183,11 @@ end describe "#load_stock_locations" do - let!(:active_stock_location) { create(:stock_location, active: true) } + let!(:active_stock_location) { create(:stock_location, active: true) } let!(:inactive_stock_location) { create(:stock_location, active: false) } before do - get :new, params: { order_id: order.to_param } + get :new, params: {order_id: order.to_param} end it "loads all the active stock locations" do @@ -196,7 +196,7 @@ end end - context '#create' do + context "#create" do let(:stock_location) { create(:stock_location) } subject { post :create, params: } @@ -222,7 +222,7 @@ end end - context '#update' do + context "#update" do let(:return_authorization) { create(:return_authorization, order:) } let(:params) do @@ -244,28 +244,28 @@ context "adding an item" do let(:return_items_params) do { - '0' => { inventory_unit_id: inventory_unit_1.to_param } + "0" => {inventory_unit_id: inventory_unit_1.to_param} } end - context 'without existing items' do - it 'creates a new item' do + context "without existing items" do + it "creates a new item" do expect { subject }.to change { Spree::ReturnItem.count }.by(1) end end - context 'with existing completed items' do + context "with existing completed items" do let!(:completed_return_item) do create(:return_item, { return_authorization:, inventory_unit: inventory_unit_1, - reception_status: 'received' + reception_status: "received" }) end - it 'does not create new items' do + it "does not create new items" do expect { subject }.to_not change { Spree::ReturnItem.count } - expect(assigns[:return_authorization].errors['return_items.inventory_unit']).to eq ["#{inventory_unit_1.id} has already been taken by return item #{completed_return_item.id}"] + expect(assigns[:return_authorization].errors["return_items.inventory_unit"]).to eq ["#{inventory_unit_1.id} has already been taken by return item #{completed_return_item.id}"] end end end @@ -277,12 +277,12 @@ let(:return_items_params) do { - '0' => { id: return_item.to_param, _destroy: '1' } + "0" => {id: return_item.to_param, _destroy: "1"} } end - context 'with existing items' do - it 'removes the item' do + context "with existing items" do + it "removes the item" do expect { subject }.to change { Spree::ReturnItem.count }.by(-1) end end diff --git a/backend/spec/controllers/spree/admin/return_items_controller_spec.rb b/backend/spec/controllers/spree/admin/return_items_controller_spec.rb index afa4f0a3253..ab02913eb95 100644 --- a/backend/spec/controllers/spree/admin/return_items_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/return_items_controller_spec.rb @@ -1,55 +1,55 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Admin::ReturnItemsController, type: :controller do stub_authorization! - describe '#update' do + describe "#update" do let(:customer_return) { create(:customer_return) } let(:return_item) { customer_return.return_items.first } - describe ':acceptance_status' do - let(:old_acceptance_status) { 'pending' } - let(:new_acceptance_status) { 'rejected' } + describe ":acceptance_status" do + let(:old_acceptance_status) { "pending" } + let(:new_acceptance_status) { "rejected" } subject do - put :update, params: { id: return_item.to_param, return_item: { acceptance_status: new_acceptance_status } } + put :update, params: {id: return_item.to_param, return_item: {acceptance_status: new_acceptance_status}} end - it 'updates the return item' do + it "updates the return item" do expect { subject }.to change { return_item.reload.acceptance_status }.from(old_acceptance_status).to(new_acceptance_status) end - it 'redirects to the customer return' do + it "redirects to the customer return" do subject expect(response).to redirect_to spree.edit_admin_order_customer_return_path(customer_return.order, customer_return) end end - describe ':reception_status' do - let(:old_reception_status) { 'in_transit' } - let(:new_reception_status) { 'received' } - let(:reception_status_event) { 'receive' } + describe ":reception_status" do + let(:old_reception_status) { "in_transit" } + let(:new_reception_status) { "received" } + let(:reception_status_event) { "receive" } before do - return_item.update! reception_status: 'in_transit' + return_item.update! reception_status: "in_transit" end subject do - put :update, params: { id: return_item.to_param, return_item: { reception_status_event: } } + put :update, params: {id: return_item.to_param, return_item: {reception_status_event:}} end - it 'updates the return item' do + it "updates the return item" do expect { subject }.to change { return_item.reload.reception_status }.from(old_reception_status).to(new_reception_status) - expect(customer_return.order.state).to eq('returned') + expect(customer_return.order.state).to eq("returned") end - it 'redirects to the customer return' do + it "redirects to the customer return" do subject expect(response).to redirect_to spree.edit_admin_order_customer_return_path(customer_return.order, customer_return) end diff --git a/backend/spec/controllers/spree/admin/root_controller_spec.rb b/backend/spec/controllers/spree/admin/root_controller_spec.rb index 2b282a53d82..ff00584929d 100644 --- a/backend/spec/controllers/spree/admin/root_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/root_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Admin::RootController do describe "GET index" do @@ -36,7 +36,7 @@ context "when a user cannot admin and home dashboards" do # The default exception handler redirects to /unauthorized. # Extensions may change this. - it { is_expected.to redirect_to('/unauthorized') } + it { is_expected.to redirect_to("/unauthorized") } end end end diff --git a/backend/spec/controllers/spree/admin/search_controller_spec.rb b/backend/spec/controllers/spree/admin/search_controller_spec.rb index 3f2b0754353..10dd04866c7 100644 --- a/backend/spec/controllers/spree/admin/search_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/search_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Admin::SearchController, type: :controller do stub_authorization! @@ -14,110 +14,110 @@ user.save end - describe 'GET #users' do + describe "GET #users" do subject { get :users, params:, as: :json } - shared_examples_for 'user found by search' do + shared_examples_for "user found by search" do it "should include users matching query" do subject expect(assigns[:users]).to include(user) end end - context 'when searching by user attributes' do - let(:params) { { q: search_query } } + context "when searching by user attributes" do + let(:params) { {q: search_query} } def starting_letters(string) string.first(3) end - context 'when searching by email' do - it_should_behave_like 'user found by search' do + context "when searching by email" do + it_should_behave_like "user found by search" do let(:search_query) { starting_letters(user.email) } end end - context 'when searching by ship addresss name' do - it_should_behave_like 'user found by search' do + context "when searching by ship addresss name" do + it_should_behave_like "user found by search" do let(:search_query) { starting_letters(user.ship_address.name) } end end - context 'when searching by bill address name' do - it_should_behave_like 'user found by search' do + context "when searching by bill address name" do + it_should_behave_like "user found by search" do let(:search_query) { starting_letters(user.bill_address.name) } end end end - context 'when searching by user ids' do - let(:params) { { ids: user.id.to_s } } - it_should_behave_like 'user found by search' + context "when searching by user ids" do + let(:params) { {ids: user.id.to_s} } + it_should_behave_like "user found by search" end end - describe 'get #products' do - let!(:product_one) { create(:product, name: 'jersey') } - let!(:product_two) { create(:product, name: 'better jersey') } + describe "get #products" do + let!(:product_one) { create(:product, name: "jersey") } + let!(:product_two) { create(:product, name: "better jersey") } subject { get :products, params:, as: :json } - shared_examples_for 'product search' do - it 'should respond with http success' do + shared_examples_for "product search" do + it "should respond with http success" do subject expect(response).to be_successful end - it 'should set the Surrogate-Control header' do + it "should set the Surrogate-Control header" do subject - expect(response.headers['Surrogate-Control']).to eq 'max-age=900' + expect(response.headers["Surrogate-Control"]).to eq "max-age=900" end - it 'should find the correct products' do + it "should find the correct products" do subject expect(assigns(:products)).to match_array expected_products end end - context 'when ids param is present' do - let(:params) { { ids: product_one.id } } + context "when ids param is present" do + let(:params) { {ids: product_one.id} } - it_should_behave_like 'product search' do + it_should_behave_like "product search" do let(:expected_products) { [product_one] } end end - context 'when ids param is not present' do + context "when ids param is not present" do context "when the default ransack is used" do - let(:params) { { q: { name_cont: 'jersey' } } } + let(:params) { {q: {name_cont: "jersey"}} } - it_should_behave_like 'product search' do + it_should_behave_like "product search" do let(:expected_products) { [product_one, product_two] } end end context "when a custom ransack query is used" do - let(:params) { { q: { slug_eq: 'better-jersey' } } } + let(:params) { {q: {slug_eq: "better-jersey"}} } - it_should_behave_like 'product search' do + it_should_behave_like "product search" do let(:expected_products) { [product_two] } end end end - context 'when all products are requested to be shown' do - context 'when a per page limit is set' do - let(:params) { { show_all: true, per_page: 1 } } + context "when all products are requested to be shown" do + context "when a per page limit is set" do + let(:params) { {show_all: true, per_page: 1} } - it_should_behave_like 'product search' do + it_should_behave_like "product search" do let(:expected_products) { [product_one, product_two] } end end - context 'when a per page limit is not set' do - let(:params) { { show_all: true } } + context "when a per page limit is not set" do + let(:params) { {show_all: true} } - it_should_behave_like 'product search' do + it_should_behave_like "product search" do let(:expected_products) { [product_one, product_two] } end end diff --git a/backend/spec/controllers/spree/admin/shipping_methods_controller_spec.rb b/backend/spec/controllers/spree/admin/shipping_methods_controller_spec.rb index 06a5ed3ab9a..dcbd0b0e442 100644 --- a/backend/spec/controllers/spree/admin/shipping_methods_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/shipping_methods_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Admin::ShippingMethodsController, type: :controller do stub_authorization! @@ -9,7 +9,7 @@ it "should not hard-delete shipping methods" do shipping_method = create(:shipping_method) - delete :destroy, params: { id: shipping_method.id } + delete :destroy, params: {id: shipping_method.id} expect(shipping_method.reload.deleted_at).not_to be_nil end diff --git a/backend/spec/controllers/spree/admin/stock_items_controller_spec.rb b/backend/spec/controllers/spree/admin/stock_items_controller_spec.rb index 7e3ba505eab..f0336bf573f 100644 --- a/backend/spec/controllers/spree/admin/stock_items_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/stock_items_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree module Admin @@ -17,7 +17,7 @@ module Admin before { request.env["HTTP_REFERER"] = "product_admin_page" } subject do - post :create, params: { variant_id: variant, stock_location_id: stock_location, stock_movement: { quantity: 1, stock_item_id: stock_item.id } } + post :create, params: {variant_id: variant, stock_location_id: stock_location, stock_movement: {quantity: 1, stock_item_id: stock_item.id}} end it "creates a stock movement with originator" do @@ -37,20 +37,20 @@ module Admin context "with product_slug param" do it "scopes the variants by the product" do - get :index, params: { product_slug: variant_1.product.slug } + get :index, params: {product_slug: variant_1.product.slug} expect(assigns(:variants)).to contain_exactly(variant_1) end context "when a product with no variants is requested" do it "returns the master variant of the product" do - get :index, params: { product_slug: product_1.slug } + get :index, params: {product_slug: product_1.slug} expect(assigns(:variants)).to contain_exactly(product_1.master) end end context "when a product with variants is requested" do it "returns only the variants of the product" do - get :index, params: { product_slug: product_2.slug } + get :index, params: {product_slug: product_2.slug} expect(assigns(:variants)).to contain_exactly(variant_3, variant_4) end end @@ -80,7 +80,7 @@ module Admin end it "filters variants by stock locations" do - get :index, params: { stock_location_id: stock_location.id } + get :index, params: {stock_location_id: stock_location.id} expect(assigns(:variants)).to include variant_1 expect(assigns(:variants)).not_to include variant_2 end diff --git a/backend/spec/controllers/spree/admin/stock_locations_controller_spec.rb b/backend/spec/controllers/spree/admin/stock_locations_controller_spec.rb index 4a106a42b6e..d7dc0ffbbb1 100644 --- a/backend/spec/controllers/spree/admin/stock_locations_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/stock_locations_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree module Admin @@ -11,7 +11,7 @@ module Admin context "with no countries present" do it "cannot create a new stock location" do get :new - expect(flash[:error]).to eq(I18n.t('spree.stock_locations_need_a_default_country')) + expect(flash[:error]).to eq(I18n.t("spree.stock_locations_need_a_default_country")) expect(response).to redirect_to(spree.admin_stock_locations_path) end end @@ -31,7 +31,7 @@ module Admin context "with a country with the ISO code of 'US' existing" do before do - FactoryBot.create(:country, iso: 'US') + FactoryBot.create(:country, iso: "US") end it "can create a new stock location" do diff --git a/backend/spec/controllers/spree/admin/stock_movements_controller_spec.rb b/backend/spec/controllers/spree/admin/stock_movements_controller_spec.rb index 4af9d6acc6b..358a173836d 100644 --- a/backend/spec/controllers/spree/admin/stock_movements_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/stock_movements_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree module Admin @@ -27,19 +27,19 @@ module Admin ) end - describe '#index' do + describe "#index" do subject { get :index, params: } - context 'with no params' do - let(:params) { { stock_location_id: stock_location.id } } + context "with no params" do + let(:params) { {stock_location_id: stock_location.id} } - it 'responds with a successful status code' do + it "responds with a successful status code" do subject expect(response).to be_successful end - it 'responds with all the stock locations stock movements' do + it "responds with all the stock locations stock movements" do subject expect(assigns[:stock_movements]).to contain_exactly( @@ -49,7 +49,7 @@ module Admin end end - context 'with search parameters' do + context "with search parameters" do let(:params) do { stock_location_id: stock_location.id, @@ -59,17 +59,17 @@ module Admin } end - it 'responds with a successful status code' do + it "responds with a successful status code" do subject expect(response).to be_successful end - it 'responds with the stock movements that match the search criteria' do + it "responds with the stock movements that match the search criteria" do subject expect(assigns[:stock_movements]).to contain_exactly( - stock_movement_1, + stock_movement_1 ) end end diff --git a/backend/spec/controllers/spree/admin/store_credits_controller_spec.rb b/backend/spec/controllers/spree/admin/store_credits_controller_spec.rb index 8890ce58a34..64bdb1b7475 100644 --- a/backend/spec/controllers/spree/admin/store_credits_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/store_credits_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" shared_examples "update reason loader" do it "sets the store_credit_reasons variable to a list of categories sorted by category name " do @@ -22,7 +22,7 @@ let!(:store_credit) { create(:store_credit, user:, category: a_credit_category) } let!(:event) { create(:store_credit_auth_event, store_credit:, created_at: 5.days.ago) } - before { get :show, params: { user_id: user.id, id: store_credit.id } } + before { get :show, params: {user_id: user.id, id: store_credit.id} } it "sets the store_credit variable to a new store credit model" do expect(assigns(:store_credit)).to eq store_credit @@ -35,14 +35,14 @@ end describe "#new" do - before { get :new, params: { user_id: create(:user).id } } + before { get :new, params: {user_id: create(:user).id} } it { expect(assigns(:credit_categories)).to eq [a_credit_category, b_credit_category] } end describe "#create" do subject { post :create, params: parameters } - before { + before { allow(controller).to receive_messages(spree_current_user: admin_user) create(:primary_credit_type) } @@ -73,7 +73,7 @@ expect(user.reload.store_credits.first.created_by).to eq admin_user end - it 'sets the admin as the store credit event originator' do + it "sets the admin as the store credit event originator" do expect { subject }.to change { Spree::StoreCreditEvent.count }.by(1) expect(Spree::StoreCreditEvent.last.originator).to eq admin_user end @@ -97,7 +97,7 @@ describe "#edit_amount" do let!(:store_credit) { create(:store_credit, user:, category: a_credit_category) } - before { get :edit_amount, params: { user_id: user.id, id: store_credit.id } } + before { get :edit_amount, params: {user_id: user.id, id: store_credit.id} } it_behaves_like "update reason loader" @@ -109,7 +109,7 @@ describe "#edit_validity" do let!(:store_credit) { create(:store_credit, user:, category: a_credit_category) } - before { get :edit_validity, params: { user_id: user.id, id: store_credit.id } } + before { get :edit_validity, params: {user_id: user.id, id: store_credit.id} } it_behaves_like "update reason loader" @@ -119,12 +119,12 @@ end describe "#update" do - let(:memo) { "New memo" } + let(:memo) { "New memo" } let!(:store_credit) { create(:store_credit, user:) } subject { put :update, params: parameters.merge(format: :json) } - before { allow(controller).to receive_messages(spree_current_user: admin_user) } + before { allow(controller).to receive_messages(spree_current_user: admin_user) } context "the passed parameters are valid" do let(:parameters) do @@ -144,7 +144,7 @@ it "returns a success message" do subject expect(response).to have_http_status(:ok) - expect(JSON.parse(response.body)['message']).to match("Store Credit has been successfully updated!") + expect(JSON.parse(response.body)["message"]).to match("Store Credit has been successfully updated!") end end @@ -165,14 +165,14 @@ it "returns an error message" do subject expect(response).to have_http_status(:bad_request) - expect(JSON.parse(response.body)['message']).to match("Unable to update store credit") + expect(JSON.parse(response.body)["message"]).to match("Unable to update store credit") end end end describe "#update_amount" do let(:original_amount) { 100.0 } - let!(:store_credit) { create(:store_credit, user:, amount: original_amount) } + let!(:store_credit) { create(:store_credit, user:, amount: original_amount) } let!(:store_credit_reason) { create(:store_credit_reason) } let(:parameters) do { @@ -187,7 +187,7 @@ subject { put :update_amount, params: parameters } - before { allow(controller).to receive_messages(spree_current_user: admin_user) } + before { allow(controller).to receive_messages(spree_current_user: admin_user) } context "the passed parameters are valid" do let(:updated_amount) { 300.0 } @@ -308,10 +308,10 @@ end end end - context 'User does not exist' do + context "User does not exist" do let(:store_credit) { create(:store_credit, user:, category: a_credit_category) } it "cannot find a store-credit for non-existent user" do - get :index, params: { user_id: 'non-existent-user', id: store_credit.id } + get :index, params: {user_id: "non-existent-user", id: store_credit.id} expect(response).to redirect_to(spree.admin_users_path) expect(flash[:error]).to eql("User is not found") end diff --git a/backend/spec/controllers/spree/admin/taxons_controller_spec.rb b/backend/spec/controllers/spree/admin/taxons_controller_spec.rb index 41d84efe002..121a0e7420b 100644 --- a/backend/spec/controllers/spree/admin/taxons_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/taxons_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Admin::TaxonsController, type: :controller do stub_authorization! @@ -9,18 +9,18 @@ let!(:taxon) { create(:taxon) } it "finds existing taxon" do - get :edit, params: { taxonomy_id: taxon.taxonomy, id: taxon.id } + get :edit, params: {taxonomy_id: taxon.taxonomy, id: taxon.id} expect(response.status).to eq(200) end it "cannot find a non-existing taxon with existent taxonomy" do - get :edit, params: { taxonomy_id: taxon.taxonomy, id: 'non-existent-taxon' } + get :edit, params: {taxonomy_id: taxon.taxonomy, id: "non-existent-taxon"} expect(response).to redirect_to(spree.admin_taxonomies_path) expect(flash[:error]).to eql("Taxon is not found") end it "cannot find a existing taxon with non-existent taxonomy" do - get :edit, params: { taxonomy_id: 'non-existent-taxonomy', id: taxon.id } + get :edit, params: {taxonomy_id: "non-existent-taxonomy", id: taxon.id} expect(response).to redirect_to(spree.admin_taxonomies_path) expect(flash[:error]).to eql("Taxon is not found") end diff --git a/backend/spec/controllers/spree/admin/theme_controller_spec.rb b/backend/spec/controllers/spree/admin/theme_controller_spec.rb index 6ba9984f93b..50fba9fe6b1 100644 --- a/backend/spec/controllers/spree/admin/theme_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/theme_controller_spec.rb @@ -1,29 +1,29 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" RSpec.describe Spree::Admin::ThemeController, type: :controller do stub_authorization! - it 'sets the theme in a different session key for each system theme' do - stub_spree_preferences(Spree::Backend::Config, themes: { foo: 'foo-path', bar: 'bar-path' }) + it "sets the theme in a different session key for each system theme" do + stub_spree_preferences(Spree::Backend::Config, themes: {foo: "foo-path", bar: "bar-path"}) - get :set, params: { switch_to_theme: 'foo', system_theme: 'light', format: :json } + get :set, params: {switch_to_theme: "foo", system_theme: "light", format: :json} - expect(session[:admin_light_theme]).to eq('foo') + expect(session[:admin_light_theme]).to eq("foo") expect(session[:admin_dark_theme]).to eq(nil) expect(response).to have_http_status(:redirect) - get :set, params: { switch_to_theme: 'bar', system_theme: 'dark', format: :json } - expect(session[:admin_light_theme]).to eq('foo') - expect(session[:admin_dark_theme]).to eq('bar') + get :set, params: {switch_to_theme: "bar", system_theme: "dark", format: :json} + expect(session[:admin_light_theme]).to eq("foo") + expect(session[:admin_dark_theme]).to eq("bar") expect(response).to have_http_status(:redirect) end it 'responds with "not found" for a missing theme' do - stub_spree_preferences(Spree::Backend::Config, themes: { foo: 'foo-path' }) + stub_spree_preferences(Spree::Backend::Config, themes: {foo: "foo-path"}) - get :set, params: { switch_to_theme: 'bar', system_theme: 'dark', format: :json } + get :set, params: {switch_to_theme: "bar", system_theme: "dark", format: :json} expect(session[:admin_light_theme]).to eq(nil) expect(session[:admin_dark_theme]).to eq(nil) diff --git a/backend/spec/controllers/spree/admin/users/api_key_controller_spec.rb b/backend/spec/controllers/spree/admin/users/api_key_controller_spec.rb index b30eee0058c..fd1c492e707 100644 --- a/backend/spec/controllers/spree/admin/users/api_key_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/users/api_key_controller_spec.rb @@ -5,7 +5,7 @@ describe Spree::Admin::Users::ApiKeyController, type: :controller do let(:user) { create(:user) } - describe '#create' do + describe "#create" do context "with ability to manage users and API keys" do stub_authorization! do |_user| can [:manage], Spree.user_class @@ -13,9 +13,9 @@ end it "allows admins to create a new user's API key" do - post :create, params: { user_id: user.id } + post :create, params: {user_id: user.id} - expect(flash[:success]).to eq I18n.t('spree.admin.api.key_generated') + expect(flash[:success]).to eq I18n.t("spree.admin.api.key_generated") expect(response).to redirect_to(spree.edit_admin_user_path(user)) end end @@ -24,16 +24,16 @@ stub_authorization! do |_user| end - it 'denies access' do - delete :destroy, params: { user_id: user.id } + it "denies access" do + delete :destroy, params: {user_id: user.id} - expect(flash[:error]).to eq I18n.t('spree.authorization_failure') - expect(response).to redirect_to '/unauthorized' + expect(flash[:error]).to eq I18n.t("spree.authorization_failure") + expect(response).to redirect_to "/unauthorized" end end end - describe '#destroy' do + describe "#destroy" do context "with ability to manage users and API keys" do stub_authorization! do |_user| can [:manage], Spree.user_class @@ -42,9 +42,9 @@ it "allows admins to clear an existing user's API key" do user.generate_spree_api_key! - delete :destroy, params: { user_id: user.id } + delete :destroy, params: {user_id: user.id} - expect(flash[:success]).to eq I18n.t('spree.admin.api.key_cleared') + expect(flash[:success]).to eq I18n.t("spree.admin.api.key_cleared") expect(response).to redirect_to(spree.edit_admin_user_path(user)) end end @@ -53,11 +53,11 @@ stub_authorization! do |_user| end - it 'denies access' do - delete :destroy, params: { user_id: user.id } + it "denies access" do + delete :destroy, params: {user_id: user.id} - expect(flash[:error]).to eq I18n.t('spree.authorization_failure') - expect(response).to redirect_to '/unauthorized' + expect(flash[:error]).to eq I18n.t("spree.authorization_failure") + expect(response).to redirect_to "/unauthorized" end end end diff --git a/backend/spec/controllers/spree/admin/users_controller_spec.rb b/backend/spec/controllers/spree/admin/users_controller_spec.rb index c8ad0d41f61..ef911257289 100644 --- a/backend/spec/controllers/spree/admin/users_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/users_controller_spec.rb @@ -1,20 +1,24 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" +class UserModel < ApplicationRecord + self.table_name = "spree_users" + include Spree::UserMethods +end describe Spree::Admin::UsersController, type: :controller do let(:user) { create(:user) } - let(:state) { create(:state, state_code: 'NY') } + let(:state) { create(:state, state_code: "NY") } let(:valid_address_attributes) do { - name: 'Foo Bar', + name: "Foo Bar", city: "New York", country_id: state.country.id, state_id: state.id, - phone: '555-555-5555', - address1: '123 Fake St.', - zipcode: '10001', + phone: "555-555-5555", + address1: "123 Fake St.", + zipcode: "10001" } end @@ -25,12 +29,12 @@ context "when the user can manage all users" do it "assigns a list of all users as @collection" do - get :index, params: { id: user.id } + get :index, params: {id: user.id} expect(assigns(:collection)).to eq [user] end it "assigns a ransack search for Spree.user_class" do - get :index, params: { id: user.id } + get :index, params: {id: user.id} expect(assigns[:search]).to be_a Ransack::Search expect(assigns[:search].klass).to eq Spree.user_class end @@ -39,13 +43,13 @@ context "when user cannot manage some users" do stub_authorization! do |_user| can :manage, Spree.user_class - cannot :manage, Spree.user_class, email: 'not_accessible_user@example.com' + cannot :manage, Spree.user_class, email: "not_accessible_user@example.com" end it "assigns a list of accessible users as @collection" do - create(:user, email: 'not_accessible_user@example.com') + create(:user, email: "not_accessible_user@example.com") - get :index, params: { id: user.id } + get :index, params: {id: user.id} expect(assigns(:collection)).to eq [user] end end @@ -55,20 +59,15 @@ allow(Spree.user_class).to receive(:respond_to?).and_call_original allow(Spree.user_class).to receive(:respond_to?).with(:accessible_by).and_return(false) - get :index, params: { id: user.id } + get :index, params: {id: user.id} expect(assigns(:collection)).to eq [user] end end context "when Spree.user_class have a different namespace than Spree" do - class UserModel < ApplicationRecord - self.table_name = 'spree_users' - include Spree::UserMethods - end - around do |example| actual_user_class = Spree.user_class - Spree.user_class = 'UserModel' + Spree.user_class = "UserModel" UserModel.create(email: "a@solidus.io") example.run Spree.user_class = actual_user_class.name @@ -77,9 +76,9 @@ class UserModel < ApplicationRecord render_views it "renders the edit and delete links correctly" do - allow(Spree.user_class).to receive(:find_by). - with(hash_including(:spree_api_key)). - and_return(Spree.user_class.new) + allow(Spree.user_class).to receive(:find_by) + .with(hash_including(:spree_api_key)) + .and_return(Spree.user_class.new) get :index @@ -94,18 +93,18 @@ class UserModel < ApplicationRecord end it "redirects to edit" do - get :show, params: { id: user.id } + get :show, params: {id: user.id} expect(response).to redirect_to spree.edit_admin_user_path(user) end end - context '#authorize_admin' do + context "#authorize_admin" do context "with ability to admin users" do stub_authorization! do |_user| can [:manage], Spree.user_class end - it 'can visit index' do + it "can visit index" do post :index expect(response).to be_successful end @@ -115,14 +114,14 @@ class UserModel < ApplicationRecord stub_authorization! do |_user| end - it 'denies access' do + it "denies access" do post :index - expect(response).to redirect_to '/unauthorized' + expect(response).to redirect_to "/unauthorized" end end end - context '#new' do + context "#new" do context "when the user can manage all roles" do stub_authorization! do |_user| can :manage, Spree.user_class @@ -132,7 +131,7 @@ class UserModel < ApplicationRecord it "assigns a list of all roles as @roles" do role = create(:role) - get :new, params: { id: user.id } + get :new, params: {id: user.id} expect(assigns(:roles)).to eq [role] end end @@ -141,14 +140,14 @@ class UserModel < ApplicationRecord stub_authorization! do |_user| can :manage, Spree.user_class can :index, Spree::Role - cannot :index, Spree::Role, name: 'not_accessible_role' + cannot :index, Spree::Role, name: "not_accessible_role" end it "assigns a list of accessible roles as @roles" do - accessible_role = create(:role, name: 'accessible_role') - create(:role, name: 'not_accessible_role') + accessible_role = create(:role, name: "accessible_role") + create(:role, name: "not_accessible_role") - get :new, params: { id: user.id } + get :new, params: {id: user.id} expect(assigns(:roles)).to eq [accessible_role] end end @@ -162,7 +161,7 @@ class UserModel < ApplicationRecord it "assigns a list of all stock_locations as @stock_locations" do stock_location = create(:stock_location) - get :new, params: { id: user.id } + get :new, params: {id: user.id} expect(assigns(:stock_locations)).to eq [stock_location] end end @@ -171,14 +170,14 @@ class UserModel < ApplicationRecord stub_authorization! do |_user| can :manage, Spree.user_class can :index, Spree::StockLocation - cannot :index, Spree::StockLocation, name: 'not_accessible_stock_location' + cannot :index, Spree::StockLocation, name: "not_accessible_stock_location" end it "assigns a list of accessible stock_locations as @stock_locations" do - accessible_stock_location = create(:stock_location, name: 'accessible_stock_location') - create(:stock_location, name: 'not_accessible_stock_location') + accessible_stock_location = create(:stock_location, name: "accessible_stock_location") + create(:stock_location, name: "not_accessible_stock_location") - get :new, params: { id: user.id } + get :new, params: {id: user.id} expect(assigns(:stock_locations)).to eq [accessible_stock_location] end end @@ -203,12 +202,12 @@ def user end it "can create user with roles" do - post :create, params: { user: { name: "Bob Bloggs", spree_role_ids: [dummy_role.id] } } + post :create, params: {user: {name: "Bob Bloggs", spree_role_ids: [dummy_role.id]}} expect(user.spree_roles).to eq([dummy_role]) end it "can create user without roles" do - post :create, params: { user: { name: "Bob Bloggs" } } + post :create, params: {user: {name: "Bob Bloggs"}} expect(user.spree_roles).to eq([]) end end @@ -220,12 +219,12 @@ def user end it "cannot assign users roles" do - post :create, params: { user: { name: "Bob Bloggs", spree_role_ids: [dummy_role.id] } } + post :create, params: {user: {name: "Bob Bloggs", spree_role_ids: [dummy_role.id]}} expect(user.spree_roles).to eq([]) end it "can create user without roles" do - post :create, params: { user: { name: "Bob Bloggs" } } + post :create, params: {user: {name: "Bob Bloggs"}} expect(user.spree_roles).to eq([]) end end @@ -240,19 +239,19 @@ def user it "can assign accessible roles to user" do role1 = Spree::Role.create(name: "accessible_role") role2 = Spree::Role.create(name: "not_accessible_role") - post :create, params: { user: { spree_role_ids: [role1.id, role2.id] } } + post :create, params: {user: {spree_role_ids: [role1.id, role2.id]}} expect(user.spree_roles).to eq([role1]) end end it "can create a shipping_address" do - post :create, params: { user: { ship_address_attributes: valid_address_attributes } } - expect(user.reload.ship_address.city).to eq('New York') + post :create, params: {user: {ship_address_attributes: valid_address_attributes}} + expect(user.reload.ship_address.city).to eq("New York") end it "can create a billing_address" do - post :create, params: { user: { bill_address_attributes: valid_address_attributes } } - expect(user.reload.bill_address.city).to eq('New York') + post :create, params: {user: {bill_address_attributes: valid_address_attributes}} + expect(user.reload.bill_address.city).to eq("New York") end context "when the user can manage stock locations" do @@ -263,7 +262,7 @@ def user it "can create user with stock locations" do location = Spree::StockLocation.create(name: "my_location") - post :create, params: { user: { stock_location_ids: [location.id] } } + post :create, params: {user: {stock_location_ids: [location.id]}} expect(user.stock_locations).to eq([location]) end end @@ -276,7 +275,7 @@ def user it "cannot assign users stock locations" do location = Spree::StockLocation.create(name: "my_location") - post :create, params: { user: { stock_location_ids: [location.id] } } + post :create, params: {user: {stock_location_ids: [location.id]}} expect(user.stock_locations).to eq([]) end end @@ -291,7 +290,7 @@ def user it "can assign accessible stock locations to user" do location1 = Spree::StockLocation.create(name: "accessible_location") location2 = Spree::StockLocation.create(name: "not_accessible_location") - post :create, params: { user: { stock_location_ids: [location1.id, location2.id] } } + post :create, params: {user: {stock_location_ids: [location1.id, location2.id]}} expect(user.stock_locations).to eq([location1]) end end @@ -313,21 +312,21 @@ def user it "can set roles" do expect { - put :update, params: { id: user.id, user: { name: "Bob Bloggs", spree_role_ids: [dummy_role.id] } } + put :update, params: {id: user.id, user: {name: "Bob Bloggs", spree_role_ids: [dummy_role.id]}} }.to change { user.reload.spree_roles.to_a }.to([dummy_role]) end it "can clear roles" do user.spree_roles << dummy_role expect { - put :update, params: { id: user.id, user: { name: "Bob Bloggs", spree_role_ids: [""] } } + put :update, params: {id: user.id, user: {name: "Bob Bloggs", spree_role_ids: [""]}} }.to change { user.reload.spree_roles.to_a }.to([]) end - context 'when no role params are present' do - it 'does not clear all present user roles' do + context "when no role params are present" do + it "does not clear all present user roles" do user.spree_roles << dummy_role - put :update, params: { id: user.id, user: { name: "Bob Bloggs" } } + put :update, params: {id: user.id, user: {name: "Bob Bloggs"}} expect(user.reload.spree_roles).to_not be_empty end end @@ -336,14 +335,14 @@ def user context "when the user cannot manage roles" do it "cannot set roles" do expect { - put :update, params: { id: user.id, user: { name: "Bob Bloggs", spree_role_ids: [dummy_role.id] } } + put :update, params: {id: user.id, user: {name: "Bob Bloggs", spree_role_ids: [dummy_role.id]}} }.not_to change { user.reload.spree_roles.to_a } end it "cannot clear roles" do user.spree_roles << dummy_role expect { - put :update, params: { id: user.id, user: { name: "Bob Bloggs" } } + put :update, params: {id: user.id, user: {name: "Bob Bloggs"}} }.not_to change { user.reload.spree_roles.to_a } end end @@ -358,7 +357,7 @@ def user it "can update accessible roles to user" do role1 = Spree::Role.create(name: "accessible_role") role2 = Spree::Role.create(name: "not_accessible_role") - put :update, params: { id: user.id, user: { spree_role_ids: [role1.id, role2.id] } } + put :update, params: {id: user.id, user: {spree_role_ids: [role1.id, role2.id]}} expect(user.reload.spree_roles).to eq([role1]) end @@ -366,7 +365,7 @@ def user role1 = Spree::Role.create(name: "accessible_role") role2 = Spree::Role.create(name: "not_accessible_role") user.spree_roles << role2 - put :update, params: { id: user.id, user: { spree_role_ids: [role1.id] } } + put :update, params: {id: user.id, user: {spree_role_ids: [role1.id]}} expect(user.reload.spree_roles).to match_array([role1, role2]) end end @@ -378,7 +377,7 @@ def user it "can change email of a user" do expect { - put :update, params: { id: user.id, user: { email: "bob@example.com" } } + put :update, params: {id: user.id, user: {email: "bob@example.com"}} }.to change { user.reload.email }.to("bob@example.com") end end @@ -390,7 +389,7 @@ def user it "cannot change email of a user" do expect { - put :update, params: { id: user.id, user: { email: "bob@example.com" } } + put :update, params: {id: user.id, user: {email: "bob@example.com"}} }.not_to change { user.reload.email } end end @@ -398,7 +397,7 @@ def user context "allowed to update passwords" do it "can change password of a user" do expect { - put :update, params: { id: user.id, user: { password: "diff123", password_confirmation: "diff123" } } + put :update, params: {id: user.id, user: {password: "diff123", password_confirmation: "diff123"}} }.to_not raise_error end end @@ -409,23 +408,23 @@ def user end it "cannot change password of a user" do - allow(ActionController::Parameters). - to receive(:action_on_unpermitted_parameters).and_return(:raise) + allow(ActionController::Parameters) + .to receive(:action_on_unpermitted_parameters).and_return(:raise) expect { - put :update, params: { id: user.id, user: { password: "diff123", password_confirmation: "diff123" } } + put :update, params: {id: user.id, user: {password: "diff123", password_confirmation: "diff123"}} }.to raise_error(ActionController::UnpermittedParameters) end end it "can update ship_address attributes" do - post :update, params: { id: user.id, user: { ship_address_attributes: valid_address_attributes } } - expect(user.reload.ship_address.city).to eq('New York') + post :update, params: {id: user.id, user: {ship_address_attributes: valid_address_attributes}} + expect(user.reload.ship_address.city).to eq("New York") end it "can update bill_address attributes" do - post :update, params: { id: user.id, user: { bill_address_attributes: valid_address_attributes } } - expect(user.reload.bill_address.city).to eq('New York') + post :update, params: {id: user.id, user: {bill_address_attributes: valid_address_attributes}} + expect(user.reload.bill_address.city).to eq("New York") end context "when the user can manage stock locations" do @@ -438,14 +437,14 @@ def user location1 = Spree::StockLocation.create(name: "my_location") location2 = Spree::StockLocation.create(name: "my_location2") user.stock_locations = [location1] - put :update, params: { id: user.id, user: { stock_location_ids: [location2.id] } } + put :update, params: {id: user.id, user: {stock_location_ids: [location2.id]}} expect(user.reload.stock_locations).to eq([location2]) end it "can clear stock locations" do user.stock_locations << Spree::StockLocation.create(name: "my_location") expect { - put :update, params: { id: user.id, user: { name: "Bob Bloggs", stock_location_ids: [""] } } + put :update, params: {id: user.id, user: {name: "Bob Bloggs", stock_location_ids: [""]}} }.to change { user.reload.stock_locations.to_a }.to([]) end end @@ -460,7 +459,7 @@ def user location1 = Spree::StockLocation.create(name: "my_location") location2 = Spree::StockLocation.create(name: "my_location2") user.stock_locations = [location1] - put :update, params: { id: user.id, user: { stock_location_ids: [location2.id] } } + put :update, params: {id: user.id, user: {stock_location_ids: [location2.id]}} expect(user.reload.stock_locations).to eq([location1]) end end @@ -475,7 +474,7 @@ def user it "can update accessible stock locations to user" do location1 = Spree::StockLocation.create(name: "accessible_location") location2 = Spree::StockLocation.create(name: "not_accessible_location") - put :update, params: { id: user.id, user: { stock_location_ids: [location1.id, location2.id] } } + put :update, params: {id: user.id, user: {stock_location_ids: [location1.id, location2.id]}} expect(user.reload.stock_locations).to eq([location1]) end end @@ -487,7 +486,7 @@ def user end subject do - delete :destroy, params: { id: user.id } + delete :destroy, params: {id: user.id} response end @@ -519,13 +518,13 @@ def user before { user.orders << order } it "assigns a list of the users orders" do - get :orders, params: { id: user.id } + get :orders, params: {id: user.id} expect(assigns[:orders].count).to eq 1 expect(assigns[:orders].first).to eq order end it "assigns a ransack search for Spree::Order" do - get :orders, params: { id: user.id } + get :orders, params: {id: user.id} expect(assigns[:search]).to be_a Ransack::Search expect(assigns[:search].klass).to eq Spree::Order end @@ -540,13 +539,13 @@ def user before { user.orders << order } it "assigns a list of the users orders" do - get :items, params: { id: user.id } + get :items, params: {id: user.id} expect(assigns[:orders].count).to eq 1 expect(assigns[:orders].first).to eq order end it "assigns a ransack search for Spree::Order" do - get :items, params: { id: user.id } + get :items, params: {id: user.id} expect(assigns[:search]).to be_a Ransack::Search expect(assigns[:search].klass).to eq Spree::Order end diff --git a/backend/spec/controllers/spree/admin/variants_controller_spec.rb b/backend/spec/controllers/spree/admin/variants_controller_spec.rb index 10115a22c03..223cf937f6a 100644 --- a/backend/spec/controllers/spree/admin/variants_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/variants_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" module Spree module Admin @@ -9,7 +9,7 @@ module Admin describe "#index" do let(:product) { create(:product) } - let(:params) { { product_id: product.slug } } + let(:params) { {product_id: product.slug} } subject { get :index, params: } @@ -45,7 +45,7 @@ module Admin end context "when deleted is requested" do - let(:params) { { product_id: product.slug, deleted: "on" } } + let(:params) { {product_id: product.slug, deleted: "on"} } it "includes deleted variants" do subject @@ -54,7 +54,7 @@ module Admin end end context "existent product id not given" do - let(:params) { { product_id: 'non-existent-product' } } + let(:params) { {product_id: "non-existent-product"} } it "cannot find non-existent product" do subject @@ -71,7 +71,7 @@ module Admin let(:product) { variant.product } it "can be deleted" do - delete :destroy, params: { product_id: product.to_param, id: variant.to_param } + delete :destroy, params: {product_id: product.to_param, id: variant.to_param} expect(variant.reload).to be_discarded end end diff --git a/backend/spec/features/admin/adjustment_reasons_spec.rb b/backend/spec/features/admin/adjustment_reasons_spec.rb index ab8fb158b50..2fddee503b7 100644 --- a/backend/spec/features/admin/adjustment_reasons_spec.rb +++ b/backend/spec/features/admin/adjustment_reasons_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Adjustment reasons", type: :feature do stub_authorization! @@ -36,7 +36,7 @@ end it "lists reasons but doesn't show their edit buttons" do - within '#listing_adjustment_reasons' do + within "#listing_adjustment_reasons" do expect(page).to have_content adjustment_reason.name expect(page).not_to have_selector('a[data-action="edit"]') end @@ -49,7 +49,7 @@ end it "lists reasons and their edit buttons" do - within '#listing_adjustment_reasons' do + within "#listing_adjustment_reasons" do expect(page).to have_content adjustment_reason.name expect(page).to have_selector('a[data-action="edit"]') end diff --git a/backend/spec/features/admin/configuration/payment_methods_spec.rb b/backend/spec/features/admin/configuration/payment_methods_spec.rb index f023ed48ef2..dcd446e3a0e 100644 --- a/backend/spec/features/admin/configuration/payment_methods_spec.rb +++ b/backend/spec/features/admin/configuration/payment_methods_spec.rb @@ -1,6 +1,12 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" + +class ComplexPayments < Spree::PaymentMethod + preference :name, :string + preference :mapping, :hash + preference :recipients, :array +end describe "Payment Methods", type: :feature do stub_authorization! @@ -17,7 +23,7 @@ it "should display existing payment methods" do click_link "Payments" - expect(page).to have_link 'Payment Methods' + expect(page).to have_link "Payment Methods" within("table#listing_payment_methods") do expect(all("th")[1].text).to eq("Name") expect(all("th")[2].text).to eq("Type") @@ -26,7 +32,7 @@ expect(all("th")[5].text).to eq("State") end - within('table#listing_payment_methods') do + within("table#listing_payment_methods") do expect(page).to have_content(Spree::PaymentMethod::Check.model_name.human) end end @@ -35,7 +41,7 @@ context "admin creating a new payment method", :js do it "creates a new payment method and disables the form" do click_link "Payments" - expect(page).to have_link 'Payment Methods' + expect(page).to have_link "Payment Methods" click_link "admin_new_payment_methods_link" expect(page).to have_content("New Payment Method") fill_in "payment_method_name", with: "check90" @@ -60,7 +66,7 @@ before do click_link "Payments" - expect(page).to have_link 'Payment Methods' + expect(page).to have_link "Payment Methods" within("table#listing_payment_methods") do click_icon(:edit) end @@ -93,14 +99,8 @@ expect(page).to have_content("Name can't be blank") end - context 'with payment method having hash and array as preference' do - class ComplexPayments < Spree::PaymentMethod - preference :name, :string - preference :mapping, :hash - preference :recipients, :array - end - - let!(:payment_method) { ComplexPayments.create!(name: 'Complex Payments') } + context "with payment method having hash and array as preference" do + let!(:payment_method) { ComplexPayments.create!(name: "Complex Payments") } it "does not display preference fields that are hash or array" do expect(page).to have_field("Name") @@ -117,55 +117,55 @@ class ComplexPayments < Spree::PaymentMethod it "displays message when changing type" do click_link "Payments" - expect(page).to have_link 'Payment Methods' + expect(page).to have_link "Payment Methods" click_icon :edit - expect(page).to have_content('Test Mode') + expect(page).to have_content("Test Mode") - select Spree::PaymentMethod::Check.model_name.human, from: 'Type' - expect(page).to have_content('you must save first') - expect(page).to have_no_content('Test Mode') + select Spree::PaymentMethod::Check.model_name.human, from: "Type" + expect(page).to have_content("you must save first") + expect(page).to have_no_content("Test Mode") # change back - select Spree::PaymentMethod::BogusCreditCard.model_name.human, from: 'Type' - expect(page).to have_no_content('you must save first') - expect(page).to have_content('Test Mode') + select Spree::PaymentMethod::BogusCreditCard.model_name.human, from: "Type" + expect(page).to have_no_content("you must save first") + expect(page).to have_content("Test Mode") end it "displays message when changing preference source" do - Spree::Config.static_model_preferences.add(Spree::PaymentMethod::BogusCreditCard, 'my_prefs', {}) + Spree::Config.static_model_preferences.add(Spree::PaymentMethod::BogusCreditCard, "my_prefs", {}) click_link "Payments" - expect(page).to have_link 'Payment Methods' + expect(page).to have_link "Payment Methods" click_icon :edit - expect(page).to have_content('Test Mode') + expect(page).to have_content("Test Mode") - select 'my_prefs', from: 'Preference Source' - expect(page).to have_content('you must save first') - expect(page).to have_no_content('Test Mode') + select "my_prefs", from: "Preference Source" + expect(page).to have_content("you must save first") + expect(page).to have_no_content("Test Mode") # change back - select '(custom)', from: 'Preference Source' - expect(page).to have_no_content('you must save first') - expect(page).to have_content('Test Mode') + select "(custom)", from: "Preference Source" + expect(page).to have_no_content("you must save first") + expect(page).to have_content("Test Mode") end it "updates successfully and keeps secrets" do - Spree::Config.static_model_preferences.add(Spree::PaymentMethod::BogusCreditCard, 'my_prefs', { server: 'secret' }) + Spree::Config.static_model_preferences.add(Spree::PaymentMethod::BogusCreditCard, "my_prefs", {server: "secret"}) click_link "Payments" - expect(page).to have_link 'Payment Methods' + expect(page).to have_link "Payment Methods" click_icon :edit - select 'my_prefs', from: 'Preference Source' - click_on 'Update' - expect(page).to have_content('Using static preferences') - expect(page).to have_no_content('secret') + select "my_prefs", from: "Preference Source" + click_on "Update" + expect(page).to have_content("Using static preferences") + expect(page).to have_no_content("secret") # change back - select '(custom)', from: 'Preference Source' - click_on 'Update' - expect(page).to have_content('Test Mode') - expect(page).to have_no_content('secret') + select "(custom)", from: "Preference Source" + click_on "Update" + expect(page).to have_content("Test Mode") + expect(page).to have_no_content("secret") end after do diff --git a/backend/spec/features/admin/configuration/shipping_methods_spec.rb b/backend/spec/features/admin/configuration/shipping_methods_spec.rb index bacf55ef08d..fff187bbdcd 100644 --- a/backend/spec/features/admin/configuration/shipping_methods_spec.rb +++ b/backend/spec/features/admin/configuration/shipping_methods_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Shipping Methods", type: :feature do stub_authorization! @@ -51,7 +51,7 @@ expect(page).to have_button("Create", disabled: true) end - context 'with shipping method having a calculator with array or hash preference type' do + context "with shipping method having a calculator with array or hash preference type" do before do class ComplexShipments < Spree::ShippingCalculator preference :amount, :decimal @@ -81,13 +81,13 @@ def self.description end click_on "Create" - select 'Complex Shipments', from: 'Base Calculator' + select "Complex Shipments", from: "Base Calculator" click_on "Update" - expect(page).to have_field('Amount') - expect(page).to have_field('Currency') - expect(page).to_not have_field('Mapping') - expect(page).to_not have_field('List') + expect(page).to have_field("Amount") + expect(page).to have_field("Currency") + expect(page).to_not have_field("Mapping") + expect(page).to_not have_field("List") end end end @@ -99,12 +99,12 @@ def self.description click_icon :edit end - fill_in 'Amount', with: 20 + fill_in "Amount", with: 20 click_button "Update" - expect(page).to have_content 'successfully updated' - expect(page).to have_field 'Amount', with: '20.0' + expect(page).to have_content "successfully updated" + expect(page).to have_field "Amount", with: "20.0" end it "can change the calculator", js: true do @@ -112,16 +112,16 @@ def self.description click_icon :edit end - select 'Flexible Rate per Package Item', from: 'Base Calculator' + select "Flexible Rate per Package Item", from: "Base Calculator" - fill_in 'First Item', with: 10 - fill_in 'Additional Item', with: 20 + fill_in "First Item", with: 10 + fill_in "Additional Item", with: 20 click_button "Update" - expect(page).to have_content 'successfully updated' - expect(page).to have_field 'First Item', with: '10.0' - expect(page).to have_field 'Additional Item', with: '20.0' + expect(page).to have_content "successfully updated" + expect(page).to have_field "First Item", with: "10.0" + expect(page).to have_field "Additional Item", with: "20.0" end end end diff --git a/backend/spec/features/admin/configuration/stock_locations_spec.rb b/backend/spec/features/admin/configuration/stock_locations_spec.rb index abd817881a2..781ef1d126b 100644 --- a/backend/spec/features/admin/configuration/stock_locations_spec.rb +++ b/backend/spec/features/admin/configuration/stock_locations_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Stock Locations", type: :feature do stub_authorization! @@ -27,7 +27,7 @@ create(:stock_location) visit current_path - expect(find('#listing_stock_locations')).to have_content("NY Warehouse") + expect(find("#listing_stock_locations")).to have_content("NY Warehouse") accept_alert do click_icon :trash end diff --git a/backend/spec/features/admin/configuration/store_spec.rb b/backend/spec/features/admin/configuration/store_spec.rb index 42ae940c51c..1a566c241d0 100644 --- a/backend/spec/features/admin/configuration/store_spec.rb +++ b/backend/spec/features/admin/configuration/store_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Store", type: :feature, js: true do stub_authorization! let!(:store) do - create(:store, name: 'Test Store', url: 'test.example.org', - mail_from_address: 'test@example.org') + create(:store, name: "Test Store", url: "test.example.org", + mail_from_address: "test@example.org") end let!(:vat_country) { create(:country, iso: "DE", name: "Germany") } @@ -37,7 +37,7 @@ end it "should be able to update the default cart tax country" do - expect(page).to have_select('Tax Country for Empty Carts', selected: 'No taxes on carts without address') + expect(page).to have_select("Tax Country for Empty Carts", selected: "No taxes on carts without address") select "Germany", from: "Tax Country for Empty Carts" click_button "Update" diff --git a/backend/spec/features/admin/configuration/tax_categories_spec.rb b/backend/spec/features/admin/configuration/tax_categories_spec.rb index f172c2f3a5e..22af8c6ab25 100644 --- a/backend/spec/features/admin/configuration/tax_categories_spec.rb +++ b/backend/spec/features/admin/configuration/tax_categories_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Tax Categories", type: :feature do stub_authorization! diff --git a/backend/spec/features/admin/configuration/tax_rates_spec.rb b/backend/spec/features/admin/configuration/tax_rates_spec.rb index fcbce6bd5ea..62b84858cde 100644 --- a/backend/spec/features/admin/configuration/tax_rates_spec.rb +++ b/backend/spec/features/admin/configuration/tax_rates_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Tax Rates", type: :feature do stub_authorization! @@ -17,7 +17,7 @@ tax_rate.tax_categories.first.update_column(:deleted_at, Time.current) click_link "Tax Rates" - expect(find("table tbody td:nth-child(3)")).to have_content('N/A') + expect(find("table tbody td:nth-child(3)")).to have_content("N/A") end # Regression test for https://github.com/spree/spree/issues/1422 diff --git a/backend/spec/features/admin/configuration/taxonomies_spec.rb b/backend/spec/features/admin/configuration/taxonomies_spec.rb index d012f2aeecd..912f0e1b749 100644 --- a/backend/spec/features/admin/configuration/taxonomies_spec.rb +++ b/backend/spec/features/admin/configuration/taxonomies_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Taxonomies", type: :feature do stub_authorization! @@ -12,8 +12,8 @@ context "show" do it "should display existing taxonomies" do - create(:taxonomy, name: 'Brand') - create(:taxonomy, name: 'Categories') + create(:taxonomy, name: "Brand") + create(:taxonomy, name: "Categories") click_nav "Products", "Taxonomies" within_row(1) { expect(page).to have_content("Brand") } within_row(2) { expect(page).to have_content("Categories") } diff --git a/backend/spec/features/admin/configuration/zones_spec.rb b/backend/spec/features/admin/configuration/zones_spec.rb index 32935809bc1..1f1ab1cebae 100644 --- a/backend/spec/features/admin/configuration/zones_spec.rb +++ b/backend/spec/features/admin/configuration/zones_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Zones", type: :feature do stub_authorization! diff --git a/backend/spec/features/admin/homepage_spec.rb b/backend/spec/features/admin/homepage_spec.rb index ff43a1cf278..ef3a7e3d8fe 100644 --- a/backend/spec/features/admin/homepage_spec.rb +++ b/backend/spec/features/admin/homepage_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Homepage", type: :feature do - context 'as admin user' do + context "as admin user" do stub_authorization! context "visiting the homepage" do @@ -34,20 +34,20 @@ end it "should have a link to products" do - within('.selected .admin-subnav') { expect(page).to have_link("Products", href: "/admin/products") } + within(".selected .admin-subnav") { expect(page).to have_link("Products", href: "/admin/products") } end it "should have a link to option types" do - within('.selected .admin-subnav') { expect(page).to have_link("Option Types", href: "/admin/option_types") } + within(".selected .admin-subnav") { expect(page).to have_link("Option Types", href: "/admin/option_types") } end it "should have a link to property types" do - within('.selected .admin-subnav') { expect(page).to have_link("Property Types", href: "/admin/properties") } + within(".selected .admin-subnav") { expect(page).to have_link("Property Types", href: "/admin/properties") } end end end - context 'as fakedispatch user' do + context "as fakedispatch user" do before do allow_any_instance_of(Spree::Admin::BaseController).to receive(:spree_current_user).and_return(nil) end @@ -59,14 +59,14 @@ can [:admin], Spree::Zone end - it 'should only display tabs fakedispatch has access to' do + it "should only display tabs fakedispatch has access to" do visit spree.admin_path - expect(page).to have_link('Orders') - expect(page).not_to have_link('Products') - expect(page).not_to have_link('Promotions') - expect(page).to have_link('Settings') - expect(page).not_to have_link('Stock Locations', visible: false) - expect(page).to have_link('Zones', visible: false) + expect(page).to have_link("Orders") + expect(page).not_to have_link("Products") + expect(page).not_to have_link("Promotions") + expect(page).to have_link("Settings") + expect(page).not_to have_link("Stock Locations", visible: false) + expect(page).to have_link("Zones", visible: false) end end end diff --git a/backend/spec/features/admin/javascript_format_money_spec.rb b/backend/spec/features/admin/javascript_format_money_spec.rb index 6af6690bd46..e8aa231f556 100644 --- a/backend/spec/features/admin/javascript_format_money_spec.rb +++ b/backend/spec/features/admin/javascript_format_money_spec.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -RSpec.describe 'JS Spree.formatMoney', js: true do +RSpec.describe "JS Spree.formatMoney", js: true do stub_authorization! # This is a slightly hacky spec to ensure that our JS will format money in # the same was as our ruby code. # This should probably replaced with a pure JS test in the future. - it 'should behave identically to Spree::Money#to_s' do - visit '/admin' + it "should behave identically to Spree::Money#to_s" do + visit "/admin" Money::Currency.all.map(&:id).map(&:to_s).map(&:upcase).uniq.each do |currency| money = Spree::Money.new(1234, currency:) diff --git a/backend/spec/features/admin/locale_spec.rb b/backend/spec/features/admin/locale_spec.rb index f899b2409f7..0a16c99c038 100644 --- a/backend/spec/features/admin/locale_spec.rb +++ b/backend/spec/features/admin/locale_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "setting locale", type: :feature do stub_authorization! @@ -13,9 +13,9 @@ month_names: [] }, spree: { - i18n: { this_file_language: "Français" }, + i18n: {this_file_language: "Français"}, admin: { - tab: { orders: "Ordres" } + tab: {orders: "Ordres"} }, listing_orders: "Ordres" }) diff --git a/backend/spec/features/admin/orders/adjustments_spec.rb b/backend/spec/features/admin/orders/adjustments_spec.rb index 880adaaf1aa..4697266b1be 100644 --- a/backend/spec/features/admin/orders/adjustments_spec.rb +++ b/backend/spec/features/admin/orders/adjustments_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Adjustments", type: :feature do stub_authorization! @@ -13,8 +13,8 @@ let!(:order) do create( :completed_order_with_totals, - line_items_attributes: [{ price: 10, variant: }] * 5, - ship_address:, + line_items_attributes: [{price: 10, variant:}] * 5, + ship_address: ) end let!(:line_item) { order.line_items[0] } @@ -22,7 +22,7 @@ let(:tax_category) { create(:tax_category) } let(:variant) { create(:variant, tax_category:) } - let!(:adjustment) { order.adjustments.create!(order:, label: 'Rebate', amount: 10) } + let!(:adjustment) { order.adjustments.create!(order:, label: "Rebate", amount: 10) } before(:each) do order.recalculate @@ -35,7 +35,7 @@ context "admin managing adjustments" do it "should display the correct values for existing order adjustments" do - within first('table tr', text: 'Tax') do + within first("table tr", text: "Tax") do expect(column_text(2)).to match(/TaxCategory - \d+ 20\.0%/) expect(column_text(3)).to eq("$2.00") end @@ -72,7 +72,7 @@ context "admin editing an adjustment" do before(:each) do - within('table tr', text: 'Rebate') do + within("table tr", text: "Rebate") do click_icon :edit end end @@ -142,24 +142,24 @@ end context "deleting an adjustment" do - context 'when the adjustment is finalized' do + context "when the adjustment is finalized" do let!(:adjustment) { super().tap(&:finalize!) } - it 'should not be possible' do - within('table tr', text: 'Rebate') do - expect(page).not_to have_css('.fa-trash') + it "should not be possible" do + within("table tr", text: "Rebate") do + expect(page).not_to have_css(".fa-trash") end end end it "should update the total", js: true do accept_alert do - within('table tr', text: 'Rebate') do + within("table tr", text: "Rebate") do click_icon(:trash) end end - expect(page).to have_content('Total: $170.00', normalize_ws: true) + expect(page).to have_content("Total: $170.00", normalize_ws: true) end end end @@ -180,8 +180,8 @@ end it "allows to enter a coupon code", :js do - expect(page).to have_content('Add Coupon Code') - expect(page).to have_selector('input#coupon_code') + expect(page).to have_content("Add Coupon Code") + expect(page).to have_selector("input#coupon_code") end end @@ -192,8 +192,8 @@ end it "doesn't allow to enter a coupon code" do - expect(page).not_to have_content('Add Coupon Code') - expect(page).not_to have_selector('input#coupon_code') + expect(page).not_to have_content("Add Coupon Code") + expect(page).not_to have_selector("input#coupon_code") end end end diff --git a/backend/spec/features/admin/orders/cancelling_and_resuming_spec.rb b/backend/spec/features/admin/orders/cancelling_and_resuming_spec.rb index 656fdb24159..11cdad2cdf1 100644 --- a/backend/spec/features/admin/orders/cancelling_and_resuming_spec.rb +++ b/backend/spec/features/admin/orders/cancelling_and_resuming_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Cancelling + Resuming", type: :feature do stub_authorization! - let(:user) { build_stubbed(:user, id: 123, spree_api_key: 'fake') } + let(:user) { build_stubbed(:user, id: 123, spree_api_key: "fake") } before do allow(user).to receive(:has_spree_role?).and_return(true) @@ -15,7 +15,7 @@ let(:order) do order = create(:order) order.update_columns({ - state: 'complete', + state: "complete", completed_at: Time.current }) order @@ -23,22 +23,22 @@ it "can cancel an order" do visit spree.edit_admin_order_path(order.number) - click_button 'Cancel' + click_button "Cancel" within(".additional-info") do - expect(find('dt#order_status + dd')).to have_content("Canceled") + expect(find("dt#order_status + dd")).to have_content("Canceled") end end context "with a cancelled order" do before do - order.update_column(:state, 'canceled') + order.update_column(:state, "canceled") end it "can resume an order" do visit spree.edit_admin_order_path(order.number) - click_button 'Resume' + click_button "Resume" within(".additional-info") do - expect(find('dt#order_status + dd')).to have_content("Resumed") + expect(find("dt#order_status + dd")).to have_content("Resumed") end end end diff --git a/backend/spec/features/admin/orders/cancelling_inventory_spec.rb b/backend/spec/features/admin/orders/cancelling_inventory_spec.rb index 8d622f05659..1d9eb3277bf 100644 --- a/backend/spec/features/admin/orders/cancelling_inventory_spec.rb +++ b/backend/spec/features/admin/orders/cancelling_inventory_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Cancel items" do stub_authorization! @@ -26,10 +26,10 @@ def visit_order it "can cancel the item" do visit_order - click_link 'Cancel Items' + click_link "Cancel Items" within_row(1) do - check 'inventory_unit_ids[]' + check "inventory_unit_ids[]" end click_button "Cancel Items" @@ -44,7 +44,7 @@ def visit_order it "does not display the link to cancel items" do visit_order - expect(page).to have_no_content('Cancel Items') + expect(page).to have_no_content("Cancel Items") end end end diff --git a/backend/spec/features/admin/orders/customer_details_spec.rb b/backend/spec/features/admin/orders/customer_details_spec.rb index ce007aeaad9..39f7722e2d7 100644 --- a/backend/spec/features/admin/orders/customer_details_spec.rb +++ b/backend/spec/features/admin/orders/customer_details_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Customer Details", type: :feature, js: true do include OrderFeatureHelper @@ -10,14 +10,14 @@ let(:country) { create(:country, name: "Kangaland") } let(:state) { create(:state, name: "Alabama", country:) } let!(:shipping_method) { create(:shipping_method) } - let!(:order) { create(:order, ship_address:, bill_address:, state: 'complete', completed_at: "2011-02-01 12:36:15") } + let!(:order) { create(:order, ship_address:, bill_address:, state: "complete", completed_at: "2011-02-01 12:36:15") } let!(:product) { create(:product_in_stock) } # We need a unique name that will appear for the customer dropdown let!(:ship_address) { create(:address, country:, state:, name: "Jane Doe") } let!(:bill_address) { create(:address, country:, state:, name: "Jane Doe") } - let!(:user) { create(:user, email: 'foobar@example.com', ship_address:, bill_address:) } + let!(:user) { create(:user, email: "foobar@example.com", ship_address:, bill_address:) } context "brand new order" do let(:quantity) { 1 } @@ -29,7 +29,7 @@ add_line_item(product.name, quantity:) - expect(page).to have_css('.line-item') + expect(page).to have_css(".line-item") click_link "Customer" targetted_select2 "foobar@example.com", from: "#s2id_customer_search" end @@ -37,14 +37,14 @@ # Regression test for https://github.com/spree/spree/issues/3335 and https://github.com/spree/spree/issues/5317 it "associates a user when not using guest checkout" do # 5317 - Address prefills using user's default. - expect(page).to have_field('Name', with: user.bill_address.name) - expect(page).to have_field('Street Address', with: user.bill_address.address1) + expect(page).to have_field("Name", with: user.bill_address.name) + expect(page).to have_field("Street Address", with: user.bill_address.address1) expect(page).to have_field("Street Address (cont'd)", with: user.bill_address.address2) - expect(page).to have_field('City', with: user.bill_address.city) - expect(page).to have_field('Zip Code', with: user.bill_address.zipcode) - expect(page).to have_select('Country', selected: "United States of America", visible: false) - expect(page).to have_select('State', selected: user.bill_address.state.name, visible: false) - expect(page).to have_field('Phone', with: user.bill_address.phone) + expect(page).to have_field("City", with: user.bill_address.city) + expect(page).to have_field("Zip Code", with: user.bill_address.zipcode) + expect(page).to have_select("Country", selected: "United States of America", visible: false) + expect(page).to have_select("State", selected: user.bill_address.state.name, visible: false) + expect(page).to have_field("Phone", with: user.bill_address.phone) click_button "Update" expect(Spree::Order.last.user).not_to be_nil end @@ -53,7 +53,7 @@ it "does not reset guest checkout to true when returning to customer tab" do click_button "Update" click_link "Customer" - expect(find('#guest_checkout_true')).not_to be_checked + expect(find("#guest_checkout_true")).not_to be_checked end context "when required quantity is more than available" do @@ -62,7 +62,7 @@ it "displays an error" do click_button "Update" - expect(page).to have_content I18n.t('spree.insufficient_stock_for_order') + expect(page).to have_content I18n.t("spree.insufficient_stock_for_order") end end end @@ -76,7 +76,7 @@ visit spree.admin_path click_link "Orders" - within('table#listing_orders') { click_icon(:edit) } + within("table#listing_orders") { click_icon(:edit) } end context "selected country has no state" do @@ -138,10 +138,10 @@ click_link "Customer" fill_in "order_email", with: "newemail@example.com" click_button "Update" - expect(page).to have_content 'Customer Details Updated' + expect(page).to have_content "Customer Details Updated" click_link "Customer" - expect(page).to have_field 'Customer Email', with: order.reload.email - within '#order_user_link' do + expect(page).to have_field "Customer Email", with: order.reload.email + within "#order_user_link" do expect(page).to have_link user.email end end @@ -156,15 +156,15 @@ specify do click_link "Customer" # Need to fill in valid information so it passes validations - fill_in "order_ship_address_attributes_name", with: "John 99 Doe" - fill_in "order_ship_address_attributes_company", with: "Company" - fill_in "order_ship_address_attributes_address1", with: "100 first lane" - fill_in "order_ship_address_attributes_address2", with: "#101" - fill_in "order_ship_address_attributes_city", with: "Bethesda" - fill_in "order_ship_address_attributes_zipcode", with: "20170" + fill_in "order_ship_address_attributes_name", with: "John 99 Doe" + fill_in "order_ship_address_attributes_company", with: "Company" + fill_in "order_ship_address_attributes_address1", with: "100 first lane" + fill_in "order_ship_address_attributes_address2", with: "#101" + fill_in "order_ship_address_attributes_city", with: "Bethesda" + fill_in "order_ship_address_attributes_zipcode", with: "20170" within("#shipping") do - select 'Alabama', from: "State" + select "Alabama", from: "State" end fill_in "order_ship_address_attributes_phone", with: "123-456-7890" @@ -174,13 +174,13 @@ end def fill_in_address - fill_in "Name", with: "John 99 Doe" - fill_in "Company", with: "Company" - fill_in "Street Address", with: "100 first lane" + fill_in "Name", with: "John 99 Doe" + fill_in "Company", with: "Company" + fill_in "Street Address", with: "100 first lane" fill_in "Street Address (cont'd)", with: "#101" - fill_in "City", with: "Bethesda" - fill_in "Zip Code", with: "20170" - select 'Alabama', from: "State" + fill_in "City", with: "Bethesda" + fill_in "Zip Code", with: "20170" + select "Alabama", from: "State" fill_in "Phone", with: "123-456-7890" end end diff --git a/backend/spec/features/admin/orders/customer_returns_spec.rb b/backend/spec/features/admin/orders/customer_returns_spec.rb index 4ba5e5e3a35..396b39f7787 100644 --- a/backend/spec/features/admin/orders/customer_returns_spec.rb +++ b/backend/spec/features/admin/orders/customer_returns_spec.rb @@ -1,82 +1,82 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -describe 'Customer returns', type: :feature do +describe "Customer returns", type: :feature do stub_authorization! def create_customer_return(value) - find('#select-all').click + find("#select-all").click page.execute_script "$('select.add-item').val(#{value.to_s.inspect})" - select 'NY Warehouse', from: 'Stock Location' - click_button 'Create' + select "NY Warehouse", from: "Stock Location" + click_button "Create" end def expect_order_state_label_to_eq(text) - within('dd.order-state') { expect(page).to have_content(text) } + within("dd.order-state") { expect(page).to have_content(text) } end before do visit spree.new_admin_order_customer_return_path(order) end - context 'when the order has more than one line item' do + context "when the order has more than one line item" do let(:order) { create :shipped_order, line_items_count: 2 } context 'when creating a return with state "Received"' do - it 'marks the order as returned', :js, :flaky do - create_customer_return('receive') + it "marks the order as returned", :js, :flaky do + create_customer_return("receive") - expect(page).to have_content 'Customer Return has been successfully created' + expect(page).to have_content "Customer Return has been successfully created" - expect_order_state_label_to_eq('Returned') + expect_order_state_label_to_eq("Returned") end end - it 'disables the button at submit' do + it "disables the button at submit" do expect(page).to have_css('input[type="submit"][data-disable-with="Create"]') end context 'when creating a return with state "In Transit" and then marking it as "Received"' do it 'disables the "Receive" button at submit', :js do - create_customer_return('in_transit') + create_customer_return("in_transit") expect(page).to have_css('input[type="submit"][data-disable-with="Receive"]') end - it 'marks the order as returned', :js do - create_customer_return('in_transit') - expect(page).to have_content 'Customer Return has been successfully created' - expect_order_state_label_to_eq('Complete') + it "marks the order as returned", :js do + create_customer_return("in_transit") + expect(page).to have_content "Customer Return has been successfully created" + expect_order_state_label_to_eq("Complete") - within('[data-hook="rejected_return_items"] tbody tr:nth-child(1)') { click_button('Receive') } - expect_order_state_label_to_eq('Complete') + within('[data-hook="rejected_return_items"] tbody tr:nth-child(1)') { click_button("Receive") } + expect_order_state_label_to_eq("Complete") - within('[data-hook="rejected_return_items"] tbody') { click_button('Receive') } - expect_order_state_label_to_eq('Returned') + within('[data-hook="rejected_return_items"] tbody') { click_button("Receive") } + expect_order_state_label_to_eq("Returned") end end end - context 'when the order has only one line item' do + context "when the order has only one line item" do let(:order) { create :shipped_order, line_items_count: 1 } context 'when creating a return with state "Received"' do - it 'marks the order as returned', :js do - create_customer_return('receive') + it "marks the order as returned", :js do + create_customer_return("receive") - expect(page).to have_content 'Customer Return has been successfully created' - expect_order_state_label_to_eq('Returned') + expect(page).to have_content "Customer Return has been successfully created" + expect_order_state_label_to_eq("Returned") end end context 'when creating a return with state "In Transit" and then marking it as "Received"' do - it 'marks the order as returned', :js do - create_customer_return('in_transit') - expect(page).to have_content 'Customer Return has been successfully created' - expect_order_state_label_to_eq('Complete') + it "marks the order as returned", :js do + create_customer_return("in_transit") + expect(page).to have_content "Customer Return has been successfully created" + expect_order_state_label_to_eq("Complete") - within('[data-hook="rejected_return_items"] tbody tr:nth-child(1)') { click_button('Receive') } - expect_order_state_label_to_eq('Returned') + within('[data-hook="rejected_return_items"] tbody tr:nth-child(1)') { click_button("Receive") } + expect_order_state_label_to_eq("Returned") end end end diff --git a/backend/spec/features/admin/orders/line_items_spec.rb b/backend/spec/features/admin/orders/line_items_spec.rb index 188fd7cc4f2..94c03de6199 100644 --- a/backend/spec/features/admin/orders/line_items_spec.rb +++ b/backend/spec/features/admin/orders/line_items_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" # Tests for https://github.com/spree/spree/issues/3958's features describe "Order Line Items", type: :feature, js: true do @@ -25,10 +25,10 @@ fill_in "quantity", with: 10 find(".save-line-item").click end - within '.line-item-qty-show' do + within ".line-item-qty-show" do expect(page).to have_content("10") end - within '.line-item-total' do + within ".line-item-total" do expect(page).to have_content("$100.00") end end @@ -46,7 +46,7 @@ end end - expect(find('#order_total')).to have_content("$0.00") + expect(find("#order_total")).to have_content("$0.00") expect(page).not_to have_content(product_name) end end diff --git a/backend/spec/features/admin/orders/listing_spec.rb b/backend/spec/features/admin/orders/listing_spec.rb index 3528d5d6b88..e56bd0e17b7 100644 --- a/backend/spec/features/admin/orders/listing_spec.rb +++ b/backend/spec/features/admin/orders/listing_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Orders Listing", type: :feature, js: true do stub_authorization! @@ -12,19 +12,19 @@ visit spree.admin_orders_path end - it 'displays the new order button' do - expect(page).to have_link('New Order') + it "displays the new order button" do + expect(page).to have_link("New Order") end - context 'without create permission' do + context "without create permission" do custom_authorization! do |_user| cannot :manage, Spree::Order can :admin, Spree::Order can :read, Spree::Order end - it 'does not display the new order button' do - expect(page).to_not have_link('New Order') + it "does not display the new order button" do + expect(page).to_not have_link("New Order") end end @@ -51,7 +51,7 @@ within_row(1) { expect(page).to have_content("R200") } within_row(2) { expect(page).to have_content("R100") } - within('table#listing_orders thead') { click_link "Number" } + within("table#listing_orders thead") { click_link "Number" } # number asc within_row(1) { expect(page).to have_content("R100") } @@ -73,7 +73,7 @@ main_store, other_store = stores click_on "Filter Results" - select main_store.name, from: I18n.t('spree.store') + select main_store.name, from: I18n.t("spree.store") click_on "Filter Results" within_row(1) do @@ -89,7 +89,7 @@ it "should be able to search orders" do click_on "Filter Results" fill_in "q_number_start", with: "R200" - click_on 'Filter Results' + click_on "Filter Results" within_row(1) do expect(page).to have_content("R200") end @@ -100,8 +100,8 @@ it "should be able to filter on variant_id" do click_on "Filter Results" - select2_search @order1.products.first.sku, from: I18n.t('spree.variant') - click_on 'Filter Results' + select2_search @order1.products.first.sku, from: I18n.t("spree.variant") + click_on "Filter Results" within_row(1) do expect(page).to have_content(@order1.number) @@ -120,7 +120,7 @@ 10.times { Spree::Order.create email: "incomplete@example.com" } click_on "Filter Results" uncheck "q_completed_at_not_null" - click_on 'Filter Results' + click_on "Filter Results" within(".pagination", match: :first) do click_link "2" end @@ -134,7 +134,7 @@ click_on "Filter Results" fill_in "q_created_at_gt", with: Date.current - click_on 'Filter Results' + click_on "Filter Results" within_row(1) { expect(page).to have_content("R100") } # Ensure that the other order doesn't show up @@ -143,7 +143,7 @@ context "when toggling the completed orders checkbox" do before do - create(:order, number: 'R300', completed_at: nil, state: 'cart') + create(:order, number: "R300", completed_at: nil, state: "cart") end it "shows both complete and incomplete orders" do @@ -154,7 +154,7 @@ expect(page).to_not have_content("R300") uncheck "q_completed_at_not_null" - click_on 'Filter Results' + click_on "Filter Results" expect(page).to have_content("R200") expect(page).to have_content("R300") diff --git a/backend/spec/features/admin/orders/log_entries_spec.rb b/backend/spec/features/admin/orders/log_entries_spec.rb index bf7dca00e51..2a0dbc5b9de 100644 --- a/backend/spec/features/admin/orders/log_entries_spec.rb +++ b/backend/spec/features/admin/orders/log_entries_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Log entries", type: :feature do stub_authorization! diff --git a/backend/spec/features/admin/orders/new_order_spec.rb b/backend/spec/features/admin/orders/new_order_spec.rb index ca1b50891c4..b4c7c3147a8 100644 --- a/backend/spec/features/admin/orders/new_order_spec.rb +++ b/backend/spec/features/admin/orders/new_order_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "New Order", type: :feature do include OrderFeatureHelper let!(:product) { create(:product_in_stock) } - let!(:state) { create(:state, state_code: 'CA') } + let!(:state) { create(:state, state_code: "CA") } let!(:store) { create(:store) } let!(:user) { create(:user, ship_address: create(:address), bill_address: create(:address)) } let!(:payment_method) { create(:check_payment_method) } @@ -22,13 +22,13 @@ it "does check if you have a billing address before letting you add shipments" do click_on "Shipments" - expect(page).to have_content 'Please fill in customer info' + expect(page).to have_content "Please fill in customer info" expect(current_path).to eql(spree.edit_admin_order_customer_path(Spree::Order.last)) end it "default line item quantity is 1", js: true do within ".line-items" do - expect(page).to have_field 'quantity', with: '1' + expect(page).to have_field "quantity", with: "1" end end @@ -41,7 +41,7 @@ targetted_select2_search user.email, from: "#s2id_customer_search" end - expect(page).to have_checked_field('order_use_billing') + expect(page).to have_checked_field("order_use_billing") fill_in_address click_on "Update" @@ -64,12 +64,12 @@ click_on "Shipments" click_on "Ship" - within '.carton-state' do - expect(page).to have_content('Shipped') + within ".carton-state" do + expect(page).to have_content("Shipped") end end - it 'can create split payments', js: true do + it "can create split payments", js: true do add_line_item product.name click_on "Customer" @@ -78,17 +78,17 @@ targetted_select2_search user.email, from: "#s2id_customer_search" end - expect(page).to have_checked_field('order_use_billing') + expect(page).to have_checked_field("order_use_billing") fill_in_address click_on "Update" click_on "Payments" - fill_in "Amount", with: '10.00' - click_on 'Update' + fill_in "Amount", with: "10.00" + click_on "Update" - click_on 'New Payment' - fill_in "Amount", with: '29.98' - click_on 'Update' + click_on "New Payment" + fill_in "Amount", with: "29.98" + click_on "Update" expect(page).to have_content("$10.00") expect(page).to have_content("$29.98") @@ -108,7 +108,7 @@ targetted_select2_search user.email, from: "#s2id_customer_search" end - expect(page).to have_checked_field('order_use_billing') + expect(page).to have_checked_field("order_use_billing") fill_in_address click_on "Update" @@ -152,12 +152,12 @@ targetted_select2_search user.email, from: "#s2id_customer_search" end - expect(page).to have_checked_field('order_use_billing') + expect(page).to have_checked_field("order_use_billing") fill_in_address click_on "Update" # Automatically redirected to Shipments page - within '.no-objects-found' do + within ".no-objects-found" do click_on "Cart" end @@ -209,13 +209,13 @@ targetted_select2_search user.email, from: "#s2id_customer_search" end - expect(find('#order_bill_address_attributes_state_id').value).to eq user.bill_address.state_id.to_s + expect(find("#order_bill_address_attributes_state_id").value).to eq user.bill_address.state_id.to_s within "#select-customer" do targetted_select2_search other_user.email, from: "#s2id_customer_search" end - expect(find('#order_bill_address_attributes_state_id').value).to eq other_user.bill_address.state_id.to_s + expect(find("#order_bill_address_attributes_state_id").value).to eq other_user.bill_address.state_id.to_s end end end @@ -231,12 +231,12 @@ it "transitions to confirm not to complete" do add_line_item product.name - expect(page).to have_css('.line-item') + expect(page).to have_css(".line-item") click_link "Customer" targetted_select2 user.email, from: "#s2id_customer_search" click_button "Update" - expect(page).to have_css('.order-state', text: 'Confirm') + expect(page).to have_css(".order-state", text: "Confirm") end end @@ -252,117 +252,117 @@ end end - context 'with a checkout_zone set as the country of Canada' do - let!(:canada) { create(:country, iso: 'CA', states_required: true) } + context "with a checkout_zone set as the country of Canada" do + let!(:canada) { create(:country, iso: "CA", states_required: true) } let!(:canada_state) { create(:state, country: canada) } - let!(:checkout_zone) { create(:zone, name: 'Checkout Zone', countries: [canada]) } + let!(:checkout_zone) { create(:zone, name: "Checkout Zone", countries: [canada]) } before do Spree::Country.update_all(states_required: true) stub_spree_preferences(checkout_zone: checkout_zone.name) end - context 'and default_country_iso of the United States' do + context "and default_country_iso of the United States" do before do - stub_spree_preferences(default_country_iso: Spree::Country.find_by!(iso: 'US').iso) + stub_spree_preferences(default_country_iso: Spree::Country.find_by!(iso: "US").iso) end - it 'the shipping address country select includes only options for Canada' do + it "the shipping address country select includes only options for Canada" do visit spree.new_admin_order_path - click_link 'Customer' - within '#shipping' do + click_link "Customer" + within "#shipping" do expect(page).to have_select( - 'Country', - options: ['Canada'] + "Country", + options: ["Canada"] ) end end - it 'does not show any shipping address state' do + it "does not show any shipping address state" do visit spree.new_admin_order_path - click_link 'Customer' - within '#shipping' do + click_link "Customer" + within "#shipping" do expect(page).to have_select( - 'State', + "State", disabled: true, visible: false, - options: [''] + options: [""] ) end end - it 'the billing address country select includes only options for Canada' do + it "the billing address country select includes only options for Canada" do visit spree.new_admin_order_path - click_link 'Customer' - within '#billing' do + click_link "Customer" + within "#billing" do expect(page).to have_select( - 'Country', - options: ['Canada'] + "Country", + options: ["Canada"] ) end end - it 'does not show any billing address state' do + it "does not show any billing address state" do visit spree.new_admin_order_path - click_link 'Customer' - within '#billing' do + click_link "Customer" + within "#billing" do expect(page).to have_select( - 'State', + "State", disabled: true, visible: false, - options: [''] + options: [""] ) end end end - context 'and default_country_iso of Canada' do + context "and default_country_iso of Canada" do before do - stub_spree_preferences(default_country_iso: Spree::Country.find_by!(iso: 'CA').iso) + stub_spree_preferences(default_country_iso: Spree::Country.find_by!(iso: "CA").iso) end - it 'defaults the shipping address country to Canada' do + it "defaults the shipping address country to Canada" do visit spree.new_admin_order_path - click_link 'Customer' - within '#shipping' do + click_link "Customer" + within "#shipping" do expect(page).to have_select( - 'Country', - selected: 'Canada', - options: ['Canada'] + "Country", + selected: "Canada", + options: ["Canada"] ) end end - it 'shows relevant shipping address states' do + it "shows relevant shipping address states" do visit spree.new_admin_order_path - click_link 'Customer' - within '#shipping' do + click_link "Customer" + within "#shipping" do expect(page).to have_select( - 'State', - options: [''] + canada.states.map(&:name) + "State", + options: [""] + canada.states.map(&:name) ) end end - it 'defaults the billing address country to Canada' do + it "defaults the billing address country to Canada" do visit spree.new_admin_order_path - click_link 'Customer' - within '#billing' do + click_link "Customer" + within "#billing" do expect(page).to have_select( - 'Country', - selected: 'Canada', - options: ['Canada'] + "Country", + selected: "Canada", + options: ["Canada"] ) end end - it 'shows relevant billing address states' do + it "shows relevant billing address states" do visit spree.new_admin_order_path - click_link 'Customer' - within '#billing' do + click_link "Customer" + within "#billing" do expect(page).to have_select( - 'State', - options: [''] + canada.states.map(&:name) + "State", + options: [""] + canada.states.map(&:name) ) end end @@ -370,11 +370,11 @@ end def fill_in_address - fill_in "Name", with: "John 99 Doe" - fill_in "Street Address", with: "100 first lane" - fill_in "Street Address (cont'd)", with: "#101" - fill_in "City", with: "Bethesda" - fill_in "Zip Code", with: "20170" + fill_in "Name", with: "John 99 Doe" + fill_in "Street Address", with: "100 first lane" + fill_in "Street Address (cont'd)", with: "#101" + fill_in "City", with: "Bethesda" + fill_in "Zip Code", with: "20170" select state.name, from: "State" fill_in "Phone", with: "123-456-7890" end diff --git a/backend/spec/features/admin/orders/new_refund_spec.rb b/backend/spec/features/admin/orders/new_refund_spec.rb index 039e54fc520..cc659ad7230 100644 --- a/backend/spec/features/admin/orders/new_refund_spec.rb +++ b/backend/spec/features/admin/orders/new_refund_spec.rb @@ -1,35 +1,35 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -RSpec.describe 'New Refund creation', :js do +RSpec.describe "New Refund creation", :js do stub_authorization! let(:order) { create :order_ready_to_ship } let(:payment) { order.payments.first } - let(:amount) { '10.99' } + let(:amount) { "10.99" } let!(:reason) { create :refund_reason } - it 'creates a new refund' do + it "creates a new refund" do visit spree.new_admin_order_payment_refund_path(order, payment) - expect(page).not_to have_selector 'td', text: amount - within '.new_refund' do - fill_in 'refund_amount', with: amount - select reason.name, from: 'Reason' - click_button 'Refund' + expect(page).not_to have_selector "td", text: amount + within ".new_refund" do + fill_in "refund_amount", with: amount + select reason.name, from: "Reason" + click_button "Refund" end - expect(page).to have_content 'Refund has been successfully created!' - expect(page).to have_selector 'td', text: amount + expect(page).to have_content "Refund has been successfully created!" + expect(page).to have_selector "td", text: amount end - it 'disables the button at submit' do + it "disables the button at submit" do visit spree.new_admin_order_payment_refund_path(order, payment) page.execute_script "$('form').submit(function(e) { e.preventDefault()})" - within '.new_refund' do - fill_in 'refund_amount', with: amount - select reason.name, from: 'Reason' - click_button 'Refund' - expect(page).to have_button('Refund', disabled: true) + within ".new_refund" do + fill_in "refund_amount", with: amount + select reason.name, from: "Reason" + click_button "Refund" + expect(page).to have_button("Refund", disabled: true) end end end diff --git a/backend/spec/features/admin/orders/order_details_spec.rb b/backend/spec/features/admin/orders/order_details_spec.rb index c3806e6a5fb..d1af048f136 100644 --- a/backend/spec/features/admin/orders/order_details_spec.rb +++ b/backend/spec/features/admin/orders/order_details_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Order Details", type: :feature, js: true do include OrderFeatureHelper let!(:stock_location) { create(:stock_location) } - let!(:product) { create(:product, name: 'spree t-shirt', price: 20.00) } - let(:order) { create(:order, state: 'complete', completed_at: "2011-02-01 12:36:15", number: "R100") } + let!(:product) { create(:product, name: "spree t-shirt", price: 20.00) } + let(:order) { create(:order, state: "complete", completed_at: "2011-02-01 12:36:15", number: "R100") } let(:state) { create(:state) } let(:line_item) { order.line_items.first } @@ -23,7 +23,7 @@ order.reload end - context 'as Admin' do + context "as Admin" do stub_authorization! context "cart edit page" do @@ -42,7 +42,7 @@ expect(page).to have_content("spree t-shirt") expect(page).to have_content("$40.00") - within('tr', text: line_item.sku) do + within("tr", text: line_item.sku) do click_icon :edit fill_in "quantity", with: "1" end @@ -53,8 +53,8 @@ end end - context 'when adding an item' do - context 'when the item can be added to the existing shipment' do + context "when adding an item" do + context "when the item can be added to the existing shipment" do it "adds the item to the existing shipment" do expect(order.shipments.count).to be 1 @@ -68,15 +68,15 @@ end end - context 'when the items cannot be added to the existing shipment' do + context "when the items cannot be added to the existing shipment" do before do create :payment, order:, amount: order.amount visit spree.admin_order_payments_path(order) - find('.fa-capture').click + find(".fa-capture").click end it "adds an item creating a new shipment and changes the payment status" do - within('#payment_status') do + within("#payment_status") do expect(page).to have_content("Paid") end @@ -98,7 +98,7 @@ add_line_item product.name, quantity: 2 - within 'table.line-items' do + within "table.line-items" do expect(page).to have_content product.name expect(page).to have_content product.price end @@ -109,11 +109,11 @@ expect(page).to have_content("$79.98") end - within('#payment_status') do + within("#payment_status") do expect(page).to have_content("Balance due") end - click_link 'Shipments' + click_link "Shipments" order.shipments.each do |shipment| expect(page).to have_content shipment.number @@ -125,7 +125,7 @@ it "can remove an item from a shipment" do expect(page).to have_content("spree t-shirt") - within('tr', text: line_item.sku) do + within("tr", text: line_item.sku) do accept_confirm "Are you sure you want to delete this record?" do click_icon :trash end @@ -134,7 +134,7 @@ expect(page).not_to have_content("spree t-shirt") # Should have a new item row - expect(page).to have_field('quantity') + expect(page).to have_field("quantity") end it "cannot remove all items with a completed order" do @@ -148,7 +148,7 @@ it "can cancel removing an item from a shipment" do expect(page).to have_content("spree t-shirt") - within('tr', text: line_item.sku) do + within("tr", text: line_item.sku) do # Click "cancel" on confirmation dialog dismiss_confirm "Are you sure you want to delete this record?" do click_icon :trash @@ -184,7 +184,7 @@ click_icon :check end - expect(page).not_to have_css('#selected_shipping_rate_id') + expect(page).not_to have_css("#selected_shipping_rate_id") expect(page).to have_content("UPS Ground") end @@ -199,7 +199,7 @@ click_icon :check end - expect(page).not_to have_css('#selected_shipping_rate_id') + expect(page).not_to have_css("#selected_shipping_rate_id") expect(page).to have_no_content("UPS Ground") expect(page).to have_content("Admin Free Shipping") end @@ -212,7 +212,7 @@ end context "with special_instructions present" do - let(:order) { create(:order, state: 'complete', completed_at: "2011-02-01 12:36:15", number: "R100", special_instructions: "Very special instructions here") } + let(:order) { create(:order, state: "complete", completed_at: "2011-02-01 12:36:15", number: "R100", special_instructions: "Very special instructions here") } it "will show the special_instructions" do visit spree.edit_admin_order_path(order) expect(page).to have_content("Very special instructions here") @@ -238,10 +238,10 @@ let(:count_on_hand) { 0 } it "doesn't display the out of stock variant in the search results" do - click_on 'Add Item' + click_on "Add Item" select2_search_without_selection product.name, from: ".select-variant" - expect(page).to have_selector('.select2-no-results') + expect(page).to have_selector(".select2-no-results") within(".select2-no-results") do expect(page).to have_content("No matches found") end @@ -249,8 +249,8 @@ end end - context 'Shipment edit page' do - let!(:stock_location2) { create(:stock_location, name: 'Clarksville') } + context "Shipment edit page" do + let!(:stock_location2) { create(:stock_location, name: "Clarksville") } before do product.master.stock_items.reload.each do |stock_item| @@ -259,27 +259,27 @@ end end - context 'splitting to location' do - it 'should warn you if you have not selected a location or shipment' do + context "splitting to location" do + it "should warn you if you have not selected a location or shipment" do visit spree.edit_admin_order_path(order) - within('tr', text: line_item.sku) { click_icon 'arrows-h' } - accept_alert 'Please select the split destination.' do + within("tr", text: line_item.sku) { click_icon "arrows-h" } + accept_alert "Please select the split destination." do click_icon :ok end end - context 'there is enough stock at the other location' do - it 'should allow me to make a split' do + context "there is enough stock at the other location" do + it "should allow me to make a split" do expect(order.shipments.count).to eq(1) expect(order.shipments.first.inventory_units_for(product.master).count).to eq(2) visit spree.edit_admin_order_path(order) - within('tr', text: line_item.sku) { click_icon 'arrows-h' } + within("tr", text: line_item.sku) { click_icon "arrows-h" } complete_split_to(stock_location2) - expect(page).to have_css('.shipment', count: 2) + expect(page).to have_css(".shipment", count: 2) expect(order.shipments.count).to eq(2) expect(order.shipments.last.backordered?).to eq(false) @@ -287,12 +287,12 @@ expect(order.shipments.last.inventory_units_for(product.master).count).to eq(1) end - it 'should allow me to make a transfer via splitting off all stock' do + it "should allow me to make a transfer via splitting off all stock" do visit spree.edit_admin_order_path(order) expect(order.shipments.first.stock_location.id).to eq(stock_location.id) - within('tr', text: line_item.sku) { click_icon 'arrows-h' } + within("tr", text: line_item.sku) { click_icon "arrows-h" } complete_split_to(stock_location2, quantity: 2) expect(page).to have_content("Pending package from 'Clarksville'") @@ -303,12 +303,12 @@ expect(order.shipments.first.stock_location.id).to eq(stock_location2.id) end - it 'should not allow me to split more than I had in the original shipment' do + it "should not allow me to split more than I had in the original shipment" do visit spree.edit_admin_order_path(order) expect(order.shipments.first.stock_location.id).to eq(stock_location.id) - within('tr', text: line_item.sku) { click_icon 'arrows-h' } + within("tr", text: line_item.sku) { click_icon "arrows-h" } complete_split_to(stock_location2, quantity: 5) expect(page).to have_content("Pending package from 'Clarksville'") @@ -319,12 +319,12 @@ expect(order.shipments.first.stock_location.id).to eq(stock_location2.id) end - it 'should not allow less than or equal to zero qty' do + it "should not allow less than or equal to zero qty" do visit spree.edit_admin_order_path(order) expect(order.shipments.first.stock_location.id).to eq(stock_location.id) - within('tr', text: line_item.sku) { click_icon 'arrows-h' } + within("tr", text: line_item.sku) { click_icon "arrows-h" } accept_alert "Quantity must be greater than 0" do complete_split_to(stock_location2, quantity: 0) @@ -334,7 +334,7 @@ expect(order.shipments.first.inventory_units_for(product.master).count).to eq(2) expect(order.shipments.first.stock_location.id).to eq(stock_location.id) - fill_in 'item_quantity', with: -1 + fill_in "item_quantity", with: -1 accept_alert "Quantity must be greater than 0" do click_icon :ok @@ -345,20 +345,20 @@ expect(order.shipments.first.stock_location.id).to eq(stock_location.id) end - context 'A shipment has shipped' do - it 'should not show or let me back to the cart page, nor show the shipment edit buttons' do - order = create(:shipped_order, state: 'payment', stock_location:) + context "A shipment has shipped" do + it "should not show or let me back to the cart page, nor show the shipment edit buttons" do + order = create(:shipped_order, state: "payment", stock_location:) visit spree.cart_admin_order_path(order) expect(page.current_path).to eq(spree.edit_admin_order_path(order)) - expect(page).not_to have_text 'Cart' - expect(page).not_to have_selector('.fa-arrows-h') - expect(page).not_to have_selector('.fa-trash') + expect(page).not_to have_text "Cart" + expect(page).not_to have_selector(".fa-arrows-h") + expect(page).not_to have_selector(".fa-trash") end - context 'order has shipped' do - it 'disables empty cart' do + context "order has shipped" do + it "disables empty cart" do order = create(:order_ready_to_ship) visit spree.cart_admin_order_path(order) @@ -382,15 +382,15 @@ end end - context 'there is not enough stock at the other location' do - context 'and it cannot backorder' do - it 'should not allow me to split stock', :flaky do + context "there is not enough stock at the other location" do + context "and it cannot backorder" do + it "should not allow me to split stock", :flaky do product.master.stock_items.last.update_column(:backorderable, false) product.master.stock_items.last.update_column(:count_on_hand, 0) visit spree.edit_admin_order_path(order) - within('tr', text: line_item.sku) { click_icon 'arrows-h' } + within("tr", text: line_item.sku) { click_icon "arrows-h" } accept_alert "Desired shipment not enough stock in desired stock location" do complete_split_to(stock_location2, quantity: 2) end @@ -401,14 +401,14 @@ end end - context 'but it can backorder' do - it 'should allow me to split and backorder the stock' do + context "but it can backorder" do + it "should allow me to split and backorder the stock" do product.master.stock_items.last.update_column(:count_on_hand, 0) product.master.stock_items.last.update_column(:backorderable, true) visit spree.edit_admin_order_path(order) - within('tr', text: line_item.sku) { click_icon 'arrows-h' } + within("tr", text: line_item.sku) { click_icon "arrows-h" } complete_split_to(stock_location2, quantity: 2) expect(page).to have_content("Pending package from 'Clarksville'") @@ -420,8 +420,8 @@ end end - context 'multiple items in cart' do - it 'should have no problem splitting if multiple items are in the from shipment' do + context "multiple items in cart" do + it "should have no problem splitting if multiple items are in the from shipment" do order.contents.add(create(:variant), 2) order.reload @@ -430,10 +430,10 @@ expect(order.shipments.count).to eq(1) expect(order.shipments.first.manifest.count).to eq(2) - within('tr', text: line_item.sku) { click_icon 'arrows-h' } + within("tr", text: line_item.sku) { click_icon "arrows-h" } complete_split_to(stock_location2) - expect(page).to have_css('.shipment', count: 2) + expect(page).to have_css(".shipment", count: 2) expect(order.shipments.count).to eq(2) expect(order.shipments.last.backordered?).to eq(false) @@ -443,34 +443,34 @@ end end - context 'removing an item' do + context "removing an item" do let!(:shipment2) { order.shipments.create(stock_location_id: stock_location2.id) } it "removes only the one item" do order.line_items[0].inventory_units[0].update!(shipment: shipment2) visit spree.edit_admin_order_path(order) - expect(page).to have_css('.stock-item', count: 2) + expect(page).to have_css(".stock-item", count: 2) - within '[data-hook=admin_shipment_form]', text: shipment2.number do + within "[data-hook=admin_shipment_form]", text: shipment2.number do accept_confirm "Are you sure you want to delete this record?" do click_icon :trash end end - expect(page).to have_css('.stock-item', count: 1) + expect(page).to have_css(".stock-item", count: 1) end end - context 'splitting to shipment' do + context "splitting to shipment" do let!(:shipment2) { order.shipments.create(stock_location_id: stock_location2.id) } - it 'should delete the old shipment if enough are split off' do + it "should delete the old shipment if enough are split off" do expect(order.shipments.count).to eq(2) visit spree.edit_admin_order_path(order) - within('tr', text: line_item.sku) { click_icon 'arrows-h' } + within("tr", text: line_item.sku) { click_icon "arrows-h" } complete_split_to(shipment2, quantity: 2) expect(page).not_to have_content(/Move .* to/) @@ -481,22 +481,22 @@ expect(order.shipments.last.inventory_units_for(product.master).count).to eq(2) end - context 'receiving shipment can not backorder' do + context "receiving shipment can not backorder" do before { product.master.stock_items.last.update_column(:backorderable, false) } - it 'should not allow a split if the receiving shipment qty plus the incoming is greater than the count_on_hand' do + it "should not allow a split if the receiving shipment qty plus the incoming is greater than the count_on_hand" do expect(order.shipments.count).to eq(2) visit spree.edit_admin_order_path(order) - expect(page).to have_css('.item-name', text: product.name, count: 1) + expect(page).to have_css(".item-name", text: product.name, count: 1) - within('tr', text: line_item.sku) { click_icon 'arrows-h' } + within("tr", text: line_item.sku) { click_icon "arrows-h" } complete_split_to(shipment2, quantity: 1) - expect(page).to have_css('.item-name', text: product.name, count: 2) + expect(page).to have_css(".item-name", text: product.name, count: 2) - within(all('.stock-contents', count: 2).first) do - within('tr', text: line_item.sku) { click_icon 'arrows-h' } + within(all(".stock-contents", count: 2).first) do + within("tr", text: line_item.sku) { click_icon "arrows-h" } accept_alert("Desired shipment not enough stock in desired stock location") do complete_split_to(shipment2, quantity: 200) @@ -508,28 +508,28 @@ expect(order.shipments.last.inventory_units_for(product.master).count).to eq(1) end - it 'should not allow a shipment to split stock to itself' do + it "should not allow a shipment to split stock to itself" do visit spree.edit_admin_order_path(order) - within('tr', text: line_item.sku) { click_icon 'arrows-h' } - click_on 'Choose Location' - within '.select2-results' do + within("tr", text: line_item.sku) { click_icon "arrows-h" } + click_on "Choose Location" + within ".select2-results" do expect(page).to have_content(shipment2.number) expect(page).not_to have_content(shipment1.number) end end - it 'should split fine if more than one line_item is in the receiving shipment' do + it "should split fine if more than one line_item is in the receiving shipment" do variant2 = create(:variant) order.contents.add(variant2, 2, shipment: shipment2) order.reload visit spree.edit_admin_order_path(order) - within('tr', text: line_item.sku) { click_icon 'arrows-h' } + within("tr", text: line_item.sku) { click_icon "arrows-h" } complete_split_to(shipment2, quantity: 1) expect(page).not_to have_content(/Move .* to/) - expect(page).to have_css('.shipment', count: 2) + expect(page).to have_css(".shipment", count: 2) expect(order.shipments.count).to eq(2) expect(order.shipments.first.inventory_units_for(product.master).count).to eq 1 @@ -539,8 +539,8 @@ end end - context 'receiving shipment can backorder' do - it 'should add more to the backorder', :flaky do + context "receiving shipment can backorder" do + it "should add more to the backorder", :flaky do shipment1.inventory_units.update_all(state: :on_hand) product.master.stock_items.last.update_column(:backorderable, true) product.master.stock_items.last.update_column(:count_on_hand, 0) @@ -548,23 +548,23 @@ visit spree.edit_admin_order_path(order) - within('tr', text: line_item.sku) { click_icon 'arrows-h' } + within("tr", text: line_item.sku) { click_icon "arrows-h" } complete_split_to(shipment2, quantity: 1) expect(page).to have_content("1 x Backordered") - within('.stock-contents', text: "1 x On hand") do - within('tr', text: line_item.sku) { click_icon 'arrows-h' } + within(".stock-contents", text: "1 x On hand") do + within("tr", text: line_item.sku) { click_icon "arrows-h" } complete_split_to(shipment2, quantity: 1) end # Empty shipment should be removed - expect(page).to have_css('.stock-contents', count: 1) + expect(page).to have_css(".stock-contents", count: 1) expect(page).to have_content("2 x Backordered") end end - context 'when inventory levels are not being tracked' do + context "when inventory levels are not being tracked" do before do stub_spree_preferences(track_inventory_levels: false) # Simulate the default state of stock when track inventory is false. @@ -577,18 +577,18 @@ it "allows to ship an order's items" do visit spree.edit_admin_order_path(order) - within('tr', text: line_item.sku) { click_icon 'arrows-h' } + within("tr", text: line_item.sku) { click_icon "arrows-h" } complete_split_to(stock_location2) - expect(page).to have_css('.shipment', count: 2) + expect(page).to have_css(".shipment", count: 2) expect(order.shipments.count).to eq(2) - expect(page).not_to have_content('Backordered') - expect(page).to have_content('On hand', count: 2) + expect(page).not_to have_content("Backordered") + expect(page).to have_content("On hand", count: 2) end end end - describe 'line item sort order' do + describe "line item sort order" do let(:product2) { create(:product) } let(:product3) { create(:product) } @@ -597,16 +597,16 @@ # and after @middle_line_item = order.line_items[0] - @first_line_item = order.contents.add(product2.master) + @first_line_item = order.contents.add(product2.master) @first_line_item.update_columns(created_at: 1.day.ago) @last_line_item = order.contents.add(product3.master) @last_line_item.update_columns(created_at: 1.day.from_now) end - it 'orders the items in a shipment by created_at' do + it "orders the items in a shipment by created_at" do visit spree.edit_admin_order_path(order) - stock_items = page.all(:css, '.stock-item', count: 3) + stock_items = page.all(:css, ".stock-item", count: 3) expect(stock_items[0]).to have_text(@first_line_item.variant.sku) expect(stock_items[1]).to have_text(@middle_line_item.variant.sku) @@ -616,7 +616,7 @@ end end - context 'with only read permissions' do + context "with only read permissions" do before do allow_any_instance_of(Spree::Admin::BaseController).to receive(:spree_current_user).and_return(nil) end @@ -627,22 +627,22 @@ it "should not display forbidden links" do visit spree.edit_admin_order_path(order) - expect(page).not_to have_button('cancel') - expect(page).not_to have_button('Resend') + expect(page).not_to have_button("cancel") + expect(page).not_to have_button("Resend") # Order Tabs - expect(page).not_to have_link('Adjustments') - expect(page).not_to have_link('Payments') - expect(page).not_to have_link('Return Authorizations') + expect(page).not_to have_link("Adjustments") + expect(page).not_to have_link("Payments") + expect(page).not_to have_link("Return Authorizations") # Order item actions - expect(page).not_to have_css('.delete-item') - expect(page).not_to have_css('.split-item') - expect(page).not_to have_css('.edit-tracking') + expect(page).not_to have_css(".delete-item") + expect(page).not_to have_css(".split-item") + expect(page).not_to have_css(".edit-tracking") end end - context 'as Fakedispatch' do + context "as Fakedispatch" do custom_authorization! do |_user| # allow dispatch to :admin, :index, and :edit on Spree::Order can [:admin, :edit, :index, :show], Spree::Order @@ -651,18 +651,18 @@ end before do - allow(Spree.user_class).to receive(:find_by). - with(hash_including(:spree_api_key)). - and_return(Spree.user_class.new) + allow(Spree.user_class).to receive(:find_by) + .with(hash_including(:spree_api_key)) + .and_return(Spree.user_class.new) end - it 'should not display order tabs or edit buttons without ability' do + it "should not display order tabs or edit buttons without ability" do visit spree.edit_admin_order_path(order) # Order Tabs - expect(page).not_to have_link('Adjustments') - expect(page).not_to have_link('Payments') - expect(page).not_to have_link('Return Authorizations') + expect(page).not_to have_link("Adjustments") + expect(page).not_to have_link("Payments") + expect(page).not_to have_link("Return Authorizations") end it "can change the shipping method" do @@ -674,19 +674,19 @@ select "UPS Ground $100.00" click_icon :check - expect(page).not_to have_css('#selected_shipping_rate_id') + expect(page).not_to have_css("#selected_shipping_rate_id") expect(page).to have_content("UPS Ground") end - it 'can ship' do + it "can ship" do order = create(:order_ready_to_ship) order.refresh_shipment_rates visit spree.edit_admin_order_path(order) find(".ship-shipment-button").click - within '.carton-state' do - expect(page).to have_content('Shipped') + within ".carton-state" do + expect(page).to have_content("Shipped") end end end diff --git a/backend/spec/features/admin/orders/payments_spec.rb b/backend/spec/features/admin/orders/payments_spec.rb index a94a94f616f..69cadb987f2 100644 --- a/backend/spec/features/admin/orders/payments_spec.rb +++ b/backend/spec/features/admin/orders/payments_spec.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -describe 'Payments', type: :feature do +describe "Payments", type: :feature do stub_authorization! - let(:state) { 'checkout' } + let(:state) { "checkout" } context "with a pre-existing payment" do let!(:payment) { create_payment } - let(:order) { create(:completed_order_with_totals, number: 'R100', line_items_price: 50) } + let(:order) { create(:completed_order_with_totals, number: "R100", line_items_price: 50) } before do visit "/admin/orders/#{order.number}/payments" @@ -29,50 +29,50 @@ end # Regression tests for https://github.com/spree/spree/issues/1453 - context 'with a check payment', js: true do - let(:order) { create(:completed_order_with_totals, number: 'R100') } + context "with a check payment", js: true do + let(:order) { create(:completed_order_with_totals, number: "R100") } let!(:payment) { create_payment(payment_method: create(:check_payment_method, available_to_admin: true)) } - it 'capturing a check payment from a new order' do + it "capturing a check payment from a new order" do click_icon(:capture) - expect(page).not_to have_content('Cannot perform requested operation') - expect(page).to have_content('Payment Updated') + expect(page).not_to have_content("Cannot perform requested operation") + expect(page).to have_content("Payment Updated") within_row(1) do - expect(page).to have_selector('.fa-reply') + expect(page).to have_selector(".fa-reply") end end - it 'voids a check payment from a new order' do + it "voids a check payment from a new order" do click_icon(:void) - expect(page).to have_content('Payment Updated') + expect(page).to have_content("Payment Updated") end - it 'voids refund option for incomplete payments' do + it "voids refund option for incomplete payments" do within_row(1) do - expect(page).not_to have_selector('.fa-reply') + expect(page).not_to have_selector(".fa-reply") end end end - it 'should list all captures for a payment' do + it "should list all captures for a payment" do capture_amount = order.outstanding_balance / 2 * 100 payment.capture!(capture_amount) visit spree.admin_order_payment_path(order, payment) - expect(page).to have_content 'Capture Events' - within '#capture_events' do + expect(page).to have_content "Capture Events" + within "#capture_events" do expect(page).to have_content(capture_amount / 100) end end - it 'displays the address for a credit card when present' do - payment.source.update!(address: create(:address, address1: 'my cc address')) + it "displays the address for a credit card when present" do + payment.source.update!(address: create(:address, address1: "my cc address")) visit spree.admin_order_payment_path(order, payment) - expect(page).to have_content 'my cc address' + expect(page).to have_content "my cc address" end - context 'when there are multiple pending payments', :js do - context 'while marking all payments as void' do + context "when there are multiple pending payments", :js do + context "while marking all payments as void" do let(:card_payment_method) { create(:credit_card_payment_method) } let!(:payment) do @@ -89,115 +89,115 @@ ) end - it 'updates the order payment state correctly at each iteration' do + it "updates the order payment state correctly at each iteration" do visit current_path - expect(page).to have_css('#payment_status', text: 'Balance due') + expect(page).to have_css("#payment_status", text: "Balance due") - within '#payments' do - expect(page).to have_selector('.pill-pending', count: 2) + within "#payments" do + expect(page).to have_selector(".pill-pending", count: 2) within "#payment_#{payment.id}" do - find('.fa-void').click + find(".fa-void").click end end - expect(page).to have_css('#payment_status', text: 'Balance due') + expect(page).to have_css("#payment_status", text: "Balance due") - within '#payments' do - expect(page).to have_selector('.pill-pending', count: 1) + within "#payments" do + expect(page).to have_selector(".pill-pending", count: 1) within "#payment_#{payment.id}" do - expect(page).to have_selector('.pill-void', count: 1) + expect(page).to have_selector(".pill-void", count: 1) end end within "#payment_#{second_payment.id}" do - find('.fa-void').click + find(".fa-void").click end - within '#payments' do - expect(page).not_to have_selector('.pill-pending') - expect(page).to have_selector('.pill-void', count: 2) + within "#payments" do + expect(page).not_to have_selector(".pill-pending") + expect(page).to have_selector(".pill-void", count: 2) end - expect(page).to have_css('#payment_status', text: 'Failed') + expect(page).to have_css("#payment_status", text: "Failed") end end end - it 'lists, updates and creates payments for an order', js: true do + it "lists, updates and creates payments for an order", js: true do within_row(1) do - expect(column_text(3)).to eq('Credit Card') - expect(column_text(5)).to eq('Checkout') - expect(column_text(6)).to have_content('$150.00') + expect(column_text(3)).to eq("Credit Card") + expect(column_text(5)).to eq("Checkout") + expect(column_text(6)).to have_content("$150.00") end click_icon :void - expect(page).to have_css('#payment_status', text: 'Failed') - expect(page).to have_content('Payment Updated') + expect(page).to have_css("#payment_status", text: "Failed") + expect(page).to have_content("Payment Updated") within_row(1) do - expect(column_text(5)).to eq('Void') + expect(column_text(5)).to eq("Void") end - click_on 'New Payment' - expect(page).to have_content('New Payment') - click_button 'Update' - expect(page).to have_content('successfully created!') + click_on "New Payment" + expect(page).to have_content("New Payment") + click_button "Update" + expect(page).to have_content("successfully created!") click_icon(:capture) - expect(page).to have_selector('#payment_status', text: 'Paid') - expect(page).not_to have_selector('#new_payment_section') + expect(page).to have_selector("#payment_status", text: "Paid") + expect(page).not_to have_selector("#new_payment_section") end # Regression test for https://github.com/spree/spree/issues/1269 - it 'cannot create a payment for an order with no payment methods' do + it "cannot create a payment for an order with no payment methods" do Spree::PaymentMethod.delete_all order.payments.delete_all - click_on 'New Payment' - expect(page).to have_content('You cannot create a payment for an order without any payment methods defined.') - expect(page).to have_content('Please define some payment methods first.') + click_on "New Payment" + expect(page).to have_content("You cannot create a payment for an order without any payment methods defined.") + expect(page).to have_content("Please define some payment methods first.") end - context 'payment is pending', js: true do - let(:state) { 'pending' } + context "payment is pending", js: true do + let(:state) { "pending" } - it 'allows the amount to be edited by clicking on the edit button then saving' do + it "allows the amount to be edited by clicking on the edit button then saving" do within_row(1) do click_icon(:edit) - fill_in('amount', with: '$1') + fill_in("amount", with: "$1") click_icon(:ok) - expect(page).to have_selector('td.amount span', text: '$1.00') + expect(page).to have_selector("td.amount span", text: "$1.00") expect(payment.reload.amount).to eq(1.00) end end - it 'allows the amount change to be cancelled by clicking on the cancel button' do + it "allows the amount change to be cancelled by clicking on the cancel button" do within_row(1) do click_icon(:edit) - fill_in 'amount', with: '$1' + fill_in "amount", with: "$1" click_icon(:cancel) - expect(page).to have_selector('td.amount span', text: '$150.00') + expect(page).to have_selector("td.amount span", text: "$150.00") expect(payment.reload.amount).to eq(150.00) end end - it 'displays an error when the amount is invalid' do + it "displays an error when the amount is invalid" do within_row(1) do click_icon(:edit) - fill_in('amount', with: 'invalid') + fill_in("amount", with: "invalid") click_icon(:ok) end - expect(page).to have_selector('.flash.error', text: 'Invalid resource. Please fix errors and try again.') + expect(page).to have_selector(".flash.error", text: "Invalid resource. Please fix errors and try again.") expect(payment.reload.amount).to eq(150.00) end end - context 'payment is completed', js: true do - let(:state) { 'completed' } + context "payment is completed", js: true do + let(:state) { "completed" } - it 'does not allow the amount to be edited' do + it "does not allow the amount to be edited" do within_row(1) do - expect(page).not_to have_selector('.fa-edit') + expect(page).not_to have_selector(".fa-edit") end end end @@ -258,14 +258,14 @@ end it "can successfully be created and captured", js: true do - click_on 'Update' + click_on "Update" expect(page).to have_content("Payment has been successfully created!") click_icon(:capture) expect(page).to have_content("Payment Updated") end end - context 'with a soft-deleted payment method' do + context "with a soft-deleted payment method" do let(:order) { create(:completed_order_with_totals, line_items_count: 1) } let!(:payment_method) { create(:check_payment_method) } let!(:payment) { create_payment(payment_method:) } @@ -308,7 +308,7 @@ let(:order) do create(:order_with_line_items, { line_items_count: 1, - line_items_attributes: [{ quantity: 11, product: }], + line_items_attributes: [{quantity: 11, product:}], stock_location: product.master.stock_locations.first }) end @@ -324,7 +324,7 @@ choose payment_method.name fill_in_credit_card_form click_button "Continue" - expect(page).to have_content I18n.t('spree.insufficient_stock_for_order') + expect(page).to have_content I18n.t("spree.insufficient_stock_for_order") end end @@ -343,7 +343,7 @@ def create_payment(opts = {}) end def fill_in_credit_card_form - within('.js-new-credit-card-form') do + within(".js-new-credit-card-form") do fill_in_with_force "Card Number", with: "4111 1111 1111 1111" fill_in "Name", with: "Test User" fill_in_with_force "Expiration", with: "09 / #{Time.current.year + 1}" diff --git a/backend/spec/features/admin/orders/return_authorizations_spec.rb b/backend/spec/features/admin/orders/return_authorizations_spec.rb index b3c6b6e09c1..8be27a10029 100644 --- a/backend/spec/features/admin/orders/return_authorizations_spec.rb +++ b/backend/spec/features/admin/orders/return_authorizations_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "ReturnAuthorizations", type: :feature do include OrderFeatureHelper diff --git a/backend/spec/features/admin/orders/return_payment_state_spec.rb b/backend/spec/features/admin/orders/return_payment_state_spec.rb index 2ebd66507bb..b1eaec94105 100644 --- a/backend/spec/features/admin/orders/return_payment_state_spec.rb +++ b/backend/spec/features/admin/orders/return_payment_state_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Return payment state spec" do stub_authorization! before do Spree::RefundReason.create!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) - allow_any_instance_of(Spree::Admin::ReimbursementsController).to receive(:spree_current_user). - and_return(user) + allow_any_instance_of(Spree::Admin::ReimbursementsController).to receive(:spree_current_user) + .and_return(user) end let!(:order) { create(:shipped_order) } @@ -19,21 +19,21 @@ def create_customer_return visit "/admin/orders/#{order.number}/edit" # Create a Return Authorization (select the Original Reimbursement type) - click_on 'RMA' - click_on 'New RMA' + click_on "RMA" + click_on "New RMA" - find('.add-item').click # check first (and only) item - select Spree::StockLocation.first.name, from: 'return_authorization[stock_location_id]', visible: false - click_on 'Create' + find(".add-item").click # check first (and only) item + select Spree::StockLocation.first.name, from: "return_authorization[stock_location_id]", visible: false + click_on "Create" # Create a Customer Return (select the item from 'Items in Return Authorizations') - click_on 'Customer Returns' - click_on 'New Customer Return' + click_on "Customer Returns" + click_on "New Customer Return" - find('input.add-item').click # check first (and only) item - select 'Received', from: 'customer_return[return_items_attributes][0][reception_status_event]', visible: false - select Spree::StockLocation.first.name, from: 'customer_return[stock_location_id]', visible: false - click_on 'Create' + find("input.add-item").click # check first (and only) item + select "Received", from: "customer_return[return_items_attributes][0][reception_status_event]", visible: false + select Spree::StockLocation.first.name, from: "customer_return[stock_location_id]", visible: false + click_on "Create" end # Regression test for https://github.com/spree/spree/issues/6229 @@ -43,18 +43,18 @@ def create_customer_return refund_total: 0, payment_total: 110, outstanding_balance: 0, - payment_state: 'paid' + payment_state: "paid" ) create_customer_return # Create reimbursement - click_on 'Create reimbursement' + click_on "Create reimbursement" # Reimburse. - click_on 'Reimburse' + click_on "Reimburse" - expect(page).to have_css('tr.reimbursement-refund') + expect(page).to have_css("tr.reimbursement-refund") order.reload @@ -63,7 +63,7 @@ def create_customer_return refund_total: 10, payment_total: 100, outstanding_balance: 0, - payment_state: 'paid' + payment_state: "paid" ) end diff --git a/backend/spec/features/admin/orders/risk_analysis_spec.rb b/backend/spec/features/admin/orders/risk_analysis_spec.rb index fff8331db13..25d2e4054b9 100644 --- a/backend/spec/features/admin/orders/risk_analysis_spec.rb +++ b/backend/spec/features/admin/orders/risk_analysis_spec.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -describe 'Order Risk Analysis', type: :feature do +describe "Order Risk Analysis", type: :feature do stub_authorization! let!(:order) do @@ -11,7 +11,7 @@ def visit_order visit spree.admin_path - click_link 'Orders' + click_link "Orders" within_row(1) do click_link order.number end @@ -21,19 +21,19 @@ def visit_order before do allow_any_instance_of(Spree::Admin::BaseController).to receive_messages spree_current_user: create(:user) - order.payments.first.update_column(:avs_response, 'N') + order.payments.first.update_column(:avs_response, "N") visit_order end it "displays 'Risk Analysis' box" do - expect(page).to have_content 'Risk Analysis' + expect(page).to have_content "Risk Analysis" end it "can be approved" do - click_button('Approve') - expect(page).to have_content 'Approver' - expect(page).to have_content 'Approved at' - expect(page).to have_content 'Status: Complete' + click_button("Approve") + expect(page).to have_content "Approver" + expect(page).to have_content "Approved at" + expect(page).to have_content "Status: Complete" end end @@ -43,7 +43,7 @@ def visit_order end it "does not display 'Risk Analysis' box" do - expect(page).to_not have_content 'Risk Analysis' + expect(page).to_not have_content "Risk Analysis" end end end diff --git a/backend/spec/features/admin/orders/shipments_spec.rb b/backend/spec/features/admin/orders/shipments_spec.rb index 3ee41570a16..76029c2d32f 100644 --- a/backend/spec/features/admin/orders/shipments_spec.rb +++ b/backend/spec/features/admin/orders/shipments_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Shipments", type: :feature do include OrderFeatureHelper @@ -44,17 +44,17 @@ def ship_shipment perform_enqueued_jobs { ship_shipment } - }.to change{ ActionMailer::Base.deliveries.count }.by(1) + }.to change { ActionMailer::Base.deliveries.count }.by(1) end it "doesn't send a shipping confirmation email when ask to suppress the mailer" do - uncheck 'Send Shipment Email' + uncheck "Send Shipment Email" expect { perform_enqueued_jobs { ship_shipment } - }.not_to change{ ActionMailer::Base.deliveries.count } + }.not_to change { ActionMailer::Base.deliveries.count } end end @@ -69,19 +69,19 @@ def ship_shipment context "when the line item cannot be found" do it "shows the proper error message" do - expect(page).to have_selector '.delete-item' + expect(page).to have_selector ".delete-item" order.shipments.first.line_items.each(&:destroy) - accept_alert { first('.delete-item').click } - expect(page).to have_content 'The resource you were looking for could not be found.' + accept_alert { first(".delete-item").click } + expect(page).to have_content "The resource you were looking for could not be found." end end context "when the shipment has already been shipped" do it "shows the proper error message" do - expect(page).to have_selector '.delete-item' + expect(page).to have_selector ".delete-item" order.shipments.first.ship! - accept_alert { first('.delete-item').click } - expect(page).to have_content 'Cannot remove items from a shipped shipment' + accept_alert { first(".delete-item").click } + expect(page).to have_content "Cannot remove items from a shipped shipment" end end end @@ -101,8 +101,8 @@ def ship_shipment expect(order.shipments.count).to eq(1) shipment1 = order.shipments[0] - within('tr', text: order.line_items[0].sku) { click_icon 'arrows-h' } - complete_split_to('LA') + within("tr", text: order.line_items[0].sku) { click_icon "arrows-h" } + complete_split_to("LA") expect(page).to have_css("#shipment_#{shipment1.id} tr.stock-item", count: 4) shipment2 = (order.reload.shipments.to_a - [shipment1]).first @@ -111,7 +111,7 @@ def ship_shipment expect(page).to have_content("UPS Ground") end - within('tr', text: order.line_items[1].sku) { click_icon 'arrows-h' } + within("tr", text: order.line_items[1].sku) { click_icon "arrows-h" } complete_split_to("LA(#{shipment2.number})") expect(page).to have_css("#shipment_#{shipment2.id} tr.stock-item", count: 2) expect(page).to have_css("#shipment_#{shipment1.id} tr.stock-item", count: 3) @@ -127,15 +127,15 @@ def ship_shipment create( :order_ready_to_ship, number: "R100", - line_items_attributes: [{ variant:, quantity: 5 }] + line_items_attributes: [{variant:, quantity: 5}] ) end it "can transfer all items to a new location" do expect(order.shipments.count).to eq(1) - within('tr', text: order.line_items[0].sku) { click_icon 'arrows-h' } - complete_split_to('LA', quantity: 5) + within("tr", text: order.line_items[0].sku) { click_icon "arrows-h" } + complete_split_to("LA", quantity: 5) expect(page).to_not have_content("package from 'NY Warehouse'") expect(page).to have_content("package from 'LA'") @@ -145,25 +145,25 @@ def ship_shipment context "when split shipment", js: true do let(:location_name) { "WA Warehouse" } - let!(:location) { create(:stock_location, name: location_name)} + let!(:location) { create(:stock_location, name: location_name) } it "can split item" do visit spree.edit_admin_order_path(order) - find_all('.split-item').first.click - within '.stock-item-split' do - find('.save-split').click + find_all(".split-item").first.click + within ".stock-item-split" do + find(".save-split").click alert_text = page.driver.browser.switch_to.alert.text - expect(alert_text).to include 'Please select the split destination' + expect(alert_text).to include "Please select the split destination" page.driver.browser.switch_to.alert.accept - find('#item_quantity').fill_in(with: 'text') - find('.select2-container').click - find(:xpath, '//body').all('.select2-drop li.select2-result', text: "#{location_name} (0 on hand)")[1].click - find('.save-split').click - accept_alert 'Quantity must be greater than 0' # Test Ajax error handling - find('#item_quantity').fill_in(with: '1') - find('.save-split').click + find("#item_quantity").fill_in(with: "text") + find(".select2-container").click + find(:xpath, "//body").all(".select2-drop li.select2-result", text: "#{location_name} (0 on hand)")[1].click + find(".save-split").click + accept_alert "Quantity must be greater than 0" # Test Ajax error handling + find("#item_quantity").fill_in(with: "1") + find(".save-split").click end - expect(page).to have_content /Pending package from '#{location_name}'/i + expect(page).to have_content(/Pending package from '#{location_name}'/i) end end end diff --git a/backend/spec/features/admin/payments/store_credits_spec.rb b/backend/spec/features/admin/payments/store_credits_spec.rb index 14fbf8ef126..4942b874930 100644 --- a/backend/spec/features/admin/payments/store_credits_spec.rb +++ b/backend/spec/features/admin/payments/store_credits_spec.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -RSpec.describe 'Store credits', type: :feature do +RSpec.describe "Store credits", type: :feature do stub_authorization! let(:order) { FactoryBot.create(:completed_order_with_totals) } diff --git a/backend/spec/features/admin/products/edit/images_spec.rb b/backend/spec/features/admin/products/edit/images_spec.rb index 2de100bcb9c..3a040d9a5ec 100644 --- a/backend/spec/features/admin/products/edit/images_spec.rb +++ b/backend/spec/features/admin/products/edit/images_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Product Images", type: :feature do stub_authorization! let(:file_path) { file_fixture("ror_ringer.jpeg") } - let!(:product) { create(:product) } + let!(:product) { create(:product) } let!(:variant1) { create(:variant, product:) } let!(:variant2) { create(:variant, product:) } @@ -27,30 +27,30 @@ click_link "Images" end - context 'when the user cannot create images' do + context "when the user cannot create images" do custom_authorization! do |_user| cannot :create, Spree::Image end it "does not show links for creating images" do - within '#content-header' do - expect(page).not_to have_content 'New Image' + within "#content-header" do + expect(page).not_to have_content "New Image" end - expect(page).not_to have_content 'Choose files to upload' + expect(page).not_to have_content "Choose files to upload" end end - context 'Using the new image link' do + context "Using the new image link" do it "should allow an admin to upload and edit an image for a product" do click_link "new_image_link" - within_fieldset 'New Image' do - attach_file('image_attachment', file_path) + within_fieldset "New Image" do + attach_file("image_attachment", file_path) end click_button "Update" expect(page).to have_content("successfully created!") # Icons are hidden, so hover to have them pop-up - find('tbody > tr').hover + find("tbody > tr").hover within_row(1) do within ".actions" do click_icon :edit @@ -63,7 +63,7 @@ expect(page).to have_content "successfully updated!" expect(page).to have_field "image[alt]", with: "ruby on rails t-shirt" - find('tbody > tr').hover + find("tbody > tr").hover accept_alert do click_icon :trash end @@ -71,10 +71,10 @@ end end - context 'Using the drag and drop upload window' do + context "Using the drag and drop upload window" do it "should allow an admin to upload an image and edit an image for a product" do page.find(".upload").drop(file_path) - find('tbody > tr').hover + find("tbody > tr").hover within_row(1) do within ".actions" do click_icon :edit @@ -89,12 +89,12 @@ end end - context 'Using Active Storage', - if: Spree::Config.image_attachment_module == Spree::Image::ActiveStorageAttachment do + context "Using Active Storage", + if: Spree::Config.image_attachment_module == Spree::Image::ActiveStorageAttachment do it "should show a no image placeholder when images fail to download" do click_link "new_image_link" - within_fieldset 'New Image' do - attach_file('image_attachment', file_path) + within_fieldset "New Image" do + attach_file("image_attachment", file_path) end click_button "Update" @@ -108,16 +108,16 @@ context "with several variants" do it "should allow an admin to re-assign an image to another variant" do click_link "new_image_link" - within_fieldset 'New Image' do + within_fieldset "New Image" do # Select image - attach_file('image_attachment', file_path) + attach_file("image_attachment", file_path) # Select specific variant select variant1.sku_and_options_text, from: "Variant" end click_button "Update" expect(page).to have_content("Image has been successfully created!") - find('tbody > tr').hover + find("tbody > tr").hover within_row(1) do # Select another variant targetted_select2 variant2.sku_and_options_text, from: "#s2id_image_viewable_id" diff --git a/backend/spec/features/admin/products/edit/products_spec.rb b/backend/spec/features/admin/products/edit/products_spec.rb index 5af44051524..0982416e6fb 100644 --- a/backend/spec/features/admin/products/edit/products_spec.rb +++ b/backend/spec/features/admin/products/edit/products_spec.rb @@ -1,50 +1,50 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -describe 'Product Details', type: :feature do +describe "Product Details", type: :feature do stub_authorization! - context 'editing a product' do - it 'should list the product details' do - create(:product, name: 'Bún thịt nướng', sku: 'A100', - description: 'lorem ipsum', available_on: '2013-08-14 01:02:03') + context "editing a product" do + it "should list the product details" do + create(:product, name: "Bún thịt nướng", sku: "A100", + description: "lorem ipsum", available_on: "2013-08-14 01:02:03") visit spree.admin_path click_nav "Products" within_row(1) { click_icon :edit } - click_link 'Product Details' + click_link "Product Details" - expect(page).to have_content('ProductsBún thịt nướng') - expect(page).to have_field('product_name', with: 'Bún thịt nướng') - expect(page).to have_field('product_slug', with: 'bun-th-t-n-ng') - expect(page).to have_field('product_description', with: 'lorem ipsum') - expect(page).to have_field('product_price', with: '19.99') - expect(page).to have_field('product_cost_price', with: '17.00') - expect(page).to have_field('product_available_on', with: "2013/08/14") - expect(page).to have_field('product_sku', with: 'A100') + expect(page).to have_content("ProductsBún thịt nướng") + expect(page).to have_field("product_name", with: "Bún thịt nướng") + expect(page).to have_field("product_slug", with: "bun-th-t-n-ng") + expect(page).to have_field("product_description", with: "lorem ipsum") + expect(page).to have_field("product_price", with: "19.99") + expect(page).to have_field("product_cost_price", with: "17.00") + expect(page).to have_field("product_available_on", with: "2013/08/14") + expect(page).to have_field("product_sku", with: "A100") end it "should handle slug changes" do - create(:product, name: 'Bún thịt nướng', sku: 'A100', - description: 'lorem ipsum', available_on: '2011-01-01 01:01:01') + create(:product, name: "Bún thịt nướng", sku: "A100", + description: "lorem ipsum", available_on: "2011-01-01 01:01:01") visit spree.admin_path click_nav "Products" - within('table.index tbody tr:nth-child(1)') do + within("table.index tbody tr:nth-child(1)") do click_icon(:edit) end - fill_in "product_slug", with: 'random-slug-value' + fill_in "product_slug", with: "random-slug-value" click_button "Update" expect(page).to have_content("successfully updated!") - fill_in "product_slug", with: '' + fill_in "product_slug", with: "" click_button "Update" - within('#product_slug_field') { expect(page).to have_content("can't be blank") } + within("#product_slug_field") { expect(page).to have_content("can't be blank") } - fill_in "product_slug", with: 'x' + fill_in "product_slug", with: "x" click_button "Update" expect(page).to have_content("successfully updated!") end @@ -52,14 +52,14 @@ context "when default price is deleted" do it "does not show the master price", js: true do - product = create(:product, name: 'Bún thịt nướng', sku: 'A100', - description: 'lorem ipsum', available_on: '2013-08-14 01:02:03') + product = create(:product, name: "Bún thịt nướng", sku: "A100", + description: "lorem ipsum", available_on: "2013-08-14 01:02:03") visit spree.admin_path click_nav "Products" within_row(1) { click_icon :edit } - click_link 'Prices' + click_link "Prices" within "#spree_price_#{product.master.default_price.id}" do accept_alert do @@ -68,10 +68,10 @@ end expect(page).to have_content("Price has been successfully removed") - click_link 'Product Details' + click_link "Product Details" - expect(page).not_to have_field('product_price') - expect(page).to have_content('This Product has no price in the default currency (USD).') + expect(page).not_to have_field("product_price") + expect(page).to have_content("This Product has no price in the default currency (USD).") end end @@ -86,7 +86,7 @@ click_icon :trash end end - expect(page).to have_content('Product has been deleted') + expect(page).to have_content("Product has been deleted") end end end diff --git a/backend/spec/features/admin/products/edit/taxons_spec.rb b/backend/spec/features/admin/products/edit/taxons_spec.rb index e9e0b0d8755..848ff2ff9a9 100644 --- a/backend/spec/features/admin/products/edit/taxons_spec.rb +++ b/backend/spec/features/admin/products/edit/taxons_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Product Display Order", type: :feature do stub_authorization! @@ -20,7 +20,7 @@ def assert_selected_taxons(taxons) it "should allow an admin to manage display order (taxons)", :flaky do taxon_1 = create(:taxon) - taxon_2 = create(:taxon, name: 'Clothing') + taxon_2 = create(:taxon, name: "Clothing") product.taxons << taxon_1 visit spree.edit_admin_product_path(product) @@ -35,11 +35,11 @@ def assert_selected_taxons(taxons) # Without this line we have a flaky spec probably due to select2 not # closing its fixed overlay correctly. Clicking anywhere in the page # before submit apparently solves the issue. - find('.edit_product', visible: true, obscured: false).click + find(".edit_product", visible: true, obscured: false).click click_button "Update" - within('.flash') do + within(".flash") do expect(page).to have_content(%(Product "#{product.name}" has been successfully updated!)) end assert_selected_taxons([taxon_1, taxon_2]) diff --git a/backend/spec/features/admin/products/edit/variants_spec.rb b/backend/spec/features/admin/products/edit/variants_spec.rb index 5c2fb668ee2..c2a095f1134 100644 --- a/backend/spec/features/admin/products/edit/variants_spec.rb +++ b/backend/spec/features/admin/products/edit/variants_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Product Variants", type: :feature do stub_authorization! @@ -17,7 +17,7 @@ within_row(1) { click_icon :edit } - within('nav > ul.tabs') { click_link "Variants" } + within("nav > ul.tabs") { click_link "Variants" } expect(page).to have_content("To add variants, you must first define") end @@ -30,14 +30,14 @@ click_button "Create" expect(page).to have_content("successfully created!") - page.find('#option_type_option_values_attributes_0_name').set('color') - page.find('#option_type_option_values_attributes_0_presentation').set('black') + page.find("#option_type_option_values_attributes_0_name").set("color") + page.find("#option_type_option_values_attributes_0_presentation").set("black") click_button "Update" expect(page).to have_content("successfully updated!") visit spree.admin_path click_nav "Products" - within('table.index tbody tr:nth-child(1)') do + within("table.index tbody tr:nth-child(1)") do click_icon :edit end @@ -45,7 +45,7 @@ click_button "Update" expect(page).to have_content("successfully updated!") - within('nav > ul.tabs') { click_link "Variants" } + within("nav > ul.tabs") { click_link "Variants" } click_link "New Variant" select "black", from: "Colors" diff --git a/backend/spec/features/admin/products/option_types_spec.rb b/backend/spec/features/admin/products/option_types_spec.rb index 1d5c512f5f8..08176cf90dc 100644 --- a/backend/spec/features/admin/products/option_types_spec.rb +++ b/backend/spec/features/admin/products/option_types_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Option Types", type: :feature do stub_authorization! @@ -35,8 +35,8 @@ click_button "Create" expect(page).to have_content("successfully created!") - page.find('#option_type_option_values_attributes_0_name').set('color') - page.find('#option_type_option_values_attributes_0_presentation').set('black') + page.find("#option_type_option_values_attributes_0_name").set("color") + page.find("#option_type_option_values_attributes_0_presentation").set("black") click_button "Update" expect(page).to have_content("successfully updated!") @@ -48,8 +48,8 @@ create(:option_type, name: "tshirt-color", presentation: "Color") create(:option_type, name: "tshirt-size", presentation: "Size") click_link "Option Types" - within('table#listing_option_types') do - find('tr', text: 'Size').click_link "Edit" + within("table#listing_option_types") do + find("tr", text: "Size").click_link "Edit" end fill_in "option_type_name", with: "foo-size 99" click_button "Update" @@ -62,12 +62,12 @@ it "can remove an option value from an option type", js: true do option_value = create(:option_value) click_link "Option Types" - within('table#listing_option_types') { click_icon :edit } + within("table#listing_option_types") { click_icon :edit } expect(page).to have_title("#{option_value.option_type.name} - Option Types - Products") expect(page).to have_css("tbody#option_values tr", count: 1) within("tbody#option_values") do accept_alert do - find('.fa-trash').click + find(".fa-trash").click end end # Assert that the field is hidden automatically @@ -91,7 +91,7 @@ it "can remove a non-persisted option value from an option type", js: true do create(:option_type) click_link "Option Types" - within('table#listing_option_types') { click_icon :edit } + within("table#listing_option_types") { click_icon :edit } expect(page).to have_css("tbody#option_values tr", count: 1) @@ -102,7 +102,7 @@ # Remove default option type within("tbody#option_values") do within_row(1) do - find('.fa-trash').click + find(".fa-trash").click end end # Assert that the field is hidden automatically @@ -110,7 +110,7 @@ # Remove added option type within("tbody#option_values") do - find('.fa-trash').click + find(".fa-trash").click end # Assert that the field is hidden automatically expect(page).to have_css("tbody#option_values tr", count: 0) diff --git a/backend/spec/features/admin/products/pricing_spec.rb b/backend/spec/features/admin/products/pricing_spec.rb index ac069b5fdae..0516a808b8b 100644 --- a/backend/spec/features/admin/products/pricing_spec.rb +++ b/backend/spec/features/admin/products/pricing_spec.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -describe 'Pricing' do +describe "Pricing" do stub_authorization! let(:product) { create(:product) } @@ -11,7 +11,7 @@ visit spree.edit_admin_product_path(product) end - it 'has a Prices tab' do + it "has a Prices tab" do within(".tabs") do expect(page).to have_link("Prices") end @@ -26,14 +26,14 @@ visit spree.admin_product_prices_path(product) end - it 'displays a table with the prices' do + it "displays a table with the prices" do subject expect(page).to have_content(product.name) within(".tabs .active") do expect(page).to have_content("Prices") end - within('table.master_prices') do + within("table.master_prices") do expect(page).to have_content("$19.99") expect(page).to have_content("USD") expect(page).to have_content("34.56 ₽") @@ -75,7 +75,7 @@ product.master.update(price: 49.99) end - it 'has a working table filter' do + it "has a working table filter" do subject expect(page).to have_selector("#table-filter") within "#table-filter" do @@ -130,7 +130,7 @@ let!(:variant) { product.master } let!(:other_price) { product.master.prices.create(amount: 34.56, currency: "EUR") } - it 'has a working edit page' do + it "has a working edit page" do subject within "#spree_price_#{product.master.prices.first.id}" do click_icon :edit @@ -138,7 +138,7 @@ expect(page).to have_content("Edit Price") within("#price_price_field") do - expect(page).to have_field('price_price', with: '123.99') + expect(page).to have_field("price_price", with: "123.99") end fill_in "price_price", with: 999.99 @@ -154,9 +154,9 @@ click_icon :edit end expect(page).to have_content("Edit Price") - expect(page).to_not have_field('price_currency', with: 'USD') + expect(page).to_not have_field("price_currency", with: "USD") within("#price_price_field") do - expect(page).to have_css('.number-with-currency-addon', text: 'EUR') + expect(page).to have_css(".number-with-currency-addon", text: "EUR") end end end diff --git a/backend/spec/features/admin/products/products_spec.rb b/backend/spec/features/admin/products/products_spec.rb index f98b6b8c125..bb225109b7b 100644 --- a/backend/spec/features/admin/products/products_spec.rb +++ b/backend/spec/features/admin/products/products_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Products", type: :feature do context "as admin user" do @@ -21,33 +21,33 @@ def build_option_type_with_values(name, values) context "listing products" do context "sorting" do before do - create(:product, name: 'apache baseball cap', price: 10) - create(:product, name: 'zomg shirt', price: 5) + create(:product, name: "apache baseball cap", price: 10) + create(:product, name: "zomg shirt", price: 5) end it "should list existing products with correct sorting by name" do click_nav "Products" # Name ASC - within_row(1) { expect(page).to have_content('apache baseball cap') } + within_row(1) { expect(page).to have_content("apache baseball cap") } within_row(2) { expect(page).to have_content("zomg shirt") } # Name DESC click_link "admin_products_listing_name_title" within_row(1) { expect(page).to have_content("zomg shirt") } - within_row(2) { expect(page).to have_content('apache baseball cap') } + within_row(2) { expect(page).to have_content("apache baseball cap") } end it "should list existing products with correct sorting by price" do click_nav "Products" # Name ASC (default) - within_row(1) { expect(page).to have_content('apache baseball cap') } + within_row(1) { expect(page).to have_content("apache baseball cap") } within_row(2) { expect(page).to have_content("zomg shirt") } # Price DESC click_link "admin_products_listing_price_title" within_row(1) { expect(page).to have_content("zomg shirt") } - within_row(2) { expect(page).to have_content('apache baseball cap') } + within_row(2) { expect(page).to have_content("apache baseball cap") } end end @@ -79,7 +79,7 @@ def build_option_type_with_values(name, values) create(:product, name: "Just a product", price: 19.99) end - it 'defaults it to Spree::Config.currency and sets the price as blank' do + it "defaults it to Spree::Config.currency and sets the price as blank" do stub_spree_preferences(currency: "USD") visit spree.admin_product_path(product) within("#product_price_field") do @@ -91,31 +91,31 @@ def build_option_type_with_values(name, values) context "searching products", js: true do it "should be able to search deleted products" do - create(:product, name: 'apache baseball cap', deleted_at: "2011-01-06 18:21:13") - create(:product, name: 'zomg shirt') + create(:product, name: "apache baseball cap", deleted_at: "2011-01-06 18:21:13") + create(:product, name: "zomg shirt") click_nav "Products" expect(page).to have_content("zomg shirt") expect(page).not_to have_content("apache baseball cap") check "Show Deleted" - click_button 'Search' + click_button "Search" expect(find('input[name="q[with_discarded]"]')).to be_checked expect(page).to have_content("zomg shirt") expect(page).to have_content("apache baseball cap") uncheck "Show Deleted" - click_button 'Search' + click_button "Search" expect(page).to have_content("zomg shirt") expect(page).not_to have_content("apache baseball cap") end it "should be able to search products by their properties" do - create(:product, name: 'apache baseball cap', sku: "A100") - create(:product, name: 'apache baseball cap2', sku: "B100") - create(:product, name: 'zomg shirt') + create(:product, name: "apache baseball cap", sku: "A100") + create(:product, name: "apache baseball cap2", sku: "B100") + create(:product, name: "zomg shirt") click_nav "Products" fill_in "Name", with: "ap" - click_button 'Search' + click_button "Search" expect(page).to have_content("apache baseball cap") expect(page).to have_content("apache baseball cap2") expect(page).not_to have_content("zomg shirt") @@ -155,34 +155,34 @@ def build_option_type_with_values(name, values) # Regression test for https://github.com/solidusio/solidus/issues/2016 it "should be able to search and sort by price" do - product = create(:product, name: 'apache baseball cap', sku: "A001") + product = create(:product, name: "apache baseball cap", sku: "A001") create(:variant, product:, sku: "A002") - create(:product, name: 'zomg shirt', sku: "Z001") + create(:product, name: "zomg shirt", sku: "Z001") click_nav "Products" expect(page).to have_content("apache baseball cap") expect(page).to have_content("zomg shirt") - expect(page).to have_css('#listing_products > tbody > tr', count: 2) + expect(page).to have_css("#listing_products > tbody > tr", count: 2) fill_in "SKU", with: "A" - click_button 'Search' + click_button "Search" expect(page).to have_content("apache baseball cap") expect(page).not_to have_content("zomg shirt") - expect(page).to have_css('#listing_products > tbody > tr', count: 1) + expect(page).to have_css("#listing_products > tbody > tr", count: 1) # Sort by master price - click_on 'Master Price' - expect(page).to have_css('.sort_link.asc', text: 'Master Price') + click_on "Master Price" + expect(page).to have_css(".sort_link.asc", text: "Master Price") expect(page).to have_content("apache baseball cap") expect(page).not_to have_content("zomg shirt") - expect(page).to have_css('#listing_products > tbody > tr', count: 1) + expect(page).to have_css("#listing_products > tbody > tr", count: 1) end end context "creating a new product" do before(:each) do @shipping_category = create(:shipping_category) - @tax_category = create(:tax_category, name: 'Alcohol taxes', is_default: true) + @tax_category = create(:tax_category, name: "Alcohol taxes", is_default: true) click_nav "Products" click_on "New Product" end @@ -252,7 +252,7 @@ def build_option_type_with_values(name, values) fill_in "product_price", with: "19,99" click_button "Create" expect(page).to have_content("Name can't be blank") - expect(page).to have_field('product_price', with: '19,99') + expect(page).to have_field("product_price", with: "19,99") end end @@ -268,7 +268,7 @@ def build_option_type_with_values(name, values) end it "should show default tax category" do - expect(page).to have_select('product_tax_category_id', selected: 'Alcohol taxes') + expect(page).to have_select("product_tax_category_id", selected: "Alcohol taxes") end it "can disable track_inventory" do @@ -310,43 +310,43 @@ def build_option_type_with_values(name, values) end end - context 'updating a product' do + context "updating a product" do let(:product) { create(:product) } - it 'should parse correctly available_on', :js do + it "should parse correctly available_on", :js do visit spree.admin_product_path(product) fill_in "product_available_on", with: "2012/12/25" click_button "Update" expect(page).to have_content("successfully updated!") - expect(Spree::Product.last.available_on).to eq('Tue, 25 Dec 2012 00:00:00 UTC +00:00') + expect(Spree::Product.last.available_on).to eq("Tue, 25 Dec 2012 00:00:00 UTC +00:00") end - it 'should correctly update discontinue_on', :js do + it "should correctly update discontinue_on", :js do visit spree.admin_product_path(product) fill_in "product_discontinue_on", with: "2020/12/4" click_button "Update" expect(page).to have_content("successfully updated!") - expect(product.reload.discontinue_on.to_s).to eq('2020-12-04 00:00:00 UTC') + expect(product.reload.discontinue_on.to_s).to eq("2020-12-04 00:00:00 UTC") end context "when there is a default tax category" do - let!(:default_category) { create(:tax_category, name: 'Alcohol taxes', is_default: true) } + let!(:default_category) { create(:tax_category, name: "Alcohol taxes", is_default: true) } context "when the product does not have a tax category" do it "pre-selects the default tax category" do visit spree.admin_product_path(product) - expect(page).to have_select('product_tax_category_id', selected: default_category.name) + expect(page).to have_select("product_tax_category_id", selected: default_category.name) end end context "when the product already has a tax category" do - let(:clothing) { create(:tax_category, name: 'Clothing', is_default: false) } + let(:clothing) { create(:tax_category, name: "Clothing", is_default: false) } before { product.update!(tax_category: clothing) } it "pre-selects the product tax category" do visit spree.admin_product_path(product) - expect(page).to have_select('product_tax_category_id', selected: clothing.name) + expect(page).to have_select("product_tax_category_id", selected: clothing.name) end end end @@ -369,7 +369,7 @@ def build_option_type_with_values(name, values) end end - context 'deleting a product', js: true do + context "deleting a product", js: true do let!(:product) { create(:product) } it "product details are still viewable" do @@ -386,15 +386,15 @@ def build_option_type_with_values(name, values) check "Show Deleted" click_button "Search" click_link product.name - expect(page).to_not have_field('Master Price') - expect(page).to_not have_content('Images') - expect(page).to_not have_content('Prices') - expect(page).to_not have_content('Product Properties') + expect(page).to_not have_field("Master Price") + expect(page).to_not have_content("Images") + expect(page).to_not have_content("Prices") + expect(page).to_not have_content("Product Properties") end end end - context 'with only product permissions' do + context "with only product permissions" do before do allow_any_instance_of(Spree::Admin::BaseController).to receive(:spree_current_user).and_return(nil) end @@ -406,28 +406,28 @@ def build_option_type_with_values(name, values) it "should only display accessible links on index" do visit spree.admin_products_path - expect(page).to have_link('Products') - expect(page).not_to have_link('Option Types') - expect(page).not_to have_link('Properties') - - expect(page).not_to have_link('New Product') - expect(page).not_to have_css('a.clone') - expect(page).to have_css('a.edit') - expect(page).not_to have_css('a.delete-resource') + expect(page).to have_link("Products") + expect(page).not_to have_link("Option Types") + expect(page).not_to have_link("Properties") + + expect(page).not_to have_link("New Product") + expect(page).not_to have_css("a.clone") + expect(page).to have_css("a.edit") + expect(page).not_to have_css("a.delete-resource") end it "should only display accessible links on edit" do visit spree.admin_product_path(product) # product tabs should be hidden - expect(page).to have_link('Product Details') - expect(page).not_to have_link('Images') - expect(page).not_to have_link('Variants') - expect(page).not_to have_link('Product Properties') - expect(page).not_to have_link('Stock Management') + expect(page).to have_link("Product Details") + expect(page).not_to have_link("Images") + expect(page).not_to have_link("Variants") + expect(page).not_to have_link("Product Properties") + expect(page).not_to have_link("Stock Management") # no create permission - expect(page).not_to have_link('New Product') + expect(page).not_to have_link("New Product") end end end diff --git a/backend/spec/features/admin/products/properties_spec.rb b/backend/spec/features/admin/products/properties_spec.rb index 4a75ec84a58..7b7d20b10da 100644 --- a/backend/spec/features/admin/products/properties_spec.rb +++ b/backend/spec/features/admin/products/properties_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Properties", type: :feature do stub_authorization! @@ -12,8 +12,8 @@ context "Property index" do before do - create(:property, name: 'shirt size', presentation: 'size') - create(:property, name: 'shirt fit', presentation: 'fit') + create(:property, name: "shirt size", presentation: "size") + create(:property, name: "shirt fit", presentation: "fit") click_link "Property Types" end @@ -32,9 +32,9 @@ end context "searching properties" do - it 'should list properties matching search query', js: true do + it "should list properties matching search query", js: true do fill_in "q_name_cont", with: "size" - click_button 'Search' + click_button "Search" expect(page).to have_content("shirt size") expect(page).not_to have_content("shirt fit") @@ -46,7 +46,7 @@ it "should allow an admin to create a new product property", js: true do click_link "Property Types" click_link "new_property_link" - within('#new_property') { expect(page).to have_content("New Property Type") } + within("#new_property") { expect(page).to have_content("New Property Type") } fill_in "property_name", with: "color of band" fill_in "property_presentation", with: "color" @@ -99,19 +99,19 @@ it "successfully remove and create a product property at the same time" do fill_in_property - expect(page).to have_css('tr.product_property', count: 1) + expect(page).to have_css("tr.product_property", count: 1) click_button "Add Product Properties" - within '.product_property:first-child' do - find('[id$=_property_name]').set("New Property") - find('[id$=_value]').set("New Value") + within ".product_property:first-child" do + find("[id$=_property_name]").set("New Property") + find("[id$=_value]").set("New Value") end - expect(page).to have_css('tr.product_property', count: 2) + expect(page).to have_css("tr.product_property", count: 2) delete_product_property # Give fadeOut time to complete - expect(page).to have_css('tr.product_property', count: 1) + expect(page).to have_css("tr.product_property", count: 1) click_button "Update" @@ -121,7 +121,7 @@ end def fill_in_property - expect(page).to have_content('Products') + expect(page).to have_content("Products") fill_in "product_product_properties_attributes_0_property_name", with: "A Property" fill_in "product_product_properties_attributes_0_value", with: "A Value" click_button "Update" @@ -132,7 +132,7 @@ def delete_product_property accept_alert do within_row(1) { click_icon :trash } end - expect(page).to have_content 'successfully removed' + expect(page).to have_content "successfully removed" end def check_persisted_property_row_count(expected_row_count) diff --git a/backend/spec/features/admin/products/stock_management_spec.rb b/backend/spec/features/admin/products/stock_management_spec.rb index 0f902aeaafe..0b7d86b75b8 100644 --- a/backend/spec/features/admin/products/stock_management_spec.rb +++ b/backend/spec/features/admin/products/stock_management_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Product Stock", type: :feature do stub_authorization! @@ -10,8 +10,8 @@ end context "given a product with a variant and a stock location" do - let!(:stock_location) { create(:stock_location, name: 'Default') } - let!(:product) { create(:product, name: 'apache baseball cap', price: 10) } + let!(:stock_location) { create(:stock_location, name: "Default") } + let!(:product) { create(:product, name: "apache baseball cap", price: 10) } let!(:variant) { create(:variant, product:) } let!(:variant2) { create(:variant, product:, track_inventory: false) } let(:stock_item) { variant.stock_items.find_by(stock_location:) } @@ -31,7 +31,7 @@ context "with no stock location" do before do Spree::StockLocation.destroy_all - find_by_id('content-header').click_link('Products') + find_by_id("content-header").click_link("Products") within_row(1) do click_icon :edit end @@ -39,7 +39,7 @@ end it "renders" do - expect(page).to have_content('Productsapache baseball cap') + expect(page).to have_content("Productsapache baseball cap") expect(page.current_url).to match("admin/products/apache-baseball-cap/stock") end end @@ -49,7 +49,7 @@ end it "can create a positive stock adjustment", js: true do - adjust_count_on_hand(variant.id, '14') + adjust_count_on_hand(variant.id, "14") stock_item.reload expect(stock_item.count_on_hand).to eq 24 expect(stock_item.stock_movements.count).to eq 1 @@ -57,7 +57,7 @@ end it "can create a negative stock adjustment", js: true do - adjust_count_on_hand(variant.id, '-4') + adjust_count_on_hand(variant.id, "-4") stock_item.reload expect(stock_item.count_on_hand).to eq 6 expect(stock_item.stock_movements.count).to eq 1 @@ -78,7 +78,7 @@ def adjust_count_on_hand(variant_id, count_on_hand) find(:css, "input[type='number']").set(count_on_hand) click_icon :check end - expect(page).to have_content('Updated Successfully') + expect(page).to have_content("Updated Successfully") end def toggle_backorderable(variant_id, value: true) @@ -86,7 +86,7 @@ def toggle_backorderable(variant_id, value: true) find(:css, "input[type='checkbox']").set(value) click_icon :check end - expect(page).to have_content('Updated Successfully') + expect(page).to have_content("Updated Successfully") end context "with two variants, one of which tracks inventory while the other doesn't" do @@ -109,17 +109,17 @@ def toggle_backorderable(variant_id, value: true) context "with stock locations that don't have stock items for variant yet" do before do - create(:stock_location, name: 'Other location', propagate_all_variants: false) + create(:stock_location, name: "Other location", propagate_all_variants: false) end it "can add stock items to other stock locations", js: true do visit current_url - within('.variant-stock-items', text: variant.sku) do - fill_in "variant-count-on-hand-#{variant.id}", with: '3' + within(".variant-stock-items", text: variant.sku) do + fill_in "variant-count-on-hand-#{variant.id}", with: "3" select "Other location", from: "stock_location_id" click_icon(:plus) end - expect(page).to have_content('Created successfully') + expect(page).to have_content("Created successfully") end end end diff --git a/backend/spec/features/admin/products/variant_spec.rb b/backend/spec/features/admin/products/variant_spec.rb index 66c0c0143c6..bba00d91698 100644 --- a/backend/spec/features/admin/products/variant_spec.rb +++ b/backend/spec/features/admin/products/variant_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Variants", type: :feature do stub_authorization! @@ -18,14 +18,14 @@ within_row(1) { click_icon :edit } click_link "Variants" click_on "New Variant" - expect(page).to have_field('variant_price', with: "1.99") - expect(page).to have_field('variant_cost_price', with: "1.00") - expect(page).to have_field('variant_weight', with: "2.50") - expect(page).to have_field('variant_height', with: "3.00") - expect(page).to have_field('variant_width', with: "1.00") - expect(page).to have_field('variant_depth', with: "1.50") - expect(page).to have_select('variant[tax_category_id]') - expect(page).to have_select('variant[shipping_category_id]') + expect(page).to have_field("variant_price", with: "1.99") + expect(page).to have_field("variant_cost_price", with: "1.00") + expect(page).to have_field("variant_weight", with: "2.50") + expect(page).to have_field("variant_height", with: "3.00") + expect(page).to have_field("variant_width", with: "1.00") + expect(page).to have_field("variant_depth", with: "1.50") + expect(page).to have_select("variant[tax_category_id]") + expect(page).to have_select("variant[shipping_category_id]") end end @@ -50,38 +50,38 @@ end end - context 'displaying discarded variants' do - let!(:existing_variant) { create(:variant, sku: 'existing_variant_sku', product:) } - let!(:discarded_variant) { create(:variant, sku: 'discarded_variant_sku', product:) } + context "displaying discarded variants" do + let!(:existing_variant) { create(:variant, sku: "existing_variant_sku", product:) } + let!(:discarded_variant) { create(:variant, sku: "discarded_variant_sku", product:) } before { discarded_variant.discard! } - it 'does not display deleted variants by default' do + it "does not display deleted variants by default" do visit spree.admin_product_variants_path(product) expect(page).to have_content(existing_variant.sku) expect(page).not_to have_content(discarded_variant.sku) end - it 'allows to display deleted variants with a filter' do + it "allows to display deleted variants with a filter" do visit spree.admin_product_variants_path(product) - check 'Show Deleted Variants' - click_button 'Filter Results' + check "Show Deleted Variants" + click_button "Filter Results" expect(page).to have_content(discarded_variant.sku) end end - context 'displaying variants with unconfigured prices' do - let!(:variant) { create(:variant, sku: 'priceless_variant', product:) } + context "displaying variants with unconfigured prices" do + let!(:variant) { create(:variant, sku: "priceless_variant", product:) } before { variant.prices.delete_all } - it 'renders the listing correctly' do + it "renders the listing correctly" do visit spree.admin_product_variants_path(product) expect(page.status_code).to be(200) - expect(page).to have_content('priceless_variant') + expect(page).to have_content("priceless_variant") end end end @@ -101,7 +101,7 @@ it "page has a field for editing the option value", js: true do visit spree.edit_admin_product_variant_path(product, variant) expect(page).to have_css("label", text: option_type.presentation) - expect(page).to have_select('Size', selected: 'S') + expect(page).to have_select("Size", selected: "S") end end end @@ -113,13 +113,13 @@ it "can delete a variant" do visit spree.admin_product_variants_path(product) - within 'tr', text: 'Size: S' do + within "tr", text: "Size: S" do accept_alert do click_icon :trash end end - expect(page).to have_no_text('Size: S') + expect(page).to have_no_text("Size: S") end end end diff --git a/backend/spec/features/admin/reimbursements_spec.rb b/backend/spec/features/admin/reimbursements_spec.rb index ccfd2f8904e..461d679dda2 100644 --- a/backend/spec/features/admin/reimbursements_spec.rb +++ b/backend/spec/features/admin/reimbursements_spec.rb @@ -1,18 +1,18 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -describe 'Promotions', type: :feature do +describe "Promotions", type: :feature do stub_authorization! let!(:reimbursement) { create(:reimbursement) } it "should display the reimbursements table" do visit spree.admin_order_reimbursement_path(reimbursement.order, reimbursement) - expect(page).to have_css('table thead tr th', text: 'Product') - expect(page).to have_css('table thead tr th', text: 'Preferred Reimbursement Type') - expect(page).to have_css('table thead tr th', text: 'Reimbursement Type Override') - expect(page).to have_css('table thead tr th', text: 'Exchange For') - expect(page).to have_css('table thead tr th', text: 'Amount Before Sales Tax') - expect(page).to have_css('table thead tr th', text: 'Total') + expect(page).to have_css("table thead tr th", text: "Product") + expect(page).to have_css("table thead tr th", text: "Preferred Reimbursement Type") + expect(page).to have_css("table thead tr th", text: "Reimbursement Type Override") + expect(page).to have_css("table thead tr th", text: "Exchange For") + expect(page).to have_css("table thead tr th", text: "Amount Before Sales Tax") + expect(page).to have_css("table thead tr th", text: "Total") end end diff --git a/backend/spec/features/admin/stock_items_spec.rb b/backend/spec/features/admin/stock_items_spec.rb index 19718993e48..c18a8aafdb9 100644 --- a/backend/spec/features/admin/stock_items_spec.rb +++ b/backend/spec/features/admin/stock_items_spec.rb @@ -1,31 +1,31 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -describe 'Stock Items Management', js: true do +describe "Stock Items Management", js: true do stub_authorization! - let(:admin_user) { create(:admin_user) } + let(:admin_user) { create(:admin_user) } let!(:variant_1) { create(:variant, product: product1) } let!(:variant_2) { create(:variant, product: product2) } - let(:product1) { create(:product, name: 'Ruby Shirt') } - let(:product2) { create(:product, name: 'Solidus Shirt') } + let(:product1) { create(:product, name: "Ruby Shirt") } + let(:product2) { create(:product, name: "Solidus Shirt") } let!(:stock_location) { create(:stock_location_without_variant_propagation) } - scenario 'User can add a new stock locations to any variant' do + scenario "User can add a new stock locations to any variant" do visit spree.admin_stock_items_path - within('.js-add-stock-item', match: :first) do + within(".js-add-stock-item", match: :first) do find('[name="stock_location_id"]').select(stock_location.name) - fill_in('count_on_hand', with: 10) - click_on('Create') + fill_in("count_on_hand", with: 10) + click_on("Create") end expect(page).to have_content("Created successfully") end - scenario 'searching by variant' do + scenario "searching by variant" do visit spree.admin_stock_items_path - fill_in 'SKU or Option Value', with: 'Ruby' - click_on 'Filter Results' + fill_in "SKU or Option Value", with: "Ruby" + click_on "Filter Results" expect(page).to have_content "Ruby Shirt" expect(page).to_not have_content "Solidus Shirt" end diff --git a/backend/spec/features/admin/store_credit_reasons_spec.rb b/backend/spec/features/admin/store_credit_reasons_spec.rb index 9e8911b3e1f..d8ce7c8ce53 100644 --- a/backend/spec/features/admin/store_credit_reasons_spec.rb +++ b/backend/spec/features/admin/store_credit_reasons_spec.rb @@ -28,7 +28,6 @@ cannot :create, Spree::StoreCreditReason end - it "doesnt show the `New Store credit reason` button" do expect(page).not_to have_content "New Store Credit Reason" end diff --git a/backend/spec/features/admin/store_credits_spec.rb b/backend/spec/features/admin/store_credits_spec.rb index aa05612a028..02a22e8de22 100644 --- a/backend/spec/features/admin/store_credits_spec.rb +++ b/backend/spec/features/admin/store_credits_spec.rb @@ -1,17 +1,17 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Store credits admin" do stub_authorization! - let!(:admin_user) { create(:admin_user) } + let!(:admin_user) { create(:admin_user) } let!(:store_credit) { create(:store_credit) } - let(:user) { store_credit.user } + let(:user) { store_credit.user } before do - allow(Spree.user_class).to receive(:find_by). - with(hash_including(:id)). - and_return(store_credit.user) + allow(Spree.user_class).to receive(:find_by) + .with(hash_including(:id)) + .and_return(store_credit.user) end describe "visiting the store credits page" do @@ -26,7 +26,7 @@ expect(page.current_path).to eq spree.admin_user_store_credits_path(store_credit.user) store_credit_table = page.find(".sc-table") - expect(store_credit_table).to have_css('tr', count: 1) + expect(store_credit_table).to have_css("tr", count: 1) expect(store_credit_table).to have_content(Spree::Money.new(store_credit.amount).to_s) expect(store_credit_table).to have_content(Spree::Money.new(store_credit.amount_used).to_s) expect(store_credit_table).to have_content(store_credit.category_name) @@ -51,7 +51,7 @@ expect(page.current_path).to eq spree.admin_user_store_credits_path(store_credit.user) store_credit_table = page.find(".sc-table") - expect(store_credit_table).to have_css('tr', count: 2) + expect(store_credit_table).to have_css("tr", count: 2) expect(Spree::StoreCredit.count).to eq 2 end end @@ -70,7 +70,7 @@ expect(page).to have_content "Credited #{store_credit.display_amount}" expect(page).to have_content "Created By #{store_credit.created_by.email}" expect(page).to have_content "Type #{store_credit.category_name}" - expect(page).to have_content 'Store credit history' + expect(page).to have_content "Store credit history" end end @@ -80,10 +80,10 @@ .and_return(admin_user) # When there are no errors - within '.store-credit-memo-row' do - click_button 'Edit' - fill_in 'store_credit_memo', with: 'Lottery Won' - click_button 'Save' + within ".store-credit-memo-row" do + click_button "Edit" + fill_in "store_credit_memo", with: "Lottery Won" + click_button "Save" expect(page).to have_content "Memo Lottery Won", normalize_ws: true end expect(page).to have_content "Store Credit has been successfully updated!" @@ -94,9 +94,9 @@ .to receive_message_chain(:errors, :full_messages) .and_return(["Memo is not valid"]) - within '.store-credit-memo-row' do + within ".store-credit-memo-row" do find(:css, ".edit-memo").click - fill_in 'store_credit_memo', with: 'Lottery Won Twice' + fill_in "store_credit_memo", with: "Lottery Won Twice" find(:css, ".save-memo").click expect(page).to have_content "Memo Lottery Won", normalize_ws: true expect(page).not_to have_content "Lottery Won Twice" @@ -119,13 +119,13 @@ it "updates the store credit's amount" do page.find(".sc-table td.actions a.fa-edit").click - expect(page).to have_content 'Store credit history' + expect(page).to have_content "Store credit history" click_link "Change amount" - expect(page).to have_content 'Editing store credit amount' - page.fill_in 'store_credit_amount', with: updated_amount - page.select store_credit_reason.name, from: 'store_credit_reason_id' + expect(page).to have_content "Editing store credit amount" + page.fill_in "store_credit_amount", with: updated_amount + page.select store_credit_reason.name, from: "store_credit_reason_id" click_button "Update" - expect(page.find('#sc-detail-table')).to have_content "$99.00" + expect(page.find("#sc-detail-table")).to have_content "$99.00" expect(store_credit.reload.amount.to_f).to eq updated_amount.to_f end end diff --git a/backend/spec/features/admin/stores_spec.rb b/backend/spec/features/admin/stores_spec.rb index 1ae571671b4..0bce35c5d52 100644 --- a/backend/spec/features/admin/stores_spec.rb +++ b/backend/spec/features/admin/stores_spec.rb @@ -1,37 +1,37 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -describe 'Stores', type: :feature do +describe "Stores", type: :feature do stub_authorization! - context 'when adding a store' do + context "when adding a store" do before { visit spree.new_admin_store_path } - it 'admin should be able to set the default_currency' do - expect(find('#store_default_currency').value).to eq '' + it "admin should be able to set the default_currency" do + expect(find("#store_default_currency").value).to eq "" - fill_in 'store_name', with: 'Solidus Store' - fill_in 'store_code', with: 'solidus' - fill_in 'store_url', with: 'example.solidus.io' - fill_in 'store_mail_from_address', with: 'from@solidus.io' - select 'EUR', from: 'store_default_currency' - click_button 'Create' + fill_in "store_name", with: "Solidus Store" + fill_in "store_code", with: "solidus" + fill_in "store_url", with: "example.solidus.io" + fill_in "store_mail_from_address", with: "from@solidus.io" + select "EUR", from: "store_default_currency" + click_button "Create" @store = Spree::Store.last - expect(@store.default_currency).to eq 'EUR' + expect(@store.default_currency).to eq "EUR" end end - context 'when editing a store' do - let(:store) { create :store, default_currency: 'AUD' } + context "when editing a store" do + let(:store) { create :store, default_currency: "AUD" } before { visit spree.edit_admin_store_path(store) } - it 'admin should be able to change the default_currency' do - select 'EUR', from: 'store_default_currency' - click_button 'Update' - expect(store.reload.default_currency).to eq 'EUR' + it "admin should be able to change the default_currency" do + select "EUR", from: "store_default_currency" + click_button "Update" + expect(store.reload.default_currency).to eq "EUR" end end end diff --git a/backend/spec/features/admin/style_guide_spec.rb b/backend/spec/features/admin/style_guide_spec.rb index 83579c55413..77a37c3c213 100644 --- a/backend/spec/features/admin/style_guide_spec.rb +++ b/backend/spec/features/admin/style_guide_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Style guide", type: :feature do stub_authorization! diff --git a/backend/spec/features/admin/taxons_spec.rb b/backend/spec/features/admin/taxons_spec.rb index 968640ac466..136343e5063 100644 --- a/backend/spec/features/admin/taxons_spec.rb +++ b/backend/spec/features/admin/taxons_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Taxonomies and taxons", type: :feature do stub_authorization! @@ -27,14 +27,14 @@ taxonomy = create :taxonomy visit spree.edit_admin_taxonomy_path(taxonomy) - expect(page).to have_content('Brand') + expect(page).to have_content("Brand") - click_on('Add taxon') - expect(page).to have_content('New node') + click_on("Add taxon") + expect(page).to have_content("New node") # Little tricky to select the right taxon. Since the text is technically # inside the top-level li. - within '#taxonomy_tree li li', text: 'New node' do + within "#taxonomy_tree li li", text: "New node" do click_icon :edit end @@ -44,16 +44,16 @@ context "inside sidebar menu" do def only_one_selected_tab_inside?(sub_tab_selector, tab_name, tab_path) within(sub_tab_selector) do - expect(page).to have_selector('.selected', count: 1) + expect(page).to have_selector(".selected", count: 1) - within('.selected') { expect(page).to have_link(tab_name, href: tab_path) } + within(".selected") { expect(page).to have_link(tab_name, href: tab_path) } end end context "on display taxonomies page", js: true do it "should be selected only one tab 'Taxonomies' in product sub tabs" do visit spree.admin_taxonomies_path - only_one_selected_tab_inside?('[data-hook=admin_product_sub_tabs]', 'Taxonomies', spree.admin_taxonomies_path) + only_one_selected_tab_inside?("[data-hook=admin_product_sub_tabs]", "Taxonomies", spree.admin_taxonomies_path) end end @@ -62,7 +62,7 @@ def only_one_selected_tab_inside?(sub_tab_selector, tab_name, tab_path) taxonomy = create :taxonomy visit spree.edit_admin_taxonomy_path(taxonomy) - only_one_selected_tab_inside?('[data-hook=admin_product_sub_tabs]', 'Taxonomies', spree.admin_taxonomies_path) + only_one_selected_tab_inside?("[data-hook=admin_product_sub_tabs]", "Taxonomies", spree.admin_taxonomies_path) end end @@ -71,18 +71,18 @@ def only_one_selected_tab_inside?(sub_tab_selector, tab_name, tab_path) taxonomy = create :taxonomy visit spree.edit_admin_taxonomy_taxon_path(taxonomy, taxonomy.root.id) - only_one_selected_tab_inside?('[data-hook=admin_product_sub_tabs]', 'Taxonomies', spree.admin_taxonomies_path) + only_one_selected_tab_inside?("[data-hook=admin_product_sub_tabs]", "Taxonomies", spree.admin_taxonomies_path) end end end scenario "Removes attachments from taxon" do taxon = create(:taxon) - taxon.update(icon: File.new(file_fixture('ror_ringer.jpeg'))) + taxon.update(icon: File.new(file_fixture("ror_ringer.jpeg"))) visit spree.edit_admin_taxonomy_taxon_path(taxon.taxonomy, taxon.id) - within('#taxon_icon_field') do - click_on 'Remove' + within("#taxon_icon_field") do + click_on "Remove" end expect(page).to have_content("Icon has been successfully removed!") diff --git a/backend/spec/features/admin/users_spec.rb b/backend/spec/features/admin/users_spec.rb index 5fdcdbb568d..02396662a29 100644 --- a/backend/spec/features/admin/users_spec.rb +++ b/backend/spec/features/admin/users_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -describe 'Users', type: :feature do +describe "Users", type: :feature do stub_authorization! let!(:country) { create(:country) } - let!(:user_a) { create(:user_with_addresses, email: 'a@example.com') } - let!(:user_b) { create(:user_with_addresses, email: 'b@example.com') } - let!(:admin_role) { create(:role, name: 'admin') } - let!(:user_role) { create(:role, name: 'user') } + let!(:user_a) { create(:user_with_addresses, email: "a@example.com") } + let!(:user_b) { create(:user_with_addresses, email: "b@example.com") } + let!(:admin_role) { create(:role, name: "admin") } + let!(:user_role) { create(:role, name: "user") } let!(:store) { create(:store) } let(:order) { create(:completed_order_with_totals, user: user_a, number: "R123") } @@ -23,8 +23,8 @@ let(:orders) { [order, order_2] } - describe 'the user items page' do - context 'when the user cannot manage orders' do + describe "the user items page" do + context "when the user cannot manage orders" do custom_authorization! do |_user| cannot :manage, Spree::Order can [:read, :admin], Spree::Order @@ -32,19 +32,19 @@ before { visit spree.items_admin_user_path(user_a) } - it 'does not show the link for creating new orders' do - expect(page).not_to have_content 'No Orders found. Create One.' + it "does not show the link for creating new orders" do + expect(page).not_to have_content "No Orders found. Create One." end end end - shared_examples_for 'a user page' do - it 'has lifetime stats' do + shared_examples_for "a user page" do + it "has lifetime stats" do orders visit current_url # need to refresh after creating the orders for specs that did not require orders within("#user-lifetime-stats") do [:total_sales, :num_orders, :average_order_value, :member_since].each do |stat_name| - expect(page).to have_content I18n.t(stat_name, scope: 'spree') + expect(page).to have_content I18n.t(stat_name, scope: "spree") end expect(page).to have_content(order.total + order_2.total) expect(page).to have_content orders.count @@ -53,29 +53,29 @@ end end - it 'can go back to the users list' do + it "can go back to the users list" do expect(page).to have_link Spree::LegacyUser.model_name.human(count: Spree::I18N_GENERIC_PLURAL), href: spree.admin_users_path end - it 'can navigate to the account page' do + it "can navigate to the account page" do expect(page).to have_link I18n.t("spree.admin.user.account"), href: spree.edit_admin_user_path(user_a) end - it 'can navigate to the order history' do + it "can navigate to the order history" do expect(page).to have_link I18n.t("spree.admin.user.order_history"), href: spree.orders_admin_user_path(user_a) end - it 'can navigate to the items purchased' do + it "can navigate to the items purchased" do expect(page).to have_link I18n.t("spree.admin.user.items"), href: spree.items_admin_user_path(user_a) end end - shared_examples_for 'a sortable attribute' do + shared_examples_for "a sortable attribute" do before { click_link sort_link } it "can sort asc" do within_table(table_id) do - expect(page).to have_selector '.sort_link.asc' + expect(page).to have_selector ".sort_link.asc" expect(page).to have_text text_match_1 expect(page).to have_text text_match_2 expect(text_match_1).to appear_before text_match_2 @@ -89,7 +89,7 @@ end within_table(table_id) do - expect(page).to have_selector '.sort_link.desc' + expect(page).to have_selector ".sort_link.desc" expect(page).to have_text text_match_1 expect(page).to have_text text_match_2 expect(text_match_2).to appear_before text_match_1 @@ -99,10 +99,10 @@ before do visit spree.admin_path - click_link 'Users' + click_link "Users" end - context 'users index' do + context "users index" do context "email" do it_behaves_like "a sortable attribute" do let(:text_match_1) { user_a.email } @@ -112,10 +112,10 @@ end end - it 'displays the correct results for a user search by email' do - fill_in 'q_email_cont', with: user_a.email - click_button 'Search' - within_table('listing_users') do + it "displays the correct results for a user search by email" do + fill_in "q_email_cont", with: user_a.email + click_button "Search" + within_table("listing_users") do expect(page).to have_text user_a.email expect(page).not_to have_text user_b.email end @@ -130,29 +130,29 @@ let(:text_match_1) { user_a.email } let(:text_match_2) { user_b.email } let(:table_id) { "listing_users" } - let(:sort_link) { I18n.t('spree.member_since') } + let(:sort_link) { I18n.t("spree.member_since") } end - it 'displays the correct results for a user search by creation date' do - fill_in 'q_created_at_lt', with: 1.week.ago - click_button 'Search' - within_table('listing_users') do + it "displays the correct results for a user search by creation date" do + fill_in "q_created_at_lt", with: 1.week.ago + click_button "Search" + within_table("listing_users") do expect(page).to have_text user_a.email expect(page).not_to have_text user_b.email end end end - context 'with users having roles' do + context "with users having roles" do before do user_a.spree_roles << admin_role user_b.spree_roles << user_role end - it 'displays the correct results for a user search by role' do - select 'admin', from: Spree.user_class.human_attribute_name(:spree_roles) - click_button 'Search' - within_table('listing_users') do + it "displays the correct results for a user search by role" do + select "admin", from: Spree.user_class.human_attribute_name(:spree_roles) + click_button "Search" + within_table("listing_users") do expect(page).to have_text user_a.email expect(page).not_to have_text user_b.email end @@ -160,76 +160,76 @@ end end - context 'editing users' do + context "editing users" do before { click_link user_a.email } - it_behaves_like 'a user page' + it_behaves_like "a user page" - it 'can edit the user email' do - fill_in 'user_email', with: 'a@example.com99' - click_button 'Update' + it "can edit the user email" do + fill_in "user_email", with: "a@example.com99" + click_button "Update" - expect(user_a.reload.email).to eq 'a@example.com99' - expect(page).to have_text 'Account updated' - expect(page).to have_field('user_email', with: 'a@example.com99') + expect(user_a.reload.email).to eq "a@example.com99" + expect(page).to have_text "Account updated" + expect(page).to have_field("user_email", with: "a@example.com99") end - it 'can edit user roles' do - click_link 'Account' + it "can edit user roles" do + click_link "Account" - check 'user_spree_role_admin' - click_button 'Update' - expect(page).to have_text 'Account updated' - expect(find_field('user_spree_role_admin')).to be_checked + check "user_spree_role_admin" + click_button "Update" + expect(page).to have_text "Account updated" + expect(find_field("user_spree_role_admin")).to be_checked end - it 'can delete user roles' do + it "can delete user roles" do user_a.spree_roles << Spree::Role.create(name: "dummy") - click_link 'Account' + click_link "Account" user_a.spree_roles.each do |role| uncheck "user_spree_role_#{role.name}" end - click_button 'Update' - expect(page).to have_text 'Account updated' - expect(find_field('user_spree_role_dummy')).not_to be_checked + click_button "Update" + expect(page).to have_text "Account updated" + expect(find_field("user_spree_role_dummy")).not_to be_checked expect(user_a.reload.spree_roles).to be_empty end - it 'can edit user shipping address' do + it "can edit user shipping address" do click_link "Addresses" within("#admin_user_edit_addresses") do fill_in "user_ship_address_attributes_address1", with: "1313 Mockingbird Ln" - click_button 'Update' - expect(page).to have_field('user_ship_address_attributes_address1', with: "1313 Mockingbird Ln") + click_button "Update" + expect(page).to have_field("user_ship_address_attributes_address1", with: "1313 Mockingbird Ln") end expect(user_a.reload.ship_address.address1).to eq "1313 Mockingbird Ln" end - it 'can edit user billing address' do + it "can edit user billing address" do click_link "Addresses" within("#admin_user_edit_addresses") do fill_in "user_bill_address_attributes_address1", with: "1313 Mockingbird Ln" - click_button 'Update' - expect(page).to have_field('user_bill_address_attributes_address1', with: "1313 Mockingbird Ln") + click_button "Update" + expect(page).to have_field("user_bill_address_attributes_address1", with: "1313 Mockingbird Ln") end expect(user_a.reload.bill_address.address1).to eq "1313 Mockingbird Ln" end - it 'can edit the user password' do - fill_in 'user_password', with: 'welcome' - fill_in 'user_password_confirmation', with: 'welcome' - click_button 'Update' + it "can edit the user password" do + fill_in "user_password", with: "welcome" + fill_in "user_password_confirmation", with: "welcome" + click_button "Update" - expect(page).to have_text 'Account updated' + expect(page).to have_text "Account updated" end - context 'when :can_restrict_stock_management is true' do + context "when :can_restrict_stock_management is true" do custom_authorization! do |_user| can [:show], Spree::StockLocation end @@ -240,41 +240,41 @@ let!(:stock_location) { create(:stock_location, name: "location_1") } - it 'can edit user stock locations' do - click_link 'Account' + it "can edit user stock locations" do + click_link "Account" - check 'user_spree_stock_locations_location_1' - click_button 'Update' - expect(page).to have_text 'Account updated' - expect(find_field('user_spree_stock_locations_location_1')).to be_checked + check "user_spree_stock_locations_location_1" + click_button "Update" + expect(page).to have_text "Account updated" + expect(find_field("user_spree_stock_locations_location_1")).to be_checked end - it 'can delete user stock locations' do + it "can delete user stock locations" do user_a.stock_locations << Spree::StockLocation.create(name: "dummy") - click_link 'Account' + click_link "Account" user_a.stock_locations.each do |location| uncheck "user_spree_stock_locations_#{location.name}" end - click_button 'Update' - expect(page).to have_text 'Account updated' - expect(find_field('user_spree_stock_locations_dummy')).not_to be_checked + click_button "Update" + expect(page).to have_text "Account updated" + expect(find_field("user_spree_stock_locations_dummy")).not_to be_checked expect(user_a.reload.stock_locations).to be_empty end end - context 'without password permissions' do + context "without password permissions" do custom_authorization! do |_user| cannot [:update_password], Spree.user_class end - it 'cannot edit the user password' do - expect(page).to_not have_text 'Password' + it "cannot edit the user password" do + expect(page).to_not have_text "Password" end end - context 'invalid entry' do + context "invalid entry" do around do |example| ::AlwaysInvalidUser = Class.new(Spree.user_class) do validate :always_invalid_email @@ -291,22 +291,22 @@ def always_invalid_email Object.send(:remove_const, "AlwaysInvalidUser") end - it 'should show validation errors' do - fill_in 'user_email', with: 'something' - click_button 'Update' + it "should show validation errors" do + fill_in "user_email", with: "something" + click_button "Update" - within('#errorExplanation') do + within("#errorExplanation") do expect(page).to have_content("Email is invalid") end - within('.flash.error') do + within(".flash.error") do expect(page).to have_content("Email is invalid") end end end - context 'no api key exists' do - it 'can generate a new api key' do + context "no api key exists" do + it "can generate a new api key" do within("#admin_user_edit_api_key") do expect(user_a.spree_api_key).to be_blank click_button "Generate API key" @@ -314,28 +314,28 @@ def always_invalid_email expect(user_a.reload.spree_api_key).to be_present - expect(page).to have_content('Key: (hidden)') + expect(page).to have_content("Key: (hidden)") end end - context 'an api key exists' do + context "an api key exists" do before do user_a.generate_spree_api_key! expect(user_a.reload.spree_api_key).to be_present visit current_path end - it 'can clear an api key' do - expect(page).to have_css('#current-api-key') + it "can clear an api key" do + expect(page).to have_css("#current-api-key") click_button "Clear key" - expect(page).to have_no_css('#current-api-key') + expect(page).to have_no_css("#current-api-key") expect(user_a.reload.spree_api_key).to be_blank end - it 'can regenerate an api key' do + it "can regenerate an api key" do old_key = user_a.spree_api_key within("#admin_user_edit_api_key") do @@ -345,37 +345,37 @@ def always_invalid_email expect(user_a.reload.spree_api_key).to be_present expect(user_a.reload.spree_api_key).not_to eq old_key - expect(page).to have_content('Key: (hidden)') + expect(page).to have_content("Key: (hidden)") end end end - context 'deleting users' do - let!(:an_user) { create(:user_with_addresses, email: 'an_user@example.com') } + context "deleting users" do + let!(:an_user) { create(:user_with_addresses, email: "an_user@example.com") } let!(:order) { create(:completed_order_with_totals, user_id: an_user.id) } - context 'if an user has placed orders' do + context "if an user has placed orders" do before do visit spree.admin_path - click_link 'Users' + click_link "Users" end it "can't be deleted" do within "#spree_user_#{an_user.id}" do - expect(page).not_to have_selector('.fa-trash') + expect(page).not_to have_selector(".fa-trash") end end end end - context 'order history with sorting' do + context "order history with sorting" do before do orders click_link user_a.email within(".tabs") { click_link I18n.t("spree.admin.user.order_history") } end - it_behaves_like 'a user page' + it_behaves_like "a user page" context "completed_at" do it_behaves_like "a sortable attribute" do @@ -415,14 +415,14 @@ def always_invalid_email end end - context 'items purchased with sorting' do + context "items purchased with sorting" do before do orders click_link user_a.email within(".tabs") { click_link I18n.t("spree.admin.user.items") } end - it_behaves_like 'a user page' + it_behaves_like "a user page" context "completed_at" do it_behaves_like "a sortable attribute" do @@ -449,8 +449,8 @@ def always_invalid_email it "has item attributes" do items = order.line_items | order_2.line_items - expect(page).to have_table 'listing_items' - within_table('listing_items') do + expect(page).to have_table "listing_items" + within_table("listing_items") do items.each do |item| expect(page).to have_selector(".item-name", text: item.product.name) expect(page).to have_selector(".item-price", text: item.single_money.to_html(html_wrap: false)) @@ -461,34 +461,34 @@ def always_invalid_email end end - context 'create new order' do + context "create new order" do before do allow(Spree.user_class).to receive(:find_by).with(id: user_a.id.to_s) { user_a } click_link user_a.email - click_link 'Create order for this user' + click_link "Create order for this user" end - it 'prefills the customer addresses with the user addresses', :flaky do - click_link 'Customer' + it "prefills the customer addresses with the user addresses", :flaky do + click_link "Customer" - within '.js-billing-address' do - expect(page).to have_field('Street Address', with: user_a.bill_address.address1) + within ".js-billing-address" do + expect(page).to have_field("Street Address", with: user_a.bill_address.address1) expect(page).to have_field("Street Address (cont'd)", with: user_a.bill_address.address2) - expect(page).to have_field('City', with: user_a.bill_address.city) - expect(page).to have_field('Zip Code', with: user_a.bill_address.zipcode) - expect(page).to have_select('Country', selected: "#{user_a.bill_address.country} of America") - expect(page).to have_select('State', selected: user_a.bill_address.state.name) - expect(page).to have_field('Phone', with: user_a.bill_address.phone) + expect(page).to have_field("City", with: user_a.bill_address.city) + expect(page).to have_field("Zip Code", with: user_a.bill_address.zipcode) + expect(page).to have_select("Country", selected: "#{user_a.bill_address.country} of America") + expect(page).to have_select("State", selected: user_a.bill_address.state.name) + expect(page).to have_field("Phone", with: user_a.bill_address.phone) end - within '.js-shipping-address' do - expect(page).to have_field('Street Address', with: user_a.ship_address.address1) + within ".js-shipping-address" do + expect(page).to have_field("Street Address", with: user_a.ship_address.address1) expect(page).to have_field("Street Address (cont'd)", with: user_a.ship_address.address2) - expect(page).to have_field('City', with: user_a.ship_address.city) - expect(page).to have_field('Zip Code', with: user_a.ship_address.zipcode) - expect(page).to have_select('Country', selected: "#{user_a.ship_address.country} of America") - expect(page).to have_select('State', selected: user_a.ship_address.state.name) - expect(page).to have_field('Phone', with: user_a.ship_address.phone) + expect(page).to have_field("City", with: user_a.ship_address.city) + expect(page).to have_field("Zip Code", with: user_a.ship_address.zipcode) + expect(page).to have_select("Country", selected: "#{user_a.ship_address.country} of America") + expect(page).to have_select("State", selected: user_a.ship_address.state.name) + expect(page).to have_field("Phone", with: user_a.ship_address.phone) end end end diff --git a/backend/spec/helpers/admin/base_helper_spec.rb b/backend/spec/helpers/admin/base_helper_spec.rb index da3e78834a3..5e30a6484e7 100644 --- a/backend/spec/helpers/admin/base_helper_spec.rb +++ b/backend/spec/helpers/admin/base_helper_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Admin::BaseHelper, type: :helper do include Spree::Admin::BaseHelper diff --git a/backend/spec/helpers/admin/navigation_helper_spec.rb b/backend/spec/helpers/admin/navigation_helper_spec.rb index d6d189beea4..7e5a55bc73c 100644 --- a/backend/spec/helpers/admin/navigation_helper_spec.rb +++ b/backend/spec/helpers/admin/navigation_helper_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Admin::NavigationHelper, type: :helper do before do - allow(controller).to receive(:controller_name).and_return('test') + allow(controller).to receive(:controller_name).and_return("test") end describe "#tab" do @@ -63,7 +63,7 @@ it "should be selected if the fullpath matches" do allow(controller).to receive(:controller_name).and_return("bonobos") - tab = helper.tab(label: :orders, match_path: '/orders') + tab = helper.tab(label: :orders, match_path: "/orders") expect(tab).to include('class="selected"') end @@ -75,7 +75,7 @@ it "should not be selected if the fullpath does not match" do allow(controller).to receive(:controller_name).and_return("bonobos") - tab = helper.tab(label: :orders, match_path: '/shady') + tab = helper.tab(label: :orders, match_path: "/shady") expect(tab).not_to include('class="selected"') end @@ -104,7 +104,7 @@ end it "should accept a block of content to append" do - admin_tab = helper.tab(label: :orders){ 'foo' } + admin_tab = helper.tab(label: :orders) { "foo" } expect(admin_tab).to end_with("foo") end end @@ -152,7 +152,7 @@ describe "#solidus_icon" do context "if given an icon_name" do - subject(:solidus_icon) { helper.solidus_icon('example-icon-name') } + subject(:solidus_icon) { helper.solidus_icon("example-icon-name") } it { is_expected.to eq "" } end diff --git a/backend/spec/helpers/admin/orders_helper_spec.rb b/backend/spec/helpers/admin/orders_helper_spec.rb index 9d6947bd9cf..0f7d5bd5201 100644 --- a/backend/spec/helpers/admin/orders_helper_spec.rb +++ b/backend/spec/helpers/admin/orders_helper_spec.rb @@ -9,7 +9,7 @@ before do helper.class.include Spree::Admin::NavigationHelper helper.class.include Spree::Core::Engine.routes.url_helpers - @order_events = %w{approve cancel resume} + @order_events = %w[approve cancel resume] end context "with an uncompleted order" do diff --git a/backend/spec/helpers/admin/stock_locations_helper_spec.rb b/backend/spec/helpers/admin/stock_locations_helper_spec.rb index ee41848a6a1..11bab6e2c14 100644 --- a/backend/spec/helpers/admin/stock_locations_helper_spec.rb +++ b/backend/spec/helpers/admin/stock_locations_helper_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Admin::StockLocationsHelper, type: :helper do describe "#admin_stock_location_display_name" do diff --git a/backend/spec/helpers/admin/stock_movements_helper_spec.rb b/backend/spec/helpers/admin/stock_movements_helper_spec.rb index 76ef89d7eb9..fa2d4fe91e0 100644 --- a/backend/spec/helpers/admin/stock_movements_helper_spec.rb +++ b/backend/spec/helpers/admin/stock_movements_helper_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Admin::StockMovementsHelper, type: :helper do describe "#pretty_originator" do let!(:stock_location) { create(:stock_location_with_items) } - let!(:stock_item) { stock_location.stock_items.first } - let(:stock_movement) { create(:stock_movement, stock_item:, originator:) } + let!(:stock_item) { stock_location.stock_items.first } + let(:stock_movement) { create(:stock_movement, stock_item:, originator:) } subject { helper.pretty_originator(stock_movement) } diff --git a/backend/spec/helpers/admin/store_credit_events_helper_spec.rb b/backend/spec/helpers/admin/store_credit_events_helper_spec.rb index fd4c3a24103..43b52fb2a16 100644 --- a/backend/spec/helpers/admin/store_credit_events_helper_spec.rb +++ b/backend/spec/helpers/admin/store_credit_events_helper_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Spree::Admin::StoreCreditEventsHelper, type: :helper do describe "#store_credit_event_admin_action_name" do @@ -66,7 +66,7 @@ let(:originator) { create(:user) } it "returns a link to the user's edit page" do - expect(subject).to eq %(User - #{originator.email}) + expect(subject).to eq %(User - #{originator.email}) end end @@ -74,7 +74,7 @@ let(:originator) { create(:payment) } it "returns a link to the order's payments page" do - expect(subject).to eq %(Payment - Order ##{originator.order.number}) + expect(subject).to eq %(Payment - Order ##{originator.order.number}) end end @@ -82,7 +82,7 @@ let(:originator) { create(:refund, amount: 1.0) } it "returns a link to the order's payments page" do - expect(subject).to eq %(Refund - Order ##{originator.payment.order.number}) + expect(subject).to eq %(Refund - Order ##{originator.payment.order.number}) end end diff --git a/backend/spec/lib/spree/backend_configuration/menu_item_spec.rb b/backend/spec/lib/spree/backend_configuration/menu_item_spec.rb index eae7d026b20..3fa9419c109 100644 --- a/backend/spec/lib/spree/backend_configuration/menu_item_spec.rb +++ b/backend/spec/lib/spree/backend_configuration/menu_item_spec.rb @@ -1,68 +1,68 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" RSpec.describe Spree::BackendConfiguration::MenuItem do - describe '#children' do - it 'is the replacement for the deprecated #partial method' do + describe "#children" do + it "is the replacement for the deprecated #partial method" do expect(Spree.deprecator).to receive(:warn).with(a_string_matching(/partial/)) - described_class.new(partial: 'foo') + described_class.new(partial: "foo") end end - describe '#match_path?' do - it 'matches a string using the admin path prefix' do - subject = described_class.new(match_path: '/stock_items') - request = double(ActionDispatch::Request, fullpath: '/admin/stock_items/1/edit') + describe "#match_path?" do + it "matches a string using the admin path prefix" do + subject = described_class.new(match_path: "/stock_items") + request = double(ActionDispatch::Request, fullpath: "/admin/stock_items/1/edit") expect(subject.match_path?(request)).to be_truthy end - it 'matches a proc accepting the request object' do - request = double(ActionDispatch::Request, fullpath: '/foo/bar/baz') - subject = described_class.new(match_path: -> { _1.fullpath.include? '/bar/' }) + it "matches a proc accepting the request object" do + request = double(ActionDispatch::Request, fullpath: "/foo/bar/baz") + subject = described_class.new(match_path: -> { _1.fullpath.include? "/bar/" }) expect(subject.match_path?(request)).to be_truthy end - it 'matches a regexp' do + it "matches a regexp" do subject = described_class.new(match_path: %r{/bar/}) - request = double(ActionDispatch::Request, fullpath: '/foo/bar/baz') + request = double(ActionDispatch::Request, fullpath: "/foo/bar/baz") expect(subject.match_path?(request)).to be_truthy end - it 'matches the item url as the fullpath prefix' do - subject = described_class.new(url: '/foo/bar') - request = double(ActionDispatch::Request, fullpath: '/foo/bar/baz') + it "matches the item url as the fullpath prefix" do + subject = described_class.new(url: "/foo/bar") + request = double(ActionDispatch::Request, fullpath: "/foo/bar/baz") expect(subject.match_path?(request)).to be_truthy end - it 'matches the item on the (deprecated) sections against the controller name' do + it "matches the item on the (deprecated) sections against the controller name" do allow(Spree.deprecator).to receive(:warn).with(a_string_matching(/icon/)) allow(Spree.deprecator).to receive(:warn).with(a_string_matching(/sections/)) subject = described_class.new([:foo, :bar], :baz_icon) matching_request = double( ActionDispatch::Request, - controller_class: double(ActionController::Base, controller_name: 'bar'), - fullpath: '/qux', + controller_class: double(ActionController::Base, controller_name: "bar"), + fullpath: "/qux" ) other_request = double( ActionDispatch::Request, - controller_class: double(ActionController::Base, controller_name: 'baz'), - fullpath: '/qux', + controller_class: double(ActionController::Base, controller_name: "baz"), + fullpath: "/qux" ) expect(subject.match_path?(matching_request)).to be true expect(subject.match_path?(other_request)).to be false end - it 'should not match the url if a match_path is set' do + it "should not match the url if a match_path is set" do subject = described_class.new(match_path: %r{/url$/}, url: "/foo/url") - request = double(ActionDispatch::Request, fullpath: '/foo/url_which_starts_with_the_same_characters') + request = double(ActionDispatch::Request, fullpath: "/foo/url_which_starts_with_the_same_characters") expect(subject.match_path?(request)).to be_falsey end @@ -97,11 +97,11 @@ expect(Spree.deprecator).to receive(:warn).with(a_string_matching(/sections/)) expect(Spree.deprecator).to receive(:warn).with(a_string_matching(/icon/)) - described_class.new([:foo, :bar], 'icon') + described_class.new([:foo, :bar], "icon") end it "raises ArgumentError when providing the wrong number of sequential arguments" do - expect { described_class.new([:foo, :bar], 'icon', 'baz') }.to raise_error(ArgumentError) + expect { described_class.new([:foo, :bar], "icon", "baz") }.to raise_error(ArgumentError) expect { described_class.new([:foo, :bar]) }.to raise_error(ArgumentError) end end diff --git a/backend/spec/lib/spree/backend_configuration_spec.rb b/backend/spec/lib/spree/backend_configuration_spec.rb index 221581e78ce..6a89cd8c05c 100644 --- a/backend/spec/lib/spree/backend_configuration_spec.rb +++ b/backend/spec/lib/spree/backend_configuration_spec.rb @@ -1,36 +1,36 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" RSpec.describe Spree::BackendConfiguration do - describe '#menu_items' do + describe "#menu_items" do subject do described_class.new.menu_items end - describe 'menu tab for stock items' do + describe "menu tab for stock items" do let(:stock_menu_item) do subject.detect { |item| item.label == :stock } end # Regression for https://github.com/solidusio/solidus/issues/2950 - it 'has match_path set to /stock_items' do + it "has match_path set to /stock_items" do expect(stock_menu_item.match_path).to eq(%r{/(stock_items)}) end end - describe 'menu tab for settings' do + describe "menu tab for settings" do let(:menu_item) { subject.find { |item| item.label == :settings } } let(:view) { double("view") } - describe '#render_in?' do - it 'is shown if any of its submenus are present' do + describe "#render_in?" do + it "is shown if any of its submenus are present" do allow(view).to receive(:can?).and_return(true, false) expect(menu_item.render_in?(view)).to eq(true) end - it 'is not shown if none of its submenus are present' do + it "is not shown if none of its submenus are present" do expect(view).to receive(:can?).exactly(13).times.and_return(false) expect(menu_item.render_in?(view)).to eq(false) @@ -39,18 +39,18 @@ end end - describe '#frontend_product_path' do + describe "#frontend_product_path" do let(:configuration) { described_class.new } - let(:spree_routes) { double('spree_routes') } - let(:template_context) { double('template_context', spree: spree_routes) } - let(:product) { instance_double('Spree::Product', id: 1) } + let(:spree_routes) { double("spree_routes") } + let(:template_context) { double("template_context", spree: spree_routes) } + let(:product) { instance_double("Spree::Product", id: 1) } subject(:frontend_product_path) do configuration.frontend_product_path.call(template_context, product) end - context 'by default' do - context 'when there is no product path route' do + context "by default" do + context "when there is no product path route" do before do expect(:spree_routes).to_not respond_to(:product_path) end @@ -58,7 +58,7 @@ it { is_expected.to be_nil } end - context 'when there is a product path route' do + context "when there is a product path route" do let(:expected_path) { "/products/#{product.id}" } let(:spree_routes_class) do @@ -71,47 +71,47 @@ def product_path(product) let(:spree_routes) { spree_routes_class.new } - it 'returns the product path' do + it "returns the product path" do expect(frontend_product_path).to eq("/products/#{product.id}") end end end end - describe '#theme_path' do - it 'returns the default theme path if the user theme is not set' do - subject.themes = { foo: 'foo-theme-path' } + describe "#theme_path" do + it "returns the default theme path if the user theme is not set" do + subject.themes = {foo: "foo-theme-path"} subject.theme = :foo - expect(subject.theme_path(nil)).to eq('foo-theme-path') + expect(subject.theme_path(nil)).to eq("foo-theme-path") end - it 'returns the default theme path when the theme is a string' do - subject.themes = { foo: 'foo-theme-path' } - subject.theme = 'foo' + it "returns the default theme path when the theme is a string" do + subject.themes = {foo: "foo-theme-path"} + subject.theme = "foo" - expect(subject.theme_path(nil)).to eq('foo-theme-path') + expect(subject.theme_path(nil)).to eq("foo-theme-path") end - it 'returns the fallback theme path when the default theme is missing' do - subject.themes = { foo: 'foo-theme-path', classic: 'classic-theme-path' } + it "returns the fallback theme path when the default theme is missing" do + subject.themes = {foo: "foo-theme-path", classic: "classic-theme-path"} subject.theme = :bar - expect{ subject.theme_path(:baz) }.to raise_error(KeyError) + expect { subject.theme_path(:baz) }.to raise_error(KeyError) end - it 'gives priority to the user defined theme' do - subject.themes = { foo: 'foo-theme-path', user: 'user-theme-path' } + it "gives priority to the user defined theme" do + subject.themes = {foo: "foo-theme-path", user: "user-theme-path"} subject.theme = :foo - expect(subject.theme_path(:user)).to eq('user-theme-path') + expect(subject.theme_path(:user)).to eq("user-theme-path") end - it 'falls back to the configure theme if the user theme is missing' do - subject.themes = { foo: 'foo-theme-path', classic: 'classic-theme-path' } + it "falls back to the configure theme if the user theme is missing" do + subject.themes = {foo: "foo-theme-path", classic: "classic-theme-path"} subject.theme = :foo - expect(subject.theme_path(:bar)).to eq('foo-theme-path') + expect(subject.theme_path(:bar)).to eq("foo-theme-path") end end diff --git a/backend/spec/lib/spree/backend_spec.rb b/backend/spec/lib/spree/backend_spec.rb index e9f35b4af05..addce985746 100644 --- a/backend/spec/lib/spree/backend_spec.rb +++ b/backend/spec/lib/spree/backend_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'spec_helper' -require 'spree/backend' +require "spec_helper" +require "spree/backend" RSpec.describe Spree::Backend do - it 'loads only the necessary Rails Frameworks' do + it "loads only the necessary Rails Frameworks" do aggregate_failures do expect(defined? ActionCable::Engine).to be_falsey expect(defined? ActionController::Railtie).to be_truthy diff --git a/backend/spec/spec_helper.rb b/backend/spec/spec_helper.rb index 0560c07163d..36c38c1b2b2 100644 --- a/backend/spec/spec_helper.rb +++ b/backend/spec/spec_helper.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true if ENV["COVERAGE"] - require 'simplecov' + require "simplecov" if ENV["COVERAGE_DIR"] SimpleCov.coverage_dir(ENV["COVERAGE_DIR"]) end @@ -9,56 +9,56 @@ require "simplecov-cobertura" SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter end - SimpleCov.command_name('solidus:backend') + SimpleCov.command_name("solidus:backend") SimpleCov.merge_timeout(3600) - SimpleCov.start('rails') + SimpleCov.start("rails") end # This file is copied to ~/spec when you run 'ruby script/generate rspec' # from the project root directory. -ENV["RAILS_ENV"] ||= 'test' +ENV["RAILS_ENV"] ||= "test" -require 'solidus_backend' -require 'spree/testing_support/dummy_app' +require "solidus_backend" +require "spree/testing_support/dummy_app" DummyApp.setup( - gem_root: File.expand_path('..', __dir__), - lib_name: 'solidus_backend' + gem_root: File.expand_path("..", __dir__), + lib_name: "solidus_backend" ) -require 'rails-controller-testing' -require 'rspec-activemodel-mocks' -require 'rspec/rails' +require "rails-controller-testing" +require "rspec-activemodel-mocks" +require "rspec/rails" # Requires supporting files with custom matchers and macros, etc, # in ./support/ and its subdirectories. Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f } -require 'database_cleaner' - -require 'spree/testing_support/factory_bot' -require 'spree/testing_support/partial_double_verification' -require 'spree/testing_support/authorization_helpers' -require 'spree/testing_support/preferences' -require 'spree/testing_support/controller_requests' -require 'spree/testing_support/flaky' -require 'spree/testing_support/flash' -require 'spree/testing_support/url_helpers' -require 'spree/testing_support/order_walkthrough' -require 'spree/testing_support/capybara_ext' -require 'spree/testing_support/precompiled_assets' -require 'spree/testing_support/translations' -require 'spree/testing_support/blacklist_urls' -require 'spree/testing_support/silence_deprecations' - -require 'capybara-screenshot/rspec' -Capybara.save_path = ENV['CIRCLE_ARTIFACTS'] if ENV['CIRCLE_ARTIFACTS'] +require "database_cleaner" + +require "spree/testing_support/factory_bot" +require "spree/testing_support/partial_double_verification" +require "spree/testing_support/authorization_helpers" +require "spree/testing_support/preferences" +require "spree/testing_support/controller_requests" +require "spree/testing_support/flaky" +require "spree/testing_support/flash" +require "spree/testing_support/url_helpers" +require "spree/testing_support/order_walkthrough" +require "spree/testing_support/capybara_ext" +require "spree/testing_support/precompiled_assets" +require "spree/testing_support/translations" +require "spree/testing_support/blacklist_urls" +require "spree/testing_support/silence_deprecations" + +require "capybara-screenshot/rspec" +Capybara.save_path = ENV["CIRCLE_ARTIFACTS"] if ENV["CIRCLE_ARTIFACTS"] Capybara.exact = true require "spree/testing_support/capybara_driver" Rails.application.config.i18n.raise_on_missing_translations = true -Capybara.default_max_wait_time = ENV['DEFAULT_MAX_WAIT_TIME'].to_f if ENV['DEFAULT_MAX_WAIT_TIME'].present? +Capybara.default_max_wait_time = ENV["DEFAULT_MAX_WAIT_TIME"].to_f if ENV["DEFAULT_MAX_WAIT_TIME"].present? ActiveJob::Base.queue_adapter = :test diff --git a/backend/spec/support/appear_before_matcher.rb b/backend/spec/support/appear_before_matcher.rb index 5d3db89e76d..5ba0eee3fc9 100644 --- a/backend/spec/support/appear_before_matcher.rb +++ b/backend/spec/support/appear_before_matcher.rb @@ -1,10 +1,11 @@ # frozen_string_literal: true -require 'rspec/expectations' +require "rspec/expectations" RSpec::Matchers.define :appear_before do |expected| match do |actual| raise "Page instance required to use the appear_before matcher" unless page - has_text? /#{actual}.*#{expected}/ + + has_text?(/#{actual}.*#{expected}/) end end diff --git a/backend/spec/support/feature/base_feature_helper.rb b/backend/spec/support/feature/base_feature_helper.rb index 553868a43e4..c717d7ecb5f 100644 --- a/backend/spec/support/feature/base_feature_helper.rb +++ b/backend/spec/support/feature/base_feature_helper.rb @@ -10,10 +10,10 @@ def within_nav(&block) end def click_nav(nav_text, subnav_text = nil) - if Spree::Backend::Config.admin_updated_navbar - primary_nav = find("ul.solidus-admin--nav--menu>li>a", text: /#{nav_text}/i) + primary_nav = if Spree::Backend::Config.admin_updated_navbar + find("ul.solidus-admin--nav--menu>li>a", text: /#{nav_text}/i) else - primary_nav = find(".admin-nav-menu>ul>li>a", text: /#{nav_text}/i) + find(".admin-nav-menu>ul>li>a", text: /#{nav_text}/i) end if subnav_text diff --git a/backend/spec/support/feature/order_feature_helper.rb b/backend/spec/support/feature/order_feature_helper.rb index e5787da95e5..8e748b36f1a 100644 --- a/backend/spec/support/feature/order_feature_helper.rb +++ b/backend/spec/support/feature/order_feature_helper.rb @@ -6,7 +6,7 @@ def add_line_item(product_name, quantity: 1) targetted_select2_search product_name, from: ".select-variant" fill_in "quantity", with: quantity - click_icon 'ok' + click_icon "ok" end def complete_split_to(destination, quantity: nil) @@ -16,10 +16,10 @@ def complete_split_to(destination, quantity: nil) destination = destination.name end - select2_no_label(destination, from: 'Choose Location') + select2_no_label(destination, from: "Choose Location") if quantity - fill_in 'item_quantity', with: quantity + fill_in "item_quantity", with: quantity end click_icon :ok diff --git a/backend/spec/teaspoon_env.rb b/backend/spec/teaspoon_env.rb index 86f8b204256..3043656ffff 100644 --- a/backend/spec/teaspoon_env.rb +++ b/backend/spec/teaspoon_env.rb @@ -1,18 +1,18 @@ # frozen_string_literal: true if ENV["COVERAGE"] - require 'simplecov' + require "simplecov" if ENV["COVERAGE_DIR"] SimpleCov.coverage_dir(ENV["COVERAGE_DIR"]) end - SimpleCov.command_name('solidus:backend:teaspoon') + SimpleCov.command_name("solidus:backend:teaspoon") SimpleCov.merge_timeout(3600) - SimpleCov.start('rails') unless SimpleCov.running + SimpleCov.start("rails") unless SimpleCov.running end -ENV['RAILS_ENV'] = 'test' +ENV["RAILS_ENV"] = "test" -require 'teaspoon/driver/selenium' +require "teaspoon/driver/selenium" # Similar to setup described in # https://github.com/jejacks0n/teaspoon/wiki/Micro-Applications @@ -20,7 +20,7 @@ if defined?(DummyApp) DummyApp::Migrations.auto_migrate - require 'teaspoon-mocha' + require "teaspoon-mocha" Teaspoon.configure do |config| config.mount_at = "/teaspoon" @@ -33,9 +33,9 @@ client_driver: :chrome, selenium_options: { options: Selenium::WebDriver::Chrome::Options.new( - args: %w(headless disable-gpu window-size=1920,1440), - ), - }, + args: %w[headless disable-gpu window-size=1920,1440] + ) + } } config.suite do |suite| @@ -47,15 +47,15 @@ end end else - require 'solidus_backend' + require "solidus_backend" - require 'teaspoon' + require "teaspoon" - require 'spree/testing_support/dummy_app' + require "spree/testing_support/dummy_app" DummyApp.setup( - gem_root: File.expand_path('..', __dir__), - lib_name: 'solidus_backend', + gem_root: File.expand_path("..", __dir__), + lib_name: "solidus_backend", auto_migrate: false ) end diff --git a/backend/spec/views/spree/admin/shared/navigation_footer_fallback_spec.rb b/backend/spec/views/spree/admin/shared/navigation_footer_fallback_spec.rb index f71d581a75b..28594996554 100644 --- a/backend/spec/views/spree/admin/shared/navigation_footer_fallback_spec.rb +++ b/backend/spec/views/spree/admin/shared/navigation_footer_fallback_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "spree/admin/shared/_navigation_footer_fallback", type: :view, partial_double_verification: false do let(:user) { FactoryBot.build_stubbed(:admin_user) } @@ -50,7 +50,7 @@ it "has user-logout-link" do render - expect(rendered).to have_link(I18n.t('spree.logout'), href: "/logout") + expect(rendered).to have_link(I18n.t("spree.logout"), href: "/logout") end end @@ -61,7 +61,7 @@ it "has a back to store link" do render - expect(rendered).to have_link(I18n.t('spree.back_to_store'), href: "/") + expect(rendered).to have_link(I18n.t("spree.back_to_store"), href: "/") end end end diff --git a/bin/release/_helpers.rb b/bin/release/_helpers.rb index 4a5c6731763..faecae71bd3 100644 --- a/bin/release/_helpers.rb +++ b/bin/release/_helpers.rb @@ -1,43 +1,48 @@ # frozen_string_literal: true -require 'bundler/setup' -require 'octokit' -require 'faraday' +require "bundler/setup" +require "octokit" +require "faraday" -ROOT = File.expand_path('../..', __dir__) -OCTOKIT = Octokit::Client.new(access_token: ENV.fetch('GITHUB_TOKEN')).tap { _1.auto_paginate = true } +ROOT = File.expand_path("../..", __dir__) +OCTOKIT = Octokit::Client.new(access_token: ENV.fetch("GITHUB_TOKEN")).tap { _1.auto_paginate = true } class SolidusVersion < Gem::Version def self.correct_tag?(tag) - tag.start_with?('v') && correct?(tag.delete_prefix('v')) + tag.start_with?("v") && correct?(tag.delete_prefix("v")) end - def self.latest(branch: 'main', tags: nil) - tags ||= OCTOKIT.refs('solidusio/solidus', 'tag').map { _1.ref.delete_prefix('refs/tags/') } + def self.latest(branch: "main", tags: nil) + tags ||= OCTOKIT.refs("solidusio/solidus", "tag").map { _1.ref.delete_prefix("refs/tags/") } # For maintenance branches we only want to consider tags that are part of the same minor version - tags.select! { |tag| tag.start_with?("#{branch}.") } if branch != 'main' + tags.select! { |tag| tag.start_with?("#{branch}.") } if branch != "main" # Take the tag with the highest version number - tags.grep(/^v/).map { |tag| SolidusVersion.new(tag.delete_prefix('v')) }.max + tags.grep(/^v/).map { |tag| SolidusVersion.new(tag.delete_prefix("v")) }.max end def major? - segments[1..2] == ['0', '0'] + segments[1..2] == ["0", "0"] end def tag = "v#{self}" + def branch = "v#{major}.#{minor}" + def dev = self.class.new("#{self}.dev") + def major = segments[0] + def minor = segments[1] + def patch = segments[2] def update(major: nil, minor: nil, patch: nil) major ||= segments[0] minor ||= segments[1] patch ||= segments[2] - self.class.new([major, minor, patch].join('.')) + self.class.new([major, minor, patch].join(".")) end def bump(level) diff --git a/bin/release/bump-docker-image-version b/bin/release/bump-docker-image-version index 039f1ec8817..7d1a83a8883 100755 --- a/bin/release/bump-docker-image-version +++ b/bin/release/bump-docker-image-version @@ -1,8 +1,8 @@ #!/usr/bin/env ruby # frozen_string_literal: true -require 'yaml' -require_relative '_helpers' +require "yaml" +require_relative "_helpers" path = "#{ROOT}/docker-compose.yml" from = YAML.load_file(path).dig(*%w[services app image]) diff --git a/bin/release/bump-previous-minor-version b/bin/release/bump-previous-minor-version index 357dd15dbaf..5d039463096 100755 --- a/bin/release/bump-previous-minor-version +++ b/bin/release/bump-previous-minor-version @@ -1,7 +1,7 @@ #!/usr/bin/env ruby # frozen_string_literal: true -require_relative '_helpers' +require_relative "_helpers" require_relative "#{ROOT}/core/lib/spree/core/version" path = "#{ROOT}/core/lib/spree/core/version.rb" diff --git a/bin/release/bump-starter-frontend-version b/bin/release/bump-starter-frontend-version index b637db2c4f6..f27a05a49cb 100755 --- a/bin/release/bump-starter-frontend-version +++ b/bin/release/bump-starter-frontend-version @@ -1,7 +1,7 @@ #!/usr/bin/env ruby # frozen_string_literal: true -require_relative '_helpers' +require_relative "_helpers" path = "#{ROOT}/core/lib/generators/solidus/install/app_templates/frontend/starter.rb" from = File.read(path)[%r{solidusio/solidus_starter_frontend/raw/(.+)/template.rb}, 1] diff --git a/bin/release/bump-version b/bin/release/bump-version index 5c3a8ef2a7d..9b1a810f555 100755 --- a/bin/release/bump-version +++ b/bin/release/bump-version @@ -1,8 +1,8 @@ #!/usr/bin/env ruby # frozen_string_literal: true -require_relative '_helpers' -require_relative '../../core/lib/spree/core/version' +require_relative "_helpers" +require_relative "../../core/lib/spree/core/version" path = "#{ROOT}/core/lib/spree/core/version.rb" from = Spree::VERSION diff --git a/bin/release/extract-pipeline-context b/bin/release/extract-pipeline-context index 09cf2b5815c..d9ccc793d27 100755 --- a/bin/release/extract-pipeline-context +++ b/bin/release/extract-pipeline-context @@ -1,17 +1,17 @@ #!/usr/bin/env ruby # frozen_string_literal: true -require_relative '_helpers' +require_relative "_helpers" USAGE = "Usage: #{$PROGRAM_NAME} # last_minor: true|false, base_branch: main|vX.Y" -last_minor = (ARGV.shift or abort(USAGE)) == 'true' +last_minor = (ARGV.shift or abort(USAGE)) == "true" base_branch = ARGV.shift or abort(USAGE) latest_version = SolidusVersion.latest(branch: base_branch) # The previous tag for the changelog entry -if base_branch == 'main' +if base_branch == "main" candidate_version = latest_version.bump(:minor) next_candidate_version = last_minor ? candidate_version.bump(:major) : candidate_version.bump(:minor) diff_source_version = latest_version.update(patch: 0) @@ -28,11 +28,11 @@ context_hash = { current_diff_source_tag: diff_source_version.tag, candidate_tag: candidate_version.tag, candidate_version:, - candidate_minor_version: candidate_version.segments[0..1].join('.'), + candidate_minor_version: candidate_version.segments[0..1].join("."), candidate_patch_branch: candidate_version.branch, candidate_next_patch_dev_version: candidate_version.bump(:patch).dev, next_candidate_tag: next_candidate_version.tag, - next_candidate_dev_version: next_candidate_version.dev, + next_candidate_dev_version: next_candidate_version.dev } warn "~~> Generating context..." diff --git a/bin/release/publish-release b/bin/release/publish-release index 6a31f3c2cf0..de8e335b8a2 100755 --- a/bin/release/publish-release +++ b/bin/release/publish-release @@ -1,14 +1,14 @@ #!/usr/bin/env ruby # frozen_string_literal: true -require_relative '_helpers' +require_relative "_helpers" candidate_tag = ARGV.first warn "~~> Publishing release draft for #{candidate_tag}..." -release = OCTOKIT.releases('solidusio/solidus').find { _1.name == candidate_tag } +release = OCTOKIT.releases("solidusio/solidus").find { _1.name == candidate_tag } OCTOKIT.update_release( release.url, draft: false, - tag_name: candidate_tag, + tag_name: candidate_tag ) diff --git a/bin/release/update-changelog b/bin/release/update-changelog index 4804d2dcc8d..05a23a65a06 100755 --- a/bin/release/update-changelog +++ b/bin/release/update-changelog @@ -1,14 +1,14 @@ #!/usr/bin/env ruby # frozen_string_literal: true -require_relative '_helpers' +require_relative "_helpers" candidate_tag = ARGV[0] warn "~~> Adding changelog entries for #{candidate_tag}..." -release_title = "## Solidus #{candidate_tag} (#{Time.now.utc.strftime('%Y-%m-%d')})" -release_body = OCTOKIT.releases('solidusio/solidus').find { _1.name == candidate_tag }.body +release_title = "## Solidus #{candidate_tag} (#{Time.now.utc.strftime("%Y-%m-%d")})" +release_body = OCTOKIT.releases("solidusio/solidus").find { _1.name == candidate_tag }.body changelog_path = "#{ROOT}/CHANGELOG.md" previous_changelog = File.read(changelog_path) diff --git a/bin/release/update-release-draft b/bin/release/update-release-draft index a3738b1d936..f61b23c8d74 100755 --- a/bin/release/update-release-draft +++ b/bin/release/update-release-draft @@ -1,18 +1,21 @@ #!/usr/bin/env ruby # frozen_string_literal: true -require_relative '_helpers' -require 'optparse' -require 'yaml' +require_relative "_helpers" +require "optparse" +require "yaml" -branch = 'main' +branch = "main" update = false opts = OptionParser.new opts.banner = "Usage: #{$0} [options] " opts.on("-b", "--branch BRANCH", "GitHub branch") { branch = _1 } opts.on("-u", "--update", "Update the release draft instead of creating a new one") { update = true } -opts.on("-h", "--help", "Prints this help") { puts opts; exit } +opts.on("-h", "--help", "Prints this help") { + puts opts + exit +} opts.parse! previous_tag_name = ARGV.shift or abort(opts.to_s) @@ -24,12 +27,12 @@ candidate_tag_name = ARGV.shift or abort(opts.to_s) pull_numbers = OCTOKIT.post("/repos/solidusio/solidus/releases/generate-notes", { tag_name: candidate_tag_name, target_commitish: branch, - previous_tag_name:, + previous_tag_name: }).body.scan(%r{(?:#|pull/)(\d+)$}).flatten.uniq # Group PRs by label pulls_by_label = Hash.new { |h, k| h[k] = [] } -pull_numbers.map { |n| Thread.new{ OCTOKIT.pull_request('solidusio/solidus', n) } }.map(&:value).each do |pull| +pull_numbers.map { |n| Thread.new { OCTOKIT.pull_request("solidusio/solidus", n) } }.map(&:value).each do |pull| pull.labels.each { pulls_by_label[_1.name] << pull } end @@ -50,15 +53,15 @@ notes += "\n\n**Full Changelog**: https://github.com/solidusio/solidus/compare/# if update release = - OCTOKIT.releases('solidusio/solidus').find { + OCTOKIT.releases("solidusio/solidus").find { _1.name == candidate_tag_name } || OCTOKIT.create_release( - 'solidusio/solidus', + "solidusio/solidus", candidate_tag_name, name: candidate_tag_name, body: notes, target_commitish: branch, - draft: true, + draft: true ) OCTOKIT.update_release(release.url, body: notes) diff --git a/core/Rakefile b/core/Rakefile index 65b6bf05c7b..a87910ea0f2 100644 --- a/core/Rakefile +++ b/core/Rakefile @@ -1,34 +1,34 @@ # frozen_string_literal: true -require 'rubygems' -require 'rake' -require 'rake/testtask' -require 'rspec/core/rake_task' -require 'spree/testing_support/dummy_app/rake_tasks' -require 'bundler/gem_tasks' +require "rubygems" +require "rake" +require "rake/testtask" +require "rspec/core/rake_task" +require "spree/testing_support/dummy_app/rake_tasks" +require "bundler/gem_tasks" RSpec::Core::RakeTask.new task default: :spec DummyApp::RakeTasks.new( gem_root: File.dirname(__FILE__), - lib_name: 'solidus_core' + lib_name: "solidus_core" ) -require 'yard/rake/yardoc_task' +require "yard/rake/yardoc_task" YARD::Rake::YardocTask.new(:yard) # The following workaround can be removed # once https://github.com/lsegal/yard/pull/1457 is merged. -task('yard:require') { require 'yard' } -task yard: 'yard:require' +task("yard:require") { require "yard" } +task yard: "yard:require" namespace :spec do task :isolated do - spec_files = Dir['spec/**/*_spec.rb'] + spec_files = Dir["spec/**/*_spec.rb"] failed_specs = spec_files.reject do |file| puts "rspec #{file}" - system('rspec', file) + system("rspec", file) end if !failed_specs.empty? @@ -39,4 +39,4 @@ namespace :spec do end end -task test_app: 'db:reset' +task test_app: "db:reset" diff --git a/core/app/controllers/spree/base_controller.rb b/core/app/controllers/spree/base_controller.rb index 2162a5244ea..c52c24cc0ef 100644 --- a/core/app/controllers/spree/base_controller.rb +++ b/core/app/controllers/spree/base_controller.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'cancan' -require_dependency 'spree/core/controller_helpers/strong_parameters' +require "cancan" +require_dependency "spree/core/controller_helpers/strong_parameters" class Spree::BaseController < ApplicationController include ActiveStorage::SetCurrent diff --git a/core/app/helpers/spree/base_helper.rb b/core/app/helpers/spree/base_helper.rb index 83a96bc266d..16ff5a9db46 100644 --- a/core/app/helpers/spree/base_helper.rb +++ b/core/app/helpers/spree/base_helper.rb @@ -1,19 +1,19 @@ # frozen_string_literal: true -require 'carmen' +require "carmen" module Spree module BaseHelper def link_to_cart(text = nil) - text = text ? h(text) : t('spree.cart') + text = text ? h(text) : t("spree.cart") css_class = nil if current_order.nil? || current_order.item_count.zero? - text = "#{text}: (#{t('spree.empty')})" - css_class = 'empty' + text = "#{text}: (#{t("spree.empty")})" + css_class = "empty" else text = "#{text}: (#{current_order.item_count}) #{current_order.display_total.to_html}" - css_class = 'full' + css_class = "full" end link_to text.html_safe, spree.cart_path, class: "cart-info #{css_class}" @@ -25,7 +25,7 @@ def variant_options(variant, _options = {}) end def meta_data - object = instance_variable_get('@' + controller_name.singularize) + object = instance_variable_get("@" + controller_name.singularize) meta = {} if object.is_a? ActiveRecord::Base @@ -34,7 +34,7 @@ def meta_data end if meta[:description].blank? && object.is_a?(Spree::Product) - meta[:description] = truncate(strip_tags(object.description), length: 160, separator: ' ') + meta[:description] = truncate(strip_tags(object.description), length: 160, separator: " ") end if meta[:keywords].blank? || meta[:description].blank? @@ -48,12 +48,12 @@ def meta_data def meta_data_tags meta_data.map do |name, content| - tag('meta', name:, content:) + tag("meta", name:, content:) end.join("\n") end def body_class - @body_class ||= content_for?(:sidebar) ? 'two-col' : 'one-col' + @body_class ||= content_for?(:sidebar) ? "two-col" : "one-col" @body_class end @@ -72,12 +72,12 @@ def flash_messages(opts = {}) nil end - def taxon_breadcrumbs(taxon, separator = ' » ', breadcrumb_class = 'inline') - return '' if current_page?('/') || taxon.nil? + def taxon_breadcrumbs(taxon, separator = " » ", breadcrumb_class = "inline") + return "" if current_page?("/") || taxon.nil? - crumbs = [[t('spree.home'), spree.root_path]] + crumbs = [[t("spree.home"), spree.root_path]] - crumbs << [t('spree.products'), products_path] + crumbs << [t("spree.products"), products_path] if taxon crumbs += taxon.ancestors.collect { |ancestor| [ancestor.name, spree.nested_taxons_path(ancestor.permalink)] } unless taxon.ancestors.empty? crumbs << [taxon.name, spree.nested_taxons_path(taxon.permalink)] @@ -86,24 +86,25 @@ def taxon_breadcrumbs(taxon, separator = ' » ', breadcrumb_class separator = raw(separator) items = crumbs.each_with_index.collect do |crumb, index| - content_tag(:li, itemprop: 'itemListElement', itemscope: '', itemtype: 'https://schema.org/ListItem') do - link_to(crumb.last, itemprop: 'item') do - content_tag(:span, crumb.first, itemprop: 'name') + tag('meta', { itemprop: 'position', content: (index + 1).to_s }, false, false) - end + (crumb == crumbs.last ? '' : separator) + content_tag(:li, itemprop: "itemListElement", itemscope: "", itemtype: "https://schema.org/ListItem") do + link_to(crumb.last, itemprop: "item") do + content_tag(:span, crumb.first, itemprop: "name") + tag("meta", {itemprop: "position", content: (index + 1).to_s}, false, false) + end + ((crumb == crumbs.last) ? "" : separator) end end - content_tag(:nav, content_tag(:ol, raw(items.map(&:mb_chars).join), class: breadcrumb_class, itemscope: '', itemtype: 'https://schema.org/BreadcrumbList'), id: 'breadcrumbs', class: 'sixteen columns') + content_tag(:nav, content_tag(:ol, raw(items.map(&:mb_chars).join), class: breadcrumb_class, itemscope: "", itemtype: "https://schema.org/BreadcrumbList"), id: "breadcrumbs", class: "sixteen columns") end def taxons_tree(root_taxon, current_taxon, max_level = 1) - return '' if max_level < 1 || root_taxon.children.empty? - content_tag :ul, class: 'taxons-list' do + return "" if max_level < 1 || root_taxon.children.empty? + + content_tag :ul, class: "taxons-list" do taxons = root_taxon.children.map do |taxon| - css_class = (current_taxon && current_taxon.self_and_ancestors.include?(taxon)) ? 'current' : nil + css_class = current_taxon&.self_and_ancestors&.include?(taxon) ? "current" : nil content_tag :li, class: css_class do - link_to(taxon.name, seo_url(taxon)) + - taxons_tree(taxon, current_taxon, max_level - 1) + link_to(taxon.name, seo_url(taxon)) + + taxons_tree(taxon, current_taxon, max_level - 1) end end safe_join(taxons, "\n") @@ -117,7 +118,7 @@ def available_countries(restrict_to_zone: Spree::Config[:checkout_zone]) [country.code, country.name] end.to_h - country_names.update I18n.t('spree.country_names', default: {}).stringify_keys + country_names.update I18n.t("spree.country_names", default: {}).stringify_keys countries.collect do |country| country.name = country_names.fetch(country.iso, country.name) diff --git a/core/app/helpers/spree/checkout_helper.rb b/core/app/helpers/spree/checkout_helper.rb index 22656b9b5c9..92fbad9b2cb 100644 --- a/core/app/helpers/spree/checkout_helper.rb +++ b/core/app/helpers/spree/checkout_helper.rb @@ -16,18 +16,18 @@ def checkout_progress state_index = states.index(state) if state_index < current_index - css_classes << 'completed' + css_classes << "completed" text = link_to text, checkout_state_path(state) end - css_classes << 'next' if state_index == current_index + 1 - css_classes << 'current' if state == @order.state - css_classes << 'first' if state_index == 0 - css_classes << 'last' if state_index == states.length - 1 + css_classes << "next" if state_index == current_index + 1 + css_classes << "current" if state == @order.state + css_classes << "first" if state_index == 0 + css_classes << "last" if state_index == states.length - 1 # It'd be nice to have separate classes but combining them with a dash helps out for IE6 which only sees the last class - content_tag('li', content_tag('span', text), class: css_classes.join('-')) + content_tag("li", content_tag("span", text), class: css_classes.join("-")) end - content_tag('ol', raw(items.join("\n")), class: 'progress-steps', id: "checkout-step-#{@order.state}") + content_tag("ol", raw(items.join("\n")), class: "progress-steps", id: "checkout-step-#{@order.state}") end end end diff --git a/core/app/helpers/spree/core/controller_helpers/auth.rb b/core/app/helpers/spree/core/controller_helpers/auth.rb index 9b9050a3c0c..1aef78500c1 100644 --- a/core/app/helpers/spree/core/controller_helpers/auth.rb +++ b/core/app/helpers/spree/core/controller_helpers/auth.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'cancan' +require "cancan" module Spree module Core diff --git a/core/app/helpers/spree/core/controller_helpers/common.rb b/core/app/helpers/spree/core/controller_helpers/common.rb index 10d8a6cbfc3..e5f9b6d60de 100644 --- a/core/app/helpers/spree/core/controller_helpers/common.rb +++ b/core/app/helpers/spree/core/controller_helpers/common.rb @@ -1,12 +1,13 @@ # frozen_string_literal: true -require 'carmen' +require "carmen" module Spree module Core module ControllerHelpers module Common extend ActiveSupport::Concern + included do helper_method :title helper_method :title= @@ -27,7 +28,7 @@ def title title_string = @title.presence || accurate_title if title_string.present? if Spree::Config[:always_put_site_name_in_title] - [title_string, default_title].join(' - ') + [title_string, default_title].join(" - ") else title_string end diff --git a/core/app/helpers/spree/core/controller_helpers/order.rb b/core/app/helpers/spree/core/controller_helpers/order.rb index a63b1e7b8e7..7af2c7d1b4c 100644 --- a/core/app/helpers/spree/core/controller_helpers/order.rb +++ b/core/app/helpers/spree/core/controller_helpers/order.rb @@ -43,7 +43,7 @@ def associate_user def set_current_order if spree_current_user && current_order - spree_current_user.orders.by_store(current_store).incomplete.where('id != ?', current_order.id).find_each do |order| + spree_current_user.orders.by_store(current_store).incomplete.where("id != ?", current_order.id).find_each do |order| current_order.merge!(order, spree_current_user) end end @@ -60,7 +60,7 @@ def last_incomplete_order end def current_order_params - { currency: current_pricing_options.currency, guest_token: cookies.signed[:guest_token], store_id: current_store.id, user_id: spree_current_user.try(:id) } + {currency: current_pricing_options.currency, guest_token: cookies.signed[:guest_token], store_id: current_store.id, user_id: spree_current_user.try(:id)} end def new_order_params diff --git a/core/app/helpers/spree/core/controller_helpers/payment_parameters.rb b/core/app/helpers/spree/core/controller_helpers/payment_parameters.rb index dc106e80349..bf629331c6d 100644 --- a/core/app/helpers/spree/core/controller_helpers/payment_parameters.rb +++ b/core/app/helpers/spree/core/controller_helpers/payment_parameters.rb @@ -46,8 +46,7 @@ def move_payment_source_into_payments_attributes(params) return params if params[:payment_source].blank? payment_params = params[:order] && - params[:order][:payments_attributes] && - params[:order][:payments_attributes].first + params[:order][:payments_attributes]&.first return params if payment_params.blank? payment_method_id = payment_params[:payment_method_id] diff --git a/core/app/helpers/spree/core/controller_helpers/strong_parameters.rb b/core/app/helpers/spree/core/controller_helpers/strong_parameters.rb index 3514d06ffc3..847414481ab 100644 --- a/core/app/helpers/spree/core/controller_helpers/strong_parameters.rb +++ b/core/app/helpers/spree/core/controller_helpers/strong_parameters.rb @@ -9,8 +9,8 @@ def permitted_attributes end delegate(*Spree::PermittedAttributes::ATTRIBUTES, - to: :permitted_attributes, - prefix: :permitted) + to: :permitted_attributes, + prefix: :permitted) def permitted_credit_card_update_attributes permitted_attributes.credit_card_update_attributes + [ @@ -52,8 +52,8 @@ def permitted_order_attributes permitted_checkout_payment_attributes + permitted_attributes.customer_metadata_attributes + permitted_checkout_confirm_attributes + [ - line_items_attributes: permitted_line_item_attributes - ] + line_items_attributes: permitted_line_item_attributes + ] end def permitted_product_attributes diff --git a/core/app/helpers/spree/products_helper.rb b/core/app/helpers/spree/products_helper.rb index 94cf10489c5..a8e33cdc239 100644 --- a/core/app/helpers/spree/products_helper.rb +++ b/core/app/helpers/spree/products_helper.rb @@ -22,9 +22,10 @@ def variant_price(variant) # @return [String] formatted string with label and amount def variant_price_diff(variant) return if variant.price_same_as_master?(current_pricing_options) + difference = variant.price_difference_from_master(current_pricing_options) absolute_amount = Spree::Money.new(difference.to_d.abs, currency: difference.currency.iso_code) - i18n_key = difference.to_d > 0 ? :price_diff_add_html : :price_diff_subtract_html + i18n_key = (difference.to_d > 0) ? :price_diff_add_html : :price_diff_subtract_html t(i18n_key, scope: [:spree, :helpers, :products], amount_html: absolute_amount.to_html) end @@ -35,8 +36,8 @@ def variant_price_diff(variant) # @return [Spree::Money] the full price def variant_full_price(variant) return if variant.product.variants - .with_prices(current_pricing_options) - .all? { |variant_with_prices| variant_with_prices.price_same_as_master?(current_pricing_options) } + .with_prices(current_pricing_options) + .all? { |variant_with_prices| variant_with_prices.price_same_as_master?(current_pricing_options) } variant.price_for_options(current_pricing_options)&.money&.to_html end @@ -59,9 +60,9 @@ def product_description(product) # @return [String] the filtered text def line_item_description_text(description_text) if description_text.present? - truncate(strip_tags(description_text.gsub(' ', ' ')), length: 100) + truncate(strip_tags(description_text.gsub(" ", " ")), length: 100) else - t('spree.product_has_no_description') + t("spree.product_has_no_description") end end diff --git a/core/app/helpers/spree/store_helper.rb b/core/app/helpers/spree/store_helper.rb index 5cce239f209..31b6c43a1ad 100644 --- a/core/app/helpers/spree/store_helper.rb +++ b/core/app/helpers/spree/store_helper.rb @@ -6,7 +6,7 @@ module Spree module StoreHelper # @return [Boolean] true when it is appropriate to show the store menu def store_menu? - %w{thank_you}.exclude? params[:action] + %w[thank_you].exclude? params[:action] end end end diff --git a/core/app/mailers/spree/carton_mailer.rb b/core/app/mailers/spree/carton_mailer.rb index dbb2169ff37..cd1299d6a47 100644 --- a/core/app/mailers/spree/carton_mailer.rb +++ b/core/app/mailers/spree/carton_mailer.rb @@ -15,10 +15,10 @@ def shipped_email(options) @order = options.fetch(:order) @carton = options.fetch(:carton) @manifest = @carton.manifest_for_order(@order) - options = { resend: false }.merge(options) + options = {resend: false}.merge(options) @store = @order.store - subject = (options[:resend] ? "[#{t('spree.resend').upcase}] " : '') - subject += "#{@store.name} #{t('spree.shipment_mailer.shipped_email.subject')} ##{@order.number}" + subject = (options[:resend] ? "[#{t("spree.resend").upcase}] " : "") + subject += "#{@store.name} #{t("spree.shipment_mailer.shipped_email.subject")} ##{@order.number}" mail(to: @order.email, from: from_address(@store), subject:) end end diff --git a/core/app/mailers/spree/order_mailer.rb b/core/app/mailers/spree/order_mailer.rb index e81c9e6ed46..bec8ecc2368 100644 --- a/core/app/mailers/spree/order_mailer.rb +++ b/core/app/mailers/spree/order_mailer.rb @@ -5,7 +5,7 @@ class OrderMailer < BaseMailer def confirm_email(order, resend = false) @order = order @store = @order.store - subject = build_subject(t('.subject'), resend) + subject = build_subject(t(".subject"), resend) mail(to: @order.email, bcc: bcc_address(@store), from: from_address(@store), subject:) end @@ -13,7 +13,7 @@ def confirm_email(order, resend = false) def cancel_email(order, resend = false) @order = order @store = @order.store - subject = build_subject(t('.subject'), resend) + subject = build_subject(t(".subject"), resend) mail(to: @order.email, from: from_address(@store), subject:) end @@ -21,7 +21,7 @@ def cancel_email(order, resend = false) def inventory_cancellation_email(order, inventory_units, resend = false) @order, @inventory_units = order, inventory_units @store = @order.store - subject = build_subject(t('spree.order_mailer.inventory_cancellation.subject'), resend) + subject = build_subject(t("spree.order_mailer.inventory_cancellation.subject"), resend) mail(to: @order.email, from: from_address(@store), subject:) end @@ -29,7 +29,7 @@ def inventory_cancellation_email(order, inventory_units, resend = false) private def build_subject(subject_text, resend) - resend_text = (resend ? "[#{t('spree.resend').upcase}] " : '') + resend_text = (resend ? "[#{t("spree.resend").upcase}] " : "") "#{resend_text}#{@order.store.name} #{subject_text} ##{@order.number}" end end diff --git a/core/app/mailers/spree/reimbursement_mailer.rb b/core/app/mailers/spree/reimbursement_mailer.rb index 08cce2814e3..3d52b6ea2c6 100644 --- a/core/app/mailers/spree/reimbursement_mailer.rb +++ b/core/app/mailers/spree/reimbursement_mailer.rb @@ -5,8 +5,8 @@ class ReimbursementMailer < BaseMailer def reimbursement_email(reimbursement, resend = false) @reimbursement = reimbursement.respond_to?(:id) ? reimbursement : Spree::Reimbursement.find(reimbursement) store = @reimbursement.order.store - subject = (resend ? "[#{t('spree.resend').upcase}] " : '') - subject += "#{store.name} #{t('.subject')} ##{@reimbursement.order.number}" + subject = (resend ? "[#{t("spree.resend").upcase}] " : "") + subject += "#{store.name} #{t(".subject")} ##{@reimbursement.order.number}" mail(to: @reimbursement.order.email, from: from_address(store), subject:) end end diff --git a/core/app/models/concerns/spree/active_storage_adapter.rb b/core/app/models/concerns/spree/active_storage_adapter.rb index 144169e8f92..434c0f0d38e 100644 --- a/core/app/models/concerns/spree/active_storage_adapter.rb +++ b/core/app/models/concerns/spree/active_storage_adapter.rb @@ -25,7 +25,7 @@ def has_attachment(name, definition) end def attachment_definitions - { attachment_name => attachment_definition } + {attachment_name => attachment_definition} end private @@ -65,7 +65,7 @@ def define_image_validation return unless attachment.attached? return if attachment.image? - errors.add(self.class.attachment_name, 'is not an image') + errors.add(self.class.attachment_name, "is not an image") end end diff --git a/core/app/models/concerns/spree/active_storage_adapter/attachment.rb b/core/app/models/concerns/spree/active_storage_adapter/attachment.rb index 7c486036991..d124d5a9c2a 100644 --- a/core/app/models/concerns/spree/active_storage_adapter/attachment.rb +++ b/core/app/models/concerns/spree/active_storage_adapter/attachment.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'mini_magick' +require "mini_magick" module Spree module ActiveStorageAdapter @@ -62,7 +62,7 @@ def metadata rescue ActiveStorage::FileNotFoundError => error logger.error("#{error} - Image id: #{attachment.record.id} is corrupted or cannot be found") - { identified: nil, width: nil, height: nil, analyzed: true } + {identified: nil, width: nil, height: nil, analyzed: true} end def styles_to_transformations(styles) @@ -70,18 +70,18 @@ def styles_to_transformations(styles) end def imagemagick_to_image_processing_definition(definition) - width_height = definition.split('x').map(&:to_i) + width_height = definition.split("x").map(&:to_i) case definition[-1].to_sym when :^ - { resize_to_fill: width_height } + {resize_to_fill: width_height} else default_transformation(*width_height) end end def default_transformation(width, height) - { resize_to_limit: [width, height] } + {resize_to_limit: [width, height]} end end end diff --git a/core/app/models/concerns/spree/active_storage_adapter/normalization.rb b/core/app/models/concerns/spree/active_storage_adapter/normalization.rb index 5f56e2211ae..6f5d870a956 100644 --- a/core/app/models/concerns/spree/active_storage_adapter/normalization.rb +++ b/core/app/models/concerns/spree/active_storage_adapter/normalization.rb @@ -26,13 +26,13 @@ def attachable_blob(attachable) def attachable_io(attachable) filename = if attachable.respond_to?(:to_path) - attachable.to_path - else - SecureRandom.uuid - end + attachable.to_path + else + SecureRandom.uuid + end attachable.rewind - { io: attachable, filename: } + {io: attachable, filename:} end end end diff --git a/core/app/models/concerns/spree/adjustment_source.rb b/core/app/models/concerns/spree/adjustment_source.rb index 06669f6307e..a1e603cd64b 100644 --- a/core/app/models/concerns/spree/adjustment_source.rb +++ b/core/app/models/concerns/spree/adjustment_source.rb @@ -3,10 +3,10 @@ module Spree module AdjustmentSource def remove_adjustments_from_incomplete_orders - adjustments. - joins(:order). - merge(Spree::Order.incomplete). - destroy_all + adjustments + .joins(:order) + .merge(Spree::Order.incomplete) + .destroy_all end end end diff --git a/core/app/models/concerns/spree/display_money.rb b/core/app/models/concerns/spree/display_money.rb index 0853a9f098e..e61baeabfa5 100644 --- a/core/app/models/concerns/spree/display_money.rb +++ b/core/app/models/concerns/spree/display_money.rb @@ -21,10 +21,10 @@ module DisplayMoney # money_methods tax_amount: { currency: "CAD", no_cents: true }, :price def money_methods(*args) args.each do |money_method| - money_method = { money_method => {} } unless money_method.is_a? Hash + money_method = {money_method => {}} unless money_method.is_a? Hash money_method.each do |method_name, opts| define_method("display_#{method_name}") do - default_opts = respond_to?(:currency) ? { currency: } : {} + default_opts = respond_to?(:currency) ? {currency:} : {} Spree::Money.new(send(method_name), default_opts.merge(opts)) end end diff --git a/core/app/models/concerns/spree/named_type.rb b/core/app/models/concerns/spree/named_type.rb index 58e026b0ce0..dddd6ac6d2e 100644 --- a/core/app/models/concerns/spree/named_type.rb +++ b/core/app/models/concerns/spree/named_type.rb @@ -10,7 +10,7 @@ module NamedType scope :active, -> { where(active: true) } default_scope -> { order(arel_table[:name].lower) } - validates :name, presence: true, uniqueness: { case_sensitive: false, allow_blank: true } + validates :name, presence: true, uniqueness: {case_sensitive: false, allow_blank: true} end end end diff --git a/core/app/models/concerns/spree/ordered_property_value_list.rb b/core/app/models/concerns/spree/ordered_property_value_list.rb index b8d2e3f5bb7..9dd0dfe3185 100644 --- a/core/app/models/concerns/spree/ordered_property_value_list.rb +++ b/core/app/models/concerns/spree/ordered_property_value_list.rb @@ -13,7 +13,7 @@ module OrderedPropertyValueList # virtual attributes for use with AJAX autocompletion def property_name - property.name if property + property&.name end def property_name=(name) diff --git a/core/app/models/concerns/spree/preferences/persistable.rb b/core/app/models/concerns/spree/preferences/persistable.rb index 0d78ae2b01a..a994a93e9b0 100644 --- a/core/app/models/concerns/spree/preferences/persistable.rb +++ b/core/app/models/concerns/spree/preferences/persistable.rb @@ -8,7 +8,7 @@ module Persistable included do include Spree::Preferences::Preferable - if Rails.gem_version >= Gem::Version.new('7.1') + if Rails.gem_version >= Gem::Version.new("7.1") serialize :preferences, type: Hash, coder: YAML else serialize :preferences, Hash, coder: YAML diff --git a/core/app/models/concerns/spree/ransackable_attributes.rb b/core/app/models/concerns/spree/ransackable_attributes.rb index dba4eeba7ab..c7521de14d4 100644 --- a/core/app/models/concerns/spree/ransackable_attributes.rb +++ b/core/app/models/concerns/spree/ransackable_attributes.rb @@ -2,6 +2,7 @@ module Spree::RansackableAttributes extend ActiveSupport::Concern + included do class_attribute :allowed_ransackable_associations, default: [] class_attribute :allowed_ransackable_attributes, default: [] diff --git a/core/app/models/concerns/spree/soft_deletable.rb b/core/app/models/concerns/spree/soft_deletable.rb index 8a07fff9363..bf0ac1dce6a 100644 --- a/core/app/models/concerns/spree/soft_deletable.rb +++ b/core/app/models/concerns/spree/soft_deletable.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'discard' +require "discard" module Spree module SoftDeletable @@ -8,6 +8,7 @@ module SoftDeletable included do include Discard::Model + self.discard_column = :deleted_at default_scope { kept } diff --git a/core/app/models/concerns/spree/state_change_tracking.rb b/core/app/models/concerns/spree/state_change_tracking.rb index b75c840b08a..5c5b9167c18 100644 --- a/core/app/models/concerns/spree/state_change_tracking.rb +++ b/core/app/models/concerns/spree/state_change_tracking.rb @@ -12,7 +12,7 @@ module StateChangeTracking # Enqueue background job to track state changes asynchronously def enqueue_state_change_tracking - previous_state, current_state = saved_changes['state'] + previous_state, current_state = saved_changes["state"] # Enqueue the job to track this state change StateChangeTrackingJob.perform_later( diff --git a/core/app/models/concerns/spree/user_address_book.rb b/core/app/models/concerns/spree/user_address_book.rb index 23728edc12b..9b57bb47fa9 100644 --- a/core/app/models/concerns/spree/user_address_book.rb +++ b/core/app/models/concerns/spree/user_address_book.rb @@ -11,7 +11,7 @@ def find_first_by_address_values(address_attrs) end def mark_default(user_address, address_type: :shipping) - column_for_default = address_type == :shipping ? :default : :default_billing + column_for_default = (address_type == :shipping) ? :default : :default_billing ActiveRecord::Base.transaction do (self - [user_address]).each do |address| # update_all would be nice, but it bypasses ActiveRecord callbacks if address.persisted? @@ -33,9 +33,9 @@ def mark_default(user_address, address_type: :shipping) has_many :addresses, through: :user_addresses has_one :default_user_bill_address, - ->{ default_billing }, - class_name: 'Spree::UserAddress', - foreign_key: 'user_id', + -> { default_billing }, + class_name: "Spree::UserAddress", + foreign_key: "user_id", inverse_of: false, dependent: false has_one :bill_address, @@ -45,9 +45,9 @@ def mark_default(user_address, address_type: :shipping) dependent: false has_one :default_user_ship_address, - ->{ default_shipping }, - class_name: 'Spree::UserAddress', - foreign_key: 'user_id', + -> { default_shipping }, + class_name: "Spree::UserAddress", + foreign_key: "user_id", inverse_of: false, dependent: false has_one :ship_address, @@ -66,7 +66,7 @@ def mark_default(user_address, address_type: :shipping) def ship_address=(address) if address save_in_address_book(address.attributes, - Spree::Config.automatic_default_address) + Spree::Config.automatic_default_address) end end @@ -77,8 +77,8 @@ def ship_address_attributes=(attributes) def bill_address=(address) if address save_in_address_book(address.attributes, - Spree::Config.automatic_default_address, - :billing) + Spree::Config.automatic_default_address, + :billing) end end @@ -185,8 +185,8 @@ def prepare_user_address(new_address) end def remove_user_address_reference(address_id) - self.bill_address_id = bill_address_id == address_id.to_i ? nil : bill_address_id - self.ship_address_id = ship_address_id == address_id.to_i ? nil : ship_address_id + self.bill_address_id = (bill_address_id == address_id.to_i) ? nil : bill_address_id + self.ship_address_id = (ship_address_id == address_id.to_i) ? nil : ship_address_id save if changed? end end diff --git a/core/app/models/concerns/spree/user_methods.rb b/core/app/models/concerns/spree/user_methods.rb index 2311e99820f..ea6ba9f8807 100644 --- a/core/app/models/concerns/spree/user_methods.rb +++ b/core/app/models/concerns/spree/user_methods.rb @@ -59,8 +59,8 @@ module UserMethods inverse_of: :user has_many :wallet_payment_sources, - foreign_key: 'user_id', - class_name: 'Spree::WalletPaymentSource', + foreign_key: "user_id", + class_name: "Spree::WalletPaymentSource", inverse_of: :user, dependent: :destroy @@ -97,22 +97,22 @@ def last_incomplete_spree_order(store: nil, only_frontend_viewable: true) self_orders = orders self_orders = self_orders.where(frontend_viewable: true) if only_frontend_viewable self_orders = self_orders.where(store:) if store - self_orders = self_orders.where('updated_at > ?', Spree::Config.completable_order_updated_cutoff_days.days.ago) if Spree::Config.completable_order_updated_cutoff_days - self_orders = self_orders.where('created_at > ?', Spree::Config.completable_order_created_cutoff_days.days.ago) if Spree::Config.completable_order_created_cutoff_days + self_orders = self_orders.where("updated_at > ?", Spree::Config.completable_order_updated_cutoff_days.days.ago) if Spree::Config.completable_order_updated_cutoff_days + self_orders = self_orders.where("created_at > ?", Spree::Config.completable_order_created_cutoff_days.days.ago) if Spree::Config.completable_order_created_cutoff_days last_order = self_orders.order(:created_at).last last_order unless last_order.try!(:completed?) end def available_store_credit_total(currency:) - store_credits.to_a. - select { |credit| credit.currency == currency }. - sum(&:amount_remaining) + store_credits.to_a + .select { |credit| credit.currency == currency } + .sum(&:amount_remaining) end def display_available_store_credit_total(currency:) Spree::Money.new( available_store_credit_total(currency:), - currency:, + currency: ) end diff --git a/core/app/models/concerns/spree/user_reporting.rb b/core/app/models/concerns/spree/user_reporting.rb index 81facc52930..7dbadb85198 100644 --- a/core/app/models/concerns/spree/user_reporting.rb +++ b/core/app/models/concerns/spree/user_reporting.rb @@ -3,6 +3,7 @@ module Spree module UserReporting extend DisplayMoney + money_methods :lifetime_value, :average_order_value def lifetime_value diff --git a/core/app/models/spree/ability.rb b/core/app/models/spree/ability.rb index df5b108a599..7a1e852ec99 100644 --- a/core/app/models/spree/ability.rb +++ b/core/app/models/spree/ability.rb @@ -4,7 +4,7 @@ # using the special +register_ability+ method which allows extensions to add their own abilities. # # See http://github.com/ryanb/cancan for more details on cancan. -require 'cancan' +require "cancan" module Spree class Ability include CanCan::Ability diff --git a/core/app/models/spree/address.rb b/core/app/models/spree/address.rb index 2893643b071..c24f0f12c6d 100644 --- a/core/app/models/spree/address.rb +++ b/core/app/models/spree/address.rb @@ -22,9 +22,9 @@ class Address < Spree::Base self.class.state_validator_class.new(self).perform end - self.ignored_columns = %w(firstname lastname) - DB_ONLY_ATTRS = %w(id updated_at created_at).freeze - TAXATION_ATTRS = %w(state_id country_id zipcode).freeze + self.ignored_columns = %w[firstname lastname] + DB_ONLY_ATTRS = %w[id updated_at created_at].freeze + TAXATION_ATTRS = %w[state_id country_id zipcode].freeze self.allowed_ransackable_attributes = %w[name] @@ -41,8 +41,8 @@ class Address < Spree::Base end # @return [Address] an address with default attributes - def self.build_default(*args, &block) - where(country: Spree::Country.default).build(*args, &block) + def self.build_default(...) + where(country: Spree::Country.default).build(...) end # @return [Address] an equal address already in the database or a newly created one @@ -95,9 +95,10 @@ def to_s # @note This compares the addresses based on only the fields that make up # the logical "address" and excludes the database specific fields (id, created_at, updated_at). # @return [Boolean] true if the two addresses have the same address fields - def ==(other_address) - return false unless other_address && other_address.respond_to?(:value_attributes) - value_attributes == other_address.value_attributes + def ==(other) + return false unless other&.respond_to?(:value_attributes) + + value_attributes == other.value_attributes end # @return [Hash] an ActiveMerchant compatible address hash @@ -142,7 +143,7 @@ def country_iso=(iso) end def country_iso - country && country.iso + country&.iso end end end diff --git a/core/app/models/spree/address/name.rb b/core/app/models/spree/address/name.rb index 5cf5118d86e..55f425faaf2 100644 --- a/core/app/models/spree/address/name.rb +++ b/core/app/models/spree/address/name.rb @@ -8,7 +8,7 @@ class Name attr_reader :first_name, :last_name, :value def initialize(*components) - @value = components.join(' ').strip + @value = components.join(" ").strip initialize_name_components(components) end diff --git a/core/app/models/spree/adjustment.rb b/core/app/models/spree/adjustment.rb index ca16e8fb494..8eda5114b3c 100644 --- a/core/app/models/spree/adjustment.rb +++ b/core/app/models/spree/adjustment.rb @@ -9,8 +9,8 @@ module Spree class Adjustment < Spree::Base belongs_to :adjustable, polymorphic: true, touch: true, optional: true belongs_to :source, polymorphic: true, optional: true - belongs_to :order, class_name: 'Spree::Order', inverse_of: :all_adjustments, optional: true - belongs_to :adjustment_reason, class_name: 'Spree::AdjustmentReason', inverse_of: :adjustments, optional: true + belongs_to :order, class_name: "Spree::Order", inverse_of: :all_adjustments, optional: true + belongs_to :adjustment_reason, class_name: "Spree::AdjustmentReason", inverse_of: :adjustments, optional: true validates :adjustable, presence: true validates :order, presence: true @@ -19,14 +19,14 @@ class Adjustment < Spree::Base scope :not_finalized, -> { where(finalized: false) } scope :finalized, -> { where(finalized: true) } - scope :cancellation, -> { where(source_type: 'Spree::UnitCancel') } - scope :tax, -> { where(source_type: 'Spree::TaxRate') } + scope :cancellation, -> { where(source_type: "Spree::UnitCancel") } + scope :tax, -> { where(source_type: "Spree::TaxRate") } scope :non_tax, -> do source_type = arel_table[:source_type] - where(source_type.not_eq('Spree::TaxRate').or(source_type.eq(nil))) + where(source_type.not_eq("Spree::TaxRate").or(source_type.eq(nil))) end - scope :price, -> { where(adjustable_type: 'Spree::LineItem') } - scope :shipping, -> { where(adjustable_type: 'Spree::Shipment') } + scope :price, -> { where(adjustable_type: "Spree::LineItem") } + scope :shipping, -> { where(adjustable_type: "Spree::Shipment") } scope :eligible, -> { all } class << self deprecate :eligible, deprecator: Spree.deprecator @@ -42,9 +42,10 @@ class << self singleton_class.deprecate :return_authorization, deprecator: Spree.deprecator - allowed_ransackable_attributes << 'label' + allowed_ransackable_attributes << "label" extend DisplayMoney + money_methods :amount def finalize! @@ -74,12 +75,12 @@ def promotion? # @return [Boolean] true when this is a tax adjustment (Tax adjustments have a {TaxRate} source) def tax? - source_type == 'Spree::TaxRate' + source_type == "Spree::TaxRate" end # @return [Boolean] true when this is a cancellation adjustment (Cancellation adjustments have a {UnitCancel} source) def cancellation? - source_type == 'Spree::UnitCancel' + source_type == "Spree::UnitCancel" end def eligible? diff --git a/core/app/models/spree/adjustment_reason.rb b/core/app/models/spree/adjustment_reason.rb index d9f46d9f253..491b9f370e1 100644 --- a/core/app/models/spree/adjustment_reason.rb +++ b/core/app/models/spree/adjustment_reason.rb @@ -4,8 +4,8 @@ module Spree class AdjustmentReason < Spree::Base has_many :adjustments, inverse_of: :adjustment_reason, dependent: :restrict_with_error - validates :name, presence: true, uniqueness: { case_sensitive: false, allow_blank: true } - validates :code, presence: true, uniqueness: { case_sensitive: false, allow_blank: true } + validates :name, presence: true, uniqueness: {case_sensitive: false, allow_blank: true} + validates :code, presence: true, uniqueness: {case_sensitive: false, allow_blank: true} scope :active, -> { where(active: true) } diff --git a/core/app/models/spree/billing_integration.rb b/core/app/models/spree/billing_integration.rb index b1295e0dccb..0443c479228 100644 --- a/core/app/models/spree/billing_integration.rb +++ b/core/app/models/spree/billing_integration.rb @@ -4,14 +4,14 @@ module Spree class BillingIntegration < PaymentMethod validates :name, presence: true - preference :server, :string, default: 'test' + preference :server, :string, default: "test" preference :test_mode, :boolean, default: true def gateway integration_options = options # All environments except production considered to be test - test_server = integration_options[:server] != 'production' + test_server = integration_options[:server] != "production" test_mode = integration_options[:test_mode] integration_options[:test] = (test_server || test_mode) diff --git a/core/app/models/spree/calculator.rb b/core/app/models/spree/calculator.rb index 1bee284f3c8..bcaf436a946 100644 --- a/core/app/models/spree/calculator.rb +++ b/core/app/models/spree/calculator.rb @@ -12,7 +12,7 @@ class Calculator < Spree::Base def compute(computable) # Spree::LineItem -> :compute_line_item computable_name = computable.class.name.demodulize.underscore - method_name = "compute_#{computable_name}".to_sym + method_name = :"compute_#{computable_name}" calculator_class = self.class if respond_to?(method_name) send(method_name, computable) @@ -30,7 +30,7 @@ def self.description ################################################################### def to_s - self.class.name.titleize.gsub("Calculator\/", "") + self.class.name.titleize.gsub("Calculator/", "") end def description diff --git a/core/app/models/spree/calculator/default_tax.rb b/core/app/models/spree/calculator/default_tax.rb index dc26a865446..44d71370ac3 100644 --- a/core/app/models/spree/calculator/default_tax.rb +++ b/core/app/models/spree/calculator/default_tax.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_dependency 'spree/calculator' +require_dependency "spree/calculator" module Spree class Calculator::DefaultTax < Calculator @@ -11,13 +11,14 @@ class Calculator::DefaultTax < Calculator # Orders created with Spree 2.2 and after, have them applied to the line items individually. def compute_order(order) return 0 unless rate.active? + matched_line_items = order.line_items.select do |line_item| rate.tax_categories.include?(line_item.tax_category) end line_items_total = matched_line_items.sum(&:total_before_tax) if rate.included_in_price - round_to_two_places(line_items_total - ( line_items_total / (1 + rate.amount) ) ) + round_to_two_places(line_items_total - (line_items_total / (1 + rate.amount))) else round_to_two_places(line_items_total * rate.amount) end @@ -26,6 +27,7 @@ def compute_order(order) # When it comes to computing shipments or line items: same same. def compute_item(item) return 0 unless rate.active? + if rate.included_in_price deduced_total_by_rate(item, rate) else diff --git a/core/app/models/spree/calculator/flat_fee.rb b/core/app/models/spree/calculator/flat_fee.rb index fa3b1dc8c94..c36c40ef42e 100644 --- a/core/app/models/spree/calculator/flat_fee.rb +++ b/core/app/models/spree/calculator/flat_fee.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_dependency 'spree/calculator' +require_dependency "spree/calculator" module Spree # Very simple tax rate calculator. Can be used to apply a flat fee to any diff --git a/core/app/models/spree/calculator/flat_rate.rb b/core/app/models/spree/calculator/flat_rate.rb index 94edf9413db..20b5b501468 100644 --- a/core/app/models/spree/calculator/flat_rate.rb +++ b/core/app/models/spree/calculator/flat_rate.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require_dependency 'spree/calculator' +require_dependency "spree/calculator" module Spree class Calculator::FlatRate < Calculator preference :amount, :decimal, default: 0 - preference :currency, :string, default: ->{ Spree::Config[:currency] } + preference :currency, :string, default: -> { Spree::Config[:currency] } def compute(object = nil) if object && preferred_currency.casecmp(object.currency).zero? diff --git a/core/app/models/spree/calculator/returns/default_refund_amount.rb b/core/app/models/spree/calculator/returns/default_refund_amount.rb index fc3833560fc..684b9c3a4d7 100644 --- a/core/app/models/spree/calculator/returns/default_refund_amount.rb +++ b/core/app/models/spree/calculator/returns/default_refund_amount.rb @@ -1,13 +1,14 @@ # frozen_string_literal: true -require_dependency 'spree/calculator' -require_dependency 'spree/returns_calculator' +require_dependency "spree/calculator" +require_dependency "spree/returns_calculator" module Spree module Calculator::Returns class DefaultRefundAmount < ReturnsCalculator def compute(return_item) - return 0.0.to_d if return_item.part_of_exchange? + return BigDecimal("0.0") if return_item.part_of_exchange? + weighted_order_adjustment_amount(return_item.inventory_unit) + weighted_line_item_amount(return_item.inventory_unit) end @@ -23,6 +24,7 @@ def weighted_line_item_amount(inventory_unit) def percentage_of_order_total(inventory_unit) return 0.0 if inventory_unit.order.item_total_before_tax.zero? + weighted_line_item_amount(inventory_unit) / inventory_unit.order.item_total_before_tax end diff --git a/core/app/models/spree/calculator/shipping/flat_percent_item_total.rb b/core/app/models/spree/calculator/shipping/flat_percent_item_total.rb index 767d1eec1d4..debb9dde2d5 100644 --- a/core/app/models/spree/calculator/shipping/flat_percent_item_total.rb +++ b/core/app/models/spree/calculator/shipping/flat_percent_item_total.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require_dependency 'spree/calculator' -require_dependency 'spree/shipping_calculator' +require_dependency "spree/calculator" +require_dependency "spree/shipping_calculator" module Spree module Calculator::Shipping diff --git a/core/app/models/spree/calculator/shipping/flat_rate.rb b/core/app/models/spree/calculator/shipping/flat_rate.rb index c33b52f7f14..4803a6bafb5 100644 --- a/core/app/models/spree/calculator/shipping/flat_rate.rb +++ b/core/app/models/spree/calculator/shipping/flat_rate.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require_dependency 'spree/calculator' -require_dependency 'spree/shipping_calculator' +require_dependency "spree/calculator" +require_dependency "spree/shipping_calculator" module Spree module Calculator::Shipping class FlatRate < ShippingCalculator preference :amount, :decimal, default: 0 - preference :currency, :string, default: ->{ Spree::Config[:currency] } + preference :currency, :string, default: -> { Spree::Config[:currency] } def compute_package(_package) preferred_amount diff --git a/core/app/models/spree/calculator/shipping/flexi_rate.rb b/core/app/models/spree/calculator/shipping/flexi_rate.rb index af2ccbd276a..a9c362b9495 100644 --- a/core/app/models/spree/calculator/shipping/flexi_rate.rb +++ b/core/app/models/spree/calculator/shipping/flexi_rate.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require_dependency 'spree/calculator' -require_dependency 'spree/shipping_calculator' +require_dependency "spree/calculator" +require_dependency "spree/shipping_calculator" module Spree module Calculator::Shipping class FlexiRate < ShippingCalculator - preference :first_item, :decimal, default: 0.0 + preference :first_item, :decimal, default: 0.0 preference :additional_item, :decimal, default: 0.0 - preference :max_items, :integer, default: 0 - preference :currency, :string, default: ->{ Spree::Config[:currency] } + preference :max_items, :integer, default: 0 + preference :currency, :string, default: -> { Spree::Config[:currency] } def compute_package(package) compute_from_quantity(package.contents.sum(&:quantity)) @@ -20,10 +20,10 @@ def compute_from_quantity(quantity) max = preferred_max_items.to_i quantity.times do |index| # check max value to avoid divide by 0 errors - if (max == 0 && index == 0) || (max > 0) && (index % max == 0) - sum += preferred_first_item.to_f + sum += if (max == 0 && index == 0) || (max > 0) && (index % max == 0) + preferred_first_item.to_f else - sum += preferred_additional_item.to_f + preferred_additional_item.to_f end end diff --git a/core/app/models/spree/calculator/shipping/per_item.rb b/core/app/models/spree/calculator/shipping/per_item.rb index 3a07bf8dba0..543bb9cdc55 100644 --- a/core/app/models/spree/calculator/shipping/per_item.rb +++ b/core/app/models/spree/calculator/shipping/per_item.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require_dependency 'spree/calculator' -require_dependency 'spree/shipping_calculator' +require_dependency "spree/calculator" +require_dependency "spree/shipping_calculator" module Spree module Calculator::Shipping class PerItem < ShippingCalculator preference :amount, :decimal, default: 0 - preference :currency, :string, default: ->{ Spree::Config[:currency] } + preference :currency, :string, default: -> { Spree::Config[:currency] } def compute_package(package) compute_from_quantity(package.contents.sum(&:quantity)) diff --git a/core/app/models/spree/calculator/shipping/price_sack.rb b/core/app/models/spree/calculator/shipping/price_sack.rb index 478f17bd16b..deecae7eb2a 100644 --- a/core/app/models/spree/calculator/shipping/price_sack.rb +++ b/core/app/models/spree/calculator/shipping/price_sack.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require_dependency 'spree/calculator' -require_dependency 'spree/shipping_calculator' +require_dependency "spree/calculator" +require_dependency "spree/shipping_calculator" module Spree module Calculator::Shipping @@ -9,7 +9,7 @@ class PriceSack < ShippingCalculator preference :minimal_amount, :decimal, default: 0 preference :normal_amount, :decimal, default: 0 preference :discount_amount, :decimal, default: 0 - preference :currency, :string, default: ->{ Spree::Config[:currency] } + preference :currency, :string, default: -> { Spree::Config[:currency] } def compute_package(package) compute_from_price(total(package.contents)) diff --git a/core/app/models/spree/carton.rb b/core/app/models/spree/carton.rb index a6f5f0ae5b9..f4ccdf42fc2 100644 --- a/core/app/models/spree/carton.rb +++ b/core/app/models/spree/carton.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true class Spree::Carton < Spree::Base - belongs_to :address, class_name: 'Spree::Address', optional: true - belongs_to :stock_location, class_name: 'Spree::StockLocation', inverse_of: :cartons, optional: true - belongs_to :shipping_method, -> { with_discarded }, class_name: 'Spree::ShippingMethod', inverse_of: :cartons, optional: true + belongs_to :address, class_name: "Spree::Address", optional: true + belongs_to :stock_location, class_name: "Spree::StockLocation", inverse_of: :cartons, optional: true + belongs_to :shipping_method, -> { with_discarded }, class_name: "Spree::ShippingMethod", inverse_of: :cartons, optional: true has_many :inventory_units, class_name: "Spree::InventoryUnit", inverse_of: :carton, dependent: :nullify has_many :orders, -> { distinct }, through: :inventory_units @@ -22,7 +22,7 @@ class Spree::Carton < Spree::Base # @return [boolean, NilClass] Whether the email should be suppressed. attr_accessor :suppress_email - make_permalink field: :number, length: 11, prefix: 'C' + make_permalink field: :number, length: 11, prefix: "C" scope :trackable, -> { where("tracking IS NOT NULL AND tracking != ''") } # sort by most recent shipped_at, falling back to created_at. add "id desc" to make specs that involve this scope more deterministic. diff --git a/core/app/models/spree/classification.rb b/core/app/models/spree/classification.rb index 15911a91029..96f30e728f8 100644 --- a/core/app/models/spree/classification.rb +++ b/core/app/models/spree/classification.rb @@ -2,12 +2,12 @@ module Spree class Classification < Spree::Base - self.table_name = 'spree_products_taxons' + self.table_name = "spree_products_taxons" acts_as_list scope: :taxon belongs_to :product, class_name: "Spree::Product", inverse_of: :classifications, touch: true belongs_to :taxon, class_name: "Spree::Taxon", inverse_of: :classifications, touch: true # For https://github.com/spree/spree/issues/3494 - validates :taxon_id, uniqueness: { scope: :product_id, message: :already_linked } + validates :taxon_id, uniqueness: {scope: :product_id, message: :already_linked} end end diff --git a/core/app/models/spree/core/state_machines/order/class_methods.rb b/core/app/models/spree/core/state_machines/order/class_methods.rb index 2cd0897d9ec..d4fa2c42ad8 100644 --- a/core/app/models/spree/core/state_machines/order/class_methods.rb +++ b/core/app/models/spree/core/state_machines/order/class_methods.rb @@ -101,7 +101,7 @@ def define_state_machine! end after_transition to: :complete, do: :finalize - after_transition to: :resumed, do: :after_resume + after_transition to: :resumed, do: :after_resume after_transition to: :canceled, do: :after_cancel after_transition from: any - :cart, to: any - [:confirm, :complete] do |order| @@ -121,7 +121,7 @@ def define_state_machine! def go_to_state(name, options = {}) checkout_steps[name] = options previous_states.each do |state| - add_transition({ from: state, to: name }.merge(options)) + add_transition({from: state, to: name}.merge(options)) end if options[:if] previous_states << name @@ -188,7 +188,7 @@ def checkout_step_names end def add_transition(options) - next_event_transitions << { options.delete(:from) => options.delete(:to) }.merge(options) + next_event_transitions << {options.delete(:from) => options.delete(:to)}.merge(options) end def removed_transitions diff --git a/core/app/models/spree/core/state_machines/return_item/acceptance_status.rb b/core/app/models/spree/core/state_machines/return_item/acceptance_status.rb index 1009fbd747c..f9f7e0fb5c3 100644 --- a/core/app/models/spree/core/state_machines/return_item/acceptance_status.rb +++ b/core/app/models/spree/core/state_machines/return_item/acceptance_status.rb @@ -41,7 +41,7 @@ module AcceptanceStatus transition to: :manual_intervention_required, from: [:accepted, :pending, :manual_intervention_required] end - after_transition any => any, do: :persist_acceptance_status_errors + after_transition any => any, :do => :persist_acceptance_status_errors end end end diff --git a/core/app/models/spree/country.rb b/core/app/models/spree/country.rb index 88f640e275a..53e3d9bdbd8 100644 --- a/core/app/models/spree/country.rb +++ b/core/app/models/spree/country.rb @@ -28,7 +28,7 @@ def self.default def self.available(restrict_to_zone: Spree::Config[:checkout_zone]) checkout_zone = Zone.find_by(name: restrict_to_zone) - return checkout_zone.country_list if checkout_zone.try(:kind) == 'country' + return checkout_zone.country_list if checkout_zone.try(:kind) == "country" all end diff --git a/core/app/models/spree/credit_card.rb b/core/app/models/spree/credit_card.rb index 479a31c687c..6216c086b64 100644 --- a/core/app/models/spree/credit_card.rb +++ b/core/app/models/spree/credit_card.rb @@ -4,7 +4,7 @@ module Spree # The default `source` of a `Spree::Payment`. # class CreditCard < Spree::PaymentSource - belongs_to :user, class_name: Spree::UserClassHandle.new, foreign_key: 'user_id', optional: true + belongs_to :user, class_name: Spree::UserClassHandle.new, foreign_key: "user_id", optional: true belongs_to :address, optional: true before_save :set_last_digits @@ -14,28 +14,28 @@ class CreditCard < Spree::PaymentSource attr_reader :number, :verification_value attr_accessor :encrypted_data - validates :month, :year, numericality: { only_integer: true }, if: :require_card_numbers?, on: :create + validates :month, :year, numericality: {only_integer: true}, if: :require_card_numbers?, on: :create validates :number, presence: true, if: :require_card_numbers?, on: :create, unless: :imported validates :name, presence: true, if: :require_card_numbers?, on: :create validates :verification_value, presence: true, if: :require_card_numbers?, on: :create, unless: :imported - scope :with_payment_profile, -> { where('gateway_customer_profile_id IS NOT NULL') } + scope :with_payment_profile, -> { where("gateway_customer_profile_id IS NOT NULL") } # Taken from ActiveMerchant # https://github.com/activemerchant/active_merchant/blob/2f2acd4696e8de76057b5ed670b9aa022abc1187/lib/active_merchant/billing/credit_card_methods.rb#L5 CARD_TYPES = { - 'visa' => /^4\d{12}(\d{3})?(\d{3})?$/, - 'master' => /^(5[1-5]\d{4}|677189|222[1-9]\d{2}|22[3-9]\d{3}|2[3-6]\d{4}|27[01]\d{3}|2720\d{2})\d{10}$/, - 'discover' => /^(6011|65\d{2}|64[4-9]\d)\d{12}|(62\d{14})$/, - 'american_express' => /^3[47]\d{13}$/, - 'diners_club' => /^3(0[0-5]|[68]\d)\d{11}$/, - 'jcb' => /^35(28|29|[3-8]\d)\d{12}$/, - 'switch' => /^6759\d{12}(\d{2,3})?$/, - 'solo' => /^6767\d{12}(\d{2,3})?$/, - 'dankort' => /^5019\d{12}$/, - 'maestro' => /^(5[06-8]|6\d)\d{10,17}$/, - 'forbrugsforeningen' => /^600722\d{10}$/, - 'laser' => /^(6304|6706|6709|6771(?!89))\d{8}(\d{4}|\d{6,7})?$/ + "visa" => /^4\d{12}(\d{3})?(\d{3})?$/, + "master" => /^(5[1-5]\d{4}|677189|222[1-9]\d{2}|22[3-9]\d{3}|2[3-6]\d{4}|27[01]\d{3}|2720\d{2})\d{10}$/, + "discover" => /^(6011|65\d{2}|64[4-9]\d)\d{12}|(62\d{14})$/, + "american_express" => /^3[47]\d{13}$/, + "diners_club" => /^3(0[0-5]|[68]\d)\d{11}$/, + "jcb" => /^35(28|29|[3-8]\d)\d{12}$/, + "switch" => /^6759\d{12}(\d{2,3})?$/, + "solo" => /^6767\d{12}(\d{2,3})?$/, + "dankort" => /^5019\d{12}$/, + "maestro" => /^(5[06-8]|6\d)\d{10,17}$/, + "forbrugsforeningen" => /^600722\d{10}$/, + "laser" => /^(6304|6706|6709|6771(?!89))\d{8}(\d{4}|\d{6,7})?$/ }.freeze def address_attributes=(attributes) @@ -50,8 +50,8 @@ def expiry=(expiry) return unless expiry.present? self[:month], self[:year] = - if expiry =~ /\d{2}\s?\/\s?\d{2,4}/ # will match mm/yy and mm / yyyy - expiry.delete(' ').split('/') + if /\d{2}\s?\/\s?\d{2,4}/.match?(expiry) # will match mm/yy and mm / yyyy + expiry.delete(" ").split("/") elsif match = expiry.match(/(\d{2})(\d{2,4})/) # will match mmyy and mmyyyy [match[1], match[2]] end @@ -68,12 +68,12 @@ def expiry=(expiry) def number=(num) @number = if num.is_a?(String) - num.gsub(/[^0-9]/, '') + num.gsub(/[^0-9]/, "") end end def verification_value=(value) - @verification_value = value.to_s.gsub(/\s/, '') + @verification_value = value.to_s.gsub(/\s/, "") end # Sets the credit card type, converting it to the preferred internal @@ -84,10 +84,10 @@ def cc_type=(type) # cc_type is set by jquery.payment, which helpfully provides different # types from Active Merchant. Converting them is necessary. self[:cc_type] = case type - when 'mastercard', 'maestro' then 'master' - when 'amex' then 'american_express' - when 'dinersclub' then 'diners_club' - when '' then try_type_from_number + when "mastercard", "maestro" then "master" + when "amex" then "american_express" + when "dinersclub" then "diners_club" + when "" then try_type_from_number else type end end @@ -100,16 +100,16 @@ def cc_type=(type) # Sets the last digits field based on the assigned credit card number. def set_last_digits - self.last_digits ||= number.to_s.length <= 4 ? number : number.to_s.slice(-4..) + self.last_digits ||= (number.to_s.length <= 4) ? number : number.to_s.slice(-4..) end # @return [String] the credit card type if it can be determined from the # number, otherwise the empty string def try_type_from_number CARD_TYPES.each do |type, pattern| - return type if number =~ pattern + return type if number&.match?(pattern) end - '' + "" end # @return [Boolean] true when a verification value is present diff --git a/core/app/models/spree/customer_return.rb b/core/app/models/spree/customer_return.rb index 2961d4c4136..28763aa2afe 100644 --- a/core/app/models/spree/customer_return.rb +++ b/core/app/models/spree/customer_return.rb @@ -18,9 +18,10 @@ class CustomerReturn < Spree::Base accepts_nested_attributes_for :return_items - self.allowed_ransackable_attributes = ['number'] + self.allowed_ransackable_attributes = ["number"] extend DisplayMoney + money_methods :total, :total_excluding_vat, :amount delegate :currency, to: :order @@ -61,14 +62,14 @@ def process_return! def generate_number self.number ||= loop do - random = "CR#{Array.new(9){ rand(9) }.join}" + random = "CR#{Array.new(9) { rand(9) }.join}" break random unless self.class.exists?(number: random) end end def return_items_belong_to_same_order - if return_items.reject{ |return_item| return_item.inventory_unit&.order_id == order_id }.any? - errors.add(:base, I18n.t('spree.return_items_cannot_be_associated_with_multiple_orders')) + if return_items.reject { |return_item| return_item.inventory_unit&.order_id == order_id }.any? + errors.add(:base, I18n.t("spree.return_items_cannot_be_associated_with_multiple_orders")) end end diff --git a/core/app/models/spree/distributed_amounts_handler.rb b/core/app/models/spree/distributed_amounts_handler.rb index a9c4b163aaa..0279e6c8f17 100644 --- a/core/app/models/spree/distributed_amounts_handler.rb +++ b/core/app/models/spree/distributed_amounts_handler.rb @@ -21,7 +21,7 @@ def amount(line_item) # @return [Hash] a hash of line item IDs and their # corresponding weighted adjustments def distributed_amounts - Hash[line_item_ids.zip(allocated_amounts)] + line_item_ids.zip(allocated_amounts).to_h end def line_item_ids diff --git a/core/app/models/spree/fulfilment_changer.rb b/core/app/models/spree/fulfilment_changer.rb index a46744f5f7a..d53167aa6a9 100644 --- a/core/app/models/spree/fulfilment_changer.rb +++ b/core/app/models/spree/fulfilment_changer.rb @@ -32,7 +32,7 @@ def initialize(current_shipment:, desired_shipment:, variant:, quantity:, track_ @track_inventory = track_inventory end - validates :quantity, numericality: { greater_than: 0 } + validates :quantity, numericality: {greater_than: 0} validate :current_shipment_not_already_shipped validate :desired_shipment_different_from_current validates :desired_stock_location, presence: true @@ -44,6 +44,7 @@ def run! # Validations here are intended to catch all necessary prerequisites. # We return early so all checks have happened already. return false if invalid? + desired_shipment.save! if desired_shipment.new_record? if track_inventory @@ -113,19 +114,19 @@ def run_tracking_inventory # We order by state, because `'backordered' < 'on_hand'`. # We start to move the new actual backordered quantity, so the remaining # quantity can be set to on_hand state. - current_shipment. - inventory_units. - where(variant:). - order(state: :asc). - limit(backordered_quantity_to_move). - update_all(shipment_id: desired_shipment.id, state: :backordered) - - current_shipment. - inventory_units. - where(variant:). - order(state: :asc). - limit(on_hand_quantity_to_move). - update_all(shipment_id: desired_shipment.id, state: :on_hand) + current_shipment + .inventory_units + .where(variant:) + .order(state: :asc) + .limit(backordered_quantity_to_move) + .update_all(shipment_id: desired_shipment.id, state: :backordered) + + current_shipment + .inventory_units + .where(variant:) + .order(state: :asc) + .limit(on_hand_quantity_to_move) + .update_all(shipment_id: desired_shipment.id, state: :on_hand) end end @@ -133,12 +134,12 @@ def run_tracking_inventory # to the other. def run_without_tracking_inventory ActiveRecord::Base.transaction do - current_shipment. - inventory_units. - where(variant:). - order(state: :asc). - limit(quantity). - update_all(shipment_id: desired_shipment.id) + current_shipment + .inventory_units + .where(variant:) + .order(state: :asc) + .limit(quantity) + .update_all(shipment_id: desired_shipment.id) end end diff --git a/core/app/models/spree/image/active_storage_attachment.rb b/core/app/models/spree/image/active_storage_attachment.rb index 9ceef9cacc9..7c4225433ae 100644 --- a/core/app/models/spree/image/active_storage_attachment.rb +++ b/core/app/models/spree/image/active_storage_attachment.rb @@ -12,8 +12,8 @@ module Spree::Image::ActiveStorageAttachment validate :supported_content_type has_attachment :attachment, - styles: Spree::Config.product_image_styles, - default_style: Spree::Config.product_image_style_default + styles: Spree::Config.product_image_styles, + default_style: Spree::Config.product_image_style_default def supported_content_type unless attachment.content_type.in?(Spree::Config.allowed_image_mime_types) diff --git a/core/app/models/spree/image/paperclip_attachment.rb b/core/app/models/spree/image/paperclip_attachment.rb index 3c8beb1f42c..3c24c4894c6 100644 --- a/core/app/models/spree/image/paperclip_attachment.rb +++ b/core/app/models/spree/image/paperclip_attachment.rb @@ -7,15 +7,15 @@ module Spree::Image::PaperclipAttachment validate :no_attachment_errors has_attached_file :attachment, - styles: Spree::Config.product_image_styles, - default_style: Spree::Config.product_image_style_default, - default_url: 'noimage/:style.png', - url: '/spree/products/:id/:style/:basename.:extension', - path: ':rails_root/public/spree/products/:id/:style/:basename.:extension', - convert_options: { all: '-strip -auto-orient -colorspace sRGB' } + styles: Spree::Config.product_image_styles, + default_style: Spree::Config.product_image_style_default, + default_url: "noimage/:style.png", + url: "/spree/products/:id/:style/:basename.:extension", + path: ":rails_root/public/spree/products/:id/:style/:basename.:extension", + convert_options: {all: "-strip -auto-orient -colorspace sRGB"} validates_attachment :attachment, presence: true, - content_type: { content_type: Spree::Config.allowed_image_mime_types } + content_type: {content_type: Spree::Config.allowed_image_mime_types} # save the w,h of the original image (from which others can be calculated) # we need to look at the write-queue for images which have not been saved yet @@ -39,7 +39,7 @@ def find_dimensions filename = temporary.path unless temporary.nil? filename = attachment.path if filename.blank? geometry = Paperclip::Geometry.from_file(filename) - self.attachment_width = geometry.width + self.attachment_width = geometry.width self.attachment_height = geometry.height end diff --git a/core/app/models/spree/inventory_unit.rb b/core/app/models/spree/inventory_unit.rb index 80af85b3b89..9994a40b590 100644 --- a/core/app/models/spree/inventory_unit.rb +++ b/core/app/models/spree/inventory_unit.rb @@ -4,9 +4,9 @@ module Spree # Tracks the state of line items' fulfillment. # class InventoryUnit < Spree::Base - PRE_SHIPMENT_STATES = %w(backordered on_hand) - POST_SHIPMENT_STATES = %w(returned) - CANCELABLE_STATES = ['on_hand', 'backordered', 'shipped'] + PRE_SHIPMENT_STATES = %w[backordered on_hand] + POST_SHIPMENT_STATES = %w[returned] + CANCELABLE_STATES = ["on_hand", "backordered", "shipped"] belongs_to :variant, -> { with_discarded }, class_name: "Spree::Variant", inverse_of: :inventory_units, optional: true belongs_to :shipment, class_name: "Spree::Shipment", touch: true, inverse_of: :inventory_units, optional: true @@ -29,20 +29,20 @@ def order=(_) before_destroy :ensure_can_destroy scope :pending, -> { where pending: true } - scope :backordered, -> { where state: 'backordered' } - scope :on_hand, -> { where state: 'on_hand' } + scope :backordered, -> { where state: "backordered" } + scope :on_hand, -> { where state: "on_hand" } scope :pre_shipment, -> { where(state: PRE_SHIPMENT_STATES) } - scope :shipped, -> { where state: 'shipped' } + scope :shipped, -> { where state: "shipped" } scope :post_shipment, -> { where(state: POST_SHIPMENT_STATES) } - scope :returned, -> { where state: 'returned' } - scope :canceled, -> { where(state: 'canceled') } - scope :not_canceled, -> { where.not(state: 'canceled') } + scope :returned, -> { where state: "returned" } + scope :canceled, -> { where(state: "canceled") } + scope :not_canceled, -> { where.not(state: "canceled") } scope :cancelable, -> { where(state: Spree::InventoryUnit::CANCELABLE_STATES, pending: false) } scope :backordered_per_variant, ->(stock_item) do includes(:shipment, :order) .where("spree_shipments.state != 'canceled'").references(:shipment) .where(variant_id: stock_item.variant_id) - .where('spree_orders.completed_at is not null') + .where("spree_orders.completed_at is not null") .backordered.order(Spree::Order.arel_table[:completed_at].asc) end @@ -53,7 +53,7 @@ def order=(_) # inventory units for the given stock item scope :backordered_for_stock_item, ->(stock_item) do backordered_per_variant(stock_item) - .where(spree_shipments: { stock_location_id: stock_item.stock_location_id }) + .where(spree_shipments: {stock_location_id: stock_item.stock_location_id}) end scope :shippable, -> { on_hand } diff --git a/core/app/models/spree/item_total.rb b/core/app/models/spree/item_total.rb index c691700b6c5..ca0d39729fd 100644 --- a/core/app/models/spree/item_total.rb +++ b/core/app/models/spree/item_total.rb @@ -14,7 +14,7 @@ def recalculate! # These ones should not affect the eventual total price. # # Additional tax adjustments are the opposite, affecting the final total. - item.included_tax_total = tax_adjustments.select(&:included?).sum(&:amount) + item.included_tax_total = tax_adjustments.select(&:included?).sum(&:amount) item.additional_tax_total = tax_adjustments.reject(&:included?).sum(&:amount) item.adjustment_total = item.adjustments.reject { |adjustment| diff --git a/core/app/models/spree/legacy_user.rb b/core/app/models/spree/legacy_user.rb index 806f702ea7f..dbadc550e4f 100644 --- a/core/app/models/spree/legacy_user.rb +++ b/core/app/models/spree/legacy_user.rb @@ -9,10 +9,10 @@ class LegacyUser < Spree::Base include UserMethods include Metadata - self.table_name = 'spree_users' + self.table_name = "spree_users" def self.model_name - ActiveModel::Name.new Spree::LegacyUser, Spree, 'user' + ActiveModel::Name.new Spree::LegacyUser, Spree, "user" end attr_accessor :password diff --git a/core/app/models/spree/line_item.rb b/core/app/models/spree/line_item.rb index 33578794eb9..2a9a0e05812 100644 --- a/core/app/models/spree/line_item.rb +++ b/core/app/models/spree/line_item.rb @@ -43,15 +43,15 @@ class LineItem < Spree::Base attr_accessor :target_shipment, :price_currency - self.allowed_ransackable_associations = ['variant'] - self.allowed_ransackable_attributes = ['variant_id'] + self.allowed_ransackable_associations = ["variant"] + self.allowed_ransackable_attributes = ["variant_id"] # @return [BigDecimal] the amount of this line item, which is the line # item's price multiplied by its quantity. def amount price * quantity end - alias subtotal amount + alias_method :subtotal, :amount # @return [BigDecimal] the amount of this line item, taking into # consideration all its adjustments. @@ -72,17 +72,18 @@ def total_excluding_vat end extend Spree::DisplayMoney + money_methods :amount, :price, - :included_tax_total, :additional_tax_total, - :total, :total_before_tax, :total_excluding_vat + :included_tax_total, :additional_tax_total, + :total, :total_before_tax, :total_excluding_vat # @return [Spree::Money] the price of this line item - alias money_price display_price - alias single_display_amount display_price - alias single_money display_price + alias_method :money_price, :display_price + alias_method :single_display_amount, :display_price + alias_method :single_money, :display_price # @return [Spree::Money] the amount of this line item - alias money display_amount + alias_method :money, :display_amount # Sets price from a `Spree::Money` object # @@ -122,7 +123,7 @@ def options=(options = {}) # it from the variant. Please note that this always allows to set # a price for this line item, even if there is no existing price # for the associated line item in the order currency. - unless options.key?(:price) || options.key?('price') + unless options.key?(:price) || options.key?("price") self.money_price = variant.price_for_options(pricing_options)&.money end end @@ -161,6 +162,7 @@ def normalize_quantity def set_required_attributes return if persisted? return unless variant + self.tax_category ||= variant.tax_category set_pricing_attributes end diff --git a/core/app/models/spree/log_entry.rb b/core/app/models/spree/log_entry.rb index 67877c2a60b..310e3699576 100644 --- a/core/app/models/spree/log_entry.rb +++ b/core/app/models/spree/log_entry.rb @@ -69,7 +69,7 @@ def parsed_details @details ||= YAML.safe_load( details, permitted_classes: self.class.permitted_classes, - aliases: Spree::Config.log_entry_allow_aliases, + aliases: Spree::Config.log_entry_allow_aliases ) end end @@ -79,7 +79,7 @@ def parsed_details=(value) self.details = YAML.safe_dump( value, permitted_classes: self.class.permitted_classes, - aliases: Spree::Config.log_entry_allow_aliases, + aliases: Spree::Config.log_entry_allow_aliases ) end end @@ -91,7 +91,7 @@ def parsed_payment_response_details_with_fallback=(response) self.parsed_details = ActiveMerchant::Billing::Response.new( response.success?, "[WARNING: An error occurred while trying to serialize the payment response] #{response.message}", - { 'data' => response.inspect, 'error' => e.message.to_s }, + {"data" => response.inspect, "error" => e.message.to_s} ) end diff --git a/core/app/models/spree/money.rb b/core/app/models/spree/money.rb index 046a4aa2e0b..c716082d31a 100644 --- a/core/app/models/spree/money.rb +++ b/core/app/models/spree/money.rb @@ -5,6 +5,7 @@ module Spree # formatting via Spree::Config. class Money include Comparable + DifferentCurrencyError = Class.new(StandardError) class << self @@ -69,7 +70,7 @@ def format(options = {}) # @param options [Hash] additional formatting options # @return [String] the value of this money object formatted according to # its options and any additional options, by default with html_wrap. - def to_html(options = { html_wrap: true }) + def to_html(options = {html_wrap: true}) output = format(options) # Maintain compatibility by checking html option renamed to html_wrap. if options[:html_wrap] @@ -87,6 +88,7 @@ def <=>(other) if !other.respond_to?(:money) raise TypeError, "Can't compare #{other.class} to Spree::Money" end + if currency != other.currency # By default, ::Money will try to run a conversion on `other.money` and # try a comparison on that. We do not want any currency conversion to @@ -104,16 +106,19 @@ def <=>(other) # @see http://www.rubydoc.info/gems/money/Money/Arithmetic#%3D%3D-instance_method def ==(other) raise TypeError, "Can't compare #{other.class} to Spree::Money" if !other.respond_to?(:money) + @money == other.money end def -(other) raise TypeError, "Can't subtract #{other.class} to Spree::Money" if !other.respond_to?(:money) + self.class.new(@money - other.money) end def +(other) raise TypeError, "Can't add #{other.class} to Spree::Money" if !other.respond_to?(:money) + self.class.new(@money + other.money) end end diff --git a/core/app/models/spree/option_type.rb b/core/app/models/spree/option_type.rb index 49b40f583e6..70cd37ae195 100644 --- a/core/app/models/spree/option_type.rb +++ b/core/app/models/spree/option_type.rb @@ -15,7 +15,7 @@ class OptionType < Spree::Base has_many :product_option_types, dependent: :destroy, inverse_of: :option_type has_many :products, through: :product_option_types - validates :name, presence: true, uniqueness: { allow_blank: true, case_sensitive: true } + validates :name, presence: true, uniqueness: {allow_blank: true, case_sensitive: true} validates :presentation, presence: true default_scope -> { order(:position) } diff --git a/core/app/models/spree/option_value.rb b/core/app/models/spree/option_value.rb index c30c267eb90..eb356e50bda 100644 --- a/core/app/models/spree/option_value.rb +++ b/core/app/models/spree/option_value.rb @@ -2,13 +2,13 @@ module Spree class OptionValue < Spree::Base - belongs_to :option_type, class_name: 'Spree::OptionType', inverse_of: :option_values + belongs_to :option_type, class_name: "Spree::OptionType", inverse_of: :option_values acts_as_list scope: :option_type has_many :option_values_variants, dependent: :destroy has_many :variants, through: :option_values_variants - validates :name, presence: true, uniqueness: { scope: :option_type_id, allow_blank: true, case_sensitive: true } + validates :name, presence: true, uniqueness: {scope: :option_type_id, allow_blank: true, case_sensitive: true} validates :presentation, presence: true after_save :touch, if: :saved_changes? diff --git a/core/app/models/spree/order.rb b/core/app/models/spree/order.rb index e0a76ef5b2c..4668a51f947 100644 --- a/core/app/models/spree/order.rb +++ b/core/app/models/spree/order.rb @@ -19,9 +19,9 @@ module Spree # `empty!` and `fulfill!`. # class Order < Spree::Base - ORDER_NUMBER_LENGTH = 9 + ORDER_NUMBER_LENGTH = 9 ORDER_NUMBER_LETTERS = false - ORDER_NUMBER_PREFIX = 'R' + ORDER_NUMBER_PREFIX = "R" include ::Spree::Config.state_machines.order @@ -33,12 +33,14 @@ class InsufficientStock < StandardError def initialize(message = nil, items: {}) @items = items - super message + super(message) end end + class CannotRebuildShipments < StandardError; end extend Spree::DisplayMoney + money_methods( :outstanding_balance, :item_total, @@ -55,7 +57,7 @@ class CannotRebuildShipments < StandardError; end :item_total_excluding_vat, :promo_total ) - alias :display_ship_total :display_shipment_total + alias_method :display_ship_total, :display_shipment_total checkout_flow do go_to_state :address @@ -75,17 +77,17 @@ class CannotRebuildShipments < StandardError; end # Customer info belongs_to :user, class_name: Spree::UserClassHandle.new, optional: true - belongs_to :bill_address, foreign_key: :bill_address_id, class_name: 'Spree::Address', optional: true + belongs_to :bill_address, foreign_key: :bill_address_id, class_name: "Spree::Address", optional: true alias_method :billing_address, :bill_address alias_method :billing_address=, :bill_address= - belongs_to :ship_address, foreign_key: :ship_address_id, class_name: 'Spree::Address', optional: true + belongs_to :ship_address, foreign_key: :ship_address_id, class_name: "Spree::Address", optional: true alias_method :shipping_address, :ship_address alias_method :shipping_address=, :ship_address= alias_attribute :ship_total, :shipment_total - belongs_to :store, class_name: 'Spree::Store', optional: true + belongs_to :store, class_name: "Spree::Store", optional: true # Items has_many :line_items, -> { order(:created_at, :id) }, dependent: :destroy, inverse_of: :order @@ -106,14 +108,14 @@ def states has_many :line_item_adjustments, through: :line_items, source: :adjustments has_many :shipment_adjustments, through: :shipments, source: :adjustments has_many :all_adjustments, - class_name: 'Spree::Adjustment', - foreign_key: :order_id, - dependent: :destroy, - inverse_of: :order + class_name: "Spree::Adjustment", + foreign_key: :order_id, + dependent: :destroy, + inverse_of: :order # Payments has_many :payments, dependent: :destroy, inverse_of: :order - has_many :valid_store_credit_payments, -> { store_credits.valid }, inverse_of: :order, class_name: 'Spree::Payment', foreign_key: :order_id + has_many :valid_store_credit_payments, -> { store_credits.valid }, inverse_of: :order, class_name: "Spree::Payment", foreign_key: :order_id # Returns has_many :return_authorizations, dependent: :destroy, inverse_of: :order @@ -147,9 +149,9 @@ def states before_create :link_by_email validates :email, presence: true, if: :email_required? - validates :email, 'spree/email' => true, allow_blank: true - validates :guest_token, presence: { allow_nil: true } - validates :number, presence: true, uniqueness: { allow_blank: true, case_sensitive: true } + validates :email, "spree/email" => true, :allow_blank => true + validates :guest_token, presence: {allow_nil: true} + validates :number, presence: true, uniqueness: {allow_blank: true, case_sensitive: true} validates :store_id, presence: true def self.find_by_param(value) @@ -190,7 +192,7 @@ def register_line_item_comparison_hook(hook) scope :by_store, ->(store) { where(store_id: store.id) } # shows completed orders first, by their completed_at date, then uncompleted orders by their created_at - scope :reverse_chronological, -> { order(Arel.sql('spree_orders.completed_at IS NULL'), completed_at: :desc, created_at: :desc) } + scope :reverse_chronological, -> { order(Arel.sql("spree_orders.completed_at IS NULL"), completed_at: :desc, created_at: :desc) } def self.by_customer(customer) joins(:user).where("#{Spree.user_class.table_name}.email" => customer) @@ -209,11 +211,11 @@ def self.incomplete end def self.canceled - where(state: 'canceled') + where(state: "canceled") end def self.not_canceled - where.not(state: 'canceled') + where.not(state: "canceled") end # For compatiblity with Calculator::PriceSack @@ -293,8 +295,9 @@ def assign_shipping_to_billing_address end def allow_cancel? - return false unless completed? && state != 'canceled' - shipment_state.nil? || %w{ready backorder pending}.include?(shipment_state) + return false unless completed? && state != "canceled" + + shipment_state.nil? || %w[ready backorder pending].include?(shipment_state) end def all_inventory_units_returned? @@ -320,7 +323,7 @@ def cancellations # Associates the specified user with the order. def associate_user!(user, override_email = true) self.user = user - attrs_to_set = { user_id: user.try(:id) } + attrs_to_set = {user_id: user.try(:id)} attrs_to_set[:email] = user.try(:email) if override_email attrs_to_set[:created_by_id] = user.try(:id) if created_by.blank? @@ -351,8 +354,8 @@ def quantity_of(variant, options = {}) def find_line_item_by_variant(variant, options = {}) line_items.detect { |line_item| - line_item.variant_id == variant.id && - line_item_options_match(line_item, options) + line_item.variant_id == variant.id && + line_item_options_match(line_item, options) } end @@ -381,7 +384,7 @@ def outstanding_balance # If reimbursement has happened add it back to total to prevent balance_due payment state # See: https://github.com/spree/spree/issues/6229 - if state == 'canceled' + if state == "canceled" -1 * payment_total else total - reimbursement_total - payment_total @@ -424,7 +427,7 @@ def fulfill! # Helper methods for checkout steps def paid? - %w(paid credit_owed).include?(payment_state) + %w[paid credit_owed].include?(payment_state) end def available_payment_methods @@ -444,7 +447,7 @@ def insufficient_stock_lines # If so add error and restart checkout. def ensure_line_item_variants_are_not_deleted if line_items.any? { |li| li.variant.discarded? } - errors.add(:base, I18n.t('spree.deleted_variants_present')) + errors.add(:base, I18n.t("spree.deleted_variants_present")) restart_checkout_flow false else @@ -467,10 +470,10 @@ def empty! def coupon_code=(code) @coupon_code = begin - code.strip.downcase - rescue StandardError - nil - end + code.strip.downcase + rescue + nil + end end def can_add_coupon? @@ -478,12 +481,12 @@ def can_add_coupon? end def shipped? - %w(partial shipped).include?(shipment_state) + %w[partial shipped].include?(shipment_state) end def ensure_shipping_address - unless ship_address && ship_address.valid? - errors.add(:base, I18n.t('spree.ship_address_required')) && (return false) + unless ship_address&.valid? + errors.add(:base, I18n.t("spree.ship_address_required")) && (return false) end end @@ -491,7 +494,7 @@ def ensure_billing_address return unless billing_address_required? return if bill_address&.valid? - errors.add(:base, I18n.t('spree.bill_address_required')) + errors.add(:base, I18n.t("spree.bill_address_required")) false end @@ -501,9 +504,9 @@ def billing_address_required? def create_proposed_shipments if completed? - raise CannotRebuildShipments.new(I18n.t('spree.cannot_rebuild_shipments_order_completed')) + raise CannotRebuildShipments.new(I18n.t("spree.cannot_rebuild_shipments_order_completed")) elsif shipments.any? { |shipment| !shipment.pending? } - raise CannotRebuildShipments.new(I18n.t('spree.cannot_rebuild_shipments_shipments_not_pending')) + raise CannotRebuildShipments.new(I18n.t("spree.cannot_rebuild_shipments_shipments_not_pending")) else shipments.destroy_all shipments.push(*Spree::Config.stock.coordinator_class.new(self).shipments) @@ -532,10 +535,10 @@ def check_shipments_and_restart_checkout deprecate ensure_updated_shipments: :check_shipments_and_restart_checkout, deprecator: Spree.deprecator def restart_checkout_flow - return if state == 'cart' + return if state == "cart" update_columns( - state: 'cart', + state: "cart", updated_at: Time.current ) self.next if line_items.any? @@ -605,10 +608,10 @@ def add_store_credit_payments amount_to_take = [credit.amount_remaining, remaining_total].min payments.create!(source: credit, - payment_method:, - amount: amount_to_take, - state: 'checkout', - response_code: credit.generate_authorization_code) + payment_method:, + amount: amount_to_take, + state: "checkout", + response_code: credit.generate_authorization_code) remaining_total -= amount_to_take end end @@ -622,19 +625,21 @@ def add_store_credit_payments payments.reset - if payments.where(state: %w(checkout pending completed)).sum(:amount) != total - errors.add(:base, I18n.t('spree.store_credit.errors.unable_to_fund')) && (return false) + if payments.where(state: %w[checkout pending completed]).sum(:amount) != total + errors.add(:base, I18n.t("spree.store_credit.errors.unable_to_fund")) && (return false) end end def covered_by_store_credit? return false unless user + user.available_store_credit_total(currency:) >= total end alias_method :covered_by_store_credit, :covered_by_store_credit? def total_available_store_credit return 0.0 unless user + user.available_store_credit_total(currency:) end @@ -651,11 +656,11 @@ def total_applicable_store_credit end def display_total_applicable_store_credit - Spree::Money.new(-total_applicable_store_credit, { currency: }) + Spree::Money.new(-total_applicable_store_credit, {currency:}) end def display_store_credit_remaining_after_capture - Spree::Money.new(total_available_store_credit - total_applicable_store_credit, { currency: }) + Spree::Money.new(total_available_store_credit - total_applicable_store_credit, {currency:}) end def bill_address_attributes=(attributes) @@ -682,15 +687,15 @@ def assign_default_user_addresses end def persist_user_address! - if !temporary_address && user && user.respond_to?(:persist_order_address) && bill_address_id + if !temporary_address && user&.respond_to?(:persist_order_address) && bill_address_id user.persist_order_address(self) end end def add_payment_sources_to_wallet - Spree::Config. - add_payment_sources_to_wallet_class.new(self). - add_to_wallet + Spree::Config + .add_payment_sources_to_wallet_class.new(self) + .add_to_wallet end def add_default_payment_from_wallet @@ -702,7 +707,7 @@ def add_default_payment_from_wallet if bill_address.nil? # this is one of 2 places still using User#bill_address self.bill_address = payment.source.try(:address) || - user.bill_address + user.bill_address end end end @@ -717,7 +722,7 @@ def record_ip_address(ip_address) def payments_attributes=(attributes) validate_payments_attributes(attributes) - super(attributes) + super end def validate_payments_attributes(attributes) @@ -737,7 +742,7 @@ def process_payments_before_complete return if !payment_required? if payments.valid.empty? - errors.add(:base, I18n.t('spree.no_payment_found')) + errors.add(:base, I18n.t("spree.no_payment_found")) return false end @@ -788,7 +793,7 @@ def link_by_email # @return [Boolean] true if the email is required # @note This method was called require_email before. def email_required? - true unless new_record? || ['cart', 'address'].include?(state) + true unless new_record? || ["cart", "address"].include?(state) end def ensure_inventory_units @@ -809,7 +814,7 @@ def ensure_promotions_eligible if promo_total_changed? restart_checkout_flow recalculate - errors.add(:base, I18n.t('spree.promotion_total_changed_before_complete')) + errors.add(:base, I18n.t("spree.promotion_total_changed_before_complete")) end errors.empty? end @@ -828,7 +833,7 @@ def validate_line_item_availability def ensure_line_items_present unless line_items.present? - errors.add(:base, I18n.t('spree.there_are_no_items_for_this_order')) && (return false) + errors.add(:base, I18n.t("spree.there_are_no_items_for_this_order")) && (return false) end end @@ -837,7 +842,7 @@ def ensure_available_shipping_rates # After this point, order redirects back to 'address' state and asks user to pick a proper address # Therefore, shipments are not necessary at this point. shipments.destroy_all - errors.add(:base, I18n.t('spree.items_cannot_be_shipped')) && (return false) + errors.add(:base, I18n.t("spree.items_cannot_be_shipped")) && (return false) end end @@ -869,11 +874,11 @@ def after_resume end def use_billing? - use_billing.in?([true, 'true', '1']) + use_billing.in?([true, "true", "1"]) end def use_shipping? - use_shipping.in?([true, 'true', '1']) + use_shipping.in?([true, "true", "1"]) end def set_currency diff --git a/core/app/models/spree/order/number_generator.rb b/core/app/models/spree/order/number_generator.rb index 3a2f05d34d3..cc182fe0a0f 100644 --- a/core/app/models/spree/order/number_generator.rb +++ b/core/app/models/spree/order/number_generator.rb @@ -27,7 +27,7 @@ def initialize(options = {}) def generate possible = (0..9).to_a - possible += ('A'..'Z').to_a if letters + possible += ("A".."Z").to_a if letters loop do # Make a random number. diff --git a/core/app/models/spree/order_cancellations.rb b/core/app/models/spree/order_cancellations.rb index 03e0b730d52..8179eefde6d 100644 --- a/core/app/models/spree/order_cancellations.rb +++ b/core/app/models/spree/order_cancellations.rb @@ -55,9 +55,7 @@ def short_ship(inventory_units, created_by: nil) @order.recalculate - if short_ship_tax_notifier - short_ship_tax_notifier.call(unit_cancels) - end + short_ship_tax_notifier&.call(unit_cancels) end Spree::Bus.publish(:order_short_shipped, order: @order, inventory_units:) diff --git a/core/app/models/spree/order_inventory.rb b/core/app/models/spree/order_inventory.rb index 6a949023716..4cc35277e42 100644 --- a/core/app/models/spree/order_inventory.rb +++ b/core/app/models/spree/order_inventory.rb @@ -78,10 +78,10 @@ def add_to_shipment(shipment, quantity) if variant.should_track_inventory? on_hand, back_order = shipment.stock_location.fill_status(variant, quantity) - on_hand.times { pending_units << shipment.set_up_inventory('on_hand', variant, order, line_item) } - back_order.times { pending_units << shipment.set_up_inventory('backordered', variant, order, line_item) } + on_hand.times { pending_units << shipment.set_up_inventory("on_hand", variant, order, line_item) } + back_order.times { pending_units << shipment.set_up_inventory("backordered", variant, order, line_item) } else - quantity.times { pending_units << shipment.set_up_inventory('on_hand', variant, order, line_item) } + quantity.times { pending_units << shipment.set_up_inventory("on_hand", variant, order, line_item) } end # adding to this shipment, and removing from stock_location @@ -95,6 +95,7 @@ def add_to_shipment(shipment, quantity) def remove_from_any_shipment(quantity) order.shipments.each do |shipment| break if quantity == 0 + quantity -= remove_from_shipment(shipment, quantity) end end @@ -104,13 +105,14 @@ def remove_from_shipment(shipment, quantity) shipment_units = shipment.inventory_units_for_item(line_item, variant).reject do |variant_unit| # TODO: exclude all 'shipped' states - variant_unit.state == 'shipped' + variant_unit.state == "shipped" end.sort_by(&:state) removed_quantity = 0 shipment_units.each do |inventory_unit| break if removed_quantity == quantity + inventory_unit.destroy removed_quantity += 1 end diff --git a/core/app/models/spree/order_mutex.rb b/core/app/models/spree/order_mutex.rb index 97e5fe3dad9..c569522fff0 100644 --- a/core/app/models/spree/order_mutex.rb +++ b/core/app/models/spree/order_mutex.rb @@ -28,7 +28,7 @@ def with_lock!(order) yield ensure - order_mutex.destroy if order_mutex + order_mutex&.destroy end end end diff --git a/core/app/models/spree/order_shipping.rb b/core/app/models/spree/order_shipping.rb index 32c8f2d6b34..a60a86d6e7f 100644 --- a/core/app/models/spree/order_shipping.rb +++ b/core/app/models/spree/order_shipping.rb @@ -43,7 +43,7 @@ def ship_shipment(shipment, external_number: nil, tracking_number: nil, suppress # @param tracking_number An option tracking number. # @return The carton created. def ship(inventory_units:, stock_location:, address:, shipping_method:, - shipped_at: Time.current, external_number: nil, tracking_number: nil, suppress_mailer: false) + shipped_at: Time.current, external_number: nil, tracking_number: nil, suppress_mailer: false) carton = nil Spree::InventoryUnit.transaction do diff --git a/core/app/models/spree/order_updater.rb b/core/app/models/spree/order_updater.rb index 300096bd05c..d16faa65dc7 100644 --- a/core/app/models/spree/order_updater.rb +++ b/core/app/models/spree/order_updater.rb @@ -44,7 +44,7 @@ def recalculate # # The +shipment_state+ value helps with reporting, etc. since it provides a quick and easy way to locate Orders needing attention. def update_shipment_state - log_state_change('shipment') do + log_state_change("shipment") do order.shipment_state = determine_shipment_state end @@ -61,7 +61,7 @@ def update_shipment_state # # The +payment_state+ value helps with reporting, etc. since it provides a quick and easy way to locate Orders needing attention. def update_payment_state - log_state_change('payment') do + log_state_change("payment") do order.payment_state = determine_payment_state end @@ -72,28 +72,28 @@ def update_payment_state def determine_payment_state if payments.present? && payments.valid.empty? && order.outstanding_balance != 0 - 'failed' - elsif order.state == 'canceled' && order.payment_total.zero? - 'void' + "failed" + elsif order.state == "canceled" && order.payment_total.zero? + "void" elsif order.outstanding_balance > 0 - 'balance_due' + "balance_due" elsif order.outstanding_balance < 0 - 'credit_owed' + "credit_owed" else # outstanding_balance == 0 - 'paid' + "paid" end end def determine_shipment_state if order.backordered? - 'backorder' + "backorder" else # get all the shipment states for this order shipment_states = shipments.states if shipment_states.size > 1 # multiple shiment states means it's most likely partially shipped - 'partial' + "partial" else # will return nil if no shipments are found shipment_states.first @@ -217,11 +217,11 @@ def update_item_totals next unless item.changed? item.update_columns( - promo_total: item.promo_total, - included_tax_total: item.included_tax_total, + promo_total: item.promo_total, + included_tax_total: item.included_tax_total, additional_tax_total: item.additional_tax_total, - adjustment_total: item.adjustment_total, - updated_at: Time.current, + adjustment_total: item.adjustment_total, + updated_at: Time.current ) end end diff --git a/core/app/models/spree/payment.rb b/core/app/models/spree/payment.rb index 9f034f60ac7..431ec1294a8 100644 --- a/core/app/models/spree/payment.rb +++ b/core/app/models/spree/payment.rb @@ -9,17 +9,17 @@ class Payment < Spree::Base include Spree::Payment::Processing include Metadata - IDENTIFIER_CHARS = (('A'..'Z').to_a + ('0'..'9').to_a - %w(0 1 I O)).freeze - NON_RISKY_AVS_CODES = ['B', 'D', 'H', 'J', 'M', 'Q', 'T', 'V', 'X', 'Y'].freeze - RISKY_AVS_CODES = ['A', 'C', 'E', 'F', 'G', 'I', 'K', 'L', 'N', 'O', 'P', 'R', 'S', 'U', 'W', 'Z'].freeze + IDENTIFIER_CHARS = (("A".."Z").to_a + ("0".."9").to_a - %w[0 1 I O]).freeze + NON_RISKY_AVS_CODES = ["B", "D", "H", "J", "M", "Q", "T", "V", "X", "Y"].freeze + RISKY_AVS_CODES = ["A", "C", "E", "F", "G", "I", "K", "L", "N", "O", "P", "R", "S", "U", "W", "Z"].freeze - belongs_to :order, class_name: 'Spree::Order', touch: true, inverse_of: :payments, optional: true + belongs_to :order, class_name: "Spree::Order", touch: true, inverse_of: :payments, optional: true belongs_to :source, polymorphic: true, optional: true - belongs_to :payment_method, -> { with_discarded }, class_name: 'Spree::PaymentMethod', inverse_of: :payments, optional: true + belongs_to :payment_method, -> { with_discarded }, class_name: "Spree::PaymentMethod", inverse_of: :payments, optional: true has_many :log_entries, as: :source has_many :state_changes, as: :stateful - has_many :capture_events, class_name: 'Spree::PaymentCaptureEvent' + has_many :capture_events, class_name: "Spree::PaymentCaptureEvent" has_many :refunds, inverse_of: :payment before_validation :validate_source, unless: :invalid? @@ -43,17 +43,17 @@ class Payment < Spree::Base default_scope -> { order(:created_at) } - scope :from_credit_card, -> { where(source_type: 'Spree::CreditCard') } + scope :from_credit_card, -> { where(source_type: "Spree::CreditCard") } scope :with_state, ->(state) { where(state: state.to_s) } - scope :checkout, -> { with_state('checkout') } - scope :completed, -> { with_state('completed') } - scope :pending, -> { with_state('pending') } - scope :processing, -> { with_state('processing') } - scope :failed, -> { with_state('failed') } + scope :checkout, -> { with_state("checkout") } + scope :completed, -> { with_state("completed") } + scope :pending, -> { with_state("pending") } + scope :processing, -> { with_state("processing") } + scope :failed, -> { with_state("failed") } - scope :risky, -> { failed.or(where(avs_response: RISKY_AVS_CODES)).or(where.not(cvv_response_code: [nil, '', 'M'])) } - scope :valid, -> { where.not(state: %w(failed invalid void)) } + scope :risky, -> { failed.or(where(avs_response: RISKY_AVS_CODES)).or(where.not(cvv_response_code: [nil, "", "M"])) } + scope :valid, -> { where.not(state: %w[failed invalid void]) } scope :store_credits, -> { where(source_type: Spree::StoreCredit.to_s) } scope :not_store_credits, -> { where(arel_table[:source_type].not_eq(Spree::StoreCredit.to_s).or(arel_table[:source_type].eq(nil))) } @@ -70,9 +70,9 @@ def transaction_id # @return [Spree::Money] this amount of this payment as money object def money - Spree::Money.new(amount, { currency: }) + Spree::Money.new(amount, {currency:}) end - alias display_amount money + alias_method :display_amount, :money # Sets the amount, parsing it based on i18n settings if it is a string. # @@ -81,8 +81,8 @@ def amount=(amount) self[:amount] = case amount when String - separator = I18n.t('number.currency.format.separator') - number = amount.delete("^0-9-#{separator}\.").tr(separator, '.') + separator = I18n.t("number.currency.format.separator") + number = amount.delete("^0-9-#{separator}.").tr(separator, ".") number.to_d if number.present? end || amount end @@ -119,12 +119,13 @@ def payment_source # @return [Boolean] true when this payment is risky def risky? - is_avs_risky? || is_cvv_risky? || state == 'failed' + is_avs_risky? || is_cvv_risky? || state == "failed" end # @return [Boolean] true when this payment is risky based on address def is_avs_risky? return false if avs_response.blank? || NON_RISKY_AVS_CODES.include?(avs_response) + true end @@ -132,6 +133,7 @@ def is_avs_risky? def is_cvv_risky? return false if cvv_response_code == "M" return false if cvv_response_code.nil? + true end @@ -153,7 +155,8 @@ def store_credit? private def source_actions - return [] unless payment_source && payment_source.respond_to?(:actions) + return [] unless payment_source&.respond_to?(:actions) + payment_source.actions.select { |action| !payment_source.respond_to?("can_#{action}?") || payment_source.send("can_#{action}?", self) } end @@ -161,7 +164,7 @@ def validate_source if source && !source.valid? source.errors.each do |error| field_name = I18n.t("activerecord.attributes.#{source.class.to_s.underscore}.#{error.attribute}") - errors.add(I18n.t(source.class.to_s.demodulize.underscore, scope: 'spree'), "#{field_name} #{error.message}") + errors.add(I18n.t(source.class.to_s.demodulize.underscore, scope: "spree"), "#{field_name} #{error.message}") end end if errors.any? @@ -179,7 +182,7 @@ def profiles_supported? def create_payment_profile # Don't attempt to create on bad payments. - return if %w(invalid failed).include?(state) + return if %w[invalid failed].include?(state) # Payment profile cannot be created without source return unless source # Imported payments shouldn't create a payment profile. @@ -191,9 +194,9 @@ def create_payment_profile end def invalidate_old_payments - if !store_credit? && !['invalid', 'failed'].include?(state) + if !store_credit? && !["invalid", "failed"].include?(state) order.payments.select { |payment| - payment.state == 'checkout' && !payment.store_credit? && payment.id != id + payment.state == "checkout" && !payment.store_credit? && payment.id != id }.each(&:invalidate!) end end @@ -217,7 +220,7 @@ def set_unique_identifier end def generate_identifier - Array.new(8){ IDENTIFIER_CHARS.sample }.join + Array.new(8) { IDENTIFIER_CHARS.sample }.join end def create_eligible_credit_event diff --git a/core/app/models/spree/payment/cancellation.rb b/core/app/models/spree/payment/cancellation.rb index 7e7f45bd5d3..8a3dbcb1933 100644 --- a/core/app/models/spree/payment/cancellation.rb +++ b/core/app/models/spree/payment/cancellation.rb @@ -8,7 +8,7 @@ class Payment # creating a refund about the full amount instead. # class Cancellation - DEFAULT_REASON = 'Order canceled'.freeze + DEFAULT_REASON = "Order canceled" attr_reader :reason diff --git a/core/app/models/spree/payment/processing.rb b/core/app/models/spree/payment/processing.rb index a6c1b58a857..d153a9cc2e4 100644 --- a/core/app/models/spree/payment/processing.rb +++ b/core/app/models/spree/payment/processing.rb @@ -43,7 +43,7 @@ def authorize! response = payment_method.authorize( money.money.cents, source, - gateway_options, + gateway_options ) pend! if handle_response(response) end @@ -59,7 +59,7 @@ def purchase! response = payment_method.purchase( money.money.cents, source, - gateway_options, + gateway_options ) complete! if handle_response(response) end @@ -95,13 +95,13 @@ def void_transaction! return false unless amount.positive? protect_from_connection_error do - if payment_method.payment_profiles_supported? + response = if payment_method.payment_profiles_supported? # Gateways supporting payment profiles will need access to credit card object because this stores the payment profile information # so supply the authorization itself as well as the credit card, rather than just the authorization code - response = payment_method.void(response_code, source, gateway_options) + payment_method.void(response_code, source, gateway_options) else # Standard ActiveMerchant void usage - response = payment_method.void(response_code, gateway_options) + payment_method.void(response_code, gateway_options) end handle_void_response(response) @@ -170,12 +170,12 @@ def check_payment_preconditions! return unless payment_method.source_required? unless source - gateway_error(I18n.t('spree.payment_processing_failed')) + gateway_error(I18n.t("spree.payment_processing_failed")) end unless payment_method.supports?(source) invalidate! - gateway_error(I18n.t('spree.payment_method_not_supported')) + gateway_error(I18n.t("spree.payment_method_not_supported")) end true @@ -194,11 +194,11 @@ def handle_response(response) unless response.authorization.nil? self.response_code = response.authorization - self.avs_response = response.avs_result['code'] + self.avs_response = response.avs_result["code"] if response.cvv_result - self.cvv_response_code = response.cvv_result['code'] - self.cvv_response_message = response.cvv_result['message'] + self.cvv_response_code = response.cvv_result["code"] + self.cvv_response_message = response.cvv_result["message"] end end @@ -217,18 +217,18 @@ def protect_from_connection_error def gateway_error(error) message, log = case error - when ActiveMerchant::Billing::Response - [ - error.params['message'] || error.params['response_reason_text'] || error.message, - basic_response_info(error) - ] - when ActiveMerchant::ConnectionError - [I18n.t('spree.unable_to_connect_to_gateway')] * 2 - else - [error.to_s, error] - end - - logger.error("#{I18n.t('spree.gateway_error')}: #{log}") + when ActiveMerchant::Billing::Response + [ + error.params["message"] || error.params["response_reason_text"] || error.message, + basic_response_info(error) + ] + when ActiveMerchant::ConnectionError + [I18n.t("spree.unable_to_connect_to_gateway")] * 2 + else + [error.to_s, error] + end + + logger.error("#{I18n.t("spree.gateway_error")}: #{log}") raise Core::GatewayError.new(message) end diff --git a/core/app/models/spree/payment_capture_event.rb b/core/app/models/spree/payment_capture_event.rb index b6fcb143edc..7e3712fee75 100644 --- a/core/app/models/spree/payment_capture_event.rb +++ b/core/app/models/spree/payment_capture_event.rb @@ -2,10 +2,10 @@ module Spree class PaymentCaptureEvent < Spree::Base - belongs_to :payment, class_name: 'Spree::Payment', optional: true + belongs_to :payment, class_name: "Spree::Payment", optional: true def display_amount - Spree::Money.new(amount, { currency: payment.currency }) + Spree::Money.new(amount, {currency: payment.currency}) end end end diff --git a/core/app/models/spree/payment_create.rb b/core/app/models/spree/payment_create.rb index 9892bb7fa2c..454ecf9d685 100644 --- a/core/app/models/spree/payment_create.rb +++ b/core/app/models/spree/payment_create.rb @@ -55,8 +55,10 @@ def build_source def build_from_wallet_payment_source wallet_payment_source_id = source_attributes.fetch(:wallet_payment_source_id) raise(ActiveRecord::RecordNotFound) if order.user.nil? + wallet_payment_source = order.user.wallet.find(wallet_payment_source_id) raise(ActiveRecord::RecordNotFound) if wallet_payment_source.nil? + build_from_payment_source(wallet_payment_source.payment_source) end diff --git a/core/app/models/spree/payment_method.rb b/core/app/models/spree/payment_method.rb index 73eca476d10..1f84a6749ba 100644 --- a/core/app/models/spree/payment_method.rb +++ b/core/app/models/spree/payment_method.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spree/preferences/statically_configurable' +require "spree/preferences/statically_configurable" module Spree # A base class which is used for implementing payment methods. @@ -12,9 +12,10 @@ module Spree # class PaymentMethod < Spree::Base include Spree::Preferences::Persistable + class UnsupportedPaymentMethod < StandardError; end - preference :server, :string, default: 'test' + preference :server, :string, default: "test" preference :test_mode, :boolean, default: true include Spree::SoftDeletable @@ -34,6 +35,7 @@ class UnsupportedPaymentMethod < StandardError; end scope :available_to_admin, -> { where(available_to_admin: true) } scope :available_to_store, ->(store) do raise ArgumentError, "You must provide a store" if store.nil? + store.payment_methods.empty? ? all : where(id: store.payment_method_ids) end @@ -53,7 +55,7 @@ def human(options = {}) options[:default], @human ].compact - options = { scope: [:activerecord, :models], count: 1, default: defaults }.merge!(options.except(:default)) + options = {scope: [:activerecord, :models], count: 1, default: defaults}.merge!(options.except(:default)) I18n.translate(defaults.shift, **options) end end @@ -64,12 +66,12 @@ def model_name end def find_sti_class(type_name) - super(type_name) + super rescue ActiveRecord::SubclassNotFound - raise UnsupportedPaymentMethod, "Found invalid payment type '#{type_name}'.\n"\ - "This may happen after switching payment service provider, when payment methods "\ - "reference old types that are not supported any more.\n"\ - "If that is the case, consider running 'rake payment_method:deactivate_unsupported_payment_methods' "\ + raise UnsupportedPaymentMethod, "Found invalid payment type '#{type_name}'.\n" \ + "This may happen after switching payment service provider, when payment methods " \ + "reference old types that are not supported any more.\n" \ + "If that is the case, consider running 'rake payment_method:deactivate_unsupported_payment_methods' " \ "to fix the issue." end end @@ -91,7 +93,7 @@ def gateway gateway_options.delete :login if gateway_options.key?(:login) && gateway_options[:login].nil? # All environments except production considered to be test - test_server = gateway_options[:server] != 'production' + test_server = gateway_options[:server] != "production" test_mode = gateway_options[:test_mode] gateway_options[:test] = (test_server || test_mode) @@ -182,9 +184,9 @@ def supports?(_source) # @return [ActiveMerchant::Billing::Response|FalseClass] def try_void(payment) void_attempt = if payment.payment_method.payment_profiles_supported? - void(payment.transaction_id, payment.source, { originator: payment }) + void(payment.transaction_id, payment.source, {originator: payment}) else - void(payment.transaction_id, { originator: payment }) + void(payment.transaction_id, {originator: payment}) end return void_attempt if void_attempt.success? diff --git a/core/app/models/spree/payment_method/bogus_credit_card.rb b/core/app/models/spree/payment_method/bogus_credit_card.rb index 85e24734ce6..20055bccc9b 100644 --- a/core/app/models/spree/payment_method/bogus_credit_card.rb +++ b/core/app/models/spree/payment_method/bogus_credit_card.rb @@ -2,16 +2,16 @@ module Spree class PaymentMethod::BogusCreditCard < PaymentMethod::CreditCard - TEST_VISA = ['4111111111111111', '4012888888881881', '4222222222222'] - TEST_MC = ['5500000000000004', '5555555555554444', '5105105105105100'] - TEST_AMEX = ['378282246310005', '371449635398431', '378734493671000', '340000000000009'] - TEST_DISC = ['6011000000000004', '6011111111111117', '6011000990139424'] + TEST_VISA = ["4111111111111111", "4012888888881881", "4222222222222"] + TEST_MC = ["5500000000000004", "5555555555554444", "5105105105105100"] + TEST_AMEX = ["378282246310005", "371449635398431", "378734493671000", "340000000000009"] + TEST_DISC = ["6011000000000004", "6011111111111117", "6011000990139424"] - VALID_CCS = ['1', TEST_VISA, TEST_MC, TEST_AMEX, TEST_DISC].flatten + VALID_CCS = ["1", TEST_VISA, TEST_MC, TEST_AMEX, TEST_DISC].flatten - AUTHORIZATION_CODE = '12345' - FAILURE_MESSAGE = 'Bogus Gateway: Forced failure' - SUCCESS_MESSAGE = 'Bogus Gateway: Forced success' + AUTHORIZATION_CODE = "12345" + FAILURE_MESSAGE = "Bogus Gateway: Forced failure" + SUCCESS_MESSAGE = "Bogus Gateway: Forced success" attr_accessor :test @@ -21,6 +21,7 @@ def gateway_class def create_profile(payment) return if payment.source.has_payment_profile? + # simulate the storage of credit card profile using remote service if success = VALID_CCS.include?(payment.source.number) payment.source.update(gateway_customer_profile_id: generate_profile_id(success)) @@ -30,18 +31,18 @@ def create_profile(payment) def authorize(_money, credit_card, _options = {}) profile_id = credit_card.gateway_customer_profile_id message_detail = " - #{__method__}" - if VALID_CCS.include?(credit_card.number) || (profile_id && profile_id.starts_with?('BGS-')) - ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: { code: 'D' }) + if VALID_CCS.include?(credit_card.number) || profile_id&.starts_with?("BGS-") + ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: {code: "D"}) else - ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE + message_detail, { message: FAILURE_MESSAGE + message_detail }, test: true) + ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE + message_detail, {message: FAILURE_MESSAGE + message_detail}, test: true) end end def purchase(_money, credit_card, _options = {}) profile_id = credit_card.gateway_customer_profile_id message_detail = " - #{__method__}" - if VALID_CCS.include?(credit_card.number) || (profile_id && profile_id.starts_with?('BGS-')) - ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: { code: 'M' }) + if VALID_CCS.include?(credit_card.number) || profile_id&.starts_with?("BGS-") + ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: {code: "M"}) else ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE + message_detail, message: FAILURE_MESSAGE + message_detail, test: true) end @@ -54,7 +55,7 @@ def credit(_money, _credit_card, _response_code, _options = {}) def capture(_money, authorization, _gateway_options) message_detail = " - #{__method__}" - if authorization == '12345' + if authorization == "12345" ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true) else ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE + message_detail, error: FAILURE_MESSAGE + message_detail, test: true) @@ -80,16 +81,16 @@ def payment_profiles_supported? end def actions - %w(capture void credit) + %w[capture void credit] end private def generate_profile_id(success) record = true - prefix = success ? 'BGS' : 'FAIL' + prefix = success ? "BGS" : "FAIL" while record - random = "#{prefix}-#{Array.new(6){ rand(6) }.join}" + random = "#{prefix}-#{Array.new(6) { rand(6) }.join}" record = Spree::CreditCard.where(gateway_customer_profile_id: random).first end random diff --git a/core/app/models/spree/payment_method/check.rb b/core/app/models/spree/payment_method/check.rb index 6dd38a430ea..ae645504381 100644 --- a/core/app/models/spree/payment_method/check.rb +++ b/core/app/models/spree/payment_method/check.rb @@ -3,17 +3,17 @@ module Spree class PaymentMethod::Check < PaymentMethod def actions - %w{capture void credit} + %w[capture void credit] end # Indicates whether its possible to capture the payment def can_capture?(payment) - ['checkout', 'pending'].include?(payment.state) + ["checkout", "pending"].include?(payment.state) end # Indicates whether its possible to void the payment. def can_void?(payment) - payment.state != 'void' + payment.state != "void" end def capture(*) diff --git a/core/app/models/spree/payment_method/credit_card.rb b/core/app/models/spree/payment_method/credit_card.rb index 6e268cf1664..bf2a14927af 100644 --- a/core/app/models/spree/payment_method/credit_card.rb +++ b/core/app/models/spree/payment_method/credit_card.rb @@ -10,12 +10,13 @@ def payment_source_class end def partial_name - 'gateway' + "gateway" end def supports?(source) return true unless gateway_class.respond_to? :supports? return true if source.brand && gateway_class.supports?(source.brand) + source.has_payment_profile? end diff --git a/core/app/models/spree/payment_method/simple_bogus_credit_card.rb b/core/app/models/spree/payment_method/simple_bogus_credit_card.rb index 46372c69047..5180be4be01 100644 --- a/core/app/models/spree/payment_method/simple_bogus_credit_card.rb +++ b/core/app/models/spree/payment_method/simple_bogus_credit_card.rb @@ -11,9 +11,9 @@ def authorize(_money, credit_card, _options = {}) message_detail = " - #{__method__}" if VALID_CCS.include? credit_card.number - ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: { code: 'A' }) + ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: {code: "A"}) else - ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE + message_detail, { message: FAILURE_MESSAGE }, test: true) + ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE + message_detail, {message: FAILURE_MESSAGE}, test: true) end end @@ -21,7 +21,7 @@ def purchase(_money, credit_card, _options = {}) message_detail = " - #{__method__}" if VALID_CCS.include? credit_card.number - ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: { code: 'A' }) + ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: {code: "A"}) else ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE + message_detail, message: FAILURE_MESSAGE, test: true) end diff --git a/core/app/models/spree/payment_method/store_credit.rb b/core/app/models/spree/payment_method/store_credit.rb index 7a3f277e157..78c0dee6fbc 100644 --- a/core/app/models/spree/payment_method/store_credit.rb +++ b/core/app/models/spree/payment_method/store_credit.rb @@ -8,11 +8,11 @@ def payment_source_class def authorize(amount_in_cents, provided_store_credit, gateway_options = {}) if provided_store_credit.nil? - ActiveMerchant::Billing::Response.new(false, I18n.t('spree.store_credit.unable_to_find'), {}, {}) + ActiveMerchant::Billing::Response.new(false, I18n.t("spree.store_credit.unable_to_find"), {}, {}) else action = ->(store_credit) { store_credit.authorize( - amount_in_cents / 100.0.to_d, + amount_in_cents / BigDecimal("100.0"), gateway_options[:currency], action_originator: gateway_options[:originator] ) @@ -24,7 +24,7 @@ def authorize(amount_in_cents, provided_store_credit, gateway_options = {}) def capture(amount_in_cents, auth_code, gateway_options = {}) action = ->(store_credit) { store_credit.capture( - amount_in_cents / 100.0.to_d, + amount_in_cents / BigDecimal("100.0"), auth_code, gateway_options[:currency], action_originator: gateway_options[:originator] @@ -35,14 +35,14 @@ def capture(amount_in_cents, auth_code, gateway_options = {}) end def purchase(amount_in_cents, store_credit, gateway_options = {}) - eligible_events = store_credit.store_credit_events.where(amount: amount_in_cents / 100.0.to_d, action: Spree::StoreCredit::ELIGIBLE_ACTION) + eligible_events = store_credit.store_credit_events.where(amount: amount_in_cents / BigDecimal("100.0"), action: Spree::StoreCredit::ELIGIBLE_ACTION) event = eligible_events.find do |eligible_event| store_credit.store_credit_events.where(authorization_code: eligible_event.authorization_code) - .where.not(action: Spree::StoreCredit::ELIGIBLE_ACTION).empty? + .where.not(action: Spree::StoreCredit::ELIGIBLE_ACTION).empty? end if event.blank? - ActiveMerchant::Billing::Response.new(false, I18n.t('spree.store_credit.unable_to_find'), {}, {}) + ActiveMerchant::Billing::Response.new(false, I18n.t("spree.store_credit.unable_to_find"), {}, {}) else capture(amount_in_cents, event.authorization_code, gateway_options) end @@ -60,7 +60,7 @@ def credit(amount_in_cents, auth_code, gateway_options = {}) currency = gateway_options[:currency] || store_credit.currency originator = gateway_options[:originator] - store_credit.credit(amount_in_cents / 100.0.to_d, auth_code, currency, action_originator: originator) + store_credit.credit(amount_in_cents / BigDecimal("100.0"), auth_code, currency, action_originator: originator) end handle_action(action, :credit, auth_code) @@ -73,13 +73,13 @@ def try_void(payment) store_credit = store_credit_event.try(:store_credit) if store_credit_event.nil? || store_credit.nil? - ActiveMerchant::Billing::Response.new(false, '', {}, {}) + ActiveMerchant::Billing::Response.new(false, "", {}, {}) elsif store_credit_event.capture_action? false # payment#cancel! handles the refund elsif store_credit_event.authorization_action? void(auth_code) else - ActiveMerchant::Billing::Response.new(false, '', {}, {}) + ActiveMerchant::Billing::Response.new(false, "", {}, {}) end end @@ -94,8 +94,8 @@ def handle_action_call(store_credit, action, action_name, auth_code = nil) if response = action.call(store_credit) # note that we only need to return the auth code on an 'auth', but it's innocuous to always return ActiveMerchant::Billing::Response.new(true, - I18n.t('spree.store_credit.successful_action', action: action_name), - {}, { authorization: auth_code || response }) + I18n.t("spree.store_credit.successful_action", action: action_name), + {}, {authorization: auth_code || response}) else ActiveMerchant::Billing::Response.new(false, store_credit.errors.full_messages.join, {}, {}) end @@ -107,7 +107,7 @@ def handle_action(action, action_name, auth_code) store_credit = Spree::StoreCreditEvent.find_by(authorization_code: auth_code).try(:store_credit) if store_credit.nil? - ActiveMerchant::Billing::Response.new(false, I18n.t('spree.store_credit.unable_to_find_for_action', auth_code:, action: action_name), {}, {}) + ActiveMerchant::Billing::Response.new(false, I18n.t("spree.store_credit.unable_to_find_for_action", auth_code:, action: action_name), {}, {}) else handle_action_call(store_credit, action, action_name, auth_code) end diff --git a/core/app/models/spree/payment_source.rb b/core/app/models/spree/payment_source.rb index 0832fc5de76..7d583ea5423 100644 --- a/core/app/models/spree/payment_source.rb +++ b/core/app/models/spree/payment_source.rb @@ -8,7 +8,7 @@ class PaymentSource < Spree::Base has_many :payments, as: :source has_many :wallet_payment_sources, - class_name: 'Spree::WalletPaymentSource', + class_name: "Spree::WalletPaymentSource", as: :payment_source, inverse_of: :payment_source, dependent: :destroy @@ -17,7 +17,7 @@ class PaymentSource < Spree::Base # @return [Array] the actions available on this payment source def actions - %w(capture void credit) + %w[capture void credit] end # @param payment [Spree::Payment] the payment we want to know if can be captured diff --git a/core/app/models/spree/permission_sets/dashboard_display.rb b/core/app/models/spree/permission_sets/dashboard_display.rb index 09e43a70b31..a49687dcd81 100644 --- a/core/app/models/spree/permission_sets/dashboard_display.rb +++ b/core/app/models/spree/permission_sets/dashboard_display.rb @@ -19,9 +19,9 @@ def category end def activate! - Spree.deprecator.warn "The #{self.class.name} module is deprecated. " \ - "If you still use dashboards, please copy all controllers and views from #{self.class.name} to your application." - can [:admin, :home], :dashboards + Spree.deprecator.warn "The #{self.class.name} module is deprecated. " \ + "If you still use dashboards, please copy all controllers and views from #{self.class.name} to your application." + can [:admin, :home], :dashboards end end end diff --git a/core/app/models/spree/permission_sets/default_customer.rb b/core/app/models/spree/permission_sets/default_customer.rb index eb01825f4ff..e093f6083a7 100644 --- a/core/app/models/spree/permission_sets/default_customer.rb +++ b/core/app/models/spree/permission_sets/default_customer.rb @@ -70,7 +70,7 @@ def activate! can :create, Spree.user_class can [:show, :update, :update_email], Spree.user_class, id: user.id can :read, State - can :read, StockItem, stock_location: { active: true } + can :read, StockItem, stock_location: {active: true} can :read, StockLocation, active: true can :read, Taxon can :read, Taxonomy diff --git a/core/app/models/spree/preference.rb b/core/app/models/spree/preference.rb index 52c927d4153..4165a694a04 100644 --- a/core/app/models/spree/preference.rb +++ b/core/app/models/spree/preference.rb @@ -3,5 +3,5 @@ class Spree::Preference < Spree::Base serialize :value, coder: YAML - validates :key, presence: true, uniqueness: { allow_blank: true, case_sensitive: true } + validates :key, presence: true, uniqueness: {allow_blank: true, case_sensitive: true} end diff --git a/core/app/models/spree/price.rb b/core/app/models/spree/price.rb index 36a957468db..7f4a317de50 100644 --- a/core/app/models/spree/price.rb +++ b/core/app/models/spree/price.rb @@ -4,9 +4,9 @@ module Spree class Price < Spree::Base include Spree::SoftDeletable - MAXIMUM_AMOUNT = BigDecimal('99_999_999.99') + MAXIMUM_AMOUNT = BigDecimal("99_999_999.99") - belongs_to :variant, -> { with_discarded }, class_name: 'Spree::Variant', touch: true, optional: true + belongs_to :variant, -> { with_discarded }, class_name: "Spree::Variant", touch: true, optional: true belongs_to :country, class_name: "Spree::Country", foreign_key: "country_iso", primary_key: "iso", optional: true delegate :product, to: :variant @@ -17,20 +17,21 @@ class Price < Spree::Base greater_than_or_equal_to: 0, less_than_or_equal_to: MAXIMUM_AMOUNT } - validates :currency, inclusion: { in: ::Money::Currency.all.map(&:iso_code), message: :invalid_code } + validates :currency, inclusion: {in: ::Money::Currency.all.map(&:iso_code), message: :invalid_code} validates :country, presence: true, unless: -> { for_any_country? } scope :currently_valid, -> { order(Arel.sql("country_iso IS NULL")).order(updated_at: :DESC, id: :DESC) } - scope :for_master, -> { joins(:variant).where(spree_variants: { is_master: true }) } - scope :for_variant, -> { joins(:variant).where(spree_variants: { is_master: false }) } + scope :for_master, -> { joins(:variant).where(spree_variants: {is_master: true}) } + scope :for_variant, -> { joins(:variant).where(spree_variants: {is_master: false}) } scope :for_any_country, -> { where(country: nil) } scope :with_default_attributes, -> { where(Spree::Config.default_pricing_options.desired_attributes) } extend DisplayMoney + money_methods :amount, :price alias_method :money, :display_amount - self.allowed_ransackable_attributes = %w(amount variant_id currency country_iso) + self.allowed_ransackable_attributes = %w[amount variant_id currency country_iso] # An alias for #amount def price @@ -69,6 +70,7 @@ def country_iso=(country_iso) def sum_of_vat_amounts return 0 unless variant.tax_category + tax_rates.included_in_price.for_country(country).sum(:amount) end diff --git a/core/app/models/spree/product.rb b/core/app/models/spree/product.rb index 223fd2dad91..02b8f619d5c 100644 --- a/core/app/models/spree/product.rb +++ b/core/app/models/spree/product.rb @@ -7,6 +7,7 @@ module Spree # variant. class Product < Spree::Base extend FriendlyId + friendly_id :slug_candidates, use: :history include Spree::SoftDeletable @@ -15,7 +16,7 @@ class Product < Spree::Base variants_including_master.discard_all self.product_option_types = [] self.product_properties = [] - self.classifications.destroy_all + classifications.destroy_all end has_many :product_option_types, dependent: :destroy, inverse_of: :product @@ -30,27 +31,27 @@ class Product < Spree::Base has_many :classifications, dependent: :delete_all, inverse_of: :product has_many :taxons, through: :classifications, before_remove: :remove_taxon - belongs_to :tax_category, class_name: 'Spree::TaxCategory', optional: true - belongs_to :shipping_category, class_name: 'Spree::ShippingCategory', inverse_of: :products - belongs_to :primary_taxon, class_name: 'Spree::Taxon', optional: true + belongs_to :tax_category, class_name: "Spree::TaxCategory", optional: true + belongs_to :shipping_category, class_name: "Spree::ShippingCategory", inverse_of: :products + belongs_to :primary_taxon, class_name: "Spree::Taxon", optional: true has_one :master, -> { where(is_master: true).with_discarded }, inverse_of: :product, - class_name: 'Spree::Variant', + class_name: "Spree::Variant", autosave: true, dependent: false has_many :variants, -> { where(is_master: false).order(:position) }, inverse_of: :product, - class_name: 'Spree::Variant', + class_name: "Spree::Variant", dependent: false has_many :variants_including_master, -> { order(:position) }, inverse_of: :product, - class_name: 'Spree::Variant', + class_name: "Spree::Variant", dependent: :destroy has_many :prices, -> { order(Spree::Variant.arel_table[:position].asc, Spree::Variant.arel_table[:id].asc, :currency) }, through: :variants_including_master @@ -63,14 +64,14 @@ class Product < Spree::Base has_many :option_values, -> { distinct }, through: :variants_including_master scope :sort_by_master_default_price_amount_asc, -> { - with_default_price.order('spree_prices.amount ASC') + with_default_price.order("spree_prices.amount ASC") } scope :sort_by_master_default_price_amount_desc, -> { - with_default_price.order('spree_prices.amount DESC') + with_default_price.order("spree_prices.amount DESC") } scope :with_default_price, -> { left_joins(master: :prices) - .where(master: { spree_prices: Spree::Config.default_pricing_options.desired_attributes }) + .where(master: {spree_prices: Spree::Config.default_pricing_options.desired_attributes}) } def find_or_build_master @@ -95,13 +96,13 @@ def find_or_build_master end delegate :amount_in, - :display_amount, - :display_price, - :has_default_price?, - :images, - :price_for_options, - :rebuild_vat_prices=, - to: :find_or_build_master + :display_amount, + :display_price, + :has_default_price?, + :images, + :price_for_options, + :rebuild_vat_prices=, + to: :find_or_build_master alias_method :master_images, :images @@ -120,18 +121,18 @@ def find_or_build_master before_validation :normalize_slug, on: :update before_validation :validate_master - validates :meta_keywords, length: { maximum: 255 } - validates :meta_title, length: { maximum: 255 } + validates :meta_keywords, length: {maximum: 255} + validates :meta_title, length: {maximum: 255} validates :name, presence: true validates :price, presence: true, if: proc { Spree::Config[:require_master_price] } - validates :slug, presence: true, uniqueness: { allow_blank: true, case_sensitive: true } + validates :slug, presence: true, uniqueness: {allow_blank: true, case_sensitive: true} attr_accessor :option_values_hash accepts_nested_attributes_for :variant_property_rules, allow_destroy: true accepts_nested_attributes_for :product_properties, allow_destroy: true, reject_if: lambda { |pp| pp[:property_name].blank? } - alias :options :product_option_types + alias_method :options, :product_option_types self.allowed_ransackable_associations = %w[stores variants_including_master master variants option_values] self.allowed_ransackable_attributes = %w[name slug] @@ -153,6 +154,7 @@ def tax_category # @return [Array] the option_values def ensure_option_types_exist_for_values_hash return if option_values_hash.nil? + required_option_type_ids = option_values_hash.keys.map(&:to_i) self.option_type_ids |= required_option_type_ids end @@ -225,24 +227,25 @@ def variants_and_option_values_for(pricing_options = Spree::Config.default_prici # associated with the products variants grouped by option type def variant_option_values_by_option_type(variant_scope = nil) option_value_scope = Spree::OptionValuesVariant.joins(:variant) - .where(spree_variants: { product_id: id }) + .where(spree_variants: {product_id: id}) option_value_scope = option_value_scope.merge(variant_scope) if variant_scope option_value_ids = option_value_scope.distinct.pluck(:option_value_id) - Spree::OptionValue.where(id: option_value_ids). - includes(:option_type). - order("#{Spree::OptionType.table_name}.position, #{Spree::OptionValue.table_name}.position"). - group_by(&:option_type) + Spree::OptionValue.where(id: option_value_ids) + .includes(:option_type) + .order("#{Spree::OptionType.table_name}.position, #{Spree::OptionValue.table_name}.position") + .group_by(&:option_type) end # @return [Boolean] true if there are no option values def empty_option_values? - options.empty? || !option_types.left_joins(:option_values).where('spree_option_values.id IS NULL').empty? + options.empty? || !option_types.left_joins(:option_values).where("spree_option_values.id IS NULL").empty? end # @param property_name [String] the name of the property to find # @return [String] the value of the given property. nil if property is undefined on this product def property(property_name) return nil unless prop = properties.find_by(name: property_name) + product_properties.find_by(property: prop).try(:value) end @@ -326,6 +329,7 @@ def build_variants_from_option_values_hash def ensure_master return unless new_record? + find_or_build_master end @@ -377,4 +381,4 @@ def remove_taxon(taxon) end end -require_dependency 'spree/product/scopes' +require_dependency "spree/product/scopes" diff --git a/core/app/models/spree/product/scopes.rb b/core/app/models/spree/product/scopes.rb index 2ec103ec7d5..e05608b4f12 100644 --- a/core/app/models/spree/product/scopes.rb +++ b/core/app/models/spree/product/scopes.rb @@ -17,9 +17,9 @@ def self.add_search_scope(name, &block) def self.property_conditions(property) properties = Property.table_name case property - when String then { "#{properties}.name" => property } - when Property then { "#{properties}.id" => property.id } - else { "#{properties}.id" => property.to_i } + when String then {"#{properties}.name" => property} + when Property then {"#{properties}.id" => property.id} + else {"#{properties}.id" => property.to_i} end end @@ -29,17 +29,17 @@ def self.property_conditions(property) scope :descend_by_name, -> { order(name: :desc) } add_search_scope :ascend_by_master_price do - joins(master: :prices).select('spree_products.* , spree_prices.amount') - .order(Spree::Price.arel_table[:amount].asc) + joins(master: :prices).select("spree_products.* , spree_prices.amount") + .order(Spree::Price.arel_table[:amount].asc) end add_search_scope :descend_by_master_price do - joins(master: :prices).select('spree_products.* , spree_prices.amount') - .order(Spree::Price.arel_table[:amount].desc) + joins(master: :prices).select("spree_products.* , spree_prices.amount") + .order(Spree::Price.arel_table[:amount].desc) end add_search_scope :price_between do |low, high| - joins(master: :prices).where(Price.table_name => { amount: low..high }) + joins(master: :prices).where(Price.table_name => {amount: low..high}) end add_search_scope :master_price_lte do |price| @@ -69,7 +69,7 @@ def self.property_conditions(property) # SELECT COUNT(*) ... add_search_scope :in_taxon do |taxon| includes(:classifications) - .where('spree_products_taxons.taxon_id' => taxon.self_and_descendants.pluck(:id)) + .where("spree_products_taxons.taxon_id" => taxon.self_and_descendants.pluck(:id)) .order(Spree::Classification.arel_table[:position].asc) end @@ -98,9 +98,9 @@ def self.property_conditions(property) add_search_scope :with_option do |option| option_types = Spree::OptionType.table_name conditions = case option - when String then { "#{option_types}.name" => option } - when OptionType then { "#{option_types}.id" => option.id } - else { "#{option_types}.id" => option.to_i } + when String then {"#{option_types}.name" => option} + when OptionType then {"#{option_types}.id" => option.id} + else {"#{option_types}.id" => option.to_i} end joins(:option_types).where(conditions) @@ -109,22 +109,22 @@ def self.property_conditions(property) add_search_scope :with_option_value do |option, value| option_values = Spree::OptionValue.table_name option_type_id = case option - when String then Spree::OptionType.find_by(name: option) || option.to_i - when Spree::OptionType then option.id - else option.to_i + when String then Spree::OptionType.find_by(name: option) || option.to_i + when Spree::OptionType then option.id + else option.to_i end conditions = "#{option_values}.name = ? AND #{option_values}.option_type_id = ?", value, option_type_id - group('spree_products.id').joins(variants_including_master: :option_values).where(conditions) + group("spree_products.id").joins(variants_including_master: :option_values).where(conditions) end # Finds all products which have either: # 1) have an option value with the name matching the one given # 2) have a product property with a value matching the one given add_search_scope :with do |value| - includes(variants_including_master: :option_values). - includes(:product_properties). - where("#{Spree::OptionValue.table_name}.name = ? OR #{Spree::ProductProperty.table_name}.value = ?", value, value) + includes(variants_including_master: :option_values) + .includes(:product_properties) + .where("#{Spree::OptionValue.table_name}.name = ? OR #{Spree::ProductProperty.table_name}.value = ?", value, value) end # Finds all products that have a name containing the given words. @@ -157,8 +157,8 @@ def self.property_conditions(property) # joins: "LEFT OUTER JOIN (SELECT line_items.variant_id as vid, COUNT(*) as cnt FROM line_items GROUP BY line_items.variant_id) AS popularity_count ON variants.id = vid", # order: 'COALESCE(cnt, 0) DESC' add_search_scope :descend_by_popularity do - joins(:master). - order(Arel.sql(%{ + joins(:master) + .order(Arel.sql(%{ COALESCE(( SELECT COUNT(#{Spree::LineItem.quoted_table_name}.id) @@ -230,10 +230,10 @@ def prepare_taxon_conditions(taxons) # Produce an array of keywords for use in scopes. # Always return array with at least an empty string to avoid SQL errors def prepare_words(words) - return [''] if words.blank? + return [""] if words.blank? splitted = words.split(/[,\s]/).map(&:strip) - splitted.any? ? splitted : [''] + splitted.any? ? splitted : [""] end def get_taxons(*ids_or_records_or_names) diff --git a/core/app/models/spree/product_option_type.rb b/core/app/models/spree/product_option_type.rb index 4c0f398ea7a..0dc18316e49 100644 --- a/core/app/models/spree/product_option_type.rb +++ b/core/app/models/spree/product_option_type.rb @@ -2,8 +2,8 @@ module Spree class ProductOptionType < Spree::Base - belongs_to :product, class_name: 'Spree::Product', inverse_of: :product_option_types, touch: true - belongs_to :option_type, class_name: 'Spree::OptionType', inverse_of: :product_option_types + belongs_to :product, class_name: "Spree::Product", inverse_of: :product_option_types, touch: true + belongs_to :option_type, class_name: "Spree::OptionType", inverse_of: :product_option_types acts_as_list scope: :product end end diff --git a/core/app/models/spree/product_property.rb b/core/app/models/spree/product_property.rb index 21d408fb886..6adf2576857 100644 --- a/core/app/models/spree/product_property.rb +++ b/core/app/models/spree/product_property.rb @@ -6,9 +6,9 @@ class ProductProperty < Spree::Base acts_as_list scope: :product - belongs_to :product, touch: true, class_name: 'Spree::Product', inverse_of: :product_properties - belongs_to :property, class_name: 'Spree::Property', inverse_of: :product_properties + belongs_to :product, touch: true, class_name: "Spree::Product", inverse_of: :product_properties + belongs_to :property, class_name: "Spree::Property", inverse_of: :product_properties - self.allowed_ransackable_attributes = ['value'] + self.allowed_ransackable_attributes = ["value"] end end diff --git a/core/app/models/spree/refund.rb b/core/app/models/spree/refund.rb index 2727177c6a7..7a033fed4b4 100644 --- a/core/app/models/spree/refund.rb +++ b/core/app/models/spree/refund.rb @@ -5,14 +5,14 @@ class Refund < Spree::Base include Metadata belongs_to :payment, inverse_of: :refunds, optional: true - belongs_to :reason, class_name: 'Spree::RefundReason', foreign_key: :refund_reason_id, optional: true + belongs_to :reason, class_name: "Spree::RefundReason", foreign_key: :refund_reason_id, optional: true belongs_to :reimbursement, inverse_of: :refunds, optional: true has_many :log_entries, as: :source validates :payment, presence: true validates :reason, presence: true - validates :amount, presence: true, numericality: { greater_than: 0 } + validates :amount, presence: true, numericality: {greater_than: 0} validate :amount_is_less_than_or_equal_to_allowed_amount, on: :create @@ -23,9 +23,9 @@ class Refund < Spree::Base delegate :currency, to: :payment def money - Spree::Money.new(amount, { currency: }) + Spree::Money.new(amount, {currency:}) end - alias display_amount money + alias_method :display_amount, :money class << self def total_amount_reimbursed_for(reimbursement) @@ -68,21 +68,21 @@ def perform! # return an activemerchant response object if successful or else raise an error def process!(credit_cents) response = if payment.payment_method.payment_profiles_supported? - payment.payment_method.credit(credit_cents, payment.source, payment.transaction_id, { originator: self }) + payment.payment_method.credit(credit_cents, payment.source, payment.transaction_id, {originator: self}) else - payment.payment_method.credit(credit_cents, payment.transaction_id, { originator: self }) + payment.payment_method.credit(credit_cents, payment.transaction_id, {originator: self}) end if !response.success? - logger.error(I18n.t('spree.gateway_error') + " #{response.to_yaml}") - text = response.params['message'] || response.params['response_reason_text'] || response.message + logger.error(I18n.t("spree.gateway_error") + " #{response.to_yaml}") + text = response.params["message"] || response.params["response_reason_text"] || response.message raise Core::GatewayError.new(text) end response rescue ActiveMerchant::ConnectionError => error - logger.error(I18n.t('spree.gateway_error') + " #{error.inspect}") - raise Core::GatewayError.new(I18n.t('spree.unable_to_connect_to_gateway')) + logger.error(I18n.t("spree.gateway_error") + " #{error.inspect}") + raise Core::GatewayError.new(I18n.t("spree.unable_to_connect_to_gateway")) end def amount_is_less_than_or_equal_to_allowed_amount diff --git a/core/app/models/spree/refund_reason.rb b/core/app/models/spree/refund_reason.rb index 285f1bee494..2d2202702fa 100644 --- a/core/app/models/spree/refund_reason.rb +++ b/core/app/models/spree/refund_reason.rb @@ -5,9 +5,9 @@ class RefundReason < Spree::Base scope :active, -> { where(active: true) } default_scope -> { order(arel_table[:name].lower) } - validates :name, presence: true, uniqueness: { case_sensitive: false, allow_blank: true } + validates :name, presence: true, uniqueness: {case_sensitive: false, allow_blank: true} - RETURN_PROCESSING_REASON = 'Return processing' + RETURN_PROCESSING_REASON = "Return processing" has_many :refunds diff --git a/core/app/models/spree/reimbursement.rb b/core/app/models/spree/reimbursement.rb index 824f1edccf7..4ce5c78d05d 100644 --- a/core/app/models/spree/reimbursement.rb +++ b/core/app/models/spree/reimbursement.rb @@ -8,7 +8,7 @@ class IncompleteReimbursementError < StandardError; end belongs_to :customer_return, inverse_of: :reimbursements, touch: true, optional: true has_many :refunds, inverse_of: :reimbursement - has_many :credits, inverse_of: :reimbursement, class_name: 'Spree::Reimbursement::Credit' + has_many :credits, inverse_of: :reimbursement, class_name: "Spree::Reimbursement::Credit" has_many :return_items, inverse_of: :reimbursement @@ -20,7 +20,7 @@ class IncompleteReimbursementError < StandardError; end before_create :generate_number before_create :calculate_total - scope :reimbursed, -> { where(reimbursement_status: 'reimbursed') } + scope :reimbursed, -> { where(reimbursement_status: "reimbursed") } # The reimbursement_tax_calculator property should be set to an object that responds to "call" # and accepts a reimbursement object. Invoking "call" should update the tax fields on the @@ -64,7 +64,7 @@ def build_from_customer_return(customer_return) end def display_total - Spree::Money.new(total, { currency: order.currency }) + Spree::Money.new(total, {currency: order.currency}) end def calculated_total @@ -150,7 +150,7 @@ def calculate_total def generate_number self.number ||= loop do - random = "RI#{Array.new(9){ rand(9) }.join}" + random = "RI#{Array.new(9) { rand(9) }.join}" break random unless self.class.exists?(number: random) end end @@ -172,10 +172,10 @@ def unpaid_amount_within_tolerance? model.total_amount_reimbursed_for(self) > 0 end leniency = if reimbursement_count > 0 - (reimbursement_count - 1) * 0.01.to_d - else - 0 - end + (reimbursement_count - 1) * BigDecimal("0.01") + else + 0 + end unpaid_amount.abs.between?(0, leniency) end end diff --git a/core/app/models/spree/reimbursement/credit.rb b/core/app/models/spree/reimbursement/credit.rb index 2119656b81e..13b2c065c33 100644 --- a/core/app/models/spree/reimbursement/credit.rb +++ b/core/app/models/spree/reimbursement/credit.rb @@ -22,7 +22,7 @@ def description end def display_amount - Spree::Money.new(amount, { currency: creditable.try(:currency) || "USD" }) + Spree::Money.new(amount, {currency: creditable.try(:currency) || "USD"}) end end end diff --git a/core/app/models/spree/reimbursement/reimbursement_type_engine.rb b/core/app/models/spree/reimbursement/reimbursement_type_engine.rb index 145351ab477..594f252e351 100644 --- a/core/app/models/spree/reimbursement/reimbursement_type_engine.rb +++ b/core/app/models/spree/reimbursement/reimbursement_type_engine.rb @@ -50,6 +50,7 @@ def calculate_reimbursement_type(return_item) def add_reimbursement_type(return_item, reimbursement_type) return unless reimbursement_type + @reimbursement_type_hash[reimbursement_type] << return_item end end diff --git a/core/app/models/spree/reimbursement_tax_calculator.rb b/core/app/models/spree/reimbursement_tax_calculator.rb index 500b77ffcab..cc79610e6dd 100644 --- a/core/app/models/spree/reimbursement_tax_calculator.rb +++ b/core/app/models/spree/reimbursement_tax_calculator.rb @@ -23,7 +23,7 @@ def set_tax!(return_item) percent_of_tax = (return_item.amount <= 0) ? 0 : return_item.amount / Spree::ReturnItem.refund_amount_calculator.new.compute(return_item) additional_tax_total = percent_of_tax * return_item.inventory_unit.additional_tax_total - included_tax_total = percent_of_tax * return_item.inventory_unit.included_tax_total + included_tax_total = percent_of_tax * return_item.inventory_unit.included_tax_total return_item.update!({ additional_tax_total:, diff --git a/core/app/models/spree/reimbursement_type.rb b/core/app/models/spree/reimbursement_type.rb index d0032f93bec..a4d01b7b0b6 100644 --- a/core/app/models/spree/reimbursement_type.rb +++ b/core/app/models/spree/reimbursement_type.rb @@ -5,9 +5,9 @@ class ReimbursementType < Spree::Base scope :active, -> { where(active: true) } default_scope -> { order(arel_table[:name].lower) } - validates :name, presence: true, uniqueness: { case_sensitive: false, allow_blank: true } + validates :name, presence: true, uniqueness: {case_sensitive: false, allow_blank: true} - ORIGINAL = 'original' + ORIGINAL = "original" has_many :return_items diff --git a/core/app/models/spree/return_authorization.rb b/core/app/models/spree/return_authorization.rb index c37ec82c43c..cb854aa8b08 100644 --- a/core/app/models/spree/return_authorization.rb +++ b/core/app/models/spree/return_authorization.rb @@ -6,14 +6,14 @@ module Spree class ReturnAuthorization < Spree::Base include Metadata - belongs_to :order, class_name: 'Spree::Order', inverse_of: :return_authorizations, optional: true + belongs_to :order, class_name: "Spree::Order", inverse_of: :return_authorizations, optional: true has_many :return_items, inverse_of: :return_authorization, dependent: :destroy has_many :inventory_units, through: :return_items, dependent: :nullify has_many :customer_returns, through: :return_items belongs_to :stock_location, optional: true - belongs_to :reason, class_name: 'Spree::ReturnReason', foreign_key: :return_reason_id, optional: true + belongs_to :reason, class_name: "Spree::ReturnReason", foreign_key: :return_reason_id, optional: true before_create :generate_number @@ -27,9 +27,10 @@ class ReturnAuthorization < Spree::Base include ::Spree::Config.state_machines.return_authorization extend DisplayMoney + money_methods :amount, :total_excluding_vat - self.allowed_ransackable_attributes = ['memo'] + self.allowed_ransackable_attributes = ["memo"] def total_excluding_vat return_items.sum(&:total_excluding_vat) @@ -59,20 +60,20 @@ def can_cancel_return_items? def must_have_shipped_units if order.nil? || order.inventory_units.shipped.none? - errors.add(:order, I18n.t('spree.has_no_shipped_units')) + errors.add(:order, I18n.t("spree.has_no_shipped_units")) end end def generate_number self.number ||= loop do - random = "RA#{Array.new(9){ rand(9) }.join}" + random = "RA#{Array.new(9) { rand(9) }.join}" break random unless self.class.exists?(number: random) end end def no_previously_exchanged_inventory_units if return_items.map(&:inventory_unit).any?(&:exchange_requested?) - errors.add(:base, I18n.t('spree.return_items_cannot_be_created_for_inventory_units_that_are_already_awaiting_exchange')) + errors.add(:base, I18n.t("spree.return_items_cannot_be_created_for_inventory_units_that_are_already_awaiting_exchange")) end end diff --git a/core/app/models/spree/return_item.rb b/core/app/models/spree/return_item.rb index 2a2ec45c90a..82bf9d0a119 100644 --- a/core/app/models/spree/return_item.rb +++ b/core/app/models/spree/return_item.rb @@ -2,7 +2,7 @@ module Spree class ReturnItem < Spree::Base - INTERMEDIATE_RECEPTION_STATUSES = %i(given_to_customer lost_in_transit shipped_wrong_item short_shipped in_transit) + INTERMEDIATE_RECEPTION_STATUSES = %i[given_to_customer lost_in_transit shipped_wrong_item short_shipped in_transit] COMPLETED_RECEPTION_STATUSES = INTERMEDIATE_RECEPTION_STATUSES + [:received] # @!scope class @@ -31,13 +31,13 @@ class ReturnItem < Spree::Base belongs_to :return_authorization, inverse_of: :return_items, optional: true belongs_to :inventory_unit, inverse_of: :return_items - belongs_to :exchange_variant, class_name: 'Spree::Variant', optional: true - belongs_to :exchange_inventory_unit, class_name: 'Spree::InventoryUnit', inverse_of: :original_return_item, optional: true + belongs_to :exchange_variant, class_name: "Spree::Variant", optional: true + belongs_to :exchange_inventory_unit, class_name: "Spree::InventoryUnit", inverse_of: :original_return_item, optional: true belongs_to :customer_return, inverse_of: :return_items, optional: true belongs_to :reimbursement, inverse_of: :return_items, optional: true - belongs_to :preferred_reimbursement_type, class_name: 'Spree::ReimbursementType', optional: true - belongs_to :override_reimbursement_type, class_name: 'Spree::ReimbursementType', optional: true - belongs_to :return_reason, class_name: 'Spree::ReturnReason', foreign_key: :return_reason_id, optional: true + belongs_to :preferred_reimbursement_type, class_name: "Spree::ReimbursementType", optional: true + belongs_to :override_reimbursement_type, class_name: "Spree::ReimbursementType", optional: true + belongs_to :return_reason, class_name: "Spree::ReturnReason", foreign_key: :return_reason_id, optional: true validate :eligible_exchange_variant validate :belongs_to_same_customer_order @@ -46,21 +46,21 @@ class ReturnItem < Spree::Base after_create :cancel_others, unless: :cancelled? - scope :awaiting_return, -> { where(reception_status: 'awaiting') } + scope :awaiting_return, -> { where(reception_status: "awaiting") } scope :expecting_return, -> { where.not(reception_status: COMPLETED_RECEPTION_STATUSES) } - scope :not_cancelled, -> { where.not(reception_status: 'cancelled') } - scope :valid, -> { where.not(reception_status: %w(cancelled expired unexchanged)) } - scope :not_expired, -> { where.not(reception_status: 'expired') } - scope :received, -> { where(reception_status: 'received') } + scope :not_cancelled, -> { where.not(reception_status: "cancelled") } + scope :valid, -> { where.not(reception_status: %w[cancelled expired unexchanged]) } + scope :not_expired, -> { where.not(reception_status: "expired") } + scope :received, -> { where(reception_status: "received") } INTERMEDIATE_RECEPTION_STATUSES.each do |reception_status| scope reception_status, -> { where(reception_status:) } end - scope :pending, -> { where(acceptance_status: 'pending') } - scope :accepted, -> { where(acceptance_status: 'accepted') } - scope :rejected, -> { where(acceptance_status: 'rejected') } - scope :manual_intervention_required, -> { where(acceptance_status: 'manual_intervention_required') } - scope :undecided, -> { where(acceptance_status: %w(pending manual_intervention_required)) } - scope :decided, -> { where.not(acceptance_status: %w(pending manual_intervention_required)) } + scope :pending, -> { where(acceptance_status: "pending") } + scope :accepted, -> { where(acceptance_status: "accepted") } + scope :rejected, -> { where(acceptance_status: "rejected") } + scope :manual_intervention_required, -> { where(acceptance_status: "manual_intervention_required") } + scope :undecided, -> { where(acceptance_status: %w[pending manual_intervention_required]) } + scope :decided, -> { where.not(acceptance_status: %w[pending manual_intervention_required]) } scope :reimbursed, -> { where.not(reimbursement_id: nil) } scope :not_reimbursed, -> { where(reimbursement_id: nil) } scope :exchange_requested, -> { where.not(exchange_variant: nil) } @@ -80,6 +80,7 @@ class ReturnItem < Spree::Base include ::Spree::Config.state_machines.return_item_acceptance extend DisplayMoney + money_methods :amount, :total, :total_excluding_vat # @return [Boolean] true when this retur item is in a complete reception @@ -168,13 +169,13 @@ def potential_reception_transitions event_paths.delete(:expired) event_paths.delete(:unexchange) - status_paths.map{ |status| I18n.t("spree.reception_states.#{status}", default: status.to_s.humanize) }.zip(event_paths) + status_paths.map { |status| I18n.t("spree.reception_states.#{status}", default: status.to_s.humanize) }.zip(event_paths) end def part_of_exchange? # test whether this ReturnItem was either a) one for which an exchange was sent or # b) the exchanged item itself being returned in lieu of the original item - exchange_requested? || sibling_intended_for_exchange('unexchanged') + exchange_requested? || sibling_intended_for_exchange("unexchanged") end private @@ -203,7 +204,7 @@ def sibling_intended_for_exchange(status) end def check_unexchange - original_ri = sibling_intended_for_exchange('awaiting') + original_ri = sibling_intended_for_exchange("awaiting") if original_ri original_ri.unexchange! set_default_amount @@ -221,14 +222,15 @@ def belongs_to_same_customer_order return unless customer_return && inventory_unit if customer_return.order_id != inventory_unit.order_id - errors.add(:base, I18n.t('spree.return_items_cannot_be_associated_with_multiple_orders')) + errors.add(:base, I18n.t("spree.return_items_cannot_be_associated_with_multiple_orders")) end end def eligible_exchange_variant return unless exchange_variant && exchange_variant_id_changed? + unless eligible_exchange_variants.include?(exchange_variant) - errors.add(:base, I18n.t('spree.invalid_exchange_variant')) + errors.add(:base, I18n.t("spree.invalid_exchange_variant")) end end @@ -243,7 +245,7 @@ def validate_acceptance_status_for_reimbursement end def set_exchange_amount - self.amount = 0.0.to_d if exchange_requested? + self.amount = BigDecimal("0.0") if exchange_requested? end def validate_no_other_completed_return_items @@ -261,9 +263,9 @@ def validate_no_other_completed_return_items def cancel_others Spree::ReturnItem.where(inventory_unit_id:) - .where.not(id:) - .valid - .each(&:cancel!) + .where.not(id:) + .valid + .each(&:cancel!) end def should_restock? diff --git a/core/app/models/spree/return_item/eligibility_validator/base_validator.rb b/core/app/models/spree/return_item/eligibility_validator/base_validator.rb index d044ae9f0c8..85e7a7f6990 100644 --- a/core/app/models/spree/return_item/eligibility_validator/base_validator.rb +++ b/core/app/models/spree/return_item/eligibility_validator/base_validator.rb @@ -12,11 +12,11 @@ def initialize(return_item) end def eligible_for_return? - raise NotImplementedError, I18n.t('spree.implement_eligible_for_return') + raise NotImplementedError, I18n.t("spree.implement_eligible_for_return") end def requires_manual_intervention? - raise NotImplementedError, I18n.t('spree.implement_requires_manual_intervention') + raise NotImplementedError, I18n.t("spree.implement_requires_manual_intervention") end private diff --git a/core/app/models/spree/return_item/eligibility_validator/default.rb b/core/app/models/spree/return_item/eligibility_validator/default.rb index b5e2d5bf7b9..3d2abbd0ceb 100644 --- a/core/app/models/spree/return_item/eligibility_validator/default.rb +++ b/core/app/models/spree/return_item/eligibility_validator/default.rb @@ -28,7 +28,7 @@ def errors private def validators - @validators ||= permitted_eligibility_validators.map{ |validator| validator.new(@return_item) } + @validators ||= permitted_eligibility_validators.map { |validator| validator.new(@return_item) } end end end diff --git a/core/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb b/core/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb index 1290264c296..8f6fde6c387 100644 --- a/core/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +++ b/core/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb @@ -8,7 +8,7 @@ def eligible_for_return? if @return_item.inventory_unit.shipped? true else - add_error(:inventory_unit_shipped, I18n.t('spree.return_item_inventory_unit_ineligible')) + add_error(:inventory_unit_shipped, I18n.t("spree.return_item_inventory_unit_ineligible")) false end end diff --git a/core/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb b/core/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb index 62169cce250..9504c8aa849 100644 --- a/core/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +++ b/core/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb @@ -6,7 +6,7 @@ module EligibilityValidator class NoReimbursements < Spree::ReturnItem::EligibilityValidator::BaseValidator def eligible_for_return? if @return_item.inventory_unit.return_items.reimbursed.valid.any? - add_error(:inventory_unit_reimbursed, I18n.t('spree.return_item_inventory_unit_reimbursed')) + add_error(:inventory_unit_reimbursed, I18n.t("spree.return_item_inventory_unit_reimbursed")) false else true diff --git a/core/app/models/spree/return_item/eligibility_validator/order_completed.rb b/core/app/models/spree/return_item/eligibility_validator/order_completed.rb index d5c19191b16..31d6773823c 100644 --- a/core/app/models/spree/return_item/eligibility_validator/order_completed.rb +++ b/core/app/models/spree/return_item/eligibility_validator/order_completed.rb @@ -8,7 +8,7 @@ def eligible_for_return? if @return_item.inventory_unit.order.completed? true else - add_error(:order_not_completed, I18n.t('spree.return_item_order_not_completed')) + add_error(:order_not_completed, I18n.t("spree.return_item_order_not_completed")) false end end diff --git a/core/app/models/spree/return_item/eligibility_validator/rma_required.rb b/core/app/models/spree/return_item/eligibility_validator/rma_required.rb index 1e970385815..190806a326a 100644 --- a/core/app/models/spree/return_item/eligibility_validator/rma_required.rb +++ b/core/app/models/spree/return_item/eligibility_validator/rma_required.rb @@ -8,7 +8,7 @@ def eligible_for_return? if @return_item.return_authorization.present? true else - add_error(:rma_required, I18n.t('spree.return_item_rma_ineligible')) + add_error(:rma_required, I18n.t("spree.return_item_rma_ineligible")) false end end diff --git a/core/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb b/core/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb index a6166417e15..e9345d94357 100644 --- a/core/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +++ b/core/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb @@ -8,7 +8,7 @@ def eligible_for_return? if (@return_item.inventory_unit.order.completed_at + Spree::Config[:return_eligibility_number_of_days].days) > Time.current true else - add_error(:number_of_days, I18n.t('spree.return_item_time_period_ineligible')) + add_error(:number_of_days, I18n.t("spree.return_item_time_period_ineligible")) false end end diff --git a/core/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb b/core/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb index 316a125edf6..3ecc136bde2 100644 --- a/core/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +++ b/core/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb @@ -30,12 +30,12 @@ def self.eligible_variants(variant, options = {}) # Finds all the OptionValueVariants that have any of the # relevant option values, groups by variant and ensures the variant # has ALL of the relevant option values. - variant_ids = Spree::OptionValuesVariant. - where(variant_id: product_variants.distinct.pluck(:id)). - where(option_value: relevant_option_values). - group(:variant_id). - having('COUNT(*) = ?', relevant_option_values.size). - pluck(:variant_id) + variant_ids = Spree::OptionValuesVariant + .where(variant_id: product_variants.distinct.pluck(:id)) + .where(option_value: relevant_option_values) + .group(:variant_id) + .having("COUNT(*) = ?", relevant_option_values.size) + .pluck(:variant_id) product_variants.where(id: variant_ids) else product_variants diff --git a/core/app/models/spree/return_reason.rb b/core/app/models/spree/return_reason.rb index 1d485868586..68e8e2641ad 100644 --- a/core/app/models/spree/return_reason.rb +++ b/core/app/models/spree/return_reason.rb @@ -5,7 +5,7 @@ class ReturnReason < Spree::Base scope :active, -> { where(active: true) } default_scope -> { order(arel_table[:name].lower) } - validates :name, presence: true, uniqueness: { case_sensitive: false, allow_blank: true } + validates :name, presence: true, uniqueness: {case_sensitive: false, allow_blank: true} has_many :return_authorizations diff --git a/core/app/models/spree/role.rb b/core/app/models/spree/role.rb index 2e42435a1c1..abfae1b1ed6 100644 --- a/core/app/models/spree/role.rb +++ b/core/app/models/spree/role.rb @@ -7,7 +7,7 @@ class Role < Spree::Base has_many :role_permissions, dependent: :destroy has_many :permission_sets, through: :role_permissions - validates :name, presence: true, uniqueness: { case_sensitive: true, allow_blank: true } + validates :name, presence: true, uniqueness: {case_sensitive: true, allow_blank: true} def admin? name == "admin" diff --git a/core/app/models/spree/role_user.rb b/core/app/models/spree/role_user.rb index d2280c43989..4178e224d8c 100644 --- a/core/app/models/spree/role_user.rb +++ b/core/app/models/spree/role_user.rb @@ -8,7 +8,7 @@ class RoleUser < Spree::Base after_create :auto_generate_spree_api_key - validates :role_id, uniqueness: { scope: :user_id } + validates :role_id, uniqueness: {scope: :user_id} private diff --git a/core/app/models/spree/shipment.rb b/core/app/models/spree/shipment.rb index 2dbb167138d..56a00f7ff15 100644 --- a/core/app/models/spree/shipment.rb +++ b/core/app/models/spree/shipment.rb @@ -6,8 +6,8 @@ module Spree class Shipment < Spree::Base include Metadata - belongs_to :order, class_name: 'Spree::Order', touch: true, inverse_of: :shipments, optional: true - belongs_to :stock_location, class_name: 'Spree::StockLocation', optional: true + belongs_to :order, class_name: "Spree::Order", touch: true, inverse_of: :shipments, optional: true + belongs_to :stock_location, class_name: "Spree::StockLocation", optional: true has_many :adjustments, as: :adjustable, inverse_of: :adjustable, dependent: :delete_all has_many :inventory_units, dependent: :destroy, inverse_of: :shipment @@ -27,11 +27,11 @@ class Shipment < Spree::Base accepts_nested_attributes_for :inventory_units - make_permalink field: :number, length: 11, prefix: 'H' + make_permalink field: :number, length: 11, prefix: "H" - scope :pending, -> { with_state('pending') } - scope :ready, -> { with_state('ready') } - scope :shipped, -> { with_state('shipped') } + scope :pending, -> { with_state("pending") } + scope :ready, -> { with_state("ready") } + scope :shipped, -> { with_state("shipped") } scope :trackable, -> { where("tracking IS NOT NULL AND tracking != ''") } scope :with_state, ->(*state) { where(state:) } # sort by most recent shipped_at, falling back to created_at. add "id desc" to make specs that involve this scope more deterministic. @@ -43,8 +43,8 @@ class Shipment < Spree::Base include ::Spree::Config.state_machines.shipment - self.allowed_ransackable_associations = ['order'] - self.allowed_ransackable_attributes = ['number'] + self.allowed_ransackable_associations = ["order"] + self.allowed_ransackable_attributes = ["number"] delegate :tax_category, :tax_category_id, to: :selected_shipping_rate, allow_nil: true @@ -63,9 +63,10 @@ def can_transition_from_canceled_to_ready? end extend DisplayMoney + money_methods( :cost, :amount, :item_cost, - :total, :total_before_tax, + :total, :total_before_tax ) alias_attribute :amount, :cost @@ -151,7 +152,7 @@ def refresh_rates # If one of the new rates matches the previously selected shipping # method, select that instead of the default provided by the estimator. # Otherwise, keep the default. - selected_rate = new_rates.detect{ |rate| rate.shipping_method_id == original_shipping_method_id } + selected_rate = new_rates.detect { |rate| rate.shipping_method_id == original_shipping_method_id } if selected_rate new_rates.each do |rate| rate.selected = (rate == selected_rate) @@ -186,6 +187,7 @@ def selected_shipping_rate_id def selected_shipping_rate_id=(id) return if selected_shipping_rate_id == id + new_rate = shipping_rates.detect { |rate| rate.id == id.to_i } unless new_rate fail( @@ -195,7 +197,7 @@ def selected_shipping_rate_id=(id) end transaction do - selected_shipping_rate.update!(selected: false) if selected_shipping_rate + selected_shipping_rate&.update!(selected: false) new_rate.update!(selected: true) end end @@ -203,13 +205,14 @@ def selected_shipping_rate_id=(id) def determine_state(order) Spree.deprecator.warn "Use Spree::Shipment#recalculate_state instead" - return 'shipped' if shipped? - return 'canceled' if order.canceled? || inventory_units.all?(&:canceled?) - return 'pending' unless order.can_ship? + return "shipped" if shipped? + return "canceled" if order.canceled? || inventory_units.all?(&:canceled?) + return "pending" unless order.can_ship? + if can_transition_from_pending_to_ready? - 'ready' + "ready" else - 'pending' + "pending" end end @@ -243,7 +246,8 @@ def set_up_inventory(state, variant, _order, line_item) end def shipped=(value) - return unless value == '1' && shipped_at.nil? + return unless value == "1" && shipped_at.nil? + self.shipped_at = Time.current end @@ -312,7 +316,7 @@ def update_state new_state = recalculate_state if new_state != old_state update_columns state: new_state, updated_at: Time.current - after_ship if new_state == 'shipped' + after_ship if new_state == "shipped" end end @@ -332,12 +336,12 @@ def after_ship end def can_get_rates? - order.ship_address && order.ship_address.valid? + order.ship_address&.valid? end def manifest_restock(item) if item.states["on_hand"].to_i > 0 - stock_location.restock item.variant, item.states["on_hand"], self + stock_location.restock item.variant, item.states["on_hand"], self end if item.states["backordered"].to_i > 0 diff --git a/core/app/models/spree/shipping_method.rb b/core/app/models/spree/shipping_method.rb index 35ef3255e9e..18c026cf17f 100644 --- a/core/app/models/spree/shipping_method.rb +++ b/core/app/models/spree/shipping_method.rb @@ -16,7 +16,7 @@ class ShippingMethod < Spree::Base has_many :shipping_method_zones, dependent: :destroy has_many :zones, through: :shipping_method_zones - belongs_to :tax_category, -> { with_discarded }, class_name: 'Spree::TaxCategory', optional: true + belongs_to :tax_category, -> { with_discarded }, class_name: "Spree::TaxCategory", optional: true has_many :shipping_method_stock_locations, dependent: :destroy, class_name: "Spree::ShippingMethodStockLocation" has_many :stock_locations, through: :shipping_method_stock_locations @@ -29,6 +29,7 @@ class ShippingMethod < Spree::Base scope :available_to_store, ->(store) do raise ArgumentError, "You must provide a store" if store.nil? + store.shipping_methods.empty? ? all : where(id: store.shipping_methods.ids) end @@ -41,10 +42,10 @@ def self.with_all_shipping_category_ids(shipping_category_ids) # cause this to return incorrect results. join_table = Spree::ShippingMethodCategory.arel_table having = join_table[:id].count(true).eq(shipping_category_ids.count) - subquery = joins(:shipping_method_categories). - where(spree_shipping_method_categories: { shipping_category_id: shipping_category_ids }). - group('spree_shipping_methods.id'). - having(having) + subquery = joins(:shipping_method_categories) + .where(spree_shipping_method_categories: {shipping_category_id: shipping_category_ids}) + .group("spree_shipping_methods.id") + .having(having) where(id: subquery.select(:id)) end @@ -62,9 +63,9 @@ def self.available_in_stock_location(stock_location) # rails 5 this will be easy using .left_join and .or, but for now we must # use arel to achieve this. arel_join = - arel_table.join(smsl_table, Arel::Nodes::OuterJoin). - on(arel_table[:id].eq(smsl_table[:shipping_method_id])). - join_sources + arel_table.join(smsl_table, Arel::Nodes::OuterJoin) + .on(arel_table[:id].eq(smsl_table[:shipping_method_id])) + .join_sources arel_condition = arel_table[:available_to_all].eq(true).or(smsl_table[:stock_location_id].eq(stock_location.id)) @@ -80,6 +81,7 @@ def self.available_for_address(address) def include?(address) return false unless address + zones.any? do |zone| zone.include?(address) end @@ -87,7 +89,8 @@ def include?(address) def build_tracking_url(tracking) return if tracking.blank? || tracking_url.blank? - tracking_url.gsub(/:tracking/, ERB::Util.url_encode(tracking)) # :url_encode exists in 1.8.7 through 2.1.0 + + tracking_url.gsub(":tracking", ERB::Util.url_encode(tracking)) # :url_encode exists in 1.8.7 through 2.1.0 end private diff --git a/core/app/models/spree/shipping_method_category.rb b/core/app/models/spree/shipping_method_category.rb index 0d67a34506f..ee6419a0962 100644 --- a/core/app/models/spree/shipping_method_category.rb +++ b/core/app/models/spree/shipping_method_category.rb @@ -2,7 +2,7 @@ module Spree class ShippingMethodCategory < Spree::Base - belongs_to :shipping_method, class_name: 'Spree::ShippingMethod' - belongs_to :shipping_category, class_name: 'Spree::ShippingCategory', inverse_of: :shipping_method_categories + belongs_to :shipping_method, class_name: "Spree::ShippingMethod" + belongs_to :shipping_category, class_name: "Spree::ShippingCategory", inverse_of: :shipping_method_categories end end diff --git a/core/app/models/spree/shipping_rate.rb b/core/app/models/spree/shipping_rate.rb index 2bb8b2ae2f1..2ca6da7a746 100644 --- a/core/app/models/spree/shipping_rate.rb +++ b/core/app/models/spree/shipping_rate.rb @@ -5,14 +5,14 @@ module Spree # method has been selected to deliver the shipment. # class ShippingRate < Spree::Base - belongs_to :shipment, class_name: 'Spree::Shipment', touch: true, optional: true - belongs_to :shipping_method, -> { with_discarded }, class_name: 'Spree::ShippingMethod', inverse_of: :shipping_rates, optional: true + belongs_to :shipment, class_name: "Spree::Shipment", touch: true, optional: true + belongs_to :shipping_method, -> { with_discarded }, class_name: "Spree::ShippingMethod", inverse_of: :shipping_rates, optional: true has_many :taxes, - class_name: "Spree::ShippingRateTax", - foreign_key: "shipping_rate_id", - inverse_of: :shipping_rate, - dependent: :destroy + class_name: "Spree::ShippingRateTax", + foreign_key: "shipping_rate_id", + inverse_of: :shipping_rate, + dependent: :destroy delegate :order, :currency, to: :shipment delegate :name, :tax_category, :tax_category_id, to: :shipping_method @@ -21,6 +21,7 @@ class ShippingRate < Spree::Base alias_attribute :total_before_tax, :cost extend DisplayMoney + money_methods :amount def display_price @@ -30,16 +31,16 @@ def display_price tax_explanations = taxes.map(&:label).join(tax_label_separator) - I18n.t 'spree.shipping_rate.display_price.display_price_with_explanations', - price:, - explanations: tax_explanations + I18n.t "spree.shipping_rate.display_price.display_price_with_explanations", + price:, + explanations: tax_explanations end alias_method :display_cost, :display_price private def tax_label_separator - I18n.t 'spree.shipping_rate.display_price.tax_label_separator' + I18n.t "spree.shipping_rate.display_price.tax_label_separator" end end end diff --git a/core/app/models/spree/shipping_rate_tax.rb b/core/app/models/spree/shipping_rate_tax.rb index 289f9e39ba7..82ba03cb932 100644 --- a/core/app/models/spree/shipping_rate_tax.rb +++ b/core/app/models/spree/shipping_rate_tax.rb @@ -11,13 +11,14 @@ class ShippingRateTax < Spree::Base belongs_to :tax_rate, class_name: "Spree::TaxRate", optional: true extend DisplayMoney + money_methods :absolute_amount delegate :currency, to: :shipping_rate, allow_nil: true def label I18n.t translation_key, - scope: 'spree.shipping_rate_tax.label', + scope: "spree.shipping_rate_tax.label", amount: display_absolute_amount, tax_rate_name: tax_rate.name end @@ -30,9 +31,9 @@ def absolute_amount def translation_key if tax_rate.included_in_price? - :vat - else - :sales_tax + :vat + else + :sales_tax end end end diff --git a/core/app/models/spree/simple_order_contents.rb b/core/app/models/spree/simple_order_contents.rb index e6735415604..e384dba3009 100644 --- a/core/app/models/spree/simple_order_contents.rb +++ b/core/app/models/spree/simple_order_contents.rb @@ -53,7 +53,7 @@ def advance def approve(user: nil, name: nil) if user.blank? && name.blank? - raise ArgumentError, 'user or name must be specified' + raise ArgumentError, "user or name must be specified" end order.update!( @@ -86,7 +86,7 @@ def add_to_line_item(variant, quantity, options = {}) ) permitted_attributes = Spree::PermittedAttributes.line_item_attributes.dup - permitted_attributes << { admin_metadata: {} } if options[:admin_metadata].present? + permitted_attributes << {admin_metadata: {}} if options[:admin_metadata].present? line_item.quantity += quantity.to_i line_item.options = ActionController::Parameters.new(options).permit(permitted_attributes).to_h diff --git a/core/app/models/spree/state.rb b/core/app/models/spree/state.rb index e6123cd899d..cbd87bb3a5e 100644 --- a/core/app/models/spree/state.rb +++ b/core/app/models/spree/state.rb @@ -2,7 +2,7 @@ module Spree class State < Spree::Base - belongs_to :country, class_name: 'Spree::Country' + belongs_to :country, class_name: "Spree::Country" has_many :addresses, dependent: :nullify, inverse_of: :state validates :name, presence: true diff --git a/core/app/models/spree/stock/availability.rb b/core/app/models/spree/stock/availability.rb index 2e7bcf5600f..6cc313bb753 100644 --- a/core/app/models/spree/stock/availability.rb +++ b/core/app/models/spree/stock/availability.rb @@ -52,22 +52,22 @@ def backorderable_by_stock_location_id def counts_on_hand @counts_on_hand ||= - stock_item_scope. - group(:variant_id, :stock_location_id). - sum(:count_on_hand) + stock_item_scope + .group(:variant_id, :stock_location_id) + .sum(:count_on_hand) end def backorderables @backorderables ||= - stock_item_scope. - where(backorderable: true). - pluck(:variant_id, :stock_location_id) + stock_item_scope + .where(backorderable: true) + .pluck(:variant_id, :stock_location_id) end def stock_item_scope - Spree::StockItem. - where(variant_id: @variants). - where(stock_location_id: @stock_locations) + Spree::StockItem + .where(variant_id: @variants) + .where(stock_location_id: @stock_locations) end def restore_location_order(quantities_by_location_id) diff --git a/core/app/models/spree/stock/availability_validator.rb b/core/app/models/spree/stock/availability_validator.rb index e743ee6400b..c6d60e4dc12 100644 --- a/core/app/models/spree/stock/availability_validator.rb +++ b/core/app/models/spree/stock/availability_validator.rb @@ -12,7 +12,7 @@ def validate(line_item) display_name += %{ (#{variant.options_text})} unless variant.options_text.blank? line_item.errors.add(:quantity, I18n.t( - 'spree.selected_quantity_not_available', + "spree.selected_quantity_not_available", item: display_name.inspect )) false diff --git a/core/app/models/spree/stock/differentiator.rb b/core/app/models/spree/stock/differentiator.rb index c50bf3f48bd..74fc1ea816b 100644 --- a/core/app/models/spree/stock/differentiator.rb +++ b/core/app/models/spree/stock/differentiator.rb @@ -22,8 +22,8 @@ def missing? def build_missing @missing = Hash.new(0) required.keys.each do |variant| - missing = required[variant] - packed[variant] - @missing[variant] = missing if missing > 0 + missing = required[variant] - packed[variant] + @missing[variant] = missing if missing > 0 end end diff --git a/core/app/models/spree/stock/estimator.rb b/core/app/models/spree/stock/estimator.rb index 73fc905b378..10d2c24f5f0 100644 --- a/core/app/models/spree/stock/estimator.rb +++ b/core/app/models/spree/stock/estimator.rb @@ -4,6 +4,7 @@ module Spree module Stock class Estimator class ShipmentRequired < StandardError; end + class OrderRequired < StandardError; end # Estimate the shipping rates for a package. diff --git a/core/app/models/spree/stock/inventory_validator.rb b/core/app/models/spree/stock/inventory_validator.rb index 1af0aa1a49d..42f095cf897 100644 --- a/core/app/models/spree/stock/inventory_validator.rb +++ b/core/app/models/spree/stock/inventory_validator.rb @@ -6,7 +6,7 @@ class InventoryValidator < ActiveModel::Validator def validate(line_item) if line_item.inventory_units.count != line_item.quantity line_item.errors.add(:inventory, I18n.t( - 'spree.inventory_not_available', + "spree.inventory_not_available", item: line_item.variant.name )) end diff --git a/core/app/models/spree/stock/package.rb b/core/app/models/spree/stock/package.rb index ccec973c974..21143a4278f 100644 --- a/core/app/models/spree/stock/package.rb +++ b/core/app/models/spree/stock/package.rb @@ -109,9 +109,9 @@ def shipping_categories # @return [ActiveRecord::Relation] the [Spree::ShippingMethod]s available # for this pacakge based on the stock location and shipping categories. def shipping_methods - Spree::ShippingMethod. - with_all_shipping_category_ids(shipping_category_ids). - available_in_stock_location(stock_location) + Spree::ShippingMethod + .with_all_shipping_category_ids(shipping_category_ids) + .available_in_stock_location(stock_location) end # @return [Spree::Shipment] a new shipment containing this package's diff --git a/core/app/models/spree/stock/splitter/weight.rb b/core/app/models/spree/stock/splitter/weight.rb index 2903c4b74f9..8f076cdc02f 100644 --- a/core/app/models/spree/stock/splitter/weight.rb +++ b/core/app/models/spree/stock/splitter/weight.rb @@ -22,6 +22,7 @@ def reduce(package) removed = [] while package.weight > threshold break if package.contents.size == 1 + removed << package.contents.shift end removed diff --git a/core/app/models/spree/stock_item.rb b/core/app/models/spree/stock_item.rb index 8c027bca57f..72498c4dae2 100644 --- a/core/app/models/spree/stock_item.rb +++ b/core/app/models/spree/stock_item.rb @@ -4,13 +4,13 @@ module Spree class StockItem < Spree::Base include Spree::SoftDeletable - belongs_to :stock_location, class_name: 'Spree::StockLocation', inverse_of: :stock_items, optional: true - belongs_to :variant, -> { with_discarded }, class_name: 'Spree::Variant', inverse_of: :stock_items, optional: true + belongs_to :stock_location, class_name: "Spree::StockLocation", inverse_of: :stock_items, optional: true + belongs_to :variant, -> { with_discarded }, class_name: "Spree::Variant", inverse_of: :stock_items, optional: true has_many :stock_movements, inverse_of: :stock_item validates :stock_location, :variant, presence: true - validates :variant_id, uniqueness: { scope: [:stock_location_id, :deleted_at] }, allow_blank: true, unless: :deleted_at - validates :count_on_hand, numericality: { greater_than_or_equal_to: 0 }, unless: :backorderable? + validates :variant_id, uniqueness: {scope: [:stock_location_id, :deleted_at]}, allow_blank: true, unless: :deleted_at + validates :count_on_hand, numericality: {greater_than_or_equal_to: 0}, unless: :backorderable? delegate :weight, :should_track_inventory?, to: :variant @@ -20,7 +20,7 @@ class StockItem < Spree::Base after_save :conditional_variant_touch, if: :saved_changes? after_touch { variant.touch } - self.allowed_ransackable_attributes = ['count_on_hand', 'stock_location_id'] + self.allowed_ransackable_attributes = ["count_on_hand", "stock_location_id"] self.allowed_ransackable_associations = %w[variant] # @return [Array] the backordered inventory units diff --git a/core/app/models/spree/stock_location.rb b/core/app/models/spree/stock_location.rb index 6835f6cdc1b..c2ae731455d 100644 --- a/core/app/models/spree/stock_location.rb +++ b/core/app/models/spree/stock_location.rb @@ -17,14 +17,14 @@ class InvalidMovementError < StandardError; end has_many :users, through: :user_stock_locations has_many :customer_returns, inverse_of: :stock_location, dependent: :restrict_with_error - belongs_to :state, class_name: 'Spree::State', optional: true - belongs_to :country, class_name: 'Spree::Country', optional: true + belongs_to :state, class_name: "Spree::State", optional: true + belongs_to :country, class_name: "Spree::Country", optional: true has_many :shipping_method_stock_locations, dependent: :destroy has_many :shipping_methods, through: :shipping_method_stock_locations validates :name, presence: true - validates :code, uniqueness: { allow_blank: true, case_sensitive: false } + validates :code, uniqueness: {allow_blank: true, case_sensitive: false} scope :active, -> { where(active: true) } scope :order_default, -> { order(default: :desc, position: :asc) } @@ -100,10 +100,11 @@ def unstock(variant, quantity, originator = nil) def move(variant, quantity, originator = nil) if quantity < 1 && !stock_item(variant) - raise InvalidMovementError.new(I18n.t('spree.negative_movement_absent_item')) + raise InvalidMovementError.new(I18n.t("spree.negative_movement_absent_item")) end + stock_item_or_create(variant).stock_movements.create!(quantity:, - originator:) + originator:) end def fill_status(variant, quantity) diff --git a/core/app/models/spree/stock_movement.rb b/core/app/models/spree/stock_movement.rb index c1de4df6eb0..2c43f71f5bb 100644 --- a/core/app/models/spree/stock_movement.rb +++ b/core/app/models/spree/stock_movement.rb @@ -2,7 +2,7 @@ module Spree class StockMovement < Spree::Base - belongs_to :stock_item, class_name: 'Spree::StockItem', inverse_of: :stock_movements, optional: true + belongs_to :stock_item, class_name: "Spree::StockItem", inverse_of: :stock_movements, optional: true belongs_to :originator, polymorphic: true, optional: true has_one :variant, through: :stock_item @@ -14,7 +14,7 @@ class StockMovement < Spree::Base scope :recent, -> { order(created_at: :desc) } self.allowed_ransackable_associations = %w[variant] - self.allowed_ransackable_attributes = ['quantity'] + self.allowed_ransackable_attributes = ["quantity"] def readonly? !new_record? @@ -24,6 +24,7 @@ def readonly? def update_stock_item_quantity return unless stock_item.should_track_inventory? + stock_item.adjust_count_on_hand quantity end end diff --git a/core/app/models/spree/stock_quantities.rb b/core/app/models/spree/stock_quantities.rb index aad8f7c0fac..23a8e1c44a0 100644 --- a/core/app/models/spree/stock_quantities.rb +++ b/core/app/models/spree/stock_quantities.rb @@ -8,8 +8,8 @@ class StockQuantities # @param quantities [HashNumeric>] def initialize(quantities = {}) - raise ArgumentError unless quantities.keys.all?{ |value| value.is_a?(Spree::Variant) } - raise ArgumentError unless quantities.values.all?{ |value| value.is_a?(Numeric) } + raise ArgumentError unless quantities.keys.all? { |value| value.is_a?(Spree::Variant) } + raise ArgumentError unless quantities.values.all? { |value| value.is_a?(Numeric) } @quantities = quantities end diff --git a/core/app/models/spree/store.rb b/core/app/models/spree/store.rb index fd5aef8289c..7900b5b2e27 100644 --- a/core/app/models/spree/store.rb +++ b/core/app/models/spree/store.rb @@ -17,7 +17,7 @@ class Store < Spree::Base has_many :orders, class_name: "Spree::Order" - validates :code, presence: true, uniqueness: { allow_blank: true, case_sensitive: true } + validates :code, presence: true, uniqueness: {allow_blank: true, case_sensitive: true} validates :name, presence: true validates :url, presence: true validates :mail_from_address, presence: true @@ -34,9 +34,9 @@ class Store < Spree::Base }, prefix: true def available_locales - locales = super() + locales = super if locales - super().split(",").map(&:to_sym) + super.split(",").map(&:to_sym) else Spree.i18n_available_locales end diff --git a/core/app/models/spree/store_credit.rb b/core/app/models/spree/store_credit.rb index 96de906af07..6ca55fe3c59 100644 --- a/core/app/models/spree/store_credit.rb +++ b/core/app/models/spree/store_credit.rb @@ -3,31 +3,31 @@ class Spree::StoreCredit < Spree::PaymentSource include Spree::SoftDeletable - VOID_ACTION = 'void' - CREDIT_ACTION = 'credit' - CAPTURE_ACTION = 'capture' - ELIGIBLE_ACTION = 'eligible' - AUTHORIZE_ACTION = 'authorize' - ALLOCATION_ACTION = 'allocation' - ADJUSTMENT_ACTION = 'adjustment' - INVALIDATE_ACTION = 'invalidate' + VOID_ACTION = "void" + CREDIT_ACTION = "credit" + CAPTURE_ACTION = "capture" + ELIGIBLE_ACTION = "eligible" + AUTHORIZE_ACTION = "authorize" + ALLOCATION_ACTION = "allocation" + ADJUSTMENT_ACTION = "adjustment" + INVALIDATE_ACTION = "invalidate" belongs_to :user, class_name: Spree::UserClassHandle.new, optional: true belongs_to :created_by, class_name: Spree::UserClassHandle.new, optional: true belongs_to :category, class_name: "Spree::StoreCreditCategory", optional: true - belongs_to :credit_type, class_name: 'Spree::StoreCreditType', foreign_key: 'type_id', optional: true + belongs_to :credit_type, class_name: "Spree::StoreCreditType", foreign_key: "type_id", optional: true has_many :store_credit_events validates :user_id, :category_id, :type_id, :created_by_id, :currency, presence: true - validates :amount, numericality: { greater_than: 0 } - validates :amount_used, numericality: { greater_than_or_equal_to: 0 } + validates :amount, numericality: {greater_than: 0} + validates :amount_used, numericality: {greater_than_or_equal_to: 0} validate :amount_used_less_than_or_equal_to_amount validate :amount_authorized_less_than_or_equal_to_amount delegate :name, to: :category, prefix: true delegate :email, to: :created_by, prefix: true - scope :order_by_priority, -> { includes(:credit_type).order('spree_store_credit_types.priority ASC') } + scope :order_by_priority, -> { includes(:credit_type).order("spree_store_credit_types.priority ASC") } after_save :store_event before_validation :associate_credit_type @@ -38,6 +38,7 @@ class Spree::StoreCredit < Spree::PaymentSource attr_accessor :action, :action_amount, :action_originator, :action_authorization_code, :store_credit_reason extend Spree::DisplayMoney + money_methods :amount, :amount_used, :amount_authorized alias_method :display_number, :category_name @@ -51,7 +52,8 @@ def amount=(number) end def amount_remaining - return 0.0.to_d if invalidated? + return BigDecimal("0.0") if invalidated? + amount - amount_used - amount_authorized end @@ -83,20 +85,21 @@ def authorize(amount, order_currency, options = {}) def validate_authorization(amount, order_currency) if amount_remaining.to_d < amount.to_d - errors.add(:base, I18n.t('spree.store_credit.insufficient_funds')) + errors.add(:base, I18n.t("spree.store_credit.insufficient_funds")) elsif currency != order_currency - errors.add(:base, I18n.t('spree.store_credit.currency_mismatch')) + errors.add(:base, I18n.t("spree.store_credit.currency_mismatch")) end errors.blank? end def capture(amount, authorization_code, order_currency, options = {}) return false unless authorize(amount, order_currency, action_authorization_code: authorization_code) + auth_event = store_credit_events.find_by!(action: AUTHORIZE_ACTION, authorization_code:) if amount <= auth_event.amount if currency != order_currency - errors.add(:base, I18n.t('spree.store_credit.currency_mismatch')) + errors.add(:base, I18n.t("spree.store_credit.currency_mismatch")) false else update!({ @@ -111,7 +114,7 @@ def capture(amount, authorization_code, order_currency, options = {}) authorization_code end else - errors.add(:base, I18n.t('spree.store_credit.insufficient_authorized_amount')) + errors.add(:base, I18n.t("spree.store_credit.insufficient_authorized_amount")) false end end @@ -128,7 +131,7 @@ def void(authorization_code, options = {}) }) true else - errors.add(:base, I18n.t('spree.store_credit.unable_to_void', auth_code: authorization_code)) + errors.add(:base, I18n.t("spree.store_credit.unable_to_void", auth_code: authorization_code)) false end end @@ -138,7 +141,7 @@ def credit(amount, authorization_code, order_currency, options = {}) capture_event = store_credit_events.find_by(action: CAPTURE_ACTION, authorization_code:) if currency != order_currency # sanity check to make sure the order currency hasn't changed since the auth - errors.add(:base, I18n.t('spree.store_credit.currency_mismatch')) + errors.add(:base, I18n.t("spree.store_credit.currency_mismatch")) false elsif capture_event && amount <= capture_event.amount action_attributes = { @@ -150,7 +153,7 @@ def credit(amount, authorization_code, order_currency, options = {}) create_credit_record(amount, action_attributes) true else - errors.add(:base, I18n.t('spree.store_credit.unable_to_credit', auth_code: authorization_code)) + errors.add(:base, I18n.t("spree.store_credit.unable_to_credit", auth_code: authorization_code)) false end end @@ -162,10 +165,10 @@ def can_void?(payment) def generate_authorization_code [ id, - 'SC', - Time.current.utc.strftime('%Y%m%d%H%M%S%6N'), + "SC", + Time.current.utc.strftime("%Y%m%d%H%M%S%6N"), SecureRandom.uuid - ].join('-') + ].join("-") end def editable? @@ -198,7 +201,7 @@ def invalidate(reason, user_performing_invalidation) self.invalidated_at = Time.current save else - errors.add(:invalidated_at, I18n.t('spree.store_credit.errors.cannot_invalidate_uncaptured_authorization')) + errors.add(:invalidated_at, I18n.t("spree.store_credit.errors.cannot_invalidate_uncaptured_authorization")) false end end @@ -258,25 +261,25 @@ def amount_used_less_than_or_equal_to_amount return true if amount_used.nil? if amount_used > amount - errors.add(:amount_used, I18n.t('spree.admin.store_credits.errors.amount_used_cannot_be_greater')) + errors.add(:amount_used, I18n.t("spree.admin.store_credits.errors.amount_used_cannot_be_greater")) end end def amount_authorized_less_than_or_equal_to_amount if (amount_used + amount_authorized) > amount - errors.add(:amount_authorized, I18n.t('spree.admin.store_credits.errors.amount_authorized_exceeds_total_credit')) + errors.add(:amount_authorized, I18n.t("spree.admin.store_credits.errors.amount_authorized_exceeds_total_credit")) end end def validate_category_unchanged if category_id_changed? - errors.add(:category, I18n.t('spree.admin.store_credits.errors.cannot_be_modified')) + errors.add(:category, I18n.t("spree.admin.store_credits.errors.cannot_be_modified")) end end def validate_no_amount_used if amount_used > 0 - errors.add(:amount_used, 'is greater than zero. Can not delete store credit') + errors.add(:amount_used, "is greater than zero. Can not delete store credit") throw :abort end end diff --git a/core/app/models/spree/store_credit_category.rb b/core/app/models/spree/store_credit_category.rb index b13cf61028f..2384088fbfd 100644 --- a/core/app/models/spree/store_credit_category.rb +++ b/core/app/models/spree/store_credit_category.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true class Spree::StoreCreditCategory < Spree::Base - GIFT_CARD = 'Gift Card' - REIMBURSEMENT = 'Reimbursement' + GIFT_CARD = "Gift Card" + REIMBURSEMENT = "Reimbursement" class_attribute :non_expiring_credit_types self.non_expiring_credit_types = [Spree::StoreCreditType::NON_EXPIRING] diff --git a/core/app/models/spree/store_credit_event.rb b/core/app/models/spree/store_credit_event.rb index 8f7fe59cff1..df07d6fd5c4 100644 --- a/core/app/models/spree/store_credit_event.rb +++ b/core/app/models/spree/store_credit_event.rb @@ -7,15 +7,15 @@ class StoreCreditEvent < Spree::Base belongs_to :store_credit, optional: true belongs_to :originator, polymorphic: true, optional: true - belongs_to :store_credit_reason, class_name: 'Spree::StoreCreditReason', inverse_of: :store_credit_events, optional: true + belongs_to :store_credit_reason, class_name: "Spree::StoreCreditReason", inverse_of: :store_credit_events, optional: true - validates :store_credit_reason, presence: { if: :action_requires_reason? } + validates :store_credit_reason, presence: {if: :action_requires_reason?} NON_EXPOSED_ACTIONS = [Spree::StoreCredit::ELIGIBLE_ACTION, Spree::StoreCredit::AUTHORIZE_ACTION] scope :exposed_events, -> { exposable_actions.not_invalidated } scope :exposable_actions, -> { where.not(action: NON_EXPOSED_ACTIONS) } - scope :not_invalidated, -> { joins(:store_credit).where(spree_store_credits: { invalidated_at: nil }) } + scope :not_invalidated, -> { joins(:store_credit).where(spree_store_credits: {invalidated_at: nil}) } scope :chronological, -> { order(:created_at) } scope :reverse_chronological, -> { order(created_at: :desc) } @@ -34,15 +34,15 @@ def action_requires_reason? end def display_amount - Spree::Money.new(amount, { currency: }) + Spree::Money.new(amount, {currency:}) end def display_user_total_amount - Spree::Money.new(user_total_amount, { currency: }) + Spree::Money.new(user_total_amount, {currency:}) end def display_remaining_amount - Spree::Money.new(amount_remaining, { currency: }) + Spree::Money.new(amount_remaining, {currency:}) end def display_event_date @@ -51,6 +51,7 @@ def display_event_date def display_action return if NON_EXPOSED_ACTIONS.include?(action) + I18n.t("spree.store_credit.display_action.#{action}") end diff --git a/core/app/models/spree/store_credit_reason.rb b/core/app/models/spree/store_credit_reason.rb index 66c3e1008df..2bc599ae230 100644 --- a/core/app/models/spree/store_credit_reason.rb +++ b/core/app/models/spree/store_credit_reason.rb @@ -4,7 +4,7 @@ class Spree::StoreCreditReason < Spree::Base scope :active, -> { where(active: true) } default_scope -> { order(arel_table[:name].lower) } - validates :name, presence: true, uniqueness: { case_sensitive: false, allow_blank: true } + validates :name, presence: true, uniqueness: {case_sensitive: false, allow_blank: true} has_many :store_credit_events, inverse_of: :store_credit_reason diff --git a/core/app/models/spree/store_credit_type.rb b/core/app/models/spree/store_credit_type.rb index 4996c6e776f..82740f31343 100644 --- a/core/app/models/spree/store_credit_type.rb +++ b/core/app/models/spree/store_credit_type.rb @@ -2,9 +2,9 @@ module Spree class StoreCreditType < Spree::Base - EXPIRING = 'Expiring' - NON_EXPIRING = 'Non-expiring' + EXPIRING = "Expiring" + NON_EXPIRING = "Non-expiring" DEFAULT_TYPE_NAME = EXPIRING - has_many :store_credits, class_name: 'Spree::StoreCredit', foreign_key: 'type_id' + has_many :store_credits, class_name: "Spree::StoreCredit", foreign_key: "type_id" end end diff --git a/core/app/models/spree/store_selector/by_server_name.rb b/core/app/models/spree/store_selector/by_server_name.rb index 0075fde0135..9e09660240a 100644 --- a/core/app/models/spree/store_selector/by_server_name.rb +++ b/core/app/models/spree/store_selector/by_server_name.rb @@ -17,7 +17,7 @@ def initialize(request) # Chooses the current store based on a request. # @return [Spree::Store] def store - server_name = @request.env['SERVER_NAME'] + server_name = @request.env["SERVER_NAME"] # We select a store which either matches our server name, or is default. # We sort by `default ASC` so that a store matching SERVER_NAME will come diff --git a/core/app/models/spree/store_selector/legacy.rb b/core/app/models/spree/store_selector/legacy.rb index 9d5fb66b6d2..b704498e528 100644 --- a/core/app/models/spree/store_selector/legacy.rb +++ b/core/app/models/spree/store_selector/legacy.rb @@ -43,7 +43,7 @@ def store private def store_key - @request.headers['HTTP_SPREE_STORE'] || @request.env['SERVER_NAME'] + @request.headers["HTTP_SPREE_STORE"] || @request.env["SERVER_NAME"] end end end diff --git a/core/app/models/spree/tax/item_tax.rb b/core/app/models/spree/tax/item_tax.rb index a8b757bab6d..ae11fc0b44e 100644 --- a/core/app/models/spree/tax/item_tax.rb +++ b/core/app/models/spree/tax/item_tax.rb @@ -17,6 +17,7 @@ module Tax # in the items price, or additional tax. class ItemTax include ActiveModel::Model + attr_accessor :item_id, :label, :tax_rate, :amount, :included_in_price end end diff --git a/core/app/models/spree/tax/order_tax.rb b/core/app/models/spree/tax/order_tax.rb index d8d728417ec..0ec16c8d9b2 100644 --- a/core/app/models/spree/tax/order_tax.rb +++ b/core/app/models/spree/tax/order_tax.rb @@ -16,6 +16,7 @@ module Tax # tax data for the order's shipments class OrderTax include ActiveModel::Model + attr_accessor :order_id, :order_taxes, :line_item_taxes, :shipment_taxes end end diff --git a/core/app/models/spree/tax_category.rb b/core/app/models/spree/tax_category.rb index 7f9a7376516..f636e7a53ae 100644 --- a/core/app/models/spree/tax_category.rb +++ b/core/app/models/spree/tax_category.rb @@ -11,15 +11,15 @@ class TaxCategory < Spree::Base end validates :name, presence: true - validates :name, uniqueness: { case_sensitive: true, unless: :deleted_at } + validates :name, uniqueness: {case_sensitive: true, unless: :deleted_at} has_many :tax_rate_tax_categories, - class_name: 'Spree::TaxRateTaxCategory', + class_name: "Spree::TaxRateTaxCategory", dependent: :destroy, inverse_of: :tax_category has_many :tax_rates, through: :tax_rate_tax_categories, - class_name: 'Spree::TaxRate', + class_name: "Spree::TaxRate", inverse_of: :tax_categories after_save :ensure_one_default diff --git a/core/app/models/spree/tax_rate.rb b/core/app/models/spree/tax_rate.rb index 19abc4c2953..e03cd686686 100644 --- a/core/app/models/spree/tax_rate.rb +++ b/core/app/models/spree/tax_rate.rb @@ -19,12 +19,12 @@ class TaxRate < Spree::Base belongs_to :zone, class_name: "Spree::Zone", inverse_of: :tax_rates, optional: true has_many :tax_rate_tax_categories, - class_name: 'Spree::TaxRateTaxCategory', + class_name: "Spree::TaxRateTaxCategory", dependent: :destroy, inverse_of: :tax_rate has_many :tax_categories, through: :tax_rate_tax_categories, - class_name: 'Spree::TaxCategory', + class_name: "Spree::TaxCategory", inverse_of: :tax_rates has_many :adjustments, as: :source @@ -37,12 +37,12 @@ class TaxRate < Spree::Base # Finds all tax rates whose zones match a given address scope :for_address, ->(address) { joins(:zone).merge(Spree::Zone.for_address(address)) } scope :for_country, - ->(country) { for_address(Spree::Tax::TaxLocation.new(country:)) } + ->(country) { for_address(Spree::Tax::TaxLocation.new(country:)) } scope :active, -> do table = arel_table time = Time.current - where(table[:starts_at].eq(nil).or(table[:starts_at].lt(time))). - where(table[:expires_at].eq(nil).or(table[:expires_at].gt(time))) + where(table[:starts_at].eq(nil).or(table[:starts_at].lt(time))) + .where(table[:expires_at].eq(nil).or(table[:expires_at].gt(time))) end # Finds geographically matching tax rates for a tax zone. diff --git a/core/app/models/spree/tax_rate_tax_category.rb b/core/app/models/spree/tax_rate_tax_category.rb index e68f89c7ac7..04374e1283c 100644 --- a/core/app/models/spree/tax_rate_tax_category.rb +++ b/core/app/models/spree/tax_rate_tax_category.rb @@ -2,7 +2,7 @@ module Spree class TaxRateTaxCategory < Spree::Base - belongs_to :tax_rate, class_name: 'Spree::TaxRate', inverse_of: :tax_rate_tax_categories, optional: true - belongs_to :tax_category, class_name: 'Spree::TaxCategory', inverse_of: :tax_rate_tax_categories, optional: true + belongs_to :tax_rate, class_name: "Spree::TaxRate", inverse_of: :tax_rate_tax_categories, optional: true + belongs_to :tax_category, class_name: "Spree::TaxCategory", inverse_of: :tax_rate_tax_categories, optional: true end end diff --git a/core/app/models/spree/taxon.rb b/core/app/models/spree/taxon.rb index 44159210a86..98f88e15e82 100644 --- a/core/app/models/spree/taxon.rb +++ b/core/app/models/spree/taxon.rb @@ -1,15 +1,16 @@ # frozen_string_literal: true -require 'spree/core/product_filters' +require "spree/core/product_filters" module Spree class Taxon < Spree::Base extend FriendlyId + friendly_id :permalink, use: :history, slug_column: :permalink acts_as_nested_set dependent: :destroy - belongs_to :taxonomy, class_name: 'Spree::Taxonomy', inverse_of: :taxons + belongs_to :taxonomy, class_name: "Spree::Taxonomy", inverse_of: :taxons has_many :classifications, -> { order(:position) }, dependent: :delete_all, inverse_of: :taxon has_many :products, through: :classifications @@ -17,11 +18,11 @@ class Taxon < Spree::Base after_update :update_child_permalinks, if: :saved_change_to_permalink? validates :name, presence: true - validates :name, uniqueness: { scope: :parent_id, message: :must_be_unique_under_same_parent } - validates :meta_keywords, length: { maximum: 255 } - validates :meta_description, length: { maximum: 255 } - validates :meta_title, length: { maximum: 255 } - validates :taxonomy_id, uniqueness: { scope: :parent_id, message: :can_have_only_one_root }, if: -> { root? } + validates :name, uniqueness: {scope: :parent_id, message: :must_be_unique_under_same_parent} + validates :meta_keywords, length: {maximum: 255} + validates :meta_description, length: {maximum: 255} + validates :meta_title, length: {maximum: 255} + validates :taxonomy_id, uniqueness: {scope: :parent_id, message: :can_have_only_one_root}, if: -> { root? } after_save :touch_ancestors_and_taxonomy after_touch :touch_ancestors_and_taxonomy @@ -43,7 +44,7 @@ def seo_title # Sets this taxons permalink to a valid url encoded string based on its # name and its parents permalink (if present.) def set_permalink - permalink_tail = permalink.present? ? permalink.split('/').last : name + permalink_tail = permalink.present? ? permalink.split("/").last : name self.permalink_part = Spree::Config.taxon_url_parametizer_class.parameterize(permalink_tail) end @@ -75,7 +76,7 @@ def active_products def all_products scope = Product.joins(:taxons) scope.where( - spree_taxons: { id: self_and_descendants.select(:id) } + spree_taxons: {id: self_and_descendants.select(:id)} ) end @@ -109,14 +110,14 @@ def child_index=(idx) end def permalink_part - permalink.split('/').last + permalink.split("/").last end def permalink_part=(value) - if parent.present? - self.permalink = "#{parent.permalink}/#{value}" + self.permalink = if parent.present? + "#{parent.permalink}/#{value}" else - self.permalink = value + value end end @@ -129,13 +130,13 @@ def should_generate_new_friendly_id? # override for {FriendlyId::Slugged#normalize_friendly_id} method, # to control over the slug format def normalize_friendly_id(value) - return '' if value.blank? + return "" if value.blank? - parts = value.to_s.split('/') + parts = value.to_s.split("/") last_word = parts.pop corrected_last_word = Spree::Config.taxon_url_parametizer_class.parameterize(last_word) - (parts << corrected_last_word).join('/') + (parts << corrected_last_word).join("/") end private diff --git a/core/app/models/spree/taxon/active_storage_attachment.rb b/core/app/models/spree/taxon/active_storage_attachment.rb index 3e2072de430..53d3a82f792 100644 --- a/core/app/models/spree/taxon/active_storage_attachment.rb +++ b/core/app/models/spree/taxon/active_storage_attachment.rb @@ -6,8 +6,8 @@ module Spree::Taxon::ActiveStorageAttachment included do has_attachment :icon, - styles: Spree::Config.taxon_image_styles, - default_style: Spree::Config.taxon_image_style_default + styles: Spree::Config.taxon_image_styles, + default_style: Spree::Config.taxon_image_style_default validate :icon_is_an_image end end diff --git a/core/app/models/spree/taxon/paperclip_attachment.rb b/core/app/models/spree/taxon/paperclip_attachment.rb index 666660f930e..da1df695396 100644 --- a/core/app/models/spree/taxon/paperclip_attachment.rb +++ b/core/app/models/spree/taxon/paperclip_attachment.rb @@ -7,12 +7,12 @@ module Spree::Taxon::PaperclipAttachment has_attached_file :icon, styles: Spree::Config.taxon_image_styles, default_style: Spree::Config.taxon_image_style_default, - url: '/spree/taxons/:id/:style/:basename.:extension', - path: ':rails_root/public/spree/taxons/:id/:style/:basename.:extension', - default_url: '/assets/default_taxon.png' + url: "/spree/taxons/:id/:style/:basename.:extension", + path: ":rails_root/public/spree/taxons/:id/:style/:basename.:extension", + default_url: "/assets/default_taxon.png" validates_attachment :icon, - content_type: { content_type: Spree::Config.allowed_image_mime_types } + content_type: {content_type: Spree::Config.allowed_image_mime_types} end def icon_present? diff --git a/core/app/models/spree/taxon_brand_selector.rb b/core/app/models/spree/taxon_brand_selector.rb index 4a0a0dce0bd..f05c08d415b 100644 --- a/core/app/models/spree/taxon_brand_selector.rb +++ b/core/app/models/spree/taxon_brand_selector.rb @@ -10,9 +10,9 @@ def initialize(product) def call product.taxons - .joins(:taxonomy) - .where(spree_taxonomies: { name: BRANDS_TAXONOMY_NAME }) - .first + .joins(:taxonomy) + .where(spree_taxonomies: {name: BRANDS_TAXONOMY_NAME}) + .first end private diff --git a/core/app/models/spree/unauthorized_redirect_handler.rb b/core/app/models/spree/unauthorized_redirect_handler.rb index be16d8251d6..a5db37e2b46 100644 --- a/core/app/models/spree/unauthorized_redirect_handler.rb +++ b/core/app/models/spree/unauthorized_redirect_handler.rb @@ -11,7 +11,7 @@ def initialize(controller) # This method is responsible for handling unauthorized redirects def call - flash[:error] = I18n.t('spree.authorization_failure') + flash[:error] = I18n.t("spree.authorization_failure") redirect_back(fallback_location: "/unauthorized") end diff --git a/core/app/models/spree/unit_cancel.rb b/core/app/models/spree/unit_cancel.rb index 6daf32795d9..b2bd089d444 100644 --- a/core/app/models/spree/unit_cancel.rb +++ b/core/app/models/spree/unit_cancel.rb @@ -4,8 +4,8 @@ # The reason specifies why it was canceled. # This class should encapsulate logic related to canceling inventory after order complete class Spree::UnitCancel < Spree::Base - SHORT_SHIP = 'Short Ship' - DEFAULT_REASON = 'Cancel' + SHORT_SHIP = "Short Ship" + DEFAULT_REASON = "Cancel" belongs_to :inventory_unit, optional: true has_one :adjustment, as: :source, dependent: :destroy @@ -22,7 +22,7 @@ def adjust! source: self, amount:, order: inventory_unit.order, - label: "#{I18n.t('spree.cancellation')} - #{reason}", + label: "#{I18n.t("spree.cancellation")} - #{reason}", finalized: true ) @@ -47,6 +47,6 @@ def weighted_line_item_amount(line_item) end def quantity_of_line_item(line_item) - BigDecimal(line_item.inventory_units.not_canceled.reject(&:original_return_item).size) + BigDecimal(line_item.inventory_units.not_canceled.count { |li| !li.original_return_item }) end end diff --git a/core/app/models/spree/user_address.rb b/core/app/models/spree/user_address.rb index 91e5b1bd597..2e38d2f0113 100644 --- a/core/app/models/spree/user_address.rb +++ b/core/app/models/spree/user_address.rb @@ -5,8 +5,8 @@ class UserAddress < Spree::Base belongs_to :user, class_name: UserClassHandle.new, foreign_key: "user_id", inverse_of: :user_addresses belongs_to :address, class_name: "Spree::Address" - validates :address_id, uniqueness: { scope: :user_id } - validates :user_id, uniqueness: { conditions: -> { default_shipping }, message: :default_address_exists, if: :default? } + validates :address_id, uniqueness: {scope: :user_id} + validates :user_id, uniqueness: {conditions: -> { default_shipping }, message: :default_address_exists, if: :default?} scope :with_address_values, ->(address_attributes) do joins(:address).merge( diff --git a/core/app/models/spree/user_last_url_storer.rb b/core/app/models/spree/user_last_url_storer.rb index 01cbb1bd37c..3be2f619aba 100644 --- a/core/app/models/spree/user_last_url_storer.rb +++ b/core/app/models/spree/user_last_url_storer.rb @@ -34,7 +34,7 @@ def initialize(controller) def store_location return if self.class.rules.any? { |rule| rule.match? controller } - session[:spree_user_return_to] = request.fullpath.gsub('//', '/') + session[:spree_user_return_to] = request.fullpath.gsub("//", "/") end private diff --git a/core/app/models/spree/user_last_url_storer/rules/authentication_rule.rb b/core/app/models/spree/user_last_url_storer/rules/authentication_rule.rb index 3b46781469b..bf618a96df5 100644 --- a/core/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +++ b/core/app/models/spree/user_last_url_storer/rules/authentication_rule.rb @@ -20,15 +20,13 @@ def match?(controller) def disallowed_urls(controller) @disallowed_urls ||= {} - @disallowed_urls[controller.controller_name] ||= begin - [].tap do |disallowed_urls| - AUTHENTICATION_ROUTES.each do |route| - if controller.respond_to?(route) - disallowed_urls << controller.send(route) - end - end - end.map! { |url| url[/\/\w+$/] } - end + @disallowed_urls[controller.controller_name] ||= [].tap do |disallowed_urls| + AUTHENTICATION_ROUTES.each do |route| + if controller.respond_to?(route) + disallowed_urls << controller.send(route) + end + end + end.map! { |url| url[/\/\w+$/] } end end end diff --git a/core/app/models/spree/variant.rb b/core/app/models/spree/variant.rb index 958b50f3260..04effa99367 100644 --- a/core/app/models/spree/variant.rb +++ b/core/app/models/spree/variant.rb @@ -30,15 +30,15 @@ class Variant < Spree::Base # Consider that not all platforms digest structured data in the same way, # you might have to modify the output on the frontend or in feeds accordingly. - enum :condition, { damaged: "damaged", new: "new", refurbished: "refurbished", used: "used" }, prefix: true + enum :condition, {damaged: "damaged", new: "new", refurbished: "refurbished", used: "used"}, prefix: true - belongs_to :product, -> { with_discarded }, touch: true, class_name: 'Spree::Product', inverse_of: :variants_including_master, optional: false - belongs_to :tax_category, class_name: 'Spree::TaxCategory', optional: true + belongs_to :product, -> { with_discarded }, touch: true, class_name: "Spree::Product", inverse_of: :variants_including_master, optional: false + belongs_to :tax_category, class_name: "Spree::TaxCategory", optional: true belongs_to :shipping_category, class_name: "Spree::ShippingCategory", optional: true delegate :name, :description, :slug, :available_on, :discontinue_on, :discontinued?, - :meta_description, :meta_keywords, - to: :product + :meta_description, :meta_keywords, + to: :product delegate :tax_category, :tax_category_id, to: :product, prefix: true delegate :shipping_category, :shipping_category_id, to: :product, prefix: true @@ -60,7 +60,7 @@ class Variant < Spree::Base has_many :prices, -> { with_discarded }, - class_name: 'Spree::Price', + class_name: "Spree::Price", dependent: :destroy, inverse_of: :variant, autosave: true @@ -72,9 +72,9 @@ class Variant < Spree::Base validates :product, presence: true validate :check_price - validates :cost_price, numericality: { greater_than_or_equal_to: 0, allow_nil: true } - validates :price, numericality: { greater_than_or_equal_to: 0, allow_nil: true } - validates :sku, uniqueness: { allow_blank: true, case_sensitive: true, conditions: -> { where(deleted_at: nil) }, if: :enforce_unique_sku? } + validates :cost_price, numericality: {greater_than_or_equal_to: 0, allow_nil: true} + validates :price, numericality: {greater_than_or_equal_to: 0, allow_nil: true} + validates :sku, uniqueness: {allow_blank: true, case_sensitive: true, conditions: -> { where(deleted_at: nil) }, if: :enforce_unique_sku?} after_create :create_stock_items after_create :set_master_out_of_stock, unless: :is_master? @@ -85,7 +85,7 @@ class Variant < Spree::Base after_destroy :destroy_option_values_variants scope :template_variants, -> do - left_joins(product: { option_types: :option_values }).where(is_master: true).where.not(spree_option_values: { id: nil }).reorder(nil).distinct + left_joins(product: {option_types: :option_values}).where(is_master: true).where.not(spree_option_values: {id: nil}).reorder(nil).distinct end scope :non_template_variants, -> { where.not(id: template_variants) } @@ -99,9 +99,10 @@ class Variant < Spree::Base # @return [ActiveRecord::Relation] def self.in_stock(stock_locations = nil) return all unless Spree::Config.track_inventory_levels + in_stock_variants = joins(:stock_items).where(Spree::StockItem.arel_table[:count_on_hand].gt(0).or(arel_table[:track_inventory].eq(false))) if stock_locations.present? - in_stock_variants = in_stock_variants.where(spree_stock_items: { stock_location_id: stock_locations.map(&:id) }) + in_stock_variants = in_stock_variants.where(spree_stock_items: {stock_location_id: stock_locations.map(&:id)}) end in_stock_variants.distinct end @@ -114,6 +115,7 @@ def self.in_stock(stock_locations = nil) # @return [ActiveRecord::Relation] def self.suppliable return all unless Spree::Config.track_inventory_levels + arel_conditions = [ arel_table[:track_inventory].eq(false), Spree::StockItem.arel_table[:count_on_hand].gt(0), @@ -132,16 +134,16 @@ def self.suppliable # @return [ActiveRecord::Relation] def self.with_prices(pricing_options = Spree::Config.default_pricing_options) where( - Spree::Price. - where(Spree::Variant.arel_table[:id].eq(Spree::Price.arel_table[:variant_id])). + Spree::Price + .where(Spree::Variant.arel_table[:id].eq(Spree::Price.arel_table[:variant_id])). # This next clause should just be `where(pricing_options.search_arguments)`, but ActiveRecord # generates invalid SQL, so the SQL here is written manually. where( "spree_prices.currency = ? AND (spree_prices.country_iso IS NULL OR spree_prices.country_iso = ?)", pricing_options.search_arguments[:currency], pricing_options.search_arguments[:country_iso].compact - ). - arel.exists + ) + .arel.exists ) end @@ -200,7 +202,7 @@ def weight=(weight) # # @return [Fixnum] def on_backorder - inventory_units.with_state('backordered').size + inventory_units.with_state("backordered").size end # @return [Boolean] true if this variant can be backordered @@ -220,7 +222,7 @@ def options_text "#{ov.option_type.presentation}: #{ov.presentation}" end - values.to_sentence({ words_connector: ", ", two_words_connector: ", " }) + values.to_sentence({words_connector: ", ", two_words_connector: ", "}) end # Determines the name of an Exchange variant. @@ -235,7 +237,7 @@ def exchange_name # # @return [String] the generated name def descriptive_name - is_master? ? name + ' - Master' : name + ' - ' + options_text + is_master? ? name + " - Master" : name + " - " + options_text end # Returns whether this variant has been deleted. Provided as a method of @@ -272,6 +274,7 @@ def set_option_value(opt_name, opt_value) if current_value return if current_value.name == opt_value + option_values.delete(current_value) else # then we have to check to make sure that the product has the option type @@ -310,12 +313,13 @@ def price_difference_from_master(pricing_options = Spree::Config.default_pricing master_price = product.master.price_for_options(pricing_options) variant_price = price_for_options(pricing_options) return unless master_price && variant_price + Spree::Money.new(variant_price.amount - master_price.amount, currency: pricing_options.currency) end def price_same_as_master?(pricing_options = Spree::Config.default_pricing_options) diff = price_difference_from_master(pricing_options) - diff && diff.zero? + diff&.zero? end # Generates a friendly name and sku string. @@ -392,7 +396,7 @@ def rebuild_vat_prices? end def set_master_out_of_stock - if product.master && product.master.in_stock? + if product.master&.in_stock? product.master.stock_items.update_all(backorderable: false) product.master.stock_items.each(&:reduce_count_on_hand_to_zero) end @@ -405,7 +409,7 @@ def set_price def check_price if price.nil? && Spree::Config[:require_master_price] && is_master? - errors.add :price, 'Must supply price for variant or master.price for product.' + errors.add :price, "Must supply price for variant or master.price for product." end end @@ -441,4 +445,4 @@ def enforce_unique_sku? end end -require_dependency 'spree/variant/scopes' +require_dependency "spree/variant/scopes" diff --git a/core/app/models/spree/variant/price_selector.rb b/core/app/models/spree/variant/price_selector.rb index b61d1acc5cb..93c52a4a125 100644 --- a/core/app/models/spree/variant/price_selector.rb +++ b/core/app/models/spree/variant/price_selector.rb @@ -45,7 +45,7 @@ def sorted_prices_for(variant) [ price.country_iso.nil? ? 0 : 1, price.updated_at || Time.zone.now, - price.id || Float::INFINITY, + price.id || Float::INFINITY ] end.reverse end diff --git a/core/app/models/spree/variant/scopes.rb b/core/app/models/spree/variant/scopes.rb index 5f254d409b6..ca5e4ca1549 100644 --- a/core/app/models/spree/variant/scopes.rb +++ b/core/app/models/spree/variant/scopes.rb @@ -11,7 +11,7 @@ def self.prepended(base) } scope :by_stock_location, ->(stock_location_id) { - joins(:stock_locations).where(spree_stock_locations: { id: stock_location_id }) + joins(:stock_locations).where(spree_stock_locations: {id: stock_location_id}) } class << self @@ -24,19 +24,19 @@ def has_option(option_type, *option_values) option_types = Spree::OptionType.table_name option_type_conditions = case option_type - when OptionType then { "#{option_types}.name" => option_type.name } - when String then { "#{option_types}.name" => option_type } - else { "#{option_types}.id" => option_type } - end + when OptionType then {"#{option_types}.name" => option_type.name} + when String then {"#{option_types}.name" => option_type} + else {"#{option_types}.id" => option_type} + end relation = joins(option_values: :option_type).where(option_type_conditions) option_values.each do |option_value| option_value_conditions = case option_value - when OptionValue then { "#{Spree::OptionValue.table_name}.name" => option_value.name } - when String then { "#{Spree::OptionValue.table_name}.name" => option_value } - else { "#{Spree::OptionValue.table_name}.id" => option_value } - end + when OptionValue then {"#{Spree::OptionValue.table_name}.name" => option_value.name} + when String then {"#{Spree::OptionValue.table_name}.name" => option_value} + else {"#{Spree::OptionValue.table_name}.id" => option_value} + end relation = relation.where(option_value_conditions) end diff --git a/core/app/models/spree/variant/vat_price_generator.rb b/core/app/models/spree/variant/vat_price_generator.rb index a7f1bf96192..c78b465faf5 100644 --- a/core/app/models/spree/variant/vat_price_generator.rb +++ b/core/app/models/spree/variant/vat_price_generator.rb @@ -47,11 +47,13 @@ def find_or_initialize_price_by(country_iso, currency) # nil is added to the array so we always have an export price. def country_isos_requiring_price return [nil] unless variant.tax_category + [nil] + variant_vat_rates.map(&:zone).flat_map(&:countries).flat_map(&:iso) end def vat_for_country_iso(country_iso) return 0 unless variant.tax_category + variant_vat_rates.for_country(Spree::Country.find_by(iso: country_iso)).sum(:amount) end diff --git a/core/app/models/spree/variant_property_rule.rb b/core/app/models/spree/variant_property_rule.rb index 6494a10f501..b03cf5c3c23 100644 --- a/core/app/models/spree/variant_property_rule.rb +++ b/core/app/models/spree/variant_property_rule.rb @@ -15,9 +15,9 @@ module Spree class VariantPropertyRule < Spree::Base belongs_to :product, touch: true - has_many :values, class_name: 'Spree::VariantPropertyRuleValue', dependent: :destroy + has_many :values, class_name: "Spree::VariantPropertyRuleValue", dependent: :destroy has_many :properties, through: :values - has_many :conditions, class_name: 'Spree::VariantPropertyRuleCondition', dependent: :destroy + has_many :conditions, class_name: "Spree::VariantPropertyRuleCondition", dependent: :destroy has_many :option_values, through: :conditions accepts_nested_attributes_for :values, allow_destroy: true, reject_if: lambda { |val| val[:property_name].blank? } diff --git a/core/app/models/spree/variant_property_rule_condition.rb b/core/app/models/spree/variant_property_rule_condition.rb index 6947082d7b4..7ca0a76f66a 100644 --- a/core/app/models/spree/variant_property_rule_condition.rb +++ b/core/app/models/spree/variant_property_rule_condition.rb @@ -5,6 +5,6 @@ class VariantPropertyRuleCondition < Spree::Base belongs_to :option_value, optional: true belongs_to :variant_property_rule, touch: true, optional: true - validates :option_value_id, uniqueness: { scope: :variant_property_rule_id } + validates :option_value_id, uniqueness: {scope: :variant_property_rule_id} end end diff --git a/core/app/models/spree/wallet/add_payment_sources_to_wallet.rb b/core/app/models/spree/wallet/add_payment_sources_to_wallet.rb index 4ecc10a4239..9855d1116ea 100644 --- a/core/app/models/spree/wallet/add_payment_sources_to_wallet.rb +++ b/core/app/models/spree/wallet/add_payment_sources_to_wallet.rb @@ -16,10 +16,10 @@ def add_to_wallet if !order.temporary_payment_source && order.user # select valid sources payments = order.payments.valid - sources = payments.map(&:source). - uniq. - compact. - select { |payment| payment.try(:reusable?) } + sources = payments.map(&:source) + .uniq + .compact + .select { |payment| payment.try(:reusable?) } # add valid sources to wallet and optionally set a default if sources.any? diff --git a/core/app/models/spree/wallet/default_payment_builder.rb b/core/app/models/spree/wallet/default_payment_builder.rb index d46785d3a77..246e4e3219a 100644 --- a/core/app/models/spree/wallet/default_payment_builder.rb +++ b/core/app/models/spree/wallet/default_payment_builder.rb @@ -17,7 +17,7 @@ def build if default && order.payments.where(source_type: default.payment_source_type).none? Spree::Payment.new( payment_method: default.payment_source.payment_method, - source: default.payment_source, + source: default.payment_source ) end end diff --git a/core/app/models/spree/wallet_payment_source.rb b/core/app/models/spree/wallet_payment_source.rb index 4b628420e60..337c5b9c956 100644 --- a/core/app/models/spree/wallet_payment_source.rb +++ b/core/app/models/spree/wallet_payment_source.rb @@ -2,7 +2,7 @@ module Spree class WalletPaymentSource < Spree::Base - belongs_to :user, class_name: Spree::UserClassHandle.new, foreign_key: 'user_id', inverse_of: :wallet_payment_sources, optional: true + belongs_to :user, class_name: Spree::UserClassHandle.new, foreign_key: "user_id", inverse_of: :wallet_payment_sources, optional: true belongs_to :payment_source, polymorphic: true, inverse_of: :wallet_payment_sources, optional: true validates :user, presence: true @@ -27,7 +27,7 @@ def validate_payment_source_ownership return unless payment_source.present? if payment_source.respond_to?(:user_id) && - payment_source.user_id != user_id + payment_source.user_id != user_id errors.add(:payment_source, :not_owned_by_user) end end diff --git a/core/app/models/spree/zone.rb b/core/app/models/spree/zone.rb index 3a74337ec64..0785fad2370 100644 --- a/core/app/models/spree/zone.rb +++ b/core/app/models/spree/zone.rb @@ -13,7 +13,7 @@ class Zone < Spree::Base has_many :shipping_method_zones, dependent: :destroy has_many :shipping_methods, through: :shipping_method_zones - validates :name, presence: true, uniqueness: { allow_blank: true, case_sensitive: true } + validates :name, presence: true, uniqueness: {allow_blank: true, case_sensitive: true} after_save :remove_defunct_members scope :with_member_ids, ->(state_ids, country_ids) do @@ -22,11 +22,11 @@ class Zone < Spree::Base else spree_zone_members_table = Spree::ZoneMember.arel_table matching_state = - spree_zone_members_table[:zoneable_type].eq("Spree::State"). - and(spree_zone_members_table[:zoneable_id].in(state_ids)) + spree_zone_members_table[:zoneable_type].eq("Spree::State") + .and(spree_zone_members_table[:zoneable_id].in(state_ids)) matching_country = - spree_zone_members_table[:zoneable_type].eq("Spree::Country"). - and(spree_zone_members_table[:zoneable_id].in(country_ids)) + spree_zone_members_table[:zoneable_type].eq("Spree::Country") + .and(spree_zone_members_table[:zoneable_id].in(country_ids)) joins(:zone_members).where(matching_state.or(matching_country)).distinct end end @@ -39,8 +39,8 @@ class Zone < Spree::Base end end - alias :members :zone_members - accepts_nested_attributes_for :zone_members, allow_destroy: true, reject_if: proc { |member| member['zoneable_id'].blank? } + alias_method :members, :zone_members + accepts_nested_attributes_for :zone_members, allow_destroy: true, reject_if: proc { |member| member["zoneable_id"].blank? } self.allowed_ransackable_attributes = %w[name description] @@ -74,9 +74,9 @@ def include?(address) members.any? do |zone_member| case zone_member.zoneable_type - when 'Spree::Country' + when "Spree::Country" zone_member.zoneable_id == address.country_id - when 'Spree::State' + when "Spree::State" zone_member.zoneable_id == address.state_id else false @@ -87,10 +87,10 @@ def include?(address) # convenience method for returning the countries contained within a zone def country_list @countries ||= case kind - when 'country' then zoneables - when 'state' then zoneables.collect(&:country) - else [] - end.flatten.compact.uniq + when "country" then zoneables + when "state" then zoneables.collect(&:country) + else [] + end.flatten.compact.uniq end def <=>(other) @@ -104,7 +104,7 @@ def zoneables end def country_ids - if kind == 'country' + if kind == "country" members.pluck(:zoneable_id) else [] @@ -112,7 +112,7 @@ def country_ids end def state_ids - if kind == 'state' + if kind == "state" members.pluck(:zoneable_id) else [] @@ -120,18 +120,18 @@ def state_ids end def country_ids=(ids) - set_zone_members(ids, 'Spree::Country') + set_zone_members(ids, "Spree::Country") end def state_ids=(ids) - set_zone_members(ids, 'Spree::State') + set_zone_members(ids, "Spree::State") end private def remove_defunct_members if zone_members.any? - zone_members.where('zoneable_id IS NULL OR zoneable_type != ?', "Spree::#{kind.classify}").destroy_all + zone_members.where("zoneable_id IS NULL OR zoneable_type != ?", "Spree::#{kind.classify}").destroy_all end end diff --git a/core/app/models/spree/zone_member.rb b/core/app/models/spree/zone_member.rb index a2ac6f63d68..57c2fe48d2c 100644 --- a/core/app/models/spree/zone_member.rb +++ b/core/app/models/spree/zone_member.rb @@ -2,7 +2,7 @@ module Spree class ZoneMember < Spree::Base - belongs_to :zone, class_name: 'Spree::Zone', counter_cache: true, inverse_of: :zone_members, optional: true + belongs_to :zone, class_name: "Spree::Zone", counter_cache: true, inverse_of: :zone_members, optional: true belongs_to :zoneable, polymorphic: true, optional: true delegate :name, to: :zoneable, allow_nil: true diff --git a/core/app/subscribers/spree/carton_shipped_mailer_subscriber.rb b/core/app/subscribers/spree/carton_shipped_mailer_subscriber.rb index af9c20984fa..e4d428fdec0 100644 --- a/core/app/subscribers/spree/carton_shipped_mailer_subscriber.rb +++ b/core/app/subscribers/spree/carton_shipped_mailer_subscriber.rb @@ -6,8 +6,8 @@ class CartonShippedMailerSubscriber include Omnes::Subscriber handle :carton_shipped, - with: :send_carton_shipped_emails, - id: :spree_carton_mailer_send_carton_shipped_email + with: :send_carton_shipped_emails, + id: :spree_carton_mailer_send_carton_shipped_email # Sends carton shipped emails to users. # diff --git a/core/app/subscribers/spree/order_cancel_mailer_subscriber.rb b/core/app/subscribers/spree/order_cancel_mailer_subscriber.rb index 4945a821bf8..f95255c8e41 100644 --- a/core/app/subscribers/spree/order_cancel_mailer_subscriber.rb +++ b/core/app/subscribers/spree/order_cancel_mailer_subscriber.rb @@ -6,8 +6,8 @@ class OrderCancelMailerSubscriber include Omnes::Subscriber handle :order_canceled, - with: :send_cancel_email, - id: :spree_order_mailer_send_cancel_email + with: :send_cancel_email, + id: :spree_order_mailer_send_cancel_email # Sends cancellation email to the user. # diff --git a/core/app/subscribers/spree/order_confirmation_mailer_subscriber.rb b/core/app/subscribers/spree/order_confirmation_mailer_subscriber.rb index 01bf07ffb39..795b9aa3c3f 100644 --- a/core/app/subscribers/spree/order_confirmation_mailer_subscriber.rb +++ b/core/app/subscribers/spree/order_confirmation_mailer_subscriber.rb @@ -6,8 +6,8 @@ class OrderConfirmationMailerSubscriber include Omnes::Subscriber handle :order_finalized, - with: :send_confirmation_email, - id: :spree_order_mailer_send_confirmation_email + with: :send_confirmation_email, + id: :spree_order_mailer_send_confirmation_email # Sends confirmation email to the user. # diff --git a/core/app/subscribers/spree/order_inventory_cancellation_mailer_subscriber.rb b/core/app/subscribers/spree/order_inventory_cancellation_mailer_subscriber.rb index e45b34bda87..baab51d8cb0 100644 --- a/core/app/subscribers/spree/order_inventory_cancellation_mailer_subscriber.rb +++ b/core/app/subscribers/spree/order_inventory_cancellation_mailer_subscriber.rb @@ -6,8 +6,8 @@ class OrderInventoryCancellationMailerSubscriber include Omnes::Subscriber handle :order_short_shipped, - with: :send_inventory_cancellation_email, - id: :spree_order_mailer_send_inventory_cancellation_email + with: :send_inventory_cancellation_email, + id: :spree_order_mailer_send_inventory_cancellation_email # Sends inventory cancellation email to the user. # diff --git a/core/app/subscribers/spree/reimbursement_mailer_subscriber.rb b/core/app/subscribers/spree/reimbursement_mailer_subscriber.rb index 56a4beaae53..7742bfa91be 100644 --- a/core/app/subscribers/spree/reimbursement_mailer_subscriber.rb +++ b/core/app/subscribers/spree/reimbursement_mailer_subscriber.rb @@ -6,8 +6,8 @@ class ReimbursementMailerSubscriber include Omnes::Subscriber handle :reimbursement_reimbursed, - with: :send_reimbursement_email, - id: :spree_order_mailer_send_reimbursement_email + with: :send_reimbursement_email, + id: :spree_order_mailer_send_reimbursement_email # Sends reimbursement email to the user # diff --git a/core/bin/rails b/core/bin/rails index 35347a1f6a8..91061fbdd0a 100755 --- a/core/bin/rails +++ b/core/bin/rails @@ -2,11 +2,11 @@ # This command will automatically be run when you run "rails" with Rails gems # installed from the root of your application. -ENGINE_ROOT = File.expand_path('..', __dir__) -ENGINE_PATH = File.expand_path('../lib/spree/core/engine', __dir__) +ENGINE_ROOT = File.expand_path("..", __dir__) +ENGINE_PATH = File.expand_path("../lib/spree/core/engine", __dir__) # Set up gems listed in the Gemfile. -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __dir__) +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __dir__) require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"]) require "rails/all" diff --git a/core/config/initializers/assets.rb b/core/config/initializers/assets.rb index e5021753cc3..5a2c100aed9 100644 --- a/core/config/initializers/assets.rb +++ b/core/config/initializers/assets.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true if Rails.application.config.respond_to?(:assets) - Rails.application.config.assets.precompile << 'solidus_core_manifest.js' + Rails.application.config.assets.precompile << "solidus_core_manifest.js" end diff --git a/core/config/initializers/friendly_id.rb b/core/config/initializers/friendly_id.rb index fe046af0d36..5670ad23582 100644 --- a/core/config/initializers/friendly_id.rb +++ b/core/config/initializers/friendly_id.rb @@ -18,8 +18,8 @@ # undesirable to allow as slugs. Edit this list as needed for your app. config.use :reserved - config.reserved_words = %w(new edit index session login logout users admin - stylesheets assets javascripts images) + config.reserved_words = %w[new edit index session login logout users admin + stylesheets assets javascripts images] # ## Friendly Finders # diff --git a/core/config/initializers/inflections.rb b/core/config/initializers/inflections.rb index 0ae0cd267ee..9dbd28c71e7 100644 --- a/core/config/initializers/inflections.rb +++ b/core/config/initializers/inflections.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true ActiveSupport::Inflector.inflections(:en) do |inflect| - inflect.acronym 'RMA' + inflect.acronym "RMA" end diff --git a/core/config/initializers/money.rb b/core/config/initializers/money.rb index 9c735bc7c81..0eeb8ae83de 100644 --- a/core/config/initializers/money.rb +++ b/core/config/initializers/money.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'money' +require "money" Money.locale_backend = :i18n Money.rounding_mode = BigDecimal::ROUND_HALF_EVEN diff --git a/core/db/default/spree/countries.rb b/core/db/default/spree/countries.rb index df883a8d3a7..057cb26a1bf 100644 --- a/core/db/default/spree/countries.rb +++ b/core/db/default/spree/countries.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'carmen' +require "carmen" # Insert Countries into the spree_countries table, checking to ensure that no # duplicates are created, using as few SQL statements as possible (2) @@ -8,11 +8,11 @@ connection = Spree::Base.connection country_mapper = ->(country) do - name = connection.quote country.name - iso3 = connection.quote country.alpha_3_code - iso = connection.quote country.alpha_2_code - iso_name = connection.quote country.name.upcase - numcode = connection.quote country.numeric_code + name = connection.quote country.name + iso3 = connection.quote country.alpha_3_code + iso = connection.quote country.alpha_2_code + iso_name = connection.quote country.name.upcase + numcode = connection.quote country.numeric_code states_required = connection.quote country.subregions? [name, iso3, iso, iso_name, numcode, states_required].join(", ") @@ -32,7 +32,7 @@ .join("), (") end -country_columns = %w(name iso3 iso iso_name numcode states_required).join(', ') +country_columns = %w[name iso3 iso iso_name numcode states_required].join(", ") country_vals = country_values.call if country_vals.present? diff --git a/core/db/default/spree/return_reasons.rb b/core/db/default/spree/return_reasons.rb index ddee6ae6393..29c5ab8314a 100644 --- a/core/db/default/spree/return_reasons.rb +++ b/core/db/default/spree/return_reasons.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -Spree::ReturnReason.find_or_create_by(name: 'Better price available') -Spree::ReturnReason.find_or_create_by(name: 'Missed estimated delivery date') -Spree::ReturnReason.find_or_create_by(name: 'Missing parts or accessories') -Spree::ReturnReason.find_or_create_by(name: 'Damaged during transport') -Spree::ReturnReason.find_or_create_by(name: 'Defective within warranty period') -Spree::ReturnReason.find_or_create_by(name: 'Other defects or damages') -Spree::ReturnReason.find_or_create_by(name: 'Different from what was ordered') -Spree::ReturnReason.find_or_create_by(name: 'Different from description') -Spree::ReturnReason.find_or_create_by(name: 'No longer needed/wanted') -Spree::ReturnReason.find_or_create_by(name: 'Accidental order') -Spree::ReturnReason.find_or_create_by(name: 'Unauthorized purchase') +Spree::ReturnReason.find_or_create_by(name: "Better price available") +Spree::ReturnReason.find_or_create_by(name: "Missed estimated delivery date") +Spree::ReturnReason.find_or_create_by(name: "Missing parts or accessories") +Spree::ReturnReason.find_or_create_by(name: "Damaged during transport") +Spree::ReturnReason.find_or_create_by(name: "Defective within warranty period") +Spree::ReturnReason.find_or_create_by(name: "Other defects or damages") +Spree::ReturnReason.find_or_create_by(name: "Different from what was ordered") +Spree::ReturnReason.find_or_create_by(name: "Different from description") +Spree::ReturnReason.find_or_create_by(name: "No longer needed/wanted") +Spree::ReturnReason.find_or_create_by(name: "Accidental order") +Spree::ReturnReason.find_or_create_by(name: "Unauthorized purchase") diff --git a/core/db/default/spree/stock_locations.rb b/core/db/default/spree/stock_locations.rb index f812e18ac65..88fc6b302d9 100644 --- a/core/db/default/spree/stock_locations.rb +++ b/core/db/default/spree/stock_locations.rb @@ -1,4 +1,4 @@ # frozen_string_literal: true Spree::StockLocation.create_with(backorderable_default: true) - .find_or_create_by!(name: 'default') + .find_or_create_by!(name: "default") diff --git a/core/db/default/spree/store_credit.rb b/core/db/default/spree/store_credit.rb index a3492db48f8..5219b851ea5 100644 --- a/core/db/default/spree/store_credit.rb +++ b/core/db/default/spree/store_credit.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true - Spree::PaymentMethod.create_with( name: "Store Credit", description: "Store credit", @@ -14,10 +13,10 @@ Spree::StoreCreditType.create_with(priority: 1).find_or_create_by!(name: Spree::StoreCreditType::EXPIRING) Spree::StoreCreditType.create_with(priority: 2).find_or_create_by!(name: Spree::StoreCreditType::NON_EXPIRING) -Spree::ReimbursementType.create_with(name: "Store Credit").find_or_create_by!(type: 'Spree::ReimbursementType::StoreCredit') -Spree::ReimbursementType.create_with(name: "Original").find_or_create_by!(type: 'Spree::ReimbursementType::OriginalPayment') +Spree::ReimbursementType.create_with(name: "Store Credit").find_or_create_by!(type: "Spree::ReimbursementType::StoreCredit") +Spree::ReimbursementType.create_with(name: "Original").find_or_create_by!(type: "Spree::ReimbursementType::OriginalPayment") Spree::StoreCreditCategory.find_or_create_by!(name: Spree::StoreCreditCategory::GIFT_CARD) Spree::StoreCreditCategory.find_or_create_by!(name: Spree::StoreCreditCategory::REIMBURSEMENT) -Spree::StoreCreditReason.find_or_create_by!(name: 'Credit Given In Error') +Spree::StoreCreditReason.find_or_create_by!(name: "Credit Given In Error") diff --git a/core/db/default/spree/stores.rb b/core/db/default/spree/stores.rb index 8ced1c06f61..b5191f92535 100644 --- a/core/db/default/spree/stores.rb +++ b/core/db/default/spree/stores.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -unless Spree::Store.where(code: 'sample-store').exists? +unless Spree::Store.where(code: "sample-store").exists? Spree::Store.create!( name: "Sample Store", code: "sample-store", diff --git a/core/db/default/spree/zones.rb b/core/db/default/spree/zones.rb index f02169f68ce..0ddc77964d7 100644 --- a/core/db/default/spree/zones.rb +++ b/core/db/default/spree/zones.rb @@ -3,11 +3,11 @@ eu_vat = Spree::Zone.find_or_create_by!(name: "EU_VAT", description: "Countries that make up the EU VAT zone.") north_america = Spree::Zone.find_or_create_by!(name: "North America", description: "USA + Canada") -%w(PL FI PT RO DE FR SK HU SI IE AT ES IT BE SE LV BG GB LT CY LU MT DK NL EE HR CZ GR). -each do |symbol| +%w[PL FI PT RO DE FR SK HU SI IE AT ES IT BE SE LV BG GB LT CY LU MT DK NL EE HR CZ GR] + .each do |symbol| eu_vat.zone_members.find_or_create_by!(zoneable: Spree::Country.find_by!(iso: symbol)) end -%w(US CA).each do |symbol| +%w[US CA].each do |symbol| north_america.zone_members.find_or_create_by!(zoneable: Spree::Country.find_by!(iso: symbol)) end diff --git a/core/db/migrate/20160101010000_solidus_one_four.rb b/core/db/migrate/20160101010000_solidus_one_four.rb index ce7d97325fc..23deb4a8aec 100644 --- a/core/db/migrate/20160101010000_solidus_one_four.rb +++ b/core/db/migrate/20160101010000_solidus_one_four.rb @@ -11,27 +11,27 @@ def up # but spree_api depends on it existing. This defininition comes from solidus_auth_devise's first migration, # and creates a table equivolent to it create_table "spree_users", force: true do |t| - t.string "crypted_password", limit: 128 - t.string "salt", limit: 128 - t.string "email" - t.string "remember_token" - t.string "remember_token_expires_at" - t.string "persistence_token" - t.string "single_access_token" - t.string "perishable_token" - t.integer "login_count", default: 0, null: false - t.integer "failed_login_count", default: 0, null: false + t.string "crypted_password", limit: 128 + t.string "salt", limit: 128 + t.string "email" + t.string "remember_token" + t.string "remember_token_expires_at" + t.string "persistence_token" + t.string "single_access_token" + t.string "perishable_token" + t.integer "login_count", default: 0, null: false + t.integer "failed_login_count", default: 0, null: false t.datetime "last_request_at" t.datetime "current_login_at" t.datetime "last_login_at" - t.string "current_login_ip" - t.string "last_login_ip" - t.string "login" - t.integer "ship_address_id" - t.integer "bill_address_id" + t.string "current_login_ip" + t.string "last_login_ip" + t.string "login" + t.integer "ship_address_id" + t.integer "bill_address_id" t.datetime "created_at", null: false, precision: 6 t.datetime "updated_at", null: false, precision: 6 - t.string "openid_identifier" + t.string "openid_identifier" end create_table "friendly_id_slugs", force: :cascade do |t| diff --git a/core/db/migrate/20160420044191_create_spree_wallet_payment_sources.rb b/core/db/migrate/20160420044191_create_spree_wallet_payment_sources.rb index 21641ddda38..5e07fc796d7 100644 --- a/core/db/migrate/20160420044191_create_spree_wallet_payment_sources.rb +++ b/core/db/migrate/20160420044191_create_spree_wallet_payment_sources.rb @@ -7,9 +7,9 @@ def change create_table :spree_wallet_payment_sources do |t| t.references( :user, - foreign_key: { to_table: Spree.user_class.table_name }, + foreign_key: {to_table: Spree.user_class.table_name}, index: true, - null: false, + null: false ) t.references :payment_source, polymorphic: true, null: false t.boolean :default, default: false, null: false @@ -21,7 +21,7 @@ def change :spree_wallet_payment_sources, [:user_id, :payment_source_id, :payment_source_type], unique: true, - name: 'index_spree_wallet_payment_sources_on_source_and_user', + name: "index_spree_wallet_payment_sources_on_source_and_user" ) end end diff --git a/core/db/migrate/20160420181916_migrate_credit_cards_to_wallet_payment_sources.rb b/core/db/migrate/20160420181916_migrate_credit_cards_to_wallet_payment_sources.rb index 747e4876d99..717720ebf1b 100644 --- a/core/db/migrate/20160420181916_migrate_credit_cards_to_wallet_payment_sources.rb +++ b/core/db/migrate/20160420181916_migrate_credit_cards_to_wallet_payment_sources.rb @@ -2,22 +2,23 @@ class MigrateCreditCardsToWalletPaymentSources < ActiveRecord::Migration[4.2] class CreditCard < ActiveRecord::Base - self.table_name = 'spree_credit_cards' + self.table_name = "spree_credit_cards" end + class WalletPaymentSource < ActiveRecord::Base - self.table_name = 'spree_wallet_payment_sources' + self.table_name = "spree_wallet_payment_sources" end def up - credit_cards = CreditCard. - where.not(gateway_customer_profile_id: nil). - where.not(user_id: nil) + credit_cards = CreditCard + .where.not(gateway_customer_profile_id: nil) + .where.not(user_id: nil) credit_cards.find_each do |credit_card| WalletPaymentSource.find_or_create_by!( user_id: credit_card.user_id, payment_source_id: credit_card.id, - payment_source_type: 'Spree::CreditCard' + payment_source_type: "Spree::CreditCard" ) do |wallet_source| wallet_source.default = credit_card.default end diff --git a/core/db/migrate/20161014221052_add_available_to_columns_and_remove_display_on_from_payment_methods.rb b/core/db/migrate/20161014221052_add_available_to_columns_and_remove_display_on_from_payment_methods.rb index 148b1bf4c46..d3f5c3c559d 100644 --- a/core/db/migrate/20161014221052_add_available_to_columns_and_remove_display_on_from_payment_methods.rb +++ b/core/db/migrate/20161014221052_add_available_to_columns_and_remove_display_on_from_payment_methods.rb @@ -4,25 +4,25 @@ class AddAvailableToColumnsAndRemoveDisplayOnFromPaymentMethods < ActiveRecord:: def up add_column(:spree_payment_methods, :available_to_users, :boolean, default: true) add_column(:spree_payment_methods, :available_to_admin, :boolean, default: true) - execute("UPDATE spree_payment_methods "\ - "SET available_to_users=#{quoted_false} "\ + execute("UPDATE spree_payment_methods " \ + "SET available_to_users=#{quoted_false} " \ "WHERE NOT (display_on='front_end' OR display_on='' OR display_on IS NULL)") - execute("UPDATE spree_payment_methods "\ - "SET available_to_admin=#{quoted_false} "\ + execute("UPDATE spree_payment_methods " \ + "SET available_to_admin=#{quoted_false} " \ "WHERE NOT (display_on='back_end' OR display_on='' OR display_on IS NULL)") remove_column(:spree_payment_methods, :display_on) end def down add_column(:spree_payment_methods, :display_on, :string) - execute("UPDATE spree_payment_methods "\ - "SET display_on='' "\ + execute("UPDATE spree_payment_methods " \ + "SET display_on='' " \ "WHERE (available_to_users=#{quoted_true} AND available_to_admin=#{quoted_true})") - execute("UPDATE spree_payment_methods "\ - "SET display_on='front_end' "\ + execute("UPDATE spree_payment_methods " \ + "SET display_on='front_end' " \ "WHERE (available_to_users=#{quoted_true} AND NOT available_to_admin=#{quoted_true})") - execute("UPDATE spree_payment_methods "\ - "SET display_on='back_end' "\ + execute("UPDATE spree_payment_methods " \ + "SET display_on='back_end' " \ "WHERE (available_to_admin=#{quoted_true} AND NOT available_to_users=#{quoted_true})") remove_column(:spree_payment_methods, :available_to_users) remove_column(:spree_payment_methods, :available_to_admin) diff --git a/core/db/migrate/20161123154034_add_available_to_users_and_remove_display_on_from_shipping_methods.rb b/core/db/migrate/20161123154034_add_available_to_users_and_remove_display_on_from_shipping_methods.rb index a86936a3054..58031fb076f 100644 --- a/core/db/migrate/20161123154034_add_available_to_users_and_remove_display_on_from_shipping_methods.rb +++ b/core/db/migrate/20161123154034_add_available_to_users_and_remove_display_on_from_shipping_methods.rb @@ -3,19 +3,19 @@ class AddAvailableToUsersAndRemoveDisplayOnFromShippingMethods < ActiveRecord::Migration[5.0] def up add_column(:spree_shipping_methods, :available_to_users, :boolean, default: true) - execute("UPDATE spree_shipping_methods "\ - "SET available_to_users=#{quoted_false} "\ + execute("UPDATE spree_shipping_methods " \ + "SET available_to_users=#{quoted_false} " \ "WHERE display_on='back_end'") remove_column(:spree_shipping_methods, :display_on) end def down add_column(:spree_shipping_methods, :display_on, :string) - execute("UPDATE spree_shipping_methods "\ - "SET display_on='both' "\ + execute("UPDATE spree_shipping_methods " \ + "SET display_on='both' " \ "WHERE (available_to_users=#{quoted_true})") - execute("UPDATE spree_shipping_methods "\ - "SET display_on='back_end' "\ + execute("UPDATE spree_shipping_methods " \ + "SET display_on='back_end' " \ "WHERE (available_to_users=#{quoted_false})") remove_column(:spree_shipping_methods, :available_to_users) end diff --git a/core/db/migrate/20161129035810_add_index_to_spree_payments_number.rb b/core/db/migrate/20161129035810_add_index_to_spree_payments_number.rb index 22f808cc77b..c7df0445849 100644 --- a/core/db/migrate/20161129035810_add_index_to_spree_payments_number.rb +++ b/core/db/migrate/20161129035810_add_index_to_spree_payments_number.rb @@ -2,6 +2,6 @@ class AddIndexToSpreePaymentsNumber < ActiveRecord::Migration[5.0] def change - add_index 'spree_payments', ['number'], unique: true + add_index "spree_payments", ["number"], unique: true end end diff --git a/core/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb b/core/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb index 2ace1cded4d..05a80f48f16 100644 --- a/core/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb +++ b/core/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb @@ -14,13 +14,14 @@ class Shipment < ActiveRecord::Base end def up - if InventoryUnit. - joins(:shipment). - where.not( - 'spree_inventory_units.order_id = spree_shipments.order_id' + if InventoryUnit + .joins(:shipment) + .where.not( + "spree_inventory_units.order_id = spree_shipments.order_id" ).exists? raise InconsistentInventoryUnitError, "You have inventory units with inconsistent order references. Please fix those before running this migration" end + remove_column :spree_inventory_units, :order_id end diff --git a/core/db/migrate/20180322142651_add_amount_remaining_to_store_credit_events.rb b/core/db/migrate/20180322142651_add_amount_remaining_to_store_credit_events.rb index 356e37b3cd5..aac1ddcf570 100644 --- a/core/db/migrate/20180322142651_add_amount_remaining_to_store_credit_events.rb +++ b/core/db/migrate/20180322142651_add_amount_remaining_to_store_credit_events.rb @@ -2,17 +2,17 @@ class AddAmountRemainingToStoreCreditEvents < ActiveRecord::Migration[5.0] class StoreCredit < ActiveRecord::Base - self.table_name = 'spree_store_credits' + self.table_name = "spree_store_credits" has_many :store_credit_events - VOID_ACTION = 'void' - CREDIT_ACTION = 'credit' - CAPTURE_ACTION = 'capture' - ELIGIBLE_ACTION = 'eligible' - AUTHORIZE_ACTION = 'authorize' - ALLOCATION_ACTION = 'allocation' - ADJUSTMENT_ACTION = 'adjustment' - INVALIDATE_ACTION = 'invalidate' + VOID_ACTION = "void" + CREDIT_ACTION = "credit" + CAPTURE_ACTION = "capture" + ELIGIBLE_ACTION = "eligible" + AUTHORIZE_ACTION = "authorize" + ALLOCATION_ACTION = "allocation" + ADJUSTMENT_ACTION = "adjustment" + INVALIDATE_ACTION = "invalidate" end class StoreCreditEvent < ActiveRecord::Base diff --git a/core/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb b/core/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb index e8435fbc598..8684d39e78e 100644 --- a/core/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +++ b/core/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb @@ -1,4 +1,5 @@ # frozen_string_literal: true + class AddDefaultBillngFlagToUserAddresses < ActiveRecord::Migration[5.2] def change add_column :spree_user_addresses, :default_billing, :boolean, default: false diff --git a/core/db/migrate/20210815004823_add_unique_index_to_option_values_variants.rb b/core/db/migrate/20210815004823_add_unique_index_to_option_values_variants.rb index 307cc27e7a2..cc54dcf9ca6 100644 --- a/core/db/migrate/20210815004823_add_unique_index_to_option_values_variants.rb +++ b/core/db/migrate/20210815004823_add_unique_index_to_option_values_variants.rb @@ -4,13 +4,13 @@ class AddUniqueIndexToOptionValuesVariants < ActiveRecord::Migration[5.2] def up remove_index :spree_option_values_variants, [:variant_id, :option_value_id] add_index :spree_option_values_variants, [:variant_id, :option_value_id], - name: "index_option_values_variants_on_variant_id_and_option_value_id", - unique: true + name: "index_option_values_variants_on_variant_id_and_option_value_id", + unique: true end def down remove_index :spree_option_values_variants, [:variant_id, :option_value_id] add_index :spree_option_values_variants, [:variant_id, :option_value_id], - name: "index_option_values_variants_on_variant_id_and_option_value_id" + name: "index_option_values_variants_on_variant_id_and_option_value_id" end end diff --git a/core/db/migrate/20250207104016_add_primary_taxon_to_products.rb b/core/db/migrate/20250207104016_add_primary_taxon_to_products.rb index 3d44d990869..30d41b53478 100644 --- a/core/db/migrate/20250207104016_add_primary_taxon_to_products.rb +++ b/core/db/migrate/20250207104016_add_primary_taxon_to_products.rb @@ -1,7 +1,7 @@ class AddPrimaryTaxonToProducts < ActiveRecord::Migration[7.0] def change change_table :spree_products do |t| - t.references :primary_taxon, type: :integer, foreign_key: { to_table: :spree_taxons } + t.references :primary_taxon, type: :integer, foreign_key: {to_table: :spree_taxons} end end end diff --git a/core/db/migrate/20250214094207_add_reverse_charge_status_to_store.rb b/core/db/migrate/20250214094207_add_reverse_charge_status_to_store.rb index 8013c92c376..cc879673791 100644 --- a/core/db/migrate/20250214094207_add_reverse_charge_status_to_store.rb +++ b/core/db/migrate/20250214094207_add_reverse_charge_status_to_store.rb @@ -3,6 +3,6 @@ class AddReverseChargeStatusToStore < ActiveRecord::Migration[7.0] def change add_column :spree_stores, :reverse_charge_status, :integer, default: 0, null: false, - comment: "Enum values: 0 = disabled, 1 = enabled, 2 = not_validated" + comment: "Enum values: 0 = disabled, 1 = enabled, 2 = not_validated" end end diff --git a/core/db/migrate/20250225051308_add_vat_id_email_and_reverse_charge_status_to_addresses.rb b/core/db/migrate/20250225051308_add_vat_id_email_and_reverse_charge_status_to_addresses.rb index 53006db8d88..52da89b47ee 100644 --- a/core/db/migrate/20250225051308_add_vat_id_email_and_reverse_charge_status_to_addresses.rb +++ b/core/db/migrate/20250225051308_add_vat_id_email_and_reverse_charge_status_to_addresses.rb @@ -5,6 +5,6 @@ def change add_column :spree_addresses, :vat_id, :string add_column :spree_addresses, :email, :string add_column :spree_addresses, :reverse_charge_status, :integer, default: 0, null: false, - comment: "Enum values: 0 = disabled, 1 = enabled, 2 = not_validated" + comment: "Enum values: 0 = disabled, 1 = enabled, 2 = not_validated" end end diff --git a/core/db/seeds.rb b/core/db/seeds.rb index 3196cf016b2..74bf77a520e 100644 --- a/core/db/seeds.rb +++ b/core/db/seeds.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'thor' +require "thor" shell = Thor::Base.shell.new -%w( +%w[ stores store_credit countries @@ -15,7 +15,7 @@ roles permission_sets shipping_categories -).each do |seed| +].each do |seed| shell.say_status :seed, seed require_relative "default/spree/#{seed}" end diff --git a/core/lib/generators/solidus/install/app_templates/authentication/custom.rb b/core/lib/generators/solidus/install/app_templates/authentication/custom.rb index fcb6ab525e0..1a2892588a4 100644 --- a/core/lib/generators/solidus/install/app_templates/authentication/custom.rb +++ b/core/lib/generators/solidus/install/app_templates/authentication/custom.rb @@ -1,4 +1,4 @@ -initializer 'spree_authentication.rb', <<~RUBY +initializer "spree_authentication.rb", <<~RUBY # Please replace this module with your own implementation of # ApplicationController#spree_current_user. # @@ -11,6 +11,6 @@ def spree_current_user end RUBY -create_file 'app/views/spree/admin/shared/_navigation_footer.html.erb', <<~ERB +create_file "app/views/spree/admin/shared/_navigation_footer.html.erb", <<~ERB ERB diff --git a/core/lib/generators/solidus/install/app_templates/authentication/devise.rb b/core/lib/generators/solidus/install/app_templates/authentication/devise.rb index 3549029bb4e..f47b64a222c 100644 --- a/core/lib/generators/solidus/install/app_templates/authentication/devise.rb +++ b/core/lib/generators/solidus/install/app_templates/authentication/devise.rb @@ -1,12 +1,12 @@ # Skip if already in the gemfile -if Bundler.locked_gems.dependencies['solidus_auth_devise'] - say_status :skipping, 'solidus_auth_devise is already in the gemfile' +if Bundler.locked_gems.dependencies["solidus_auth_devise"] + say_status :skipping, "solidus_auth_devise is already in the gemfile" else bundle_command("add solidus_auth_devise") end if options[:auto_accept] - migrations_flag = options[:migrate] ? '--auto-run-migrations' : '--skip-migrations' + migrations_flag = options[:migrate] ? "--auto-run-migrations" : "--skip-migrations" end generate "solidus:auth:install #{migrations_flag}" diff --git a/core/lib/generators/solidus/install/app_templates/authentication/existing.rb b/core/lib/generators/solidus/install/app_templates/authentication/existing.rb index 898254f35d8..14f637017ce 100644 --- a/core/lib/generators/solidus/install/app_templates/authentication/existing.rb +++ b/core/lib/generators/solidus/install/app_templates/authentication/existing.rb @@ -1,4 +1,4 @@ -user_class = options[:user_class] || 'Spree::User' +user_class = options[:user_class] || "Spree::User" begin user_class.classify.constantize diff --git a/core/lib/generators/solidus/install/app_templates/frontend/starter.rb b/core/lib/generators/solidus/install/app_templates/frontend/starter.rb index 7a6c7ee377d..fe7ad86d505 100644 --- a/core/lib/generators/solidus/install/app_templates/frontend/starter.rb +++ b/core/lib/generators/solidus/install/app_templates/frontend/starter.rb @@ -1 +1 @@ -apply 'https://github.com/solidusio/solidus_starter_frontend/raw/main/template.rb' +apply "https://github.com/solidusio/solidus_starter_frontend/raw/main/template.rb" diff --git a/core/lib/generators/solidus/install/app_templates/payment_method/braintree.rb b/core/lib/generators/solidus/install/app_templates/payment_method/braintree.rb index 7d6b29c891d..f6cbf6ff9f5 100644 --- a/core/lib/generators/solidus/install/app_templates/payment_method/braintree.rb +++ b/core/lib/generators/solidus/install/app_templates/payment_method/braintree.rb @@ -1,4 +1,4 @@ -unless Bundler.locked_gems.dependencies['solidus_braintree'] +unless Bundler.locked_gems.dependencies["solidus_braintree"] bundle_command 'add solidus_braintree --version "~> 3.0"' end diff --git a/core/lib/generators/solidus/install/app_templates/payment_method/paypal.rb b/core/lib/generators/solidus/install/app_templates/payment_method/paypal.rb index e6e4bc647aa..002fb554e9c 100644 --- a/core/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +++ b/core/lib/generators/solidus/install/app_templates/payment_method/paypal.rb @@ -1,4 +1,4 @@ -unless Bundler.locked_gems.dependencies['solidus_paypal_commerce_platform'] +unless Bundler.locked_gems.dependencies["solidus_paypal_commerce_platform"] bundle_command "add solidus_paypal_commerce_platform --version='~> 1.0'" end diff --git a/core/lib/generators/solidus/install/app_templates/payment_method/stripe.rb b/core/lib/generators/solidus/install/app_templates/payment_method/stripe.rb index 9727bb62fa5..bebe945d4a3 100644 --- a/core/lib/generators/solidus/install/app_templates/payment_method/stripe.rb +++ b/core/lib/generators/solidus/install/app_templates/payment_method/stripe.rb @@ -1,5 +1,5 @@ -unless Bundler.locked_gems.dependencies['solidus_stripe'] +unless Bundler.locked_gems.dependencies["solidus_stripe"] bundle_command "add solidus_stripe --version '~> 5.a'" end -generate 'solidus_stripe:install' +generate "solidus_stripe:install" diff --git a/core/lib/generators/solidus/install/install_generator.rb b/core/lib/generators/solidus/install/install_generator.rb index 4bf4eb84336..adcf5d45556 100644 --- a/core/lib/generators/solidus/install/install_generator.rb +++ b/core/lib/generators/solidus/install/install_generator.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require 'rails/version' -require 'rails/generators' -require 'rails/generators/app_base' +require "rails/version" +require "rails/generators" +require "rails/generators/app_base" module Solidus # @private @@ -12,30 +12,30 @@ class InstallGenerator < Rails::Generators::AppBase CORE_MOUNT_ROUTE = "mount Spree::Core::Engine" FRONTENDS = [ - { name: 'starter', description: 'Generate all necessary controllers and views directly in your Rails app', default: true }, - { name: 'none', description: 'Skip installing a frontend' } + {name: "starter", description: "Generate all necessary controllers and views directly in your Rails app", default: true}, + {name: "none", description: "Skip installing a frontend"} ] AUTHENTICATIONS = [ - { name: 'devise', description: 'Install and configure the standard `devise` integration', default: true }, - { name: 'existing', description: 'Integrate and configure an existing `devise` setup' }, - { name: 'custom', description: 'A starter configuration for rolling your own authentication system' }, - { name: 'none', description: 'Don\'t add any configuration for authentication' } + {name: "devise", description: "Install and configure the standard `devise` integration", default: true}, + {name: "existing", description: "Integrate and configure an existing `devise` setup"}, + {name: "custom", description: "A starter configuration for rolling your own authentication system"}, + {name: "none", description: "Don't add any configuration for authentication"} ] PAYMENT_METHODS = [ - { name: 'paypal', description: 'Install `solidus_paypal_commerce_platform`', default: true }, - { name: 'stripe', description: 'Install `solidus_stripe`', default: false }, - { name: 'braintree', description: 'Install `solidus_braintree`', default: false }, - { name: 'none', description: 'Skip installing a payment method', default: false } + {name: "paypal", description: "Install `solidus_paypal_commerce_platform`", default: true}, + {name: "stripe", description: "Install `solidus_stripe`", default: false}, + {name: "braintree", description: "Install `solidus_braintree`", default: false}, + {name: "none", description: "Skip installing a payment method", default: false} ] - class_option :migrate, type: :boolean, default: true, banner: 'Run Solidus migrations' - class_option :seed, type: :boolean, default: true, banner: 'Load seed data (migrations must be run)' - class_option :sample, type: :boolean, default: true, banner: 'Load sample data (migrations and seeds must be run)' - class_option :active_storage, type: :boolean, default: true, banner: 'Install ActiveStorage as image attachments handler for products and taxons' - class_option :admin_preview, type: :boolean, default: true, desc: 'Install the admin preview' - class_option :build_admin_tailwind, type: :boolean, default: true, desc: 'Build and install Solidus Admin Tailwind CSS file and rake tasks' + class_option :migrate, type: :boolean, default: true, banner: "Run Solidus migrations" + class_option :seed, type: :boolean, default: true, banner: "Load seed data (migrations must be run)" + class_option :sample, type: :boolean, default: true, banner: "Load sample data (migrations and seeds must be run)" + class_option :active_storage, type: :boolean, default: true, banner: "Install ActiveStorage as image attachments handler for products and taxons" + class_option :admin_preview, type: :boolean, default: true, desc: "Install the admin preview" + class_option :build_admin_tailwind, type: :boolean, default: true, desc: "Build and install Solidus Admin Tailwind CSS file and rake tasks" class_option :auto_accept, type: :boolean class_option :user_class, type: :string class_option :admin_email, type: :string @@ -58,45 +58,45 @@ def prepare_options @load_sample_data = options[:sample] && @run_migrations && @load_seed_data @selected_frontend = selected_option_for( - 'frontend', - selected: ENV['FRONTEND'] || options[:frontend], - available_options: FRONTENDS, + "frontend", + selected: ENV["FRONTEND"] || options[:frontend], + available_options: FRONTENDS ) @selected_authentication = selected_option_for( - 'authentication', + "authentication", selected: - ('devise' if @selected_frontend == 'starter') || - ('devise' if has_gem?('solidus_auth_devise')) || - ENV['AUTHENTICATION'] || options[:authentication], - available_options: AUTHENTICATIONS, + ("devise" if @selected_frontend == "starter") || + ("devise" if has_gem?("solidus_auth_devise")) || + ENV["AUTHENTICATION"] || options[:authentication], + available_options: AUTHENTICATIONS ) @selected_payment_method = selected_option_for( - 'payment method', + "payment method", selected: - ('paypal' if has_gem?('solidus_paypal_commerce_platform')) || - ('stripe' if has_gem?('solidus_stripe')) || - ('bolt' if has_gem?('solidus_bolt')) || - ENV['PAYMENT_METHOD'] || options[:payment_method], - available_options: PAYMENT_METHODS, + ("paypal" if has_gem?("solidus_paypal_commerce_platform")) || + ("stripe" if has_gem?("solidus_stripe")) || + ("bolt" if has_gem?("solidus_bolt")) || + ENV["PAYMENT_METHOD"] || options[:payment_method], + available_options: PAYMENT_METHODS ) # Silence verbose output (e.g. Rails migrations will rely on this environment variable) - ENV['VERBOSE'] = 'false' + ENV["VERBOSE"] = "false" # No reason to check for their presence if we're about to install them - ENV['SOLIDUS_SKIP_MIGRATIONS_CHECK'] = 'true' + ENV["SOLIDUS_SKIP_MIGRATIONS_CHECK"] = "true" end def install_routes - if Pathname(app_path).join('config', 'routes.rb').read.include? CORE_MOUNT_ROUTE + if Pathname(app_path).join("config", "routes.rb").read.include? CORE_MOUNT_ROUTE say_status :route_exist, CORE_MOUNT_ROUTE, :blue else say_status :installing, "solidus routes" mount_point = options[:mount_point] || ask_with_default( desc: 'Where would you like to mount Solidus? (E.g. "/store" or "/shop")', - default: '/', + default: "/" ) shell.mute do @@ -120,23 +120,23 @@ def install_routes end def add_files - template 'config/initializers/spree.rb.tt', 'config/initializers/spree.rb' + template "config/initializers/spree.rb.tt", "config/initializers/spree.rb" end def install_file_attachment if options[:active_storage] say_status :assets, "Active Storage", :green - rake 'active_storage:install' + rake "active_storage:install" else say_status :assets, "Paperclip", :green - gsub_file 'config/initializers/spree.rb', "::ActiveStorageAttachment", "::PaperclipAttachment" + gsub_file "config/initializers/spree.rb", "::ActiveStorageAttachment", "::PaperclipAttachment" end end def setup_assets - empty_directory 'app/assets/images' + empty_directory "app/assets/images" - %w{javascripts stylesheets images}.each do |path| + %w[javascripts stylesheets images].each do |path| empty_directory "vendor/assets/#{path}/spree/backend" if defined?(Spree::Backend) || Rails.env.test? end @@ -158,19 +158,19 @@ def include_seed_data def install_migrations say_status :copying, "migrations" - rake 'railties:install:migrations' + rake "railties:install:migrations" end def create_database say_status :creating, "database" - rake 'db:create' + rake "db:create" end def run_migrations if @run_migrations say_status :running, "migrations" - rake 'db:migrate' + rake "db:migrate" else say_status :skipping, "migrations (don't forget to run rake db:migrate)" end @@ -186,10 +186,10 @@ def install_solidus_admin return unless options[:admin_preview] say_status :installing, "SolidusAdmin", :blue - unless File.read(app_path.join('Gemfile')).include?('solidus_admin') + unless File.read(app_path.join("Gemfile")).include?("solidus_admin") bundle_command 'add solidus_admin -v ">= 0.2"' end - generate "solidus_admin:install #{'--tailwind' if options[:build_admin_tailwind]}" + generate "solidus_admin:install #{"--tailwind" if options[:build_admin_tailwind]}" end def populate_seed_data @@ -200,7 +200,7 @@ def populate_seed_data rake_options << "ADMIN_EMAIL=#{options[:admin_email]}" if options[:admin_email] rake_options << "ADMIN_PASSWORD=#{options[:admin_password]}" if options[:admin_password] - rake("db:seed #{rake_options.join(' ')}") + rake("db:seed #{rake_options.join(" ")}") else say_status :skipping, "seed data (you can always run rake db:seed)" end @@ -209,7 +209,7 @@ def populate_seed_data def load_sample_data if @load_sample_data say_status :loading, "sample data" - rake 'spree_sample:load' + rake "spree_sample:load" else say_status :skipping, "sample data (you can always run rake spree_sample:load)" end @@ -223,7 +223,7 @@ def complete def bundle_command(command, env = {}) # Make `bundle install` less verbose by skipping the "Using ..." messages - super(command, env.reverse_merge('BUNDLE_SUPPRESS_INSTALL_USING_MESSAGES' => 'true')) + super(command, env.reverse_merge("BUNDLE_SUPPRESS_INSTALL_USING_MESSAGES" => "true")) ensure Bundler.reset_paths! end @@ -268,7 +268,7 @@ def ask_with_description(desc:, limited_to:, default:) def apply_template_for(topic, selected) template_path = Dir["#{__dir__}/app_templates/#{topic}/*.rb"].find do |path| - File.basename(path, '.rb') == selected + File.basename(path, ".rb") == selected end unless template_path diff --git a/core/lib/generators/solidus/update/update_generator.rb b/core/lib/generators/solidus/update/update_generator.rb index ee6521d692a..cc86e60bd34 100644 --- a/core/lib/generators/solidus/update/update_generator.rb +++ b/core/lib/generators/solidus/update/update_generator.rb @@ -1,50 +1,51 @@ # frozen_string_literal: true -require 'spree/preferences/preference_differentiator' -require 'rails/generators' +require "spree/preferences/preference_differentiator" +require "rails/generators" module Solidus # @private class UpdateGenerator < ::Rails::Generators::Base FROM = Spree.previous_solidus_minor_version - desc 'Generates a new initializer to preview the new defaults for current Solidus version and copy new migrations' + desc "Generates a new initializer to preview the new defaults for current Solidus version and copy new migrations" - source_root File.expand_path('templates', __dir__) + source_root File.expand_path("templates", __dir__) class_option :initializer_basename, - type: :string, - default: 'new_solidus_defaults', - banner: 'The name for the new initializer' + type: :string, + default: "new_solidus_defaults", + banner: "The name for the new initializer" class_option :previous_version_prompt, - type: :boolean, - default: true, - banner: 'Prompt to warn about only previous version support' + type: :boolean, + default: true, + banner: "Prompt to warn about only previous version support" class_option :from, - type: :string, - default: FROM, - banner: 'Solidus version from which you are upgrading' + type: :string, + default: FROM, + banner: "Solidus version from which you are upgrading" class_option :to, - type: :string, - default: Spree.solidus_version, - hide: true + type: :string, + default: Spree.solidus_version, + hide: true class_option :initializer_directory, - type: :string, - default: 'config/initializers/', - hide: true + type: :string, + default: "config/initializers/", + hide: true class_option :install_migrations, - type: :boolean, - default: true, - hide: true + type: :boolean, + default: true, + hide: true def create_new_defaults_initializer previous_version_prompt = options[:previous_version_prompt] return if previous_version_prompt && !yes?(<<~MSG, :red) + The default preferences update process is only supported if you are coming from version #{FROM}. If this is not the case, please, skip it and update your application to use Solidus #{FROM} before retrying. If you are confident you want to upgrade from a previous version, you must rerun the generator with the "--from={OLD_VERSION}" argument. Are you sure you want to continue? (y/N) @@ -58,15 +59,15 @@ def create_new_defaults_initializer @backend_changes = backend_changes_template(from, to) @api_changes = api_changes_template(from, to) - template 'config/initializers/new_solidus_defaults.rb.tt', - File.join(options[:initializer_directory], "#{options[:initializer_basename]}.rb") + template "config/initializers/new_solidus_defaults.rb.tt", + File.join(options[:initializer_directory], "#{options[:initializer_basename]}.rb") end def install_migrations return unless options[:install_migrations] say_status :copying, "migrations" - rake 'spree:install:migrations' + rake "spree:install:migrations" end def print_message @@ -92,26 +93,26 @@ def core_changes_template(from, to) end def frontend_changes_template(from, to) - return '' unless defined?(Spree::Frontend::Engine) + return "" unless defined?(Spree::Frontend::Engine) changes_template_for(Spree::FrontendConfiguration, from, to) end def backend_changes_template(from, to) - return '' unless defined?(Spree::Backend::Engine) + return "" unless defined?(Spree::Backend::Engine) changes_template_for(Spree::BackendConfiguration, from, to) end def api_changes_template(from, to) - return '' unless defined?(Spree::Api::Engine) + return "" unless defined?(Spree::Api::Engine) changes_template_for(Spree::ApiConfiguration, from, to) end def changes_template_for(klass, from, to) changes = Spree::Preferences::PreferenceDifferentiator.new(klass).call(from:, to:) - return '# No changes' if changes.empty? + return "# No changes" if changes.empty? [ ["config.load_defaults('#{from}')"] + diff --git a/core/lib/generators/spree/custom_user/custom_user_generator.rb b/core/lib/generators/spree/custom_user/custom_user_generator.rb index 5251a053c2d..7f53204ffc0 100644 --- a/core/lib/generators/spree/custom_user/custom_user_generator.rb +++ b/core/lib/generators/spree/custom_user/custom_user_generator.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails/generators/active_record/migration' +require "rails/generators/active_record/migration" module Spree # @private @@ -9,7 +9,7 @@ class CustomUserGenerator < Rails::Generators::NamedBase desc "Set up a Solidus installation with a custom User class" - source_root File.expand_path('templates', File.dirname(__FILE__)) + source_root File.expand_path("templates", File.dirname(__FILE__)) def check_for_constant klass @@ -19,17 +19,17 @@ def check_for_constant end def generate - migration_template 'migration.rb.tt', "db/migrate/add_spree_fields_to_custom_user_table.rb" - template 'authentication_helpers.rb.tt', "lib/spree/authentication_helpers.rb" + migration_template "migration.rb.tt", "db/migrate/add_spree_fields_to_custom_user_table.rb" + template "authentication_helpers.rb.tt", "lib/spree/authentication_helpers.rb" - initializer 'solidus_authentication', <<~RUBY + initializer "solidus_authentication", <<~RUBY Rails.application.config.to_prepare do ApplicationController.include Spree::AuthenticationHelpers, Spree::CurrentUserHelpers Spree::Api::BaseController.include Spree::CurrentUserHelpers if defined? Spree::Api end RUBY - gsub_file 'config/initializers/spree.rb', /Spree\.user_class.?=.?.+$/, %{Spree.user_class = "#{class_name}"} + gsub_file "config/initializers/spree.rb", /Spree\.user_class.?=.?.+$/, %(Spree.user_class = "#{class_name}") end private diff --git a/core/lib/generators/spree/dummy/dummy_generator.rb b/core/lib/generators/spree/dummy/dummy_generator.rb index a2c6024e653..aa1d390dbb6 100644 --- a/core/lib/generators/spree/dummy/dummy_generator.rb +++ b/core/lib/generators/spree/dummy/dummy_generator.rb @@ -1,20 +1,20 @@ # frozen_string_literal: true require "rails/generators/rails/app/app_generator" -require 'active_support/core_ext/hash' -require 'spree/core/version' +require "active_support/core_ext/hash" +require "spree/core/version" module Spree # @private class DummyGenerator < Rails::Generators::Base desc "Creates blank Rails application, installs Solidus and all sample data" - class_option :lib_name, default: '' - class_option :database, default: '' + class_option :lib_name, default: "" + class_option :database, default: "" def self.source_paths paths = superclass.source_paths - paths << File.expand_path('templates', __dir__) + paths << File.expand_path("templates", __dir__) paths.flatten end @@ -30,7 +30,7 @@ def generate_test_dummy # calling slice on a Thor::CoreExtensions::HashWithIndifferentAccess # object has been known to return nil opts = {}.merge(options).slice(*PASSTHROUGH_OPTIONS) - opts[:database] = 'sqlite3' if opts[:database].blank? + opts[:database] = "sqlite3" if opts[:database].blank? opts[:force] = true opts[:skip_bundle] = true opts[:skip_gemfile] = true @@ -68,9 +68,9 @@ def test_dummy_config def test_dummy_inject_extension_requirements if DummyGeneratorHelper.inject_extension_requirements inside dummy_path do - inject_require_for('spree_frontend') - inject_require_for('spree_backend') - inject_require_for('spree_api') + inject_require_for("spree_frontend") + inject_require_for("spree_backend") + inject_require_for("spree_api") end end end @@ -98,23 +98,22 @@ def test_dummy_clean protected def inject_require_for(requirement) - inject_into_file 'config/application.rb', ( - <<~RUBY + inject_into_file "config/application.rb", + <<~RUBY, begin require '#{requirement}' rescue LoadError # #{requirement} is not available. end - RUBY - ), before: /require '#{@lib_name}'/, verbose: true + RUBY before: /require '#{@lib_name}'/, verbose: true end def dummy_path - ENV['DUMMY_PATH'] || 'spec/dummy' + ENV["DUMMY_PATH"] || "spec/dummy" end def module_name - 'Dummy' + "Dummy" end def application_definition @@ -126,10 +125,10 @@ def application_definition end end end - alias :store_application_definition! :application_definition + alias_method :store_application_definition!, :application_definition def camelized - @camelized ||= name.gsub(/\W/, '_').squeeze('_').camelize + @camelized ||= name.gsub(/\W/, "_").squeeze("_").camelize end def remove_directory_if_exists(path) @@ -140,9 +139,9 @@ def gemfile_path core_gems = ["spree/core", "spree/api", "spree/backend", "spree/frontend"] if core_gems.include?(lib_name) - '../../../../../Gemfile' + "../../../../../Gemfile" else - '../../../../Gemfile' + "../../../../Gemfile" end end end diff --git a/core/lib/generators/spree/dummy/templates/rails/boot.rb b/core/lib/generators/spree/dummy/templates/rails/boot.rb index 7c8a8d2d330..c8250d51c8c 100644 --- a/core/lib/generators/spree/dummy/templates/rails/boot.rb +++ b/core/lib/generators/spree/dummy/templates/rails/boot.rb @@ -1,6 +1,6 @@ -require 'rubygems' +require "rubygems" gemfile = File.expand_path("<%= gemfile_path %>", __FILE__) -ENV['BUNDLE_GEMFILE'] = gemfile -require 'bundler' +ENV["BUNDLE_GEMFILE"] = gemfile +require "bundler" Bundler.setup diff --git a/core/lib/generators/spree/dummy/templates/rails/test.rb b/core/lib/generators/spree/dummy/templates/rails/test.rb index a2ae2175dc3..cc7a85e9b64 100644 --- a/core/lib/generators/spree/dummy/templates/rails/test.rb +++ b/core/lib/generators/spree/dummy/templates/rails/test.rb @@ -9,16 +9,16 @@ # Configure static asset server for tests with Cache-Control for performance config.public_file_server.enabled = true - config.public_file_server.headers = { 'Cache-Control' => "public, max-age=3600" } + config.public_file_server.headers = {"Cache-Control" => "public, max-age=3600"} # Show full error reports and disable caching - config.consider_all_requests_local = true + config.consider_all_requests_local = true config.action_controller.perform_caching = false config.eager_load = false # Raise exceptions instead of rendering exception templates - if Rails.gem_version >= Gem::Version.new('7.1') + if Rails.gem_version >= Gem::Version.new("7.1") config.action_controller.raise_on_missing_callback_actions = true config.action_dispatch.show_exceptions = :none else @@ -37,7 +37,7 @@ config.active_storage.service = :test # Raise on deprecation warnings - if ENV['SOLIDUS_RAISE_DEPRECATIONS'].present? + if ENV["SOLIDUS_RAISE_DEPRECATIONS"].present? Spree.deprecator.behavior = :raise end end diff --git a/core/lib/solidus_core.rb b/core/lib/solidus_core.rb index 3b69d6d6664..daeae3a8062 100644 --- a/core/lib/solidus_core.rb +++ b/core/lib/solidus_core.rb @@ -1,3 +1,3 @@ # frozen_string_literal: true -require 'spree_core' +require "spree_core" diff --git a/core/lib/spree/app_configuration.rb b/core/lib/spree/app_configuration.rb index 13b1492548b..94412c341ea 100644 --- a/core/lib/spree/app_configuration.rb +++ b/core/lib/spree/app_configuration.rb @@ -19,14 +19,15 @@ # require "spree/core/search/base" require "spree/core/search/variant" -require 'spree/preferences/configuration' -require 'spree/core/environment' +require "spree/preferences/configuration" +require "spree/core/environment" -require 'uri' +require "uri" module Spree class AppConfiguration < Preferences::Configuration include Spree::Core::EnvironmentExtension + # Preferences (alphabetized to more easily lookup particular preferences) # @!attribute [rw] address_requires_phone @@ -39,7 +40,7 @@ class AppConfiguration < Preferences::Configuration # @!attribute [rw] admin_interface_logo # @return [String] URL of logo used in admin (default: +'logo/solidus.svg'+) - preference :admin_interface_logo, :string, default: 'logo/solidus.svg' + preference :admin_interface_logo, :string, default: "logo/solidus.svg" # @!attribute [rw] admin_products_per_page # @return [Integer] Number of products to display in admin (default: +10+) @@ -146,7 +147,7 @@ class AppConfiguration < Preferences::Configuration # @!attribute [rw] default_country_iso # Default customer country ISO code # @return [String] Two-letter ISO code of a {Spree::Country} to assumed as the country of an unidentified customer (default: "US") - preference :default_country_iso, :string, default: 'US' + preference :default_country_iso, :string, default: "US" # @!attribute [rw] default_email_regexp # @return [Regexp] Regex to be used in email validations, for example in Spree::EmailValidator @@ -166,7 +167,7 @@ class AppConfiguration < Preferences::Configuration # @!attribute [rw] layout # @return [String] template to use for layout on the frontend (default: +"spree/layouts/spree_application"+) - preference :layout, :string, default: 'spree/layouts/spree_application' + preference :layout, :string, default: "spree/layouts/spree_application" # !@attribute [rw] line_item_comparison_hooks # @return [Array] An array of methods to call on {Spree::Order} to determine if a line item is equal to another @@ -177,7 +178,7 @@ class AppConfiguration < Preferences::Configuration # @!attribute [rw] logo # @return [String] URL of logo used on frontend (default: +'logo/solidus.svg'+) - preference :logo, :string, default: 'logo/solidus.svg' + preference :logo, :string, default: "logo/solidus.svg" # @!attribute [rw] log_entry_permitted_classes # @return [Array] An array of extra classes that are allowed to be @@ -261,7 +262,7 @@ class AppConfiguration < Preferences::Configuration # @return [Array] An array of roles where generating an api key for a user # at role_user creation is desired when user has one of these roles. # (default: +['admin']+) - preference :roles_for_auto_api_key, :array, default: ['admin'] + preference :roles_for_auto_api_key, :array, default: ["admin"] # @!attribute [rw] countries_that_use_nested_subregions # @return [Array] An array of countries that use nested subregions, instead @@ -269,7 +270,7 @@ class AppConfiguration < Preferences::Configuration # to ensure the correct states are generated, and when running the states # regenerate rake task. # (default: +['IT']+) - preference :countries_that_use_nested_subregions, :array, default: ['IT'] + preference :countries_that_use_nested_subregions, :array, default: ["IT"] # @!attribute [rw] send_core_emails # @return [Boolean] Whether to send transactional emails (default: true) @@ -318,14 +319,14 @@ def available_currencies end # searcher_class allows spree extension writers to provide their own Search class - class_name_attribute :searcher_class, default: 'Spree::Core::Search::Base' + class_name_attribute :searcher_class, default: "Spree::Core::Search::Base" # Allows implementing custom pricing for variants # @!attribute [rw] variant_price_selector_class # @see Spree::Variant::PriceSelector # @return [Class] an object that conforms to the API of # the standard variant price selector class Spree::Variant::PriceSelector. - class_name_attribute :variant_price_selector_class, default: 'Spree::Variant::PriceSelector' + class_name_attribute :variant_price_selector_class, default: "Spree::Variant::PriceSelector" # Shortcut for getting the variant price selector's pricing options class # @@ -339,7 +340,7 @@ def default_pricing_options pricing_options_class.new end - class_name_attribute :variant_search_class, default: 'Spree::Core::Search::Variant' + class_name_attribute :variant_search_class, default: "Spree::Core::Search::Variant" # Allows implementing custom vat prices generation # @!attribute [rw] variant_vat_prices_generator_class @@ -347,20 +348,20 @@ def default_pricing_options # @return [Class] an object that conforms to the API of # the standard variant vat prices generator class # Spree::Variant::VatPriceGenerator. - class_name_attribute :variant_vat_prices_generator_class, default: 'Spree::Variant::VatPriceGenerator' + class_name_attribute :variant_vat_prices_generator_class, default: "Spree::Variant::VatPriceGenerator" - class_name_attribute :allocator_class, default: 'Spree::Stock::Allocator::OnHandFirst' + class_name_attribute :allocator_class, default: "Spree::Stock::Allocator::OnHandFirst" - class_name_attribute :shipping_rate_sorter_class, default: 'Spree::Stock::ShippingRateSorter' + class_name_attribute :shipping_rate_sorter_class, default: "Spree::Stock::ShippingRateSorter" - class_name_attribute :shipping_rate_selector_class, default: 'Spree::Stock::ShippingRateSelector' + class_name_attribute :shipping_rate_selector_class, default: "Spree::Stock::ShippingRateSelector" # Allows providing your own class for calculating taxes on a shipping rate. # # @!attribute [rw] shipping_rate_tax_calculator_class # @return [Class] a class with the same public interfaces as # Spree::TaxCalculator::ShippingRate - class_name_attribute :shipping_rate_tax_calculator_class, default: 'Spree::TaxCalculator::ShippingRate' + class_name_attribute :shipping_rate_tax_calculator_class, default: "Spree::TaxCalculator::ShippingRate" # Allows providing your own Mailer for order mailer. # @@ -369,14 +370,14 @@ def default_pricing_options # "cancel_email" and "inventory_cancellation_email" # (e.g. an ActionMailer with a "confirm_email" method) with the same # signature as Spree::OrderMailer.confirm_email. - class_name_attribute :order_mailer_class, default: 'Spree::OrderMailer' + class_name_attribute :order_mailer_class, default: "Spree::OrderMailer" # Allows providing your own order update attributes class for checkout. # # @!attribute [rw] order_update_attributes_class # @return [Class] a class that responds to "call" # with the same signature as Spree::OrderUpdateAttributes. - class_name_attribute :order_update_attributes_class, default: 'Spree::OrderUpdateAttributes' + class_name_attribute :order_update_attributes_class, default: "Spree::OrderUpdateAttributes" # Allows providing a different order recalculator. # @!attribute [rw] order_recalculator_class @@ -384,7 +385,7 @@ def default_pricing_options # @return [Class] an object that conforms to the API of # the standard order recalculator class # Spree::OrderUpdater. - class_name_attribute :order_recalculator_class, default: 'Spree::OrderUpdater' + class_name_attribute :order_recalculator_class, default: "Spree::OrderUpdater" # Allows providing your own Mailer for reimbursement mailer. # @@ -392,7 +393,7 @@ def default_pricing_options # @return [ActionMailer::Base] an object that responds to "reimbursement_email" # (e.g. an ActionMailer with a "reimbursement_email" method) with the same # signature as Spree::ReimbursementMailer.reimbursement_email. - class_name_attribute :reimbursement_mailer_class, default: 'Spree::ReimbursementMailer' + class_name_attribute :reimbursement_mailer_class, default: "Spree::ReimbursementMailer" # Allows providing your own Mailer for shipped cartons. # @@ -400,14 +401,14 @@ def default_pricing_options # @return [ActionMailer::Base] an object that responds to "shipped_email" # (e.g. an ActionMailer with a "shipped_email" method) with the same # signature as Spree::CartonMailer.shipped_email. - class_name_attribute :carton_shipped_email_class, default: 'Spree::CartonMailer' + class_name_attribute :carton_shipped_email_class, default: "Spree::CartonMailer" # Allows providing your own class for merging two orders. # # @!attribute [rw] order_merger_class # @return [Class] a class with the same public interfaces # as Spree::OrderMerger. - class_name_attribute :order_merger_class, default: 'Spree::OrderMerger' + class_name_attribute :order_merger_class, default: "Spree::OrderMerger" # Allows providing your own class for adding default payments to a user's # order from their "wallet". @@ -415,21 +416,21 @@ def default_pricing_options # @!attribute [rw] default_payment_builder_class # @return [Class] a class with the same public interfaces as # Spree::Wallet::DefaultPaymentBuilder. - class_name_attribute :default_payment_builder_class, default: 'Spree::Wallet::DefaultPaymentBuilder' + class_name_attribute :default_payment_builder_class, default: "Spree::Wallet::DefaultPaymentBuilder" # Allows providing your own class for managing the contents of an order. # # @!attribute [rw] order_contents_class # @return [Class] a class with the same public interfaces as # Spree::OrderContents. - class_name_attribute :order_contents_class, default: 'Spree::SimpleOrderContents' + class_name_attribute :order_contents_class, default: "Spree::SimpleOrderContents" # Allows providing your own class for shipping an order. # # @!attribute [rw] order_shipping_class # @return [Class] a class with the same public interfaces as # Spree::OrderShipping. - class_name_attribute :order_shipping_class, default: 'Spree::OrderShipping' + class_name_attribute :order_shipping_class, default: "Spree::OrderShipping" # Allows providing your own class for managing the inventory units of a # completed order. @@ -437,7 +438,7 @@ def default_pricing_options # @!attribute [rw] order_cancellations_class # @return [Class] a class with the same public interfaces as # Spree::OrderCancellations. - class_name_attribute :order_cancellations_class, default: 'Spree::OrderCancellations' + class_name_attribute :order_cancellations_class, default: "Spree::OrderCancellations" # Allows providing your own class for canceling payments. # @@ -456,14 +457,14 @@ def payment_canceller # @!attribute [rw] add_payment_sources_to_wallet_class # @return [Class] a class with the same public interfaces # as Spree::Wallet::AddPaymentSourcesToWallet. - class_name_attribute :add_payment_sources_to_wallet_class, default: 'Spree::Wallet::AddPaymentSourcesToWallet' + class_name_attribute :add_payment_sources_to_wallet_class, default: "Spree::Wallet::AddPaymentSourcesToWallet" # Allows providing your own class for recalculating totals on an item. # # @!attribute [rw] item_total_class # @return [Class] a class with the same public interfaces as # Spree::ItemTotal - class_name_attribute :item_total_class, default: 'Spree::ItemTotal' + class_name_attribute :item_total_class, default: "Spree::ItemTotal" # Allows providing your own class for calculating taxes on an order. # @@ -472,42 +473,42 @@ def payment_canceller # @!attribute [rw] tax_adjuster_class # @return [Class] a class with the same public interfaces as # Spree::Tax::OrderAdjuster - class_name_attribute :tax_adjuster_class, default: 'Spree::Tax::OrderAdjuster' + class_name_attribute :tax_adjuster_class, default: "Spree::Tax::OrderAdjuster" # Allows providing your own class for calculating taxes on an order. # # @!attribute [rw] tax_calculator_class # @return [Class] a class with the same public interfaces as # Spree::TaxCalculator::Default - class_name_attribute :tax_calculator_class, default: 'Spree::TaxCalculator::Default' + class_name_attribute :tax_calculator_class, default: "Spree::TaxCalculator::Default" # Allows providing your own class for choosing which store to use. # # @!attribute [rw] current_store_selector_class # @return [Class] a class with the same public interfaces as # Spree::CurrentStoreSelector - class_name_attribute :current_store_selector_class, default: 'Spree::StoreSelector::ByServerName' + class_name_attribute :current_store_selector_class, default: "Spree::StoreSelector::ByServerName" # Allows providing your own class for creating urls on taxons # # @!attribute [rw] taxon_url_parametizer_class # @return [Class] a class that provides a `#parameterize` method that # returns a String - class_name_attribute :taxon_url_parametizer_class, default: 'ActiveSupport::Inflector' + class_name_attribute :taxon_url_parametizer_class, default: "ActiveSupport::Inflector" # Allows providing your own class for image galleries on Variants # # @!attribute [rw] variant_gallery_class # @return [Class] a class that implements an `images` method and returns an # Enumerable of images adhering to the present_image_class interface - class_name_attribute :variant_gallery_class, default: 'Spree::Gallery::VariantGallery' + class_name_attribute :variant_gallery_class, default: "Spree::Gallery::VariantGallery" # Allows providing your own class for image galleries on Products # # @!attribute [rw] product_gallery_class # @return [Class] a class that implements an `images` method and returns an # Enumerable of images adhering to the present_image_class interface - class_name_attribute :product_gallery_class, default: 'Spree::Gallery::ProductGallery' + class_name_attribute :product_gallery_class, default: "Spree::Gallery::ProductGallery" # Allows switching attachment library for Image # @@ -525,7 +526,7 @@ def payment_canceller # `%w(image/jpeg image/jpg image/png image/gif).freeze` is the default. # # @return [Array] - class_name_attribute :allowed_image_mime_types, default: %w(image/jpeg image/jpg image/png image/gif).freeze + class_name_attribute :allowed_image_mime_types, default: %w[image/jpeg image/jpg image/png image/gif].freeze # @!attribute [rw] product_image_style_default # @@ -544,10 +545,10 @@ def payment_canceller # large: '1200x1200>' } is the default. # # @return [Hash] - class_name_attribute :product_image_styles, default: { mini: '48x48>', - small: '400x400>', - product: '680x680>', - large: '1200x1200>' } + class_name_attribute :product_image_styles, default: {mini: "48x48>", + small: "400x400>", + product: "680x680>", + large: "1200x1200>"} # Allows providing your own class for prioritizing store credit application # to an order. @@ -555,14 +556,14 @@ def payment_canceller # @!attribute [rw] store_credit_prioritizer_class # @return [Class] a class with the same public interfaces as # Spree::StoreCreditPrioritizer. - class_name_attribute :store_credit_prioritizer_class, default: 'Spree::StoreCreditPrioritizer' + class_name_attribute :store_credit_prioritizer_class, default: "Spree::StoreCreditPrioritizer" # Allows finding brand for product. # # @!attribute [rw] brand_selector_class # @return [Class] a class with the same public interfaces as # Spree::TaxonBrandSelector. - class_name_attribute :brand_selector_class, default: 'Spree::TaxonBrandSelector' + class_name_attribute :brand_selector_class, default: "Spree::TaxonBrandSelector" # @!attribute [rw] taxon_image_style_default # @@ -581,7 +582,7 @@ def payment_canceller # large: '1200x1200>' } is the default. # # @return [Hash] - class_name_attribute :taxon_image_styles, default: { mini: '32x32>', normal: '128x128>' } + class_name_attribute :taxon_image_styles, default: {mini: "32x32>", normal: "128x128>"} # Allows switching attachment library for Taxon # @@ -611,7 +612,7 @@ def payment_canceller # @return [Pathname] the configured path. (default: `Rails.root.join('db', 'migrate')`) attr_writer :migration_path def migration_path - @migration_path ||= ::Rails.root.join('db', 'migrate') + @migration_path ||= ::Rails.root.join("db", "migrate") end # Allows providing your own class instance for generating order numbers. @@ -687,14 +688,14 @@ def promotion_adjuster_class=(klass) def roles @roles ||= Spree::RoleConfiguration.new.tap do |roles| - roles.assign_permissions :default, ['Spree::PermissionSets::DefaultCustomer'] - roles.assign_permissions :admin, ['Spree::PermissionSets::SuperUser'] + roles.assign_permissions :default, ["Spree::PermissionSets::DefaultCustomer"] + roles.assign_permissions :admin, ["Spree::PermissionSets::SuperUser"] end end def user_last_url_storer_rules @user_last_url_storer_rules ||= ::Spree::Core::ClassConstantizer::Set.new.tap do |set| - set << 'Spree::UserLastUrlStorer::Rules::AuthenticationRule' + set << "Spree::UserLastUrlStorer::Rules::AuthenticationRule" end end diff --git a/core/lib/spree/bus.rb b/core/lib/spree/bus.rb index da4917fcb80..5ef8e0b28f0 100644 --- a/core/lib/spree/bus.rb +++ b/core/lib/spree/bus.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'omnes' +require "omnes" module Spree # Global [Omnes](https://github.com/nebulab/omnes) bus. diff --git a/core/lib/spree/config.rb b/core/lib/spree/config.rb index 09648bbe5cc..733476ec3ba 100644 --- a/core/lib/spree/config.rb +++ b/core/lib/spree/config.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require 'spree/app_configuration' +require "spree/app_configuration" Spree::Config = Spree::AppConfiguration.new diff --git a/core/lib/spree/core.rb b/core/lib/spree/core.rb index 0c7418d4f04..594a4ac1572 100644 --- a/core/lib/spree/core.rb +++ b/core/lib/spree/core.rb @@ -9,27 +9,27 @@ require "active_storage/engine" require "sprockets/railtie" -require 'active_support/deprecation' -require 'spree/deprecated_instance_variable_proxy' -require 'spree/deprecator' -require 'acts_as_list' -require 'awesome_nested_set' -require 'cancan' -require 'friendly_id' -require 'kaminari/activerecord' -require 'monetize' -require 'paperclip' -require 'ransack' -require 'state_machines-activerecord' +require "active_support/deprecation" +require "spree/deprecated_instance_variable_proxy" +require "spree/deprecator" +require "acts_as_list" +require "awesome_nested_set" +require "cancan" +require "friendly_id" +require "kaminari/activerecord" +require "monetize" +require "paperclip" +require "ransack" +require "state_machines-activerecord" # This is required because ActiveModel::Validations#invalid? conflicts with the # invalid state of a Payment. In the future this should be removed. StateMachines::Machine.ignore_method_conflicts = true module Spree - autoload :Deprecation, 'spree/deprecation' + autoload :Deprecation, "spree/deprecation" - mattr_accessor :user_class, default: 'Spree::LegacyUser' + mattr_accessor :user_class, default: "Spree::LegacyUser" def self.user_class if @@user_class.is_a?(Class) @@ -69,7 +69,7 @@ def self.config(&_block) module Core # @api private - def self.has_install_generator_been_run?(rails_paths: Rails.application.paths, initializer_name: 'spree.rb', dummy_app_name: 'DummyApp::Application') + def self.has_install_generator_been_run?(rails_paths: Rails.application.paths, initializer_name: "spree.rb", dummy_app_name: "DummyApp::Application") does_spree_initializer_exist?(rails_paths, initializer_name) || running_solidus_test_suite_with_dummy_app?(dummy_app_name) end @@ -80,7 +80,7 @@ def self.running_solidus_test_suite_with_dummy_app?(dummy_app_name) private_class_method :running_solidus_test_suite_with_dummy_app? def self.does_spree_initializer_exist?(rails_paths, initializer_name) - rails_paths['config/initializers'].any? do |path| + rails_paths["config/initializers"].any? do |path| File.exist?(Pathname.new(path).join(initializer_name)) end end @@ -90,35 +90,35 @@ class GatewayError < RuntimeError; end end end -require 'spree/core/version' - -require 'spree/core/active_merchant_dependencies' -require 'spree/core/class_constantizer' -require 'spree/core/environment_extension' -require 'spree/core/environment/calculators' -require 'spree/core/environment/promotions' -require 'spree/core/environment' -require 'spree/migrations' -require 'spree/migration_helpers' -require 'spree/bus' -require 'spree/config' -require 'spree/core/engine' -require 'spree/zero' - -require 'spree/i18n' -require 'spree/localized_number' -require 'spree/permitted_attributes' - -require 'spree/core/importer' -require 'spree/core/permalinks' -require 'spree/core/product_duplicator' -require 'spree/core/role_configuration' -require 'spree/core/state_machines' -require 'spree/core/stock_configuration' -require 'spree/core/null_promotion_configuration' -require 'spree/core/validators/email' -require 'spree/user_class_handle' - -require 'spree/preferences/store' -require 'spree/preferences/static_model_preferences' -require 'spree/preferences/scoped_store' +require "spree/core/version" + +require "spree/core/active_merchant_dependencies" +require "spree/core/class_constantizer" +require "spree/core/environment_extension" +require "spree/core/environment/calculators" +require "spree/core/environment/promotions" +require "spree/core/environment" +require "spree/migrations" +require "spree/migration_helpers" +require "spree/bus" +require "spree/config" +require "spree/core/engine" +require "spree/zero" + +require "spree/i18n" +require "spree/localized_number" +require "spree/permitted_attributes" + +require "spree/core/importer" +require "spree/core/permalinks" +require "spree/core/product_duplicator" +require "spree/core/role_configuration" +require "spree/core/state_machines" +require "spree/core/stock_configuration" +require "spree/core/null_promotion_configuration" +require "spree/core/validators/email" +require "spree/user_class_handle" + +require "spree/preferences/store" +require "spree/preferences/static_model_preferences" +require "spree/preferences/scoped_store" diff --git a/core/lib/spree/core/active_merchant_dependencies.rb b/core/lib/spree/core/active_merchant_dependencies.rb index fa2fb98f522..2175172ae2d 100644 --- a/core/lib/spree/core/active_merchant_dependencies.rb +++ b/core/lib/spree/core/active_merchant_dependencies.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'active_merchant/errors' +require "active_merchant/errors" -require 'active_merchant/billing/base' +require "active_merchant/billing/base" -require 'active_merchant/billing/avs_result' -require 'active_merchant/billing/cvv_result' -require 'active_merchant/billing/response' +require "active_merchant/billing/avs_result" +require "active_merchant/billing/cvv_result" +require "active_merchant/billing/response" -require 'active_merchant/billing/credit_card_methods' -require 'active_merchant/billing/credit_card_formatting' -require 'active_merchant/billing/credit_card' +require "active_merchant/billing/credit_card_methods" +require "active_merchant/billing/credit_card_formatting" +require "active_merchant/billing/credit_card" diff --git a/core/lib/spree/core/class_constantizer.rb b/core/lib/spree/core/class_constantizer.rb index 206b37125d5..a63d242bc49 100644 --- a/core/lib/spree/core/class_constantizer.rb +++ b/core/lib/spree/core/class_constantizer.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'active_support/core_ext/module' +require "active_support/core_ext/module" module Spree module Core diff --git a/core/lib/spree/core/engine.rb b/core/lib/spree/core/engine.rb index fe18206fe9d..f4fc477e39a 100644 --- a/core/lib/spree/core/engine.rb +++ b/core/lib/spree/core/engine.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spree/core' +require "spree/core" module Spree module Core @@ -9,7 +9,7 @@ class Engine < ::Rails::Engine CREDIT_CARD_VERIFICATION_VALUE_PARAM = /payment.*source.*\.verification_value$/ isolate_namespace Spree - engine_name 'spree' + engine_name "spree" config.generators do |generator| generator.test_framework :rspec @@ -31,15 +31,15 @@ class Engine < ::Rails::Engine end # leave empty initializers for backwards-compatability. Other apps might still rely on these events - initializer "spree.default_permissions", before: :load_config_initializers do; end - initializer "spree.register.calculators", before: :load_config_initializers do; end - initializer "spree.register.stock_splitters", before: :load_config_initializers do; end - initializer "spree.register.payment_methods", before: :load_config_initializers do; end - initializer 'spree.promo.environment', before: :load_config_initializers do; end - initializer 'spree.promo.register.promotion.calculators', before: :load_config_initializers do; end - initializer 'spree.promo.register.promotion.rules', before: :load_config_initializers do; end - initializer 'spree.promo.register.promotions.actions', before: :load_config_initializers do; end - initializer 'spree.promo.register.promotions.shipping_actions', before: :load_config_initializers do; end + initializer("spree.default_permissions", before: :load_config_initializers) {} + initializer("spree.register.calculators", before: :load_config_initializers) {} + initializer("spree.register.stock_splitters", before: :load_config_initializers) {} + initializer("spree.register.payment_methods", before: :load_config_initializers) {} + initializer("spree.promo.environment", before: :load_config_initializers) {} + initializer("spree.promo.register.promotion.calculators", before: :load_config_initializers) {} + initializer("spree.promo.register.promotion.rules", before: :load_config_initializers) {} + initializer("spree.promo.register.promotions.actions", before: :load_config_initializers) {} + initializer("spree.promo.register.promotions.shipping_actions", before: :load_config_initializers) {} # Filter sensitive information during logging initializer "spree.params.filter", before: :load_config_initializers do |app| @@ -47,7 +47,7 @@ class Engine < ::Rails::Engine %r{^password$}, %r{^password_confirmation$}, CREDIT_CARD_NUMBER_PARAM, - CREDIT_CARD_VERIFICATION_VALUE_PARAM, + CREDIT_CARD_VERIFICATION_VALUE_PARAM ] end @@ -56,7 +56,7 @@ class Engine < ::Rails::Engine end # Setup pub/sub - initializer 'spree.core.pub_sub' do |app| + initializer "spree.core.pub_sub" do |app| app.reloader.to_prepare do Spree::Bus.clear @@ -95,13 +95,13 @@ class Engine < ::Rails::Engine end config.after_initialize do - Spree::Config.check_load_defaults_called('Spree::Config') + Spree::Config.check_load_defaults_called("Spree::Config") Spree::Config.static_model_preferences.validate! end config.after_initialize do if defined?(Spree::Auth::Engine) && - Gem::Version.new(Spree::Auth::VERSION) < Gem::Version.new('2.5.4') && + Gem::Version.new(Spree::Auth::VERSION) < Gem::Version.new("2.5.4") && defined?(Spree::UsersController) Spree::UsersController.protect_from_forgery with: :exception end diff --git a/core/lib/spree/core/environment.rb b/core/lib/spree/core/environment.rb index 8803bd8cc75..bc105123134 100644 --- a/core/lib/spree/core/environment.rb +++ b/core/lib/spree/core/environment.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spree/core/environment_extension' +require "spree/core/environment_extension" module Spree module Core diff --git a/core/lib/spree/core/environment_extension.rb b/core/lib/spree/core/environment_extension.rb index 4b161e5ebf9..5a8218e0827 100644 --- a/core/lib/spree/core/environment_extension.rb +++ b/core/lib/spree/core/environment_extension.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'spree/core/class_constantizer' -require 'spree/core/nested_class_set' +require "spree/core/class_constantizer" +require "spree/core/nested_class_set" module Spree module Core @@ -11,15 +11,15 @@ module EnvironmentExtension class_methods do def add_class_set(name, default: []) define_method(name) do - set = instance_variable_get("@#{name}") - set ||= send("#{name}=", default) + set = instance_variable_get(:"@#{name}") + set ||= send(:"#{name}=", default) set end - define_method("#{name}=") do |klasses| + define_method(:"#{name}=") do |klasses| set = ClassConstantizer::Set.new set.concat(klasses) - instance_variable_set("@#{name}", set) + instance_variable_set(:"@#{name}", set) end end diff --git a/core/lib/spree/core/importer.rb b/core/lib/spree/core/importer.rb index 8b1c0c9bf8a..8bba688f68e 100644 --- a/core/lib/spree/core/importer.rb +++ b/core/lib/spree/core/importer.rb @@ -7,5 +7,5 @@ module Importer end end -require 'spree/core/importer/order' -require 'spree/core/importer/product' +require "spree/core/importer/order" +require "spree/core/importer/product" diff --git a/core/lib/spree/core/importer/order.rb b/core/lib/spree/core/importer/order.rb index e5bc853be16..fc9d9479f80 100644 --- a/core/lib/spree/core/importer/order.rb +++ b/core/lib/spree/core/importer/order.rb @@ -35,7 +35,7 @@ def self.import(user, params) if completed_at order.completed_at = completed_at - order.state = 'complete' + order.state = "complete" order.save! end @@ -55,7 +55,7 @@ def self.create_shipments_from_params(shipments_hash, order) shipments_hash.each do |target| shipment = Shipment.new - shipment.tracking = target[:tracking] + shipment.tracking = target[:tracking] shipment.stock_location = Spree::StockLocation.find_by(id: target[:stock_location_id]) || Spree::StockLocation.find_by(admin_name: target[:stock_location]) || Spree::StockLocation.find_by!(name: target[:stock_location]) @@ -81,9 +81,9 @@ def self.create_shipments_from_params(shipments_hash, order) # Mark shipped if it should be. if target[:shipped_at].present? shipment.shipped_at = target[:shipped_at] - shipment.state = 'shipped' + shipment.state = "shipped" shipment.inventory_units.each do |unit| - unit.state = 'shipped' + unit.state = "shipped" end end @@ -92,7 +92,7 @@ def self.create_shipments_from_params(shipments_hash, order) shipping_method = Spree::ShippingMethod.find_by(name: target[:shipping_method]) || Spree::ShippingMethod.find_by!(admin_name: target[:shipping_method]) rate = shipment.shipping_rates.create!(shipping_method:, - cost: target[:cost]) + cost: target[:cost]) shipment.selected_shipping_rate_id = rate.id shipment.update_amounts end @@ -127,11 +127,12 @@ def self.create_line_item(line_item_hash, order) def self.create_adjustments_from_params(adjustments, order) return [] unless adjustments + adjustments.each do |target| adjustment = order.adjustments.build( order:, amount: target[:amount].to_d, - label: target[:label] + label: target[:label] ) adjustment.save! adjustment.finalize! @@ -140,12 +141,13 @@ def self.create_adjustments_from_params(adjustments, order) def self.create_payments_from_params(payments_hash, order) return [] unless payments_hash + payments_hash.each do |target| payment = order.payments.build(order:) payment.amount = target[:amount].to_f # Order API should be using state as that's the normal payment field. # spree_wombat serializes payment state as status so imported orders should fall back to status field. - payment.state = target[:state] || target[:status] || 'completed' + payment.state = target[:state] || target[:status] || "completed" payment.payment_method = Spree::PaymentMethod.find_by!(name: target[:payment_method]) source_attributes = target[:source] || target[:source_attributes] payment.source = create_source_payment_from_params(source_attributes, payment) if source_attributes @@ -179,13 +181,13 @@ def self.ensure_country_id_from_params(address) return if address.nil? || address[:country_id].present? || address[:country].nil? search = {} - if name = address[:country]['name'] + if name = address[:country]["name"] search[:name] = name - elsif iso_name = address[:country]['iso_name'] + elsif iso_name = address[:country]["iso_name"] search[:iso_name] = iso_name.upcase - elsif iso = address[:country]['iso'] + elsif iso = address[:country]["iso"] search[:iso] = iso.upcase - elsif iso_three = address[:country]['iso3'] + elsif iso_three = address[:country]["iso3"] search[:iso3] = iso_three.upcase end @@ -197,9 +199,9 @@ def self.ensure_state_id_from_params(address) return if address.nil? || address[:state_id].present? || address[:state].nil? search = {} - if name = address[:state]['name'] + if name = address[:state]["name"] search[:name] = name - elsif abbr = address[:state]['abbr'] + elsif abbr = address[:state]["abbr"] search[:abbr] = abbr.upcase end diff --git a/core/lib/spree/core/importer/product.rb b/core/lib/spree/core/importer/product.rb index 8ace36be166..88d1f5e2cb2 100644 --- a/core/lib/spree/core/importer/product.rb +++ b/core/lib/spree/core/importer/product.rb @@ -18,7 +18,7 @@ def create if product.save variants_attrs.each do |variant_attribute| # make sure the product is assigned before the options= - product.variants.create({ product: }.merge(variant_attribute)) + product.variants.create({product:}.merge(variant_attribute)) end set_up_options @@ -31,11 +31,11 @@ def update if product.update(product_attrs) variants_attrs.each do |variant_attribute| # update the variant if the id is present in the payload - if variant_attribute['id'].present? - product.variants.find(variant_attribute['id'].to_i).update(variant_attribute) + if variant_attribute["id"].present? + product.variants.find(variant_attribute["id"].to_i).update(variant_attribute) else # make sure the product is assigned before the options= - product.variants.create({ product: }.merge(variant_attribute)) + product.variants.create({product:}.merge(variant_attribute)) end end diff --git a/core/lib/spree/core/null_promotion_configuration.rb b/core/lib/spree/core/null_promotion_configuration.rb index b62701a7f6c..fd30f133659 100644 --- a/core/lib/spree/core/null_promotion_configuration.rb +++ b/core/lib/spree/core/null_promotion_configuration.rb @@ -6,7 +6,7 @@ class NullPromotionConfiguration < Spree::Preferences::Configuration include Spree::Core::EnvironmentExtension # order_adjuster_class allows extensions to provide their own Order Adjuster - class_name_attribute :order_adjuster_class, default: 'Spree::NullPromotionAdjuster' + class_name_attribute :order_adjuster_class, default: "Spree::NullPromotionAdjuster" # Allows providing a different coupon code handler. # @!attribute [rw] coupon_code_handler_class @@ -14,7 +14,7 @@ class NullPromotionConfiguration < Spree::Preferences::Configuration # @return [Class] an object that conforms to the API of # the standard coupon code handler class # Spree::NullPromotionHandler. - class_name_attribute :coupon_code_handler_class, default: 'Spree::NullPromotionHandler' + class_name_attribute :coupon_code_handler_class, default: "Spree::NullPromotionHandler" # Allows providing a different promotion finder. # @!attribute [rw] promotion_finder_class @@ -22,16 +22,16 @@ class NullPromotionConfiguration < Spree::Preferences::Configuration # @return [Class] an object that conforms to the API of # the standard promotion finder class # Spree::NullPromotionFinder. - class_name_attribute :promotion_finder_class, default: 'Spree::NullPromotionFinder' + class_name_attribute :promotion_finder_class, default: "Spree::NullPromotionFinder" # Allows getting and setting `Spree::Config.promotion_code_batch_mailer_class`. # Both will issue a deprecation warning. - class_name_attribute :promotion_code_batch_mailer_class, default: 'Spree::DeprecatedConfigurableClass' + class_name_attribute :promotion_code_batch_mailer_class, default: "Spree::DeprecatedConfigurableClass" deprecate :promotion_code_batch_mailer_class, :promotion_code_batch_mailer_class=, deprecator: Spree.deprecator # Allows getting and setting `Spree::Config.promotion_chooser_class`. # Both will issue a deprecation warning. - class_name_attribute :promotion_chooser_class, default: 'Spree::DeprecatedConfigurableClass' + class_name_attribute :promotion_chooser_class, default: "Spree::DeprecatedConfigurableClass" deprecate :promotion_chooser_class, :promotion_chooser_class=, deprecator: Spree.deprecator # Allows getting and setting rules. Deprecated. @@ -64,7 +64,7 @@ class NullPromotionConfiguration < Spree::Preferences::Configuration # @return [Class] an object that conforms to the API of # the standard promotion finder class # Spree::NullPromotionHandler. - class_name_attribute :shipping_promotion_handler_class, default: 'Spree::NullPromotionHandler' + class_name_attribute :shipping_promotion_handler_class, default: "Spree::NullPromotionHandler" deprecate :shipping_promotion_handler_class, deprecator: Spree.deprecator deprecate :shipping_promotion_handler_class=, deprecator: Spree.deprecator @@ -74,7 +74,7 @@ class NullPromotionConfiguration < Spree::Preferences::Configuration # @return [Class] an object that conforms to the API of # the standard promotion advertiser class # Spree::NullPromotionAdvertiser. - class_name_attribute :advertiser_class, default: 'Spree::NullPromotionAdvertiser' + class_name_attribute :advertiser_class, default: "Spree::NullPromotionAdvertiser" # !@attribute [rw] promotion_api_attributes # @return [Array] Attributes to be returned by the API for a promotion diff --git a/core/lib/spree/core/permalinks.rb b/core/lib/spree/core/permalinks.rb index 8de8981fa5e..90aad692693 100644 --- a/core/lib/spree/core/permalinks.rb +++ b/core/lib/spree/core/permalinks.rb @@ -18,11 +18,11 @@ def make_permalink(options = {}) end def find_by_param(value, *args) - send("find_by_#{permalink_field}", value, *args) + send(:"find_by_#{permalink_field}", value, *args) end def find_by_param!(value, *args) - send("find_by_#{permalink_field}!", value, *args) + send(:"find_by_#{permalink_field}!", value, *args) end def permalink_field @@ -44,7 +44,7 @@ def permalink_order end def generate_permalink - "#{self.class.permalink_prefix}#{Array.new(self.class.permalink_length){ rand(9) }.join}" + "#{self.class.permalink_prefix}#{Array.new(self.class.permalink_length) { rand(9) }.join}" end def save_permalink(permalink_value = to_param) diff --git a/core/lib/spree/core/product_filters.rb b/core/lib/spree/core/product_filters.rb index aa76566d66a..75d6cb9f345 100644 --- a/core/lib/spree/core/product_filters.rb +++ b/core/lib/spree/core/product_filters.rb @@ -70,15 +70,15 @@ def self.format_price(amount) def self.price_filter value = Spree::Price.arel_table - conds = [[I18n.t('spree.under_price', price: format_price(10)), value[:amount].lteq(10)], - ["#{format_price(10)} - #{format_price(15)}", value[:amount].between(10..15)], - ["#{format_price(15)} - #{format_price(18)}", value[:amount].between(15..18)], - ["#{format_price(18)} - #{format_price(20)}", value[:amount].between(18..20)], - [I18n.t('spree.or_over_price', price: format_price(20)), value[:amount].gteq(20)]] + conds = [[I18n.t("spree.under_price", price: format_price(10)), value[:amount].lteq(10)], + ["#{format_price(10)} - #{format_price(15)}", value[:amount].between(10..15)], + ["#{format_price(15)} - #{format_price(18)}", value[:amount].between(15..18)], + ["#{format_price(18)} - #{format_price(20)}", value[:amount].between(18..20)], + [I18n.t("spree.or_over_price", price: format_price(20)), value[:amount].gteq(20)]] { - name: I18n.t('spree.price_range'), - scope: :price_range_any, - conds: Hash[*conds.flatten], + name: I18n.t("spree.price_range"), + scope: :price_range_any, + conds: Hash[*conds.flatten], labels: conds.map { |key, _value| [key, key] } } end @@ -101,17 +101,17 @@ def self.price_filter conds.each do |new_scope| scope = scope.or(new_scope) end - Spree::Product.with_property('brand').where(scope) + Spree::Product.with_property("brand").where(scope) end def self.brand_filter - brand_property = Spree::Property.find_by(name: 'brand') + brand_property = Spree::Property.find_by(name: "brand") brands = brand_property ? Spree::ProductProperty.where(property_id: brand_property.id).pluck(:value).uniq.map(&:to_s) : [] pp = Spree::ProductProperty.arel_table conds = Hash[*brands.flat_map { |brand| [brand, pp[:value].eq(brand)] }] { - name: 'Brands', - scope: :brand_any, + name: "Brands", + scope: :brand_any, conds:, labels: brands.sort.map { |key| [key, key] } } @@ -142,14 +142,14 @@ def self.brand_filter def self.selective_brand_filter(taxon = nil) taxon ||= Spree::Taxonomy.first.root - brand_property = Spree::Property.find_by(name: 'brand') - scope = Spree::ProductProperty.where(property: brand_property). - joins(product: :taxons). - where("#{Spree::Taxon.table_name}.id" => [taxon] + taxon.descendants) + brand_property = Spree::Property.find_by(name: "brand") + scope = Spree::ProductProperty.where(property: brand_property) + .joins(product: :taxons) + .where("#{Spree::Taxon.table_name}.id" => [taxon] + taxon.descendants) brands = scope.pluck(:value).uniq { - name: 'Applicable Brands', - scope: :selective_brand_any, + name: "Applicable Brands", + scope: :selective_brand_any, labels: brands.sort.map { |key| [key, key] } } end diff --git a/core/lib/spree/core/role_configuration.rb b/core/lib/spree/core/role_configuration.rb index bad90ae5152..dad67496909 100644 --- a/core/lib/spree/core/role_configuration.rb +++ b/core/lib/spree/core/role_configuration.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'singleton' -require 'spree/core/class_constantizer' +require "singleton" +require "spree/core/class_constantizer" module Spree # A class responsible for associating {Spree::Role} with a list of permission sets. @@ -40,7 +40,7 @@ def initialize(name, permission_sets) # @param ability [CanCan::Ability] the ability to invoke declarations on # @param user [#spree_roles] the user that holds the spree_roles association. def activate_permissions!(ability, user) - spree_roles = ['default'] | user.spree_roles.map(&:name) + spree_roles = ["default"] | user.spree_roles.map(&:name) applicable_permissions = Set.new spree_roles.each do |role_name| diff --git a/core/lib/spree/core/search/base.rb b/core/lib/spree/core/search/base.rb index bc71bb2e1c0..01832394f93 100644 --- a/core/lib/spree/core/search/base.rb +++ b/core/lib/spree/core/search/base.rb @@ -37,8 +37,7 @@ def get_base_scope base_scope = base_scope.in_taxon(@properties[:taxon]) unless @properties[:taxon].blank? base_scope = get_products_conditions_for(base_scope, @properties[:keywords]) base_scope = add_search_scopes(base_scope) - base_scope = add_eagerload_scopes(base_scope) - base_scope + add_eagerload_scopes(base_scope) end def add_eagerload_scopes(scope) @@ -69,10 +68,10 @@ def add_search_scopes(base_scope) @properties[:search].each_pair do |name, scope_attribute| scope_name = name.to_sym - if base_scope.respond_to?(:search_scopes) && base_scope.search_scopes.include?(scope_name.to_sym) - base_scope = base_scope.send(scope_name, *scope_attribute) + base_scope = if base_scope.respond_to?(:search_scopes) && base_scope.search_scopes.include?(scope_name.to_sym) + base_scope.send(scope_name, *scope_attribute) else - base_scope = base_scope.merge(Spree::Product.ransack({ scope_name => scope_attribute }).result) + base_scope.merge(Spree::Product.ransack({scope_name => scope_attribute}).result) end end @@ -94,7 +93,7 @@ def prepare(params) @properties[:include_images] = params[:include_images] per_page = params[:per_page].to_i - @properties[:per_page] = per_page > 0 ? per_page : Spree::Config[:products_per_page] + @properties[:per_page] = (per_page > 0) ? per_page : Spree::Config[:products_per_page] @properties[:page] = (params[:page].to_i <= 0) ? 1 : params[:page].to_i end end diff --git a/core/lib/spree/core/search/variant.rb b/core/lib/spree/core/search/variant.rb index ca9fa77259d..17211b1bc3c 100644 --- a/core/lib/spree/core/search/variant.rb +++ b/core/lib/spree/core/search/variant.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'active_support/core_ext/class/attribute' +require "active_support/core_ext/class/attribute" module Spree module Core @@ -57,8 +57,8 @@ def search_terms(_word) end def search_term_params(word) - terms = Hash[search_terms(word).map { |term| [term, word] }] - terms.merge(m: 'or') + terms = search_terms(word).map { |term| [term, word] }.to_h + terms.merge(m: "or") end end end diff --git a/core/lib/spree/core/stock_configuration.rb b/core/lib/spree/core/stock_configuration.rb index e3a3c9d07c2..4d82c0e5e9c 100644 --- a/core/lib/spree/core/stock_configuration.rb +++ b/core/lib/spree/core/stock_configuration.rb @@ -13,42 +13,42 @@ class StockConfiguration attr_writer :inventory_validator_class def coordinator_class - @coordinator_class ||= '::Spree::Stock::SimpleCoordinator' + @coordinator_class ||= "::Spree::Stock::SimpleCoordinator" @coordinator_class.constantize end def estimator_class - @estimator_class ||= '::Spree::Stock::Estimator' + @estimator_class ||= "::Spree::Stock::Estimator" @estimator_class.constantize end def location_filter_class - @location_filter_class ||= '::Spree::Stock::LocationFilter::Active' + @location_filter_class ||= "::Spree::Stock::LocationFilter::Active" @location_filter_class.constantize end def location_sorter_class - @location_sorter_class ||= '::Spree::Stock::LocationSorter::Unsorted' + @location_sorter_class ||= "::Spree::Stock::LocationSorter::Unsorted" @location_sorter_class.constantize end def allocator_class - @allocator_class ||= '::Spree::Stock::Allocator::OnHandFirst' + @allocator_class ||= "::Spree::Stock::Allocator::OnHandFirst" @allocator_class.constantize end def inventory_unit_builder_class - @inventory_unit_builder_class ||= '::Spree::Stock::InventoryUnitBuilder' + @inventory_unit_builder_class ||= "::Spree::Stock::InventoryUnitBuilder" @inventory_unit_builder_class.constantize end def availability_validator_class - @availability_validator_class ||= '::Spree::Stock::AvailabilityValidator' + @availability_validator_class ||= "::Spree::Stock::AvailabilityValidator" @availability_validator_class.constantize end - + def inventory_validator_class - @inventory_validator_class ||= '::Spree::Stock::InventoryValidator' + @inventory_validator_class ||= "::Spree::Stock::InventoryValidator" @inventory_validator_class.constantize end end diff --git a/core/lib/spree/core/validators/email.rb b/core/lib/spree/core/validators/email.rb index 7c0718c1fa3..37b282edb15 100644 --- a/core/lib/spree/core/validators/email.rb +++ b/core/lib/spree/core/validators/email.rb @@ -14,7 +14,7 @@ module Spree class EmailValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) unless Spree::Config.default_email_regexp.match? value - record.errors.add(attribute, :invalid, **{ value: }.merge!(options)) + record.errors.add(attribute, :invalid, value:, **options) end end end diff --git a/core/lib/spree/core/versioned_value.rb b/core/lib/spree/core/versioned_value.rb index bb3989ee291..e7b02f1e728 100644 --- a/core/lib/spree/core/versioned_value.rb +++ b/core/lib/spree/core/versioned_value.rb @@ -41,12 +41,10 @@ class VersionedValue # @param initial_value [Any] # @param boundary [Hash] Map from version number to new value def initialize(initial_value, boundaries = {}) - @boundaries = Hash[ - { '0' => initial_value } - .merge(boundaries) - .transform_keys { |version| to_gem_version(version) } - .sort - ] + @boundaries = {"0" => initial_value} + .merge(boundaries) + .transform_keys { |version| to_gem_version(version) } + .sort.to_h end # @param solidus_version [String] diff --git a/core/lib/spree/deprecated_instance_variable_proxy.rb b/core/lib/spree/deprecated_instance_variable_proxy.rb index d18cf5282c4..eed799ffc8a 100644 --- a/core/lib/spree/deprecated_instance_variable_proxy.rb +++ b/core/lib/spree/deprecated_instance_variable_proxy.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'active_support/deprecation' +require "active_support/deprecation" module Spree # This DeprecatedInstanceVariableProxy transforms instance variable to diff --git a/core/lib/spree/deprecation.rb b/core/lib/spree/deprecation.rb index 4b83ff9f238..119ec15dc99 100644 --- a/core/lib/spree/deprecation.rb +++ b/core/lib/spree/deprecation.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spree/core' +require "spree/core" module Spree Deprecation = Spree.deprecator diff --git a/core/lib/spree/deprecator.rb b/core/lib/spree/deprecator.rb index 6bccb4199a8..25df2b289cb 100644 --- a/core/lib/spree/deprecator.rb +++ b/core/lib/spree/deprecator.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'active_support/deprecation' +require "active_support/deprecation" module Spree def self.deprecator - @deprecator ||= ActiveSupport::Deprecation.new('5.0', 'Solidus') + @deprecator ||= ActiveSupport::Deprecation.new("5.0", "Solidus") end end diff --git a/core/lib/spree/i18n.rb b/core/lib/spree/i18n.rb index 10edfc7788e..2842500d656 100644 --- a/core/lib/spree/i18n.rb +++ b/core/lib/spree/i18n.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'i18n' +require "i18n" module Spree def self.i18n_available_locales I18n.available_locales.select do |locale| - I18n.t('spree.i18n.this_file_language', locale:, fallback: false, default: nil) + I18n.t("spree.i18n.this_file_language", locale:, fallback: false, default: nil) end end diff --git a/core/lib/spree/localized_number.rb b/core/lib/spree/localized_number.rb index 8cbc0757913..379de6a496b 100644 --- a/core/lib/spree/localized_number.rb +++ b/core/lib/spree/localized_number.rb @@ -14,14 +14,14 @@ def self.parse(number) # I18n.t('number.currency.format.delimiter') could be useful here, but is # unnecessary as it is stripped by the non_number_characters gsub. - separator = I18n.t(:'number.currency.format.separator') + separator = I18n.t(:"number.currency.format.separator") non_number_characters = /[^0-9\-#{separator}]/ # strip everything else first - number = number.gsub(non_number_characters, '') + number = number.gsub(non_number_characters, "") # then replace the locale-specific decimal separator with the standard separator if necessary - number = number.gsub(separator, '.') unless separator == '.' + number = number.gsub(separator, ".") unless separator == "." # Handle empty string for ruby 2.4 compatibility BigDecimal(number.presence || 0) diff --git a/core/lib/spree/mailer_previews/order_preview.rb b/core/lib/spree/mailer_previews/order_preview.rb index 5b078f16b5e..4f8906f2839 100644 --- a/core/lib/spree/mailer_previews/order_preview.rb +++ b/core/lib/spree/mailer_previews/order_preview.rb @@ -6,18 +6,21 @@ class OrderPreview < ActionMailer::Preview def confirm order = Order.complete.last raise "Your database needs at least one completed order to render this preview" unless order + Spree::Config.order_mailer_class.confirm_email(order) end def cancel order = Order.with_state(:canceled).last raise "Your database needs at least one cancelled order to render this preview" unless order + Spree::Config.order_mailer_class.cancel_email(order) end def inventory_cancellation order = Spree::Order.joins(:inventory_units).merge(Spree::InventoryUnit.canceled).last raise "Your database needs at least one order with a canceled inventory unit to render this preview" unless order + Spree::Config.order_mailer_class.inventory_cancellation_email(order, [order.inventory_units.first]) end end diff --git a/core/lib/spree/mailer_previews/reimbursement_preview.rb b/core/lib/spree/mailer_previews/reimbursement_preview.rb index d431959644c..f05f04172b6 100644 --- a/core/lib/spree/mailer_previews/reimbursement_preview.rb +++ b/core/lib/spree/mailer_previews/reimbursement_preview.rb @@ -6,6 +6,7 @@ class ReimbursementPreview < ActionMailer::Preview def reimbursement reimbursement = Reimbursement.last raise "Your database needs at least one Reimbursement to render this preview" unless reimbursement + Spree::Config.reimbursement_mailer_class.reimbursement_email(reimbursement) end end diff --git a/core/lib/spree/migrations.rb b/core/lib/spree/migrations.rb index 5685ced5c36..a49cf45fcf7 100644 --- a/core/lib/spree/migrations.rb +++ b/core/lib/spree/migrations.rb @@ -25,12 +25,12 @@ def initialize(config, engine_name) def check return unless File.directory?(app_dir) return if missing_migrations.empty? - return if ENV['SOLIDUS_SKIP_MIGRATIONS_CHECK'] + return if ENV["SOLIDUS_SKIP_MIGRATIONS_CHECK"] prefix = "[WARNING #{engine_name.capitalize}]" warn <<~WARN #{prefix} Missing migrations. - #{missing_migrations.map {|m| "#{prefix} - #{m}"}.join("\n")} + #{missing_migrations.map { |m| "#{prefix} - #{m}" }.join("\n")} #{prefix} #{prefix} Run `bin/rails railties:install:migrations` to get them. #{prefix} You can silence this warning by setting the `SOLIDUS_SKIP_MIGRATIONS_CHECK` environment variable. @@ -43,6 +43,7 @@ def missing_migrations engine_in_app = app_migrations.map do |file_name| name, engine = file_name.split(".", 2) next unless match_engine?(engine) + name end.compact @@ -62,6 +63,7 @@ def engine_migrations def app_migrations Dir.entries(app_dir).map do |file_name| next if [".", ".."].include? file_name + name = file_name.split("_", 2).last name.empty? ? next : name end.compact! || [] diff --git a/core/lib/spree/permitted_attributes.rb b/core/lib/spree/permitted_attributes.rb index 19256313b32..7a3f9c54aeb 100644 --- a/core/lib/spree/permitted_attributes.rb +++ b/core/lib/spree/permitted_attributes.rb @@ -89,13 +89,13 @@ module PermittedAttributes @@property_attributes = [:name, :presentation] @@return_authorization_attributes = [:memo, :stock_location_id, :return_reason_id, - customer_metadata: {}, - return_items_attributes: [ - :inventory_unit_id, - :exchange_variant_id, - :return_reason_id, - :preferred_reimbursement_type_id - ]] + customer_metadata: {}, + return_items_attributes: [ + :inventory_unit_id, + :exchange_variant_id, + :return_reason_id, + :preferred_reimbursement_type_id + ]] @@shipment_attributes = [ :special_instructions, :stock_location_id, :id, :tracking, @@ -123,9 +123,9 @@ module PermittedAttributes ] @@store_attributes = [:name, :url, :seo_title, :meta_keywords, - :meta_description, :default_currency, - :mail_from_address, :cart_tax_country_iso, - :bcc_email, :reverse_charge_status] + :meta_description, :default_currency, + :mail_from_address, :cart_tax_country_iso, + :bcc_email, :reverse_charge_status] @@taxonomy_attributes = [:name] diff --git a/core/lib/spree/preferences/configuration.rb b/core/lib/spree/preferences/configuration.rb index b8cca7ea0e3..121c0ea4d89 100644 --- a/core/lib/spree/preferences/configuration.rb +++ b/core/lib/spree/preferences/configuration.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'spree/core/versioned_value' -require 'spree/preferences/preferable' +require "spree/core/versioned_value" +require "spree/preferences/preferable" module Spree::Preferences # This takes the preferrable methods and adds some @@ -107,10 +107,10 @@ def reset set(default_preferences) end - alias :[] :get_preference - alias :[]= :set_preference + alias_method :[], :get_preference + alias_method :[]=, :set_preference - alias :get :get_preference + alias_method :get, :get_preference # @param preferences [Hash] a hash of preferences to set def set(preferences) @@ -152,14 +152,14 @@ def self.versioned_preference(name, type, initial_value:, boundaries:, **options def self.preference(name, type, options = {}) super - alias_method name.to_s, "preferred_#{name}" - alias_method "#{name}=", "preferred_#{name}=" + alias_method name.to_s, :"preferred_#{name}" + alias_method :"#{name}=", :"preferred_#{name}=" end def self.class_name_attribute(name, default:) ivar = :"@#{name}" - define_method("#{name}=") do |class_name| + define_method(:"#{name}=") do |class_name| # If this is a named class constant, we should store it as a string to # allow code reloading. class_name = class_name.name if class_name.is_a?(Class) && class_name.name diff --git a/core/lib/spree/preferences/preferable.rb b/core/lib/spree/preferences/preferable.rb index 6e533136406..13b92b2f9f8 100644 --- a/core/lib/spree/preferences/preferable.rb +++ b/core/lib/spree/preferences/preferable.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require 'spree/preferences/preferable_class_methods' -require 'active_support/concern' -require 'active_support/core_ext/hash/keys' +require "spree/preferences/preferable_class_methods" +require "active_support/concern" +require "active_support/core_ext/hash/keys" module Spree module Preferences @@ -117,11 +117,9 @@ def defined_preferences # This may raise an infinite loop error if any of the defaults are # dependent on other preferences defaults. def default_preferences - Hash[ - defined_preferences.map do |preference| - [preference, preference_default(preference)] - end - ] + defined_preferences.map do |preference| + [preference, preference_default(preference)] + end.to_h end # Preference names representable as form fields in Solidus backend @@ -152,6 +150,7 @@ def admin_form_preference_names def convert_preference_value(value, type, preference_encryptor = nil) return nil if value.nil? + case type when :string, :text value.to_s @@ -165,17 +164,19 @@ def convert_preference_value(value, type, preference_encryptor = nil) value.to_i when :boolean if !value || - value.to_s =~ /\A(f|false|0|^)\Z/i || - (value.respond_to?(:empty?) && value.empty?) + value.to_s =~ /\A(f|false|0|^)\Z/i || + (value.respond_to?(:empty?) && value.empty?) false else true end when :array raise TypeError, "Array expected got #{value.inspect}" unless value.is_a?(Array) + value when :hash raise TypeError, "Hash expected got #{value.inspect}" unless value.is_a?(Hash) + value else value diff --git a/core/lib/spree/preferences/preferable_class_methods.rb b/core/lib/spree/preferences/preferable_class_methods.rb index 288bf0bcd80..836a75be0b8 100644 --- a/core/lib/spree/preferences/preferable_class_methods.rb +++ b/core/lib/spree/preferences/preferable_class_methods.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'spree/encryptor' +require "spree/encryptor" module Spree::Preferences module PreferableClassMethods - DEFAULT_ADMIN_FORM_PREFERENCE_TYPES = %i( + DEFAULT_ADMIN_FORM_PREFERENCE_TYPES = %i[ boolean decimal integer @@ -12,7 +12,7 @@ module PreferableClassMethods string text encrypted_string - ) + ] def defined_preferences [] @@ -27,13 +27,13 @@ def preference(name, type, options = {}) end default = begin - given = options[:default] - if given.is_a?(Proc) - given - else - proc { given } - end - end + given = options[:default] + if given.is_a?(Proc) + given + else + proc { given } + end + end # The defined preferences on a class are all those defined directly on # that class as well as those defined on ancestors. @@ -76,25 +76,25 @@ def preference(name, type, options = {}) end def preference_getter_method(name) - "preferred_#{name}".to_sym + :"preferred_#{name}" end def preference_setter_method(name) - "preferred_#{name}=".to_sym + :"preferred_#{name}=" end def preference_default_getter_method(name) - "preferred_#{name}_default".to_sym + :"preferred_#{name}_default" end def preference_type_getter_method(name) - "preferred_#{name}_type".to_sym + :"preferred_#{name}_type" end def preference_encryptor(options) key = options[:encryption_key] || - ENV['SOLIDUS_PREFERENCES_MASTER_KEY'] || - Rails.application.credentials.secret_key_base + ENV["SOLIDUS_PREFERENCES_MASTER_KEY"] || + Rails.application.credentials.secret_key_base Spree::Encryptor.new(key) end diff --git a/core/lib/spree/preferences/preference_differentiator.rb b/core/lib/spree/preferences/preference_differentiator.rb index a4ba2d69bd8..101440761eb 100644 --- a/core/lib/spree/preferences/preference_differentiator.rb +++ b/core/lib/spree/preferences/preference_differentiator.rb @@ -19,7 +19,7 @@ def call(from:, to:) changes else changes.merge( - pref_key => { from: value_from, to: value_to } + pref_key => {from: value_from, to: value_to} ) end end diff --git a/core/lib/spree/preferences/scoped_store.rb b/core/lib/spree/preferences/scoped_store.rb index e634209be1f..4fae282b75b 100644 --- a/core/lib/spree/preferences/scoped_store.rb +++ b/core/lib/spree/preferences/scoped_store.rb @@ -26,11 +26,11 @@ def delete(key) private def key_for(key) - [rails_cache_id, @prefix, key, @suffix].compact.join('/') + [rails_cache_id, @prefix, key, @suffix].compact.join("/") end def rails_cache_id - ENV['RAILS_CACHE_ID'] + ENV["RAILS_CACHE_ID"] end end end diff --git a/core/lib/spree/preferences/static_model_preferences.rb b/core/lib/spree/preferences/static_model_preferences.rb index a3b05b70ab9..11257a2280d 100644 --- a/core/lib/spree/preferences/static_model_preferences.rb +++ b/core/lib/spree/preferences/static_model_preferences.rb @@ -55,8 +55,8 @@ def validate_for_class!(klass) next if extra_keys.empty? raise \ - "Unexpected keys found for #{klass} under #{name}: #{extra_keys.sort.join(', ')} " \ - "(expected keys: #{klass_keys.sort.join(', ')})" + "Unexpected keys found for #{klass} under #{name}: #{extra_keys.sort.join(", ")} " \ + "(expected keys: #{klass_keys.sort.join(", ")})" end end end diff --git a/core/lib/spree/preferences/store.rb b/core/lib/spree/preferences/store.rb index e9a1f87c249..dcbf49a8244 100644 --- a/core/lib/spree/preferences/store.rb +++ b/core/lib/spree/preferences/store.rb @@ -3,7 +3,7 @@ # Use singleton class Spree::Preferences::Store.instance to access # -require 'singleton' +require "singleton" module Spree::Preferences class StoreInstance @@ -35,19 +35,19 @@ def get(key) # has been cleared from the cache # does it exist in the database? - if preference = Spree::Preference.find_by(key:) + val = if preference = Spree::Preference.find_by(key:) # it does exist - val = preference.value + preference.value else # use the fallback value - val = yield + yield end # Cache either the value from the db or the fallback value. # This avoids hitting the db with subsequent queries. @cache.write(key, val) - return val + val else yield end @@ -77,7 +77,7 @@ def destroy(cache_key) return unless should_persist? preference = Spree::Preference.find_by(key: cache_key) - preference.destroy if preference + preference&.destroy end def should_persist? diff --git a/core/lib/spree/testing_support/ability_helpers.rb b/core/lib/spree/testing_support/ability_helpers.rb index b3320354312..9269c00fa0b 100644 --- a/core/lib/spree/testing_support/ability_helpers.rb +++ b/core/lib/spree/testing_support/ability_helpers.rb @@ -1,107 +1,107 @@ # frozen_string_literal: true -RSpec.shared_examples_for 'access granted' do - it 'should allow show' do +RSpec.shared_examples_for "access granted" do + it "should allow show" do expect(ability).to be_able_to(:show, resource, token) if token expect(ability).to be_able_to(:show, resource) unless token end - it 'should allow create' do + it "should allow create" do expect(ability).to be_able_to(:create, resource, token) if token expect(ability).to be_able_to(:create, resource) unless token end - it 'should allow update' do + it "should allow update" do expect(ability).to be_able_to(:update, resource, token) if token expect(ability).to be_able_to(:update, resource) unless token end end -RSpec.shared_examples_for 'access denied' do - it 'should not allow show' do +RSpec.shared_examples_for "access denied" do + it "should not allow show" do expect(ability).to_not be_able_to(:show, resource) end - it 'should not allow create' do + it "should not allow create" do expect(ability).to_not be_able_to(:create, resource) end - it 'should not allow update' do + it "should not allow update" do expect(ability).to_not be_able_to(:update, resource) end end -RSpec.shared_examples_for 'admin granted' do - it 'should allow admin' do +RSpec.shared_examples_for "admin granted" do + it "should allow admin" do expect(ability).to be_able_to(:admin, resource, token) if token expect(ability).to be_able_to(:admin, resource) unless token end end -RSpec.shared_examples_for 'admin denied' do - it 'should not allow admin' do +RSpec.shared_examples_for "admin denied" do + it "should not allow admin" do expect(ability).to_not be_able_to(:admin, resource) end end -RSpec.shared_examples_for 'index allowed' do - it 'should allow index' do +RSpec.shared_examples_for "index allowed" do + it "should allow index" do expect(ability).to be_able_to(:index, resource) end end -RSpec.shared_examples_for 'no index allowed' do - it 'should not allow index' do +RSpec.shared_examples_for "no index allowed" do + it "should not allow index" do expect(ability).to_not be_able_to(:index, resource) end end -RSpec.shared_examples_for 'create only' do - it 'should allow create' do +RSpec.shared_examples_for "create only" do + it "should allow create" do expect(ability).to be_able_to(:create, resource) end - it 'should not allow show' do + it "should not allow show" do expect(ability).to_not be_able_to(:show, resource) end - it 'should not allow update' do + it "should not allow update" do expect(ability).to_not be_able_to(:update, resource) end - it 'should not allow index' do + it "should not allow index" do expect(ability).to_not be_able_to(:index, resource) end end -RSpec.shared_examples_for 'read only' do - it 'should not allow create' do +RSpec.shared_examples_for "read only" do + it "should not allow create" do expect(ability).to_not be_able_to(:create, resource) end - it 'should not allow update' do + it "should not allow update" do expect(ability).to_not be_able_to(:update, resource) end - it 'should allow index' do + it "should allow index" do expect(ability).to be_able_to(:index, resource) end end -RSpec.shared_examples_for 'update only' do - it 'should not allow create' do +RSpec.shared_examples_for "update only" do + it "should not allow create" do expect(ability).to_not be_able_to(:create, resource) end - it 'should not allow show' do + it "should not allow show" do expect(ability).to_not be_able_to(:show, resource) end - it 'should allow update' do + it "should allow update" do expect(ability).to be_able_to(:update, resource) end - it 'should not allow index' do + it "should not allow index" do expect(ability).to_not be_able_to(:index, resource) end end diff --git a/core/lib/spree/testing_support/authorization_helpers.rb b/core/lib/spree/testing_support/authorization_helpers.rb index 48963f15f6c..1549b69d233 100644 --- a/core/lib/spree/testing_support/authorization_helpers.rb +++ b/core/lib/spree/testing_support/authorization_helpers.rb @@ -1,15 +1,16 @@ # frozen_string_literal: true -require 'cancan' +require "cancan" module Spree module TestingSupport module AuthorizationHelpers module CustomAbility def build_ability(&block) - block ||= proc{ |_u| can :manage, :all } + block ||= proc { |_u| can :manage, :all } Class.new do include CanCan::Ability + define_method(:initialize, block) end end @@ -41,9 +42,9 @@ def stub_authorization! end before do - allow(Spree.user_class).to receive(:find_by). - with(hash_including(:spree_api_key)). - and_return(Spree.user_class.new) + allow(Spree.user_class).to receive(:find_by) + .with(hash_including(:spree_api_key)) + .and_return(Spree.user_class.new) end end diff --git a/core/lib/spree/testing_support/blacklist_urls.rb b/core/lib/spree/testing_support/blacklist_urls.rb index ca9c46bd80a..db2446fd713 100644 --- a/core/lib/spree/testing_support/blacklist_urls.rb +++ b/core/lib/spree/testing_support/blacklist_urls.rb @@ -5,7 +5,7 @@ module TestingSupport module BlacklistUrls def setup_url_blacklist(browser) if browser.respond_to?(:url_blacklist) - browser.url_blacklist = ['https://fonts.googleapis.com'] + browser.url_blacklist = ["https://fonts.googleapis.com"] end end end diff --git a/core/lib/spree/testing_support/bus_helpers.rb b/core/lib/spree/testing_support/bus_helpers.rb index f4d1784cf65..c1ec94bffc9 100644 --- a/core/lib/spree/testing_support/bus_helpers.rb +++ b/core/lib/spree/testing_support/bus_helpers.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spree/bus' +require "spree/bus" module Spree module TestingSupport diff --git a/core/lib/spree/testing_support/capybara_driver.rb b/core/lib/spree/testing_support/capybara_driver.rb index 3b482afc2da..a9a7979f0d6 100644 --- a/core/lib/spree/testing_support/capybara_driver.rb +++ b/core/lib/spree/testing_support/capybara_driver.rb @@ -6,4 +6,4 @@ Capybara::Screenshot.register_driver(:selenium_headless) do |driver, path| driver.browser.save_screenshot(path) end -Capybara.javascript_driver = (ENV['CAPYBARA_DRIVER'] || :selenium_headless).to_sym +Capybara.javascript_driver = (ENV["CAPYBARA_DRIVER"] || :selenium_headless).to_sym diff --git a/core/lib/spree/testing_support/capybara_ext.rb b/core/lib/spree/testing_support/capybara_ext.rb index 33dd0ffc694..a567e23c819 100644 --- a/core/lib/spree/testing_support/capybara_ext.rb +++ b/core/lib/spree/testing_support/capybara_ext.rb @@ -8,7 +8,7 @@ def click_icon(type) end def eventually_fill_in(field, options = {}) - expect(page).to have_css('#' + field) + expect(page).to have_css("#" + field) fill_in field, options end @@ -42,7 +42,7 @@ def select2_search(value, options) }.merge(options) label = find_label_by_text(options[:from]) within label.first(:xpath, ".//..") do - options[:from] = "##{find('.select2-container')['id']}" + options[:from] = "##{find(".select2-container")["id"]}" end select2_search_without_selection(options[:search], from: options[:from]) select_select2_result(value) if options[:select] @@ -65,14 +65,14 @@ def targetted_select2_search(value, options) # document. Can be used to 'escape' from within the context of another within # block. def within_entire_page(&block) - within(:xpath, '//body', &block) + within(:xpath, "//body", &block) end def select2(value, options) label = find_label_by_text(options[:from]) within label.first(:xpath, ".//..") do - options[:from] = "##{find('.select2-container')['id']}" + options[:from] = "##{find(".select2-container")["id"]}" end targetted_select2(value, options) end @@ -89,16 +89,16 @@ def select2_no_label(value, options = {}) def targetted_select2(value, options) # find select2 element and click it - find(options[:from]).find('a').click + find(options[:from]).find("a").click select_select2_result(value) end def select_select2_result(value) # results are in a div appended to the end of the document within_entire_page do - expect(page).to have_selector('.select2-result-label', visible: true) + expect(page).to have_selector(".select2-result-label", visible: true) find("div.select2-result-label", text: /#{Regexp.escape(value)}/i, match: :prefer_exact).click - expect(page).not_to have_selector('.select2-result-label') + expect(page).not_to have_selector(".select2-result-label") end end @@ -108,17 +108,17 @@ def find_label_by_text(text) # We need to select labels which are not .select2-offscreen, as select2 # makes a duplicate label with the same text, and we want to be sure to # find the original. - find('label:not(.select2-offscreen)', text: /#{Regexp.escape(text)}/i, match: :one) + find("label:not(.select2-offscreen)", text: /#{Regexp.escape(text)}/i, match: :one) end - def dialog(parent: 'body', **options) + def dialog(parent: "body", **options) within(parent) do - find('dialog', visible: :all, **options) + find("dialog", visible: :all, **options) end end def turbo_frame_modal - dialog(parent: find('turbo-frame', visible: :all)) + dialog(parent: find("turbo-frame", visible: :all)) end end end @@ -144,4 +144,4 @@ def turbo_frame_modal end # A workaround for https://github.com/rspec/rspec-rails/issues/1897 -Capybara.server = :puma, { Silent: true } +Capybara.server = :puma, {Silent: true} diff --git a/core/lib/spree/testing_support/common_rake.rb b/core/lib/spree/testing_support/common_rake.rb index a06fd5c028a..293ad4d4073 100644 --- a/core/lib/spree/testing_support/common_rake.rb +++ b/core/lib/spree/testing_support/common_rake.rb @@ -1,10 +1,11 @@ # frozen_string_literal: true -require 'generators/spree/dummy/dummy_generator' -require 'logger' +require "generators/spree/dummy/dummy_generator" +require "logger" class CommonRakeTasks include Rake::DSL + attr_reader :logger def initialize @@ -12,7 +13,7 @@ def initialize namespace :common do task :test_app, :user_class do |_t, args| args.with_defaults(user_class: "Spree::LegacyUser") - lib_name = ENV['LIB_NAME'] or + lib_name = ENV["LIB_NAME"] or raise "Please provide a library name via the LIB_NAME environment variable." require lib_name @@ -21,30 +22,30 @@ def initialize Spree::DummyGenerator.start [ "--lib-name=#{lib_name}", - "--quiet", + "--quiet" ] # While the dummy app is generated the current directory # within ruby is changed to that of the dummy app. sh({ - 'FRONTEND' => ENV['FRONTEND'] || 'none', + "FRONTEND" => ENV["FRONTEND"] || "none" }, [ - 'bin/rails', - 'generate', - 'solidus:install', + "bin/rails", + "generate", + "solidus:install", Dir.pwd, # use the current dir as Rails.root "--auto-accept", - "--admin-preview=#{ENV.fetch('ADMIN_PREVIEW', 'false')}", + "--admin-preview=#{ENV.fetch("ADMIN_PREVIEW", "false")}", "--authentication=none", "--payment-method=none", "--migrate=false", "--seed=false", "--sample=false", "--user-class=#{args[:user_class]}", - "--quiet", + "--quiet" ].shelljoin) - if Bundler.locked_gems.dependencies['solidus_frontend'] + if Bundler.locked_gems.dependencies["solidus_frontend"] sh "bin/rails g solidus_frontend:install --auto-accept" end @@ -54,7 +55,7 @@ def initialize sh "bin/rails db:drop db:create db:migrate VERBOSE=false RAILS_ENV=test" if extension_installation_generator_exists? - logger.info 'Running extension installation generator...' + logger.info "Running extension installation generator..." sh "bin/rails generate #{rake_generator_namespace}:install --auto-run-migrations" end end @@ -70,8 +71,8 @@ def initialize private def force_rails_environment_to_test - ENV["RAILS_ENV"] = 'test' - Rails.env = 'test' + ENV["RAILS_ENV"] = "test" + Rails.env = "test" end def extension_installation_generator_exists? @@ -83,11 +84,11 @@ def extension_installation_generator_exists? end def generator_namespace - "#{ENV['LIB_NAMESPACE']&.underscore || ENV['LIB_NAME']}" + (ENV["LIB_NAMESPACE"]&.underscore || ENV["LIB_NAME"]).to_s end def rake_generator_namespace - generator_namespace.gsub("/", ":") + generator_namespace.tr("/", ":") end end diff --git a/core/lib/spree/testing_support/dummy_ability.rb b/core/lib/spree/testing_support/dummy_ability.rb index 02f6fc9172a..211526abe0c 100644 --- a/core/lib/spree/testing_support/dummy_ability.rb +++ b/core/lib/spree/testing_support/dummy_ability.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'cancan' +require "cancan" class DummyAbility include CanCan::Ability diff --git a/core/lib/spree/testing_support/dummy_app.rb b/core/lib/spree/testing_support/dummy_app.rb index d0c9d7e69de..e2be2ae170f 100644 --- a/core/lib/spree/testing_support/dummy_app.rb +++ b/core/lib/spree/testing_support/dummy_app.rb @@ -1,17 +1,17 @@ # frozen_string_literal: true -ENV['RAILS_ENV'] = 'test' -ENV['DISABLE_DATABASE_ENVIRONMENT_CHECK'] = '1' +ENV["RAILS_ENV"] = "test" +ENV["DISABLE_DATABASE_ENVIRONMENT_CHECK"] = "1" -require 'rails' -require 'active_record/railtie' -require 'action_controller/railtie' -require 'action_mailer/railtie' -require 'active_storage/engine' +require "rails" +require "active_record/railtie" +require "action_controller/railtie" +require "action_mailer/railtie" +require "active_storage/engine" -Rails.env = 'test' +Rails.env = "test" -require 'solidus_core' +require "solidus_core" # @private class ApplicationController < ActionController::Base @@ -39,7 +39,7 @@ module ApplicationHelper module DummyApp def self.setup(gem_root:, lib_name:, auto_migrate: true) ENV["LIB_NAME"] = lib_name - root = Pathname(gem_root).join('spec/dummy') + root = Pathname(gem_root).join("spec/dummy") root.join("app/assets/config").mkpath root.join("app/assets/config/manifest.js").write("// Intentionally empty\n") @@ -48,7 +48,7 @@ def self.setup(gem_root:, lib_name:, auto_migrate: true) # Raise on deprecation warnings. # NOTE: This needs to happen after the application is initialized. - if ENV['SOLIDUS_RAISE_DEPRECATIONS'].present? + if ENV["SOLIDUS_RAISE_DEPRECATIONS"].present? Spree.deprecator.behavior = :raise end @@ -77,19 +77,19 @@ class Application < ::Rails::Application config.cache_classes = true # Make debugging easier: - if Rails.gem_version >= Gem::Version.new('7.1') + if Rails.gem_version >= Gem::Version.new("7.1") config.action_controller.raise_on_missing_callback_actions = true config.action_dispatch.show_exceptions = :none else config.action_dispatch.show_exceptions = false end config.consider_all_requests_local = true - config.active_support.deprecation = ENV['RAILS_DEPRECATIONS_BEHAVIOR'].presence&.to_sym || :stderr + config.active_support.deprecation = ENV["RAILS_DEPRECATIONS_BEHAVIOR"].presence&.to_sym || :stderr config.log_level = :debug # Improve test suite performance: config.eager_load = false - config.public_file_server.headers = { 'Cache-Control' => 'public, max-age=3600' } + config.public_file_server.headers = {"Cache-Control" => "public, max-age=3600"} config.cache_store = :memory_store # We don't use a web server, so we let Rails serve assets. @@ -102,66 +102,66 @@ class Application < ::Rails::Application config.active_job.queue_adapter = :test # No need to use credentials file in a test environment. - config.secret_key_base = 'SECRET_TOKEN' + config.secret_key_base = "SECRET_TOKEN" # Set the preview path within the dummy app: if ActionMailer::Base.respond_to? :preview_paths # Rails 7.1+ - config.action_mailer.preview_paths << File.expand_path('dummy_app/mailer_previews', __dir__) + config.action_mailer.preview_paths << File.expand_path("dummy_app/mailer_previews", __dir__) else - config.action_mailer.preview_path = File.expand_path('dummy_app/mailer_previews', __dir__) + config.action_mailer.preview_path = File.expand_path("dummy_app/mailer_previews", __dir__) end config.active_record.dump_schema_after_migration = false # Configure active storage to use storage within tmp folder - initializer 'solidus.active_storage' do + initializer "solidus.active_storage" do config.active_storage.service_configurations = { test: { - service: 'Disk', - root: Rails.root.join('tmp', 'storage') + service: "Disk", + root: Rails.root.join("tmp", "storage") } } config.active_storage.service = :test - config.active_storage.variant_processor = ENV.fetch('ACTIVE_STORAGE_VARIANT_PROCESSOR', :vips).to_sym + config.active_storage.variant_processor = ENV.fetch("ACTIVE_STORAGE_VARIANT_PROCESSOR", :vips).to_sym end # Avoid issues if an old spec/dummy still exists - config.paths['config/initializers'] = [] - config.paths['config/environments'] = [] + config.paths["config/initializers"] = [] + config.paths["config/environments"] = [] migration_dirs = Rails.application.migration_railties.flat_map do |engine| if engine.respond_to?(:paths) - engine.paths['db/migrate'].to_a + engine.paths["db/migrate"].to_a else [] end end - config.paths['db/migrate'] = migration_dirs + config.paths["db/migrate"] = migration_dirs ActiveRecord::Migrator.migrations_paths = migration_dirs ActiveRecord::Migration.verbose = false - config.assets.paths << File.expand_path('dummy_app/assets/javascripts', __dir__) - config.assets.paths << File.expand_path('dummy_app/assets/stylesheets', __dir__) + config.assets.paths << File.expand_path("dummy_app/assets/javascripts", __dir__) + config.assets.paths << File.expand_path("dummy_app/assets/stylesheets", __dir__) config.assets.css_compressor = nil - config.paths["config/database"] = File.expand_path('dummy_app/database.yml', __dir__) - config.paths['config/routes.rb'] = File.expand_path('dummy_app/routes.rb', __dir__) + config.paths["config/database"] = File.expand_path("dummy_app/database.yml", __dir__) + config.paths["config/routes.rb"] = File.expand_path("dummy_app/routes.rb", __dir__) ActionMailer::Base.default from: "store@example.com" end end -require 'spree/testing_support/dummy_app/migrations' +require "spree/testing_support/dummy_app/migrations" ActiveSupport.on_load(:action_controller) do wrap_parameters format: [:json] end -Spree.user_class = 'Spree::LegacyUser' +Spree.user_class = "Spree::LegacyUser" Spree.load_defaults(Spree.solidus_version) Spree.config do |config| - if (ENV['DISABLE_ACTIVE_STORAGE'] == 'true') - config.image_attachment_module = 'Spree::Image::PaperclipAttachment' - config.taxon_attachment_module = 'Spree::Taxon::PaperclipAttachment' + if ENV["DISABLE_ACTIVE_STORAGE"] == "true" + config.image_attachment_module = "Spree::Image::PaperclipAttachment" + config.taxon_attachment_module = "Spree::Taxon::PaperclipAttachment" end end diff --git a/core/lib/spree/testing_support/dummy_app/migrations.rb b/core/lib/spree/testing_support/dummy_app/migrations.rb index 7a1e3887851..4b564d6ae55 100644 --- a/core/lib/spree/testing_support/dummy_app/migrations.rb +++ b/core/lib/spree/testing_support/dummy_app/migrations.rb @@ -11,7 +11,7 @@ def auto_migrate # Disconnect to avoid "database is being accessed by other users" on postgres ActiveRecord::Base.remove_connection - sh 'rake db:reset VERBOSE=false' + sh "rake db:reset VERBOSE=false" # We have a brand new database, so we must re-establish our connection ActiveRecord::Base.establish_connection diff --git a/core/lib/spree/testing_support/dummy_app/rake_tasks.rb b/core/lib/spree/testing_support/dummy_app/rake_tasks.rb index 05e04149113..d62d552f1e3 100644 --- a/core/lib/spree/testing_support/dummy_app/rake_tasks.rb +++ b/core/lib/spree/testing_support/dummy_app/rake_tasks.rb @@ -6,9 +6,9 @@ class RakeTasks def initialize(gem_root:, lib_name:) task :dummy_environment do - ENV['RAILS_ENV'] = 'test' + ENV["RAILS_ENV"] = "test" require lib_name - require 'spree/testing_support/dummy_app' + require "spree/testing_support/dummy_app" DummyApp.setup( gem_root:, lib_name:, @@ -45,12 +45,12 @@ def initialize(gem_root:, lib_name:) end desc "Recreates the test database and re-runs all migrations" - task reset: ['db:drop', 'db:create', 'db:migrate'] + task reset: ["db:drop", "db:create", "db:migrate"] end desc "Open a sandboxed console in the test environment" task console: :dummy_environment do - require 'rails/commands' - require 'rails/commands/console/console_command' + require "rails/commands" + require "rails/commands/console/console_command" Rails::Console.new(Rails.application, sandbox: true, environment: "test").start end diff --git a/core/lib/spree/testing_support/dummy_app/routes.rb b/core/lib/spree/testing_support/dummy_app/routes.rb index fcf98b4732f..d2206a20928 100644 --- a/core/lib/spree/testing_support/dummy_app/routes.rb +++ b/core/lib/spree/testing_support/dummy_app/routes.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true DummyApp::Application.routes.draw do - mount Spree::Core::Engine, at: '/' + mount Spree::Core::Engine, at: "/" end diff --git a/core/lib/spree/testing_support/extension_rake.rb b/core/lib/spree/testing_support/extension_rake.rb index 4597fa4465a..af296790dac 100644 --- a/core/lib/spree/testing_support/extension_rake.rb +++ b/core/lib/spree/testing_support/extension_rake.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'spree/testing_support/common_rake' +require "spree/testing_support/common_rake" desc "Generates a dummy app for testing an extension" namespace :extension do task :test_app, [:user_class] do |_t, args| Spree::DummyGeneratorHelper.inject_extension_requirements = true - Rake::Task['common:test_app'].invoke(args[:user_class]) + Rake::Task["common:test_app"].invoke(args[:user_class]) end end diff --git a/core/lib/spree/testing_support/factories/address_factory.rb b/core/lib/spree/testing_support/factories/address_factory.rb index 3a14d02d7e4..1626f72de4b 100644 --- a/core/lib/spree/testing_support/factories/address_factory.rb +++ b/core/lib/spree/testing_support/factories/address_factory.rb @@ -1,21 +1,21 @@ # frozen_string_literal: true FactoryBot.define do - factory :address, class: 'Spree::Address' do + factory :address, class: "Spree::Address" do transient do # There's `Spree::Address#country_iso=`, prohibiting me from using `country_iso` here - country_iso_code { 'US' } - state_code { 'AL' } + country_iso_code { "US" } + state_code { "AL" } end - name { 'John Von Doe' } - company { 'Company' } - address1 { '10 Lovely Street' } - address2 { 'Northwest' } - city { 'Herndon' } + name { "John Von Doe" } + company { "Company" } + address1 { "10 Lovely Street" } + address2 { "Northwest" } + city { "Herndon" } sequence(:zipcode, 10001) { |i| i.to_s } - phone { '555-555-0199' } - alternative_phone { '555-555-0199' } + phone { "555-555-0199" } + alternative_phone { "555-555-0199" } country do |address| if address.state @@ -35,10 +35,10 @@ end factory :ship_address, parent: :address do - address1 { 'A Different Road' } + address1 { "A Different Road" } end factory :bill_address, parent: :address do - address1 { 'PO Box 1337' } + address1 { "PO Box 1337" } end end diff --git a/core/lib/spree/testing_support/factories/adjustment_factory.rb b/core/lib/spree/testing_support/factories/adjustment_factory.rb index 0d4b086dce7..f1451fdd83c 100644 --- a/core/lib/spree/testing_support/factories/adjustment_factory.rb +++ b/core/lib/spree/testing_support/factories/adjustment_factory.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true FactoryBot.define do - factory :adjustment, class: 'Spree::Adjustment' do + factory :adjustment, class: "Spree::Adjustment" do order adjustable { order } amount { 100.0 } - label { 'Shipping' } + label { "Shipping" } association(:source, factory: :tax_rate) after(:build) do |adjustment| @@ -15,19 +15,19 @@ end end - factory :tax_adjustment, class: 'Spree::Adjustment' do + factory :tax_adjustment, class: "Spree::Adjustment" do order { adjustable.order } association(:adjustable, factory: :line_item) amount { 10.0 } - label { 'VAT 5%' } + label { "VAT 5%" } after(:create) do |adjustment| # Set correct tax category, so that adjustment amount is not 0 if adjustment.adjustable.is_a?(Spree::LineItem) - if adjustment.adjustable.tax_category.present? - adjustment.source.tax_categories = [adjustment.adjustable.tax_category] + adjustment.source.tax_categories = if adjustment.adjustable.tax_category.present? + [adjustment.adjustable.tax_category] else - adjustment.source.tax_categories = [] + [] end adjustment.source.save adjustment.update!(amount: adjustment.source.compute_amount(adjustment.adjustable)) diff --git a/core/lib/spree/testing_support/factories/adjustment_reason_factory.rb b/core/lib/spree/testing_support/factories/adjustment_reason_factory.rb index b32deab195a..a23dd376a85 100644 --- a/core/lib/spree/testing_support/factories/adjustment_reason_factory.rb +++ b/core/lib/spree/testing_support/factories/adjustment_reason_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :adjustment_reason, class: 'Spree::AdjustmentReason' do + factory :adjustment_reason, class: "Spree::AdjustmentReason" do sequence(:name) { |n| "Refund for return ##{n}" } sequence(:code) { |n| "Code #{n}" } end diff --git a/core/lib/spree/testing_support/factories/calculator_factory.rb b/core/lib/spree/testing_support/factories/calculator_factory.rb index 944a955aa67..6144949f6f8 100644 --- a/core/lib/spree/testing_support/factories/calculator_factory.rb +++ b/core/lib/spree/testing_support/factories/calculator_factory.rb @@ -1,25 +1,25 @@ # frozen_string_literal: true FactoryBot.define do - factory :flat_rate_calculator, aliases: [:calculator], class: 'Spree::Calculator::FlatRate' do + factory :flat_rate_calculator, aliases: [:calculator], class: "Spree::Calculator::FlatRate" do preferred_amount { 10.0 } end - factory :no_amount_calculator, class: 'Spree::Calculator::FlatRate' do + factory :no_amount_calculator, class: "Spree::Calculator::FlatRate" do preferred_amount { 0 } end - factory :default_tax_calculator, class: 'Spree::Calculator::DefaultTax' do + factory :default_tax_calculator, class: "Spree::Calculator::DefaultTax" do end - factory :flat_fee_calculator, class: 'Spree::Calculator::FlatFee' do + factory :flat_fee_calculator, class: "Spree::Calculator::FlatFee" do end - factory :shipping_calculator, class: 'Spree::Calculator::Shipping::FlatRate' do + factory :shipping_calculator, class: "Spree::Calculator::Shipping::FlatRate" do preferred_amount { 10.0 } end - factory :shipping_no_amount_calculator, class: 'Spree::Calculator::Shipping::FlatRate' do + factory :shipping_no_amount_calculator, class: "Spree::Calculator::Shipping::FlatRate" do preferred_amount { 0 } end end diff --git a/core/lib/spree/testing_support/factories/carton_factory.rb b/core/lib/spree/testing_support/factories/carton_factory.rb index 74edcafbda7..e69239ecbc9 100644 --- a/core/lib/spree/testing_support/factories/carton_factory.rb +++ b/core/lib/spree/testing_support/factories/carton_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :carton, class: 'Spree::Carton' do + factory :carton, class: "Spree::Carton" do address stock_location shipping_method diff --git a/core/lib/spree/testing_support/factories/country_factory.rb b/core/lib/spree/testing_support/factories/country_factory.rb index 559ae0983b4..722c9020684 100644 --- a/core/lib/spree/testing_support/factories/country_factory.rb +++ b/core/lib/spree/testing_support/factories/country_factory.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'carmen' +require "carmen" FactoryBot.define do - factory :country, class: 'Spree::Country' do - iso { 'US' } + factory :country, class: "Spree::Country" do + iso { "US" } transient do carmen_country { Carmen::Country.coded(iso) || fail("Unknown country iso code: #{iso.inspect}") } diff --git a/core/lib/spree/testing_support/factories/credit_card_factory.rb b/core/lib/spree/testing_support/factories/credit_card_factory.rb index 83319191eac..8c87c9e5869 100644 --- a/core/lib/spree/testing_support/factories/credit_card_factory.rb +++ b/core/lib/spree/testing_support/factories/credit_card_factory.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true FactoryBot.define do - factory :credit_card, class: 'Spree::CreditCard' do + factory :credit_card, class: "Spree::CreditCard" do verification_value { 123 } month { 12 } year { 1.year.from_now.year } - number { '4111111111111111' } - name { 'Spree Commerce' } + number { "4111111111111111" } + name { "Spree Commerce" } association(:payment_method, factory: :credit_card_payment_method) association(:address) diff --git a/core/lib/spree/testing_support/factories/customer_return_factory.rb b/core/lib/spree/testing_support/factories/customer_return_factory.rb index 9f688f757d8..bbd919d33d4 100644 --- a/core/lib/spree/testing_support/factories/customer_return_factory.rb +++ b/core/lib/spree/testing_support/factories/customer_return_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :customer_return, class: 'Spree::CustomerReturn' do + factory :customer_return, class: "Spree::CustomerReturn" do association(:stock_location, factory: :stock_location) transient do @@ -25,7 +25,7 @@ end # for the case when you want to supply existing return items instead of generating some - factory :customer_return_without_return_items, class: 'Spree::CustomerReturn' do + factory :customer_return_without_return_items, class: "Spree::CustomerReturn" do association(:stock_location, factory: :stock_location) end end diff --git a/core/lib/spree/testing_support/factories/image_factory.rb b/core/lib/spree/testing_support/factories/image_factory.rb index ed7c2380a6b..8c2f2144e9d 100644 --- a/core/lib/spree/testing_support/factories/image_factory.rb +++ b/core/lib/spree/testing_support/factories/image_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :image, class: 'Spree::Image' do - attachment { Spree::Core::Engine.root.join('lib', 'spree', 'testing_support', 'fixtures', 'blank.jpg').open } + factory :image, class: "Spree::Image" do + attachment { Spree::Core::Engine.root.join("lib", "spree", "testing_support", "fixtures", "blank.jpg").open } end end diff --git a/core/lib/spree/testing_support/factories/inventory_unit_factory.rb b/core/lib/spree/testing_support/factories/inventory_unit_factory.rb index 03ce19dc508..dde175f15d9 100644 --- a/core/lib/spree/testing_support/factories/inventory_unit_factory.rb +++ b/core/lib/spree/testing_support/factories/inventory_unit_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :inventory_unit, class: 'Spree::InventoryUnit' do + factory :inventory_unit, class: "Spree::InventoryUnit" do transient do order { nil } stock_location { nil } @@ -15,12 +15,12 @@ build(:line_item, variant:) end end - state { 'on_hand' } + state { "on_hand" } shipment do if stock_location - build(:shipment, state: 'pending', order: line_item.order, stock_location:) + build(:shipment, state: "pending", order: line_item.order, stock_location:) else - build(:shipment, state: 'pending', order: line_item.order) + build(:shipment, state: "pending", order: line_item.order) end end # return_authorization diff --git a/core/lib/spree/testing_support/factories/line_item_factory.rb b/core/lib/spree/testing_support/factories/line_item_factory.rb index 43afb9d24c9..f9938ae6718 100644 --- a/core/lib/spree/testing_support/factories/line_item_factory.rb +++ b/core/lib/spree/testing_support/factories/line_item_factory.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true FactoryBot.define do - factory :line_item, class: 'Spree::LineItem' do + factory :line_item, class: "Spree::LineItem" do quantity { 1 } - price { BigDecimal('10.00') } + price { BigDecimal("10.00") } order transient do product { nil } diff --git a/core/lib/spree/testing_support/factories/option_type_factory.rb b/core/lib/spree/testing_support/factories/option_type_factory.rb index e81c7e43261..d1c1725dfad 100644 --- a/core/lib/spree/testing_support/factories/option_type_factory.rb +++ b/core/lib/spree/testing_support/factories/option_type_factory.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true FactoryBot.define do - factory :option_type, class: 'Spree::OptionType' do + factory :option_type, class: "Spree::OptionType" do sequence(:name) { |n| "foo-size-#{n}" } - presentation { 'Size' } + presentation { "Size" } end end diff --git a/core/lib/spree/testing_support/factories/option_value_factory.rb b/core/lib/spree/testing_support/factories/option_value_factory.rb index 3abc542cbd2..6d4a53ed19e 100644 --- a/core/lib/spree/testing_support/factories/option_value_factory.rb +++ b/core/lib/spree/testing_support/factories/option_value_factory.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true FactoryBot.define do - factory :option_value, class: 'Spree::OptionValue' do + factory :option_value, class: "Spree::OptionValue" do sequence(:name) { |n| "Size-#{n}" } - presentation { 'S' } + presentation { "S" } option_type end end diff --git a/core/lib/spree/testing_support/factories/order_factory.rb b/core/lib/spree/testing_support/factories/order_factory.rb index a94e0b0be4c..bf4eb129705 100644 --- a/core/lib/spree/testing_support/factories/order_factory.rb +++ b/core/lib/spree/testing_support/factories/order_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :order, class: 'Spree::Order' do + factory :order, class: "Spree::Order" do user bill_address ship_address @@ -43,12 +43,12 @@ evaluator.stock_location # must evaluate before creating line items evaluator.line_items_attributes.each do |attributes| - attributes = { order:, price: evaluator.line_items_price }.merge(attributes).tap do |attrs| + attributes = {order:, price: evaluator.line_items_price}.merge(attributes).tap do |attrs| tax_category = attributes.delete(:tax_category) if attrs[:variant] && tax_category - attrs[:variant].update(tax_category: ) + attrs[:variant].update(tax_category:) elsif tax_category - attrs[:variant] = create(:variant, tax_category: ) + attrs[:variant] = create(:variant, tax_category:) end end @@ -63,8 +63,8 @@ end factory :order_ready_to_complete do - state { 'confirm' } - payment_state { 'checkout' } + state { "confirm" } + payment_state { "checkout" } transient do payment_type { :credit_card_payment } @@ -85,33 +85,33 @@ transient do completed_at { Time.current } end - state { 'complete' } + state { "complete" } after(:create) do |order, evaluator| order.shipments.each do |shipment| - shipment.inventory_units.update_all state: 'on_hand', pending: false + shipment.inventory_units.update_all state: "on_hand", pending: false end order.update_column(:completed_at, evaluator.completed_at) end factory :completed_order_with_pending_payment do after(:create) do |order| - create(:payment, amount: order.total, order:, state: 'pending') + create(:payment, amount: order.total, order:, state: "pending") end end factory :order_ready_to_ship do - payment_state { 'paid' } - shipment_state { 'ready' } + payment_state { "paid" } + shipment_state { "ready" } transient do payment_type { :credit_card_payment } end after(:create) do |order, evaluator| - create(evaluator.payment_type, amount: order.total, order:, state: 'completed') + create(evaluator.payment_type, amount: order.total, order:, state: "completed") order.shipments.each do |shipment| - shipment.update_column('state', 'ready') + shipment.update_column("state", "ready") end order.reload end @@ -122,9 +122,10 @@ end after(:create) do |order, evaluator| order.shipments.each do |shipment| - shipment.inventory_units.update_all state: 'shipped' - shipment.update_columns(state: 'shipped', shipped_at: Time.current) + shipment.inventory_units.update_all state: "shipped" + shipment.update_columns(state: "shipped", shipped_at: Time.current) next unless evaluator.with_cartons + Spree::Carton.create!( stock_location: shipment.stock_location, address: order.ship_address, @@ -134,7 +135,7 @@ ) end # We need to update the shipment_state after all callbacks have run - order.update_columns(shipment_state: 'shipped') + order.update_columns(shipment_state: "shipped") order.reload end end diff --git a/core/lib/spree/testing_support/factories/payment_factory.rb b/core/lib/spree/testing_support/factories/payment_factory.rb index 8566dd62a01..701e3ce3582 100644 --- a/core/lib/spree/testing_support/factories/payment_factory.rb +++ b/core/lib/spree/testing_support/factories/payment_factory.rb @@ -1,20 +1,20 @@ # frozen_string_literal: true FactoryBot.define do - factory :payment, aliases: [:credit_card_payment], class: 'Spree::Payment' do + factory :payment, aliases: [:credit_card_payment], class: "Spree::Payment" do association(:payment_method, factory: :credit_card_payment_method) source { create(:credit_card, user: order.user, address: order.bill_address) } order - state { 'checkout' } - response_code { '12345' } + state { "checkout" } + response_code { "12345" } trait :completed do - state { 'completed' } + state { "completed" } end trait :failing do - response_code { '00000' } - association(:source, :failing, { factory: :credit_card }) + response_code { "00000" } + association(:source, :failing, {factory: :credit_card}) end factory :payment_with_refund do @@ -24,7 +24,7 @@ amount { refund_amount } - state { 'completed' } + state { "completed" } refunds { build_list :refund, 1, amount: refund_amount } end @@ -34,12 +34,12 @@ end end - factory :check_payment, class: 'Spree::Payment' do + factory :check_payment, class: "Spree::Payment" do association(:payment_method, factory: :check_payment_method) order end - factory :store_credit_payment, class: 'Spree::Payment', parent: :payment do + factory :store_credit_payment, class: "Spree::Payment", parent: :payment do association(:payment_method, factory: :store_credit_payment_method) association(:source, factory: :store_credit) end diff --git a/core/lib/spree/testing_support/factories/payment_method_factory.rb b/core/lib/spree/testing_support/factories/payment_method_factory.rb index f538f9ab62c..d68cd04954b 100644 --- a/core/lib/spree/testing_support/factories/payment_method_factory.rb +++ b/core/lib/spree/testing_support/factories/payment_method_factory.rb @@ -1,30 +1,30 @@ # frozen_string_literal: true FactoryBot.define do - factory :payment_method, aliases: [:credit_card_payment_method], class: 'Spree::PaymentMethod::BogusCreditCard' do - name { 'Credit Card' } + factory :payment_method, aliases: [:credit_card_payment_method], class: "Spree::PaymentMethod::BogusCreditCard" do + name { "Credit Card" } available_to_admin { true } available_to_users { true } end - factory :check_payment_method, class: 'Spree::PaymentMethod::Check' do - name { 'Check' } + factory :check_payment_method, class: "Spree::PaymentMethod::Check" do + name { "Check" } available_to_admin { true } available_to_users { true } end # authorize.net was moved to spree_gateway. # Leaving this factory in place with bogus in case anyone is using it. - factory :simple_credit_card_payment_method, class: 'Spree::PaymentMethod::SimpleBogusCreditCard' do - name { 'Credit Card' } + factory :simple_credit_card_payment_method, class: "Spree::PaymentMethod::SimpleBogusCreditCard" do + name { "Credit Card" } available_to_admin { true } available_to_users { true } end - factory :store_credit_payment_method, class: 'Spree::PaymentMethod::StoreCredit' do - name { "Store Credit" } - description { "Store Credit" } - active { true } + factory :store_credit_payment_method, class: "Spree::PaymentMethod::StoreCredit" do + name { "Store Credit" } + description { "Store Credit" } + active { true } available_to_admin { false } available_to_users { false } auto_capture { true } diff --git a/core/lib/spree/testing_support/factories/price_factory.rb b/core/lib/spree/testing_support/factories/price_factory.rb index 6448391f96c..981fbf995b4 100644 --- a/core/lib/spree/testing_support/factories/price_factory.rb +++ b/core/lib/spree/testing_support/factories/price_factory.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true FactoryBot.define do - factory :price, class: 'Spree::Price' do + factory :price, class: "Spree::Price" do variant amount { 19.99 } - currency { 'USD' } + currency { "USD" } end end diff --git a/core/lib/spree/testing_support/factories/product_factory.rb b/core/lib/spree/testing_support/factories/product_factory.rb index ab4dd99b983..b42726a315d 100644 --- a/core/lib/spree/testing_support/factories/product_factory.rb +++ b/core/lib/spree/testing_support/factories/product_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :base_product, class: 'Spree::Product' do + factory :base_product, class: "Spree::Product" do sequence(:name) { |n| "Product ##{n} - #{Kernel.rand(9999)}" } description { "As seen on TV!" } price { 19.99 } @@ -18,7 +18,7 @@ before(:create) { create(:stock_location) if Spree::StockLocation.count == 0 } factory :custom_product do - name { 'Custom Product' } + name { "Custom Product" } price { 17.99 } tax_category { |r| Spree::TaxCategory.first || r.association(:tax_category) } diff --git a/core/lib/spree/testing_support/factories/product_option_type_factory.rb b/core/lib/spree/testing_support/factories/product_option_type_factory.rb index bb7d06233e2..6ab4c474fbd 100644 --- a/core/lib/spree/testing_support/factories/product_option_type_factory.rb +++ b/core/lib/spree/testing_support/factories/product_option_type_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :product_option_type, class: 'Spree::ProductOptionType' do + factory :product_option_type, class: "Spree::ProductOptionType" do product option_type end diff --git a/core/lib/spree/testing_support/factories/product_property_factory.rb b/core/lib/spree/testing_support/factories/product_property_factory.rb index 6e4efbdd6e2..65bc872d015 100644 --- a/core/lib/spree/testing_support/factories/product_property_factory.rb +++ b/core/lib/spree/testing_support/factories/product_property_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :product_property, class: 'Spree::ProductProperty' do + factory :product_property, class: "Spree::ProductProperty" do product property end diff --git a/core/lib/spree/testing_support/factories/property_factory.rb b/core/lib/spree/testing_support/factories/property_factory.rb index 6a28262fc84..461accd87bd 100644 --- a/core/lib/spree/testing_support/factories/property_factory.rb +++ b/core/lib/spree/testing_support/factories/property_factory.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true FactoryBot.define do - factory :property, class: 'Spree::Property' do - name { 'baseball_cap_color' } - presentation { 'cap color' } + factory :property, class: "Spree::Property" do + name { "baseball_cap_color" } + presentation { "cap color" } end end diff --git a/core/lib/spree/testing_support/factories/refund_factory.rb b/core/lib/spree/testing_support/factories/refund_factory.rb index 0b3b76174cf..83770433b5b 100644 --- a/core/lib/spree/testing_support/factories/refund_factory.rb +++ b/core/lib/spree/testing_support/factories/refund_factory.rb @@ -3,7 +3,7 @@ FactoryBot.define do sequence(:refund_transaction_id) { |n| "fake-refund-transaction-#{n}" } - factory :refund, class: 'Spree::Refund' do + factory :refund, class: "Spree::Refund" do transient do payment_amount { 100 } end @@ -11,7 +11,7 @@ amount { 100.00 } transaction_id { generate(:refund_transaction_id) } payment do - association(:payment, state: 'completed', amount: payment_amount) + association(:payment, state: "completed", amount: payment_amount) end association(:reason, factory: :refund_reason) end diff --git a/core/lib/spree/testing_support/factories/refund_reason_factory.rb b/core/lib/spree/testing_support/factories/refund_reason_factory.rb index 53235fa589c..9e10d6f706a 100644 --- a/core/lib/spree/testing_support/factories/refund_reason_factory.rb +++ b/core/lib/spree/testing_support/factories/refund_reason_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :refund_reason, class: 'Spree::RefundReason' do + factory :refund_reason, class: "Spree::RefundReason" do sequence(:name) { |n| "Refund for return ##{n}" } end end diff --git a/core/lib/spree/testing_support/factories/reimbursement_factory.rb b/core/lib/spree/testing_support/factories/reimbursement_factory.rb index e48f9ef50b1..9a3211721cd 100644 --- a/core/lib/spree/testing_support/factories/reimbursement_factory.rb +++ b/core/lib/spree/testing_support/factories/reimbursement_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :reimbursement, class: 'Spree::Reimbursement' do + factory :reimbursement, class: "Spree::Reimbursement" do transient do return_items_count { 1 } end diff --git a/core/lib/spree/testing_support/factories/reimbursement_type_factory.rb b/core/lib/spree/testing_support/factories/reimbursement_type_factory.rb index 68e62436ba4..7400beeb248 100644 --- a/core/lib/spree/testing_support/factories/reimbursement_type_factory.rb +++ b/core/lib/spree/testing_support/factories/reimbursement_type_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :reimbursement_type, class: 'Spree::ReimbursementType' do + factory :reimbursement_type, class: "Spree::ReimbursementType" do sequence(:name) { |n| "Reimbursement Type #{n}" } active { true } mutable { true } diff --git a/core/lib/spree/testing_support/factories/return_authorization_factory.rb b/core/lib/spree/testing_support/factories/return_authorization_factory.rb index 60d09043787..e015dbd80e8 100644 --- a/core/lib/spree/testing_support/factories/return_authorization_factory.rb +++ b/core/lib/spree/testing_support/factories/return_authorization_factory.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true FactoryBot.define do - factory :return_authorization, class: 'Spree::ReturnAuthorization' do + factory :return_authorization, class: "Spree::ReturnAuthorization" do association(:order, factory: :shipped_order) association(:stock_location, factory: :stock_location) association(:reason, factory: :return_reason) - memo { 'Items were broken' } + memo { "Items were broken" } end - factory :new_return_authorization, class: 'Spree::ReturnAuthorization' do + factory :new_return_authorization, class: "Spree::ReturnAuthorization" do association(:order, factory: :shipped_order) association(:stock_location, factory: :stock_location) association(:reason, factory: :return_reason) diff --git a/core/lib/spree/testing_support/factories/return_item_factory.rb b/core/lib/spree/testing_support/factories/return_item_factory.rb index 508c6dae230..07dd7aff7bc 100644 --- a/core/lib/spree/testing_support/factories/return_item_factory.rb +++ b/core/lib/spree/testing_support/factories/return_item_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :return_item, class: 'Spree::ReturnItem' do + factory :return_item, class: "Spree::ReturnItem" do association(:inventory_unit, factory: :inventory_unit, state: :shipped) association(:return_reason, factory: :return_reason) return_authorization do |_return_item| diff --git a/core/lib/spree/testing_support/factories/return_reason_factory.rb b/core/lib/spree/testing_support/factories/return_reason_factory.rb index b646ed21747..fd6a68c730a 100644 --- a/core/lib/spree/testing_support/factories/return_reason_factory.rb +++ b/core/lib/spree/testing_support/factories/return_reason_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :return_reason, class: 'Spree::ReturnReason' do + factory :return_reason, class: "Spree::ReturnReason" do sequence(:name) { |n| "Defect ##{n}" } end end diff --git a/core/lib/spree/testing_support/factories/role_factory.rb b/core/lib/spree/testing_support/factories/role_factory.rb index d032949035c..768927f5512 100644 --- a/core/lib/spree/testing_support/factories/role_factory.rb +++ b/core/lib/spree/testing_support/factories/role_factory.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true FactoryBot.define do - factory :role, class: 'Spree::Role' do + factory :role, class: "Spree::Role" do sequence(:name) { |n| "Role ##{n}" } factory :admin_role do - name { 'admin' } + name { "admin" } end end end diff --git a/core/lib/spree/testing_support/factories/shipment_factory.rb b/core/lib/spree/testing_support/factories/shipment_factory.rb index 4050918f858..79e4161ef3c 100644 --- a/core/lib/spree/testing_support/factories/shipment_factory.rb +++ b/core/lib/spree/testing_support/factories/shipment_factory.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true FactoryBot.define do - factory :shipment, class: 'Spree::Shipment' do - tracking { 'U10000' } + factory :shipment, class: "Spree::Shipment" do + tracking { "U10000" } cost { 100.00 } - state { 'pending' } + state { "pending" } order stock_location diff --git a/core/lib/spree/testing_support/factories/shipping_category_factory.rb b/core/lib/spree/testing_support/factories/shipping_category_factory.rb index 8a4a56a2875..9ec321ba867 100644 --- a/core/lib/spree/testing_support/factories/shipping_category_factory.rb +++ b/core/lib/spree/testing_support/factories/shipping_category_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :shipping_category, class: 'Spree::ShippingCategory' do + factory :shipping_category, class: "Spree::ShippingCategory" do sequence(:name) { |n| "ShippingCategory ##{n}" } end end diff --git a/core/lib/spree/testing_support/factories/shipping_method_factory.rb b/core/lib/spree/testing_support/factories/shipping_method_factory.rb index d5dec8b3dc1..5d8f3c8772d 100644 --- a/core/lib/spree/testing_support/factories/shipping_method_factory.rb +++ b/core/lib/spree/testing_support/factories/shipping_method_factory.rb @@ -6,16 +6,16 @@ aliases: [ :base_shipping_method ], - class: 'Spree::ShippingMethod' + class: "Spree::ShippingMethod" ) do zones do - [Spree::Zone.find_by(name: 'GlobalZone') || FactoryBot.create(:global_zone)] + [Spree::Zone.find_by(name: "GlobalZone") || FactoryBot.create(:global_zone)] end - name { 'UPS Ground' } - code { 'UPS_GROUND' } - carrier { 'UPS' } - service_level { '1DAYGROUND' } + name { "UPS Ground" } + code { "UPS_GROUND" } + carrier { "UPS" } + service_level { "1DAYGROUND" } calculator { |s| s.association(:shipping_calculator, strategy: :build, preferred_amount: s.cost, preferred_currency: s.currency) } @@ -30,7 +30,7 @@ end end - factory :free_shipping_method, class: 'Spree::ShippingMethod' do + factory :free_shipping_method, class: "Spree::ShippingMethod" do cost { nil } association(:calculator, factory: :shipping_no_amount_calculator, strategy: :build) end diff --git a/core/lib/spree/testing_support/factories/shipping_rate_factory.rb b/core/lib/spree/testing_support/factories/shipping_rate_factory.rb index ca3edc4bf6c..686720d0a87 100644 --- a/core/lib/spree/testing_support/factories/shipping_rate_factory.rb +++ b/core/lib/spree/testing_support/factories/shipping_rate_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :shipping_rate, class: 'Spree::ShippingRate' do + factory :shipping_rate, class: "Spree::ShippingRate" do shipping_method shipment end diff --git a/core/lib/spree/testing_support/factories/state_factory.rb b/core/lib/spree/testing_support/factories/state_factory.rb index d2ff84959b8..85707d5981d 100644 --- a/core/lib/spree/testing_support/factories/state_factory.rb +++ b/core/lib/spree/testing_support/factories/state_factory.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true FactoryBot.define do - factory :state, class: 'Spree::State' do + factory :state, class: "Spree::State" do transient do - country_iso { 'US' } - state_code { 'AL' } + country_iso { "US" } + state_code { "AL" } carmen_subregion do carmen_country = Carmen::Country.coded(country.iso) @@ -17,7 +17,7 @@ carmen_regions = carmen_regions.flat_map(&:subregions) if carmen_regions.first.subregions? region_collection = Carmen::RegionCollection.new(carmen_regions) - region_collection.coded(state_code) || region_collection.sort_by(&:name).first + region_collection.coded(state_code) || region_collection.min_by(&:name) end end diff --git a/core/lib/spree/testing_support/factories/stock_item_factory.rb b/core/lib/spree/testing_support/factories/stock_item_factory.rb index 36fb77aaff5..f313bd47a59 100644 --- a/core/lib/spree/testing_support/factories/stock_item_factory.rb +++ b/core/lib/spree/testing_support/factories/stock_item_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :stock_item, class: 'Spree::StockItem' do + factory :stock_item, class: "Spree::StockItem" do backorderable { true } association :stock_location, factory: :stock_location_without_variant_propagation variant diff --git a/core/lib/spree/testing_support/factories/stock_location_factory.rb b/core/lib/spree/testing_support/factories/stock_location_factory.rb index d61d27afeff..6a273923d95 100644 --- a/core/lib/spree/testing_support/factories/stock_location_factory.rb +++ b/core/lib/spree/testing_support/factories/stock_location_factory.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true FactoryBot.define do - factory :stock_location, class: 'Spree::StockLocation' do - name { 'NY Warehouse' } - address1 { '1600 Pennsylvania Ave NW' } - city { 'Washington' } - zipcode { '20500' } - phone { '(202) 456-1111' } + factory :stock_location, class: "Spree::StockLocation" do + name { "NY Warehouse" } + address1 { "1600 Pennsylvania Ave NW" } + city { "Washington" } + zipcode { "20500" } + phone { "(202) 456-1111" } active { true } backorderable_default { true } - country { |stock_location| Spree::Country.first || stock_location.association(:country) } + country { |stock_location| Spree::Country.first || stock_location.association(:country) } state do |stock_location| carmen_country = Carmen::Country.coded(stock_location.country.iso) if carmen_country.subregions? diff --git a/core/lib/spree/testing_support/factories/stock_movement_factory.rb b/core/lib/spree/testing_support/factories/stock_movement_factory.rb index 0f6cb489142..ef141b8874b 100644 --- a/core/lib/spree/testing_support/factories/stock_movement_factory.rb +++ b/core/lib/spree/testing_support/factories/stock_movement_factory.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true FactoryBot.define do - factory :stock_movement, class: 'Spree::StockMovement' do + factory :stock_movement, class: "Spree::StockMovement" do quantity { 1 } - action { 'sold' } + action { "sold" } stock_item end trait :received do - action { 'received' } + action { "received" } end end diff --git a/core/lib/spree/testing_support/factories/stock_package_factory.rb b/core/lib/spree/testing_support/factories/stock_package_factory.rb index 1ae5506a88e..5156d197a26 100644 --- a/core/lib/spree/testing_support/factories/stock_package_factory.rb +++ b/core/lib/spree/testing_support/factories/stock_package_factory.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true FactoryBot.define do - factory :stock_package, class: 'Spree::Stock::Package' do + factory :stock_package, class: "Spree::Stock::Package" do skip_create transient do stock_location { build(:stock_location) } - contents { [] } + contents { [] } variants_contents { {} } end @@ -19,7 +19,7 @@ end factory :stock_package_fulfilled do - transient { variants_contents { { build(:variant) => 2 } } } + transient { variants_contents { {build(:variant) => 2} } } end end end diff --git a/core/lib/spree/testing_support/factories/store_credit_category_factory.rb b/core/lib/spree/testing_support/factories/store_credit_category_factory.rb index 7079a6eca21..63d1d6d823f 100644 --- a/core/lib/spree/testing_support/factories/store_credit_category_factory.rb +++ b/core/lib/spree/testing_support/factories/store_credit_category_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :store_credit_category, class: 'Spree::StoreCreditCategory' do + factory :store_credit_category, class: "Spree::StoreCreditCategory" do name { "Exchange" } trait :reimbursement do diff --git a/core/lib/spree/testing_support/factories/store_credit_event_factory.rb b/core/lib/spree/testing_support/factories/store_credit_event_factory.rb index 1432edc72a9..cc00b11876e 100644 --- a/core/lib/spree/testing_support/factories/store_credit_event_factory.rb +++ b/core/lib/spree/testing_support/factories/store_credit_event_factory.rb @@ -1,27 +1,27 @@ # frozen_string_literal: true FactoryBot.define do - factory :store_credit_event, class: 'Spree::StoreCreditEvent' do + factory :store_credit_event, class: "Spree::StoreCreditEvent" do store_credit - amount { 100.00 } + amount { 100.00 } authorization_code { "#{store_credit.id}-SC-20140602164814476128" } - action { Spree::StoreCredit::AUTHORIZE_ACTION } + action { Spree::StoreCredit::AUTHORIZE_ACTION } - factory :store_credit_auth_event, class: 'Spree::StoreCreditEvent' do - action { Spree::StoreCredit::AUTHORIZE_ACTION } + factory :store_credit_auth_event, class: "Spree::StoreCreditEvent" do + action { Spree::StoreCredit::AUTHORIZE_ACTION } end factory :store_credit_capture_event do - action { Spree::StoreCredit::CAPTURE_ACTION } + action { Spree::StoreCredit::CAPTURE_ACTION } end factory :store_credit_adjustment_event do - action { Spree::StoreCredit::ADJUSTMENT_ACTION } + action { Spree::StoreCredit::ADJUSTMENT_ACTION } store_credit_reason { create(:store_credit_reason) } end factory :store_credit_invalidate_event do - action { Spree::StoreCredit::INVALIDATE_ACTION } + action { Spree::StoreCredit::INVALIDATE_ACTION } store_credit_reason { create(:store_credit_reason) } end end diff --git a/core/lib/spree/testing_support/factories/store_credit_factory.rb b/core/lib/spree/testing_support/factories/store_credit_factory.rb index 39623f5c01f..69022a9f6ac 100644 --- a/core/lib/spree/testing_support/factories/store_credit_factory.rb +++ b/core/lib/spree/testing_support/factories/store_credit_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :store_credit, class: 'Spree::StoreCredit' do + factory :store_credit, class: "Spree::StoreCredit" do association :user, strategy: :create association :created_by, factory: :user, strategy: :create association :category, factory: :store_credit_category, strategy: :create diff --git a/core/lib/spree/testing_support/factories/store_credit_reason_factory.rb b/core/lib/spree/testing_support/factories/store_credit_reason_factory.rb index 24cad21deba..7d2c1db26c4 100644 --- a/core/lib/spree/testing_support/factories/store_credit_reason_factory.rb +++ b/core/lib/spree/testing_support/factories/store_credit_reason_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :store_credit_reason, class: 'Spree::StoreCreditReason' do + factory :store_credit_reason, class: "Spree::StoreCreditReason" do sequence :name do |n| "Input error #{n}" end diff --git a/core/lib/spree/testing_support/factories/store_credit_type_factory.rb b/core/lib/spree/testing_support/factories/store_credit_type_factory.rb index c747b5ee607..c3edba753ee 100644 --- a/core/lib/spree/testing_support/factories/store_credit_type_factory.rb +++ b/core/lib/spree/testing_support/factories/store_credit_type_factory.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true FactoryBot.define do - factory :primary_credit_type, class: 'Spree::StoreCreditType' do - name { Spree::StoreCreditType::DEFAULT_TYPE_NAME } - priority { "1" } + factory :primary_credit_type, class: "Spree::StoreCreditType" do + name { Spree::StoreCreditType::DEFAULT_TYPE_NAME } + priority { "1" } end - factory :secondary_credit_type, class: 'Spree::StoreCreditType' do - name { Spree::StoreCreditType::NON_EXPIRING } - priority { "2" } + factory :secondary_credit_type, class: "Spree::StoreCreditType" do + name { Spree::StoreCreditType::NON_EXPIRING } + priority { "2" } end end diff --git a/core/lib/spree/testing_support/factories/store_factory.rb b/core/lib/spree/testing_support/factories/store_factory.rb index 8e66a00a66b..008e2c9a823 100644 --- a/core/lib/spree/testing_support/factories/store_factory.rb +++ b/core/lib/spree/testing_support/factories/store_factory.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true FactoryBot.define do - factory :store, class: 'Spree::Store' do + factory :store, class: "Spree::Store" do sequence(:code) { |i| "spree_#{i}" } sequence(:name) { |i| "Spree Test Store #{i}" } sequence(:url) { |i| "www.example#{i}.com" } - mail_from_address { 'solidus@example.org' } + mail_from_address { "solidus@example.org" } end end diff --git a/core/lib/spree/testing_support/factories/tax_category_factory.rb b/core/lib/spree/testing_support/factories/tax_category_factory.rb index f81a1915d2c..48bd72b6d5a 100644 --- a/core/lib/spree/testing_support/factories/tax_category_factory.rb +++ b/core/lib/spree/testing_support/factories/tax_category_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :tax_category, class: 'Spree::TaxCategory' do + factory :tax_category, class: "Spree::TaxCategory" do name { "TaxCategory - #{rand(999_999)}" } tax_code { "TaxCode - #{rand(999_999)}" } end diff --git a/core/lib/spree/testing_support/factories/tax_rate_factory.rb b/core/lib/spree/testing_support/factories/tax_rate_factory.rb index 746696491e0..72caa1a0be6 100644 --- a/core/lib/spree/testing_support/factories/tax_rate_factory.rb +++ b/core/lib/spree/testing_support/factories/tax_rate_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :tax_rate, class: 'Spree::TaxRate' do + factory :tax_rate, class: "Spree::TaxRate" do zone amount { 0.1 } association(:calculator, factory: :default_tax_calculator) diff --git a/core/lib/spree/testing_support/factories/taxon_factory.rb b/core/lib/spree/testing_support/factories/taxon_factory.rb index 51630c5ad20..32fa29ad0ea 100644 --- a/core/lib/spree/testing_support/factories/taxon_factory.rb +++ b/core/lib/spree/testing_support/factories/taxon_factory.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true FactoryBot.define do - factory :taxon, class: 'Spree::Taxon' do - name { 'Ruby on Rails' } + factory :taxon, class: "Spree::Taxon" do + name { "Ruby on Rails" } taxonomy_id { (parent&.taxonomy || create(:taxonomy)).id } parent_id { parent&.id || taxonomy.root.id } trait :with_icon do after(:create) do |taxon| - taxon.update(icon: Spree::Core::Engine.root.join('lib', 'spree', 'testing_support', 'fixtures', 'blank.jpg').open) + taxon.update(icon: Spree::Core::Engine.root.join("lib", "spree", "testing_support", "fixtures", "blank.jpg").open) end end end diff --git a/core/lib/spree/testing_support/factories/taxonomy_factory.rb b/core/lib/spree/testing_support/factories/taxonomy_factory.rb index fb0779c6601..541569ffa25 100644 --- a/core/lib/spree/testing_support/factories/taxonomy_factory.rb +++ b/core/lib/spree/testing_support/factories/taxonomy_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :taxonomy, class: 'Spree::Taxonomy' do + factory :taxonomy, class: "Spree::Taxonomy" do sequence :name do |seq| "Brand #{seq}" end diff --git a/core/lib/spree/testing_support/factories/user_factory.rb b/core/lib/spree/testing_support/factories/user_factory.rb index 5cb5db5653a..315e3b69317 100644 --- a/core/lib/spree/testing_support/factories/user_factory.rb +++ b/core/lib/spree/testing_support/factories/user_factory.rb @@ -3,7 +3,7 @@ FactoryBot.define do factory :user, class: Spree::UserClassHandle.new do email { generate(:email) } - password { 'secret' } + password { "secret" } password_confirmation { password } trait :with_api_key do @@ -20,7 +20,7 @@ factory :admin_user do after(:create) do |user, _| - admin_role = Spree::Role.find_by(name: 'admin') || create(:role, name: 'admin') + admin_role = Spree::Role.find_by(name: "admin") || create(:role, name: "admin") user.spree_roles << admin_role end end diff --git a/core/lib/spree/testing_support/factories/variant_factory.rb b/core/lib/spree/testing_support/factories/variant_factory.rb index 29da569191e..c942df0c18e 100644 --- a/core/lib/spree/testing_support/factories/variant_factory.rb +++ b/core/lib/spree/testing_support/factories/variant_factory.rb @@ -3,7 +3,7 @@ FactoryBot.define do sequence(:random_float) { BigDecimal("#{rand(200)}.#{rand(99)}") } - factory :base_variant, class: 'Spree::Variant' do + factory :base_variant, class: "Spree::Variant" do price { 19.99 } cost_price { 17.00 } sku { generate(:sku) } @@ -23,7 +23,7 @@ factory :master_variant do is_master { 1 } - before(:create){ |variant| variant.product.master = variant } + before(:create) { |variant| variant.product.master = variant } product { build(:base_product) } end diff --git a/core/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb b/core/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb index aa83ea9a0a9..1922e466ab2 100644 --- a/core/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +++ b/core/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :variant_property_rule_condition, class: 'Spree::VariantPropertyRuleCondition' do + factory :variant_property_rule_condition, class: "Spree::VariantPropertyRuleCondition" do variant_property_rule option_value end diff --git a/core/lib/spree/testing_support/factories/variant_property_rule_factory.rb b/core/lib/spree/testing_support/factories/variant_property_rule_factory.rb index fe8e212ab8b..82738e5f6fb 100644 --- a/core/lib/spree/testing_support/factories/variant_property_rule_factory.rb +++ b/core/lib/spree/testing_support/factories/variant_property_rule_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :variant_property_rule, class: 'Spree::VariantPropertyRule' do + factory :variant_property_rule, class: "Spree::VariantPropertyRule" do product transient do diff --git a/core/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb b/core/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb index 53ed1393bff..9833cb0d75d 100644 --- a/core/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +++ b/core/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :variant_property_rule_value, class: 'Spree::VariantPropertyRuleValue' do + factory :variant_property_rule_value, class: "Spree::VariantPropertyRuleValue" do variant_property_rule property end diff --git a/core/lib/spree/testing_support/factories/zone_factory.rb b/core/lib/spree/testing_support/factories/zone_factory.rb index eb436cd4acd..1f7d004db1f 100644 --- a/core/lib/spree/testing_support/factories/zone_factory.rb +++ b/core/lib/spree/testing_support/factories/zone_factory.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true FactoryBot.define do - factory :global_zone, class: 'Spree::Zone' do - initialize_with { Spree::Zone.find_or_initialize_by(name: 'GlobalZone') } + factory :global_zone, class: "Spree::Zone" do + initialize_with { Spree::Zone.find_or_initialize_by(name: "GlobalZone") } zone_members do |proxy| zone = proxy.instance_eval { @instance } Spree::Country.all.map do |c| @@ -11,7 +11,7 @@ end end - factory :zone, class: 'Spree::Zone' do + factory :zone, class: "Spree::Zone" do sequence(:name) { |i| "Zone #{i}" } trait :with_country do diff --git a/core/lib/spree/testing_support/factory_bot.rb b/core/lib/spree/testing_support/factory_bot.rb index 84664b28cf1..bf08adb6daa 100644 --- a/core/lib/spree/testing_support/factory_bot.rb +++ b/core/lib/spree/testing_support/factory_bot.rb @@ -14,7 +14,7 @@ module FactoryBot PATHS = SEQUENCES + FACTORIES def self.definition_file_paths - @paths ||= PATHS.map { |path| path.sub(/.rb\z/, '') } + @paths ||= PATHS.map { |path| path.sub(/.rb\z/, "") } end def self.check_version diff --git a/core/lib/spree/testing_support/flaky.rb b/core/lib/spree/testing_support/flaky.rb index d6fa10480c9..591c35d19c6 100644 --- a/core/lib/spree/testing_support/flaky.rb +++ b/core/lib/spree/testing_support/flaky.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -require 'rspec/retry' + +require "rspec/retry" # Usage: # @@ -13,7 +14,7 @@ config.display_try_failure_messages = true config.around(:each, :flaky) do |example| - if ENV['CI'] + if ENV["CI"] example.run_with_retry retry: 2 else example.run diff --git a/core/lib/spree/testing_support/flash.rb b/core/lib/spree/testing_support/flash.rb index ebb4490eee2..ddb7bb09254 100644 --- a/core/lib/spree/testing_support/flash.rb +++ b/core/lib/spree/testing_support/flash.rb @@ -12,7 +12,7 @@ def assert_flash_success(flash) end def assert_successful_update_message(resource) - flash = I18n.t('spree.successfully_updated', resource: I18n.t(resource, scope: 'spree')) + flash = I18n.t("spree.successfully_updated", resource: I18n.t(resource, scope: "spree")) assert_flash_success(flash) end @@ -20,7 +20,7 @@ def assert_successful_update_message(resource) def convert_flash(flash) if flash.is_a?(Symbol) - flash = I18n.t(flash, scope: 'spree') + flash = I18n.t(flash, scope: "spree") end flash end diff --git a/core/lib/spree/testing_support/order_walkthrough.rb b/core/lib/spree/testing_support/order_walkthrough.rb index e2f8b7ae531..24c049ed5b1 100644 --- a/core/lib/spree/testing_support/order_walkthrough.rb +++ b/core/lib/spree/testing_support/order_walkthrough.rb @@ -31,11 +31,11 @@ def up_to(state, user: nil) order.next! states_to_process = if state == :complete - states - else - end_state_position = states.index(state.to_sym) - states[..end_state_position] - end + states + else + end_state_position = states.index(state.to_sym) + states[..end_state_position] + end states_to_process.each do |state_to_process| send(state_to_process, order) @@ -65,7 +65,7 @@ def payment(order) credit_card = ::FactoryBot.create(:credit_card, user: order.user) order.payments.create!(payment_method: credit_card.payment_method, amount: order.total, source: credit_card) # TODO: maybe look at some way of making this payment_state change automatic - order.payment_state = 'paid' + order.payment_state = "paid" order.next! end diff --git a/core/lib/spree/testing_support/preferences.rb b/core/lib/spree/testing_support/preferences.rb index 93c56468e0d..7645368ef84 100644 --- a/core/lib/spree/testing_support/preferences.rb +++ b/core/lib/spree/testing_support/preferences.rb @@ -8,7 +8,7 @@ def configure_spree_preferences end def assert_preference_unset(preference) - find("#preferences_#{preference}")['checked'].should be false + find("#preferences_#{preference}")["checked"].should be false Spree::Config[preference].should be false end diff --git a/core/lib/spree/testing_support/rake.rb b/core/lib/spree/testing_support/rake.rb index 3a468cc55f2..8c5da825c46 100644 --- a/core/lib/spree/testing_support/rake.rb +++ b/core/lib/spree/testing_support/rake.rb @@ -4,7 +4,7 @@ # Rake task spec setup. # RSpec.shared_context "rake" do |task_path:, task_name:| - require 'rake' + require "rake" let(:task) do Rake::Task[task_name] diff --git a/core/lib/spree/testing_support/shared_examples/calculator.rb b/core/lib/spree/testing_support/shared_examples/calculator.rb index c41b3c7e4e6..15eff853c81 100644 --- a/core/lib/spree/testing_support/shared_examples/calculator.rb +++ b/core/lib/spree/testing_support/shared_examples/calculator.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -RSpec.shared_examples_for 'a calculator with a description' do +RSpec.shared_examples_for "a calculator with a description" do describe ".description" do subject { described_class.description } it "has a description" do diff --git a/core/lib/spree/testing_support/shared_examples/gallery.rb b/core/lib/spree/testing_support/shared_examples/gallery.rb index b21ef7c14be..a1cbfd49dd0 100644 --- a/core/lib/spree/testing_support/shared_examples/gallery.rb +++ b/core/lib/spree/testing_support/shared_examples/gallery.rb @@ -1,17 +1,17 @@ # frozen_string_literal: true -RSpec.shared_examples 'a gallery' do - describe '#images' do +RSpec.shared_examples "a gallery" do + describe "#images" do subject { gallery.images } it { is_expected.to be_empty } - context 'there are images' do - include_context 'has multiple images' + context "there are images" do + include_context "has multiple images" - it 'has the associated images' do - expect(subject.map(&:id)). - to match_array([first_image.id, second_image.id]) + it "has the associated images" do + expect(subject.map(&:id)) + .to match_array([first_image.id, second_image.id]) end end end diff --git a/core/lib/spree/testing_support/shared_examples/order_factory.rb b/core/lib/spree/testing_support/shared_examples/order_factory.rb index 47c4657d568..c082fda2420 100644 --- a/core/lib/spree/testing_support/shared_examples/order_factory.rb +++ b/core/lib/spree/testing_support/shared_examples/order_factory.rb @@ -37,8 +37,8 @@ factory, stock_location:, line_items_attributes: [ - { variant: first_variant, quantity: 1, price: 1 }, - { variant: second_variant, quantity: 2, price: 2 } + {variant: first_variant, quantity: 1, price: 1}, + {variant: second_variant, quantity: 2, price: 2} ], shipment_cost: 3, shipping_method: @@ -104,7 +104,7 @@ end end - context 'when shipments should be taxed' do + context "when shipments should be taxed" do let!(:ship_address) { create(:address) } let!(:tax_zone) { create(:global_zone) } # will include the above address let!(:tax_rate) { create(:tax_rate, amount: 0.10, zone: tax_zone, tax_categories: [tax_category]) } @@ -112,7 +112,7 @@ let(:tax_category) { create(:tax_category) } let(:shipping_method) { create(:shipping_method, tax_category:, zones: [tax_zone]) } - it 'shipments get a tax adjustment' do + it "shipments get a tax adjustment" do order = create(factory, ship_address:, shipping_method:) shipment = order.shipments[0] @@ -121,20 +121,20 @@ end end -RSpec.shared_examples 'supplied completed_at is respected' do - context 'when passed a completed_at timestamp' do +RSpec.shared_examples "supplied completed_at is respected" do + context "when passed a completed_at timestamp" do let(:completed_at) { 2.days.ago } let(:order) { create(factory, completed_at:) } - it 'respects the timestamp' do + it "respects the timestamp" do expect(order.completed_at).to be_within(5.seconds).of(completed_at) end end - context 'when no completed_at timestamp is passed' do + context "when no completed_at timestamp is passed" do let(:order) { create(factory) } - it 'defaults to the current time' do + it "defaults to the current time" do expect(order.completed_at).to be_within(2.seconds).of(Time.current) end end diff --git a/core/lib/spree/testing_support/shared_examples/working_factory.rb b/core/lib/spree/testing_support/shared_examples/working_factory.rb index 4b00c042f0a..9bf232caf2c 100644 --- a/core/lib/spree/testing_support/shared_examples/working_factory.rb +++ b/core/lib/spree/testing_support/shared_examples/working_factory.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -RSpec.shared_examples_for 'a working factory' do +RSpec.shared_examples_for "a working factory" do it "builds successfully" do expect(build(factory)).to be_a(factory_class) end diff --git a/core/lib/spree/testing_support/translations.rb b/core/lib/spree/testing_support/translations.rb index 20c382ec7c3..5a194866d59 100644 --- a/core/lib/spree/testing_support/translations.rb +++ b/core/lib/spree/testing_support/translations.rb @@ -4,7 +4,7 @@ module Spree module TestingSupport module Translations def check_missing_translations(page, example) - missing_translations = page.body.scan(/translation missing: #{I18n.locale}\.(.*?)[\s<\"&]/) + missing_translations = page.body.scan(/translation missing: #{I18n.locale}\.(.*?)[\s<"&]/) if missing_translations.any? Rails.logger.info "Found missing translations: #{missing_translations.inspect}" Rails.logger.info "In spec: #{example.location}" diff --git a/core/lib/spree/user_class_handle.rb b/core/lib/spree/user_class_handle.rb index 8e01cd83446..119289577b5 100644 --- a/core/lib/spree/user_class_handle.rb +++ b/core/lib/spree/user_class_handle.rb @@ -22,6 +22,7 @@ class UserClassHandle # @raise [RuntimeError] if Spree.user_class is nil def to_s fail "'Spree.user_class' has not been set yet." unless Spree.user_class_name + "::#{Spree.user_class_name}" end end diff --git a/core/lib/spree_core.rb b/core/lib/spree_core.rb index ef7a70ae759..46096ab5d0a 100644 --- a/core/lib/spree_core.rb +++ b/core/lib/spree_core.rb @@ -1,3 +1,3 @@ # frozen_string_literal: true -require 'spree/core' +require "spree/core" diff --git a/core/lib/tasks/payment_method.rake b/core/lib/tasks/payment_method.rake index b9981d3c044..c728f605cf0 100644 --- a/core/lib/tasks/payment_method.rake +++ b/core/lib/tasks/payment_method.rake @@ -1,7 +1,7 @@ # frozen_string_literal: true namespace :payment_method do - desc "Deactivates old payment methods and fixes ActiveRecord::SubclassNotFound error, "\ + desc "Deactivates old payment methods and fixes ActiveRecord::SubclassNotFound error, " \ "which happens after switching Payment Service Provider." task deactivate_unsupported_payment_methods: :environment do Spree::PaymentMethod.pluck(:id, :type).select do |id, type| @@ -24,6 +24,6 @@ namespace :payment_method do available_to_admin=#{false_value} WHERE id=#{id}; SQL - ) + ) end end diff --git a/core/solidus_core.gemspec b/core/solidus_core.gemspec index 463b0d06654..53d35359d91 100644 --- a/core/solidus_core.gemspec +++ b/core/solidus_core.gemspec @@ -1,27 +1,27 @@ # frozen_string_literal: true -require_relative '../core/lib/spree/core/version.rb' +require_relative "../core/lib/spree/core/version" Gem::Specification.new do |s| - s.platform = Gem::Platform::RUBY - s.name = 'solidus_core' - s.version = Spree.solidus_version - s.summary = 'Essential models, mailers, and classes for the Solidus e-commerce project.' + s.platform = Gem::Platform::RUBY + s.name = "solidus_core" + s.version = Spree.solidus_version + s.summary = "Essential models, mailers, and classes for the Solidus e-commerce project." s.description = s.summary - s.author = 'Solidus Team' - s.email = 'contact@solidus.io' - s.homepage = 'http://solidus.io' - s.license = 'BSD-3-Clause' + s.author = "Solidus Team" + s.email = "contact@solidus.io" + s.homepage = "http://solidus.io" + s.license = "BSD-3-Clause" - s.metadata['rubygems_mfa_required'] = 'true' + s.metadata["rubygems_mfa_required"] = "true" s.files = `git ls-files -z`.split("\x0").reject do |f| f.match(%r{^(spec|bin)/}) end - s.required_ruby_version = '>= 3.1.0' - s.required_rubygems_version = '>= 1.8.23' + s.required_ruby_version = ">= 3.1.0" + s.required_rubygems_version = ">= 1.8.23" %w[ actionmailer actionpack actionview activejob activemodel activerecord @@ -33,47 +33,47 @@ Gem::Specification.new do |s| ] end - s.add_dependency 'activemerchant', '~> 1.66' - s.add_dependency 'acts_as_list', '< 2.0' - s.add_dependency 'awesome_nested_set', ['~> 3.3', '>= 3.7.0'] - s.add_dependency 'cancancan', ['>= 2.2', '< 4.0'] - s.add_dependency 'carmen', '~> 1.1.0' - s.add_dependency 'discard', '~> 1.0' - s.add_dependency 'friendly_id', '~> 5.0' - s.add_dependency 'image_processing', '~> 1.10' - s.add_dependency 'kaminari-activerecord', '~> 1.1' - s.add_dependency 'mini_magick', '~> 4.10' - s.add_dependency 'monetize', '~> 1.8' - s.add_dependency 'kt-paperclip', ['>= 6.3', '< 8'] - s.add_dependency 'psych', ['>= 4.0.1', '< 6.0'] - s.add_dependency 'ransack', ['~> 4.0', '< 5'] - s.add_dependency 'sprockets-rails', '!= 3.5.0' - s.add_dependency 'state_machines', ['~> 0.6', '< 0.10.0'] - s.add_dependency 'state_machines-activerecord', ['~> 0.6', '< 0.10.0'] - s.add_dependency 'omnes', '~> 0.2.2' + s.add_dependency "activemerchant", "~> 1.66" + s.add_dependency "acts_as_list", "< 2.0" + s.add_dependency "awesome_nested_set", ["~> 3.3", ">= 3.7.0"] + s.add_dependency "cancancan", [">= 2.2", "< 4.0"] + s.add_dependency "carmen", "~> 1.1.0" + s.add_dependency "discard", "~> 1.0" + s.add_dependency "friendly_id", "~> 5.0" + s.add_dependency "image_processing", "~> 1.10" + s.add_dependency "kaminari-activerecord", "~> 1.1" + s.add_dependency "mini_magick", "~> 4.10" + s.add_dependency "monetize", "~> 1.8" + s.add_dependency "kt-paperclip", [">= 6.3", "< 8"] + s.add_dependency "psych", [">= 4.0.1", "< 6.0"] + s.add_dependency "ransack", ["~> 4.0", "< 5"] + s.add_dependency "sprockets-rails", "!= 3.5.0" + s.add_dependency "state_machines", ["~> 0.6", "< 0.10.0"] + s.add_dependency "state_machines-activerecord", ["~> 0.6", "< 0.10.0"] + s.add_dependency "omnes", "~> 0.2.2" - s.post_install_message = <<-MSG -------------------------------------------------------------- - Thank you for using Solidus -------------------------------------------------------------- -If this is a fresh install, don't forget to run the Solidus -installer with the following command: - -$ bin/rails g solidus:install - -If you are updating Solidus from an older version, please run -the following commands to complete the update: - -$ bin/rails g solidus:update - -Please, don't forget to look at the CHANGELOG to see what has changed and -whether you need to perform other tasks. - -https://github.com/solidusio/solidus/blob/main/CHANGELOG.md - -Please report any issues at: -- https://github.com/solidusio/solidus/issues -- http://slack.solidus.io/ -------------------------------------------------------------- -MSG + s.post_install_message = <<~MSG + ------------------------------------------------------------- + Thank you for using Solidus + ------------------------------------------------------------- + If this is a fresh install, don't forget to run the Solidus + installer with the following command: + + $ bin/rails g solidus:install + + If you are updating Solidus from an older version, please run + the following commands to complete the update: + + $ bin/rails g solidus:update + + Please, don't forget to look at the CHANGELOG to see what has changed and + whether you need to perform other tasks. + + https://github.com/solidusio/solidus/blob/main/CHANGELOG.md + + Please report any issues at: + - https://github.com/solidusio/solidus/issues + - http://slack.solidus.io/ + ------------------------------------------------------------- + MSG end diff --git a/core/spec/helpers/base_helper_spec.rb b/core/spec/helpers/base_helper_spec.rb index 42525ebc31e..347fd90b64e 100644 --- a/core/spec/helpers/base_helper_spec.rb +++ b/core/spec/helpers/base_helper_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::BaseHelper, type: :helper do include Spree::BaseHelper - let(:current_store){ create :store } + let(:current_store) { create :store } context "available_countries" do let(:country) { create(:country) } @@ -64,7 +64,7 @@ # Regression test for https://github.com/spree/spree/issues/2034 context "flash_message" do - let(:flash) { { "notice" => "ok", "foo" => "foo", "bar" => "bar" } } + let(:flash) { {"notice" => "ok", "foo" => "foo", "bar" => "bar"} } it "should output all flash content" do flash_messages @@ -94,25 +94,25 @@ context "link_to_tracking" do it "returns tracking link if available" do - a = link_to_tracking_html(shipping_method: true, tracking: '123', tracking_url: 'http://g.c/?t=123').css('a') + a = link_to_tracking_html(shipping_method: true, tracking: "123", tracking_url: "http://g.c/?t=123").css("a") - expect(a.text).to eq '123' - expect(a.attr('href').value).to eq 'http://g.c/?t=123' + expect(a.text).to eq "123" + expect(a.attr("href").value).to eq "http://g.c/?t=123" end it "returns tracking without link if link unavailable" do - html = link_to_tracking_html(shipping_method: true, tracking: '123', tracking_url: nil) - expect(html.css('span').text).to eq '123' + html = link_to_tracking_html(shipping_method: true, tracking: "123", tracking_url: nil) + expect(html.css("span").text).to eq "123" end it "returns nothing when no shipping method" do - html = link_to_tracking_html(shipping_method: nil, tracking: '123') - expect(html.css('span').text).to eq '' + html = link_to_tracking_html(shipping_method: nil, tracking: "123") + expect(html.css("span").text).to eq "" end it "returns nothing when no tracking" do html = link_to_tracking_html(tracking: nil) - expect(html.css('span').text).to eq '' + expect(html.css("span").text).to eq "" end def link_to_tracking_html(options = {}) @@ -123,7 +123,7 @@ def link_to_tracking_html(options = {}) # Regression test for https://github.com/spree/spree/issues/2396 context "meta_data_tags" do - let(:controller_name) { 'test' } + let(:controller_name) { "test" } it "truncates a product description to 160 characters" do @test = Spree::Product.new(description: "a" * 200) @@ -142,7 +142,7 @@ def link_to_tracking_html(options = {}) is_expected.to eq "November 06, 2012 1:33 PM" end - context 'with format set to short' do + context "with format set to short" do subject { pretty_time(date, :short) } it "pretty prints time in short format" do diff --git a/core/spec/helpers/controller_helpers/auth_spec.rb b/core/spec/helpers/controller_helpers/auth_spec.rb index 1a28a6475e9..579b532d3a0 100644 --- a/core/spec/helpers/controller_helpers/auth_spec.rb +++ b/core/spec/helpers/controller_helpers/auth_spec.rb @@ -1,62 +1,65 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Core::ControllerHelpers::Auth, type: :controller do controller(ApplicationController) { include Spree::Core::ControllerHelpers::Auth - def index; render plain: 'index'; end + + def index + render plain: "index" + end } - describe '#current_ability' do - it 'returns Spree::Ability instance' do + describe "#current_ability" do + it "returns Spree::Ability instance" do expect(controller.current_ability.class).to eq Spree::Ability end end - describe '#redirect_back_or_default' do + describe "#redirect_back_or_default" do before do def controller.index - redirect_back_or_default('/') + redirect_back_or_default("/") end end - it 'redirects to session url' do - session[:spree_user_return_to] = '/redirect' + it "redirects to session url" do + session[:spree_user_return_to] = "/redirect" get :index - expect(response).to redirect_to('/redirect') + expect(response).to redirect_to("/redirect") end - it 'redirects to default page' do + it "redirects to default page" do get :index - expect(response).to redirect_to('/') + expect(response).to redirect_to("/") end end - describe '#set_guest_token' do + describe "#set_guest_token" do before do def controller.index set_guest_token - render plain: 'index' + render plain: "index" end end - it 'sends cookie header' do + it "sends cookie header" do get :index expect(response.headers["Set-Cookie"]).to match(/guest_token.*HttpOnly/) - expect(response.cookies['guest_token']).not_to be_nil + expect(response.cookies["guest_token"]).not_to be_nil end - context 'with guest_token_cookie_options configured' do - it 'sends cookie with these options' do + context "with guest_token_cookie_options configured" do + it "sends cookie with these options" do stub_spree_preferences(guest_token_cookie_options: { domain: :all, - path: '/api' + path: "/api" }) get :index expect(response.headers["Set-Cookie"]).to match(/domain=(\.)?test\.host; path=\/api/) end - it 'never overwrites httponly' do + it "never overwrites httponly" do stub_spree_preferences(guest_token_cookie_options: { httponly: false }) @@ -66,15 +69,15 @@ def controller.index end end - describe '#store_location' do - it 'sets session return url' do - allow(controller).to receive_messages(request: double(fullpath: '/redirect')) + describe "#store_location" do + it "sets session return url" do + allow(controller).to receive_messages(request: double(fullpath: "/redirect")) controller.store_location - expect(session[:spree_user_return_to]).to eq '/redirect' + expect(session[:spree_user_return_to]).to eq "/redirect" end end - describe '#unauthorized_redirect' do + describe "#unauthorized_redirect" do before do def controller.index authorize!(:show, :something) @@ -82,23 +85,23 @@ def controller.index end context "http_referrer is present" do - before { request.env['HTTP_REFERER'] = "#{request.base_url}/redirect" } + before { request.env["HTTP_REFERER"] = "#{request.base_url}/redirect" } it "redirects back" do get :index - expect(response).to redirect_to('/redirect') + expect(response).to redirect_to("/redirect") end end it "redirects to unauthorized" do get :index - expect(response).to redirect_to('/unauthorized') + expect(response).to redirect_to("/unauthorized") end context "when unauthorized_redirect is set" do before do Spree.deprecator.silence do - controller.unauthorized_redirect = -> { render plain: 'unauthorized', status: :unauthorized } + controller.unauthorized_redirect = -> { render plain: "unauthorized", status: :unauthorized } end end @@ -110,7 +113,7 @@ def controller.index it "executes unauthorized_redirect" do get :index - expect(response.body).to eq 'unauthorized' + expect(response.body).to eq "unauthorized" expect(response.status).to eq 401 end end diff --git a/core/spec/helpers/controller_helpers/order_spec.rb b/core/spec/helpers/controller_helpers/order_spec.rb index 080104381a1..6823b3b79b7 100644 --- a/core/spec/helpers/controller_helpers/order_spec.rb +++ b/core/spec/helpers/controller_helpers/order_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Core::ControllerHelpers::Order, type: :controller do controller(ApplicationController) { @@ -20,29 +20,29 @@ allow(controller).to receive_messages(spree_current_user: user) end - describe '#current_order' do - context 'create_order_if_necessary option is false' do + describe "#current_order" do + context "create_order_if_necessary option is false" do let!(:order) { create :order, user:, store: } - it 'returns current order' do + it "returns current order" do expect(controller.current_order).to eq order end end - context 'create_order_if_necessary option is true' do + context "create_order_if_necessary option is true" do subject { controller.current_order(create_order_if_necessary: true) } - it 'creates new order' do + it "creates new order" do expect { subject }.to change(Spree::Order, :count).from(0).to(1) end - it 'assigns the current_store id' do + it "assigns the current_store id" do subject expect(Spree::Order.last.store_id).to eq store.id end - it 'records last_ip_address' do + it "records last_ip_address" do expect { subject }.to change { @@ -51,51 +51,51 @@ end end - context 'build_order_if_necessary option is true' do + context "build_order_if_necessary option is true" do subject { controller.current_order(build_order_if_necessary: true) } - it 'builds a new order' do + it "builds a new order" do expect { subject }.not_to change(Spree::Order, :count).from(0) expect(subject).not_to be_persisted end - it 'assigns the current_store id' do + it "assigns the current_store id" do expect(subject.store_id).to eq store.id end - it 'records last_ip_address' do + it "records last_ip_address" do expect(subject.last_ip_address).to eq("0.0.0.0") end end end - describe '#associate_user' do + describe "#associate_user" do before { allow(controller).to receive_messages(current_order: order) } context "user's email is blank" do - let(:user) { create(:user, email: '') } - it 'calls Spree::Order#associate_user! method' do + let(:user) { create(:user, email: "") } + it "calls Spree::Order#associate_user! method" do expect_any_instance_of(Spree::Order).to receive(:associate_user!) controller.associate_user end end context "user isn't blank" do - it 'does not calls Spree::Order#associate_user! method' do + it "does not calls Spree::Order#associate_user! method" do expect_any_instance_of(Spree::Order).not_to receive(:associate_user!) controller.associate_user end end end - describe '#set_current_order' do + describe "#set_current_order" do let(:incomplete_order) { create(:order, store: incomplete_order_store, user:) } - context 'when current order not equal to users incomplete orders' do - before { allow(controller).to receive_messages(current_order: order, last_incomplete_order: incomplete_order, cookies: double(signed: { guest_token: 'guest_token' })) } + context "when current order not equal to users incomplete orders" do + before { allow(controller).to receive_messages(current_order: order, last_incomplete_order: incomplete_order, cookies: double(signed: {guest_token: "guest_token"})) } context "an order from another store" do let(:incomplete_order_store) { create(:store) } - it 'doesnt call Spree::Order#merge! method' do + it "doesnt call Spree::Order#merge! method" do expect(order).to_not receive(:merge!) controller.set_current_order end @@ -103,7 +103,7 @@ context "an order from the same store" do let(:incomplete_order_store) { store } - it 'calls Spree::Order#merge! method' do + it "calls Spree::Order#merge! method" do expect(order).to receive(:merge!).with(incomplete_order, user) controller.set_current_order end @@ -111,8 +111,8 @@ end end - describe '#ip_address' do - it 'returns remote ip' do + describe "#ip_address" do + it "returns remote ip" do expect(controller.ip_address).to eq request.remote_ip end end diff --git a/core/spec/helpers/controller_helpers/payment_parameters_spec.rb b/core/spec/helpers/controller_helpers/payment_parameters_spec.rb index eca1296e72d..d4a683f9f3c 100644 --- a/core/spec/helpers/controller_helpers/payment_parameters_spec.rb +++ b/core/spec/helpers/controller_helpers/payment_parameters_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Core::ControllerHelpers::PaymentParameters, type: :controller do controller(ApplicationController) do @@ -19,14 +19,14 @@ shared_examples "unchanged params" do let!(:original_param_hash) { params.dup.permit!.to_h.deep_symbolize_keys } - it 'returns the original hash' do + it "returns the original hash" do expect(params_hash).to eq(original_param_hash) end it_behaves_like "unpermitted params" end - describe '#move_payment_source_into_payments_attributes' do + describe "#move_payment_source_into_payments_attributes" do subject do controller.move_payment_source_into_payments_attributes(params) end @@ -51,10 +51,10 @@ let(:payment_method_1) { create(:credit_card_payment_method) } let(:payment_method_2) { create(:credit_card_payment_method) } - let(:credit_card_1_params) { attributes_for(:credit_card, name: 'Jordan1') } - let(:credit_card_2_params) { attributes_for(:credit_card, name: 'Jordan2') } + let(:credit_card_1_params) { attributes_for(:credit_card, name: "Jordan1") } + let(:credit_card_2_params) { attributes_for(:credit_card, name: "Jordan2") } - it 'produces the expected hash' do + it "produces the expected hash" do expect(params_hash).to eq( order: { payments_attributes: [ @@ -71,33 +71,33 @@ it_behaves_like "unpermitted params" - context 'when payment_source is missing' do + context "when payment_source is missing" do before { params.delete(:payment_source) } it_behaves_like "unchanged params" end - context 'when order params are missing' do + context "when order params are missing" do before { params.delete(:order) } it_behaves_like "unchanged params" end - context 'when payment_attributes are missing' do + context "when payment_attributes are missing" do before { params[:order].delete(:payments_attributes) } it_behaves_like "unchanged params" end - context 'when the payment_method_id is missing' do + context "when the payment_method_id is missing" do before { params[:order][:payments_attributes][0].delete(:payment_method_id) } it_behaves_like "unchanged params" end - context 'when the payment_method_id does not match a payments source' do + context "when the payment_method_id does not match a payments source" do before { params[:order][:payments_attributes][0][:payment_method_id] = -1 } it_behaves_like "unchanged params" end end - describe '#move_wallet_payment_source_id_into_payments_attributes' do + describe "#move_wallet_payment_source_id_into_payments_attributes" do subject do controller.move_wallet_payment_source_id_into_payments_attributes(params) end @@ -105,22 +105,22 @@ let(:params) do ActionController::Parameters.new( order: { - wallet_payment_source_id: '123', + wallet_payment_source_id: "123", other_order_param: 1 }, - cvc_confirm: '456', + cvc_confirm: "456", other_param: 2 ) end - it 'produces the expected hash' do + it "produces the expected hash" do expect(params_hash).to eq( order: { payments_attributes: [ { source_attributes: { - wallet_payment_source_id: '123', - verification_value: '456' + wallet_payment_source_id: "123", + verification_value: "456" } } ], @@ -132,16 +132,16 @@ it_behaves_like "unpermitted params" - context 'when cvc_confirm is missing' do + context "when cvc_confirm is missing" do before { params.delete(:cvc_confirm) } - it 'produces the expected hash' do + it "produces the expected hash" do expect(params_hash).to eq( order: { payments_attributes: [ { source_attributes: { - wallet_payment_source_id: '123', + wallet_payment_source_id: "123", verification_value: nil } } @@ -155,18 +155,18 @@ it_behaves_like "unpermitted params" end - context 'when order params are missing' do + context "when order params are missing" do before { params.delete(:order) } it_behaves_like "unchanged params" end - context 'when wallet_payment_source_id is missing' do + context "when wallet_payment_source_id is missing" do before { params[:order].delete(:wallet_payment_source_id) } it_behaves_like "unchanged params" end end - describe '#set_payment_parameters_amount' do + describe "#set_payment_parameters_amount" do subject do controller.set_payment_parameters_amount(params, order) end @@ -182,22 +182,22 @@ end let(:order) { create(:order_with_line_items, line_items_price: 101.00, line_items_count: 1, shipment_cost: 0) } - it 'produces the expected hash' do + it "produces the expected hash" do expect(params_hash).to eq( order: { - payments_attributes: [{ amount: 101 }], + payments_attributes: [{amount: 101}], other_order_param: 1 }, other_param: 2 ) end - context 'with store credit' do + context "with store credit" do let!(:credit) { create(:store_credit, user: order.user, amount: 10) } - it 'produces the expected hash' do + it "produces the expected hash" do expect(params_hash).to eq( order: { - payments_attributes: [{ amount: 91 }], + payments_attributes: [{amount: 91}], other_order_param: 1 }, other_param: 2 diff --git a/core/spec/helpers/controller_helpers/pricing_spec.rb b/core/spec/helpers/controller_helpers/pricing_spec.rb index e8b0d5fe60a..a5091819272 100644 --- a/core/spec/helpers/controller_helpers/pricing_spec.rb +++ b/core/spec/helpers/controller_helpers/pricing_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Core::ControllerHelpers::Pricing, type: :controller do controller(ApplicationController) { @@ -12,7 +12,7 @@ allow(controller).to receive(:current_store).and_return(store) end - describe '#current_pricing_options' do + describe "#current_pricing_options" do subject { controller.current_pricing_options } let(:store) { FactoryBot.create(:store, default_currency: nil) } @@ -24,19 +24,19 @@ context "when store default_currency is nil" do let(:store) { nil } - it { is_expected.to eq('USD') } + it { is_expected.to eq("USD") } end context "when the current store default_currency empty" do - let(:store) { FactoryBot.create :store, default_currency: '' } + let(:store) { FactoryBot.create :store, default_currency: "" } - it { is_expected.to eq('USD') } + it { is_expected.to eq("USD") } end context "when the current store default_currency is a currency" do - let(:store) { FactoryBot.create :store, default_currency: 'EUR' } + let(:store) { FactoryBot.create :store, default_currency: "EUR" } - it { is_expected.to eq('EUR') } + it { is_expected.to eq("EUR") } end end @@ -59,7 +59,7 @@ context "from context" do subject { controller.current_pricing_options } - let(:store) { FactoryBot.create :store, default_currency: 'USD' } + let(:store) { FactoryBot.create :store, default_currency: "USD" } context "when the whole context is passed" do it "receives the right object " do diff --git a/core/spec/helpers/controller_helpers/search_spec.rb b/core/spec/helpers/controller_helpers/search_spec.rb index 0dd8112ea17..a6c73e05261 100644 --- a/core/spec/helpers/controller_helpers/search_spec.rb +++ b/core/spec/helpers/controller_helpers/search_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Core::ControllerHelpers::Search, type: :controller do controller(ApplicationController) { @@ -9,11 +9,11 @@ include Spree::Core::ControllerHelpers::Search } - describe '#build_searcher' do - it 'returns Spree::Core::Search::Base instance' do + describe "#build_searcher" do + it "returns Spree::Core::Search::Base instance" do allow(controller).to receive_messages( spree_current_user: create(:user), - current_pricing_options: Spree::Config.pricing_options_class.new(currency: 'USD') + current_pricing_options: Spree::Config.pricing_options_class.new(currency: "USD") ) expect(controller.build_searcher({}).class).to eq Spree::Core::Search::Base end diff --git a/core/spec/helpers/controller_helpers/store_spec.rb b/core/spec/helpers/controller_helpers/store_spec.rb index 8806f557953..389aa9cb3d0 100644 --- a/core/spec/helpers/controller_helpers/store_spec.rb +++ b/core/spec/helpers/controller_helpers/store_spec.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Core::ControllerHelpers::Store, type: :controller do controller(ApplicationController) { include Spree::Core::ControllerHelpers::Store } - describe '#current_store' do + describe "#current_store" do let!(:store) { create :store, default: true } - it 'returns current store' do + it "returns current store" do expect(controller.current_store).to eq store end end diff --git a/core/spec/helpers/controller_helpers/strong_parameters_spec.rb b/core/spec/helpers/controller_helpers/strong_parameters_spec.rb index bc03f824ccb..226029d9136 100644 --- a/core/spec/helpers/controller_helpers/strong_parameters_spec.rb +++ b/core/spec/helpers/controller_helpers/strong_parameters_spec.rb @@ -1,32 +1,32 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Core::ControllerHelpers::StrongParameters, type: :controller do controller(ApplicationController) { include Spree::Core::ControllerHelpers::StrongParameters } - describe '#permitted_attributes' do - it 'returns Spree::PermittedAttributes module' do + describe "#permitted_attributes" do + it "returns Spree::PermittedAttributes module" do expect(controller.permitted_attributes).to eq Spree::PermittedAttributes end end - describe '#permitted_payment_attributes' do - it 'returns Array class' do + describe "#permitted_payment_attributes" do + it "returns Array class" do expect(controller.permitted_payment_attributes.class).to eq Array end end - describe '#permitted_order_attributes' do - it 'returns Array class' do + describe "#permitted_order_attributes" do + it "returns Array class" do expect(controller.permitted_order_attributes.class).to eq Array end end - describe '#permitted_product_attributes' do - it 'returns Array class' do + describe "#permitted_product_attributes" do + it "returns Array class" do expect(controller.permitted_product_attributes.class).to eq Array end end diff --git a/core/spec/helpers/products_helper_spec.rb b/core/spec/helpers/products_helper_spec.rb index 09963dc1770..801b415c912 100644 --- a/core/spec/helpers/products_helper_spec.rb +++ b/core/spec/helpers/products_helper_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe ProductsHelper, type: :helper do @@ -9,7 +9,7 @@ module Spree let(:product) { create(:product, price: product_price) } let(:product_price) { 10 } let(:variant) { create(:variant, product:, price: variant_price) } - let(:currency) { 'USD' } + let(:currency) { "USD" } let(:pricing_options) do Spree::Config.pricing_options_class.new(currency:) end @@ -48,7 +48,7 @@ module Spree context "when currency is JPY" do let(:variant_price) { 100 } let(:product_price) { 100 } - let(:currency) { 'JPY' } + let(:currency) { "JPY" } before do variant.prices.each { |p| p.update(currency:) } @@ -87,7 +87,7 @@ module Spree end context "when currency is JPY" do - let(:currency) { 'JPY' } + let(:currency) { "JPY" } let(:product_price) { 100 } let(:variant_price) { 150 } @@ -116,35 +116,35 @@ module Spree context "#product_description" do # Regression test for https://github.com/spree/spree/issues/1607 it "renders a product description without excessive paragraph breaks" do - product.description = %{ + product.description = %(

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus a ligula leo. Proin eu arcu at ipsum dapibus ullamcorper. Pellentesque egestas orci nec magna condimentum luctus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut ac ante et mauris bibendum ultricies non sed massa. Fusce facilisis dui eget lacus scelerisque eget aliquam urna ultricies. Duis et rhoncus quam. Praesent tellus nisi, ultrices sed iaculis quis, euismod interdum ipsum.

  • Lorem ipsum dolor sit amet
  • Lorem ipsum dolor sit amet
- } + ) description = product_description(product) expect(description.strip).to eq(product.description.strip) end it "renders a product description with automatic paragraph breaks" do - product.description = %{ + product.description = %( THIS IS THE BEST PRODUCT EVER! -"IT CHANGED MY LIFE" - Sue, MD} +"IT CHANGED MY LIFE" - Sue, MD) description = product_description(product) - expect(description.strip).to eq(%{

\nTHIS IS THE BEST PRODUCT EVER!

"IT CHANGED MY LIFE" - Sue, MD}) + expect(description.strip).to eq(%(

\nTHIS IS THE BEST PRODUCT EVER!

"IT CHANGED MY LIFE" - Sue, MD)) end it "renders a product description without any formatting based on configuration" do - description = %{ + description = %(

hello world

tihs is completely awesome and it works

why so many spaces in the code. and why some more formatting afterwards?

- } + ) product.description = description @@ -154,40 +154,40 @@ module Spree end end - context '#line_item_description_text' do + context "#line_item_description_text" do subject { line_item_description_text description } - context 'variant has a blank description' do + context "variant has a blank description" do let(:description) { nil } - it { is_expected.to eq(I18n.t('spree.product_has_no_description')) } + it { is_expected.to eq(I18n.t("spree.product_has_no_description")) } end - context 'variant has a description' do - let(:description) { 'test_desc' } + context "variant has a description" do + let(:description) { "test_desc" } it { is_expected.to eq(description) } end - context 'description has nonbreaking spaces' do - let(:description) { 'test desc' } - it { is_expected.to eq('test desc') } + context "description has nonbreaking spaces" do + let(:description) { "test desc" } + it { is_expected.to eq("test desc") } end end - context '#cache_key_for_products' do + context "#cache_key_for_products" do subject { helper.cache_key_for_products } before(:each) do - @products = double('products collection') - allow(helper).to receive(:params) { { page: 10 } } + @products = double("products collection") + allow(helper).to receive(:params) { {page: 10} } end - context 'when there is a maximum updated date' do + context "when there is a maximum updated date" do let(:updated_at) { Date.new(2011, 12, 13) } before :each do allow(@products).to receive(:count) { 5 } allow(@products).to receive(:maximum).with(:updated_at) { updated_at } end - it { is_expected.to eq('en/USD/spree/products/all-10-20111213-5') } + it { is_expected.to eq("en/USD/spree/products/all-10-20111213-5") } end - context 'when there is no considered maximum updated date' do + context "when there is no considered maximum updated date" do let(:today) { Date.new(2013, 12, 11) } before :each do allow(@products).to receive(:count) { 1_234_567 } @@ -195,7 +195,7 @@ module Spree allow(Date).to receive(:today) { today } end - it { is_expected.to eq('en/USD/spree/products/all-10-20131211-1234567') } + it { is_expected.to eq("en/USD/spree/products/all-10-20131211-1234567") } end end end diff --git a/core/spec/helpers/taxons_helper_spec.rb b/core/spec/helpers/taxons_helper_spec.rb index 8918205a564..8a3ba9db576 100644 --- a/core/spec/helpers/taxons_helper_spec.rb +++ b/core/spec/helpers/taxons_helper_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::TaxonsHelper, type: :helper do - let(:currency) { 'USD' } + let(:currency) { "USD" } let(:pricing_options) do Spree::Config.pricing_options_class.new(currency:) end @@ -33,7 +33,7 @@ end context "with different currency" do - let(:currency) { 'CAD' } + let(:currency) { "CAD" } it "returns no products" do expect(helper.taxon_preview(taxon)).to be_empty diff --git a/core/spec/i18n_spec.rb b/core/spec/i18n_spec.rb index 0698741124b..f2d56d97ff0 100644 --- a/core/spec/i18n_spec.rb +++ b/core/spec/i18n_spec.rb @@ -1,18 +1,18 @@ # frozen_string_literal: true -require 'i18n/tasks' +require "i18n/tasks" RSpec.describe I18n do let(:i18n) { I18n::Tasks::BaseTask.new } let(:missing_keys) { i18n.missing_keys } let(:inconsistent_interpolations) { i18n.inconsistent_interpolations } - it 'does not have missing keys' do + it "does not have missing keys" do expect(missing_keys).to be_empty, - "Missing #{missing_keys.leaves.count} i18n keys, run `i18n-tasks missing' to show them" + "Missing #{missing_keys.leaves.count} i18n keys, run `i18n-tasks missing' to show them" end - it 'files are normalized' do + it "files are normalized" do non_normalized = i18n.non_normalized_paths error_message = "The following files need to be normalized:\n" \ "#{non_normalized.map { |path| " #{path}" }.join("\n")}\n" \ @@ -20,7 +20,7 @@ expect(non_normalized).to be_empty, error_message end - it 'does not have inconsistent interpolations' do + it "does not have inconsistent interpolations" do error_message = "#{inconsistent_interpolations.leaves.count} i18n keys have inconsistent interpolations.\n" \ "Run `i18n-tasks check-consistent-interpolations' to show them" expect(inconsistent_interpolations).to be_empty, error_message diff --git a/core/spec/jobs/spree/state_change_tracking_job_spec.rb b/core/spec/jobs/spree/state_change_tracking_job_spec.rb index e9bd57a6109..28d84ea9f11 100644 --- a/core/spec/jobs/spree/state_change_tracking_job_spec.rb +++ b/core/spec/jobs/spree/state_change_tracking_job_spec.rb @@ -1,68 +1,68 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::StateChangeTrackingJob, type: :job do let(:order) { create(:order, user: user) } let(:user) { create(:user) } let(:transition_timestamp) { Time.current } - describe '#perform' do + describe "#perform" do context "when the stateful object and the state change name do not match" do - it 'creates a state change record with correct attributes' do + it "creates a state change record with correct attributes" do expect { described_class.perform_now( order, - 'processing', - 'pending', + "processing", + "pending", transition_timestamp, - 'payment' + "payment" ) }.to change(Spree::StateChange, :count).by(1) state_change = Spree::StateChange.last - expect(state_change.previous_state).to eq('processing') - expect(state_change.next_state).to eq('pending') - expect(state_change.name).to eq('payment') + expect(state_change.previous_state).to eq("processing") + expect(state_change.next_state).to eq("pending") + expect(state_change.name).to eq("payment") expect(state_change.user_id).to eq(user.id) expect(state_change.stateful_id).to eq(order.id) - expect(state_change.stateful_type).to eq('Spree::Order') + expect(state_change.stateful_type).to eq("Spree::Order") expect(state_change.created_at).to be_within(1.second).of(transition_timestamp) expect(state_change.updated_at).to be_within(1.second).of(transition_timestamp) end end context "when the stateful object and the state change name match" do - it 'creates a state change record with correct attributes' do + it "creates a state change record with correct attributes" do expect { described_class.perform_now( order, - 'cart', - 'address', + "cart", + "address", transition_timestamp ) }.to change(Spree::StateChange, :count).by(1) state_change = Spree::StateChange.last - expect(state_change.previous_state).to eq('cart') - expect(state_change.next_state).to eq('address') - expect(state_change.name).to eq('order') + expect(state_change.previous_state).to eq("cart") + expect(state_change.next_state).to eq("address") + expect(state_change.name).to eq("order") expect(state_change.user_id).to eq(user.id) expect(state_change.stateful_id).to eq(order.id) - expect(state_change.stateful_type).to eq('Spree::Order') + expect(state_change.stateful_type).to eq("Spree::Order") expect(state_change.created_at).to be_within(1.second).of(transition_timestamp) expect(state_change.updated_at).to be_within(1.second).of(transition_timestamp) end - it 'stores all state transitions in correct order' do + it "stores all state transitions in correct order" do transitions = [ - ['cart', 'address'], - ['address', 'delivery'], - ['delivery', 'payment'], - ['payment', 'confirm'], - ['confirm', 'complete'], - ['complete', 'canceled'], - ['canceled', 'resumed'] + ["cart", "address"], + ["address", "delivery"], + ["delivery", "payment"], + ["payment", "confirm"], + ["confirm", "complete"], + ["complete", "canceled"], + ["canceled", "resumed"] ] transitions.each do |from_state, to_state| @@ -77,20 +77,20 @@ expect(state_change.previous_state).to eq(from_state) expect(state_change.next_state).to eq(to_state) expect(state_change.stateful_id).to eq(order.id) - expect(state_change.stateful_type).to eq('Spree::Order') + expect(state_change.stateful_type).to eq("Spree::Order") end expect(Spree::StateChange.count).to eq(transitions.length) expect(Spree::StateChange.order(:created_at).pluck(:previous_state, :next_state)).to eq(transitions) end - it 'preserves the exact transition timestamp' do - specific_time = Time.zone.parse('2023-12-25 10:30:45') + it "preserves the exact transition timestamp" do + specific_time = Time.zone.parse("2023-12-25 10:30:45") described_class.perform_now( order, - 'cart', - 'address', + "cart", + "address", specific_time ) @@ -100,14 +100,14 @@ end end - context 'when the order has no user' do + context "when the order has no user" do let(:order) { create(:order, user: nil) } - it 'sets user_id to nil in the state change record' do + it "sets user_id to nil in the state change record" do described_class.perform_now( order, - 'cart', - 'address', + "cart", + "address", transition_timestamp ) @@ -116,14 +116,14 @@ end end - context 'when the object has a order association' do + context "when the object has a order association" do let(:payment) { create(:payment, order: order) } - it 'uses the order user_id if available' do + it "uses the order user_id if available" do described_class.perform_now( payment, - 'checkout', - 'completed', + "checkout", + "completed", transition_timestamp ) @@ -132,16 +132,16 @@ end end - it 'stores stateful name' do + it "stores stateful name" do described_class.perform_now( order, - 'cart', - 'address', + "cart", + "address", transition_timestamp ) state_change = Spree::StateChange.last - expect(state_change.name).to eq('order') + expect(state_change.name).to eq("order") end end end diff --git a/core/spec/lib/calculated_adjustments_spec.rb b/core/spec/lib/calculated_adjustments_spec.rb index 6ba6c6b3c17..7cc6adcdd4c 100644 --- a/core/spec/lib/calculated_adjustments_spec.rb +++ b/core/spec/lib/calculated_adjustments_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::CalculatedAdjustments do let(:calculator_class) { Spree::Calculator::Shipping::FlatRate } @@ -35,60 +35,60 @@ class Calculable < ActiveRecord::Base expect(Calculable.reflect_on_all_associations(:has_one).map(&:name)).to include(:calculator) end - describe 'initialization' do - context 'with no calculator' do + describe "initialization" do + context "with no calculator" do subject { Calculable.new } - it 'can be initialized' do + it "can be initialized" do expect(subject.calculator).to be nil end - it 'is not valid' do + it "is not valid" do expect(subject).not_to be_valid expect(subject.errors[:calculator]).to eq ["can't be blank"] end end - context 'with calculator object' do + context "with calculator object" do subject { Calculable.new(calculator: calculator_class.new) } - it 'can be initialized' do + it "can be initialized" do expect(subject.calculator).to be_a(calculator_class) expect(calculator_class.count).to eq 0 # not yet saved end - it 'can be created' do + it "can be created" do subject.save! expect(subject.calculator).to be_a(calculator_class) expect(calculator_class.count).to eq 1 # saved in database end end - context 'with calculator_type' do + context "with calculator_type" do subject { Calculable.new(calculator_type: calculator_class.to_s) } - it 'can be initialized' do + it "can be initialized" do expect(subject.calculator).to be_a(calculator_class) expect(calculator_class.count).to eq 0 # not yet saved end - it 'can be created' do + it "can be created" do subject.save! expect(subject.calculator).to be_a(calculator_class) expect(calculator_class.count).to eq 1 # saved in database end end - context 'with calculator_type and calculator_attributes' do - subject { Calculable.new(calculator_type: calculator_class.to_s, calculator_attributes: { preferred_amount: 123 }) } + context "with calculator_type and calculator_attributes" do + subject { Calculable.new(calculator_type: calculator_class.to_s, calculator_attributes: {preferred_amount: 123}) } - it 'can be initialized' do + it "can be initialized" do expect(subject.calculator).to be_a(calculator_class) expect(subject.calculator.preferred_amount).to eq 123 expect(calculator_class.count).to eq 0 # not yet saved end - it 'can be created' do + it "can be created" do subject.save! expect(subject.calculator).to be_a(calculator_class) expect(subject.calculator.preferred_amount).to eq 123 @@ -97,7 +97,7 @@ class Calculable < ActiveRecord::Base end end - describe 'update' do + describe "update" do subject { Calculable.create!(calculator_type: calculator_class.to_s) } it "can update calculator attributes with id" do @@ -120,7 +120,7 @@ class Calculable < ActiveRecord::Base end it "can update both calculator type and attributes" do - subject.update!(calculator_type: 'Spree::Calculator::Shipping::FlexiRate', calculator_attributes: { + subject.update!(calculator_type: "Spree::Calculator::Shipping::FlexiRate", calculator_attributes: { preferred_first_item: 123 }) expect(subject.calculator.class).to eq(Spree::Calculator::Shipping::FlexiRate) @@ -131,7 +131,7 @@ class Calculable < ActiveRecord::Base end end - describe '#calculator_type=' do + describe "#calculator_type=" do subject { Calculable.new } let(:calculator_subclass) { Spree::Calculator::Shipping::FlatRate } @@ -141,11 +141,11 @@ class Calculable < ActiveRecord::Base subject.calculator_type = calculator_subclass.to_s end - it 'sets calculator type' do + it "sets calculator type" do expect(subject.calculator_type).to eq(calculator_subclass.to_s) end - it 'switches from calculator subclass to calculator superclass' do + it "switches from calculator subclass to calculator superclass" do subject.calculator_type = calculator_superclass.to_s expect(subject.calculator_type).to eq(calculator_superclass.to_s) end diff --git a/core/spec/lib/factory_spec.rb b/core/spec/lib/factory_spec.rb index cf1d99a4683..e1e2777efc6 100644 --- a/core/spec/lib/factory_spec.rb +++ b/core/spec/lib/factory_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe "Factories" do it "should pass linting" do - FactoryBot.lint(FactoryBot.factories.reject{ |f| f.name == :customer_return_without_return_items }) + FactoryBot.lint(FactoryBot.factories.reject { |f| f.name == :customer_return_without_return_items }) end end diff --git a/core/spec/lib/generators/solidus/install/install_generator_spec.rb b/core/spec/lib/generators/solidus/install/install_generator_spec.rb index 3b9656589d7..f587a07dba7 100644 --- a/core/spec/lib/generators/solidus/install/install_generator_spec.rb +++ b/core/spec/lib/generators/solidus/install/install_generator_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'rails_helper' -require 'generators/solidus/install/install_generator' +require "rails_helper" +require "generators/solidus/install/install_generator" RSpec.describe Solidus::InstallGenerator do - describe '#prepare_options' do - it 'has a default setup' do - generator = described_class.new([], ['--auto-accept']) + describe "#prepare_options" do + it "has a default setup" do + generator = described_class.new([], ["--auto-accept"]) generator.prepare_options aggregate_failures do @@ -20,7 +20,7 @@ end it 'defaults to "paypal" for payments when frontend is "starter"' do - generator = described_class.new([], ['--auto-accept', '--frontend=starter']) + generator = described_class.new([], ["--auto-accept", "--frontend=starter"]) generator.prepare_options aggregate_failures do @@ -31,7 +31,7 @@ end it 'disables "seeds" and "sample" if "migrate" are disabled' do - generator = described_class.new([], ['--auto-accept', '--migrate=false']) + generator = described_class.new([], ["--auto-accept", "--migrate=false"]) generator.prepare_options aggregate_failures do @@ -41,8 +41,8 @@ end end - it 'skips seed and sample data if migrations are disabled' do - generator = described_class.new([], ['--auto-accept', '--migrate=false']) + it "skips seed and sample data if migrations are disabled" do + generator = described_class.new([], ["--auto-accept", "--migrate=false"]) generator.prepare_options expect(generator.instance_variable_get(:@run_migrations)).to eq(false) @@ -50,8 +50,8 @@ expect(generator.instance_variable_get(:@load_sample_data)).to eq(false) end - it 'skips sample data if seeds are disabled' do - generator = described_class.new([], ['--auto-accept', '--seed=false']) + it "skips sample data if seeds are disabled" do + generator = described_class.new([], ["--auto-accept", "--seed=false"]) generator.prepare_options expect(generator.instance_variable_get(:@run_migrations)).to eq(true) @@ -59,22 +59,22 @@ expect(generator.instance_variable_get(:@load_sample_data)).to eq(false) end - context 'when asked interactively' do + context "when asked interactively" do it 'presents different options for the "starter"' do questions = [] - generator = described_class.new([], ['--frontend=starter', '--authentication=devise']) + generator = described_class.new([], ["--frontend=starter", "--authentication=devise"]) allow(generator).to receive(:ask_with_description) { |**args| questions << args } generator.prepare_options expect(questions.size).to eq(1) - expect(questions.first[:limited_to]).to eq(['paypal', 'stripe', 'braintree', 'none']) - expect(questions.first[:default]).to eq('paypal') - expect(strip_ansi(questions.first[:desc])).to include('[paypal]') - expect(strip_ansi(questions.first[:desc])).to include('[stripe]') - expect(strip_ansi(questions.first[:desc])).not_to include('[bolt]') - expect(strip_ansi(questions.first[:desc])).to include('[braintree]') - expect(strip_ansi(questions.first[:desc])).to include('[none]') + expect(questions.first[:limited_to]).to eq(["paypal", "stripe", "braintree", "none"]) + expect(questions.first[:default]).to eq("paypal") + expect(strip_ansi(questions.first[:desc])).to include("[paypal]") + expect(strip_ansi(questions.first[:desc])).to include("[stripe]") + expect(strip_ansi(questions.first[:desc])).not_to include("[bolt]") + expect(strip_ansi(questions.first[:desc])).to include("[braintree]") + expect(strip_ansi(questions.first[:desc])).to include("[none]") end end end @@ -82,6 +82,6 @@ private def strip_ansi(string) - string.gsub(/\u001b\[.*?m/, '') + string.gsub(/\u001b\[.*?m/, "") end end diff --git a/core/spec/lib/generators/solidus/update/update_generator_spec.rb b/core/spec/lib/generators/solidus/update/update_generator_spec.rb index d2d05146e4d..47c6840a5f9 100644 --- a/core/spec/lib/generators/solidus/update/update_generator_spec.rb +++ b/core/spec/lib/generators/solidus/update/update_generator_spec.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'rails_helper' -require 'generators/solidus/update/update_generator' +require "rails_helper" +require "generators/solidus/update/update_generator" RSpec.describe Solidus::UpdateGenerator do - let(:initializer_directory) { Rails.root.join('tmp') } - let(:initializer) { File.join(initializer_directory, 'new_solidus_defaults.rb') } + let(:initializer_directory) { Rails.root.join("tmp") } + let(:initializer) { File.join(initializer_directory, "new_solidus_defaults.rb") } let(:delete_initializer) { proc { File.delete(initializer) if File.exist?(initializer) } } let(:invoke) do lambda do |from, to| - Rails::Generators.invoke('solidus:update', [ - "--initializer_directory=#{Rails.root.join('tmp')}", + Rails::Generators.invoke("solidus:update", [ + "--initializer_directory=#{Rails.root.join("tmp")}", "--previous_version_prompt=false", "--install_migrations=false", "--from=#{from}", @@ -23,14 +23,14 @@ before { delete_initializer.call } after { delete_initializer.call } - context 'core' do - it 'adds changes when present' do + context "core" do + it "adds changes when present" do config_class = Class.new(Spree::Preferences::Configuration) do - versioned_preference :foo, :boolean, initial_value: true, boundaries: { '3.0' => false } + versioned_preference :foo, :boolean, initial_value: true, boundaries: {"3.0" => false} end - stub_const('Spree::AppConfiguration', config_class) + stub_const("Spree::AppConfiguration", config_class) - invoke.('2.0', '3.0') + invoke.call("2.0", "3.0") expect(File.read(initializer)).to include( <<~RUBY @@ -44,9 +44,9 @@ it "informs about no changes if there're none" do config_class = Class.new(Spree::Preferences::Configuration) - stub_const('Spree::AppConfiguration', config_class) + stub_const("Spree::AppConfiguration", config_class) - invoke.('2.0', '3.0') + invoke.call("2.0", "3.0") expect(File.read(initializer)).to include( <<~RUBY @@ -58,16 +58,16 @@ end end - context 'frontend' do - before { stub_const('Spree::Frontend::Engine', true) } + context "frontend" do + before { stub_const("Spree::Frontend::Engine", true) } - it 'adds changes when present' do + it "adds changes when present" do config_class = Class.new(Spree::Preferences::Configuration) do - versioned_preference :foo, :boolean, initial_value: true, boundaries: { '3.0' => false } + versioned_preference :foo, :boolean, initial_value: true, boundaries: {"3.0" => false} end - stub_const('Spree::FrontendConfiguration', config_class) + stub_const("Spree::FrontendConfiguration", config_class) - invoke.('2.0', '3.0') + invoke.call("2.0", "3.0") expect(File.read(initializer)).to include( <<~RUBY @@ -81,9 +81,9 @@ it "informs about no changes if there're none" do config_class = Class.new(Spree::Preferences::Configuration) - stub_const('Spree::FrontendConfiguration', config_class) + stub_const("Spree::FrontendConfiguration", config_class) - invoke.('2.0', '3.0') + invoke.call("2.0", "3.0") expect(File.read(initializer)).to include( <<~RUBY @@ -95,16 +95,16 @@ end end - context 'backend' do - before { stub_const('Spree::Backend::Engine', true) } + context "backend" do + before { stub_const("Spree::Backend::Engine", true) } - it 'adds changes when present' do + it "adds changes when present" do config_class = Class.new(Spree::Preferences::Configuration) do - versioned_preference :foo, :boolean, initial_value: true, boundaries: { '3.0' => false } + versioned_preference :foo, :boolean, initial_value: true, boundaries: {"3.0" => false} end - stub_const('Spree::BackendConfiguration', config_class) + stub_const("Spree::BackendConfiguration", config_class) - invoke.('2.0', '3.0') + invoke.call("2.0", "3.0") expect(File.read(initializer)).to include( <<~RUBY @@ -118,9 +118,9 @@ it "informs about no changes if there're none" do config_class = Class.new(Spree::Preferences::Configuration) - stub_const('Spree::BackendConfiguration', config_class) + stub_const("Spree::BackendConfiguration", config_class) - invoke.('2.0', '3.0') + invoke.call("2.0", "3.0") expect(File.read(initializer)).to include( <<~RUBY @@ -132,16 +132,16 @@ end end - context 'api' do - before { stub_const('Spree::Api::Engine', true) } + context "api" do + before { stub_const("Spree::Api::Engine", true) } - it 'adds changes when present' do + it "adds changes when present" do config_class = Class.new(Spree::Preferences::Configuration) do - versioned_preference :foo, :boolean, initial_value: true, boundaries: { '3.0' => false } + versioned_preference :foo, :boolean, initial_value: true, boundaries: {"3.0" => false} end - stub_const('Spree::ApiConfiguration', config_class) + stub_const("Spree::ApiConfiguration", config_class) - invoke.('2.0', '3.0') + invoke.call("2.0", "3.0") expect(File.read(initializer)).to include( <<~RUBY @@ -155,9 +155,9 @@ it "informs about no changes if there're none" do config_class = Class.new(Spree::Preferences::Configuration) - stub_const('Spree::ApiConfiguration', config_class) + stub_const("Spree::ApiConfiguration", config_class) - invoke.('2.0', '3.0') + invoke.call("2.0", "3.0") expect(File.read(initializer)).to include( <<~RUBY diff --git a/core/spec/lib/i18n_spec.rb b/core/spec/lib/i18n_spec.rb index 4af872fb38d..d80544d4270 100644 --- a/core/spec/lib/i18n_spec.rb +++ b/core/spec/lib/i18n_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'spec_helper' -require 'spree/i18n' +require "spec_helper" +require "spree/i18n" RSpec.describe "i18n" do before do @@ -9,21 +9,21 @@ I18n.reload! I18n.backend.store_translations(:en, - { - spree: { - i18n: { - this_file_language: "English" - }, - foo: "bar", - bar: { - foo: "bar within bar scope", + { + spree: { + i18n: { + this_file_language: "English" + }, + foo: "bar", + bar: { + foo: "bar within bar scope", + invalid: nil, + legacy_translation: "back in the day..." + }, invalid: nil, legacy_translation: "back in the day..." - }, - invalid: nil, - legacy_translation: "back in the day..." - } - }) + } + }) end after do I18n.reload! @@ -38,9 +38,9 @@ expect(Spree.i18n_available_locales).to eq([:en]) end - context 'with unprefixed translations in another locale' do + context "with unprefixed translations in another locale" do before do - I18n.backend.store_translations(:fr, { cheese: "fromage" }) + I18n.backend.store_translations(:fr, {cheese: "fromage"}) end it "should only return :en" do @@ -48,9 +48,9 @@ end end - context 'with spree-prefixed translations in another locale' do + context "with spree-prefixed translations in another locale" do before do - I18n.backend.store_translations(:fr, spree: { cheese: "fromage" }) + I18n.backend.store_translations(:fr, spree: {cheese: "fromage"}) end it "should return :en and :fr" do @@ -58,9 +58,9 @@ end end - context 'with specific desired key' do + context "with specific desired key" do before do - I18n.backend.store_translations(:fr, spree: { i18n: { this_file_language: "Français" } }) + I18n.backend.store_translations(:fr, spree: {i18n: {this_file_language: "Français"}}) end it "should return :en and :fr" do diff --git a/core/spec/lib/search/base_spec.rb b/core/spec/lib/search/base_spec.rb index fb029491824..64c653fde59 100644 --- a/core/spec/lib/search/base_spec.rb +++ b/core/spec/lib/search/base_spec.rb @@ -1,12 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/core/product_filters' +require "rails_helper" +require "spree/core/product_filters" RSpec.describe Spree::Core::Search::Base do include ImageSpecHelper + before do include Spree::Core::ProductFilters + @taxon = create(:taxon, name: "Ruby on Rails") @product1 = create(:product, name: "RoR Mug", price: 9.00) @@ -16,19 +18,19 @@ end it "returns all products by default" do - params = { per_page: "" } + params = {per_page: ""} searcher = Spree::Core::Search::Base.new(params) expect(searcher.retrieve_products.count).to eq(3) end context "when include_images is included in the initialization params" do - let(:params) { { include_images: true, keyword: @product1.name, taxon: @taxon.id } } - let(:image_file) { open_image('blank.jpg') } + let(:params) { {include_images: true, keyword: @product1.name, taxon: @taxon.id} } + let(:image_file) { open_image("blank.jpg") } subject { described_class.new(params).retrieve_products } before do - @product1.master.images.create(attachment_file_name: 'test', attachment: image_file, position: 2) - @product1.master.images.create(attachment_file_name: 'test1', attachment: image_file, position: 1) + @product1.master.images.create(attachment_file_name: "test", attachment: image_file, position: 2) + @product1.master.images.create(attachment_file_name: "test1", attachment: image_file, position: 1) @product1.reload end @@ -39,7 +41,7 @@ end context "when ascend_by_master_price scope is included in the initialization params" do - let(:params) { { search: { ascend_by_master_price: nil } } } + let(:params) { {search: {ascend_by_master_price: nil}} } subject { described_class.new(params).retrieve_products } @@ -49,7 +51,7 @@ end context "when descend_by_master_price scope is included in the initialization params" do - let(:params) { { search: { descend_by_master_price: nil } } } + let(:params) { {search: {descend_by_master_price: nil}} } subject { described_class.new(params).retrieve_products } @@ -59,7 +61,7 @@ end it "switches to next page according to the page parameter" do - params = { per_page: "2" } + params = {per_page: "2"} searcher = Spree::Core::Search::Base.new(params) expect(searcher.retrieve_products.count).to eq(2) @@ -69,29 +71,29 @@ end it "maps search params to named scopes" do - params = { per_page: "", - search: { "price_range_any" => ["Under $10.00"] } } + params = {per_page: "", + search: {"price_range_any" => ["Under $10.00"]}} searcher = Spree::Core::Search::Base.new(params) expect(searcher.retrieve_products.count).to eq(1) end it "maps multiple price_range_any filters" do - params = { per_page: "", - search: { "price_range_any" => ["Under $10.00", "$10.00 - $15.00"] } } + params = {per_page: "", + search: {"price_range_any" => ["Under $10.00", "$10.00 - $15.00"]}} searcher = Spree::Core::Search::Base.new(params) expect(searcher.retrieve_products.count).to eq(2) end it "uses ransack if scope not found" do - params = { per_page: "", - search: { "name_not_cont" => "Shirt" } } + params = {per_page: "", + search: {"name_not_cont" => "Shirt"}} searcher = Spree::Core::Search::Base.new(params) expect(searcher.retrieve_products.count).to eq(2) end it "raises a proper exception when search param is invalid" do - params = { per_page: "", - search: "blub" } + params = {per_page: "", + search: "blub"} searcher = Spree::Core::Search::Base.new(params) expect { searcher.retrieve_products }.to raise_error(described_class::InvalidOptions, "Invalid option passed to the searcher: 'search'") end @@ -104,9 +106,9 @@ end it "finds products in alternate currencies" do - create(:price, currency: 'EUR', variant: @product1.master) + create(:price, currency: "EUR", variant: @product1.master) searcher = Spree::Core::Search::Base.new({}) - searcher.pricing_options = Spree::Config.pricing_options_class.new(currency: 'EUR') + searcher.pricing_options = Spree::Config.pricing_options_class.new(currency: "EUR") expect(searcher.retrieve_products).to eq([@product1]) end end diff --git a/core/spec/lib/search/variant_spec.rb b/core/spec/lib/search/variant_spec.rb index 1d1acfd422b..f814c69a197 100644 --- a/core/spec/lib/search/variant_spec.rb +++ b/core/spec/lib/search/variant_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe Core::Search::Variant do @@ -52,8 +52,8 @@ def refute_found(query_string, variant) context "by product + options" do before do variant.option_values << create(:option_value, presentation: "Robin's egg", name: "blue") - variant.option_values << create(:option_value, presentation: 'Slim') - variant.option_values << create(:option_value, presentation: '30') + variant.option_values << create(:option_value, presentation: "Slim") + variant.option_values << create(:option_value, presentation: "30") end it { assert_found("My Spec blue", variant) } it { assert_found("My Spec robin egg Slim", variant) } @@ -102,13 +102,13 @@ def refute_found(query_string, variant) end end - describe '#search_terms' do + describe "#search_terms" do # Only search by SKU if the search word is a number class NumericSkuSearcher < Core::Search::Variant protected def search_terms(word) - if word =~ /\A\d+\z/ + if /\A\d+\z/.match?(word) super else super - [:sku_cont] @@ -119,8 +119,8 @@ def search_terms(word) let!(:numeric_sku_variant) { FactoryBot.create(:variant, product:, sku: "123") } let!(:non_numeric_sku_variant) { FactoryBot.create(:variant, product:, sku: "abc") } - it { expect(NumericSkuSearcher.new('123').results).to include numeric_sku_variant } - it { expect(NumericSkuSearcher.new('abc').results).not_to include non_numeric_sku_variant } + it { expect(NumericSkuSearcher.new("123").results).to include numeric_sku_variant } + it { expect(NumericSkuSearcher.new("abc").results).not_to include non_numeric_sku_variant } end end end diff --git a/core/spec/lib/spree/app_configuration_spec.rb b/core/spec/lib/spree/app_configuration_spec.rb index 67f5220773c..b2c5a7bb492 100644 --- a/core/spec/lib/spree/app_configuration_spec.rb +++ b/core/spec/lib/spree/app_configuration_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::AppConfiguration do let(:prefs) { Spree::Config } @@ -85,21 +85,21 @@ end end - context '.calculators' do + context ".calculators" do subject(:calculators) { environment.calculators } it { is_expected.to be_a Spree::Core::Environment::Calculators } - context '.calculators.promotion_actions_create_adjustments' do + context ".calculators.promotion_actions_create_adjustments" do subject(:preferences_set) { calculators.promotion_actions_create_adjustments } it_should_behave_like "working preferences set" end - context '.calculators.promotion_actions_create_item_adjustments' do + context ".calculators.promotion_actions_create_item_adjustments" do subject(:preferences_set) { calculators.promotion_actions_create_item_adjustments } it_should_behave_like "working preferences set" end - context '.calculators.promotion_actions_create_quantity_adjustments' do + context ".calculators.promotion_actions_create_quantity_adjustments" do subject(:preferences_set) { calculators.promotion_actions_create_quantity_adjustments } it_should_behave_like "working preferences set" end @@ -110,60 +110,60 @@ expect(prefs.pricing_options_class).to eq Spree::Variant::PriceSelector.pricing_options_class end - describe '#stock' do + describe "#stock" do subject { prefs.stock } it { is_expected.to be_a Spree::Core::StockConfiguration } end - describe '#promotions' do + describe "#promotions" do subject { prefs.promotions } it { is_expected.to be_a Spree::Core::NullPromotionConfiguration } end - describe '@default_country_iso_code' do - it 'is the USA by default' do + describe "@default_country_iso_code" do + it "is the USA by default" do expect(prefs[:default_country_iso]).to eq("US") end end - describe '@admin_vat_country_iso' do - it 'is `nil` by default' do + describe "@admin_vat_country_iso" do + it "is `nil` by default" do expect(prefs[:admin_vat_country_iso]).to eq(nil) end end - describe '#environment' do - class DummyClass; end; + describe "#environment" do + class DummyClass; end subject(:environment) { prefs.environment } it { is_expected.to be_a Spree::Core::Environment } - context '.payment_methods' do + context ".payment_methods" do subject(:preferences_set) { environment.payment_methods } it_should_behave_like "working preferences set" end - context '.stock_splitters' do + context ".stock_splitters" do subject(:preferences_set) { environment.stock_splitters } it_should_behave_like "working preferences set" end - context '.calculators' do + context ".calculators" do subject(:calculators) { environment.calculators } it { is_expected.to be_a Spree::Core::Environment::Calculators } - context '.calculators.shipping_methods' do + context ".calculators.shipping_methods" do subject(:preferences_set) { calculators.shipping_methods } it_should_behave_like "working preferences set" end - context '.calculators.tax_rates' do + context ".calculators.tax_rates" do subject(:preferences_set) { calculators.tax_rates } it_should_behave_like "working preferences set" end end - context '.promotions' do + context ".promotions" do around do |example| Spree.deprecator.silence do example.run @@ -174,17 +174,17 @@ class DummyClass; end; it { is_expected.to be_a Spree::Core::Environment::Promotions } - context '.promotions.rules' do + context ".promotions.rules" do subject(:preferences_set) { promotions.rules } it_should_behave_like "working preferences set" end - context '.promotions.actions' do + context ".promotions.actions" do subject(:preferences_set) { promotions.actions } it_should_behave_like "working preferences set" end - context '.promotions.shipping_actions' do + context ".promotions.shipping_actions" do subject(:preferences_set) { promotions.shipping_actions } it_should_behave_like "working preferences set" end @@ -217,26 +217,26 @@ class DummyClass; end; it { is_expected.to be_empty } end - it 'has a default admin VAT location with nil values by default' do + it "has a default admin VAT location with nil values by default" do expect(prefs.admin_vat_location).to eq(Spree::Tax::TaxLocation.new) expect(prefs.admin_vat_location.state_id).to eq(nil) expect(prefs.admin_vat_location.country_id).to eq(nil) end - describe '@meta_data_max_keys' do - it 'is 6 by default' do + describe "@meta_data_max_keys" do + it "is 6 by default" do expect(prefs[:meta_data_max_keys]).to eq(6) end end - describe '@meta_data_max_key_length' do - it 'is 16 by default' do + describe "@meta_data_max_key_length" do + it "is 16 by default" do expect(prefs[:meta_data_max_key_length]).to eq(16) end end - describe '@meta_data_max_value_length' do - it 'is 256 by default' do + describe "@meta_data_max_value_length" do + it "is 256 by default" do expect(prefs[:meta_data_max_value_length]).to eq(256) end end diff --git a/core/spec/lib/spree/core/class_constantizer_spec.rb b/core/spec/lib/spree/core/class_constantizer_spec.rb index 8456fc51c06..24bbe61464f 100644 --- a/core/spec/lib/spree/core/class_constantizer_spec.rb +++ b/core/spec/lib/spree/core/class_constantizer_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'spec_helper' -require 'spree/core/class_constantizer' +require "spec_helper" +require "spree/core/class_constantizer" module ClassConstantizerTest ClassA = Class.new @@ -20,23 +20,23 @@ def self.reload describe "#concat" do it "can add one item" do - set.concat(['ClassConstantizerTest::ClassA']) + set.concat(["ClassConstantizerTest::ClassA"]) expect(set).to include(ClassConstantizerTest::ClassA) end it "can add two items" do - set.concat(['ClassConstantizerTest::ClassA', ClassConstantizerTest::ClassB]) + set.concat(["ClassConstantizerTest::ClassA", ClassConstantizerTest::ClassB]) expect(set).to include(ClassConstantizerTest::ClassA) expect(set).to include(ClassConstantizerTest::ClassB) end it "returns itself" do - expect(set.concat(['String'])).to eql(set) + expect(set.concat(["String"])).to eql(set) end end describe "initializing with a default" do - let(:set) { described_class.new(default: ['ClassConstantizerTest::ClassA']) } + let(:set) { described_class.new(default: ["ClassConstantizerTest::ClassA"]) } it "contains the default" do expect(set).to include(ClassConstantizerTest::ClassA) diff --git a/core/spec/lib/spree/core/controller_helpers_spec.rb b/core/spec/lib/spree/core/controller_helpers_spec.rb index 13631bb429b..4f64458914a 100644 --- a/core/spec/lib/spree/core/controller_helpers_spec.rb +++ b/core/spec/lib/spree/core/controller_helpers_spec.rb @@ -3,7 +3,7 @@ require "rails_helper" RSpec.describe "require 'spree/core/controller_helpers" do - %w( + %w[ auth common order @@ -12,7 +12,7 @@ search store strong_parameters - ).each do |helper_name| + ].each do |helper_name| describe "require 'spree/core/controller_helpers/#{helper_name}" do it "exists but will print a deprecation warning" do expect(Spree.deprecator).to receive(:warn).with( diff --git a/core/spec/lib/spree/core/engine_spec.rb b/core/spec/lib/spree/core/engine_spec.rb index c668b4dd3af..bae6939e684 100644 --- a/core/spec/lib/spree/core/engine_spec.rb +++ b/core/spec/lib/spree/core/engine_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Core::Engine do - it 'loads engine and app previews' do + it "loads engine and app previews" do expect(ActionMailer::Preview.all).to match_array([ TestMailerPreview, Spree::MailerPreviews::ReimbursementPreview, Spree::MailerPreviews::OrderPreview, - Spree::MailerPreviews::CartonPreview, + Spree::MailerPreviews::CartonPreview ]) end end diff --git a/core/spec/lib/spree/core/environment_extension_spec.rb b/core/spec/lib/spree/core/environment_extension_spec.rb index fdd24834831..3de94cc67d7 100644 --- a/core/spec/lib/spree/core/environment_extension_spec.rb +++ b/core/spec/lib/spree/core/environment_extension_spec.rb @@ -1,27 +1,33 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/core/environment_extension' +require "rails_helper" +require "spree/core/environment_extension" RSpec.describe Spree::Core::EnvironmentExtension do - let(:base) { Class.new { def self.to_s; 'ExampleClass'; end } } + let(:base) { + Class.new { + def self.to_s + "ExampleClass" + end + } + } subject! { base.include(described_class).new } - describe '.add_class_set' do + describe ".add_class_set" do let(:class_one) { String } let(:class_two) { Array } let(:class_three) { Hash } context 'with a class set named "foo"' do - before { base.add_class_set('foo') } + before { base.add_class_set("foo") } - describe '#foo' do + describe "#foo" do it { respond_to?(:foo) } it { expect(subject.foo).to be_empty } it { expect(subject.foo).to be_kind_of Spree::Core::ClassConstantizer::Set } end - describe '#foo=' do + describe "#foo=" do it { respond_to?(:foo=) } before { subject.foo = [class_one, class_two] } @@ -33,9 +39,9 @@ end context "with a default value of [class_one]" do - before { base.add_class_set('foo', default: [class_one]) } + before { base.add_class_set("foo", default: [class_one]) } - describe '#foo' do + describe "#foo" do it { respond_to?(:foo) } it { expect(subject.foo).to include(class_one) } it { expect(subject.foo).to be_kind_of Spree::Core::ClassConstantizer::Set } @@ -59,7 +65,7 @@ describe "#foo=" do it { respond_to?(:foo=) } - before { subject.foo = { "Spree::TaxRate": ["Spree::Calculator::DefaultTax", "Spree::Calculator::FlatFee"] } } + before { subject.foo = {"Spree::TaxRate": ["Spree::Calculator::DefaultTax", "Spree::Calculator::FlatFee"]} } it { expect(subject.foo[Spree::TaxRate]).to include(Spree::Calculator::DefaultTax) } it { expect(subject.foo[Spree::TaxRate]).to include(Spree::Calculator::FlatFee) } @@ -68,7 +74,7 @@ end context "setting defaults" do - before { base.add_nested_class_set("foo", default: { "Spree::TaxRate": ["Spree::Calculator::DefaultTax", "Spree::Calculator::FlatFee"] }) } + before { base.add_nested_class_set("foo", default: {"Spree::TaxRate": ["Spree::Calculator::DefaultTax", "Spree::Calculator::FlatFee"]}) } describe "#foo" do it { respond_to?(:foo) } diff --git a/core/spec/lib/spree/core/importer/order_spec.rb b/core/spec/lib/spree/core/importer/order_spec.rb index b06645ee335..044503a0e06 100644 --- a/core/spec/lib/spree/core/importer/order_spec.rb +++ b/core/spec/lib/spree/core/importer/order_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module Core @@ -8,16 +8,16 @@ module Core let!(:store) { create(:store) } let!(:country) { create(:country) } let!(:state) { country.states.first || create(:state, country:) } - let!(:stock_location) { create(:stock_location, admin_name: 'Admin Name') } + let!(:stock_location) { create(:stock_location, admin_name: "Admin Name") } - let(:user) { stub_model(LegacyUser, email: 'fox@mudler.com') } + let(:user) { stub_model(LegacyUser, email: "fox@mudler.com") } let(:shipping_method) { create(:shipping_method) } let(:payment_method) { create(:check_payment_method) } let(:product) { - product = Spree::Product.create(name: 'Test', - sku: 'TEST-1', - price: 33.22) + product = Spree::Product.create(name: "Test", + sku: "TEST-1", + price: 33.22) product.shipping_category = create(:shipping_category) product.save product @@ -32,41 +32,42 @@ module Core let(:sku) { variant.sku } let(:variant_id) { variant.id } - let(:line_items) { { "0" => { variant_id: variant.id, quantity: 5 } } } + let(:line_items) { {"0" => {variant_id: variant.id, quantity: 5}} } let(:ship_address) { { - address1: '123 Testable Way', - name: 'Fox Mulder', - city: 'Washington', - country_id: country.id, - state_id: state.id, - zipcode: '66666', - phone: '666-666-6666' - }} - - it 'can import an order number' do - params = { number: '123-456-789' } + address1: "123 Testable Way", + name: "Fox Mulder", + city: "Washington", + country_id: country.id, + state_id: state.id, + zipcode: "66666", + phone: "666-666-6666" + } + } + + it "can import an order number" do + params = {number: "123-456-789"} order = Importer::Order.import(user, params) - expect(order.number).to eq '123-456-789' + expect(order.number).to eq "123-456-789" end - it 'optionally add completed at' do - params = { email: 'test@test.com', - completed_at: Time.current, - line_items_attributes: line_items } + it "optionally add completed at" do + params = {email: "test@test.com", + completed_at: Time.current, + line_items_attributes: line_items} order = Importer::Order.import(user, params) expect(order).to be_completed - expect(order.state).to eq 'complete' + expect(order.state).to eq "complete" end it "assigns order[email] over user email to order" do - params = { email: 'wooowww@test.com' } + params = {email: "wooowww@test.com"} order = Importer::Order.import(user, params) expect(order.email).to eq params[:email] end context "assigning a user to an order" do - let(:other_user) { stub_model(LegacyUser, email: 'dana@scully.com') } + let(:other_user) { stub_model(LegacyUser, email: "dana@scully.com") } context "as an admin" do before { allow(user).to receive_messages has_spree_role?: true } @@ -74,7 +75,7 @@ module Core context "a user's id is not provided" do context "nil user id is provided" do it "unassociates the admin user from the order" do - params = { user_id: nil } + params = {user_id: nil} order = Importer::Order.import(user, params) expect(order.user_id).to be_nil end @@ -82,7 +83,7 @@ module Core context "another user's id is provided" do it "permits the user to be assigned" do - params = { user_id: other_user.id } + params = {user_id: other_user.id} order = Importer::Order.import(user, params) expect(order.user_id).to eq(other_user.id) end @@ -101,17 +102,17 @@ module Core context "as a user" do before { allow(user).to receive_messages has_spree_role?: false } it "does not assign the order to the other user" do - params = { user_id: other_user.id } + params = {user_id: other_user.id} order = Importer::Order.import(user, params) expect(order.user_id).to eq(user.id) end end end - it 'can build an order from API with just line items' do - params = { line_items_attributes: line_items } + it "can build an order from API with just line items" do + params = {line_items_attributes: line_items} - expect(Importer::Order).to receive(:ensure_variant_id_from_params).and_return({ variant_id: variant.id, quantity: 5 }) + expect(Importer::Order).to receive(:ensure_variant_id_from_params).and_return({variant_id: variant.id, quantity: 5}) order = Importer::Order.import(user, params) expect(order.user).to eq(nil) line_item = order.line_items.first @@ -119,19 +120,19 @@ module Core expect(line_item.variant_id).to eq(variant_id) end - it 'handles line_item updating exceptions' do - line_items['0'][:price] = 'an invalid price' - params = { line_items_attributes: line_items } + it "handles line_item updating exceptions" do + line_items["0"][:price] = "an invalid price" + params = {line_items_attributes: line_items} expect { Importer::Order.import(user, params) }.to raise_exception ActiveRecord::RecordInvalid end - it 'can build an order from API with variant sku' do + it "can build an order from API with variant sku" do params = { line_items_attributes: { - "0" => { sku:, quantity: 5 } + "0" => {sku:, quantity: 5} } } @@ -142,10 +143,10 @@ module Core expect(line_item.quantity).to eq(5) end - it 'handle when line items is an array' do + it "handle when line items is an array" do params = { line_items_attributes: [ - { variant_id:, quantity: 7 } + {variant_id:, quantity: 7} ] } order = Importer::Order.import(user, params) @@ -155,36 +156,36 @@ module Core expect(line_item.quantity).to eq(7) end - it 'can build an order from API shipping address' do - params = { ship_address_attributes: ship_address, - line_items_attributes: line_items } + it "can build an order from API shipping address" do + params = {ship_address_attributes: ship_address, + line_items_attributes: line_items} order = Importer::Order.import(user, params) - expect(order.ship_address.address1).to eq '123 Testable Way' + expect(order.ship_address.address1).to eq "123 Testable Way" end - it 'can build an order from API with country attributes' do + it "can build an order from API with country attributes" do ship_address.delete(:country_id) - ship_address[:country] = { 'iso' => 'US' } - params = { ship_address_attributes: ship_address, - line_items_attributes: line_items } + ship_address[:country] = {"iso" => "US"} + params = {ship_address_attributes: ship_address, + line_items_attributes: line_items} order = Importer::Order.import(user, params) - expect(order.ship_address.country.iso).to eq 'US' + expect(order.ship_address.country.iso).to eq "US" end - it 'can build an order from API with state attributes' do + it "can build an order from API with state attributes" do ship_address.delete(:state_id) - ship_address[:state] = { 'name' => state.name } - params = { ship_address_attributes: ship_address, - line_items_attributes: line_items } + ship_address[:state] = {"name" => state.name} + params = {ship_address_attributes: ship_address, + line_items_attributes: line_items} order = Importer::Order.import(user, params) - expect(order.ship_address.state.name).to eq 'Alabama' + expect(order.ship_address.state.name).to eq "Alabama" end context "with a different currency" do - let(:params) { { currency: "GBP" } } + let(:params) { {currency: "GBP"} } it "sets the order currency" do order = Importer::Order.import(user, params) @@ -192,7 +193,7 @@ module Core end context "when a line item price is specified" do - let(:params) { { currency: "GBP", line_items_attributes: line_items } } + let(:params) { {currency: "GBP", line_items_attributes: line_items} } before { line_items["0"][:price] = 1.99 } @@ -230,61 +231,61 @@ module Core before do ship_address.delete(:state_id) - ship_address[:state] = { 'name' => other_state.name } + ship_address[:state] = {"name" => other_state.name} end - it 'sets states name instead of state id' do + it "sets states name instead of state id" do order = Importer::Order.import(user, params) expect(order.ship_address.state_name).to eq other_state.name end end - it 'sets state name if state record not found' do + it "sets state name if state record not found" do ship_address.delete(:state_id) - ship_address[:state] = { 'name' => 'XXX' } - params = { ship_address_attributes: ship_address, - line_items_attributes: line_items } + ship_address[:state] = {"name" => "XXX"} + params = {ship_address_attributes: ship_address, + line_items_attributes: line_items} order = Importer::Order.import(user, params) - expect(order.ship_address.state_name).to eq 'XXX' + expect(order.ship_address.state_name).to eq "XXX" end - context 'variant not deleted' do - it 'ensures variant id from api' do - hash = { sku: variant.sku } + context "variant not deleted" do + it "ensures variant id from api" do + hash = {sku: variant.sku} Importer::Order.ensure_variant_id_from_params(hash) expect(hash[:variant_id]).to eq variant.id end end - context 'variant was soft-deleted' do - it 'raise error as variant shouldnt be found' do + context "variant was soft-deleted" do + it "raise error as variant shouldnt be found" do variant.product.discard - hash = { sku: variant.sku } + hash = {sku: variant.sku} expect { Importer::Order.ensure_variant_id_from_params(hash) }.to raise_error ActiveRecord::RecordNotFound end end - it 'ensures_country_id for country fields' do + it "ensures_country_id for country fields" do [:name, :iso, :iso_name, :iso3].each do |field| - address = { country: { field => country.send(field) } } + address = {country: {field => country.send(field)}} Importer::Order.ensure_country_id_from_params(address) expect(address[:country_id]).to eq country.id end end it "raises with proper message when cant find country" do - address = { country: { "name" => "NoNoCountry" } } + address = {country: {"name" => "NoNoCountry"}} expect { Importer::Order.ensure_country_id_from_params(address) }.to raise_error ActiveRecord::RecordNotFound end - it 'ensures_state_id for state fields' do + it "ensures_state_id for state fields" do [:name, :abbr].each do |field| - address = { country_id: country.id, state: { field => state.send(field) } } + address = {country_id: country.id, state: {field => state.send(field)}} Importer::Order.ensure_state_id_from_params(address) expect(address[:state_id]).to eq state.id end @@ -295,28 +296,28 @@ module Core { shipments_attributes: [ { - tracking: '123456789', - cost: '14.99', + tracking: "123456789", + cost: "14.99", shipping_method: shipping_method.name, stock_location: stock_location.name, - inventory_units: [{ sku: }] + inventory_units: [{sku:}] } ] } end - it 'ensures variant exists and is not deleted' do + it "ensures variant exists and is not deleted" do expect(Importer::Order).to receive(:ensure_variant_id_from_params).and_call_original Importer::Order.import(user, params) end - it 'builds them properly' do + it "builds them properly" do order = Importer::Order.import(user, params) shipment = order.shipments.first expect(shipment.cost.to_f).to eq 14.99 expect(shipment.inventory_units.first.variant_id).to eq product.master.id - expect(shipment.tracking).to eq '123456789' + expect(shipment.tracking).to eq "123456789" expect(shipment.shipping_rates.first.cost).to eq 14.99 expect(shipment.selected_shipping_rate).to eq(shipment.shipping_rates.first) expect(shipment.stock_location).to eq stock_location @@ -347,37 +348,37 @@ module Core expect(shipment.stock_location).to eq stock_location end - context 'when completed_at and shipped_at present' do + context "when completed_at and shipped_at present" do let(:params) do { completed_at: 2.days.ago, shipments_attributes: [ { - tracking: '123456789', - cost: '4.99', + tracking: "123456789", + cost: "4.99", shipped_at: 1.day.ago, shipping_method: shipping_method.name, stock_location: stock_location.name, - inventory_units: [{ sku: }] + inventory_units: [{sku:}] } ] } end - it 'builds them properly' do + it "builds them properly" do order = Importer::Order.import(user, params) shipment = order.shipments.first expect(shipment.cost.to_f).to eq 4.99 expect(shipment.inventory_units.first.variant_id).to eq product.master.id - expect(shipment.tracking).to eq '123456789' + expect(shipment.tracking).to eq "123456789" expect(shipment.shipped_at).to be_present expect(shipment.shipping_rates.first.cost).to eq 4.99 expect(shipment.selected_shipping_rate).to eq(shipment.shipping_rates.first) expect(shipment.stock_location).to eq stock_location - expect(shipment.state).to eq('shipped') + expect(shipment.state).to eq("shipped") expect(shipment.inventory_units.all?(&:shipped?)).to be true - expect(order.shipment_state).to eq('shipped') + expect(order.shipment_state).to eq("shipped") expect(order.shipment_total.to_f).to eq 4.99 end end @@ -389,18 +390,18 @@ module Core line_items_attributes: line_items, shipments_attributes: [ { - tracking: '123456789', - cost: '4.99', + tracking: "123456789", + cost: "4.99", shipped_at: 1.day.ago, shipping_method: shipping_method.name, stock_location: stock_location.name, - inventory_units: [{ sku: }] + inventory_units: [{sku:}] } ] } end - it 'builds quantities properly' do + it "builds quantities properly" do order = Importer::Order.import(user, params) line_item = order.line_items.first expect(line_item.quantity).to eq(5) @@ -408,24 +409,24 @@ module Core end end - it 'adds adjustments' do + it "adds adjustments" do params = { adjustments_attributes: [ - { label: 'Shipping Discount', amount: -4.99 }, - { label: 'Promotion Discount', amount: -3.00 } + {label: "Shipping Discount", amount: -4.99}, + {label: "Promotion Discount", amount: -3.00} ] } order = Importer::Order.import(user, params) expect(order.adjustments.all?(&:finalized?)).to be true - expect(order.adjustments.first.label).to eq 'Shipping Discount' + expect(order.adjustments.first.label).to eq "Shipping Discount" expect(order.adjustments.first.amount).to eq(-4.99) end it "calculates final order total correctly" do params = { adjustments_attributes: [ - { label: 'Promotion Discount', amount: -3.00 } + {label: "Promotion Discount", amount: -3.00} ], line_items_attributes: { "0" => { @@ -440,60 +441,60 @@ module Core expect(order.total).to eq(163.1) # = item_total (166.1) - adjustment_total (3.00) end - it 'builds a payment using state' do - params = { payments_attributes: [{ amount: '4.99', - payment_method: payment_method.name, - state: 'completed' }] } + it "builds a payment using state" do + params = {payments_attributes: [{amount: "4.99", + payment_method: payment_method.name, + state: "completed"}]} order = Importer::Order.import(user, params) expect(order.payments.first.amount).to eq 4.99 end - it 'builds a payment using status as fallback' do - params = { payments_attributes: [{ amount: '4.99', - payment_method: payment_method.name, - status: 'completed' }] } + it "builds a payment using status as fallback" do + params = {payments_attributes: [{amount: "4.99", + payment_method: payment_method.name, + status: "completed"}]} order = Importer::Order.import(user, params) expect(order.payments.first.amount).to eq 4.99 end - it 'build a source payment using years and month' do - params = { payments_attributes: [{ - amount: '4.99', - payment_method: payment_method.name, - status: 'completed', - source: { - name: 'Fox', - last_digits: "7424", - cc_type: "visa", - year: '2022', - month: "5" - } - }] } + it "build a source payment using years and month" do + params = {payments_attributes: [{ + amount: "4.99", + payment_method: payment_method.name, + status: "completed", + source: { + name: "Fox", + last_digits: "7424", + cc_type: "visa", + year: "2022", + month: "5" + } + }]} order = Importer::Order.import(user, params) - expect(order.payments.first.source.last_digits).to eq '7424' + expect(order.payments.first.source.last_digits).to eq "7424" end - it 'handles source building exceptions when do not have years and month' do - params = { payments_attributes: [{ - amount: '4.99', - payment_method: payment_method.name, - status: 'completed', - source: { - name: 'Fox', - last_digits: "7424", - cc_type: "visa" - } - }] } + it "handles source building exceptions when do not have years and month" do + params = {payments_attributes: [{ + amount: "4.99", + payment_method: payment_method.name, + status: "completed", + source: { + name: "Fox", + last_digits: "7424", + cc_type: "visa" + } + }]} expect { Importer::Order.import(user, params) - }.to raise_error /Validation failed: Credit card Month is not a number, Credit card Year is not a number/ + }.to raise_error(/Validation failed: Credit card Month is not a number, Credit card Year is not a number/) end context "raises error" do it "clears out order from db" do - params = { payments_attributes: [{ payment_method: "XXX" }] } + params = {payments_attributes: [{payment_method: "XXX"}]} count = Order.count expect { Importer::Order.import(user, params) }.to raise_error ActiveRecord::RecordNotFound diff --git a/core/spec/lib/spree/core/null_promotion_configuration_spec.rb b/core/spec/lib/spree/core/null_promotion_configuration_spec.rb index 43de916d370..ad763434679 100644 --- a/core/spec/lib/spree/core/null_promotion_configuration_spec.rb +++ b/core/spec/lib/spree/core/null_promotion_configuration_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Core::NullPromotionConfiguration do subject(:config) { described_class.new } diff --git a/core/spec/lib/spree/core/role_configuration_spec.rb b/core/spec/lib/spree/core/role_configuration_spec.rb index cf3e5da3802..5b03a4991fd 100644 --- a/core/spec/lib/spree/core/role_configuration_spec.rb +++ b/core/spec/lib/spree/core/role_configuration_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/dummy_ability' +require "rails_helper" +require "spree/testing_support/dummy_ability" RSpec.describe Spree::RoleConfiguration do class DummyPermissionSet < Spree::PermissionSets::Base @@ -9,6 +9,7 @@ def activate! can :manage, :things end end + class OtherDummyPermissionSet < Spree::PermissionSets::Base; end let(:instance) { Spree::RoleConfiguration.new } @@ -26,7 +27,7 @@ class OtherDummyPermissionSet < Spree::PermissionSets::Base; end let(:existing_roles) { [DummyPermissionSet] } it "does not add another role" do - expect{ subject }.to_not change{ instance.roles.count } + expect { subject }.to_not change { instance.roles.count } end it "does not add duplicate permission sets" do @@ -40,7 +41,7 @@ class OtherDummyPermissionSet < Spree::PermissionSets::Base; end let(:existing_roles) { [OtherDummyPermissionSet] } it "does not add another role" do - expect{ subject }.to_not change{ instance.roles.count } + expect { subject }.to_not change { instance.roles.count } end it "appends the permission set to the existing role" do @@ -53,7 +54,7 @@ class OtherDummyPermissionSet < Spree::PermissionSets::Base; end context "when a role for the name does not yet exist" do it "creates a new role" do - expect{ subject }.to change{ instance.roles.count }.from(0).to(1) + expect { subject }.to change { instance.roles.count }.from(0).to(1) end it "sets the roles name accordingly" do @@ -87,15 +88,15 @@ class OtherDummyPermissionSet < Spree::PermissionSets::Base; end end context "default_role" do - let(:role_name) { 'default' } + let(:role_name) { "default" } context "when the user has no roles" do let(:user_roles) { [] } it "activates the applicable permissions on the ability" do - expect{ subject }.to change{ ability.can? :manage, :things }. - from(false). - to(true) + expect { subject }.to change { ability.can? :manage, :things } + .from(false) + .to(true) end end @@ -103,9 +104,9 @@ class OtherDummyPermissionSet < Spree::PermissionSets::Base; end let(:user_roles) { [] } it "activates the applicable permissions on the ability" do - expect{ subject }.to change{ ability.can? :manage, :things }. - from(false). - to(true) + expect { subject }.to change { ability.can? :manage, :things } + .from(false) + .to(true) end end end @@ -114,9 +115,9 @@ class OtherDummyPermissionSet < Spree::PermissionSets::Base; end let(:user_roles) { [role_name, "someotherrandomrole"] } it "activates the applicable permissions on the ability" do - expect{ subject }.to change{ ability.can? :manage, :things }. - from(false). - to(true) + expect { subject }.to change { ability.can? :manage, :things } + .from(false) + .to(true) end end diff --git a/core/spec/lib/spree/core/state_machines_spec.rb b/core/spec/lib/spree/core/state_machines_spec.rb index cce9ebde4b3..33e011910dc 100644 --- a/core/spec/lib/spree/core/state_machines_spec.rb +++ b/core/spec/lib/spree/core/state_machines_spec.rb @@ -3,7 +3,7 @@ require "rails_helper" RSpec.describe "require 'spree/core/state_machines" do - %w( + %w[ inventory_unit order payment @@ -12,7 +12,7 @@ shipment return_item/acceptance_status return_item/reception_status - ).each do |helper_name| + ].each do |helper_name| describe "require 'spree/core/state_machines/#{helper_name}" do it "exists but will print a deprecation warning" do expect(Spree.deprecator).to receive(:warn).with( diff --git a/core/spec/lib/spree/core/stock_configuration_spec.rb b/core/spec/lib/spree/core/stock_configuration_spec.rb index 47522b5e47d..908ce08136b 100644 --- a/core/spec/lib/spree/core/stock_configuration_spec.rb +++ b/core/spec/lib/spree/core/stock_configuration_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Core::StockConfiguration do let(:stock_configuration) { described_class.new } - describe '#coordinator_class' do + describe "#coordinator_class" do subject { stock_configuration.coordinator_class } it "returns Spree::Stock::Coordinator by default" do @@ -22,7 +22,7 @@ end end - describe '#estimator_class' do + describe "#estimator_class" do subject { stock_configuration.estimator_class } it "returns Spree::Stock::Estimator" do @@ -39,7 +39,7 @@ end end - describe '#location_filter_class' do + describe "#location_filter_class" do subject { stock_configuration.location_filter_class } it "returns Spree::Stock::LocationFilter::Active by default" do @@ -56,7 +56,7 @@ end end - describe '#location_sorter_class' do + describe "#location_sorter_class" do subject { stock_configuration.location_sorter_class } it "returns Spree::Stock::LocationSorter::Unsorted by default" do @@ -73,7 +73,7 @@ end end - describe '#allocator_class' do + describe "#allocator_class" do subject { stock_configuration.allocator_class } it "returns Spree::Stock::Allocator::OnHandFirst by default" do @@ -90,7 +90,7 @@ end end - describe '#inventory_unit_builder_class' do + describe "#inventory_unit_builder_class" do subject { stock_configuration.inventory_unit_builder_class } it "returns Spree::Stock::InventoryUnitBuilder by default" do @@ -107,7 +107,7 @@ end end - describe '#availability_validator_class' do + describe "#availability_validator_class" do subject { stock_configuration.availability_validator_class } let(:stock_configuration) { described_class.new } @@ -126,7 +126,7 @@ end end - describe '#inventory_validator_class' do + describe "#inventory_validator_class" do subject { stock_configuration.inventory_validator_class } let(:stock_configuration) { described_class.new } diff --git a/core/spec/lib/spree/core/testing_support/bus_helpers_spec.rb b/core/spec/lib/spree/core/testing_support/bus_helpers_spec.rb index 34f7506b574..641dfd1d055 100644 --- a/core/spec/lib/spree/core/testing_support/bus_helpers_spec.rb +++ b/core/spec/lib/spree/core/testing_support/bus_helpers_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'spec_helper' -require 'spree/testing_support/bus_helpers' +require "spec_helper" +require "spree/testing_support/bus_helpers" RSpec.describe Spree::TestingSupport::BusHelpers do include described_class - describe '#stub_spree_bus' do - it 'stubs `publish` method' do + describe "#stub_spree_bus" do + it "stubs `publish` method" do stub_spree_bus Spree::Bus.publish :foo @@ -16,7 +16,7 @@ end end - describe '#have_been_published' do + describe "#have_been_published" do it "matches when the event has been published without payload and there's no expectation on it" do stub_spree_bus @@ -54,7 +54,7 @@ expect { expect(:foo).to have_been_published - }.to raise_error /expected :foo to have been published/ + }.to raise_error(/expected :foo to have been published/) end it "doesn't match when the event has been published but the payload doesn't match" do @@ -64,13 +64,13 @@ expect { expect(:foo).to have_been_published.with(bar: :baz) - }.to raise_error /Make sure that provided payload.*also matches/ + }.to raise_error(/Make sure that provided payload.*also matches/) end it "raises when expected event is not a valid name" do expect { expect([]).to have_been_published.with(bar: :baz) - }.to raise_error /not a valid event name/ + }.to raise_error(/not a valid event name/) end end end diff --git a/core/spec/lib/spree/core/testing_support/dummy_app_spec.rb b/core/spec/lib/spree/core/testing_support/dummy_app_spec.rb index 953947ffa5e..cd1f49a5007 100644 --- a/core/spec/lib/spree/core/testing_support/dummy_app_spec.rb +++ b/core/spec/lib/spree/core/testing_support/dummy_app_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe DummyApp do - it 'loads default from the Rails version in use' do + it "loads default from the Rails version in use" do expect( DummyApp::Application.config.loaded_config_version ).to eq("#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}") diff --git a/core/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb index 231ca3abec6..68c6f8b5152 100644 --- a/core/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb @@ -1,92 +1,92 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'address factory' do +RSpec.describe "address factory" do let(:factory_class) { Spree::Address } - describe 'plain address' do + describe "plain address" do let(:factory) { :address } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'ship_address' do + describe "ship_address" do let(:factory) { :ship_address } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'bill address' do + describe "bill address" do let(:factory) { :bill_address } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'when passing in a country iso code' do + describe "when passing in a country iso code" do subject { build(:address, country_iso_code: "RO") } - it 'creates a valid address with actually valid data' do + it "creates a valid address with actually valid data" do expect(subject).to be_valid end end - context 'states and countries' do - describe 'country requiring a state' do - let(:state) { create(:state, country_iso: 'IT', state_code: 'PE' )} - let(:country) { create(:country, iso: 'IT' )} + context "states and countries" do + describe "country requiring a state" do + let(:state) { create(:state, country_iso: "IT", state_code: "PE") } + let(:country) { create(:country, iso: "IT") } - context 'when given a state but no country' do + context "when given a state but no country" do subject { build(:address, state:) } - it 'infers the country from the state' do + it "infers the country from the state" do expect(subject).to be_valid expect(subject.state.abbr).to eq("PE") expect(subject.country.iso).to eq("IT") end end - context 'when given a country but no state' do + context "when given a country but no state" do subject { build(:address, country:) } - it 'automatically finds or creates an appropriate state' do + it "automatically finds or creates an appropriate state" do expect(subject).to be_valid expect(subject.state.abbr).to eq("AL") expect(subject.country.iso).to eq("IT") end end - context 'when given a country, no state but a state_name' do - subject { build(:address, country:, state_name: 'Bogus state') } + context "when given a country, no state but a state_name" do + subject { build(:address, country:, state_name: "Bogus state") } - it 'does not automatically find or create an appropriate state' do + it "does not automatically find or create an appropriate state" do expect(subject).to be_valid expect(subject.state).to be_nil - expect(subject.state_name).to eq('Bogus state') + expect(subject.state_name).to eq("Bogus state") end end end - describe 'country not requiring a state' do + describe "country not requiring a state" do subject { build(:address, country:) } - let(:country) { create(:country, iso: 'AI' )} + let(:country) { create(:country, iso: "AI") } - it 'does not automatically find or create an appropriate state' do + it "does not automatically find or create an appropriate state" do expect(subject).to be_valid expect(subject.state).to be_nil expect(subject.country.iso).to eq("AI") end end - describe 'when passing in a state and country ISO' do + describe "when passing in a state and country ISO" do subject { build(:address, country_iso_code:, state_code:) } - context 'when the country has a state with proper code' do + context "when the country has a state with proper code" do let(:country_iso_code) { "US" } let(:state_code) { "NY" } - it 'works' do + it "works" do expect(subject).to be_valid expect(subject.state.abbr).to eq("NY") expect(subject.country.iso).to eq("US") @@ -95,11 +95,11 @@ end end - describe 'creating multiple addresses' do + describe "creating multiple addresses" do let!(:address1) { create(:address) } let!(:address2) { create(:address) } - it 'shares the same country and state objects' do + it "shares the same country and state objects" do expect(address1.country).to eq(address2.country) expect(address1.state).to eq(address2.state) expect(Spree::Country.count).to eq(1) diff --git a/core/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb index 3a1a0992481..1a31b1a2c74 100644 --- a/core/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb @@ -1,20 +1,20 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'adjustment factory' do +RSpec.describe "adjustment factory" do let(:factory_class) { Spree::Adjustment } - describe 'plain adjustment' do + describe "plain adjustment" do let(:factory) { :adjustment } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'tax adjustment' do + describe "tax adjustment" do let(:factory) { :tax_adjustment } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb index 50964b3c7f8..aeb8c0bad64 100644 --- a/core/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'adjustment reason factory' do +RSpec.describe "adjustment reason factory" do let(:factory_class) { Spree::AdjustmentReason } - describe 'adjustment reason' do + describe "adjustment reason" do let(:factory) { :adjustment_reason } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb index d5b77ff3e24..50008d3ded2 100644 --- a/core/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb @@ -1,32 +1,32 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'calculator factory' do +RSpec.describe "calculator factory" do let(:factory_class) { Spree::Calculator } - describe 'calculator' do + describe "calculator" do let(:factory) { :calculator } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'default_tax_calculator' do + describe "default_tax_calculator" do let(:factory) { :default_tax_calculator } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'shipping calculator' do + describe "shipping calculator" do let(:factory) { :shipping_calculator } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'shipping no amount calculator' do + describe "shipping no amount calculator" do let(:factory) { :shipping_no_amount_calculator } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb index 95800abf294..e75ceedc844 100644 --- a/core/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'carton factory' do +RSpec.describe "carton factory" do let(:factory_class) { Spree::Carton } - describe 'plain adjustment' do + describe "plain adjustment" do let(:factory) { :carton } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb index 7e92e44e592..cd6f49072a5 100644 --- a/core/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'country factory' do +RSpec.describe "country factory" do let(:factory_class) { Spree::Country } - describe 'plain adjustment' do + describe "plain adjustment" do let(:factory) { :country } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb index 9f888a9565e..cc854a79d4a 100644 --- a/core/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'credit card factory' do +RSpec.describe "credit card factory" do let(:factory_class) { Spree::CreditCard } - describe 'plain credit card' do + describe "plain credit card" do let(:factory) { :credit_card } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb index e5270316d0d..df1b6510124 100644 --- a/core/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'customer return factory' do +RSpec.describe "customer return factory" do let(:factory_class) { Spree::CustomerReturn } - describe 'customer return' do + describe "customer return" do let(:factory) { :customer_return } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" # Regression test for https://github.com/solidusio/solidus/pull/697 it "creates only one of dependent records" do @@ -21,13 +21,13 @@ end end - describe 'customer return with accepted items' do + describe "customer return with accepted items" do let(:factory) { :customer_return_with_accepted_items } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'customer return without return items' do + describe "customer return without return items" do let(:factory) { :customer_return_without_return_items } it "builds successfully" do diff --git a/core/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb index 6eeac767d91..d570b78202a 100644 --- a/core/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'image factory' do +RSpec.describe "image factory" do let(:factory_class) { Spree::Image } - describe 'plain adjustment' do + describe "plain adjustment" do let(:factory) { :image } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb index e86dbf190e3..9654e8fef08 100644 --- a/core/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'inventory unit factory' do +RSpec.describe "inventory unit factory" do let(:factory_class) { Spree::InventoryUnit } - describe 'plain inventory unit' do + describe "plain inventory unit" do let(:factory) { :inventory_unit } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb index 5d33112d999..45d26a0e066 100644 --- a/core/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'line item factory' do +RSpec.describe "line item factory" do let(:factory_class) { Spree::LineItem } - describe 'plain inventory unit' do + describe "plain inventory unit" do let(:factory) { :line_item } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb index e0604bd2e01..44b25a9f0c8 100644 --- a/core/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'option type factory' do +RSpec.describe "option type factory" do let(:factory_class) { Spree::OptionType } - describe 'plain option type' do + describe "plain option type" do let(:factory) { :option_type } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb index a3d5d9a7f44..10b2fc10038 100644 --- a/core/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'option value factory' do +RSpec.describe "option value factory" do let(:factory_class) { Spree::OptionValue } - describe 'plain option value' do + describe "plain option value" do let(:factory) { :option_value } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb index 3a85bdcd047..ac8ec506633 100644 --- a/core/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" require "spree/testing_support/shared_examples/order_factory" -RSpec.describe 'order factory' do +RSpec.describe "order factory" do let(:factory_class) { Spree::Order } - describe 'plain order' do + describe "plain order" do let(:factory) { :order } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" shared_examples "it has the expected attributes" do it do @@ -38,10 +38,10 @@ end end - describe 'order with totals' do + describe "order with totals" do let(:factory) { :order_with_totals } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" context "when built" do let(:order) { build(factory, line_items_price: 77) } @@ -68,20 +68,20 @@ end end - describe 'order with line items' do + describe "order with line items" do let(:factory) { :order_with_line_items } - it_behaves_like 'a working factory' - it_behaves_like 'an order with line items factory', "cart", "on_hand" - it_behaves_like 'shipping methods are assigned' + it_behaves_like "a working factory" + it_behaves_like "an order with line items factory", "cart", "on_hand" + it_behaves_like "shipping methods are assigned" end - describe 'order ready to complete' do + describe "order ready to complete" do let(:factory) { :order_ready_to_complete } - it_behaves_like 'a working factory' - it_behaves_like 'an order with line items factory', "confirm", "on_hand" - it_behaves_like 'shipping methods are assigned' + it_behaves_like "a working factory" + it_behaves_like "an order with line items factory", "confirm", "on_hand" + it_behaves_like "shipping methods are assigned" it "is completable" do order = create(factory) @@ -92,13 +92,13 @@ end end - describe 'completed order with totals' do + describe "completed order with totals" do let(:factory) { :completed_order_with_totals } - it_behaves_like 'a working factory' - it_behaves_like 'an order with line items factory', "complete", "on_hand" - it_behaves_like 'shipping methods are assigned' - it_behaves_like 'supplied completed_at is respected' + it_behaves_like "a working factory" + it_behaves_like "an order with line items factory", "complete", "on_hand" + it_behaves_like "shipping methods are assigned" + it_behaves_like "supplied completed_at is respected" it "has the expected attributes" do order = create(factory) @@ -108,7 +108,7 @@ item_total: 10, ship_total: 100, total: 110, - state: 'complete' + state: "complete" ) expect(order.inventory_units.where(pending: true)).to be_empty expect(order.inventory_units.where(pending: false)).to_not be_empty @@ -116,20 +116,20 @@ end end - describe 'completed order with pending payment' do + describe "completed order with pending payment" do let(:factory) { :completed_order_with_pending_payment } - it_behaves_like 'a working factory' - it_behaves_like 'an order with line items factory', "complete", "on_hand" - it_behaves_like 'shipping methods are assigned' - it_behaves_like 'supplied completed_at is respected' + it_behaves_like "a working factory" + it_behaves_like "an order with line items factory", "complete", "on_hand" + it_behaves_like "shipping methods are assigned" + it_behaves_like "supplied completed_at is respected" it "has the expected attributes" do order = create(factory) aggregate_failures do expect(order).to be_completed expect(order).to have_attributes( - payment_state: 'balance_due', + payment_state: "balance_due", total: 110, payment_total: 0 # payment is still pending ) @@ -137,19 +137,19 @@ expect(order.payments.count).to eq 1 expect(order.payments[0]).to have_attributes( amount: 110, - state: 'pending' + state: "pending" ) end end end - describe 'order ready to ship' do + describe "order ready to ship" do let(:factory) { :order_ready_to_ship } - it_behaves_like 'a working factory' - it_behaves_like 'an order with line items factory', "complete", "on_hand" - it_behaves_like 'shipping methods are assigned' - it_behaves_like 'supplied completed_at is respected' + it_behaves_like "a working factory" + it_behaves_like "an order with line items factory", "complete", "on_hand" + it_behaves_like "shipping methods are assigned" + it_behaves_like "supplied completed_at is respected" it "has the expected attributes" do order = create(factory) @@ -165,12 +165,12 @@ expect(order.payments.count).to eq 1 expect(order.payments[0]).to have_attributes( amount: 110, - state: 'completed' + state: "completed" ) expect(order.shipments.count).to eq 1 expect(order.shipments[0]).to have_attributes( - state: 'ready' + state: "ready" ) end end @@ -185,13 +185,13 @@ end end - describe 'shipped order' do + describe "shipped order" do let(:factory) { :shipped_order } - it_behaves_like 'a working factory' - it_behaves_like 'an order with line items factory', "complete", "shipped" - it_behaves_like 'shipping methods are assigned' - it_behaves_like 'supplied completed_at is respected' + it_behaves_like "a working factory" + it_behaves_like "an order with line items factory", "complete", "shipped" + it_behaves_like "shipping methods are assigned" + it_behaves_like "supplied completed_at is respected" it "has the expected attributes" do order = create(factory) @@ -207,12 +207,12 @@ expect(order.payments.count).to eq 1 expect(order.payments[0]).to have_attributes( amount: 110, - state: 'completed' + state: "completed" ) expect(order.shipments.count).to eq 1 expect(order.shipments[0]).to have_attributes( - state: 'shipped' + state: "shipped" ) expect(order.cartons.count).to eq 1 diff --git a/core/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb index fd3e2675ac7..074d05c9dae 100644 --- a/core/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'payment factory' do +RSpec.describe "payment factory" do let(:factory_class) { Spree::Payment } - describe 'plain (credit card) payment' do + describe "plain (credit card) payment" do let(:factory) { :payment } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" it "assigns the Order's user to the created Credit Card" do payment = create(factory) @@ -17,7 +17,7 @@ expect(payment.source.user).to eq payment.order.user end - it 'uses the orders bill address for the credit card' do + it "uses the orders bill address for the credit card" do address = create(:address) order = create(:order, bill_address: address) payment = create(factory, order:) @@ -26,15 +26,15 @@ end end - describe 'check payment' do + describe "check payment" do let(:factory) { :check_payment } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'store credit payment' do + describe "store credit payment" do let(:factory) { :store_credit_payment } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb index a4092addbd9..1e3f1837cc6 100644 --- a/core/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb @@ -1,32 +1,32 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'payment method factory' do +RSpec.describe "payment method factory" do let(:factory_class) { Spree::PaymentMethod } - describe 'plain payment method' do + describe "plain payment method" do let(:factory) { :payment_method } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'check payment method' do + describe "check payment method" do let(:factory) { :check_payment_method } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'store credit payment method' do + describe "store credit payment method" do let(:factory) { :store_credit_payment_method } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'simple credit card payment method' do + describe "simple credit card payment method" do let(:factory) { :simple_credit_card_payment_method } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb index 1726a5dae3d..0f76e145894 100644 --- a/core/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'price factory' do +RSpec.describe "price factory" do let(:factory_class) { Spree::Price } - describe 'plain price' do + describe "plain price" do let(:factory) { :price } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb index bdb17b5317d..4e4cc954de5 100644 --- a/core/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb @@ -1,32 +1,32 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'product factory' do +RSpec.describe "product factory" do let(:factory_class) { Spree::Product } - describe 'plain product' do + describe "plain product" do let(:factory) { :product } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'base product' do + describe "base product" do let(:factory) { :base_product } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'custom product' do + describe "custom product" do let(:factory) { :custom_product } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'product with option types' do + describe "product with option types" do let(:factory) { :product_with_option_types } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb index 0764dad61a9..3f9c99aeccc 100644 --- a/core/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'product option type factory' do +RSpec.describe "product option type factory" do let(:factory_class) { Spree::ProductOptionType } - describe 'plain product option type' do + describe "plain product option type" do let(:factory) { :product_option_type } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb index 27e1c9c80b1..ea53de03903 100644 --- a/core/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'product property factory' do +RSpec.describe "product property factory" do let(:factory_class) { Spree::ProductProperty } - describe 'plain product property' do + describe "plain product property" do let(:factory) { :product_property } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb index 199033409a2..43aa0bcf57b 100644 --- a/core/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'property factory' do +RSpec.describe "property factory" do let(:factory_class) { Spree::Property } - describe 'plain property' do + describe "plain property" do let(:factory) { :property } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb index 28a003a8223..f65dc1cb6a0 100644 --- a/core/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'refund factory' do +RSpec.describe "refund factory" do let(:factory_class) { Spree::Refund } - describe 'plain refund' do + describe "plain refund" do let(:factory) { :refund } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb index 28a003a8223..f65dc1cb6a0 100644 --- a/core/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'refund factory' do +RSpec.describe "refund factory" do let(:factory_class) { Spree::Refund } - describe 'plain refund' do + describe "plain refund" do let(:factory) { :refund } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb index 256b7af12e2..ca9b4b3eeb1 100644 --- a/core/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb @@ -1,18 +1,18 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'reimbursement factory' do +RSpec.describe "reimbursement factory" do let(:factory_class) { Spree::Reimbursement } - describe 'plain reimbursement' do + describe "plain reimbursement" do let(:factory) { :reimbursement } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'total' do + describe "total" do subject { FactoryBot.create(:reimbursement).total } it { is_expected.to be_present } diff --git a/core/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb index cb80dd48cae..845d6455bfa 100644 --- a/core/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'reimbursement type factory' do +RSpec.describe "reimbursement type factory" do let(:factory_class) { Spree::ReimbursementType } - describe 'plain reimbursement type' do + describe "plain reimbursement type" do let(:factory) { :reimbursement_type } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb index 4bac76d427f..3ecf990dcb7 100644 --- a/core/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'return authorization factory' do +RSpec.describe "return authorization factory" do let(:factory_class) { Spree::ReturnAuthorization } - describe 'plain return authorization' do + describe "plain return authorization" do let(:factory) { :return_authorization } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb index a984040a53c..8bf90927a3d 100644 --- a/core/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb @@ -1,20 +1,20 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'return item factory' do +RSpec.describe "return item factory" do let(:factory_class) { Spree::ReturnItem } - describe 'plain return item' do + describe "plain return item" do let(:factory) { :return_item } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'exchange return item' do + describe "exchange return item" do let(:factory) { :exchange_return_item } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb index 45b23dfd028..9d77d261119 100644 --- a/core/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'return reason factory' do +RSpec.describe "return reason factory" do let(:factory_class) { Spree::ReturnReason } - describe 'plain return reason' do + describe "plain return reason" do let(:factory) { :return_reason } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb index d8a2fa08976..67deb214937 100644 --- a/core/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb @@ -1,20 +1,20 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'role factory' do +RSpec.describe "role factory" do let(:factory_class) { Spree::Role } - describe 'plain role' do + describe "plain role" do let(:factory) { :role } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'admin role' do + describe "admin role" do let(:factory) { :admin_role } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb index 0b9cb97e4e7..3453c95f60c 100644 --- a/core/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'shipment factory' do +RSpec.describe "shipment factory" do let(:factory_class) { Spree::Shipment } - describe 'plain shipment' do + describe "plain shipment" do let(:factory) { :shipment } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb index 92e6e0a2fdb..3723b8b7e6c 100644 --- a/core/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'shipping category factory' do +RSpec.describe "shipping category factory" do let(:factory_class) { Spree::ShippingCategory } - describe 'plain shipping category' do + describe "plain shipping category" do let(:factory) { :shipping_category } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb index fb3557625f9..32ad496b896 100644 --- a/core/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb @@ -1,44 +1,44 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'shipping method factory' do +RSpec.describe "shipping method factory" do let(:factory_class) { Spree::ShippingMethod } - describe 'plain shipping method' do + describe "plain shipping method" do let(:factory) { :shipping_method } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" it "should set calculable correctly" do shipping_method = create(factory) expect(shipping_method.calculator.calculable).to eq(shipping_method) end - context 'store using alternate currency' do - before { stub_spree_preferences(currency: 'CAD') } + context "store using alternate currency" do + before { stub_spree_preferences(currency: "CAD") } it "should configure the calculator correctly" do shipping_method = create(factory) - expect(shipping_method.calculator.preferences[:currency]).to eq('CAD') + expect(shipping_method.calculator.preferences[:currency]).to eq("CAD") end end end - describe 'base shipping method' do + describe "base shipping method" do let(:factory) { :base_shipping_method } - it 'builds successfully' do + it "builds successfully" do expect(build(factory)).to be_a(factory_class) end # No test for create, as that is not intended somehow end - describe 'free shipping method' do + describe "free shipping method" do let(:factory) { :free_shipping_method } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb index 28f06818d30..5a207f72a15 100644 --- a/core/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'shipping rate factory' do +RSpec.describe "shipping rate factory" do let(:factory_class) { Spree::ShippingRate } - describe 'plain shipping rate' do + describe "plain shipping rate" do let(:factory) { :shipping_rate } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb index 5c54198ceee..b4aef3c089f 100644 --- a/core/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb @@ -1,79 +1,79 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'state factory' do +RSpec.describe "state factory" do let(:factory_class) { Spree::State } - describe 'plain state' do + describe "plain state" do let(:factory) { :state } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" - it 'is Alabama' do - expect(build(factory).abbr).to eq('AL') - expect(build(factory).name).to eq('Alabama') + it "is Alabama" do + expect(build(factory).abbr).to eq("AL") + expect(build(factory).name).to eq("Alabama") end end - describe 'when given a country iso code' do + describe "when given a country iso code" do let(:state) { build(:state, country_iso: "DE") } - it 'creates the first state for that country it finds in carmen' do + it "creates the first state for that country it finds in carmen" do expect(state.abbr).to eq("BW") expect(state.name).to eq("Baden-Württemberg") end - context 'of an existing country' do - let!(:country){ create(:country, iso: "DE") } - it 'uses the existing country in the database' do + context "of an existing country" do + let!(:country) { create(:country, iso: "DE") } + it "uses the existing country in the database" do expect(state.country).to eq(country) expect(Spree::Country.count).to eq(1) end end end - describe 'for a country with nested carmen states' do - context 'when not given a state_iso' do + describe "for a country with nested carmen states" do + context "when not given a state_iso" do let(:state) { build(:state, country_iso: "IT") } - it 'creates the first state for that country it finds in carmen' do + it "creates the first state for that country it finds in carmen" do expect(state.abbr).to eq("AL") expect(state.name).to eq("Alessandria") end end - context 'when given a state_iso' do - let(:state) { build(:state, country_iso: "IT", state_code: 'PE' ) } + context "when given a state_iso" do + let(:state) { build(:state, country_iso: "IT", state_code: "PE") } - it 'finds the corresponding state' do + it "finds the corresponding state" do expect(state.abbr).to eq("PE") expect(state.name).to eq("Pescara") end end end - describe 'when given a country record' do + describe "when given a country record" do let(:country) { build(:country, iso: "DE") } let(:state) { build(:state, country:) } - it 'creates the first state for that country it finds in carmen' do + it "creates the first state for that country it finds in carmen" do expect(state.abbr).to eq("BW") expect(state.name).to eq("Baden-Württemberg") end end - describe 'when given an invalid country iso code' do - it 'raises a helpful message' do - expect{ build(:state, country_iso: "ZZ") }.to raise_error(RuntimeError, 'Unknown country iso code: "ZZ"') + describe "when given an invalid country iso code" do + it "raises a helpful message" do + expect { build(:state, country_iso: "ZZ") }.to raise_error(RuntimeError, 'Unknown country iso code: "ZZ"') end end - context 'with a country that does not have subregions' do - it 'raises an exception' do + context "with a country that does not have subregions" do + it "raises an exception" do expect { - create(:state, country_iso: 'HK') - }.to raise_error('Country HK has no subregions') + create(:state, country_iso: "HK") + }.to raise_error("Country HK has no subregions") end end end diff --git a/core/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb index ee217309ab6..2419ba36e67 100644 --- a/core/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'stock item factory' do +RSpec.describe "stock item factory" do let(:factory_class) { Spree::StockItem } - describe 'plain stock item' do + describe "plain stock item" do let(:factory) { :stock_item } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb index b74459283e6..e9d57014216 100644 --- a/core/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb @@ -1,32 +1,32 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'stock location factory' do +RSpec.describe "stock location factory" do let(:factory_class) { Spree::StockLocation } - describe 'plain stock location' do + describe "plain stock location" do let(:factory) { :stock_location } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'stock location without variant propagation' do + describe "stock location without variant propagation" do let(:factory) { :stock_location_without_variant_propagation } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'stock location with items' do + describe "stock location with items" do let(:factory) { :stock_location_with_items } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'stock location for a country without subregions' do - let(:country) { create(:country, iso: 'HK') } - it 'succeeds' do + describe "stock location for a country without subregions" do + let(:country) { create(:country, iso: "HK") } + it "succeeds" do expect( create(:stock_location, country:) ).to be_a(Spree::StockLocation) diff --git a/core/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb index d58782e6669..fc48a5e7089 100644 --- a/core/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'stock movement factory' do +RSpec.describe "stock movement factory" do let(:factory_class) { Spree::StockMovement } - describe 'plain stock movement' do + describe "plain stock movement" do let(:factory) { :stock_movement } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb index d63732810aa..b6ecb621b72 100644 --- a/core/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'stock package factory' do +RSpec.describe "stock package factory" do let(:factory_class) { Spree::Stock::Package } - describe 'plain stock package' do + describe "plain stock package" do let(:factory) { :stock_package } it "builds successfully" do @@ -16,7 +16,7 @@ # No test for .create, as it's a PORO end - describe 'fulfilled stock package' do + describe "fulfilled stock package" do let(:factory) { :stock_package_fulfilled } it "builds successfully" do diff --git a/core/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb index 61513d2299d..ebbb266facf 100644 --- a/core/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'store credit category factory' do +RSpec.describe "store credit category factory" do let(:factory_class) { Spree::StoreCreditCategory } - describe 'plain store credit category' do + describe "plain store credit category" do let(:factory) { :store_credit_category } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb index 1595edc5747..20002ac45f6 100644 --- a/core/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'store credit event factory' do +RSpec.describe "store credit event factory" do let(:factory_class) { Spree::StoreCreditEvent } - describe 'plain store credit event' do + describe "plain store credit event" do let(:factory) { :store_credit_event } it "builds successfully" do @@ -17,27 +17,27 @@ # and thus violates a NOT NULL constraint on e the DB end - describe 'store credit auth event' do + describe "store credit auth event" do let(:factory) { :store_credit_auth_event } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'store credit capture event' do + describe "store credit capture event" do let(:factory) { :store_credit_capture_event } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'store credit adjustment event' do + describe "store credit adjustment event" do let(:factory) { :store_credit_adjustment_event } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'store credit invalidate event' do + describe "store credit invalidate event" do let(:factory) { :store_credit_invalidate_event } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb index 1182107a09a..c9de6cc8dba 100644 --- a/core/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'store credit factory' do +RSpec.describe "store credit factory" do let(:factory_class) { Spree::StoreCredit } - describe 'plain store credit' do + describe "plain store credit" do let(:factory) { :store_credit } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb index a4f70e49e3a..2aa75da75ec 100644 --- a/core/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'store credit reason factory' do +RSpec.describe "store credit reason factory" do let(:factory_class) { Spree::StoreCreditReason } - describe 'store credit reason' do + describe "store credit reason" do let(:factory) { :store_credit_reason } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb index 7a2e1e2e634..7709135cef7 100644 --- a/core/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb @@ -1,20 +1,20 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'store credit type factory' do +RSpec.describe "store credit type factory" do let(:factory_class) { Spree::StoreCreditType } - describe 'primary credit type' do + describe "primary credit type" do let(:factory) { :primary_credit_type } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'secondary credit type' do + describe "secondary credit type" do let(:factory) { :secondary_credit_type } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb index 852f063b5cc..a993090bfc8 100644 --- a/core/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'store factory' do +RSpec.describe "store factory" do let(:factory_class) { Spree::Store } - describe 'store' do + describe "store" do let(:factory) { :store } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb index f9254a76367..95f87527e18 100644 --- a/core/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'tax category factory' do +RSpec.describe "tax category factory" do let(:factory_class) { Spree::TaxCategory } - describe 'tax category' do + describe "tax category" do let(:factory) { :tax_category } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb index acf6e1a11f4..d682090d860 100644 --- a/core/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'tax rate factory' do +RSpec.describe "tax rate factory" do let(:factory_class) { Spree::TaxRate } - describe 'tax rate' do + describe "tax rate" do let(:factory) { :tax_rate } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb index 0f4d357ad40..1518b952618 100644 --- a/core/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'taxon factory' do +RSpec.describe "taxon factory" do let(:factory_class) { Spree::Taxon } - describe 'taxon' do + describe "taxon" do let(:factory) { :taxon } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" context "when no taxonomy is given" do subject { create(:taxon) } diff --git a/core/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb index c1abe7f9dae..35c7b3f7bcc 100644 --- a/core/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'taxonomy factory' do +RSpec.describe "taxonomy factory" do let(:factory_class) { Spree::Taxonomy } - describe 'taxonomy' do + describe "taxonomy" do let(:factory) { :taxonomy } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb index d1ff94bb087..4b3112116e9 100644 --- a/core/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb @@ -1,24 +1,24 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'user factory' do +RSpec.describe "user factory" do let(:factory_class) { Spree.user_class } - describe 'user' do + describe "user" do let(:factory) { :user } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'admin user' do + describe "admin user" do let(:factory) { :admin_user } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'user with addresses' do + describe "user with addresses" do let(:factory) { :user_with_addresses } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb index 80ed35f1f42..2e0667a4f46 100644 --- a/core/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb @@ -1,27 +1,27 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'variant factory' do +RSpec.describe "variant factory" do let(:factory_class) { Spree::Variant } - describe 'base variant' do + describe "base variant" do let(:factory) { :base_variant } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'variant' do + describe "variant" do let(:factory) { :variant } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'master variant' do + describe "master variant" do let(:factory) { :master_variant } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" it "builds a master variant properly" do variant = create(factory) @@ -42,15 +42,15 @@ end end - describe 'on demand variant' do + describe "on demand variant" do let(:factory) { :on_demand_variant } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'on demand master variant' do + describe "on demand master variant" do let(:factory) { :on_demand_master_variant } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb index 021814276dd..3c44e15d54e 100644 --- a/core/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'variant property rule condition factory' do +RSpec.describe "variant property rule condition factory" do let(:factory_class) { Spree::VariantPropertyRuleCondition } - describe 'variant property rule condition' do + describe "variant property rule condition" do let(:factory) { :variant_property_rule_condition } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb index f2fe8076039..c2d4c0fca4c 100644 --- a/core/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'variant property rule factory' do +RSpec.describe "variant property rule factory" do let(:factory_class) { Spree::VariantPropertyRule } - describe 'variant property rule' do + describe "variant property rule" do let(:factory) { :variant_property_rule } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb index 7a5a0d00f7e..ba52e506a23 100644 --- a/core/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'variant property rule value factory' do +RSpec.describe "variant property rule value factory" do let(:factory_class) { Spree::VariantPropertyRuleValue } - describe 'variant property rule value' do + describe "variant property rule value" do let(:factory) { :variant_property_rule_value } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb b/core/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb index 23f2adc1a85..6c7c93194ea 100644 --- a/core/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +++ b/core/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb @@ -1,20 +1,20 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'zone factory' do +RSpec.describe "zone factory" do let(:factory_class) { Spree::Zone } - describe 'zone' do + describe "zone" do let(:factory) { :zone } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'global zone' do + describe "global zone" do let(:factory) { :global_zone } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/core/spec/lib/spree/core/testing_support/preferences_spec.rb b/core/spec/lib/spree/core/testing_support/preferences_spec.rb index 1f070604e1d..338ea0d34cf 100644 --- a/core/spec/lib/spree/core/testing_support/preferences_spec.rb +++ b/core/spec/lib/spree/core/testing_support/preferences_spec.rb @@ -1,28 +1,28 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::TestingSupport::Preferences do - describe '#stub_spree_preferences' do - it 'stubs method calls but does not affect actual stored Spree::Config settings' do - stub_spree_preferences(currency: 'FOO') - expect(Spree::Config.currency).to eq 'FOO' - expect(Spree::Config.preference_store[:currency]).to eq 'USD' + describe "#stub_spree_preferences" do + it "stubs method calls but does not affect actual stored Spree::Config settings" do + stub_spree_preferences(currency: "FOO") + expect(Spree::Config.currency).to eq "FOO" + expect(Spree::Config.preference_store[:currency]).to eq "USD" end end - describe '#with_unfrozen_spree_preference_store' do - it 'changes the original settings, but returns them to original values at exit' do + describe "#with_unfrozen_spree_preference_store" do + it "changes the original settings, but returns them to original values at exit" do with_unfrozen_spree_preference_store do - Spree::Config.currency = 'EUR' - expect(Spree::Config.currency).to eq 'EUR' - expect(Spree::Config.preference_store[:currency]).to eq 'EUR' + Spree::Config.currency = "EUR" + expect(Spree::Config.currency).to eq "EUR" + expect(Spree::Config.preference_store[:currency]).to eq "EUR" end # both the original frozen store and the unfrozen store are unaffected by changes above: - expect(Spree::Config.currency).to eq 'USD' + expect(Spree::Config.currency).to eq "USD" with_unfrozen_spree_preference_store do - expect(Spree::Config.currency).to eq 'USD' + expect(Spree::Config.currency).to eq "USD" end end end diff --git a/core/spec/lib/spree/core/validators/email_spec.rb b/core/spec/lib/spree/core/validators/email_spec.rb index 134da68da7e..c1a299cf221 100644 --- a/core/spec/lib/spree/core/validators/email_spec.rb +++ b/core/spec/lib/spree/core/validators/email_spec.rb @@ -1,38 +1,39 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/core/validators/email' +require "rails_helper" +require "spree/core/validators/email" RSpec.describe Spree::EmailValidator do class Tester include ActiveModel::Validations + attr_accessor :email_address - validates :email_address, 'spree/email' => true + validates :email_address, "spree/email" => true end let(:valid_emails) { [ - 'valid@email.com', - 'valid@email.com.uk', - 'e@email.com', - 'valid+email@email.com', - 'valid-email@email.com', - 'valid_email@email.com', - 'valid.email@email.com' + "valid@email.com", + "valid@email.com.uk", + "e@email.com", + "valid+email@email.com", + "valid-email@email.com", + "valid_email@email.com", + "valid.email@email.com" ] } let(:invalid_emails) { [ - 'invalid email@email.com', - '@email.com', - 'invalidemailemail.com', - '@invalid.email@email.com', - 'invalid@email@email.com', - 'invalid.email@@email.com' + "invalid email@email.com", + "@email.com", + "invalidemailemail.com", + "@invalid.email@email.com", + "invalid@email@email.com", + "invalid.email@@email.com" ] } - it 'validates valid email addresses', :aggregate_failures do + it "validates valid email addresses", :aggregate_failures do tester = Tester.new valid_emails.each do |email| tester.email_address = email @@ -40,7 +41,7 @@ class Tester end end - it 'validates invalid email addresses', :aggregate_failures do + it "validates invalid email addresses", :aggregate_failures do tester = Tester.new invalid_emails.each do |email| tester.email_address = email diff --git a/core/spec/lib/spree/core/version_spec.rb b/core/spec/lib/spree/core/version_spec.rb index 108ae53d277..1bf25ba66e8 100644 --- a/core/spec/lib/spree/core/version_spec.rb +++ b/core/spec/lib/spree/core/version_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true RSpec.describe Spree do - describe '.solidus_version' do + describe ".solidus_version" do it "returns a string" do expect(Spree.solidus_version).to be_a(String) end end - describe '.solidus_gem_version' do + describe ".solidus_gem_version" do it "returns a Gem::Version" do expect(Spree.solidus_gem_version).to be_a(Gem::Version) end diff --git a/core/spec/lib/spree/core/versioned_value_spec.rb b/core/spec/lib/spree/core/versioned_value_spec.rb index cf440425de7..db5e672d734 100644 --- a/core/spec/lib/spree/core/versioned_value_spec.rb +++ b/core/spec/lib/spree/core/versioned_value_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'spec_helper' -require 'spree/core/versioned_value' +require "spec_helper" +require "spree/core/versioned_value" RSpec.describe Spree::Core::VersionedValue do - context 'with no boundaries' do - it 'takes the initial value' do + context "with no boundaries" do + it "takes the initial value" do expect( described_class .new(false) @@ -14,109 +14,109 @@ end end - context 'with a single boundary' do - it 'takes the initial value when the version preceeds' do + context "with a single boundary" do + it "takes the initial value when the version preceeds" do expect( described_class - .new(false, '3.0.0' => true) + .new(false, "3.0.0" => true) .call("2.9.0") ).to be(false) end - it 'takes the new value when the version matches' do + it "takes the new value when the version matches" do expect( described_class - .new(false, '3.0.0' => true) + .new(false, "3.0.0" => true) .call("3.0.0") ).to be(true) end - it 'takes the new value when the version follows' do + it "takes the new value when the version follows" do expect( described_class - .new(false, '3.0.0' => true) + .new(false, "3.0.0" => true) .call("3.1.0") ).to be(true) end - it 'compares as version numbers' do + it "compares as version numbers" do expect( described_class - .new(false, '2.10.0' => true) + .new(false, "2.10.0" => true) .call("2.7.0") ).to be(false) end - it 'sorts pre-releases before releases' do + it "sorts pre-releases before releases" do expect( described_class - .new(false, '3.1.0' => true) + .new(false, "3.1.0" => true) .call("3.1.0.alpha") ).to be(false) end end - context 'with two boundaries' do - it 'takes the initial value when the version preceeds the first boundary' do + context "with two boundaries" do + it "takes the initial value when the version preceeds the first boundary" do expect( described_class - .new(0, '2.0.0' => 1, '3.0.0' => 2) - .call('1.0.0') + .new(0, "2.0.0" => 1, "3.0.0" => 2) + .call("1.0.0") ).to be(0) end - it 'takes the new value after the first boundary when the version matches the first boundary' do + it "takes the new value after the first boundary when the version matches the first boundary" do expect( described_class - .new(0, '2.0.0' => 1, '3.0.0' => 2) - .call('2.0.0') + .new(0, "2.0.0" => 1, "3.0.0" => 2) + .call("2.0.0") ).to be(1) end - it 'takes the new value after the first boundary when the version follows the first boundary but preceeds the second one' do + it "takes the new value after the first boundary when the version follows the first boundary but preceeds the second one" do expect( described_class - .new(0, '2.0.0' => 1, '3.0.0' => 2) - .call('2.5.0') + .new(0, "2.0.0" => 1, "3.0.0" => 2) + .call("2.5.0") ).to be(1) end - it 'takes the new value after the second boundary when the version matches the second boundary' do + it "takes the new value after the second boundary when the version matches the second boundary" do expect( described_class - .new(0, '2.0.0' => 1, '3.0.0' => 2) - .call('3.0.0') + .new(0, "2.0.0" => 1, "3.0.0" => 2) + .call("3.0.0") ).to be(2) end - it 'takes the new value after the second boundary when the version follows the second boundary' do + it "takes the new value after the second boundary when the version follows the second boundary" do expect( described_class - .new(0, '2.0.0' => 1, '3.0.0' => 2) - .call('4.0.0') + .new(0, "2.0.0" => 1, "3.0.0" => 2) + .call("4.0.0") ).to be(2) end - it 'works regardless of the order given to the boundaries' do + it "works regardless of the order given to the boundaries" do expect( described_class - .new(0, '3.0.0' => 2, '2.0.0' => 1) - .call('4.0.0') + .new(0, "3.0.0" => 2, "2.0.0" => 1) + .call("4.0.0") ).to be(2) end - it 'compares as version numbers' do + it "compares as version numbers" do expect( described_class - .new(0, '2.0.0' => 1, '2.10.0' => 2) + .new(0, "2.0.0" => 1, "2.10.0" => 2) .call("2.7.0") ).to be(1) end - it 'sorts pre-releases before releases' do + it "sorts pre-releases before releases" do expect( described_class - .new(0, '3.1.0.alpha' => 1, '3.1.0' => 2) + .new(0, "3.1.0.alpha" => 1, "3.1.0" => 2) .call("3.2.0") ).to be(2) end diff --git a/core/spec/lib/spree/core_spec.rb b/core/spec/lib/spree/core_spec.rb index 7c58f64572c..7899edd6eaa 100644 --- a/core/spec/lib/spree/core_spec.rb +++ b/core/spec/lib/spree/core_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/core' +require "rails_helper" +require "spree/core" RSpec.describe Spree::Core do - it 'loads only the necessary Rails Frameworks' do + it "loads only the necessary Rails Frameworks" do aggregate_failures do expect(defined? ActionCable::Engine).to be_falsey expect(defined? ActionController::Railtie).to be_truthy @@ -19,13 +19,13 @@ end end - describe '.load_defaults' do - it 'load defaults for all available components' do + describe ".load_defaults" do + it "load defaults for all available components" do config_instance_builder = -> { Class.new(Spree::Preferences::Configuration).new } - core = stub_const('Spree::Config', config_instance_builder.() ) - frontend = stub_const('Spree::Frontend::Config', config_instance_builder.() ) - backend = stub_const('Spree::Backend::Config', config_instance_builder.() ) - api = stub_const('Spree::Api::Config', config_instance_builder.() ) + core = stub_const("Spree::Config", config_instance_builder.call) + frontend = stub_const("Spree::Frontend::Config", config_instance_builder.call) + backend = stub_const("Spree::Backend::Config", config_instance_builder.call) + api = stub_const("Spree::Api::Config", config_instance_builder.call) expect(core).to receive(:load_defaults).with(Spree.solidus_version) expect(frontend).to receive(:load_defaults).with(Spree.solidus_version) @@ -36,37 +36,37 @@ end end - describe '.has_install_generator_been_run?' do + describe ".has_install_generator_been_run?" do let(:rails_paths) do - Rails::Paths::Root.new('/').tap do |paths| - paths.add('config/initializers') - paths['config/initializers'] << File.dirname(__FILE__) + Rails::Paths::Root.new("/").tap do |paths| + paths.add("config/initializers") + paths["config/initializers"] << File.dirname(__FILE__) end end - context 'when spree initializer exists' do - it 'returns true' do + context "when spree initializer exists" do + it "returns true" do initializer_name = File.basename(__FILE__) expect( - Spree::Core.has_install_generator_been_run?(rails_paths:, initializer_name:, dummy_app_name: 'Foo') + Spree::Core.has_install_generator_been_run?(rails_paths:, initializer_name:, dummy_app_name: "Foo") ).to be(true) end end context "when initializer doesn't exist in initializers directory" do - it 'returns false' do - initializer_name = 'xxxxxxxxxxxxxxxxxxxxxx' + it "returns false" do + initializer_name = "xxxxxxxxxxxxxxxxxxxxxx" expect( - Spree::Core.has_install_generator_been_run?(rails_paths:, initializer_name:, dummy_app_name: 'Foo') + Spree::Core.has_install_generator_been_run?(rails_paths:, initializer_name:, dummy_app_name: "Foo") ).to be(false) end end - context 'when running test suite with the dummy application loaded' do - it 'returns true' do - initializer_name = 'xxxxxxxxxxxxxxxxxxxxxx' + context "when running test suite with the dummy application loaded" do + it "returns true" do + initializer_name = "xxxxxxxxxxxxxxxxxxxxxx" expect( Spree::Core.has_install_generator_been_run?(rails_paths:, initializer_name:) diff --git a/core/spec/lib/spree/deprecator_spec.rb b/core/spec/lib/spree/deprecator_spec.rb index 1007b074f4c..0ffa0adf274 100644 --- a/core/spec/lib/spree/deprecator_spec.rb +++ b/core/spec/lib/spree/deprecator_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe "Spree.deprecator" do Dummy = Class.new do diff --git a/core/spec/lib/spree/encryptor_spec.rb b/core/spec/lib/spree/encryptor_spec.rb index e55f7106c20..504df01c24a 100644 --- a/core/spec/lib/spree/encryptor_spec.rb +++ b/core/spec/lib/spree/encryptor_spec.rb @@ -1,21 +1,21 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/encryptor' +require "rails_helper" +require "spree/encryptor" RSpec.describe Spree::Encryptor do - let(:key) { 'p3s6v9y$B?E(H+MbQeThWmZq4t7w!z%C' } - let(:value) { 'payment_system_sdk_id' } + let(:key) { "p3s6v9y$B?E(H+MbQeThWmZq4t7w!z%C" } + let(:value) { "payment_system_sdk_id" } - describe '#encrypt' do - it 'returns the encrypted value' do + describe "#encrypt" do + it "returns the encrypted value" do encryptor = described_class.new(key) expect(encryptor.encrypt(value)).not_to eq(value) end end - describe '#decrypt' do - it 'returns the original decrypted value' do + describe "#decrypt" do + it "returns the original decrypted value" do encryptor = described_class.new(key) encrypted_value = encryptor.encrypt(value) diff --git a/core/spec/lib/spree/localized_number_spec.rb b/core/spec/lib/spree/localized_number_spec.rb index c73fcf1940d..2e4996f474b 100644 --- a/core/spec/lib/spree/localized_number_spec.rb +++ b/core/spec/lib/spree/localized_number_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'spec_helper' -require 'spree/localized_number' +require "spec_helper" +require "spree/localized_number" RSpec.describe Spree::LocalizedNumber do context ".parse" do before do I18n.enforce_available_locales = false I18n.locale = I18n.default_locale - I18n.backend.store_translations(:de, { number: { currency: { format: { delimiter: '.', separator: ',' } } } }) + I18n.backend.store_translations(:de, {number: {currency: {format: {delimiter: ".", separator: ","}}}}) end after do @@ -24,14 +24,14 @@ context "with decimal point" do it "captures the proper amount for a formatted price" do - expect(subject.class.parse('1,599.99')).to eql 1599.99 + expect(subject.class.parse("1,599.99")).to eql 1599.99 end end context "with decimal comma" do it "captures the proper amount for a formatted price" do I18n.locale = :de - expect(subject.class.parse('1.599,99')).to eql 1599.99 + expect(subject.class.parse("1.599,99")).to eql 1599.99 end end diff --git a/core/spec/lib/spree/migrations_spec.rb b/core/spec/lib/spree/migrations_spec.rb index 5aa67450e8d..e036f2036fc 100644 --- a/core/spec/lib/spree/migrations_spec.rb +++ b/core/spec/lib/spree/migrations_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe Migrations do @@ -10,7 +10,7 @@ module Spree let(:config) { double("Config", root: "dir") } let(:engine_dir) { "dir/db/migrate" } - let(:app_dir) { 'app/db/migrate' } + let(:app_dir) { "app/db/migrate" } subject { described_class.new(config, "spree") } diff --git a/core/spec/lib/spree/preferences/preference_differentiator_spec.rb b/core/spec/lib/spree/preferences/preference_differentiator_spec.rb index e20778531d3..e7d4c77e823 100644 --- a/core/spec/lib/spree/preferences/preference_differentiator_spec.rb +++ b/core/spec/lib/spree/preferences/preference_differentiator_spec.rb @@ -1,36 +1,36 @@ # frozen_string_literal: true -require 'spec_helper' -require 'spree/preferences/preference_differentiator' -require 'spree/preferences/configuration' +require "spec_helper" +require "spree/preferences/preference_differentiator" +require "spree/preferences/configuration" RSpec.describe Spree::Preferences::PreferenceDifferentiator do - it 'includes defaults that have changed' do + it "includes defaults that have changed" do config_class = Class.new(Spree::Preferences::Configuration) do - versioned_preference :foo, :boolean, initial_value: true, boundaries: { '3.0' => false } + versioned_preference :foo, :boolean, initial_value: true, boundaries: {"3.0" => false} end - changes = described_class.new(config_class).call(from: '2.0', to: '3.0') + changes = described_class.new(config_class).call(from: "2.0", to: "3.0") - expect(changes).to include(foo: { from: true, to: false }) + expect(changes).to include(foo: {from: true, to: false}) end it "doesn't include defaults that have not changed" do config_class = Class.new(Spree::Preferences::Configuration) do - versioned_preference :foo, :boolean, initial_value: true, boundaries: { '3.0' => false } + versioned_preference :foo, :boolean, initial_value: true, boundaries: {"3.0" => false} end - changes = described_class.new(config_class).call(from: '2.0', to: '2.5') + changes = described_class.new(config_class).call(from: "2.0", to: "2.5") expect(changes.keys).not_to include(:foo) end it "doesn't include not versioned defaults that can'be compared for equality" do config_class = Class.new(Spree::Preferences::Configuration) do - preference :foo, :boolean, default: proc { proc { } } + preference :foo, :boolean, default: proc { proc {} } end - changes = described_class.new(config_class).call(from: '2.0', to: '2.5') + changes = described_class.new(config_class).call(from: "2.0", to: "2.5") expect(changes.keys).not_to include(:foo) end diff --git a/core/spec/lib/spree/testing_support/factory_bot_spec.rb b/core/spec/lib/spree/testing_support/factory_bot_spec.rb index 8d68bd59bbc..7a99b242ad2 100644 --- a/core/spec/lib/spree/testing_support/factory_bot_spec.rb +++ b/core/spec/lib/spree/testing_support/factory_bot_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" require "spree/testing_support/factory_bot" RSpec.describe Spree::TestingSupport::FactoryBot do diff --git a/core/spec/lib/tasks/dummy_task_spec.rb b/core/spec/lib/tasks/dummy_task_spec.rb index c5af5e9e8f1..d03b041dbb6 100644 --- a/core/spec/lib/tasks/dummy_task_spec.rb +++ b/core/spec/lib/tasks/dummy_task_spec.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" -RSpec.describe 'dummy_task' do +RSpec.describe "dummy_task" do include_context( - 'rake', - task_name: 'dummy_task', - task_path: Spree::Core::Engine.root.join('spec/lib/tasks/dummy_task.rake'), + "rake", + task_name: "dummy_task", + task_path: Spree::Core::Engine.root.join("spec/lib/tasks/dummy_task.rake") ) - it 'calls the dummy task exactly once' do + it "calls the dummy task exactly once" do expect(DummyTaskRunner).to receive(:run).once task.invoke end diff --git a/core/spec/lib/tasks/payment_method_spec.rb b/core/spec/lib/tasks/payment_method_spec.rb index 9ea9b7310b6..ce033a02207 100644 --- a/core/spec/lib/tasks/payment_method_spec.rb +++ b/core/spec/lib/tasks/payment_method_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" -RSpec.describe 'payment_method:deactivate_unsupported_payment_methods' do +RSpec.describe "payment_method:deactivate_unsupported_payment_methods" do include_context( - 'rake', - task_name: 'payment_method:deactivate_unsupported_payment_methods', - task_path: Spree::Core::Engine.root.join('lib/tasks/payment_method.rake'), + "rake", + task_name: "payment_method:deactivate_unsupported_payment_methods", + task_path: Spree::Core::Engine.root.join("lib/tasks/payment_method.rake") ) let!(:unsupported_payment_method_id) { 0 } @@ -18,7 +18,7 @@ def unsupported_payment_method_reloaded end before do - unsupported_payment_method.update type: 'UnsupportedPaymentMethod' + unsupported_payment_method.update type: "UnsupportedPaymentMethod" end context "with an unsupported payment method" do @@ -36,11 +36,11 @@ def unsupported_payment_method_reloaded subject { unsupported_payment_method_reloaded } it "sets payment method type to 'Spree::PaymentMethod'" do - expect(subject.type).to eq 'Spree::PaymentMethod' + expect(subject.type).to eq "Spree::PaymentMethod" end it "sets payment method type_before_removal correctly" do - expect(subject.type_before_removal).to eq 'UnsupportedPaymentMethod' + expect(subject.type_before_removal).to eq "UnsupportedPaymentMethod" end it "resets payment method active flag" do diff --git a/core/spec/lib/tasks/solidus/delete_prices_with_nil_amount_spec.rb b/core/spec/lib/tasks/solidus/delete_prices_with_nil_amount_spec.rb index 4b59790a98f..d8fa9f3dea0 100644 --- a/core/spec/lib/tasks/solidus/delete_prices_with_nil_amount_spec.rb +++ b/core/spec/lib/tasks/solidus/delete_prices_with_nil_amount_spec.rb @@ -1,18 +1,18 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" -path = Spree::Core::Engine.root.join('lib/tasks/solidus/delete_prices_with_nil_amount.rake') +path = Spree::Core::Engine.root.join("lib/tasks/solidus/delete_prices_with_nil_amount.rake") -RSpec.describe 'solidus' do - describe 'delete_prices_with_nil_amount' do +RSpec.describe "solidus" do + describe "delete_prices_with_nil_amount" do include_context( - 'rake', + "rake", task_path: path, - task_name: 'solidus:delete_prices_with_nil_amount' + task_name: "solidus:delete_prices_with_nil_amount" ) - it 'removes all prices which amount column is NULL' do + it "removes all prices which amount column is NULL" do price = create(:price) with_discarded = instance_double("Spree::Price::ActiveRecord_Relation", where: Spree::Price.where(id: price)) diff --git a/core/spec/mailers/carton_mailer_spec.rb b/core/spec/mailers/carton_mailer_spec.rb index 7193b47d91f..4f5d678d87f 100644 --- a/core/spec/mailers/carton_mailer_spec.rb +++ b/core/spec/mailers/carton_mailer_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::CartonMailer do let(:carton) { create(:carton) } @@ -9,8 +9,8 @@ # Regression test for https://github.com/spree/spree/issues/2196 it "doesn't include out of stock in the email body" do shipment_email = Spree::CartonMailer.shipped_email(order:, carton:) - expect(shipment_email.parts.first.body).not_to include(%{Out of Stock}) - expect(shipment_email.parts.first.body).to include(%{Your order has been shipped}) + expect(shipment_email.parts.first.body).not_to include(%(Out of Stock)) + expect(shipment_email.parts.first.body).to include(%(Your order has been shipped)) expect(shipment_email.subject).to eq "#{order.store.name} Shipment Notification ##{order.number}" end @@ -18,16 +18,16 @@ subject do Spree::CartonMailer.shipped_email(order:, carton:, resend: true).subject end - it { is_expected.to match /^\[RESEND\] / } + it { is_expected.to match(/^\[RESEND\] /) } end context "emails must be translatable" do context "shipped_email" do context "pt-BR locale" do before do - pt_br_shipped_email = { spree: { shipment_mailer: { shipped_email: { dear_customer: 'Caro Cliente,' } } } } - I18n.backend.store_translations :'pt-BR', pt_br_shipped_email - I18n.locale = :'pt-BR' + pt_br_shipped_email = {spree: {shipment_mailer: {shipped_email: {dear_customer: "Caro Cliente,"}}}} + I18n.backend.store_translations :"pt-BR", pt_br_shipped_email + I18n.locale = :"pt-BR" end after do diff --git a/core/spec/mailers/order_mailer_spec.rb b/core/spec/mailers/order_mailer_spec.rb index 24bfe66e6cd..729d8283b37 100644 --- a/core/spec/mailers/order_mailer_spec.rb +++ b/core/spec/mailers/order_mailer_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::OrderMailer, type: :mailer do let(:order) do order = create(:order) - product = stub_model(Spree::Product, name: %{The "BEST" product}) + product = stub_model(Spree::Product, name: %(The "BEST" product)) variant = stub_model(Spree::Variant, product:) price = stub_model(Spree::Price, variant:, amount: 5.00) store = FactoryBot.build :store, mail_from_address: "store@example.com", bcc_email: "bcc@example.com" @@ -37,7 +37,7 @@ :adjustment, adjustable: order, order:, - label: 'Order Adjustment' + label: "Order Adjustment" ) end @@ -75,11 +75,11 @@ context "pt-BR locale" do before do I18n.enforce_available_locales = false - pt_br_confirm_mail = { spree: { order_mailer: { confirm_email: { dear_customer: 'Caro Cliente,' } } } } - pt_br_cancel_mail = { spree: { order_mailer: { cancel_email: { order_summary_canceled: 'Resumo da Pedido [CANCELADA]' } } } } - I18n.backend.store_translations :'pt-BR', pt_br_confirm_mail - I18n.backend.store_translations :'pt-BR', pt_br_cancel_mail - I18n.locale = :'pt-BR' + pt_br_confirm_mail = {spree: {order_mailer: {confirm_email: {dear_customer: "Caro Cliente,"}}}} + pt_br_cancel_mail = {spree: {order_mailer: {cancel_email: {order_summary_canceled: "Resumo da Pedido [CANCELADA]"}}}} + I18n.backend.store_translations :"pt-BR", pt_br_confirm_mail + I18n.backend.store_translations :"pt-BR", pt_br_cancel_mail + I18n.locale = :"pt-BR" end after do diff --git a/core/spec/mailers/reimbursement_mailer_spec.rb b/core/spec/mailers/reimbursement_mailer_spec.rb index 26647fbd495..5f62ec7b3e7 100644 --- a/core/spec/mailers/reimbursement_mailer_spec.rb +++ b/core/spec/mailers/reimbursement_mailer_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::ReimbursementMailer, type: :mailer do let(:reimbursement) { create(:reimbursement) } @@ -16,9 +16,9 @@ context "pt-BR locale" do before do I18n.enforce_available_locales = false - pt_br_shipped_email = { spree: { reimbursement_mailer: { reimbursement_email: { dear_customer: 'Caro Cliente,' } } } } - I18n.backend.store_translations :'pt-BR', pt_br_shipped_email - I18n.locale = :'pt-BR' + pt_br_shipped_email = {spree: {reimbursement_mailer: {reimbursement_email: {dear_customer: "Caro Cliente,"}}}} + I18n.backend.store_translations :"pt-BR", pt_br_shipped_email + I18n.locale = :"pt-BR" end after do diff --git a/core/spec/models/spree/ability_spec.rb b/core/spec/models/spree/ability_spec.rb index c0fb60fa2d6..e3e0c7554f8 100644 --- a/core/spec/models/spree/ability_spec.rb +++ b/core/spec/models/spree/ability_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'rails_helper' -require 'cancan' -require 'cancan/matchers' -require 'spree/testing_support/ability_helpers' +require "rails_helper" +require "cancan" +require "cancan/matchers" +require "spree/testing_support/ability_helpers" RSpec.describe Spree::Ability, type: :model do let(:user) { build(:user) } @@ -18,15 +18,15 @@ subject { Spree::Ability.new(user) } it "activates permissions from the role configuration" do - expect(Spree::Config.roles).to receive(:activate_permissions!). - once + expect(Spree::Config.roles).to receive(:activate_permissions!) + .once subject end end - context 'register_ability' do - it 'should add the ability to the list of abilties' do + context "register_ability" do + it "should add the ability to the list of abilties" do foo_ability = Class.new do include CanCan::Ability @@ -39,7 +39,7 @@ def initialize(_user) expect(Spree::Ability.new(user).abilities).not_to be_empty end - it 'should apply the registered abilities permissions' do + it "should apply the registered abilities permissions" do foo_ability = Class.new do include CanCan::Ability @@ -56,22 +56,22 @@ def initialize(_user) end end - context 'for general resource' do + context "for general resource" do let(:resource) { Object.new } - context 'with admin user' do + context "with admin user" do let(:user) { create :admin_user } - it_should_behave_like 'access granted' - it_should_behave_like 'index allowed' + it_should_behave_like "access granted" + it_should_behave_like "index allowed" end - context 'with customer' do - it_should_behave_like 'access denied' - it_should_behave_like 'no index allowed' + context "with customer" do + it_should_behave_like "access denied" + it_should_behave_like "no index allowed" end end - context 'for admin protected resources' do + context "for admin protected resources" do let(:resource) { Object.new } let(:resource_shipment) { Spree::Shipment.new } let(:resource_product) { Spree::Product.new } @@ -80,9 +80,9 @@ def initialize(_user) let(:fakedispatch_user) { Spree.user_class.create } let(:fakedispatch_ability) { Spree::Ability.new(fakedispatch_user) } - context 'with admin user' do - it 'should be able to admin' do - user.spree_roles << Spree::Role.find_or_create_by(name: 'admin') + context "with admin user" do + it "should be able to admin" do + user.spree_roles << Spree::Role.find_or_create_by(name: "admin") expect(ability).to be_able_to :admin, resource expect(ability).to be_able_to :index, resource_order expect(ability).to be_able_to :show, resource_product @@ -90,15 +90,15 @@ def initialize(_user) end end - context 'with fakedispatch user' do - it 'should be able to admin on the order and shipment pages' do - user.spree_roles << Spree::Role.find_or_create_by(name: 'bar') + context "with fakedispatch user" do + it "should be able to admin on the order and shipment pages" do + user.spree_roles << Spree::Role.find_or_create_by(name: "bar") bar_ability = Class.new do include CanCan::Ability def initialize(user) - if user.has_spree_role? 'bar' + if user.has_spree_role? "bar" can [:admin, :index, :show], Spree::Order can [:admin, :manage], Spree::Shipment end @@ -131,8 +131,8 @@ def initialize(user) end end - context 'with customer' do - it 'should not be able to admin' do + context "with customer" do + it "should not be able to admin" do expect(ability).not_to be_able_to :admin, resource expect(ability).not_to be_able_to :admin, resource_order expect(ability).not_to be_able_to :admin, resource_product @@ -141,149 +141,149 @@ def initialize(user) end end - context 'as Guest User' do - context 'for Country' do + context "as Guest User" do + context "for Country" do let(:resource) { Spree::Country.new } - context 'requested by any user' do - it_should_behave_like 'read only' + context "requested by any user" do + it_should_behave_like "read only" end end - context 'for OptionType' do + context "for OptionType" do let(:resource) { Spree::OptionType.new } - context 'requested by any user' do - it_should_behave_like 'read only' + context "requested by any user" do + it_should_behave_like "read only" end end - context 'for OptionValue' do + context "for OptionValue" do let(:resource) { Spree::OptionType.new } - context 'requested by any user' do - it_should_behave_like 'read only' + context "requested by any user" do + it_should_behave_like "read only" end end - context 'for Order' do + context "for Order" do let(:resource) { Spree::Order.new } - context 'requested by same user' do + context "requested by same user" do before(:each) { resource.user = user } - it_should_behave_like 'access granted' - it_should_behave_like 'no index allowed' + it_should_behave_like "access granted" + it_should_behave_like "no index allowed" end - context 'requested by other user' do + context "requested by other user" do before(:each) { resource.user = Spree.user_class.new } it { expect(ability).not_to be_able_to(:show, resource) } it { expect(ability).to_not be_able_to(:create, resource) } end - context 'requested with proper token' do - let(:token) { 'TOKEN123' } - before(:each) { allow(resource).to receive_messages guest_token: 'TOKEN123' } - it_should_behave_like 'access granted' - it_should_behave_like 'no index allowed' + context "requested with proper token" do + let(:token) { "TOKEN123" } + before(:each) { allow(resource).to receive_messages guest_token: "TOKEN123" } + it_should_behave_like "access granted" + it_should_behave_like "no index allowed" end - context 'requested with inproper token' do - let(:token) { 'FAIL' } - before(:each) { allow(resource).to receive_messages guest_token: 'TOKEN123' } + context "requested with inproper token" do + let(:token) { "FAIL" } + before(:each) { allow(resource).to receive_messages guest_token: "TOKEN123" } it { expect(ability).not_to be_able_to(:show, resource, token) } it { expect(ability).to_not be_able_to(:create, resource, token) } end end - context 'for Product' do + context "for Product" do let(:resource) { Spree::Product.new } - context 'requested by any user' do - it_should_behave_like 'read only' + context "requested by any user" do + it_should_behave_like "read only" end end - context 'for ProductProperty' do + context "for ProductProperty" do let(:resource) { Spree::Product.new } - context 'requested by any user' do - it_should_behave_like 'read only' + context "requested by any user" do + it_should_behave_like "read only" end end - context 'for Property' do + context "for Property" do let(:resource) { Spree::Product.new } - context 'requested by any user' do - it_should_behave_like 'read only' + context "requested by any user" do + it_should_behave_like "read only" end end - context 'for State' do + context "for State" do let(:resource) { Spree::State.new } - context 'requested by any user' do - it_should_behave_like 'read only' + context "requested by any user" do + it_should_behave_like "read only" end end - context 'for Stock Item' do + context "for Stock Item" do let(:resource) { Spree::StockItem.new } - context 'active stock location' do + context "active stock location" do before { resource.build_stock_location(active: true) } - it_should_behave_like 'read only' + it_should_behave_like "read only" end - context 'inactive stock location' do + context "inactive stock location" do before { resource.build_stock_location(active: false) } - it_should_behave_like 'access denied' + it_should_behave_like "access denied" end end - context 'for Stock Location' do + context "for Stock Location" do let(:resource) { Spree::StockLocation.new } - context 'active' do + context "active" do before { resource.active = true } - it_should_behave_like 'read only' + it_should_behave_like "read only" end - context 'inactive' do + context "inactive" do before { resource.active = false } - it_should_behave_like 'access denied' + it_should_behave_like "access denied" end end - context 'for Taxons' do + context "for Taxons" do let(:resource) { Spree::Taxon.new } - context 'requested by any user' do - it_should_behave_like 'read only' + context "requested by any user" do + it_should_behave_like "read only" end end - context 'for Taxonomy' do + context "for Taxonomy" do let(:resource) { Spree::Taxonomy.new } - context 'requested by any user' do - it_should_behave_like 'read only' + context "requested by any user" do + it_should_behave_like "read only" end end - context 'for User' do - context 'requested by same user' do + context "for User" do + context "requested by same user" do let(:resource) { user } - it_should_behave_like 'access granted' - it_should_behave_like 'no index allowed' + it_should_behave_like "access granted" + it_should_behave_like "no index allowed" end - context 'requested by other user' do + context "requested by other user" do let(:resource) { Spree.user_class.create } - it_should_behave_like 'create only' + it_should_behave_like "create only" end end - context 'for Variant' do + context "for Variant" do let(:resource) { Spree::Variant.new } - context 'requested by any user' do - it_should_behave_like 'read only' + context "requested by any user" do + it_should_behave_like "read only" end end - context 'for Zone' do + context "for Zone" do let(:resource) { Spree::Zone.new } - context 'requested by any user' do - it_should_behave_like 'read only' + context "requested by any user" do + it_should_behave_like "read only" end end end diff --git a/core/spec/models/spree/address/name_spec.rb b/core/spec/models/spree/address/name_spec.rb index cad4baace74..e381ea64a5e 100644 --- a/core/spec/models/spree/address/name_spec.rb +++ b/core/spec/models/spree/address/name_spec.rb @@ -1,25 +1,25 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Address::Name do - it 'concatenates components to form a full name' do - name = described_class.new('Jane', 'Von', 'Doe') + it "concatenates components to form a full name" do + name = described_class.new("Jane", "Von", "Doe") - expect(name.to_s).to eq('Jane Von Doe') + expect(name.to_s).to eq("Jane Von Doe") end - it 'keeps first name and last name' do - name = described_class.new('Jane', 'Doe') + it "keeps first name and last name" do + name = described_class.new("Jane", "Doe") - expect(name.first_name).to eq('Jane') - expect(name.last_name).to eq('Doe') + expect(name.first_name).to eq("Jane") + expect(name.last_name).to eq("Doe") end - it 'splits full name to emulate first name and last name' do - name = described_class.new('Jane Von Doe') + it "splits full name to emulate first name and last name" do + name = described_class.new("Jane Von Doe") - expect(name.first_name).to eq('Jane') - expect(name.last_name).to eq('Von Doe') + expect(name.first_name).to eq("Jane") + expect(name.last_name).to eq("Von Doe") end end diff --git a/core/spec/models/spree/address/state_validator_spec.rb b/core/spec/models/spree/address/state_validator_spec.rb index 464afad91ed..c90d17a2a87 100644 --- a/core/spec/models/spree/address/state_validator_spec.rb +++ b/core/spec/models/spree/address/state_validator_spec.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Address::StateValidator do let(:country) { create :country, states_required: true } - let(:state) { create :state, name: 'maryland', abbr: 'md', country: } + let(:state) { create :state, name: "maryland", abbr: "md", country: } let(:address) { build(:address, country:) } subject { described_class.new(address).perform } - describe 'state attributes normalization' do + describe "state attributes normalization" do context "having a country with no states" do before do address.country = country @@ -60,10 +60,10 @@ end it "sets the state having the specified state name" do - expect { subject }. - to change{ [address.state, address.state_name] }. - from([nil, state.name]). - to([state, nil]) + expect { subject } + .to change { [address.state, address.state_name] } + .from([nil, state.name]) + .to([state, nil]) end end end @@ -97,14 +97,14 @@ end end - context 'address requires state' do + context "address requires state" do before do stub_spree_preferences(address_requires_state: true) end it "state_name is not nil and country does not have any states" do address.state = nil - address.state_name = 'alabama' + address.state_name = "alabama" subject @@ -117,22 +117,22 @@ subject - expect(address.errors.messages).to eq({ state: ["can't be blank"] }) + expect(address.errors.messages).to eq({state: ["can't be blank"]}) end context "state country doesn't match the address' country" do context "with address country having states" do - let(:italy) { create(:country, iso: 'IT', states_required: true) } + let(:italy) { create(:country, iso: "IT", states_required: true) } let!(:it_state) { create(:state, country: italy) } - let(:us_state) { create(:state, country_iso: 'US') } + let(:us_state) { create(:state, country_iso: "US") } - it 'is invalid' do + it "is invalid" do address.country = italy address.state = us_state subject - expect(address.errors["state"]).to eq(['does not match the country']) + expect(address.errors["state"]).to eq(["does not match the country"]) end end end diff --git a/core/spec/models/spree/address_spec.rb b/core/spec/models/spree/address_spec.rb index 4aa945f7391..a9b4d9bda4b 100644 --- a/core/spec/models/spree/address_spec.rb +++ b/core/spec/models/spree/address_spec.rb @@ -1,22 +1,22 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Address, type: :model do subject { Spree::Address } context "validation" do let(:country) { create :country, states_required: true } - let(:state) { create :state, name: 'maryland', abbr: 'md', country: } + let(:state) { create :state, name: "maryland", abbr: "md", country: } let(:address) { build(:address, country:) } - context 'state validation' do + context "state validation" do let(:state_validator) { instance_spy(Spree::Address.state_validator_class) } it "calls the state validator" do - allow(Spree::Address.state_validator_class). - to receive(:new).with(address). - and_return(state_validator) + allow(Spree::Address.state_validator_class) + .to receive(:new).with(address) + .and_return(state_validator) expect(state_validator).to receive(:perform) address.valid? end @@ -29,7 +29,7 @@ address.state = nil address.state_name = nil expect(address.valid?).to eq(false) - expect(address.errors['state']).to eq(["can't be blank"]) + expect(address.errors["state"]).to eq(["can't be blank"]) end end @@ -42,7 +42,7 @@ it "requires zipcode" do address.zipcode = "" address.valid? - expect(address.errors['zipcode']).to include("can't be blank") + expect(address.errors["zipcode"]).to include("can't be blank") end context "phone not required" do @@ -70,7 +70,7 @@ context "no user given" do let!(:default_country) { create(:country) } - context 'has a default country' do + context "has a default country" do before do stub_spree_preferences(default_country_iso: default_country.iso) end @@ -79,23 +79,23 @@ expect(Spree::Address.build_default.country).to eq default_country end - it 'accepts other attributes' do - address = Spree::Address.build_default(name: 'Ryan') + it "accepts other attributes" do + address = Spree::Address.build_default(name: "Ryan") expect(address.country).to eq default_country - expect(address.name).to eq 'Ryan' + expect(address.name).to eq "Ryan" end - it 'accepts a block' do + it "accepts a block" do address = Spree::Address.build_default do |record| - record.name = 'Ryan' + record.name = "Ryan" end expect(address.country).to eq default_country - expect(address.name).to eq 'Ryan' + expect(address.name).to eq "Ryan" end - it 'can override the country' do + it "can override the country" do another_country = build :country address = Spree::Address.build_default(country: another_country) @@ -113,12 +113,12 @@ end end - context '.factory' do - context 'with attributes that use setters defined in Address' do + context ".factory" do + context "with attributes that use setters defined in Address" do let(:address_attributes) { attributes_for(:address, country_id: nil, country_iso: country.iso) } - let(:country) { create(:country, iso: 'ZW') } + let(:country) { create(:country, iso: "ZW") } - it 'uses the setters' do + it "uses the setters" do expect(subject.factory(address_attributes).country_id).to eq(country.id) end end @@ -140,15 +140,15 @@ context "no existing address supplied" do let(:existing_address) { nil } - context 'and there is not a matching address in the database' do + context "and there is not a matching address in the database" do it "returns new Address matching attributes given" do expect(subject.attributes).to be_address_equivalent_attributes(new_address_attributes) end end - context 'and there is a matching address in the database' do + context "and there is a matching address in the database" do let(:new_address_attributes) { Spree::Address.value_attributes(matching_address.attributes) } - let!(:matching_address) { create(:address, name: 'Jordan') } + let!(:matching_address) { create(:address, name: "Jordan") } it "returns the matching address" do expect(subject.attributes).to be_address_equivalent_attributes(new_address_attributes) @@ -175,11 +175,11 @@ end end - context 'and changed address matches an existing address' do + context "and changed address matches an existing address" do let(:new_address_attributes) { Spree::Address.value_attributes(matching_address.attributes) } - let!(:matching_address) { create(:address, name: 'Jordan') } + let!(:matching_address) { create(:address, name: "Jordan") } - it 'returns the matching address' do + it "returns the matching address" do expect(subject.attributes).to be_address_equivalent_attributes(new_address_attributes) expect(subject.id).to eq(matching_address.id) end @@ -187,125 +187,125 @@ end end - describe '.value_attributes' do + describe ".value_attributes" do subject do Spree::Address.value_attributes(base_attributes, merge_attributes) end - context 'with symbols and strings' do - let(:base_attributes) { { 'address1' => '1234 way', 'address2' => 'apt 2' } } - let(:merge_attributes) { { address1: '5678 way' } } + context "with symbols and strings" do + let(:base_attributes) { {"address1" => "1234 way", "address2" => "apt 2"} } + let(:merge_attributes) { {address1: "5678 way"} } - it 'stringifies and merges the keys' do - expect(subject).to eq('address1' => '5678 way', 'address2' => 'apt 2') + it "stringifies and merges the keys" do + expect(subject).to eq("address1" => "5678 way", "address2" => "apt 2") end end - context 'with database-only attributes' do + context "with database-only attributes" do let(:base_attributes) do { - 'id' => 1, - 'created_at' => Time.current, - 'updated_at' => Time.current, - 'address1' => '1234 way' + "id" => 1, + "created_at" => Time.current, + "updated_at" => Time.current, + "address1" => "1234 way" } end let(:merge_attributes) do { - 'updated_at' => Time.current, - 'address2' => 'apt 2' + "updated_at" => Time.current, + "address2" => "apt 2" } end - it 'removes the database-only addresses' do - expect(subject).to eq('address1' => '1234 way', 'address2' => 'apt 2') + it "removes the database-only addresses" do + expect(subject).to eq("address1" => "1234 way", "address2" => "apt 2") end end end - describe '.taxation_attributes' do - context 'both taxation and non-taxation attributes are present ' do - let(:address) { Spree::Address.new name: 'Michael Jackson', state_id: 1, country_id: 2, zipcode: '12345' } + describe ".taxation_attributes" do + context "both taxation and non-taxation attributes are present " do + let(:address) { Spree::Address.new name: "Michael Jackson", state_id: 1, country_id: 2, zipcode: "12345" } - it 'removes the non-taxation attributes' do - expect(address.taxation_attributes).not_to eq('name' => 'Michael Jackson') + it "removes the non-taxation attributes" do + expect(address.taxation_attributes).not_to eq("name" => "Michael Jackson") end - it 'returns only the taxation attributes' do - expect(address.taxation_attributes).to eq('state_id' => 1, 'country_id' => 2, 'zipcode' => '12345') + it "returns only the taxation attributes" do + expect(address.taxation_attributes).to eq("state_id" => 1, "country_id" => 2, "zipcode" => "12345") end end - context 'taxation attributes are blank' do - let(:address) { Spree::Address.new name: 'Michael Jackson' } + context "taxation attributes are blank" do + let(:address) { Spree::Address.new name: "Michael Jackson" } - it 'returns a subset of the attributes with the correct keys and nil values' do - expect(address.taxation_attributes).to eq('state_id' => nil, 'country_id' => nil, 'zipcode' => nil) + it "returns a subset of the attributes with the correct keys and nil values" do + expect(address.taxation_attributes).to eq("state_id" => nil, "country_id" => nil, "zipcode" => nil) end end end - context '#country_iso=' do + context "#country_iso=" do let(:address) { build(:address, country_id: nil) } - let(:country) { create(:country, iso: 'ZW') } + let(:country) { create(:country, iso: "ZW") } - it 'sets the country to the country with the matching iso code' do + it "sets the country to the country with the matching iso code" do address.country_iso = country.iso expect(address.country_id).to eq(country.id) end - it 'raises an exception if the iso is not found' do + it "raises an exception if the iso is not found" do expect { address.country_iso = "NOCOUNTRY" }.to raise_error(::ActiveRecord::RecordNotFound, /Couldn't find Spree::Country/) end end - context '#name' do - it 'is included in json representation' do - address = Spree::Address.new(name: 'Jane Von Doe') + context "#name" do + it "is included in json representation" do + address = Spree::Address.new(name: "Jane Von Doe") - expect(address.as_json).to include('name' => 'Jane Von Doe') - expect(address.as_json.keys).not_to include('firstname', 'lastname') + expect(address.as_json).to include("name" => "Jane Von Doe") + expect(address.as_json.keys).not_to include("firstname", "lastname") end end - context '#state_text' do - context 'state is blank' do - let(:address) { Spree::Address.new state: nil, state_name: 'virginia' } - specify { expect(address.state_text).to eq('virginia') } + context "#state_text" do + context "state is blank" do + let(:address) { Spree::Address.new state: nil, state_name: "virginia" } + specify { expect(address.state_text).to eq("virginia") } end - context 'both name and abbr is present' do - let(:state) { Spree::State.new name: 'virginia', abbr: 'va' } + context "both name and abbr is present" do + let(:state) { Spree::State.new name: "virginia", abbr: "va" } let(:address) { Spree::Address.new state: } - specify { expect(address.state_text).to eq('va') } + specify { expect(address.state_text).to eq("va") } end - context 'only name is present' do - let(:state) { Spree::State.new name: 'virginia', abbr: nil } + context "only name is present" do + let(:state) { Spree::State.new name: "virginia", abbr: nil } let(:address) { Spree::Address.new state: } - specify { expect(address.state_text).to eq('virginia') } + specify { expect(address.state_text).to eq("virginia") } end end - context '#requires_phone' do + context "#requires_phone" do subject { described_class.new } it { is_expected.to be_require_phone } end - describe 'enum reverse_charge_status' do - it 'defines the expected enum values' do + describe "enum reverse_charge_status" do + it "defines the expected enum values" do expect(Spree::Address.reverse_charge_statuses).to eq({ - 'disabled' => 0, - 'enabled' => 1, - 'not_validated' => 2 + "disabled" => 0, + "enabled" => 1, + "not_validated" => 2 }) end - context 'allows valid values' do - it 'has not_validated value' do + context "allows valid values" do + it "has not_validated value" do address = build(:address) # Updates the reverse_charge_status to "not_validated" address.reverse_charge_status_not_validated! @@ -313,7 +313,7 @@ expect(address).to be_valid end - it 'has disabled value' do + it "has disabled value" do address = build(:address) # Updates the reverse_charge_status to "disabled" address.reverse_charge_status_disabled! @@ -321,7 +321,7 @@ expect(address).to be_valid end - it 'has enabled value' do + it "has enabled value" do address = build(:address) # Updates the reverse_charge_status to "enabled" address.reverse_charge_status_enabled! @@ -330,21 +330,21 @@ end end - it 'raises an error for invalid values' do + it "raises an error for invalid values" do expect { Spree::Address.new(reverse_charge_status: :invalid_status) }.to raise_error(ArgumentError) end end - context 'ensure fields are stored' do + context "ensure fields are stored" do let(:address) { build(:address) } - it 'saves email correctly' do - address.email = 'test@example.com' + it "saves email correctly" do + address.email = "test@example.com" expect(address.save).to be true end - it 'saves vat_id correctly' do - address.vat_id = 'AB123' + it "saves vat_id correctly" do + address.vat_id = "AB123" expect(address.save).to be true end end diff --git a/core/spec/models/spree/adjustment_reason_spec.rb b/core/spec/models/spree/adjustment_reason_spec.rb index b8a33d2aed3..b47dd3161e4 100644 --- a/core/spec/models/spree/adjustment_reason_spec.rb +++ b/core/spec/models/spree/adjustment_reason_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::AdjustmentReason do - describe 'creation' do - it 'is successful' do + describe "creation" do + it "is successful" do create(:adjustment_reason) end end diff --git a/core/spec/models/spree/adjustment_spec.rb b/core/spec/models/spree/adjustment_spec.rb index f2a8df00b74..a4c075557e8 100644 --- a/core/spec/models/spree/adjustment_spec.rb +++ b/core/spec/models/spree/adjustment_spec.rb @@ -1,18 +1,18 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Adjustment, type: :model do let!(:store) { create :store } let(:order) { create :order } let(:line_item) { create :line_item, order: } - let(:adjustment) { Spree::Adjustment.create!(label: 'Adjustment', adjustable: order, order:, amount: 5) } + let(:adjustment) { Spree::Adjustment.create!(label: "Adjustment", adjustable: order, order:, amount: 5) } - context '#save' do + context "#save" do let(:adjustment) { Spree::Adjustment.create(label: "Adjustment", amount: 5, order:, adjustable: line_item) } - it 'touches the adjustable' do + it "touches the adjustable" do line_item.update_columns(updated_at: 1.day.ago) expect { adjustment.save! }.to change { line_item.updated_at } end @@ -24,7 +24,7 @@ it { is_expected.to eq(Spree::Adjustment.all.to_sql) } end - describe 'non_tax scope' do + describe "non_tax scope" do subject do Spree::Adjustment.non_tax.to_a end @@ -34,33 +34,33 @@ end let!(:non_tax_adjustment_with_source) do - create(:adjustment, adjustable: order, order:, source_type: 'Spree::Order', source_id: nil) + create(:adjustment, adjustable: order, order:, source_type: "Spree::Order", source_id: nil) end let!(:non_tax_adjustment_without_source) do create(:adjustment, adjustable: order, order:, source: nil) end - it 'select non-tax adjustments' do + it "select non-tax adjustments" do expect(subject).to_not include tax_adjustment - expect(subject).to include non_tax_adjustment_with_source - expect(subject).to include non_tax_adjustment_without_source + expect(subject).to include non_tax_adjustment_with_source + expect(subject).to include non_tax_adjustment_without_source end end - context '#currency' do - let(:order) { create :order, currency: 'JPY' } + context "#currency" do + let(:order) { create :order, currency: "JPY" } - it 'returns the adjustables currency' do - expect(adjustment.currency).to eq 'JPY' + it "returns the adjustables currency" do + expect(adjustment.currency).to eq "JPY" end - context 'adjustable is nil' do + context "adjustable is nil" do before do adjustment.adjustable = nil end - it 'uses the global currency of USD' do - expect(adjustment.currency).to eq 'USD' + it "uses the global currency of USD" do + expect(adjustment.currency).to eq "USD" end end end @@ -73,7 +73,7 @@ end context "with currency set to JPY" do - let(:order) { create :order, currency: 'JPY' } + let(:order) { create :order, currency: "JPY" } context "when adjustable is set to an order" do it "displays in JPY" do diff --git a/core/spec/models/spree/asset_spec.rb b/core/spec/models/spree/asset_spec.rb index 1472f2d1e0b..0f4f18988a0 100644 --- a/core/spec/models/spree/asset_spec.rb +++ b/core/spec/models/spree/asset_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Asset, type: :model do describe "#viewable" do @@ -15,8 +15,8 @@ describe "#acts_as_list scope" do it "should start from first position for different viewables" do - asset1 = Spree::Asset.create(viewable_type: 'Spree::Image', viewable_id: 1) - asset2 = Spree::Asset.create(viewable_type: 'Spree::LineItem', viewable_id: 1) + asset1 = Spree::Asset.create(viewable_type: "Spree::Image", viewable_id: 1) + asset2 = Spree::Asset.create(viewable_type: "Spree::LineItem", viewable_id: 1) expect(asset1.position).to eq 1 expect(asset2.position).to eq 1 diff --git a/core/spec/models/spree/calculator/default_tax_spec.rb b/core/spec/models/spree/calculator/default_tax_spec.rb index 2985b58e1c2..277a7edf257 100644 --- a/core/spec/models/spree/calculator/default_tax_spec.rb +++ b/core/spec/models/spree/calculator/default_tax_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/calculator' +require "rails_helper" +require "spree/testing_support/shared_examples/calculator" RSpec.describe Spree::Calculator::DefaultTax, type: :model do let(:address) { create(:address) } @@ -12,13 +12,13 @@ let(:expires_at) { nil } let!(:rate) do create(:tax_rate, tax_categories: [tax_category], amount: 0.05, - included_in_price:, zone:, - starts_at:, expires_at:) + included_in_price:, zone:, + starts_at:, expires_at:) end let(:included_in_price) { false } - subject(:calculator) { Spree::Calculator::DefaultTax.new(calculable: rate ) } + subject(:calculator) { Spree::Calculator::DefaultTax.new(calculable: rate) } - it_behaves_like 'a calculator with a description' + it_behaves_like "a calculator with a description" context "#compute" do context "when given an order" do @@ -26,8 +26,8 @@ create( :order_with_line_items, line_items_attributes: [ - { price: 10, quantity: 3, tax_category: }.merge(line_item_one_options), - { price: 10, quantity: 3, tax_category: }.merge(line_item_two_options) + {price: 10, quantity: 3, tax_category:}.merge(line_item_one_options), + {price: 10, quantity: 3, tax_category:}.merge(line_item_two_options) ], ship_address: address ) @@ -52,8 +52,8 @@ context "when no line items match the tax category" do let(:other_tax_category) { create(:tax_category) } - let(:line_item_one_options) { { tax_category: other_tax_category } } - let(:line_item_two_options) { { tax_category: other_tax_category } } + let(:line_item_one_options) { {tax_category: other_tax_category} } + let(:line_item_two_options) { {tax_category: other_tax_category} } it "should be 0" do expect(calculator.compute(order)).to eq(0) @@ -62,7 +62,7 @@ context "when one item matches the tax category" do let(:other_tax_category) { create(:tax_category) } - let(:line_item_two_options) { { tax_category: other_tax_category } } + let(:line_item_two_options) { {tax_category: other_tax_category} } it "should be equal to the item total * rate" do expect(calculator.compute(order)).to eq(1.5) @@ -78,7 +78,7 @@ end context "correctly rounds to within two decimal places" do - let(:line_item_one_options) { { price: 10.333, quantity: 1 } } + let(:line_item_one_options) { {price: 10.333, quantity: 1} } specify do # Amount is 0.51665, which will be rounded to... @@ -110,13 +110,13 @@ end end - shared_examples_for 'computing any item' do + shared_examples_for "computing any item" do let(:adjustment_total) { 0 } let(:adjustments) do if adjustment_total.zero? [] else - [Spree::Adjustment.new(included: false, source: nil, amount: adjustment_total)] + [Spree::Adjustment.new(included: false, source: nil, amount: adjustment_total)] end end let(:order) { build_stubbed(:order, ship_address: address) } @@ -183,7 +183,7 @@ end end - describe 'when given a line item' do + describe "when given a line item" do let(:item) do build_stubbed( :line_item, @@ -195,10 +195,10 @@ ) end - it_behaves_like 'computing any item' + it_behaves_like "computing any item" end - describe 'when given a shipment' do + describe "when given a shipment" do let(:shipping_method) do build_stubbed( :shipping_method, @@ -224,10 +224,10 @@ ) end - it_behaves_like 'computing any item' + it_behaves_like "computing any item" end - describe 'when given a shipping rate' do + describe "when given a shipping rate" do let(:shipping_method) do build_stubbed( :shipping_method, @@ -255,6 +255,6 @@ ) end - it_behaves_like 'computing any item' + it_behaves_like "computing any item" end end diff --git a/core/spec/models/spree/calculator/flat_fee_spec.rb b/core/spec/models/spree/calculator/flat_fee_spec.rb index 97f1b64c649..3101b7fa2aa 100644 --- a/core/spec/models/spree/calculator/flat_fee_spec.rb +++ b/core/spec/models/spree/calculator/flat_fee_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "rails_helper" -require 'spree/testing_support/shared_examples/calculator' +require "spree/testing_support/shared_examples/calculator" RSpec.describe Spree::Calculator::FlatFee, type: :model do let(:tax_rate) { build(:tax_rate, amount: 42) } diff --git a/core/spec/models/spree/calculator/flat_rate_spec.rb b/core/spec/models/spree/calculator/flat_rate_spec.rb index 5e7b4fe91ae..f4955f0ec3c 100644 --- a/core/spec/models/spree/calculator/flat_rate_spec.rb +++ b/core/spec/models/spree/calculator/flat_rate_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/calculator' +require "rails_helper" +require "spree/testing_support/shared_examples/calculator" RSpec.describe Spree::Calculator::FlatRate, type: :model do let(:calculator) { Spree::Calculator::FlatRate.new } - it_behaves_like 'a calculator with a description' + it_behaves_like "a calculator with a description" let(:order) do mock_model( diff --git a/core/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb b/core/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb index 3691bf04a27..bc57c9bcddb 100644 --- a/core/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +++ b/core/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/calculator' +require "rails_helper" +require "spree/testing_support/shared_examples/calculator" RSpec.describe Spree::Calculator::Returns::DefaultRefundAmount, type: :model do let(:line_item_quantity) { 3 } @@ -9,11 +9,11 @@ let(:line_item) { create(:line_item, price: line_item_price, quantity: line_item_quantity) } let(:shipment) { create(:shipment, order:) } let(:inventory_unit) { build(:inventory_unit, shipment:, line_item:) } - let(:return_item) { build(:return_item, inventory_unit: ) } + let(:return_item) { build(:return_item, inventory_unit:) } let(:calculator) { Spree::Calculator::Returns::DefaultRefundAmount.new } let(:order) { line_item.order } - it_behaves_like 'a calculator with a description' + it_behaves_like "a calculator with a description" subject { calculator.compute(return_item) } @@ -28,22 +28,22 @@ before do order.adjustments << create( :adjustment, - adjustable: order, + adjustable: order, order:, - amount: adjustment_amount, - label: 'Adjustment', - source_type: 'Spree::Order' + amount: adjustment_amount, + label: "Adjustment", + source_type: "Spree::Order" ) order.adjustments.first.update(amount: adjustment_amount) end - it 'will return the line item amount deducted of refund' do + it "will return the line item amount deducted of refund" do # line_item_price = 100 # line_item_quantity = 3 # adjustment_amount = 10 # 100 - (10 / 3) = 96.66666666666666667 - expect(subject.round(17)).to eq BigDecimal('96.66666666666666667') + expect(subject.round(17)).to eq BigDecimal("96.66666666666666667") end end diff --git a/core/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb b/core/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb index 71ae6b69cb3..152dba2cc95 100644 --- a/core/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +++ b/core/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/calculator' +require "rails_helper" +require "spree/testing_support/shared_examples/calculator" module Spree module Calculator::Shipping RSpec.describe FlatPercentItemTotal, type: :model do - it_behaves_like 'a calculator with a description' + it_behaves_like "a calculator with a description" let(:line_item1) { build(:line_item, price: 10.11) } let(:line_item2) { build(:line_item, price: 20.2222) } @@ -20,7 +20,7 @@ module Calculator::Shipping contents: [ Spree::Stock::ContentItem.new(inventory_unit1), Spree::Stock::ContentItem.new(inventory_unit1), - Spree::Stock::ContentItem.new(inventory_unit2), + Spree::Stock::ContentItem.new(inventory_unit2) ] ) end @@ -32,7 +32,7 @@ module Calculator::Shipping end it "should round result based on order currency" do - package.order.currency = 'JPY' + package.order.currency = "JPY" expect(subject.compute(package)).to eq(4) end diff --git a/core/spec/models/spree/calculator/shipping/flat_rate_spec.rb b/core/spec/models/spree/calculator/shipping/flat_rate_spec.rb index 1bc3b3d410e..38016f0f4f7 100644 --- a/core/spec/models/spree/calculator/shipping/flat_rate_spec.rb +++ b/core/spec/models/spree/calculator/shipping/flat_rate_spec.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/calculator' +require "rails_helper" +require "spree/testing_support/shared_examples/calculator" module Spree module Calculator::Shipping RSpec.describe FlatRate, type: :model do subject { described_class.new(preferred_amount: 4.00) } - it_behaves_like 'a calculator with a description' + it_behaves_like "a calculator with a description" - it 'always returns the same rate' do + it "always returns the same rate" do expect(subject.compute(build(:stock_package_fulfilled))).to eql 4.00 end end diff --git a/core/spec/models/spree/calculator/shipping/flexi_rate_spec.rb b/core/spec/models/spree/calculator/shipping/flexi_rate_spec.rb index 1238ced88be..999c76b4c3c 100644 --- a/core/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +++ b/core/spec/models/spree/calculator/shipping/flexi_rate_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/calculator' +require "rails_helper" +require "spree/testing_support/shared_examples/calculator" module Spree module Calculator::Shipping @@ -9,10 +9,10 @@ module Calculator::Shipping let(:variant1) { build(:variant, price: 10) } let(:variant2) { build(:variant, price: 20) } - it_behaves_like 'a calculator with a description' + it_behaves_like "a calculator with a description" let(:package) do - build(:stock_package, variants_contents: { variant1 => 4, variant2 => 6 }) + build(:stock_package, variants_contents: {variant1 => 4, variant2 => 6}) end let(:subject) { described_class.new } @@ -47,8 +47,8 @@ module Calculator::Shipping it "should allow creation of new object with all the attributes" do described_class.new(preferred_first_item: 1, - preferred_additional_item: 1, - preferred_max_items: 1) + preferred_additional_item: 1, + preferred_max_items: 1) end end end diff --git a/core/spec/models/spree/calculator/shipping/per_item_spec.rb b/core/spec/models/spree/calculator/shipping/per_item_spec.rb index c85ae73ca46..885a915a0bf 100644 --- a/core/spec/models/spree/calculator/shipping/per_item_spec.rb +++ b/core/spec/models/spree/calculator/shipping/per_item_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/calculator' +require "rails_helper" +require "spree/testing_support/shared_examples/calculator" module Spree module Calculator::Shipping @@ -9,10 +9,10 @@ module Calculator::Shipping let(:variant1) { build(:variant) } let(:variant2) { build(:variant) } - it_behaves_like 'a calculator with a description' + it_behaves_like "a calculator with a description" let(:package) do - build(:stock_package, variants_contents: { variant1 => 5, variant2 => 3 }) + build(:stock_package, variants_contents: {variant1 => 5, variant2 => 3}) end subject { described_class.new(preferred_amount: 10) } diff --git a/core/spec/models/spree/calculator/shipping/price_sack_spec.rb b/core/spec/models/spree/calculator/shipping/price_sack_spec.rb index 2150a85af9c..1ba9864be53 100644 --- a/core/spec/models/spree/calculator/shipping/price_sack_spec.rb +++ b/core/spec/models/spree/calculator/shipping/price_sack_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/calculator' +require "rails_helper" +require "spree/testing_support/shared_examples/calculator" RSpec.describe Spree::Calculator::Shipping::PriceSack, type: :model do let(:calculator) do @@ -12,11 +12,11 @@ calculator end - it_behaves_like 'a calculator with a description' + it_behaves_like "a calculator with a description" - describe '#compute' do + describe "#compute" do subject { calculator.compute(package) } - let(:package) { build(:stock_package, variants_contents: { build(:variant) => 1 }) } + let(:package) { build(:stock_package, variants_contents: {build(:variant) => 1}) } before do # This hack is due to our factories not being so smart to understand @@ -25,7 +25,7 @@ allow_any_instance_of(Spree::Stock::ContentItem).to receive(:price) { amount } end - context 'when price < minimal amount' do + context "when price < minimal amount" do let(:amount) { 2 } it "returns the discounted amount" do @@ -33,7 +33,7 @@ end end - context 'when price > minimal amount' do + context "when price > minimal amount" do let(:amount) { 6 } it "returns the discounted amount" do diff --git a/core/spec/models/spree/calculator_spec.rb b/core/spec/models/spree/calculator_spec.rb index 554689d7fc5..a0619acc063 100644 --- a/core/spec/models/spree/calculator_spec.rb +++ b/core/spec/models/spree/calculator_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Calculator, type: :model do let(:simple_calculator_class) do @@ -29,10 +29,10 @@ def self.name it { is_expected.to eq({}) } context "with preferences stored" do - let(:calculator) { simple_calculator_class.new(preferences: { a: "1" }) } + let(:calculator) { simple_calculator_class.new(preferences: {a: "1"}) } subject { calculator.preferences } - it { is_expected.to eq({ a: "1" }) } + it { is_expected.to eq({a: "1"}) } end end @@ -43,14 +43,14 @@ def self.name subject { calculator.compute computable } it "calls compute method of class type" do - expect(subject).to eq "computed" + expect(subject).to eq "computed" end context "computable does not implement right function name" do let(:computable) { Spree::LineItem.new } it "raises an error" do - expect { subject }.to raise_error NotImplementedError, /Please implement \'compute_line_item\(line_item\)\' in your calculator/ + expect { subject }.to raise_error NotImplementedError, /Please implement 'compute_line_item\(line_item\)' in your calculator/ end end end diff --git a/core/spec/models/spree/carton_spec.rb b/core/spec/models/spree/carton_spec.rb index d699dc64240..7b47cc644ae 100644 --- a/core/spec/models/spree/carton_spec.rb +++ b/core/spec/models/spree/carton_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Carton do let(:carton) { create(:carton) } - describe 'shipping method' do - it 'returns soft deleted shipping method' do + describe "shipping method" do + it "returns soft deleted shipping method" do carton = create(:carton) carton.shipping_method.discard expect(carton.reload.shipping_method).to be_present @@ -78,7 +78,7 @@ let(:carton) { create(:carton, inventory_units: [first_order.inventory_units, second_order.inventory_units].flatten) } let(:first_order) { create(:order_ready_to_ship, line_items_count: 1) } let(:second_order) { create(:order_ready_to_ship, line_items_count: 1) } - let(:email) { 'something@something.com' } + let(:email) { "something@something.com" } before do first_order.update!(email:) diff --git a/core/spec/models/spree/classification_spec.rb b/core/spec/models/spree/classification_spec.rb index a9c260ce4c2..e2b0e4cff8c 100644 --- a/core/spec/models/spree/classification_spec.rb +++ b/core/spec/models/spree/classification_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe Classification, type: :model do diff --git a/core/spec/models/spree/concerns/active_storage_adapter/attachment_spec.rb b/core/spec/models/spree/concerns/active_storage_adapter/attachment_spec.rb index 27eeaeb1bf5..974acc4c38b 100644 --- a/core/spec/models/spree/concerns/active_storage_adapter/attachment_spec.rb +++ b/core/spec/models/spree/concerns/active_storage_adapter/attachment_spec.rb @@ -1,51 +1,50 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" -unless (ENV['DISABLE_ACTIVE_STORAGE'] == 'true') +unless ENV["DISABLE_ACTIVE_STORAGE"] == "true" RSpec.describe Spree::ActiveStorageAdapter::Attachment do - describe '#variant' do + describe "#variant" do it "converts to resize_to_limit when definition doesn't contain any special symbol" do image = create(:image) - attachment = described_class.new(image.attachment.attachment, styles: { mini: '10x10' }) + attachment = described_class.new(image.attachment.attachment, styles: {mini: "10x10"}) expect( attachment.variant(:mini).variation.transformations ).to include(resize_to_limit: [10, 10]) end - it 'converts to resize_to_limit when definition ends with >' do + it "converts to resize_to_limit when definition ends with >" do image = create(:image) - attachment = described_class.new(image.attachment.attachment, styles: { mini: '10x10>' }) + attachment = described_class.new(image.attachment.attachment, styles: {mini: "10x10>"}) expect( attachment.variant(:mini).variation.transformations ).to include(resize_to_limit: [10, 10]) end - it 'converts to resize_to_fill when definition ends with ^' do + it "converts to resize_to_fill when definition ends with ^" do image = create(:image) - attachment = described_class.new(image.attachment.attachment, styles: { mini: '10x10^' }) + attachment = described_class.new(image.attachment.attachment, styles: {mini: "10x10^"}) expect( attachment.variant(:mini).variation.transformations ).to include(resize_to_fill: [10, 10]) end - it 'strips definitions' do + it "strips definitions" do image = create(:image) - attachment = described_class.new(image.attachment.attachment, styles: { mini: ' 10x10 ' }) + attachment = described_class.new(image.attachment.attachment, styles: {mini: " 10x10 "}) expect( attachment.variant(:mini).variation.transformations ).to include(resize_to_limit: [10, 10]) end - it "defaults to the image's width and height" do image = create(:image) diff --git a/core/spec/models/spree/concerns/display_money_spec.rb b/core/spec/models/spree/concerns/display_money_spec.rb index 225ff9d88ed..ab154cdcdd4 100644 --- a/core/spec/models/spree/concerns/display_money_spec.rb +++ b/core/spec/models/spree/concerns/display_money_spec.rb @@ -1,13 +1,16 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe DisplayMoney do let(:test_class) do Class.new do extend DisplayMoney - def total; 10.0; end + + def total + 10.0 + end end end @@ -21,7 +24,13 @@ def total; 10.0; end end context "currency is defined" do - before { test_class.class_eval { def currency; "USD"; end } } + before { + test_class.class_eval { + def currency + "USD" + end + } + } it "generates a display_* method that builds a Spree::Money with currency" do expect(test_class.new.display_total).to eq Spree::Money.new(10.0, currency: "USD") @@ -30,8 +39,12 @@ def total; 10.0; end context "with multiple + options" do before do - test_class.class_eval { def amount; 20.0; end } - test_class.money_methods :total, amount: { no_cents: true } + test_class.class_eval { + def amount + 20.0 + end + } + test_class.money_methods :total, amount: {no_cents: true} end it "generates a display_* method that builds a Spree::Money with the specified options" do diff --git a/core/spec/models/spree/concerns/ordered_property_value_list_spec.rb b/core/spec/models/spree/concerns/ordered_property_value_list_spec.rb index 7f2e9e73592..8fc2b4679a5 100644 --- a/core/spec/models/spree/concerns/ordered_property_value_list_spec.rb +++ b/core/spec/models/spree/concerns/ordered_property_value_list_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::OrderedPropertyValueList do # @@ -8,7 +8,7 @@ # since it includes OrderedPropertyValueList # - context 'positioning' do + context "positioning" do let(:product_1) { create(:product) } let!(:property_1) { create(:product_property, product: product_1) } let!(:property_2) { create(:product_property, product: product_1) } @@ -24,7 +24,7 @@ property_4.update_attribute(:position, 1) end - it 'scopes position to the product' do + it "scopes position to the product" do expect(property_1.reload.position).to eq(0) expect(property_2.reload.position).to eq(1) expect(property_3.reload.position).to eq(0) @@ -41,9 +41,9 @@ # > characters on string columns. # http://guides.rubyonrails.org/4_2_release_notes.html#active-record-notable-changes # https://github.com/rails/rails/pull/14579 - if Spree::ProductProperty.columns_hash['value'].limit + if Spree::ProductProperty.columns_hash["value"].limit it "should validate length of value" do - overflow_length = Spree::ProductProperty.columns_hash['value'].limit + 1 + overflow_length = Spree::ProductProperty.columns_hash["value"].limit + 1 product_property.value = "x" * overflow_length expect(product_property).not_to be_valid end diff --git a/core/spec/models/spree/concerns/ransackable_attributes_spec.rb b/core/spec/models/spree/concerns/ransackable_attributes_spec.rb index 3f74978e79c..85de3968e69 100644 --- a/core/spec/models/spree/concerns/ransackable_attributes_spec.rb +++ b/core/spec/models/spree/concerns/ransackable_attributes_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::RansackableAttributes do let(:test_class) { Class.new(Spree::Base) } @@ -11,16 +11,16 @@ test_class.allowed_ransackable_scopes = [] end - it 'reads' do + it "reads" do expect(test_class.allowed_ransackable_scopes).to be_empty end - it 'allows setting an array' do + it "allows setting an array" do test_class.allowed_ransackable_scopes = [:test] expect(test_class.allowed_ransackable_scopes).to match_array([:test]) end - it 'allows concatenating' do + it "allows concatenating" do test_class.allowed_ransackable_scopes.concat([:new_value]) expect(test_class.allowed_ransackable_scopes).to match_array([:new_value]) end diff --git a/core/spec/models/spree/concerns/soft_deletable_spec.rb b/core/spec/models/spree/concerns/soft_deletable_spec.rb index a466111c1ee..68837e9bc78 100644 --- a/core/spec/models/spree/concerns/soft_deletable_spec.rb +++ b/core/spec/models/spree/concerns/soft_deletable_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::SoftDeletable do let(:soft_deletable_model) { Spree::Product } - it 'includes Discard' do + it "includes Discard" do expect(soft_deletable_model).to respond_to(:with_discarded) expect(soft_deletable_model.new).to respond_to(:discarded?) expect(soft_deletable_model.discard_column).to eq(:deleted_at) diff --git a/core/spec/models/spree/concerns/user_address_book_spec.rb b/core/spec/models/spree/concerns/user_address_book_spec.rb index 48e155f8361..ba8aff21a33 100644 --- a/core/spec/models/spree/concerns/user_address_book_spec.rb +++ b/core/spec/models/spree/concerns/user_address_book_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe UserAddressBook do @@ -253,43 +253,43 @@ module Spree expect(user.remove_from_address_book(0)).to be false end - context 'when user has previous order addresses' do + context "when user has previous order addresses" do let(:order) { create(:order, ship_address: address1, bill_address: address2) } before { user.persist_order_address(order) } - context 'when address does not match any user address references' do + context "when address does not match any user address references" do let(:another_address) { create(:address) } let(:remove_id) { another_address.id } - it 'leaves current user ship address' do + it "leaves current user ship address" do expect { subject }.not_to change(user, :ship_address_id).from(address1.id) end - it 'leaves current user bill address' do + it "leaves current user bill address" do expect { subject }.not_to change(user, :bill_address_id).from(address2.id) end end - context 'when address matches user ship address' do - it 'removes the ship address reference from user' do + context "when address matches user ship address" do + it "removes the ship address reference from user" do expect { subject }.to change(user, :ship_address_id).from(address1.id).to(nil) end end - context 'when address matches user bill address' do + context "when address matches user bill address" do let(:remove_id) { address2.id } - it 'removes the bill address reference from user' do + it "removes the bill address reference from user" do expect { subject }.to change(user, :bill_address_id).from(address2.id).to(nil) end end - context 'when address matches user bill and ship address' do + context "when address matches user bill and ship address" do let(:order) { create(:order, ship_address: address1, bill_address: address1) } - it 'removes the address references from user' do + it "removes the address references from user" do expect { subject }.to change(user, :ship_address_id).from(address1.id).to(nil) .and change(user, :bill_address_id).from(address1.id).to(nil) end @@ -301,15 +301,15 @@ module Spree context "when automatic_default_address preference is at a default of true" do let(:order) { create :order } - it 'will save both bill/ship_address references' do + it "will save both bill/ship_address references" do user.persist_order_address(order) - expect( user.bill_address_id ).to eq order.bill_address_id - expect( user.ship_address_id ).to eq order.ship_address_id - expect( user.bill_address_id ).not_to eq user.ship_address_id + expect(user.bill_address_id).to eq order.bill_address_id + expect(user.ship_address_id).to eq order.ship_address_id + expect(user.bill_address_id).not_to eq user.ship_address_id - expect( user.bill_address).to eq order.bill_address - expect( user.ship_address).to eq order.ship_address + expect(user.bill_address).to eq order.bill_address + expect(user.ship_address).to eq order.ship_address end end @@ -323,11 +323,11 @@ module Spree it "will save only the default ship address on user as it is the first address at all" do user.persist_order_address(order) - expect( user.bill_address_id ).to eq order.bill_address_id - expect( user.ship_address_id ).to eq order.ship_address_id + expect(user.bill_address_id).to eq order.bill_address_id + expect(user.ship_address_id).to eq order.ship_address_id - expect( user.bill_address).to be_nil - expect( user.ship_address).to eq order.ship_address + expect(user.bill_address).to be_nil + expect(user.ship_address).to eq order.ship_address end end diff --git a/core/spec/models/spree/concerns/user_methods_spec.rb b/core/spec/models/spree/concerns/user_methods_spec.rb index c03c7a3250a..de4d564268f 100644 --- a/core/spec/models/spree/concerns/user_methods_spec.rb +++ b/core/spec/models/spree/concerns/user_methods_spec.rb @@ -1,40 +1,40 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::UserMethods do let(:test_user) { create :user } - describe '#has_spree_role?' do + describe "#has_spree_role?" do subject { test_user.has_spree_role? name } let(:role) { Spree::Role.create(name:) } - let(:name) { 'test' } + let(:name) { "test" } - context 'with a role' do + context "with a role" do before { test_user.spree_roles << role } - it { is_expected.to be_truthy } + it { is_expected.to be_truthy } end - context 'without a role' do + context "without a role" do it { is_expected.to be_falsy } end end - describe '#update_spree_roles' do + describe "#update_spree_roles" do let(:ability) do Class.new do include CanCan::Ability def initialize(_user) - can :manage, ::Spree::Role, name: 'accessible_role' + can :manage, ::Spree::Role, name: "accessible_role" end end.new(:user) end - let!(:accessible_role) { create(:role, name: 'accessible_role') } - let!(:non_accessible_role) { create(:role, name: 'non_accessible_role') } + let!(:accessible_role) { create(:role, name: "accessible_role") } + let!(:non_accessible_role) { create(:role, name: "non_accessible_role") } - it 'can add accessible roles' do + it "can add accessible roles" do user = create(:user, spree_roles: []) user.update_spree_roles([accessible_role], ability:) @@ -42,7 +42,7 @@ def initialize(_user) expect(user.reload.spree_roles).to eq([accessible_role]) end - it 'can remove accessible roles' do + it "can remove accessible roles" do user = create(:user, spree_roles: [accessible_role]) user.update_spree_roles([], ability:) @@ -67,10 +67,10 @@ def initialize(_user) end end - describe '#last_incomplete_spree_order' do + describe "#last_incomplete_spree_order" do subject { test_user.last_incomplete_spree_order } - context 'with an incomplete order' do + context "with an incomplete order" do let(:last_incomplete_order) { create :order, user: test_user } before do @@ -82,7 +82,7 @@ def initialize(_user) it { is_expected.to eq last_incomplete_order } end - context 'without an incomplete order' do + context "without an incomplete order" do it { is_expected.to be_nil } end end @@ -106,61 +106,61 @@ def initialize(_user) end end - describe '#available_store_credit_total' do + describe "#available_store_credit_total" do subject do - test_user.reload.available_store_credit_total(currency: 'USD') + test_user.reload.available_store_credit_total(currency: "USD") end - context 'when the user does not have any credit' do + context "when the user does not have any credit" do it { is_expected.to eq(0) } end - context 'when the user has credits' do + context "when the user has credits" do let!(:credit_1) { create(:store_credit, user: test_user, amount: 100) } let!(:credit_2) { create(:store_credit, user: test_user, amount: 200) } it { is_expected.to eq(100 + 200) } - context 'when some has been used' do + context "when some has been used" do before { credit_1.update!(amount_used: 35) } it { is_expected.to eq(100 + 200 - 35) } - context 'when some has been authorized' do + context "when some has been authorized" do before { credit_1.update!(amount_authorized: 10) } it { is_expected.to eq(100 + 200 - 35 - 10) } end end - context 'when some has been authorized' do + context "when some has been authorized" do before { credit_1.update!(amount_authorized: 10) } it { is_expected.to eq(100 + 200 - 10) } end - context 'with credits of multiple currencies' do - let!(:credit_3) { create(:store_credit, user: test_user, amount: 400, currency: 'GBP') } + context "with credits of multiple currencies" do + let!(:credit_3) { create(:store_credit, user: test_user, amount: 400, currency: "GBP") } before { test_user.reload } - it 'separates the currencies' do - expect(test_user.available_store_credit_total(currency: 'USD')).to eq(100 + 200) - expect(test_user.available_store_credit_total(currency: 'GBP')).to eq(400) + it "separates the currencies" do + expect(test_user.available_store_credit_total(currency: "USD")).to eq(100 + 200) + expect(test_user.available_store_credit_total(currency: "GBP")).to eq(400) end end end end - describe '#display_available_store_credit_total' do + describe "#display_available_store_credit_total" do subject do - test_user.display_available_store_credit_total(currency: 'USD') + test_user.display_available_store_credit_total(currency: "USD") end - context 'without credit' do + context "without credit" do it { is_expected.to eq(Spree::Money.new(0)) } end - context 'with credit' do + context "with credit" do let!(:credit) { create(:store_credit, user: test_user, amount: 100) } it { is_expected.to eq(Spree::Money.new(100)) } end diff --git a/core/spec/models/spree/country_spec.rb b/core/spec/models/spree/country_spec.rb index 8e00086866c..76ac1b51cca 100644 --- a/core/spec/models/spree/country_spec.rb +++ b/core/spec/models/spree/country_spec.rb @@ -1,109 +1,109 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Country, type: :model do - describe '.default' do + describe ".default" do subject(:default_country) { described_class.default } - context 'with the configuration setting an existing ISO code' do + context "with the configuration setting an existing ISO code" do before do create(:country, iso: "DE") stub_spree_preferences(default_country_iso: "DE") end - it 'is a country with the configurations ISO code' do + it "is a country with the configurations ISO code" do expect(default_country).to be_a(Spree::Country) - expect(default_country.iso).to eq('DE') + expect(default_country.iso).to eq("DE") end end - context 'with the configuration setting an non-existing ISO code' do + context "with the configuration setting an non-existing ISO code" do before { stub_spree_preferences(default_country_iso: "ZZ") } - it 'raises a Record not Found error' do + it "raises a Record not Found error" do expect { default_country }.to raise_error(ActiveRecord::RecordNotFound) end end end - describe '.available' do - let!(:united_states) { create(:country, iso: 'US') } - let!(:canada) { create(:country, iso: 'CA') } - let!(:italy) { create(:country, iso: 'IT') } - let!(:custom_zone) { create(:zone, name: 'Custom Zone', countries: [united_states, italy]) } + describe ".available" do + let!(:united_states) { create(:country, iso: "US") } + let!(:canada) { create(:country, iso: "CA") } + let!(:italy) { create(:country, iso: "IT") } + let!(:custom_zone) { create(:zone, name: "Custom Zone", countries: [united_states, italy]) } - context 'with a checkout zone defined' do - context 'when checkout zone is of type country' do - let!(:checkout_zone) { create(:zone, name: 'Checkout Zone', countries: [united_states, canada]) } + context "with a checkout zone defined" do + context "when checkout zone is of type country" do + let!(:checkout_zone) { create(:zone, name: "Checkout Zone", countries: [united_states, canada]) } before do stub_spree_preferences(checkout_zone: checkout_zone.name) end - context 'with no arguments' do + context "with no arguments" do it 'returns "Checkout Zone" countries' do expect(described_class.available).to contain_exactly(united_states, canada) end end - context 'setting nil as restricting zone' do - it 'returns all countries' do + context "setting nil as restricting zone" do + it "returns all countries" do expect(described_class.available(restrict_to_zone: nil)).to contain_exactly(united_states, canada, italy) end end context 'setting "Custom Zone" as restricting zone' do it 'returns "Custom Zone" countries' do - expect(described_class.available(restrict_to_zone: 'Custom Zone')).to contain_exactly(united_states, italy) + expect(described_class.available(restrict_to_zone: "Custom Zone")).to contain_exactly(united_states, italy) end end context 'setting "Checkout Zone" as restricting zone' do it 'returns "Checkout Zone" countries' do - expect(described_class.available(restrict_to_zone: 'Checkout Zone')).to contain_exactly(united_states, canada) + expect(described_class.available(restrict_to_zone: "Checkout Zone")).to contain_exactly(united_states, canada) end end end - context 'when checkout zone is of type state' do + context "when checkout zone is of type state" do let!(:state) { create(:state, country: united_states) } - let!(:checkout_zone) { create(:zone, name: 'Checkout Zone', states: [state]) } + let!(:checkout_zone) { create(:zone, name: "Checkout Zone", states: [state]) } before do stub_spree_preferences(checkout_zone: checkout_zone.name) end - context 'with no arguments' do - it 'returns all countries' do + context "with no arguments" do + it "returns all countries" do expect(described_class.available(restrict_to_zone: nil)).to contain_exactly(united_states, canada, italy) end end end end - context 'with no checkout zone defined' do - context 'with no arguments' do - it 'returns all countries' do + context "with no checkout zone defined" do + context "with no arguments" do + it "returns all countries" do expect(described_class.available).to contain_exactly(united_states, canada, italy) end end - context 'setting nil as restricting zone' do - it 'returns all countries' do + context "setting nil as restricting zone" do + it "returns all countries" do expect(described_class.available(restrict_to_zone: nil)).to contain_exactly(united_states, canada, italy) end end context 'setting "Custom Zone" as restricting zone' do it 'returns "Custom Zone" countries' do - expect(described_class.available(restrict_to_zone: 'Custom Zone')).to contain_exactly(united_states, italy) + expect(described_class.available(restrict_to_zone: "Custom Zone")).to contain_exactly(united_states, italy) end end end end - describe '#prices' do + describe "#prices" do let(:country) { create(:country, iso: "BR") } subject { country.prices } diff --git a/core/spec/models/spree/credit_card_spec.rb b/core/spec/models/spree/credit_card_spec.rb index 0395bf8949c..5b3eddff01d 100644 --- a/core/spec/models/spree/credit_card_spec.rb +++ b/core/spec/models/spree/credit_card_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::CreditCard, type: :model do let(:valid_credit_card_attributes) do { - number: '4111111111111111', - verification_value: '123', + number: "4111111111111111", + verification_value: "123", expiry: "12 / #{(Time.current.year + 1).to_s.last(2)}", - name: 'Spree Commerce' + name: "Spree Commerce" } end @@ -18,14 +18,14 @@ def self.payment_states let(:credit_card) { Spree::CreditCard.new } - it_behaves_like 'a payment source' + it_behaves_like "a payment source" before(:each) do @order = create(:order) @payment = Spree::Payment.create(amount: 100, order: @order) - @success_response = double('gateway_response', success?: true, authorization: '123', avs_result: { 'code' => 'avs-code' }) - @fail_response = double('gateway_response', success?: false) + @success_response = double("gateway_response", success?: true, authorization: "123", avs_result: {"code" => "avs-code"}) + @fail_response = double("gateway_response", success?: false) @payment_gateway = mock_model(Spree::PaymentMethod, payment_profiles_supported?: true, @@ -111,10 +111,10 @@ def self.payment_states end it "should save and update addresses through nested attributes" do - persisted_card.update({ address_attributes: valid_address_attributes }) + persisted_card.update({address_attributes: valid_address_attributes}) persisted_card.save! - updated_attributes = { id: persisted_card.address.id, address1: "123 Main St." } - persisted_card.update({ address_attributes: updated_attributes }) + updated_attributes = {id: persisted_card.address.id, address1: "123 Main St."} + persisted_card.update({address_attributes: updated_attributes}) expect(persisted_card.address.address1).to eq "123 Main St." end end @@ -151,109 +151,109 @@ def self.payment_states end it "strips any whitespace" do - credit_card.verification_value = ' 1 2 3 ' - expect(credit_card.verification_value).to eq('123') + credit_card.verification_value = " 1 2 3 " + expect(credit_card.verification_value).to eq("123") end end # Regression test for https://github.com/spree/spree/issues/3847 and https://github.com/spree/spree/issues/3896 describe "#expiry=" do it "can set with a 2-digit month and year" do - credit_card.expiry = '04 / 15' - expect(credit_card.month).to eq('4') - expect(credit_card.year).to eq('2015') + credit_card.expiry = "04 / 15" + expect(credit_card.month).to eq("4") + expect(credit_card.year).to eq("2015") end it "can set with a 2-digit month and 4-digit year" do - credit_card.expiry = '04 / 2015' - expect(credit_card.month).to eq('4') - expect(credit_card.year).to eq('2015') + credit_card.expiry = "04 / 2015" + expect(credit_card.month).to eq("4") + expect(credit_card.year).to eq("2015") end it "can set with a 2-digit month and 4-digit year without whitespace" do - credit_card.expiry = '04/15' - expect(credit_card.month).to eq('4') - expect(credit_card.year).to eq('2015') + credit_card.expiry = "04/15" + expect(credit_card.month).to eq("4") + expect(credit_card.year).to eq("2015") end it "can set with a 2-digit month and 4-digit year without whitespace" do - credit_card.expiry = '04/2015' - expect(credit_card.month).to eq('4') - expect(credit_card.year).to eq('2015') + credit_card.expiry = "04/2015" + expect(credit_card.month).to eq("4") + expect(credit_card.year).to eq("2015") end it "can set with a 2-digit month and 4-digit year without whitespace and slash" do - credit_card.expiry = '042015' - expect(credit_card.month).to eq('4') - expect(credit_card.year).to eq('2015') + credit_card.expiry = "042015" + expect(credit_card.month).to eq("4") + expect(credit_card.year).to eq("2015") end it "can set with a 2-digit month and 2-digit year without whitespace and slash" do - credit_card.expiry = '0415' - expect(credit_card.month).to eq('4') - expect(credit_card.year).to eq('2015') + credit_card.expiry = "0415" + expect(credit_card.month).to eq("4") + expect(credit_card.year).to eq("2015") end it "does not blow up when passed an empty string" do - credit_card.expiry = '' + credit_card.expiry = "" end # Regression test for https://github.com/spree/spree/issues/4725 it "does not blow up when passed one number" do - credit_card.expiry = '12' + credit_card.expiry = "12" end end describe "#cc_type=" do it "converts between the different types" do - credit_card.cc_type = 'mastercard' - expect(credit_card.cc_type).to eq('master') + credit_card.cc_type = "mastercard" + expect(credit_card.cc_type).to eq("master") - credit_card.cc_type = 'maestro' - expect(credit_card.cc_type).to eq('master') + credit_card.cc_type = "maestro" + expect(credit_card.cc_type).to eq("master") - credit_card.cc_type = 'amex' - expect(credit_card.cc_type).to eq('american_express') + credit_card.cc_type = "amex" + expect(credit_card.cc_type).to eq("american_express") - credit_card.cc_type = 'dinersclub' - expect(credit_card.cc_type).to eq('diners_club') + credit_card.cc_type = "dinersclub" + expect(credit_card.cc_type).to eq("diners_club") - credit_card.cc_type = 'some_outlandish_cc_type' - expect(credit_card.cc_type).to eq('some_outlandish_cc_type') + credit_card.cc_type = "some_outlandish_cc_type" + expect(credit_card.cc_type).to eq("some_outlandish_cc_type") end it "assigns the type based on card number in the event of js failure" do - credit_card.number = '4242424242424242' - credit_card.cc_type = '' - expect(credit_card.cc_type).to eq('visa') + credit_card.number = "4242424242424242" + credit_card.cc_type = "" + expect(credit_card.cc_type).to eq("visa") - credit_card.number = '5555555555554444' - credit_card.cc_type = '' - expect(credit_card.cc_type).to eq('master') + credit_card.number = "5555555555554444" + credit_card.cc_type = "" + expect(credit_card.cc_type).to eq("master") - credit_card.number = '2221000000000000' - credit_card.cc_type = '' - expect(credit_card.cc_type).to eq('master') + credit_card.number = "2221000000000000" + credit_card.cc_type = "" + expect(credit_card.cc_type).to eq("master") - credit_card.number = '378282246310005' - credit_card.cc_type = '' - expect(credit_card.cc_type).to eq('american_express') + credit_card.number = "378282246310005" + credit_card.cc_type = "" + expect(credit_card.cc_type).to eq("american_express") - credit_card.number = '30569309025904' - credit_card.cc_type = '' - expect(credit_card.cc_type).to eq('diners_club') + credit_card.number = "30569309025904" + credit_card.cc_type = "" + expect(credit_card.cc_type).to eq("diners_club") - credit_card.number = '3530111333300000' - credit_card.cc_type = '' - expect(credit_card.cc_type).to eq('jcb') + credit_card.number = "3530111333300000" + credit_card.cc_type = "" + expect(credit_card.cc_type).to eq("jcb") - credit_card.number = '' - credit_card.cc_type = '' - expect(credit_card.cc_type).to eq('') + credit_card.number = "" + credit_card.cc_type = "" + expect(credit_card.cc_type).to eq("") credit_card.number = nil - credit_card.cc_type = '' - expect(credit_card.cc_type).to eq('') + credit_card.cc_type = "" + expect(credit_card.cc_type).to eq("") end end diff --git a/core/spec/models/spree/customer_return_spec.rb b/core/spec/models/spree/customer_return_spec.rb index 7ec5da90e95..0fb6119a126 100644 --- a/core/spec/models/spree/customer_return_spec.rb +++ b/core/spec/models/spree/customer_return_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::CustomerReturn, type: :model do before do @@ -17,11 +17,11 @@ let(:first_shipment) { first_order.shipments.first } let(:second_shipment) { second_order.shipments.first } - let(:first_inventory_unit) { build(:inventory_unit, shipment: first_shipment) } - let(:first_return_item) { build(:return_item, inventory_unit: first_inventory_unit) } + let(:first_inventory_unit) { build(:inventory_unit, shipment: first_shipment) } + let(:first_return_item) { build(:return_item, inventory_unit: first_inventory_unit) } let(:second_inventory_unit) { build(:inventory_unit, shipment: second_shipment) } - let(:second_return_item) { build(:return_item, inventory_unit: second_inventory_unit) } + let(:second_return_item) { build(:return_item, inventory_unit: second_inventory_unit) } subject { customer_return.valid? } @@ -39,7 +39,7 @@ it "adds an error message" do subject - expect(customer_return.errors.full_messages).to include(I18n.t('spree.return_items_cannot_be_associated_with_multiple_orders')) + expect(customer_return.errors.full_messages).to include(I18n.t("spree.return_items_cannot_be_associated_with_multiple_orders")) end end @@ -68,11 +68,11 @@ describe ".before_create" do describe "#generate_number" do context "number is assigned" do - let(:customer_return) { Spree::CustomerReturn.new(number: '123') } + let(:customer_return) { Spree::CustomerReturn.new(number: "123") } it "should return the assigned number" do customer_return.save - expect(customer_return.number).to eq('123') + expect(customer_return.number).to eq("123") end end @@ -120,7 +120,7 @@ let(:order) { stub_model(Spree::Order, currency: "GBP") } let(:customer_return) { stub_model(Spree::CustomerReturn, order:) } - it 'returns the order currency' do + it "returns the order currency" do expect(Spree::Config.currency).to eq("USD") expect(customer_return.currency).to eq("GBP") end @@ -182,14 +182,14 @@ end context ".after_save" do - let(:inventory_unit) { create(:inventory_unit, state: 'shipped', order: create(:shipped_order)) } - let(:return_item) { build(:return_item, inventory_unit:) } + let(:inventory_unit) { create(:inventory_unit, state: "shipped", order: create(:shipped_order)) } + let(:return_item) { build(:return_item, inventory_unit:) } context "to the initial stock location" do it "should mark the received inventory units are returned" do create(:customer_return_without_return_items, return_items: [return_item], stock_location_id: inventory_unit.shipment.stock_location_id) return_item.receive! - expect(inventory_unit.reload.state).to eq 'returned' + expect(inventory_unit.reload.state).to eq "returned" end it "should update the stock item counts in the stock location" do @@ -199,7 +199,7 @@ end.to change { inventory_unit.find_stock_item.count_on_hand }.by(1) end - context 'with Config.track_inventory_levels == false' do + context "with Config.track_inventory_levels == false" do before do stub_spree_preferences(track_inventory_levels: false) expect(Spree::StockItem).not_to receive(:find_by) @@ -248,9 +248,9 @@ return_item.update!(reception_status: "lost_in_transit") end - it 'should not updated inventory unit to returned' do + it "should not updated inventory unit to returned" do create(:customer_return_without_return_items, return_items: [return_item], stock_location_id: inventory_unit.shipment.stock_location_id) - expect(inventory_unit.reload.state).to eq 'shipped' + expect(inventory_unit.reload.state).to eq "shipped" end it "should not update the stock item counts in the stock location" do @@ -261,40 +261,40 @@ end end - describe '#fully_reimbursed?' do + describe "#fully_reimbursed?" do let(:customer_return) { create(:customer_return) } let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) } subject { customer_return.fully_reimbursed? } - context 'when some return items are undecided' do + context "when some return items are undecided" do it { is_expected.to be false } end - context 'when all return items are decided' do - context 'when all return items are rejected' do + context "when all return items are decided" do + context "when all return items are rejected" do before { customer_return.return_items.each(&:reject!) } it { is_expected.to be true } end - context 'when all return items are accepted' do + context "when all return items are accepted" do before { customer_return.return_items.each(&:accept!) } - context 'when some return items have no reimbursement' do + context "when some return items have no reimbursement" do it { is_expected.to be false } end - context 'when all return items have a reimbursement' do + context "when all return items have a reimbursement" do let!(:reimbursement) { create(:reimbursement, customer_return:) } - context 'when some reimbursements are not reimbursed' do + context "when some reimbursements are not reimbursed" do it { is_expected.to be false } end - context 'when all reimbursements are reimbursed' do - let(:created_by_user) { create(:user, email: 'user@email.com') } + context "when all reimbursements are reimbursed" do + let(:created_by_user) { create(:user, email: "user@email.com") } before { reimbursement.perform!(created_by: created_by_user) } it { is_expected.to be true } diff --git a/core/spec/models/spree/distributed_amounts_handler_spec.rb b/core/spec/models/spree/distributed_amounts_handler_spec.rb index ffa9c1f1b6b..3cc1af6d2d5 100644 --- a/core/spec/models/spree/distributed_amounts_handler_spec.rb +++ b/core/spec/models/spree/distributed_amounts_handler_spec.rb @@ -18,7 +18,7 @@ let(:total_amount) { 15 } context "when there is only one line item" do - let(:line_items_attributes) { [{ price: 100 }] } + let(:line_items_attributes) { [{price: 100}] } let(:line_item) { order.line_items.first } it "applies the entire amount to the line item" do @@ -28,7 +28,7 @@ context "when there are multiple line items" do let(:line_items_attributes) do - [{ price: 50 }, { price: 50 }, { price: 50 }] + [{price: 50}, {price: 50}, {price: 50}] end context "and the line items are equally priced" do @@ -63,7 +63,7 @@ context "and the line items do not have equal subtotal amounts" do let(:line_items_attributes) do - [{ price: 50, quantity: 3 }, { price: 50, quantity: 1 }, { price: 50, quantity: 2 }] + [{price: 50, quantity: 3}, {price: 50, quantity: 1}, {price: 50, quantity: 2}] end it "distributes the total amount relative to the item's price" do diff --git a/core/spec/models/spree/exchange_spec.rb b/core/spec/models/spree/exchange_spec.rb index 655763e96fd..005562199f2 100644 --- a/core/spec/models/spree/exchange_spec.rb +++ b/core/spec/models/spree/exchange_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe Exchange, type: :model do @@ -20,8 +20,8 @@ module Spree end it "describes the return items' change in options" do - expect(exchange.description).to match /foo => bar/ - expect(exchange.description).to match /baz => qux/ + expect(exchange.description).to match(/foo => bar/) + expect(exchange.description).to match(/baz => qux/) end end @@ -57,7 +57,7 @@ module Spree StockItem.where(variant_id: return_item.exchange_variant_id).find_each(&:destroy) end - it 'raises an UnableToCreateShipments error' do + it "raises an UnableToCreateShipments error" do expect { subject }.to raise_error(Spree::Exchange::UnableToCreateShipments) diff --git a/core/spec/models/spree/fulfilment_changer_spec.rb b/core/spec/models/spree/fulfilment_changer_spec.rb index 589f294d103..5d72425b41b 100644 --- a/core/spec/models/spree/fulfilment_changer_spec.rb +++ b/core/spec/models/spree/fulfilment_changer_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::FulfilmentChanger do let(:variant) { create(:variant) } @@ -53,13 +53,13 @@ subject end - it 'updates order totals' do + it "updates order totals" do original_total = order.total original_shipment_total = order.shipment_total - expect { subject }. - to change { order.total }.from(original_total).to(original_total + original_shipment_total). - and change { order.shipment_total }.by(original_shipment_total) + expect { subject } + .to change { order.total }.from(original_total).to(original_total + original_shipment_total) + .and change { order.shipment_total }.by(original_shipment_total) end end @@ -98,8 +98,8 @@ it "doesn't change inventory units state" do expect { subject } - .not_to change { order.inventory_units.map(&:state).sort } - .from(%w[backordered on_hand]) + .not_to change { order.inventory_units.map(&:state).sort } + .from(%w[backordered on_hand]) end end @@ -209,7 +209,7 @@ let!(:stock_item) do variant.stock_items.find_or_create_by!( stock_location: desired_stock_location, - variant:, + variant: ) end @@ -304,7 +304,7 @@ context "when the original shipment had some backordered units" do let(:current_stock_item) { current_shipment.stock_location.stock_items.find_by(variant:) } let(:desired_stock_item) { desired_shipment.stock_location.stock_items.find_by(variant:) } - let(:backordered_units) { 6 } + let(:backordered_units) { 6 } before do current_shipment.inventory_units.limit(backordered_units).update_all(state: :backordered) diff --git a/core/spec/models/spree/gallery/product_gallery_spec.rb b/core/spec/models/spree/gallery/product_gallery_spec.rb index 61e54d56232..a3859257c94 100644 --- a/core/spec/models/spree/gallery/product_gallery_spec.rb +++ b/core/spec/models/spree/gallery/product_gallery_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/gallery' +require "rails_helper" +require "spree/testing_support/shared_examples/gallery" RSpec.describe Spree::Gallery::ProductGallery do let(:gallery) { described_class.new(product) } let(:product) { create(:product) } - shared_context 'has multiple images' do + shared_context "has multiple images" do let(:first_image) { build(:image) } let(:second_image) { build(:image) } @@ -17,5 +17,5 @@ end end - it_behaves_like 'a gallery' + it_behaves_like "a gallery" end diff --git a/core/spec/models/spree/gallery/variant_gallery_spec.rb b/core/spec/models/spree/gallery/variant_gallery_spec.rb index d4725bb1e4c..227a1433ffd 100644 --- a/core/spec/models/spree/gallery/variant_gallery_spec.rb +++ b/core/spec/models/spree/gallery/variant_gallery_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/gallery' +require "rails_helper" +require "spree/testing_support/shared_examples/gallery" RSpec.describe Spree::Gallery::VariantGallery do let(:gallery) { described_class.new(variant) } let(:variant) { build(:variant) } - shared_context 'has multiple images' do + shared_context "has multiple images" do let(:first_image) { build(:image) } let(:second_image) { build(:image) } @@ -17,5 +17,5 @@ end end - it_behaves_like 'a gallery' + it_behaves_like "a gallery" end diff --git a/core/spec/models/spree/image/preferences_spec.rb b/core/spec/models/spree/image/preferences_spec.rb index 7602d742792..9e1cdcd4937 100644 --- a/core/spec/models/spree/image/preferences_spec.rb +++ b/core/spec/models/spree/image/preferences_spec.rb @@ -1,18 +1,18 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Image, type: :model do custom_styles = { - mini: '48x48>', - small: '100x100>', - product: '240x240>', - large: '600x600>', - jumbo: '1200x1200>' + mini: "48x48>", + small: "100x100>", + product: "240x240>", + large: "600x600>", + jumbo: "1200x1200>" } custom_style_default = :other - it 'correctly sets the image styles ActiveStorage' do + it "correctly sets the image styles ActiveStorage" do stub_spree_preferences( product_image_styles: custom_styles, product_image_style_default: custom_style_default @@ -28,7 +28,7 @@ expect(active_storage_asset.attachment_definitions[:attachment][:default_style]).to eq(custom_style_default) end - it 'correctly sets the image styles Paperclip' do + it "correctly sets the image styles Paperclip" do stub_spree_preferences( product_image_styles: custom_styles, product_image_style_default: custom_style_default diff --git a/core/spec/models/spree/image_spec.rb b/core/spec/models/spree/image_spec.rb index a5e57029d82..db3485c426c 100644 --- a/core/spec/models/spree/image_spec.rb +++ b/core/spec/models/spree/image_spec.rb @@ -1,48 +1,49 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Image, type: :model do include ImageSpecHelper - it_behaves_like 'an attachment' do + + it_behaves_like "an attachment" do subject { create(:image) } let(:attachment_name) { :attachment } let(:default_style) { :product } end - it 'is valid when attachment has allowed content type' do - image = build(:image, attachment: open_image('blank.jpg')) + it "is valid when attachment has allowed content type" do + image = build(:image, attachment: open_image("blank.jpg")) expect(image).to be_valid end - it 'is not valid when attachment has restricted content type' do - image = build(:image, attachment: open_image('file.txt')) + it "is not valid when attachment has restricted content type" do + image = build(:image, attachment: open_image("file.txt")) expect(image).to_not be_valid end - describe 'attachment details' do - let(:image_file) { open_image('blank.jpg') } + describe "attachment details" do + let(:image_file) { open_image("blank.jpg") } subject { create(:image, attachment: image_file) } - it 'returns if attachment is present' do + it "returns if attachment is present" do expect(subject.attachment_present?).to be_truthy end - it 'returns attachment filename' do - expect(subject.filename).to end_with('blank.jpg') + it "returns attachment filename" do + expect(subject.filename).to end_with("blank.jpg") end - it 'returns attachment url' do - ActiveStorage::Current.url_options = { host: 'https://www.example.com' } + it "returns attachment url" do + ActiveStorage::Current.url_options = {host: "https://www.example.com"} - expect(subject.url(:product)).to include('blank.jpg') + expect(subject.url(:product)).to include("blank.jpg") end - it 'computes attachment width' do + it "computes attachment width" do expect(subject.attachment_width).to eq(1) end - it 'computes attachment height' do + it "computes attachment height" do expect(subject.attachment_height).to eq(1) end end diff --git a/core/spec/models/spree/inventory_unit_spec.rb b/core/spec/models/spree/inventory_unit_spec.rb index 15ef2734c86..de478107a87 100644 --- a/core/spec/models/spree/inventory_unit_spec.rb +++ b/core/spec/models/spree/inventory_unit_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::InventoryUnit, type: :model do let(:stock_location) { create(:stock_location_with_items) } @@ -18,7 +18,7 @@ context "#backordered_for_stock_item" do let(:order) do - order = create(:order, state: 'complete', ship_address: create(:ship_address)) + order = create(:order, state: "complete", ship_address: create(:ship_address)) order.completed_at = Time.current create(:shipment, order:, stock_location:) order.shipments.reload @@ -37,7 +37,7 @@ let!(:unit) do unit = shipment.inventory_units.first - unit.state = 'backordered' + unit.state = "backordered" unit.variant_id = stock_item.variant.id unit.line_item = line_item unit.tap(&:save!) @@ -59,7 +59,7 @@ it "does not find inventory units that aren't backordered" do on_hand_unit = shipment.inventory_units.build - on_hand_unit.state = 'on_hand' + on_hand_unit.state = "on_hand" on_hand_unit.line_item = line_item on_hand_unit.variant = stock_item.variant on_hand_unit.save! @@ -69,7 +69,7 @@ it "does not find inventory units that don't match the stock item's variant" do other_variant_unit = shipment.inventory_units.build - other_variant_unit.state = 'backordered' + other_variant_unit.state = "backordered" other_variant_unit.line_item = line_item other_variant_unit.variant = create(:variant) other_variant_unit.save! @@ -87,7 +87,7 @@ context "other shipments" do let(:other_order) do order = create(:order) - order.state = 'payment' + order.state = "payment" order.completed_at = nil order.tap(&:save!) end @@ -102,7 +102,7 @@ let!(:other_unit) do unit = other_shipment.inventory_units.build - unit.state = 'backordered' + unit.state = "backordered" unit.variant_id = stock_item.variant.id unit.line_item = line_item unit.tap(&:save!) @@ -157,7 +157,7 @@ end end - describe '#additional_tax_total' do + describe "#additional_tax_total" do let(:quantity) { 2 } let(:line_item_additional_tax_total) { 10.00 } let(:line_item) do @@ -171,12 +171,12 @@ build(:inventory_unit, line_item:) end - it 'is the correct amount' do + it "is the correct amount" do expect(subject.additional_tax_total).to eq line_item_additional_tax_total / quantity end end - describe '#included_tax_total' do + describe "#included_tax_total" do let(:quantity) { 2 } let(:line_item_included_tax_total) { 10.00 } let(:line_item) do @@ -190,12 +190,12 @@ build(:inventory_unit, line_item:) end - it 'is the correct amount' do + it "is the correct amount" do expect(subject.included_tax_total).to eq line_item_included_tax_total / quantity end end - describe '#additional_tax_total' do + describe "#additional_tax_total" do let(:quantity) { 2 } let(:line_item_additional_tax_total) { 10.00 } let(:line_item) do @@ -209,12 +209,12 @@ build(:inventory_unit, line_item:) end - it 'is the correct amount' do + it "is the correct amount" do expect(subject.additional_tax_total).to eq line_item_additional_tax_total / quantity end end - describe '#included_tax_total' do + describe "#included_tax_total" do let(:quantity) { 2 } let(:line_item_included_tax_total) { 10.00 } let(:line_item) do @@ -228,7 +228,7 @@ build(:inventory_unit, line_item:) end - it 'is the correct amount' do + it "is the correct amount" do expect(subject.included_tax_total).to eq line_item_included_tax_total / quantity end end @@ -264,14 +264,14 @@ it "cannot be destroyed when shipped" do inventory_unit = create(:inventory_unit, state: "shipped") expect(inventory_unit.destroy).to eq false - expect(inventory_unit.errors.full_messages.join).to match /Cannot destroy/ + expect(inventory_unit.errors.full_messages.join).to match(/Cannot destroy/) expect { inventory_unit.reload }.not_to raise_error end it "cannot be destroyed when returned" do inventory_unit = create(:inventory_unit, state: "returned") expect(inventory_unit.destroy).to eq false - expect(inventory_unit.errors.full_messages.join).to match /Cannot destroy/ + expect(inventory_unit.errors.full_messages.join).to match(/Cannot destroy/) expect { inventory_unit.reload }.not_to raise_error end @@ -284,7 +284,7 @@ it "cannot be destroyed if its shipment is shipped" do inventory_unit = create(:shipped_order).inventory_units.first expect(inventory_unit.destroy).to eq false - expect(inventory_unit.errors.full_messages.join).to match /Cannot destroy/ + expect(inventory_unit.errors.full_messages.join).to match(/Cannot destroy/) expect { inventory_unit.reload }.not_to raise_error end end diff --git a/core/spec/models/spree/item_total_spec.rb b/core/spec/models/spree/item_total_spec.rb index 3597c51860f..86ef7b65c7a 100644 --- a/core/spec/models/spree/item_total_spec.rb +++ b/core/spec/models/spree/item_total_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::ItemTotal do describe "#recalculate!" do @@ -36,9 +36,9 @@ it "updates item totals" do expect { subject - }.to change(item, :adjustment_total).from(0).to(4). - and change { item.included_tax_total }.from(0).to(2). - and change { item.additional_tax_total }.from(0).to(3) + }.to change(item, :adjustment_total).from(0).to(4) + .and change { item.included_tax_total }.from(0).to(2) + .and change { item.additional_tax_total }.from(0).to(3) end end @@ -58,9 +58,9 @@ it "updates the adjustment total" do expect { subject - }.to change { item.adjustment_total }.from(0).to(3). - and change { item.included_tax_total }.from(0).to(2). - and change { item.additional_tax_total }.from(0).to(3) + }.to change { item.adjustment_total }.from(0).to(3) + .and change { item.included_tax_total }.from(0).to(2) + .and change { item.additional_tax_total }.from(0).to(3) end end end diff --git a/core/spec/models/spree/line_item_spec.rb b/core/spec/models/spree/line_item_spec.rb index 7dc4b4ae2f9..7663321b719 100644 --- a/core/spec/models/spree/line_item_spec.rb +++ b/core/spec/models/spree/line_item_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::LineItem, type: :model do let(:order) { create :order_with_line_items, line_items_count: 1 } let(:line_item) { order.line_items.first } let(:target_shipment) { Spree::Shipment.new } - context '#destroy' do + context "#destroy" do it "fetches soft-deleted products" do line_item.product.discard expect(line_item.reload.product).to be_a Spree::Product @@ -39,16 +39,16 @@ end end - describe '.new' do + describe ".new" do let(:variant) { create :variant } subject(:line_item) { Spree::LineItem.new(variant:, order:) } - it 'copies the variants price' do + it "copies the variants price" do expect(line_item.price).to eq(variant.price) end - it 'copies the variants cost_price' do + it "copies the variants cost_price" do expect(line_item.cost_price).to eq(variant.cost_price) end @@ -56,19 +56,19 @@ expect(line_item.currency).to eq(order.currency) end - it 'copies the variants tax category' do + it "copies the variants tax category" do expect(line_item.tax_category).to eq(line_item.variant.tax_category) end end - describe '#total_before_tax' do + describe "#total_before_tax" do before do line_item.update!(price: 10, quantity: 2) end let!(:admin_adjustment) { create(:adjustment, adjustable: line_item, order: line_item.order, amount: -1, source: nil) } let!(:other_adjustment) { create(:adjustment, adjustable: line_item, order: line_item.order, amount: -2, source: nil) } - it 'returns the amount minus any adjustments' do + it "returns the amount minus any adjustments" do expect(line_item.total_before_tax).to eq(20 - 1 - 2) end end @@ -84,14 +84,14 @@ end end - describe '.single_money' do + describe ".single_money" do before { line_item.price = 3.50 } it "returns a Spree::Money representing the price for one variant" do expect(line_item.single_money.to_s).to eq("$3.50") end end - context 'setting a line item price' do + context "setting a line item price" do let(:store) { create(:store, default: true) } let(:order) { Spree::Order.new(currency: "RUB", store:) } let(:variant) { Spree::Variant.new(product: Spree::Product.new) } @@ -119,7 +119,7 @@ end describe "#options=" do - let(:options) { { price: 123, quantity: 5 } } + let(:options) { {price: 123, quantity: 5} } it "updates the data provided in the options" do line_item.options = options @@ -129,7 +129,7 @@ end context "when price is not provided" do - let(:options) { { quantity: 5 } } + let(:options) { {quantity: 5} } it "sets price anyway, retrieving it from line item options" do expect(line_item.variant) @@ -144,32 +144,32 @@ end end - describe 'money_price=' do + describe "money_price=" do let(:currency) { "USD" } let(:new_price) { Spree::Money.new(99.00, currency:) } - it 'assigns a new price' do + it "assigns a new price" do line_item.money_price = new_price expect(line_item.price).to eq(new_price.cents / 100.0) end - context 'when the new price is nil' do + context "when the new price is nil" do let(:new_price) { nil } - it 'makes the line item price empty' do + it "makes the line item price empty" do line_item.money_price = new_price expect(line_item.price).to be_nil end end - context 'when the price has a currency different from the order currency' do + context "when the price has a currency different from the order currency" do let(:currency) { "RUB" } - it 'is not valid' do + it "is not valid" do line_item.money_price = new_price expect(line_item).not_to be_valid expect(line_item.errors[:price]) - .to include 'Line item price currency must match order currency!' + .to include "Line item price currency must match order currency!" end end end diff --git a/core/spec/models/spree/log_entry_spec.rb b/core/spec/models/spree/log_entry_spec.rb index 287e390c0b5..4d95ed24a36 100644 --- a/core/spec/models/spree/log_entry_spec.rb +++ b/core/spec/models/spree/log_entry_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::LogEntry, type: :model do - describe '#parsed_details' do - it 'allows aliases by default' do + describe "#parsed_details" do + it "allows aliases by default" do x = [] x << x @@ -13,7 +13,7 @@ expect { log_entry.parsed_details }.not_to raise_error end - it 'can disable aliases and raises a meaningful exception when used' do + it "can disable aliases and raises a meaningful exception when used" do stub_spree_preferences(log_entry_allow_aliases: false) x = [] x << x @@ -23,15 +23,15 @@ expect { log_entry.parsed_details }.to raise_error(described_class::BadAlias, /log_entry_allow_aliases/) end - it 'can parse ActiveMerchant::Billing::Response instances' do - response = ActiveMerchant::Billing::Response.new('success', 'message') + it "can parse ActiveMerchant::Billing::Response instances" do + response = ActiveMerchant::Billing::Response.new("success", "message") log_entry = described_class.new(details: response.to_yaml) expect { log_entry.parsed_details }.not_to raise_error end - it 'can parse ActiveSupport::TimeWithZone instances' do + it "can parse ActiveSupport::TimeWithZone instances" do time = Time.zone.now log_entry = described_class.new(details: time.to_yaml) @@ -39,30 +39,30 @@ expect { log_entry.parsed_details }.not_to raise_error end - it 'can parse user specified class instances' do - stub_spree_preferences(log_entry_permitted_classes: ['Date']) + it "can parse user specified class instances" do + stub_spree_preferences(log_entry_permitted_classes: ["Date"]) log_entry = described_class.new(details: Date.today) expect { log_entry.parsed_details }.not_to raise_error end - it 'raises a meaningful exception when a disallowed class is found' do + it "raises a meaningful exception when a disallowed class is found" do log_entry = described_class.new(details: Date.today) expect { log_entry.parsed_details }.to raise_error(described_class::DisallowedClass, /log_entry_permitted_classes/) end end - describe '#parsed_details=' do - it 'serializes the provided value to YAML' do - log_entry = described_class.new(parsed_details: { "foo" => "bar" }) + describe "#parsed_details=" do + it "serializes the provided value to YAML" do + log_entry = described_class.new(parsed_details: {"foo" => "bar"}) expect(log_entry.details).to eq("---\nfoo: bar\n") expect(log_entry.parsed_details).to eq("foo" => "bar") end - it 'allows aliases by default' do + it "allows aliases by default" do x = [] x << x @@ -71,7 +71,7 @@ expect { log_entry.parsed_details = x }.not_to raise_error end - it 'can disable aliases and raises a meaningful exception when used' do + it "can disable aliases and raises a meaningful exception when used" do stub_spree_preferences(log_entry_allow_aliases: false) x = [] x << x @@ -81,15 +81,15 @@ expect { log_entry.parsed_details = x }.to raise_error(described_class::BadAlias, /log_entry_allow_aliases/) end - it 'can dump ActiveMerchant::Billing::Response instances' do - response = ActiveMerchant::Billing::Response.new('success', 'message') + it "can dump ActiveMerchant::Billing::Response instances" do + response = ActiveMerchant::Billing::Response.new("success", "message") log_entry = described_class.new expect { log_entry.parsed_details = response }.not_to raise_error end - it 'can dump ActiveSupport::TimeWithZone instances' do + it "can dump ActiveSupport::TimeWithZone instances" do time = Time.zone.now log_entry = described_class.new @@ -97,15 +97,15 @@ expect { log_entry.parsed_details = time }.not_to raise_error end - it 'can dump user specified class instances' do - stub_spree_preferences(log_entry_permitted_classes: ['Date']) + it "can dump user specified class instances" do + stub_spree_preferences(log_entry_permitted_classes: ["Date"]) log_entry = described_class.new expect { log_entry.parsed_details = Date.new }.not_to raise_error end - it 'raises a meaningful exception when a disallowed class is found' do + it "raises a meaningful exception when a disallowed class is found" do log_entry = described_class.new expect { log_entry.parsed_details = Date.new }.to raise_error( @@ -114,13 +114,13 @@ end end - describe '#parsed_payment_response_details_with_fallback=' do - it 'wraps non serializable responses' do + describe "#parsed_payment_response_details_with_fallback=" do + it "wraps non serializable responses" do log_entry = described_class.new bad_response = ActiveMerchant::Billing::Response.new( true, - 'FooBar', - { foo: { bar: "Symbol keys are not allowed" } } + "FooBar", + {foo: {bar: "Symbol keys are not allowed"}} ) log_entry.parsed_payment_response_details_with_fallback = bad_response @@ -128,8 +128,8 @@ expect(details.success?).to eq(true) expect(details.message).to eq("[WARNING: An error occurred while trying to serialize the payment response] FooBar") - expect(details.params['data']).to include('"Symbol keys are not allowed"') - expect(details.params['error']).to include('Tried to dump unspecified class: Symbol') + expect(details.params["data"]).to include('"Symbol keys are not allowed"') + expect(details.params["error"]).to include("Tried to dump unspecified class: Symbol") end end end diff --git a/core/spec/models/spree/money_spec.rb b/core/spec/models/spree/money_spec.rb index ca06ff62b3d..54eee145432 100644 --- a/core/spec/models/spree/money_spec.rb +++ b/core/spec/models/spree/money_spec.rb @@ -1,54 +1,54 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Money do before do stub_spree_preferences(currency: "USD") end - describe '#initialize' do + describe "#initialize" do subject do described_class.new(amount, currency:, with_currency: true).to_s end - context 'with no currency' do + context "with no currency" do let(:currency) { nil } - let(:amount){ 10 } + let(:amount) { 10 } it { should == "$10.00 USD" } end - context 'with currency' do - let(:currency){ 'USD' } + context "with currency" do + let(:currency) { "USD" } context "CAD" do - let(:amount){ '10.00' } - let(:currency){ 'CAD' } + let(:amount) { "10.00" } + let(:currency) { "CAD" } it { should == "$10.00 CAD" } end context "with string amount" do - let(:amount){ '10.00' } + let(:amount) { "10.00" } it { should == "$10.00 USD" } end context "with no decimal point" do - let(:amount){ '10' } + let(:amount) { "10" } it { should == "$10.00 USD" } end - context 'with fixnum' do - let(:amount){ 10 } + context "with fixnum" do + let(:amount) { 10 } it { should == "$10.00 USD" } end - context 'with float' do - let(:amount){ 10.00 } + context "with float" do + let(:amount) { 10.00 } it { should == "$10.00 USD" } end - context 'with BigDecimal' do - let(:amount){ BigDecimal('10.00') } + context "with BigDecimal" do + let(:amount) { BigDecimal("10.00") } it { should == "$10.00 USD" } end end @@ -86,14 +86,14 @@ context "currency parameter" do context "when currency is specified in Canadian Dollars" do it "uses the currency param over the global configuration" do - money = Spree::Money.new(10, currency: 'CAD', with_currency: true, html_wrap: false) + money = Spree::Money.new(10, currency: "CAD", with_currency: true, html_wrap: false) expect(money.to_s).to eq("$10.00 CAD") end end context "when currency is specified in Japanese Yen" do it "uses the currency param over the global configuration" do - money = Spree::Money.new(100, currency: 'JPY', html_wrap: false) + money = Spree::Money.new(100, currency: "JPY", html_wrap: false) expect(money.to_s).to eq("¥100") end end @@ -101,12 +101,12 @@ context "symbol positioning" do it "passed in option" do - money = Spree::Money.new(10, format: '%n %u', html_wrap: false) + money = Spree::Money.new(10, format: "%n %u", html_wrap: false) expect(money.to_s).to eq("10.00 $") end it "config option" do - money = Spree::Money.new(10, format: '%n %u', html_wrap: false) + money = Spree::Money.new(10, format: "%n %u", html_wrap: false) expect(money.to_s).to eq("10.00 $") end end @@ -141,25 +141,25 @@ # Regression test for https://github.com/spree/spree/issues/2634 it "formats as plain by default" do - money = Spree::Money.new(10, format: '%n %u') + money = Spree::Money.new(10, format: "%n %u") expect(money.to_s).to eq("10.00 €") end it "formats as HTML if asked (nicely) to" do - money = Spree::Money.new(10, format: '%n %u') + money = Spree::Money.new(10, format: "%n %u") # The HTML'ified version of "10.00 €" expect(money.to_html).to eq("10.00 ") end it "formats as HTML with currency" do - money = Spree::Money.new(10, format: '%n %u', with_currency: true) + money = Spree::Money.new(10, format: "%n %u", with_currency: true) # The HTML'ified version of "10.00 €" expect(money.to_html).to eq("10.00 EUR") end end describe "#as_json" do - let(:options) { double('options') } + let(:options) { double("options") } it "returns the expected string" do money = Spree::Money.new(10) @@ -167,7 +167,7 @@ end end - describe 'subtraction' do + describe "subtraction" do context "for money objects with same currency" do let(:money_1) { Spree::Money.new(32.00, currency: "USD") } let(:money_2) { Spree::Money.new(15.00, currency: "USD") } @@ -190,13 +190,13 @@ let(:money_1) { Spree::Money.new(32.00, currency: "EUR") } let(:money_2) { ::Money.new(1500) } - it 'raises a TypeError' do + it "raises a TypeError" do expect { money_1 - money_2 }.to raise_error(TypeError) end end end - describe 'addition' do + describe "addition" do context "for money objects with same currency" do let(:money_1) { Spree::Money.new(37.00, currency: "USD") } let(:money_2) { Spree::Money.new(15.00, currency: "USD") } @@ -219,18 +219,18 @@ let(:money_1) { Spree::Money.new(32.00, currency: "EUR") } let(:money_2) { ::Money.new(1500) } - it 'raises a TypeError' do + it "raises a TypeError" do expect { money_1 + money_2 }.to raise_error(TypeError) end end end - describe 'equality checks' do + describe "equality checks" do context "if other does not respond to .money" do let(:money_1) { Spree::Money.new(32.00, currency: "EUR") } let(:money_2) { ::Money.new(1500) } - it 'raises a TypeError' do + it "raises a TypeError" do expect { money_1 == money_2 }.to raise_error(TypeError) end end diff --git a/core/spec/models/spree/null_promotion_handler_spec.rb b/core/spec/models/spree/null_promotion_handler_spec.rb index 9d09f15c3c2..acd098e171b 100644 --- a/core/spec/models/spree/null_promotion_handler_spec.rb +++ b/core/spec/models/spree/null_promotion_handler_spec.rb @@ -51,7 +51,7 @@ describe "#coupon_code" do subject { handler.coupon_code } - it { is_expected.to eq 'null' } + it { is_expected.to eq "null" } end describe "#success" do diff --git a/core/spec/models/spree/option_type_spec.rb b/core/spec/models/spree/option_type_spec.rb index e32242ea025..b5d9675a5e0 100644 --- a/core/spec/models/spree/option_type_spec.rb +++ b/core/spec/models/spree/option_type_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::OptionType, type: :model do context "touching" do diff --git a/core/spec/models/spree/option_value_spec.rb b/core/spec/models/spree/option_value_spec.rb index f55dae08e0f..7efb6328ee9 100644 --- a/core/spec/models/spree/option_value_spec.rb +++ b/core/spec/models/spree/option_value_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::OptionValue, type: :model do include ActiveSupport::Testing::TimeHelpers @@ -50,7 +50,7 @@ end end - it 'raises when creating an option_value with no associated option_type' do + it "raises when creating an option_value with no associated option_type" do expect { create(:option_value, option_type: nil) }.to raise_error(ActiveRecord::RecordInvalid) diff --git a/core/spec/models/spree/order/address_spec.rb b/core/spec/models/spree/order/address_spec.rb index 92fefa62185..03edf11e484 100644 --- a/core/spec/models/spree/order/address_spec.rb +++ b/core/spec/models/spree/order/address_spec.rb @@ -1,26 +1,26 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Order, type: :model do let(:order) { Spree::Order.new } - context 'validation' do + context "validation" do address_scenarios = { - 'use_billing' => { source: :bill_address, target: :ship_address }, - 'use_shipping' => { source: :ship_address, target: :bill_address } + "use_billing" => {source: :bill_address, target: :ship_address}, + "use_shipping" => {source: :ship_address, target: :bill_address} } address_scenarios.each do |use_attribute, addresses| context "when #{use_attribute} is populated" do before do - order.send("#{addresses[:source]}=", stub_model(Spree::Address)) - order.send("#{addresses[:target]}=", nil) + order.send(:"#{addresses[:source]}=", stub_model(Spree::Address)) + order.send(:"#{addresses[:target]}=", nil) end - ['true', true, '1'].each do |truthy_value| + ["true", true, "1"].each do |truthy_value| context "with #{truthy_value.inspect}" do - before { order.send("#{use_attribute}=", truthy_value) } + before { order.send(:"#{use_attribute}=", truthy_value) } it "clones the #{addresses[:source]} to the #{addresses[:target]}" do order.valid? @@ -30,7 +30,7 @@ end context "with something other than a 'truthful' value" do - before { order.send("#{use_attribute}=", '0') } + before { order.send(:"#{use_attribute}=", "0") } it "does not clone the #{addresses[:source]} to the #{addresses[:target]}" do order.valid? diff --git a/core/spec/models/spree/order/adjustments_spec.rb b/core/spec/models/spree/order/adjustments_spec.rb index 7f61335c264..4ba73cca0b4 100644 --- a/core/spec/models/spree/order/adjustments_spec.rb +++ b/core/spec/models/spree/order/adjustments_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Order do context "when an order has an adjustment that zeroes the total, but another adjustment for shipping that raises it above zero" do @@ -16,7 +16,7 @@ before do persisted_order.line_items << line_item create(:adjustment, amount: -line_item.amount, label: "Promotion", adjustable: line_item, order: persisted_order) - persisted_order.state = 'delivery' + persisted_order.state = "delivery" persisted_order.save # To ensure new state_change event end diff --git a/core/spec/models/spree/order/callbacks_spec.rb b/core/spec/models/spree/order/callbacks_spec.rb index 96d9122dfba..a2bf41070cc 100644 --- a/core/spec/models/spree/order/callbacks_spec.rb +++ b/core/spec/models/spree/order/callbacks_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Order, type: :model do let(:order) { stub_model(Spree::Order) } @@ -12,7 +12,7 @@ context "email validation" do # Regression test for https://github.com/spree/spree/issues/1238 it "o'brien@gmail.com is a valid email address" do - order.state = 'address' + order.state = "address" order.email = "o'brien@gmail.com" expect(order.errors[:email].size).to eq(0) end diff --git a/core/spec/models/spree/order/checkout_spec.rb b/core/spec/models/spree/order/checkout_spec.rb index 99b066ac31f..d379f5d741e 100644 --- a/core/spec/models/spree/order/checkout_spec.rb +++ b/core/spec/models/spree/order/checkout_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/order_walkthrough' +require "rails_helper" +require "spree/testing_support/order_walkthrough" RSpec.describe Spree::Order, type: :model do let!(:store) { create(:store) } @@ -14,10 +14,10 @@ def assert_state_changed(order, from, to) context "with default state machine" do transitions = [ - { address: :delivery }, - { delivery: :payment }, - { payment: :confirm }, - { delivery: :confirm } + {address: :delivery}, + {delivery: :payment}, + {payment: :confirm}, + {delivery: :confirm} ] transitions.each do |transition| @@ -27,8 +27,8 @@ def assert_state_changed(order, from, to) end end - it '.find_transition when contract was broken' do - expect(Spree::Order.find_transition({ foo: :bar, baz: :dog })).to be_falsey + it ".find_transition when contract was broken" do + expect(Spree::Order.find_transition({foo: :bar, baz: :dog})).to be_falsey end describe "remove_transition" do @@ -36,13 +36,13 @@ def assert_state_changed(order, from, to) Spree::Order.checkout_flow(&@old_checkout_flow) end - it '.remove_transition', partial_double_verification: false do - options = { from: transitions.first.keys.first, to: transitions.first.values.first } + it ".remove_transition", partial_double_verification: false do + options = {from: transitions.first.keys.first, to: transitions.first.values.first} allow(Spree::Order).to receive(:next_event_transition).and_return([options]) expect(Spree::Order.remove_transition(options)).to be_truthy end - it '.remove_transition when contract was broken' do + it ".remove_transition when contract was broken" do expect(Spree::Order.remove_transition(nil)).to be_falsey end end @@ -69,7 +69,7 @@ def assert_state_changed(order, from, to) end specify do - expect(order.checkout_steps).to eq(%w(address delivery payment confirm complete)) + expect(order.checkout_steps).to eq(%w[address delivery payment confirm complete]) end end @@ -79,21 +79,21 @@ def assert_state_changed(order, from, to) end specify do - expect(order.checkout_steps).to eq(%w(address delivery payment confirm complete)) + expect(order.checkout_steps).to eq(%w[address delivery payment confirm complete]) end end context "when payment not required" do before { allow(order).to receive_messages payment_required?: false } specify do - expect(order.checkout_steps).to eq(%w(address delivery confirm complete)) + expect(order.checkout_steps).to eq(%w[address delivery confirm complete]) end end context "when payment required" do before { allow(order).to receive_messages payment_required?: true } specify do - expect(order.checkout_steps).to eq(%w(address delivery payment confirm complete)) + expect(order.checkout_steps).to eq(%w[address delivery payment confirm complete]) end end end @@ -116,7 +116,7 @@ def assert_state_changed(order, from, to) it "transitions to address" do perform_enqueued_jobs do order.next! - assert_state_changed(order, 'cart', 'address') + assert_state_changed(order, "cart", "address") expect(order.state).to eq("address") end end @@ -132,7 +132,7 @@ def assert_state_changed(order, from, to) shared_examples "it references the user's the default address" do it do default_attributes = default_address.reload.value_attributes - order_attributes = Spree::Address.value_attributes(order.send("#{address_kind}_address".to_sym).try(:attributes)) + order_attributes = Spree::Address.value_attributes(order.send(:"#{address_kind}_address").try(:attributes)) expect(order_attributes).to eq(default_attributes) end @@ -164,7 +164,7 @@ def assert_state_changed(order, from, to) it "cannot transition to address without any line items" do expect(order.line_items).to be_blank - expect { order.next! }.to raise_error(StateMachines::InvalidTransition, /#{I18n.t('spree.there_are_no_items_for_this_order')}/) + expect { order.next! }.to raise_error(StateMachines::InvalidTransition, /#{I18n.t("spree.there_are_no_items_for_this_order")}/) end end @@ -175,7 +175,7 @@ def assert_state_changed(order, from, to) before do order.line_items.reload - order.update!(state: 'address') + order.update!(state: "address") order.ship_address = ship_address order.email = "user@example.com" order.save! @@ -204,7 +204,7 @@ def assert_state_changed(order, from, to) it "transitions to delivery" do perform_enqueued_jobs do order.next! - assert_state_changed(order, 'address', 'delivery') + assert_state_changed(order, "address", "delivery") expect(order.state).to eq("delivery") end end @@ -245,17 +245,17 @@ def assert_state_changed(order, from, to) order.ship_address = ship_address end - context 'when order has default selected_shipping_rate_id', partial_double_verification: false do + context "when order has default selected_shipping_rate_id", partial_double_verification: false do let(:shipment) { create(:shipment, order:) } let(:shipping_method) { create(:shipping_method) } let(:shipping_rate) { [ - Spree::ShippingRate.create!(shipping_method:, cost: 10.00, shipment:) - ] + Spree::ShippingRate.create!(shipping_method:, cost: 10.00, shipment:) + ] } before do - order.update!(state: 'address') + order.update!(state: "address") shipment.selected_shipping_rate_id = shipping_rate.first.id order.email = "user@example.com" order.save! @@ -264,30 +264,29 @@ def assert_state_changed(order, from, to) allow(order).to receive(:ensure_available_shipping_rates) { true } end - it 'should update shipment_total' do - expect { order.next! }.to change{ order.shipment_total }.by(10.00) + it "should update shipment_total" do + expect { order.next! }.to change { order.shipment_total }.by(10.00) end end context "cannot transition to delivery" do context "if there are no shipping rates for any shipment" do - let!(:line_item){ create :line_item, order: } + let!(:line_item) { create :line_item, order: } before do - order.update!(state: 'address') - order.email = 'user@example.com' + order.update!(state: "address") + order.email = "user@example.com" end specify do transition = lambda { order.next! } - expect { transition.call }.to raise_error(StateMachines::InvalidTransition, /#{I18n.t('spree.items_cannot_be_shipped')}/) + expect { transition.call }.to raise_error(StateMachines::InvalidTransition, /#{I18n.t("spree.items_cannot_be_shipped")}/) end end end end context "from delivery", partial_double_verification: false do - before do - order.update!(state: 'delivery') + order.update!(state: "delivery") allow(order).to receive(:ensure_available_shipping_rates) { true } end @@ -299,19 +298,19 @@ def assert_state_changed(order, from, to) it "transitions to payment" do perform_enqueued_jobs do order.next! - assert_state_changed(order, 'delivery', 'payment') - expect(order.state).to eq('payment') + assert_state_changed(order, "delivery", "payment") + expect(order.state).to eq("payment") end end - it 'fails if billing address is required and missing' do + it "fails if billing address is required and missing" do payment_method = create(:payment_method) allow(payment_method).to receive(:billing_address_required?).and_return(true) allow(order).to receive(:available_payment_methods).and_return([payment_method]) order.bill_address = nil allow(Spree::Config).to receive(:billing_address_required).and_return(true) - expect { order.next! }.to raise_error(StateMachines::InvalidTransition, /#{I18n.t('spree.bill_address_required')}/) + expect { order.next! }.to raise_error(StateMachines::InvalidTransition, /#{I18n.t("spree.bill_address_required")}/) end end @@ -364,19 +363,19 @@ def assert_state_changed(order, from, to) end context "to payment" do - let(:user_bill_address) { nil } - let(:order_bill_address) { nil } + let(:user_bill_address) { nil } + let(:order_bill_address) { nil } let(:default_credit_card) { create(:credit_card) } before do - user = create(:user, email: 'solidus@example.org', bill_address: user_bill_address) + user = create(:user, email: "solidus@example.org", bill_address: user_bill_address) default_credit_card.update(user:) wallet_payment_source = user.wallet.add(default_credit_card) user.wallet.default_wallet_payment_source = wallet_payment_source order.user = user allow(order).to receive_messages(payment_required?: true) - order.update!(state: 'delivery') + order.update!(state: "delivery") order.bill_address = order_bill_address order.save! order.next! @@ -384,7 +383,7 @@ def assert_state_changed(order, from, to) end it "assigns the user's default credit card" do - expect(order.state).to eq 'payment' + expect(order.state).to eq "payment" expect(order.payments.count).to eq 1 expect(order.payments.first.source).to eq default_credit_card end @@ -406,7 +405,7 @@ def assert_state_changed(order, from, to) context "from payment" do before do - order.update!(state: 'payment') + order.update!(state: "payment") allow(order).to receive(:ensure_available_shipping_rates) { true } end @@ -417,7 +416,7 @@ def assert_state_changed(order, from, to) it "transitions to confirm" do perform_enqueued_jobs do order.next! - assert_state_changed(order, 'payment', 'confirm') + assert_state_changed(order, "payment", "confirm") expect(order.state).to eq("confirm") end end @@ -433,7 +432,7 @@ def assert_state_changed(order, from, to) perform_enqueued_jobs do expect(order).not_to receive(:process_payments!) order.next! - assert_state_changed(order, 'payment', 'confirm') + assert_state_changed(order, "payment", "confirm") expect(order.state).to eq("confirm") end end @@ -443,7 +442,7 @@ def assert_state_changed(order, from, to) context "from confirm" do before do - order.update!(state: 'confirm') + order.update!(state: "confirm") order.save! end @@ -458,14 +457,14 @@ def assert_state_changed(order, from, to) context "to complete" do before do - order.update!(state: 'confirm') + order.update!(state: "confirm") order.save! end context "out of stock" do before do order.user = FactoryBot.create(:user) - order.email = 'solidus@example.org' + order.email = "solidus@example.org" order.payments << FactoryBot.create(:payment) allow(order).to receive_messages(payment_required?: true) order.line_items << FactoryBot.create(:line_item) @@ -483,16 +482,16 @@ def assert_state_changed(order, from, to) order.complete! }.to raise_error Spree::Order::InsufficientStock - expect(order.state).to eq 'confirm' + expect(order.state).to eq "confirm" expect(order.line_items.first.errors[:quantity]).to be_present - expect(order.payments.first.state).to eq('checkout') + expect(order.payments.first.state).to eq("checkout") end end context "no inventory units" do before do order.user = FactoryBot.create(:user) - order.email = 'solidus@example.com' + order.email = "solidus@example.com" order.payments << FactoryBot.create(:payment) allow(order).to receive_messages(payment_required?: true) allow(order).to receive(:ensure_available_shipping_rates) { true } @@ -505,9 +504,9 @@ def assert_state_changed(order, from, to) it "does not allow order to complete" do expect { order.complete! }.to raise_error Spree::Order::InsufficientStock - expect(order.state).to eq 'confirm' + expect(order.state).to eq "confirm" expect(order.line_items.first.errors[:inventory]).to be_present - expect(order.payments.first.state).to eq('checkout') + expect(order.payments.first.state).to eq("checkout") end end @@ -516,10 +515,10 @@ def assert_state_changed(order, from, to) let(:payment) { create :payment, order:, state: "pending", amount: order.total } it "allows the order to complete" do - expect { order.complete! }. - to change { order.state }. - from("confirm"). - to("complete") + expect { order.complete! } + .to change { order.state } + .from("confirm") + .to("complete") end end @@ -537,14 +536,14 @@ def assert_state_changed(order, from, to) context "exchange order completion" do before do - order.email = 'solidus@example.org' + order.email = "solidus@example.org" order.payments << FactoryBot.create(:payment) order.shipments.create! allow(order).to receive_messages(payment_required?: true) allow(order).to receive(:ensure_available_shipping_rates).and_return(true) end - context 'when the line items are not available' do + context "when the line items are not available" do before do order.line_items << FactoryBot.create(:line_item) order.store = FactoryBot.create(:store) @@ -554,9 +553,9 @@ def assert_state_changed(order, from, to) order.save! end - it 'does not allow the order to completed' do + it "does not allow the order to completed" do expect { order.complete! }.to raise_error Spree::Order::InsufficientStock - expect(order.payments.first.state).to eq('checkout') + expect(order.payments.first.state).to eq("checkout") end end end @@ -565,7 +564,7 @@ def assert_state_changed(order, from, to) before do order.user = FactoryBot.create(:user) order.store = FactoryBot.create(:store) - order.email = 'solidus@example.org' + order.email = "solidus@example.org" order.payments << FactoryBot.create(:payment, order:) # make sure we will actually capture a payment @@ -581,7 +580,7 @@ def assert_state_changed(order, from, to) it "makes the current credit card a user's default credit card" do order.complete! - expect(order.state).to eq 'complete' + expect(order.state).to eq "complete" expect(order.user.reload.wallet.default_wallet_payment_source.payment_source).to eq(order.credit_cards.first) end @@ -595,9 +594,9 @@ def assert_state_changed(order, from, to) context "a payment fails during processing", partial_double_verification: false do before do order.user = FactoryBot.create(:user) - order.email = 'solidus@example.org' + order.email = "solidus@example.org" payment = FactoryBot.create(:payment) - allow(payment).to receive(:process!).and_raise(Spree::Core::GatewayError.new('processing failed')) + allow(payment).to receive(:process!).and_raise(Spree::Core::GatewayError.new("processing failed")) order.line_items.each { |li| li.inventory_units.create! } order.payments << payment @@ -612,15 +611,15 @@ def assert_state_changed(order, from, to) it "transitions to the payment state" do expect { order.complete! }.to raise_error StateMachines::InvalidTransition - expect(order.reload.state).to eq 'payment' + expect(order.reload.state).to eq "payment" end end - context 'the order is already paid' do + context "the order is already paid" do let(:order) { create(:order_with_line_items) } - it 'can complete the order' do - create(:payment, state: 'completed', order:, amount: order.total) + it "can complete the order" do + create(:payment, state: "completed", order:, amount: order.total) order.recalculate expect(order.complete).to eq(true) end @@ -635,9 +634,9 @@ def assert_state_changed(order, from, to) end it "also resumes the shipments" do - expect(order.shipments.map(&:state)).to eq %w(canceled) + expect(order.shipments.map(&:state)).to eq %w[canceled] order.resume! - expect(order.shipments.map(&:state)).to eq %w(pending) + expect(order.shipments.map(&:state)).to eq %w[pending] end end @@ -657,7 +656,7 @@ def assert_state_changed(order, from, to) end it "should not keep old event transitions when checkout_flow is redefined" do - expect(Spree::Order.next_event_transitions).to eq([{ cart: :payment }, { payment: :complete }]) + expect(Spree::Order.next_event_transitions).to eq([{cart: :payment}, {payment: :complete}]) end it "should not keep old events when checkout_flow is redefined" do @@ -672,7 +671,7 @@ def assert_state_changed(order, from, to) # Regression test for https://github.com/spree/spree/issues/3665 context "with only a complete step" do - let!(:line_item){ create :line_item, order: } + let!(:line_item) { create :line_item, order: } before do @old_checkout_flow = Spree::Order.checkout_flow @@ -688,16 +687,16 @@ def assert_state_changed(order, from, to) end it "does not attempt to check shipping rates" do - order.email = 'user@example.com' + order.email = "user@example.com" expect(order).not_to receive(:ensure_available_shipping_rates) perform_enqueued_jobs do order.next! - assert_state_changed(order, 'cart', 'complete') + assert_state_changed(order, "cart", "complete") end end it "does not attempt to process payments", partial_double_verification: false do - order.email = 'user@example.com' + order.email = "user@example.com" allow(order).to receive(:ensure_promotions_eligible).and_return(true) allow(order).to receive(:ensure_line_item_variants_are_not_deleted).and_return(true) allow(order).to receive_message_chain(:line_items, :present?).and_return(true) @@ -706,7 +705,7 @@ def assert_state_changed(order, from, to) expect(order).not_to receive(:process_payments!) perform_enqueued_jobs do order.next! - assert_state_changed(order, 'cart', 'complete') + assert_state_changed(order, "cart", "complete") end end end @@ -740,7 +739,7 @@ def assert_state_changed(order, from, to) specify do order = Spree::Order.new - expect(order.checkout_steps).to eq(%w(new_step before_address address delivery confirm complete)) + expect(order.checkout_steps).to eq(%w[new_step before_address address delivery confirm complete]) end end @@ -753,7 +752,7 @@ def assert_state_changed(order, from, to) specify do order = Spree::Order.new - expect(order.checkout_steps).to eq(%w(new_step address after_address delivery confirm complete)) + expect(order.checkout_steps).to eq(%w[new_step address after_address delivery confirm complete]) end end end @@ -780,7 +779,7 @@ def assert_state_changed(order, from, to) specify do order = Spree::Order.new - expect(order.checkout_steps).to eq(%w(delivery confirm complete)) + expect(order.checkout_steps).to eq(%w[delivery confirm complete]) end end end diff --git a/core/spec/models/spree/order/finalizing_spec.rb b/core/spec/models/spree/order/finalizing_spec.rb index c4964b9ea24..163d302e55f 100644 --- a/core/spec/models/spree/order/finalizing_spec.rb +++ b/core/spec/models/spree/order/finalizing_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Order, type: :model do context "#complete!" do @@ -21,7 +21,7 @@ it "should change the shipment state to ready if order is paid" do order.payments.map(&:complete!) - expect { order.complete! }.to change { order.shipments.first.state }.from('pending').to('ready') + expect { order.complete! }.to change { order.shipments.first.state }.from("pending").to("ready") end it "should freeze all adjustments" do @@ -43,7 +43,7 @@ it "should leave order in complete state" do order.complete! - expect(order.state).to eq 'complete' + expect(order.state).to eq "complete" end end end @@ -60,20 +60,20 @@ end end - context 'with event notifications' do - it 'sends an email' do + context "with event notifications" do + it "sends an email" do expect(Spree::Config.order_mailer_class).to receive(:confirm_email).and_call_original order.complete! end - it 'marks the order as confirmation_delivered' do + it "marks the order as confirmation_delivered" do expect do order.complete! end.to change(order, :confirmation_delivered).to true end - it 'sends the email' do + it "sends the email" do expect(Spree::Config.order_mailer_class).to receive(:confirm_email).and_call_original order.complete! diff --git a/core/spec/models/spree/order/number_generator_spec.rb b/core/spec/models/spree/order/number_generator_spec.rb index 5e02c157c01..f9f574ab6ea 100644 --- a/core/spec/models/spree/order/number_generator_spec.rb +++ b/core/spec/models/spree/order/number_generator_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Order::NumberGenerator do subject { described_class.new.generate } it { is_expected.to be_a(String) } - describe 'length' do + describe "length" do let(:default_length) do Spree::Order::ORDER_NUMBER_LENGTH + Spree::Order::ORDER_NUMBER_PREFIX.length end @@ -36,7 +36,7 @@ context "when over half the possible order numbers already exist" do before do - allow(Spree::Order).to receive(:count).and_return(10 ** Spree::Order::ORDER_NUMBER_LENGTH / 2 + 1) + allow(Spree::Order).to receive(:count).and_return(10**Spree::Order::ORDER_NUMBER_LENGTH / 2 + 1) end it "regenerates a new number with an increased length" do @@ -51,18 +51,18 @@ subject { described_class.new(letters: true).generate } it "generates order number including letters" do - is_expected.to match /[A-Z]/ + is_expected.to match(/[A-Z]/) end end - describe 'prefix' do - it { is_expected.to match /^#{Spree::Order::ORDER_NUMBER_PREFIX}/ } + describe "prefix" do + it { is_expected.to match(/^#{Spree::Order::ORDER_NUMBER_PREFIX}/o) } context "when prefix option is 'P'" do - subject { described_class.new(prefix: 'P').generate } + subject { described_class.new(prefix: "P").generate } it "generates order number prefixed with 'P'" do - is_expected.to match /^P/ + is_expected.to match(/^P/) end end end diff --git a/core/spec/models/spree/order/outstanding_balance_integration_spec.rb b/core/spec/models/spree/order/outstanding_balance_integration_spec.rb index c2d067259e2..4228e751feb 100644 --- a/core/spec/models/spree/order/outstanding_balance_integration_spec.rb +++ b/core/spec/models/spree/order/outstanding_balance_integration_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" # This method in particular has been difficult to get right. # Many things will affect this amount @@ -16,7 +16,7 @@ let!(:order) { create(:order_with_line_items, line_items_count: 2, line_items_price: 3, shipment_cost: 13) } let(:item_1) { order.line_items[0] } let(:item_2) { order.line_items[1] } - before { order.update!(state: 'complete', completed_at: Time.now) } + before { order.update!(state: "complete", completed_at: Time.now) } subject do order.reload @@ -24,46 +24,46 @@ order.outstanding_balance end - context 'when the order is unpaid' do + context "when the order is unpaid" do it { should eq order.total } it { should eq 19 } - context 'when the order is cancelled' do + context "when the order is cancelled" do before { order.cancel! } it { should eq 0 } end end - context 'when the order is fully paid' do + context "when the order is fully paid" do let!(:payment) { create(:payment, :completed, order:, amount: order.total) } it { should eq 0 } - context 'and there is a full refund' do + context "and there is a full refund" do let!(:refund) { create(:refund, payment:, amount: payment.amount) } it { should eq 19 } end - context 'when the order is cancelled' do + context "when the order is cancelled" do before { order.update!(state: "canceled") } it { should eq(-19) } - context 'and the payment is voided' do + context "and the payment is voided" do before { payment.update!(state: "void") } it { should eq 0 } end - context 'and there is a full refund' do + context "and there is a full refund" do let!(:refund) { create(:refund, payment:, amount: payment.amount) } it { should eq 0 } end - context 'and there is a partial refund' do + context "and there is a partial refund" do let!(:refund) { create(:refund, payment:, amount: 6) } it { should eq(-13) } end end - context 'with a removed item' do + context "with a removed item" do before do item_amount = item_1.total order.contents.remove(item_1.variant) @@ -73,17 +73,17 @@ it { should eq(0) } end - context 'when the order is adjusted downward by an admin' do + context "when the order is adjusted downward by an admin" do let!(:adjustment) { create(:adjustment, order:, adjustable: item_1, amount: -1, source: nil) } let!(:refund) { create(:refund, payment:, amount: 1) } it { should eq(0) } end - context 'with a cancelled item' do + context "with a cancelled item" do let(:cancelations) { Spree::OrderCancellations.new(order) } let(:cancelled_item) { item_1 } - let(:created_by_user) { create(:user, email: 'user@email.com') } + let(:created_by_user) { create(:user, email: "user@email.com") } before do # Required to refund @@ -95,7 +95,7 @@ order.reload end - it 'discounts the cancelled item amount' do + it "discounts the cancelled item amount" do expect(order.refund_total).to eq(3) expect(order.reimbursement_total).to eq(3) expect(order.payment_total).to eq(16) @@ -106,30 +106,30 @@ end end - context 'when the order is partly paid' do + context "when the order is partly paid" do let!(:payment) { create(:payment, :completed, order:, amount: 10) } it { should eq 9 } - context 'and there is a full refund' do + context "and there is a full refund" do let!(:refund) { create(:refund, payment:, amount: payment.amount) } it { should eq 19 } end - context 'when the order is cancelled' do + context "when the order is cancelled" do before { order.update!(state: "canceled") } it { should eq(-10) } - context 'and the payment is voided' do + context "and the payment is voided" do before { payment.update!(state: "void") } it { should eq 0 } end - context 'and there is a full refund' do + context "and there is a full refund" do let!(:refund) { create(:refund, payment:, amount: payment.amount) } it { should eq 0 } end - context 'and there is a partial refund' do + context "and there is a partial refund" do let!(:refund) { create(:refund, payment:, amount: 6) } it { should eq(-4) } end diff --git a/core/spec/models/spree/order/payment_spec.rb b/core/spec/models/spree/order/payment_spec.rb index f9487bafc7e..219caa8ba5c 100644 --- a/core/spec/models/spree/order/payment_spec.rb +++ b/core/spec/models/spree/order/payment_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe Spree::Order, type: :model do @@ -21,16 +21,16 @@ module Spree create(:payment, payment_method:, order:, amount: 50) end - context 'sharing the same payment method' do + context "sharing the same payment method" do let!(:payment_2) do create(:payment, payment_method:, order:, amount: 50) end - it 'processes only new payments' do + it "processes only new payments" do order.process_payments! updater.update_payment_state - expect(order.payment_state).to eq('balance_due') + expect(order.payment_state).to eq("balance_due") expect(order.payment_total).to eq(50) expect(payment_1).to be_invalid @@ -38,28 +38,28 @@ module Spree end end - context 'with different payment methods that are store credit' do + context "with different payment methods that are store credit" do let!(:payment_2) { create(:store_credit_payment, order:, amount: 50) } - it 'processes all checkout payments' do + it "processes all checkout payments" do order.process_payments! updater.update_payment_state - expect(order.payment_state).to eq('paid') + expect(order.payment_state).to eq("paid") expect(order.payment_total).to eq(100) expect(payment_1).to be_completed expect(payment_2).to be_completed end - context 'with over paid payments' do + context "with over paid payments" do let!(:payment_3) { create(:store_credit_payment, order:, amount: 50) } - it 'does not go over total for order' do + it "does not go over total for order" do order.process_payments! updater.update_payment_state - expect(order.payment_state).to eq('paid') + expect(order.payment_state).to eq("paid") expect(order.payment_total).to eq(100) expect(payment_1).to be_completed expect(payment_2).to be_completed @@ -68,13 +68,13 @@ module Spree end end - context 'with failed payments' do + context "with failed payments" do let!(:payment_2) do create(:payment, payment_method:, order:, amount: 50, - state: 'failed') + state: "failed") end it "does not use failed payments" do @@ -96,8 +96,8 @@ module Spree end context "ensure source attributes stick around" do - let(:order){ Spree::Order.create } - let(:payment_method){ create(:credit_card_payment_method) } + let(:order) { Spree::Order.create } + let(:payment_method) { create(:credit_card_payment_method) } let(:payment_attributes) do { payment_method_id: payment_method.id, @@ -111,25 +111,25 @@ module Spree end it "keeps source attributes on assignment" do - OrderUpdateAttributes.new(order, { payments_attributes: [payment_attributes] }).call + OrderUpdateAttributes.new(order, {payments_attributes: [payment_attributes]}).call expect(order.unprocessed_payments.last.source.number).to be_present end # For the reason of this test, please see spree/spree_gateway#132 it "keeps source attributes through OrderUpdateAttributes" do - OrderUpdateAttributes.new(order, { payments_attributes: [payment_attributes] }).call + OrderUpdateAttributes.new(order, {payments_attributes: [payment_attributes]}).call expect(order.unprocessed_payments.last.source.number).to be_present end end context "checking if order is paid" do context "payment_state is paid" do - before { allow(order).to receive_messages payment_state: 'paid' } + before { allow(order).to receive_messages payment_state: "paid" } it { expect(order).to be_paid } end context "payment_state is credit_owned" do - before { allow(order).to receive_messages payment_state: 'credit_owed' } + before { allow(order).to receive_messages payment_state: "credit_owed" } it { expect(order).to be_paid } end end @@ -206,14 +206,14 @@ module Spree reimbursement.order.payments.first.update_column :amount, amount # Creates a refund of 110 create(:refund, amount:, - payment: reimbursement.order.payments.first, - reimbursement:) + payment: reimbursement.order.payments.first, + reimbursement:) # Update the order totals so payment_total goes to 0 reflecting the refund.. order.recalculate end context "for canceled orders" do - before { order.update(state: 'canceled') } + before { order.update(state: "canceled") } it "it should be zero" do expect(order.total).to eq(110) @@ -226,7 +226,7 @@ module Spree end context "for non-canceled orders" do - it 'should incorporate refund reimbursements' do + it "should incorporate refund reimbursements" do # Order Total - (Payment Total + Reimbursed) # 110 - (0 + 10) = 100 expect(order.outstanding_balance).to eq 100 diff --git a/core/spec/models/spree/order/risk_assessment_spec.rb b/core/spec/models/spree/order/risk_assessment_spec.rb index 57e2ddd70ce..d03cadd250e 100644 --- a/core/spec/models/spree/order/risk_assessment_spec.rb +++ b/core/spec/models/spree/order/risk_assessment_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Order, type: :model do - let(:order) { stub_model('Spree::Order') } + let(:order) { stub_model("Spree::Order") } describe ".is_risky?" do context "Not risky order" do @@ -60,7 +60,7 @@ end context "state == 'failed'" do - let(:order) { FactoryBot.create(:order, payments: [FactoryBot.create(:payment, state: 'failed')]) } + let(:order) { FactoryBot.create(:order, payments: [FactoryBot.create(:payment, state: "failed")]) } it "returns true if the order has state == 'failed'" do expect(order.is_risky?).to eq(true) end diff --git a/core/spec/models/spree/order/state_machine_spec.rb b/core/spec/models/spree/order/state_machine_spec.rb index 6ee3032a085..82e9e9c71bf 100644 --- a/core/spec/models/spree/order/state_machine_spec.rb +++ b/core/spec/models/spree/order/state_machine_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Order, type: :model do let(:order) { create(:order_with_line_items) } @@ -14,7 +14,7 @@ context "when payment processing succeeds" do let!(:payment) do - create(:payment, state: 'checkout', order:) + create(:payment, state: "checkout", order:) end it "should finalize order when transitioning to complete state" do @@ -25,7 +25,7 @@ context "when credit card processing fails" do let!(:payment) do - create(:payment, :failing, state: 'checkout', order:) + create(:payment, :failing, state: "checkout", order:) end it "should not complete the order" do @@ -85,7 +85,7 @@ describe "#complete" do context "when the confirm step has been taken out of the checkout flow" do - let!(:payment) { create(:payment, state: 'checkout', order:) } + let!(:payment) { create(:payment, state: "checkout", order:) } before :all do class Spree::Order @@ -111,12 +111,12 @@ class Spree::Order end before do - order.update!(state: 'payment') + order.update!(state: "payment") end - it 'will properly transition from the last checkout flow state to complete' do + it "will properly transition from the last checkout flow state to complete" do order.complete! - expect(order.state).to eq 'complete' + expect(order.state).to eq "complete" end end end diff --git a/core/spec/models/spree/order/validations_spec.rb b/core/spec/models/spree/order/validations_spec.rb index 4920077f49b..e9f5a56f143 100644 --- a/core/spec/models/spree/order/validations_spec.rb +++ b/core/spec/models/spree/order/validations_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe Spree::Order, type: :model do diff --git a/core/spec/models/spree/order_cancellations_spec.rb b/core/spec/models/spree/order_cancellations_spec.rb index 8de4253c4d1..9a9b22abe45 100644 --- a/core/spec/models/spree/order_cancellations_spec.rb +++ b/core/spec/models/spree/order_cancellations_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::OrderCancellations do describe "#cancel_unit" do @@ -51,7 +51,7 @@ let(:order) { create(:shipped_order, line_items_count: 2) } let(:inventory_units) { order.inventory_units } let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) } - let(:created_by_user) { create(:user, email: 'user@email.com') } + let(:created_by_user) { create(:user, email: "user@email.com") } it "creates and performs a reimbursement" do expect { subject }.to change { Spree::Reimbursement.count }.by(1) @@ -103,7 +103,7 @@ subject { described_class.new(order).short_ship(inventory_units) } let(:quantity) { 4 } - let!(:order) { create(:order_with_line_items, line_items_attributes: [{ quantity: }]) } + let!(:order) { create(:order_with_line_items, line_items_attributes: [{quantity:}]) } let(:inventory_units) { Spree::InventoryUnit.find(order.line_items.first.inventory_units.pluck(:id)) } it "adjusts the order" do @@ -111,7 +111,7 @@ end context "when cancelling all items in a completed order" do - let!(:order) { create(:completed_order_with_totals, line_items_attributes: [{ quantity: }]) } + let!(:order) { create(:completed_order_with_totals, line_items_attributes: [{quantity:}]) } subject { described_class.new(order).short_ship(order.inventory_units) } @@ -124,7 +124,7 @@ end context "when the shipment is already shipped" do - let!(:order) { create(:shipped_order, line_items_attributes: [{ quantity: }]) } + let!(:order) { create(:shipped_order, line_items_attributes: [{quantity:}]) } it "updates all of the inventory units" do expect { subject }.to change { order.inventory_units.canceled.count }.to(quantity) @@ -161,7 +161,7 @@ end context "when a created_by is specified" do - subject { order.cancellations.short_ship([inventory_unit], created_by: 'some automated system') } + subject { order.cancellations.short_ship([inventory_unit], created_by: "some automated system") } let(:user) { order.user } @@ -184,9 +184,9 @@ line_item.adjustments.create!( order:, amount: 0.01, - label: 'some promo', + label: "some promo", source: nil, - finalized: true, + finalized: true ) order.recalculate end @@ -198,15 +198,15 @@ [ 0.01, # promo adjustment -0.84, # short ship 1 - -0.83, # short ship 2 + -0.83 # short ship 2 ] ) expect(line_item.total).to eq 0 end end - describe 'short_ship_tax_notifier' do - context 'when present' do + describe "short_ship_tax_notifier" do + context "when present" do let(:short_ship_tax_notifier) { double } before do @@ -217,7 +217,7 @@ described_class.short_ship_tax_notifier = @old_notifier end - it 'calls the short_ship_tax_notifier' do + it "calls the short_ship_tax_notifier" do expect(short_ship_tax_notifier).to receive(:call) do |unit_cancels| expect(unit_cancels.map(&:inventory_unit)).to match_array([inventory_unit]) end diff --git a/core/spec/models/spree/order_inventory_spec.rb b/core/spec/models/spree/order_inventory_spec.rb index bda449affb7..dabe88d10d4 100644 --- a/core/spec/models/spree/order_inventory_spec.rb +++ b/core/spec/models/spree/order_inventory_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::OrderInventory, type: :model do let(:order) { create :completed_order_with_totals } @@ -22,7 +22,7 @@ subject.line_item.reload end - it 'creates the proper number of inventory units' do + it "creates the proper number of inventory units" do expect(line_item.inventory_units.count).to eq(old_quantity) subject.verify(shipment) expect(line_item.inventory_units.count).to eq(new_quantity) @@ -55,7 +55,7 @@ before { shipment.inventory_units.destroy_all } let(:new_quantity) { 5 } - it 'sets inventory_units state as per stock location availability' do + it "sets inventory_units state as per stock location availability" do stock_item.update_columns( backorderable: true, count_on_hand: 3 @@ -64,8 +64,8 @@ subject.verify units = shipment.inventory_units_for(subject.variant).group_by(&:state) - expect(units['backordered'].size).to eq(2) - expect(units['on_hand'].size).to eq(3) + expect(units["backordered"].size).to eq(2) + expect(units["on_hand"].size).to eq(3) end end @@ -100,7 +100,7 @@ end end - it 'should create stock_movement' do + it "should create stock_movement" do expect(subject.send(:add_to_shipment, shipment, 5)).to eq(5) stock_item = shipment.stock_location.stock_item(subject.variant) @@ -132,10 +132,10 @@ order.shipments.create(stock_location_id: stock_location.id, cost: 5) shipped = order.shipments.create(stock_location_id: order.shipments.first.stock_location.id, cost: 10) - shipped.update_column(:state, 'shipped') + shipped.update_column(:state, "shipped") end - it 'should select first non-shipped shipment that already contains given variant' do + it "should select first non-shipped shipment that already contains given variant" do shipment = subject.send(:determine_target_shipment, 1) expect(shipment.shipped?).to be false expect(shipment.inventory_units_for(variant)).not_to be_empty @@ -149,7 +149,7 @@ subject.inventory_units.destroy_all end - context 'when availability should be considered' do + context "when availability should be considered" do let(:stock_item) { variant.stock_items.max_by(&:id) } before do @@ -157,10 +157,10 @@ variant.stock_items.reload end - context 'when there is enough availability at one stock location' do + context "when there is enough availability at one stock location" do before { stock_item.set_count_on_hand 1 } - it 'favors first non-shipped shipment from same stock location that have enough availability' do + it "favors first non-shipped shipment from same stock location that have enough availability" do shipment = subject.send(:determine_target_shipment, 1) shipment.reload @@ -170,10 +170,10 @@ end end - context 'when there is not enough availability at any stock location' do + context "when there is not enough availability at any stock location" do before { stock_item.set_count_on_hand 0 } - it 'falls-back selecting first non-shipped shipment that leaves from same stock_location' do + it "falls-back selecting first non-shipped shipment that leaves from same stock_location" do required_quantity = 1 shipment = subject.send(:determine_target_shipment, required_quantity) shipment.reload @@ -192,7 +192,7 @@ end end - context 'when order has too many inventory units' do + context "when order has too many inventory units" do let(:old_quantity) { 3 } let(:new_quantity) { 2 } @@ -203,12 +203,12 @@ subject.line_item.reload end - it 'should be a messed up order' do + it "should be a messed up order" do expect(order.shipments.first.inventory_units_for(line_item.variant).size).to eq(3) expect(line_item.quantity).to eq(2) end - it 'should decrease the number of inventory units' do + it "should decrease the number of inventory units" do subject.verify expect(line_item.inventory_units.count).to eq 2 expect(order.inventory_units.count).to eq 2 @@ -228,13 +228,13 @@ end end - it 'should change count_on_hand' do + it "should change count_on_hand" do expect { subject.verify(shipment) }.to change { stock_item.reload.count_on_hand }.by(1) end - it 'should create stock_movement' do + it "should create stock_movement" do stock_item = shipment.stock_location.stock_item(variant) expect { @@ -246,17 +246,17 @@ expect(movement.quantity).to eq(1) end - context 'with some backordered' do + context "with some backordered" do let(:new_quantity) { 1 } before do - line_item.inventory_units[0].update_columns(state: 'backordered') - line_item.inventory_units[1].update_columns(state: 'on_hand') - line_item.inventory_units[2].update_columns(state: 'backordered') + line_item.inventory_units[0].update_columns(state: "backordered") + line_item.inventory_units[1].update_columns(state: "on_hand") + line_item.inventory_units[2].update_columns(state: "backordered") end - it 'should destroy backordered units first' do - on_hand_unit = line_item.inventory_units.find_by state: 'on_hand' + it "should destroy backordered units first" do + on_hand_unit = line_item.inventory_units.find_by state: "on_hand" subject.verify(shipment) @@ -264,25 +264,25 @@ end end - context 'with some shipped items' do + context "with some shipped items" do let(:old_quantity) { 2 } let(:new_quantity) { 1 } let(:shipped_unit) { line_item.inventory_units[0] } before do - shipped_unit.update_columns(state: 'shipped') + shipped_unit.update_columns(state: "shipped") end - it 'should destroy unshipped units first' do + it "should destroy unshipped units first" do subject.verify(shipment) expect(line_item.inventory_units.reload).to eq([shipped_unit]) end - context 'trying to remove shipped units' do + context "trying to remove shipped units" do let(:new_quantity) { 0 } - it 'only attempts to destroy as many units as are eligible, and return amount destroyed' do + it "only attempts to destroy as many units as are eligible, and return amount destroyed" do subject.verify(shipment) expect(line_item.inventory_units.reload).to eq([shipped_unit]) @@ -290,13 +290,13 @@ end end - context 'destroying all units' do + context "destroying all units" do let(:new_quantity) { 0 } - it 'should destroy shipment' do + it "should destroy shipment" do expect { subject.verify(shipment) - }.to change{ order.shipments.count }.from(1).to(0) + }.to change { order.shipments.count }.from(1).to(0) end end @@ -316,7 +316,7 @@ end end - context 'when the order has no suitable shipment for the variant' do + context "when the order has no suitable shipment for the variant" do let(:new_line_item) { create :line_item, order: } before do @@ -328,7 +328,7 @@ subject { described_class.new(order, new_line_item.reload) } - it 'creates a new shipment' do + it "creates a new shipment" do expect do subject.verify end.to change { order.shipments.count }.from(1).to 2 diff --git a/core/spec/models/spree/order_merger_spec.rb b/core/spec/models/spree/order_merger_spec.rb index 71a3a51a65d..fba3ad2a239 100644 --- a/core/spec/models/spree/order_merger_spec.rb +++ b/core/spec/models/spree/order_merger_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" # Regression tests for https://github.com/spree/spree/issues/2179 module Spree @@ -45,17 +45,17 @@ module Spree end end - context 'merging together two orders with multiple currencies line items' do - let(:order_2) { Spree::Order.create(currency: 'JPY') } + context "merging together two orders with multiple currencies line items" do + let(:order_2) { Spree::Order.create(currency: "JPY") } let(:variant_2) { create(:variant) } before do - Spree::Price.create(variant: variant_2, amount: 10, currency: 'JPY') + Spree::Price.create(variant: variant_2, amount: 10, currency: "JPY") order_1.contents.add(variant, 1) order_2.contents.add(variant_2.reload, 1) end - it 'rejects other order line items' do + it "rejects other order line items" do subject.merge!(order_2, user) expect(order_1.line_items.count).to eq(1) @@ -96,7 +96,7 @@ module Spree end order_1.contents.add(variant, 1, foos: {}) - order_2.contents.add(variant, 1, foos: { bar: :zoo }) + order_2.contents.add(variant, 1, foos: {bar: :zoo}) end specify do diff --git a/core/spec/models/spree/order_mutex_spec.rb b/core/spec/models/spree/order_mutex_spec.rb index 86172d3857e..a5f87ff70c6 100644 --- a/core/spec/models/spree/order_mutex_spec.rb +++ b/core/spec/models/spree/order_mutex_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::OrderMutex do include ActiveSupport::Testing::TimeHelpers @@ -22,7 +22,7 @@ end it "returns the value of the block" do - expect(Spree::OrderMutex.with_lock!(order) { 'yay for spree' }).to eq 'yay for spree' + expect(Spree::OrderMutex.with_lock!(order) { "yay for spree" }).to eq "yay for spree" end end diff --git a/core/spec/models/spree/order_shipping_spec.rb b/core/spec/models/spree/order_shipping_spec.rb index 00cc29c4045..e6f98184d95 100644 --- a/core/spec/models/spree/order_shipping_spec.rb +++ b/core/spec/models/spree/order_shipping_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::OrderShipping do include ActiveSupport::Testing::TimeHelpers @@ -11,9 +11,9 @@ def emails ActionMailer::Base.deliveries end - shared_examples 'shipment shipping' do + shared_examples "shipment shipping" do it "marks the inventory units as shipped" do - expect { subject }.to change { order.inventory_units.reload.map(&:state) }.from(['on_hand']).to(['shipped']) + expect { subject }.to change { order.inventory_units.reload.map(&:state) }.from(["on_hand"]).to(["shipped"]) end it "creates a carton with the shipment's inventory units" do @@ -33,7 +33,7 @@ def emails end it "updates the order shipment state" do - expect { subject }.to change { order.reload.shipment_state }.from('ready').to('shipped') + expect { subject }.to change { order.reload.shipment_state }.from("ready").to("shipped") end it "updates shipment.shipped_at" do @@ -69,7 +69,7 @@ def emails let(:address) { order.ship_address } let(:shipping_method) { shipment.shipping_method } - it_behaves_like 'shipment shipping' + it_behaves_like "shipment shipping" context "with an external_number" do subject do @@ -78,12 +78,12 @@ def emails stock_location:, address:, shipping_method:, - external_number: 'some-external-number' + external_number: "some-external-number" ) end it "sets the external_number" do - expect(subject.external_number).to eq 'some-external-number' + expect(subject.external_number).to eq "some-external-number" end it "publishes a 'carton_shipped' event" do @@ -100,12 +100,12 @@ def emails stock_location:, address:, shipping_method:, - tracking_number: 'tracking-number' + tracking_number: "tracking-number" ) end it "sets the tracking-number" do - expect(subject.tracking).to eq 'tracking-number' + expect(subject.tracking).to eq "tracking-number" end end @@ -131,7 +131,7 @@ def emails let(:shipment) { order.shipments.to_a.first } - it_behaves_like 'shipment shipping' + it_behaves_like "shipment shipping" context "when not all units are shippable" do let(:order) { create(:order_ready_to_ship, line_items_count: 2) } @@ -153,7 +153,7 @@ def emails before { Spree::OrderCancellations.new(order).short_ship([order.inventory_units.first]) } it "updates the order shipment state" do - expect { subject }.to change { order.reload.shipment_state }.from('ready').to('shipped') + expect { subject }.to change { order.reload.shipment_state }.from("ready").to("shipped") end end @@ -161,12 +161,12 @@ def emails subject do order.shipping.ship_shipment( shipment, - external_number: 'some-external-number' + external_number: "some-external-number" ) end it "sets the external_number" do - expect(subject.external_number).to eq 'some-external-number' + expect(subject.external_number).to eq "some-external-number" end end @@ -174,12 +174,12 @@ def emails subject do order.shipping.ship_shipment( shipment, - tracking_number: 'tracking-number' + tracking_number: "tracking-number" ) end it "sets the tracking-number" do - expect(subject.tracking).to eq 'tracking-number' + expect(subject.tracking).to eq "tracking-number" end end @@ -187,11 +187,11 @@ def emails # OrderShipping#ship rather than vice versa context "when the tracking number is already on the shipment" do before do - shipment.update!(tracking: 'tracking-number') + shipment.update!(tracking: "tracking-number") end it "sets the tracking-number" do - expect(subject.tracking).to eq 'tracking-number' + expect(subject.tracking).to eq "tracking-number" end end @@ -211,7 +211,7 @@ def emails end it "marks the inventory units as shipped" do - expect { subject }.to change { unshipped_inventory.map(&:reload).map(&:state) }.from(['on_hand']).to(['shipped']) + expect { subject }.to change { unshipped_inventory.map(&:reload).map(&:state) }.from(["on_hand"]).to(["shipped"]) end it "creates a carton with the shipment's inventory units" do diff --git a/core/spec/models/spree/order_spec.rb b/core/spec/models/spree/order_spec.rb index 8f13f88f52a..a34e4890249 100644 --- a/core/spec/models/spree/order_spec.rb +++ b/core/spec/models/spree/order_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Order, type: :model do let(:store) { create(:store) } @@ -56,13 +56,13 @@ end end - context '#store' do + context "#store" do it { is_expected.to respond_to(:store) } - context 'when there is no store assigned' do + context "when there is no store assigned" do subject { Spree::Order.new } - context 'when there is no default store' do + context "when there is no default store" do it "will not be valid" do expect(subject).not_to be_valid end @@ -75,7 +75,7 @@ end end - context 'when a store is assigned' do + context "when a store is assigned" do subject { Spree::Order.new(store: create(:store)) } it { is_expected.to be_valid } end @@ -101,64 +101,64 @@ expect(mail.subject).to include "Cancellation" end - context 'when the payment is completed' do + context "when the payment is completed" do let(:order) { create(:order_ready_to_ship) } let(:payment) { order.payments.first } - it 'does not change the payment state' do + it "does not change the payment state" do expect { subject }.not_to change { payment.reload.state } end - it 'refunds the payment' do + it "refunds the payment" do expect { subject }.to change { Spree::Refund.count }.by(1) end it "cancels the order" do - expect{ subject }.to change{ order.can_cancel? }.from(true).to(false) + expect { subject }.to change { order.can_cancel? }.from(true).to(false) expect(order).to be_canceled end - it 'saves canceled_at' do + it "saves canceled_at" do subject expect(order.reload.canceled_at).to_not be_nil end it "places the order into the canceled scope" do - expect{ subject }.to change{ Spree::Order.canceled.include?(order) }.from(false).to(true) + expect { subject }.to change { Spree::Order.canceled.include?(order) }.from(false).to(true) end it "removes the order from the not_canceled scope" do - expect{ subject }.to change{ Spree::Order.not_canceled.include?(order) }.from(true).to(false) + expect { subject }.to change { Spree::Order.not_canceled.include?(order) }.from(true).to(false) end end context "when the payment is fully refunded" do let(:order) { create(:completed_order_with_totals) } let(:payment_amount) { 50 } - let(:payment) { create(:payment, order:, amount: payment_amount, state: 'completed') } + let(:payment) { create(:payment, order:, amount: payment_amount, state: "completed") } it "cancels the order" do create(:refund, payment:, amount: payment_amount) - expect{ subject }.to change{ order.can_cancel? }.from(true).to(false) + expect { subject }.to change { order.can_cancel? }.from(true).to(false) expect(order).to be_canceled end end - context 'when the payment is pending' do + context "when the payment is pending" do let(:order) { create(:completed_order_with_pending_payment) } let(:payment) { order.payments.first } - it 'voids the pending payment' do - expect { subject }.to change { payment.reload.state }.from('pending').to('void') + it "voids the pending payment" do + expect { subject }.to change { payment.reload.state }.from("pending").to("void") end end - context 'when the payment is failed' do + context "when the payment is failed" do let(:order) { create(:completed_order_with_pending_payment) } let(:payment) { order.payments.first.tap(&:failure!) } - it 'does not change the payment state' do + it "does not change the payment state" do expect { subject }.not_to change { payment.reload.state } end end @@ -173,32 +173,32 @@ end end - context 'with a store credit payment' do + context "with a store credit payment" do let(:order) { create(:completed_order_with_totals) } let(:payment) { create(:store_credit_payment, amount: order.total, order:) } - context 'when the payment is pending' do + context "when the payment is pending" do let(:store_credit) { payment.source } before do payment.authorize! end - it 'voids the payment' do - expect { subject }.to change { payment.reload.state }.from('pending').to('void') + it "voids the payment" do + expect { subject }.to change { payment.reload.state }.from("pending").to("void") end - it 'releases the pending store credit authorization' do + it "releases the pending store credit authorization" do expect { subject }.to change { store_credit.reload.amount_authorized }.from(110).to(0) end end - context 'when the payment is completed' do + context "when the payment is completed" do before do payment.purchase! end - it 'refunds the payment' do + it "refunds the payment" do expect { subject }.to change { Spree::Refund.count }.by(1) end end @@ -215,17 +215,17 @@ subject { order.canceled_by(admin_user) } - it 'should cancel the order' do + it "should cancel the order" do expect(order).to receive(:cancel!) subject end - it 'should save canceler_id' do + it "should save canceler_id" do subject expect(order.reload.canceler_id).to eq(admin_user.id) end - it 'should have canceler' do + it "should have canceler" do subject expect(order.reload.canceler).to eq(admin_user) end @@ -239,7 +239,7 @@ expect(order.number).not_to be_nil end - it 'should create a randomized 22 character token' do + it "should create a randomized 22 character token" do expect(order.guest_token.size).to eq(22) end end @@ -255,39 +255,39 @@ end end - describe '#ensure_line_item_variants_are_not_deleted' do + describe "#ensure_line_item_variants_are_not_deleted" do subject { order.ensure_line_item_variants_are_not_deleted } let(:order) { create :order_with_line_items } - context 'when variant is destroyed' do + context "when variant is destroyed" do before do allow(order).to receive(:restart_checkout_flow) order.line_items.first.variant.discard end - it 'should restart checkout flow' do + it "should restart checkout flow" do expect(order).to receive(:restart_checkout_flow).once subject end - it 'should have error message' do + it "should have error message" do subject - expect(order.errors[:base]).to include(I18n.t('spree.deleted_variants_present')) + expect(order.errors[:base]).to include(I18n.t("spree.deleted_variants_present")) end - it 'should be false' do + it "should be false" do expect(subject).to be_falsey end end - context 'when no variants are destroyed' do - it 'should not restart checkout' do + context "when no variants are destroyed" do + it "should not restart checkout" do expect(order).to receive(:restart_checkout_flow).never subject end - it 'should be true' do + it "should be true" do expect(subject).to be_truthy end end @@ -324,18 +324,18 @@ end end - context '#outstanding_balance' do + context "#outstanding_balance" do let(:order) { create(:order_ready_to_ship, line_items_count: 3) } let(:payment) { order.payments.first } it "should handle refunds properly" do order.cancellations.short_ship([order.inventory_units.first]) expect(order.outstanding_balance).to be_negative - expect(order.payment_state).to eq('credit_owed') + expect(order.payment_state).to eq("credit_owed") create(:refund, amount: order.outstanding_balance.abs, payment:, transaction_id: nil).perform! order.reload expect(order.outstanding_balance).to eq(0) - expect(order.payment_state).to eq('paid') + expect(order.payment_state).to eq("paid") end end @@ -392,17 +392,17 @@ end end - describe '#merge!' do + describe "#merge!" do let(:order1) { create(:order_with_line_items) } let(:order2) { create(:order_with_line_items) } - it 'merges the orders' do + it "merges the orders" do order1.merge!(order2) expect(order1.line_items.count).to eq(2) expect(order2.destroyed?).to be_truthy end - describe 'order_merger_class customization' do + describe "order_merger_class customization" do before do class TestOrderMerger def initialize(order) @@ -418,7 +418,7 @@ def merge!(other_order, user = nil) let(:user) { build(:user) } - it 'uses the configured order merger' do + it "uses the configured order merger" do expect(order1.merge!(order2, user)).to eq([order1, order2, user]) end end @@ -441,7 +441,7 @@ def merge!(other_order, user = nil) Spree::Shipment.create!(order:) end - ['payment', 'confirm'].each do |order_state| + ["payment", "confirm"].each do |order_state| context "when ther order is in the #{order_state} state" do before do order.state = order_state @@ -478,9 +478,9 @@ def merge!(other_order, user = nil) end end - context 'when the order is in address state' do + context "when the order is in address state" do before do - order.state = 'address' + order.state = "address" order.shipments.create! end @@ -501,9 +501,9 @@ def merge!(other_order, user = nil) end end - context 'when the order is completed' do + context "when the order is completed" do before do - order.state = 'complete' + order.state = "complete" order.completed_at = Time.current order.update_column(:shipment_total, 5) order.shipments.create! @@ -564,7 +564,7 @@ def merge!(other_order, user = nil) let(:tax_using_ship_address) { true } context "when the order is associated with a store" do - it 'returns the stores default cart tax location' do + it "returns the stores default cart tax location" do expect(subject).to eq(store.default_cart_tax_location) end end @@ -580,7 +580,7 @@ def merge!(other_order, user = nil) let(:tax_using_ship_address) { false } context "when the order is associated with a store" do - it 'returns the stores default cart tax location' do + it "returns the stores default cart tax location" do expect(subject).to eq(store.default_cart_tax_location) end end @@ -600,7 +600,7 @@ def merge!(other_order, user = nil) context "when tax_using_ship_address is true" do let(:tax_using_ship_address) { true } - it 'returns ship_address' do + it "returns ship_address" do expect(subject).to eq(order.ship_address) end end @@ -626,8 +626,8 @@ def merge!(other_order, user = nil) it "updates the state column to the first checkout_steps value" do order = create(:order_with_totals, state: "delivery") - expect(order.checkout_steps).to eql %w(address delivery payment confirm complete) - expect{ order.restart_checkout_flow }.to change{ order.state }.from("delivery").to("address") + expect(order.checkout_steps).to eql %w[address delivery payment confirm complete] + expect { order.restart_checkout_flow }.to change { order.state }.from("delivery").to("address") end context "when the order cannot advance from cart state" do @@ -639,7 +639,7 @@ def merge!(other_order, user = nil) it "leaves the order in cart state" do order = create(:order_with_totals, state: "delivery") - expect{ order.restart_checkout_flow }.to change { order.state }.from("delivery").to("cart") + expect { order.restart_checkout_flow }.to change { order.state }.from("delivery").to("cart") end end @@ -647,7 +647,7 @@ def merge!(other_order, user = nil) let(:order) { create(:order, state: "delivery", line_items: []) } it "updates the state column to cart" do - expect{ order.restart_checkout_flow }.to change{ order.state }.from("delivery").to("cart") + expect { order.restart_checkout_flow }.to change { order.state }.from("delivery").to("cart") end it "doesn't add errors to the order" do @@ -706,11 +706,11 @@ def merge!(other_order, user = nil) let!(:first_method) { FactoryBot.create(:payment_method, available_to_users: true, - available_to_admin: true) + available_to_admin: true) } let!(:second_method) { FactoryBot.create(:payment_method, available_to_users: true, - available_to_admin: true) + available_to_admin: true) } before do @@ -722,7 +722,7 @@ def merge!(other_order, user = nil) end end - context 'when the order has a store' do + context "when the order has a store" do let(:order) { create(:order) } let!(:store_with_payment_methods) do @@ -733,27 +733,27 @@ def merge!(other_order, user = nil) let!(:store_without_payment_methods) { create(:store) } let!(:payment_method_without_store) { create(:payment_method) } - context 'when the store has payment methods' do + context "when the store has payment methods" do before { order.update!(store: store_with_payment_methods) } - it 'returns only the matching payment methods for that store' do + it "returns only the matching payment methods for that store" do expect(order.available_payment_methods).to match_array( [payment_method_with_store] ) end - context 'and the store has an extra payment method unavailable to users' do + context "and the store has an extra payment method unavailable to users" do let!(:admin_only_payment_method) do create(:payment_method, - available_to_users: false, - available_to_admin: true) + available_to_users: false, + available_to_admin: true) end before do store_with_payment_methods.payment_methods << admin_only_payment_method end - it 'returns only the payment methods available to users for that store' do + it "returns only the payment methods available to users for that store" do expect(order.available_payment_methods).to match_array( [payment_method_with_store] ) @@ -761,10 +761,10 @@ def merge!(other_order, user = nil) end end - context 'when the store does not have payment methods' do + context "when the store does not have payment methods" do before { order.update!(store: store_without_payment_methods) } - it 'returns all matching payment methods regardless of store' do + it "returns all matching payment methods regardless of store" do expect(order.available_payment_methods).to match_array( [payment_method_with_store, payment_method_without_store] ) @@ -778,7 +778,7 @@ def merge!(other_order, user = nil) @variant1 = mock_model(Spree::Variant, product: "product1") @variant2 = mock_model(Spree::Variant, product: "product2") @line_items = [mock_model(Spree::LineItem, product: "product1", variant: @variant1, variant_id: @variant1.id, quantity: 1), - mock_model(Spree::LineItem, product: "product2", variant: @variant2, variant_id: @variant2.id, quantity: 2)] + mock_model(Spree::LineItem, product: "product2", variant: @variant2, variant_id: @variant2.id, quantity: 2)] allow(order).to receive_messages(line_items: @line_items) end @@ -805,7 +805,7 @@ def merge!(other_order, user = nil) it "matches line item when options match" do allow(order).to receive(:foos_match).and_return(true) - expect(order.line_item_options_match(@line_items.first, { foos: { bar: :zoo } })).to be true + expect(order.line_item_options_match(@line_items.first, {foos: {bar: :zoo}})).to be true end it "does not match line item without options" do @@ -819,7 +819,7 @@ def merge!(other_order, user = nil) let(:order) { build(:order) } context "with default app configuration" do - it 'calls the default order number generator' do + it "calls the default order number generator" do expect_any_instance_of(Spree::Order::NumberGenerator).to receive(:generate) order.generate_order_number end @@ -827,10 +827,11 @@ def merge!(other_order, user = nil) context "with order number generator configured" do class TruthNumberGenerator - def initialize(options = {}); end + def initialize(options = {}) + end def generate - '42' + "42" end end @@ -840,20 +841,20 @@ def generate end end - it 'calls the configured order number generator' do + it "calls the configured order number generator" do order.generate_order_number - expect(order.number).to eq '42' + expect(order.number).to eq "42" end end context "with number already present" do before do - order.number = '123' + order.number = "123" end - it 'does not generate new number' do + it "does not generate new number" do order.generate_order_number - expect(order.number).to eq '123' + expect(order.number).to eq "123" end end end @@ -930,7 +931,7 @@ def generate end context "when user is associated to the order" do - let(:user) { build_stubbed(:user) } + let(:user) { build_stubbed(:user) } let(:bill_address) { nil } let(:ship_address) { nil } @@ -983,7 +984,7 @@ def generate expect { subject }.to change { order.ship_address }.from(nil).to(ship_address) end - context 'when checkout step does not include delivery' do + context "when checkout step does not include delivery" do before do expect(order).to receive(:checkout_steps) { %w[some step] } end @@ -1050,7 +1051,7 @@ def generate before do @order = create(:order, user:) @order.line_items = [create(:line_item, price: 1.0, quantity: 2), - create(:line_item, price: 1.0, quantity: 1)] + create(:line_item, price: 1.0, quantity: 1)] end it "should return the correct lum sum of items" do expect(@order.amount).to eq(3.0) @@ -1058,23 +1059,23 @@ def generate end context "#backordered?" do - it 'is backordered if one of the shipments is backordered' do + it "is backordered if one of the shipments is backordered" do allow(order).to receive_messages(shipments: [mock_model(Spree::Shipment, backordered?: false), - mock_model(Spree::Shipment, backordered?: true)]) + mock_model(Spree::Shipment, backordered?: true)]) expect(order).to be_backordered end end context "#can_cancel?" do it "should be false for completed order in the canceled state" do - order.state = 'canceled' - order.shipment_state = 'ready' + order.state = "canceled" + order.shipment_state = "ready" order.completed_at = Time.current expect(order.can_cancel?).to be false end it "should be true for completed order with no shipment" do - order.state = 'complete' + order.state = "complete" order.shipment_state = nil order.completed_at = Time.current expect(order.can_cancel?).to be true @@ -1093,7 +1094,7 @@ def generate context "locking" do let(:order) { Spree::Order.create } # need a persisted in order to test locking - it 'can lock' do + it "can lock" do order.with_lock {} end end @@ -1152,32 +1153,32 @@ def generate end end - describe '#quantity' do + describe "#quantity" do # Uses a persisted record, as the quantity is retrieved via a DB count let(:order) { create :order_with_line_items, line_items_count: 3 } - it 'sums the quantity of all line items' do + it "sums the quantity of all line items" do expect(order.quantity).to eq 3 end end - describe '#has_non_reimbursement_related_refunds?' do + describe "#has_non_reimbursement_related_refunds?" do subject do order.has_non_reimbursement_related_refunds? end - context 'no refunds exist' do + context "no refunds exist" do it { is_expected.to eq false } end - context 'a non-reimbursement related refund exists' do + context "a non-reimbursement related refund exists" do let(:order) { refund.payment.order } let(:refund) { create(:refund, reimbursement_id: nil, amount: 5) } it { is_expected.to eq true } end - context 'a reimbursement related refund exists' do + context "a reimbursement related refund exists" do let(:order) { refund.payment.order } let(:refund) { create(:refund, reimbursement_id: 123, amount: 5, payment_amount: 14) } @@ -1234,7 +1235,7 @@ def generate subject { order.all_inventory_units_returned? } context "all inventory units are returned" do - before { order.inventory_units.update_all(state: 'returned') } + before { order.inventory_units.update_all(state: "returned") } it "is true" do expect(subject).to eq true @@ -1243,7 +1244,7 @@ def generate context "some inventory units are returned" do before do - order.inventory_units.first.update_attribute(:state, 'returned') + order.inventory_units.first.update_attribute(:state, "returned") end it "is false" do @@ -1262,7 +1263,7 @@ def generate expect { Spree::InventoryUnit .where(id: order.inventory_unit_ids) - .update_all(state: 'returned') + .update_all(state: "returned") }.to change { order.all_inventory_units_returned? }.from(false).to(true) @@ -1273,8 +1274,8 @@ def generate context "store credit" do shared_examples "check total store credit from payments" do context "with valid payments" do - let(:order) { payment.order } - let!(:payment) { create(:store_credit_payment) } + let(:order) { payment.order } + let!(:payment) { create(:store_credit_payment) } let!(:second_payment) { create(:store_credit_payment, order:) } subject { order } @@ -1303,7 +1304,7 @@ def generate subject { order.add_store_credit_payments } context "there is no store credit" do - let(:order) { create(:order, total: order_total) } + let(:order) { create(:order, total: order_total) } context "there is a credit card payment" do let!(:cc_payment) { create(:payment, order:, amount: order_total) } @@ -1325,13 +1326,13 @@ def generate end end - context 'there is store credit in another currency' do + context "there is store credit in another currency" do let(:order) { create(:order_with_totals, user:, line_items_price: order_total).tap(&:recalculate) } - let!(:store_credit_usd) { create(:store_credit, user:, amount: 1, currency: 'USD') } - let!(:store_credit_gbp) { create(:store_credit, user:, amount: 1, currency: 'GBP') } + let!(:store_credit_usd) { create(:store_credit, user:, amount: 1, currency: "USD") } + let!(:store_credit_gbp) { create(:store_credit, user:, amount: 1, currency: "GBP") } let(:user) { create(:user) } - it 'only adds the credit in the matching currency' do + it "only adds the credit in the matching currency" do expect { order.add_store_credit_payments }.to change { @@ -1364,7 +1365,7 @@ def generate context "there is a credit card payment" do it "invalidates the credit card payment" do cc_payment = create(:payment, order:) - expect { subject }.to change { cc_payment.reload.state }.to 'invalid' + expect { subject }.to change { cc_payment.reload.state }.to "invalid" end end end @@ -1372,13 +1373,13 @@ def generate context "the available store credit is not enough to pay for the entire order" do let(:order_total) { 500 } let(:store_credit_total) { order_total - 100 } - let(:store_credit) { create(:store_credit, amount: store_credit_total) } + let(:store_credit) { create(:store_credit, amount: store_credit_total) } let(:order) { create(:order_with_totals, user: store_credit.user, line_items_price: order_total).tap(&:recalculate) } context "there are no other payments" do it "adds an error to the model" do expect(subject).to be false - expect(order.errors.full_messages).to include(I18n.t('spree.store_credit.errors.unable_to_fund')) + expect(order.errors.full_messages).to include(I18n.t("spree.store_credit.errors.unable_to_fund")) end end @@ -1424,8 +1425,8 @@ def generate context "there are multiple store credits" do context "they have different credit type priorities" do - let(:amount_difference) { 100 } - let!(:primary_store_credit) { create(:store_credit, amount: (order_total - amount_difference)) } + let(:amount_difference) { 100 } + let!(:primary_store_credit) { create(:store_credit, amount: (order_total - amount_difference)) } let!(:secondary_store_credit) { create(:store_credit, amount: order_total, user: primary_store_credit.user, credit_type: create(:secondary_credit_type)) } let(:order) { create(:order_with_totals, user: primary_store_credit.user, line_items_price: order_total).tap(&:recalculate) } @@ -1435,8 +1436,8 @@ def generate end it "uses the primary store credit type over the secondary" do - primary_payment = order.payments.detect{ |x| x.source == primary_store_credit } - secondary_payment = order.payments.detect{ |x| x.source == secondary_store_credit } + primary_payment = order.payments.detect { |x| x.source == primary_store_credit } + secondary_payment = order.payments.detect { |x| x.source == secondary_store_credit } expect(order.payments.size).to eq 2 expect(primary_payment.source).to eq primary_store_credit @@ -1517,19 +1518,19 @@ def generate describe "#total_applicable_store_credit" do context "order is in the confirm state" do - before { order.update(state: 'confirm') } + before { order.update(state: "confirm") } include_examples "check total store credit from payments" end context "order is completed" do - before { order.update(state: 'complete') } + before { order.update(state: "complete") } include_examples "check total store credit from payments" end context "order is in any state other than confirm or complete" do context "the associated user has store credits" do let(:store_credit) { create(:store_credit) } - let(:order) { create(:order, user: store_credit.user) } + let(:order) { create(:order, user: store_credit.user) } subject { order } @@ -1650,14 +1651,14 @@ def generate end describe "#display_store_credit_remaining_after_capture" do - let(:total_available_store_credit) { 10.00 } + let(:total_available_store_credit) { 10.00 } let(:total_applicable_store_credit) { 5.00 } subject { create(:order) } before do allow(subject).to receive_messages(total_available_store_credit:, - total_applicable_store_credit:) + total_applicable_store_credit:) end it "returns a money instance" do @@ -1723,13 +1724,13 @@ def generate end end - describe '#create_shipments_for_line_item' do + describe "#create_shipments_for_line_item" do subject { order.create_shipments_for_line_item(line_item) } let(:order) { create :order, shipments: [] } let(:line_item) { build(:line_item, order:) } - it 'creates at least one new shipment for the order' do + it "creates at least one new shipment for the order" do expect { subject }.to change { order.shipments.count }.from(0).to(1) end @@ -1770,7 +1771,7 @@ def initialize(order) end end - describe '#shipping_discount' do + describe "#shipping_discount" do let(:shipment) { create(:shipment) } let(:order) { shipment.order } @@ -1780,7 +1781,7 @@ def initialize(order) subject { order.shipping_discount } - it 'sums eligible shipping adjustments with negative amount (credit)' do + it "sums eligible shipping adjustments with negative amount (credit)" do expect(subject).to eq 40 end end @@ -2090,7 +2091,7 @@ def validate(line_item) describe "#bill_address_attributes=" do let(:order) { create(:order) } - let(:address_attributes) { { name: "Mickey Mouse" } } + let(:address_attributes) { {name: "Mickey Mouse"} } subject { order.bill_address_attributes = address_attributes } @@ -2101,7 +2102,7 @@ def validate(line_item) describe "#payments_attributes=" do let(:order) { create(:order) } - let(:payment_attributes) { [{ payment_method_id: payment_method.id }] } + let(:payment_attributes) { [{payment_method_id: payment_method.id}] } let(:payment_method) { create(:payment_method) } subject { order.payments_attributes = payment_attributes } @@ -2170,18 +2171,18 @@ def validate(line_item) it "enqueues a StateChangeTrackingJob when state changes" do expect { - order.update!(state: 'address') + order.update!(state: "address") }.to have_enqueued_job(Spree::StateChangeTrackingJob).with( order, - 'cart', - 'address', + "cart", + "address", kind_of(Time) ) end it "does not enqueue job when state doesn't change" do expect { - order.update!(email: 'newemail@example.com') + order.update!(email: "newemail@example.com") }.not_to have_enqueued_job(Spree::StateChangeTrackingJob) end @@ -2190,11 +2191,11 @@ def validate(line_item) it "creates an anonymous state change" do expect { - order.update!(state: 'address') + order.update!(state: "address") }.to have_enqueued_job(Spree::StateChangeTrackingJob).with( order, - 'cart', - 'address', + "cart", + "address", kind_of(Time) ) end @@ -2203,13 +2204,13 @@ def validate(line_item) it "captures the transition timestamp accurately" do before_time = Time.current - order.update!(state: 'address') + order.update!(state: "address") # Check that a job was enqueued with a timestamp close to when we made the change expect(Spree::StateChangeTrackingJob).to have_been_enqueued.with do |order_id, prev_state, next_state, user_id, timestamp| expect(order_id).to eq(order.id) - expect(prev_state).to eq('cart') - expect(next_state).to eq('address') + expect(prev_state).to eq("cart") + expect(next_state).to eq("address") expect(user_id).to eq(user.id) expect(timestamp).to be_within(1.second).of(before_time) end @@ -2218,9 +2219,9 @@ def validate(line_item) it "creates multiple state transitions" do clear_enqueued_jobs - order.update!(state: 'address') - order.update!(state: 'delivery') - order.update!(state: 'payment') + order.update!(state: "address") + order.update!(state: "delivery") + order.update!(state: "payment") expect(Spree::StateChangeTrackingJob).to have_been_enqueued.exactly(3).times end @@ -2228,17 +2229,17 @@ def validate(line_item) it "creates state change records when job is performed" do perform_enqueued_jobs do expect { - order.update!(state: 'address') + order.update!(state: "address") }.to change(Spree::StateChange, :count).by(1) end state_change = Spree::StateChange.last - expect(state_change.previous_state).to eq('cart') - expect(state_change.next_state).to eq('address') + expect(state_change.previous_state).to eq("cart") + expect(state_change.next_state).to eq("address") expect(state_change.stateful_id).to eq(order.id) - expect(state_change.stateful_type).to eq('Spree::Order') + expect(state_change.stateful_type).to eq("Spree::Order") expect(state_change.user_id).to eq(user.id) - expect(state_change.name).to eq('order') + expect(state_change.name).to eq("order") end end end diff --git a/core/spec/models/spree/order_taxation_spec.rb b/core/spec/models/spree/order_taxation_spec.rb index 9fc2b9fc649..ac7ecd5dfc6 100644 --- a/core/spec/models/spree/order_taxation_spec.rb +++ b/core/spec/models/spree/order_taxation_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::OrderTaxation do let(:shipping_address) { FactoryBot.create(:address, state: new_york) } @@ -26,7 +26,7 @@ :product, price: 20, name: "Book", - tax_category: create(:tax_category), + tax_category: create(:tax_category) ) end diff --git a/core/spec/models/spree/order_update_attributes_spec.rb b/core/spec/models/spree/order_update_attributes_spec.rb index df136baafe4..d03f0530343 100644 --- a/core/spec/models/spree/order_update_attributes_spec.rb +++ b/core/spec/models/spree/order_update_attributes_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe OrderUpdateAttributes do @@ -9,22 +9,22 @@ module Spree let(:request_env) { nil } let(:update) { described_class.new(order, attributes, request_env:) } - context 'empty attributes' do - let(:attributes){ {} } - it 'succeeds' do + context "empty attributes" do + let(:attributes) { {} } + it "succeeds" do expect(update.call).to be_truthy end end - context 'with coupon code' do - let(:attributes){ { coupon_code: 'abc123' } } + context "with coupon code" do + let(:attributes) { {coupon_code: "abc123"} } it "sets coupon code" do expect(update.call).to be_truthy - expect(order.coupon_code).to eq('abc123') + expect(order.coupon_code).to eq("abc123") end end - context 'with payment attributes' do + context "with payment attributes" do let(:attributes) do { payments_attributes: [ @@ -36,12 +36,12 @@ module Spree } end - context 'with params and a request_env' do - let(:request_env){ { 'USER_AGENT' => 'Firefox' } } - it 'sets the request_env on the payment' do + context "with params and a request_env" do + let(:request_env) { {"USER_AGENT" => "Firefox"} } + it "sets the request_env on the payment" do expect(update.call).to be_truthy expect(order.payments.length).to eq 1 - expect(order.payments[0].request_env).to eq({ 'USER_AGENT' => 'Firefox' }) + expect(order.payments[0].request_env).to eq({"USER_AGENT" => "Firefox"}) end end end diff --git a/core/spec/models/spree/order_updater_spec.rb b/core/spec/models/spree/order_updater_spec.rb index 0b680e117f4..b45b617136e 100644 --- a/core/spec/models/spree/order_updater_spec.rb +++ b/core/spec/models/spree/order_updater_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe OrderUpdater, type: :model do @@ -15,7 +15,7 @@ module Spree end end - context 'with refund' do + context "with refund" do it "updates payment totals" do create(:payment_with_refund, order:, amount: 33.25, refund_amount: 3) updater.recalculate @@ -36,7 +36,7 @@ module Spree }.to change { order.shipment_total }.to 10 end - context 'with a source-less line item adjustment' do + context "with a source-less line item adjustment" do let(:line_item) { create(:line_item, order:, price: 10) } before do create(:adjustment, source: nil, adjustable: line_item, order:, amount: -5) @@ -58,8 +58,8 @@ module Spree end end - describe '#recalculate_adjustments ' do - describe 'promotion recalculation' do + describe "#recalculate_adjustments " do + describe "promotion recalculation" do it "calls the Promotion Adjustments Recalculator" do adjuster = double(:call) expect(Spree::Config.promotions.order_adjuster_class).to receive(:new).and_return(adjuster) @@ -68,7 +68,7 @@ module Spree end end - describe 'tax recalculation' do + describe "tax recalculation" do let(:tax_category) { create(:tax_category) } let(:ship_address) { create(:address, state: new_york) } let(:new_york) { create(:state, state_code: "NY") } @@ -88,20 +88,20 @@ module Spree let(:order) do create( :order_with_line_items, - line_items_attributes: [{ price: 10, variant: variant }], - ship_address: ship_address, + line_items_attributes: [{price: 10, variant: variant}], + ship_address: ship_address ) end let(:line_item) { order.line_items[0] } let(:variant) { create(:variant, tax_category:) } - context 'when the item quantity has changed' do + context "when the item quantity has changed" do before do line_item.update!(quantity: 2) end - it 'updates the additional_tax_total' do + it "updates the additional_tax_total" do expect { order.recalculate }.to change { @@ -110,14 +110,14 @@ module Spree end end - context 'when the address has changed to a different state' do + context "when the address has changed to a different state" do let(:new_shipping_address) { create(:address) } before do order.ship_address = new_shipping_address end - it 'removes the old taxes' do + it "removes the old taxes" do expect { order.recalculate }.to change { @@ -152,8 +152,8 @@ module Spree expect { order.ship_address = create(:address) order.recalculate - }.to change { order.additional_tax_total }.from(0.27).to(0). - and change { order.adjustment_total }.from(0.27).to(0) + }.to change { order.additional_tax_total }.from(0.27).to(0) + .and change { order.adjustment_total }.from(0.27).to(0) end it "deletes the order-level tax adjustments when it persists the order" do @@ -164,7 +164,7 @@ module Spree end end - context 'with a custom tax_calculator_class' do + context "with a custom tax_calculator_class" do let(:custom_calculator_class) { double } let(:custom_calculator_instance) { double } @@ -198,14 +198,14 @@ module Spree ) end - it 'uses the configured class' do + it "uses the configured class" do order.recalculate expect(custom_calculator_class).to have_received(:new).with(order).at_least(:once) expect(custom_calculator_instance).to have_received(:calculate).at_least(:once) end - it 'updates the aggregate columns' do + it "updates the aggregate columns" do expect { order.recalculate }.to change { order.reload.additional_tax_total }.to(4.00) @@ -237,7 +237,7 @@ module Spree allow(order).to receive_messages backordered?: true updater.update_shipment_state - expect(order.shipment_state).to eq('backorder') + expect(order.shipment_state).to eq("backorder") end it "is nil" do @@ -254,10 +254,10 @@ module Spree end it "is partial" do - create(:shipment, order:, state: 'pending') - create(:shipment, order:, state: 'ready') + create(:shipment, order:, state: "pending") + create(:shipment, order:, state: "ready") updater.update_shipment_state - expect(order.shipment_state).to eq('partial') + expect(order.shipment_state).to eq("partial") end end @@ -279,26 +279,26 @@ module Spree }.to change { Spree::StateChange.where(name: "payment").count }.by(1) end - context 'no valid payments with non-zero order total' do + context "no valid payments with non-zero order total" do it "is failed" do - create(:payment, order:, state: 'invalid') + create(:payment, order:, state: "invalid") order.total = 1 order.payment_total = 0 updater.update_payment_state - expect(order.payment_state).to eq('failed') + expect(order.payment_state).to eq("failed") end end - context 'invalid payments are present but order total is zero' do - it 'is paid' do - order.payments << Spree::Payment.new(state: 'invalid') + context "invalid payments are present but order total is zero" do + it "is paid" do + order.payments << Spree::Payment.new(state: "invalid") order.total = 0 order.payment_total = 0 expect { updater.update_payment_state - }.to change { order.payment_state }.to 'paid' + }.to change { order.payment_state }.to "paid" end end @@ -309,7 +309,7 @@ module Spree expect { updater.update_payment_state - }.to change { order.payment_state }.to 'credit_owed' + }.to change { order.payment_state }.to "credit_owed" end end @@ -320,7 +320,7 @@ module Spree expect { updater.update_payment_state - }.to change { order.payment_state }.to 'balance_due' + }.to change { order.payment_state }.to "balance_due" end end @@ -331,13 +331,13 @@ module Spree expect { updater.update_payment_state - }.to change { order.payment_state }.to 'paid' + }.to change { order.payment_state }.to "paid" end end context "order is canceled" do before do - order.state = 'canceled' + order.state = "canceled" end context "and is still unpaid" do @@ -346,7 +346,7 @@ module Spree order.total = 30 expect { updater.update_payment_state - }.to change { order.payment_state }.to 'void' + }.to change { order.payment_state }.to "void" end end @@ -354,10 +354,10 @@ module Spree it "is credit_owed" do order.payment_total = 30 order.total = 30 - create(:payment, order:, state: 'completed', amount: 30) + create(:payment, order:, state: "completed", amount: 30) expect { updater.update_payment_state - }.to change { order.payment_state }.to 'credit_owed' + }.to change { order.payment_state }.to "credit_owed" end end @@ -367,7 +367,7 @@ module Spree order.total = 30 expect { updater.update_payment_state - }.to change { order.payment_state }.to 'void' + }.to change { order.payment_state }.to "void" end end end @@ -386,9 +386,9 @@ module Spree updater.recalculate end - context 'with a shipment' do + context "with a shipment" do before { create(:shipment, order:) } - let(:shipment){ order.shipments[0] } + let(:shipment) { order.shipments[0] } it "updates each shipment" do expect(shipment).to receive(:update_state) @@ -437,7 +437,7 @@ module Spree end context "with 'order_recalculated' event subscription" do - let(:item) { spy('object') } + let(:item) { spy("object") } let(:bus) { Spree::Bus } let!(:subscription) do diff --git a/core/spec/models/spree/payment/cancellation_spec.rb b/core/spec/models/spree/payment/cancellation_spec.rb index a6e6b3e44ad..e6712f3ed56 100644 --- a/core/spec/models/spree/payment/cancellation_spec.rb +++ b/core/spec/models/spree/payment/cancellation_spec.rb @@ -1,59 +1,59 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Payment::Cancellation do - describe '#initialize' do - it 'has default refund reason' do + describe "#initialize" do + it "has default refund reason" do expect(subject.reason).to eq Spree::Payment::Cancellation::DEFAULT_REASON end - context 'with reason given' do - subject { described_class.new(reason: 'My custom reason') } + context "with reason given" do + subject { described_class.new(reason: "My custom reason") } - it 'has this as refund reason' do - expect(subject.reason).to eq 'My custom reason' + it "has this as refund reason" do + expect(subject.reason).to eq "My custom reason" end end end - describe '#cancel' do + describe "#cancel" do subject { described_class.new.cancel(payment) } let(:payment_method) { create(:payment_method) } let(:payment) { create(:payment, payment_method:, amount: 10) } - context 'if payment method returns void response' do + context "if payment method returns void response" do before do expect(payment_method).to receive(:try_void).with(payment) { double } end - it 'handles the void' do + it "handles the void" do expect(payment).to receive(:handle_void_response) subject end end - context 'if payment method rejects the void' do + context "if payment method rejects the void" do before do expect(payment_method).to receive(:try_void).with(payment) { false } end - it 'refunds the payment' do + it "refunds the payment" do expect { subject }.to change { payment.refunds.count }.from(0).to(1) end - context 'if payment has partial refunds' do + context "if payment has partial refunds" do let(:credit_amount) { payment.amount / 2 } before do payment.refunds.create!( amount: credit_amount, - reason: Spree::RefundReason.where(name: 'test').first_or_create, + reason: Spree::RefundReason.where(name: "test").first_or_create ).perform! end - it 'only refunds the allowed credit amount' do + it "only refunds the allowed credit amount" do subject refund = payment.refunds.last expect(refund.amount).to eq(credit_amount) diff --git a/core/spec/models/spree/payment_create_spec.rb b/core/spec/models/spree/payment_create_spec.rb index ff20feeac88..0692baf099d 100644 --- a/core/spec/models/spree/payment_create_spec.rb +++ b/core/spec/models/spree/payment_create_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe PaymentCreate do @@ -11,8 +11,8 @@ module Spree let(:payment_method) { create(:payment_method) } let(:new_payment) { payment_create.build } - context 'empty attributes' do - let(:attributes){ {} } + context "empty attributes" do + let(:attributes) { {} } it "builds a new empty payment" do expect(new_payment).to be_a Spree::Payment expect(new_payment.order).to eq order @@ -24,16 +24,16 @@ module Spree end end - context 'with a new source' do + context "with a new source" do let(:attributes) do { amount: 100, payment_method:, source_attributes: { expiry: "01 / 99", - number: '1234567890123', - verification_value: '123', - name: 'Foo Bar' + number: "1234567890123", + verification_value: "123", + name: "Foo Bar" } } end @@ -56,7 +56,7 @@ module Spree { amount: 100, payment_method:, - source_attributes: { expiry: "1 / 12" } + source_attributes: {expiry: "1 / 12"} } end it "errors when payment source not valid" do @@ -77,9 +77,9 @@ module Spree payment_method:, source_attributes: { expiry: "01 / 99", - number: '1234567890123', - verification_value: '123', - name: 'Foo Bar' + number: "1234567890123", + verification_value: "123", + name: "Foo Bar" } } end diff --git a/core/spec/models/spree/payment_method/bogus_credit_card_spec.rb b/core/spec/models/spree/payment_method/bogus_credit_card_spec.rb index a902c0b133c..80a1fc0e1c6 100644 --- a/core/spec/models/spree/payment_method/bogus_credit_card_spec.rb +++ b/core/spec/models/spree/payment_method/bogus_credit_card_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe PaymentMethod::BogusCreditCard, type: :model do diff --git a/core/spec/models/spree/payment_method/check_spec.rb b/core/spec/models/spree/payment_method/check_spec.rb index 5848c82f091..e68b7d8390b 100644 --- a/core/spec/models/spree/payment_method/check_spec.rb +++ b/core/spec/models/spree/payment_method/check_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::PaymentMethod::Check do let(:order) { create(:order) } diff --git a/core/spec/models/spree/payment_method/credit_card_spec.rb b/core/spec/models/spree/payment_method/credit_card_spec.rb index b9247a75cf4..9b7bd2266d6 100644 --- a/core/spec/models/spree/payment_method/credit_card_spec.rb +++ b/core/spec/models/spree/payment_method/credit_card_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::PaymentMethod::CreditCard, type: :model do context "fetching payment sources" do @@ -12,16 +12,16 @@ let(:cc) do create(:credit_card, - payment_method:, - gateway_customer_profile_id: "EFWE", - user: cc_user) + payment_method:, + gateway_customer_profile_id: "EFWE", + user: cc_user) end let(:payment) do create(:payment, order:, source: cc, payment_method:) end - context 'order is not complete and credit card user is nil' do + context "order is not complete and credit card user is nil" do let(:cc_user) { nil } let(:completed_at) { nil } @@ -30,7 +30,7 @@ end end - context 'order is complete but credit card user is nil' do + context "order is complete but credit card user is nil" do let(:cc_user) { nil } let(:completed_at) { Date.yesterday } @@ -39,7 +39,7 @@ end end - context 'order is not complete but credit card has user' do + context "order is not complete but credit card has user" do let(:cc_user) { user } let(:completed_at) { nil } before do @@ -51,18 +51,18 @@ end end - context 'using preference_source' do - let(:klass){ Spree::PaymentMethod::BogusCreditCard } + context "using preference_source" do + let(:klass) { Spree::PaymentMethod::BogusCreditCard } before do - Spree::Config.static_model_preferences.add(klass, 'test_preference_source', server: 'bar') + Spree::Config.static_model_preferences.add(klass, "test_preference_source", server: "bar") end after do Spree::Config.static_model_preferences.for_class(klass).clear end - let(:payment_method){ create(:credit_card_payment_method, preference_source: 'test_preference_source') } + let(:payment_method) { create(:credit_card_payment_method, preference_source: "test_preference_source") } it "reads static preferences" do - expect(payment_method.options).to eq({ server: "bar" }) + expect(payment_method.options).to eq({server: "bar"}) end end end diff --git a/core/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb b/core/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb index 0509de87a4b..7a25bdbb022 100644 --- a/core/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +++ b/core/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::PaymentMethod::SimpleBogusCreditCard, type: :model do subject { Spree::PaymentMethod::SimpleBogusCreditCard.new } @@ -8,12 +8,12 @@ # regression test for https://github.com/spree/spree/issues/3824 describe "#capture" do it "returns success with the right response code" do - response = subject.capture(123, '12345', {}) + response = subject.capture(123, "12345", {}) expect(response.message).to include("success") end it "returns failure with the wrong response code" do - response = subject.capture(123, 'wrong', {}) + response = subject.capture(123, "wrong", {}) expect(response.message).to include("failure") end end diff --git a/core/spec/models/spree/payment_method/store_credit_spec.rb b/core/spec/models/spree/payment_method/store_credit_spec.rb index 6a99c22522c..e3450086a7b 100644 --- a/core/spec/models/spree/payment_method/store_credit_spec.rb +++ b/core/spec/models/spree/payment_method/store_credit_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::PaymentMethod::StoreCredit do - let(:order) { create(:order) } - let(:payment) { create(:payment, order:) } + let(:order) { create(:order) } + let(:payment) { create(:payment, order:) } let(:gateway_options) { payment.gateway_options } context "#authorize" do @@ -17,44 +17,44 @@ let(:gateway_options) { super().merge(originator:) } let(:originator) { nil } - context 'without an invalid store credit' do + context "without an invalid store credit" do let(:store_credit) { nil } let(:auth_amount) { 10 } it "declines an unknown store credit" do expect(subject.success?).to be false - expect(subject.message).to include I18n.t('spree.store_credit.unable_to_find') + expect(subject.message).to include I18n.t("spree.store_credit.unable_to_find") end end - context 'with insuffient funds' do + context "with insuffient funds" do let(:auth_amount) { (store_credit.amount_remaining * 100) + 1 } it "declines a store credit" do expect(subject.success?).to be false - expect(subject.message).to include I18n.t('spree.store_credit.insufficient_funds') + expect(subject.message).to include I18n.t("spree.store_credit.insufficient_funds") end end - context 'when the currency does not match the order currency' do - let(:store_credit) { create(:store_credit, currency: 'AUD') } + context "when the currency does not match the order currency" do + let(:store_credit) { create(:store_credit, currency: "AUD") } it "declines the credit" do expect(subject.success?).to be false - expect(subject.message).to include I18n.t('spree.store_credit.currency_mismatch') + expect(subject.message).to include I18n.t("spree.store_credit.currency_mismatch") end end - context 'with a valid request' do + context "with a valid request" do it "authorizes a valid store credit" do expect(subject.success?).to be true expect(subject.authorization).not_to be_nil end - context 'with an originator' do - let(:originator) { double('originator') } + context "with an originator" do + let(:originator) { double("originator") } - it 'passes the originator' do + it "passes the originator" do expect_any_instance_of(Spree::StoreCredit).to receive(:authorize) .with(anything, anything, action_originator: originator) subject @@ -77,16 +77,16 @@ let(:store_credit) { create(:store_credit, amount_authorized: authorized_amount) } let(:originator) { nil } - context 'with an invalid auth code' do + context "with an invalid auth code" do let(:auth_code) { -1 } it "declines an unknown store credit" do expect(subject.success?).to be false - expect(subject.message).to include I18n.t('spree.store_credit.unable_to_find') + expect(subject.message).to include I18n.t("spree.store_credit.unable_to_find") end end - context 'when unable to authorize the amount' do + context "when unable to authorize the amount" do let(:authorized_amount) { (capture_amount - 1) / 100 } before do @@ -95,29 +95,29 @@ it "declines a store credit" do expect(subject.success?).to be false - expect(subject.message).to include I18n.t('spree.store_credit.insufficient_authorized_amount') + expect(subject.message).to include I18n.t("spree.store_credit.insufficient_authorized_amount") end end - context 'when the currency does not match the order currency' do - let(:store_credit) { create(:store_credit, currency: 'AUD', amount_authorized: authorized_amount) } + context "when the currency does not match the order currency" do + let(:store_credit) { create(:store_credit, currency: "AUD", amount_authorized: authorized_amount) } it "declines the credit" do expect(subject.success?).to be false - expect(subject.message).to include I18n.t('spree.store_credit.currency_mismatch') + expect(subject.message).to include I18n.t("spree.store_credit.currency_mismatch") end end - context 'with a valid request' do + context "with a valid request" do it "captures the store credit" do - expect(subject.message).to include I18n.t('spree.store_credit.successful_action', action: Spree::StoreCredit::CAPTURE_ACTION) + expect(subject.message).to include I18n.t("spree.store_credit.successful_action", action: Spree::StoreCredit::CAPTURE_ACTION) expect(subject.success?).to be true end - context 'with an originator' do - let(:originator) { double('originator') } + context "with an originator" do + let(:originator) { double("originator") } - it 'passes the originator' do + it "passes the originator" do expect_any_instance_of(Spree::StoreCredit).to receive(:capture) .with(anything, anything, anything, action_originator: originator) subject @@ -136,16 +136,16 @@ let(:auth_event) { create(:store_credit_auth_event) } let(:originator) { nil } - context 'with an invalid auth code' do + context "with an invalid auth code" do let(:auth_code) { 1 } it "declines an unknown store credit" do expect(subject.success?).to be false - expect(subject.message).to include I18n.t('spree.store_credit.unable_to_find') + expect(subject.message).to include I18n.t("spree.store_credit.unable_to_find") end end - context 'when the store credit is not voided successfully' do + context "when the store credit is not voided successfully" do before { allow_any_instance_of(Spree::StoreCredit).to receive_messages(void: false) } it "returns an error response" do @@ -155,13 +155,13 @@ it "voids a valid store credit void request" do expect(subject.success?).to be true - expect(subject.message).to include I18n.t('spree.store_credit.successful_action', action: Spree::StoreCredit::VOID_ACTION) + expect(subject.message).to include I18n.t("spree.store_credit.successful_action", action: Spree::StoreCredit::VOID_ACTION) end - context 'with an originator' do - let(:originator) { double('originator') } + context "with an originator" do + let(:originator) { double("originator") } - it 'passes the originator' do + it "passes the originator" do expect_any_instance_of(Spree::StoreCredit).to receive(:void) .with(anything, action_originator: originator) subject @@ -175,15 +175,15 @@ store_credit = create(:store_credit) auth_code = store_credit.generate_authorization_code store_credit.store_credit_events.create!(action: Spree::StoreCredit::ELIGIBLE_ACTION, - amount:, - authorization_code: auth_code) + amount:, + authorization_code: auth_code) store_credit.store_credit_events.create!(action: Spree::StoreCredit::CAPTURE_ACTION, - amount:, - authorization_code: auth_code) + amount:, + authorization_code: auth_code) resp = subject.purchase(amount * 100.0, store_credit, gateway_options) expect(resp.success?).to be false - expect(resp.message).to include I18n.t('spree.store_credit.unable_to_find') + expect(resp.message).to include I18n.t("spree.store_credit.unable_to_find") end it "captures a purchase if it can find a pending credit for the correct amount" do @@ -191,12 +191,12 @@ store_credit = create(:store_credit) auth_code = store_credit.generate_authorization_code store_credit.store_credit_events.create!(action: Spree::StoreCredit::ELIGIBLE_ACTION, - amount:, - authorization_code: auth_code) + amount:, + authorization_code: auth_code) resp = subject.purchase(amount * 100.0, store_credit, gateway_options) expect(resp.success?).to be true - expect(resp.message).to include I18n.t('spree.store_credit.successful_action', action: Spree::StoreCredit::CAPTURE_ACTION) + expect(resp.message).to include I18n.t("spree.store_credit.successful_action", action: Spree::StoreCredit::CAPTURE_ACTION) end end @@ -211,12 +211,12 @@ let(:auth_event) { create(:store_credit_auth_event) } let(:originator) { nil } - context 'with an invalid auth code' do + context "with an invalid auth code" do let(:auth_code) { 1 } it "declines an unknown store credit" do expect(subject.success?).to be false - expect(subject.message).to include I18n.t('spree.store_credit.unable_to_find') + expect(subject.message).to include I18n.t("spree.store_credit.unable_to_find") end end @@ -228,19 +228,19 @@ end end - context 'with a valid credit request' do + context "with a valid credit request" do before { allow_any_instance_of(Spree::StoreCredit).to receive_messages(credit: true) } it "credits a valid store credit credit request" do expect(subject.success?).to be true - expect(subject.message).to include I18n.t('spree.store_credit.successful_action', action: Spree::StoreCredit::CREDIT_ACTION) + expect(subject.message).to include I18n.t("spree.store_credit.successful_action", action: Spree::StoreCredit::CREDIT_ACTION) end end - context 'with an originator' do - let(:originator) { double('originator') } + context "with an originator" do + let(:originator) { double("originator") } - it 'passes the originator' do + it "passes the originator" do expect_any_instance_of(Spree::StoreCredit).to receive(:credit) .with(anything, anything, anything, action_originator: originator) subject @@ -253,9 +253,9 @@ payment_method.try_void(double(response_code: auth_code)) end - let(:payment_method) { described_class.create!(name: 'Store Credit') } - let(:store_credit) { create(:store_credit, amount: original_amount, amount_used: captured_amount) } - let(:auth_code) { "1-SC-20141111111111" } + let(:payment_method) { described_class.create!(name: "Store Credit") } + let(:store_credit) { create(:store_credit, amount: original_amount, amount_used: captured_amount) } + let(:auth_code) { "1-SC-20141111111111" } let(:original_amount) { 100.0 } let(:captured_amount) { 10.0 } @@ -288,9 +288,9 @@ end it "refunds the capture amount" do - expect { subject }.to change { store_credit.reload.amount_remaining }. - from(original_amount - captured_amount). - to(original_amount) + expect { subject }.to change { store_credit.reload.amount_remaining } + .from(original_amount - captured_amount) + .to(original_amount) end end end @@ -307,14 +307,14 @@ it_behaves_like "a spree payment method" it "voids the capture amount" do - expect { subject }.to change { store_credit.reload.amount_remaining }. - from(original_amount - captured_amount). - to(original_amount) + expect { subject }.to change { store_credit.reload.amount_remaining } + .from(original_amount - captured_amount) + .to(original_amount) end end context "store credit event not found" do - let(:auth_code) { 'INVALID' } + let(:auth_code) { "INVALID" } it_behaves_like "a spree payment method" diff --git a/core/spec/models/spree/payment_method_spec.rb b/core/spec/models/spree/payment_method_spec.rb index 2b1ce78216d..df87366cea1 100644 --- a/core/spec/models/spree/payment_method_spec.rb +++ b/core/spec/models/spree/payment_method_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::PaymentMethod, type: :model do let!(:payment_method_nil_display) do @@ -61,7 +61,7 @@ ]) end - subject { Spree::PaymentMethod.available_to_store( store_1 ).available_to_users.available_to_admin } + subject { Spree::PaymentMethod.available_to_store(store_1).available_to_users.available_to_admin } it { is_expected.to contain_exactly(payment_method_both_display, payment_method_nil_display) } @@ -115,7 +115,7 @@ end end - describe '#auto_capture?' do + describe "#auto_capture?" do let(:gateway) do gateway_class = Class.new(Spree::PaymentMethod::CreditCard) do def gateway_class @@ -128,54 +128,54 @@ def gateway_class subject { gateway.auto_capture? } - context 'when auto_capture is nil' do + context "when auto_capture is nil" do before(:each) do - expect(Spree::Config).to receive('[]').with(:auto_capture).and_return(auto_capture) + expect(Spree::Config).to receive("[]").with(:auto_capture).and_return(auto_capture) end - context 'and when Spree::Config[:auto_capture] is false' do + context "and when Spree::Config[:auto_capture] is false" do let(:auto_capture) { false } - it 'should be false' do + it "should be false" do expect(gateway.auto_capture).to be_nil expect(subject).to be false end end - context 'and when Spree::Config[:auto_capture] is true' do + context "and when Spree::Config[:auto_capture] is true" do let(:auto_capture) { true } - it 'should be true' do + it "should be true" do expect(gateway.auto_capture).to be_nil expect(subject).to be true end end end - context 'when auto_capture is not nil' do + context "when auto_capture is not nil" do before(:each) do gateway.auto_capture = auto_capture end - context 'and is true' do + context "and is true" do let(:auto_capture) { true } - it 'should be true' do + it "should be true" do expect(subject).to be true end end - context 'and is false' do + context "and is false" do let(:auto_capture) { false } - it 'should be true' do + it "should be true" do expect(subject).to be false end end end end - describe 'ActiveMerchant methods' do + describe "ActiveMerchant methods" do let(:payment_method) do payment_method_class = Class.new(Spree::PaymentMethod) do def gateway_class @@ -183,15 +183,25 @@ def gateway_class def initialize(options) end - def authorize; 'authorize'; end + def authorize + "authorize" + end - def purchase; 'purchase'; end + def purchase + "purchase" + end - def capture; 'capture'; end + def capture + "capture" + end - def void; 'void'; end + def void + "void" + end - def credit; 'credit'; end + def credit + "credit" + end end end end @@ -200,23 +210,23 @@ def credit; 'credit'; end end it "passes through authorize" do - expect(payment_method.authorize).to eq 'authorize' + expect(payment_method.authorize).to eq "authorize" end it "passes through purchase" do - expect(payment_method.purchase).to eq 'purchase' + expect(payment_method.purchase).to eq "purchase" end it "passes through capture" do - expect(payment_method.capture).to eq 'capture' + expect(payment_method.capture).to eq "capture" end it "passes through void" do - expect(payment_method.void).to eq 'void' + expect(payment_method.void).to eq "void" end it "passes through credit" do - expect(payment_method.credit).to eq 'credit' + expect(payment_method.credit).to eq "credit" end end @@ -258,18 +268,18 @@ def credit; 'credit'; end end end - describe 'model_name.human' do - context 'PaymentMethod itself' do + describe "model_name.human" do + context "PaymentMethod itself" do it "returns i18n value" do - expect(Spree::PaymentMethod.model_name.human).to eq('Payment Method') + expect(Spree::PaymentMethod.model_name.human).to eq("Payment Method") end end - context 'A subclass with no i18n key' do + context "A subclass with no i18n key" do let!(:klass) { stub_const("MyGem::SomeClass", Class.new(described_class)) } it "returns default humanized value" do - expect(klass.model_name.human).to eq('Some class') + expect(klass.model_name.human).to eq("Some class") end end end @@ -277,7 +287,7 @@ def credit; 'credit'; end describe "#find_sti_class" do context "with an unexisting type" do context "while retrieving records" do - let!(:unsupported_payment_method) { create(:payment_method, type: 'UnsupportedPaymentMethod') } + let!(:unsupported_payment_method) { create(:payment_method, type: "UnsupportedPaymentMethod") } it "raises an UnsupportedPaymentMethod error" do expect { Spree::PaymentMethod.all.to_json } diff --git a/core/spec/models/spree/payment_spec.rb b/core/spec/models/spree/payment_spec.rb index 6ed84aafaaf..b4b570bc8e4 100644 --- a/core/spec/models/spree/payment_spec.rb +++ b/core/spec/models/spree/payment_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Payment, type: :model do let(:store) { create :store } @@ -8,13 +8,13 @@ let(:refund_reason) { create(:refund_reason) } let(:gateway) do - gateway = Spree::PaymentMethod::BogusCreditCard.create!(active: true, name: 'Bogus gateway') + gateway = Spree::PaymentMethod::BogusCreditCard.create!(active: true, name: "Bogus gateway") allow(gateway).to receive_messages(source_required?: true) gateway end - let(:avs_code) { 'D' } - let(:cvv_code) { 'M' } + let(:avs_code) { "D" } + let(:cvv_code) { "M" } let(:card) { create :credit_card } @@ -30,37 +30,37 @@ let(:amount_in_cents) { (payment.amount * 100).round } let!(:success_response) do - ActiveMerchant::Billing::Response.new(true, '', {}, { - authorization: '123', + ActiveMerchant::Billing::Response.new(true, "", {}, { + authorization: "123", cvv_result: cvv_code, - avs_result: { code: avs_code } + avs_result: {code: avs_code} }) end let(:failed_response) do ActiveMerchant::Billing::Response.new( false, - 'Declined', - { transaction: {} }, + "Declined", + {transaction: {}}, {} ) end - context 'risk analysis' do - let!(:payment_1) { create(:payment, avs_response: 'Y', cvv_response_code: 'M', cvv_response_message: 'Match') } - let!(:payment_2) { create(:payment, avs_response: 'Y', cvv_response_code: 'M', cvv_response_message: '') } - let!(:payment_3) { create(:payment, avs_response: 'A', cvv_response_code: 'M', cvv_response_message: 'Match') } - let!(:payment_4) { create(:payment, avs_response: 'Y', cvv_response_code: 'N', cvv_response_message: 'No Match') } - let!(:payment_5) { create(:payment, avs_response: 'Y', cvv_response_code: 'M', cvv_response_message: '', state: 'failed') } + context "risk analysis" do + let!(:payment_1) { create(:payment, avs_response: "Y", cvv_response_code: "M", cvv_response_message: "Match") } + let!(:payment_2) { create(:payment, avs_response: "Y", cvv_response_code: "M", cvv_response_message: "") } + let!(:payment_3) { create(:payment, avs_response: "A", cvv_response_code: "M", cvv_response_message: "Match") } + let!(:payment_4) { create(:payment, avs_response: "Y", cvv_response_code: "N", cvv_response_message: "No Match") } + let!(:payment_5) { create(:payment, avs_response: "Y", cvv_response_code: "M", cvv_response_message: "", state: "failed") } - describe '.risky' do - it 'fetches only risky payments' do + describe ".risky" do + it "fetches only risky payments" do expect(subject.class.risky.to_a).to match_array([payment_3, payment_4, payment_5]) end end - context '#risky?' do - it 'is true for risky payments' do + context "#risky?" do + it "is true for risky payments" do aggregate_failures do expect(payment_1).not_to be_risky expect(payment_2).not_to be_risky @@ -87,7 +87,7 @@ end end - context '#uncaptured_amount' do + context "#uncaptured_amount" do context "calculates based on capture events" do it "with 0 capture events" do expect(payment.uncaptured_amount).to eq(5.0) @@ -102,11 +102,11 @@ end end - context 'validations' do + context "validations" do it "returns useful error messages when source is invalid" do payment.source = Spree::CreditCard.new expect(payment).not_to be_valid - cc_errors = payment.errors['Credit Card'] + cc_errors = payment.errors["Credit Card"] expect(cc_errors).to include("Card Number can't be blank") expect(cc_errors).to include("Month is not a number") expect(cc_errors).to include("Year is not a number") @@ -115,25 +115,25 @@ end # Regression test for https://github.com/spree/spree/pull/2224 - context 'failure' do - it 'should transition to failed from pending state' do - payment.state = 'pending' + context "failure" do + it "should transition to failed from pending state" do + payment.state = "pending" payment.failure - expect(payment.state).to eql('failed') + expect(payment.state).to eql("failed") end - it 'should transition to failed from processing state' do - payment.state = 'processing' + it "should transition to failed from processing state" do + payment.state = "processing" payment.failure - expect(payment.state).to eql('failed') + expect(payment.state).to eql("failed") end end - context 'invalidate' do - it 'should transition from checkout to invalid' do - payment.state = 'checkout' + context "invalidate" do + it "should transition from checkout to invalid" do + payment.state = "checkout" payment.invalidate - expect(payment.state).to eq('invalid') + expect(payment.state).to eq("invalid") end context "the payment's source is invalid" do @@ -143,9 +143,9 @@ end it "transitions to invalid" do - payment.state = 'checkout' + payment.state = "checkout" payment.invalidate - expect(payment.state).to eq 'invalid' + expect(payment.state).to eq "invalid" end end end @@ -164,7 +164,7 @@ describe "#process!" do subject { payment.process! } - context 'with autocapture' do + context "with autocapture" do before do payment.payment_method.update!(auto_capture: true) end @@ -175,13 +175,13 @@ end end - context 'without autocapture' do + context "without autocapture" do before do payment.payment_method.update!(auto_capture: false) end - context 'when in the checkout state' do - before { payment.update!(state: 'checkout') } + context "when in the checkout state" do + before { payment.update!(state: "checkout") } it "authorizes" do subject @@ -189,8 +189,8 @@ end end - context 'when in the processing state' do - before { payment.update!(state: 'processing') } + context "when in the processing state" do + before { payment.update!(state: "processing") } it "does not authorize" do subject @@ -198,8 +198,8 @@ end end - context 'when in the pending state' do - before { payment.update!(state: 'pending') } + context "when in the pending state" do + before { payment.update!(state: "pending") } it "does not re-authorize" do expect(payment).to_not receive(:authorize!) @@ -208,8 +208,8 @@ end end - context 'when in a failed state' do - before { payment.update!(state: 'failed') } + context "when in a failed state" do + before { payment.update!(state: "failed") } it "raises an exception" do expect { @@ -218,8 +218,8 @@ end end - context 'when in the completed state' do - before { payment.update!(state: 'completed') } + context "when in the completed state" do + before { payment.update!(state: "completed") } it "authorizes" do subject @@ -237,7 +237,7 @@ it "should invalidate if payment method doesnt support source" do expect(payment.payment_method).to receive(:supports?).with(payment.source).and_return(false) expect { subject }.to raise_error(Spree::Core::GatewayError) - expect(payment.state).to eq('invalid') + expect(payment.state).to eq("invalid") end end @@ -246,16 +246,16 @@ it "should call authorize on the gateway with the payment amount" do expect(payment.payment_method).to receive(:authorize).with(amount_in_cents, - card, - anything).and_return(success_response) + card, + anything).and_return(success_response) subject end it "should call authorize on the gateway with the currency code" do - allow(payment).to receive_messages currency: 'GBP' + allow(payment).to receive_messages currency: "GBP" expect(payment.payment_method).to receive(:authorize).with(amount_in_cents, - card, - hash_including({ currency: "GBP" })).and_return(success_response) + card, + hash_including({currency: "GBP"})).and_return(success_response) subject end @@ -266,45 +266,45 @@ }.to change { payment.log_entries.count }.by(1) end - describe 'billing_address option' do - context 'when the source is a credit card with an address' do + describe "billing_address option" do + context "when the source is a credit card with an address" do let(:card) { create(:credit_card, address:) } let(:address) { create(:address) } - it 'sends the credit card address' do + it "sends the credit card address" do expect(payment.payment_method).to( - receive(:authorize). - with( + receive(:authorize) + .with( amount_in_cents, card, hash_including(billing_address: card.address.active_merchant_hash) - ). - and_return(success_response) + ) + .and_return(success_response) ) subject end end - context 'when the source is a credit card without an address' do + context "when the source is a credit card without an address" do let(:card) { create(:credit_card, address: nil) } before { order.update!(bill_address: address) } let(:address) { create(:address) } - it 'send the order bill address' do + it "send the order bill address" do expect(payment.payment_method).to( - receive(:authorize). - with( + receive(:authorize) + .with( amount_in_cents, card, hash_including(billing_address: order.bill_address.active_merchant_hash) - ). - and_return(success_response) + ) + .and_return(success_response) ) subject end end - context 'when the source is not a credit card' do + context "when the source is not a credit card" do before do payment.source = store_credit_payment payment.payment_method = store_credit_payment_method @@ -315,15 +315,15 @@ before { order.update!(bill_address: address) } let(:address) { create(:address) } - it 'send the order bill address' do + it "send the order bill address" do expect(payment.payment_method).to( - receive(:authorize). - with( + receive(:authorize) + .with( amount_in_cents, store_credit_payment, hash_including(billing_address: order.bill_address.active_merchant_hash) - ). - and_return(success_response) + ) + .and_return(success_response) ) subject end @@ -333,13 +333,13 @@ context "if successful" do before do expect(payment.payment_method).to receive(:authorize).with(amount_in_cents, - card, - anything).and_return(success_response) + card, + anything).and_return(success_response) end it "should store the response_code, avs_response and cvv_response fields" do subject - expect(payment.response_code).to eq('123') + expect(payment.response_code).to eq("123") expect(payment.avs_response).to eq(avs_code) expect(payment.cvv_response_code).to eq(cvv_code) expect(payment.cvv_response_message).to eq(ActiveMerchant::Billing::CVVResult::MESSAGES[cvv_code]) @@ -386,13 +386,13 @@ context "if successful" do before do expect(payment.payment_method).to receive(:purchase).with(amount_in_cents, - card, - anything).and_return(success_response) + card, + anything).and_return(success_response) end it "should store the response_code and avs_response" do subject - expect(payment.response_code).to eq('123') + expect(payment.response_code).to eq("123") expect(payment.avs_response).to eq(avs_code) end @@ -436,10 +436,10 @@ describe "#capture!" do subject { payment.capture! } - before { payment.response_code = '12345' } + before { payment.response_code = "12345" } context "when payment is pending" do - before { payment.state = 'pending' } + before { payment.state = "pending" } context "when the amount is zero" do before { payment.amount = 0 } @@ -451,7 +451,7 @@ before { payment.amount = 100 } context "if successful" do - context 'for entire amount' do + context "for entire amount" do before do expect(payment.payment_method).to receive(:capture).with(payment.display_amount.money.cents, payment.response_code, anything).and_return(success_response) end @@ -512,13 +512,13 @@ # Regression test for https://github.com/spree/spree/issues/2119 context "when payment is completed" do before do - payment.state = 'completed' + payment.state = "completed" end it "should do nothing" do expect(payment).not_to receive(:complete) expect(payment.payment_method).not_to receive(:capture) - expect{ subject }.not_to change(payment.log_entries, :count) + expect { subject }.not_to change(payment.log_entries, :count) end end end @@ -527,8 +527,8 @@ subject { payment.cancel! } before do - payment.response_code = 'abc' - payment.state = 'pending' + payment.response_code = "abc" + payment.state = "pending" end context "if void returns successful response" do @@ -537,11 +537,11 @@ end it "should update the state to void" do - expect { subject }.to change { payment.state }.to('void') + expect { subject }.to change { payment.state }.to("void") end it "should update the response_code with the authorization from the gateway" do - expect { subject }.to change { payment.response_code }.to('123') + expect { subject }.to change { payment.response_code }.to("123") end end @@ -552,8 +552,8 @@ it "should raise gateway error and not change payment state or response_code", :aggregate_failures do expect { subject }.to raise_error(Spree::Core::GatewayError) - expect(payment.state).to eq('pending') - expect(payment.response_code).to eq('abc') + expect(payment.state).to eq("pending") + expect(payment.response_code).to eq("abc") end it_should_behave_like :gateway_error_logging @@ -564,8 +564,8 @@ subject { payment.void_transaction! } before do - payment.response_code = '123' - payment.state = 'pending' + payment.response_code = "123" + payment.state = "pending" end context "when the payment amount is zero" do @@ -578,7 +578,7 @@ context "when profiles are supported" do it "should call payment_gateway.void with the payment's response_code" do allow(gateway).to receive_messages payment_profiles_supported?: true - expect(gateway).to receive(:void).with('123', card, anything).and_return(success_response) + expect(gateway).to receive(:void).with("123", card, anything).and_return(success_response) subject end end @@ -586,7 +586,7 @@ context "when profiles are not supported" do it "should call payment_gateway.void with the payment's response_code" do allow(gateway).to receive_messages payment_profiles_supported?: false - expect(gateway).to receive(:void).with('123', anything).and_return(success_response) + expect(gateway).to receive(:void).with("123", anything).and_return(success_response) subject end end @@ -600,9 +600,9 @@ context "if successful" do it "should update the response_code with the authorization from the gateway" do # Change it to something different - payment.response_code = 'abc' + payment.response_code = "abc" subject - expect(payment.response_code).to eq('12345') + expect(payment.response_code).to eq("12345") end end @@ -622,7 +622,7 @@ # Regression test for https://github.com/spree/spree/issues/2119 context "if payment is already voided" do before do - payment.state = 'void' + payment.state = "void" end it "should not void the payment" do @@ -636,7 +636,7 @@ context "when already processing" do it "should return nil without trying to process the source" do - payment.state = 'processing' + payment.state = "processing" expect(payment.process!).to be_nil end @@ -649,7 +649,7 @@ end specify do - expect { payment.process! }.to raise_error(Spree::Core::GatewayError, I18n.t('spree.payment_processing_failed')) + expect { payment.process! }.to raise_error(Spree::Core::GatewayError, I18n.t("spree.payment_processing_failed")) end end end @@ -694,11 +694,11 @@ before { payment.amount = 100 } - context 'before refund' do + context "before refund" do it { is_expected.to be false } end - context 'when refund total equals payment amount' do + context "when refund total equals payment amount" do before do create(:refund, payment:, amount: 50) create(:refund, payment:, amount: 50) @@ -711,7 +711,7 @@ describe "#save" do context "captured payments" do it "update order payment total" do - payment = create(:payment, order:, state: 'completed') + payment = create(:payment, order:, state: "completed") expect(order.payment_total).to eq payment.amount end end @@ -724,16 +724,16 @@ end end - context 'when the payment was completed but now void' do + context "when the payment was completed but now void" do let(:payment) do Spree::Payment.create( amount: 100, order:, - state: 'completed' + state: "completed" ) end - it 'updates order payment total' do + it "updates order payment total" do payment.void expect(order.payment_total).to eq 0 end @@ -821,15 +821,15 @@ end end - describe '#invalidate_old_payments' do - it 'should not invalidate other payments if not valid' do + describe "#invalidate_old_payments" do + it "should not invalidate other payments if not valid" do payment.save - invalid_payment = Spree::Payment.new(amount: 100, order:, state: 'invalid', payment_method: gateway) + invalid_payment = Spree::Payment.new(amount: 100, order:, state: "invalid", payment_method: gateway) invalid_payment.save - expect(payment.reload.state).to eq('checkout') + expect(payment.reload.state).to eq("checkout") end - context 'with order having other payments' do + context "with order having other payments" do let!(:existing_payment) do create(:payment, payment_method: existing_payment_method, @@ -848,29 +848,29 @@ amount: 5) end - context 'that are store credit payments' do + context "that are store credit payments" do let(:existing_payment_method) { create(:store_credit_payment_method) } let(:existing_payment_source) { create(:store_credit) } - it 'does not invalidate existing payments' do + it "does not invalidate existing payments" do expect { payment.save! }.to_not change { order.payments.with_state(:invalid).count } end - context 'when payment itself is a store credit payment' do + context "when payment itself is a store credit payment" do let(:payment_method) { existing_payment_method } let(:payment_source) { existing_payment_source } - it 'does not invalidate existing payments' do + it "does not invalidate existing payments" do expect { payment.save! }.to_not change { order.payments.with_state(:invalid).count } end end end - context 'that are not store credit payments' do + context "that are not store credit payments" do let(:existing_payment_method) { create(:payment_method) } let(:existing_payment_source) { create(:credit_card) } - it 'invalidates existing payments' do + it "invalidates existing payments" do expect { payment.save! }.to change { order.payments.with_state(:invalid).count } end end @@ -879,17 +879,17 @@ describe "invalidating payments updates in memory objects" do let(:payment_method) { create(:check_payment_method) } before do - Spree::PaymentCreate.new(order, { amount: 1, payment_method_id: payment_method.id }).build.save! + Spree::PaymentCreate.new(order, {amount: 1, payment_method_id: payment_method.id}).build.save! expect(order.payments.map(&:state)).to contain_exactly( - 'checkout' + "checkout" ) - Spree::PaymentCreate.new(order, { amount: 2, payment_method_id: payment_method.id }).build.save! + Spree::PaymentCreate.new(order, {amount: 2, payment_method_id: payment_method.id}).build.save! end - it 'should not have stale payments' do + it "should not have stale payments" do expect(order.payments.map(&:state)).to contain_exactly( - 'invalid', - 'checkout' + "invalid", + "checkout" ) end end @@ -897,16 +897,16 @@ # This used to describe #apply_source_attributes, whose behaviour is now part of PaymentCreate describe "#apply_source_attributes" do - context 'with a new source' do + context "with a new source" do let(:params) do { amount: 100, payment_method: gateway, source_attributes: { expiry: "01 / 99", - number: '1234567890123', - verification_value: '123', - name: 'Spree Commerce' + number: "1234567890123", + verification_value: "123", + name: "Spree Commerce" } } end @@ -927,8 +927,8 @@ end it "errors when payment source not valid" do - params = { amount: 100, payment_method: gateway, - source_attributes: { expiry: "1 / 12" } } + params = {amount: 100, payment_method: gateway, + source_attributes: {expiry: "1 / 12"}} payment = Spree::PaymentCreate.new(order, params).build expect(payment).not_to be_valid @@ -938,7 +938,7 @@ end end - context 'with an existing credit card' do + context "with an existing credit card" do let(:order) { create(:order, user:) } let(:user) { create(:user) } let!(:credit_card) { create(:credit_card, user_id: order.user_id) } @@ -948,7 +948,7 @@ { source_attributes: { wallet_payment_source_id: wallet_payment_source.id, - verification_value: '321' + verification_value: "321" } } end @@ -958,7 +958,7 @@ Spree::PaymentCreate.new(order, params).build.save! end - it 'sets the existing card as the source for the new payment' do + it "sets the existing card as the source for the new payment" do expect { subject }.to change { Spree::Payment.count }.by(1) @@ -966,57 +966,57 @@ expect(order.payments.last.source).to eq(credit_card) end - it 'sets the payment payment_method to that of the credit card' do + it "sets the payment payment_method to that of the credit card" do subject expect(order.payments.last.payment_method_id).to eq(credit_card.payment_method_id) end - it 'sets the verification_value on the credit card' do + it "sets the verification_value on the credit card" do subject - expect(order.payments.last.source.verification_value).to eq('321') + expect(order.payments.last.source.verification_value).to eq("321") end - it 'sets the request_env on the payment' do - payment = Spree::PaymentCreate.new(order, params.merge(request_env: { 'USER_AGENT' => 'Firefox' })).build + it "sets the request_env on the payment" do + payment = Spree::PaymentCreate.new(order, params.merge(request_env: {"USER_AGENT" => "Firefox"})).build payment.save! - expect(payment.request_env).to eq({ 'USER_AGENT' => 'Firefox' }) + expect(payment.request_env).to eq({"USER_AGENT" => "Firefox"}) end - context 'the credit card belongs to a different user' do + context "the credit card belongs to a different user" do let(:other_user) { create(:user) } before do credit_card.update!(user_id: other_user.id) user.wallet.remove(credit_card) other_user.wallet.add(credit_card) end - it 'errors' do + it "errors" do expect { subject }.to raise_error(ActiveRecord::RecordNotFound) end end - context 'the credit card has no user' do + context "the credit card has no user" do before do credit_card.update!(user_id: nil) user.wallet.remove(credit_card) end - it 'errors' do + it "errors" do expect { subject }.to raise_error(ActiveRecord::RecordNotFound) end end - context 'the order has no user' do + context "the order has no user" do before { order.update!(user_id: nil) } - it 'errors' do + it "errors" do expect { subject }.to raise_error(ActiveRecord::RecordNotFound) end end - context 'the order and the credit card have no user' do + context "the order and the credit card have no user" do before do order.update!(user_id: nil) credit_card.update!(user_id: nil) end - it 'errors' do + it "errors" do expect { subject }.to raise_error(ActiveRecord::RecordNotFound) end end @@ -1048,7 +1048,7 @@ it "contains the email address from a persisted order" do # Sets the payment's order to a different Ruby object entirely payment.order = Spree::Order.find(payment.order_id) - email = 'foo@example.com' + email = "foo@example.com" order.update(email:) expect(payment.gateway_options[:email]).to eq(email) end @@ -1101,59 +1101,59 @@ context "when the amount is a string" do context "amount is a decimal" do - let(:amount) { '2.99' } + let(:amount) { "2.99" } - it '#amount' do - expect(subject.amount).to eql(BigDecimal('2.99')) + it "#amount" do + expect(subject.amount).to eql(BigDecimal("2.99")) end end context "amount is an integer" do - let(:amount) { '2' } + let(:amount) { "2" } - it '#amount' do - expect(subject.amount).to eql(BigDecimal('2.0')) + it "#amount" do + expect(subject.amount).to eql(BigDecimal("2.0")) end end context "amount contains a dollar sign" do - let(:amount) { '$2.99' } + let(:amount) { "$2.99" } - it '#amount' do - expect(subject.amount).to eql(BigDecimal('2.99')) + it "#amount" do + expect(subject.amount).to eql(BigDecimal("2.99")) end end context "amount contains a comma" do - let(:amount) { '$2,999.99' } + let(:amount) { "$2,999.99" } - it '#amount' do - expect(subject.amount).to eql(BigDecimal('2999.99')) + it "#amount" do + expect(subject.amount).to eql(BigDecimal("2999.99")) end end context "amount contains a negative sign" do - let(:amount) { '-2.99' } + let(:amount) { "-2.99" } - it '#amount' do - expect(subject.amount).to eql(BigDecimal('-2.99')) + it "#amount" do + expect(subject.amount).to eql(BigDecimal("-2.99")) end end context "amount is invalid" do - let(:amount) { 'invalid' } + let(:amount) { "invalid" } # this is a strange default for ActiveRecord - it '#amount' do + it "#amount" do expect(subject.amount).to eql(Spree::ZERO) end end context "amount is an empty string" do - let(:amount) { '' } + let(:amount) { "" } - it '#amount' do + it "#amount" do expect(subject.amount).to be_nil end end @@ -1162,14 +1162,14 @@ context "when the amount is a number" do let(:amount) { 1.55 } - it '#amount' do - expect(subject.amount).to eql(BigDecimal('1.55')) + it "#amount" do + expect(subject.amount).to eql(BigDecimal("1.55")) end end context "when the locale uses a coma as a decimal separator" do before(:each) do - I18n.backend.store_translations(:fr, { number: { currency: { format: { delimiter: ' ', separator: ',' } } } }) + I18n.backend.store_translations(:fr, {number: {currency: {format: {delimiter: " ", separator: ","}}}}) I18n.locale = :fr subject.amount = amount end @@ -1179,42 +1179,42 @@ end context "amount is a decimal" do - let(:amount) { '2,99' } + let(:amount) { "2,99" } - it '#amount' do - expect(subject.amount).to eql(BigDecimal('2.99')) + it "#amount" do + expect(subject.amount).to eql(BigDecimal("2.99")) end end context "amount contains a $ sign" do - let(:amount) { '2,99 $' } + let(:amount) { "2,99 $" } - it '#amount' do - expect(subject.amount).to eql(BigDecimal('2.99')) + it "#amount" do + expect(subject.amount).to eql(BigDecimal("2.99")) end end context "amount is a number" do let(:amount) { 2.99 } - it '#amount' do - expect(subject.amount).to eql(BigDecimal('2.99')) + it "#amount" do + expect(subject.amount).to eql(BigDecimal("2.99")) end end context "amount contains a negative sign" do - let(:amount) { '-2,99 $' } + let(:amount) { "-2,99 $" } - it '#amount' do - expect(subject.amount).to eql(BigDecimal('-2.99')) + it "#amount" do + expect(subject.amount).to eql(BigDecimal("-2.99")) end end context "amount uses a dot as a decimal separator" do - let(:amount) { '2.99' } + let(:amount) { "2.99" } - it '#amount' do - expect(subject.amount).to eql(BigDecimal('2.99')) + it "#amount" do + expect(subject.amount).to eql(BigDecimal("2.99")) end end end @@ -1222,7 +1222,7 @@ describe "#is_avs_risky?" do it "returns false if avs_response included in NON_RISKY_AVS_CODES" do - ('A'..'Z').reject{ |x| subject.class::RISKY_AVS_CODES.include?(x) }.to_a.each do |char| + ("A".."Z").reject { |x| subject.class::RISKY_AVS_CODES.include?(x) }.to_a.each do |char| payment.update_attribute(:avs_response, char) expect(payment.is_avs_risky?).to eq false end @@ -1231,13 +1231,13 @@ it "returns false if avs_response.blank?" do payment.update_attribute(:avs_response, nil) expect(payment.is_avs_risky?).to eq false - payment.update_attribute(:avs_response, '') + payment.update_attribute(:avs_response, "") expect(payment.is_avs_risky?).to eq false end it "returns true if avs_response in RISKY_AVS_CODES" do # should use avs_response_code helper - ('A'..'Z').reject{ |x| subject.class::NON_RISKY_AVS_CODES.include?(x) }.to_a.each do |char| + ("A".."Z").reject { |x| subject.class::NON_RISKY_AVS_CODES.include?(x) }.to_a.each do |char| payment.update_attribute(:avs_response, char) expect(payment.is_avs_risky?).to eq true end @@ -1245,14 +1245,14 @@ end describe "#is_cvv_risky?" do - ['M', nil].each do |char| + ["M", nil].each do |char| it "returns false if cvv_response_code is #{char.inspect}" do payment.cvv_response_code = char expect(payment.is_cvv_risky?).to eq(false) end end - ['', *('A'...'M'), *('N'..'Z')].each do |char| + ["", *("A"..."M"), *("N".."Z")].each do |char| it "returns true if cvv_response_code is #{char.inspect} (not 'M' or nil)" do payment.cvv_response_code = char expect(payment.is_cvv_risky?).to eq(true) @@ -1268,10 +1268,10 @@ expect(payment.state_changes).to be_empty expect(payment.process!).to be true expect(payment.state_changes.count).to eq(2) - changes = payment.state_changes.map { |change| { change.previous_state => change.next_state } } + changes = payment.state_changes.map { |change| {change.previous_state => change.next_state} } expect(changes).to match_array([ - { "checkout" => "processing" }, - { "processing" => "pending" } + {"checkout" => "processing"}, + {"processing" => "pending"} ]) end end @@ -1302,14 +1302,14 @@ # payment processor, so we want to allow the ability # to have someone look at the what happened and determine # to mark the payment as having failed - subject.state = 'processing' + subject.state = "processing" expect(subject.actions).to include "failure" end end end describe "#payment_method" do - context 'with a soft-deleted payment method' do + context "with a soft-deleted payment method" do before do gateway.save! payment.save! @@ -1322,14 +1322,14 @@ end end - describe '::valid scope' do + describe "::valid scope" do before do create :payment, state: :void create :payment, state: :failed create :payment, state: :invalid end - it 'does not include void, failed and invalid payments' do + it "does not include void, failed and invalid payments" do expect(described_class.valid).to be_empty end end @@ -1339,31 +1339,31 @@ describe "state change tracking" do it "enqueues a StateChangeTrackingJob when state changes" do expect { - payment.update!(state: 'completed') + payment.update!(state: "completed") }.to have_enqueued_job(Spree::StateChangeTrackingJob).with( payment, - 'checkout', - 'completed', + "checkout", + "completed", kind_of(Time) ) end it "does not enqueue job when state doesn't change" do expect { - payment.update!(amount: '100.00') + payment.update!(amount: "100.00") }.not_to have_enqueued_job(Spree::StateChangeTrackingJob) end it "captures the transition timestamp accurately" do before_time = Time.current - payment.update!(state: 'completed') + payment.update!(state: "completed") # Check that a job was enqueued with a timestamp close to when we made the change expect(Spree::StateChangeTrackingJob).to have_been_enqueued.with do |payment_id, prev_state, next_state, timestamp| expect(payment_id).to eq(payment.id) - expect(prev_state).to eq('pending') - expect(next_state).to eq('completed') + expect(prev_state).to eq("pending") + expect(next_state).to eq("completed") expect(timestamp).to be_within(1.second).of(before_time) end end @@ -1371,9 +1371,9 @@ it "creates multiple state transitions" do clear_enqueued_jobs - payment.update!(state: 'pending') - payment.update!(state: 'processing') - payment.update!(state: 'completed') + payment.update!(state: "pending") + payment.update!(state: "processing") + payment.update!(state: "completed") expect(Spree::StateChangeTrackingJob).to have_been_enqueued.exactly(3).times end @@ -1381,16 +1381,16 @@ it "creates state change records when job is performed" do perform_enqueued_jobs do expect { - payment.update!(state: 'completed') + payment.update!(state: "completed") }.to change(Spree::StateChange, :count).by(1) end state_change = Spree::StateChange.last - expect(state_change.previous_state).to eq('checkout') - expect(state_change.next_state).to eq('completed') + expect(state_change.previous_state).to eq("checkout") + expect(state_change.next_state).to eq("completed") expect(state_change.stateful_id).to eq(payment.id) - expect(state_change.stateful_type).to eq('Spree::Payment') - expect(state_change.name).to eq('payment') + expect(state_change.stateful_type).to eq("Spree::Payment") + expect(state_change.name).to eq("payment") end end end diff --git a/core/spec/models/spree/permission_set_spec.rb b/core/spec/models/spree/permission_set_spec.rb index 6a29d2f6136..7ddc17b2c02 100644 --- a/core/spec/models/spree/permission_set_spec.rb +++ b/core/spec/models/spree/permission_set_spec.rb @@ -47,17 +47,17 @@ let!(:management_permission) { described_class.create(name: "OrderManagement", set: "Spree::PermissionSet::OrderManagement", category: "order", privilege: "management") } let!(:other_permission) { described_class.create(name: "Shipping", set: "Spree::PermissionSet::Shipping", category: "shipping", privilege: "other") } - it 'returns permission sets with privilege: display for display_permissions scope' do + it "returns permission sets with privilege: display for display_permissions scope" do expect(Spree::PermissionSet.display_permissions).to include(display_permission) expect(Spree::PermissionSet.display_permissions).not_to include(management_permission, other_permission) end - it 'returns permission sets with privilege: management for management_permissions scope' do + it "returns permission sets with privilege: management for management_permissions scope" do expect(Spree::PermissionSet.management_permissions).to include(management_permission) expect(Spree::PermissionSet.management_permissions).not_to include(display_permission, other_permission) end - it 'returns permission sets with privilege: other for other_permissions scope' do + it "returns permission sets with privilege: other for other_permissions scope" do expect(Spree::PermissionSet.management_permissions).to include(management_permission) expect(Spree::PermissionSet.management_permissions).not_to include(display_permission, other_permission) end diff --git a/core/spec/models/spree/permission_sets/base_spec.rb b/core/spec/models/spree/permission_sets/base_spec.rb index 87ce6ad7581..de583c6d5b4 100644 --- a/core/spec/models/spree/permission_sets/base_spec.rb +++ b/core/spec/models/spree/permission_sets/base_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::PermissionSets::Base do let(:ability) { Spree::Ability.new nil } @@ -8,14 +8,14 @@ describe "activate!" do it "raises a not implemented error" do - expect{ subject }.to raise_error(NotImplementedError) + expect { subject }.to raise_error(NotImplementedError) end end context "when the subclass does not define a privilege" do # Define a subclass that does not override privilege before do - stub_const('Spree::PermissionSets::ExampleSubclass', Class.new(Spree::PermissionSets::Base)) + stub_const("Spree::PermissionSets::ExampleSubclass", Class.new(Spree::PermissionSets::Base)) end it "raises a NotImplementedError" do @@ -26,7 +26,7 @@ context "when the subclass does not define a category" do # Define a subclass that does not override category before do - stub_const('Spree::PermissionSets::ExampleSubclass', Class.new(Spree::PermissionSets::Base)) + stub_const("Spree::PermissionSets::ExampleSubclass", Class.new(Spree::PermissionSets::Base)) end it "raises a NotImplementedError" do @@ -37,7 +37,7 @@ context "when the subclass defines privilege and category correctly" do # Define a subclass that correctly overrides privilege and category before do - stub_const('Spree::PermissionSets::ValidSubclass', Class.new(Spree::PermissionSets::Base) do + stub_const("Spree::PermissionSets::ValidSubclass", Class.new(Spree::PermissionSets::Base) do def self.privilege :valid_privilege end diff --git a/core/spec/models/spree/permission_sets/configuration_display.rb b/core/spec/models/spree/permission_sets/configuration_display.rb index 7b2b8fef1d9..267c86539fa 100644 --- a/core/spec/models/spree/permission_sets/configuration_display.rb +++ b/core/spec/models/spree/permission_sets/configuration_display.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/dummy_ability' +require "rails_helper" +require "spree/testing_support/dummy_ability" RSpec.describe Spree::PermissionSets::ConfigurationDisplay do let(:ability) { DummyAbility.new } diff --git a/core/spec/models/spree/permission_sets/configuration_management_spec.rb b/core/spec/models/spree/permission_sets/configuration_management_spec.rb index 43445d94273..8fbfd4a7e2d 100644 --- a/core/spec/models/spree/permission_sets/configuration_management_spec.rb +++ b/core/spec/models/spree/permission_sets/configuration_management_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/dummy_ability' +require "rails_helper" +require "spree/testing_support/dummy_ability" RSpec.describe Spree::PermissionSets::ConfigurationManagement do let(:ability) { DummyAbility.new } diff --git a/core/spec/models/spree/permission_sets/default_customer_spec.rb b/core/spec/models/spree/permission_sets/default_customer_spec.rb index 49acd1b9ebc..b5a0a7a9d02 100644 --- a/core/spec/models/spree/permission_sets/default_customer_spec.rb +++ b/core/spec/models/spree/permission_sets/default_customer_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/dummy_ability' +require "rails_helper" +require "spree/testing_support/dummy_ability" RSpec.describe Spree::PermissionSets::DefaultCustomer do describe ".privilege" do @@ -16,15 +16,15 @@ end end - context 'as Guest User' do - context 'for Order' do - context 'guest_token is empty string' do + context "as Guest User" do + context "for Order" do + context "guest_token is empty string" do let(:ability) { Spree::Ability.new(nil) } let(:resource) { build(:order) } - let(:token) { '' } + let(:token) { "" } - it 'should not be allowed to read or update the order' do - allow(resource).to receive_messages(guest_token: '') + it "should not be allowed to read or update the order" do + allow(resource).to receive_messages(guest_token: "") expect(ability).to_not be_able_to(:show, resource, token) expect(ability).to_not be_able_to(:show, resource, token) diff --git a/core/spec/models/spree/permission_sets/order_display_spec.rb b/core/spec/models/spree/permission_sets/order_display_spec.rb index f057afef6b6..ee7e40e29e6 100644 --- a/core/spec/models/spree/permission_sets/order_display_spec.rb +++ b/core/spec/models/spree/permission_sets/order_display_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/dummy_ability' +require "rails_helper" +require "spree/testing_support/dummy_ability" RSpec.describe Spree::PermissionSets::OrderDisplay do let(:ability) { DummyAbility.new } diff --git a/core/spec/models/spree/permission_sets/order_management_spec.rb b/core/spec/models/spree/permission_sets/order_management_spec.rb index 7f984cfb525..9cdce6066ab 100644 --- a/core/spec/models/spree/permission_sets/order_management_spec.rb +++ b/core/spec/models/spree/permission_sets/order_management_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/dummy_ability' +require "rails_helper" +require "spree/testing_support/dummy_ability" RSpec.describe Spree::PermissionSets::OrderManagement do let(:ability) { DummyAbility.new } diff --git a/core/spec/models/spree/permission_sets/product_display_spec.rb b/core/spec/models/spree/permission_sets/product_display_spec.rb index 7c3c7dae894..751dba9a28c 100644 --- a/core/spec/models/spree/permission_sets/product_display_spec.rb +++ b/core/spec/models/spree/permission_sets/product_display_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/dummy_ability' +require "rails_helper" +require "spree/testing_support/dummy_ability" RSpec.describe Spree::PermissionSets::ProductDisplay do let(:ability) { DummyAbility.new } diff --git a/core/spec/models/spree/permission_sets/product_management_spec.rb b/core/spec/models/spree/permission_sets/product_management_spec.rb index a867b2683df..442e7e58bcc 100644 --- a/core/spec/models/spree/permission_sets/product_management_spec.rb +++ b/core/spec/models/spree/permission_sets/product_management_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/dummy_ability' +require "rails_helper" +require "spree/testing_support/dummy_ability" RSpec.describe Spree::PermissionSets::ProductManagement do let(:ability) { DummyAbility.new } diff --git a/core/spec/models/spree/permission_sets/restricted_stock_display_spec.rb b/core/spec/models/spree/permission_sets/restricted_stock_display_spec.rb index c84cb4da7ac..98ef39cdaef 100644 --- a/core/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +++ b/core/spec/models/spree/permission_sets/restricted_stock_display_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::PermissionSets::RestrictedStockDisplay do let(:ability) { Spree::Ability.new(user) } diff --git a/core/spec/models/spree/permission_sets/restricted_stock_management_spec.rb b/core/spec/models/spree/permission_sets/restricted_stock_management_spec.rb index 469fee07381..688dc70ee46 100644 --- a/core/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +++ b/core/spec/models/spree/permission_sets/restricted_stock_management_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::PermissionSets::RestrictedStockManagement do let(:ability) { Spree::Ability.new(user) } diff --git a/core/spec/models/spree/permission_sets/stock_display_spec.rb b/core/spec/models/spree/permission_sets/stock_display_spec.rb index 6ff71b15eb6..67c24e4ebf4 100644 --- a/core/spec/models/spree/permission_sets/stock_display_spec.rb +++ b/core/spec/models/spree/permission_sets/stock_display_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/dummy_ability' +require "rails_helper" +require "spree/testing_support/dummy_ability" RSpec.describe Spree::PermissionSets::StockDisplay do let(:ability) { DummyAbility.new } diff --git a/core/spec/models/spree/permission_sets/stock_management_spec.rb b/core/spec/models/spree/permission_sets/stock_management_spec.rb index cd2e99823f8..49e76f59337 100644 --- a/core/spec/models/spree/permission_sets/stock_management_spec.rb +++ b/core/spec/models/spree/permission_sets/stock_management_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/dummy_ability' +require "rails_helper" +require "spree/testing_support/dummy_ability" RSpec.describe Spree::PermissionSets::StockManagement do let(:ability) { DummyAbility.new } diff --git a/core/spec/models/spree/permission_sets/super_user_spec.rb b/core/spec/models/spree/permission_sets/super_user_spec.rb index 59a4eb90487..82281f6b21f 100644 --- a/core/spec/models/spree/permission_sets/super_user_spec.rb +++ b/core/spec/models/spree/permission_sets/super_user_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/dummy_ability' +require "rails_helper" +require "spree/testing_support/dummy_ability" RSpec.describe Spree::PermissionSets::SuperUser do let(:ability) { DummyAbility.new } diff --git a/core/spec/models/spree/permission_sets/user_display_spec.rb b/core/spec/models/spree/permission_sets/user_display_spec.rb index af678043f30..a1ce01f0b7e 100644 --- a/core/spec/models/spree/permission_sets/user_display_spec.rb +++ b/core/spec/models/spree/permission_sets/user_display_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/dummy_ability' +require "rails_helper" +require "spree/testing_support/dummy_ability" RSpec.describe Spree::PermissionSets::UserDisplay do let(:ability) { DummyAbility.new } diff --git a/core/spec/models/spree/permission_sets/user_management_spec.rb b/core/spec/models/spree/permission_sets/user_management_spec.rb index 8e14cec78aa..967c06a5fdb 100644 --- a/core/spec/models/spree/permission_sets/user_management_spec.rb +++ b/core/spec/models/spree/permission_sets/user_management_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/dummy_ability' +require "rails_helper" +require "spree/testing_support/dummy_ability" RSpec.describe Spree::PermissionSets::UserManagement do let(:ability) { DummyAbility.new } @@ -23,13 +23,13 @@ it { is_expected.to be_able_to(:orders, Spree.user_class) } it { is_expected.to be_able_to(:items, Spree.user_class) } - context 'when the user does not have a role' do + context "when the user does not have a role" do let(:user) { create(:user) } it { is_expected.to be_able_to(:update_email, user) } it { is_expected.to be_able_to(:update_password, user) } end - context 'when the user has a role' do + context "when the user has a role" do let(:user) { create(:user, spree_roles: [create(:role)]) } it { is_expected.not_to be_able_to(:update_email, user) } it { is_expected.not_to be_able_to(:update_password, user) } diff --git a/core/spec/models/spree/preference_spec.rb b/core/spec/models/spree/preference_spec.rb index 5096bf94b68..56e3dbb193d 100644 --- a/core/spec/models/spree/preference_spec.rb +++ b/core/spec/models/spree/preference_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Preference, type: :model do it "should require a key" do diff --git a/core/spec/models/spree/preferences/configuration_spec.rb b/core/spec/models/spree/preferences/configuration_spec.rb index 59df1e12133..e5d11c65575 100644 --- a/core/spec/models/spree/preferences/configuration_spec.rb +++ b/core/spec/models/spree/preferences/configuration_spec.rb @@ -1,29 +1,29 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Preferences::Configuration, type: :model do let(:config) do Class.new(Spree::Preferences::Configuration) do preference :color, :string, default: :blue - versioned_preference :foo, :boolean, initial_value: true, boundaries: { "3.0" => false } - class_name_attribute :order_recalculator_class, default: 'Spree::OrderUpdater' + versioned_preference :foo, :boolean, initial_value: true, boundaries: {"3.0" => false} + class_name_attribute :order_recalculator_class, default: "Spree::OrderUpdater" end.new end it "has named methods to access preferences" do - config.color = 'orange' - expect(config.color).to eq 'orange' + config.color = "orange" + expect(config.color).to eq "orange" end it "uses [ ] to access preferences" do - config[:color] = 'red' - expect(config[:color]).to eq 'red' + config[:color] = "red" + expect(config[:color]).to eq "red" end it "uses set/get to access preferences" do - config.set(color: 'green') - expect(config.get(:color)).to eq 'green' + config.set(color: "green") + expect(config.get(:color)).to eq "green" end it "allows defining different defaults depending on the Solidus version" do @@ -36,34 +36,34 @@ expect(config.get(:foo)).to be(false) end - describe '#load_defaults' do - it 'changes loaded_defaults' do - config.load_defaults '2.1' + describe "#load_defaults" do + it "changes loaded_defaults" do + config.load_defaults "2.1" - expect(config.loaded_defaults).to eq('2.1') + expect(config.loaded_defaults).to eq("2.1") - config.load_defaults '3.1' + config.load_defaults "3.1" - expect(config.loaded_defaults).to eq('3.1') + expect(config.loaded_defaults).to eq("3.1") end - it 'returns updated preferences' do - expect(config.load_defaults('2.1')).to eq(foo: true, color: :blue) + it "returns updated preferences" do + expect(config.load_defaults("2.1")).to eq(foo: true, color: :blue) end - it 'sets load_defaults_called flag to true' do + it "sets load_defaults_called flag to true" do expect(config.load_defaults_called).to be(false) - config.load_defaults '3.1' + config.load_defaults "3.1" expect(config.load_defaults_called).to be(true) end end - describe '#check_load_defaults_called' do - context 'when load_defaults_called is true' do - it 'does not emit a warning' do - config.load_defaults '3.1' + describe "#check_load_defaults_called" do + context "when load_defaults_called is true" do + it "does not emit a warning" do + config.load_defaults "3.1" expect(Spree.deprecator).not_to receive(:warn) @@ -71,30 +71,30 @@ end end - context 'when load_defaults_called is false' do - it 'emits a warning' do + context "when load_defaults_called is false" do + it "emits a warning" do expect(Spree.deprecator).to receive(:warn).with(/adding.*load_defaults/m) config.check_load_defaults_called end - it 'includes constant name in the message when given' do + it "includes constant name in the message when given" do expect(Spree.deprecator).to receive(:warn).with(/Spree::Config/, any_args) - config.check_load_defaults_called('Spree::Config') + config.check_load_defaults_called("Spree::Config") end end end describe ".class_name_attribute" do it "allows getting the constant of a configurable class" do - config.order_recalculator_class = 'Spree::OrderUpdater' + config.order_recalculator_class = "Spree::OrderUpdater" expect(config.order_recalculator_class).to eq Spree::OrderUpdater end it "allows getting the string name of the class" do - config.order_recalculator_class = 'Spree::OrderUpdater' - expect(config.order_recalculator_class_name).to eq 'Spree::OrderUpdater' + config.order_recalculator_class = "Spree::OrderUpdater" + expect(config.order_recalculator_class_name).to eq "Spree::OrderUpdater" end end end diff --git a/core/spec/models/spree/preferences/preferable_spec.rb b/core/spec/models/spree/preferences/preferable_spec.rb index f5f4ecc1811..7f496709636 100644 --- a/core/spec/models/spree/preferences/preferable_spec.rb +++ b/core/spec/models/spree/preferences/preferable_spec.rb @@ -1,11 +1,12 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Preferences::Preferable, type: :model do let(:config_class_a) do Class.new do include Spree::Preferences::Preferable + attr_reader :id def initialize @@ -21,7 +22,7 @@ def initialize_preference_defaults @preferences = default_preferences end - preference :color, :string, default: 'green' + preference :color, :string, default: "green" end end @@ -46,8 +47,8 @@ def initialize_preference_defaults end it "instances have defaults" do - expect(a.preferred_color).to eq 'green' - expect(b.preferred_color).to eq 'green' + expect(a.preferred_color).to eq "green" + expect(b.preferred_color).to eq "green" expect(b.preferred_flavor).to be_nil end @@ -68,8 +69,8 @@ def initialize_preference_defaults end it "has a default" do - expect(a.preferred_color_default).to eq 'green' - expect(a.preference_default(:color)).to eq 'green' + expect(a.preferred_color_default).to eq "green" + expect(a.preference_default(:color)).to eq "green" end it "raises if not defined" do @@ -81,16 +82,16 @@ def initialize_preference_defaults describe "preference access" do it "handles ghost methods for preferences" do - a.preferred_color = 'blue' - expect(a.preferred_color).to eq 'blue' + a.preferred_color = "blue" + expect(a.preferred_color).to eq "blue" end it "parent and child instances have their own prefs" do - a.preferred_color = 'red' - b.preferred_color = 'blue' + a.preferred_color = "red" + b.preferred_color = "blue" - expect(a.preferred_color).to eq 'red' - expect(b.preferred_color).to eq 'blue' + expect(a.preferred_color).to eq "red" + expect(b.preferred_color).to eq "blue" end it "raises when preference not defined" do @@ -101,18 +102,18 @@ def initialize_preference_defaults it "builds a hash of preferences" do b.preferred_flavor = :strawberry - expect(b.preferences[:flavor]).to eq 'strawberry' - expect(b.preferences[:color]).to eq 'green' # default from A + expect(b.preferences[:flavor]).to eq "strawberry" + expect(b.preferences[:color]).to eq "green" # default from A end it "builds a hash of preference defaults" do expect(b.default_preferences).to eq({ flavor: nil, - color: 'green' + color: "green" }) end - describe '#admin_form_preference_names' do + describe "#admin_form_preference_names" do subject do ComplexPreferableClass.new.admin_form_preference_names end @@ -120,6 +121,7 @@ def initialize_preference_defaults before do class ComplexPreferableClass include Spree::Preferences::Preferable + preference :name, :string preference :password, :password preference :mapping, :hash @@ -131,7 +133,7 @@ class ComplexPreferableClass is_expected.to contain_exactly(:name, :password) end - context 'with overwritten allowed_admin_form_preference_types class method' do + context "with overwritten allowed_admin_form_preference_types class method" do subject do ComplexOverwrittenPreferableClass.new.admin_form_preference_names end @@ -139,18 +141,19 @@ class ComplexPreferableClass before do class ComplexOverwrittenPreferableClass include Spree::Preferences::Preferable + preference :name, :string preference :password, :password preference :mapping, :hash preference :recipients, :array def self.allowed_admin_form_preference_types - %i(string password hash array) + %i[string password hash array] end end end - it 'returns these types instead' do + it "returns these types instead" do is_expected.to contain_exactly(:name, :password, :mapping, :recipients) end end @@ -172,14 +175,14 @@ def self.allowed_admin_form_preference_types end it "with strings" do - a.set_preference(:is_integer, '3') + a.set_preference(:is_integer, "3") expect(a.preferences[:is_integer]).to eq(3) - a.set_preference(:is_integer, '') + a.set_preference(:is_integer, "") expect(a.preferences[:is_integer]).to eq(0) end - it 'does not convert if value is nil' do + it "does not convert if value is nil" do a.set_preference(:is_integer, nil) expect(a.preferences[:is_integer]).to be_nil end @@ -196,10 +199,10 @@ def self.allowed_admin_form_preference_types end it "with strings" do - a.set_preference(:if_decimal, '3.3') + a.set_preference(:if_decimal, "3.3") expect(a.preferences[:if_decimal]).to eq(3.3) - a.set_preference(:if_decimal, '') + a.set_preference(:if_decimal, "") expect(a.preferences[:if_decimal]).to eq(0.0) end end @@ -210,11 +213,11 @@ def self.allowed_admin_form_preference_types end it "with strings" do - a.set_preference(:is_boolean, '0') + a.set_preference(:is_boolean, "0") expect(a.preferences[:is_boolean]).to be false - a.set_preference(:is_boolean, 'f') + a.set_preference(:is_boolean, "f") expect(a.preferences[:is_boolean]).to be false - a.set_preference(:is_boolean, 't') + a.set_preference(:is_boolean, "t") expect(a.preferences[:is_boolean]).to be true end @@ -226,7 +229,7 @@ def self.allowed_admin_form_preference_types end it "with an empty string" do - a.set_preference(:is_boolean, '') + a.set_preference(:is_boolean, "") expect(a.preferences[:is_boolean]).to be false end @@ -258,8 +261,8 @@ def self.allowed_admin_form_preference_types end it "with hash and keys are integers" do - a.set_preference(:is_hash, { 1 => 2, 3 => 4 }) - expect(a.preferences[:is_hash]).to eql({ 1 => 2, 3 => 4 }) + a.set_preference(:is_hash, {1 => 2, 3 => 4}) + expect(a.preferences[:is_hash]).to eql({1 => 2, 3 => 4}) end end @@ -278,19 +281,19 @@ def self.allowed_admin_form_preference_types config_class_a.preference :product_attributes, :any, default: {} expect(a.preferences[:product_attributes]).to eq({}) - a.set_preference(:product_attributes, { id: 1, name: 2 }) - expect(a.preferences[:product_attributes]).to eq({ id: 1, name: 2 }) + a.set_preference(:product_attributes, {id: 1, name: 2}) + expect(a.preferences[:product_attributes]).to eq({id: 1, name: 2}) end end context "converts encrypted_string preferences to encrypted values" do it "with string, encryption key provided as option" do config_class_a.preference :secret, :encrypted_string, - encryption_key: 'VkYp3s6v9y$B?E(H+MbQeThWmZq4t7w!' + encryption_key: "VkYp3s6v9y$B?E(H+MbQeThWmZq4t7w!" - a.set_preference(:secret, 'secret_client_id') - expect(a.get_preference(:secret)).to eq('secret_client_id') - expect(a.preferences[:secret]).not_to eq('secret_client_id') + a.set_preference(:secret, "secret_client_id") + expect(a.get_preference(:secret)).to eq("secret_client_id") + expect(a.preferences[:secret]).not_to eq("secret_client_id") end it "with string, encryption key provided as env variable" do @@ -300,28 +303,28 @@ def self.allowed_admin_form_preference_types config_class_a.preference :secret, :encrypted_string - a.set_preference(:secret, 'secret_client_id') - expect(a.get_preference(:secret)).to eq('secret_client_id') - expect(a.preferences[:secret]).not_to eq('secret_client_id') + a.set_preference(:secret, "secret_client_id") + expect(a.get_preference(:secret)).to eq("secret_client_id") + expect(a.preferences[:secret]).not_to eq("secret_client_id") end it "with string, encryption key provided as option, set using syntactic sugar method" do config_class_a.preference :secret, :encrypted_string, - encryption_key: 'VkYp3s6v9y$B?E(H+MbQeThWmZq4t7w!' + encryption_key: "VkYp3s6v9y$B?E(H+MbQeThWmZq4t7w!" - a.preferred_secret = 'secret_client_id' - expect(a.preferred_secret).to eq('secret_client_id') - expect(a.preferences[:secret]).not_to eq('secret_client_id') + a.preferred_secret = "secret_client_id" + expect(a.preferred_secret).to eq("secret_client_id") + expect(a.preferences[:secret]).not_to eq("secret_client_id") end it "with string, default value" do config_class_a.preference :secret, :encrypted_string, - default: 'my_default_secret', - encryption_key: 'VkYp3s6v9y$B?E(H+MbQeThWmZq4t7w!' + default: "my_default_secret", + encryption_key: "VkYp3s6v9y$B?E(H+MbQeThWmZq4t7w!" a = config_class_a.new - expect(a.get_preference(:secret)).to eq('my_default_secret') - expect(a.preferences[:secret]).not_to eq('my_default_secret') + expect(a.get_preference(:secret)).to eq("my_default_secret") + expect(a.preferences[:secret]).not_to eq("my_default_secret") end end end @@ -348,9 +351,9 @@ def self.down class PrefTest < Spree::Base include Spree::Preferences::Persistable - preference :pref_test_pref, :string, default: 'abc' + preference :pref_test_pref, :string, default: "abc" preference :pref_test_any, :any, default: [] - preference :pref_test_encrypted_string, :encrypted_string, encryption_key: 'VkYp3s6v9y$B?E(H+MbQeThWmZq4t7w!' + preference :pref_test_encrypted_string, :encrypted_string, encryption_key: "VkYp3s6v9y$B?E(H+MbQeThWmZq4t7w!" end end @@ -366,10 +369,10 @@ class PrefTest < Spree::Base describe "pending preferences for new activerecord objects" do it "saves preferences after record is saved" do pr = PrefTest.new - pr.set_preference(:pref_test_pref, 'XXX') - expect(pr.get_preference(:pref_test_pref)).to eq('XXX') + pr.set_preference(:pref_test_pref, "XXX") + expect(pr.get_preference(:pref_test_pref)).to eq("XXX") pr.save! - expect(pr.get_preference(:pref_test_pref)).to eq('XXX') + expect(pr.get_preference(:pref_test_pref)).to eq("XXX") end it "saves preferences for serialized object" do @@ -382,25 +385,25 @@ class PrefTest < Spree::Base it "saves encrypted preferences for serialized object" do pr = PrefTest.new - pr.set_preference(:pref_test_encrypted_string, 'secret_client_id') - expect(pr.get_preference(:pref_test_encrypted_string)).to eq('secret_client_id') + pr.set_preference(:pref_test_encrypted_string, "secret_client_id") + expect(pr.get_preference(:pref_test_encrypted_string)).to eq("secret_client_id") pr.save! preferences_value_on_db = ActiveRecord::Base.connection.execute( "SELECT preferences FROM pref_tests WHERE id=#{pr.id}" ).first - expect(preferences_value_on_db).not_to include('secret_client_id') + expect(preferences_value_on_db).not_to include("secret_client_id") end end it "clear preferences when record is deleted" do @pt.save! - @pt.preferred_pref_test_pref = 'lmn' + @pt.preferred_pref_test_pref = "lmn" @pt.save! @pt.destroy - @pt1 = PrefTest.new(col: 'aaaa') + @pt1 = PrefTest.new(col: "aaaa") @pt1.id = @pt.id @pt1.save! - expect(@pt1.get_preference(:pref_test_pref)).to eq('abc') + expect(@pt1.get_preference(:pref_test_pref)).to eq("abc") end end end diff --git a/core/spec/models/spree/preferences/scoped_store_spec.rb b/core/spec/models/spree/preferences/scoped_store_spec.rb index ae351fbec75..da34a91f018 100644 --- a/core/spec/models/spree/preferences/scoped_store_spec.rb +++ b/core/spec/models/spree/preferences/scoped_store_spec.rb @@ -1,60 +1,60 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Preferences::ScopedStore, type: :model do - let(:scoped_store){ described_class.new(prefix, suffix) } - subject{ scoped_store } - let(:prefix){ nil } - let(:suffix){ nil } + let(:scoped_store) { described_class.new(prefix, suffix) } + subject { scoped_store } + let(:prefix) { nil } + let(:suffix) { nil } - describe '#store' do - subject{ scoped_store.store } + describe "#store" do + subject { scoped_store.store } it "uses the global preferences instance" do is_expected.to be Spree::Preferences::Store.instance end end - context 'stubbed store' do - let(:store){ double(:store) } + context "stubbed store" do + let(:store) { double(:store) } before do allow(scoped_store).to receive(:store).and_return(store) end context "with a prefix" do - let(:prefix){ 'my_class' } + let(:prefix) { "my_class" } it "can fetch" do - expect(store).to receive(:fetch).with('my_class/attr') - scoped_store.fetch('attr'){ 'default' } + expect(store).to receive(:fetch).with("my_class/attr") + scoped_store.fetch("attr") { "default" } end it "can assign" do - expect(store).to receive(:[]=).with('my_class/attr', 'val') - scoped_store['attr'] = 'val' + expect(store).to receive(:[]=).with("my_class/attr", "val") + scoped_store["attr"] = "val" end it "can delete" do - expect(store).to receive(:delete).with('my_class/attr') - scoped_store.delete('attr') + expect(store).to receive(:delete).with("my_class/attr") + scoped_store.delete("attr") end context "and suffix" do - let(:suffix){ 123 } + let(:suffix) { 123 } it "can fetch" do - expect(store).to receive(:fetch).with('my_class/attr/123') - scoped_store.fetch('attr'){ 'default' } + expect(store).to receive(:fetch).with("my_class/attr/123") + scoped_store.fetch("attr") { "default" } end it "can assign" do - expect(store).to receive(:[]=).with('my_class/attr/123', 'val') - scoped_store['attr'] = 'val' + expect(store).to receive(:[]=).with("my_class/attr/123", "val") + scoped_store["attr"] = "val" end it "can delete" do - expect(store).to receive(:delete).with('my_class/attr/123') - scoped_store.delete('attr') + expect(store).to receive(:delete).with("my_class/attr/123") + scoped_store.delete("attr") end end end diff --git a/core/spec/models/spree/preferences/static_model_preferences_spec.rb b/core/spec/models/spree/preferences/static_model_preferences_spec.rb index a74443a7fe0..b5b0495ec9d 100644 --- a/core/spec/models/spree/preferences/static_model_preferences_spec.rb +++ b/core/spec/models/spree/preferences/static_model_preferences_spec.rb @@ -1,65 +1,66 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe Preferences::StaticModelPreferences do let(:preference_class) do Class.new do include Preferences::Preferable + preference :color, :string end end - let(:other_class){ Class.new } - let(:definitions){ subject.for_class(preference_class) } + let(:other_class) { Class.new } + let(:definitions) { subject.for_class(preference_class) } it "is empty by default" do expect(definitions).to be_empty end it "can store preferences" do - subject.add(preference_class, 'my_definition', {}) + subject.add(preference_class, "my_definition", {}) # just testing that it was added here - expect(definitions).to have_key('my_definition') + expect(definitions).to have_key("my_definition") end it "can replace preferences" do - subject.add(preference_class, 'my_definition', { color: "red" }) + subject.add(preference_class, "my_definition", {color: "red"}) - subject.add(preference_class, 'my_definition', { color: "blue" }) + subject.add(preference_class, "my_definition", {color: "blue"}) - expect(definitions['my_definition'].fetch(:color)).to eq("blue") + expect(definitions["my_definition"].fetch(:color)).to eq("blue") end context "with stored definitions" do before do - subject.add(preference_class, 'light', { color: 'white' }) - subject.add(preference_class, 'dark', { color: 'black' }) - subject.add(preference_class, 'no_preference', {}) + subject.add(preference_class, "light", {color: "white"}) + subject.add(preference_class, "dark", {color: "black"}) + subject.add(preference_class, "no_preference", {}) end describe "complete definition" do - let(:definition){ definitions['dark'] } + let(:definition) { definitions["dark"] } it "can fetch value" do - expect(definition.fetch(:color)).to eq 'black' + expect(definition.fetch(:color)).to eq "black" end it "can be converted to hash" do - expect(definition.to_hash).to eq({ color: 'black' }) + expect(definition.to_hash).to eq({color: "black"}) end it "ignores assignment" do - definition[:color] = 'maroon' - expect(definition.fetch(:color)).to eq 'black' - expect(definition.to_hash).to eq({ color: 'black' }) + definition[:color] = "maroon" + expect(definition.fetch(:color)).to eq "black" + expect(definition.to_hash).to eq({color: "black"}) end end describe "empty definition" do - let(:definition){ definitions['no_preference'] } + let(:definition) { definitions["no_preference"] } it "uses fallback value" do - expect(definition.fetch(:color){ 'red' }).to eq 'red' + expect(definition.fetch(:color) { "red" }).to eq "red" end it "can be converted to hash" do @@ -67,8 +68,8 @@ module Spree end it "ignores assignment" do - definition[:color] = 'maroon' - expect(definition.fetch(:color){ 'red' }).to eq 'red' + definition[:color] = "maroon" + expect(definition.fetch(:color) { "red" }).to eq "red" expect(definition.to_hash).to eq({}) end end @@ -78,10 +79,10 @@ module Spree end end - describe '.validate!' do + describe ".validate!" do it "errors assigning invalid preferences" do stub_const("SomeClass", preference_class) - subject.add(preference_class, 'my_definition', { ice_cream: 'chocolate', spoon: true }) + subject.add(preference_class, "my_definition", {ice_cream: "chocolate", spoon: true}) expect { subject.validate! diff --git a/core/spec/models/spree/preferences/statically_configurable_spec.rb b/core/spec/models/spree/preferences/statically_configurable_spec.rb index e5aab61a9ff..6bb76f49395 100644 --- a/core/spec/models/spree/preferences/statically_configurable_spec.rb +++ b/core/spec/models/spree/preferences/statically_configurable_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/preferences/statically_configurable' +require "rails_helper" +require "spree/preferences/statically_configurable" module Spree RSpec.describe Preferences::StaticallyConfigurable do @@ -10,7 +10,7 @@ module Spree Class.new do attr_accessor :preferences def initialize - @preferences = { color: 'blue' } + @preferences = {color: "blue"} end def [](key) @@ -36,12 +36,12 @@ def [](key) end before do - Spree::Config.static_model_preferences.add(klass, 'credentials', color: 'red') + Spree::Config.static_model_preferences.add(klass, "credentials", color: "red") end describe "available_preference_sources" do it "should contain the defined preference sets" do - expect(klass.available_preference_sources).to eq ['credentials'] + expect(klass.available_preference_sources).to eq ["credentials"] end end @@ -53,13 +53,13 @@ def [](key) end context "with preference_source set" do - let(:preference_source) { 'credentials' } + let(:preference_source) { "credentials" } it "uses the statically configured preference" do expect(subject.preferred_color).to eq "red" end it "ignores assignment" do - subject.preferences = { color: 'orange' } + subject.preferences = {color: "orange"} expect(subject.preferred_color).to eq "red" end end diff --git a/core/spec/models/spree/preferences/store_spec.rb b/core/spec/models/spree/preferences/store_spec.rb index ce2c0e1ff46..0bbd204c19a 100644 --- a/core/spec/models/spree/preferences/store_spec.rb +++ b/core/spec/models/spree/preferences/store_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Preferences::Store, type: :model do before :each do @@ -19,22 +19,22 @@ end it "will return db value when cache is emtpy and cache the db value" do - preference = Spree::Preference.where(key: 'test').first_or_initialize - preference.value = '123' + preference = Spree::Preference.where(key: "test").first_or_initialize + preference.value = "123" preference.save Rails.cache.clear - expect(@store.get(:test)).to eq '123' - expect(Rails.cache.read(:test)).to eq '123' + expect(@store.get(:test)).to eq "123" + expect(Rails.cache.read(:test)).to eq "123" end it "should return and cache fallback value when supplied" do Rails.cache.clear - expect(@store.get(:test){ false }).to be false + expect(@store.get(:test) { false }).to be false expect(Rails.cache.read(:test)).to be false end it "should return nil when key can't be found and fallback value is not supplied" do - expect(@store.get(:random_key){ nil }).to be_nil + expect(@store.get(:random_key) { nil }).to be_nil end end diff --git a/core/spec/models/spree/price_spec.rb b/core/spec/models/spree/price_spec.rb index ed0bc478fa1..88794c4a6bc 100644 --- a/core/spec/models/spree/price_spec.rb +++ b/core/spec/models/spree/price_spec.rb @@ -1,78 +1,78 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Price, type: :model do - describe 'searchable columns' do + describe "searchable columns" do subject { described_class.allowed_ransackable_attributes } - it 'allows searching by variant_id' do + it "allows searching by variant_id" do expect(subject).to include("variant_id") end end - describe 'validations' do + describe "validations" do let(:variant) { stub_model Spree::Variant } subject { Spree::Price.new variant:, amount: } - context 'when the amount is nil' do + context "when the amount is nil" do let(:amount) { nil } it { is_expected.not_to be_valid } end - context 'when the amount is less than 0' do + context "when the amount is less than 0" do let(:amount) { -1 } - it 'has 1 error on amount' do + it "has 1 error on amount" do subject.valid? expect(subject.errors[:amount].size).to eq(1) end - it 'populates errors' do + it "populates errors" do subject.valid? - expect(subject.errors.messages[:amount].first).to eq 'must be greater than or equal to 0' + expect(subject.errors.messages[:amount].first).to eq "must be greater than or equal to 0" end end - context 'when the amount is greater than maximum amount' do + context "when the amount is greater than maximum amount" do let(:amount) { Spree::Price::MAXIMUM_AMOUNT + 1 } - it 'has 1 error on amount' do + it "has 1 error on amount" do subject.valid? expect(subject.errors[:amount].size).to eq(1) end - it 'populates errors' do + it "populates errors" do subject.valid? expect(subject.errors.messages[:amount].first).to eq "must be less than or equal to #{Spree::Price::MAXIMUM_AMOUNT}" end end - context 'when the amount is between 0 and the maximum amount' do + context "when the amount is between 0 and the maximum amount" do let(:amount) { Spree::Price::MAXIMUM_AMOUNT } it { is_expected.to be_valid } end - context '#country_iso' do + context "#country_iso" do subject(:price) { build(:price, country_iso:) } - context 'when country iso is nil' do + context "when country iso is nil" do let(:country_iso) { nil } it { is_expected.to be_valid } end - context 'when country iso is an empty string' do + context "when country iso is an empty string" do let(:country_iso) { "" } it { is_expected.to be_valid } end - context 'when country iso is a country code' do + context "when country iso is a country code" do let!(:country) { create(:country, iso: "DE") } let(:country_iso) { "DE" } it { is_expected.to be_valid } end - context 'when country iso is not a country code' do + context "when country iso is not a country code" do let(:country_iso) { "ZZ" } it { is_expected.not_to be_valid } @@ -88,17 +88,17 @@ end end - describe '#country' do + describe "#country" do let!(:country) { create(:country, iso: "DE") } let(:price) { create(:price, country_iso: "DE") } - it 'returns the country object' do + it "returns the country object" do expect(price.country).to eq(country) end end - describe '.currently_valid' do - it 'prioritizes first those associated to a country' do + describe ".currently_valid" do + it "prioritizes first those associated to a country" do price_1 = create(:price, country: create(:country)) price_2 = create(:price, country: nil) { |price| price.touch } @@ -109,8 +109,8 @@ ).to be(true) end - context 'when country data is the same' do - it 'prioritizes first those recently updated' do + context "when country data is the same" do + it "prioritizes first those recently updated" do price_1 = create(:price, country: nil) price_2 = create(:price, country: nil) price_1.touch @@ -167,8 +167,8 @@ end end - describe 'scopes' do - describe '.for_any_country' do + describe "scopes" do + describe ".for_any_country" do let(:country) { create(:country, iso: "BR") } let!(:fallback_price) { create(:price, country_iso: nil) } let!(:country_price) { create(:price, country:) } @@ -179,7 +179,7 @@ end end - describe 'net_amount' do + describe "net_amount" do let(:country) { create(:country, iso: "DE") } let(:zone) { create(:zone, countries: [country]) } let!(:tax_rate) { create(:tax_rate, included_in_price: true, zone:, tax_categories: [variant.tax_category]) } diff --git a/core/spec/models/spree/product/scopes_spec.rb b/core/spec/models/spree/product/scopes_spec.rb index d485bb61a66..5679714eba4 100644 --- a/core/spec/models/spree/product/scopes_spec.rb +++ b/core/spec/models/spree/product/scopes_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe "Product scopes", type: :model do let!(:product) { create(:product) } @@ -10,8 +10,8 @@ @taxonomy = create(:taxonomy) @root_taxon = @taxonomy.root - @parent_taxon = create(:taxon, name: 'Parent', taxonomy_id: @taxonomy.id, parent: @root_taxon) - @child_taxon = create(:taxon, name: 'Child 1', taxonomy_id: @taxonomy.id, parent: @parent_taxon) + @parent_taxon = create(:taxon, name: "Parent", taxonomy_id: @taxonomy.id, parent: @root_taxon) + @child_taxon = create(:taxon, name: "Child 1", taxonomy_id: @taxonomy.id, parent: @parent_taxon) @parent_taxon.reload # Need to reload for descendents to show up product.taxons << @parent_taxon @@ -29,16 +29,16 @@ expect(Spree::Product.in_taxon(@parent_taxon).to_a.size).to eq(1) end - context 'orders products based on their ordering within the classifications' do + context "orders products based on their ordering within the classifications" do let(:other_taxon) { create(:taxon, products: [product]) } let!(:product_2) { create(:product, taxons: [@child_taxon, other_taxon]) } - it 'by initial ordering' do + it "by initial ordering" do expect(Spree::Product.in_taxon(@child_taxon)).to eq([product, product_2]) expect(Spree::Product.in_taxon(other_taxon)).to eq([product, product_2]) end - it 'after ordering changed' do + it "after ordering changed" do [@child_taxon, other_taxon].each do |taxon| Spree::Classification.find_by(taxon:, product:).insert_at(2) expect(Spree::Product.in_taxon(taxon)).to eq([product_2, product]) @@ -128,7 +128,7 @@ end end - describe '.available' do + describe ".available" do context "a product with past available_on" do let!(:product) { create(:product, available_on: 1.day.ago) } diff --git a/core/spec/models/spree/product_duplicator_spec.rb b/core/spec/models/spree/product_duplicator_spec.rb index 74741b364ec..8c201a489ce 100644 --- a/core/spec/models/spree/product_duplicator_spec.rb +++ b/core/spec/models/spree/product_duplicator_spec.rb @@ -1,45 +1,45 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe Spree::ProductDuplicator, type: :model do let(:product) { create(:product, properties: [create(:property, name: "MyProperty")]) } let!(:duplicator) { Spree::ProductDuplicator.new(product) } - let(:image) { File.open(Spree::Core::Engine.root.join('lib', 'spree', 'testing_support', 'fixtures', 'blank.jpg')) } - let(:params) { { viewable_id: product.master.id, viewable_type: 'Spree::Variant', attachment: image, alt: "position 1", position: 1 } } + let(:image) { File.open(Spree::Core::Engine.root.join("lib", "spree", "testing_support", "fixtures", "blank.jpg")) } + let(:params) { {viewable_id: product.master.id, viewable_type: "Spree::Variant", attachment: image, alt: "position 1", position: 1} } before do Spree::Image.create(params) end it "will duplicate the product" do - expect{ duplicator.duplicate }.to change{ Spree::Product.count }.by(1) + expect { duplicator.duplicate }.to change { Spree::Product.count }.by(1) end - context 'when image duplication enabled' do + context "when image duplication enabled" do it "will duplicate the product images" do - expect{ duplicator.duplicate }.to change{ Spree::Image.count }.by(1) + expect { duplicator.duplicate }.to change { Spree::Image.count }.by(1) end end - context 'when image duplication disabled' do + context "when image duplication disabled" do let!(:duplicator) { Spree::ProductDuplicator.new(product, false) } it "will not duplicate the product images" do - expect{ duplicator.duplicate }.to change{ Spree::Image.count }.by(0) + expect { duplicator.duplicate }.to change { Spree::Image.count }.by(0) end end - context 'image duplication default' do - context 'when default is set to true' do - it 'clones images if no flag passed to initializer' do - expect{ duplicator.duplicate }.to change{ Spree::Image.count }.by(1) + context "image duplication default" do + context "when default is set to true" do + it "clones images if no flag passed to initializer" do + expect { duplicator.duplicate }.to change { Spree::Image.count }.by(1) end end - context 'when default is set to false' do + context "when default is set to false" do before do ProductDuplicator.clone_images_default = false end @@ -48,8 +48,8 @@ module Spree ProductDuplicator.clone_images_default = true end - it 'does not clone images if no flag passed to initializer' do - expect{ ProductDuplicator.new(product).duplicate }.to change{ Spree::Image.count }.by(0) + it "does not clone images if no flag passed to initializer" do + expect { ProductDuplicator.new(product).duplicate }.to change { Spree::Image.count }.by(0) end end end @@ -85,11 +85,11 @@ module Spree it "will duplciate the variants" do # will change the count by 3, since there will be a master variant as well - expect{ duplicator.duplicate }.to change{ Spree::Variant.count }.by(3) + expect { duplicator.duplicate }.to change { Spree::Variant.count }.by(3) end it "will not duplicate the option values" do - expect{ duplicator.duplicate }.to change{ Spree::OptionValue.count }.by(0) + expect { duplicator.duplicate }.to change { Spree::OptionValue.count }.by(0) end it "will duplicate the variants after initial duplicate is discarded" do diff --git a/core/spec/models/spree/product_filter_spec.rb b/core/spec/models/spree/product_filter_spec.rb index 795872a3440..1d53fb6f241 100644 --- a/core/spec/models/spree/product_filter_spec.rb +++ b/core/spec/models/spree/product_filter_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/core/product_filters' +require "rails_helper" +require "spree/core/product_filters" -RSpec.describe 'product filters', type: :model do +RSpec.describe "product filters", type: :model do # Regression test for https://github.com/spree/spree/issues/1709 - context 'finds products filtered by brand' do + context "finds products filtered by brand" do let(:product) { create(:product) } before do Spree::Property.create!(name: "brand", presentation: "brand") diff --git a/core/spec/models/spree/product_property_spec.rb b/core/spec/models/spree/product_property_spec.rb index dd8da52e147..459bd8b9dce 100644 --- a/core/spec/models/spree/product_property_spec.rb +++ b/core/spec/models/spree/product_property_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::ProductProperty, type: :model do context "touching" do diff --git a/core/spec/models/spree/product_spec.rb b/core/spec/models/spree/product_spec.rb index 0efb5f61f40..b18ad511156 100644 --- a/core/spec/models/spree/product_spec.rb +++ b/core/spec/models/spree/product_spec.rb @@ -1,33 +1,33 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module ThirdParty class Extension < Spree::Base # nasty hack so we don't have to create a table to back this fake model - self.table_name = 'spree_products' + self.table_name = "spree_products" end end RSpec.describe Spree::Product, type: :model do - context 'product instance' do + context "product instance" do let(:product) { create(:product) } let(:variant) { create(:variant, product:) } - context '#duplicate' do + context "#duplicate" do before do allow(product).to receive_messages taxons: [create(:taxon)] end - it 'duplicates product' do + it "duplicates product" do clone = product.duplicate - expect(clone.name).to eq('COPY OF ' + product.name) - expect(clone.master.sku).to eq('COPY OF ' + product.master.sku) + expect(clone.name).to eq("COPY OF " + product.name) + expect(clone.master.sku).to eq("COPY OF " + product.master.sku) expect(clone.taxons).to eq(product.taxons) expect(clone.images.size).to eq(product.images.size) end - it 'calls #duplicate_extra', partial_double_verification: false do + it "calls #duplicate_extra", partial_double_verification: false do expect_any_instance_of(Spree::Product).to receive(:duplicate_extra) do |product, old_product| product.name = old_product.name.reverse end @@ -43,27 +43,27 @@ class Extension < Spree::Base shared_examples "a change occurred" do it "should change updated_at" do - expect { subject }.to change{ product.updated_at } + expect { subject }.to change { product.updated_at } end it "should touch taxons" do taxon = create(:taxon, product_ids: [product.id]) taxon.update_columns(updated_at: 1.day.ago) product.taxons.reload - expect { subject }.to change{ taxon.reload.updated_at } + expect { subject }.to change { taxon.reload.updated_at } end end shared_examples "no change occurred" do it "should not change updated_at" do - expect { subject }.not_to change{ product.updated_at } + expect { subject }.not_to change { product.updated_at } end it "should not touch taxons" do taxon = create(:taxon, products: [product]) taxon.update_columns(updated_at: 1.day.ago) product.taxons.reload - expect { subject }.not_to change{ taxon.reload.updated_at } + expect { subject }.not_to change { taxon.reload.updated_at } end end @@ -151,7 +151,7 @@ class Extension < Spree::Base context "#price" do # Regression test for https://github.com/spree/spree/issues/1173 - it 'strips non-price characters' do + it "strips non-price characters" do product.price = "$10" expect(product.price).to eq(10.0) end @@ -166,8 +166,8 @@ class Extension < Spree::Base context "with currency set to JPY" do before do - product.master.default_price.update!(currency: 'JPY') - stub_spree_preferences(currency: 'JPY') + product.master.default_price.update!(currency: "JPY") + stub_spree_preferences(currency: "JPY") end it "displays the currency in yen" do @@ -281,7 +281,7 @@ class Extension < Spree::Base end end - context 'when a variant has a fallback price' do + context "when a variant has a fallback price" do before do low.prices.create(country_iso: nil) end @@ -293,18 +293,18 @@ class Extension < Spree::Base end describe "#variant_option_values_by_option_type" do - let(:size) { create(:option_type, name: 'size') } - let(:length) { create(:option_type, name: 'length') } + let(:size) { create(:option_type, name: "size") } + let(:length) { create(:option_type, name: "length") } let(:product) { create(:product, option_types: [size, length]) } - let(:size_small) { create(:option_value, name: 'small', option_type: size, position: 3) } - let(:size_medium) { create(:option_value, name: 'medium', option_type: size, position: 1) } - let(:size_large) { create(:option_value, name: 'large', option_type: size, position: 2) } + let(:size_small) { create(:option_value, name: "small", option_type: size, position: 3) } + let(:size_medium) { create(:option_value, name: "medium", option_type: size, position: 1) } + let(:size_large) { create(:option_value, name: "large", option_type: size, position: 2) } let!(:variant) { create(:variant, product:, option_values: [size_small, size_medium]) } subject { product.variant_option_values_by_option_type } it "returns the option values associated with the product's variants grouped by option type" do - expect(subject).to eq({ size => [size_medium, size_small] }) + expect(subject).to eq({size => [size_medium, size_small]}) end end @@ -330,12 +330,12 @@ class Extension < Spree::Base end end - describe 'Variants sorting' do - let(:master){ product.master } + describe "Variants sorting" do + let(:master) { product.master } let!(:second) { create(:variant, product:) } - let!(:third) { create(:variant, product:) } - let!(:first) { create(:variant, product:) } + let!(:third) { create(:variant, product:) } + let!(:first) { create(:variant, product:) } before do first.update_columns(position: 2) @@ -343,14 +343,14 @@ class Extension < Spree::Base third.update_columns(position: 4) end - context 'without master variant' do - it 'sorts variants by position' do + context "without master variant" do + it "sorts variants by position" do expect(product.variants).to eq([first, second, third]) end end - context 'with master variant' do - it 'sorts variants by position' do + context "with master variant" do + it "sorts variants by position" do expect(product.variants_including_master).to eq([master, first, second, third]) end end @@ -408,12 +408,12 @@ class Extension < Spree::Base product2.sku = "456" product2.save! - expect(product2.slug).to eq 'test-456' + expect(product2.slug).to eq "test-456" end end describe "#discard" do - let(:product) { create(:product, slug: 'my-awesome-product') } + let(:product) { create(:product, slug: "my-awesome-product") } it "destroys related associations" do create(:variant, product:) @@ -434,11 +434,11 @@ class Extension < Spree::Base it "replaces the slug" do product.discard - expect(product.slug).to match /\A\d+_my-awesome-product\z/ + expect(product.slug).to match(/\A\d+_my-awesome-product\z/) # Ensure a new product can be created with the slug - new_product = create(:product, slug: 'my-awesome-product') - expect(new_product.slug).to eq('my-awesome-product') + new_product = create(:product, slug: "my-awesome-product") + expect(new_product.slug).to eq("my-awesome-product") end end @@ -449,14 +449,14 @@ class Extension < Spree::Base it "touches the product instance when an option type is added" do expect { - product.product_option_types.create(option_type: create(:option_type, name: 'new-option-type')) + product.product_option_types.create(option_type: create(:option_type, name: "new-option-type")) }.to change { product.reload.updated_at } end end context "with an existing option type" do before do - product.product_option_types.create(option_type: create(:option_type, name: 'new-option-type')) + product.product_option_types.create(option_type: create(:option_type, name: "new-option-type")) product.update_columns(updated_at: 1.day.ago) end @@ -469,18 +469,18 @@ class Extension < Spree::Base end describe "primary_taxon" do - it 'should belong to primary_taxon' do + it "should belong to primary_taxon" do expect(Spree::Product.reflect_on_association(:primary_taxon).macro).to eq(:belongs_to) end - it 'should be optional' do + it "should be optional" do association = Spree::Product.reflect_on_association(:primary_taxon) expect(association.options[:optional]).to be(true) end - it 'should have a class_name of Spree::Taxon' do + it "should have a class_name of Spree::Taxon" do association = Spree::Product.reflect_on_association(:primary_taxon) - expect(association.class_name).to eq('Spree::Taxon') + expect(association.class_name).to eq("Spree::Taxon") end end end @@ -490,35 +490,35 @@ class Extension < Spree::Base let(:product) { create(:product) } it "should properly assign properties" do - product.set_property('the_prop', 'value1') - expect(product.property('the_prop')).to eq('value1') + product.set_property("the_prop", "value1") + expect(product.property("the_prop")).to eq("value1") - product.set_property('the_prop', 'value2') - expect(product.property('the_prop')).to eq('value2') + product.set_property("the_prop", "value2") + expect(product.property("the_prop")).to eq("value2") end it "should not create duplicate properties when set_property is called" do expect { - product.set_property('the_prop', 'value2') + product.set_property("the_prop", "value2") product.save product.reload }.not_to change(product.properties, :length) expect { - product.set_property('the_prop_new', 'value') + product.set_property("the_prop_new", "value") product.save product.reload - expect(product.property('the_prop_new')).to eq('value') + expect(product.property("the_prop_new")).to eq("value") }.to change { product.properties.length }.by(1) end # Regression test for https://github.com/spree/spree/issues/2455 it "should not overwrite properties' presentation names" do - Spree::Property.where(name: 'foo').first_or_create!(presentation: "Foo's Presentation Name") - product.set_property('foo', 'value1') - product.set_property('bar', 'value2') - expect(Spree::Property.where(name: 'foo').first.presentation).to eq("Foo's Presentation Name") - expect(Spree::Property.where(name: 'bar').first.presentation).to eq("bar") + Spree::Property.where(name: "foo").first_or_create!(presentation: "Foo's Presentation Name") + product.set_property("foo", "value1") + product.set_property("bar", "value2") + expect(Spree::Property.where(name: "foo").first.presentation).to eq("Foo's Presentation Name") + expect(Spree::Property.where(name: "bar").first.presentation).to eq("bar") end end @@ -535,13 +535,13 @@ class Extension < Spree::Base context "#images" do let(:product) { create(:product) } - let(:image) { File.open(Spree::Core::Engine.root.join('lib', 'spree', 'testing_support', 'fixtures', 'blank.jpg')) } - let(:params) { { viewable_id: product.master.id, viewable_type: 'Spree::Variant', attachment: image, alt: "position 2", position: 2 } } + let(:image) { File.open(Spree::Core::Engine.root.join("lib", "spree", "testing_support", "fixtures", "blank.jpg")) } + let(:params) { {viewable_id: product.master.id, viewable_type: "Spree::Variant", attachment: image, alt: "position 2", position: 2} } before do Spree::Image.create(params) - Spree::Image.create(params.merge({ alt: "position 1", position: 1 })) - Spree::Image.create(params.merge({ viewable_type: 'ThirdParty::Extension', alt: "position 1", position: 2 })) + Spree::Image.create(params.merge({alt: "position 1", position: 1})) + Spree::Image.create(params.merge({viewable_type: "ThirdParty::Extension", alt: "position 1", position: 2})) end it "only looks for variant images" do @@ -566,25 +566,25 @@ class Extension < Spree::Base end end - context '#total_on_hand' do - it 'should be infinite if track_inventory_levels is false' do + context "#total_on_hand" do + it "should be infinite if track_inventory_levels is false" do stub_spree_preferences(track_inventory_levels: false) expect(build(:product, variants_including_master: [build(:master_variant)]).total_on_hand).to eql(Float::INFINITY) end - it 'should be infinite if variant is on demand' do + it "should be infinite if variant is on demand" do stub_spree_preferences(track_inventory_levels: true) expect(build(:product, variants_including_master: [build(:on_demand_master_variant)]).total_on_hand).to eql(Float::INFINITY) end - it 'should return sum of stock items count_on_hand' do + it "should return sum of stock items count_on_hand" do product = create(:product) product.stock_items.first.set_count_on_hand 5 product.variants_including_master.reload # force load association expect(product.total_on_hand).to eql(5) end - it 'should return sum of stock items count_on_hand when variants_including_master is not loaded' do + it "should return sum of stock items count_on_hand when variants_including_master is not loaded" do product = create(:product) product.stock_items.first.set_count_on_hand 5 expect(product.reload.total_on_hand).to eql(5) @@ -592,15 +592,15 @@ class Extension < Spree::Base end # Regression spec for https://github.com/spree/spree/issues/5588 - context '#validate_master when duplicate SKUs entered' do - let!(:first_product) { create(:product, sku: 'a-sku') } - let(:second_product) { build(:product, sku: 'a-sku') } + context "#validate_master when duplicate SKUs entered" do + let!(:first_product) { create(:product, sku: "a-sku") } + let(:second_product) { build(:product, sku: "a-sku") } subject { second_product } it { is_expected.to be_invalid } end - describe '.new' do + describe ".new" do let(:product) { Spree::Product.new(attributes) } shared_examples "new product with master" do @@ -610,34 +610,34 @@ class Extension < Spree::Base end end - context 'no attributes' do + context "no attributes" do let(:attributes) { {} } it_behaves_like "new product with master" end - context 'initializing with variant attributes' do - let(:attributes) { { sku: 'FOO' } } + context "initializing with variant attributes" do + let(:attributes) { {sku: "FOO"} } it_behaves_like "new product with master" it "initializes the variant with the correct attributes" do - expect(product.master.sku).to eq 'FOO' - expect(product.sku).to eq 'FOO' + expect(product.master.sku).to eq "FOO" + expect(product.sku).to eq "FOO" end end end - describe '#gallery' do + describe "#gallery" do let(:product) { Spree::Product.new } subject { product.gallery } - it 'responds to #images' do + it "responds to #images" do expect(subject).to respond_to(:images) end end - describe '.sort_by_master_default_price_amount_asc' do - it 'returns first those which default price is lower' do + describe ".sort_by_master_default_price_amount_asc" do + it "returns first those which default price is lower" do product_1 = create(:product, price: 10) product_2 = create(:product, price: 5) @@ -647,8 +647,8 @@ class Extension < Spree::Base end end - describe '.sort_by_master_default_price_amount_desc' do - it 'returns first those which default price is higher' do + describe ".sort_by_master_default_price_amount_desc" do + it "returns first those which default price is higher" do product_1 = create(:product, price: 10) product_2 = create(:product, price: 5) @@ -741,7 +741,7 @@ class Extension < Spree::Base end end - it 'is valid with or without a primary_taxon' do + it "is valid with or without a primary_taxon" do product_with_taxon = create(:product, primary_taxon: create(:taxon)) product_without_taxon = create(:product, primary_taxon: nil) diff --git a/core/spec/models/spree/refund_spec.rb b/core/spec/models/spree/refund_spec.rb index e10755a1eab..82d89d73059 100644 --- a/core/spec/models/spree/refund_spec.rb +++ b/core/spec/models/spree/refund_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Refund, type: :model do let(:amount) { 100.0 } @@ -24,11 +24,11 @@ ) end - describe 'create' do + describe "create" do subject { refund } it "creates a refund record" do - expect{ subject }.to change { Spree::Refund.count }.by(1) + expect { subject }.to change { Spree::Refund.count }.by(1) end it "saves the amount" do @@ -45,7 +45,7 @@ let(:payment_amount) { 200.0 } before do - expect(I18n).to receive(:t).with(:'number.currency.format.separator') do + expect(I18n).to receive(:t).with(:"number.currency.format.separator") do "," end end @@ -91,20 +91,20 @@ let(:transaction_id) { nil } context "processing is successful" do - it 'creates a refund' do - expect{ subject }.to change(Spree::Refund, :count).by(1) + it "creates a refund" do + expect { subject }.to change(Spree::Refund, :count).by(1) end - it 'saves the returned authorization value' do + it "saves the returned authorization value" do expect { subject }.to change { refund.reload.transaction_id }.from(nil).to(Spree::PaymentMethod::BogusCreditCard::AUTHORIZATION_CODE) end - it 'saves the passed amount as the refund amount' do + it "saves the passed amount as the refund amount" do subject expect(refund.reload.amount).to eq amount end - it 'creates a log entry' do + it "creates a log entry" do subject expect(refund.reload.log_entries).to be_present end @@ -114,7 +114,7 @@ subject end - it 'should update the payment total' do + it "should update the payment total" do expect(payment.order).to receive(:recalculate) subject end @@ -135,103 +135,102 @@ before do allow(payment.payment_method) .to receive(:credit) - .with(amount_in_cents, payment.source, payment.transaction_id, { originator: an_instance_of(Spree::Refund) }) + .with(amount_in_cents, payment.source, payment.transaction_id, {originator: an_instance_of(Spree::Refund)}) .and_return(gateway_response) end - - context 'without performing after create' do - it 'raises a GatewayError' do + context "without performing after create" do + it "raises a GatewayError" do expect { subject }.to raise_error(Spree::Core::GatewayError, failure_message) end end end - context 'without payment profiles supported' do + context "without payment profiles supported" do before do allow(payment.payment_method).to receive(:payment_profiles_supported?) { false } end - it 'should not supply the payment source' do + it "should not supply the payment source" do expect(payment.payment_method) .to receive(:credit) - .with(amount * 100, payment.transaction_id, { originator: an_instance_of(Spree::Refund) }) + .with(amount * 100, payment.transaction_id, {originator: an_instance_of(Spree::Refund)}) .and_call_original subject end end - context 'with payment profiles supported' do + context "with payment profiles supported" do before do allow(payment.payment_method).to receive(:payment_profiles_supported?) { true } end - it 'should supply the payment source' do + it "should supply the payment source" do expect(payment.payment_method) .to receive(:credit) - .with(amount_in_cents, payment.source, payment.transaction_id, { originator: an_instance_of(Spree::Refund) }) + .with(amount_in_cents, payment.source, payment.transaction_id, {originator: an_instance_of(Spree::Refund)}) .and_call_original subject end end - context 'with an activemerchant gateway connection error' do + context "with an activemerchant gateway connection error" do before do expect(payment.payment_method) .to receive(:credit) - .with(amount_in_cents, payment.source, payment.transaction_id, { originator: an_instance_of(Spree::Refund) }) + .with(amount_in_cents, payment.source, payment.transaction_id, {originator: an_instance_of(Spree::Refund)}) .and_raise(ActiveMerchant::ConnectionError.new("foo", nil)) end - it 'raises Spree::Core::GatewayError' do - expect { subject }.to raise_error(Spree::Core::GatewayError, I18n.t('spree.unable_to_connect_to_gateway')) + it "raises Spree::Core::GatewayError" do + expect { subject }.to raise_error(Spree::Core::GatewayError, I18n.t("spree.unable_to_connect_to_gateway")) end end - context 'with amount too large' do + context "with amount too large" do let(:payment_amount) { 10 } let(:amount) { payment_amount * 2 } - it 'is invalid' do + it "is invalid" do expect { subject }.to raise_error { |error| expect(error).to be_a(ActiveRecord::RecordInvalid) - expect(error.record.errors.full_messages).to eq ["Amount #{I18n.t('activerecord.errors.models.spree/refund.attributes.amount.greater_than_allowed')}"] + expect(error.record.errors.full_messages).to eq ["Amount #{I18n.t("activerecord.errors.models.spree/refund.attributes.amount.greater_than_allowed")}"] } end end end - context 'when payment is not present' do + context "when payment is not present" do let(:refund) { build(:refund, payment: nil) } - it 'returns a validation error' do - expect { refund.save! }.to raise_error 'Validation failed: Payment can\'t be blank' + it "returns a validation error" do + expect { refund.save! }.to raise_error "Validation failed: Payment can't be blank" end end end - describe 'total_amount_reimbursed_for' do + describe "total_amount_reimbursed_for" do let(:customer_return) { reimbursement.customer_return } let(:reimbursement) { create(:reimbursement) } let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) } - let(:created_by_user) { create(:user, email: 'user@email.com') } + let(:created_by_user) { create(:user, email: "user@email.com") } subject { Spree::Refund.total_amount_reimbursed_for(reimbursement) } - context 'with reimbursements performed' do + context "with reimbursements performed" do before { reimbursement.perform!(created_by: created_by_user) } - it 'returns the total amount' do + it "returns the total amount" do amount = Spree::Refund.total_amount_reimbursed_for(reimbursement) expect(amount).to be > 0 expect(amount).to eq reimbursement.total end end - context 'without reimbursements performed' do - it 'returns zero' do + context "without reimbursements performed" do + it "returns zero" do amount = Spree::Refund.total_amount_reimbursed_for(reimbursement) expect(amount).to eq 0 end diff --git a/core/spec/models/spree/reimbursement/credit_spec.rb b/core/spec/models/spree/reimbursement/credit_spec.rb index 3afbfd8aa6e..d7420187b48 100644 --- a/core/spec/models/spree/reimbursement/credit_spec.rb +++ b/core/spec/models/spree/reimbursement/credit_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe Reimbursement::Credit, type: :model do - context 'class methods' do - describe '.total_amount_reimbursed_for' do + context "class methods" do + describe ".total_amount_reimbursed_for" do subject { Spree::Reimbursement::Credit.total_amount_reimbursed_for(reimbursement) } let(:reimbursement) { create(:reimbursement) } @@ -13,24 +13,24 @@ module Spree before { allow(reimbursement).to receive(:credits).and_return([credit_double, credit_double]) } - it 'should sum the amounts of all of the reimbursements credits' do - expect(subject).to eq BigDecimal('199.98') + it "should sum the amounts of all of the reimbursements credits" do + expect(subject).to eq BigDecimal("199.98") end end end - describe '#description' do + describe "#description" do let(:credit) { Spree::Reimbursement::Credit.new(amount: 100, creditable: mock_model(Spree::PaymentMethod::Check)) } it "should be the creditable's class name" do - expect(credit.description).to eq 'Check' + expect(credit.description).to eq "Check" end end - describe '#display_amount' do + describe "#display_amount" do let(:credit) { Spree::Reimbursement::Credit.new(amount: 100) } - it 'should be a money object' do + it "should be a money object" do expect(credit.display_amount).to eq Spree::Money.new(100, currency: "USD") end end diff --git a/core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb b/core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb index be19e8005f6..ad160745f1b 100644 --- a/core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +++ b/core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe Reimbursement::ReimbursementTypeEngine, type: :model do - describe '#calculate_reimbursement_types' do - let(:return_item) { create(:return_item) } - let(:return_items) { [return_item] } + describe "#calculate_reimbursement_types" do + let(:return_item) { create(:return_item) } + let(:return_items) { [return_item] } let(:reimbursement_type_engine) { Spree::Reimbursement::ReimbursementTypeEngine.new(return_items) } let(:expired_reimbursement_type) { Spree::ReimbursementType::OriginalPayment } let(:override_reimbursement_type) { Spree::ReimbursementType::OriginalPayment.new } @@ -14,12 +14,12 @@ module Spree let(:calculated_reimbursement_types) { subject } let(:all_reimbursement_types) { [ - reimbursement_type_engine.default_reimbursement_type, - reimbursement_type_engine.exchange_reimbursement_type, - expired_reimbursement_type, - override_reimbursement_type, - preferred_reimbursement_type - ] + reimbursement_type_engine.default_reimbursement_type, + reimbursement_type_engine.exchange_reimbursement_type, + expired_reimbursement_type, + override_reimbursement_type, + preferred_reimbursement_type + ] } subject { reimbursement_type_engine.calculate_reimbursement_types } @@ -38,103 +38,103 @@ module Spree allow(return_item).to receive(:exchange_required?).and_return(false) end - context 'the return item requires exchange' do + context "the return item requires exchange" do before { allow(return_item).to receive(:exchange_required?).and_return(true) } - it 'returns a hash with the exchange reimbursement type associated to the return items' do + it "returns a hash with the exchange reimbursement type associated to the return items" do expect(calculated_reimbursement_types[reimbursement_type_engine.exchange_reimbursement_type]).to eq(return_items) end - it 'the return items are not included in any of the other reimbursement types' do + it "the return items are not included in any of the other reimbursement types" do (all_reimbursement_types - [reimbursement_type_engine.exchange_reimbursement_type]).each do |r_type| expect(calculated_reimbursement_types[r_type]).to eq([]) end end - it_should_behave_like 'reimbursement type hash' + it_should_behave_like "reimbursement type hash" end - context 'the return item does not require exchange' do - context 'the return item has an override reimbursement type' do + context "the return item does not require exchange" do + context "the return item has an override reimbursement type" do before { allow(return_item).to receive(:override_reimbursement_type).and_return(override_reimbursement_type) } - it 'returns a hash with the override reimbursement type associated to the return items' do + it "returns a hash with the override reimbursement type associated to the return items" do expect(calculated_reimbursement_types[override_reimbursement_type.class]).to eq(return_items) end - it 'the return items are not included in any of the other reimbursement types' do + it "the return items are not included in any of the other reimbursement types" do (all_reimbursement_types - [override_reimbursement_type.class]).each do |r_type| expect(calculated_reimbursement_types[r_type]).to eq([]) end end - it_should_behave_like 'reimbursement type hash' + it_should_behave_like "reimbursement type hash" end - context 'the return item does not have an override reimbursement type' do - context 'the return item has a preferred reimbursement type' do + context "the return item does not have an override reimbursement type" do + context "the return item has a preferred reimbursement type" do before { allow(return_item).to receive(:preferred_reimbursement_type).and_return(preferred_reimbursement_type) } - context 'the reimbursement type is not valid for the return item' do + context "the reimbursement type is not valid for the return item" do before { expect(reimbursement_type_engine).to receive(:valid_preferred_reimbursement_type?).and_return(false) } - it 'returns a hash with no return items associated to the preferred reimbursement type' do + it "returns a hash with no return items associated to the preferred reimbursement type" do expect(calculated_reimbursement_types[preferred_reimbursement_type]).to eq([]) end - it 'the return items are not included in any of the other reimbursement types' do + it "the return items are not included in any of the other reimbursement types" do (all_reimbursement_types - [preferred_reimbursement_type]).each do |r_type| expect(calculated_reimbursement_types[r_type]).to eq([]) end end - it_should_behave_like 'reimbursement type hash' + it_should_behave_like "reimbursement type hash" end - context 'the reimbursement type is valid for the return item' do - it 'returns a hash with the expired reimbursement type associated to the return items' do + context "the reimbursement type is valid for the return item" do + it "returns a hash with the expired reimbursement type associated to the return items" do expect(calculated_reimbursement_types[preferred_reimbursement_type.class]).to eq(return_items) end - it 'the return items are not included in any of the other reimbursement types' do + it "the return items are not included in any of the other reimbursement types" do (all_reimbursement_types - [preferred_reimbursement_type.class]).each do |r_type| expect(calculated_reimbursement_types[r_type]).to eq([]) end end - it_should_behave_like 'reimbursement type hash' + it_should_behave_like "reimbursement type hash" end end - context 'the return item does not have a preferred reimbursement type' do - context 'the return item is past the time constraint' do + context "the return item does not have a preferred reimbursement type" do + context "the return item is past the time constraint" do before { allow(reimbursement_type_engine).to receive(:past_reimbursable_time_period?).and_return(true) } - it 'returns a hash with the expired reimbursement type associated to the return items' do + it "returns a hash with the expired reimbursement type associated to the return items" do expect(calculated_reimbursement_types[expired_reimbursement_type]).to eq(return_items) end - it 'the return items are not included in any of the other reimbursement types' do + it "the return items are not included in any of the other reimbursement types" do (all_reimbursement_types - [expired_reimbursement_type]).each do |r_type| expect(calculated_reimbursement_types[r_type]).to eq([]) end end - it_should_behave_like 'reimbursement type hash' + it_should_behave_like "reimbursement type hash" end - context 'the return item is within the time constraint' do - it 'returns a hash with the default reimbursement type associated to the return items' do + context "the return item is within the time constraint" do + it "returns a hash with the default reimbursement type associated to the return items" do expect(calculated_reimbursement_types[reimbursement_type_engine.default_reimbursement_type]).to eq(return_items) end - it 'the return items are not included in any of the other reimbursement types' do + it "the return items are not included in any of the other reimbursement types" do (all_reimbursement_types - [reimbursement_type_engine.default_reimbursement_type]).each do |r_type| expect(calculated_reimbursement_types[r_type]).to eq([]) end end - it_should_behave_like 'reimbursement type hash' + it_should_behave_like "reimbursement type hash" end end end diff --git a/core/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb b/core/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb index 44b260f13b8..1816ce16459 100644 --- a/core/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +++ b/core/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe Reimbursement::ReimbursementTypeValidator, type: :model do @@ -23,26 +23,26 @@ class DummyClass let(:dummy) { DummyClass.new } let(:preferred_reimbursement_type) { Spree::ReimbursementType::Credit.new } - describe '#valid_preferred_reimbursement_type?' do + describe "#valid_preferred_reimbursement_type?" do before do allow(dummy).to receive(:past_reimbursable_time_period?).and_return(true) end subject { dummy.valid_preferred_reimbursement_type?(return_item) } - context 'is valid' do - it 'if it is not past the reimbursable time period' do + context "is valid" do + it "if it is not past the reimbursable time period" do allow(dummy).to receive(:past_reimbursable_time_period?).and_return(false) expect(subject).to be true end - it 'if the return items preferred method of reimbursement is the expired method of reimbursement' do + it "if the return items preferred method of reimbursement is the expired method of reimbursement" do expect(subject).to be true end end - context 'is invalid' do - it 'if the return item is past the eligible time period and the preferred method of reimbursement is not the expired method of reimbursement' do + context "is invalid" do + it "if the return item is past the eligible time period and the preferred method of reimbursement is not the expired method of reimbursement" do return_item.preferred_reimbursement_type = Spree::ReimbursementType::OriginalPayment.new expect(subject).to be false @@ -50,33 +50,33 @@ class DummyClass end end - describe '#past_reimbursable_time_period?' do + describe "#past_reimbursable_time_period?" do subject { dummy.past_reimbursable_time_period?(return_item) } before do allow(return_item).to receive_message_chain(:inventory_unit, :shipment, :shipped_at).and_return(shipped_at) end - context 'it has not shipped' do + context "it has not shipped" do let(:shipped_at) { nil } - it 'is not past the reimbursable time period' do + it "is not past the reimbursable time period" do expect(subject).to be_falsey end end - context 'it has shipped and it is more recent than the time constraint' do + context "it has shipped and it is more recent than the time constraint" do let(:shipped_at) { (dummy.refund_time_constraint - 1.day).ago } - it 'is not past the reimbursable time period' do + it "is not past the reimbursable time period" do expect(subject).to be false end end - context 'it has shipped and it is further in the past than the time constraint' do + context "it has shipped and it is further in the past than the time constraint" do let(:shipped_at) { (dummy.refund_time_constraint + 1.day).ago } - it 'is past the reimbursable time period' do + it "is past the reimbursable time period" do expect(subject).to be true end end diff --git a/core/spec/models/spree/reimbursement_performer_spec.rb b/core/spec/models/spree/reimbursement_performer_spec.rb index 71e7cc9b9db..e48ac580603 100644 --- a/core/spec/models/spree/reimbursement_performer_spec.rb +++ b/core/spec/models/spree/reimbursement_performer_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::ReimbursementPerformer, type: :model do - let(:reimbursement) { create(:reimbursement, return_items_count: 1) } - let(:return_item) { reimbursement.return_items.first } - let(:reimbursement_type) { double("ReimbursementType") } - let(:reimbursement_type_hash) { { reimbursement_type => [return_item] } } - let(:created_by_user) { create(:user, email: 'user@email.com') } + let(:reimbursement) { create(:reimbursement, return_items_count: 1) } + let(:return_item) { reimbursement.return_items.first } + let(:reimbursement_type) { double("ReimbursementType") } + let(:reimbursement_type_hash) { {reimbursement_type => [return_item]} } + let(:created_by_user) { create(:user, email: "user@email.com") } before do expect(Spree::ReimbursementPerformer).to receive(:calculate_reimbursement_types).and_return(reimbursement_type_hash) @@ -22,7 +22,7 @@ end end - describe '.perform' do + describe ".perform" do subject { Spree::ReimbursementPerformer.perform(reimbursement, created_by: created_by_user) } it "reimburses each calculated reimbursement types with the correct return items as a simulation" do diff --git a/core/spec/models/spree/reimbursement_spec.rb b/core/spec/models/spree/reimbursement_spec.rb index d78e3ac051d..94732da3029 100644 --- a/core/spec/models/spree/reimbursement_spec.rb +++ b/core/spec/models/spree/reimbursement_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Reimbursement, type: :model do describe ".create" do @@ -28,7 +28,7 @@ describe ".before_create" do describe "#generate_number" do context "number is assigned" do - let(:number) { '123' } + let(:number) { "123" } let(:reimbursement) { Spree::Reimbursement.new(number:) } it "should return the assigned number" do @@ -53,9 +53,9 @@ end describe "#display_total" do - let(:total) { 100.50 } - let(:currency) { "USD" } - let(:order) { Spree::Order.new(currency:) } + let(:total) { 100.50 } + let(:currency) { "USD" } + let(:order) { Spree::Order.new(currency:) } let(:reimbursement) { Spree::Reimbursement.new(total:, order:) } subject { reimbursement.display_total } @@ -70,32 +70,32 @@ end describe "#perform!" do - let!(:adjustments) { [] } # placeholder to ensure it gets run prior the "before" at this level - - let!(:tax_rate) { nil } - let!(:tax_zone) { create :zone, :with_country } - let(:shipping_method) { create :shipping_method, zones: [tax_zone] } - let(:variant) { create :variant } - let(:order) { create(:order_with_line_items, state: 'payment', line_items_attributes: [{ variant:, price: line_items_price }], shipment_cost: 0, shipping_method:) } - let(:line_items_price) { BigDecimal(10) } - let(:line_item) { order.line_items.first } - let(:inventory_unit) { line_item.inventory_units.first } - let(:payment) { build(:payment, amount: payment_amount, order:, state: 'checkout') } - let(:payment_amount) { order.total } - let(:customer_return) { build(:customer_return, return_items: [return_item]) } - let(:return_item) { build(:return_item, inventory_unit:) } + let!(:adjustments) { [] } # placeholder to ensure it gets run prior the "before" at this level + + let!(:tax_rate) { nil } + let!(:tax_zone) { create :zone, :with_country } + let(:shipping_method) { create :shipping_method, zones: [tax_zone] } + let(:variant) { create :variant } + let(:order) { create(:order_with_line_items, state: "payment", line_items_attributes: [{variant:, price: line_items_price}], shipment_cost: 0, shipping_method:) } + let(:line_items_price) { BigDecimal(10) } + let(:line_item) { order.line_items.first } + let(:inventory_unit) { line_item.inventory_units.first } + let(:payment) { build(:payment, amount: payment_amount, order:, state: "checkout") } + let(:payment_amount) { order.total } + let(:customer_return) { build(:customer_return, return_items: [return_item]) } + let(:return_item) { build(:return_item, inventory_unit:) } let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) } let(:reimbursement) { create(:reimbursement, customer_return:, order:, return_items: [return_item]) } - let(:created_by_user) { create(:user, email: 'user@email.com') } + let(:created_by_user) { create(:user, email: "user@email.com") } subject { reimbursement.perform!(created_by: created_by_user) } before do order.shipments.each do |shipment| - shipment.inventory_units.update_all state: 'shipped' - shipment.update_column('state', 'shipped') + shipment.inventory_units.update_all state: "shipped" + shipment.update_column("state", "shipped") end order.reload order.recalculate @@ -117,14 +117,14 @@ it "creates a refund" do expect { subject - }.to change{ Spree::Refund.count }.by(1) + }.to change { Spree::Refund.count }.by(1) expect(Spree::Refund.last.amount).to eq order.total end - context 'with additional tax' do + context "with additional tax" do let!(:tax_rate) { create(:tax_rate, name: "Sales Tax", amount: 0.10, included_in_price: false, zone: tax_zone) } - it 'saves the additional tax and refunds the total' do + it "saves the additional tax and refunds the total" do expect { subject }.to change { Spree::Refund.count }.by(1) @@ -136,10 +136,10 @@ end end - context 'with included tax' do + context "with included tax" do let!(:tax_rate) { create(:tax_rate, name: "VAT Tax", amount: 0.1, included_in_price: true, zone: tax_zone) } - it 'saves the included tax and refunds the total' do + it "saves the included tax and refunds the total" do expect { subject }.to change { Spree::Refund.count }.by(1) @@ -151,10 +151,10 @@ end end - context 'when reimbursement cannot be fully performed' do + context "when reimbursement cannot be fully performed" do let!(:non_return_refund) { create(:refund, amount: 1, payment:) } - it 'does not send a reimbursement email and raises IncompleteReimbursement error' do + it "does not send a reimbursement email and raises IncompleteReimbursement error" do expect(Spree::ReimbursementMailer).not_to receive(:reimbursement_email) expect { subject }.to raise_error(Spree::Reimbursement::IncompleteReimbursementError) end @@ -212,7 +212,7 @@ end describe "#calculated_total" do - context 'with return item amounts that would round up' do + context "with return item amounts that would round up" do let(:reimbursement) { Spree::Reimbursement.new } subject { reimbursement.calculated_total } @@ -222,16 +222,16 @@ reimbursement.return_items << Spree::ReturnItem.new(amount: 10.003) end - it 'rounds down' do + it "rounds down" do expect(subject).to eq 20 end end end - describe '.build_from_customer_return' do + describe ".build_from_customer_return" do let(:customer_return) { create(:customer_return, line_items_count: 5) } before { customer_return.return_items.each(&:receive!) } - let!(:pending_return_item) { customer_return.return_items.first.tap { |ri| ri.update!(acceptance_status: 'pending') } } + let!(:pending_return_item) { customer_return.return_items.first.tap { |ri| ri.update!(acceptance_status: "pending") } } let!(:accepted_return_item) { customer_return.return_items.second.tap(&:accept!) } let!(:rejected_return_item) { customer_return.return_items.third.tap(&:reject!) } let!(:manual_intervention_return_item) { customer_return.return_items.fourth.tap(&:require_manual_intervention!) } @@ -240,15 +240,15 @@ subject { Spree::Reimbursement.build_from_customer_return(customer_return) } - it 'connects to the accepted return items' do + it "connects to the accepted return items" do expect(subject.return_items.to_a).to eq [accepted_return_item] end - it 'connects to the order' do + it "connects to the order" do expect(subject.order).to eq customer_return.order end - it 'connects to the customer_return' do + it "connects to the customer_return" do expect(subject.customer_return).to eq customer_return end end @@ -257,11 +257,11 @@ subject { reimbursement.return_all(created_by: created_by_user) } let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) } - let(:order) { create(:shipped_order, line_items_count: 1) } - let(:inventory_unit) { order.inventory_units.first } - let(:return_item) { build(:return_item, inventory_unit:) } - let(:reimbursement) { build(:reimbursement, order:, return_items: [return_item]) } - let(:created_by_user) { create(:user, email: 'user@email.com') } + let(:order) { create(:shipped_order, line_items_count: 1) } + let(:inventory_unit) { order.inventory_units.first } + let(:return_item) { build(:return_item, inventory_unit:) } + let(:reimbursement) { build(:reimbursement, order:, return_items: [return_item]) } + let(:created_by_user) { create(:user, email: "user@email.com") } it "accepts all the return items" do expect { subject }.to change { return_item.acceptance_status }.to "accepted" @@ -276,16 +276,16 @@ end end - describe '#store_credit_category' do + describe "#store_credit_category" do let(:reimbursement) { create(:reimbursement) } before do - create(:store_credit_category, name: 'foo') + create(:store_credit_category, name: "foo") create(:store_credit_category, :reimbursement) end - it 'fetches the the default reimbursement store category' do - expect(reimbursement.store_credit_category.name).to eq('Reimbursement') + it "fetches the the default reimbursement store category" do + expect(reimbursement.store_credit_category.name).to eq("Reimbursement") end end end diff --git a/core/spec/models/spree/reimbursement_tax_calculator_spec.rb b/core/spec/models/spree/reimbursement_tax_calculator_spec.rb index 86650d9dff8..917b09615ec 100644 --- a/core/spec/models/spree/reimbursement_tax_calculator_spec.rb +++ b/core/spec/models/spree/reimbursement_tax_calculator_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::ReimbursementTaxCalculator, type: :model do let!(:tax_rate) { nil } @@ -13,10 +13,10 @@ Spree::ReimbursementTaxCalculator.call(reimbursement) end - context 'without taxes' do + context "without taxes" do let!(:tax_rate) { nil } - it 'leaves the return items additional_tax_total and included_tax_total at zero' do + it "leaves the return items additional_tax_total and included_tax_total at zero" do subject expect(return_item.additional_tax_total).to eq 0 @@ -24,11 +24,11 @@ end end - context 'with additional tax' do + context "with additional tax" do let!(:tax_rate) { create(:tax_rate, name: "Sales Tax", amount: 0.10, included_in_price: false, zone: tax_zone) } let(:tax_zone) { create(:zone, :with_country) } - it 'sets additional_tax_total on the return items' do + it "sets additional_tax_total on the return items" do subject return_item.reload @@ -37,11 +37,11 @@ end end - context 'with included tax' do + context "with included tax" do let!(:tax_rate) { create(:tax_rate, name: "VAT Tax", amount: 0.1, included_in_price: true, zone: tax_zone) } let(:tax_zone) { create(:zone, :with_country) } - it 'sets included_tax_total on the return items' do + it "sets included_tax_total on the return items" do subject return_item.reload diff --git a/core/spec/models/spree/reimbursement_type/credit_spec.rb b/core/spec/models/spree/reimbursement_type/credit_spec.rb index 8188c714596..e045fcc6f5f 100644 --- a/core/spec/models/spree/reimbursement_type/credit_spec.rb +++ b/core/spec/models/spree/reimbursement_type/credit_spec.rb @@ -1,20 +1,22 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe ReimbursementType::Credit, type: :model do - let(:reimbursement) { create(:reimbursement, return_items_count: 1) } - let(:return_item) { reimbursement.return_items.first } - let(:payment) { reimbursement.order.payments.first } - let(:simulate) { false } - let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) } - let(:creditable) { DummyCreditable.new(amount: 99.99) } - let(:created_by_user) { create(:user, email: 'user@email.com') } - - class DummyCreditable < Spree::Base - attr_accessor :amount - self.table_name = 'spree_payments' # Your creditable class should not use this table + let(:reimbursement) { create(:reimbursement, return_items_count: 1) } + let(:return_item) { reimbursement.return_items.first } + let(:payment) { reimbursement.order.payments.first } + let(:simulate) { false } + let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) } + let(:creditable) { dummy_class.new(amount: 99.99) } + let(:created_by_user) { create(:user, email: "user@email.com") } + + let(:dummy_class) do + Class.new(Spree::Base) do + attr_accessor :amount + self.table_name = "spree_payments" # Your creditable class should not use this table + end end subject { Spree::ReimbursementType::Credit.reimburse(reimbursement, [return_item], simulate, created_by: created_by_user) } @@ -24,29 +26,29 @@ class DummyCreditable < Spree::Base allow(Spree::ReimbursementType::Credit).to receive(:create_creditable).and_return(creditable) end - describe '.reimburse' do - context 'simulate is true' do + describe ".reimburse" do + context "simulate is true" do let(:simulate) { true } - it 'creates one readonly lump credit for all outstanding balance payable to the customer' do + it "creates one readonly lump credit for all outstanding balance payable to the customer" do expect(subject.map(&:class)).to eq [Spree::Reimbursement::Credit] expect(subject.map(&:readonly?)).to eq [true] expect(subject.sum(&:amount)).to eq reimbursement.return_items.to_a.sum(&:total) end - it 'does not save to the database' do + it "does not save to the database" do expect { subject }.to_not change { Spree::Reimbursement::Credit.count } end end - context 'simulate is false' do + context "simulate is false" do let(:simulate) { false } before do expect(creditable).to receive(:save).and_return(true) end - it 'creates one lump credit for all outstanding balance payable to the customer' do + it "creates one lump credit for all outstanding balance payable to the customer" do expect { subject }.to change { Spree::Reimbursement::Credit.count }.by(1) expect(subject.sum(&:amount)).to eq reimbursement.return_items.to_a.sum(&:total) end diff --git a/core/spec/models/spree/reimbursement_type/exchange_spec.rb b/core/spec/models/spree/reimbursement_type/exchange_spec.rb index b24bc522379..da428c73429 100644 --- a/core/spec/models/spree/reimbursement_type/exchange_spec.rb +++ b/core/spec/models/spree/reimbursement_type/exchange_spec.rb @@ -1,25 +1,25 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe ReimbursementType::Exchange, type: :model do - describe '.reimburse' do + describe ".reimburse" do let(:reimbursement) { create(:reimbursement, return_items_count: 1) } - let(:return_items) { reimbursement.return_items } - let(:new_exchange) { double("Exchange") } - let(:simulate) { true } - let(:created_by_user) { create(:user, email: 'user@email.com') } + let(:return_items) { reimbursement.return_items } + let(:new_exchange) { double("Exchange") } + let(:simulate) { true } + let(:created_by_user) { create(:user, email: "user@email.com") } subject { Spree::ReimbursementType::Exchange.reimburse(reimbursement, return_items, simulate, created_by: created_by_user) } - context 'return items are supplied' do + context "return items are supplied" do before do expect(Spree::Exchange).to receive(:new).with(reimbursement.order, return_items).and_return(new_exchange) end context "simulate is true" do - it 'does not perform an exchange and returns the exchange object' do + it "does not perform an exchange and returns the exchange object" do expect(new_exchange).not_to receive(:perform!) expect(subject).to eq [new_exchange] end @@ -28,7 +28,7 @@ module Spree context "simulate is false" do let(:simulate) { false } - it 'performs an exchange and returns the exchange object' do + it "performs an exchange and returns the exchange object" do expect(new_exchange).to receive(:perform!) expect(subject).to eq [new_exchange] end @@ -38,7 +38,7 @@ module Spree context "no return items are supplied" do let(:return_items) { [] } - it 'does not perform an exchange and returns an empty array' do + it "does not perform an exchange and returns an empty array" do expect(new_exchange).not_to receive(:perform!) expect(subject).to eq [] end diff --git a/core/spec/models/spree/reimbursement_type/original_payment_spec.rb b/core/spec/models/spree/reimbursement_type/original_payment_spec.rb index 8d08adb0e53..7a14348bb88 100644 --- a/core/spec/models/spree/reimbursement_type/original_payment_spec.rb +++ b/core/spec/models/spree/reimbursement_type/original_payment_spec.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe ReimbursementType::OriginalPayment, type: :model do - let(:reimbursement) { create(:reimbursement, return_items_count: 1) } - let(:return_item) { reimbursement.return_items.first } - let(:payment) { reimbursement.order.payments.first } - let(:simulate) { false } - let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) } - let(:created_by_user) { create(:user, email: 'user@email.com') } + let(:reimbursement) { create(:reimbursement, return_items_count: 1) } + let(:return_item) { reimbursement.return_items.first } + let(:payment) { reimbursement.order.payments.first } + let(:simulate) { false } + let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) } + let(:created_by_user) { create(:user, email: "user@email.com") } subject { Spree::ReimbursementType::OriginalPayment.reimburse(reimbursement, [return_item], simulate, created_by: created_by_user) } @@ -26,7 +26,7 @@ module Spree end context "simulate is false" do - it 'performs the refund' do + it "performs the refund" do expect { subject }.to change { payment.refunds.count }.by(1) @@ -34,22 +34,22 @@ module Spree end end - context 'when no credit is allowed on the payment' do + context "when no credit is allowed on the payment" do before do expect_any_instance_of(Spree::Payment).to receive(:credit_allowed).and_return 0 end - it 'returns an empty array' do + it "returns an empty array" do expect(subject).to eq [] end end - context 'when a payment is negative' do + context "when a payment is negative" do before do expect_any_instance_of(Spree::Payment).to receive(:amount).and_return(-100) end - it 'returns an empty array' do + it "returns an empty array" do expect(subject).to eq [] end end diff --git a/core/spec/models/spree/reimbursement_type/store_credit_spec.rb b/core/spec/models/spree/reimbursement_type/store_credit_spec.rb index ab64418a176..d4ff9aad952 100644 --- a/core/spec/models/spree/reimbursement_type/store_credit_spec.rb +++ b/core/spec/models/spree/reimbursement_type/store_credit_spec.rb @@ -1,18 +1,18 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe ReimbursementType::StoreCredit do - let(:reimbursement) { create(:reimbursement, return_items_count: 2) } - let(:return_item) { reimbursement.return_items.first } - let(:return_item2) { reimbursement.return_items.last } - let(:payment) { reimbursement.order.payments.first } - let(:simulate) { false } - let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) } - - let!(:primary_credit_type) { create(:primary_credit_type) } - let(:created_by_user) { create(:user, email: 'user@email.com') } + let(:reimbursement) { create(:reimbursement, return_items_count: 2) } + let(:return_item) { reimbursement.return_items.first } + let(:return_item2) { reimbursement.return_items.last } + let(:payment) { reimbursement.order.payments.first } + let(:simulate) { false } + let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) } + + let!(:primary_credit_type) { create(:primary_credit_type) } + let(:created_by_user) { create(:user, email: "user@email.com") } let!(:default_reimbursement_category) { create(:store_credit_category, :reimbursement) } subject { Spree::ReimbursementType::StoreCredit.reimburse(reimbursement, [return_item, return_item2], simulate, created_by: created_by_user) } @@ -21,69 +21,69 @@ module Spree reimbursement.update!(total: reimbursement.calculated_total) end - describe '.reimburse' do - context 'simulate is true' do + describe ".reimburse" do + context "simulate is true" do let(:simulate) { true } - context 'for store credits that the customer used' do + context "for store credits that the customer used" do before do expect(Spree::ReimbursementType::StoreCredit).to receive(:store_credit_payments).and_return([payment]) end - it 'creates readonly refunds for all store credit payments' do + it "creates readonly refunds for all store credit payments" do expect(subject.map(&:class)).to eq [Spree::Refund] expect(subject.map(&:readonly?)).to eq [true] end - it 'does not save to the database' do + it "does not save to the database" do expect { subject }.to_not change { payment.refunds.count } end end - context 'for return items that were not paid for with store credit' do + context "for return items that were not paid for with store credit" do before do expect(Spree::ReimbursementType::StoreCredit).to receive(:store_credit_payments).and_return([]) end - context 'creates one readonly lump credit for all outstanding balance payable to the customer' do - it 'creates a credit that is read only' do + context "creates one readonly lump credit for all outstanding balance payable to the customer" do + it "creates a credit that is read only" do expect(subject.map(&:class)).to eq [Spree::Reimbursement::Credit] expect(subject.map(&:readonly?)).to eq [true] end - it 'creates a credit which amounts to the sum of the return items rounded down' do + it "creates a credit which amounts to the sum of the return items rounded down" do expect(return_item).to receive(:total).and_return(10.0076) expect(return_item2).to receive(:total).and_return(10.0023) expect(subject.sum(&:amount)).to eq 20.0 end end - it 'does not save to the database' do + it "does not save to the database" do expect { subject }.to_not change { Spree::Reimbursement::Credit.count } end end end - context 'simulate is false' do + context "simulate is false" do let(:simulate) { false } - context 'for store credits that the customer used' do + context "for store credits that the customer used" do before do expect(Spree::ReimbursementType::StoreCredit).to receive(:store_credit_payments).and_return([payment]) end - it 'performs refunds for all store credit payments' do + it "performs refunds for all store credit payments" do expect { subject }.to change { payment.refunds.count }.by(1) expect(payment.refunds.sum(:amount)).to eq reimbursement.return_items.to_a.sum(&:total) end end - context 'for return items that were not paid for with store credit' do + context "for return items that were not paid for with store credit" do before do expect(Spree::ReimbursementType::StoreCredit).to receive(:store_credit_payments).and_return([]) end - it 'creates one lump credit for all outstanding balance payable to the customer' do + it "creates one lump credit for all outstanding balance payable to the customer" do expect { subject }.to change { Spree::Reimbursement::Credit.count }.by(1) expect(subject.sum(&:amount)).to eq reimbursement.return_items.to_a.sum(&:total) end @@ -96,7 +96,7 @@ module Spree context 'without a user with email address "solidus@example.com" in the database' do before do default_user = Spree::LegacyUser.find_by(email: "solidus@example.com") - default_user.destroy if default_user + default_user&.destroy end it "creates a store credit with the same currency as the reimbursement's order" do diff --git a/core/spec/models/spree/return_authorization_spec.rb b/core/spec/models/spree/return_authorization_spec.rb index 7716eb71cad..f8c70f2f960 100644 --- a/core/spec/models/spree/return_authorization_spec.rb +++ b/core/spec/models/spree/return_authorization_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::ReturnAuthorization, type: :model do let(:order) { create(:shipped_order) } @@ -25,25 +25,25 @@ end context "an inventory unit is already being exchanged" do - let(:order) { create(:shipped_order, line_items_count: 2) } - let!(:previous_exchange_return_item) { create(:exchange_return_item, inventory_unit: order.inventory_units.last) } - let(:return_item) { create(:return_item, inventory_unit: order.inventory_units.last) } - let(:return_authorization) { build(:return_authorization, order:, return_items: [return_item]) } + let(:order) { create(:shipped_order, line_items_count: 2) } + let!(:previous_exchange_return_item) { create(:exchange_return_item, inventory_unit: order.inventory_units.last) } + let(:return_item) { create(:return_item, inventory_unit: order.inventory_units.last) } + let(:return_authorization) { build(:return_authorization, order:, return_items: [return_item]) } it "should be invalid" do return_authorization.save - expect(return_authorization.errors['base']).to include('Return items cannot be created for inventory units that are already awaiting exchange.') + expect(return_authorization.errors["base"]).to include("Return items cannot be created for inventory units that are already awaiting exchange.") end end context "an inventory unit is not being exchanged" do - let(:order) { create(:shipped_order, line_items_count: 2) } - let(:return_item) { create(:return_item, inventory_unit: order.inventory_units.last) } - let(:return_authorization) { build(:return_authorization, order:, return_items: [return_item]) } + let(:order) { create(:shipped_order, line_items_count: 2) } + let(:return_item) { create(:return_item, inventory_unit: order.inventory_units.last) } + let(:return_authorization) { build(:return_authorization, order:, return_items: [return_item]) } it "is valid" do return_authorization.save - expect(return_authorization.errors['base'].size).to eq 0 + expect(return_authorization.errors["base"].size).to eq 0 end end end @@ -51,11 +51,11 @@ describe ".before_create" do describe "#generate_number" do context "number is assigned" do - let(:return_authorization) { Spree::ReturnAuthorization.new(number: '123') } + let(:return_authorization) { Spree::ReturnAuthorization.new(number: "123") } it "should return the assigned number" do return_authorization.save - expect(return_authorization.number).to eq('123') + expect(return_authorization.number).to eq("123") end end @@ -166,7 +166,7 @@ end end - describe 'cancel_return_items' do + describe "cancel_return_items" do let(:return_authorization) { create(:return_authorization, return_items:) } let(:return_items) { [return_item] } let(:return_item) { create(:return_item) } @@ -175,49 +175,49 @@ return_authorization.cancel! } - it 'cancels the associated return items' do + it "cancels the associated return items" do subject - expect(return_item.reception_status).to eq 'cancelled' + expect(return_item.reception_status).to eq "cancelled" end - context 'some return items cannot be cancelled' do + context "some return items cannot be cancelled" do let(:return_items) { [return_item, return_item_2] } - let(:return_item_2) { create(:return_item, reception_status: 'received') } + let(:return_item_2) { create(:return_item, reception_status: "received") } - it 'cancels those that can be cancelled' do + it "cancels those that can be cancelled" do subject - expect(return_item.reception_status).to eq 'cancelled' - expect(return_item_2.reception_status).to eq 'received' + expect(return_item.reception_status).to eq "cancelled" + expect(return_item_2.reception_status).to eq "received" end end end - describe '#can_cancel?' do + describe "#can_cancel?" do subject { create(:return_authorization, return_items:).can_cancel? } let(:return_items) { [return_item_1, return_item_2] } let(:return_item_1) { create(:return_item) } let(:return_item_2) { create(:return_item) } - context 'all items can be cancelled' do - it 'returns true' do + context "all items can be cancelled" do + it "returns true" do expect(subject).to eq true end end - context 'at least one return item can be cancelled' do - let(:return_item_2) { create(:return_item, reception_status: 'received') } + context "at least one return item can be cancelled" do + let(:return_item_2) { create(:return_item, reception_status: "received") } it { is_expected.to eq true } end - context 'no items can be cancelled' do - let(:return_item_1) { create(:return_item, reception_status: 'received') } - let(:return_item_2) { create(:return_item, reception_status: 'received') } + context "no items can be cancelled" do + let(:return_item_1) { create(:return_item, reception_status: "received") } + let(:return_item_2) { create(:return_item, reception_status: "received") } it { is_expected.to eq false } end - context 'when return_authorization has no return_items' do + context "when return_authorization has no return_items" do let(:return_items) { [] } it { is_expected.to eq true } diff --git a/core/spec/models/spree/return_item/eligibility_validator/default_spec.rb b/core/spec/models/spree/return_item/eligibility_validator/default_spec.rb index d5a617f1f1e..34b0e4d4af9 100644 --- a/core/spec/models/spree/return_item/eligibility_validator/default_spec.rb +++ b/core/spec/models/spree/return_item/eligibility_validator/default_spec.rb @@ -1,19 +1,19 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::ReturnItem::EligibilityValidator::Default, type: :model do let(:return_item) { create(:return_item) } let(:validator) { Spree::ReturnItem::EligibilityValidator::Default.new(return_item) } let(:time_eligibility_class) { double("TimeEligibilityValidatorClass") } - let(:rma_eligibility_class) { double("RMAEligibilityValidatorClass") } + let(:rma_eligibility_class) { double("RMAEligibilityValidatorClass") } let(:time_eligibility_instance) { double(errors: time_error) } - let(:rma_eligibility_instance) { double(errors: rma_error) } + let(:rma_eligibility_instance) { double(errors: rma_error) } let(:time_error) { {} } - let(:rma_error) { {} } + let(:rma_error) { {} } before do validator.permitted_eligibility_validators = [time_eligibility_class, rma_eligibility_class] @@ -65,14 +65,14 @@ end context "the validators have errors" do - let(:time_error) { { time: time_error_text } } - let(:rma_error) { { rma: rma_error_text } } + let(:time_error) { {time: time_error_text} } + let(:rma_error) { {rma: rma_error_text} } let(:time_error_text) { "Time eligibility error" } - let(:rma_error_text) { "RMA eligibility error" } + let(:rma_error_text) { "RMA eligibility error" } it "gathers all errors from permitted eligibility validators into a single errors hash" do - expect(subject).to eq({ time: time_error_text, rma: rma_error_text }) + expect(subject).to eq({time: time_error_text, rma: rma_error_text}) end end end diff --git a/core/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb b/core/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb index b2a815907d7..76b3c91711c 100644 --- a/core/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +++ b/core/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::ReturnItem::EligibilityValidator::InventoryShipped do let(:return_item) { create(:return_item) } - let(:validator) { Spree::ReturnItem::EligibilityValidator::InventoryShipped.new(return_item) } + let(:validator) { Spree::ReturnItem::EligibilityValidator::InventoryShipped.new(return_item) } describe "#eligible_for_return?" do before { allow(return_item.inventory_unit).to receive(:shipped?).and_return(true) } @@ -26,7 +26,7 @@ it "sets an error" do subject - expect(validator.errors[:inventory_unit_shipped]).to eq I18n.t('spree.return_item_inventory_unit_ineligible') + expect(validator.errors[:inventory_unit_shipped]).to eq I18n.t("spree.return_item_inventory_unit_ineligible") end end end @@ -40,7 +40,7 @@ validator.eligible_for_return? end - it 'returns true if errors were added' do + it "returns true if errors were added" do expect(subject).to eq true end end @@ -51,7 +51,7 @@ validator.eligible_for_return? end - it 'returns false if no errors were added' do + it "returns false if no errors were added" do expect(subject).to eq false end end diff --git a/core/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb b/core/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb index 72bcec9c238..b18f1f7f75a 100644 --- a/core/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +++ b/core/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::ReturnItem::EligibilityValidator::NoReimbursements do let(:validator) { Spree::ReturnItem::EligibilityValidator::NoReimbursements.new(return_item) } @@ -10,7 +10,7 @@ context "inventory unit has already been reimbursed" do let(:reimbursement) { create(:reimbursement) } - let(:return_item) { reimbursement.return_items.last } + let(:return_item) { reimbursement.return_items.last } it "returns false" do expect(subject).to eq false @@ -18,7 +18,7 @@ it "sets an error" do subject - expect(validator.errors[:inventory_unit_reimbursed]).to eq I18n.t('spree.return_item_inventory_unit_reimbursed') + expect(validator.errors[:inventory_unit_reimbursed]).to eq I18n.t("spree.return_item_inventory_unit_reimbursed") end context "but the return item has been expired" do @@ -60,13 +60,13 @@ context "not eligible for return" do let(:reimbursement) { create(:reimbursement) } - let(:return_item) { reimbursement.return_items.last } + let(:return_item) { reimbursement.return_items.last } before do validator.eligible_for_return? end - it 'returns true if errors were added' do + it "returns true if errors were added" do expect(subject).to eq true end end @@ -78,7 +78,7 @@ validator.eligible_for_return? end - it 'returns false if no errors were added' do + it "returns false if no errors were added" do expect(subject).to eq false end end diff --git a/core/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb b/core/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb index fea8c0ecf8f..30a4a269c2a 100644 --- a/core/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +++ b/core/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::ReturnItem::EligibilityValidator::OrderCompleted do - let(:shipment) { create(:shipment, order:) } + let(:shipment) { create(:shipment, order:) } let(:inventory_unit) { create(:inventory_unit, shipment:) } - let(:return_item) { create(:return_item, inventory_unit:) } - let(:validator) { Spree::ReturnItem::EligibilityValidator::OrderCompleted.new(return_item) } + let(:return_item) { create(:return_item, inventory_unit:) } + let(:validator) { Spree::ReturnItem::EligibilityValidator::OrderCompleted.new(return_item) } describe "#eligible_for_return?" do subject { validator.eligible_for_return? } @@ -28,7 +28,7 @@ it "sets an error" do subject - expect(validator.errors[:order_not_completed]).to eq I18n.t('spree.return_item_order_not_completed') + expect(validator.errors[:order_not_completed]).to eq I18n.t("spree.return_item_order_not_completed") end end end diff --git a/core/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb b/core/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb index 781bac863f0..ec10a45704a 100644 --- a/core/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +++ b/core/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::ReturnItem::EligibilityValidator::RMARequired, type: :model do let(:return_item) { create(:return_item) } @@ -24,7 +24,7 @@ it "sets an error" do subject - expect(validator.errors[:rma_required]).to eq I18n.t('spree.return_item_rma_ineligible') + expect(validator.errors[:rma_required]).to eq I18n.t("spree.return_item_rma_ineligible") end end end diff --git a/core/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb b/core/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb index d4d5dba3f9a..5252a8142c1 100644 --- a/core/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +++ b/core/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::ReturnItem::EligibilityValidator::TimeSincePurchase, type: :model do include ActiveSupport::Testing::TimeHelpers @@ -14,9 +14,9 @@ let(:interval) { Spree::Config[:return_eligibility_number_of_days] } before do - allow(return_item). - to receive_message_chain('inventory_unit.order.completed_at'). - and_return(completed_at) + allow(return_item) + .to receive_message_chain("inventory_unit.order.completed_at") + .and_return(completed_at) end around(:each) do |e| @@ -35,7 +35,7 @@ it "sets an error" do subject - expect(validator.errors[:number_of_days]).to eq I18n.t('spree.return_item_time_period_ineligible') + expect(validator.errors[:number_of_days]).to eq I18n.t("spree.return_item_time_period_ineligible") end end end diff --git a/core/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb b/core/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb index 1ec3a604daa..b18bf23f526 100644 --- a/core/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +++ b/core/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module ReturnItem::ExchangeVariantEligibility diff --git a/core/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb b/core/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb index cd6a789c97d..ce61f7a1757 100644 --- a/core/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +++ b/core/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module ReturnItem::ExchangeVariantEligibility diff --git a/core/spec/models/spree/return_item_spec.rb b/core/spec/models/spree/return_item_spec.rb index 3e335e89796..e7cc68f57d8 100644 --- a/core/spec/models/spree/return_item_spec.rb +++ b/core/spec/models/spree/return_item_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::ReturnItem, type: :model do all_reception_statuses = Spree::ReturnItem.state_machines[:reception_status].states.map(&:name).map(&:to_s) @@ -18,87 +18,87 @@ allow_any_instance_of(Spree::Order).to receive(:return!).and_return(true) end - describe '#receive!' do - let(:now) { Time.current } - let(:order) { create(:shipped_order) } - let(:inventory_unit) { create(:inventory_unit, state: 'shipped') } + describe "#receive!" do + let(:now) { Time.current } + let(:order) { create(:shipped_order) } + let(:inventory_unit) { create(:inventory_unit, state: "shipped") } let!(:customer_return) { create(:customer_return_without_return_items, return_items: [return_item], stock_location_id: inventory_unit.shipment.stock_location_id) } let(:return_item) { create(:return_item, inventory_unit:) } before do - inventory_unit.update!(state: 'shipped') - return_item.update!(reception_status: 'awaiting') + inventory_unit.update!(state: "shipped") + return_item.update!(reception_status: "awaiting") allow(return_item).to receive(:eligible_for_return?).and_return(true) end subject { return_item.receive! } - it 'returns the inventory unit' do + it "returns the inventory unit" do subject - expect(inventory_unit.reload.state).to eq 'returned' + expect(inventory_unit.reload.state).to eq "returned" end - it 'attempts to accept the return item' do + it "attempts to accept the return item" do expect(return_item).to receive(:attempt_accept) subject end - context 'when there is a received return item with the same inventory unit' do - let!(:return_item_with_dupe_inventory_unit) { create(:return_item, inventory_unit:, reception_status: 'received') } + context "when there is a received return item with the same inventory unit" do + let!(:return_item_with_dupe_inventory_unit) { create(:return_item, inventory_unit:, reception_status: "received") } before do expect { subject }.to raise_error { StateMachines::InvalidTransition } end - it 'does not receive the return item' do - expect(return_item.reception_status).to eq 'awaiting' + it "does not receive the return item" do + expect(return_item.reception_status).to eq "awaiting" end - it 'adds an error to the return item' do + it "adds an error to the return item" do expect(return_item.errors[:inventory_unit]).to include "#{return_item.inventory_unit_id} has already been taken by return item #{return_item_with_dupe_inventory_unit.id}" end end - context 'when the received item is actually the exchange (aka customer changed mind about exchange)' do - let(:exchange_inventory_unit) { create(:inventory_unit, state: 'shipped') } + context "when the received item is actually the exchange (aka customer changed mind about exchange)" do + let(:exchange_inventory_unit) { create(:inventory_unit, state: "shipped") } let!(:return_item_with_exchange) { create(:return_item, inventory_unit:, exchange_inventory_unit:) } let!(:return_item_in_lieu) { create(:return_item, inventory_unit: exchange_inventory_unit) } - it 'unexchanges original return item' do + it "unexchanges original return item" do return_item_in_lieu.receive! return_item_with_exchange.reload return_item_in_lieu.reload - expect(return_item_with_exchange.reception_status).to eq 'unexchanged' - expect(return_item_in_lieu.reception_status).to eq 'received' + expect(return_item_with_exchange.reception_status).to eq "unexchanged" + expect(return_item_in_lieu.reception_status).to eq "received" expect(return_item_in_lieu.amount).to eq 0 - expect(inventory_unit.reload.state).to eq 'shipped' - expect(exchange_inventory_unit.reload.state).to eq 'returned' + expect(inventory_unit.reload.state).to eq "shipped" + expect(exchange_inventory_unit.reload.state).to eq "returned" end end - context 'with a stock location' do + context "with a stock location" do let(:stock_location) { customer_return.stock_location } let(:stock_item) { stock_location.stock_item(inventory_unit.variant) } before do - inventory_unit.update!(state: 'shipped') - return_item.update!(reception_status: 'awaiting') + inventory_unit.update!(state: "shipped") + return_item.update!(reception_status: "awaiting") stock_location.update!(restock_inventory: true) end - it 'increases the count on hand' do + it "increases the count on hand" do expect { subject }.to change { stock_item.reload.count_on_hand }.by(1) end - context 'when variant does not track inventory' do + context "when variant does not track inventory" do before do - inventory_unit.update!(state: 'shipped') + inventory_unit.update!(state: "shipped") inventory_unit.variant.update!(track_inventory: false) - return_item.update!(reception_status: 'awaiting') + return_item.update!(reception_status: "awaiting") end - it 'does not increase the count on hand' do + it "does not increase the count on hand" do expect { subject }.to_not change { stock_item.reload.count_on_hand } end end @@ -108,7 +108,7 @@ stock_location.update!(restock_inventory: false) end - it 'does not increase the count on hand' do + it "does not increase the count on hand" do expect { subject }.to_not change { stock_item.reload.count_on_hand } end end @@ -128,14 +128,14 @@ context "when the item was #{status}" do before { return_item.update!(reception_status: status) } - it 'processes the inventory unit' do + it "processes the inventory unit" do subject - expect(return_item.inventory_unit.reload.state).to eq('returned') + expect(return_item.inventory_unit.reload.state).to eq("returned") end - it 'return remains accepted' do + it "return remains accepted" do subject - expect(return_item.acceptance_status).to eq('accepted') + expect(return_item.acceptance_status).to eq("accepted") end end end @@ -188,13 +188,13 @@ subject { Spree::ReturnItem.from_inventory_unit(inventory_unit) } context "with a cancelled return item" do - let!(:return_item) { create(:return_item, inventory_unit:, reception_status: 'cancelled') } + let!(:return_item) { create(:return_item, inventory_unit:, reception_status: "cancelled") } it { is_expected.not_to be_persisted } end - context 'with a expired item' do - let!(:return_item) { create(:return_item, inventory_unit:, reception_status: 'expired') } + context "with a expired item" do + let!(:return_item) { create(:return_item, inventory_unit:, reception_status: "expired") } it { is_expected.not_to be_persisted } end @@ -213,7 +213,7 @@ expect(return_item).to be_awaiting end - context 'when transitioning to :received' do + context "when transitioning to :received" do let(:return_item) { create(:return_item) } subject { return_item.receive! } @@ -221,7 +221,7 @@ # send to the callback methods that interferes with rspec-mocks. around { |e| without_partial_double_verification { e.call } } - it 'calls #attempt_accept, #check_unexchange, and #process_inventory_unit!' do + it "calls #attempt_accept, #check_unexchange, and #process_inventory_unit!" do expect(return_item).to receive(:attempt_accept) expect(return_item).to receive(:check_unexchange) expect(return_item).to receive(:process_inventory_unit!) @@ -229,10 +229,10 @@ subject end - context 'when the :acceptance_status is in a state that does not support the :attempt_accept event' do + context "when the :acceptance_status is in a state that does not support the :attempt_accept event" do before { return_item.require_manual_intervention! } - it 'only skips the call to :attempt_accept' do + it "only skips the call to :attempt_accept" do expect(return_item).not_to receive(:attempt_accept) expect(return_item).to receive(:check_unexchange) expect(return_item).to receive(:process_inventory_unit!) @@ -254,12 +254,12 @@ describe "#receive" do let(:order) { create(:shipped_order) } let(:inventory_unit) { create(:inventory_unit, shipment: order.shipments.first) } - let(:return_item) { create(:return_item, reception_status: status, inventory_unit:) } + let(:return_item) { create(:return_item, reception_status: status, inventory_unit:) } subject { return_item.receive! } context "awaiting status" do - let(:status) { 'awaiting' } + let(:status) { "awaiting" } before do expect(return_item.inventory_unit).to receive(:return!) @@ -273,7 +273,7 @@ end context "return_item has a reception status of cancelled" do - it_behaves_like "an invalid state transition", 'cancelled', 'received' + it_behaves_like "an invalid state transition", "cancelled", "received" end end @@ -283,7 +283,7 @@ subject { return_item.cancel! } context "awaiting status" do - let(:status) { 'awaiting' } + let(:status) { "awaiting" } before { subject } @@ -292,36 +292,36 @@ end end - (all_reception_statuses - ['awaiting']).each do |invalid_transition_status| + (all_reception_statuses - ["awaiting"]).each do |invalid_transition_status| context "return_item has a reception status of #{invalid_transition_status}" do - it_behaves_like "an invalid state transition", invalid_transition_status, 'cancelled' + it_behaves_like "an invalid state transition", invalid_transition_status, "cancelled" end end end { - give: 'given_to_customer', - lost: 'lost_in_transit', - wrong_item_shipped: 'shipped_wrong_item', - in_transit: 'in_transit', - short_shipped: 'short_shipped' + give: "given_to_customer", + lost: "lost_in_transit", + wrong_item_shipped: "shipped_wrong_item", + in_transit: "in_transit", + short_shipped: "short_shipped" }.each do |transition, status| describe "##{transition}" do let(:return_item) { create(:return_item, reception_status: status, inventory_unit:) } - let(:inventory_unit) { create(:inventory_unit, state: 'shipped') } + let(:inventory_unit) { create(:inventory_unit, state: "shipped") } subject { return_item.public_send("#{transition}!") } context "awaiting status" do before do - return_item.update!(reception_status: 'awaiting') + return_item.update!(reception_status: "awaiting") allow(return_item).to receive(:eligible_for_return?).and_return(true) end - it 'accepts the return' do + it "accepts the return" do subject - expect(return_item.acceptance_status).to eq('accepted') + expect(return_item.acceptance_status).to eq("accepted") end - it 'does not decrease inventory' do + it "does not decrease inventory" do expect(return_item).to_not receive(:process_inventory_unit!) subject end @@ -332,7 +332,7 @@ end end - it_behaves_like "an invalid state transition", 'cancelled', status + it_behaves_like "an invalid state transition", "cancelled", status end end @@ -348,7 +348,7 @@ end context "pending status" do - let(:status) { 'pending' } + let(:status) { "pending" } before do allow(return_item).to receive(:eligible_for_return?).and_return(true) @@ -364,15 +364,15 @@ end end - (all_acceptance_statuses - ['accepted', 'pending']).each do |invalid_transition_status| + (all_acceptance_statuses - ["accepted", "pending"]).each do |invalid_transition_status| context "return_item has an acceptance status of #{invalid_transition_status}" do - it_behaves_like "an invalid state transition", invalid_transition_status, 'accepted' + it_behaves_like "an invalid state transition", invalid_transition_status, "accepted" end end context "not eligible for return" do - let(:status) { 'pending' } - let(:validator_errors) { { number_of_days: "Return Item is outside the eligible time period" } } + let(:status) { "pending" } + let(:validator_errors) { {number_of_days: "Return Item is outside the eligible time period"} } before do allow(return_item).to receive(:eligible_for_return?).and_return(false) @@ -416,7 +416,7 @@ subject { return_item.reject! } context "pending status" do - let(:status) { 'pending' } + let(:status) { "pending" } before { subject } @@ -429,9 +429,9 @@ end end - (all_acceptance_statuses - ['accepted', 'pending', 'manual_intervention_required']).each do |invalid_transition_status| + (all_acceptance_statuses - ["accepted", "pending", "manual_intervention_required"]).each do |invalid_transition_status| context "return_item has an acceptance status of #{invalid_transition_status}" do - it_behaves_like "an invalid state transition", invalid_transition_status, 'rejected' + it_behaves_like "an invalid state transition", invalid_transition_status, "rejected" end end end @@ -442,7 +442,7 @@ subject { return_item.accept! } context "pending status" do - let(:status) { 'pending' } + let(:status) { "pending" } before { subject } @@ -455,9 +455,9 @@ end end - (all_acceptance_statuses - ['accepted', 'pending', 'manual_intervention_required']).each do |invalid_transition_status| + (all_acceptance_statuses - ["accepted", "pending", "manual_intervention_required"]).each do |invalid_transition_status| context "return_item has an acceptance status of #{invalid_transition_status}" do - it_behaves_like "an invalid state transition", invalid_transition_status, 'accepted' + it_behaves_like "an invalid state transition", invalid_transition_status, "accepted" end end end @@ -468,7 +468,7 @@ subject { return_item.require_manual_intervention! } context "pending status" do - let(:status) { 'pending' } + let(:status) { "pending" } before { subject } @@ -481,35 +481,35 @@ end end - (all_acceptance_statuses - ['accepted', 'pending', 'manual_intervention_required']).each do |invalid_transition_status| + (all_acceptance_statuses - ["accepted", "pending", "manual_intervention_required"]).each do |invalid_transition_status| context "return_item has an acceptance status of #{invalid_transition_status}" do - it_behaves_like "an invalid state transition", invalid_transition_status, 'manual_intervention_required' + it_behaves_like "an invalid state transition", invalid_transition_status, "manual_intervention_required" end end end - describe 'validity for reimbursements' do + describe "validity for reimbursements" do let(:return_item) { create(:return_item, acceptance_status:) } - let(:acceptance_status) { 'pending' } + let(:acceptance_status) { "pending" } before { return_item.reimbursement = build(:reimbursement) } subject { return_item } - context 'when acceptance_status is accepted' do - let(:acceptance_status) { 'accepted' } + context "when acceptance_status is accepted" do + let(:acceptance_status) { "accepted" } - it 'is valid' do + it "is valid" do expect(subject).to be_valid end end - context 'when acceptance_status is accepted' do - let(:acceptance_status) { 'pending' } + context "when acceptance_status is accepted" do + let(:acceptance_status) { "pending" } - it 'is valid' do + it "is valid" do expect(subject).to_not be_valid - expect(subject.errors.messages).to eq({ reimbursement: [I18n.t(:cannot_be_associated_unless_accepted, scope: 'activerecord.errors.models.spree/return_item.attributes.reimbursement')] }) + expect(subject.errors.messages).to eq({reimbursement: [I18n.t(:cannot_be_associated_unless_accepted, scope: "activerecord.errors.models.spree/return_item.attributes.reimbursement")]}) end end end @@ -520,11 +520,11 @@ it { expect(subject.part_of_exchange?).to eq true } end context "exchange variant does not exist, but unexchagned sibling does" do - before { expect(subject).to receive(:sibling_intended_for_exchange).with('unexchanged').and_return(true) } + before { expect(subject).to receive(:sibling_intended_for_exchange).with("unexchanged").and_return(true) } it { expect(subject.part_of_exchange?).to eq true } end context "neither exchange variant nor unexchanged sibling exist" do - before { expect(subject).to receive(:sibling_intended_for_exchange).with('unexchanged').and_return(false) } + before { expect(subject).to receive(:sibling_intended_for_exchange).with("unexchanged").and_return(false) } it { expect(subject.part_of_exchange?).to eq false } end end @@ -658,9 +658,9 @@ end end - describe 'inventory_unit uniqueness' do + describe "inventory_unit uniqueness" do let!(:old_return_item) { create(:return_item, reception_status: old_reception_status) } - let(:old_reception_status) { 'awaiting' } + let(:old_reception_status) { "awaiting" } subject do build(:return_item, { @@ -669,42 +669,42 @@ }) end - context 'with other awaiting return items exist for the same inventory unit' do - let(:old_reception_status) { 'awaiting' } + context "with other awaiting return items exist for the same inventory unit" do + let(:old_reception_status) { "awaiting" } - it 'cancels the others' do + it "cancels the others" do expect { subject.save! - }.to change { old_return_item.reload.reception_status }.from('awaiting').to('cancelled') + }.to change { old_return_item.reload.reception_status }.from("awaiting").to("cancelled") end - it 'does not cancel itself' do + it "does not cancel itself" do subject.save! expect(subject).to be_awaiting end end - context 'with other cancelled return items exist for the same inventory unit' do - let(:old_reception_status) { 'cancelled' } + context "with other cancelled return items exist for the same inventory unit" do + let(:old_reception_status) { "cancelled" } - it 'succeeds' do + it "succeeds" do subject.save! end end - context 'with other received return items exist for the same inventory unit' do - let(:old_reception_status) { 'received' } + context "with other received return items exist for the same inventory unit" do + let(:old_reception_status) { "received" } - it 'is invalid' do + it "is invalid" do expect(subject).to_not be_valid expect(subject.errors.to_a).to eq ["Inventory unit #{subject.inventory_unit_id} has already been taken by return item #{old_return_item.id}"] end end - context 'with other given_to_customer return items exist for the same inventory unit' do - let(:old_reception_status) { 'given_to_customer' } + context "with other given_to_customer return items exist for the same inventory unit" do + let(:old_reception_status) { "given_to_customer" } - it 'is invalid' do + it "is invalid" do expect(subject).to_not be_valid expect(subject.errors.to_a).to eq ["Inventory unit #{subject.inventory_unit_id} has already been taken by return item #{old_return_item.id}"] end @@ -712,7 +712,7 @@ end describe "included tax in total" do - let(:inventory_unit) { create(:inventory_unit, state: 'shipped') } + let(:inventory_unit) { create(:inventory_unit, state: "shipped") } let(:return_item) do create( :return_item, @@ -721,7 +721,7 @@ ) end - it 'includes included tax total' do + it "includes included tax total" do expect(return_item.amount).to eq 10 expect(return_item.included_tax_total).to eq 5 expect(return_item.total).to eq 10 @@ -740,7 +740,7 @@ end context "return item has an exchange variant" do - let(:return_item) { create(:exchange_return_item) } + let(:return_item) { create(:exchange_return_item) } let(:exchange_variant) { create(:on_demand_variant, product: return_item.inventory_unit.variant.product) } context "the exchange variant is eligible" do @@ -753,7 +753,7 @@ context "the exchange variant is not eligible" do context "new return item" do - let(:return_item) { create(:return_item) } + let(:return_item) { create(:return_item) } let(:exchange_variant) { create(:variant, product: return_item.inventory_unit.variant.product) } before { return_item.exchange_variant = exchange_variant } diff --git a/core/spec/models/spree/returns_calculator_spec.rb b/core/spec/models/spree/returns_calculator_spec.rb index 474df798f01..f686a2c192d 100644 --- a/core/spec/models/spree/returns_calculator_spec.rb +++ b/core/spec/models/spree/returns_calculator_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe ReturnsCalculator, type: :model do let(:return_item) { build(:return_item) } subject { described_class.new } - it 'compute must be overridden' do + it "compute must be overridden" do expect { subject.compute(return_item) }.to raise_error NotImplementedError diff --git a/core/spec/models/spree/role_spec.rb b/core/spec/models/spree/role_spec.rb index 7d44706c019..f860310e1c8 100644 --- a/core/spec/models/spree/role_spec.rb +++ b/core/spec/models/spree/role_spec.rb @@ -70,8 +70,8 @@ role.destroy aggregate_failures do - expect{ described_class.find(role.id) }.to raise_error(ActiveRecord::RecordNotFound) - expect{ Spree::RolePermission.find(role_permission.id) }.to raise_error(ActiveRecord::RecordNotFound) + expect { described_class.find(role.id) }.to raise_error(ActiveRecord::RecordNotFound) + expect { Spree::RolePermission.find(role_permission.id) }.to raise_error(ActiveRecord::RecordNotFound) end end end diff --git a/core/spec/models/spree/shipment_spec.rb b/core/spec/models/spree/shipment_spec.rb index aaa20cb64da..3bdc44c7a5d 100644 --- a/core/spec/models/spree/shipment_spec.rb +++ b/core/spec/models/spree/shipment_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'benchmark' +require "rails_helper" +require "benchmark" RSpec.describe Spree::Shipment, type: :model do let(:order) { create(:order_ready_to_ship, line_items_count: 1) } @@ -9,7 +9,7 @@ let(:stock_location) { create(:stock_location) } let(:shipment) do order.shipments.create!( - state: 'pending', + state: "pending", cost: 1, inventory_units: order.inventory_units, shipping_rates: [shipping_rate], @@ -36,10 +36,10 @@ end end - it 'is backordered if one if its inventory_units is backordered' do + it "is backordered if one if its inventory_units is backordered" do shipment.inventory_units = [ - build(:inventory_unit, state: 'backordered', shipment: nil), - build(:inventory_unit, state: 'shipped', shipment: nil) + build(:inventory_unit, state: "backordered", shipment: nil), + build(:inventory_unit, state: "shipped", shipment: nil) ] expect(shipment).to be_backordered end @@ -56,43 +56,43 @@ expect(Spree.deprecator).to have_received(:warn).once end - it 'returns canceled if order is canceled?' do + it "returns canceled if order is canceled?" do allow(order).to receive_messages canceled?: true - expect(shipment.determine_state(order)).to eq 'canceled' + expect(shipment.determine_state(order)).to eq "canceled" end - it 'returns canceled if all of the inventory units are canceled' do + it "returns canceled if all of the inventory units are canceled" do shipment.inventory_units.each(&:cancel!) - expect(shipment.determine_state(order)).to eql 'canceled' + expect(shipment.determine_state(order)).to eql "canceled" end - it 'returns pending unless order.can_ship?' do + it "returns pending unless order.can_ship?" do allow(order).to receive_messages can_ship?: false - expect(shipment.determine_state(order)).to eq 'pending' + expect(shipment.determine_state(order)).to eq "pending" end - it 'returns pending if backordered' do + it "returns pending if backordered" do allow(shipment).to receive_messages inventory_units: [mock_model(Spree::InventoryUnit, allow_ship?: false, canceled?: false, shipped?: false)] - expect(shipment.determine_state(order)).to eq 'pending' + expect(shipment.determine_state(order)).to eq "pending" end - it 'returns shipped when already shipped' do - allow(shipment).to receive_messages state: 'shipped' - expect(shipment.determine_state(order)).to eq 'shipped' + it "returns shipped when already shipped" do + allow(shipment).to receive_messages state: "shipped" + expect(shipment.determine_state(order)).to eq "shipped" end - it 'returns pending when unpaid' do + it "returns pending when unpaid" do allow(order).to receive_messages paid?: false - expect(shipment.determine_state(order)).to eq 'pending' + expect(shipment.determine_state(order)).to eq "pending" end - it 'returns ready when paid' do + it "returns ready when paid" do allow(order).to receive_messages paid?: true - expect(shipment.determine_state(order)).to eq 'ready' + expect(shipment.determine_state(order)).to eq "ready" end end - context '#recalculate_state' do + context "#recalculate_state" do subject(:recalculate_state) { shipment.recalculate_state } it "assigns the new state to the shipment" do @@ -167,8 +167,8 @@ let(:order) do create( :order_ready_to_ship, - line_items_attributes: [{ price: 10, variant: }], - ship_address:, + line_items_attributes: [{price: 10, variant:}], + ship_address: ) end @@ -178,19 +178,19 @@ let(:tax_category) { create(:tax_category) } let(:variant) { create(:variant, tax_category:) } - it 'should equal line items final amount with tax' do + it "should equal line items final amount with tax" do expect(shipment.item_cost).to eql(11.0) end end - describe '#total_before_tax' do + describe "#total_before_tax" do before do shipment.update!(cost: 10) end let!(:admin_adjustment) { create(:adjustment, adjustable: shipment, order: shipment.order, amount: -1, source: nil) } let!(:other_adjustment) { create(:adjustment, adjustable: shipment, order: shipment.order, amount: -2, source: nil) } - it 'returns the amount minus any adjustments' do + it "returns the amount minus any adjustments" do expect(shipment.total_before_tax).to eq(10 - 1 - 2) end end @@ -236,28 +236,28 @@ end end - context 'shipping_rates' do + context "shipping_rates" do let(:shipment) { create(:shipment) } let(:shipping_method1) { create(:shipping_method) } let(:shipping_method2) { create(:shipping_method) } let(:shipping_rates) { [ - Spree::ShippingRate.new(shipping_method: shipping_method1, cost: 10.00, selected: true), - Spree::ShippingRate.new(shipping_method: shipping_method2, cost: 20.00) - ] + Spree::ShippingRate.new(shipping_method: shipping_method1, cost: 10.00, selected: true), + Spree::ShippingRate.new(shipping_method: shipping_method2, cost: 20.00) + ] } - it 'returns shipping_method from selected shipping_rate' do + it "returns shipping_method from selected shipping_rate" do shipment.shipping_rates.delete_all shipment.shipping_rates.create shipping_method: shipping_method1, cost: 10.00, selected: true expect(shipment.shipping_method).to eq shipping_method1 end - context 'refresh_rates' do - let(:mock_estimator) { double('estimator', shipping_rates:) } - before { allow(shipment).to receive(:can_get_rates?){ true } } + context "refresh_rates" do + let(:mock_estimator) { double("estimator", shipping_rates:) } + before { allow(shipment).to receive(:can_get_rates?) { true } } - it 'should request new rates, and maintain shipping_method selection' do + it "should request new rates, and maintain shipping_method selection" do expect(Spree::Stock::Estimator).to receive(:new).with(no_args).and_return(mock_estimator) allow(shipment).to receive_messages(shipping_method: shipping_method2) @@ -265,14 +265,14 @@ expect(shipment.reload.selected_shipping_rate.shipping_method_id).to eq(shipping_method2.id) end - it 'should handle no shipping_method selection' do + it "should handle no shipping_method selection" do expect(Spree::Stock::Estimator).to receive(:new).with(no_args).and_return(mock_estimator) allow(shipment).to receive_messages(shipping_method: nil) expect(shipment.refresh_rates).to eq(shipping_rates) expect(shipment.reload.selected_shipping_rate).not_to be_nil end - it 'should not refresh if shipment is shipped' do + it "should not refresh if shipment is shipped" do expect(Spree::Stock::Estimator).not_to receive(:new) shipment.shipping_rates.delete_all allow(shipment).to receive_messages(shipped?: true) @@ -284,15 +284,15 @@ expect(shipment.refresh_rates).to eq([]) end - it 'uses the pluggable estimator class' do + it "uses the pluggable estimator class" do expect(Spree::Config.stock).to receive(:estimator_class).and_call_original shipment.refresh_rates end - context 'to_package' do + context "to_package" do let(:inventory_units) do - [build(:inventory_unit, line_item:, variant:, state: 'on_hand'), - build(:inventory_unit, line_item:, variant:, state: 'backordered')] + [build(:inventory_unit, line_item:, variant:, state: "on_hand"), + build(:inventory_unit, line_item:, variant:, state: "backordered")] end before do @@ -301,13 +301,13 @@ allow(shipment.inventory_units).to receive_message_chain(:includes, :joins).and_return inventory_units end - it 'should use symbols for states when adding contents to package' do + it "should use symbols for states when adding contents to package" do package = shipment.to_package expect(package.on_hand.count).to eq 1 expect(package.backordered.count).to eq 1 end - it 'should set the shipment to itself' do + it "should set the shipment to itself" do expect(shipment.to_package.shipment).to eq(shipment) end end @@ -316,7 +316,7 @@ context "#update_state" do shared_examples_for "immutable once shipped" do - before { shipment.update_columns(state: 'shipped') } + before { shipment.update_columns(state: "shipped") } it "should remain in shipped state once shipped" do expect { @@ -328,10 +328,10 @@ shared_examples_for "pending if backordered" do it "should have a state of pending if backordered" do # Set as ready so we can test for change - shipment.update!(state: 'ready') + shipment.update!(state: "ready") allow(shipment).to receive_messages(inventory_units: [mock_model(Spree::InventoryUnit, allow_ship?: false, canceled?: false, shipped?: false)]) - expect(shipment).to receive(:update_columns).with(state: 'pending', updated_at: kind_of(Time)) + expect(shipment).to receive(:update_columns).with(state: "pending", updated_at: kind_of(Time)) shipment.update_state end end @@ -340,8 +340,8 @@ before { allow(order).to receive_messages can_ship?: false } it "should result in a 'pending' state" do # Set as ready so we can test for change - shipment.update!(state: 'ready') - expect(shipment).to receive(:update_columns).with(state: 'pending', updated_at: kind_of(Time)) + shipment.update!(state: "ready") + expect(shipment).to receive(:update_columns).with(state: "pending", updated_at: kind_of(Time)) shipment.update_state end end @@ -349,11 +349,11 @@ context "when order is paid" do before { allow(order).to receive_messages paid?: true } it "should result in a 'ready' state" do - expect(shipment).to receive(:update_columns).with(state: 'ready', updated_at: kind_of(Time)) + expect(shipment).to receive(:update_columns).with(state: "ready", updated_at: kind_of(Time)) shipment.update_state end - it_should_behave_like 'immutable once shipped' - it_should_behave_like 'pending if backordered' + it_should_behave_like "immutable once shipped" + it_should_behave_like "pending if backordered" end context "when payment is not required" do @@ -362,33 +362,33 @@ end it "should result in a 'ready' state" do - expect(shipment).to receive(:update_columns).with(state: 'ready', updated_at: kind_of(Time)) + expect(shipment).to receive(:update_columns).with(state: "ready", updated_at: kind_of(Time)) shipment.update_state end - it_should_behave_like 'immutable once shipped' - it_should_behave_like 'pending if backordered' + it_should_behave_like "immutable once shipped" + it_should_behave_like "pending if backordered" end context "when order has balance due" do before { allow(order).to receive_messages paid?: false } it "should result in a 'pending' state" do - shipment.state = 'ready' - expect(shipment).to receive(:update_columns).with(state: 'pending', updated_at: kind_of(Time)) + shipment.state = "ready" + expect(shipment).to receive(:update_columns).with(state: "pending", updated_at: kind_of(Time)) shipment.update_state end - it_should_behave_like 'immutable once shipped' - it_should_behave_like 'pending if backordered' + it_should_behave_like "immutable once shipped" + it_should_behave_like "pending if backordered" end context "when order has a credit owed" do - before { allow(order).to receive_messages payment_state: 'credit_owed', paid?: true } + before { allow(order).to receive_messages payment_state: "credit_owed", paid?: true } it "should result in a 'ready' state" do - shipment.state = 'pending' - expect(shipment).to receive(:update_columns).with(state: 'ready', updated_at: kind_of(Time)) + shipment.state = "pending" + expect(shipment).to receive(:update_columns).with(state: "ready", updated_at: kind_of(Time)) shipment.update_state end - it_should_behave_like 'immutable once shipped' - it_should_behave_like 'pending if backordered' + it_should_behave_like "immutable once shipped" + it_should_behave_like "pending if backordered" end context "when shipment state changes to shipped" do @@ -397,7 +397,7 @@ allow(shipment).to receive :after_ship allow(shipment).to receive :update_columns - shipment.state = 'pending' + shipment.state = "pending" expect { shipment.update_state } .to change { shipment.state } @@ -407,7 +407,7 @@ expect(shipment).to have_received(:after_ship).once expect(shipment) .to have_received(:update_columns) - .with(state: 'shipped', updated_at: kind_of(Time)) + .with(state: "shipped", updated_at: kind_of(Time)) end # Regression test for https://github.com/spree/spree/issues/4347 @@ -449,16 +449,16 @@ end context "#cancel" do - it 'cancels the shipment' do - shipment.state = 'pending' + it "cancels the shipment" do + shipment.state = "pending" without_partial_double_verification do expect(shipment).to receive(:after_cancel) end shipment.cancel! - expect(shipment.state).to eq 'canceled' + expect(shipment.state).to eq "canceled" end - it 'restocks the items' do + it "restocks the items" do variant = shipment.inventory_units.first.variant shipment.stock_location = mock_model(Spree::StockLocation) expect(shipment.stock_location).to receive(:restock).with(variant, 1, shipment) @@ -497,13 +497,13 @@ context "#resume" do let(:inventory_unit) { create(:inventory_unit) } - before { shipment.state = 'canceled' } + before { shipment.state = "canceled" } context "when order cannot ship" do before { allow(order).to receive_messages(can_ship?: false) } it "should result in a 'pending' state" do shipment.resume! - expect(shipment.state).to eq 'pending' + expect(shipment.state).to eq "pending" end end @@ -511,7 +511,7 @@ before { allow(order).to receive_messages(paid?: false) } it "should result in a 'ready' state" do shipment.resume! - expect(shipment.state).to eq 'pending' + expect(shipment.state).to eq "pending" end end @@ -519,7 +519,7 @@ before { allow_any_instance_of(Spree::InventoryUnit).to receive(:allow_ship?).and_return(false) } it "should result in a 'ready' state" do shipment.resume! - expect(shipment.state).to eq 'pending' + expect(shipment.state).to eq "pending" end end @@ -532,11 +532,11 @@ it "should result in a 'ready' state" do shipment.resume! - expect(shipment.state).to eq 'ready' + expect(shipment.state).to eq "ready" end end - it 'unstocks them items' do + it "unstocks them items" do variant = shipment.inventory_units.first.variant shipment.stock_location = mock_model(Spree::StockLocation) expect(shipment.stock_location).to receive(:unstock).with(variant, 1, shipment) @@ -546,18 +546,18 @@ context "#ship" do context "when the shipment is canceled" do - let(:address){ create(:address) } - let(:order){ create(:order_with_line_items, ship_address: address) } - let(:shipment_with_inventory_units) { create(:shipment, order:, state: 'canceled') } + let(:address) { create(:address) } + let(:order) { create(:order_with_line_items, ship_address: address) } + let(:shipment_with_inventory_units) { create(:shipment, order:, state: "canceled") } let(:subject) { shipment_with_inventory_units.ship! } - it 'unstocks them items' do + it "unstocks them items" do expect(shipment_with_inventory_units.stock_location).to receive(:unstock).with(an_instance_of(Spree::Variant), 1, shipment_with_inventory_units) subject end end - ['ready', 'canceled'].each do |state| + ["ready", "canceled"].each do |state| context "from #{state}" do before do allow(shipment).to receive_messages(state:) @@ -605,11 +605,11 @@ shipment_cost: 10, shipping_method: ten_dollar_shipping_method, line_items_count: 1, - line_items_price: 100, + line_items_price: 100 ) end - let(:ten_dollar_shipping_method) { create(:shipping_method, tax_category:, zones: [tax_zone], cost: 10) } + let(:ten_dollar_shipping_method) { create(:shipping_method, tax_category:, zones: [tax_zone], cost: 10) } let(:twenty_dollar_shipping_method) { create(:shipping_method, tax_category:, zones: [tax_zone], cost: 20) } let(:shipment) { order.shipments[0] } @@ -619,23 +619,23 @@ end it "updates everything around order shipment total and state" do - expect(shipment.state).to eq 'ready' + expect(shipment.state).to eq "ready" expect(shipment.cost).to eq 10 expect(shipment.additional_tax_total).to eq 1 expect(order.shipment_total).to eq 10 expect(order.total).to eq 121 # shipment: 10 + 1 (tax) + line item: 100 + 10 (tax) - expect(order.payment_state).to eq 'paid' + expect(order.payment_state).to eq "paid" shipment.update_attributes_and_order selected_shipping_rate_id: twenty_dollar_shipping_rate.id - expect(shipment.state).to eq 'pending' + expect(shipment.state).to eq "pending" expect(shipment.cost).to eq 20 expect(shipment.additional_tax_total).to eq 2 expect(order.shipment_total).to eq 20 expect(order.total).to eq 132 # shipment: 20 + 2 (tax) + line item: 100 + 10 (tax) - expect(order.payment_state).to eq 'balance_due' + expect(order.payment_state).to eq "balance_due" end end @@ -688,14 +688,14 @@ let(:inventory_units) { double } let(:params) do - { variant_id: variant.id, state: 'on_hand', line_item_id: line_item.id } + {variant_id: variant.id, state: "on_hand", line_item_id: line_item.id} end before { allow(shipment).to receive_messages(inventory_units:) } it "associates variant and order" do expect(inventory_units).to receive(:create).with(params) - shipment.set_up_inventory('on_hand', variant, order, line_item) + shipment.set_up_inventory("on_hand", variant, order, line_item) end end @@ -714,8 +714,8 @@ shipment.destroy - expect{ shipping_rate.reload }.to raise_error(ActiveRecord::RecordNotFound) - expect{ shipping_rate_tax.reload }.to raise_error(ActiveRecord::RecordNotFound) + expect { shipping_rate.reload }.to raise_error(ActiveRecord::RecordNotFound) + expect { shipping_rate_tax.reload }.to raise_error(ActiveRecord::RecordNotFound) end end @@ -733,8 +733,8 @@ expect(shipment.ready!).to be true expect(shipment.state_changes.count).to eq(1) state_change = shipment.state_changes.first - expect(state_change.previous_state).to eq('pending') - expect(state_change.next_state).to eq('ready') + expect(state_change.previous_state).to eq("pending") + expect(state_change.next_state).to eq("ready") end end end @@ -752,18 +752,18 @@ before { allow(order).to receive_messages paid?: true } - it 'proceeds automatically to shipped state' do + it "proceeds automatically to shipped state" do unshippable_shipment.ready! - expect(unshippable_shipment.state).to eq('shipped') + expect(unshippable_shipment.state).to eq("shipped") end - it 'does not send a confirmation email' do + it "does not send a confirmation email" do expect { unshippable_shipment.ready! unshippable_shipment.inventory_units.reload.each do |unit| - expect(unit.state).to eq('shipped') + expect(unit.state).to eq("shipped") end - }.not_to change{ ActionMailer::Base.deliveries.count } + }.not_to change { ActionMailer::Base.deliveries.count } end end @@ -783,14 +783,14 @@ it "cannot be destroyed when shipped" do shipment = create(:shipment, state: "shipped") expect(shipment.destroy).to eq false - expect(shipment.errors.full_messages.join).to match /Cannot destroy/ + expect(shipment.errors.full_messages.join).to match(/Cannot destroy/) expect { shipment.reload }.not_to raise_error end it "cannot be destroyed when canceled" do shipment = create(:shipment, state: "canceled") expect(shipment.destroy).to eq false - expect(shipment.errors.full_messages.join).to match /Cannot destroy/ + expect(shipment.errors.full_messages.join).to match(/Cannot destroy/) expect { shipment.reload }.not_to raise_error end end @@ -839,9 +839,9 @@ describe ".by_store" do it "returns shipments by store" do - olivanders_store = create(:store, name: 'Olivanders') + olivanders_store = create(:store, name: "Olivanders") wizard_shipment = create(:shipment, order: create(:order, store: olivanders_store)) - create(:shipment, order: build(:order, store: create(:store, name: 'Target'))) + create(:shipment, order: build(:order, store: create(:store, name: "Target"))) shipments = Spree::Shipment.by_store(olivanders_store) @@ -851,34 +851,34 @@ end end - describe '#selected_shipping_rate_id=' do + describe "#selected_shipping_rate_id=" do let!(:air_shipping_method) { create(:shipping_method, name: "Air") } let(:new_rate) { shipment.shipping_rates.create!(shipping_method: air_shipping_method) } - context 'selecting the same id' do - it 'keeps the same shipping rate selected' do + context "selecting the same id" do + it "keeps the same shipping rate selected" do expect { shipment.selected_shipping_rate_id = shipping_rate.id }.not_to change { shipping_rate.selected }.from(true) end end - context 'when the id exists' do - it 'sets the new shipping rate as selected' do + context "when the id exists" do + it "sets the new shipping rate as selected" do expect { shipment.selected_shipping_rate_id = new_rate.id }.to change { new_rate.selected }.from(false).to(true) end - it 'sets the old shipping rate as not selected' do + it "sets the old shipping rate as not selected" do expect { shipment.selected_shipping_rate_id = new_rate.id }.to change { shipping_rate.selected }.from(true).to(false) end end - context 'when the id does not exist' do - it 'raises a RecordNotFound error' do + context "when the id does not exist" do + it "raises a RecordNotFound error" do expect { shipment.selected_shipping_rate_id = -1 }.to raise_error(ArgumentError) @@ -910,7 +910,7 @@ end end - describe '#can_transition_from_pending_to_ready?' do + describe "#can_transition_from_pending_to_ready?" do let(:shipment) { create(:shipment, order:) } subject { shipment.can_transition_from_pending_to_ready? } @@ -940,8 +940,8 @@ end end - describe '#cartons' do - let(:carton) { create(:carton) } + describe "#cartons" do + let(:carton) { create(:carton) } let(:shipment) { carton.shipments.first } subject { shipment.cartons } @@ -954,31 +954,31 @@ describe "state change tracking" do it "enqueues a StateChangeTrackingJob when state changes" do expect { - shipment.update!(state: 'shipped') + shipment.update!(state: "shipped") }.to have_enqueued_job(Spree::StateChangeTrackingJob).with( shipment, - 'pending', - 'shipped', + "pending", + "shipped", kind_of(Time) ) end it "does not enqueue job when state doesn't change" do expect { - shipment.update!(tracking: 'abcd') + shipment.update!(tracking: "abcd") }.not_to have_enqueued_job(Spree::StateChangeTrackingJob) end it "captures the transition timestamp accurately" do before_time = Time.current - shipment.update!(state: 'shipped') + shipment.update!(state: "shipped") # Check that a job was enqueued with a timestamp close to when we made the change expect(Spree::StateChangeTrackingJob).to have_been_enqueued.with do |shipment_id, prev_state, next_state, timestamp| expect(shipment_id).to eq(shipment.id) - expect(prev_state).to eq('pending') - expect(next_state).to eq('shipped') + expect(prev_state).to eq("pending") + expect(next_state).to eq("shipped") expect(timestamp).to be_within(1.second).of(before_time) end end @@ -986,8 +986,8 @@ it "creates multiple state transitions" do clear_enqueued_jobs - shipment.update!(state: 'ready') - shipment.update!(state: 'shipped') + shipment.update!(state: "ready") + shipment.update!(state: "shipped") expect(Spree::StateChangeTrackingJob).to have_been_enqueued.exactly(2).times end @@ -995,16 +995,16 @@ it "creates state change records when job is performed" do perform_enqueued_jobs do expect { - shipment.update!(state: 'shipped') + shipment.update!(state: "shipped") }.to change(Spree::StateChange, :count).by(1) end state_change = Spree::StateChange.last - expect(state_change.previous_state).to eq('pending') - expect(state_change.next_state).to eq('shipped') + expect(state_change.previous_state).to eq("pending") + expect(state_change.next_state).to eq("shipped") expect(state_change.stateful_id).to eq(shipment.id) - expect(state_change.stateful_type).to eq('Spree::Shipment') - expect(state_change.name).to eq('shipment') + expect(state_change.stateful_type).to eq("Spree::Shipment") + expect(state_change.name).to eq("shipment") end end end diff --git a/core/spec/models/spree/shipping_calculator_spec.rb b/core/spec/models/spree/shipping_calculator_spec.rb index 157b0b54ae0..6f7614234b3 100644 --- a/core/spec/models/spree/shipping_calculator_spec.rb +++ b/core/spec/models/spree/shipping_calculator_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe ShippingCalculator, type: :model do @@ -23,22 +23,22 @@ module Spree subject { described_class.new } - it 'computes with a package' do + it "computes with a package" do expect(subject).to receive(:compute_package).with(package) subject.compute(package) end - it 'compute_package must be overridden' do + it "compute_package must be overridden" do expect { subject.compute_package(package) }.to raise_error NotImplementedError end - it 'checks availability for a package' do + it "checks availability for a package" do expect(subject.available?(package)).to be true end - it 'calculates totals for content_items' do + it "calculates totals for content_items" do expect(subject.send(:total, package.contents)).to eq 40.00 end end diff --git a/core/spec/models/spree/shipping_manifest_spec.rb b/core/spec/models/spree/shipping_manifest_spec.rb index c5c9781036d..c62633a26cd 100644 --- a/core/spec/models/spree/shipping_manifest_spec.rb +++ b/core/spec/models/spree/shipping_manifest_spec.rb @@ -1,67 +1,67 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe ShippingManifest, type: :model do let!(:store) { create :store } let(:order) { Order.create! } let(:variant) { create :variant } - let!(:shipment) { create(:shipment, state: 'pending', order:) } + let!(:shipment) { create(:shipment, state: "pending", order:) } subject(:manifest) { described_class.new(inventory_units:) } def build_unit(variant, attrs = {}) - attrs = { variant:, shipment: }.merge(attrs) + attrs = {variant:, shipment:}.merge(attrs) attrs[:line_item] = order.contents.add(variant) InventoryUnit.new(attrs) end describe "#items" do - context 'empty' do + context "empty" do let(:inventory_units) { [] } it "has correct item" do expect(manifest.items.count).to eq 0 end end - context 'single unit' do + context "single unit" do let(:inventory_units) { [build_unit(variant)] } it "has correct item" do expect(manifest.items.count).to eq 1 expect(manifest.items[0]).to have_attributes( variant:, quantity: 1, - states: { "on_hand" => 1 } + states: {"on_hand" => 1} ) end end - context 'two units of same variant' do + context "two units of same variant" do let(:inventory_units) { [build_unit(variant), build_unit(variant)] } it "has correct item" do expect(manifest.items.count).to eq 1 expect(manifest.items[0]).to have_attributes( variant:, quantity: 2, - states: { "on_hand" => 2 } + states: {"on_hand" => 2} ) end end - context 'two units of different variants' do - let(:variant2){ create :variant } + context "two units of different variants" do + let(:variant2) { create :variant } let(:inventory_units) { [build_unit(variant), build_unit(variant2)] } it "has correct item" do expect(manifest.items.count).to eq 2 expect(manifest.items[0]).to have_attributes( variant:, quantity: 1, - states: { "on_hand" => 1 } + states: {"on_hand" => 1} ) expect(manifest.items[1]).to have_attributes( variant: variant2, quantity: 1, - states: { "on_hand" => 1 } + states: {"on_hand" => 1} ) end end @@ -69,7 +69,7 @@ def build_unit(variant, attrs = {}) describe "#for_order" do let!(:order2) { create(:order_with_line_items) } - context 'single unit' do + context "single unit" do let(:inventory_units) { [inventory_unit] } let(:inventory_unit) { build_unit(variant) } @@ -86,7 +86,7 @@ def build_unit(variant, attrs = {}) end end - context 'one units in each order' do + context "one units in each order" do let(:order_2) { build_stubbed(:order) } let(:inventory_units) { [inventory_unit_one, inventory_unit_two] } let(:inventory_unit_one) { build_unit(variant) } diff --git a/core/spec/models/spree/shipping_method_spec.rb b/core/spec/models/spree/shipping_method_spec.rb index fa27cb0288f..9d1e15b1b8d 100644 --- a/core/spec/models/spree/shipping_method_spec.rb +++ b/core/spec/models/spree/shipping_method_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" class DummyShippingCalculator < Spree::ShippingCalculator end @@ -48,7 +48,7 @@ class DummyShippingCalculator < Spree::ShippingCalculator let(:tracking_url) { "https://track-o-matic.com/:tracking" } before { allow(subject).to receive(:tracking_url) { tracking_url } } - context 'tracking number has spaces' do + context "tracking number has spaces" do let(:tracking_numbers) { ["1234 5678 9012 3456", "a bcdef"] } let(:expectations) { %w[https://track-o-matic.com/1234%205678%209012%203456 https://track-o-matic.com/a%20bcdef] } @@ -99,9 +99,9 @@ def matching(categories) end it "should not match both categories" do result = - described_class. - joins(:zones). - with_all_shipping_category_ids([category1.id, category2.id]) + described_class + .joins(:zones) + .with_all_shipping_category_ids([category1.id, category2.id]) expect(result).to be_empty end end @@ -206,43 +206,43 @@ def matching(categories) subject { matches } context "address included in zone" do - let!(:address) { create(:address, country_iso_code: 'US') } + let!(:address) { create(:address, country_iso_code: "US") } it { is_expected.to include(shipping_method) } end context "address included other zone" do - let!(:address) { create(:address, country_iso_code: 'CA') } + let!(:address) { create(:address, country_iso_code: "CA") } it { is_expected.to_not include(shipping_method) } end end - describe '.available_to_store' do + describe ".available_to_store" do let(:store) { create(:store) } let!(:first_shipping_method) { create(:shipping_method, stores: [store]) } let!(:second_shipping_method) { create(:shipping_method, stores: [store]) } subject { described_class.available_to_store(store) } - it 'raises an exception if no store is passed as argument' do + it "raises an exception if no store is passed as argument" do expect { described_class.available_to_store(nil) - }.to raise_exception(ArgumentError, 'You must provide a store') + }.to raise_exception(ArgumentError, "You must provide a store") end - context 'when the store has no shipping methods associated' do + context "when the store has no shipping methods associated" do before { store.shipping_methods = [] } - it 'returns all shipping methods' do + it "returns all shipping methods" do expect(store.shipping_methods).to eq([]) expect(subject).to match_array([first_shipping_method, second_shipping_method]) end end - context 'when the store has shipping methods associated' do + context "when the store has shipping methods associated" do before { create(:shipping_method) } - it 'returns the associated records' do + it "returns the associated records" do expect(store.shipping_methods).to match_array([first_shipping_method, second_shipping_method]) expect(subject).to match_array([first_shipping_method, second_shipping_method]) end diff --git a/core/spec/models/spree/shipping_rate_spec.rb b/core/spec/models/spree/shipping_rate_spec.rb index 58244272d6c..fadf4391092 100644 --- a/core/spec/models/spree/shipping_rate_spec.rb +++ b/core/spec/models/spree/shipping_rate_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::ShippingRate, type: :model do let(:address) { create(:address) } @@ -26,13 +26,13 @@ allow(order).to receive(:tax_address).and_return(order_address) end - context 'with one included tax rate' do + context "with one included tax rate" do let!(:tax_rate) do create :tax_rate, - included_in_price: true, - name: "VAT", - zone: default_zone, - tax_categories: [tax_category] + included_in_price: true, + name: "VAT", + zone: default_zone, + tax_categories: [tax_category] end let(:order_address) { address } @@ -40,7 +40,7 @@ before do shipping_rate.taxes.build( amount: 0.91, - tax_rate:, + tax_rate: ) end @@ -59,13 +59,13 @@ end end - context 'with one additional tax rate' do + context "with one additional tax rate" do let!(:tax_rate) do create :tax_rate, - included_in_price: false, - name: "Sales Tax", - zone: default_zone, - tax_categories: [tax_category] + included_in_price: false, + name: "Sales Tax", + zone: default_zone, + tax_categories: [tax_category] end let(:order_address) { address } @@ -73,7 +73,7 @@ before do shipping_rate.taxes.build( amount: 1.0, - tax_rate:, + tax_rate: ) end @@ -92,22 +92,22 @@ end end - context 'with two additional tax rates' do + context "with two additional tax rates" do let!(:tax_rate) do create :tax_rate, - included_in_price: false, - name: "Sales Tax", - zone: default_zone, - tax_categories: [tax_category] + included_in_price: false, + name: "Sales Tax", + zone: default_zone, + tax_categories: [tax_category] end let!(:other_tax_rate) do create :tax_rate, - included_in_price: false, - name: "Other Sales Tax", - zone: default_zone, - tax_categories: [tax_category], - amount: 0.05 + included_in_price: false, + name: "Other Sales Tax", + zone: default_zone, + tax_categories: [tax_category], + amount: 0.05 end let(:order_address) { address } @@ -115,12 +115,12 @@ before do shipping_rate.taxes.build( amount: 1.0, - tax_rate:, + tax_rate: ) shipping_rate.taxes.build( amount: 0.5, - tax_rate: other_tax_rate, + tax_rate: other_tax_rate ) end @@ -161,7 +161,7 @@ shipping_method.code = "THE_CODE" end - it 'should be shipping_method.code' do + it "should be shipping_method.code" do expect(shipping_rate.shipping_method_code).to eq("THE_CODE") end end diff --git a/core/spec/models/spree/shipping_rate_tax_spec.rb b/core/spec/models/spree/shipping_rate_tax_spec.rb index 7e69d1c6af4..c7540bb976d 100644 --- a/core/spec/models/spree/shipping_rate_tax_spec.rb +++ b/core/spec/models/spree/shipping_rate_tax_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe ShippingRateTax, type: :model do @@ -10,34 +10,34 @@ module Spree it { is_expected.to respond_to(:tax_rate) } it { is_expected.to respond_to(:shipping_rate) } - describe 'absolute_amount' do + describe "absolute_amount" do subject(:shipping_rate_tax) { described_class.new(amount:).absolute_amount } - context 'with a negative amount' do + context "with a negative amount" do let(:amount) { -19 } it { is_expected.to eq(19) } end - context 'with a positive amount' do + context "with a positive amount" do let(:amount) { 19 } it { is_expected.to eq(19) } end end - describe 'display_absolute_amount' do + describe "display_absolute_amount" do subject(:shipping_rate_tax) { described_class.new(amount: 10).display_absolute_amount.to_s } it { is_expected.to eq("$10.00") } end - describe '#currency' do + describe "#currency" do subject(:shipping_rate_tax) { described_class.new(amount: 10, shipping_rate:).currency } - context 'when we have a shipping rate' do + context "when we have a shipping rate" do let(:shipping_rate) { build_stubbed(:shipping_rate) } - it 'delegates the call to the shipment' do + it "delegates the call to the shipment" do expect(shipping_rate).to receive(:currency) subject end @@ -46,31 +46,31 @@ module Spree context "when we don't have a shipping rate" do let(:shipping_rate) { nil } - it 'is nil' do + it "is nil" do expect(subject).to eq(nil) end end end - describe '#label' do + describe "#label" do subject(:shipping_rate_tax) { described_class.new(amount:, tax_rate:).label } - context 'with an included tax rate' do + context "with an included tax rate" do let(:tax_rate) { build_stubbed(:tax_rate, included_in_price: true, name: "VAT") } - context 'with a positive amount' do + context "with a positive amount" do let(:amount) { 2.2 } - it 'labels an included tax' do + it "labels an included tax" do expect(subject).to eq("incl. $2.20 VAT") end end end - context 'with an additional tax rate' do + context "with an additional tax rate" do let(:tax_rate) { build_stubbed(:tax_rate, included_in_price: false, name: "Sales Tax") } let(:amount) { 2.2 } - it 'labels an additional tax' do + it "labels an additional tax" do expect(subject).to eq("+ $2.20 Sales Tax") end end diff --git a/core/spec/models/spree/simple_order_contents_spec.rb b/core/spec/models/spree/simple_order_contents_spec.rb index 409edaaa070..874de8ae3cb 100644 --- a/core/spec/models/spree/simple_order_contents_spec.rb +++ b/core/spec/models/spree/simple_order_contents_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::SimpleOrderContents, type: :model do let!(:store) { create :store } @@ -12,15 +12,15 @@ subject(:order_contents) { described_class.new(order) } context "#add" do - context 'given quantity is not explicitly provided' do - it 'should add one line item' do + context "given quantity is not explicitly provided" do + it "should add one line item" do line_item = subject.add(variant) expect(line_item.quantity).to eq(1) expect(order.line_items.size).to eq(1) end end - context 'given a shipment' do + context "given a shipment" do let!(:shipment) { create(:shipment, order:) } it "ensure shipment calls update_amounts instead of order calling check_shipments_and_restart_checkout" do @@ -52,20 +52,20 @@ end end - context 'not given a shipment' do + context "not given a shipment" do it "ensures updated shipments" do expect(subject.order).to receive(:check_shipments_and_restart_checkout) subject.add(variant) end end - it 'should add line item if one does not exist' do + it "should add line item if one does not exist" do line_item = subject.add(variant, 1) expect(line_item.quantity).to eq(1) expect(order.line_items.size).to eq(1) end - it 'should update line item if one exists' do + it "should update line item if one exists" do subject.add(variant, 1) line_item = subject.add(variant, 1) expect(line_item.quantity).to eq(2) @@ -82,31 +82,31 @@ expect(order.total.to_f).to eq(19.99) end - describe 'tax calculations' do + describe "tax calculations" do let!(:zone) { create(:global_zone) } let!(:tax_rate) do create(:tax_rate, zone:, tax_categories: [variant.tax_category]) end - context 'when the order has a taxable address' do + context "when the order has a taxable address" do before do expect(order.tax_address.country_id).to be_present end - it 'creates a tax adjustment' do + it "creates a tax adjustment" do order_contents.add(variant) line_item = order.find_line_item_by_variant(variant) expect(line_item.adjustments.tax.count).to eq(1) end end - context 'when the order does not have a taxable address' do + context "when the order does not have a taxable address" do before do order.update!(ship_address: nil, bill_address: nil) expect(order.tax_address.country_id).to be_nil end - it 'creates a tax adjustment' do + it "creates a tax adjustment" do order_contents.add(variant) line_item = order.find_line_item_by_variant(variant) expect(line_item.adjustments.tax.count).to eq(0) @@ -124,8 +124,8 @@ end end - context 'given quantity is not explicitly provided' do - it 'should remove one line item' do + context "given quantity is not explicitly provided" do + it "should remove one line item" do line_item = subject.add(variant, 3) subject.remove(variant) @@ -133,7 +133,7 @@ end end - context 'given a shipment' do + context "given a shipment" do it "ensure shipment calls update_amounts instead of order calling check_shipments_and_restart_checkout" do subject.add(variant, 1) shipment = create(:shipment) @@ -143,7 +143,7 @@ end end - context 'not given a shipment' do + context "not given a shipment" do it "ensures updated shipments" do subject.add(variant, 1) expect(subject.order).to receive(:check_shipments_and_restart_checkout) @@ -151,21 +151,21 @@ end end - it 'should reduce line_item quantity if quantity is less the line_item quantity' do + it "should reduce line_item quantity if quantity is less the line_item quantity" do line_item = subject.add(variant, 3) subject.remove(variant, 1) expect(line_item.reload.quantity).to eq(2) end - it 'should remove line_item if quantity matches line_item quantity' do + it "should remove line_item if quantity matches line_item quantity" do subject.add(variant, 1) subject.remove(variant, 1) expect(order.reload.find_line_item_by_variant(variant)).to be_nil end - it 'should remove line_item if quantity is greater than line_item quantity' do + it "should remove line_item if quantity is greater than line_item quantity" do subject.add(variant, 1) subject.remove(variant, 2) @@ -188,7 +188,7 @@ end context "#remove_line_item" do - context 'given a shipment' do + context "given a shipment" do it "ensure shipment calls update_amounts instead of order calling check_shipments_and_restart_checkout" do line_item = subject.add(variant, 1) shipment = create(:shipment) @@ -198,7 +198,7 @@ end end - context 'not given a shipment' do + context "not given a shipment" do it "ensures updated shipments" do line_item = subject.add(variant, 1) expect(subject.order).to receive(:check_shipments_and_restart_checkout) @@ -206,7 +206,7 @@ end end - it 'should remove line_item' do + it "should remove line_item" do line_item = subject.add(variant, 1) subject.remove_line_item(line_item) @@ -232,9 +232,9 @@ let!(:shirt) { subject.add variant, 1 } let(:params) do - { line_items_attributes: { - "0" => { id: shirt.id, quantity: 3 } - } } + {line_items_attributes: { + "0" => {id: shirt.id, quantity: 3} + }} end it "changes item quantity" do @@ -250,9 +250,9 @@ context "submits item quantity 0" do let(:params) do - { line_items_attributes: { - "0" => { id: shirt.id, quantity: 0 } - } } + {line_items_attributes: { + "0" => {id: shirt.id, quantity: 0} + }} end it "removes item from order" do @@ -269,7 +269,7 @@ context "with invalid params" do let(:params) do - { number: "" } + {number: ""} end it "returns false" do @@ -281,7 +281,7 @@ context "completed order" do let(:order) do Spree::Order.create!( - state: 'complete', + state: "complete", completed_at: Time.current, email: "test@example.com" ) @@ -301,20 +301,20 @@ end describe "#approve" do - context 'when a name is supplied' do - it 'approves the order' do - order.contents.approve(name: 'Jordan') + context "when a name is supplied" do + it "approves the order" do + order.contents.approve(name: "Jordan") expect(order.approver).to be_nil - expect(order.approver_name).to eq('Jordan') + expect(order.approver_name).to eq("Jordan") expect(order.approved_at).to be_present expect(order.approved?).to be_truthy end end - context 'when a user is supplied' do + context "when a user is supplied" do let(:user) { create(:user) } - it 'approves the order' do + it "approves the order" do order.contents.approve(user:) expect(order.approver).to eq(user) expect(order.approver_name).to be_nil @@ -323,23 +323,23 @@ end end - context 'when a user and a name are supplied' do + context "when a user and a name are supplied" do let(:user) { create(:user) } - it 'approves the order' do - order.contents.approve(user:, name: 'Jordan') + it "approves the order" do + order.contents.approve(user:, name: "Jordan") expect(order.approver).to eq(user) - expect(order.approver_name).to eq('Jordan') + expect(order.approver_name).to eq("Jordan") expect(order.approved_at).to be_present expect(order.approved?).to be_truthy end end - context 'when neither a user nor a name are supplied' do - it 'raises' do + context "when neither a user nor a name are supplied" do + it "raises" do expect { order.contents.approve - }.to raise_error(ArgumentError, 'user or name must be specified') + }.to raise_error(ArgumentError, "user or name must be specified") end end end diff --git a/core/spec/models/spree/state_spec.rb b/core/spec/models/spree/state_spec.rb index 4ea6f85953a..ff2ad5ca7f4 100644 --- a/core/spec/models/spree/state_spec.rb +++ b/core/spec/models/spree/state_spec.rb @@ -1,43 +1,43 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::State, type: :model do - describe '.with_name_or_abbr' do + describe ".with_name_or_abbr" do subject do Spree::State.with_name_or_abbr(search_term) end let!(:state) { create(:state, name: "California", abbr: "CA") } - context 'by invalid term' do - let(:search_term) { 'NonExistent' } + context "by invalid term" do + let(:search_term) { "NonExistent" } it { is_expected.to be_empty } end - context 'by name' do - let(:search_term) { 'California' } + context "by name" do + let(:search_term) { "California" } it { is_expected.to include(state) } end - context 'by abbr' do - let(:search_term) { 'CA' } + context "by abbr" do + let(:search_term) { "CA" } it { is_expected.to include(state) } end - context 'by case-insensitive abbr' do - let(:search_term) { 'CaLiFoRnIa' } + context "by case-insensitive abbr" do + let(:search_term) { "CaLiFoRnIa" } it { is_expected.to include(state) } end - context 'by case-insensitive abbr' do - let(:search_term) { 'cA' } + context "by case-insensitive abbr" do + let(:search_term) { "cA" } it { is_expected.to include(state) } end end it "can find all states group by country id" do state = create(:state) - expect(Spree::State.states_group_by_country_id).to eq({ state.country_id.to_s => [[state.id, state.name]] }) + expect(Spree::State.states_group_by_country_id).to eq({state.country_id.to_s => [[state.id, state.name]]}) end end diff --git a/core/spec/models/spree/stock/allocator/on_hand_first_spec.rb b/core/spec/models/spree/stock/allocator/on_hand_first_spec.rb index 7ad9006d5dc..5036526b2be 100644 --- a/core/spec/models/spree/stock/allocator/on_hand_first_spec.rb +++ b/core/spec/models/spree/stock/allocator/on_hand_first_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module Stock @@ -25,7 +25,7 @@ module Allocator let(:desired) { Spree::StockQuantities.new(desired_quantities) } - describe '#allocate_inventory' do + describe "#allocate_inventory" do let(:default_on_hand_availability) do quantities = {} quantities[first_variant] = first_variant_default_availability @@ -68,7 +68,7 @@ module Allocator .and_return(backorderable_by_stock_location_id) end - context 'when default stock location has enough items' do + context "when default stock location has enough items" do let(:first_variant_default_availability) { 100 } let(:second_variant_default_availability) { 100 } let(:first_variant_dropship_availability) { 0 } @@ -76,7 +76,7 @@ module Allocator let(:first_variant_desired) { 30 } let(:second_variant_desired) { 5 } - it 'allocates all the desired units on the default stock location' do + it "allocates all the desired units on the default stock location" do on_hand_packages, backordered_packages, leftover = subject.allocate_inventory(desired) expect(on_hand_packages[default_stock_location.id][first_variant]).to eq(30) @@ -92,18 +92,18 @@ module Allocator end end - context 'when default stock location hasn\'t enough items' do + context "when default stock location hasn't enough items" do let(:first_variant_default_availability) { 10 } let(:second_variant_default_availability) { 10 } let(:first_variant_desired) { 15 } let(:second_variant_desired) { 5 } - context 'when dropship stock location has enough items' do + context "when dropship stock location has enough items" do let(:first_variant_dropship_availability) { 20 } let(:second_variant_dropship_availability) { 0 } - it 'allocates all the desired units on the stock locations while stocks last' do + it "allocates all the desired units on the stock locations while stocks last" do on_hand_packages, backordered_packages, leftover = subject.allocate_inventory(desired) expect(on_hand_packages[default_stock_location.id][first_variant]).to eq(10) @@ -119,11 +119,11 @@ module Allocator end end - context 'when dropship stock location hasn\'t enough items' do + context "when dropship stock location hasn't enough items" do let(:first_variant_dropship_availability) { 2 } let(:second_variant_dropship_availability) { 0 } - it 'allocates all the desired units on the stock locations while stocks last' do + it "allocates all the desired units on the stock locations while stocks last" do on_hand_packages, backordered_packages, leftover = subject.allocate_inventory(desired) expect(on_hand_packages[default_stock_location.id][first_variant]).to eq(10) diff --git a/core/spec/models/spree/stock/availability_spec.rb b/core/spec/models/spree/stock/availability_spec.rb index 431ab24fa67..19e0bf5f195 100644 --- a/core/spec/models/spree/stock/availability_spec.rb +++ b/core/spec/models/spree/stock/availability_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree::Stock RSpec.describe Availability do @@ -16,7 +16,7 @@ module Spree::Stock describe "#on_hand_by_stock_location_id" do subject { availability.on_hand_by_stock_location_id } - context 'with a single variant' do + context "with a single variant" do let!(:variant) { create(:master_variant) } let(:stock_item) { variant.stock_items[0] } @@ -34,18 +34,18 @@ module Spree::Stock expect(sorted_subject_ids).to eq([ stock_location3.id, stock_location1.id, - stock_location2.id, + stock_location2.id ]) end - context 'with count_on_hand positive' do + context "with count_on_hand positive" do before { stock_item.set_count_on_hand(2) } it "returns the correct value" do expect(subject).to eq(stock_location1.id => Spree::StockQuantities.new(variant => 2)) end - context 'and backorderable false' do + context "and backorderable false" do before { stock_item.update!(backorderable: false) } it "returns the correct value" do @@ -54,7 +54,7 @@ module Spree::Stock end end - context 'with count_on_hand 0' do + context "with count_on_hand 0" do before { stock_item.set_count_on_hand(0) } it "returns zero on_hand" do @@ -62,7 +62,7 @@ module Spree::Stock end end - context 'with count_on_hand negative' do + context "with count_on_hand negative" do before { stock_item.set_count_on_hand(-1) } it "returns zero on_hand" do @@ -70,7 +70,7 @@ module Spree::Stock end end - context 'with no stock_item' do + context "with no stock_item" do before { stock_item.destroy! } it "returns empty hash" do @@ -78,7 +78,7 @@ module Spree::Stock end end - context 'with soft-deleted stock_item' do + context "with soft-deleted stock_item" do before { stock_item.discard } it "returns empty hash" do @@ -86,7 +86,7 @@ module Spree::Stock end end - context 'with track_inventory=false' do + context "with track_inventory=false" do before { variant.update!(track_inventory: false) } it "has infinite inventory " do @@ -94,7 +94,7 @@ module Spree::Stock end end - context 'with config.track_inventory_levels=false' do + context "with config.track_inventory_levels=false" do before { stub_spree_preferences(track_inventory_levels: false) } it "has infinite inventory " do @@ -107,7 +107,7 @@ module Spree::Stock describe "#backorderable_by_stock_location_id" do subject { availability.backorderable_by_stock_location_id } - context 'with a single variant' do + context "with a single variant" do let!(:variant) { create(:master_variant) } let(:stock_item) { variant.stock_items[0] } @@ -125,50 +125,50 @@ module Spree::Stock expect(sorted_subject_ids).to eq([ stock_location3.id, stock_location1.id, - stock_location2.id, + stock_location2.id ]) end - context 'with backorderable false' do + context "with backorderable false" do before { stock_item.update!(backorderable: false) } - context 'and positive count_on_hand' do + context "and positive count_on_hand" do before { stock_item.set_count_on_hand(2) } it { is_expected.to eq({}) } end - context 'and 0 count_on_hand' do + context "and 0 count_on_hand" do before { stock_item.set_count_on_hand(0) } it { is_expected.to eq({}) } end end - context 'with backorderable true' do + context "with backorderable true" do before { stock_item.update!(backorderable: true) } - context 'and positive count_on_hand' do + context "and positive count_on_hand" do before { stock_item.set_count_on_hand(2) } it { is_expected.to eq(stock_location1.id => Spree::StockQuantities.new(variant => infinity)) } end - context 'and 0 count_on_hand' do + context "and 0 count_on_hand" do before { stock_item.set_count_on_hand(0) } it { is_expected.to eq(stock_location1.id => Spree::StockQuantities.new(variant => infinity)) } end - context 'and negative count_on_hand' do + context "and negative count_on_hand" do before { stock_item.set_count_on_hand(-1) } it { is_expected.to eq(stock_location1.id => Spree::StockQuantities.new(variant => infinity)) } end end - context 'with soft-deleted stock_item' do + context "with soft-deleted stock_item" do before { stock_item.discard } it { is_expected.to eq({}) } end - context 'with no stock_item' do + context "with no stock_item" do before { stock_item.destroy } it { is_expected.to eq({}) } diff --git a/core/spec/models/spree/stock/availability_validator_spec.rb b/core/spec/models/spree/stock/availability_validator_spec.rb index 4d3cacc6841..f74262005e8 100644 --- a/core/spec/models/spree/stock/availability_validator_spec.rb +++ b/core/spec/models/spree/stock/availability_validator_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module Stock @@ -57,7 +57,7 @@ module Stock let!(:order) { create(:order_with_line_items) } context "has stock in one stock location" do - let(:line_item) { order.line_items.first } + let(:line_item) { order.line_items.first } before do line_item.variant.stock_items.update_all(count_on_hand: 10, backorderable: false) @@ -67,8 +67,8 @@ module Stock end context "with stock in multiple locations" do - let(:line_item) { order.line_items.first } - let(:variant) { line_item.variant } + let(:line_item) { order.line_items.first } + let(:variant) { line_item.variant } let!(:stock_location_1) { create(:stock_location, name: "Test Warehouse", active: false) } before do diff --git a/core/spec/models/spree/stock/content_item_spec.rb b/core/spec/models/spree/stock/content_item_spec.rb index 4b52f19374c..e0f600deb0e 100644 --- a/core/spec/models/spree/stock/content_item_spec.rb +++ b/core/spec/models/spree/stock/content_item_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module Stock @@ -9,59 +9,59 @@ module Stock let(:inventory_unit) { build(:inventory_unit) } let(:state) { :on_hand } - describe '#variant' do + describe "#variant" do subject { instance.variant } it { is_expected.to eq(inventory_unit.variant) } end - describe '#weight' do + describe "#weight" do subject { instance.weight } - it { is_expected.to eq(0.to_d) } + it { is_expected.to eq(BigDecimal(0)) } end - describe '#line_item' do + describe "#line_item" do subject { instance.line_item } it { is_expected.to eq(inventory_unit.line_item) } end - describe '#on_hand?' do + describe "#on_hand?" do subject { instance.on_hand? } - context 'the state is on hand' do + context "the state is on hand" do it { is_expected.to eq(true) } end - context 'the state is not on hand' do - let(:state) { 'foo' } + context "the state is not on hand" do + let(:state) { "foo" } it { is_expected.to eq(false) } end end - describe '#backordered?' do + describe "#backordered?" do subject { instance.backordered? } - context 'the state is not backordered' do - let(:state) { 'foo' } + context "the state is not backordered" do + let(:state) { "foo" } it { is_expected.to eq(false) } end - context 'the state is backordered' do + context "the state is backordered" do let(:state) { :backordered } it { is_expected.to eq(true) } end end - describe '#price' do + describe "#price" do subject { instance.price } - it { is_expected.to eq(10.to_d) } + it { is_expected.to eq(BigDecimal(10)) } end - describe '#amount' do + describe "#amount" do subject { instance.amount } - it { is_expected.to eq(10.to_d) } + it { is_expected.to eq(BigDecimal(10)) } end - describe '#quantity' do + describe "#quantity" do subject { instance.quantity } it { is_expected.to eq(1) } end diff --git a/core/spec/models/spree/stock/differentiator_spec.rb b/core/spec/models/spree/stock/differentiator_spec.rb index 60c62647519..67069598ff1 100644 --- a/core/spec/models/spree/stock/differentiator_spec.rb +++ b/core/spec/models/spree/stock/differentiator_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module Stock @@ -32,7 +32,7 @@ module Stock it { is_expected.to be_missing } - it 'calculates the missing items' do + it "calculates the missing items" do expect(subject.missing[variant1]).to eq 1 expect(subject.missing[variant2]).to eq 1 end diff --git a/core/spec/models/spree/stock/estimator_spec.rb b/core/spec/models/spree/stock/estimator_spec.rb index f29705e490f..9d7cf2f4c53 100644 --- a/core/spec/models/spree/stock/estimator_spec.rb +++ b/core/spec/models/spree/stock/estimator_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module Stock @@ -24,18 +24,18 @@ module Stock let(:currency) { "USD" } - context 'without a shipment' do + context "without a shipment" do before { package.shipment = nil } - it 'raises an error' do + it "raises an error" do expect { subject.shipping_rates(package) }.to raise_error(Spree::Stock::Estimator::ShipmentRequired) end end - context 'without an order' do + context "without an order" do before { package.shipment.order = nil } - it 'raises an error' do + it "raises an error" do expect { subject.shipping_rates(package) }.to raise_error(Spree::Stock::Estimator::OrderRequired) @@ -61,7 +61,7 @@ module Stock end context "when the order's ship address is in a different zone" do - before { shipping_method.zones.each{ |zone| zone.members.delete_all } } + before { shipping_method.zones.each { |zone| zone.members.delete_all } } it_should_behave_like "shipping rate doesn't match" end @@ -96,7 +96,7 @@ module Stock context "general shipping methods" do before { Spree::ShippingMethod.all.find_each(&:destroy) } - context 'with a custom shipping calculator with no preference' do + context "with a custom shipping calculator with no preference" do class Spree::Calculator::Shipping::NoPreferences < Spree::ShippingCalculator def compute_package(_package) # no op @@ -109,12 +109,12 @@ def compute_package(_package) ] end - it 'does not raise an error' do + it "does not raise an error" do expect { subject.shipping_rates(package) }.not_to raise_error end end - context 'with a custom shipping calculator with preference' do + context "with a custom shipping calculator with preference" do class Spree::Calculator::Shipping::WithUnknownPreferences < Spree::ShippingCalculator def compute_package(_package) # no op @@ -126,18 +126,18 @@ def compute_package(_package) create( :shipping_method, calculator: Spree::Calculator::Shipping::WithUnknownPreferences.new( - preferences: { a: "b" } + preferences: {a: "b"} ) ) ] end - it 'does not raise an error' do + it "does not raise an error" do expect { subject.shipping_rates(package) }.not_to raise_error end end - context 'with two shipping methods of different cost' do + context "with two shipping methods of different cost" do let!(:shipping_methods) do [ create(:shipping_method, cost: 5), @@ -150,7 +150,7 @@ def compute_package(_package) end end - context 'with one of the shipping methods having nil cost' do + context "with one of the shipping methods having nil cost" do let!(:shipping_methods) do [ create(:shipping_method, cost: 1), @@ -168,7 +168,7 @@ def compute_package(_package) end context "involves backend only shipping methods" do - before{ Spree::ShippingMethod.all.find_each(&:destroy) } + before { Spree::ShippingMethod.all.find_each(&:destroy) } let!(:backend_method) { create(:shipping_method, available_to_users: false, cost: 0.00) } let!(:generic_method) { create(:shipping_method, cost: 5.00) } @@ -183,7 +183,7 @@ def compute_package(_package) end context "excludes shipping methods from other stores" do - before{ Spree::ShippingMethod.all.find_each(&:destroy) } + before { Spree::ShippingMethod.all.find_each(&:destroy) } let!(:other_method) do create( @@ -225,12 +225,13 @@ def compute_package(_package) end end - it 'uses the configured shipping rate selector' do + it "uses the configured shipping rate selector" do shipping_rate = build(:shipping_rate) allow(Spree::ShippingRate).to receive(:new).and_return(shipping_rate) selector_class = Class.new do - def initialize(_); end; + def initialize(_) + end def find_default Spree::ShippingRate.new @@ -243,7 +244,7 @@ def find_default expect(shipping_rate.selected).to eq(true) end - it 'uses the configured shipping rate sorter' do + it "uses the configured shipping rate sorter" do class Spree::Stock::TestSorter def initialize(_rates) end @@ -259,7 +260,7 @@ def initialize(_rates) expect(sorter).to have_received(:sort) end - it 'uses the configured shipping rate taxer' do + it "uses the configured shipping rate taxer" do class Spree::Tax::TestTaxCalculator def initialize(_order) end diff --git a/core/spec/models/spree/stock/inventory_unit_builder_spec.rb b/core/spec/models/spree/stock/inventory_unit_builder_spec.rb index d45ec0c89a6..7723efd3f7f 100644 --- a/core/spec/models/spree/stock/inventory_unit_builder_spec.rb +++ b/core/spec/models/spree/stock/inventory_unit_builder_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module Stock @@ -30,22 +30,22 @@ module Stock end end - describe '#missing_units_for_line_item' do - context 'when all inventory units are missing' do - it 'builds all inventory units for the line item' do + describe "#missing_units_for_line_item" do + context "when all inventory units are missing" do + it "builds all inventory units for the line item" do units = subject.missing_units_for_line_item(line_item_2) expect(units.size).to be 2 expect(units).to be_all { |unit| unit.line_item == line_item_2 } end end - context 'when some inventory units are already present' do + context "when some inventory units are already present" do before do line_item_2.inventory_units << build(:inventory_unit, line_item: line_item_2) line_item_2.save! end - it 'builds only the missing inventory unit' do + it "builds only the missing inventory unit" do units = subject.missing_units_for_line_item(line_item_2) expect(units.size).to be 1 expect(units.first.line_item).to eql line_item_2 diff --git a/core/spec/models/spree/stock/inventory_units_finalizer_spec.rb b/core/spec/models/spree/stock/inventory_units_finalizer_spec.rb index 382034bedad..4d63a913e03 100644 --- a/core/spec/models/spree/stock/inventory_units_finalizer_spec.rb +++ b/core/spec/models/spree/stock/inventory_units_finalizer_spec.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module Stock RSpec.describe InventoryUnitsFinalizer, type: :model do context "when finalizing an order with one line_item" do - let(:order) { build(:order_with_line_items) } + let(:order) { build(:order_with_line_items) } let(:inventory_unit) { build(:inventory_unit, order:, variant:, line_item:, shipment: order.shipments.first) } - let(:stock_item) { inventory_unit.variant.stock_items.first } - let(:line_item) { order.line_items.first } - let(:variant) { create(:variant) } + let(:stock_item) { inventory_unit.variant.stock_items.first } + let(:line_item) { order.line_items.first } + let(:variant) { create(:variant) } before do stock_item.set_count_on_hand(10) @@ -39,7 +39,7 @@ module Stock end context "when finalizing an order with multiple line_items" do - let(:order) { build(:order_with_line_items, line_items_count: 2) } + let(:order) { build(:order_with_line_items, line_items_count: 2) } let(:inventory_unit) { build(:inventory_unit, order:, variant: order.line_items.first.variant, shipment: order.shipments.first) } let(:inventory_unit_2) { build(:inventory_unit, order:, variant: order.line_items.second.variant, shipment: order.shipments.first) } let(:stock_item) { inventory_unit.variant.stock_items.first } @@ -56,7 +56,7 @@ module Stock it "unstocks the variant with the correct quantity" do expect { subject }.to change { stock_item.reload.count_on_hand }.from(10).to(9) - .and change { stock_item_2.reload.count_on_hand }.from(10).to(9) + .and change { stock_item_2.reload.count_on_hand }.from(10).to(9) end end end diff --git a/core/spec/models/spree/stock/location_filter/active_spec.rb b/core/spec/models/spree/stock/location_filter/active_spec.rb index ef962e11d13..42093c9645a 100644 --- a/core/spec/models/spree/stock/location_filter/active_spec.rb +++ b/core/spec/models/spree/stock/location_filter/active_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module Stock @@ -11,9 +11,9 @@ module LocationFilter let!(:active_stock_location) { create(:stock_location) } let!(:inactive_stock_location) { create(:stock_location, active: false) } let(:stock_locations) { Spree::StockLocation.all } - let(:order) { instance_double('Spree::Order') } + let(:order) { instance_double("Spree::Order") } - it 'returns only active stock locations' do + it "returns only active stock locations" do expect(subject.filter).to eq([active_stock_location]) end end diff --git a/core/spec/models/spree/stock/location_sorter/default_first_spec.rb b/core/spec/models/spree/stock/location_sorter/default_first_spec.rb index 961024670fc..507ddf650d3 100644 --- a/core/spec/models/spree/stock/location_sorter/default_first_spec.rb +++ b/core/spec/models/spree/stock/location_sorter/default_first_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module Stock @@ -15,7 +15,7 @@ module LocationSorter let(:stock_locations) { Spree::StockLocation.all } let(:sorted_stock_locations) { [second, third, first, fourth] } - it 'returns the default stock location first and the remaining locations by position' do + it "returns the default stock location first and the remaining locations by position" do expect(subject.sort).to eq(sorted_stock_locations) end end diff --git a/core/spec/models/spree/stock/location_sorter/unsorted_spec.rb b/core/spec/models/spree/stock/location_sorter/unsorted_spec.rb index 988e4e5615f..30a29cb0d18 100644 --- a/core/spec/models/spree/stock/location_sorter/unsorted_spec.rb +++ b/core/spec/models/spree/stock/location_sorter/unsorted_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module Stock @@ -12,7 +12,7 @@ module LocationSorter let!(:second_stock_location) { create(:stock_location) } let(:stock_locations) { Spree::StockLocation.all } - it 'returns the original stock locations unsorted' do + it "returns the original stock locations unsorted" do expect(subject.sort).to eq(stock_locations) end end diff --git a/core/spec/models/spree/stock/package_spec.rb b/core/spec/models/spree/stock/package_spec.rb index a942c3b04eb..93323604ac1 100644 --- a/core/spec/models/spree/stock/package_spec.rb +++ b/core/spec/models/spree/stock/package_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module Stock @@ -16,19 +16,19 @@ def build_inventory_unit build(:inventory_unit, variant:, line_item:) end - it 'calculates the weight of all the contents' do + it "calculates the weight of all the contents" do 4.times { subject.add build_inventory_unit } expect(subject.weight).to eq(100.0) end - it 'filters by on_hand and backordered' do + it "filters by on_hand and backordered" do 4.times { subject.add build_inventory_unit } 3.times { subject.add build_inventory_unit, :backordered } expect(subject.on_hand.count).to eq 4 expect(subject.backordered.count).to eq 3 end - it 'calculates the quantity by state' do + it "calculates the quantity by state" do 4.times { subject.add build_inventory_unit } 3.times { subject.add build_inventory_unit, :backordered } @@ -37,61 +37,61 @@ def build_inventory_unit expect(subject.quantity(:backordered)).to eq 3 end - it 'returns nil for content item not found' do + it "returns nil for content item not found" do unit = build_inventory_unit item = subject.find_item(unit, :on_hand) expect(item).to be_nil end - it 'finds content item for an inventory unit' do + it "finds content item for an inventory unit" do unit = build_inventory_unit subject.add unit item = subject.find_item(unit, :on_hand) expect(item.quantity).to eq 1 end - it 'builds the correct list of shipping methods based on stock location and categories' do + it "builds the correct list of shipping methods based on stock location and categories" do category_one = create(:shipping_category) category_two = create(:shipping_category) - method_one = create(:shipping_method, available_to_all: true) - method_two = create(:shipping_method, stock_locations: [stock_location]) + method_one = create(:shipping_method, available_to_all: true) + method_two = create(:shipping_method, stock_locations: [stock_location]) method_one.shipping_categories = [category_one, category_two] method_two.shipping_categories = [category_one, category_two] variant_one = mock_model(Variant, shipping_category_id: category_one.id) variant_two = mock_model(Variant, shipping_category_id: category_two.id) variant_three = mock_model(Variant, shipping_category_id: nil) contents = [ContentItem.new(build(:inventory_unit, variant: variant_one)), - ContentItem.new(build(:inventory_unit, variant: variant_one)), - ContentItem.new(build(:inventory_unit, variant: variant_two)), - ContentItem.new(build(:inventory_unit, variant: variant_three))] + ContentItem.new(build(:inventory_unit, variant: variant_one)), + ContentItem.new(build(:inventory_unit, variant: variant_two)), + ContentItem.new(build(:inventory_unit, variant: variant_three))] package = Package.new(stock_location, contents) expect(package.shipping_methods).to match_array([method_one, method_two]) end # Contains regression test for https://github.com/spree/spree/issues/2804 - it 'builds a list of shipping methods common to all categories' do + it "builds a list of shipping methods common to all categories" do category_one = create(:shipping_category) category_two = create(:shipping_category) - method_one = create(:shipping_method) - method_two = create(:shipping_method) + method_one = create(:shipping_method) + method_two = create(:shipping_method) method_one.shipping_categories = [category_one, category_two] method_two.shipping_categories = [category_one] variant_one = mock_model(Variant, shipping_category_id: category_one.id) variant_two = mock_model(Variant, shipping_category_id: category_two.id) variant_three = mock_model(Variant, shipping_category_id: nil) contents = [ContentItem.new(build(:inventory_unit, variant: variant_one)), - ContentItem.new(build(:inventory_unit, variant: variant_one)), - ContentItem.new(build(:inventory_unit, variant: variant_two)), - ContentItem.new(build(:inventory_unit, variant: variant_three))] + ContentItem.new(build(:inventory_unit, variant: variant_one)), + ContentItem.new(build(:inventory_unit, variant: variant_two)), + ContentItem.new(build(:inventory_unit, variant: variant_three))] package = Package.new(stock_location, contents) expect(package.shipping_methods).to match_array([method_one]) end - it 'builds an empty list of shipping methods when no categories' do - variant = mock_model(Variant, shipping_category_id: nil) + it "builds an empty list of shipping methods when no categories" do + variant = mock_model(Variant, shipping_category_id: nil) contents = [ContentItem.new(build(:inventory_unit, variant:))] - package = Package.new(stock_location, contents) + package = Package.new(stock_location, contents) expect(package.shipping_methods).to be_empty end @@ -108,17 +108,17 @@ def build_inventory_unit first_unit = shipment.inventory_units.first expect(first_unit.variant).to eq variant - expect(first_unit.state).to eq 'on_hand' + expect(first_unit.state).to eq "on_hand" expect(first_unit).to be_pending last_unit = shipment.inventory_units.last expect(last_unit.variant).to eq variant - expect(last_unit.state).to eq 'backordered' + expect(last_unit.state).to eq "backordered" expect(shipment.shipping_method).to eq shipping_method end - it 'does not add an inventory unit to a package twice' do + it "does not add an inventory unit to a package twice" do # since inventory units currently don't have a quantity unit = build_inventory_unit subject.add unit diff --git a/core/spec/models/spree/stock/quantifier_spec.rb b/core/spec/models/spree/stock/quantifier_spec.rb index 51d219f6ce7..01a9579cd3a 100644 --- a/core/spec/models/spree/stock/quantifier_spec.rb +++ b/core/spec/models/spree/stock/quantifier_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module Stock RSpec.describe Quantifier, type: :model do - shared_examples_for 'unlimited supply' do - it 'can_supply? any amount' do + shared_examples_for "unlimited supply" do + it "can_supply? any amount" do expect(subject.can_supply?(1)).to eq true expect(subject.can_supply?(101)).to eq true expect(subject.can_supply?(100_001)).to eq true @@ -39,39 +39,39 @@ module Stock specify { expect(subject.stock_items).to eq([stock_item]) } - context 'with a single stock location/item' do - it 'total_on_hand should match stock_item' do + context "with a single stock location/item" do + it "total_on_hand should match stock_item" do expect(subject.total_on_hand).to eq stock_item.count_on_hand end - context 'when track_inventory_levels is false' do + context "when track_inventory_levels is false" do before { stub_spree_preferences(track_inventory_levels: false) } specify { expect(subject.total_on_hand).to eq(Float::INFINITY) } - it_should_behave_like 'unlimited supply' + it_should_behave_like "unlimited supply" end - context 'when variant inventory tracking is off' do + context "when variant inventory tracking is off" do before { stock_item.variant.track_inventory = false } specify { expect(subject.total_on_hand).to eq(Float::INFINITY) } - it_should_behave_like 'unlimited supply' + it_should_behave_like "unlimited supply" end - context 'when stock item allows backordering' do + context "when stock item allows backordering" do specify { expect(subject.backorderable?).to be true } - it_should_behave_like 'unlimited supply' + it_should_behave_like "unlimited supply" end - context 'when stock item prevents backordering' do + context "when stock item prevents backordering" do before { stock_item.update(backorderable: false) } specify { expect(subject.backorderable?).to be false } - it 'can_supply? only upto total_on_hand' do + it "can_supply? only upto total_on_hand" do expect(subject.can_supply?(1)).to be true expect(subject.can_supply?(10)).to be true expect(subject.can_supply?(11)).to be false @@ -79,7 +79,7 @@ module Stock end end - context 'with multiple stock locations/items' do + context "with multiple stock locations/items" do let!(:stock_location_2) { create :stock_location } let!(:stock_location_3) { create :stock_location, active: false } @@ -88,22 +88,22 @@ module Stock stock_location_3.stock_items.where(variant_id: stock_item.variant).update_all(count_on_hand: 5, backorderable: false) end - it 'total_on_hand should total all active stock_items' do + it "total_on_hand should total all active stock_items" do expect(subject.total_on_hand).to eq(15) end - context 'when any stock item allows backordering' do + context "when any stock item allows backordering" do specify { expect(subject.backorderable?).to be true } - it_should_behave_like 'unlimited supply' + it_should_behave_like "unlimited supply" end - context 'when all stock items prevent backordering' do + context "when all stock items prevent backordering" do before { stock_item.update(backorderable: false) } specify { expect(subject.backorderable?).to be false } - it 'can_supply? upto total_on_hand' do + it "can_supply? upto total_on_hand" do expect(subject.can_supply?(1)).to be true expect(subject.can_supply?(15)).to be true expect(subject.can_supply?(16)).to be false @@ -111,9 +111,9 @@ module Stock end end - context 'with a specific stock location' do - let!(:stock_location_2) { create :stock_location } - let!(:stock_location_3) { create :stock_location, active: false } + context "with a specific stock location" do + let!(:stock_location_2) { create :stock_location } + let!(:stock_location_3) { create :stock_location, active: false } let(:target_stock_location) { stock_location_3 } before do @@ -121,7 +121,7 @@ module Stock stock_location_3.stock_items.where(variant_id: stock_item.variant).update_all(count_on_hand: 5, backorderable: false) end - it 'can_supply? only upto total_on_hand' do + it "can_supply? only upto total_on_hand" do expect(subject.can_supply?(5)).to eq true expect(subject.can_supply?(6)).to eq false end diff --git a/core/spec/models/spree/stock/shipping_rate_selector_spec.rb b/core/spec/models/spree/stock/shipping_rate_selector_spec.rb index 251f2c6a031..b197f6ce876 100644 --- a/core/spec/models/spree/stock/shipping_rate_selector_spec.rb +++ b/core/spec/models/spree/stock/shipping_rate_selector_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Stock::ShippingRateSelector do - describe '#sort' do - it 'sorts by increasing cost' do + describe "#sort" do + it "sorts by increasing cost" do cheapest_shipping_rate = Spree::ShippingRate.new(cost: 1.00) middle_shipping_rate = Spree::ShippingRate.new(cost: 5.00) expensive_shipping_rate = Spree::ShippingRate.new(cost: 42.00) diff --git a/core/spec/models/spree/stock/shipping_rate_sorter_spec.rb b/core/spec/models/spree/stock/shipping_rate_sorter_spec.rb index bce3e8f2f3f..22a5420f01d 100644 --- a/core/spec/models/spree/stock/shipping_rate_sorter_spec.rb +++ b/core/spec/models/spree/stock/shipping_rate_sorter_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Stock::ShippingRateSorter do - describe '#sort' do - it 'sorts by increasing cost' do + describe "#sort" do + it "sorts by increasing cost" do cheapest_shipping_rate = Spree::ShippingRate.new(cost: 1.00) middle_shipping_rate = Spree::ShippingRate.new(cost: 5.00) expensive_shipping_rate = Spree::ShippingRate.new(cost: 42.00) diff --git a/core/spec/models/spree/stock/simple_coordinator_spec.rb b/core/spec/models/spree/stock/simple_coordinator_spec.rb index 6b67af344af..502e581ab86 100644 --- a/core/spec/models/spree/stock/simple_coordinator_spec.rb +++ b/core/spec/models/spree/stock/simple_coordinator_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module Stock @@ -10,27 +10,27 @@ module Stock subject { SimpleCoordinator.new(order) } describe "#shipments" do - it 'uses the pluggable estimator class' do + it "uses the pluggable estimator class" do expect(Spree::Config.stock).to receive(:estimator_class).and_call_original subject.shipments end - it 'uses the configured stock location filter' do + it "uses the configured stock location filter" do expect(Spree::Config.stock).to receive(:location_filter_class).and_call_original subject.shipments end - it 'uses the configured stock location sorter' do + it "uses the configured stock location sorter" do expect(Spree::Config.stock).to receive(:location_sorter_class).and_call_original subject.shipments end - it 'uses the pluggable allocator class' do + it "uses the pluggable allocator class" do expect(Spree::Config.stock).to receive(:allocator_class).and_call_original subject.shipments end - it 'builds shipments' do + it "builds shipments" do expect(subject.shipments.size).to eq(1) end @@ -38,7 +38,7 @@ module Stock subject.shipments.count == StockLocation.count end - it 'uses the pluggable inventory unit builder class' do + it "uses the pluggable inventory unit builder class" do expect(Spree::Config.stock) .to receive(:inventory_unit_builder_class) .and_call_original @@ -128,25 +128,23 @@ module Stock shared_examples "an unfulfillable package" do it "raises exception" do - expect{ shipments }.to raise_error(Spree::Order::InsufficientStock) + expect { shipments }.to raise_error(Spree::Order::InsufficientStock) end - it 'raises exception and includes unfulfillable items' do - begin - expect(shipments).not_to be_empty - rescue Spree::Order::InsufficientStock => e - expect(e.items.keys.map(&:id)).to contain_exactly(variant.id) - end + it "raises exception and includes unfulfillable items" do + expect(shipments).not_to be_empty + rescue Spree::Order::InsufficientStock => e + expect(e.items.keys.map(&:id)).to contain_exactly(variant.id) end end - context 'with no stock locations' do + context "with no stock locations" do let(:location_1_inventory) { 0 } before { variant.stock_items.destroy_all } it_behaves_like "an unfulfillable package" end - context 'with a single stock location' do + context "with a single stock location" do context "with no inventory" do let(:location_1_inventory) { 0 } it_behaves_like "an unfulfillable package" @@ -163,7 +161,7 @@ module Stock end end - context 'with two stock locations' do + context "with two stock locations" do let!(:stock_location_2) { create(:stock_location, propagate_all_variants: false, active: true) } before do stock_item_two = variant.stock_items.create!(stock_location: stock_location_2, backorderable: false) @@ -219,7 +217,7 @@ module Stock end end - context 'with three stock locations' do + context "with three stock locations" do let!(:stock_location_2) { create(:stock_location, propagate_all_variants: false, active: true) } let!(:stock_location_3) { create(:stock_location, propagate_all_variants: false, active: true) } before do diff --git a/core/spec/models/spree/stock/splitter/backordered_spec.rb b/core/spec/models/spree/stock/splitter/backordered_spec.rb index 42d5390edba..4e386a580c8 100644 --- a/core/spec/models/spree/stock/splitter/backordered_spec.rb +++ b/core/spec/models/spree/stock/splitter/backordered_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module Stock @@ -12,7 +12,7 @@ module Splitter subject { Backordered.new(stock_location) } - it 'splits packages by status' do + it "splits packages by status" do package = Package.new(stock_location) 4.times { package.add build(:inventory_unit, variant:) } 5.times { package.add build(:inventory_unit, variant:), :backordered } diff --git a/core/spec/models/spree/stock/splitter/base_spec.rb b/core/spec/models/spree/stock/splitter/base_spec.rb index d33fe5b12f7..bbcab85434d 100644 --- a/core/spec/models/spree/stock/splitter/base_spec.rb +++ b/core/spec/models/spree/stock/splitter/base_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module Stock @@ -8,7 +8,7 @@ module Splitter RSpec.describe Base, type: :model do let(:stock_location) { mock_model(Spree::StockLocation) } - it 'continues to splitter chain' do + it "continues to splitter chain" do splitter_one = Base.new(stock_location) splitter_two = Base.new(stock_location, splitter_one) packages = [] diff --git a/core/spec/models/spree/stock/splitter/shipping_category_spec.rb b/core/spec/models/spree/stock/splitter/shipping_category_spec.rb index 654bf29fc01..060d97dc375 100644 --- a/core/spec/models/spree/stock/splitter/shipping_category_spec.rb +++ b/core/spec/models/spree/stock/splitter/shipping_category_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module Stock @@ -9,8 +9,8 @@ module Stock let(:line_item) { order.line_items.first } let(:variant1) { build(:variant) } let(:variant2) { build(:variant) } - let(:shipping_category_1) { create(:shipping_category, name: 'A') } - let(:shipping_category_2) { create(:shipping_category, name: 'B') } + let(:shipping_category_1) { create(:shipping_category, name: "A") } + let(:shipping_category_2) { create(:shipping_category, name: "B") } def inventory_unit1 build(:inventory_unit, variant: variant1, order:, line_item:).tap do |inventory_unit| @@ -28,7 +28,7 @@ def inventory_unit2 subject { described_class.new(stock_location) } - it 'splits each package by shipping category' do + it "splits each package by shipping category" do package_one = Package.new(stock_location) 4.times { package_one.add inventory_unit1 } 8.times { package_one.add inventory_unit2 } diff --git a/core/spec/models/spree/stock/splitter/weight_spec.rb b/core/spec/models/spree/stock/splitter/weight_spec.rb index 9a911af477c..052a0fcc07c 100644 --- a/core/spec/models/spree/stock/splitter/weight_spec.rb +++ b/core/spec/models/spree/stock/splitter/weight_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module Stock @@ -11,14 +11,14 @@ module Splitter subject { Weight.new(stock_location) } - it 'splits and keeps splitting until all packages are underweight' do + it "splits and keeps splitting until all packages are underweight" do package = Package.new(stock_location) 4.times { package.add build(:inventory_unit, variant:) } packages = subject.split([package]) expect(packages.size).to eq 4 end - it 'handles packages that can not be reduced' do + it "handles packages that can not be reduced" do package = Package.new(stock_location) allow(variant).to receive_messages(weight: 200) 2.times { package.add build(:inventory_unit, variant:) } diff --git a/core/spec/models/spree/stock/splitter_chain_spec.rb b/core/spec/models/spree/stock/splitter_chain_spec.rb index 4b2970e0185..849164deeae 100644 --- a/core/spec/models/spree/stock/splitter_chain_spec.rb +++ b/core/spec/models/spree/stock/splitter_chain_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree::Stock RSpec.describe SplitterChain, type: :model do @@ -13,7 +13,7 @@ module Spree::Stock subject { described_class.new(stock_location, splitters) } - context 'with no splitters' do + context "with no splitters" do let(:splitters) { [] } it "returns the packages unchanged" do @@ -21,41 +21,41 @@ module Spree::Stock end end - context 'with one splitter' do + context "with one splitter" do let(:splitters) { [splitter1] } - it 'returns the result form the splitter' do + it "returns the result form the splitter" do expected = double(:expected_packages) expect_any_instance_of(splitter1).to receive(:split).with(packages).and_return(expected) expect(subject.split(packages)).to be expected end - it 'builds the splitters correctly' do + it "builds the splitters correctly" do expect(splitter1).to receive(:new).with(stock_location, nil).and_call_original subject.split(packages) end end - context 'with multiple splitters' do + context "with multiple splitters" do let(:splitters) { [splitter1, splitter2] } - it 'builds the splitters in order' do + it "builds the splitters in order" do expect(splitter1).to receive(:new).with(stock_location, splitter2).and_call_original expect(splitter2).to receive(:new).with(stock_location, nil).and_call_original subject.split(packages) end - it 'calls the splitters in order' do + it "calls the splitters in order" do expect_any_instance_of(splitter1).to receive(:split).with(packages).and_call_original expect_any_instance_of(splitter2).to receive(:split).with(packages).and_call_original subject.split(packages) end - it 'returns the final result' do + it "returns the final result" do expected = double(:expected_packages) expect_any_instance_of(splitter2).to receive(:split).with(packages).and_return(expected) diff --git a/core/spec/models/spree/stock_item_spec.rb b/core/spec/models/spree/stock_item_spec.rb index aa86840acd4..da77c9cf741 100644 --- a/core/spec/models/spree/stock_item_spec.rb +++ b/core/spec/models/spree/stock_item_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::StockItem, type: :model do let(:stock_location) { create(:stock_location_with_items) } subject { stock_location.stock_items.order(:id).first } - it 'maintains the count on hand for a variant' do + it "maintains the count on hand for a variant" do expect(subject.count_on_hand).to eq 10 end @@ -35,19 +35,19 @@ end end - describe 'reduce_count_on_hand_to_zero' do - context 'when count_on_hand > 0' do + describe "reduce_count_on_hand_to_zero" do + context "when count_on_hand > 0" do before(:each) do - subject.update_column('count_on_hand', 4) + subject.update_column("count_on_hand", 4) subject.reduce_count_on_hand_to_zero end it { expect(subject.count_on_hand).to eq(0) } end - context 'when count_on_hand > 0' do + context "when count_on_hand > 0" do before(:each) do - subject.update_column('count_on_hand', -4) + subject.update_column("count_on_hand", -4) @count_on_hand = subject.count_on_hand subject.reduce_count_on_hand_to_zero end @@ -59,7 +59,7 @@ context "adjust count_on_hand" do let!(:current_on_hand) { subject.count_on_hand } - it 'is updated pessimistically' do + it "is updated pessimistically" do copy = Spree::StockItem.find(subject.id) subject.adjust_count_on_hand(5) @@ -71,8 +71,8 @@ end context "item out of stock (by two items)" do - let(:inventory_unit) { double('InventoryUnit') } - let(:inventory_unit_2) { double('InventoryUnit2') } + let(:inventory_unit) { double("InventoryUnit") } + let(:inventory_unit_2) { double("InventoryUnit2") } before do allow(subject).to receive_messages(backordered_inventory_units: [inventory_unit, inventory_unit_2]) @@ -112,7 +112,7 @@ context "set count_on_hand" do let!(:current_on_hand) { subject.count_on_hand } - it 'is updated pessimistically' do + it "is updated pessimistically" do copy = Spree::StockItem.find(subject.id) subject.set_count_on_hand(5) @@ -124,8 +124,8 @@ end context "item out of stock (by two items)" do - let(:inventory_unit) { double('InventoryUnit') } - let(:inventory_unit_2) { double('InventoryUnit2') } + let(:inventory_unit) { double("InventoryUnit") } + let(:inventory_unit_2) { double("InventoryUnit2") } before { subject.set_count_on_hand(-2) } @@ -258,37 +258,37 @@ end end - describe 'validations' do + describe "validations" do before do subject.backorderable = backorderable subject.send(:count_on_hand=, count_on_hand) end - describe 'count_on_hand' do - shared_examples_for 'valid count_on_hand' do - it 'has :no errors_on' do + describe "count_on_hand" do + shared_examples_for "valid count_on_hand" do + it "has :no errors_on" do expect(subject).to be_valid expect(subject.errors[:count_on_hand].size).to eq(0) end end - shared_examples_for 'invalid count_on_hand' do - it 'has the correct error on count_on_hand' do + shared_examples_for "invalid count_on_hand" do + it "has the correct error on count_on_hand" do expect(subject).not_to be_valid expect(subject.errors[:count_on_hand].size).to eq(1) - expect(subject.errors[:count_on_hand]).to include('must be greater than or equal to 0') + expect(subject.errors[:count_on_hand]).to include("must be greater than or equal to 0") end end - context 'when backorderable' do + context "when backorderable" do let(:backorderable) { true } - context 'when count_on_hand is positive' do + context "when count_on_hand is positive" do let(:count_on_hand) { 3 } it_should_behave_like "valid count_on_hand" end - context 'when count_on_hand is negative' do + context "when count_on_hand is negative" do let(:count_on_hand) { -3 } it_should_behave_like "valid count_on_hand" @@ -301,15 +301,15 @@ end end - context 'when not backorderable' do + context "when not backorderable" do let(:backorderable) { false } - context 'when count_on_hand is positive' do + context "when count_on_hand is positive" do let(:count_on_hand) { 3 } it_should_behave_like "valid count_on_hand" end - context 'when count_on_hand is negative' do + context "when count_on_hand is negative" do let(:count_on_hand) { -3 } it_should_behave_like "invalid count_on_hand" diff --git a/core/spec/models/spree/stock_location_spec.rb b/core/spec/models/spree/stock_location_spec.rb index 8c7214bd6e7..00f5bec1063 100644 --- a/core/spec/models/spree/stock_location_spec.rb +++ b/core/spec/models/spree/stock_location_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe StockLocation, type: :model do @@ -8,7 +8,7 @@ module Spree let(:stock_item) { subject.stock_items.order(:id).first } let(:variant) { stock_item.variant } - it 'creates stock_items for all variants' do + it "creates stock_items for all variants" do expect(subject.stock_items.count).to eq Variant.count end @@ -47,7 +47,7 @@ module Spree it "creates a new stock item" do expect { subject.propagate_variant(variant) - }.to change{ StockItem.count }.by(1) + }.to change { StockItem.count }.by(1) end context "passes backorderable default config" do @@ -87,72 +87,72 @@ module Spree end end - it 'finds a stock_item for a variant' do + it "finds a stock_item for a variant" do stock_item = subject.stock_item(variant) expect(stock_item.count_on_hand).to eq 10 end - it 'finds a stock_item for a variant by id' do + it "finds a stock_item for a variant by id" do stock_item = subject.stock_item(variant.id) expect(stock_item.variant).to eq variant end - it 'returns nil when stock_item is not found for variant' do + it "returns nil when stock_item is not found for variant" do stock_item = subject.stock_item(0) expect(stock_item).to be_nil end - describe '#stock_item_or_create' do + describe "#stock_item_or_create" do before do variant = create(:variant) variant.stock_items.destroy_all variant.save end - it 'creates a stock_item if not found for a variant' do + it "creates a stock_item if not found for a variant" do stock_item = subject.stock_item_or_create(variant) expect(stock_item.variant).to eq variant end - it 'creates a stock_item if not found for a variant_id' do + it "creates a stock_item if not found for a variant_id" do stock_item = subject.stock_item_or_create(variant.id) expect(stock_item.variant).to eq variant end end - it 'finds a count_on_hand for a variant' do - expect(subject.count_on_hand(variant)).to eq 10 + it "finds a count_on_hand for a variant" do + expect(subject.count_on_hand(variant)).to eq 10 end - it 'finds determines if you a variant is backorderable' do + it "finds determines if you a variant is backorderable" do expect(subject.backorderable?(variant)).to be true end - it 'restocks a variant with a positive stock movement' do + it "restocks a variant with a positive stock movement" do originator = double expect(subject).to receive(:move).with(variant, 5, originator) subject.restock(variant, 5, originator) end - it 'unstocks a variant with a negative stock movement' do + it "unstocks a variant with a negative stock movement" do originator = double expect(subject).to receive(:move).with(variant, -5, originator) subject.unstock(variant, 5, originator) end - it 'it creates a stock_movement' do + it "it creates a stock_movement" do expect { subject.move variant, 5 }.to change { subject.stock_movements.where(stock_item_id: stock_item).count }.by(1) end - it 'can be deactivated' do + it "can be deactivated" do create(:stock_location, active: true) create(:stock_location, active: false) expect(Spree::StockLocation.active.count).to eq 1 end - it 'ensures only one stock location is default at a time' do + it "ensures only one stock location is default at a time" do first = create(:stock_location, active: true, default: true) second = create(:stock_location, active: true, default: true) @@ -166,20 +166,20 @@ module Spree expect(second.reload.default).to eq false end - context 'fill_status' do - it 'all on_hand with no backordered' do + context "fill_status" do + it "all on_hand with no backordered" do on_hand, backordered = subject.fill_status(variant, 5) expect(on_hand).to eq 5 expect(backordered).to eq 0 end - it 'some on_hand with some backordered' do + it "some on_hand with some backordered" do on_hand, backordered = subject.fill_status(variant, 20) expect(on_hand).to eq 10 expect(backordered).to eq 10 end - it 'zero on_hand with all backordered' do + it "zero on_hand with all backordered" do stock_item.set_count_on_hand(0) on_hand, backordered = subject.fill_status(variant, 20) @@ -187,12 +187,12 @@ module Spree expect(backordered).to eq 20 end - context 'when backordering is not allowed' do + context "when backordering is not allowed" do before do stock_item.update!(backorderable: false) end - it 'all on_hand' do + it "all on_hand" do stock_item.set_count_on_hand(10) on_hand, backordered = subject.fill_status(variant, 5) @@ -200,7 +200,7 @@ module Spree expect(backordered).to eq 0 end - it 'some on_hand' do + it "some on_hand" do stock_item.set_count_on_hand(10) on_hand, backordered = subject.fill_status(variant, 20) @@ -208,7 +208,7 @@ module Spree expect(backordered).to eq 0 end - it 'zero on_hand' do + it "zero on_hand" do stock_item.set_count_on_hand(0) on_hand, backordered = subject.fill_status(variant, 20) @@ -217,11 +217,11 @@ module Spree end end - context 'without stock_items' do + context "without stock_items" do subject { create(:stock_location) } let(:variant) { create(:base_variant) } - it 'zero on_hand and backordered' do + it "zero on_hand and backordered" do subject variant.stock_items.destroy_all on_hand, backordered = subject.fill_status(variant, 1) @@ -230,11 +230,11 @@ module Spree end end - context 'with soft-deleted stock_items' do + context "with soft-deleted stock_items" do subject { create(:stock_location) } let(:variant) { create(:base_variant) } - it 'zero on_hand and backordered' do + it "zero on_hand and backordered" do subject variant.stock_items.discard_all on_hand, backordered = subject.fill_status(variant, 1) @@ -244,22 +244,22 @@ module Spree end end - context '#state_text' do - context 'state is blank' do - subject { StockLocation.create(name: "testing", state: nil, state_name: 'virginia') } - specify { expect(subject.state_text).to eq('virginia') } + context "#state_text" do + context "state is blank" do + subject { StockLocation.create(name: "testing", state: nil, state_name: "virginia") } + specify { expect(subject.state_text).to eq("virginia") } end - context 'both name and abbr is present' do - let(:state) { stub_model(Spree::State, name: 'virginia', abbr: 'va') } + context "both name and abbr is present" do + let(:state) { stub_model(Spree::State, name: "virginia", abbr: "va") } subject { StockLocation.create(name: "testing", state:, state_name: nil) } - specify { expect(subject.state_text).to eq('va') } + specify { expect(subject.state_text).to eq("va") } end - context 'only name is present' do - let(:state) { stub_model(Spree::State, name: 'virginia', abbr: nil) } + context "only name is present" do + let(:state) { stub_model(Spree::State, name: "virginia", abbr: nil) } subject { StockLocation.create(name: "testing", state:, state_name: nil) } - specify { expect(subject.state_text).to eq('virginia') } + specify { expect(subject.state_text).to eq("virginia") } end end diff --git a/core/spec/models/spree/stock_movement_spec.rb b/core/spec/models/spree/stock_movement_spec.rb index d3f1e3bed3e..6c01227b172 100644 --- a/core/spec/models/spree/stock_movement_spec.rb +++ b/core/spec/models/spree/stock_movement_spec.rb @@ -1,28 +1,28 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::StockMovement, type: :model do let(:stock_location) { create(:stock_location_with_items) } let(:stock_item) { stock_location.stock_items.order(:id).first } subject { build(:stock_movement, stock_item:) } - it 'should belong to a stock item' do + it "should belong to a stock item" do expect(subject).to respond_to(:stock_item) end - it 'should have a variant' do + it "should have a variant" do expect(subject).to respond_to(:variant) end - it 'is readonly unless new' do + it "is readonly unless new" do subject.save expect { subject.save }.to raise_error(ActiveRecord::ReadOnlyRecord) end - it 'does not update count on hand when track inventory levels is false' do + it "does not update count on hand when track inventory levels is false" do stub_spree_preferences(track_inventory_levels: false) subject.quantity = 1 subject.save @@ -30,7 +30,7 @@ expect(stock_item.count_on_hand).to eq(10) end - it 'does not update count on hand when variant inventory tracking is off' do + it "does not update count on hand when variant inventory tracking is off" do stock_item.variant.track_inventory = false subject.quantity = 1 subject.save diff --git a/core/spec/models/spree/stock_quantities_spec.rb b/core/spec/models/spree/stock_quantities_spec.rb index b3ba6249ec5..7cc61cee091 100644 --- a/core/spec/models/spree/stock_quantities_spec.rb +++ b/core/spec/models/spree/stock_quantities_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::StockQuantities, type: :model do let(:variant1) { mock_model(Spree::Variant) } @@ -24,7 +24,7 @@ def expect_each end context "with one item" do - let(:quantities) { { variant1 => 2 } } + let(:quantities) { {variant1 => 2} } it "yields values" do expect_each.to yield_with_args([variant1, 2]) @@ -32,7 +32,7 @@ def expect_each end context "with two items" do - let(:quantities) { { variant1 => 2, variant2 => 3 } } + let(:quantities) { {variant1 => 2, variant2 => 3} } it "yields values" do expect_each.to yield_successive_args([variant1, 2], [variant2, 3]) @@ -42,7 +42,7 @@ def expect_each describe "#variants" do context "with one item" do - let(:quantities) { { variant1 => 2 } } + let(:quantities) { {variant1 => 2} } it "returns variant" do expect(subject.variants).to eq [variant1] @@ -50,7 +50,7 @@ def expect_each end context "with two items" do - let(:quantities) { { variant1 => 2, variant2 => 3 } } + let(:quantities) { {variant1 => 2, variant2 => 3} } it "returns both variants" do expect(subject.variants).to eq [variant1, variant2] @@ -65,24 +65,24 @@ def expect_each end context "only quantity 0" do - let(:quantities) { { variant1 => 0 } } + let(:quantities) { {variant1 => 0} } it { is_expected.to be_empty } end context "positive quantity" do - let(:quantities) { { variant1 => 1 } } + let(:quantities) { {variant1 => 1} } it { is_expected.not_to be_empty } end context "one variant positive one zero" do - let(:quantities) { { variant1 => 1, variant2 => 0 } } + let(:quantities) { {variant1 => 1, variant2 => 0} } it { is_expected.not_to be_empty } end context "negative quantity" do # empty? doesn't make a whole lot of sense in this case, but returning # false is probably more accurate. - let(:quantities) { { variant1 => -1 } } + let(:quantities) { {variant1 => -1} } it { is_expected.not_to be_empty } end end @@ -99,31 +99,31 @@ def expect_each end context "when both equal" do - let(:quantity1) { { variant1 => 1 } } - let(:quantity2) { { variant1 => 1 } } + let(:quantity1) { {variant1 => 1} } + let(:quantity2) { {variant1 => 1} } it { is_expected.to be true } end context "with different order" do - let(:quantity1) { { variant1 => 1, variant2 => 2 } } - let(:quantity2) { { variant2 => 2, variant1 => 1 } } + let(:quantity1) { {variant1 => 1, variant2 => 2} } + let(:quantity2) { {variant2 => 2, variant1 => 1} } it { is_expected.to be true } end context "with different variant" do - let(:quantity1) { { variant1 => 1 } } - let(:quantity2) { { variant2 => 1 } } + let(:quantity1) { {variant1 => 1} } + let(:quantity2) { {variant2 => 1} } it { is_expected.to be false } end context "with different quantities" do - let(:quantity1) { { variant1 => 1 } } - let(:quantity2) { { variant1 => 2 } } + let(:quantity1) { {variant1 => 1} } + let(:quantity2) { {variant1 => 2} } it { is_expected.to be false } end context "nil != 0" do - let(:quantity1) { { variant1 => 0 } } + let(:quantity1) { {variant1 => 0} } let(:quantity2) { {} } it { is_expected.to be false } end @@ -135,31 +135,31 @@ def expect_each end context "same variant" do - let(:quantity1) { { variant1 => 20 } } - let(:quantity2) { { variant1 => 22 } } + let(:quantity1) { {variant1 => 20} } + let(:quantity2) { {variant1 => 22} } - it { is_expected.to eq described_class.new({ variant1 => 42 }) } + it { is_expected.to eq described_class.new({variant1 => 42}) } end context "different variants" do - let(:quantity1) { { variant1 => 1 } } - let(:quantity2) { { variant2 => 2 } } + let(:quantity1) { {variant1 => 1} } + let(:quantity2) { {variant2 => 2} } - it { is_expected.to eq described_class.new({ variant1 => 1, variant2 => 2 }) } + it { is_expected.to eq described_class.new({variant1 => 1, variant2 => 2}) } end context "0 quantities" do - let(:quantity1) { { variant1 => 0 } } - let(:quantity2) { { variant2 => 1 } } + let(:quantity1) { {variant1 => 0} } + let(:quantity2) { {variant2 => 1} } - it { is_expected.to eq described_class.new({ variant1 => 0, variant2 => 1 }) } + it { is_expected.to eq described_class.new({variant1 => 0, variant2 => 1}) } end context "empty quantity" do - let(:quantity1) { { variant1 => 1 } } + let(:quantity1) { {variant1 => 1} } let(:quantity2) { {} } - it { is_expected.to eq described_class.new({ variant1 => 1 }) } + it { is_expected.to eq described_class.new({variant1 => 1}) } end end @@ -169,38 +169,38 @@ def expect_each end context "same variant" do - let(:quantity1) { { variant1 => 22 } } - let(:quantity2) { { variant1 => 20 } } + let(:quantity1) { {variant1 => 22} } + let(:quantity2) { {variant1 => 20} } - it { is_expected.to eq described_class.new({ variant1 => 2 }) } + it { is_expected.to eq described_class.new({variant1 => 2}) } end context "different variants" do - let(:quantity1) { { variant1 => 1 } } - let(:quantity2) { { variant2 => 2 } } + let(:quantity1) { {variant1 => 1} } + let(:quantity2) { {variant2 => 2} } - it { is_expected.to eq described_class.new({ variant1 => 1, variant2 => -2 }) } + it { is_expected.to eq described_class.new({variant1 => 1, variant2 => -2}) } end context "0 quantity" do - let(:quantity1) { { variant1 => 0 } } - let(:quantity2) { { variant1 => 1 } } + let(:quantity1) { {variant1 => 0} } + let(:quantity2) { {variant1 => 1} } - it { is_expected.to eq described_class.new({ variant1 => -1 }) } + it { is_expected.to eq described_class.new({variant1 => -1}) } end context "empty quantity RHS" do - let(:quantity1) { { variant1 => 1 } } + let(:quantity1) { {variant1 => 1} } let(:quantity2) { {} } - it { is_expected.to eq described_class.new({ variant1 => 1 }) } + it { is_expected.to eq described_class.new({variant1 => 1}) } end context "empty quantity LHS" do let(:quantity1) { {} } - let(:quantity2) { { variant1 => 1 } } + let(:quantity2) { {variant1 => 1} } - it { is_expected.to eq described_class.new({ variant1 => -1 }) } + it { is_expected.to eq described_class.new({variant1 => -1}) } end end @@ -211,36 +211,36 @@ def expect_each end context "same variant" do - let(:quantity1) { { variant1 => 20 } } - let(:quantity2) { { variant1 => 22 } } + let(:quantity1) { {variant1 => 20} } + let(:quantity2) { {variant1 => 22} } - it { is_expected.to eq described_class.new({ variant1 => 20 }) } + it { is_expected.to eq described_class.new({variant1 => 20}) } end context "multiple variants" do - let(:quantity1) { { variant1 => 10, variant2 => 20 } } - let(:quantity2) { { variant1 => 12, variant2 => 14 } } + let(:quantity1) { {variant1 => 10, variant2 => 20} } + let(:quantity2) { {variant1 => 12, variant2 => 14} } - it { is_expected.to eq described_class.new({ variant1 => 10, variant2 => 14 }) } + it { is_expected.to eq described_class.new({variant1 => 10, variant2 => 14}) } end context "different variants" do - let(:quantity1) { { variant1 => 1 } } - let(:quantity2) { { variant2 => 2 } } + let(:quantity1) { {variant1 => 1} } + let(:quantity2) { {variant2 => 2} } it { is_expected.to be_empty } it { is_expected.to eq described_class.new({}) } end context "0 quantities" do - let(:quantity1) { { variant1 => 0 } } - let(:quantity2) { { variant1 => 1 } } + let(:quantity1) { {variant1 => 0} } + let(:quantity2) { {variant1 => 1} } - it { is_expected.to eq described_class.new({ variant1 => 0 }) } + it { is_expected.to eq described_class.new({variant1 => 0}) } end context "empty quantity" do - let(:quantity1) { { variant1 => 1 } } + let(:quantity1) { {variant1 => 1} } let(:quantity2) { {} } it { is_expected.to eq described_class.new({}) } diff --git a/core/spec/models/spree/store_credit_category_spec.rb b/core/spec/models/spree/store_credit_category_spec.rb index bf6361edbe0..97d8973d180 100644 --- a/core/spec/models/spree/store_credit_category_spec.rb +++ b/core/spec/models/spree/store_credit_category_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::StoreCreditCategory, type: :model do describe "#non_expiring?" do diff --git a/core/spec/models/spree/store_credit_event_spec.rb b/core/spec/models/spree/store_credit_event_spec.rb index 0463dd65236..93a86d02daa 100644 --- a/core/spec/models/spree/store_credit_event_spec.rb +++ b/core/spec/models/spree/store_credit_event_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::StoreCreditEvent do describe ".exposed_events" do @@ -202,7 +202,7 @@ end it "uses the events amount attribute" do - expect(subject.display_amount).to eq Spree::Money.new(event_amount, { currency: subject.currency }) + expect(subject.display_amount).to eq Spree::Money.new(event_amount, {currency: subject.currency}) end end @@ -216,7 +216,7 @@ end it "uses the events user_total_amount attribute" do - expect(subject.display_user_total_amount).to eq Spree::Money.new(user_total_amount, { currency: subject.currency }) + expect(subject.display_user_total_amount).to eq Spree::Money.new(user_total_amount, {currency: subject.currency}) end end @@ -230,7 +230,7 @@ end it "uses the events amount_remaining attribute" do - expect(subject.display_remaining_amount).to eq Spree::Money.new(amount_remaining, { currency: subject.currency }) + expect(subject.display_remaining_amount).to eq Spree::Money.new(amount_remaining, {currency: subject.currency}) end end @@ -315,8 +315,8 @@ context "there is an associated payment with the event" do let(:authorization_code) { "1-SC-TEST" } - let(:order) { create(:order) } - let!(:payment) { create(:store_credit_payment, order:, response_code: authorization_code) } + let(:order) { create(:order) } + let!(:payment) { create(:store_credit_payment, order:, response_code: authorization_code) } subject { create(:store_credit_auth_event, action: Spree::StoreCredit::CAPTURE_ACTION, authorization_code:) } diff --git a/core/spec/models/spree/store_credit_prioritizer_spec.rb b/core/spec/models/spree/store_credit_prioritizer_spec.rb index a93fec6676a..6cf15e6d842 100644 --- a/core/spec/models/spree/store_credit_prioritizer_spec.rb +++ b/core/spec/models/spree/store_credit_prioritizer_spec.rb @@ -1,23 +1,23 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::StoreCreditPrioritizer, type: :model do let(:order) { create(:order) } let(:credits) { Spree::StoreCredit.all } let(:sorter) { described_class.new(credits, order) } - describe '#call' do + describe "#call" do subject { sorter.call } - let(:credit_type_1) { create(:primary_credit_type, priority: '30') } + let(:credit_type_1) { create(:primary_credit_type, priority: "30") } let!(:credit_1) { create(:store_credit, credit_type: credit_type_1) } - let(:credit_type_2) { create(:primary_credit_type, priority: '20') } + let(:credit_type_2) { create(:primary_credit_type, priority: "20") } let!(:credit_2) { create(:store_credit, credit_type: credit_type_2) } - let(:credit_type_3) { create(:primary_credit_type, priority: '10') } + let(:credit_type_3) { create(:primary_credit_type, priority: "10") } let!(:credit_3) { create(:store_credit, credit_type: credit_type_3) } - it 'returns the credits ordered by their priority' do + it "returns the credits ordered by their priority" do expect(subject.to_a).to eq([credit_3, credit_2, credit_1]) end end diff --git a/core/spec/models/spree/store_credit_spec.rb b/core/spec/models/spree/store_credit_spec.rb index 1612b24e257..1d5321cba4b 100644 --- a/core/spec/models/spree/store_credit_spec.rb +++ b/core/spec/models/spree/store_credit_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::StoreCredit do include ActiveSupport::Testing::TimeHelpers @@ -18,7 +18,7 @@ describe "#discard" do subject { store_credit.discard } - it 'can not delete the store credit' do + it "can not delete the store credit" do subject expect(store_credit.reload).to eq store_credit expect(store_credit.errors[:amount_used]).to include("is greater than zero. Can not delete store credit") @@ -61,7 +61,7 @@ end it "doesn't overwrite the type" do - expect{ subject }.to_not change{ store_credit.credit_type } + expect { subject }.to_not change { store_credit.credit_type } end end end @@ -168,7 +168,7 @@ let(:amount) { "1,000.50" } before do - expect(I18n).to receive(:t).with(:'number.currency.format.separator') do + expect(I18n).to receive(:t).with(:"number.currency.format.separator") do "." end end @@ -182,7 +182,7 @@ let(:amount) { "1.000,50" } before do - expect(I18n).to receive(:t).with(:'number.currency.format.separator') do + expect(I18n).to receive(:t).with(:"number.currency.format.separator") do "," end end @@ -241,7 +241,7 @@ describe "#authorize" do context "amount is valid" do - let(:authorization_amount) { 1.0 } + let(:authorization_amount) { 1.0 } let(:added_authorization_amount) { 3.0 } let(:originator) { nil } @@ -322,7 +322,7 @@ end end - context 'troublesome floats' do + context "troublesome floats" do if Gem::Requirement.new("~> 3.0.0") === Gem::Version.new(BigDecimal::VERSION) # BigDecimal 2.0.0> 8.21.to_d # => 0.821e1 (all good!) # BigDecimal 3.0.0> 8.21.to_d # => 0.8210000000000001e1 (`8.21.to_d < 8.21` is `true`!!!) @@ -330,7 +330,7 @@ before { pending "https://github.com/rails/rails/issues/42098; https://github.com/ruby/bigdecimal/issues/192" } end - let(:store_credit_attrs) { { amount: 8.21 } } + let(:store_credit_attrs) { {amount: 8.21} } subject { store_credit.validate_authorization(store_credit_attrs[:amount], store_credit.currency) } @@ -340,7 +340,7 @@ describe "#capture" do let(:authorized_amount) { 10.00 } - let(:auth_code) { "23-SC-20140602164814476128" } + let(:auth_code) { "23-SC-20140602164814476128" } before do @original_authed_amount = store_credit.amount_authorized @@ -413,7 +413,7 @@ end describe "#void" do - let(:auth_code) { "1-SC-20141111111111" } + let(:auth_code) { "1-SC-20141111111111" } let(:store_credit) { create(:store_credit, amount_used: 150.0) } let(:originator) { nil } @@ -436,10 +436,10 @@ let(:captured_amount) { 10.0 } let!(:capture_event) { create(:store_credit_auth_event, - action: Spree::StoreCredit::CAPTURE_ACTION, - authorization_code: auth_code, - amount: captured_amount, - store_credit:) + action: Spree::StoreCredit::CAPTURE_ACTION, + authorization_code: auth_code, + amount: captured_amount, + store_credit:) } it "returns false" do @@ -447,7 +447,7 @@ end it "does not change the amount used on the store credit" do - expect { subject }.to_not change{ store_credit.amount_used.to_f } + expect { subject }.to_not change { store_credit.amount_used.to_f } end end @@ -457,9 +457,9 @@ let(:authorized_amount) { 10.0 } let!(:auth_event) { create(:store_credit_auth_event, - authorization_code: auth_code, - amount: authorized_amount, - store_credit:) + authorization_code: auth_code, + amount: authorized_amount, + store_credit:) } it "returns true" do @@ -467,7 +467,7 @@ end it "returns the authorized amount to the store credit" do - expect { subject }.to change{ store_credit.amount_authorized.to_f }.by(-authorized_amount) + expect { subject }.to change { store_credit.amount_authorized.to_f }.by(-authorized_amount) end context "originator is present" do @@ -483,24 +483,24 @@ describe "#credit" do let(:event_auth_code) { "1-SC-20141111111111" } - let(:amount_used) { 10.0 } - let(:store_credit) { create(:store_credit, amount_used:) } - let!(:capture_event) { + let(:amount_used) { 10.0 } + let(:store_credit) { create(:store_credit, amount_used:) } + let!(:capture_event) { create(:store_credit_auth_event, - action: Spree::StoreCredit::CAPTURE_ACTION, - authorization_code: event_auth_code, - amount: captured_amount, - store_credit:) + action: Spree::StoreCredit::CAPTURE_ACTION, + authorization_code: event_auth_code, + amount: captured_amount, + store_credit:) } let(:originator) { nil } subject { store_credit.credit(credit_amount, auth_code, currency, action_originator: originator) } context "currency does not match" do - let(:currency) { "AUD" } - let(:credit_amount) { 5.0 } + let(:currency) { "AUD" } + let(:credit_amount) { 5.0 } let(:captured_amount) { 100.0 } - let(:auth_code) { event_auth_code } + let(:auth_code) { event_auth_code } it "returns false" do expect(subject).to be false @@ -513,10 +513,10 @@ end context "unable to find capture event" do - let(:currency) { "USD" } - let(:credit_amount) { 5.0 } + let(:currency) { "USD" } + let(:credit_amount) { 5.0 } let(:captured_amount) { 100.0 } - let(:auth_code) { "UNKNOWN_CODE" } + let(:auth_code) { "UNKNOWN_CODE" } it "returns false" do expect(subject).to be false @@ -529,10 +529,10 @@ end context "amount is more than what is captured" do - let(:currency) { "USD" } - let(:credit_amount) { 100.0 } + let(:currency) { "USD" } + let(:credit_amount) { 100.0 } let(:captured_amount) { 5.0 } - let(:auth_code) { event_auth_code } + let(:auth_code) { event_auth_code } it "returns false" do expect(subject).to be false @@ -545,10 +545,10 @@ end context "amount is successfully credited" do - let(:currency) { "USD" } - let(:credit_amount) { 5.0 } + let(:currency) { "USD" } + let(:credit_amount) { 5.0 } let(:captured_amount) { 100.0 } - let(:auth_code) { event_auth_code } + let(:auth_code) { event_auth_code } context "credit_to_new_allocation is set" do before { stub_spree_preferences(credit_to_new_allocation: true) } @@ -659,12 +659,12 @@ describe "#can_capture?" do let(:store_credit) { create(:store_credit) } - let(:payment) { create(:payment, state: payment_state) } + let(:payment) { create(:payment, state: payment_state) } subject { store_credit.can_capture?(payment) } context "pending payment" do - let(:payment_state) { 'pending' } + let(:payment_state) { "pending" } it "returns true" do expect(subject).to be true @@ -672,7 +672,7 @@ end context "checkout payment" do - let(:payment_state) { 'checkout' } + let(:payment_state) { "checkout" } it "returns true" do expect(subject).to be true @@ -688,7 +688,7 @@ end context "invalid payment" do - let(:payment_state) { 'invalid' } + let(:payment_state) { "invalid" } it "returns false" do expect(subject).to be false @@ -696,7 +696,7 @@ end context "complete payment" do - let(:payment_state) { 'completed' } + let(:payment_state) { "completed" } it "returns false" do expect(subject).to be false @@ -706,12 +706,12 @@ describe "#can_void?" do let(:store_credit) { create(:store_credit) } - let(:payment) { create(:payment, state: payment_state) } + let(:payment) { create(:payment, state: payment_state) } subject { store_credit.can_void?(payment) } context "pending payment" do - let(:payment_state) { 'pending' } + let(:payment_state) { "pending" } it "returns true" do expect(subject).to be true @@ -719,7 +719,7 @@ end context "checkout payment" do - let(:payment_state) { 'checkout' } + let(:payment_state) { "checkout" } it "returns false" do expect(subject).to be false @@ -735,7 +735,7 @@ end context "invalid payment" do - let(:payment_state) { 'invalid' } + let(:payment_state) { "invalid" } it "returns false" do expect(subject).to be false @@ -743,7 +743,7 @@ end context "complete payment" do - let(:payment_state) { 'completed' } + let(:payment_state) { "completed" } it "returns false" do expect(subject).to be false @@ -753,7 +753,7 @@ describe "#can_credit?" do let(:store_credit) { create(:store_credit) } - let(:payment) { create(:payment, state: payment_state) } + let(:payment) { create(:payment, state: payment_state) } subject { store_credit.can_credit?(payment) } @@ -769,7 +769,7 @@ let(:payment_state) { "completed" } context "credit is owed on the order" do - before { allow(payment.order).to receive_messages(payment_state: 'credit_owed') } + before { allow(payment.order).to receive_messages(payment_state: "credit_owed") } context "payment doesn't have allowed credit" do before { allow(payment).to receive_messages(credit_allowed: 0.0) } @@ -814,9 +814,9 @@ end context "user has multiple store credits" do - let(:store_credit_amount) { 100.0 } + let(:store_credit_amount) { 100.0 } let(:additional_store_credit_amount) { 200.0 } - let(:user) { create(:user) } + let(:user) { create(:user) } let!(:store_credits) do [ @@ -916,7 +916,7 @@ before { store_credit.authorize(5.0, "USD") } it "prevents invalidation" do expect { subject }.to_not change { store_credit.reload.invalidated_at } - expect(store_credit.errors[:invalidated_at].join).to match /uncaptured authorization/ + expect(store_credit.errors[:invalidated_at].join).to match(/uncaptured authorization/) end end diff --git a/core/spec/models/spree/store_selector/by_server_name_spec.rb b/core/spec/models/spree/store_selector/by_server_name_spec.rb index 8ffddca7d78..dfc29d53c9a 100644 --- a/core/spec/models/spree/store_selector/by_server_name_spec.rb +++ b/core/spec/models/spree/store_selector/by_server_name_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::StoreSelector::ByServerName do describe "#store" do subject { described_class.new(request).store } - let(:request) { double(headers: {}, env: { "SERVER_NAME" => "www.example.com" } ) } + let(:request) { double(headers: {}, env: {"SERVER_NAME" => "www.example.com"}) } context "with no match" do it "returns a new store with current domain as the url" do @@ -22,7 +22,7 @@ end context "with a domain match" do - let(:request) { double(headers: {}, env: { "SERVER_NAME" => url } ) } + let(:request) { double(headers: {}, env: {"SERVER_NAME" => url}) } let(:url) { "server-name.org" } let!(:store_2) { create :store, default: false, url: } diff --git a/core/spec/models/spree/store_selector/legacy_spec.rb b/core/spec/models/spree/store_selector/legacy_spec.rb index 32dd3a24a8b..4ee7aea58d8 100644 --- a/core/spec/models/spree/store_selector/legacy_spec.rb +++ b/core/spec/models/spree/store_selector/legacy_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::StoreSelector::Legacy do describe "#store" do @@ -15,7 +15,7 @@ end context "with a domain match" do - let(:request) { double(headers: {}, env: { "SERVER_NAME" => url } ) } + let(:request) { double(headers: {}, env: {"SERVER_NAME" => url}) } let(:url) { "server-name.org" } let!(:store_2) { create :store, default: false, url: } @@ -23,7 +23,7 @@ expect(subject).to eq(store_2) end - context 'the store has multiple URLs' do + context "the store has multiple URLs" do let!(:store_2) { create :store, default: false, url: "foo\n#{url}\nbar" } it "returns the store with the matching domain" do @@ -32,7 +32,7 @@ end context "with headers" do - let(:request) { double(headers: { "HTTP_SPREE_STORE" => headers_code }, env: {}) } + let(:request) { double(headers: {"HTTP_SPREE_STORE" => headers_code}, env: {}) } let(:headers_code) { "HEADERS" } let!(:store_3) { create :store, code: headers_code, default: false } diff --git a/core/spec/models/spree/store_spec.rb b/core/spec/models/spree/store_spec.rb index 9bf552581d6..f956916d260 100644 --- a/core/spec/models/spree/store_spec.rb +++ b/core/spec/models/spree/store_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Store, type: :model do it { is_expected.to respond_to(:cart_tax_country_iso) } @@ -31,10 +31,10 @@ end end - describe '#default_cart_tax_location' do + describe "#default_cart_tax_location" do subject { described_class.new(cart_tax_country_iso:) } context "when there is no cart_tax_country_iso set" do - let(:cart_tax_country_iso) { '' } + let(:cart_tax_country_iso) { "" } it "responds with an empty default_cart_tax_location" do expect(subject.default_cart_tax_location).to be_empty end @@ -50,11 +50,11 @@ end end - describe '#available_locales' do + describe "#available_locales" do let(:store) { described_class.new(available_locales: locales) } subject { store.available_locales } - context 'with available_locales: []' do + context "with available_locales: []" do let(:locales) { [] } it "returns all available locales" do @@ -66,7 +66,7 @@ end end - context 'with available_locales: [:en]' do + context "with available_locales: [:en]" do let(:locales) { [:en] } it "returns [:en]" do @@ -78,7 +78,7 @@ end end - context 'with available_locales: [:en, :fr]' do + context "with available_locales: [:en, :fr]" do let(:locales) { [:en, :fr] } it "returns [:fr]" do @@ -90,7 +90,7 @@ end end - context 'with available_locales: [:fr]' do + context "with available_locales: [:fr]" do let(:locales) { [:fr] } it "returns [:fr]" do @@ -107,16 +107,16 @@ end end - describe 'enum reverse_charge_status' do - it 'defines the expected enum values' do + describe "enum reverse_charge_status" do + it "defines the expected enum values" do expect(Spree::Store.reverse_charge_statuses).to eq({ - 'disabled' => 0, - 'enabled' => 1, - 'not_validated' => 2 + "disabled" => 0, + "enabled" => 1, + "not_validated" => 2 }) end - it 'allows valid values' do + it "allows valid values" do store = build(:store) # Updates the reverse_charge_status to "not_validated" expect(store).to be_valid @@ -132,7 +132,7 @@ expect(store).to be_valid end - it 'raises an error for invalid values' do + it "raises an error for invalid values" do expect { Spree::Store.new(reverse_charge_status: :invalid_status) }.to raise_error(ArgumentError) end end diff --git a/core/spec/models/spree/tax/order_adjuster_spec.rb b/core/spec/models/spree/tax/order_adjuster_spec.rb index 55cd1dc263e..52cd1314dce 100644 --- a/core/spec/models/spree/tax/order_adjuster_spec.rb +++ b/core/spec/models/spree/tax/order_adjuster_spec.rb @@ -1,19 +1,19 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Tax::OrderAdjuster do subject(:adjuster) { described_class.new(order) } - describe 'initialization' do + describe "initialization" do let(:order) { Spree::Order.new } - it 'sets order to adjustable' do + it "sets order to adjustable" do expect(adjuster.order).to eq(order) end end - describe '#adjust!' do + describe "#adjust!" do let(:order) { Spree::Order.new } let(:custom_calculator_class) { double } @@ -23,7 +23,7 @@ stub_spree_preferences(tax_calculator_class: custom_calculator_class) end - it 'calls the configured tax calculator' do + it "calls the configured tax calculator" do expect(custom_calculator_class).to receive(:new).with(order).at_least(:once).and_return(custom_calculator_instance) expect(custom_calculator_instance).to receive(:calculate).at_least(:once).and_return( Spree::Tax::OrderTax.new(order_id: order.id, line_item_taxes: [], shipment_taxes: []) diff --git a/core/spec/models/spree/tax/tax_helpers_spec.rb b/core/spec/models/spree/tax/tax_helpers_spec.rb index 566c7fbd8cf..a9818e581ab 100644 --- a/core/spec/models/spree/tax/tax_helpers_spec.rb +++ b/core/spec/models/spree/tax/tax_helpers_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Tax::TaxHelpers do before do - stub_const('DummyClass', Class.new do + stub_const("DummyClass", Class.new do include Spree::Tax::TaxHelpers def valid_rates(item) @@ -27,21 +27,21 @@ def valid_rates(item) subject { DummyClass.new.valid_rates(item) } - describe '#rates_for_item' do - it 'returns tax rates that match the tax category of the given item' do + describe "#rates_for_item" do + it "returns tax rates that match the tax category of the given item" do expect(subject).to contain_exactly(tax_rate) end - context 'when multiple rates exist that are currently not valid' do + context "when multiple rates exist that are currently not valid" do let(:starts_at) { 1.day.from_now } let(:expires_at) { 2.days.from_now } let!(:invalid_tax_rate) do create(:tax_rate, tax_categories: [tax_category], zone:, - starts_at:, expires_at:) + starts_at:, expires_at:) end - it 'returns only active rates that match the tax category of given item' do + it "returns only active rates that match the tax category of given item" do expect(Spree::TaxRate.for_address(tax_address)).to contain_exactly(tax_rate, invalid_tax_rate) expect(subject).to contain_exactly(tax_rate) diff --git a/core/spec/models/spree/tax/tax_location_spec.rb b/core/spec/models/spree/tax/tax_location_spec.rb index e3b740b4271..dcd4460e00b 100644 --- a/core/spec/models/spree/tax/tax_location_spec.rb +++ b/core/spec/models/spree/tax/tax_location_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Tax::TaxLocation do let(:country) { build_stubbed(:country) } @@ -18,10 +18,10 @@ end end - describe '#==' do + describe "#==" do let(:other) { described_class.new(state: nil, country: nil) } - it 'compares the values of state id and country id and does not care about object identity' do + it "compares the values of state id and country id and does not care about object identity" do expect(subject).to eq(other) end end @@ -29,8 +29,8 @@ describe "initialization" do subject { described_class.new(**args) } - context 'with a country object' do - let(:args) { { country: } } + context "with a country object" do + let(:args) { {country:} } it "will yield a location with that country's id" do expect(subject.country_id).to eq(country.id) @@ -42,14 +42,14 @@ let(:country) { create(:country) } subject { described_class.new(**args).country } - context 'with a country object' do - let(:args) { { country: } } + context "with a country object" do + let(:args) { {country:} } it { is_expected.to eq(country) } end - context 'with no country object' do - let(:args) { { country: nil } } + context "with no country object" do + let(:args) { {country: nil} } it { is_expected.to be nil } end @@ -58,19 +58,19 @@ describe "#empty?" do subject { described_class.new(**args).empty? } - context 'with a country present' do - let(:args) { { country: } } + context "with a country present" do + let(:args) { {country:} } it { is_expected.to be false } end - context 'with a state present' do - let(:args) { { state: } } + context "with a state present" do + let(:args) { {state:} } it { is_expected.to be false } end - context 'with no region data present' do + context "with no region data present" do let(:args) { {} } it { is_expected.to be true } diff --git a/core/spec/models/spree/tax/taxation_integration_spec.rb b/core/spec/models/spree/tax/taxation_integration_spec.rb index f21768c906c..bc8730a15dc 100644 --- a/core/spec/models/spree/tax/taxation_integration_spec.rb +++ b/core/spec/models/spree/tax/taxation_integration_spec.rb @@ -1,29 +1,29 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe "Taxation system integration tests" do let(:order) { create :order, ship_address: shipping_address, state: "delivery" } let(:book_product) do create :product, - price: 20, - name: "Book", - tax_category: books_category, - shipping_category: books_shipping_category + price: 20, + name: "Book", + tax_category: books_category, + shipping_category: books_shipping_category end let(:download_product) do create :product, - price: 10, - name: "Download", - tax_category: digital_category, - shipping_category: digital_shipping_category + price: 10, + name: "Download", + tax_category: digital_category, + shipping_category: digital_shipping_category end let(:sweater_product) do create :product, - price: 30, - name: "Download", - tax_category: normal_category, - shipping_category: normal_shipping_category + price: 30, + name: "Download", + tax_category: normal_category, + shipping_category: normal_shipping_category end let(:fruit_product) do create :product, @@ -52,11 +52,11 @@ let(:shipment) { order.shipments.first } let(:shipping_rate) { shipment.shipping_rates.first } - context 'selling from germany' do + context "selling from germany" do let(:germany) { create :country, iso: "DE" } let!(:germany_zone) { create :zone, countries: [germany] } let(:romania) { create(:country, iso: "RO") } - let(:romania_zone) { create(:zone, countries: [romania] ) } + let(:romania_zone) { create(:zone, countries: [romania]) } let(:eu_zone) { create(:zone, countries: [romania, germany]) } let(:world_zone) { create(:zone, :with_country) } @@ -112,26 +112,26 @@ end let!(:book_shipping_method) do create :shipping_method, - cost: 8.00, - shipping_categories: [books_shipping_category], - tax_category: books_category, - zones: [eu_zone, world_zone] + cost: 8.00, + shipping_categories: [books_shipping_category], + tax_category: books_category, + zones: [eu_zone, world_zone] end let!(:sweater_shipping_method) do create :shipping_method, - cost: 16.00, - shipping_categories: [normal_shipping_category], - tax_category: normal_category, - zones: [eu_zone, world_zone] + cost: 16.00, + shipping_categories: [normal_shipping_category], + tax_category: normal_category, + zones: [eu_zone, world_zone] end let!(:premium_download_shipping_method) do create :shipping_method, - cost: 2.00, - shipping_categories: [digital_shipping_category], - tax_category: digital_category, - zones: [eu_zone, world_zone] + cost: 2.00, + shipping_categories: [digital_shipping_category], + tax_category: digital_category, + zones: [eu_zone, world_zone] end before do @@ -139,413 +139,413 @@ order.contents.add(variant) end - context 'to germany' do + context "to germany" do let(:shipping_address) { create :address, country_iso_code: "DE" } - context 'an order with a book' do + context "an order with a book" do let(:variant) { book } - it 'still has the original price' do + it "still has the original price" do expect(line_item.price).to eq(20) end - it 'has one tax adjustment' do + it "has one tax adjustment" do expect(line_item.adjustments.tax.count).to eq(1) end - it 'has 1.13 cents of included tax' do + it "has 1.13 cents of included tax" do expect(line_item.included_tax_total).to eq(1.31) end end - context 'an order with a book and a shipment' do + context "an order with a book and a shipment" do let(:variant) { book } before { 2.times { order.next! } } - it 'has a shipment for 8.00 dollars' do + it "has a shipment for 8.00 dollars" do expect(shipment.amount).to eq(8.00) end - it 'has a shipment with 0.52 included tax' do + it "has a shipment with 0.52 included tax" do expect(shipment.included_tax_total).to eq(0.52) end - it 'has a shipping rate that correctly reflects the shipment' do + it "has a shipping rate that correctly reflects the shipment" do expect(shipping_rate.display_price).to eq("$8.00 (incl. $0.52 German reduced VAT)") end end - context 'an order with a sweater' do + context "an order with a sweater" do let(:variant) { sweater } - it 'still has the original price' do + it "still has the original price" do expect(line_item.price).to eq(30) end - it 'has one tax adjustment' do + it "has one tax adjustment" do expect(line_item.adjustments.tax.count).to eq(1) end - it 'has 4,78 of included tax' do + it "has 4,78 of included tax" do expect(line_item.included_tax_total).to eq(4.79) end end - context 'an order with a sweater and a shipment' do + context "an order with a sweater and a shipment" do let(:variant) { sweater } before { 2.times { order.next! } } - it 'has a shipment for 16.00 dollars' do + it "has a shipment for 16.00 dollars" do expect(shipment.amount).to eq(16.00) end - it 'has a shipment with 2.55 included tax' do + it "has a shipment with 2.55 included tax" do expect(shipment.included_tax_total).to eq(2.55) end - it 'has a shipping rate that correctly reflects the shipment' do + it "has a shipping rate that correctly reflects the shipment" do expect(shipping_rate.display_price).to eq("$16.00 (incl. $2.55 German VAT)") end end - context 'an order with a download' do + context "an order with a download" do let(:variant) { download } - it 'still has the original price' do + it "still has the original price" do expect(line_item.price).to eq(10) end - it 'has one tax adjustment' do + it "has one tax adjustment" do expect(line_item.adjustments.tax.count).to eq(1) end - it 'has 1.60 of included tax' do + it "has 1.60 of included tax" do expect(line_item.included_tax_total).to eq(1.60) end end - context 'an order with a download and a shipment' do + context "an order with a download and a shipment" do let(:variant) { download } before { 2.times { order.next! } } - it 'has a shipment for 4.00 dollars' do + it "has a shipment for 4.00 dollars" do expect(shipment.amount).to eq(2.00) end - it 'has a shipment with 0.64 included tax' do + it "has a shipment with 0.64 included tax" do expect(shipment.included_tax_total).to eq(0.32) end - it 'has a shipping rate that correctly reflects the shipment' do + it "has a shipping rate that correctly reflects the shipment" do expect(shipping_rate.display_price).to eq("$2.00 (incl. $0.32 German VAT)") end end - context 'an order containg a fruit' do + context "an order containg a fruit" do let(:variant) { fruit } - it 'still has the original price' do + it "still has the original price" do expect(line_item.price).to eq(5) end - it 'has one tax adjustment' do + it "has one tax adjustment" do expect(line_item.adjustments.tax.count).to eq(1) end - it 'has 0.45 of included tax' do + it "has 0.45 of included tax" do expect(line_item.included_tax_total).to eq(0.41) end end end - context 'to romania' do + context "to romania" do let(:shipping_address) { create :address, country_iso_code: "RO" } - context 'an order with a book' do + context "an order with a book" do let(:variant) { book } - it 'still has the original price' do + it "still has the original price" do expect(line_item.price).to eq(20) end - it 'is adjusted to the original price' do + it "is adjusted to the original price" do expect(line_item.total).to eq(20) end - it 'has one tax adjustment' do + it "has one tax adjustment" do expect(line_item.adjustments.tax.count).to eq(1) end - it 'has 1.13 cents of included tax' do + it "has 1.13 cents of included tax" do expect(line_item.included_tax_total).to eq(1.31) end - it 'has a constant amount pre tax' do + it "has a constant amount pre tax" do expect(line_item.total_before_tax - line_item.included_tax_total).to eq(18.69) end end - context 'an order with a book and a shipment' do + context "an order with a book and a shipment" do let(:variant) { book } before { 2.times { order.next! } } - it 'has a shipment for 8.00 dollars' do + it "has a shipment for 8.00 dollars" do expect(shipment.amount).to eq(8.00) end - it 'has a shipment with 0.52 included tax' do + it "has a shipment with 0.52 included tax" do expect(shipment.included_tax_total).to eq(0.52) end - it 'has a shipping rate that correctly reflects the shipment' do + it "has a shipping rate that correctly reflects the shipment" do expect(shipping_rate.display_price).to eq("$8.00 (incl. $0.52 German reduced VAT)") end end - context 'an order with a sweater' do + context "an order with a sweater" do let(:variant) { sweater } - it 'still has the original price' do + it "still has the original price" do expect(line_item.price).to eq(30) end - it 'has one tax adjustment' do + it "has one tax adjustment" do expect(line_item.adjustments.tax.count).to eq(1) end - it 'has 4.79 of included tax' do + it "has 4.79 of included tax" do expect(line_item.included_tax_total).to eq(4.79) end - it 'has a constant amount pre tax' do + it "has a constant amount pre tax" do expect(line_item.total_before_tax - line_item.included_tax_total).to eq(25.21) end end - context 'an order with a sweater and a shipment' do + context "an order with a sweater and a shipment" do let(:variant) { sweater } before { 2.times { order.next! } } - it 'has a shipment for 16.00 dollars' do + it "has a shipment for 16.00 dollars" do expect(shipment.amount).to eq(16.00) end - it 'has a shipment with 2.55 included tax' do + it "has a shipment with 2.55 included tax" do expect(shipment.included_tax_total).to eq(2.55) end - it 'has a shipping rate that correctly reflects the shipment' do + it "has a shipping rate that correctly reflects the shipment" do expect(shipping_rate.display_price).to eq("$16.00 (incl. $2.55 German VAT)") end end - context 'an order with a download' do + context "an order with a download" do let(:variant) { download } - it 'still has an adjusted price for romania' do + it "still has an adjusted price for romania" do expect(line_item.price).to eq(10.42) end - it 'has one tax adjustment' do + it "has one tax adjustment" do expect(line_item.adjustments.tax.count).to eq(1) end - it 'has 2.02 of included tax' do + it "has 2.02 of included tax" do expect(line_item.included_tax_total).to eq(2.02) end - it 'has a constant amount pre tax' do + it "has a constant amount pre tax" do expect(line_item.total_before_tax - line_item.included_tax_total).to eq(8.40) end end - context 'an order with a download and a shipment' do + context "an order with a download and a shipment" do let(:variant) { download } before { 2.times { order.next! } } - it 'it has a shipment with worth 2.00' do + it "it has a shipment with worth 2.00" do expect(shipment.amount).to eq(2.00) end - it 'has a shipment with 0.40 included tax' do + it "has a shipment with 0.40 included tax" do expect(shipment.included_tax_total).to eq(0.39) end - it 'has a shipping rate that correctly reflects the shipment' do + it "has a shipping rate that correctly reflects the shipment" do expect(shipping_rate.display_price).to eq("$2.00 (incl. $0.39 Romanian VAT)") end end end # Technically, this can't be the case yet as the order won't pass the shipment stage, # but the taxation code shouldn't implicitly depend on the shipping code. - context 'to an address that does not have a zone associated' do + context "to an address that does not have a zone associated" do let(:shipping_address) { create :address, country_iso_code: "IT" } - context 'an order with a book' do + context "an order with a book" do let(:variant) { book } - it 'should sell at the net price' do + it "should sell at the net price" do expect(line_item.price).to eq(18.69) end - it 'is adjusted to the net price' do + it "is adjusted to the net price" do expect(line_item.total).to eq(18.69) end - it 'has no tax adjustments' do + it "has no tax adjustments" do expect(line_item.adjustments.tax.count).to eq(0) end - it 'has no included tax' do + it "has no included tax" do expect(line_item.included_tax_total).to eq(0) end - it 'has no additional tax' do + it "has no additional tax" do expect(line_item.additional_tax_total).to eq(0) end - it 'has a constant amount pre tax' do + it "has a constant amount pre tax" do expect(line_item.total_before_tax - line_item.included_tax_total).to eq(18.69) end end end # International delivery, no tax applies whatsoever - context 'to anywhere else in the world' do + context "to anywhere else in the world" do let(:shipping_address) { create :address, country: world_zone.countries.first } - context 'an order with a book' do + context "an order with a book" do let(:variant) { book } - it 'should sell at the net price' do + it "should sell at the net price" do expect(line_item.price).to eq(18.69) end - it 'is adjusted to the net price' do + it "is adjusted to the net price" do expect(line_item.total).to eq(18.69) end - it 'has no tax adjustments' do + it "has no tax adjustments" do expect(line_item.adjustments.tax.count).to eq(0) end - it 'has no included tax' do + it "has no included tax" do expect(line_item.included_tax_total).to eq(0) end - it 'has no additional tax' do + it "has no additional tax" do expect(line_item.additional_tax_total).to eq(0) end - it 'has a constant amount pre tax' do + it "has a constant amount pre tax" do expect(line_item.total_before_tax - line_item.included_tax_total).to eq(18.69) end - context 'an order with a book and a shipment' do + context "an order with a book and a shipment" do let(:variant) { book } before { 2.times { order.next! } } - it 'it has a shipment that costs $8.00' do + it "it has a shipment that costs $8.00" do expect(shipment.amount).to eq(8.00) end - it 'has a shipment with no included tax' do + it "has a shipment with no included tax" do expect(shipment.included_tax_total).to eq(0) end - it 'has a shipping rate that correctly reflects the shipment' do + it "has a shipping rate that correctly reflects the shipment" do expect(shipping_rate.display_price).to eq("$8.00") end end end - context 'an order with a sweater' do + context "an order with a sweater" do let(:variant) { sweater } - it 'should sell at the net price' do + it "should sell at the net price" do expect(line_item.price).to eq(25.21) end - it 'has no tax adjustments' do + it "has no tax adjustments" do expect(line_item.adjustments.tax.count).to eq(0) end - it 'has no included tax' do + it "has no included tax" do expect(line_item.included_tax_total).to eq(0) end - it 'has no additional tax' do + it "has no additional tax" do expect(line_item.additional_tax_total).to eq(0) end - it 'has a constant amount pre tax' do + it "has a constant amount pre tax" do expect(line_item.total_before_tax - line_item.included_tax_total).to eq(25.21) end - context 'an order with a sweater and a shipment' do + context "an order with a sweater and a shipment" do let(:variant) { sweater } before { 2.times { order.next! } } - it 'it has a shipment costing $16.00' do + it "it has a shipment costing $16.00" do expect(shipment.amount).to eq(16.00) end - it 'has a shipment with no included tax' do + it "has a shipment with no included tax" do expect(shipment.included_tax_total).to eq(0) end - it 'has a shipping rate that correctly reflects the shipment' do + it "has a shipping rate that correctly reflects the shipment" do expect(shipping_rate.display_price).to eq("$16.00") end end end - context 'an order with a download' do + context "an order with a download" do let(:variant) { download } - it 'should sell at the net price' do + it "should sell at the net price" do expect(line_item.price).to eq(8.40) end - it 'has no tax adjustments' do + it "has no tax adjustments" do expect(line_item.adjustments.tax.count).to eq(0) end - it 'has no included tax' do + it "has no included tax" do expect(line_item.included_tax_total).to eq(0) end - it 'has no additional tax' do + it "has no additional tax" do expect(line_item.additional_tax_total).to eq(0) end - it 'has a constant amount pre tax' do + it "has a constant amount pre tax" do expect(line_item.total_before_tax - line_item.included_tax_total).to eq(8.40) end end - context 'an order with a download and a shipment' do + context "an order with a download and a shipment" do let(:variant) { download } before { 2.times { order.next! } } - it 'it has a shipment costing 2.00' do + it "it has a shipment costing 2.00" do expect(shipment.amount).to eq(2.00) end - it 'has a shipment with no included tax' do + it "has a shipment with no included tax" do expect(shipment.included_tax_total).to eq(0) end - it 'has a shipping rate that correctly reflects the shipment' do + it "has a shipping rate that correctly reflects the shipment" do expect(shipping_rate.display_price).to eq("$2.00") end end @@ -553,7 +553,7 @@ end # Choosing New York here because in the US, states matter - context 'selling from new york' do + context "selling from new york" do let(:new_york) { create(:state, state_code: "NY") } let(:united_states) { new_york.country } let(:new_york_zone) { create(:zone, states: [new_york]) } @@ -595,56 +595,56 @@ let!(:book_shipping_method) do create :shipping_method, - cost: 8.00, - shipping_categories: [books_shipping_category], - tax_category: books_category, - zones: [united_states_zone] + cost: 8.00, + shipping_categories: [books_shipping_category], + tax_category: books_category, + zones: [united_states_zone] end let!(:sweater_shipping_method) do create :shipping_method, - cost: 16.00, - shipping_categories: [normal_shipping_category], - tax_category: normal_category, - zones: [united_states_zone] + cost: 16.00, + shipping_categories: [normal_shipping_category], + tax_category: normal_category, + zones: [united_states_zone] end let!(:premium_download_shipping_method) do create :shipping_method, - cost: 2.00, - shipping_categories: [digital_shipping_category], - tax_category: digital_category, - zones: [united_states_zone] + cost: 2.00, + shipping_categories: [digital_shipping_category], + tax_category: digital_category, + zones: [united_states_zone] end before do order.contents.add(variant) end - context 'to new york' do + context "to new york" do let(:shipping_address) { create :address, state_code: "NY" } # A fictional case for an item with two applicable rates - context 'an order with a book' do + context "an order with a book" do let(:variant) { book } - it 'still has the original price' do + it "still has the original price" do expect(line_item.price).to eq(20) end - it 'sells for the line items amount plus additional tax' do + it "sells for the line items amount plus additional tax" do expect(line_item.total).to eq(23) end - it 'has two tax adjustments' do + it "has two tax adjustments" do expect(line_item.adjustments.tax.count).to eq(2) end - it 'has no included tax' do + it "has no included tax" do expect(line_item.included_tax_total).to eq(0) end - it 'has 15% additional tax' do + it "has 15% additional tax" do expect(line_item.additional_tax_total).to eq(3) end @@ -661,13 +661,13 @@ expect(line_item.adjustments.count).to eq(2) end - context 'when tax address is later cleared' do + context "when tax address is later cleared" do before do order.ship_address = nil order.recalculate end - it 'removes all tax adjustments' do + it "removes all tax adjustments" do aggregate_failures do expect(line_item.adjustments.tax.count).to eq(0) expect(line_item).to have_attributes( @@ -681,24 +681,24 @@ end end - context 'an order with a book and a shipment' do + context "an order with a book and a shipment" do let(:variant) { book } before { 2.times { order.next! } } - it 'it has a shipment with a price of 8.00' do + it "it has a shipment with a price of 8.00" do expect(shipment.amount).to eq(8.00) end - it 'has a shipment with no included tax' do + it "has a shipment with no included tax" do expect(shipment.included_tax_total).to eq(0) end - it 'has a shipment with additional tax of 1.20' do + it "has a shipment with additional tax of 1.20" do expect(shipment.additional_tax_total).to eq(1.20) end - it 'has a shipping rate that correctly reflects the shipment' do + it "has a shipping rate that correctly reflects the shipment" do expect(shipping_rate.display_price).to include("$8.00") expect(shipping_rate.display_price).to include("+ $0.80 Federal Sales Tax") expect(shipping_rate.display_price).to include("+ $0.40 New York Sales Tax") @@ -706,107 +706,107 @@ end # This is a fictional case for when no taxes apply at all. - context 'an order with a sweater' do + context "an order with a sweater" do let(:variant) { sweater } - it 'still has the original price' do + it "still has the original price" do expect(line_item.price).to eq(30) end - it 'sells for the line items amount plus additional tax' do + it "sells for the line items amount plus additional tax" do expect(line_item.total).to eq(30) end - it 'has no tax adjustments' do + it "has no tax adjustments" do expect(line_item.adjustments.tax.count).to eq(0) end - it 'has no included tax' do + it "has no included tax" do expect(line_item.included_tax_total).to eq(0) end - it 'has no additional tax' do + it "has no additional tax" do expect(line_item.additional_tax_total).to eq(0) end end - context 'an order with a sweater and a shipment' do + context "an order with a sweater and a shipment" do let(:variant) { sweater } before { 2.times { order.next! } } - it 'it has a shipment with a price of 16.00' do + it "it has a shipment with a price of 16.00" do expect(shipment.amount).to eq(16.00) end - it 'has a shipment with no included tax' do + it "has a shipment with no included tax" do expect(shipment.included_tax_total).to eq(0) end - it 'has a shipment with no additional tax' do + it "has a shipment with no additional tax" do expect(shipment.additional_tax_total).to eq(0) end - it 'has a shipping rate that correctly reflects the shipment' do + it "has a shipping rate that correctly reflects the shipment" do expect(shipping_rate.display_price).to eq("$16.00") end end # A fictional case with one applicable rate - context 'an order with a download' do + context "an order with a download" do let(:variant) { download } - it 'still has the original price' do + it "still has the original price" do expect(line_item.price).to eq(10) end - it 'sells for the line items amount plus additional tax' do + it "sells for the line items amount plus additional tax" do expect(line_item.total).to eq(12) end - it 'has one tax adjustments' do + it "has one tax adjustments" do expect(line_item.adjustments.tax.count).to eq(1) end - it 'has no included tax' do + it "has no included tax" do expect(line_item.included_tax_total).to eq(0) end - it 'has 15% additional tax' do + it "has 15% additional tax" do expect(line_item.additional_tax_total).to eq(2) end end - context 'an order with a download and a shipment' do + context "an order with a download and a shipment" do let(:variant) { download } before { 2.times { order.next! } } - it 'it has a shipment with a price of 2.00' do + it "it has a shipment with a price of 2.00" do expect(shipment.amount).to eq(2.00) end - it 'has a shipment with no included tax' do + it "has a shipment with no included tax" do expect(shipment.included_tax_total).to eq(0) end - it 'has a shipment with additional tax of 0.40' do + it "has a shipment with additional tax of 0.40" do expect(shipment.additional_tax_total).to eq(0.40) end - it 'has a shipping rate that correctly reflects the shipment' do + it "has a shipping rate that correctly reflects the shipment" do expect(shipping_rate.display_price).to eq("$2.00 (+ $0.40 Federal Sales Tax)") end end end - context 'when no tax zone is given' do + context "when no tax zone is given" do let(:shipping_address) { nil } - context 'and we buy a book' do + context "and we buy a book" do let(:variant) { book } - it 'does not create adjustments' do + it "does not create adjustments" do expect(line_item.adjustments.count).to eq(0) end end diff --git a/core/spec/models/spree/tax_calculator/default_spec.rb b/core/spec/models/spree/tax_calculator/default_spec.rb index 4800f45dce2..dca87f50eae 100644 --- a/core/spec/models/spree/tax_calculator/default_spec.rb +++ b/core/spec/models/spree/tax_calculator/default_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::TaxCalculator::Default do let(:shipping_address) { FactoryBot.create(:address, state: new_york) } @@ -26,7 +26,7 @@ :product, price: 20, name: "Book", - tax_category: books_category, + tax_category: books_category ) order.contents.add(book.master) @@ -34,7 +34,7 @@ let(:calculator) { described_class.new(order) } - describe '#calculate' do + describe "#calculate" do subject(:calculated_taxes) { calculator.calculate } it { is_expected.to be_a Spree::Tax::OrderTax } diff --git a/core/spec/models/spree/tax_category_spec.rb b/core/spec/models/spree/tax_category_spec.rb index 60fc2c12d3c..3ea65128d5a 100644 --- a/core/spec/models/spree/tax_category_spec.rb +++ b/core/spec/models/spree/tax_category_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::TaxCategory, type: :model do - context 'default tax category' do + context "default tax category" do let(:tax_category) { create(:tax_category) } let(:new_tax_category) { create(:tax_category) } @@ -12,7 +12,7 @@ end it "should undefault the previous default tax category" do - new_tax_category.update({ is_default: true }) + new_tax_category.update({is_default: true}) expect(new_tax_category.is_default).to be true tax_category.reload @@ -39,7 +39,7 @@ let(:tax_rate) { create(:tax_rate) } let(:tax_category) { tax_rate.tax_categories.first } - it 'correctly discard association records' do + it "correctly discard association records" do expect { tax_category.discard } .to change { tax_category.tax_rates.size } .from(1) diff --git a/core/spec/models/spree/tax_rate_spec.rb b/core/spec/models/spree/tax_rate_spec.rb index 74596739efb..14ea929b853 100644 --- a/core/spec/models/spree/tax_rate_spec.rb +++ b/core/spec/models/spree/tax_rate_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::TaxRate, type: :model do it { is_expected.to respond_to(:shipping_rate_taxes) } - context '.for_address' do + context ".for_address" do let(:germany) { create(:country, iso: "DE") } let(:germany_zone) { create(:zone, countries: [germany]) } let!(:german_tax) { create(:tax_rate, zone: germany_zone) } @@ -26,27 +26,27 @@ subject(:rates_for_address) { Spree::TaxRate.for_address(address) } - context 'when address is in germany' do + context "when address is in germany" do let(:address) { create(:address, country_iso_code: "DE") } it { is_expected.to contain_exactly(german_tax, eu_tax) } end - context 'when address is in france' do + context "when address is in france" do let(:address) { create(:address, country_iso_code: "FR") } it { is_expected.to contain_exactly(french_tax, eu_tax) } end - context 'when address is in new york' do + context "when address is in new york" do let(:address) { create(:address, country_iso_code: "US", state_code: "NY") } it { is_expected.to contain_exactly(new_york_tax, us_tax) } end - context 'when address is in alabama' do + context "when address is in alabama" do let(:address) { create(:address, country_iso_code: "US", state_code: "AL") } it { is_expected.to contain_exactly(alabama_tax, us_tax) } end - context 'when address is in alaska' do + context "when address is in alaska" do let(:address) { create(:address, country_iso_code: "US", state_code: "AK") } it { is_expected.to contain_exactly(us_tax) } end @@ -148,43 +148,43 @@ end context "when the start date is in the past" do - let!(:rate) { create(:tax_rate, starts_at: 1.day.ago ) } + let!(:rate) { create(:tax_rate, starts_at: 1.day.ago) } it { is_expected.to eq([rate]) } end context "when the start date is in the future" do - let!(:rate) { create(:tax_rate, starts_at: 1.day.from_now ) } + let!(:rate) { create(:tax_rate, starts_at: 1.day.from_now) } it { is_expected.to be_empty } end context "when the expiry date is in the future" do - let!(:rate) { create(:tax_rate, expires_at: 1.day.from_now ) } + let!(:rate) { create(:tax_rate, expires_at: 1.day.from_now) } it { is_expected.to eq([rate]) } end context "when the expiry date is in the past" do - let!(:rate) { create(:tax_rate, expires_at: 1.day.ago ) } + let!(:rate) { create(:tax_rate, expires_at: 1.day.ago) } it { is_expected.to be_empty } end context "when the start date in the past and expiry date is in the future" do - let!(:rate) { create(:tax_rate, starts_at: 1.day.ago, expires_at: 1.day.from_now ) } + let!(:rate) { create(:tax_rate, starts_at: 1.day.ago, expires_at: 1.day.from_now) } it { is_expected.to eq([rate]) } end context "when the start date and expiry date are in the past" do - let!(:rate) { create(:tax_rate, starts_at: 1.day.ago, expires_at: 1.day.ago ) } + let!(:rate) { create(:tax_rate, starts_at: 1.day.ago, expires_at: 1.day.ago) } it { is_expected.to be_empty } end context "when the start date and expiry date are in the future" do - let!(:rate) { create(:tax_rate, starts_at: 1.day.from_now, expires_at: 1.day.from_now ) } + let!(:rate) { create(:tax_rate, starts_at: 1.day.from_now, expires_at: 1.day.from_now) } it { is_expected.to be_empty } end @@ -201,19 +201,19 @@ context "when starts_at is set" do context "now" do - let(:validity) { { starts_at: Time.current } } + let(:validity) { {starts_at: Time.current} } it { is_expected.to eq(true) } end context "in the past" do - let(:validity) { { starts_at: 1.day.ago } } + let(:validity) { {starts_at: 1.day.ago} } it { is_expected.to eq(true) } end context "in the future" do - let(:validity) { { starts_at: 1.day.from_now } } + let(:validity) { {starts_at: 1.day.from_now} } it { is_expected.to eq(false) } end @@ -221,19 +221,19 @@ context "when expires_at is set" do context "now" do - let(:validity) { { expires_at: Time.current } } + let(:validity) { {expires_at: Time.current} } it { is_expected.to eq(false) } end context "in the past" do - let(:validity) { { expires_at: 1.day.ago } } + let(:validity) { {expires_at: 1.day.ago} } it { is_expected.to eq(false) } end context "in the future" do - let(:validity) { { expires_at: 1.day.from_now } } + let(:validity) { {expires_at: 1.day.from_now} } it { is_expected.to eq(true) } end @@ -241,19 +241,19 @@ context "when starts_at and expires_at are set" do context "so that today is in range" do - let(:validity) { { starts_at: 1.day.ago, expires_at: 1.day.from_now } } + let(:validity) { {starts_at: 1.day.ago, expires_at: 1.day.from_now} } it { is_expected.to eq(true) } end context "both in the past" do - let(:validity) { { starts_at: 2.days.ago, expires_at: 1.day.ago } } + let(:validity) { {starts_at: 2.days.ago, expires_at: 1.day.ago} } it { is_expected.to eq(false) } end context "both in the future" do - let(:validity) { { starts_at: 1.day.from_now, expires_at: 2.days.from_now } } + let(:validity) { {starts_at: 1.day.from_now, expires_at: 2.days.from_now} } it { is_expected.to eq(false) } end diff --git a/core/spec/models/spree/taxon_brand_selector_spec.rb b/core/spec/models/spree/taxon_brand_selector_spec.rb index 7d2d4721e60..2da54d57e9c 100644 --- a/core/spec/models/spree/taxon_brand_selector_spec.rb +++ b/core/spec/models/spree/taxon_brand_selector_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::TaxonBrandSelector, type: :model do let(:taxonomy) { create(:taxonomy, name: "Brands") } diff --git a/core/spec/models/spree/taxon_spec.rb b/core/spec/models/spree/taxon_spec.rb index 93446d95b23..2e5bc0bb46a 100644 --- a/core/spec/models/spree/taxon_spec.rb +++ b/core/spec/models/spree/taxon_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Taxon, type: :model do - it_behaves_like 'an attachment' do + it_behaves_like "an attachment" do subject { create(:taxon) } let(:attachment_name) { :icon } let(:default_style) { :mini } @@ -54,13 +54,13 @@ context "when trying to destroy an invalid attachment" do let(:taxon) { create(:taxon) } - it 'returns false' do + it "returns false" do expect(taxon.destroy_attachment(:foo)).to be_falsey end end end - describe '#to_param' do + describe "#to_param" do let(:taxon) { FactoryBot.build(:taxon, name: "Ruby on Rails") } subject { super().to_param } @@ -77,16 +77,16 @@ end context "updating a taxon permalink" do - it 'parameterizes permalink correctly' do + it "parameterizes permalink correctly" do taxon.save! - taxon.update(permalink: 'spécial&charactèrs') + taxon.update(permalink: "spécial&charactèrs") expect(taxon.permalink).to eql "special-characters" end end context "with parent taxon" do let(:parent) { FactoryBot.build(:taxon, permalink: "brands") } - before { allow(taxon).to receive_messages(parent:) } + before { allow(taxon).to receive_messages(parent:) } it "should set permalink correctly when taxon has parent" do taxon.set_permalink @@ -99,9 +99,9 @@ expect(taxon.permalink).to eql "brands/rubyonrails" end - it 'parameterizes permalink correctly' do + it "parameterizes permalink correctly" do taxon.save! - taxon.update(permalink_part: 'spécial&charactèrs') + taxon.update(permalink_part: "spécial&charactèrs") expect(taxon.reload.permalink).to eql "brands/special-characters" end @@ -124,69 +124,69 @@ end context "updating permalink" do - let(:taxonomy) { create(:taxonomy, name: 't') } + let(:taxonomy) { create(:taxonomy, name: "t") } let(:root) { taxonomy.root } - let(:taxon1) { create(:taxon, name: 't1', taxonomy:, parent: root) } - let(:taxon2) { create(:taxon, name: 't2', taxonomy:, parent: root) } - let(:taxon2_child) { create(:taxon, name: 't2_child', taxonomy:, parent: taxon2) } + let(:taxon1) { create(:taxon, name: "t1", taxonomy:, parent: root) } + let(:taxon2) { create(:taxon, name: "t2", taxonomy:, parent: root) } + let(:taxon2_child) { create(:taxon, name: "t2_child", taxonomy:, parent: taxon2) } context "changing parent" do subject { taxon2.update!(parent: taxon1) } it "changes own permalink" do - expect { subject }.to change{ taxon2.reload.permalink }.from('t/t2').to('t/t1/t2') + expect { subject }.to change { taxon2.reload.permalink }.from("t/t2").to("t/t1/t2") end it "changes child's permalink" do - expect { subject }.to change{ taxon2_child.reload.permalink }.from('t/t2/t2_child').to('t/t1/t2/t2_child') + expect { subject }.to change { taxon2_child.reload.permalink }.from("t/t2/t2_child").to("t/t1/t2/t2_child") end end context "changing own permalink" do - subject { taxon2.update!(permalink: 'foo') } + subject { taxon2.update!(permalink: "foo") } it "changes own permalink" do - expect { subject }.to change{ taxon2.reload.permalink }.from('t/t2').to('t/foo') + expect { subject }.to change { taxon2.reload.permalink }.from("t/t2").to("t/foo") end it "changes child's permalink" do - expect { subject }.to change{ taxon2_child.reload.permalink }.from('t/t2/t2_child').to('t/foo/t2_child') + expect { subject }.to change { taxon2_child.reload.permalink }.from("t/t2/t2_child").to("t/foo/t2_child") end end context "changing own permalink part" do - subject { taxon2.update!(permalink_part: 'foo') } + subject { taxon2.update!(permalink_part: "foo") } it "changes own permalink" do - expect { subject }.to change{ taxon2.reload.permalink }.from('t/t2').to('t/foo') + expect { subject }.to change { taxon2.reload.permalink }.from("t/t2").to("t/foo") end it "changes child's permalink" do - expect { subject }.to change{ taxon2_child.reload.permalink }.from('t/t2/t2_child').to('t/foo/t2_child') + expect { subject }.to change { taxon2_child.reload.permalink }.from("t/t2/t2_child").to("t/foo/t2_child") end end context "changing parent and own permalink" do - subject { taxon2.update!(parent: taxon1, permalink: 'foo') } + subject { taxon2.update!(parent: taxon1, permalink: "foo") } it "changes own permalink" do - expect { subject }.to change{ taxon2.reload.permalink }.from('t/t2').to('t/t1/foo') + expect { subject }.to change { taxon2.reload.permalink }.from("t/t2").to("t/t1/foo") end it "changes child's permalink" do - expect { subject }.to change{ taxon2_child.reload.permalink }.from('t/t2/t2_child').to('t/t1/foo/t2_child') + expect { subject }.to change { taxon2_child.reload.permalink }.from("t/t2/t2_child").to("t/t1/foo/t2_child") end end - context 'changing parent permalink with special characters ' do - subject { taxon2.update!(permalink: 'spécial&charactèrs') } + context "changing parent permalink with special characters " do + subject { taxon2.update!(permalink: "spécial&charactèrs") } - it 'changes own permalink with parameterized characters' do - expect { subject }.to change{ taxon2.reload.permalink }.from('t/t2').to('t/special-characters') + it "changes own permalink with parameterized characters" do + expect { subject }.to change { taxon2.reload.permalink }.from("t/t2").to("t/special-characters") end - it 'changes child permalink with parameterized characters' do - expect { subject }.to change{ taxon2_child.reload.permalink }.from('t/t2/t2_child').to('t/special-characters/t2_child') + it "changes child permalink with parameterized characters" do + expect { subject }.to change { taxon2_child.reload.permalink }.from("t/t2/t2_child").to("t/special-characters/t2_child") end end end @@ -196,23 +196,23 @@ let(:taxonomy) { create(:taxonomy) } it "ensures that only one root can be created" do - taxon = taxonomy.taxons.create(name: 'New node') + taxon = taxonomy.taxons.create(name: "New node") expect(taxon).to be_invalid expect(taxon.errors.full_messages).to match_array(["Taxonomy can only have one root Taxon"]) end it "allows for multiple taxons under a taxonomy" do - taxon = taxonomy.root.children.create!(name: 'First child', taxonomy:) + taxon = taxonomy.root.children.create!(name: "First child", taxonomy:) expect(taxon).to be_valid expect(taxonomy.taxons.many?).to eq(true) - second_taxon = taxonomy.root.children.create!(name: 'Second child', taxonomy:) + second_taxon = taxonomy.root.children.create!(name: "Second child", taxonomy:) expect(second_taxon).to be_valid expect(taxonomy.root.children.many?).to eq(true) end # Regression test https://github.com/solidusio/solidus/issues/5187 it "does not invalidate the root taxon after having children taxons" do - taxonomy.root.children.create!(name: 'New node', taxonomy:) + taxonomy.root.children.create!(name: "New node", taxonomy:) expect(taxonomy.taxons.many?).to eq(true) expect(taxonomy.root).to be_valid end @@ -220,9 +220,9 @@ context "name validations" do let!(:taxonomy) { create(:taxonomy) } - let!(:taxon_level_one) { create(:taxon, name: 'Solidus', parent: taxonomy.root) } - let(:taxon_level_one_duplicate) { build(:taxon, name: 'Solidus', parent: taxonomy.root) } - let(:taxon_level_two) { create(:taxon, name: 'Solidus', parent: taxon_level_one) } + let!(:taxon_level_one) { create(:taxon, name: "Solidus", parent: taxonomy.root) } + let(:taxon_level_one_duplicate) { build(:taxon, name: "Solidus", parent: taxonomy.root) } + let(:taxon_level_two) { create(:taxon, name: "Solidus", parent: taxon_level_one) } it "ensures that taxons with the same parent must have unique names" do expect(taxon_level_one_duplicate.save).to eq(false) @@ -235,12 +235,12 @@ end end - context 'leaves of the taxon tree' do - let(:taxonomy) { create(:taxonomy, name: 't') } + context "leaves of the taxon tree" do + let(:taxonomy) { create(:taxonomy, name: "t") } let(:root) { taxonomy.root } - let(:taxon) { create(:taxon, name: 't1', taxonomy:, parent: root) } - let(:child) { create(:taxon, name: 'child taxon', taxonomy:, parent: taxon) } - let(:grandchild) { create(:taxon, name: 'grandchild taxon', taxonomy:, parent: child) } + let(:taxon) { create(:taxon, name: "t1", taxonomy:, parent: root) } + let(:child) { create(:taxon, name: "child taxon", taxonomy:, parent: taxon) } + let(:grandchild) { create(:taxon, name: "grandchild taxon", taxonomy:, parent: child) } let(:product1) { create(:product) } let(:product2) { create(:product) } let(:product3) { create(:product) } @@ -253,16 +253,16 @@ [product1, product2, product3].each { |p| 2.times.each { create(:variant, product: p) } } end - describe '#all_products' do - it 'returns all descendant products' do + describe "#all_products" do + it "returns all descendant products" do products = taxon.all_products expect(products.count).to eq(3) expect(products).to match_array([product1, product2, product3]) end end - describe '#all_variants' do - it 'returns all descendant variants' do + describe "#all_variants" do + it "returns all descendant variants" do variants = taxon.all_variants expect(variants.count).to eq(9) expect(variants).to match_array([product1, product2, product3].flat_map(&:variants_including_master)) @@ -270,8 +270,8 @@ end end - context 'stores history of permalinks' do - let(:taxonomy) { create(:taxonomy, name: 'brands') } + context "stores history of permalinks" do + let(:taxonomy) { create(:taxonomy, name: "brands") } let(:root) { taxonomy.root } let(:taxon_name) { "ruby on rails" } let(:new_permalink) { "rails for ruby" } @@ -280,7 +280,7 @@ let!(:taxon) { create(:taxon, name: taxon_name, parent: root) } - it 'should store the previous slug when permalink is updated' do + it "should store the previous slug when permalink is updated" do expect(taxon.slugs.count).to eq(1) expect(expected_initial_slug).to eq(taxon.slugs.last.slug) diff --git a/core/spec/models/spree/taxonomy_spec.rb b/core/spec/models/spree/taxonomy_spec.rb index 4494653d0a4..2da17fb6f97 100644 --- a/core/spec/models/spree/taxonomy_spec.rb +++ b/core/spec/models/spree/taxonomy_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Taxonomy, type: :model do context "validations" do - subject { build(:taxonomy, name: 'Brand') } + subject { build(:taxonomy, name: "Brand") } - let!(:taxonomy) { create(:taxonomy, name: 'Brand') } + let!(:taxonomy) { create(:taxonomy, name: "Brand") } context "name validations" do it "ensures Taxonomies must have unique names" do diff --git a/core/spec/models/spree/unit_cancel_spec.rb b/core/spec/models/spree/unit_cancel_spec.rb index 948eea11675..7b2420aba8e 100644 --- a/core/spec/models/spree/unit_cancel_spec.rb +++ b/core/spec/models/spree/unit_cancel_spec.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::UnitCancel do let(:unit_cancel) { described_class.create!(inventory_unit:, reason: described_class::SHORT_SHIP) } let(:inventory_unit) { create(:inventory_unit) } - describe '#adjust!' do + describe "#adjust!" do subject { unit_cancel.adjust! } it "creates an adjustment with the correct attributes" do - expect { subject }.to change{ Spree::Adjustment.count }.by(1) + expect { subject }.to change { Spree::Adjustment.count }.by(1) adjustment = Spree::Adjustment.last expect(adjustment.adjustable).to eq inventory_unit.line_item @@ -30,7 +30,7 @@ end end - describe '#compute_amount' do + describe "#compute_amount" do subject { unit_cancel.compute_amount(line_item) } let(:line_item) { inventory_unit.line_item } @@ -65,7 +65,7 @@ context "multiple inventory units" do let(:quantity) { 4 } - let(:order) { create(:order_with_line_items, line_items_attributes: [{ quantity: }]) } + let(:order) { create(:order_with_line_items, line_items_attributes: [{quantity:}]) } let(:line_item) { order.line_items.first } let(:inventory_units) { line_item.inventory_units } @@ -82,14 +82,14 @@ end end - context 'when line item has additional taxes' do + context "when line item has additional taxes" do let(:world_zone) { create(:zone, :with_country) } let(:tax_category) { create :tax_category } let(:product) { create :product, tax_category: } let!(:additional_tax_rate) do create( :tax_rate, - name: 'Additional tax', + name: "Additional tax", tax_categories: [tax_category], zone: world_zone, included_in_price: false, @@ -99,17 +99,17 @@ let(:shipping_category) { create :shipping_category } let(:shipping_method) do create :shipping_method, - cost: 8.00, - shipping_categories: [shipping_category], - tax_category:, - zones: [world_zone] + cost: 8.00, + shipping_categories: [shipping_category], + tax_category:, + zones: [world_zone] end let(:shipping_address) { create :address, country_iso_code: world_zone.countries.first.iso } let(:order) do create( :order_with_line_items, ship_address: shipping_address, - line_items_attributes: [{ product: }] + line_items_attributes: [{product:}] ) end let(:line_item) { order.line_items.first } @@ -117,7 +117,7 @@ before { order.recalculate } - it 'does not include line item additional taxes' do + it "does not include line item additional taxes" do expect(line_item.additional_tax_total).not_to eq 0 expect(subject).to eq(-5.0) end diff --git a/core/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb b/core/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb index 639c82ef9e1..e8ce83c0ffe 100644 --- a/core/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +++ b/core/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb @@ -1,29 +1,29 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::UserLastUrlStorer::Rules::AuthenticationRule do - describe '#match?' do - let(:login_path) { '/sign_in' } + describe "#match?" do + let(:login_path) { "/sign_in" } let(:request) { double(fullpath:) } let(:controller) do double( request:, spree_login_path: login_path, - controller_name: 'controller_double' + controller_name: "controller_double" ) end subject { described_class.match?(controller) } - context 'when the request full path is an authentication route' do + context "when the request full path is an authentication route" do let!(:fullpath) { login_path } it { is_expected.to be true } end - context 'when the request full path is not an authentication route' do - let!(:fullpath) { '/products/baseball-cap' } + context "when the request full path is not an authentication route" do + let!(:fullpath) { "/products/baseball-cap" } it { is_expected.to be false } end diff --git a/core/spec/models/spree/user_last_url_storer_spec.rb b/core/spec/models/spree/user_last_url_storer_spec.rb index 26f93436777..a3b84e30ce1 100644 --- a/core/spec/models/spree/user_last_url_storer_spec.rb +++ b/core/spec/models/spree/user_last_url_storer_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::UserLastUrlStorer do subject { described_class.new(controller) } - let(:fullpath) { '/products/baseball-cap' } + let(:fullpath) { "/products/baseball-cap" } let(:session) { {} } let(:request) { double(fullpath:) } let(:controller) do @@ -13,7 +13,7 @@ ApplicationController, request:, session:, - controller_name: 'app_controller_double' + controller_name: "app_controller_double" ) end @@ -24,34 +24,34 @@ def self.match?(_controller) end after :each do - described_class.rules.delete('CustomRule') + described_class.rules.delete("CustomRule") end - describe '::rules' do - it 'includes default rules' do + describe "::rules" do + it "includes default rules" do rule = Spree::UserLastUrlStorer::Rules::AuthenticationRule expect(described_class.rules).to include(rule) end - it 'can add new rules' do + it "can add new rules" do described_class.rules << CustomRule expect(described_class.rules).to include(CustomRule) end end - describe '#store_location' do - context 'when at least one rule matches' do - it 'does not set the path value into the session' do + describe "#store_location" do + context "when at least one rule matches" do + it "does not set the path value into the session" do described_class.rules << CustomRule subject.store_location expect(session[:spree_user_return_to]).to be_nil end end - context 'when no rule matches' do - it 'sets the path value into the session' do + context "when no rule matches" do + it "sets the path value into the session" do described_class.rules << CustomRule - described_class.rules.delete('CustomRule') + described_class.rules.delete("CustomRule") subject.store_location expect(session[:spree_user_return_to]).to eql fullpath end diff --git a/core/spec/models/spree/user_spec.rb b/core/spec/models/spree/user_spec.rb index 5dbe141c9d1..60364c72212 100644 --- a/core/spec/models/spree/user_spec.rb +++ b/core/spec/models/spree/user_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::LegacyUser, type: :model do context "#last_incomplete_order" do diff --git a/core/spec/models/spree/validations/db_maximum_length_validator_spec.rb b/core/spec/models/spree/validations/db_maximum_length_validator_spec.rb index 0b71a19659a..d1b0671daa1 100644 --- a/core/spec/models/spree/validations/db_maximum_length_validator_spec.rb +++ b/core/spec/models/spree/validations/db_maximum_length_validator_spec.rb @@ -1,24 +1,23 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" + +# RESOURCE FIXTURE +CreateLimitedProducts = Class.new(ActiveRecord::Migration[5.1]) do + def change + create_table(:limited_products) do |t| + t.string :slug, limit: 255 + end + end +end + +LimitedProduct = Class.new(ActiveRecord::Base) do + validates_with Spree::Validations::DbMaximumLengthValidator, field: :slug +end RSpec.describe Spree::Validations::DbMaximumLengthValidator, type: :model do - # RESOURCE FIXTURE before(:all) do - # Database - class CreateLimitedProducts < ActiveRecord::Migration[5.1] - def change - create_table(:limited_products) do |t| - t.string :slug, limit: 255 - end - end - end CreateLimitedProducts.migrate(:up) - - # Model - class LimitedProduct < ActiveRecord::Base - validates_with Spree::Validations::DbMaximumLengthValidator, field: :slug - end end # TEAR DOWN RESOURCE FIXTURE @@ -34,16 +33,16 @@ class LimitedProduct < ActiveRecord::Base let(:record) { LimitedProduct.new(slug:) } context "when slug is below limit" do - let(:slug) { 'a' * 255 } - it 'should be valid' do + let(:slug) { "a" * 255 } + it "should be valid" do expect(record).to be_valid expect(record.errors).to be_empty end end context "when slug is too long" do - let(:slug) { 'a' * 256 } - it 'should be invalid and set error' do + let(:slug) { "a" * 256 } + it "should be invalid and set error" do expect(record).not_to be_valid expect(record.errors[:slug]).to include(I18n.t("errors.messages.too_long", count: 255)) end diff --git a/core/spec/models/spree/variant/price_selector_spec.rb b/core/spec/models/spree/variant/price_selector_spec.rb index dae1083835a..f04277bf0b4 100644 --- a/core/spec/models/spree/variant/price_selector_spec.rb +++ b/core/spec/models/spree/variant/price_selector_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Variant::PriceSelector do let(:variant) { build_stubbed(:variant) } diff --git a/core/spec/models/spree/variant/pricing_options_spec.rb b/core/spec/models/spree/variant/pricing_options_spec.rb index 0de0007a0b0..b8f749e2151 100644 --- a/core/spec/models/spree/variant/pricing_options_spec.rb +++ b/core/spec/models/spree/variant/pricing_options_spec.rb @@ -1,24 +1,24 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Variant::PricingOptions do subject { described_class.new } - context '.default_price_attributes' do + context ".default_price_attributes" do subject { described_class.default_price_attributes } it { is_expected.to have_key(:currency) } it { is_expected.to have_key(:country_iso) } - it 'can be passed into a WHERE clause on Spree::Prices' do + it "can be passed into a WHERE clause on Spree::Prices" do expect(Spree::Price.where(subject).to_a).to eq([]) end context "with a matching price present" do let!(:price) { create(:price) } - it 'returns a matching price' do + it "returns a matching price" do expect(Spree::Price.where(subject).to_a).to include(price) end end @@ -36,7 +36,7 @@ expect(subject.desired_attributes[:country_iso]).to eq("US") end - context 'if order has no currency' do + context "if order has no currency" do before do expect(line_item.order).to receive(:currency).at_least(:once).and_return(nil) expect(Spree::Config).to receive(:currency).at_least(:once).and_return("RUB") @@ -83,8 +83,8 @@ end end - context 'if the store has default_currency and cart_tax_country_iso' do - let(:store) { FactoryBot.create :store, default_currency: 'MXN' } + context "if the store has default_currency and cart_tax_country_iso" do + let(:store) { FactoryBot.create :store, default_currency: "MXN" } it "uses current_store information" do expect(Spree::Variant::PricingOptions).to receive(:new).with(currency: store.default_currency, country_iso: store.cart_tax_country_iso) @@ -93,7 +93,7 @@ end end - describe '#desired_attributes' do + describe "#desired_attributes" do context "when called with no arguments" do it "returns the default pricing options" do expect(subject.desired_attributes).to eq(described_class.default_price_attributes) @@ -152,21 +152,21 @@ end describe "#cache_key" do - it 'creates a cache key out of the values of the attributes hash' do + it "creates a cache key out of the values of the attributes hash" do expect(subject.cache_key).to eq("USD") end context "with another currency" do subject { described_class.new(currency: "EUR") } - it 'creates the correct cache key' do + it "creates the correct cache key" do expect(subject.cache_key).to eq("EUR") end context "and another country" do subject { described_class.new(currency: "EUR", country_iso: "DE") } - it 'creates the correct cache key' do + it "creates the correct cache key" do expect(subject.cache_key).to eq("EUR/DE") end end @@ -180,9 +180,9 @@ subject { described_class.new(options).search_arguments } context "with a currency given" do - let(:options) { { currency: "EUR" } } + let(:options) { {currency: "EUR"} } - it 'can be passed into a `where` clause' do + it "can be passed into a `where` clause" do expect(Spree::Price.where(subject)).to eq([price]) end end @@ -194,7 +194,7 @@ end context "with a country given" do - let(:options) { { country_iso: "DE" } } + let(:options) { {country_iso: "DE"} } it "is an array with the country and nil" do expect(subject[:country_iso]).to eq(["DE", nil]) diff --git a/core/spec/models/spree/variant/scopes_spec.rb b/core/spec/models/spree/variant/scopes_spec.rb index e1c9247415d..010a3f37cce 100644 --- a/core/spec/models/spree/variant/scopes_spec.rb +++ b/core/spec/models/spree/variant/scopes_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe "Variant scopes", type: :model do let!(:product) { create(:product) } @@ -29,7 +29,7 @@ end end - context 'when searching for a variant that has two eligible prices (one fallback)' do + context "when searching for a variant that has two eligible prices (one fallback)" do let(:france) { create(:country, iso: "FR") } let(:pricing_options) { Spree::Variant::PricingOptions.new(country_iso: "FR", currency: "EUR") } diff --git a/core/spec/models/spree/variant_property_rule_condition_spec.rb b/core/spec/models/spree/variant_property_rule_condition_spec.rb index 3477718037a..9a15862ec42 100644 --- a/core/spec/models/spree/variant_property_rule_condition_spec.rb +++ b/core/spec/models/spree/variant_property_rule_condition_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::VariantPropertyRuleCondition, type: :model do context "touching" do diff --git a/core/spec/models/spree/variant_property_rule_spec.rb b/core/spec/models/spree/variant_property_rule_spec.rb index ec843bda903..28284f94f85 100644 --- a/core/spec/models/spree/variant_property_rule_spec.rb +++ b/core/spec/models/spree/variant_property_rule_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::VariantPropertyRule, type: :model do context "touching" do diff --git a/core/spec/models/spree/variant_property_rule_value_spec.rb b/core/spec/models/spree/variant_property_rule_value_spec.rb index bc190196d68..e742d1ef426 100644 --- a/core/spec/models/spree/variant_property_rule_value_spec.rb +++ b/core/spec/models/spree/variant_property_rule_value_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::VariantPropertyRuleValue, type: :model do context "touching" do diff --git a/core/spec/models/spree/variant_spec.rb b/core/spec/models/spree/variant_spec.rb index 4fa24cbd881..53977c72108 100644 --- a/core/spec/models/spree/variant_spec.rb +++ b/core/spec/models/spree/variant_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Variant, type: :model do it { is_expected.to be_invalid } let!(:variant) { create(:variant) } - describe '.non_template_variants' do + describe ".non_template_variants" do let(:option_type) { create(:option_type, option_values: [option_value]) } let(:option_value) { build(:option_value) } let(:product) { create(:product, option_types: [option_type]) } @@ -18,7 +18,7 @@ it { is_expected.to contain_exactly(variant) } end - describe '.template_variants' do + describe ".template_variants" do let(:option_type) { create(:option_type, option_values: [option_value]) } let(:option_value) { build(:option_value) } let(:product) { create(:product, option_types: [option_type]) } @@ -29,23 +29,23 @@ it { is_expected.to contain_exactly(product.master) } end - describe 'delegates' do + describe "delegates" do let(:product) { build(:product) } let(:variant) { build(:variant, product:) } - it 'discontinue_on to product' do + it "discontinue_on to product" do expect(product).to receive(:discontinue_on) variant.discontinue_on end - it 'discontinued? to product' do + it "discontinued? to product" do expect(product).to receive(:discontinued?) variant.discontinued? end end - describe 'enums' do - it 'has the correct enum values' do + describe "enums" do + it "has the correct enum values" do expect(described_class.conditions).to eq({ "damaged" => "damaged", "new" => "new", @@ -54,25 +54,25 @@ }) end - it 'correctly assigns and reads condition values' do - variant = create(:variant, condition: 'new') - expect(variant.reload.condition).to eq('new') + it "correctly assigns and reads condition values" do + variant = create(:variant, condition: "new") + expect(variant.reload.condition).to eq("new") end - it 'does not accept invalid enum values' do - expect { create(:variant, condition: 'invalid_value') }.to raise_error(ArgumentError) + it "does not accept invalid enum values" do + expect { create(:variant, condition: "invalid_value") }.to raise_error(ArgumentError) end end - describe 'gtin and condition attributes' do - let(:variant) { create(:variant, gtin: '1234567890123', condition: 'new') } + describe "gtin and condition attributes" do + let(:variant) { create(:variant, gtin: "1234567890123", condition: "new") } - it 'has a GTIN' do - expect(variant.gtin).to eq('1234567890123') + it "has a GTIN" do + expect(variant.gtin).to eq("1234567890123") end - it 'has a condition' do - expect(variant.condition).to eq('new') + it "has a condition" do + expect(variant.condition).to eq("new") end end @@ -140,15 +140,15 @@ end end - describe 'mark_master_out_of_stock' do + describe "mark_master_out_of_stock" do before do product.master.stock_items.first.set_count_on_hand(5) end - context 'when product is created without variants but with stock' do + context "when product is created without variants but with stock" do it { expect(product.master).to be_in_stock } end - context 'when a variant is created' do + context "when a variant is created" do before(:each) do product.variants.create! end @@ -219,36 +219,36 @@ let(:multi_variant) { @multi_variant } it "should set option value" do - expect(multi_variant.option_value('media_type')).to be_nil + expect(multi_variant.option_value("media_type")).to be_nil - multi_variant.set_option_value('media_type', 'DVD') - expect(multi_variant.option_value('media_type')).to eql 'DVD' + multi_variant.set_option_value("media_type", "DVD") + expect(multi_variant.option_value("media_type")).to eql "DVD" - multi_variant.set_option_value('media_type', 'CD') - expect(multi_variant.option_value('media_type')).to eql 'CD' + multi_variant.set_option_value("media_type", "CD") + expect(multi_variant.option_value("media_type")).to eql "CD" end it "should not duplicate associated option values when set multiple times" do - multi_variant.set_option_value('media_type', 'CD') + multi_variant.set_option_value("media_type", "CD") expect { - multi_variant.set_option_value('media_type', 'DVD') + multi_variant.set_option_value("media_type", "DVD") }.to_not change(multi_variant.option_values, :count) expect { - multi_variant.set_option_value('coolness_type', 'awesome') + multi_variant.set_option_value("coolness_type", "awesome") }.to change(multi_variant.option_values, :count).by(1) end context "setting using #options=" do it "should set option value" do - expect(multi_variant.option_value('media_type')).to be_nil + expect(multi_variant.option_value("media_type")).to be_nil - multi_variant.options = [{ name: "media_type", value: 'DVD' }] - expect(multi_variant.option_value('media_type')).to eql 'DVD' + multi_variant.options = [{name: "media_type", value: "DVD"}] + expect(multi_variant.option_value("media_type")).to eql "DVD" - multi_variant.options = [{ name: "media_type", value: 'CD' }] - expect(multi_variant.option_value('media_type')).to eql 'CD' + multi_variant.options = [{name: "media_type", value: "CD"}] + expect(multi_variant.option_value("media_type")).to eql "CD" end end @@ -277,22 +277,22 @@ context "#cost_price=" do it "should use LocalizedNumber.parse" do - expect(Spree::LocalizedNumber).to receive(:parse).with('1,599.99') - subject.cost_price = '1,599.99' + expect(Spree::LocalizedNumber).to receive(:parse).with("1,599.99") + subject.cost_price = "1,599.99" end end context "#price=" do it "should use LocalizedNumber.parse" do - expect(Spree::LocalizedNumber).to receive(:parse).with('1,599.99') - subject.price = '1,599.99' + expect(Spree::LocalizedNumber).to receive(:parse).with("1,599.99") + subject.price = "1,599.99" end end context "#weight=" do it "should use LocalizedNumber.parse" do - expect(Spree::LocalizedNumber).to receive(:parse).with('1,599.99') - subject.weight = '1,599.99' + expect(Spree::LocalizedNumber).to receive(:parse).with("1,599.99") + subject.weight = "1,599.99" end end @@ -303,7 +303,7 @@ end end - describe '#default_price' do + describe "#default_price" do context "when multiple prices are present in addition to a default price" do let(:pricing_options_germany) { Spree::Config.pricing_options_class.new(currency: "EUR") } let(:pricing_options_united_states) { Spree::Config.pricing_options_class.new(currency: "USD") } @@ -313,39 +313,39 @@ variant.reload end - it 'the default stays the same' do + it "the default stays the same" do expect(variant.default_price.amount).to eq(19.99) end - it 'displays default price' do + it "displays default price" do expect(variant.price_for_options(pricing_options_united_states).money.to_s).to eq("$19.99") expect(variant.price_for_options(pricing_options_germany).money.to_s).to eq("€29.99") end end - context 'when adding multiple prices' do - it 'it can reassign a default price' do + context "when adding multiple prices" do + it "it can reassign a default price" do expect(variant.default_price.amount).to eq(19.99) variant.prices.create(currency: "USD", amount: 12.12) expect(variant.reload.default_price.amount).to eq(12.12) end end - it 'prioritizes prices recently updated' do + it "prioritizes prices recently updated" do variant = create(:variant) - price = create(:price, variant:, currency: 'USD') - create(:price, variant:, currency: 'USD') + price = create(:price, variant:, currency: "USD") + create(:price, variant:, currency: "USD") price.touch variant.prices.reload expect(variant.default_price).to eq(price) end - it 'prioritizes non-persisted prices' do + it "prioritizes non-persisted prices" do variant = create(:variant) - price = build(:price, currency: 'USD', amount: 1, variant_id: variant.id) + price = build(:price, currency: "USD", amount: 1, variant_id: variant.id) variant.prices.build(price.attributes) - create(:price, variant:, currency: 'USD', amount: 2) + create(:price, variant:, currency: "USD", amount: 2) expect(variant.default_price.attributes).to eq(price.attributes) end @@ -367,18 +367,18 @@ end end - describe '#default_price_or_build' do - context 'when default price exists' do - it 'returns it' do - price = build(:price, currency: 'USD') + describe "#default_price_or_build" do + context "when default price exists" do + it "returns it" do + price = build(:price, currency: "USD") variant = build(:variant, prices: [price]) expect(variant.default_price_or_build).to eq(price) end end - context 'when default price does not exist' do - it 'builds and returns it' do + context "when default price does not exist" do + it "builds and returns it" do variant = build(:variant, prices: [], price: nil) expect( @@ -388,17 +388,17 @@ end end - describe '#has_default_price?' do - context 'when default price is present and not discarded' do - it 'returns true' do + describe "#has_default_price?" do + context "when default price is present and not discarded" do + it "returns true" do variant = create(:variant, price: 20) expect(variant.has_default_price?).to be(true) end end - context 'when default price is discarded' do - it 'returns false' do + context "when default price is discarded" do + it "returns false" do variant = create(:variant, price: 20) variant.default_price.discard @@ -538,98 +538,98 @@ end # Regression test for https://github.com/spree/spree/issues/2432 - describe 'options_text' do + describe "options_text" do let!(:variant) { create(:variant, option_values: []) } let!(:master) { create(:master_variant) } before do # Order bar than foo - variant.option_values << create(:option_value, { name: 'Foo', presentation: 'Foo', option_type: create(:option_type, position: 2, name: 'Foo Type', presentation: 'Foo Type') }) - variant.option_values << create(:option_value, { name: 'Bar', presentation: 'Bar', option_type: create(:option_type, position: 1, name: 'Bar Type', presentation: 'Bar Type') }) + variant.option_values << create(:option_value, {name: "Foo", presentation: "Foo", option_type: create(:option_type, position: 2, name: "Foo Type", presentation: "Foo Type")}) + variant.option_values << create(:option_value, {name: "Bar", presentation: "Bar", option_type: create(:option_type, position: 1, name: "Bar Type", presentation: "Bar Type")}) end - it 'should order by bar than foo' do - expect(variant.options_text).to eql 'Bar Type: Bar, Foo Type: Foo' + it "should order by bar than foo" do + expect(variant.options_text).to eql "Bar Type: Bar, Foo Type: Foo" end end - describe 'exchange_name' do + describe "exchange_name" do let!(:variant) { create(:variant, option_values: []) } let!(:master) { create(:master_variant) } before do variant.option_values << create(:option_value, { - name: 'Foo', - presentation: 'Foo', - option_type: create(:option_type, position: 2, name: 'Foo Type', presentation: 'Foo Type') - }) + name: "Foo", + presentation: "Foo", + option_type: create(:option_type, position: 2, name: "Foo Type", presentation: "Foo Type") + }) end - context 'master variant' do - it 'should return name' do + context "master variant" do + it "should return name" do expect(master.exchange_name).to eql master.name end end - context 'variant' do - it 'should return options text' do - expect(variant.exchange_name).to eql 'Foo Type: Foo' + context "variant" do + it "should return options text" do + expect(variant.exchange_name).to eql "Foo Type: Foo" end end end - describe 'exchange_name' do + describe "exchange_name" do let!(:variant) { create(:variant, option_values: []) } let!(:master) { create(:master_variant) } before do variant.option_values << create(:option_value, { - name: 'Foo', - presentation: 'Foo', - option_type: create(:option_type, position: 2, name: 'Foo Type', presentation: 'Foo Type') - }) + name: "Foo", + presentation: "Foo", + option_type: create(:option_type, position: 2, name: "Foo Type", presentation: "Foo Type") + }) end - context 'master variant' do - it 'should return name' do + context "master variant" do + it "should return name" do expect(master.exchange_name).to eql master.name end end - context 'variant' do - it 'should return options text' do - expect(variant.exchange_name).to eql 'Foo Type: Foo' + context "variant" do + it "should return options text" do + expect(variant.exchange_name).to eql "Foo Type: Foo" end end end - describe 'descriptive_name' do + describe "descriptive_name" do let!(:variant) { create(:variant, option_values: []) } let!(:master) { create(:master_variant) } before do variant.option_values << create(:option_value, { - name: 'Foo', - presentation: 'Foo', - option_type: create(:option_type, position: 2, name: 'Foo Type', presentation: 'Foo Type') - }) + name: "Foo", + presentation: "Foo", + option_type: create(:option_type, position: 2, name: "Foo Type", presentation: "Foo Type") + }) end - context 'master variant' do - it 'should return name with Master identifier' do - expect(master.descriptive_name).to eql master.name + ' - Master' + context "master variant" do + it "should return name with Master identifier" do + expect(master.descriptive_name).to eql master.name + " - Master" end end - context 'variant' do - it 'should return options text with name' do - expect(variant.descriptive_name).to eql variant.name + ' - Foo Type: Foo' + context "variant" do + it "should return options text with name" do + expect(variant.descriptive_name).to eql variant.name + " - Foo Type: Foo" end end end - describe 'acts_as_list' do - it 'sets variant position by acts_as_list' do + describe "acts_as_list" do + it "sets variant position by acts_as_list" do expect(variant.product.master.position).to eq 1 expect(variant.position).to eq 2 @@ -638,33 +638,33 @@ end end - describe '#in_stock?' do + describe "#in_stock?" do before do stub_spree_preferences(track_inventory_levels: true) end - context 'when stock_items are not backorderable' do + context "when stock_items are not backorderable" do before do allow_any_instance_of(Spree::StockItem).to receive_messages(backorderable: false) end - context 'when stock_items in stock' do + context "when stock_items in stock" do before do variant.stock_items.first.update_column(:count_on_hand, 10) end - it 'returns true if stock_items in stock' do + it "returns true if stock_items in stock" do expect(variant.in_stock?).to be true end end - context 'when stock_items out of stock' do + context "when stock_items out of stock" do before do allow_any_instance_of(Spree::StockItem).to receive_messages(backorderable: false) allow_any_instance_of(Spree::StockItem).to receive_messages(count_on_hand: 0) end - it 'return false if stock_items out of stock' do + it "return false if stock_items out of stock" do expect(variant.in_stock?).to be false end end @@ -684,31 +684,31 @@ let(:stock_location) { build_stubbed(:stock_location) } it "initializes the quantifier with the stock location" do - expect(Spree::Stock::Quantifier). - to receive(:new). - with(variant, stock_location). - and_return(quantifier) + expect(Spree::Stock::Quantifier) + .to receive(:new) + .with(variant, stock_location) + .and_return(quantifier) allow(quantifier).to receive(:can_supply?).with(10) subject end end end - context 'when stock_items are backorderable' do + context "when stock_items are backorderable" do before do allow_any_instance_of(Spree::StockItem).to receive_messages(backorderable: true) end - context 'when stock_items out of stock' do + context "when stock_items out of stock" do before do allow_any_instance_of(Spree::StockItem).to receive_messages(count_on_hand: 0) end - it 'in_stock? returns false' do + it "in_stock? returns false" do expect(variant.in_stock?).to be false end - it 'can_supply? return true' do + it "can_supply? return true" do expect(variant.can_supply?).to be true end end @@ -725,23 +725,23 @@ end end - describe '#is_backorderable' do + describe "#is_backorderable" do let(:variant) { build(:variant) } subject { variant.is_backorderable? } - it 'should invoke Spree::Stock::Quantifier' do + it "should invoke Spree::Stock::Quantifier" do expect_any_instance_of(Spree::Stock::Quantifier).to receive(:backorderable?) { true } subject end end - describe '#total_on_hand' do - it 'should be infinite if track_inventory_levels is false' do + describe "#total_on_hand" do + it "should be infinite if track_inventory_levels is false" do stub_spree_preferences(track_inventory_levels: false) expect(build(:variant).total_on_hand).to eql(Float::INFINITY) end - it 'should match quantifier total_on_hand' do + it "should match quantifier total_on_hand" do variant = build(:variant) expect(variant.total_on_hand).to eq(Spree::Stock::Quantifier.new(variant).total_on_hand) end @@ -753,67 +753,67 @@ let(:stock_location) { build_stubbed(:stock_location) } it "initializes the quantifier with the stock location" do - expect(Spree::Stock::Quantifier). - to receive(:new). - with(variant, stock_location). - and_return(quantifier) + expect(Spree::Stock::Quantifier) + .to receive(:new) + .with(variant, stock_location) + .and_return(quantifier) allow(quantifier).to receive(:total_on_hand) subject end end end - describe '#tax_category' do - context 'when tax_category is nil' do + describe "#tax_category" do + context "when tax_category is nil" do let(:product) { build(:product) } let(:variant) { build(:variant, product:, tax_category_id: nil) } - it 'returns the parent products tax_category' do + it "returns the parent products tax_category" do expect(variant.tax_category).to eq(product.tax_category) end end - context 'when tax_category is set' do + context "when tax_category is set" do let(:tax_category) { create(:tax_category) } let(:variant) { build(:variant, tax_category:) } - it 'returns the tax_category set on itself' do + it "returns the tax_category set on itself" do expect(variant.tax_category).to eq(tax_category) end end end - describe '#shipping_category' do - context 'when shipping_category is nil' do + describe "#shipping_category" do + context "when shipping_category is nil" do let(:shipping_category) { build(:shipping_category) } let(:product) { build(:product, shipping_category:) } let(:variant) { build(:variant, product:, shipping_category_id: nil) } - it 'returns the parent products shipping_category' do + it "returns the parent products shipping_category" do expect(variant.shipping_category).to eq(shipping_category) end end - context 'when shipping_category is set' do + context "when shipping_category is set" do let(:shipping_category) { create(:shipping_category) } let(:variant) { build(:variant, shipping_category:) } - it 'returns the shipping_category set on itself' do + it "returns the shipping_category set on itself" do expect(variant.shipping_category).to eq(shipping_category) end end end - describe '#shipping_category_id' do - context 'when shipping_category_id is nil' do + describe "#shipping_category_id" do + context "when shipping_category_id is nil" do let(:shipping_category) { build(:shipping_category) } let(:product) { build(:product, shipping_category:) } let(:variant) { build(:variant, product:, shipping_category_id: nil) } - it 'returns the parent products shipping_category_id' do + it "returns the parent products shipping_category_id" do expect(variant.shipping_category_id).to eq(shipping_category.id) end end - context 'when shipping_category_id is set' do + context "when shipping_category_id is set" do let(:shipping_category) { create(:shipping_category) } let(:variant) { build(:variant, shipping_category_id: shipping_category.id) } - it 'returns the shipping_category_id set on itself' do + it "returns the shipping_category_id set on itself" do expect(variant.shipping_category_id).to eq(shipping_category.id) end end @@ -833,19 +833,19 @@ end describe "#should_track_inventory?" do - it 'should not track inventory when global setting is off' do + it "should not track inventory when global setting is off" do stub_spree_preferences(track_inventory_levels: false) expect(build(:variant).should_track_inventory?).to eq(false) end - it 'should not track inventory when variant is turned off' do + it "should not track inventory when variant is turned off" do stub_spree_preferences(track_inventory_levels: true) expect(build(:on_demand_variant).should_track_inventory?).to eq(false) end - it 'should track inventory when global and variant are on' do + it "should track inventory when global and variant are on" do stub_spree_preferences(track_inventory_levels: true) expect(build(:variant).should_track_inventory?).to eq(true) @@ -867,7 +867,7 @@ expect(variant.prices).not_to be_empty end - describe 'default_price' do + describe "default_price" do let!(:previous_variant_price) { variant.default_price } it "should not discard default_price" do @@ -882,8 +882,8 @@ expect(variant.default_price).to eq(previous_variant_price) end - context 'when loading with pre-fetching of default_price' do - it 'also keeps the previous price' do + context "when loading with pre-fetching of default_price" do + it "also keeps the previous price" do variant.discard reloaded_variant = Spree::Variant.with_discarded.find_by(id: variant.id) expect(reloaded_variant.default_price).to eq(previous_variant_price) @@ -911,12 +911,12 @@ context "there's stock in the location" do before do - in_stock_variant. - stock_items.find_by(stock_location:). - update_column(:count_on_hand, 10) - out_of_stock_variant. - stock_items.where.not(stock_location:).first. - update_column(:count_on_hand, 10) + in_stock_variant + .stock_items.find_by(stock_location:) + .update_column(:count_on_hand, 10) + out_of_stock_variant + .stock_items.where.not(stock_location:).first + .update_column(:count_on_hand, 10) end it "returns all in stock variants in the provided stock location" do @@ -956,8 +956,8 @@ context "inventory levels globally not tracked" do before { stub_spree_preferences(track_inventory_levels: false) } - it 'includes items without inventory' do - expect( subject ).to include out_of_stock_variant + it "includes items without inventory" do + expect(subject).to include out_of_stock_variant end end end @@ -976,15 +976,15 @@ end it "includes the in stock variant" do - expect( subject ).to include(in_stock_variant) + expect(subject).to include(in_stock_variant) end it "includes out of stock variant" do - expect( subject ).to include(backordered_variant) + expect(subject).to include(backordered_variant) end it "does not include out of stock variant" do - expect( subject ).not_to include(out_of_stock_variant) + expect(subject).not_to include(out_of_stock_variant) end it "includes variants only once" do @@ -995,7 +995,7 @@ before { stub_spree_preferences(track_inventory_levels: false) } it "includes all variants" do - expect( subject ).to include(in_stock_variant, backordered_variant, out_of_stock_variant) + expect(subject).to include(in_stock_variant, backordered_variant, out_of_stock_variant) end end end @@ -1096,7 +1096,7 @@ end describe "#name_and_sku" do - let(:product) { build(:product, name: "Ernie and Bert" )} + let(:product) { build(:product, name: "Ernie and Bert") } let(:variant) { build(:variant, product:, sku: "EB1") } subject { variant.name_and_sku } diff --git a/core/spec/models/spree/wallet/add_payment_sources_to_wallet_spec.rb b/core/spec/models/spree/wallet/add_payment_sources_to_wallet_spec.rb index 73bdb5dec24..8351905f2f5 100644 --- a/core/spec/models/spree/wallet/add_payment_sources_to_wallet_spec.rb +++ b/core/spec/models/spree/wallet/add_payment_sources_to_wallet_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Wallet::AddPaymentSourcesToWallet, type: :model do let(:order) { create(:order_ready_to_complete) } let(:user) { order.user } - describe '#add_to_wallet' do + describe "#add_to_wallet" do subject { described_class.new(order) } before do @@ -14,7 +14,7 @@ allow_any_instance_of(Spree::CreditCard).to receive(:reusable?).and_return(true) end - it 'saves the payment source' do + it "saves the payment source" do expect { subject.add_to_wallet }.to change { order.user.wallet.wallet_payment_sources.count }.by(1) @@ -28,13 +28,13 @@ order.payments.first.update!(source: credit_card_one.payment_source) end - it 'does not make a new wallet payment source' do + it "does not make a new wallet payment source" do expect { subject.add_to_wallet }.to_not change { order.user.wallet.wallet_payment_sources.count } end - it 'does not change the default wallet payment source' do + it "does not change the default wallet payment source" do expect { subject.add_to_wallet }.to_not change { user.wallet.default_wallet_payment_source } diff --git a/core/spec/models/spree/wallet_payment_source_spec.rb b/core/spec/models/spree/wallet_payment_source_spec.rb index 9822cf511d6..8fd984c4c7c 100644 --- a/core/spec/models/spree/wallet_payment_source_spec.rb +++ b/core/spec/models/spree/wallet_payment_source_spec.rb @@ -1,6 +1,21 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" + +# RESOURCE FIXTURE +CreateNonPaymentSources = Class.new(ActiveRecord::Migration[5.1]) do + def change + create_table(:non_payment_sources) + end +end + +# We have to set this up or else `inverse_of` prevents us from testing our code +NonPaymentSource = Class.new(ActiveRecord::Base) do + has_many :wallet_payment_sources, + class_name: "Spree::WalletPaymentSource", + inverse_of: :payment_source, + as: :payment_source +end RSpec.describe Spree::WalletPaymentSource, type: :model do subject { Spree::WalletPaymentSource } @@ -8,22 +23,9 @@ describe "validation" do let(:user) { create(:user) } - context 'with a non-PaymentSource model' do - # RESOURCE FIXTURE + context "with a non-PaymentSource model" do before(:all) do - # Database - class CreateNonPaymentSources < ActiveRecord::Migration[5.1] - def change - create_table(:non_payment_sources) - end - end CreateNonPaymentSources.migrate(:up) - - # Model - class NonPaymentSource < ActiveRecord::Base - # We have to set this up or else `inverse_of` prevents us from testing our code - has_many :wallet_payment_sources, class_name: 'Spree::WalletPaymentSource', as: :payment_source, inverse_of: :payment_source - end end # TEAR DOWN RESOURCE FIXTURE @@ -46,7 +48,7 @@ class NonPaymentSource < ActiveRecord::Base expect(wallet_payment_source).not_to be_valid expect(wallet_payment_source.errors.messages).to eq( - { payment_source: ["is not a valid payment source"] } + {payment_source: ["is not a valid payment source"]} ) end end @@ -63,7 +65,7 @@ class NonPaymentSource < ActiveRecord::Base ) expect(wallet_payment_source).not_to be_valid expect(wallet_payment_source.errors.messages).to eq( - { user_id: ["already has this payment source in their wallet"] } + {user_id: ["already has this payment source in their wallet"]} ) end @@ -74,7 +76,7 @@ class NonPaymentSource < ActiveRecord::Base ) expect(wallet_payment_source).not_to be_valid expect(wallet_payment_source.errors.messages).to eq( - { payment_source: ["does not belong to the user associated with the order"] } + {payment_source: ["does not belong to the user associated with the order"]} ) end diff --git a/core/spec/models/spree/wallet_spec.rb b/core/spec/models/spree/wallet_spec.rb index f198a3e76fb..3d852b6a223 100644 --- a/core/spec/models/spree/wallet_spec.rb +++ b/core/spec/models/spree/wallet_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Wallet, type: :model do let(:user) { create(:user) } @@ -75,9 +75,9 @@ it "marks the passed in payment source as default" do expect { subject.default_wallet_payment_source = wallet_credit_card }.to( - change(subject, :default_wallet_payment_source). - from(nil). - to(wallet_credit_card) + change(subject, :default_wallet_payment_source) + .from(nil) + .to(wallet_credit_card) ) end @@ -101,7 +101,7 @@ it "sets the new payment source as the default" do expect { subject.default_wallet_payment_source = wallet_store_credit - }.to change{ subject.default_wallet_payment_source }.from(wallet_credit_card).to(wallet_store_credit) + }.to change { subject.default_wallet_payment_source }.from(wallet_credit_card).to(wallet_store_credit) end end @@ -109,7 +109,7 @@ it "does not change the default payment source" do expect { subject.default_wallet_payment_source = wallet_credit_card - }.not_to change{ subject.default_wallet_payment_source } + }.not_to change { subject.default_wallet_payment_source } end end @@ -117,18 +117,18 @@ it "clears the default payment source" do expect { subject.default_wallet_payment_source = nil - }.to change{ subject.default_wallet_payment_source }.to nil + }.to change { subject.default_wallet_payment_source }.to nil end end end - context 'with a wallet payment source that does not belong to the wallet' do + context "with a wallet payment source that does not belong to the wallet" do let(:other_wallet_credit_card) { other_wallet.add(other_credit_card) } let(:other_wallet) { Spree::Wallet.new(other_user) } let(:other_credit_card) { create(:credit_card, user_id: other_user.id) } let(:other_user) { create(:user) } - it 'raises an error' do + it "raises an error" do expect { wallet.default_wallet_payment_source = other_wallet_credit_card }.to raise_error(Spree::Wallet::Unauthorized) diff --git a/core/spec/models/spree/zone_spec.rb b/core/spec/models/spree/zone_spec.rb index b17b80d45eb..e2047ab1043 100644 --- a/core/spec/models/spree/zone_spec.rb +++ b/core/spec/models/spree/zone_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Zone, type: :model do - describe 'for_address' do + describe "for_address" do let(:canada) { create(:country, iso: "CA") } let(:usa) { create(:country, iso: "US") } let(:new_york_address) { create(:address, state_code: "NY", country: usa) } @@ -17,33 +17,33 @@ let!(:north_america_zone) { create(:zone, countries: [canada_address.country, new_york_address.country]) } subject { Spree::Zone.for_address(address) } - context 'when there is no address' do + context "when there is no address" do let(:address) { nil } - it 'returns an empty relation' do + it "returns an empty relation" do expect(subject).to eq([]) end end - context 'for an address in New York' do + context "for an address in New York" do let(:address) { new_york_address } - it 'matches the New York zone' do + it "matches the New York zone" do expect(subject).to include(new_york_zone) end - it 'matches the United States zone' do + it "matches the United States zone" do expect(subject).to include(united_states_zone) end - it 'does not match the Alabama zone' do + it "does not match the Alabama zone" do expect(subject).not_to include(alabama_zone) end - it 'does not match the Canadian zone' do + it "does not match the Canadian zone" do expect(subject).not_to include(canada_zone) end - it 'matches the North America zone' do + it "matches the North America zone" do expect(subject).to include(north_america_zone) end end @@ -54,21 +54,21 @@ let(:country) { state.country } context "when zone consists of countries" do - let(:country_zone) { create(:zone, name: 'CountryZone') } + let(:country_zone) { create(:zone, name: "CountryZone") } before { country_zone.members.create(zoneable: country) } - it 'should return a list of countries' do + it "should return a list of countries" do expect(country_zone.country_list).to eq([country]) end end context "when zone consists of states" do - let(:state_zone) { create(:zone, name: 'StateZone') } + let(:state_zone) { create(:zone, name: "StateZone") } before { state_zone.members.create(zoneable: state) } - it 'should return a list of countries' do + it "should return a list of countries" do expect(state_zone.country_list).to eq([state.country]) end end @@ -80,7 +80,7 @@ let(:address) { create(:address, state:) } context "when zone is country type" do - let(:country_zone) { create(:zone, name: 'CountryZone') } + let(:country_zone) { create(:zone, name: "CountryZone") } before { country_zone.members.create(zoneable: country) } it "should be true" do @@ -89,7 +89,7 @@ end context "when zone is state type" do - let(:state_zone) { create(:zone, name: 'StateZone') } + let(:state_zone) { create(:zone, name: "StateZone") } before { state_zone.members.create(zoneable: state) } it "should be true" do @@ -101,7 +101,7 @@ context "#save" do context "when a zone member country is added to an existing zone consisting of state members" do it "should remove existing state members" do - zone = create(:zone, name: 'foo', zone_members: []) + zone = create(:zone, name: "foo", zone_members: []) state = create(:state) country = create(:country, iso: "BR") zone.members.create(zoneable: state) @@ -115,7 +115,7 @@ context "#kind" do context "when the zone consists of country zone members" do before do - @zone = create(:zone, name: 'country', zone_members: []) + @zone = create(:zone, name: "country", zone_members: []) @zone.members.create(zoneable: create(:country)) end it "should return the kind of zone member" do @@ -125,7 +125,7 @@ context "when the zone consists of state zone members" do before do - @zone = create(:zone, name: 'state', zone_members: []) + @zone = create(:zone, name: "state", zone_members: []) @zone.members.create(zoneable: create(:state)) end it "should return the kind of zone member" do @@ -160,24 +160,24 @@ end context ".with_shared_members" do - let!(:country) { create(:country) } - let!(:country2) { create(:country, iso: "MX", name: 'OtherCountry') } - let!(:country3) { create(:country, iso: "CA", name: 'TaxCountry') } + let!(:country) { create(:country) } + let!(:country2) { create(:country, iso: "MX", name: "OtherCountry") } + let!(:country3) { create(:country, iso: "CA", name: "TaxCountry") } subject(:zones_with_shared_members) { Spree::Zone.with_shared_members(zone) } - context 'when passing a zone with no members' do + context "when passing a zone with no members" do let!(:zone) { create :zone } - it 'will return an empty set' do + it "will return an empty set" do expect(subject).to eq([]) end end - context 'when passing nil' do + context "when passing nil" do let!(:zone) { nil } - it 'will return an empty set' do + it "will return an empty set" do expect(subject).to eq([]) end end @@ -208,14 +208,14 @@ end it "only returns each zone once" do - expect(zones_with_shared_members.select { |z| z == zone }.size).to be 1 + expect(zones_with_shared_members.count { |z| z == zone }).to be 1 end end context "finding potential matches for a state zone" do - let!(:state) { create(:state, country:) } - let!(:state2) { create(:state, country: country2, name: 'OtherState') } - let!(:state3) { create(:state, country: country2, name: 'State') } + let!(:state) { create(:state, country:) } + let!(:state2) { create(:state, country: country2, name: "OtherState") } + let!(:state3) { create(:state, country: country2, name: "State") } let!(:zone) do create(:zone).tap do |z| z.members.create(zoneable: state) @@ -239,7 +239,7 @@ end it "only returns each zone once" do - expect(zones_with_shared_members.select { |z| z == zone }.size).to be 1 + expect(zones_with_shared_members.count { |z| z == zone }).to be 1 end end end diff --git a/core/spec/rails_helper.rb b/core/spec/rails_helper.rb index b4724eaa170..45f527fe649 100644 --- a/core/spec/rails_helper.rb +++ b/core/spec/rails_helper.rb @@ -1,26 +1,26 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -ENV["RAILS_ENV"] ||= 'test' +ENV["RAILS_ENV"] ||= "test" -require 'spree/testing_support/dummy_app' +require "spree/testing_support/dummy_app" DummyApp.setup( - gem_root: File.expand_path('..', __dir__), - lib_name: 'solidus_core' + gem_root: File.expand_path("..", __dir__), + lib_name: "solidus_core" ) -require 'rspec/rails' -require 'rspec-activemodel-mocks' -require 'database_cleaner' +require "rspec/rails" +require "rspec-activemodel-mocks" +require "database_cleaner" Dir["./spec/support/**/*.rb"].sort.each { |f| require f } -require 'spree/testing_support/bus_helpers' -require 'spree/testing_support/factory_bot' -require 'spree/testing_support/preferences' -require 'spree/testing_support/rake' -require 'cancan/matchers' +require "spree/testing_support/bus_helpers" +require "spree/testing_support/factory_bot" +require "spree/testing_support/preferences" +require "spree/testing_support/rake" +require "cancan/matchers" ActiveJob::Base.queue_adapter = :test @@ -37,7 +37,7 @@ config.use_transactional_fixtures = true config.before :suite do - FileUtils.rm_rf(Rails.configuration.active_storage.service_configurations[:test][:root]) unless (ENV['DISABLE_ACTIVE_STORAGE'] == 'true') + FileUtils.rm_rf(Rails.configuration.active_storage.service_configurations[:test][:root]) unless ENV["DISABLE_ACTIVE_STORAGE"] == "true" DatabaseCleaner.clean_with :truncation end diff --git a/core/spec/spec_helper.rb b/core/spec/spec_helper.rb index 533943d6cc0..0b499ddb9f7 100644 --- a/core/spec/spec_helper.rb +++ b/core/spec/spec_helper.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true if ENV["COVERAGE"] - require 'simplecov' + require "simplecov" if ENV["COVERAGE_DIR"] SimpleCov.coverage_dir(ENV["COVERAGE_DIR"]) end @@ -9,19 +9,19 @@ require "simplecov-cobertura" SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter end - SimpleCov.command_name('solidus:core') + SimpleCov.command_name("solidus:core") SimpleCov.merge_timeout(3600) - SimpleCov.start('rails') + SimpleCov.start("rails") end -require 'rspec/core' +require "rspec/core" -require 'spree/testing_support/flaky' -require 'spree/testing_support/partial_double_verification' -require 'spree/testing_support/silence_deprecations' -require 'spree/testing_support/preferences' -require 'spree/deprecator' -require 'spree/config' +require "spree/testing_support/flaky" +require "spree/testing_support/partial_double_verification" +require "spree/testing_support/silence_deprecations" +require "spree/testing_support/preferences" +require "spree/deprecator" +require "spree/config" RSpec.configure do |config| config.disable_monkey_patching! diff --git a/core/spec/subscribers/spree/carton_shipped_mailer_subscriber_spec.rb b/core/spec/subscribers/spree/carton_shipped_mailer_subscriber_spec.rb index 83538ea5a14..741cc49f0d8 100644 --- a/core/spec/subscribers/spree/carton_shipped_mailer_subscriber_spec.rb +++ b/core/spec/subscribers/spree/carton_shipped_mailer_subscriber_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'action_mailer' +require "rails_helper" +require "action_mailer" RSpec.describe Spree::CartonShippedMailerSubscriber do let(:bus) { Omnes::Bus.new } @@ -12,7 +12,7 @@ described_class.new.subscribe_to(bus) end - describe 'on :carton_shipped' do + describe "on :carton_shipped" do context "when the carton's stock location is not fulfillable" do it "does not send an email" do carton = create :carton, diff --git a/core/spec/subscribers/spree/order_cancel_mailer_subscriber_spec.rb b/core/spec/subscribers/spree/order_cancel_mailer_subscriber_spec.rb index b0131102ac0..1aa2f06e056 100644 --- a/core/spec/subscribers/spree/order_cancel_mailer_subscriber_spec.rb +++ b/core/spec/subscribers/spree/order_cancel_mailer_subscriber_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'action_mailer' +require "rails_helper" +require "action_mailer" RSpec.describe Spree::OrderCancelMailerSubscriber do let(:bus) { Omnes::Bus.new } @@ -12,8 +12,8 @@ described_class.new.subscribe_to(bus) end - describe 'on :order_canceled' do - it 'sends cancellation email' do + describe "on :order_canceled" do + it "sends cancellation email" do order = create :order expect(Spree::OrderMailer).to receive(:cancel_email).and_call_original diff --git a/core/spec/subscribers/spree/order_confirmation_mailer_subscriber_spec.rb b/core/spec/subscribers/spree/order_confirmation_mailer_subscriber_spec.rb index aa2cb43f8ba..cc7c0d15d7c 100644 --- a/core/spec/subscribers/spree/order_confirmation_mailer_subscriber_spec.rb +++ b/core/spec/subscribers/spree/order_confirmation_mailer_subscriber_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'action_mailer' +require "rails_helper" +require "action_mailer" RSpec.describe Spree::OrderConfirmationMailerSubscriber do let(:bus) { Omnes::Bus.new } @@ -12,8 +12,8 @@ described_class.new.subscribe_to(bus) end - describe 'on :on_order_finalized' do - it 'sends confirmation email' do + describe "on :on_order_finalized" do + it "sends confirmation email" do order = create(:order, confirmation_delivered: false) expect(Spree::OrderMailer).to receive(:confirm_email).and_call_original @@ -21,7 +21,7 @@ bus.publish(:order_finalized, order:) end - it 'marks the order as having the confirmation email delivered' do + it "marks the order as having the confirmation email delivered" do order = create(:order, confirmation_delivered: false) bus.publish(:order_finalized, order:) diff --git a/core/spec/subscribers/spree/order_inventory_cancellation_mailer_subscriber_spec.rb b/core/spec/subscribers/spree/order_inventory_cancellation_mailer_subscriber_spec.rb index 5b164f9626f..616e259e0d4 100644 --- a/core/spec/subscribers/spree/order_inventory_cancellation_mailer_subscriber_spec.rb +++ b/core/spec/subscribers/spree/order_inventory_cancellation_mailer_subscriber_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'action_mailer' +require "rails_helper" +require "action_mailer" RSpec.describe Spree::OrderInventoryCancellationMailerSubscriber do let(:bus) { Omnes::Bus.new } @@ -12,9 +12,9 @@ described_class.new.subscribe_to(bus) end - describe 'on :order_short_shipped' do + describe "on :order_short_shipped" do context "when order cancellation emails are enabled" do - it 'sends cancellation email' do + it "sends cancellation email" do order = create :order expect(Spree::OrderMailer) @@ -34,7 +34,7 @@ Spree::OrderCancellations.send_cancellation_mailer = original_value end - it 'does not send cancellation email' do + it "does not send cancellation email" do order = create :order expect(Spree::OrderMailer).not_to receive(:inventory_cancellation_email) diff --git a/core/spec/subscribers/spree/order_mailer_subscriber_spec.rb b/core/spec/subscribers/spree/order_mailer_subscriber_spec.rb index f92987e9ab2..7ca6ea80a96 100644 --- a/core/spec/subscribers/spree/order_mailer_subscriber_spec.rb +++ b/core/spec/subscribers/spree/order_mailer_subscriber_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'action_mailer' +require "rails_helper" +require "action_mailer" RSpec.describe Spree::OrderMailerSubscriber do let(:bus) { Omnes::Bus.new } diff --git a/core/spec/subscribers/spree/reimbursement_mailer_subscriber_spec.rb b/core/spec/subscribers/spree/reimbursement_mailer_subscriber_spec.rb index 6e805b2a4ac..c6391a25a4b 100644 --- a/core/spec/subscribers/spree/reimbursement_mailer_subscriber_spec.rb +++ b/core/spec/subscribers/spree/reimbursement_mailer_subscriber_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'action_mailer' +require "rails_helper" +require "action_mailer" RSpec.describe Spree::ReimbursementMailerSubscriber do let(:bus) { Omnes::Bus.new } @@ -12,8 +12,8 @@ described_class.new.subscribe_to(bus) end - describe 'on :reimbursement_reimbursed' do - it 'sends reimbursement email' do + describe "on :reimbursement_reimbursed" do + it "sends reimbursement email" do reimbursement = build(:reimbursement) expect(Spree::ReimbursementMailer).to receive(:reimbursement_email).and_call_original diff --git a/core/spec/support/concerns/payment_source.rb b/core/spec/support/concerns/payment_source.rb index f114730c966..70c91724151 100644 --- a/core/spec/support/concerns/payment_source.rb +++ b/core/spec/support/concerns/payment_source.rb @@ -3,7 +3,7 @@ RSpec.shared_examples "a payment source" do subject(:payment_source) { described_class.new } - describe 'attributes' do + describe "attributes" do it { is_expected.to respond_to(:imported) } it { is_expected.to respond_to(:name) } end @@ -58,7 +58,7 @@ end it "should be false when credit_allowed is zero" do - payment = mock_model(Spree::Payment, completed?: true, credit_allowed: 0, order: mock_model(Spree::Order, payment_state: 'credit_owed')) + payment = mock_model(Spree::Payment, completed?: true, credit_allowed: 0, order: mock_model(Spree::Order, payment_state: "credit_owed")) expect(payment_source.can_credit?(payment)).to be false end end diff --git a/core/spec/support/image_spec_helper.rb b/core/spec/support/image_spec_helper.rb index 7efba0a2af0..c778cc92f71 100644 --- a/core/spec/support/image_spec_helper.rb +++ b/core/spec/support/image_spec_helper.rb @@ -2,6 +2,6 @@ module ImageSpecHelper def open_image(image) - File.open(File.join('lib', 'spree', 'testing_support', 'fixtures', image)) + File.open(File.join("lib", "spree", "testing_support", "fixtures", image)) end end diff --git a/core/spec/support/shared_examples/attachment.rb b/core/spec/support/shared_examples/attachment.rb index 12e3f6b8672..7f8a39c51c8 100644 --- a/core/spec/support/shared_examples/attachment.rb +++ b/core/spec/support/shared_examples/attachment.rb @@ -1,29 +1,30 @@ # frozen_string_literal: true -RSpec.shared_examples 'an attachment' do +RSpec.shared_examples "an attachment" do include ImageSpecHelper - context 'valid attachment' do + + context "valid attachment" do before do subject.send( :"#{attachment_name}=", - open_image('blank.jpg') + open_image("blank.jpg") ) end - it 'passes validations' do + it "passes validations" do expect(subject).to be_valid end - it 'returns definition' do + it "returns definition" do expect(subject.class.attachment_definitions[attachment_name]) .to include(default_style:) end - it 'returns if present' do + it "returns if present" do expect(subject.send(:"#{attachment_name}_present?")).to be_truthy end - it 'returns an actual attachment' do + it "returns an actual attachment" do expect(subject.send(attachment_name)).to respond_to( :url, :exists? @@ -31,8 +32,8 @@ end end - context 'invalid attachment' do - it 'fails validation' do + context "invalid attachment" do + it "fails validation" do invalid_file = File.open(__FILE__) subject.send(:"#{attachment_name}=", invalid_file) diff --git a/core/spec/support/shared_examples/metadata.rb b/core/spec/support/shared_examples/metadata.rb index 6f930c30d17..f72c4ad295e 100644 --- a/core/spec/support/shared_examples/metadata.rb +++ b/core/spec/support/shared_examples/metadata.rb @@ -12,12 +12,12 @@ end it "can store data in customer_metadata" do - object.customer_metadata = { "order_id" => "OD34236" } + object.customer_metadata = {"order_id" => "OD34236"} expect(object.customer_metadata["order_id"]).to eq("OD34236") end it "can store data in admin_metadata" do - object.admin_metadata = { "internal_note" => "Generate invoice after payment is received" } + object.admin_metadata = {"internal_note" => "Generate invoice after payment is received"} expect(object.admin_metadata["internal_note"]).to eq("Generate invoice after payment is received") end @@ -44,10 +44,10 @@ } end - let(:oversized_value_metadata) { { "product_details" => "This is an amazing product built to last long" * 10 } } # Exceeds 256 characters - let(:valid_value_metadata) { { "product_details" => "This is an amazing product built to last long" } } - let(:oversized_key_metadata) { { "company_details_for_products" => 'This is made by demo company' } } # Exceeds 16 characters - let(:valid_key_metadata) { { "company_details" => 'This is made by demo company' } } + let(:oversized_value_metadata) { {"product_details" => "This is an amazing product built to last long" * 10} } # Exceeds 256 characters + let(:valid_value_metadata) { {"product_details" => "This is an amazing product built to last long"} } + let(:oversized_key_metadata) { {"company_details_for_products" => "This is made by demo company"} } # Exceeds 16 characters + let(:valid_key_metadata) { {"company_details" => "This is made by demo company"} } subject { create(metadata_class) } diff --git a/legacy_promotions/Rakefile b/legacy_promotions/Rakefile index 4b6e3ffb764..dc8af272e80 100644 --- a/legacy_promotions/Rakefile +++ b/legacy_promotions/Rakefile @@ -1,35 +1,35 @@ # frozen_string_literal: true -require 'rubygems' -require 'rake' -require 'rake/testtask' -require 'rspec/core/rake_task' -require 'spree/testing_support/dummy_app/rake_tasks' -require 'solidus_admin/testing_support/dummy_app/rake_tasks' -require 'bundler/gem_tasks' +require "rubygems" +require "rake" +require "rake/testtask" +require "rspec/core/rake_task" +require "spree/testing_support/dummy_app/rake_tasks" +require "solidus_admin/testing_support/dummy_app/rake_tasks" +require "bundler/gem_tasks" RSpec::Core::RakeTask.new task default: :spec DummyApp::RakeTasks.new( gem_root: File.dirname(__FILE__), - lib_name: 'solidus_legacy_promotions' + lib_name: "solidus_legacy_promotions" ) -require 'yard/rake/yardoc_task' +require "yard/rake/yardoc_task" YARD::Rake::YardocTask.new(:yard) # The following workaround can be removed # once https://github.com/lsegal/yard/pull/1457 is merged. -task('yard:require') { require 'yard' } -task yard: 'yard:require' +task("yard:require") { require "yard" } +task yard: "yard:require" namespace :spec do task :isolated do - spec_files = Dir['spec/**/*_spec.rb'] + spec_files = Dir["spec/**/*_spec.rb"] failed_specs = spec_files.reject do |file| puts "rspec #{file}" - system('rspec', file) + system("rspec", file) end if !failed_specs.empty? @@ -40,4 +40,4 @@ namespace :spec do end end -task test_app: 'db:reset' +task test_app: "db:reset" diff --git a/legacy_promotions/app/jobs/spree/promotion_code_batch_job.rb b/legacy_promotions/app/jobs/spree/promotion_code_batch_job.rb index a5b4f343f41..de3ba9f9fd9 100644 --- a/legacy_promotions/app/jobs/spree/promotion_code_batch_job.rb +++ b/legacy_promotions/app/jobs/spree/promotion_code_batch_job.rb @@ -14,7 +14,7 @@ def perform(promotion_code_batch) .promotion_code_batch_finished(promotion_code_batch) .deliver_now end - rescue StandardError => error + rescue => error if promotion_code_batch.email? Spree::Config.promotions.promotion_code_batch_mailer_class .promotion_code_batch_errored(promotion_code_batch) diff --git a/legacy_promotions/app/models/spree/calculator/distributed_amount.rb b/legacy_promotions/app/models/spree/calculator/distributed_amount.rb index a472a737591..1aa7cda2799 100644 --- a/legacy_promotions/app/models/spree/calculator/distributed_amount.rb +++ b/legacy_promotions/app/models/spree/calculator/distributed_amount.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_dependency 'spree/calculator' +require_dependency "spree/calculator" # This is a calculator for line item adjustment actions. It accepts a line item # and calculates its weighted adjustment amount based on the value of the @@ -16,6 +16,7 @@ def compute_line_item(line_item) return 0 unless line_item return 0 unless preferred_currency.casecmp(line_item.currency).zero? return 0 unless calculable.promotion.line_item_actionable?(line_item.order, line_item) + Spree::DistributedAmountsHandler.new( actionable_line_items(line_item.order), preferred_amount diff --git a/legacy_promotions/app/models/spree/calculator/flat_percent_item_total.rb b/legacy_promotions/app/models/spree/calculator/flat_percent_item_total.rb index f7d187d64b7..dce2522a50a 100644 --- a/legacy_promotions/app/models/spree/calculator/flat_percent_item_total.rb +++ b/legacy_promotions/app/models/spree/calculator/flat_percent_item_total.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_dependency 'spree/calculator' +require_dependency "spree/calculator" module Spree class Calculator::FlatPercentItemTotal < Calculator diff --git a/legacy_promotions/app/models/spree/calculator/flexi_rate.rb b/legacy_promotions/app/models/spree/calculator/flexi_rate.rb index f5a9483f038..e457f4a2afe 100644 --- a/legacy_promotions/app/models/spree/calculator/flexi_rate.rb +++ b/legacy_promotions/app/models/spree/calculator/flexi_rate.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require_dependency 'spree/calculator' +require_dependency "spree/calculator" module Spree class Calculator::FlexiRate < Calculator - preference :first_item, :decimal, default: 0 + preference :first_item, :decimal, default: 0 preference :additional_item, :decimal, default: 0 - preference :max_items, :integer, default: 0 - preference :currency, :string, default: ->{ Spree::Config[:currency] } + preference :max_items, :integer, default: 0 + preference :currency, :string, default: -> { Spree::Config[:currency] } def compute(object) items_count = object.quantity diff --git a/legacy_promotions/app/models/spree/calculator/percent_on_line_item.rb b/legacy_promotions/app/models/spree/calculator/percent_on_line_item.rb index 9d3e3d2eaf5..09ad40ea793 100644 --- a/legacy_promotions/app/models/spree/calculator/percent_on_line_item.rb +++ b/legacy_promotions/app/models/spree/calculator/percent_on_line_item.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_dependency 'spree/calculator' +require_dependency "spree/calculator" module Spree class Calculator::PercentOnLineItem < Calculator diff --git a/legacy_promotions/app/models/spree/calculator/tiered_flat_rate.rb b/legacy_promotions/app/models/spree/calculator/tiered_flat_rate.rb index 180c9b67bb7..6e923534c1e 100644 --- a/legacy_promotions/app/models/spree/calculator/tiered_flat_rate.rb +++ b/legacy_promotions/app/models/spree/calculator/tiered_flat_rate.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_dependency 'spree/calculator' +require_dependency "spree/calculator" module Spree class Calculator::TieredFlatRate < Calculator @@ -39,7 +39,7 @@ def cast_to_d(value) def preferred_tiers_content if preferred_tiers.is_a? Hash - unless preferred_tiers.keys.all?{ |key| key.is_a?(Numeric) && key > 0 } + unless preferred_tiers.keys.all? { |key| key.is_a?(Numeric) && key > 0 } errors.add(:base, :keys_should_be_positive_number) end else diff --git a/legacy_promotions/app/models/spree/calculator/tiered_percent.rb b/legacy_promotions/app/models/spree/calculator/tiered_percent.rb index 3e419e37d72..ccd73e1dfbd 100644 --- a/legacy_promotions/app/models/spree/calculator/tiered_percent.rb +++ b/legacy_promotions/app/models/spree/calculator/tiered_percent.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_dependency 'spree/calculator' +require_dependency "spree/calculator" module Spree class Calculator::TieredPercent < Calculator @@ -46,10 +46,10 @@ def cast_to_d(value) def preferred_tiers_content if preferred_tiers.is_a? Hash - unless preferred_tiers.keys.all?{ |key| key.is_a?(Numeric) && key > 0 } + unless preferred_tiers.keys.all? { |key| key.is_a?(Numeric) && key > 0 } errors.add(:base, :keys_should_be_positive_number) end - unless preferred_tiers.values.all?{ |key| key.is_a?(Numeric) && key >= 0 && key <= 100 } + unless preferred_tiers.values.all? { |key| key.is_a?(Numeric) && key >= 0 && key <= 100 } errors.add(:base, :values_should_be_percent) end else diff --git a/legacy_promotions/app/models/spree/order_promotion.rb b/legacy_promotions/app/models/spree/order_promotion.rb index e136936670e..8760c42e2fd 100644 --- a/legacy_promotions/app/models/spree/order_promotion.rb +++ b/legacy_promotions/app/models/spree/order_promotion.rb @@ -6,11 +6,11 @@ module Spree # 1. A promotion that a user attempted to apply to their order # 2. The specific code that they used class OrderPromotion < Spree::Base - self.table_name = 'spree_orders_promotions' + self.table_name = "spree_orders_promotions" - belongs_to :order, class_name: 'Spree::Order', optional: true - belongs_to :promotion, class_name: 'Spree::Promotion', optional: true - belongs_to :promotion_code, class_name: 'Spree::PromotionCode', optional: true + belongs_to :order, class_name: "Spree::Order", optional: true + belongs_to :promotion, class_name: "Spree::Promotion", optional: true + belongs_to :promotion_code, class_name: "Spree::PromotionCode", optional: true validates :order, presence: true validates :promotion, presence: true diff --git a/legacy_promotions/app/models/spree/promotion.rb b/legacy_promotions/app/models/spree/promotion.rb index 9ae21cca59c..0b81e554b45 100644 --- a/legacy_promotions/app/models/spree/promotion.rb +++ b/legacy_promotions/app/models/spree/promotion.rb @@ -27,10 +27,10 @@ class Promotion < Spree::Base validates_associated :rules validates :name, presence: true - validates :path, uniqueness: { allow_blank: true, case_sensitive: true } - validates :usage_limit, numericality: { greater_than: 0, allow_nil: true } - validates :per_code_usage_limit, numericality: { greater_than_or_equal_to: 0, allow_nil: true } - validates :description, length: { maximum: 255 } + validates :path, uniqueness: {allow_blank: true, case_sensitive: true} + validates :usage_limit, numericality: {greater_than: 0, allow_nil: true} + validates :per_code_usage_limit, numericality: {greater_than_or_equal_to: 0, allow_nil: true} + validates :description, length: {maximum: 255} validate :apply_automatically_disallowed_with_paths before_save :normalize_blank_values @@ -42,15 +42,15 @@ class Promotion < Spree::Base table = arel_table time = Time.current - where(table[:starts_at].eq(nil).or(table[:starts_at].lt(time))). - where(table[:expires_at].eq(nil).or(table[:expires_at].gt(time))) + where(table[:starts_at].eq(nil).or(table[:starts_at].lt(time))) + .where(table[:expires_at].eq(nil).or(table[:expires_at].gt(time))) end scope :has_actions, -> do joins(:promotion_actions).distinct end scope :applied, -> { joins(:order_promotions).distinct } - self.allowed_ransackable_associations = ['codes'] + self.allowed_ransackable_associations = ["codes"] self.allowed_ransackable_attributes = %w[name path promotion_category_id] self.allowed_ransackable_scopes = %i[active] @@ -66,9 +66,9 @@ def self.with_coupon_code(val) # All orders that have been discounted using this promotion def discounted_orders - Spree::Order. - joins(:all_adjustments). - where( + Spree::Order + .joins(:all_adjustments) + .where( spree_adjustments: { source_type: "Spree::PromotionAction", source_id: actions.map(&:id), @@ -131,7 +131,7 @@ def activate(order:, line_item: nil, user: nil, path: nil, promotion_code: nil) # connect to the order order.order_promotions.find_or_create_by!( promotion: self, - promotion_code:, + promotion_code: ) order.promotions.reset order_promotions.reset @@ -192,11 +192,11 @@ def usage_limit_exceeded?(excluded_orders: []) # @param excluded_orders [Array] Orders to exclude from usage count # @return [Integer] usage count def usage_count(excluded_orders: []) - discounted_orders. - complete. - where.not(id: [excluded_orders.map(&:id)]). - where.not(spree_orders: { state: :canceled }). - count + discounted_orders + .complete + .where.not(id: [excluded_orders.map(&:id)]) + .where.not(spree_orders: {state: :canceled}) + .count end def line_item_actionable?(order, line_item, promotion_code: nil) @@ -211,12 +211,12 @@ def line_item_actionable?(order, line_item, promotion_code: nil) end def used_by?(user, excluded_orders = []) - discounted_orders. - complete. - where.not(id: excluded_orders.map(&:id)). - where(user:). - where.not(spree_orders: { state: :canceled }). - exists? + discounted_orders + .complete + .where.not(id: excluded_orders.map(&:id)) + .where(user:) + .where.not(spree_orders: {state: :canceled}) + .exists? end # Removes a promotion and any adjustments or other side effects from an diff --git a/legacy_promotions/app/models/spree/promotion/actions/create_adjustment.rb b/legacy_promotions/app/models/spree/promotion/actions/create_adjustment.rb index 838cca7c644..66d95695817 100644 --- a/legacy_promotions/app/models/spree/promotion/actions/create_adjustment.rb +++ b/legacy_promotions/app/models/spree/promotion/actions/create_adjustment.rb @@ -34,7 +34,7 @@ def perform(options = {}) order:, source: self, promotion_code: options[:promotion_code], - label: I18n.t('spree.adjustment_labels.order', promotion: Spree::Promotion.model_name.human, promotion_name: promotion.name) + label: I18n.t("spree.adjustment_labels.order", promotion: Spree::Promotion.model_name.human, promotion_name: promotion.name) ) true end @@ -73,6 +73,7 @@ def promotion_credit_exists?(adjustable) def ensure_action_has_calculator return if calculator + self.calculator = Calculator::FlatPercentItemTotal.new end end diff --git a/legacy_promotions/app/models/spree/promotion/actions/create_item_adjustments.rb b/legacy_promotions/app/models/spree/promotion/actions/create_item_adjustments.rb index 8b878b8a680..dedb1f97a05 100644 --- a/legacy_promotions/app/models/spree/promotion/actions/create_item_adjustments.rb +++ b/legacy_promotions/app/models/spree/promotion/actions/create_item_adjustments.rb @@ -36,6 +36,7 @@ def perform(payload = {}) def compute_amount(adjustable) order = adjustable.is_a?(Order) ? adjustable : adjustable.order return 0 unless promotion.line_item_actionable?(order, adjustable) + promotion_amount = calculator.compute(adjustable) promotion_amount ||= Spree::ZERO promotion_amount = promotion_amount.abs @@ -61,12 +62,13 @@ def remove_from(order) def create_adjustment(adjustable, order, promotion_code) amount = compute_amount(adjustable) return if amount == 0 + adjustable.adjustments.create!( source: self, amount:, order:, promotion_code:, - label: I18n.t('spree.adjustment_labels.line_item', promotion: Spree::Promotion.model_name.human, promotion_name: promotion.name) + label: I18n.t("spree.adjustment_labels.line_item", promotion: Spree::Promotion.model_name.human, promotion_name: promotion.name) ) true end @@ -83,6 +85,7 @@ def promotion_credit_exists?(adjustable) def ensure_action_has_calculator return if calculator + self.calculator = Calculator::PercentOnLineItem.new end diff --git a/legacy_promotions/app/models/spree/promotion/actions/create_quantity_adjustments.rb b/legacy_promotions/app/models/spree/promotion/actions/create_quantity_adjustments.rb index e6ea31aaa05..590249d7ba6 100644 --- a/legacy_promotions/app/models/spree/promotion/actions/create_quantity_adjustments.rb +++ b/legacy_promotions/app/models/spree/promotion/actions/create_quantity_adjustments.rb @@ -63,9 +63,9 @@ def compute_amount(line_item) order = line_item.order line_items = actionable_line_items(order) - actioned_line_items = order.line_item_adjustments.reload. - select { |adjustment| adjustment.source == self && adjustment.amount < 0 }. - map(&:adjustable) + actioned_line_items = order.line_item_adjustments.reload + .select { |adjustment| adjustment.source == self && adjustment.amount < 0 } + .map(&:adjustable) other_line_items = actioned_line_items - [line_item] applicable_quantity = total_applicable_quantity(line_items) diff --git a/legacy_promotions/app/models/spree/promotion/actions/free_shipping.rb b/legacy_promotions/app/models/spree/promotion/actions/free_shipping.rb index 2322491cb0d..cc7b6dbadd7 100644 --- a/legacy_promotions/app/models/spree/promotion/actions/free_shipping.rb +++ b/legacy_promotions/app/models/spree/promotion/actions/free_shipping.rb @@ -27,7 +27,7 @@ def perform(payload = {}) end def label - "#{I18n.t('spree.promotion')} (#{promotion.name})" + "#{I18n.t("spree.promotion")} (#{promotion.name})" end def compute_amount(shipment) diff --git a/legacy_promotions/app/models/spree/promotion/order_adjustments_recalculator.rb b/legacy_promotions/app/models/spree/promotion/order_adjustments_recalculator.rb index ca01e9c095a..6ce37026bd5 100644 --- a/legacy_promotions/app/models/spree/promotion/order_adjustments_recalculator.rb +++ b/legacy_promotions/app/models/spree/promotion/order_adjustments_recalculator.rb @@ -32,10 +32,10 @@ def call Spree::Config.promotions.promotion_chooser_class.new(order_promotion_adjustments).update order.promo_total = all_items.sum(&:promo_total) + - order_promotion_adjustments. - select(&:eligible?). - select(&:promotion?). - sum(&:amount) + order_promotion_adjustments + .select(&:eligible?) + .select(&:promotion?) + .sum(&:amount) order end diff --git a/legacy_promotions/app/models/spree/promotion/rules/first_repeat_purchase_since.rb b/legacy_promotions/app/models/spree/promotion/rules/first_repeat_purchase_since.rb index ccd47ef7380..e8fa57e84ab 100644 --- a/legacy_promotions/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +++ b/legacy_promotions/app/models/spree/promotion/rules/first_repeat_purchase_since.rb @@ -5,7 +5,7 @@ class Promotion < Spree::Base module Rules class FirstRepeatPurchaseSince < PromotionRule preference :days_ago, :integer, default: 365 - validates :preferred_days_ago, numericality: { only_integer: true, greater_than: 0 } + validates :preferred_days_ago, numericality: {only_integer: true, greater_than: 0} # This promotion is applicable to orders only. def applicable?(promotable) diff --git a/legacy_promotions/app/models/spree/promotion/rules/item_total.rb b/legacy_promotions/app/models/spree/promotion/rules/item_total.rb index 980978db7f9..7c64d7d55e3 100644 --- a/legacy_promotions/app/models/spree/promotion/rules/item_total.rb +++ b/legacy_promotions/app/models/spree/promotion/rules/item_total.rb @@ -10,20 +10,20 @@ module Rules # To customize the error message you can also override `ineligible_message`. class ItemTotal < PromotionRule preference :amount, :decimal, default: 100.00 - preference :currency, :string, default: ->{ Spree::Config[:currency] } - preference :operator, :string, default: 'gt' + preference :currency, :string, default: -> { Spree::Config[:currency] } + preference :operator, :string, default: "gt" # The list of allowed operators names mapped to their symbols. def self.operators_map { gte: :>=, - gt: :>, + gt: :> } end def self.operator_options operators_map.map do |name, _method| - [I18n.t(name, scope: 'spree.item_total_rule.operators'), name] + [I18n.t(name, scope: "spree.item_total_rule.operators"), name] end end @@ -46,7 +46,7 @@ def eligible?(order, _options = {}) def operator self.class.operators_map.fetch( preferred_operator.to_sym, - preferred_operator_default, + preferred_operator_default ) end @@ -64,9 +64,9 @@ def formatted_amount def ineligible_message case preferred_operator.to_s - when 'gte' + when "gte" eligibility_error_message(:item_total_less_than, amount: formatted_amount) - when 'gt' + when "gt" eligibility_error_message(:item_total_less_than_or_equal, amount: formatted_amount) else eligibility_error_message(:item_total_doesnt_match_with_operator, amount: formatted_amount, operator: preferred_operator) @@ -74,7 +74,7 @@ def ineligible_message end def ineligible_error_code - if preferred_operator == 'gte' + if preferred_operator == "gte" :item_total_less_than else :item_total_less_than_or_equal diff --git a/legacy_promotions/app/models/spree/promotion/rules/minimum_quantity.rb b/legacy_promotions/app/models/spree/promotion/rules/minimum_quantity.rb index 1ffc75726ab..758641b016b 100644 --- a/legacy_promotions/app/models/spree/promotion/rules/minimum_quantity.rb +++ b/legacy_promotions/app/models/spree/promotion/rules/minimum_quantity.rb @@ -11,7 +11,7 @@ module Rules # it to a simple quantity check across the entire order which would be # better served by an item total rule. class MinimumQuantity < PromotionRule - validates :preferred_minimum_quantity, numericality: { only_integer: true, greater_than: 0 } + validates :preferred_minimum_quantity, numericality: {only_integer: true, greater_than: 0} preference :minimum_quantity, :integer, default: 1 diff --git a/legacy_promotions/app/models/spree/promotion/rules/nth_order.rb b/legacy_promotions/app/models/spree/promotion/rules/nth_order.rb index d5f0b337a85..556fc55ce25 100644 --- a/legacy_promotions/app/models/spree/promotion/rules/nth_order.rb +++ b/legacy_promotions/app/models/spree/promotion/rules/nth_order.rb @@ -7,7 +7,7 @@ class NthOrder < PromotionRule preference :nth_order, :integer, default: 2 # It does not make sense to have this apply to the first order using preferred_nth_order == 1 # Instead we could use the first_order rule - validates :preferred_nth_order, numericality: { only_integer: true, greater_than: 1 } + validates :preferred_nth_order, numericality: {only_integer: true, greater_than: 1} # This promotion is applicable to orders only. def applicable?(promotable) @@ -27,12 +27,12 @@ def eligible?(order, _options = {}) private def completed_order_count(order) - order. - user. - orders. - complete. - where(Spree::Order.arel_table[:completed_at].lt(order.completed_at || Time.current)). - count + order + .user + .orders + .complete + .where(Spree::Order.arel_table[:completed_at].lt(order.completed_at || Time.current)) + .count end def nth_order?(order) diff --git a/legacy_promotions/app/models/spree/promotion/rules/option_value.rb b/legacy_promotions/app/models/spree/promotion/rules/option_value.rb index 04de936957a..a2f3d01505e 100644 --- a/legacy_promotions/app/models/spree/promotion/rules/option_value.rb +++ b/legacy_promotions/app/models/spree/promotion/rules/option_value.rb @@ -4,7 +4,7 @@ module Spree class Promotion < Spree::Base module Rules class OptionValue < PromotionRule - MATCH_POLICIES = %w(any) + MATCH_POLICIES = %w[any] preference :match_policy, :string, default: MATCH_POLICIES.first preference :eligible_values, :hash @@ -14,7 +14,7 @@ def applicable?(promotable) def eligible?(promotable, _options = {}) case preferred_match_policy - when 'any' + when "any" promotable.line_items.any? { |item| actionable?(item) } end end @@ -28,11 +28,11 @@ def actionable?(line_item) def preferred_eligible_values values = preferences[:eligible_values] || {} - Hash[values.keys.map(&:to_i).zip( + values.keys.map(&:to_i).zip( values.values.map do |value| (value.is_a?(Array) ? value : value.split(",")).map(&:to_i) end - )] + ).to_h end private diff --git a/legacy_promotions/app/models/spree/promotion/rules/product.rb b/legacy_promotions/app/models/spree/promotion/rules/product.rb index eb3eba42843..4b03d18e5c2 100644 --- a/legacy_promotions/app/models/spree/promotion/rules/product.rb +++ b/legacy_promotions/app/models/spree/promotion/rules/product.rb @@ -11,17 +11,17 @@ class Product < PromotionRule has_many :product_promotion_rules, dependent: :destroy, foreign_key: :promotion_rule_id, - class_name: 'Spree::ProductPromotionRule', + class_name: "Spree::ProductPromotionRule", inverse_of: :promotion_rule - has_many :products, class_name: 'Spree::Product', through: :product_promotion_rules + has_many :products, class_name: "Spree::Product", through: :product_promotion_rules def preload_relations [:products] end - MATCH_POLICIES = %w(any all none) + MATCH_POLICIES = %w[any all none] - validates :preferred_match_policy, inclusion: { in: MATCH_POLICIES } + validates :preferred_match_policy, inclusion: {in: MATCH_POLICIES} preference :match_policy, :string, default: MATCH_POLICIES.first @@ -45,12 +45,12 @@ def eligible?(order, _options = {}) when "any" unless order_products(order).any? { |product| eligible_products.include?(product) } eligibility_errors.add(:base, eligibility_error_message(:no_applicable_products), - error_code: :no_applicable_products) + error_code: :no_applicable_products) end when "none" unless order_products(order).none? { |product| eligible_products.include?(product) } eligibility_errors.add(:base, eligibility_error_message(:has_excluded_product), - error_code: :has_excluded_product) + error_code: :has_excluded_product) end else raise "unexpected match policy: #{preferred_match_policy.inspect}" @@ -61,9 +61,9 @@ def eligible?(order, _options = {}) def actionable?(line_item) case preferred_match_policy - when 'any', 'all' + when "any", "all" product_ids.include? line_item.variant.product_id - when 'none' + when "none" product_ids.exclude? line_item.variant.product_id else raise "unexpected match policy: #{preferred_match_policy.inspect}" @@ -71,11 +71,11 @@ def actionable?(line_item) end def product_ids_string - product_ids.join(',') + product_ids.join(",") end def product_ids_string=(product_ids) - self.product_ids = product_ids.to_s.split(',').map(&:strip) + self.product_ids = product_ids.to_s.split(",").map(&:strip) end private diff --git a/legacy_promotions/app/models/spree/promotion/rules/taxon.rb b/legacy_promotions/app/models/spree/promotion/rules/taxon.rb index f7fd29a155e..b30fb012069 100644 --- a/legacy_promotions/app/models/spree/promotion/rules/taxon.rb +++ b/legacy_promotions/app/models/spree/promotion/rules/taxon.rb @@ -5,19 +5,19 @@ class Promotion < Spree::Base module Rules class Taxon < PromotionRule has_many :promotion_rule_taxons, - class_name: 'Spree::PromotionRuleTaxon', + class_name: "Spree::PromotionRuleTaxon", foreign_key: :promotion_rule_id, dependent: :destroy, inverse_of: :promotion_rule - has_many :taxons, through: :promotion_rule_taxons, class_name: 'Spree::Taxon' + has_many :taxons, through: :promotion_rule_taxons, class_name: "Spree::Taxon" def preload_relations [:taxons] end - MATCH_POLICIES = %w(any all none) + MATCH_POLICIES = %w[any all none] - validates :preferred_match_policy, inclusion: { in: MATCH_POLICIES } + validates :preferred_match_policy, inclusion: {in: MATCH_POLICIES} preference :match_policy, :string, default: MATCH_POLICIES.first def applicable?(promotable) @@ -28,7 +28,7 @@ def eligible?(order, _options = {}) order_taxons = taxons_in_order(order) case preferred_match_policy - when 'all' + when "all" matches_all = taxons.all? do |rule_taxon| order_taxons.where(id: rule_taxon.self_and_descendants.ids).exists? end @@ -36,11 +36,11 @@ def eligible?(order, _options = {}) unless matches_all eligibility_errors.add(:base, eligibility_error_message(:missing_taxon), error_code: :missing_taxon) end - when 'any' + when "any" unless order_taxons.where(id: rule_taxon_ids_with_children).exists? eligibility_errors.add(:base, eligibility_error_message(:no_matching_taxons), error_code: :no_matching_taxons) end - when 'none' + when "none" if order_taxons.where(id: rule_taxon_ids_with_children).exists? eligibility_errors.add(:base, eligibility_error_message(:has_excluded_taxon), error_code: :has_excluded_taxon) end @@ -58,9 +58,9 @@ def actionable?(line_item) ).exists? case preferred_match_policy - when 'any', 'all' + when "any", "all" found - when 'none' + when "none" !found else raise "unexpected match policy: #{preferred_match_policy.inspect}" @@ -68,11 +68,11 @@ def actionable?(line_item) end def taxon_ids_string - taxons.pluck(:id).join(',') + taxons.pluck(:id).join(",") end def taxon_ids_string=(taxon_ids) - taxon_ids = taxon_ids.to_s.split(',').map(&:strip) + taxon_ids = taxon_ids.to_s.split(",").map(&:strip) self.taxons = Spree::Taxon.find(taxon_ids) end @@ -80,8 +80,8 @@ def taxon_ids_string=(taxon_ids) # All taxons in an order def taxons_in_order(order) - Spree::Taxon.joins(products: { variants_including_master: :line_items }) - .where(spree_line_items: { order_id: order.id }).distinct + Spree::Taxon.joins(products: {variants_including_master: :line_items}) + .where(spree_line_items: {order_id: order.id}).distinct end # ids of taxons rules and taxons rules children diff --git a/legacy_promotions/app/models/spree/promotion/rules/user.rb b/legacy_promotions/app/models/spree/promotion/rules/user.rb index 898ac63910d..6527a22316f 100644 --- a/legacy_promotions/app/models/spree/promotion/rules/user.rb +++ b/legacy_promotions/app/models/spree/promotion/rules/user.rb @@ -5,7 +5,7 @@ class Promotion < Spree::Base module Rules class User < PromotionRule has_many :promotion_rule_users, - class_name: 'Spree::PromotionRuleUser', + class_name: "Spree::PromotionRuleUser", foreign_key: :promotion_rule_id, dependent: :destroy, inverse_of: :promotion_rule @@ -24,11 +24,11 @@ def eligible?(order, _options = {}) end def user_ids_string - user_ids.join(',') + user_ids.join(",") end def user_ids_string=(user_ids) - self.user_ids = user_ids.to_s.split(',').map(&:strip) + self.user_ids = user_ids.to_s.split(",").map(&:strip) end end end diff --git a/legacy_promotions/app/models/spree/promotion/rules/user_role.rb b/legacy_promotions/app/models/spree/promotion/rules/user_role.rb index 0e7c1211ecf..12a475cbf58 100644 --- a/legacy_promotions/app/models/spree/promotion/rules/user_role.rb +++ b/legacy_promotions/app/models/spree/promotion/rules/user_role.rb @@ -6,7 +6,7 @@ module Rules class UserRole < PromotionRule preference :role_ids, :array, default: [] - MATCH_POLICIES = %w(any all) + MATCH_POLICIES = %w[any all] preference :match_policy, default: MATCH_POLICIES.first def applicable?(promotable) @@ -15,6 +15,7 @@ def applicable?(promotable) def eligible?(order, _options = {}) return false unless order.user + if all_match_policy? match_all_roles?(order) else @@ -25,7 +26,7 @@ def eligible?(order, _options = {}) private def all_match_policy? - preferred_match_policy == 'all' && preferred_role_ids.present? + preferred_match_policy == "all" && preferred_role_ids.present? end def user_roles(order) diff --git a/legacy_promotions/app/models/spree/promotion_action.rb b/legacy_promotions/app/models/spree/promotion_action.rb index 2364740d093..984856e8881 100644 --- a/legacy_promotions/app/models/spree/promotion_action.rb +++ b/legacy_promotions/app/models/spree/promotion_action.rb @@ -9,7 +9,7 @@ class PromotionAction < Spree::Base include Spree::Preferences::Persistable include Spree::SoftDeletable - belongs_to :promotion, class_name: 'Spree::Promotion', inverse_of: :promotion_actions, optional: true + belongs_to :promotion, class_name: "Spree::Promotion", inverse_of: :promotion_actions, optional: true scope :of_type, ->(type) { where(type: Array.wrap(type).map(&:to_s)) } scope :shipping, -> { of_type(Spree::Config.promotions.shipping_actions.to_a) } @@ -25,7 +25,7 @@ def preload_relations # # @note This method should be overriden in subclassses. def perform(_options = {}) - raise 'perform should be implemented in a sub-class of PromotionAction' + raise "perform should be implemented in a sub-class of PromotionAction" end # Removes the action from an order @@ -35,7 +35,7 @@ def perform(_options = {}) # @param order [Spree::Order] the order to remove the action from # @return [void] def remove_from(_order) - raise 'remove_from should be implemented in a sub-class of PromotionAction' + raise "remove_from should be implemented in a sub-class of PromotionAction" end def to_partial_path diff --git a/legacy_promotions/app/models/spree/promotion_chooser.rb b/legacy_promotions/app/models/spree/promotion_chooser.rb index 8ec0d089aba..3a4a7c3ff69 100644 --- a/legacy_promotions/app/models/spree/promotion_chooser.rb +++ b/legacy_promotions/app/models/spree/promotion_chooser.rb @@ -14,6 +14,7 @@ def update if best_promotion_adjustment @adjustments.select(&:eligible?).each do |adjustment| next if adjustment == best_promotion_adjustment + adjustment.update_columns(eligible: false, updated_at: Time.current) end best_promotion_adjustment.amount diff --git a/legacy_promotions/app/models/spree/promotion_code.rb b/legacy_promotions/app/models/spree/promotion_code.rb index 0fc944d0e7f..eb9823ca94c 100644 --- a/legacy_promotions/app/models/spree/promotion_code.rb +++ b/legacy_promotions/app/models/spree/promotion_code.rb @@ -7,11 +7,11 @@ class Spree::PromotionCode < Spree::Base before_validation :normalize_code - validates :value, presence: true, uniqueness: { allow_blank: true, case_sensitive: true } + validates :value, presence: true, uniqueness: {allow_blank: true, case_sensitive: true} validates :promotion, presence: true validate :promotion_not_apply_automatically, on: :create - self.allowed_ransackable_attributes = ['value'] + self.allowed_ransackable_attributes = ["value"] # Whether the promotion code has exceeded its usage restrictions # @@ -28,14 +28,14 @@ def usage_limit_exceeded?(excluded_orders: []) # @param excluded_orders [Array] Orders to exclude from usage count # @return [Integer] usage count def usage_count(excluded_orders: []) - promotion. - discounted_orders. - complete. - where.not(spree_orders: { state: :canceled }). - joins(:order_promotions). - where(spree_orders_promotions: { promotion_code_id: id }). - where.not(id: excluded_orders.map(&:id)). - count + promotion + .discounted_orders + .complete + .where.not(spree_orders: {state: :canceled}) + .joins(:order_promotions) + .where(spree_orders_promotions: {promotion_code_id: id}) + .where.not(id: excluded_orders.map(&:id)) + .count end def usage_limit diff --git a/legacy_promotions/app/models/spree/promotion_code/batch_builder.rb b/legacy_promotions/app/models/spree/promotion_code/batch_builder.rb index 84ee3c572e4..825fb1bdf95 100644 --- a/legacy_promotions/app/models/spree/promotion_code/batch_builder.rb +++ b/legacy_promotions/app/models/spree/promotion_code/batch_builder.rb @@ -8,7 +8,7 @@ class ::Spree::PromotionCode::BatchBuilder DEFAULT_OPTIONS = { random_code_length: 6, batch_size: 1000, - sample_characters: ('a'..'z').to_a + (2..9).to_a.map(&:to_s) + sample_characters: ("a".."z").to_a + (2..9).to_a.map(&:to_s) } def initialize(promotion_code_batch, options = {}) @@ -20,7 +20,7 @@ def initialize(promotion_code_batch, options = {}) def build_promotion_codes generate_random_codes promotion_code_batch.update!(state: "completed") - rescue StandardError => error + rescue => error promotion_code_batch.update!( error: error.inspect, state: "failed" diff --git a/legacy_promotions/app/models/spree/promotion_code_batch.rb b/legacy_promotions/app/models/spree/promotion_code_batch.rb index 2ef929f20c6..f38d5dbdac8 100644 --- a/legacy_promotions/app/models/spree/promotion_code_batch.rb +++ b/legacy_promotions/app/models/spree/promotion_code_batch.rb @@ -8,7 +8,7 @@ class CantProcessStartedBatch < StandardError belongs_to :promotion, class_name: "Spree::Promotion", optional: true has_many :promotion_codes, class_name: "Spree::PromotionCode", dependent: :destroy - validates :number_of_codes, numericality: { greater_than: 0 } + validates :number_of_codes, numericality: {greater_than: 0} validates :base_code, :number_of_codes, presence: true def finished? diff --git a/legacy_promotions/app/models/spree/promotion_handler/cart.rb b/legacy_promotions/app/models/spree/promotion_handler/cart.rb index 24360fbd82d..053d7a6dafd 100644 --- a/legacy_promotions/app/models/spree/promotion_handler/cart.rb +++ b/legacy_promotions/app/models/spree/promotion_handler/cart.rb @@ -67,7 +67,7 @@ def promotion_code(promotion) def promotion_includes [ :promotion_rules, - :promotion_actions, + :promotion_actions ] end end diff --git a/legacy_promotions/app/models/spree/promotion_handler/coupon.rb b/legacy_promotions/app/models/spree/promotion_handler/coupon.rb index 2a76f8ab359..ae8ee790cc3 100644 --- a/legacy_promotions/app/models/spree/promotion_handler/coupon.rb +++ b/legacy_promotions/app/models/spree/promotion_handler/coupon.rb @@ -8,7 +8,7 @@ class Coupon def initialize(order) @order = order - @coupon_code = order.coupon_code && order.coupon_code.downcase + @coupon_code = order.coupon_code&.downcase end def can_apply? @@ -45,16 +45,16 @@ def remove def set_success_code(status_code) @status_code = status_code - @success = I18n.t(status_code, scope: 'spree') + @success = I18n.t(status_code, scope: "spree") end def set_error_code(status_code, options = {}) @status_code = status_code - @error = options[:error] || I18n.t(status_code, scope: 'spree') + @error = options[:error] || I18n.t(status_code, scope: "spree") end def promotion - @promotion ||= if promotion_code && promotion_code.promotion.active? + @promotion ||= if promotion_code&.promotion&.active? promotion_code.promotion end end diff --git a/legacy_promotions/app/models/spree/promotion_handler/page.rb b/legacy_promotions/app/models/spree/promotion_handler/page.rb index 8a06285e363..478612471ed 100644 --- a/legacy_promotions/app/models/spree/promotion_handler/page.rb +++ b/legacy_promotions/app/models/spree/promotion_handler/page.rb @@ -7,11 +7,11 @@ class Page def initialize(order, path) @order = order - @path = path.delete_prefix('/') + @path = path.delete_prefix("/") end def activate - if promotion && promotion.eligible?(order) + if promotion&.eligible?(order) promotion.activate(order:) end end diff --git a/legacy_promotions/app/models/spree/promotion_handler/shipping.rb b/legacy_promotions/app/models/spree/promotion_handler/shipping.rb index e83c838cf4f..b9c2192da56 100644 --- a/legacy_promotions/app/models/spree/promotion_handler/shipping.rb +++ b/legacy_promotions/app/models/spree/promotion_handler/shipping.rb @@ -16,7 +16,7 @@ def activate if order_promotion.promotion.eligible?(order) order_promotion.promotion.activate( order:, - promotion_code: order_promotion.promotion_code, + promotion_code: order_promotion.promotion_code ) end end @@ -35,26 +35,26 @@ def not_connected_automatic_promotions end def automatic_promotions - @automatic_promotions ||= active_shipping_promotions. - where(apply_automatically: true). - to_a. - uniq + @automatic_promotions ||= active_shipping_promotions + .where(apply_automatically: true) + .to_a + .uniq end def connected_promotions - @connected_promotions ||= order.order_promotions. - joins(:promotion). - includes(:promotion). - merge(active_shipping_promotions). - to_a. - uniq + @connected_promotions ||= order.order_promotions + .joins(:promotion) + .includes(:promotion) + .merge(active_shipping_promotions) + .to_a + .uniq end def active_shipping_promotions - Spree::Promotion.all. - active. - joins(:promotion_actions). - merge(Spree::PromotionAction.shipping) + Spree::Promotion.all + .active + .joins(:promotion_actions) + .merge(Spree::PromotionAction.shipping) end end end diff --git a/legacy_promotions/app/models/spree/promotion_rule.rb b/legacy_promotions/app/models/spree/promotion_rule.rb index 27c62c07c7c..530df5dbdae 100644 --- a/legacy_promotions/app/models/spree/promotion_rule.rb +++ b/legacy_promotions/app/models/spree/promotion_rule.rb @@ -5,7 +5,7 @@ module Spree class PromotionRule < Spree::Base include Spree::Preferences::Persistable - belongs_to :promotion, class_name: 'Spree::Promotion', inverse_of: :promotion_rules, optional: true + belongs_to :promotion, class_name: "Spree::Promotion", inverse_of: :promotion_rules, optional: true scope :of_type, ->(type) { where(type:) } @@ -47,7 +47,7 @@ def unique_per_promotion end def eligibility_error_message(key, options = {}) - I18n.t(key, **{ scope: [:spree, :eligibility_errors, :messages] }.merge(options)) + I18n.t(key, scope: [:spree, :eligibility_errors, :messages], **options) end end end diff --git a/legacy_promotions/app/models/spree/promotion_rule_user.rb b/legacy_promotions/app/models/spree/promotion_rule_user.rb index 8f269533ccb..9fee5932f86 100644 --- a/legacy_promotions/app/models/spree/promotion_rule_user.rb +++ b/legacy_promotions/app/models/spree/promotion_rule_user.rb @@ -2,9 +2,9 @@ module Spree class PromotionRuleUser < Spree::Base - self.table_name = 'spree_promotion_rules_users' + self.table_name = "spree_promotion_rules_users" - belongs_to :promotion_rule, class_name: 'Spree::PromotionRule', optional: true + belongs_to :promotion_rule, class_name: "Spree::PromotionRule", optional: true belongs_to :user, class_name: Spree::UserClassHandle.new, optional: true end end diff --git a/legacy_promotions/app/patches/models/solidus_legacy_promotions/spree_adjustment_patch.rb b/legacy_promotions/app/patches/models/solidus_legacy_promotions/spree_adjustment_patch.rb index 79641cf9295..2ba878f2798 100644 --- a/legacy_promotions/app/patches/models/solidus_legacy_promotions/spree_adjustment_patch.rb +++ b/legacy_promotions/app/patches/models/solidus_legacy_promotions/spree_adjustment_patch.rb @@ -3,7 +3,7 @@ module SolidusLegacyPromotions module SpreeAdjustmentPatch def self.prepended(base) - base.belongs_to :promotion_code, class_name: 'Spree::PromotionCode', optional: true + base.belongs_to :promotion_code, class_name: "Spree::PromotionCode", optional: true base.validates :promotion_code, presence: true, if: :require_promotion_code? base.scope :eligible, -> { where(eligible: true) } diff --git a/legacy_promotions/app/patches/models/solidus_legacy_promotions/spree_order_patch.rb b/legacy_promotions/app/patches/models/solidus_legacy_promotions/spree_order_patch.rb index 94660d25c3f..68e2d9a1f2a 100644 --- a/legacy_promotions/app/patches/models/solidus_legacy_promotions/spree_order_patch.rb +++ b/legacy_promotions/app/patches/models/solidus_legacy_promotions/spree_order_patch.rb @@ -9,7 +9,7 @@ def allowed_ransackable_associations end def self.prepended(base) - base.has_many :order_promotions, class_name: 'Spree::OrderPromotion', dependent: :destroy + base.has_many :order_promotions, class_name: "Spree::OrderPromotion", dependent: :destroy base.has_many :promotions, through: :order_promotions end diff --git a/legacy_promotions/app/patches/models/solidus_legacy_promotions/spree_order_updater_patch.rb b/legacy_promotions/app/patches/models/solidus_legacy_promotions/spree_order_updater_patch.rb index b21110a33bf..f44dc2b3f85 100644 --- a/legacy_promotions/app/patches/models/solidus_legacy_promotions/spree_order_updater_patch.rb +++ b/legacy_promotions/app/patches/models/solidus_legacy_promotions/spree_order_updater_patch.rb @@ -25,18 +25,18 @@ def update_item_totals # Core doesn't have "eligible" adjustments anymore, so we need to # override the adjustment_total calculation to exclude them for legacy # promotions. - item.adjustment_total = item.adjustments. - select(&:eligible?). - reject(&:included?). - sum(&:amount) + item.adjustment_total = item.adjustments + .select(&:eligible?) + .reject(&:included?) + .sum(&:amount) if item.changed? item.update_columns( - promo_total: item.promo_total, - included_tax_total: item.included_tax_total, + promo_total: item.promo_total, + included_tax_total: item.included_tax_total, additional_tax_total: item.additional_tax_total, - adjustment_total: item.adjustment_total, - updated_at: Time.current, + adjustment_total: item.adjustment_total, + updated_at: Time.current ) end end diff --git a/legacy_promotions/app/subscribers/spree/order_promotion_subscriber.rb b/legacy_promotions/app/subscribers/spree/order_promotion_subscriber.rb index 56156a74bb7..703dfa45611 100644 --- a/legacy_promotions/app/subscribers/spree/order_promotion_subscriber.rb +++ b/legacy_promotions/app/subscribers/spree/order_promotion_subscriber.rb @@ -6,8 +6,8 @@ class OrderPromotionSubscriber include Omnes::Subscriber handle :order_emptied, - with: :clear_order_promotions, - id: :spree_order_promotion_clear_order_promotions + with: :clear_order_promotions, + id: :spree_order_promotion_clear_order_promotions # Clears all promotions from the order # diff --git a/legacy_promotions/bin/rails b/legacy_promotions/bin/rails index cddc7570f10..3808a55bab4 100755 --- a/legacy_promotions/bin/rails +++ b/legacy_promotions/bin/rails @@ -2,11 +2,11 @@ # This command will automatically be run when you run "rails" with Rails gems # installed from the root of your application. -ENGINE_ROOT = File.expand_path('..', __dir__) -ENGINE_PATH = File.expand_path('../lib/solidus_legacy_promotions/engine', __dir__) +ENGINE_ROOT = File.expand_path("..", __dir__) +ENGINE_PATH = File.expand_path("../lib/solidus_legacy_promotions/engine", __dir__) # Set up gems listed in the Gemfile. -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __dir__) +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __dir__) require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"]) require "rails/all" diff --git a/legacy_promotions/config/routes.rb b/legacy_promotions/config/routes.rb index 5544764845f..36901b646a7 100644 --- a/legacy_promotions/config/routes.rb +++ b/legacy_promotions/config/routes.rb @@ -8,7 +8,7 @@ resources :promotion_actions resources :promotion_codes, only: [:index, :new, :create] resources :promotion_code_batches, only: [:index, :new, :create] do - get '/download', to: "promotion_code_batches#download", defaults: { format: "csv" } + get "/download", to: "promotion_code_batches#download", defaults: {format: "csv"} end end diff --git a/legacy_promotions/db/migrate/20161017102621_create_spree_promotion_code_batch.rb b/legacy_promotions/db/migrate/20161017102621_create_spree_promotion_code_batch.rb index 4fbdee62651..28767183ec1 100644 --- a/legacy_promotions/db/migrate/20161017102621_create_spree_promotion_code_batch.rb +++ b/legacy_promotions/db/migrate/20161017102621_create_spree_promotion_code_batch.rb @@ -26,7 +26,7 @@ def change add_column( :spree_promotion_codes, :promotion_code_batch_id, - :integer, + :integer ) end @@ -34,14 +34,14 @@ def change add_foreign_key( :spree_promotion_codes, :spree_promotion_code_batches, - column: :promotion_code_batch_id, + column: :promotion_code_batch_id ) end unless index_exists?(:spree_promotion_codes, :promotion_code_batch_id) add_index( :spree_promotion_codes, - :promotion_code_batch_id, + :promotion_code_batch_id ) end end diff --git a/legacy_promotions/db/migrate/20190106184413_remove_code_from_spree_promotions.rb b/legacy_promotions/db/migrate/20190106184413_remove_code_from_spree_promotions.rb index 76465b135df..252a1708373 100644 --- a/legacy_promotions/db/migrate/20190106184413_remove_code_from_spree_promotions.rb +++ b/legacy_promotions/db/migrate/20190106184413_remove_code_from_spree_promotions.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'solidus_legacy_promotions/migrations/promotions_with_code_handlers' +require "solidus_legacy_promotions/migrations/promotions_with_code_handlers" class RemoveCodeFromSpreePromotions < ActiveRecord::Migration[5.1] class Promotion < ActiveRecord::Base self.table_name = "spree_promotions" - self.ignored_columns = %w(type) + self.ignored_columns = %w[type] end def up if column_exists?(:spree_promotions, :code) - promotions_with_code = Promotion.where.not(code: [nil, '']) + promotions_with_code = Promotion.where.not(code: [nil, ""]) if promotions_with_code.any? # You have some promotions with "code" field present! This is not good diff --git a/legacy_promotions/db/migrate/20231027084517_add_order_promotions_foreign_key.rb b/legacy_promotions/db/migrate/20231027084517_add_order_promotions_foreign_key.rb index a67f111fc04..df851e861f1 100644 --- a/legacy_promotions/db/migrate/20231027084517_add_order_promotions_foreign_key.rb +++ b/legacy_promotions/db/migrate/20231027084517_add_order_promotions_foreign_key.rb @@ -1,6 +1,6 @@ class AddOrderPromotionsForeignKey < ActiveRecord::Migration[7.0] def up - Spree::OrderPromotion.left_joins(:order).where(spree_orders: { id: nil }).delete_all + Spree::OrderPromotion.left_joins(:order).where(spree_orders: {id: nil}).delete_all unless foreign_key_exists?(:spree_orders_promotions, :spree_orders, column: :order_id) add_foreign_key :spree_orders_promotions, :spree_orders, column: :order_id, validate: false, on_delete: :cascade end diff --git a/legacy_promotions/lib/components/admin/solidus_admin/promotion_categories/index/component.rb b/legacy_promotions/lib/components/admin/solidus_admin/promotion_categories/index/component.rb index e8d0fa6ea81..83b266f1538 100644 --- a/legacy_promotions/lib/components/admin/solidus_admin/promotion_categories/index/component.rb +++ b/legacy_promotions/lib/components/admin/solidus_admin/promotion_categories/index/component.rb @@ -6,7 +6,7 @@ def model_class end def title - t('solidus_admin.promotion_categories.title') + t("solidus_admin.promotion_categories.title") end def edit_path(record) @@ -20,28 +20,28 @@ def turbo_frames def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: solidus_admin.new_promotion_category_path(**search_filter_params), - data: { turbo_frame: :resource_form }, - icon: "add-line", + data: {turbo_frame: :resource_form}, + icon: "add-line" ) end def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.promotion_categories_path(**search_filter_params), method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end def columns [ name_column, - code_column, + code_column ] end @@ -50,8 +50,8 @@ def name_column header: :name, data: ->(record) do link_to record.name, edit_path(record), - data: { turbo_frame: :resource_form }, - class: 'body-link' + data: {turbo_frame: :resource_form}, + class: "body-link" end } end @@ -61,8 +61,8 @@ def code_column header: :code, data: ->(record) do link_to record.code, edit_path(record), - data: { turbo_frame: :resource_form }, - class: 'body-link' + data: {turbo_frame: :resource_form}, + class: "body-link" end } end diff --git a/legacy_promotions/lib/components/admin/solidus_admin/promotions/index/component.rb b/legacy_promotions/lib/components/admin/solidus_admin/promotions/index/component.rb index b6fe1730f7e..5137e347fca 100644 --- a/legacy_promotions/lib/components/admin/solidus_admin/promotions/index/component.rb +++ b/legacy_promotions/lib/components/admin/solidus_admin/promotions/index/component.rb @@ -20,30 +20,30 @@ def row_url(promotion) def page_actions render component("ui/button").new( tag: :a, - text: t('.add'), + text: t(".add"), href: spree.new_admin_promotion_path, - icon: "add-line", + icon: "add-line" ) end def batch_actions [ { - label: t('.batch_actions.delete'), + label: t(".batch_actions.delete"), action: solidus_admin.promotions_path, method: :delete, - icon: 'delete-bin-7-line', - }, + icon: "delete-bin-7-line" + } ] end def scopes [ - { name: :active, label: t('.scopes.active'), default: true }, - { name: :draft, label: t('.scopes.draft') }, - { name: :future, label: t('.scopes.future') }, - { name: :expired, label: t('.scopes.expired') }, - { name: :all, label: t('.scopes.all') }, + {name: :active, label: t(".scopes.active"), default: true}, + {name: :draft, label: t(".scopes.draft")}, + {name: :future, label: t(".scopes.future")}, + {name: :expired, label: t(".scopes.expired")}, + {name: :all, label: t(".scopes.all")} ] end @@ -70,22 +70,22 @@ def columns header: :code, data: ->(promotion) do count = promotion.codes.count - (count == 1) ? promotion.codes.pick(:value) : t('spree.number_of_codes', count:) + (count == 1) ? promotion.codes.pick(:value) : t("spree.number_of_codes", count:) end }, { header: :status, data: ->(promotion) do if promotion.active? - render component('ui/badge').new(name: t('.status.active'), color: :green) + render component("ui/badge").new(name: t(".status.active"), color: :green) else - render component('ui/badge').new(name: t('.status.inactive'), color: :graphite_light) + render component("ui/badge").new(name: t(".status.inactive"), color: :graphite_light) end end }, { header: :usage_limit, - data: ->(promotion) { promotion.usage_limit || icon_tag('infinity-line') } + data: ->(promotion) { promotion.usage_limit || icon_tag("infinity-line") } }, { header: :uses, @@ -93,12 +93,12 @@ def columns }, { header: :starts_at, - data: ->(promotion) { promotion.starts_at ? l(promotion.starts_at, format: :long) : icon_tag('infinity-line') } + data: ->(promotion) { promotion.starts_at ? l(promotion.starts_at, format: :long) : icon_tag("infinity-line") } }, { header: :expires_at, - data: ->(promotion) { promotion.expires_at ? l(promotion.expires_at, format: :long) : icon_tag('infinity-line') } - }, + data: ->(promotion) { promotion.expires_at ? l(promotion.expires_at, format: :long) : icon_tag("infinity-line") } + } ] end end diff --git a/legacy_promotions/lib/components/admin/solidus_legacy_promotions/orders/index/component.rb b/legacy_promotions/lib/components/admin/solidus_legacy_promotions/orders/index/component.rb index 96bebec87fc..be0eb622dac 100644 --- a/legacy_promotions/lib/components/admin/solidus_legacy_promotions/orders/index/component.rb +++ b/legacy_promotions/lib/components/admin/solidus_legacy_promotions/orders/index/component.rb @@ -4,11 +4,11 @@ class SolidusLegacyPromotions::Orders::Index::Component < SolidusAdmin::Orders:: def filters super + [ { - label: t('.filters.promotions'), - combinator: 'or', + label: t(".filters.promotions"), + combinator: "or", attribute: "promotions_id", predicate: "in", - options: Spree::Promotion.all.pluck(:name, :id), + options: Spree::Promotion.all.pluck(:name, :id) } ] end diff --git a/legacy_promotions/lib/controllers/admin/solidus_admin/promotions_controller.rb b/legacy_promotions/lib/controllers/admin/solidus_admin/promotions_controller.rb index 04c83237788..64787d08296 100644 --- a/legacy_promotions/lib/controllers/admin/solidus_admin/promotions_controller.rb +++ b/legacy_promotions/lib/controllers/admin/solidus_admin/promotions_controller.rb @@ -13,13 +13,13 @@ class PromotionsController < SolidusAdmin::BaseController def index promotions = apply_search_to( Spree::Promotion.order(id: :desc), - param: :q, + param: :q ) set_page_and_extract_portion_from(promotions) respond_to do |format| - format.html { render component('promotions/index').new(page: @page) } + format.html { render component("promotions/index").new(page: @page) } end end @@ -28,7 +28,7 @@ def destroy Spree::Promotion.transaction { @promotions.destroy_all } - flash[:notice] = t('.success') + flash[:notice] = t(".success") redirect_back_or_to promotions_path, status: :see_other end diff --git a/legacy_promotions/lib/controllers/backend/spree/admin/promotion_actions_controller.rb b/legacy_promotions/lib/controllers/backend/spree/admin/promotion_actions_controller.rb index 7ba26aecfb9..74b7a2f21cb 100644 --- a/legacy_promotions/lib/controllers/backend/spree/admin/promotion_actions_controller.rb +++ b/legacy_promotions/lib/controllers/backend/spree/admin/promotion_actions_controller.rb @@ -9,22 +9,22 @@ def create @calculators = @promotion_action.available_calculators @promotion_action.promotion = @promotion if @promotion_action.save - flash[:success] = t('spree.successfully_created', resource: t('spree.promotion_action')) + flash[:success] = t("spree.successfully_created", resource: t("spree.promotion_action")) end respond_to do |format| format.html { redirect_to spree.edit_admin_promotion_path(@promotion) } - format.js { render layout: false } + format.js { render layout: false } end end def destroy @promotion_action = @promotion.promotion_actions.find(params[:id]) if @promotion_action.discard - flash[:success] = t('spree.successfully_removed', resource: t('spree.promotion_action')) + flash[:success] = t("spree.successfully_removed", resource: t("spree.promotion_action")) end respond_to do |format| format.html { redirect_to spree.edit_admin_promotion_path(@promotion) } - format.js { render layout: false } + format.js { render layout: false } end end @@ -41,10 +41,10 @@ def validate_promotion_action_type klass.name == requested_type end if !@promotion_action_type - flash[:error] = t('spree.invalid_promotion_action') + flash[:error] = t("spree.invalid_promotion_action") respond_to do |format| format.html { redirect_to spree.edit_admin_promotion_path(@promotion) } - format.js { render layout: false } + format.js { render layout: false } end end end diff --git a/legacy_promotions/lib/controllers/backend/spree/admin/promotion_code_batches_controller.rb b/legacy_promotions/lib/controllers/backend/spree/admin/promotion_code_batches_controller.rb index fd52a797e1e..849de457b58 100644 --- a/legacy_promotions/lib/controllers/backend/spree/admin/promotion_code_batches_controller.rb +++ b/legacy_promotions/lib/controllers/backend/spree/admin/promotion_code_batches_controller.rb @@ -3,7 +3,7 @@ module Spree module Admin class PromotionCodeBatchesController < ResourceController - belongs_to 'spree/promotion' + belongs_to "spree/promotion" create.after :build_promotion_code_batch diff --git a/legacy_promotions/lib/controllers/backend/spree/admin/promotion_codes_controller.rb b/legacy_promotions/lib/controllers/backend/spree/admin/promotion_codes_controller.rb index b426c3e27b6..5f237efa9c3 100644 --- a/legacy_promotions/lib/controllers/backend/spree/admin/promotion_codes_controller.rb +++ b/legacy_promotions/lib/controllers/backend/spree/admin/promotion_codes_controller.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'csv' +require "csv" module Spree module Admin @@ -24,7 +24,7 @@ def index def new @promotion = Spree::Promotion.accessible_by(current_ability, :show).find(params[:promotion_id]) if @promotion.apply_automatically - flash[:error] = t('activerecord.errors.models.spree/promotion_code.attributes.base.disallowed_with_apply_automatically') + flash[:error] = t("activerecord.errors.models.spree/promotion_code.attributes.base.disallowed_with_apply_automatically") redirect_to admin_promotion_promotion_codes_url(@promotion) else @promotion_code = @promotion.promotion_codes.build diff --git a/legacy_promotions/lib/controllers/backend/spree/admin/promotion_rules_controller.rb b/legacy_promotions/lib/controllers/backend/spree/admin/promotion_rules_controller.rb index f5b765498bd..3e7ce1a8528 100644 --- a/legacy_promotions/lib/controllers/backend/spree/admin/promotion_rules_controller.rb +++ b/legacy_promotions/lib/controllers/backend/spree/admin/promotion_rules_controller.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class Spree::Admin::PromotionRulesController < Spree::Admin::BaseController - helper 'spree/promotion_rules' + helper "spree/promotion_rules" before_action :load_promotion, only: [:create, :destroy] before_action :validate_promotion_rule_type, only: :create @@ -10,22 +10,22 @@ def create @promotion_rule = @promotion_rule_type.new(promotion_rule_params) @promotion_rule.promotion = @promotion if @promotion_rule.save - flash[:success] = t('spree.successfully_created', resource: t('spree.promotion_rule')) + flash[:success] = t("spree.successfully_created", resource: t("spree.promotion_rule")) end respond_to do |format| format.html { redirect_to spree.edit_admin_promotion_path(@promotion) } - format.js { render layout: false } + format.js { render layout: false } end end def destroy @promotion_rule = @promotion.promotion_rules.find(params[:id]) if @promotion_rule.destroy - flash[:success] = t('spree.successfully_removed', resource: t('spree.promotion_rule')) + flash[:success] = t("spree.successfully_removed", resource: t("spree.promotion_rule")) end respond_to do |format| format.html { redirect_to spree.edit_admin_promotion_path(@promotion) } - format.js { render layout: false } + format.js { render layout: false } end end @@ -46,10 +46,10 @@ def validate_promotion_rule_type klass.name == requested_type end if !@promotion_rule_type - flash[:error] = t('spree.invalid_promotion_rule') + flash[:error] = t("spree.invalid_promotion_rule") respond_to do |format| format.html { redirect_to spree.edit_admin_promotion_path(@promotion) } - format.js { render layout: false } + format.js { render layout: false } end end end diff --git a/legacy_promotions/lib/controllers/backend/spree/admin/promotions_controller.rb b/legacy_promotions/lib/controllers/backend/spree/admin/promotions_controller.rb index d56fbb6cb49..78a04e78869 100644 --- a/legacy_promotions/lib/controllers/backend/spree/admin/promotions_controller.rb +++ b/legacy_promotions/lib/controllers/backend/spree/admin/promotions_controller.rb @@ -5,7 +5,7 @@ module Admin class PromotionsController < ResourceController before_action :load_data - helper 'spree/promotion_rules' + helper "spree/promotion_rules" def show redirect_to action: :edit @@ -20,12 +20,12 @@ def create end if @promotion.save - @promotion_code_batch.process if @promotion_code_batch - flash[:success] = t('spree.promotion_successfully_created') + @promotion_code_batch&.process + flash[:success] = t("spree.promotion_successfully_created") redirect_to location_after_save else flash[:error] = @promotion.errors.full_messages.to_sentence - render action: 'new' + render action: "new" end end @@ -41,15 +41,16 @@ def load_data def collection return @collection if @collection + params[:q] ||= HashWithIndifferentAccess.new - params[:q][:s] ||= 'id desc' + params[:q][:s] ||= "id desc" @collection = super @search = @collection.ransack(params[:q]) - @collection = @search.result(distinct: true). - includes(promotion_includes). - page(params[:page]). - per(params[:per_page] || Spree::Config.promotions.promotions_per_page) + @collection = @search.result(distinct: true) + .includes(promotion_includes) + .page(params[:page]) + .per(params[:per_page] || Spree::Config.promotions.promotions_per_page) @collection end diff --git a/legacy_promotions/lib/solidus_legacy_promotions.rb b/legacy_promotions/lib/solidus_legacy_promotions.rb index d6851e61ac6..2a5451e2422 100644 --- a/legacy_promotions/lib/solidus_legacy_promotions.rb +++ b/legacy_promotions/lib/solidus_legacy_promotions.rb @@ -9,7 +9,7 @@ # if either of them are not present. If they are present, # however, they need to load before us. begin - require 'solidus_admin' + require "solidus_admin" rescue LoadError # Solidus Admin is not available end diff --git a/legacy_promotions/lib/solidus_legacy_promotions/configuration.rb b/legacy_promotions/lib/solidus_legacy_promotions/configuration.rb index dafba26b1fc..5ff62afb1bd 100644 --- a/legacy_promotions/lib/solidus_legacy_promotions/configuration.rb +++ b/legacy_promotions/lib/solidus_legacy_promotions/configuration.rb @@ -23,13 +23,13 @@ class Configuration < Spree::Preferences::Configuration ] # promotion_chooser_class allows extensions to provide their own PromotionChooser - class_name_attribute :promotion_chooser_class, default: 'Spree::PromotionChooser' + class_name_attribute :promotion_chooser_class, default: "Spree::PromotionChooser" # order_adjuster_class allows extensions to provide their own Order Adjuster - class_name_attribute :order_adjuster_class, default: 'Spree::Promotion::OrderAdjustmentsRecalculator' + class_name_attribute :order_adjuster_class, default: "Spree::Promotion::OrderAdjustmentsRecalculator" # promotion_finder_class allows extensions to provide their own Promotion Finder - class_name_attribute :promotion_finder_class, default: 'Spree::PromotionFinder' + class_name_attribute :promotion_finder_class, default: "Spree::PromotionFinder" # Allows providing a different shipping promotion handler. # @!attribute [rw] shipping_promotion_handler_class @@ -37,7 +37,7 @@ class Configuration < Spree::Preferences::Configuration # @return [Class] an object that conforms to the API of # the standard shipping promotion handler class # Spree::PromotionHandler::Coupon. - class_name_attribute :shipping_promotion_handler_class, default: 'Spree::PromotionHandler::Shipping' + class_name_attribute :shipping_promotion_handler_class, default: "Spree::PromotionHandler::Shipping" # Allows providing your own Mailer for promotion code batch mailer. # @@ -46,7 +46,7 @@ class Configuration < Spree::Preferences::Configuration # and "promotion_code_batch_errored" # (e.g. an ActionMailer with a "promotion_code_batch_finished" method) with the same # signature as Spree::PromotionCodeBatchMailer.promotion_code_batch_finished. - class_name_attribute :promotion_code_batch_mailer_class, default: 'Spree::PromotionCodeBatchMailer' + class_name_attribute :promotion_code_batch_mailer_class, default: "Spree::PromotionCodeBatchMailer" # Allows providing a different coupon code handler. # @!attribute [rw] coupon_code_handler_class @@ -54,7 +54,7 @@ class Configuration < Spree::Preferences::Configuration # @return [Class] an object that conforms to the API of # the standard coupon code handler class # Spree::PromotionHandler::Coupon. - class_name_attribute :coupon_code_handler_class, default: 'Spree::PromotionHandler::Coupon' + class_name_attribute :coupon_code_handler_class, default: "Spree::PromotionHandler::Coupon" # Allows providing a different promotion advertiser. # @!attribute [rw] advertiser_class @@ -62,7 +62,7 @@ class Configuration < Spree::Preferences::Configuration # @return [Class] an object that conforms to the API of # the standard promotion advertiser class # Spree::PromotionAdvertiser. - class_name_attribute :advertiser_class, default: 'Spree::PromotionAdvertiser' + class_name_attribute :advertiser_class, default: "Spree::PromotionAdvertiser" add_class_set :rules, default: %w[ Spree::Promotion::Rules::ItemTotal diff --git a/legacy_promotions/lib/solidus_legacy_promotions/engine.rb b/legacy_promotions/lib/solidus_legacy_promotions/engine.rb index 2fae52907ec..cd714963854 100644 --- a/legacy_promotions/lib/solidus_legacy_promotions/engine.rb +++ b/legacy_promotions/lib/solidus_legacy_promotions/engine.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'solidus_legacy_promotions' -require 'flickwerk' +require "solidus_legacy_promotions" +require "flickwerk" module SolidusLegacyPromotions class Engine < ::Rails::Engine include SolidusSupport::EngineExtensions @@ -26,7 +26,7 @@ class Engine < ::Rails::Engine Spree::BackendConfiguration::MenuItem.new( label: :legacy_promotion_categories, condition: -> { can?(:admin, Spree::PromotionCategory) }, - url: -> { Spree::Core::Engine.routes.url_helpers.admin_promotion_categories_path }, + url: -> { Spree::Core::Engine.routes.url_helpers.admin_promotion_categories_path } ) ] ) @@ -81,7 +81,7 @@ class Engine < ::Rails::Engine end end - initializer 'solidus_legacy_promotions.core.pub_sub', after: 'spree.core.pub_sub' do |app| + initializer "solidus_legacy_promotions.core.pub_sub", after: "spree.core.pub_sub" do |app| app.reloader.to_prepare do Spree::OrderPromotionSubscriber.new.subscribe_to(Spree::Bus) end diff --git a/legacy_promotions/lib/solidus_legacy_promotions/migrations/promotions_with_code_handlers.rb b/legacy_promotions/lib/solidus_legacy_promotions/migrations/promotions_with_code_handlers.rb index ea8d492a46b..862f0f8fa92 100644 --- a/legacy_promotions/lib/solidus_legacy_promotions/migrations/promotions_with_code_handlers.rb +++ b/legacy_promotions/lib/solidus_legacy_promotions/migrations/promotions_with_code_handlers.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spree/core' +require "spree/core" module SolidusLegacyPromotions module Migrations @@ -23,11 +23,11 @@ def call # Please note that this will block the current migration and rollback all # the previous ones run with the same "rails db:migrate" command. # - raise StandardError, "You are trying to drop 'code' column from "\ - "spree_promotions table but you have at least one record with that "\ + raise StandardError, "You are trying to drop 'code' column from " \ + "spree_promotions table but you have at least one record with that " \ "column filled. Please take care of that or you could lose data. See:" \ "\n" \ - "https://github.com/solidusio/solidus/pull/3028"\ + "https://github.com/solidusio/solidus/pull/3028" \ "\n" end end @@ -45,7 +45,7 @@ def call value: normalized_code, promotion_id: promotion.id ) do - migration_context.say "Creating Spree::PromotionCode with value "\ + migration_context.say "Creating Spree::PromotionCode with value " \ "'#{normalized_code}' for Spree::Promotion with id '#{promotion.id}'" end end @@ -58,7 +58,7 @@ def call # least we could print a message to track what we are deleting. # promotions.find_each do |promotion| - migration_context.say "Code '#{promotion.code}' is going to be removed "\ + migration_context.say "Code '#{promotion.code}' is going to be removed " \ "from Spree::Promotion with id '#{promotion.id}'" end end diff --git a/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/calculator_factory.rb b/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/calculator_factory.rb index 02ab9920e46..07033962a71 100644 --- a/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/calculator_factory.rb +++ b/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/calculator_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :percent_on_item_calculator, class: 'Spree::Calculator::PercentOnLineItem' do + factory :percent_on_item_calculator, class: "Spree::Calculator::PercentOnLineItem" do preferred_percent { 10 } end end diff --git a/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/order_promotion_factory.rb b/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/order_promotion_factory.rb index 8df4e0a318f..2970c64e54b 100644 --- a/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/order_promotion_factory.rb +++ b/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/order_promotion_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :order_promotion, class: 'Spree::OrderPromotion' do + factory :order_promotion, class: "Spree::OrderPromotion" do association :order association :promotion end diff --git a/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/promotion_category_factory.rb b/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/promotion_category_factory.rb index 98c27c847f7..f60ed12522c 100644 --- a/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/promotion_category_factory.rb +++ b/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/promotion_category_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :promotion_category, class: 'Spree::PromotionCategory' do - name { 'Promotion Category' } + factory :promotion_category, class: "Spree::PromotionCategory" do + name { "Promotion Category" } end end diff --git a/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/promotion_code_factory.rb b/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/promotion_code_factory.rb index e2063262208..33f57d0cf5d 100644 --- a/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/promotion_code_factory.rb +++ b/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/promotion_code_factory.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true FactoryBot.define do - factory :promotion_code, class: 'Spree::PromotionCode' do + factory :promotion_code, class: "Spree::PromotionCode" do promotion sequence(:value) { |i| "code#{i}" } end diff --git a/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/promotion_factory.rb b/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/promotion_factory.rb index be19b44a73c..69208419764 100644 --- a/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/promotion_factory.rb +++ b/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factories/promotion_factory.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true FactoryBot.define do - factory :promotion, class: 'Spree::Promotion' do - name { 'Promo' } + factory :promotion, class: "Spree::Promotion" do + name { "Promo" } transient do code { nil } @@ -76,7 +76,7 @@ after(:create) do |promotion, evaluator| rule = Spree::Promotion::Rules::ItemTotal.create!( promotion:, - preferred_operator: 'gte', + preferred_operator: "gte", preferred_amount: evaluator.item_total_threshold_amount ) promotion.rules << rule @@ -87,7 +87,7 @@ trait :with_first_order_rule do after(:create) do |promotion, _evaluator| rule = Spree::Promotion::Rules::FirstOrder.create!( - promotion:, + promotion: ) promotion.rules << rule promotion.save! diff --git a/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factory_bot.rb b/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factory_bot.rb index 80386e46828..de3e74c9f23 100644 --- a/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factory_bot.rb +++ b/legacy_promotions/lib/solidus_legacy_promotions/testing_support/factory_bot.rb @@ -12,7 +12,7 @@ module FactoryBot FACTORIES = Dir["#{::SolidusLegacyPromotions::Engine.root}/lib/solidus_legacy_promotions/testing_support/factories/**/*_factory.rb"].sort def self.definition_file_paths - @paths ||= FACTORIES.map { |path| path.sub(/.rb\z/, '') } + @paths ||= FACTORIES.map { |path| path.sub(/.rb\z/, "") } end def self.add_definitions! diff --git a/legacy_promotions/lib/views/backend/spree/admin/promotion_code_batches/download.csv.ruby b/legacy_promotions/lib/views/backend/spree/admin/promotion_code_batches/download.csv.ruby index 868419dc02e..7b3e70ef68e 100644 --- a/legacy_promotions/lib/views/backend/spree/admin/promotion_code_batches/download.csv.ruby +++ b/legacy_promotions/lib/views/backend/spree/admin/promotion_code_batches/download.csv.ruby @@ -1,7 +1,7 @@ # frozen_string_literal: true CSV.generate do |csv| - csv << ['Code'] + csv << ["Code"] @promotion_code_batch.promotion_codes.order(:id).pluck(:value).each do |value| csv << [value] end diff --git a/legacy_promotions/lib/views/backend/spree/admin/promotion_codes/index.csv.ruby b/legacy_promotions/lib/views/backend/spree/admin/promotion_codes/index.csv.ruby index 9299279b0e0..288b953b196 100644 --- a/legacy_promotions/lib/views/backend/spree/admin/promotion_codes/index.csv.ruby +++ b/legacy_promotions/lib/views/backend/spree/admin/promotion_codes/index.csv.ruby @@ -1,7 +1,7 @@ # frozen_string_literal: true CSV.generate do |csv| - csv << ['Code'] + csv << ["Code"] @promotion_codes.order(:id).pluck(:value).each do |value| csv << [value] end diff --git a/legacy_promotions/solidus_legacy_promotions.gemspec b/legacy_promotions/solidus_legacy_promotions.gemspec index 7897ac1e6d0..4f7f2f3eba8 100644 --- a/legacy_promotions/solidus_legacy_promotions.gemspec +++ b/legacy_promotions/solidus_legacy_promotions.gemspec @@ -1,30 +1,30 @@ # frozen_string_literal: true -require_relative '../core/lib/spree/core/version' +require_relative "../core/lib/spree/core/version" Gem::Specification.new do |s| - s.platform = Gem::Platform::RUBY - s.name = 'solidus_legacy_promotions' - s.version = Spree.solidus_version - s.summary = 'Legacy Solidus promotion system' + s.platform = Gem::Platform::RUBY + s.name = "solidus_legacy_promotions" + s.version = Spree.solidus_version + s.summary = "Legacy Solidus promotion system" s.description = s.summary - s.author = 'Solidus Team' - s.email = 'contact@solidus.io' - s.homepage = 'http://solidus.io' - s.license = 'BSD-3-Clause' + s.author = "Solidus Team" + s.email = "contact@solidus.io" + s.homepage = "http://solidus.io" + s.license = "BSD-3-Clause" - s.metadata['rubygems_mfa_required'] = 'true' + s.metadata["rubygems_mfa_required"] = "true" s.files = `git ls-files -z`.split("\x0").reject do |f| f.match(%r{^(spec|bin)/}) end - s.required_ruby_version = '>= 3.1.0' - s.required_rubygems_version = '>= 1.8.23' + s.required_ruby_version = ">= 3.1.0" + s.required_rubygems_version = ">= 1.8.23" - s.add_dependency 'csv', '~> 3.0' - s.add_dependency 'solidus_api', s.version - s.add_dependency 'solidus_core', s.version - s.add_dependency 'solidus_support', '>= 0.13.1', '< 1' + s.add_dependency "csv", "~> 3.0" + s.add_dependency "solidus_api", s.version + s.add_dependency "solidus_core", s.version + s.add_dependency "solidus_support", ">= 0.13.1", "< 1" end diff --git a/legacy_promotions/spec/controllers/spree/admin/promotion_actions_controller_spec.rb b/legacy_promotions/spec/controllers/spree/admin/promotion_actions_controller_spec.rb index ec6d8bace74..fe25a1c2625 100644 --- a/legacy_promotions/spec/controllers/spree/admin/promotion_actions_controller_spec.rb +++ b/legacy_promotions/spec/controllers/spree/admin/promotion_actions_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Admin::PromotionActionsController, type: :controller do stub_authorization! @@ -8,14 +8,14 @@ let!(:promotion) { create(:promotion) } it "can create a promotion action of a valid type" do - post :create, params: { promotion_id: promotion.id, action_type: "Spree::Promotion::Actions::CreateAdjustment" } + post :create, params: {promotion_id: promotion.id, action_type: "Spree::Promotion::Actions::CreateAdjustment"} expect(response).to be_redirect expect(response).to redirect_to spree.edit_admin_promotion_path(promotion) expect(promotion.actions.count).to eq(1) end it "can not create a promotion action of an invalid type" do - post :create, params: { promotion_id: promotion.id, action_type: "Spree::InvalidType" } + post :create, params: {promotion_id: promotion.id, action_type: "Spree::InvalidType"} expect(response).to be_redirect expect(response).to redirect_to spree.edit_admin_promotion_path(promotion) expect(promotion.rules.count).to eq(0) diff --git a/legacy_promotions/spec/controllers/spree/admin/promotion_codes_controller_spec.rb b/legacy_promotions/spec/controllers/spree/admin/promotion_codes_controller_spec.rb index ff724a07b32..e212065899e 100644 --- a/legacy_promotions/spec/controllers/spree/admin/promotion_codes_controller_spec.rb +++ b/legacy_promotions/spec/controllers/spree/admin/promotion_codes_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Admin::PromotionCodesController do stub_authorization! @@ -12,27 +12,27 @@ let!(:code3) { create(:promotion_code, promotion:) } it "can create a CSV file with all promotion codes" do - get :index, params: { promotion_id: promotion.id, format: 'csv' } + get :index, params: {promotion_id: promotion.id, format: "csv"} expect(response).to be_successful parsed = CSV.parse(response.body, headers: true) - expect(parsed.entries.map(&:to_h)).to contain_exactly({ "Code" => code1.value }, { "Code" => code2.value }, { "Code" => code3.value }) + expect(parsed.entries.map(&:to_h)).to contain_exactly({"Code" => code1.value}, {"Code" => code2.value}, {"Code" => code3.value}) end it "can create a new code" do - post :create, params: { promotion_id: promotion.id, promotion_code: { value: "new_code" } } + post :create, params: {promotion_id: promotion.id, promotion_code: {value: "new_code"}} expect(response).to redirect_to(spree.admin_promotion_promotion_codes_path(promotion)) expect(Spree::PromotionCode.where(promotion:).count).to eql(4) end it "cannot create an existing code" do - post :create, params: { promotion_id: promotion.id, promotion_code: { value: code1.value } } + post :create, params: {promotion_id: promotion.id, promotion_code: {value: code1.value}} expect(flash[:error]).not_to be_nil expect(Spree::PromotionCode.where(promotion:).count).to eql(3) end it "can't create a new code on promotions that apply automatically" do apply_automatically_promotion = create(:promotion, apply_automatically: true) - get :new, params: { promotion_id: apply_automatically_promotion.id } + get :new, params: {promotion_id: apply_automatically_promotion.id} expect(response).to redirect_to(spree.admin_promotion_promotion_codes_path(apply_automatically_promotion)) expect(flash[:error]).not_to be_nil end diff --git a/legacy_promotions/spec/controllers/spree/admin/promotion_rules_controller_spec.rb b/legacy_promotions/spec/controllers/spree/admin/promotion_rules_controller_spec.rb index 21c01555d03..15d33747790 100644 --- a/legacy_promotions/spec/controllers/spree/admin/promotion_rules_controller_spec.rb +++ b/legacy_promotions/spec/controllers/spree/admin/promotion_rules_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Admin::PromotionRulesController, type: :controller do let!(:promotion) { create(:promotion) } @@ -11,14 +11,14 @@ end it "can create a promotion rule of a valid type" do - post :create, params: { promotion_id: promotion.id, promotion_rule: { type: "Spree::Promotion::Rules::Product" } } + post :create, params: {promotion_id: promotion.id, promotion_rule: {type: "Spree::Promotion::Rules::Product"}} expect(response).to be_redirect expect(response).to redirect_to spree.edit_admin_promotion_path(promotion) expect(promotion.rules.count).to eq(1) end it "can not create a promotion rule of an invalid type" do - post :create, params: { promotion_id: promotion.id, promotion_rule: { type: "Spree::InvalidType" } } + post :create, params: {promotion_id: promotion.id, promotion_rule: {type: "Spree::InvalidType"}} expect(response).to be_redirect expect(response).to redirect_to spree.edit_admin_promotion_path(promotion) expect(promotion.rules.count).to eq(0) @@ -27,10 +27,10 @@ context "when the user is not authorized" do it "sets an error message and redirects the user" do - post :create, params: { promotion_id: promotion.id, promotion_rule: { type: "Spree::Promotion::Rules::Product" } } + post :create, params: {promotion_id: promotion.id, promotion_rule: {type: "Spree::Promotion::Rules::Product"}} expect(flash[:error]).to eq("Authorization Failure") - expect(response).to redirect_to('/unauthorized') + expect(response).to redirect_to("/unauthorized") end end end diff --git a/legacy_promotions/spec/controllers/spree/admin/promotions_controller_spec.rb b/legacy_promotions/spec/controllers/spree/admin/promotions_controller_spec.rb index 62eeb56b5d2..4425ebe3df9 100644 --- a/legacy_promotions/spec/controllers/spree/admin/promotions_controller_spec.rb +++ b/legacy_promotions/spec/controllers/spree/admin/promotions_controller_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Admin::PromotionsController, type: :controller do stub_authorization! @@ -14,8 +14,8 @@ describe "#show" do it "redirects to edit" do - expect(get(:show, params: { id: promotion1.id })) - .to redirect_to(action: :edit, id: promotion1.id ) + expect(get(:show, params: {id: promotion1.id})) + .to redirect_to(action: :edit, id: promotion1.id) end end @@ -32,27 +32,27 @@ context "search" do it "pages results" do - get :index, params: { per_page: '1' } + get :index, params: {per_page: "1"} expect(assigns[:promotions]).to eq [promotion3] end it "filters by name" do - get :index, params: { q: { name_cont: promotion1.name } } + get :index, params: {q: {name_cont: promotion1.name}} expect(assigns[:promotions]).to eq [promotion1] end it "filters by code" do - get :index, params: { q: { codes_value_cont: promotion1.codes.first.value } } + get :index, params: {q: {codes_value_cont: promotion1.codes.first.value}} expect(assigns[:promotions]).to eq [promotion1] end it "filters by path" do - get :index, params: { q: { path_cont: promotion1.path } } + get :index, params: {q: {path_cont: promotion1.path}} expect(assigns[:promotions]).to eq [promotion1] end it "filters by active" do - get :index, params: { q: { active: true } } + get :index, params: {q: {active: true}} expect(assigns[:promotions]).to match_array [promotion2, promotion1] end end @@ -60,7 +60,7 @@ describe "#create" do subject { post :create, params: } - let(:params) { { promotion: { name: 'some promo' } } } + let(:params) { {promotion: {name: "some promo"}} } context "it succeeds" do context "with no single code param" do @@ -84,7 +84,7 @@ end context "with a single code" do - let(:params) { { promotion: { name: 'some promo' }, single_code: "promo" } } + let(:params) { {promotion: {name: "some promo"}, single_code: "promo"} } it "creates a promotion" do expect { subject }.to change { Spree::Promotion.count }.by(1) diff --git a/legacy_promotions/spec/features/api/checkout_spec.rb b/legacy_promotions/spec/features/api/checkout_spec.rb index 54540716a34..ea78a5f6986 100644 --- a/legacy_promotions/spec/features/api/checkout_spec.rb +++ b/legacy_promotions/spec/features/api/checkout_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree - RSpec.describe 'Api Feature Specs', type: :request do + RSpec.describe "Api Feature Specs", type: :request do before do stub_spree_preferences(Spree::Api::Config, requires_authentication: false) end - let!(:promotion) { FactoryBot.create(:promotion, :with_order_adjustment, code: 'foo', weighted_order_adjustment_amount: 10) } + let!(:promotion) { FactoryBot.create(:promotion, :with_order_adjustment, code: "foo", weighted_order_adjustment_amount: 10) } let(:promotion_code) { promotion.codes.first } let!(:store) { FactoryBot.create(:store) } let(:bill_address) { FactoryBot.create(:address) } @@ -28,7 +28,7 @@ def parsed def login expect { - post '/api/users', params: { + post "/api/users", params: { user: { email: "featurecheckoutuser@example.com", password: "featurecheckoutuser" @@ -36,16 +36,16 @@ def login } }.to change { Spree.user_class.count }.by 1 expect(response).to have_http_status(:created) - @user = Spree.user_class.find(parsed['id']) + @user = Spree.user_class.find(parsed["id"]) # copied from api testing helpers support since we can't really sign in allow(Spree::LegacyUser).to receive(:find_by).with(hash_including(:spree_api_key)) { @user } end def create_order(order_params: {}) - expect { post '/api/orders', params: order_params }.to change { Order.count }.by 1 + expect { post "/api/orders", params: order_params }.to change { Order.count }.by 1 expect(response).to have_http_status(:created) - @order = Order.find(parsed['id']) + @order = Order.find(parsed["id"]) expect(@order.email).to eq "featurecheckoutuser@example.com" end @@ -57,7 +57,7 @@ def update_order(order_params: {}) def create_line_item(variant, quantity = 1) expect { post "/api/orders/#{@order.number}/line_items", - params: { line_item: { variant_id: variant.id, quantity: } } + params: {line_item: {variant_id: variant.id, quantity:}} }.to change { @order.line_items.count }.by 1 expect(response).to have_http_status(:created) end @@ -65,7 +65,7 @@ def create_line_item(variant, quantity = 1) def add_promotion(_promotion) expect { post "/api/orders/#{@order.number}/coupon_codes", - params: { coupon_code: promotion_code.value } + params: {coupon_code: promotion_code.value} }.to change { @order.promotions.count }.by 1 expect(response).to have_http_status(:ok) end @@ -75,14 +75,14 @@ def add_address(address, billing: true) # It seems we are missing an order-scoped address api endpoint since we need # to use update here. expect { - update_order(order_params: { order: { address_type => address.as_json.except('id') } }) + update_order(order_params: {order: {address_type => address.as_json.except("id")}}) }.to change { @order.reload.public_send(address_type) }.to address end def add_payment expect { post "/api/orders/#{@order.number}/payments", - params: { payment: { payment_method_id: payment_method.id } } + params: {payment: {payment_method_id: payment_method.id}} }.to change { @order.reload.payments.count }.by 1 expect(response).to have_http_status(:created) expect(@order.payments.last.payment_method).to eq payment_method @@ -100,7 +100,7 @@ def complete def assert_order_expectations @order.reload - expect(@order.state).to eq 'complete' + expect(@order.state).to eq "complete" expect(@order.completed_at).to be_a ActiveSupport::TimeWithZone expect(@order.item_total).to eq 600.00 expect(@order.total).to eq 600.00 @@ -139,12 +139,12 @@ def assert_order_expectations create_order(order_params: { order: { - bill_address: bill_address.as_json.except('id'), - ship_address: ship_address.as_json.except('id'), + bill_address: bill_address.as_json.except("id"), + ship_address: ship_address.as_json.except("id"), line_items: { - 0 => { variant_id: variant_1.id, quantity: 2 }, - 1 => { variant_id: variant_2.id, quantity: 2 } - }, + 0 => {variant_id: variant_1.id, quantity: 2}, + 1 => {variant_id: variant_2.id, quantity: 2} + } # Would like to do this, but it puts the payment in a complete state, # which the order does not like when transitioning from confirm to complete # since it looks to process pending payments. @@ -167,12 +167,12 @@ def assert_order_expectations create_order update_order(order_params: { order: { - bill_address: bill_address.as_json.except('id'), - ship_address: ship_address.as_json.except('id'), + bill_address: bill_address.as_json.except("id"), + ship_address: ship_address.as_json.except("id"), line_items: { - 0 => { variant_id: variant_1.id, quantity: 2 }, - 1 => { variant_id: variant_2.id, quantity: 2 } - }, + 0 => {variant_id: variant_1.id, quantity: 2}, + 1 => {variant_id: variant_2.id, quantity: 2} + } # Would like to do this, but it puts the payment in a complete state, # which the order does not like when transitioning from confirm to complete # since it looks to process pending payments. diff --git a/legacy_promotions/spec/features/backend/main_menu_spec.rb b/legacy_promotions/spec/features/backend/main_menu_spec.rb index 3d69073d01d..e9ee5a2b06a 100644 --- a/legacy_promotions/spec/features/backend/main_menu_spec.rb +++ b/legacy_promotions/spec/features/backend/main_menu_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe "Main Menu", type: :feature do - context 'as admin user' do + context "as admin user" do stub_authorization! context "visiting the homepage" do @@ -22,16 +22,16 @@ end it "should have a link to promotions" do - within('.selected .admin-subnav') { expect(page).to have_link("Promotions", href: "/admin/promotions") } + within(".selected .admin-subnav") { expect(page).to have_link("Promotions", href: "/admin/promotions") } end it "should have a link to promotion categories" do - within('.selected .admin-subnav') { expect(page).to have_link("Promotion Categories", href: "/admin/promotion_categories") } + within(".selected .admin-subnav") { expect(page).to have_link("Promotion Categories", href: "/admin/promotion_categories") } end end end - context 'as fakedispatch user' do + context "as fakedispatch user" do before do allow_any_instance_of(Spree::Admin::BaseController).to receive(:spree_current_user).and_return(nil) end @@ -43,14 +43,14 @@ can [:admin], Spree::Zone end - it 'should only display tabs fakedispatch has access to' do + it "should only display tabs fakedispatch has access to" do visit spree.admin_path - expect(page).to have_link('Orders') - expect(page).not_to have_link('Products') - expect(page).not_to have_link('Promotions') - expect(page).to have_link('Settings') - expect(page).not_to have_link('Stock Locations', visible: false) - expect(page).to have_link('Zones', visible: false) + expect(page).to have_link("Orders") + expect(page).not_to have_link("Products") + expect(page).not_to have_link("Promotions") + expect(page).to have_link("Settings") + expect(page).not_to have_link("Stock Locations", visible: false) + expect(page).to have_link("Zones", visible: false) end end end diff --git a/legacy_promotions/spec/features/backend/orders/adjustments_spec.rb b/legacy_promotions/spec/features/backend/orders/adjustments_spec.rb index 8c9432f913f..caeef34a02a 100644 --- a/legacy_promotions/spec/features/backend/orders/adjustments_spec.rb +++ b/legacy_promotions/spec/features/backend/orders/adjustments_spec.rb @@ -13,7 +13,7 @@ let!(:order) do create( :completed_order_with_totals, - line_items_attributes: [{ price: 10, variant: }] * 5, + line_items_attributes: [{price: 10, variant:}] * 5, ship_address: ) end diff --git a/legacy_promotions/spec/features/backend/orders/listing_spec.rb b/legacy_promotions/spec/features/backend/orders/listing_spec.rb index 9106242f1d3..fb1e0f180cb 100644 --- a/legacy_promotions/spec/features/backend/orders/listing_spec.rb +++ b/legacy_promotions/spec/features/backend/orders/listing_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe "Orders Listing", type: :feature, js: true do stub_authorization! @@ -29,7 +29,7 @@ it "only shows the orders with the selected promotion" do click_on "Filter Results" fill_in "q_order_promotions_promotion_code_value_start", with: promotion.codes.first.value - click_on 'Filter Results' + click_on "Filter Results" within_row(1) { expect(page).to have_content("R100") } within("table#listing_orders") { expect(page).not_to have_content("R200") } end diff --git a/legacy_promotions/spec/features/backend/promotion_adjustments_spec.rb b/legacy_promotions/spec/features/backend/promotion_adjustments_spec.rb index a22b947249d..e14b1a56ef5 100644 --- a/legacy_promotions/spec/features/backend/promotion_adjustments_spec.rb +++ b/legacy_promotions/spec/features/backend/promotion_adjustments_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe "Promotion Adjustments", type: :feature, js: true do stub_authorization! @@ -19,19 +19,19 @@ expect(page).to have_title("SAVE SAVE SAVE - Promotions") select "Item Total", from: "Discount Rules" - within('#rule_fields') { click_button "Add" } + within("#rule_fields") { click_button "Add" } - find('[id$=_preferred_amount]').set(30) - within('#rule_fields') { click_button "Update" } + find("[id$=_preferred_amount]").set(30) + within("#rule_fields") { click_button "Update" } select "Create whole-order adjustment", from: "Adjustment type" - within('#action_fields') do + within("#action_fields") do click_button "Add" - select "Flat Rate", from: I18n.t('spree.admin.promotions.actions.calculator_label') + select "Flat Rate", from: I18n.t("spree.admin.promotions.actions.calculator_label") fill_in "Amount", with: 5 end - within('#actions_container') { click_button "Update" } - expect(page).to have_text 'successfully updated' + within("#actions_container") { click_button "Update" } + expect(page).to have_text "successfully updated" promotion = Spree::Promotion.find_by(name: "SAVE SAVE SAVE") expect(promotion.codes.first.value).to eq("order") @@ -56,13 +56,13 @@ expect(page).to have_title("SAVE SAVE SAVE - Promotions") select "Create whole-order adjustment", from: "Adjustment type" - within('#action_fields') do + within("#action_fields") do click_button "Add" - select "Flat Rate", from: I18n.t('spree.admin.promotions.actions.calculator_label') + select "Flat Rate", from: I18n.t("spree.admin.promotions.actions.calculator_label") fill_in "Amount", with: "5" end - within('#actions_container') { click_button "Update" } - expect(page).to have_text 'successfully updated' + within("#actions_container") { click_button "Update" } + expect(page).to have_text "successfully updated" promotion = Spree::Promotion.find_by(name: "SAVE SAVE SAVE") expect(promotion.usage_limit).to eq(1) @@ -82,19 +82,19 @@ expect(page).to have_title("SAVE SAVE SAVE - Promotions") select "Item Total", from: "Discount Rules" - within('#rule_fields') { click_button "Add" } + within("#rule_fields") { click_button "Add" } - find('[id$=_preferred_amount]').set(30) - within('#rule_fields') { click_button "Update" } + find("[id$=_preferred_amount]").set(30) + within("#rule_fields") { click_button "Update" } select "Create whole-order adjustment", from: "Adjustment type" - within('#action_fields') do + within("#action_fields") do click_button "Add" - select "Flat Percent", from: I18n.t('spree.admin.promotions.actions.calculator_label') + select "Flat Percent", from: I18n.t("spree.admin.promotions.actions.calculator_label") fill_in "Flat Percent", with: "10" end - within('#actions_container') { click_button "Update" } - expect(page).to have_text 'successfully updated' + within("#actions_container") { click_button "Update" } + expect(page).to have_text "successfully updated" promotion = Spree::Promotion.find_by(name: "SAVE SAVE SAVE") expect(promotion.codes.first).to be_nil @@ -121,16 +121,16 @@ select "Product(s)", from: "Discount Rules" within("#rule_fields") { click_button "Add" } select2_search "RoR Mug", from: "Choose products" - within('#rule_fields') { click_button "Update" } + within("#rule_fields") { click_button "Update" } select "Create per-line-item adjustment", from: "Adjustment type" - within('#action_fields') do + within("#action_fields") do click_button "Add" - select "Percent Per Item", from: I18n.t('spree.admin.promotions.actions.calculator_label') + select "Percent Per Item", from: I18n.t("spree.admin.promotions.actions.calculator_label") fill_in "Percent", with: "10" end - within('#actions_container') { click_button "Update" } - expect(page).to have_text 'successfully updated' + within("#actions_container") { click_button "Update" } + expect(page).to have_text "successfully updated" promotion = Spree::Promotion.find_by(name: "SAVE SAVE SAVE") expect(promotion.codes.first).to be_nil @@ -153,13 +153,13 @@ expect(page).to have_title("SAVE SAVE SAVE - Promotions") select "Item Total", from: "Discount Rules" - within('#rule_fields') { click_button "Add" } - find('[id$=_preferred_amount]').set(30) - within('#rule_fields') { click_button "Update" } + within("#rule_fields") { click_button "Add" } + find("[id$=_preferred_amount]").set(30) + within("#rule_fields") { click_button "Update" } select "Free Shipping", from: "Adjustment type" - within('#action_fields') { click_button "Add" } - expect(page).to have_content('Makes all shipments for the order free') + within("#action_fields") { click_button "Add" } + expect(page).to have_content("Makes all shipments for the order free") promotion = Spree::Promotion.find_by(name: "SAVE SAVE SAVE") expect(promotion.codes).to be_empty @@ -212,18 +212,18 @@ expect(page).to have_title("SAVE SAVE SAVE - Promotions") select "Item Total", from: "Discount Rules" - within('#rule_fields') { click_button "Add" } - find('[id$=_preferred_amount]').set(50) - within('#rule_fields') { click_button "Update" } + within("#rule_fields") { click_button "Add" } + find("[id$=_preferred_amount]").set(50) + within("#rule_fields") { click_button "Update" } select "Create whole-order adjustment", from: "Adjustment type" - within('#action_fields') do + within("#action_fields") do click_button "Add" - select "Flat Rate", from: I18n.t('spree.admin.promotions.actions.calculator_label') + select "Flat Rate", from: I18n.t("spree.admin.promotions.actions.calculator_label") fill_in "Amount", with: "5" end - within('#actions_container') { click_button "Update" } - expect(page).to have_text 'successfully updated' + within("#actions_container") { click_button "Update" } + expect(page).to have_text "successfully updated" promotion = Spree::Promotion.find_by(name: "SAVE SAVE SAVE") @@ -237,7 +237,7 @@ expect(first_action.calculator.preferred_amount).to eq(5) end - context 'creating a promotion with discount rules and adjustments' do + context "creating a promotion with discount rules and adjustments" do before do fill_in "Name", with: "SAVE SAVE SAVE" choose "Apply to all orders" @@ -246,19 +246,19 @@ end it "should not allow an Discount Rule to be added without selecting an option" do - within('#rule_fields') { click_button "Add" } + within("#rule_fields") { click_button "Add" } message = page.find("#promotion_rule_type").native.attribute("validationMessage") expect(message).to eq "Please select an item in the list." end it "should not allow an Adjusment type to be added without selecting an option" do - within('#action_fields') { click_button "Add" } + within("#action_fields") { click_button "Add" } message = page.find("#action_type").native.attribute("validationMessage") expect(message).to eq "Please select an item in the list." end end - context 'creating a promotion with promotion action that has a calculator with complex preferences' do + context "creating a promotion with promotion action that has a calculator with complex preferences" do before do class ComplexCalculator < Spree::Calculator preference :amount, :decimal @@ -270,12 +270,12 @@ def self.description "Complex Calculator" end end - @calculators = Spree::Config.promotions.calculators['Spree::Promotion::Actions::CreateItemAdjustments'] - Spree::Config.promotions.calculators['Spree::Promotion::Actions::CreateItemAdjustments'] = [ComplexCalculator] + @calculators = Spree::Config.promotions.calculators["Spree::Promotion::Actions::CreateItemAdjustments"] + Spree::Config.promotions.calculators["Spree::Promotion::Actions::CreateItemAdjustments"] = [ComplexCalculator] end after do - Spree::Config.promotions.calculators['Spree::Promotion::Actions::CreateItemAdjustments'] = @calculators + Spree::Config.promotions.calculators["Spree::Promotion::Actions::CreateItemAdjustments"] = @calculators end it "does not show array and hash form fields" do @@ -285,18 +285,18 @@ def self.description expect(page).to have_title("SAVE SAVE SAVE - Promotions") select "Create per-line-item adjustment", from: "Adjustment type" - within('#action_fields') do + within("#action_fields") do click_button "Add" - select "Complex Calculator", from: I18n.t('spree.admin.promotions.actions.calculator_label') + select "Complex Calculator", from: I18n.t("spree.admin.promotions.actions.calculator_label") end - within('#actions_container') { click_button "Update" } - expect(page).to have_text 'successfully updated' - - within('#action_fields') do - expect(page).to have_field('Amount') - expect(page).to have_field('Currency') - expect(page).to_not have_field('Mapping') - expect(page).to_not have_field('List') + within("#actions_container") { click_button "Update" } + expect(page).to have_text "successfully updated" + + within("#action_fields") do + expect(page).to have_field("Amount") + expect(page).to have_field("Currency") + expect(page).to_not have_field("Mapping") + expect(page).to_not have_field("List") end end end diff --git a/legacy_promotions/spec/features/backend/promotions/option_value_rule_spec.rb b/legacy_promotions/spec/features/backend/promotions/option_value_rule_spec.rb index 5f41e0227cc..9316c08ec26 100644 --- a/legacy_promotions/spec/features/backend/promotions/option_value_rule_spec.rb +++ b/legacy_promotions/spec/features/backend/promotions/option_value_rule_spec.rb @@ -2,7 +2,7 @@ require "rails_helper" -RSpec.feature 'Promotion with option value rule' do +RSpec.feature "Promotion with option value rule" do stub_authorization! given(:variant) { create :variant } @@ -26,18 +26,18 @@ click_button "Add" end - within('.promo-rule-option-value') do - targetted_select2_search product.name, from: '.js-promo-rule-option-value-product-select' - targetted_select2_search option_value.name, from: '.js-promo-rule-option-value-option-values-select' + within(".promo-rule-option-value") do + targetted_select2_search product.name, from: ".js-promo-rule-option-value-product-select" + targetted_select2_search option_value.name, from: ".js-promo-rule-option-value-option-values-select" end - within('#rules_container') { click_button "Update" } + within("#rules_container") { click_button "Update" } expect(page).to have_content("has been successfully updated") first_rule = promotion.rules.reload.first expect(first_rule.class).to eq Spree::Promotion::Rules::OptionValue - expect(first_rule.preferred_eligible_values).to eq Hash[product.id => [option_value.id]] + expect(first_rule.preferred_eligible_values).to eq({product.id => [option_value.id]}) end context "with an attempted XSS" do @@ -53,9 +53,9 @@ click_button "Add" end - within('.promo-rule-option-value') do - targetted_select2_search product.name, from: '.js-promo-rule-option-value-product-select' - targetted_select2_search option_value.name, from: '.js-promo-rule-option-value-option-values-select' + within(".promo-rule-option-value") do + targetted_select2_search product.name, from: ".js-promo-rule-option-value-product-select" + targetted_select2_search option_value.name, from: ".js-promo-rule-option-value-option-values-select" end end end @@ -66,25 +66,23 @@ background do rule = Spree::Promotion::Rules::OptionValue.new rule.promotion = promotion - rule.preferred_eligible_values = Hash[ - variant1.product_id => variant1.option_values.pluck(:id), - variant2.product_id => variant2.option_values.pluck(:id) - ] + rule.preferred_eligible_values(= {variant1.product_id => variant1.option_values.pluck(:id), + variant2.product_id => variant2.option_values.pluck(:id)}) rule.save! visit spree.edit_admin_promotion_path(promotion) end scenario "deleting a product", js: true do - expect(page).to have_css('.promo-rule-option-value', count: 2) - all('.promo-rule-option-value')[1].find('.remove').click + expect(page).to have_css(".promo-rule-option-value", count: 2) + all(".promo-rule-option-value")[1].find(".remove").click - within('#rules_container') { click_button "Update" } + within("#rules_container") { click_button "Update" } expect(page).to have_content("has been successfully updated") first_rule = promotion.rules.reload.first - expect(first_rule.preferred_eligible_values).to eq Hash[variant1.product_id => variant1.option_values.pluck(:id)] + expect(first_rule.preferred_eligible_values).to eq({variant1.product_id => variant1.option_values.pluck(:id)}) end end end diff --git a/legacy_promotions/spec/features/backend/promotions/product_rule_spec.rb b/legacy_promotions/spec/features/backend/promotions/product_rule_spec.rb index 29458b4089a..744aa027afd 100644 --- a/legacy_promotions/spec/features/backend/promotions/product_rule_spec.rb +++ b/legacy_promotions/spec/features/backend/promotions/product_rule_spec.rb @@ -2,7 +2,7 @@ require "rails_helper" -RSpec.feature 'Promotion with product rule', js: true do +RSpec.feature "Promotion with product rule", js: true do stub_authorization! given!(:product) { create :product, name: "BlamCo Mac & Cheese", sku: "PRODUCT_SKU" } diff --git a/legacy_promotions/spec/features/backend/promotions/promotion_categories_spec.rb b/legacy_promotions/spec/features/backend/promotions/promotion_categories_spec.rb index f1a9712bf75..628b97e350b 100644 --- a/legacy_promotions/spec/features/backend/promotions/promotion_categories_spec.rb +++ b/legacy_promotions/spec/features/backend/promotions/promotion_categories_spec.rb @@ -2,13 +2,13 @@ require "rails_helper" -RSpec.describe 'Promotion Categories', type: :feature do +RSpec.describe "Promotion Categories", type: :feature do stub_authorization! context "index" do before do - create(:promotion_category, name: 'name1', code: 'code1') - create(:promotion_category, name: 'name2', code: 'code2') + create(:promotion_category, name: "name1", code: "code1") + create(:promotion_category, name: "name2", code: "code2") visit spree.admin_promotion_categories_path end @@ -50,7 +50,7 @@ context "edit" do before(:each) do - create(:promotion_category, name: 'name1') + create(:promotion_category, name: "name1") visit spree.admin_promotion_categories_path within_row(1) { click_icon :edit } end @@ -71,7 +71,7 @@ context "delete" do before(:each) do - create(:promotion_category, name: 'name1') + create(:promotion_category, name: "name1") visit spree.admin_promotion_categories_path end diff --git a/legacy_promotions/spec/features/backend/promotions/promotion_spec.rb b/legacy_promotions/spec/features/backend/promotions/promotion_spec.rb index 978fdd5f0a0..cf325fec17f 100644 --- a/legacy_promotions/spec/features/backend/promotions/promotion_spec.rb +++ b/legacy_promotions/spec/features/backend/promotions/promotion_spec.rb @@ -1,22 +1,22 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" -RSpec.feature 'Promotions' do +RSpec.feature "Promotions" do stub_authorization! - context 'index' do - context 'when no promotions' do - scenario 'shows no promotions found message' do + context "index" do + context "when no promotions" do + scenario "shows no promotions found message" do visit spree.admin_promotions_path - expect(page).to have_content('No Promotions found.') + expect(page).to have_content("No Promotions found.") end end - context 'when promotion is active' do + context "when promotion is active" do given!(:promotion) { create :promotion, :with_action } - scenario 'promotion status is active' do + scenario "promotion status is active" do visit spree.admin_promotions_path within_row(1) do @@ -25,10 +25,10 @@ end end - context 'when promotion is in the future' do + context "when promotion is in the future" do given!(:promotion) { create :promotion, starts_at: 1.day.after } - scenario 'promotion status is not started' do + scenario "promotion status is not started" do visit spree.admin_promotions_path within_row(1) do @@ -37,10 +37,10 @@ end end - context 'when promotion is in the past' do + context "when promotion is in the past" do given!(:promotion) { create :promotion, expires_at: 1.day.ago } - scenario 'promotion status is expired' do + scenario "promotion status is expired" do visit spree.admin_promotions_path within_row(1) do diff --git a/legacy_promotions/spec/features/backend/promotions/tiered_calculator_spec.rb b/legacy_promotions/spec/features/backend/promotions/tiered_calculator_spec.rb index d89bb21c0ef..550ac3d8d1d 100644 --- a/legacy_promotions/spec/features/backend/promotions/tiered_calculator_spec.rb +++ b/legacy_promotions/spec/features/backend/promotions/tiered_calculator_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.feature "Tiered Calculator Promotions" do stub_authorization! @@ -13,16 +13,16 @@ scenario "adding a tiered percent calculator", js: true do select "Create whole-order adjustment", from: "Adjustment type" - within('#action_fields') { click_button "Add" } + within("#action_fields") { click_button "Add" } - select "Tiered Percent", from: I18n.t('spree.admin.promotions.actions.calculator_label') - within('#actions_container') { click_button "Update" } + select "Tiered Percent", from: I18n.t("spree.admin.promotions.actions.calculator_label") + within("#actions_container") { click_button "Update" } within("#actions_container .settings") do expect(page).to have_content("Base Percent") expect(page).to have_content("Tiers") - page.find('a.button').click + page.find("a.button").click end fill_in "Base Percent", with: 5 @@ -32,7 +32,7 @@ find("input:first-child").set(10) end - within('#actions_container') { click_button "Update" } + within("#actions_container") { click_button "Update" } expect(page).to have_content("Promotion \"#{promotion.name}\" has been successfully updated!") @@ -53,7 +53,7 @@ action.calculator = Spree::Calculator::TieredFlatRate.new action.calculator.preferred_base_amount = 5 - action.calculator.preferred_tiers = { 100 => 10, 200 => 15, 300 => 20 } + action.calculator.preferred_tiers = {100 => 10, 200 => 15, 300 => 20} action.calculator.save! visit spree.edit_admin_promotion_path(promotion) @@ -64,9 +64,9 @@ find(".remove").click end - within('#actions_container') { click_button "Update" } + within("#actions_container") { click_button "Update" } - expect(page).to have_text('has been successfully updated!') + expect(page).to have_text("has been successfully updated!") calculator = promotion.actions.first.calculator expect(calculator.preferred_tiers).to eq({ diff --git a/legacy_promotions/spec/features/backend/promotions/user_rule_spec.rb b/legacy_promotions/spec/features/backend/promotions/user_rule_spec.rb index db375ac1b48..63098746a6c 100644 --- a/legacy_promotions/spec/features/backend/promotions/user_rule_spec.rb +++ b/legacy_promotions/spec/features/backend/promotions/user_rule_spec.rb @@ -2,7 +2,7 @@ require "rails_helper" -RSpec.feature 'Promotion with user rule', js: true do +RSpec.feature "Promotion with user rule", js: true do stub_authorization! given(:promotion) { create :promotion } @@ -12,8 +12,8 @@ end context "multiple users" do - let!(:user) { create(:user, email: 'foo@example.com') } - let!(:other_user) { create(:user, email: 'bar@example.com') } + let!(:user) { create(:user, email: "foo@example.com") } + let!(:other_user) { create(:user, email: "bar@example.com") } scenario "searching a user" do select "User", from: "Discount Rules" @@ -21,8 +21,8 @@ select2_search "foo", from: "Choose users", select: false - expect(page).to have_content('foo@example.com') - expect(page).not_to have_content('bar@example.com') + expect(page).to have_content("foo@example.com") + expect(page).not_to have_content("bar@example.com") end end diff --git a/legacy_promotions/spec/features/solidus_admin/orders/show/adjustments_spec.rb b/legacy_promotions/spec/features/solidus_admin/orders/show/adjustments_spec.rb index b25286cf80e..e34cf4e9641 100644 --- a/legacy_promotions/spec/features/solidus_admin/orders/show/adjustments_spec.rb +++ b/legacy_promotions/spec/features/solidus_admin/orders/show/adjustments_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe "Order", :js, type: :feature, solidus_admin: true do let(:admin) { create(:admin_user) } diff --git a/legacy_promotions/spec/features/solidus_admin/promotion_categories_spec.rb b/legacy_promotions/spec/features/solidus_admin/promotion_categories_spec.rb index 9c2fec0d0a0..a50a5d085ce 100644 --- a/legacy_promotions/spec/features/solidus_admin/promotion_categories_spec.rb +++ b/legacy_promotions/spec/features/solidus_admin/promotion_categories_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'rails_helper' -require 'solidus_admin/testing_support/shared_examples/promotion_categories_features' +require "rails_helper" +require "solidus_admin/testing_support/shared_examples/promotion_categories_features" RSpec.describe "Promotion Categories", type: :feature, solidus_admin: true do - include_examples 'promotion categories features' do + include_examples "promotion categories features" do let(:factory_name) { :promotion_category } let(:model_class) { Spree::PromotionCategory } let(:index_path) { "/admin/promotion_categories" } diff --git a/legacy_promotions/spec/features/solidus_admin/promotions_spec.rb b/legacy_promotions/spec/features/solidus_admin/promotions_spec.rb index 922846e2a51..b8f49a33578 100644 --- a/legacy_promotions/spec/features/solidus_admin/promotions_spec.rb +++ b/legacy_promotions/spec/features/solidus_admin/promotions_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe "Promotions", :js, type: :feature, solidus_admin: true do - before { sign_in create(:admin_user, email: 'admin@example.com') } + before { sign_in create(:admin_user, email: "admin@example.com") } it "lists promotions and allows deleting them" do create(:promotion, :with_action, name: "My active Promotion") diff --git a/legacy_promotions/spec/helpers/promotion_rules_helper_spec.rb b/legacy_promotions/spec/helpers/promotion_rules_helper_spec.rb index 39fbc03f853..d0ae9e30117 100644 --- a/legacy_promotions/spec/helpers/promotion_rules_helper_spec.rb +++ b/legacy_promotions/spec/helpers/promotion_rules_helper_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::PromotionRulesHelper, type: :helper do it "does not include existing rules in options" do diff --git a/legacy_promotions/spec/jobs/spree/promotion_code_batch_job_spec.rb b/legacy_promotions/spec/jobs/spree/promotion_code_batch_job_spec.rb index 12ea4a1ebb0..2d05a9943f1 100644 --- a/legacy_promotions/spec/jobs/spree/promotion_code_batch_job_spec.rb +++ b/legacy_promotions/spec/jobs/spree/promotion_code_batch_job_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::PromotionCodeBatchJob, type: :job do let(:email) { "test@email.com" } let(:promotion_code_batch) do @@ -22,25 +22,25 @@ def codes Spree::PromotionCode.pluck(:value) end - context 'with the default join character' do - it 'uses the default join characters', :aggregate_failures do + context "with the default join character" do + it "uses the default join characters", :aggregate_failures do subject.perform(promotion_code_batch) codes.each do |code| expect(code).to match(/^test_/) end end end - context 'with a custom join character' do + context "with a custom join character" do let(:promotion_code_batch) do Spree::PromotionCodeBatch.create!( promotion_id: create(:promotion).id, base_code: "test", number_of_codes: 10, email:, - join_characters: '-' + join_characters: "-" ) end - it 'uses the custom join characters', :aggregate_failures do + it "uses the custom join characters", :aggregate_failures do subject.perform(promotion_code_batch) codes.each do |code| expect(code).to match(/^test-/) diff --git a/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/calculator_factory_spec.rb b/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/calculator_factory_spec.rb index e50abff2402..b77c3af03f2 100644 --- a/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/calculator_factory_spec.rb +++ b/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/calculator_factory_spec.rb @@ -1,26 +1,26 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'calculator factory' do +RSpec.describe "calculator factory" do let(:factory_class) { Spree::Calculator } - describe 'flat_rate_calculator' do + describe "flat_rate_calculator" do let(:factory) { :flat_rate_calculator } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'no amount calculator' do + describe "no amount calculator" do let(:factory) { :no_amount_calculator } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'percent on item calculator' do + describe "percent on item calculator" do let(:factory) { :percent_on_item_calculator } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/order_factory_spec.rb b/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/order_factory_spec.rb index ec03e9aa6fc..a106da4d85f 100644 --- a/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/order_factory_spec.rb +++ b/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/order_factory_spec.rb @@ -1,19 +1,19 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" require "spree/testing_support/shared_examples/order_factory" -require 'spree/testing_support/shared_examples/working_factory' +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'order factory' do +RSpec.describe "order factory" do let(:factory_class) { Spree::Order } - describe 'completed order with promotion' do + describe "completed order with promotion" do let(:factory) { :completed_order_with_promotion } - it_behaves_like 'a working factory' - it_behaves_like 'an order with line items factory', "complete", "on_hand" - it_behaves_like 'shipping methods are assigned' - it_behaves_like 'supplied completed_at is respected' + it_behaves_like "a working factory" + it_behaves_like "an order with line items factory", "complete", "on_hand" + it_behaves_like "shipping methods are assigned" + it_behaves_like "supplied completed_at is respected" it "has the expected attributes" do order = create(factory) @@ -27,7 +27,7 @@ end end - context 'with a promotion with an action' do + context "with a promotion with an action" do let(:promotion) { create(:promotion, :with_line_item_adjustment) } it "has the expected attributes" do order = create(factory, promotion:) diff --git a/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/order_promotion_factory_spec.rb b/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/order_promotion_factory_spec.rb index 15cf1e891d8..635198b62dd 100644 --- a/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/order_promotion_factory_spec.rb +++ b/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/order_promotion_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'order promotion factory' do +RSpec.describe "order promotion factory" do let(:factory_class) { Spree::OrderPromotion } - describe 'plain order promotion' do + describe "plain order promotion" do let(:factory) { :order_promotion } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/promotion_category_factory_spec.rb b/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/promotion_category_factory_spec.rb index 6ce2c61bc7c..682f9ea03fd 100644 --- a/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/promotion_category_factory_spec.rb +++ b/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/promotion_category_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'promotion category factory' do +RSpec.describe "promotion category factory" do let(:factory_class) { Spree::PromotionCategory } - describe 'plain promotion category' do + describe "plain promotion category" do let(:factory) { :promotion_category } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/promotion_code_factory_spec.rb b/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/promotion_code_factory_spec.rb index 47bf6cb2c1d..fb127514195 100644 --- a/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/promotion_code_factory_spec.rb +++ b/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/promotion_code_factory_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'promotion code factory' do +RSpec.describe "promotion code factory" do let(:factory_class) { Spree::PromotionCode } - describe 'plain promotion code' do + describe "plain promotion code" do let(:factory) { :promotion_code } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/promotion_factory_spec.rb b/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/promotion_factory_spec.rb index 2af76303cd5..eafe40a0434 100644 --- a/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/promotion_factory_spec.rb +++ b/legacy_promotions/spec/lib/solidus_legacy_promotions/testing_support/factories/promotion_factory_spec.rb @@ -1,38 +1,38 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/working_factory' +require "rails_helper" +require "spree/testing_support/shared_examples/working_factory" -RSpec.describe 'promotion code factory' do +RSpec.describe "promotion code factory" do let(:factory_class) { Spree::Promotion } - describe 'plain promotion' do + describe "plain promotion" do let(:factory) { :promotion } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'promotion with action adjustment' do + describe "promotion with action adjustment" do let(:factory) { :promotion_with_action_adjustment } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'promotion with item adjustment' do + describe "promotion with item adjustment" do let(:factory) { :promotion_with_item_adjustment } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'promotion with order adjustment' do + describe "promotion with order adjustment" do let(:factory) { :promotion_with_order_adjustment } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end - describe 'promotion with item total rule' do + describe "promotion with item total rule" do let(:factory) { :promotion_with_item_total_rule } - it_behaves_like 'a working factory' + it_behaves_like "a working factory" end end diff --git a/legacy_promotions/spec/lib/spree/app_configuration_spec.rb b/legacy_promotions/spec/lib/spree/app_configuration_spec.rb index 4efdd4c936c..7a2c291e483 100644 --- a/legacy_promotions/spec/lib/spree/app_configuration_spec.rb +++ b/legacy_promotions/spec/lib/spree/app_configuration_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::AppConfiguration do let(:prefs) { Spree::Config } diff --git a/legacy_promotions/spec/mailers/spree/order_mailer_spec.rb b/legacy_promotions/spec/mailers/spree/order_mailer_spec.rb index 3ac8fa3a015..3fcd1ae1f82 100644 --- a/legacy_promotions/spec/mailers/spree/order_mailer_spec.rb +++ b/legacy_promotions/spec/mailers/spree/order_mailer_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::OrderMailer, type: :mailer do let(:order) do order = create(:order) - product = stub_model(Spree::Product, name: %{The "BEST" product}) + product = stub_model(Spree::Product, name: %(The "BEST" product)) variant = stub_model(Spree::Variant, product:) price = stub_model(Spree::Price, variant:, amount: 5.00) store = FactoryBot.build :store, mail_from_address: "store@example.com", bcc_email: "bcc@example.com" @@ -22,16 +22,16 @@ :adjustment, adjustable: order, order:, - eligible: true, - label: 'Eligible Adjustment' + eligible: true, + label: "Eligible Adjustment" ) create( :adjustment, adjustable: order, order:, - eligible: false, - label: 'Ineligible Adjustment' + eligible: false, + label: "Ineligible Adjustment" ) end diff --git a/legacy_promotions/spec/mailers/spree/promotion_code_batch_mailer_spec.rb b/legacy_promotions/spec/mailers/spree/promotion_code_batch_mailer_spec.rb index 50861ac013a..ddade1c59e7 100644 --- a/legacy_promotions/spec/mailers/spree/promotion_code_batch_mailer_spec.rb +++ b/legacy_promotions/spec/mailers/spree/promotion_code_batch_mailer_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::PromotionCodeBatchMailer, type: :mailer do let(:promotion) { create(:promotion, name: "Promotion Test") } let(:promotion_code_batch) do diff --git a/legacy_promotions/spec/models/spree/adjustment_spec.rb b/legacy_promotions/spec/models/spree/adjustment_spec.rb index e1d6079d96d..edc05854c45 100644 --- a/legacy_promotions/spec/models/spree/adjustment_spec.rb +++ b/legacy_promotions/spec/models/spree/adjustment_spec.rb @@ -1,25 +1,25 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Adjustment, type: :model do let!(:store) { create :store } let(:order) { create :order } let(:line_item) { create :line_item, order: } - let(:adjustment) { Spree::Adjustment.create!(label: 'Adjustment', adjustable: order, order:, amount: 5) } + let(:adjustment) { Spree::Adjustment.create!(label: "Adjustment", adjustable: order, order:, amount: 5) } it { is_expected.to respond_to(:promotion_code) } - context '#recalculate' do + context "#recalculate" do subject { adjustment.recalculate } let(:adjustment) do line_item.adjustments.create!( - label: 'Adjustment', + label: "Adjustment", order:, adjustable: order, amount: 5, finalized:, - source:, + source: ) end let(:order) { create(:order_with_line_items, line_items_price: 100) } @@ -34,27 +34,27 @@ context "when adjustment is finalized" do let(:finalized) { true } - context 'with a promotion adjustment' do + context "with a promotion adjustment" do let(:source) { promotion.actions.first! } let(:promotion) { create(:promotion, :with_line_item_adjustment, adjustment_rate: 7) } - it 'does not update the adjustment' do + it "does not update the adjustment" do expect { subject }.not_to change { adjustment.amount } end end - context 'with a tax adjustment' do + context "with a tax adjustment" do let(:source) { mock_model(Spree::TaxRate, compute_amount: 10) } - it 'updates the adjustment' do + it "updates the adjustment" do expect { subject }.to change { adjustment.amount }.from(5).to(10) end end - context 'with a sourceless adjustment' do + context "with a sourceless adjustment" do let(:source) { nil } - it 'does nothing' do + it "does nothing" do expect { subject }.not_to change { adjustment.amount } end end @@ -63,7 +63,7 @@ context "when adjustment isn't finalized" do let(:finalized) { false } - context 'with a promotion adjustment' do + context "with a promotion adjustment" do let(:source) { promotion.actions.first! } let(:promotion) { create(:promotion, :with_line_item_adjustment, adjustment_rate: 7) } @@ -73,45 +73,45 @@ end end - context 'when the promotion is eligible' do - it 'updates the adjustment' do + context "when the promotion is eligible" do + it "updates the adjustment" do expect { subject }.to change { adjustment.amount }.from(5).to(-7) end - it 'sets the adjustment elgiible to true' do + it "sets the adjustment elgiible to true" do subject expect(adjustment.eligible).to eq(true) end end - context 'when the promotion is not eligible' do + context "when the promotion is not eligible" do before do promotion.update!(starts_at: 1.day.from_now) end - it 'zeros out the adjustment' do + it "zeros out the adjustment" do expect { subject }.to change { adjustment.amount }.from(5).to(0) end - it 'sets the adjustment elgiible to false' do + it "sets the adjustment elgiible to false" do subject expect(adjustment.eligible).to eq(false) end end end - context 'with a tax adjustment' do + context "with a tax adjustment" do let(:source) { mock_model(Spree::TaxRate, compute_amount: 10) } - it 'updates the adjustment' do + it "updates the adjustment" do expect { subject }.to change { adjustment.amount }.from(5).to(10) end end - context 'with a sourceless adjustment' do + context "with a sourceless adjustment" do let(:source) { nil } - it 'does nothing' do + it "does nothing" do expect { subject }.to_not change { adjustment.amount } end end diff --git a/legacy_promotions/spec/models/spree/calculator/distributed_amount_spec.rb b/legacy_promotions/spec/models/spree/calculator/distributed_amount_spec.rb index 7577d897fb1..eea191aeaef 100644 --- a/legacy_promotions/spec/models/spree/calculator/distributed_amount_spec.rb +++ b/legacy_promotions/spec/models/spree/calculator/distributed_amount_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/calculator' +require "rails_helper" +require "spree/testing_support/shared_examples/calculator" RSpec.describe Spree::Calculator::DistributedAmount, type: :model do describe "#compute_line_item" do @@ -13,7 +13,7 @@ let(:order) do FactoryBot.create( :order_with_line_items, - line_items_attributes: [{ price: 50 }, { price: 50 }, { price: 50 }] + line_items_attributes: [{price: 50}, {price: 50}, {price: 50}] ) end diff --git a/legacy_promotions/spec/models/spree/calculator/flat_percent_item_total_spec.rb b/legacy_promotions/spec/models/spree/calculator/flat_percent_item_total_spec.rb index dad78a5df3f..59ebd98d242 100644 --- a/legacy_promotions/spec/models/spree/calculator/flat_percent_item_total_spec.rb +++ b/legacy_promotions/spec/models/spree/calculator/flat_percent_item_total_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/calculator' +require "rails_helper" +require "spree/testing_support/shared_examples/calculator" RSpec.describe Spree::Calculator::FlatPercentItemTotal, type: :model do let(:calculator) { Spree::Calculator::FlatPercentItemTotal.new } let(:line_item) { create(:line_item) } - it_behaves_like 'a calculator with a description' + it_behaves_like "a calculator with a description" before { allow(calculator).to receive_messages preferred_flat_percent: 10 } @@ -21,7 +21,7 @@ end it "should round result based on order currency" do - line_item.order.currency = 'JPY' + line_item.order.currency = "JPY" allow(line_item).to receive_messages amount: 31.08 expect(calculator.compute(line_item)).to eq 3 @@ -29,7 +29,7 @@ expect(calculator.compute(line_item)).to eq 3 end - it 'returns object.amount if computed amount is greater' do + it "returns object.amount if computed amount is greater" do allow(calculator).to receive_messages preferred_flat_percent: 110 allow(line_item).to receive_messages amount: 30.00 diff --git a/legacy_promotions/spec/models/spree/calculator/flexi_rate_spec.rb b/legacy_promotions/spec/models/spree/calculator/flexi_rate_spec.rb index 497c27b2309..edefb31ce84 100644 --- a/legacy_promotions/spec/models/spree/calculator/flexi_rate_spec.rb +++ b/legacy_promotions/spec/models/spree/calculator/flexi_rate_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/calculator' +require "rails_helper" +require "spree/testing_support/shared_examples/calculator" RSpec.describe Spree::Calculator::FlexiRate, type: :model do let(:calculator) do @@ -15,7 +15,7 @@ let(:additional_item) { 0 } let(:max_items) { 0 } - it_behaves_like 'a calculator with a description' + it_behaves_like "a calculator with a description" let(:order) do mock_model( @@ -151,7 +151,7 @@ end it "should allow creation of new object with all the attributes" do - attributes = { preferred_first_item: 1, preferred_additional_item: 1, preferred_max_items: 1 } + attributes = {preferred_first_item: 1, preferred_additional_item: 1, preferred_max_items: 1} calculator = Spree::Calculator::FlexiRate.new(attributes) expect(calculator).to have_attributes(attributes) end diff --git a/legacy_promotions/spec/models/spree/calculator/percent_on_line_item_spec.rb b/legacy_promotions/spec/models/spree/calculator/percent_on_line_item_spec.rb index da73cf2180e..7a5a294b8e9 100644 --- a/legacy_promotions/spec/models/spree/calculator/percent_on_line_item_spec.rb +++ b/legacy_promotions/spec/models/spree/calculator/percent_on_line_item_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/calculator' +require "rails_helper" +require "spree/testing_support/shared_examples/calculator" module Spree RSpec.describe Calculator::PercentOnLineItem, type: :model do @@ -15,6 +15,6 @@ module Spree end end - it_behaves_like 'a calculator with a description' + it_behaves_like "a calculator with a description" end end diff --git a/legacy_promotions/spec/models/spree/calculator/tiered_flat_rate_spec.rb b/legacy_promotions/spec/models/spree/calculator/tiered_flat_rate_spec.rb index 36af4d70b78..cfdec7d3e58 100644 --- a/legacy_promotions/spec/models/spree/calculator/tiered_flat_rate_spec.rb +++ b/legacy_promotions/spec/models/spree/calculator/tiered_flat_rate_spec.rb @@ -1,58 +1,58 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/calculator' +require "rails_helper" +require "spree/testing_support/shared_examples/calculator" RSpec.describe Spree::Calculator::TieredFlatRate, type: :model do let(:calculator) { Spree::Calculator::TieredFlatRate.new } - it_behaves_like 'a calculator with a description' + it_behaves_like "a calculator with a description" describe "#valid?" do subject { calculator.valid? } context "when tiers is a hash" do context "and the key is not a positive number" do - before { calculator.preferred_tiers = { "nope" => 20 } } + before { calculator.preferred_tiers = {"nope" => 20} } it { is_expected.to be false } end context "and the key is an integer" do - before { calculator.preferred_tiers = { 20 => 20 } } + before { calculator.preferred_tiers = {20 => 20} } it "converts successfully" do is_expected.to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal('20') => BigDecimal('20') }) + expect(calculator.preferred_tiers).to eq({BigDecimal(20) => BigDecimal(20)}) end end context "and the key is a float" do - before { calculator.preferred_tiers = { 20.5 => 20.5 } } + before { calculator.preferred_tiers = {20.5 => 20.5} } it "converts successfully" do is_expected.to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal('20.5') => BigDecimal('20.5') }) + expect(calculator.preferred_tiers).to eq({BigDecimal("20.5") => BigDecimal("20.5")}) end end context "and the key is a string number" do - before { calculator.preferred_tiers = { "20" => 20 } } + before { calculator.preferred_tiers = {"20" => 20} } it "converts successfully" do is_expected.to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal('20') => BigDecimal('20') }) + expect(calculator.preferred_tiers).to eq({BigDecimal(20) => BigDecimal(20)}) end end context "and the key is a numeric string with spaces" do - before { calculator.preferred_tiers = { " 20 " => 20 } } + before { calculator.preferred_tiers = {" 20 " => 20} } it "converts successfully" do is_expected.to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal('20') => BigDecimal('20') }) + expect(calculator.preferred_tiers).to eq({BigDecimal(20) => BigDecimal(20)}) end end context "and the key is a string number with decimals" do - before { calculator.preferred_tiers = { "20.5" => "20.5" } } + before { calculator.preferred_tiers = {"20.5" => "20.5"} } it "converts successfully" do is_expected.to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal('20.5') => BigDecimal('20.5') }) + expect(calculator.preferred_tiers).to eq({BigDecimal("20.5") => BigDecimal("20.5")}) end end end diff --git a/legacy_promotions/spec/models/spree/calculator/tiered_percent_spec.rb b/legacy_promotions/spec/models/spree/calculator/tiered_percent_spec.rb index 00b747c3e7b..ab772c2e4c8 100644 --- a/legacy_promotions/spec/models/spree/calculator/tiered_percent_spec.rb +++ b/legacy_promotions/spec/models/spree/calculator/tiered_percent_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/shared_examples/calculator' +require "rails_helper" +require "spree/testing_support/shared_examples/calculator" RSpec.describe Spree::Calculator::TieredPercent, type: :model do let(:calculator) { Spree::Calculator::TieredPercent.new } - it_behaves_like 'a calculator with a description' + it_behaves_like "a calculator with a description" describe "#valid?" do subject { calculator.valid? } @@ -23,52 +23,52 @@ context "when tiers is a hash" do context "and the key is not a positive number" do - before { calculator.preferred_tiers = { "nope" => 20 } } + before { calculator.preferred_tiers = {"nope" => 20} } it { is_expected.to be false } end context "and one of the values is not a percent" do - before { calculator.preferred_tiers = { 10 => 110 } } + before { calculator.preferred_tiers = {10 => 110} } it { is_expected.to be false } end context "and the key is an integer" do - before { calculator.preferred_tiers = { 20 => 20 } } + before { calculator.preferred_tiers = {20 => 20} } it "converts successfully" do is_expected.to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal('20') => BigDecimal('20') }) + expect(calculator.preferred_tiers).to eq({BigDecimal(20) => BigDecimal(20)}) end end context "and the key is a float" do - before { calculator.preferred_tiers = { 20.5 => 20.5 } } + before { calculator.preferred_tiers = {20.5 => 20.5} } it "converts successfully" do is_expected.to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal('20.5') => BigDecimal('20.5') }) + expect(calculator.preferred_tiers).to eq({BigDecimal("20.5") => BigDecimal("20.5")}) end end context "and the key is a string number" do - before { calculator.preferred_tiers = { "20" => 20 } } + before { calculator.preferred_tiers = {"20" => 20} } it "converts successfully" do is_expected.to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal('20') => BigDecimal('20') }) + expect(calculator.preferred_tiers).to eq({BigDecimal(20) => BigDecimal(20)}) end end context "and the key is a numeric string with spaces" do - before { calculator.preferred_tiers = { " 20 " => 20 } } + before { calculator.preferred_tiers = {" 20 " => 20} } it "converts successfully" do is_expected.to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal('20') => BigDecimal('20') }) + expect(calculator.preferred_tiers).to eq({BigDecimal(20) => BigDecimal(20)}) end end context "and the key is a string number with decimals" do - before { calculator.preferred_tiers = { "20.5" => "20.5" } } + before { calculator.preferred_tiers = {"20.5" => "20.5"} } it "converts successfully" do is_expected.to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal('20.5') => BigDecimal('20.5') }) + expect(calculator.preferred_tiers).to eq({BigDecimal("20.5") => BigDecimal("20.5")}) end end end diff --git a/legacy_promotions/spec/models/spree/order/checkout_spec.rb b/legacy_promotions/spec/models/spree/order/checkout_spec.rb index bc6428d05f8..ed727bb159d 100644 --- a/legacy_promotions/spec/models/spree/order/checkout_spec.rb +++ b/legacy_promotions/spec/models/spree/order/checkout_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Order, type: :model do let!(:store) { create(:store) } @@ -8,7 +8,7 @@ context "from delivery", partial_double_verification: false do before do - order.state = 'delivery' + order.state = "delivery" allow(order).to receive(:apply_shipping_promotions) allow(order).to receive(:ensure_available_shipping_rates) { true } end diff --git a/legacy_promotions/spec/models/spree/order/totals_spec.rb b/legacy_promotions/spec/models/spree/order/totals_spec.rb index be67dd27183..6d0a2a33868 100644 --- a/legacy_promotions/spec/models/spree/order/totals_spec.rb +++ b/legacy_promotions/spec/models/spree/order/totals_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe Order, type: :model do @@ -8,7 +8,7 @@ module Spree let(:shirt) { create(:variant) } context "adds item to cart and activates promo" do - let(:promotion) { Promotion.create name: 'Huhu', apply_automatically: true } + let(:promotion) { Promotion.create name: "Huhu", apply_automatically: true } let(:calculator) { Calculator::FlatPercentItemTotal.new(preferred_flat_percent: 10) } let!(:action) { Promotion::Actions::CreateAdjustment.create(promotion:, calculator:) } diff --git a/legacy_promotions/spec/models/spree/order_contents_spec.rb b/legacy_promotions/spec/models/spree/order_contents_spec.rb index 3bf4abddf90..d301f1e6e78 100644 --- a/legacy_promotions/spec/models/spree/order_contents_spec.rb +++ b/legacy_promotions/spec/models/spree/order_contents_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::OrderContents, type: :model do let!(:store) { create :store } @@ -49,9 +49,9 @@ let!(:shirt) { subject.add variant, 1 } let(:params) do - { line_items_attributes: { - "0" => { id: shirt.id, quantity: 3 } - } } + {line_items_attributes: { + "0" => {id: shirt.id, quantity: 3} + }} end it "changes item quantity" do @@ -67,9 +67,9 @@ context "submits item quantity 0" do let(:params) do - { line_items_attributes: { - "0" => { id: shirt.id, quantity: 0 } - } } + {line_items_attributes: { + "0" => {id: shirt.id, quantity: 0} + }} end it "removes item from order" do @@ -88,7 +88,7 @@ context "completed order" do let(:order) do Spree::Order.create!( - state: 'complete', + state: "complete", completed_at: Time.current, email: "test@example.com" ) diff --git a/legacy_promotions/spec/models/spree/order_merger_spec.rb b/legacy_promotions/spec/models/spree/order_merger_spec.rb index c7c32dd03b1..31a2ed8faf4 100644 --- a/legacy_promotions/spec/models/spree/order_merger_spec.rb +++ b/legacy_promotions/spec/models/spree/order_merger_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" # Regression test for https://github.com/spree/spree/issues/2179 RSpec.describe Spree::OrderMerger, type: :model do diff --git a/legacy_promotions/spec/models/spree/order_promotion_spec.rb b/legacy_promotions/spec/models/spree/order_promotion_spec.rb index 685f9f4ab17..f95330fa612 100644 --- a/legacy_promotions/spec/models/spree/order_promotion_spec.rb +++ b/legacy_promotions/spec/models/spree/order_promotion_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::OrderPromotion do subject do diff --git a/legacy_promotions/spec/models/spree/order_updater_spec.rb b/legacy_promotions/spec/models/spree/order_updater_spec.rb index 7015a3341a3..3ed9c407c4e 100644 --- a/legacy_promotions/spec/models/spree/order_updater_spec.rb +++ b/legacy_promotions/spec/models/spree/order_updater_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe OrderUpdater, type: :model do @@ -15,7 +15,7 @@ module Spree end end - context 'with order promotion followed by line item addition' do + context "with order promotion followed by line item addition" do let(:promotion) { Spree::Promotion.create!(name: "10% off") } let(:calculator) { Calculator::FlatPercentItemTotal.new(preferred_flat_percent: 10) } @@ -50,14 +50,14 @@ module Spree end end - describe 'updating in-memory items' do + describe "updating in-memory items" do let(:order) do create(:order_with_line_items, line_items_count: 1, line_items_price: 10) end let(:line_item) { order.line_items.first } let(:promotion) { create(:promotion, :with_line_item_adjustment, adjustment_rate: 1) } - it 'updates in-memory items' do + it "updates in-memory items" do promotion.activate(order:) expect(line_item.promo_total).to eq(0) diff --git a/legacy_promotions/spec/models/spree/permission_sets/promotion_display_spec.rb b/legacy_promotions/spec/models/spree/permission_sets/promotion_display_spec.rb index 053e61ed857..2f264565a01 100644 --- a/legacy_promotions/spec/models/spree/permission_sets/promotion_display_spec.rb +++ b/legacy_promotions/spec/models/spree/permission_sets/promotion_display_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/dummy_ability' +require "rails_helper" +require "spree/testing_support/dummy_ability" RSpec.describe Spree::PermissionSets::PromotionDisplay do let(:ability) { DummyAbility.new } diff --git a/legacy_promotions/spec/models/spree/permission_sets/promotion_management_spec.rb b/legacy_promotions/spec/models/spree/permission_sets/promotion_management_spec.rb index b1829e33e7c..781b5fd6288 100644 --- a/legacy_promotions/spec/models/spree/permission_sets/promotion_management_spec.rb +++ b/legacy_promotions/spec/models/spree/permission_sets/promotion_management_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'spree/testing_support/dummy_ability' +require "rails_helper" +require "spree/testing_support/dummy_ability" RSpec.describe Spree::PermissionSets::PromotionManagement do let(:ability) { DummyAbility.new } diff --git a/legacy_promotions/spec/models/spree/promotion/actions/create_adjustment_spec.rb b/legacy_promotions/spec/models/spree/promotion/actions/create_adjustment_spec.rb index 9079f28c7ab..9af23b7e759 100644 --- a/legacy_promotions/spec/models/spree/promotion/actions/create_adjustment_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion/actions/create_adjustment_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Promotion::Actions::CreateAdjustment, type: :model do let(:order) { create(:order_with_line_items, line_items_count: 1) } let(:promotion) { create(:promotion) } let(:action) { Spree::Promotion::Actions::CreateAdjustment.new } - let(:payload) { { order: } } + let(:payload) { {order:} } # From promotion spec: context "#perform" do @@ -49,7 +49,7 @@ context "when a promotion code is used" do let(:promotion_code) { create(:promotion_code) } let(:promotion) { promotion_code.promotion } - let(:payload) { { order:, promotion_code: } } + let(:payload) { {order:, promotion_code:} } it "should connect the adjustment to the promotion_code" do expect { @@ -60,7 +60,7 @@ end end - describe '#remove_from' do + describe "#remove_from" do let(:action) { promotion.actions.first! } let(:promotion) { create(:promotion, :with_order_adjustment) } @@ -71,7 +71,7 @@ @action_adjustment = order.adjustments.where(source: action).first! end - it 'removes the action adjustment' do + it "removes the action adjustment" do expect(order.adjustments).to match_array([unrelated_adjustment, @action_adjustment]) action.remove_from(order) diff --git a/legacy_promotions/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb b/legacy_promotions/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb index 5c3ef9bcef8..8d0946eb887 100644 --- a/legacy_promotions/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe Promotion::Actions::CreateItemAdjustments, type: :model do @@ -9,7 +9,7 @@ module Spree let(:adjustment_amount) { 10 } let(:action) { promotion.actions.first! } let(:line_item) { order.line_items.to_a.first } - let(:payload) { { order:, promotion: } } + let(:payload) { {order:, promotion:} } before do allow(action).to receive(:promotion).and_return(promotion) @@ -80,7 +80,7 @@ module Spree context "when a promotion code is used" do let!(:promotion_code) { create(:promotion_code, promotion:) } - let(:payload) { { order:, promotion:, promotion_code: } } + let(:payload) { {order:, promotion:, promotion_code:} } it "should connect the adjustment to the promotion_code" do expect { @@ -116,13 +116,13 @@ module Spree context "when the adjustable is not actionable" do before { allow(promotion).to receive(:line_item_actionable?) { false } } - it 'returns 0' do + it "returns 0" do expect(action.compute_amount(line_item)).to eql(0) end end end - describe '#remove_from' do + describe "#remove_from" do # this adjustment should not get removed let!(:other_adjustment) { create(:adjustment, adjustable: line_item, order:, source: nil) } @@ -131,7 +131,7 @@ module Spree @action_adjustment = line_item.adjustments.where(source: action).first! end - it 'removes the action adjustment' do + it "removes the action adjustment" do expect(line_item.adjustments).to match_array([other_adjustment, @action_adjustment]) action.remove_from(order) @@ -146,11 +146,11 @@ module Spree let(:promotion) { create(:promotion, :with_line_item_adjustment) } let(:other_promotion) { create(:promotion, :with_line_item_adjustment) } - context 'with incomplete orders' do + context "with incomplete orders" do let(:order) { create(:order) } - it 'destroys adjustments' do - order.adjustments.create!(label: 'Check', amount: 0, order:, source: action) + it "destroys adjustments" do + order.adjustments.create!(label: "Check", amount: 0, order:, source: action) expect { subject @@ -158,7 +158,7 @@ module Spree end end - context 'with complete orders' do + context "with complete orders" do let(:order) { create(:completed_order_with_totals) } it "does not change adjustments for completed orders" do diff --git a/legacy_promotions/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb b/legacy_promotions/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb index 353661742f4..e3050362820 100644 --- a/legacy_promotions/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb @@ -15,7 +15,7 @@ module Spree::Promotion::Actions let(:line_items_attributes) do [ - { price: 10, quantity: } + {price: 10, quantity:} ] end @@ -65,13 +65,13 @@ module Spree::Promotion::Actions context "and 2x item A, 1x item B and 1x item C" do let(:line_items_attributes) do [ - { price: 10, quantity: 2 }, - { price: 10, quantity: 1 }, - { price: 10, quantity: 1 }, + {price: 10, quantity: 2}, + {price: 10, quantity: 1}, + {price: 10, quantity: 1} ] end - before { action.perform({ order:, promotion: }) } + before { action.perform({order:, promotion:}) } describe "the adjustment for the first item" do let(:line_item) { order.line_items.first } @@ -93,8 +93,8 @@ module Spree::Promotion::Actions create( :order_with_line_items, line_items_attributes: [ - { quantity: 3 } - ] + {quantity: 3} + ] ) end @@ -102,7 +102,7 @@ module Spree::Promotion::Actions before do action.preferred_group_size = 2 - action.perform({ order: other_order, promotion: }) + action.perform({order: other_order, promotion:}) end it { is_expected.to eq(-10) } @@ -114,8 +114,8 @@ module Spree::Promotion::Actions let(:line_items_attributes) do [ - { price: 10, quantity: 1 }.merge(line_one_options), - { price: 10, quantity: 1 }.merge(line_two_options), + {price: 10, quantity: 1}.merge(line_one_options), + {price: 10, quantity: 1}.merge(line_two_options) ] end @@ -125,11 +125,11 @@ module Spree::Promotion::Actions context "with a quantity group of 3" do before do action.preferred_group_size = 3 - action.perform({ order:, promotion: }) + action.perform({order:, promotion:}) end context "and 2x item A and 1x item B" do - let(:line_one_options) { { quantity: 2 } } + let(:line_one_options) { {quantity: 2} } describe "the adjustment for the first item" do let(:line_item) { order.line_items.first } @@ -142,8 +142,8 @@ module Spree::Promotion::Actions end context "and the items cost different amounts" do - let(:line_one_options) { { quantity: 3 } } - let(:line_two_options) { { price: 20 } } + let(:line_one_options) { {quantity: 3} } + let(:line_two_options) { {price: 20} } describe "the adjustment for the first item" do let(:line_item) { order.line_items.first } @@ -170,8 +170,8 @@ module Spree::Promotion::Actions end let(:line_items_attributes) do [ - { price: 10, quantity: 1 }.merge(line_one_options), - { price: 10, quantity: 1 }.merge(line_two_options), + {price: 10, quantity: 1}.merge(line_one_options), + {price: 10, quantity: 1}.merge(line_two_options) ] end @@ -181,11 +181,11 @@ module Spree::Promotion::Actions context "with a quantity group of 3" do before do action.preferred_group_size = 3 - action.perform({ order:, promotion: }) + action.perform({order:, promotion:}) end context "and 2x item A and 1x item B" do - let(:line_one_options) { { quantity: 2 } } + let(:line_one_options) { {quantity: 2} } context "when amount falls within the first tier" do describe "the adjustment for the first item" do @@ -199,7 +199,7 @@ module Spree::Promotion::Actions end context "when amount falls within the second tier" do - let(:line_two_options) { { price: 20 } } + let(:line_two_options) { {price: 20} } describe "the adjustment for the first item" do let(:line_item) { order.line_items.first } diff --git a/legacy_promotions/spec/models/spree/promotion/actions/free_shipping_spec.rb b/legacy_promotions/spec/models/spree/promotion/actions/free_shipping_spec.rb index c6a8b8930ea..d4d94fffd6f 100644 --- a/legacy_promotions/spec/models/spree/promotion/actions/free_shipping_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion/actions/free_shipping_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Promotion::Actions::FreeShipping, type: :model do let(:order) { create(:completed_order_with_totals) } let(:shipment) { order.shipments.to_a.first } - let(:promotion) { create(:promotion, code: 'somecode', promotion_actions: [action]) } + let(:promotion) { create(:promotion, code: "somecode", promotion_actions: [action]) } let(:action) { Spree::Promotion::Actions::FreeShipping.new } - let(:payload) { { order:, promotion_code: } } + let(:payload) { {order:, promotion_code:} } let(:promotion_code) { promotion.codes.first! } # From promotion spec: @@ -53,7 +53,7 @@ amount: shipment.cost * -1, source: action, promotion_code:, - label: 'somelabel' + label: "somelabel" ) end end @@ -78,7 +78,7 @@ amount: shipment.cost * -1, source: action, promotion_code:, - label: 'somelabel' + label: "somelabel" ) end @@ -95,7 +95,7 @@ end end - describe '#remove_from' do + describe "#remove_from" do # this adjustment should not get removed let!(:other_adjustment) { create(:adjustment, adjustable: shipment, order:, source: nil) } @@ -104,7 +104,7 @@ @action_adjustment = shipment.adjustments.where(source: action).first! end - it 'removes the action adjustment' do + it "removes the action adjustment" do expect(shipment.adjustments).to match_array([other_adjustment, @action_adjustment]) action.remove_from(order) diff --git a/legacy_promotions/spec/models/spree/promotion/order_adjustments_recalculator_spec.rb b/legacy_promotions/spec/models/spree/promotion/order_adjustments_recalculator_spec.rb index 1f80f03e1f5..9c2fb70e4d3 100644 --- a/legacy_promotions/spec/models/spree/promotion/order_adjustments_recalculator_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion/order_adjustments_recalculator_spec.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Promotion::OrderAdjustmentsRecalculator do subject { described_class.new(order).call } - describe '#call ' do - describe 'promotion recalculation' do + describe "#call " do + describe "promotion recalculation" do let(:order) { create(:order_with_line_items, line_items_count: 1, line_items_price: 10) } let(:line_item) { order.line_items[0] } - context 'when the item quantity has changed' do + context "when the item quantity has changed" do let(:promotion) { create(:promotion, promotion_actions: [promotion_action]) } let(:promotion_action) { Spree::Promotion::Actions::CreateItemAdjustments.new(calculator:) } let(:calculator) { Spree::Calculator::FlatPercentItemTotal.new(preferred_flat_percent: 10) } @@ -21,7 +21,7 @@ line_item.update!(quantity: 2) end - it 'updates the promotion adjustments amount' do + it "updates the promotion adjustments amount" do expect { subject }.to change { @@ -29,7 +29,7 @@ }.from(-1).to(-2) end - it 'updates the line item promo_total' do + it "updates the line item promo_total" do expect { subject }.to change { @@ -37,7 +37,7 @@ }.from(-1).to(-2) end - it 'updates the order promo_total' do + it "updates the order promo_total" do expect { subject }.to change { @@ -46,23 +46,23 @@ end end - context 'promotion chooser customization' do + context "promotion chooser customization" do before do class Spree::TestPromotionChooser def initialize(_adjustments) - raise 'Custom promotion chooser' + raise "Custom promotion chooser" end end stub_spree_preferences(Spree::Config.promotions, promotion_chooser_class: Spree::TestPromotionChooser) end - it 'uses the defined promotion chooser' do - expect { subject }.to raise_error('Custom promotion chooser') + it "uses the defined promotion chooser" do + expect { subject }.to raise_error("Custom promotion chooser") end end - context 'default promotion chooser (best promotion is always applied)' do + context "default promotion chooser (best promotion is always applied)" do include ActiveSupport::Testing::TimeHelpers let(:calculator) { Spree::Calculator::FlatRate.new(preferred_amount: 10) } @@ -70,7 +70,7 @@ def initialize(_adjustments) let(:source) do Spree::Promotion::Actions::CreateItemAdjustments.create!( calculator:, - promotion:, + promotion: ) end let(:promotion) { create(:promotion) } @@ -83,58 +83,58 @@ def create_adjustment(label, amount) source:, amount:, finalized: true, - label:, + label: ) end - it 'should make all but the most valuable promotion adjustment ineligible, leaving non promotion adjustments alone' do - create_adjustment('Promotion A', -100) - create_adjustment('Promotion B', -200) - create_adjustment('Promotion C', -300) + it "should make all but the most valuable promotion adjustment ineligible, leaving non promotion adjustments alone" do + create_adjustment("Promotion A", -100) + create_adjustment("Promotion B", -200) + create_adjustment("Promotion C", -300) create(:adjustment, order:, - adjustable: line_item, - source: nil, - amount: -500, - finalized: true, - label: 'Some other credit') + adjustable: line_item, + source: nil, + amount: -500, + finalized: true, + label: "Some other credit") line_item.adjustments.each { |item| item.update_column(:eligible, true) } subject expect(line_item.adjustments.promotion.eligible.count).to eq(1) - expect(line_item.adjustments.promotion.eligible.first.label).to eq('Promotion C') + expect(line_item.adjustments.promotion.eligible.first.label).to eq("Promotion C") end - it 'should choose the most recent promotion adjustment when amounts are equal' do + it "should choose the most recent promotion adjustment when amounts are equal" do # Freezing time is a regression test travel_to(Time.current) do - create_adjustment('Promotion A', -200) - create_adjustment('Promotion B', -200) + create_adjustment("Promotion A", -200) + create_adjustment("Promotion B", -200) end line_item.adjustments.each { |item| item.update_column(:eligible, true) } subject expect(line_item.adjustments.promotion.eligible.count).to eq(1) - expect(line_item.adjustments.promotion.eligible.first.label).to eq('Promotion B') + expect(line_item.adjustments.promotion.eligible.first.label).to eq("Promotion B") end - it 'should choose the most recent promotion adjustment when amounts are equal' do + it "should choose the most recent promotion adjustment when amounts are equal" do # Freezing time is a regression test travel_to(Time.current) do - create_adjustment('Promotion A', -200) - create_adjustment('Promotion B', -200) + create_adjustment("Promotion A", -200) + create_adjustment("Promotion B", -200) end line_item.adjustments.each { |item| item.update_column(:eligible, true) } subject expect(line_item.adjustments.promotion.eligible.count).to eq(1) - expect(line_item.adjustments.promotion.eligible.first.label).to eq('Promotion B') + expect(line_item.adjustments.promotion.eligible.first.label).to eq("Promotion B") end - context 'when previously ineligible promotions become available' do + context "when previously ineligible promotions become available" do let(:order_promo1) { create(:promotion, :with_order_adjustment, :with_item_total_rule, weighted_order_adjustment_amount: 5, item_total_threshold_amount: 10) } let(:order_promo2) { create(:promotion, :with_order_adjustment, :with_item_total_rule, weighted_order_adjustment_amount: 10, item_total_threshold_amount: 20) } let(:order_promos) { [order_promo1, order_promo2] } @@ -146,60 +146,60 @@ def create_adjustment(label, amount) # Apply promotions in different sequences. Results should be the same. promo_sequences = [ [0, 1], - [1, 0], + [1, 0] ] promo_sequences.each do |promo_sequence| context "with promo sequence #{promo_sequence}" do - it 'should pick the best order-level promo according to current eligibility' do + it "should pick the best order-level promo according to current eligibility" do # apply both promos to the order, even though only promo1 is eligible order_promos[promo_sequence[0]].activate(order:) order_promos[promo_sequence[1]].activate(order:) subject order.reload - expect(order.all_adjustments.count).to eq(2), 'Expected two adjustments' - expect(order.all_adjustments.eligible.count).to eq(1), 'Expected one elegible adjustment' - expect(order.all_adjustments.eligible.first.source.promotion).to eq(order_promo1), 'Expected promo1 to be used' + expect(order.all_adjustments.count).to eq(2), "Expected two adjustments" + expect(order.all_adjustments.eligible.count).to eq(1), "Expected one elegible adjustment" + expect(order.all_adjustments.eligible.first.source.promotion).to eq(order_promo1), "Expected promo1 to be used" # This will call the described class order.contents.add create(:variant, price: 10), 1 order.save order.reload - expect(order.all_adjustments.count).to eq(2), 'Expected two adjustments' - expect(order.all_adjustments.eligible.count).to eq(1), 'Expected one elegible adjustment' - expect(order.all_adjustments.eligible.first.source.promotion).to eq(order_promo2), 'Expected promo2 to be used' + expect(order.all_adjustments.count).to eq(2), "Expected two adjustments" + expect(order.all_adjustments.eligible.count).to eq(1), "Expected one elegible adjustment" + expect(order.all_adjustments.eligible.first.source.promotion).to eq(order_promo2), "Expected promo2 to be used" end - it 'should pick the best line-item-level promo according to current eligibility' do + it "should pick the best line-item-level promo according to current eligibility" do # apply both promos to the order, even though only promo1 is eligible line_item_promos[promo_sequence[0]].activate(order:) line_item_promos[promo_sequence[1]].activate(order:) order.reload - expect(order.all_adjustments.count).to eq(1), 'Expected one adjustment' - expect(order.all_adjustments.eligible.count).to eq(1), 'Expected one elegible adjustment' + expect(order.all_adjustments.count).to eq(1), "Expected one adjustment" + expect(order.all_adjustments.eligible.count).to eq(1), "Expected one elegible adjustment" # line_item_promo1 is the only one that has thus far met the order total threshold, it is the only promo which should be applied. - expect(order.all_adjustments.first.source.promotion).to eq(line_item_promo1), 'Expected line_item_promo1 to be used' + expect(order.all_adjustments.first.source.promotion).to eq(line_item_promo1), "Expected line_item_promo1 to be used" order.contents.add create(:variant, price: 10), 1 order.save order.reload - expect(order.all_adjustments.count).to eq(4), 'Expected four adjustments' - expect(order.all_adjustments.eligible.count).to eq(2), 'Expected two elegible adjustments' + expect(order.all_adjustments.count).to eq(4), "Expected four adjustments" + expect(order.all_adjustments.eligible.count).to eq(2), "Expected two elegible adjustments" order.all_adjustments.eligible.each do |adjustment| - expect(adjustment.source.promotion).to eq(line_item_promo2), 'Expected line_item_promo2 to be used' + expect(adjustment.source.promotion).to eq(line_item_promo2), "Expected line_item_promo2 to be used" end end end end end - context 'multiple adjustments and the best one is not eligible' do - let!(:promo_a) { create_adjustment('Promotion A', -100) } - let!(:promo_c) { create_adjustment('Promotion C', -300) } + context "multiple adjustments and the best one is not eligible" do + let!(:promo_a) { create_adjustment("Promotion A", -100) } + let!(:promo_c) { create_adjustment("Promotion C", -300) } before do promo_a.update_column(:eligible, true) @@ -207,16 +207,16 @@ def create_adjustment(label, amount) end # regression for https://github.com/spree/spree/issues/3274 - it 'still makes the previous best eligible adjustment valid' do + it "still makes the previous best eligible adjustment valid" do subject - expect(line_item.adjustments.promotion.eligible.first.label).to eq('Promotion A') + expect(line_item.adjustments.promotion.eligible.first.label).to eq("Promotion A") end end - it 'should only leave one adjustment even if 2 have the same amount' do - create_adjustment('Promotion A', -100) - create_adjustment('Promotion B', -200) - create_adjustment('Promotion C', -200) + it "should only leave one adjustment even if 2 have the same amount" do + create_adjustment("Promotion A", -100) + create_adjustment("Promotion B", -200) + create_adjustment("Promotion C", -200) subject diff --git a/legacy_promotions/spec/models/spree/promotion/rules/first_order_spec.rb b/legacy_promotions/spec/models/spree/promotion/rules/first_order_spec.rb index aa64aec627f..6d54d2fb693 100644 --- a/legacy_promotions/spec/models/spree/promotion/rules/first_order_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion/rules/first_order_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Promotion::Rules::FirstOrder, type: :model do let(:rule) { Spree::Promotion::Rules::FirstOrder.new } @@ -11,8 +11,8 @@ it { expect(rule).to be_eligible(order) } it "does not set an error message" do rule.eligible?(order) - expect(rule.eligibility_errors.full_messages.first). - to be_nil + expect(rule.eligibility_errors.full_messages.first) + .to be_nil end end @@ -48,21 +48,21 @@ it { expect(rule).not_to be_eligible(order) } it "sets an error message" do rule.eligible?(order) - expect(rule.eligibility_errors.full_messages.first). - to eq "This coupon code can only be applied to your first order." + expect(rule.eligibility_errors.full_messages.first) + .to eq "This coupon code can only be applied to your first order." end it "sets an error code" do rule.eligible?(order) - expect(rule.eligibility_errors.details[:base].first[:error_code]). - to eq :not_first_order + expect(rule.eligibility_errors.details[:base].first[:error_code]) + .to eq :not_first_order end end end end context "for a guest user" do - let(:email) { 'user@solidus.io' } - before { allow(order).to receive_messages email: 'user@solidus.io' } + let(:email) { "user@solidus.io" } + before { allow(order).to receive_messages email: "user@solidus.io" } context "with no other orders" do it { expect(rule).to be_eligible(order) } @@ -73,13 +73,13 @@ it { expect(rule).not_to be_eligible(order) } it "sets an error message" do rule.eligible?(order) - expect(rule.eligibility_errors.full_messages.first). - to eq "This coupon code can only be applied to your first order." + expect(rule.eligibility_errors.full_messages.first) + .to eq "This coupon code can only be applied to your first order." end it "sets an error code" do rule.eligible?(order) - expect(rule.eligibility_errors.details[:base].first[:error_code]). - to eq :not_first_order + expect(rule.eligibility_errors.details[:base].first[:error_code]) + .to eq :not_first_order end end end diff --git a/legacy_promotions/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb b/legacy_promotions/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb index d3366e6aceb..90153d2d535 100644 --- a/legacy_promotions/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Promotion::Rules::FirstRepeatPurchaseSince do describe "#applicable?" do diff --git a/legacy_promotions/spec/models/spree/promotion/rules/item_total_spec.rb b/legacy_promotions/spec/models/spree/promotion/rules/item_total_spec.rb index 365839d0077..623c1da588e 100644 --- a/legacy_promotions/spec/models/spree/promotion/rules/item_total_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion/rules/item_total_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Promotion::Rules::ItemTotal, type: :model do let(:rule) do @@ -11,10 +11,10 @@ end let(:order) { double(:order, item_total:, currency: order_currency) } let(:preferred_amount) { 50 } - let(:order_currency) { 'USD' } + let(:order_currency) { "USD" } context "preferred operator set to gt" do - let(:preferred_operator) { 'gt' } + let(:preferred_operator) { "gt" } context "item total is greater than preferred amount" do let(:item_total) { 51 } @@ -41,13 +41,13 @@ it "set an error message" do rule.eligible?(order) - expect(rule.eligibility_errors.full_messages.first). - to eq "This coupon code can't be applied to orders less than or equal to $50.00." + expect(rule.eligibility_errors.full_messages.first) + .to eq "This coupon code can't be applied to orders less than or equal to $50.00." end it "sets an error code" do rule.eligible?(order) - expect(rule.eligibility_errors.details[:base].first[:error_code]). - to eq :item_total_less_than_or_equal + expect(rule.eligibility_errors.details[:base].first[:error_code]) + .to eq :item_total_less_than_or_equal end end @@ -60,19 +60,19 @@ it "set an error message" do rule.eligible?(order) - expect(rule.eligibility_errors.full_messages.first). - to eq "This coupon code can't be applied to orders less than or equal to $50.00." + expect(rule.eligibility_errors.full_messages.first) + .to eq "This coupon code can't be applied to orders less than or equal to $50.00." end it "sets an error code" do rule.eligible?(order) - expect(rule.eligibility_errors.details[:base].first[:error_code]). - to eq :item_total_less_than_or_equal + expect(rule.eligibility_errors.details[:base].first[:error_code]) + .to eq :item_total_less_than_or_equal end end end context "preferred operator set to gte" do - let(:preferred_operator) { 'gte' } + let(:preferred_operator) { "gte" } context "total is greater than preferred amount" do let(:item_total) { 51 } @@ -115,13 +115,13 @@ it "set an error message" do rule.eligible?(order) - expect(rule.eligibility_errors.full_messages.first). - to eq "This coupon code can't be applied to orders less than $50.00." + expect(rule.eligibility_errors.full_messages.first) + .to eq "This coupon code can't be applied to orders less than $50.00." end it "sets an error code" do rule.eligible?(order) - expect(rule.eligibility_errors.details[:base].first[:error_code]). - to eq :item_total_less_than + expect(rule.eligibility_errors.details[:base].first[:error_code]) + .to eq :item_total_less_than end end end diff --git a/legacy_promotions/spec/models/spree/promotion/rules/minimum_quantity_spec.rb b/legacy_promotions/spec/models/spree/promotion/rules/minimum_quantity_spec.rb index faf9d8f9c24..bd661b0d524 100644 --- a/legacy_promotions/spec/models/spree/promotion/rules/minimum_quantity_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion/rules/minimum_quantity_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Promotion::Rules::MinimumQuantity do subject(:quantity_rule) { described_class.new(preferred_minimum_quantity: 2) } @@ -51,19 +51,19 @@ context "when only the quantity rule is applied" do context "when the quantity is less than the minimum" do - let(:line_items) { [{ quantity: 1 }] } + let(:line_items) { [{quantity: 1}] } it { is_expected.to be false } end context "when the quantity is equal to the minimum" do - let(:line_items) { [{ quantity: 2 }] } + let(:line_items) { [{quantity: 2}] } it { is_expected.to be true } end context "when the quantity is greater than the minimum" do - let(:line_items) { [{ quantity: 4 }] } + let(:line_items) { [{quantity: 4}] } it { is_expected.to be true } end @@ -86,8 +86,8 @@ context "when the applicable quantity is less than the minimum" do let(:line_items) do [ - { variant: variant_1, quantity: 1 }, - { variant: variant_3, quantity: 1 } + {variant: variant_1, quantity: 1}, + {variant: variant_3, quantity: 1} ] end @@ -97,9 +97,9 @@ context "when the applicable quantity is greater than the minimum" do let(:line_items) do [ - { variant: variant_1, quantity: 1 }, - { variant: variant_2, quantity: 1 }, - { variant: variant_3, quantity: 1 } + {variant: variant_1, quantity: 1}, + {variant: variant_2, quantity: 1}, + {variant: variant_3, quantity: 1} ] end diff --git a/legacy_promotions/spec/models/spree/promotion/rules/nth_order_spec.rb b/legacy_promotions/spec/models/spree/promotion/rules/nth_order_spec.rb index 10a72ded1ea..cf1d4428da5 100644 --- a/legacy_promotions/spec/models/spree/promotion/rules/nth_order_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion/rules/nth_order_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Promotion::Rules::NthOrder do describe "#applicable?" do diff --git a/legacy_promotions/spec/models/spree/promotion/rules/one_use_per_user_spec.rb b/legacy_promotions/spec/models/spree/promotion/rules/one_use_per_user_spec.rb index b504a351e48..d5fca83b7f6 100644 --- a/legacy_promotions/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion/rules/one_use_per_user_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Promotion::Rules::OneUsePerUser, type: :model do let(:rule) { described_class.new } - describe '#eligible?(order)' do + describe "#eligible?(order)" do subject { rule.eligible?(order) } let(:order) { double Spree::Order, user: } let(:user) { double Spree::LegacyUser } @@ -14,40 +14,40 @@ before { rule.promotion = promotion } - context 'when the order is assigned to a user' do - context 'when the user has used this promotion before' do + context "when the order is assigned to a user" do + context "when the user has used this promotion before" do let(:used_by) { true } it { is_expected.to be false } it "sets an error message" do subject - expect(rule.eligibility_errors.full_messages.first). - to eq "This coupon code can only be used once per user." + expect(rule.eligibility_errors.full_messages.first) + .to eq "This coupon code can only be used once per user." end it "sets an error code" do rule.eligible?(order) - expect(rule.eligibility_errors.details[:base].first[:error_code]). - to eq :limit_once_per_user + expect(rule.eligibility_errors.details[:base].first[:error_code]) + .to eq :limit_once_per_user end end - context 'when the user has not used this promotion before' do + context "when the user has not used this promotion before" do it { is_expected.to be true } end end - context 'when the order is not assigned to a user' do + context "when the order is not assigned to a user" do let(:user) { nil } it { is_expected.to be false } it "sets an error message" do subject - expect(rule.eligibility_errors.full_messages.first). - to eq "You need to login before applying this coupon code." + expect(rule.eligibility_errors.full_messages.first) + .to eq "You need to login before applying this coupon code." end it "sets an error code" do rule.eligible?(order) - expect(rule.eligibility_errors.details[:base].first[:error_code]). - to eq :no_user_specified + expect(rule.eligibility_errors.details[:base].first[:error_code]) + .to eq :no_user_specified end end end diff --git a/legacy_promotions/spec/models/spree/promotion/rules/option_value_spec.rb b/legacy_promotions/spec/models/spree/promotion/rules/option_value_spec.rb index 1cf134dde66..8adabef835c 100644 --- a/legacy_promotions/spec/models/spree/promotion/rules/option_value_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion/rules/option_value_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Promotion::Rules::OptionValue do let(:rule) { Spree::Promotion::Rules::OptionValue.new } @@ -8,8 +8,8 @@ describe "#preferred_eligible_values" do subject { rule.preferred_eligible_values } it "assigns a nicely formatted hash" do - rule.preferred_eligible_values = Hash["5" => "1,2", "6" => "1"] - expect(subject).to eq Hash[5 => [1, 2], 6 => [1]] + rule.preferred_eligible_values = {"5" => "1,2", "6" => "1"} + expect(subject).to eq({5 => [1, 2], 6 => [1]}) end end @@ -32,15 +32,17 @@ subject { rule.eligible?(promotable) } context "when there are any applicable line items" do before do - rule.preferred_eligible_values = Hash[line_item.product.id => [ - line_item.variant.option_values.pick(:id) - ]] + rule.preferred_eligible_values = { + line_item.product.id => [ + line_item.variant.option_values.pick(:id) + ] + } end it { is_expected.to be true } end context "when there are no applicable line items" do before do - rule.preferred_eligible_values = Hash[99 => [99]] + rule.preferred_eligible_values = {99 => [99]} end it { is_expected.to be false } end @@ -51,25 +53,25 @@ let(:option_value_blue) do create( :option_value, - name: 'Blue', - presentation: 'Blue', + name: "Blue", + presentation: "Blue", option_type: create( :option_type, - name: 'foo-colour', - presentation: 'Colour' + name: "foo-colour", + presentation: "Colour" ) ) end let(:option_value_medium) do create( :option_value, - name: 'Medium', - presentation: 'M' + name: "Medium", + presentation: "M" ) end before do line_item.variant.option_values << option_value_blue - rule.preferred_eligible_values = Hash[product_id => option_value_ids] + rule.preferred_eligible_values = {product_id => option_value_ids} end subject { rule.actionable?(line_item) } context "when the line item has the correct product" do diff --git a/legacy_promotions/spec/models/spree/promotion/rules/product_spec.rb b/legacy_promotions/spec/models/spree/promotion/rules/product_spec.rb index 2c6f5ee743c..696d7119385 100644 --- a/legacy_promotions/spec/models/spree/promotion/rules/product_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion/rules/product_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Promotion::Rules::Product, type: :model do let(:rule) { Spree::Promotion::Rules::Product.new(rule_options) } @@ -35,13 +35,13 @@ it { expect(rule).not_to be_eligible(order) } it "sets an error message" do rule.eligible?(order) - expect(rule.eligibility_errors.full_messages.first). - to eq "You need to add an applicable product before applying this coupon code." + expect(rule.eligibility_errors.full_messages.first) + .to eq "You need to add an applicable product before applying this coupon code." end it "sets an error code" do rule.eligible?(order) - expect(rule.eligibility_errors.details[:base].first[:error_code]). - to eq :no_applicable_products + expect(rule.eligibility_errors.details[:base].first[:error_code]) + .to eq :no_applicable_products end end end @@ -63,13 +63,13 @@ it { expect(rule).not_to be_eligible(order) } it "sets an error message" do rule.eligible?(order) - expect(rule.eligibility_errors.full_messages.first). - to eq "This coupon code can't be applied because you don't have all of the necessary products in your cart." + expect(rule.eligibility_errors.full_messages.first) + .to eq "This coupon code can't be applied because you don't have all of the necessary products in your cart." end it "sets an error code" do rule.eligible?(order) - expect(rule.eligibility_errors.details[:base].first[:error_code]). - to eq :missing_product + expect(rule.eligibility_errors.details[:base].first[:error_code]) + .to eq :missing_product end end end @@ -91,13 +91,13 @@ it { expect(rule).not_to be_eligible(order) } it "sets an error message" do rule.eligible?(order) - expect(rule.eligibility_errors.full_messages.first). - to eq "Your cart contains a product that prevents this coupon code from being applied." + expect(rule.eligibility_errors.full_messages.first) + .to eq "Your cart contains a product that prevents this coupon code from being applied." end it "sets an error code" do rule.eligible?(order) - expect(rule.eligibility_errors.details[:base].first[:error_code]). - to eq :has_excluded_product + expect(rule.eligibility_errors.details[:base].first[:error_code]) + .to eq :has_excluded_product end end end @@ -107,17 +107,17 @@ Spree::Promotion::Rules::Product.create!( promotion: create(:promotion), product_promotion_rules: [ - Spree::ProductPromotionRule.new(product:), - ], + Spree::ProductPromotionRule.new(product:) + ] ).tap do |rule| - rule.preferred_match_policy = 'invalid' + rule.preferred_match_policy = "invalid" rule.save!(validate: false) end end let(:product) { order.line_items.first!.product } let(:order) { create(:order_with_line_items, line_items_count: 1) } - it 'raises' do + it "raises" do expect { rule.eligible?(order) }.to raise_error('unexpected match policy: "invalid"') @@ -125,7 +125,7 @@ end end - describe '#actionable?' do + describe "#actionable?" do subject do rule.actionable?(line_item) end @@ -137,52 +137,52 @@ let(:rule_product) { build :product } context "with 'any' match policy" do - let(:rule_options) { super().merge(preferred_match_policy: 'any') } + let(:rule_options) { super().merge(preferred_match_policy: "any") } - context 'for product in rule' do + context "for product in rule" do let(:line_item) { rule_line_item } it { is_expected.to be_truthy } end - context 'for product not in rule' do + context "for product not in rule" do let(:line_item) { other_line_item } it { is_expected.to be_falsey } end end context "with 'all' match policy" do - let(:rule_options) { super().merge(preferred_match_policy: 'all') } + let(:rule_options) { super().merge(preferred_match_policy: "all") } - context 'for product in rule' do + context "for product in rule" do let(:line_item) { rule_line_item } it { is_expected.to be_truthy } end - context 'for product not in rule' do + context "for product not in rule" do let(:line_item) { other_line_item } it { is_expected.to be_falsey } end end context "with 'none' match policy" do - let(:rule_options) { super().merge(preferred_match_policy: 'none') } + let(:rule_options) { super().merge(preferred_match_policy: "none") } - context 'for product in rule' do + context "for product in rule" do let(:line_item) { rule_line_item } it { is_expected.to be_falsey } end - context 'for product not in rule' do + context "for product not in rule" do let(:line_item) { other_line_item } it { is_expected.to be_truthy } end end - context 'with an invalid match policy' do - let(:rule_options) { super().merge(preferred_match_policy: 'invalid') } + context "with an invalid match policy" do + let(:rule_options) { super().merge(preferred_match_policy: "invalid") } let(:line_item) { rule_line_item } - it 'raises' do + it "raises" do expect { rule.actionable?(line_item) }.to raise_error('unexpected match policy: "invalid"') diff --git a/legacy_promotions/spec/models/spree/promotion/rules/taxon_spec.rb b/legacy_promotions/spec/models/spree/promotion/rules/taxon_spec.rb index 322be092b4e..19c74765348 100644 --- a/legacy_promotions/spec/models/spree/promotion/rules/taxon_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion/rules/taxon_spec.rb @@ -1,40 +1,40 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Promotion::Rules::Taxon, type: :model do - let(:taxon) { create :taxon, name: 'first' } - let(:taxon2) { create :taxon, name: 'second' } - let(:order) { create :order_with_line_items } + let(:taxon) { create :taxon, name: "first" } + let(:taxon2) { create :taxon, name: "second" } + let(:order) { create :order_with_line_items } let(:product) { order.products.first } let(:rule) do Spree::Promotion::Rules::Taxon.create!(promotion: create(:promotion)) end - context '#eligible?(order)' do - context 'with any match policy' do + context "#eligible?(order)" do + context "with any match policy" do before do - rule.update!(preferred_match_policy: 'any') + rule.update!(preferred_match_policy: "any") end - it 'is eligible if order does have any prefered taxon' do + it "is eligible if order does have any prefered taxon" do product.taxons << taxon rule.taxons << taxon expect(rule).to be_eligible(order) end - context 'when order contains items from different taxons' do + context "when order contains items from different taxons" do before do product.taxons << taxon rule.taxons << taxon end - it 'should act on a product within the eligible taxon' do + it "should act on a product within the eligible taxon" do expect(rule).to be_actionable(order.line_items.last) end - it 'should not act on a product in another taxon' do + it "should not act on a product in another taxon" do order.line_items << create(:line_item, product: create(:product, taxons: [taxon2])) expect(rule).not_to be_actionable(order.line_items.last) end @@ -45,33 +45,33 @@ it { expect(rule).not_to be_eligible(order) } it "sets an error message" do rule.eligible?(order) - expect(rule.eligibility_errors.full_messages.first). - to eq "You need to add a product from an applicable category before applying this coupon code." + expect(rule.eligibility_errors.full_messages.first) + .to eq "You need to add a product from an applicable category before applying this coupon code." end it "sets an error code" do rule.eligible?(order) - expect(rule.eligibility_errors.details[:base].first[:error_code]). - to eq :no_matching_taxons + expect(rule.eligibility_errors.details[:base].first[:error_code]) + .to eq :no_matching_taxons end end - context 'when a product has a taxon child of a taxon rule' do + context "when a product has a taxon child of a taxon rule" do before do taxon.children << taxon2 product.taxons << taxon2 rule.taxons << taxon end - it{ expect(rule).to be_eligible(order) } + it { expect(rule).to be_eligible(order) } end end - context 'with all match policy' do + context "with all match policy" do before do - rule.update!(preferred_match_policy: 'all') + rule.update!(preferred_match_policy: "all") end - it 'is eligible order has all prefered taxons' do + it "is eligible order has all prefered taxons" do product.taxons << taxon2 order.products.last.taxons << taxon @@ -85,17 +85,17 @@ it { expect(rule).not_to be_eligible(order) } it "sets an error message" do rule.eligible?(order) - expect(rule.eligibility_errors.full_messages.first). - to eq "You need to add a product from all applicable categories before applying this coupon code." + expect(rule.eligibility_errors.full_messages.first) + .to eq "You need to add a product from all applicable categories before applying this coupon code." end it "sets an error code" do rule.eligible?(order) - expect(rule.eligibility_errors.details[:base].first[:error_code]). - to eq :missing_taxon + expect(rule.eligibility_errors.details[:base].first[:error_code]) + .to eq :missing_taxon end end - context 'when a product has a taxon child of a taxon rule' do + context "when a product has a taxon child of a taxon rule" do let(:taxon3) { create :taxon } before do @@ -111,9 +111,9 @@ end end - context 'with none match policy' do + context "with none match policy" do before do - rule.preferred_match_policy = 'none' + rule.preferred_match_policy = "none" end context "none of the order's products are in listed taxon" do @@ -131,26 +131,26 @@ end it "sets an error message" do rule.eligible?(order) - expect(rule.eligibility_errors.full_messages.first). - to eq "Your cart contains a product from an excluded category that prevents this coupon code from being applied." + expect(rule.eligibility_errors.full_messages.first) + .to eq "Your cart contains a product from an excluded category that prevents this coupon code from being applied." end it "sets an error code" do rule.eligible?(order) - expect(rule.eligibility_errors.details[:base].first[:error_code]). - to eq :has_excluded_taxon + expect(rule.eligibility_errors.details[:base].first[:error_code]) + .to eq :has_excluded_taxon end end end - context 'with an invalid match policy' do + context "with an invalid match policy" do before do order.products.first.taxons << taxon rule.taxons << taxon - rule.preferred_match_policy = 'invalid' + rule.preferred_match_policy = "invalid" rule.save!(validate: false) end - it 'raises' do + it "raises" do expect { rule.eligible?(order) }.to raise_error('unexpected match policy: "invalid"') @@ -158,39 +158,39 @@ end end - describe '#actionable?' do + describe "#actionable?" do let(:line_item) { order.line_items.first! } let(:order) { create :order_with_line_items } - let(:taxon) { create :taxon, name: 'first' } + let(:taxon) { create :taxon, name: "first" } - context 'with an invalid match policy' do + context "with an invalid match policy" do before do - rule.preferred_match_policy = 'invalid' + rule.preferred_match_policy = "invalid" rule.save!(validate: false) line_item.product.taxons << taxon rule.taxons << taxon end - it 'raises' do + it "raises" do expect { rule.eligible?(order) }.to raise_error('unexpected match policy: "invalid"') end end - context 'when a product has a taxon of a taxon rule' do + context "when a product has a taxon of a taxon rule" do before do product.taxons << taxon rule.taxons << taxon rule.save! end - it 'is actionable' do + it "is actionable" do expect(rule).to be_actionable(line_item) end end - context 'when a product has a taxon child of a taxon rule' do + context "when a product has a taxon child of a taxon rule" do before do taxon.children << taxon2 product.taxons << taxon2 @@ -198,19 +198,19 @@ rule.save! end - it 'is actionable' do + it "is actionable" do expect(rule).to be_actionable(line_item) end end - context 'when a product does not have taxon or child taxon of a taxon rule' do + context "when a product does not have taxon or child taxon of a taxon rule" do before do product.taxons << taxon2 rule.taxons << taxon rule.save! end - it 'is not actionable' do + it "is not actionable" do expect(rule).not_to be_actionable(line_item) end end diff --git a/legacy_promotions/spec/models/spree/promotion/rules/user_logged_in_spec.rb b/legacy_promotions/spec/models/spree/promotion/rules/user_logged_in_spec.rb index c185a3df32d..2e480f04e88 100644 --- a/legacy_promotions/spec/models/spree/promotion/rules/user_logged_in_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion/rules/user_logged_in_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Promotion::Rules::UserLoggedIn, type: :model do let(:rule) { Spree::Promotion::Rules::UserLoggedIn.new } @@ -9,7 +9,7 @@ let(:order) { Spree::Order.new } it "should be eligible if order has an associated user" do - user = double('User') + user = double("User") allow(order).to receive_messages(user:) expect(rule).to be_eligible(order) @@ -20,13 +20,13 @@ it { expect(rule).not_to be_eligible(order) } it "sets an error message" do rule.eligible?(order) - expect(rule.eligibility_errors.full_messages.first). - to eq "You need to login before applying this coupon code." + expect(rule.eligibility_errors.full_messages.first) + .to eq "You need to login before applying this coupon code." end it "sets an error code" do rule.eligible?(order) - expect(rule.eligibility_errors.details[:base].first[:error_code]). - to eq :no_user_specified + expect(rule.eligibility_errors.details[:base].first[:error_code]) + .to eq :no_user_specified end end end diff --git a/legacy_promotions/spec/models/spree/promotion/rules/user_role_spec.rb b/legacy_promotions/spec/models/spree/promotion/rules/user_role_spec.rb index 73a8e65484c..de9c01860b2 100644 --- a/legacy_promotions/spec/models/spree/promotion/rules/user_role_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion/rules/user_role_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Promotion::Rules::UserRole, type: :model do let(:rule) { described_class.new(preferred_role_ids: roles_for_rule.map(&:id)) } @@ -10,75 +10,75 @@ subject { rule } - shared_examples 'eligibility' do - context 'no roles on rule' do + shared_examples "eligibility" do + context "no roles on rule" do let(:roles_for_user) { [create(:role)] } - it 'should not be eligible' do + it "should not be eligible" do expect(rule).to_not be_eligible(order) end end - context 'no roles on user' do + context "no roles on user" do let(:roles_for_rule) { [create(:role)] } - it 'should not be eligible' do + it "should not be eligible" do expect(rule).to_not be_eligible(order) end end - context 'mismatched roles' do + context "mismatched roles" do let(:roles_for_user) { [create(:role)] } let(:roles_for_rule) { [create(:role)] } - it 'should not be eligible' do + it "should not be eligible" do expect(rule).to_not be_eligible(order) end end - context 'matching all roles' do + context "matching all roles" do let(:roles_for_user) { [create(:role), create(:role)] } let(:roles_for_rule) { roles_for_user } - it 'should be eligible' do + it "should be eligible" do expect(rule).to be_eligible(order) end end end - context '#eligible?(order)' do - context 'order with no user' do + context "#eligible?(order)" do + context "order with no user" do let(:order) { Spree::Order.new } - it 'should not be eligible' do + it "should not be eligible" do expect(rule).to_not be_eligible(order) end end - context 'order with user' do + context "order with user" do let(:order) { Spree::Order.new(user:) } - context 'with any match policy' do - before { rule.preferred_match_policy = 'any' } + context "with any match policy" do + before { rule.preferred_match_policy = "any" } - include_examples 'eligibility' + include_examples "eligibility" - context 'one shared role' do + context "one shared role" do let(:shared_role) { create(:role) } let(:roles_for_user) { [create(:role), shared_role] } let(:roles_for_rule) { [create(:role), shared_role] } - it 'should be eligible' do + it "should be eligible" do expect(rule).to be_eligible(order) end end end - context 'with all match policy' do - before { rule.preferred_match_policy = 'all' } + context "with all match policy" do + before { rule.preferred_match_policy = "all" } - include_examples 'eligibility' + include_examples "eligibility" - context 'one shared role' do + context "one shared role" do let(:shared_role) { create(:role) } let(:roles_for_user) { [create(:role), shared_role] } let(:roles_for_rule) { [create(:role), shared_role] } - it 'should not be eligible' do + it "should not be eligible" do expect(rule).to_not be_eligible(order) end end diff --git a/legacy_promotions/spec/models/spree/promotion/rules/user_spec.rb b/legacy_promotions/spec/models/spree/promotion/rules/user_spec.rb index 0354726750a..bd0a5154501 100644 --- a/legacy_promotions/spec/models/spree/promotion/rules/user_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion/rules/user_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Promotion::Rules::User, type: :model do let(:rule) { Spree::Promotion::Rules::User.new } diff --git a/legacy_promotions/spec/models/spree/promotion_action_spec.rb b/legacy_promotions/spec/models/spree/promotion_action_spec.rb index 4f17b2d26c3..4f8fc21792a 100644 --- a/legacy_promotions/spec/models/spree/promotion_action_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion_action_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::PromotionAction, type: :model do describe "preferences" do @@ -9,16 +9,16 @@ it { is_expected.to eq({}) } end - describe '#remove_from' do + describe "#remove_from" do class MyPromotionAction < Spree::PromotionAction def perform(options = {}) order = options[:order] - order.adjustments.create!(amount: 1, order:, source: self, label: 'foo') + order.adjustments.create!(amount: 1, order:, source: self, label: "foo") true end def remove_from(_order) - 'Implement your remove logic' + "Implement your remove logic" end end @@ -33,29 +33,29 @@ def remove_from(_order) action.perform(order:) @action_adjustment = order.adjustments.where(source: action).first! - expect(action.to_partial_path).to eq 'spree/admin/promotions/actions/my_promotion_action' + expect(action.to_partial_path).to eq "spree/admin/promotions/actions/my_promotion_action" end - it 'executes the remove logic' do + it "executes the remove logic" do action.perform(order:) @action_adjustment = order.adjustments.where(source: action).first! - expect(action.remove_from(order)).to eq('Implement your remove logic') + expect(action.remove_from(order)).to eq("Implement your remove logic") end context "when PromotionAction doesn't implement perform method" do before { MyPromotionAction.remove_method :perform } - it 'raises RuntimeError' do - expect { action.perform }.to raise_error(RuntimeError, 'perform should be implemented in a sub-class of PromotionAction') + it "raises RuntimeError" do + expect { action.perform }.to raise_error(RuntimeError, "perform should be implemented in a sub-class of PromotionAction") end end context "when PromotionAction doesn't implement remove_from method" do before { MyPromotionAction.remove_method :remove_from } - it 'raises RuntimeError' do - expect { action.remove_from(order) }.to raise_error(RuntimeError, 'remove_from should be implemented in a sub-class of PromotionAction') + it "raises RuntimeError" do + expect { action.remove_from(order) }.to raise_error(RuntimeError, "remove_from should be implemented in a sub-class of PromotionAction") end end end diff --git a/legacy_promotions/spec/models/spree/promotion_category_spec.rb b/legacy_promotions/spec/models/spree/promotion_category_spec.rb index 934cf23e9a9..44b4a31e098 100644 --- a/legacy_promotions/spec/models/spree/promotion_category_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion_category_spec.rb @@ -1,17 +1,17 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::PromotionCategory, type: :model do - describe 'validation' do - let(:name) { 'Nom' } + describe "validation" do + let(:name) { "Nom" } subject { Spree::PromotionCategory.new name: } - context 'when all required attributes are specified' do + context "when all required attributes are specified" do it { is_expected.to be_valid } end - context 'when name is missing' do + context "when name is missing" do let(:name) { nil } it { is_expected.not_to be_valid } end diff --git a/legacy_promotions/spec/models/spree/promotion_code_batch_spec.rb b/legacy_promotions/spec/models/spree/promotion_code_batch_spec.rb index 67c08defdda..3d26fad1363 100644 --- a/legacy_promotions/spec/models/spree/promotion_code_batch_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion_code_batch_spec.rb @@ -31,7 +31,7 @@ before { subject.update_attribute(:state, "processing") } it "should raise an error" do - expect{ subject.process }.to raise_error Spree::PromotionCodeBatch::CantProcessStartedBatch + expect { subject.process }.to raise_error Spree::PromotionCodeBatch::CantProcessStartedBatch end end @@ -39,7 +39,7 @@ before { subject.update_attribute(:state, "completed") } it "should raise an error" do - expect{ subject.process }.to raise_error Spree::PromotionCodeBatch::CantProcessStartedBatch + expect { subject.process }.to raise_error Spree::PromotionCodeBatch::CantProcessStartedBatch end end @@ -47,7 +47,7 @@ before { subject.update_attribute(:state, "failed") } it "should raise an error" do - expect{ subject.process }.to raise_error Spree::PromotionCodeBatch::CantProcessStartedBatch + expect { subject.process }.to raise_error Spree::PromotionCodeBatch::CantProcessStartedBatch end end end diff --git a/legacy_promotions/spec/models/spree/promotion_code_spec.rb b/legacy_promotions/spec/models/spree/promotion_code_spec.rb index b16311c5fe0..d556bda6c6f 100644 --- a/legacy_promotions/spec/models/spree/promotion_code_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion_code_spec.rb @@ -1,59 +1,59 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::PromotionCode do - context 'callbacks' do + context "callbacks" do subject { promotion_code.save } - describe '#normalize_code' do + describe "#normalize_code" do let(:promotion) { create(:promotion, code:) } before { subject } - context 'when no other code with the same value exists' do + context "when no other code with the same value exists" do let(:promotion_code) { promotion.codes.first } - context 'with mixed case' do - let(:code) { 'NewCoDe' } + context "with mixed case" do + let(:code) { "NewCoDe" } - it 'downcases the value before saving' do - expect(promotion_code.value).to eq('newcode') + it "downcases the value before saving" do + expect(promotion_code.value).to eq("newcode") end end - context 'with extra spacing' do - let(:code) { ' new code ' } + context "with extra spacing" do + let(:code) { " new code " } - it 'removes surrounding whitespace' do - expect(promotion_code.value).to eq 'new code' + it "removes surrounding whitespace" do + expect(promotion_code.value).to eq "new code" end end end - context 'when another code with the same value exists' do + context "when another code with the same value exists" do let(:promotion_code) { promotion.codes.build(value: code) } - context 'with mixed case' do - let(:code) { 'NewCoDe' } + context "with mixed case" do + let(:code) { "NewCoDe" } - it 'does not save the record and marks it as invalid' do + it "does not save the record and marks it as invalid" do expect(promotion_code.valid?).to eq false expect(promotion_code.errors.messages[:value]).to contain_exactly( - 'has already been taken' + "has already been taken" ) end end - context 'with extra spacing' do - let(:code) { ' new code ' } + context "with extra spacing" do + let(:code) { " new code " } - it 'does not save the record and marks it as invalid' do + it "does not save the record and marks it as invalid" do expect(promotion_code.valid?).to eq false expect(promotion_code.errors.messages[:value]).to contain_exactly( - 'has already been taken' + "has already been taken" ) end end @@ -182,7 +182,7 @@ context "and the order is canceled" do before { order.cancel! } it { is_expected.to eq 0 } - it { expect(order.state).to eq 'canceled' } + it { expect(order.state).to eq "canceled" } end end end diff --git a/legacy_promotions/spec/models/spree/promotion_handler/cart_spec.rb b/legacy_promotions/spec/models/spree/promotion_handler/cart_spec.rb index 9db3fac966d..eef84a22d32 100644 --- a/legacy_promotions/spec/models/spree/promotion_handler/cart_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion_handler/cart_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module PromotionHandler @@ -62,7 +62,7 @@ module PromotionHandler context "promotion has item total rule" do let(:shirt) { create(:product) } - let!(:rule) { Promotion::Rules::ItemTotal.create(preferred_operator: 'gt', preferred_amount: 50, promotion:) } + let!(:rule) { Promotion::Rules::ItemTotal.create(preferred_operator: "gt", preferred_amount: 50, promotion:) } before do # Makes the order eligible for this promotion @@ -92,7 +92,7 @@ module PromotionHandler context "promotion has item total rule" do let(:shirt) { create(:product) } - let!(:rule) { Promotion::Rules::ItemTotal.create(preferred_operator: 'gt', preferred_amount: 50, promotion:) } + let!(:rule) { Promotion::Rules::ItemTotal.create(preferred_operator: "gt", preferred_amount: 50, promotion:) } before do # Makes the order eligible for this promotion @@ -106,7 +106,7 @@ module PromotionHandler end context "activates promotions associated with the order" do - let(:promotion) { create :promotion, :with_order_adjustment, code: 'promo' } + let(:promotion) { create :promotion, :with_order_adjustment, code: "promo" } let(:promotion_code) { promotion.codes.first } let(:adjustable) { order } diff --git a/legacy_promotions/spec/models/spree/promotion_handler/coupon_spec.rb b/legacy_promotions/spec/models/spree/promotion_handler/coupon_spec.rb index 2f637792f0a..efb31fc49e7 100644 --- a/legacy_promotions/spec/models/spree/promotion_handler/coupon_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion_handler/coupon_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module PromotionHandler @@ -53,52 +53,52 @@ def expect_adjustment_creation(adjustable:, promotion:, promotion_code: nil) end end - context 'status messages' do + context "status messages" do let(:coupon) { Coupon.new(order) } describe "#set_success_code" do let(:status) { :coupon_code_applied } subject { coupon.set_success_code status } - it 'should have status_code' do + it "should have status_code" do subject expect(coupon.status_code).to eq(status) end - it 'should have success message' do + it "should have success message" do subject - expect(coupon.success).to eq(I18n.t(status, scope: 'spree')) + expect(coupon.success).to eq(I18n.t(status, scope: "spree")) end end describe "#set_error_code" do subject { coupon.set_error_code status } - context 'not found' do + context "not found" do let(:status) { :coupon_code_not_found } - it 'has status_code' do + it "has status_code" do subject expect(coupon.status_code).to eq(status) end - it 'has error message' do + it "has error message" do subject - expect(coupon.error).to eq(I18n.t(status, scope: 'spree')) + expect(coupon.error).to eq(I18n.t(status, scope: "spree")) end end - context 'not present' do + context "not present" do let(:status) { :coupon_code_not_present } - it 'has status_code' do + it "has status_code" do subject expect(coupon.status_code).to eq(status) end - it 'has error message' do + it "has error message" do subject - expect(coupon.error).to eq(I18n.t(status, scope: 'spree')) + expect(coupon.error).to eq(I18n.t(status, scope: "spree")) end end end @@ -116,14 +116,14 @@ def expect_adjustment_creation(adjustable:, promotion:, promotion_code: nil) it "populates error message" do subject.apply - expect(subject.error).to eq I18n.t('spree.coupon_code_not_found') + expect(subject.error).to eq I18n.t("spree.coupon_code_not_found") end end end context "existing coupon code promotion" do let!(:promotion) { promotion_code.promotion } - let(:promotion_code) { create(:promotion_code, value: '10off') } + let(:promotion_code) { create(:promotion_code, value: "10off") } let!(:action) { Promotion::Actions::CreateItemAdjustments.create(promotion:, calculator:) } let(:calculator) { Calculator::FlatRate.new(preferred_amount: 10) } @@ -154,7 +154,7 @@ def expect_adjustment_creation(adjustable:, promotion:, promotion_code: nil) subject.apply expect(subject.success).to be_present subject.apply - expect(subject.error).to eq I18n.t('spree.coupon_code_already_applied') + expect(subject.error).to eq I18n.t("spree.coupon_code_already_applied") end end @@ -246,7 +246,7 @@ def expect_adjustment_creation(adjustable:, promotion:, promotion_code: nil) subject.apply expect(subject.success).to be_present subject.apply - expect(subject.error).to eq I18n.t('spree.coupon_code_already_applied') + expect(subject.error).to eq I18n.t("spree.coupon_code_already_applied") end end end @@ -284,7 +284,7 @@ def expect_adjustment_creation(adjustable:, promotion:, promotion_code: nil) it "returns a coupon has already been applied error" do subject.apply - expect(subject.error).to eq I18n.t('spree.coupon_code_already_applied') + expect(subject.error).to eq I18n.t("spree.coupon_code_already_applied") end end @@ -298,7 +298,7 @@ def expect_adjustment_creation(adjustable:, promotion:, promotion_code: nil) it "returns a coupon failed to activate error" do subject.apply - expect(subject.error).to eq I18n.t('spree.coupon_code_unknown_error') + expect(subject.error).to eq I18n.t("spree.coupon_code_unknown_error") end end @@ -317,7 +317,7 @@ def expect_adjustment_creation(adjustable:, promotion:, promotion_code: nil) it "returns a coupon is at max usage error" do subject.apply - expect(subject.error).to eq I18n.t('spree.coupon_code_max_usage') + expect(subject.error).to eq I18n.t("spree.coupon_code_max_usage") end end end @@ -328,7 +328,7 @@ def expect_adjustment_creation(adjustable:, promotion:, promotion_code: nil) let(:order) { create(:order, store:) } let(:tax_category) { create(:tax_category, name: "Taxable Foo") } let(:zone) { create(:zone, :with_country) } - let!(:tax_rate) { create(:tax_rate, amount: 0.1, tax_categories: [tax_category], zone: ) } + let!(:tax_rate) { create(:tax_rate, amount: 0.1, tax_categories: [tax_category], zone:) } before(:each) do expect(order).to receive(:tax_address).at_least(:once).and_return(Spree::Tax::TaxLocation.new(country: zone.countries.first)) @@ -383,7 +383,7 @@ def expect_adjustment_creation(adjustable:, promotion:, promotion_code: nil) twnty_off = create(:promotion, name: "promo", code: "20off") twnty_off_calc = Calculator::FlatRate.new(preferred_amount: 20) Promotion::Actions::CreateItemAdjustments.create(promotion: twnty_off, - calculator: twnty_off_calc) + calculator: twnty_off_calc) order.coupon_code = "20off" @@ -407,39 +407,39 @@ def expect_adjustment_creation(adjustable:, promotion:, promotion_code: nil) end end - context 'removing a coupon code from an order' do + context "removing a coupon code from an order" do let!(:promotion) { promotion_code.promotion } - let(:promotion_code) { create(:promotion_code, value: '10off') } + let(:promotion_code) { create(:promotion_code, value: "10off") } let!(:action) { Promotion::Actions::CreateItemAdjustments.create(promotion:, calculator:) } let(:calculator) { Calculator::FlatRate.new(preferred_amount: 10) } let(:order) { create(:order_with_line_items, line_items_count: 3) } - context 'with an already applied coupon' do + context "with an already applied coupon" do before do - order.coupon_code = '10off' + order.coupon_code = "10off" subject.apply order.reload expect(order.total).to eq(100) end - it 'successfully removes the coupon code from the order' do + it "successfully removes the coupon code from the order" do subject.remove expect(subject.error).to eq nil - expect(subject.success).to eq I18n.t('spree.coupon_code_removed') + expect(subject.success).to eq I18n.t("spree.coupon_code_removed") expect(order.reload.total).to eq(130) end end - context 'with a coupon code not applied to an order' do + context "with a coupon code not applied to an order" do before do - order.coupon_code = '10off' + order.coupon_code = "10off" expect(order.total).to eq(130) end - it 'returns an error' do + it "returns an error" do subject.remove expect(subject.success).to eq nil - expect(subject.error).to eq I18n.t('spree.coupon_code_not_present') + expect(subject.error).to eq I18n.t("spree.coupon_code_not_present") expect(order.reload.total).to eq(130) end end diff --git a/legacy_promotions/spec/models/spree/promotion_handler/page_spec.rb b/legacy_promotions/spec/models/spree/promotion_handler/page_spec.rb index ad3c59cd3b6..6c81607500f 100644 --- a/legacy_promotions/spec/models/spree/promotion_handler/page_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion_handler/page_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module PromotionHandler RSpec.describe Page, type: :model do let(:order) { create(:order_with_line_items, line_items_count: 1) } - let(:promotion) { Promotion.create(name: "10% off", path: '10off') } + let(:promotion) { Promotion.create(name: "10% off", path: "10off") } before do calculator = Calculator::FlatPercentItemTotal.new(preferred_flat_percent: 10) action = Promotion::Actions::CreateItemAdjustments.create(calculator:) @@ -16,7 +16,7 @@ module PromotionHandler it "activates at the right path" do expect(order.line_item_adjustments.count).to eq(0) - Spree::PromotionHandler::Page.new(order, '10off').activate + Spree::PromotionHandler::Page.new(order, "10off").activate expect(order.line_item_adjustments.count).to eq(1) end @@ -30,14 +30,14 @@ module PromotionHandler it "is not activated" do expect(order.line_item_adjustments.count).to eq(0) - Spree::PromotionHandler::Page.new(order, '10off').activate + Spree::PromotionHandler::Page.new(order, "10off").activate expect(order.line_item_adjustments.count).to eq(0) end end it "does not activate at the wrong path" do expect(order.line_item_adjustments.count).to eq(0) - Spree::PromotionHandler::Page.new(order, 'wrongpath').activate + Spree::PromotionHandler::Page.new(order, "wrongpath").activate expect(order.line_item_adjustments.count).to eq(0) end end diff --git a/legacy_promotions/spec/models/spree/promotion_handler/shipping_spec.rb b/legacy_promotions/spec/models/spree/promotion_handler/shipping_spec.rb index dc1c08a5d32..2545c97bb03 100644 --- a/legacy_promotions/spec/models/spree/promotion_handler/shipping_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion_handler/shipping_spec.rb @@ -1,31 +1,31 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree module PromotionHandler RSpec.describe Shipping, type: :model do let(:order) { create(:order) } - let(:shipment) { create(:shipment, order: ) } + let(:shipment) { create(:shipment, order:) } let(:action) { Spree::Promotion::Actions::FreeShipping.new } subject { Spree::PromotionHandler::Shipping.new(order) } before do - allow(Spree::Config.promotions).to receive(:shipping_actions) { ['Spree::Promotion::Actions::FreeShipping'] } + allow(Spree::Config.promotions).to receive(:shipping_actions) { ["Spree::Promotion::Actions::FreeShipping"] } end - context 'with apply_automatically' do + context "with apply_automatically" do let!(:promotion) { create(:promotion, apply_automatically: true, promotion_actions: [action]) } - context 'for eligible promotion' do + context "for eligible promotion" do it "creates the adjustment" do expect { subject.activate }.to change { shipment.adjustments.count }.by(1) end end - context 'for ineligible promotion' do + context "for ineligible promotion" do let!(:promotion) do create(:promotion, :with_item_total_rule, item_total_threshold_amount: 1_000, apply_automatically: true, promotion_actions: [action]) end @@ -36,30 +36,30 @@ module PromotionHandler end end - context 'with a code' do - let!(:promotion) { create(:promotion, code: 'freeshipping', promotion_actions: [action]) } + context "with a code" do + let!(:promotion) { create(:promotion, code: "freeshipping", promotion_actions: [action]) } - context 'when already applied' do + context "when already applied" do before do order.order_promotions.create!(promotion:, promotion_code: promotion.codes.first) end - it 'adjusts the shipment' do + it "adjusts the shipment" do expect { subject.activate }.to change { shipment.adjustments.count } end - context 'when currently ineligible' do + context "when currently ineligible" do let(:promotion) do - create(:promotion, :with_item_total_rule, item_total_threshold_amount: 1_000, code: 'freeshipping', promotion_actions: [action]) + create(:promotion, :with_item_total_rule, item_total_threshold_amount: 1_000, code: "freeshipping", promotion_actions: [action]) end before do order.order_promotions.create!(promotion:, promotion_code: promotion.codes.first) end - it 'does not adjust the shipment' do + it "does not adjust the shipment" do expect { subject.activate }.to_not change { shipment.adjustments.count } @@ -67,8 +67,8 @@ module PromotionHandler end end - context 'when not already applied' do - it 'does not adjust the shipment' do + context "when not already applied" do + it "does not adjust the shipment" do expect { subject.activate }.to_not change { shipment.adjustments.count } @@ -76,20 +76,20 @@ module PromotionHandler end end - context 'with a custom shipping action' do + context "with a custom shipping action" do before do - stub_const('CustomShippingAction', custom_klass) + stub_const("CustomShippingAction", custom_klass) - allow(Spree::Config.promotions).to receive(:shipping_actions) { ['CustomShippingAction'] } + allow(Spree::Config.promotions).to receive(:shipping_actions) { ["CustomShippingAction"] } order.order_promotions.create!(promotion:, promotion_code: promotion.codes.first) end let(:action) { custom_klass.new } let(:custom_klass) { Class.new(Spree::Promotion::Actions::FreeShipping) } - let(:promotion) { create(:promotion, code: 'customshipping', promotion_actions: [action]) } + let(:promotion) { create(:promotion, code: "customshipping", promotion_actions: [action]) } - it 'adjusts the shipment' do + it "adjusts the shipment" do expect { subject.activate }.to change { shipment.adjustments.count } diff --git a/legacy_promotions/spec/models/spree/promotion_integration_spec.rb b/legacy_promotions/spec/models/spree/promotion_integration_spec.rb index 72b48c1f7ec..97667a0a496 100644 --- a/legacy_promotions/spec/models/spree/promotion_integration_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion_integration_spec.rb @@ -15,7 +15,7 @@ let(:line_items_attributes) do [ - { price: 10, quantity: } + {price: 10, quantity:} ] end @@ -87,12 +87,12 @@ let(:calculator) { Spree::Calculator::DistributedAmount.new } let(:promotion) { create :promotion, - name: '15 spread' + name: "15 spread" } let(:order) { create :completed_order_with_promotion, promotion:, - line_items_attributes: [{ price: 20 }, { price: 30 }, { price: 100 }] + line_items_attributes: [{price: 20}, {price: 30}, {price: 100}] } before do @@ -101,27 +101,27 @@ order.recalculate end - it 'correctly distributes the entire discount' do + it "correctly distributes the entire discount" do expect(order.promo_total).to eq(-15) expect(order.line_items.map(&:adjustment_total)).to eq([-2, -3, -10]) end - context 'with product promotion rule' do + context "with product promotion rule" do let(:first_product) { order.line_items.first.product } before do rule = Spree::Promotion::Rules::Product.create!( promotion:, product_promotion_rules: [ - Spree::ProductPromotionRule.new(product: first_product), - ], + Spree::ProductPromotionRule.new(product: first_product) + ] ) promotion.rules << rule promotion.save! order.recalculate end - it 'still distributes the entire discount' do + it "still distributes the entire discount" do expect(order.promo_total).to eq(-15) expect(order.line_items.map(&:adjustment_total)).to eq([-15, 0, 0]) end @@ -158,34 +158,34 @@ end it "makes the promotion ineligible" do - expect{ + expect { order.complete - }.to change{ promo_adjustment.reload.eligible }.to(false) + }.to change { promo_adjustment.reload.eligible }.to(false) end it "adjusts the promo_total" do - expect{ + expect { order.complete }.to change(order, :promo_total).by(10) end it "increases the total to remove the promo" do - expect{ + expect { order.complete }.to change(order, :total).from(30).to(40) end it "resets the state of the order" do - expect{ + expect { order.complete - }.to change{ order.reload.state }.from("confirm").to("address") + }.to change { order.reload.state }.from("confirm").to("address") end end describe "adding items to the cart" do let(:order) { create :order } let(:line_item) { create :line_item, order: } - let(:promo) { create :promotion_with_item_adjustment, adjustment_rate: 5, code: 'promo' } + let(:promo) { create :promotion_with_item_adjustment, adjustment_rate: 5, code: "promo" } let(:promotion_code) { promo.codes.first } let(:variant) { create :variant } diff --git a/legacy_promotions/spec/models/spree/promotion_rule_spec.rb b/legacy_promotions/spec/models/spree/promotion_rule_spec.rb index 8b7cdf7d9e8..11897a84919 100644 --- a/legacy_promotions/spec/models/spree/promotion_rule_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion_rule_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" module Spree RSpec.describe Spree::PromotionRule, type: :model do @@ -34,7 +34,7 @@ def eligible?(_promotable, _options = {}) it "generates its own partial path" do rule = TestRule.new - expect(rule.to_partial_path).to eq 'spree/admin/promotions/rules/test_rule' + expect(rule.to_partial_path).to eq "spree/admin/promotions/rules/test_rule" end end end diff --git a/legacy_promotions/spec/models/spree/promotion_spec.rb b/legacy_promotions/spec/models/spree/promotion_spec.rb index f230b11138b..441d4cab20c 100644 --- a/legacy_promotions/spec/models/spree/promotion_spec.rb +++ b/legacy_promotions/spec/models/spree/promotion_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::Promotion, type: :model do let(:promotion) { Spree::Promotion.new } @@ -62,7 +62,7 @@ end end - describe '.active' do + describe ".active" do subject { described_class.active } let(:promotion) { create(:promotion, starts_at: Date.yesterday, name: "name1") } @@ -73,16 +73,16 @@ expect(subject).to be_empty end - context 'when promotion has an action' do + context "when promotion has an action" do let(:promotion) { create(:promotion, :with_action, starts_at: Date.yesterday, name: "name1") } - it 'returns promotion with action' do + it "returns promotion with action" do expect(subject).to match [promotion] end end end - describe '.has_actions' do + describe ".has_actions" do subject { described_class.has_actions } let(:promotion) { create(:promotion, starts_at: Date.yesterday, name: "name1") } @@ -93,14 +93,14 @@ expect(subject).to be_empty end - context 'when promotion has two actions' do + context "when promotion has two actions" do let(:promotion) { create(:promotion, :with_action, starts_at: Date.yesterday, name: "name1") } before do promotion.actions << Spree::Promotion::Actions::CreateAdjustment.new end - it 'returns distinct promotion' do + it "returns distinct promotion" do expect(subject).to match [promotion] end end @@ -129,7 +129,7 @@ end describe "#save" do - let(:promotion) { create(:promotion, :with_action, name: 'delete me') } + let(:promotion) { create(:promotion, :with_action, name: "delete me") } before(:each) do promotion.rules << Spree::Promotion::Rules::FirstOrder.new @@ -157,12 +157,12 @@ @user = create(:user) @order = create(:order, user: @user, created_at: Time.current) - @payload = { order: @order, user: @user } + @payload = {order: @order, user: @user} end it "should check path if present" do - promotion.path = 'content/cvv' - @payload[:path] = 'content/cvv' + promotion.path = "content/cvv" + @payload[:path] = "content/cvv" expect(@action1).to receive(:perform).with(hash_including(@payload)) expect(@action2).to receive(:perform).with(hash_including(@payload)) promotion.activate(**@payload) @@ -171,13 +171,13 @@ it "does not perform actions against an order in a finalized state" do expect(@action1).not_to receive(:perform) - @order.state = 'complete' + @order.state = "complete" promotion.activate(**@payload) - @order.state = 'awaiting_return' + @order.state = "awaiting_return" promotion.activate(**@payload) - @order.state = 'returned' + @order.state = "returned" promotion.activate(**@payload) end @@ -195,7 +195,7 @@ expect(promotion.orders.first).to eql @order end - it 'keeps in-memory associations updated' do + it "keeps in-memory associations updated" do # load all the relevant associations into memory promotion.order_promotions.to_a promotion.orders.to_a @@ -221,7 +221,7 @@ end context "when not activated" do it "will not assign the order" do - @order.state = 'complete' + @order.state = "complete" expect(promotion.orders).to be_empty expect(promotion.activate(**@payload)).to be_falsey expect(promotion.orders).to be_empty @@ -252,7 +252,7 @@ end end - describe '#remove_from' do + describe "#remove_from" do let(:promotion) { create(:promotion, :with_line_item_adjustment) } let(:order) { create(:order_with_line_items) } @@ -260,7 +260,7 @@ promotion.activate(order:) end - it 'removes the promotion' do + it "removes the promotion" do expect(order.promotions).to include(promotion) expect(order.line_items.flat_map(&:adjustments)).to be_present @@ -389,7 +389,7 @@ context "and the order is canceled" do before { order.cancel! } it { is_expected.to eq 0 } - it { expect(order.state).to eq 'canceled' } + it { expect(order.state).to eq "canceled" } end end end @@ -428,81 +428,81 @@ end end - describe '#not_started?' do + describe "#not_started?" do let(:promotion) { Spree::Promotion.new(starts_at:) } subject { promotion.not_started? } - context 'no starts_at date' do + context "no starts_at date" do let(:starts_at) { nil } it { is_expected.to be_falsey } end - context 'when starts_at date is in the past' do + context "when starts_at date is in the past" do let(:starts_at) { Time.current - 1.day } it { is_expected.to be_falsey } end - context 'when starts_at date is not already reached' do + context "when starts_at date is not already reached" do let(:starts_at) { Time.current + 1.day } it { is_expected.to be_truthy } end end - describe '#started?' do + describe "#started?" do let(:promotion) { Spree::Promotion.new(starts_at:) } subject { promotion.started? } - context 'when no starts_at date' do + context "when no starts_at date" do let(:starts_at) { nil } it { is_expected.to be_truthy } end - context 'when starts_at date is in the past' do + context "when starts_at date is in the past" do let(:starts_at) { Time.current - 1.day } it { is_expected.to be_truthy } end - context 'when starts_at date is not already reached' do + context "when starts_at date is not already reached" do let(:starts_at) { Time.current + 1.day } it { is_expected.to be_falsey } end end - describe '#expired?' do + describe "#expired?" do let(:promotion) { Spree::Promotion.new(expires_at:) } subject { promotion.expired? } - context 'when no expires_at date' do + context "when no expires_at date" do let(:expires_at) { nil } it { is_expected.to be_falsey } end - context 'when expires_at date is not already reached' do + context "when expires_at date is not already reached" do let(:expires_at) { Time.current + 1.day } it { is_expected.to be_falsey } end - context 'when expires_at date is in the past' do + context "when expires_at date is in the past" do let(:expires_at) { Time.current - 1.day } it { is_expected.to be_truthy } end end - describe '#not_expired?' do + describe "#not_expired?" do let(:promotion) { Spree::Promotion.new(expires_at:) } subject { promotion.not_expired? } - context 'when no expired_at date' do + context "when no expired_at date" do let(:expires_at) { nil } it { is_expected.to be_truthy } end - context 'when expires_at date is not already reached' do + context "when expires_at date is not already reached" do let(:expires_at) { Time.current + 1.day } it { is_expected.to be_truthy } end - context 'when expires_at date is in the past' do + context "when expires_at date is in the past" do let(:expires_at) { Time.current - 1.day } it { is_expected.to be_falsey } end @@ -531,7 +531,7 @@ expect(promotion.active?).to eq(false) end - context 'when promotion has an action' do + context "when promotion has an action" do let(:promotion) { create(:promotion, :with_action, name: "name1") } it "should be active if it has started already" do @@ -569,7 +569,7 @@ let!(:action) do calculator = Spree::Calculator::FlatRate.new - action_params = { promotion:, calculator: } + action_params = {promotion:, calculator:} action = Spree::Promotion::Actions::CreateAdjustment.create(action_params) promotion.actions << action action @@ -580,10 +580,10 @@ Spree::Adjustment.create!( order:, adjustable: order, - source: action, + source: action, promotion_code: promotion.codes.first, - amount: 10, - label: 'Promotional adjustment' + amount: 10, + label: "Promotional adjustment" ) end @@ -744,7 +744,7 @@ end context "#eligible_rules" do - let(:promotable) { double('Promotable') } + let(:promotable) { double("Promotable") } let(:rule1) { Spree::PromotionRule.create!(promotion:) } let(:rule2) { Spree::PromotionRule.create!(promotion:) } @@ -791,7 +791,7 @@ end end - describe '#line_item_actionable?' do + describe "#line_item_actionable?" do let(:order) { double Spree::Order } let(:line_item) { double Spree::LineItem } let(:true_rule) { stub_model Spree::PromotionRule, eligible?: true, applicable?: true, actionable?: true } @@ -805,23 +805,23 @@ subject { promotion.line_item_actionable? order, line_item } - context 'when the order is eligible for promotion' do - context 'when there are no rules' do + context "when the order is eligible for promotion" do + context "when there are no rules" do it { is_expected.to be } end - context 'when there are rules' do - context 'when all rules allow action on the line item' do + context "when there are rules" do + context "when all rules allow action on the line item" do let(:rules) { [true_rule] } it { is_expected.to be } end - context 'when at least one rule does not allow action on the line item' do + context "when at least one rule does not allow action on the line item" do let(:rules) { [true_rule, false_rule] } it { is_expected.not_to be } end - context 'when the line item has an non-promotionable product' do + context "when the line item has an non-promotionable product" do let(:rules) { [true_rule] } let(:line_item) { build(:line_item) { |li| li.variant.product.promotionable = false } } it { is_expected.not_to be } @@ -829,7 +829,7 @@ end end - context 'when the order is not eligible for the promotion' do + context "when the order is not eligible for the promotion" do context "due to promotion expiration" do before { promotion.starts_at = Time.current + 2.days } it { is_expected.not_to be } @@ -858,7 +858,7 @@ end end - describe '#used_by?' do + describe "#used_by?" do subject { promotion.used_by? user, [excluded_order] } let(:promotion) { create :promotion, :with_order_adjustment } @@ -871,7 +871,7 @@ order.save! end - context 'when the user has used this promo' do + context "when the user has used this promo" do before do promotion.activate(order:) order.recalculate @@ -879,10 +879,10 @@ order.save! end - context 'when the order is complete' do + context "when the order is complete" do it { is_expected.to be true } - context 'when the promotion was not eligible' do + context "when the promotion was not eligible" do let(:adjustment) { order.adjustments.first } before do @@ -893,13 +893,13 @@ it { is_expected.to be false } end - context 'when the only matching order is the excluded order' do + context "when the only matching order is the excluded order" do let(:excluded_order) { order } it { is_expected.to be false } end end - context 'when the order is not complete' do + context "when the order is not complete" do let(:order) { create :order, user: } # The before clause above sets the completed at @@ -910,7 +910,7 @@ end end - context 'when the user has not used this promo' do + context "when the user has not used this promo" do it { is_expected.to be false } end end diff --git a/legacy_promotions/spec/models/spree/shipment_spec.rb b/legacy_promotions/spec/models/spree/shipment_spec.rb index 22e24ca8de4..2ddf6f9d553 100644 --- a/legacy_promotions/spec/models/spree/shipment_spec.rb +++ b/legacy_promotions/spec/models/spree/shipment_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'rails_helper' -require 'benchmark' +require "rails_helper" +require "benchmark" RSpec.describe Spree::Shipment, type: :model do let(:order) { create(:order_ready_to_ship, line_items_count: 1) } @@ -9,7 +9,7 @@ let(:stock_location) { create(:stock_location) } let(:shipment) do order.shipments.create!( - state: 'pending', + state: "pending", cost: 1, inventory_units: order.inventory_units, shipping_rates: [shipping_rate], @@ -23,7 +23,7 @@ ) end - describe '#total_before_tax' do + describe "#total_before_tax" do before do shipment.update!(cost: 10) end @@ -33,7 +33,7 @@ let(:promo_action) { promo.actions[0] } let(:promo) { create(:promotion, :with_line_item_adjustment) } - it 'returns the amount minus any adjustments' do + it "returns the amount minus any adjustments" do expect(shipment.total_before_tax).to eq(10 - 1 - 2) end end diff --git a/legacy_promotions/spec/rails_helper.rb b/legacy_promotions/spec/rails_helper.rb index d015f3daaa6..47c74b8b888 100644 --- a/legacy_promotions/spec/rails_helper.rb +++ b/legacy_promotions/spec/rails_helper.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -ENV["RAILS_ENV"] ||= 'test' +ENV["RAILS_ENV"] ||= "test" # SOLIDUS DUMMY APP -require 'spree/testing_support/dummy_app' +require "spree/testing_support/dummy_app" DummyApp.setup( - gem_root: File.expand_path('..', __dir__), - lib_name: 'solidus_legacy_promotions' + gem_root: File.expand_path("..", __dir__), + lib_name: "solidus_legacy_promotions" ) DummyApp.mattr_accessor :use_solidus_admin @@ -23,25 +23,25 @@ end require "solidus_admin/testing_support/admin_assets" -require 'rails-controller-testing' -require 'rspec/rails' -require 'rspec-activemodel-mocks' -require 'database_cleaner' +require "rails-controller-testing" +require "rspec/rails" +require "rspec-activemodel-mocks" +require "database_cleaner" Dir["./spec/support/**/*.rb"].sort.each { |f| require f } -require 'spree/testing_support/factory_bot' -require 'spree/testing_support/preferences' -require 'spree/testing_support/rake' -require 'spree/testing_support/job_helpers' -require 'spree/api/testing_support/helpers' -require 'spree/testing_support/url_helpers' -require 'spree/testing_support/authorization_helpers' -require 'spree/testing_support/controller_requests' +require "spree/testing_support/factory_bot" +require "spree/testing_support/preferences" +require "spree/testing_support/rake" +require "spree/testing_support/job_helpers" +require "spree/api/testing_support/helpers" +require "spree/testing_support/url_helpers" +require "spree/testing_support/authorization_helpers" +require "spree/testing_support/controller_requests" require "solidus_admin/testing_support/feature_helpers" -require 'solidus_legacy_promotions/testing_support/factory_bot' -require 'cancan/matchers' -require 'spree/testing_support/capybara_ext' +require "solidus_legacy_promotions/testing_support/factory_bot" +require "cancan/matchers" +require "spree/testing_support/capybara_ext" ActiveJob::Base.queue_adapter = :test @@ -50,8 +50,8 @@ require "spree/testing_support/capybara_driver" # AXE - ACCESSIBILITY -require 'axe-rspec' -require 'axe-capybara' +require "axe-rspec" +require "axe-capybara" Capybara.enable_aria_label = true @@ -70,7 +70,7 @@ config.use_transactional_fixtures = true config.before :suite do - FileUtils.rm_rf(Rails.configuration.active_storage.service_configurations[:test][:root]) unless ENV['DISABLE_ACTIVE_STORAGE'] == 'true' + FileUtils.rm_rf(Rails.configuration.active_storage.service_configurations[:test][:root]) unless ENV["DISABLE_ACTIVE_STORAGE"] == "true" DatabaseCleaner.clean_with :truncation end diff --git a/legacy_promotions/spec/requests/solidus_admin/promotion_categories_spec.rb b/legacy_promotions/spec/requests/solidus_admin/promotion_categories_spec.rb index 180e50b6d93..2a7a7e606eb 100644 --- a/legacy_promotions/spec/requests/solidus_admin/promotion_categories_spec.rb +++ b/legacy_promotions/spec/requests/solidus_admin/promotion_categories_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'rails_helper' -require 'solidus_admin/testing_support/shared_examples/crud_resource_requests' +require "rails_helper" +require "solidus_admin/testing_support/shared_examples/crud_resource_requests" -RSpec.describe 'SolidusAdmin::PromotionCategoriesController', :solidus_admin, type: :request do - include_examples 'CRUD resource requests', 'promotion_category' do +RSpec.describe "SolidusAdmin::PromotionCategoriesController", :solidus_admin, type: :request do + include_examples "CRUD resource requests", "promotion_category" do let(:resource_class) { Spree::PromotionCategory } - let(:valid_attributes) { { name: "Expired", code: "exp.1" } } - let(:invalid_attributes) { { name: "", code: "" } } + let(:valid_attributes) { {name: "Expired", code: "exp.1"} } + let(:invalid_attributes) { {name: "", code: ""} } end end diff --git a/legacy_promotions/spec/requests/spree/api/orders_spec.rb b/legacy_promotions/spec/requests/spree/api/orders_spec.rb index 3fc4f700f45..54cecde7833 100644 --- a/legacy_promotions/spec/requests/spree/api/orders_spec.rb +++ b/legacy_promotions/spec/requests/spree/api/orders_spec.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" -RSpec.describe 'API Orders', type: :request do +RSpec.describe "API Orders", type: :request do let!(:order) { create(:order) } let(:variant) { create(:variant) } let(:line_item) { create(:line_item) } - let(:address_params) { { country_id: Country.first.id, state_id: State.first.id } } + let(:address_params) { {country_id: Country.first.id, state_id: State.first.id} } let(:current_api_user) do user = Spree.user_class.new(email: "solidus@example.com") @@ -20,10 +20,10 @@ describe "POST create" do let(:target_user) { create :user } - let(:attributes) { { user_id: target_user.id, email: target_user.email } } + let(:attributes) { {user_id: target_user.id, email: target_user.email} } subject do - post spree.api_orders_path, params: { order: attributes } + post spree.api_orders_path, params: {order: attributes} response end @@ -35,11 +35,11 @@ context "with existing promotion" do let(:discount) { 2 } before do - create(:promotion, :with_line_item_adjustment, apply_automatically: true, adjustment_rate: discount ) + create(:promotion, :with_line_item_adjustment, apply_automatically: true, adjustment_rate: discount) end it "activates the promotion" do - post spree.api_orders_path, params: { order: { line_items: { "0" => { variant_id: variant.to_param, quantity: 1 } } } } + post spree.api_orders_path, params: {order: {line_items: {"0" => {variant_id: variant.to_param, quantity: 1}}}} order = Spree::Order.last line_item = order.line_items.first expect(order.total).to eq(line_item.price - discount) diff --git a/legacy_promotions/spec/requests/spree/api/promotion_application_spec.rb b/legacy_promotions/spec/requests/spree/api/promotion_application_spec.rb index e4c5a3ebfe7..98feded12c7 100644 --- a/legacy_promotions/spec/requests/spree/api/promotion_application_spec.rb +++ b/legacy_promotions/spec/requests/spree/api/promotion_application_spec.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" -RSpec.describe 'Promotion application', type: :request do +RSpec.describe "Promotion application", type: :request do before do stub_authentication! end @@ -19,7 +19,7 @@ it "can apply a coupon code to the order" do expect(order.total).to eq(110.00) - post spree.api_order_coupon_codes_path(order), params: { coupon_code: "10off", order_token: order.guest_token } + post spree.api_order_coupon_codes_path(order), params: {coupon_code: "10off", order_token: order.guest_token} expect(response.status).to eq(200) expect(order.reload.total).to eq(109.00) expect(json_response["success"]).to eq("The coupon code was successfully applied to your order.") @@ -36,7 +36,7 @@ end it "fails to apply" do - post spree.api_order_coupon_codes_path(order), params: { coupon_code: "10off", order_token: order.guest_token } + post spree.api_order_coupon_codes_path(order), params: {coupon_code: "10off", order_token: order.guest_token} expect(response.status).to eq(422) expect(json_response["success"]).to be_blank expect(json_response["error"]).to eq("The coupon code is expired") diff --git a/legacy_promotions/spec/spec_helper.rb b/legacy_promotions/spec/spec_helper.rb index 48bbc27a49d..cc630cab854 100644 --- a/legacy_promotions/spec/spec_helper.rb +++ b/legacy_promotions/spec/spec_helper.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true if ENV["COVERAGE"] - require 'simplecov' + require "simplecov" if ENV["COVERAGE_DIR"] SimpleCov.coverage_dir(ENV["COVERAGE_DIR"]) end @@ -9,19 +9,19 @@ require "simplecov-cobertura" SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter end - SimpleCov.command_name('solidus:core') + SimpleCov.command_name("solidus:core") SimpleCov.merge_timeout(3600) - SimpleCov.start('rails') + SimpleCov.start("rails") end -require 'rspec/core' +require "rspec/core" -require 'spree/testing_support/flaky' -require 'spree/testing_support/partial_double_verification' -require 'spree/testing_support/silence_deprecations' -require 'spree/testing_support/preferences' -require 'spree/deprecator' -require 'spree/config' +require "spree/testing_support/flaky" +require "spree/testing_support/partial_double_verification" +require "spree/testing_support/silence_deprecations" +require "spree/testing_support/preferences" +require "spree/deprecator" +require "spree/config" require "solidus_legacy_promotions" diff --git a/legacy_promotions/spec/subscribers/spree/order_promotion_subscriber_spec.rb b/legacy_promotions/spec/subscribers/spree/order_promotion_subscriber_spec.rb index 0bc6bf16781..a4574787945 100644 --- a/legacy_promotions/spec/subscribers/spree/order_promotion_subscriber_spec.rb +++ b/legacy_promotions/spec/subscribers/spree/order_promotion_subscriber_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe Spree::OrderPromotionSubscriber do let(:bus) { Omnes::Bus.new } @@ -11,8 +11,8 @@ described_class.new.subscribe_to(bus) end - describe 'on :order_emptied' do - it 'clears connected promotions' do + describe "on :order_emptied" do + it "clears connected promotions" do promotion = create(:promotion) order = create(:order) order.promotions << promotion diff --git a/lib/solidus.rb b/lib/solidus.rb index fe759aa113a..cf861cb31a7 100644 --- a/lib/solidus.rb +++ b/lib/solidus.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'solidus_core' -require 'solidus_api' -require 'solidus_backend' -require 'solidus_sample' -require 'solidus_legacy_promotions' +require "solidus_core" +require "solidus_api" +require "solidus_backend" +require "solidus_sample" +require "solidus_legacy_promotions" diff --git a/lib/spree.rb b/lib/spree.rb index 5f2de7a78e0..1986373ae50 100644 --- a/lib/spree.rb +++ b/lib/spree.rb @@ -1,3 +1,3 @@ # frozen_string_literal: true -require 'solidus' +require "solidus" diff --git a/promotions/app/jobs/solidus_promotions/promotion_code_batch_job.rb b/promotions/app/jobs/solidus_promotions/promotion_code_batch_job.rb index 8afa771eeb0..c3c2f871e40 100644 --- a/promotions/app/jobs/solidus_promotions/promotion_code_batch_job.rb +++ b/promotions/app/jobs/solidus_promotions/promotion_code_batch_job.rb @@ -14,7 +14,7 @@ def perform(promotion_code_batch) .promotion_code_batch_finished(promotion_code_batch) .deliver_now end - rescue StandardError => e + rescue => e if promotion_code_batch.email? SolidusPromotions.config.promotion_code_batch_mailer_class .promotion_code_batch_errored(promotion_code_batch) diff --git a/promotions/app/models/solidus_promotions/benefit.rb b/promotions/app/models/solidus_promotions/benefit.rb index fe04a9ed8fc..7d8c38f7c18 100644 --- a/promotions/app/models/solidus_promotions/benefit.rb +++ b/promotions/app/models/solidus_promotions/benefit.rb @@ -9,6 +9,7 @@ class Benefit < Spree::Base include Spree::Preferences::Persistable include Spree::CalculatedAdjustments include Spree::AdjustmentSource + before_destroy :remove_adjustments_from_incomplete_orders before_destroy :raise_for_adjustments_for_completed_orders @@ -32,6 +33,7 @@ def can_discount?(object) def discount(adjustable) amount = compute_amount(adjustable) return if amount.zero? + ItemDiscount.new( item: adjustable, label: adjustment_label(adjustable), diff --git a/promotions/app/models/solidus_promotions/benefits/create_discounted_item.rb b/promotions/app/models/solidus_promotions/benefits/create_discounted_item.rb index 1732898bc48..9d5bac9fd1a 100644 --- a/promotions/app/models/solidus_promotions/benefits/create_discounted_item.rb +++ b/promotions/app/models/solidus_promotions/benefits/create_discounted_item.rb @@ -4,6 +4,7 @@ module SolidusPromotions module Benefits class CreateDiscountedItem < Benefit include OrderBenefit + preference :variant_id, :integer preference :quantity, :integer, default: 1 preference :necessary_quantity, :integer, default: 1 diff --git a/promotions/app/models/solidus_promotions/calculators/tiered_flat_rate.rb b/promotions/app/models/solidus_promotions/calculators/tiered_flat_rate.rb index f73ceee74d1..2cc126d22a6 100644 --- a/promotions/app/models/solidus_promotions/calculators/tiered_flat_rate.rb +++ b/promotions/app/models/solidus_promotions/calculators/tiered_flat_rate.rb @@ -8,7 +8,7 @@ class TieredFlatRate < Spree::Calculator include PromotionCalculator preference :base_amount, :decimal, default: 0 - preference :tiers, :hash, default: { 10 => 10 } + preference :tiers, :hash, default: {10 => 10} preference :currency, :string, default: -> { Spree::Config[:currency] } before_validation do diff --git a/promotions/app/models/solidus_promotions/calculators/tiered_percent.rb b/promotions/app/models/solidus_promotions/calculators/tiered_percent.rb index 93fc47a1d3a..786cd542d01 100644 --- a/promotions/app/models/solidus_promotions/calculators/tiered_percent.rb +++ b/promotions/app/models/solidus_promotions/calculators/tiered_percent.rb @@ -8,7 +8,7 @@ class TieredPercent < Spree::Calculator include PromotionCalculator preference :base_percent, :decimal, default: 0 - preference :tiers, :hash, default: { 50 => 5 } + preference :tiers, :hash, default: {50 => 5} preference :currency, :string, default: -> { Spree::Config[:currency] } before_validation do diff --git a/promotions/app/models/solidus_promotions/calculators/tiered_percent_on_eligible_item_quantity.rb b/promotions/app/models/solidus_promotions/calculators/tiered_percent_on_eligible_item_quantity.rb index e8568b280f1..6e9b6d39476 100644 --- a/promotions/app/models/solidus_promotions/calculators/tiered_percent_on_eligible_item_quantity.rb +++ b/promotions/app/models/solidus_promotions/calculators/tiered_percent_on_eligible_item_quantity.rb @@ -5,7 +5,7 @@ module SolidusPromotions module Calculators class TieredPercentOnEligibleItemQuantity < SolidusPromotions::Calculators::TieredPercent - preference :tiers, :hash, default: { 10 => 5 } + preference :tiers, :hash, default: {10 => 5} before_validation do # Convert tier values to decimals. Strings don't do us much good. diff --git a/promotions/app/models/solidus_promotions/conditions/first_order.rb b/promotions/app/models/solidus_promotions/conditions/first_order.rb index 434b3b6446e..59a37e3276d 100644 --- a/promotions/app/models/solidus_promotions/conditions/first_order.rb +++ b/promotions/app/models/solidus_promotions/conditions/first_order.rb @@ -4,6 +4,7 @@ module SolidusPromotions module Conditions class FirstOrder < Condition include OrderLevelCondition + attr_reader :user, :email def eligible?(order, options = {}) diff --git a/promotions/app/models/solidus_promotions/conditions/first_repeat_purchase_since.rb b/promotions/app/models/solidus_promotions/conditions/first_repeat_purchase_since.rb index d561c7671d9..40b756c9e11 100644 --- a/promotions/app/models/solidus_promotions/conditions/first_repeat_purchase_since.rb +++ b/promotions/app/models/solidus_promotions/conditions/first_repeat_purchase_since.rb @@ -6,7 +6,7 @@ class FirstRepeatPurchaseSince < Condition include OrderLevelCondition preference :days_ago, :integer, default: 365 - validates :preferred_days_ago, numericality: { only_integer: true, greater_than: 0 } + validates :preferred_days_ago, numericality: {only_integer: true, greater_than: 0} # This is never eligible if the order does not have a user, and that user does not have any previous completed orders. # diff --git a/promotions/app/models/solidus_promotions/conditions/line_item_taxon.rb b/promotions/app/models/solidus_promotions/conditions/line_item_taxon.rb index 3956512060f..698c721badb 100644 --- a/promotions/app/models/solidus_promotions/conditions/line_item_taxon.rb +++ b/promotions/app/models/solidus_promotions/conditions/line_item_taxon.rb @@ -14,7 +14,7 @@ class LineItemTaxon < Condition MATCH_POLICIES = %w[include exclude].freeze - validates :preferred_match_policy, inclusion: { in: MATCH_POLICIES } + validates :preferred_match_policy, inclusion: {in: MATCH_POLICIES} preference :match_policy, :string, default: MATCH_POLICIES.first diff --git a/promotions/app/models/solidus_promotions/conditions/minimum_quantity.rb b/promotions/app/models/solidus_promotions/conditions/minimum_quantity.rb index 06a3ddcc694..01f0574d273 100644 --- a/promotions/app/models/solidus_promotions/conditions/minimum_quantity.rb +++ b/promotions/app/models/solidus_promotions/conditions/minimum_quantity.rb @@ -12,7 +12,7 @@ module Conditions class MinimumQuantity < Condition include OrderLevelCondition - validates :preferred_minimum_quantity, numericality: { only_integer: true, greater_than: 0 } + validates :preferred_minimum_quantity, numericality: {only_integer: true, greater_than: 0} preference :minimum_quantity, :integer, default: 1 diff --git a/promotions/app/models/solidus_promotions/conditions/nth_order.rb b/promotions/app/models/solidus_promotions/conditions/nth_order.rb index de4f8927343..20f1afd4d35 100644 --- a/promotions/app/models/solidus_promotions/conditions/nth_order.rb +++ b/promotions/app/models/solidus_promotions/conditions/nth_order.rb @@ -8,7 +8,7 @@ class NthOrder < Condition preference :nth_order, :integer, default: 2 # It does not make sense to have this apply to the first order using preferred_nth_order == 1 # Instead we could use the first_order condition - validates :preferred_nth_order, numericality: { only_integer: true, greater_than: 1 } + validates :preferred_nth_order, numericality: {only_integer: true, greater_than: 1} # This is never eligible if the order does not have a user, and that user does not have any previous completed orders. # diff --git a/promotions/app/models/solidus_promotions/conditions/product.rb b/promotions/app/models/solidus_promotions/conditions/product.rb index ac796cd972b..4c5c8cbc74d 100644 --- a/promotions/app/models/solidus_promotions/conditions/product.rb +++ b/promotions/app/models/solidus_promotions/conditions/product.rb @@ -22,7 +22,7 @@ def preload_relations MATCH_POLICIES = %w[any all none only].freeze - validates :preferred_match_policy, inclusion: { in: MATCH_POLICIES } + validates :preferred_match_policy, inclusion: {in: MATCH_POLICIES} preference :match_policy, :string, default: MATCH_POLICIES.first @@ -65,6 +65,7 @@ def line_item_eligible?(line_item, _options = {}) # The order level eligibility check happens first, and if none of the products # are in the order, then no line items should be available to check. raise "This should not happen" if preferred_match_policy == "none" + product_ids.include?(line_item.variant.product_id) end diff --git a/promotions/app/models/solidus_promotions/conditions/taxon.rb b/promotions/app/models/solidus_promotions/conditions/taxon.rb index 4f3fb4690a6..0338b06a5a7 100644 --- a/promotions/app/models/solidus_promotions/conditions/taxon.rb +++ b/promotions/app/models/solidus_promotions/conditions/taxon.rb @@ -18,7 +18,7 @@ def preload_relations MATCH_POLICIES = %w[any all none].freeze - validates :preferred_match_policy, inclusion: { in: MATCH_POLICIES } + validates :preferred_match_policy, inclusion: {in: MATCH_POLICIES} preference :match_policy, :string, default: MATCH_POLICIES.first @@ -87,8 +87,8 @@ def updateable? # All taxons in an order def taxons_in_order(order) Spree::Taxon - .joins(products: { variants_including_master: :line_items }) - .where(spree_line_items: { order_id: order.id }) + .joins(products: {variants_including_master: :line_items}) + .where(spree_line_items: {order_id: order.id}) .distinct end diff --git a/promotions/app/models/solidus_promotions/eligibility_results.rb b/promotions/app/models/solidus_promotions/eligibility_results.rb index 8c62d0f695b..15de8515f33 100644 --- a/promotions/app/models/solidus_promotions/eligibility_results.rb +++ b/promotions/app/models/solidus_promotions/eligibility_results.rb @@ -3,6 +3,7 @@ module SolidusPromotions class EligibilityResults include Enumerable + attr_reader :results, :promotion def initialize(promotion) @@ -22,6 +23,7 @@ def add(item:, condition:, success:, code:, message:) def success? return true if results.empty? + promotion.benefits.any? do |benefit| benefit.conditions.all? do |condition| results_for_condition = results.select { |result| result.condition == condition } @@ -32,8 +34,10 @@ def success? def error_messages return [] if results.empty? + results.group_by(&:condition).map do |_condition, results| next if results.any?(&:success) + results.detect { |r| !r.success }&.message end.compact end diff --git a/promotions/app/models/solidus_promotions/item_discount.rb b/promotions/app/models/solidus_promotions/item_discount.rb index 2f680c6e5d3..16d0123ea42 100644 --- a/promotions/app/models/solidus_promotions/item_discount.rb +++ b/promotions/app/models/solidus_promotions/item_discount.rb @@ -12,6 +12,7 @@ module SolidusPromotions # @attr_reader [BigDecimal] amount the amount of discount applied to the item class ItemDiscount include ActiveModel::Model + attr_accessor :item, :label, :source, :amount def ==(other) diff --git a/promotions/app/models/solidus_promotions/migration_support/order_promotion_syncer.rb b/promotions/app/models/solidus_promotions/migration_support/order_promotion_syncer.rb index 4e5db30373c..7ec57029cff 100644 --- a/promotions/app/models/solidus_promotions/migration_support/order_promotion_syncer.rb +++ b/promotions/app/models/solidus_promotions/migration_support/order_promotion_syncer.rb @@ -22,6 +22,7 @@ def sync_spree_order_promotions_to_solidus_order_promotions original_promotion_id: spree_order_promotion.promotion.id ) next unless solidus_promotion + if spree_order_promotion.promotion_code solidus_promotion_code = solidus_promotion.codes.find_by( value: spree_order_promotion.promotion_code.value @@ -38,6 +39,7 @@ def sync_solidus_order_promotions_to_spree_order_promotions order.solidus_order_promotions.each do |solidus_order_promotion| spree_promotion = solidus_order_promotion.promotion.original_promotion next unless spree_promotion + if solidus_order_promotion.promotion_code spree_promotion_code = spree_promotion.promotion_codes.find_by( value: solidus_order_promotion.promotion_code.value diff --git a/promotions/app/models/solidus_promotions/promotion.rb b/promotions/app/models/solidus_promotions/promotion.rb index 03a9c145601..3d45abadfbc 100644 --- a/promotions/app/models/solidus_promotions/promotion.rb +++ b/promotions/app/models/solidus_promotions/promotion.rb @@ -19,10 +19,10 @@ class Promotion < Spree::Base has_many :order_promotions, class_name: "SolidusPromotions::OrderPromotion", dependent: :destroy validates :name, :customer_label, presence: true - validates :path, uniqueness: { allow_blank: true, case_sensitive: true } - validates :usage_limit, numericality: { greater_than: 0, allow_nil: true } - validates :per_code_usage_limit, numericality: { greater_than_or_equal_to: 0, allow_nil: true } - validates :description, length: { maximum: 255 } + validates :path, uniqueness: {allow_blank: true, case_sensitive: true} + validates :usage_limit, numericality: {greater_than: 0, allow_nil: true} + validates :per_code_usage_limit, numericality: {greater_than_or_equal_to: 0, allow_nil: true} + validates :description, length: {maximum: 255} validate :apply_automatically_disallowed_with_paths validate :apply_automatically_disallowed_with_promotion_codes @@ -96,7 +96,7 @@ def usage_count(excluded_orders: []) discounted_orders .complete .where.not(id: [excluded_orders.map(&:id)]) - .where.not(spree_orders: { state: :canceled }) + .where.not(spree_orders: {state: :canceled}) .count end @@ -105,7 +105,7 @@ def used_by?(user, excluded_orders = []) .complete .where.not(id: excluded_orders.map(&:id)) .where(user: user) - .where.not(spree_orders: { state: :canceled }) + .where.not(spree_orders: {state: :canceled}) .exists? end diff --git a/promotions/app/models/solidus_promotions/promotion_code.rb b/promotions/app/models/solidus_promotions/promotion_code.rb index 37da59ee875..30bee696176 100644 --- a/promotions/app/models/solidus_promotions/promotion_code.rb +++ b/promotions/app/models/solidus_promotions/promotion_code.rb @@ -9,7 +9,7 @@ class PromotionCode < Spree::Base before_validation :normalize_code - validates :value, presence: true, uniqueness: { allow_blank: true, case_sensitive: true } + validates :value, presence: true, uniqueness: {allow_blank: true, case_sensitive: true} validate :promotion_not_apply_automatically, on: :create self.allowed_ransackable_attributes = ["value"] @@ -32,9 +32,9 @@ def usage_count(excluded_orders: []) promotion .discounted_orders .complete - .where.not(spree_orders: { state: :canceled }) + .where.not(spree_orders: {state: :canceled}) .joins(:solidus_order_promotions) - .where(SolidusPromotions::OrderPromotion.table_name => { promotion_code_id: id }) + .where(SolidusPromotions::OrderPromotion.table_name => {promotion_code_id: id}) .where.not(id: excluded_orders.map(&:id)) .count end diff --git a/promotions/app/models/solidus_promotions/promotion_code/batch_builder.rb b/promotions/app/models/solidus_promotions/promotion_code/batch_builder.rb index 9e7189f7050..8d61f13c3f8 100644 --- a/promotions/app/models/solidus_promotions/promotion_code/batch_builder.rb +++ b/promotions/app/models/solidus_promotions/promotion_code/batch_builder.rb @@ -22,7 +22,7 @@ def initialize(promotion_code_batch, options = {}) def build_promotion_codes generate_random_codes promotion_code_batch.update!(state: "completed") - rescue StandardError => e + rescue => e promotion_code_batch.update!( error: e.inspect, state: "failed" diff --git a/promotions/app/models/solidus_promotions/promotion_code_batch.rb b/promotions/app/models/solidus_promotions/promotion_code_batch.rb index e18d90bdf1e..549285dc30d 100644 --- a/promotions/app/models/solidus_promotions/promotion_code_batch.rb +++ b/promotions/app/models/solidus_promotions/promotion_code_batch.rb @@ -8,7 +8,7 @@ class CantProcessStartedBatch < StandardError belongs_to :promotion has_many :promotion_codes, dependent: :destroy - validates :number_of_codes, numericality: { greater_than: 0 } + validates :number_of_codes, numericality: {greater_than: 0} validates :base_code, :number_of_codes, presence: true def finished? diff --git a/promotions/app/models/solidus_promotions/promotion_handler/page.rb b/promotions/app/models/solidus_promotions/promotion_handler/page.rb index 4f72fabb8b4..1855aa4988b 100644 --- a/promotions/app/models/solidus_promotions/promotion_handler/page.rb +++ b/promotions/app/models/solidus_promotions/promotion_handler/page.rb @@ -7,7 +7,7 @@ class Page def initialize(order, path) @order = order - @path = path.delete_prefix('/') + @path = path.delete_prefix("/") end def activate diff --git a/promotions/app/models/solidus_promotions/shipping_rate_discount.rb b/promotions/app/models/solidus_promotions/shipping_rate_discount.rb index 74ea25ce3ec..94481e5d497 100644 --- a/promotions/app/models/solidus_promotions/shipping_rate_discount.rb +++ b/promotions/app/models/solidus_promotions/shipping_rate_discount.rb @@ -6,6 +6,7 @@ class ShippingRateDiscount < Spree::Base belongs_to :benefit, inverse_of: :shipping_rate_discounts extend Spree::DisplayMoney + money_methods :amount end end diff --git a/promotions/bin/rails b/promotions/bin/rails index ced0ed57959..993074678e9 100755 --- a/promotions/bin/rails +++ b/promotions/bin/rails @@ -2,12 +2,12 @@ # This command will automatically be run when you run "rails" with Rails gems # installed from the root of your application. -ENGINE_ROOT = File.expand_path('..', __dir__) -ENGINE_PATH = File.expand_path('../lib/solidus_promotions/engine', __dir__) +ENGINE_ROOT = File.expand_path("..", __dir__) +ENGINE_PATH = File.expand_path("../lib/solidus_promotions/engine", __dir__) # Set up gems listed in the Gemfile. -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) -require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) +require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"]) -require 'rails/all' -require 'rails/engine/commands' +require "rails/all" +require "rails/engine/commands" diff --git a/promotions/config/routes.rb b/promotions/config/routes.rb index 6b5f3cbe50c..a7060459bf7 100644 --- a/promotions/config/routes.rb +++ b/promotions/config/routes.rb @@ -29,7 +29,7 @@ end resources :promotion_codes, only: [:index, :new, :create] resources :promotion_code_batches, only: [:index, :new, :create] do - get "/download", to: "promotion_code_batches#download", defaults: { format: "csv" } + get "/download", to: "promotion_code_batches#download", defaults: {format: "csv"} end end end diff --git a/promotions/db/migrate/20230703101637_create_promotions.rb b/promotions/db/migrate/20230703101637_create_promotions.rb index eacc7c414dc..0d16c27a9f0 100644 --- a/promotions/db/migrate/20230703101637_create_promotions.rb +++ b/promotions/db/migrate/20230703101637_create_promotions.rb @@ -1,6 +1,6 @@ class CreatePromotions < ActiveRecord::Migration[7.0] def change - promotion_foreign_key = table_exists?(:spree_promotions) ? { to_table: :spree_promotions } : false + promotion_foreign_key = table_exists?(:spree_promotions) ? {to_table: :spree_promotions} : false create_table :solidus_promotions_promotions do |t| t.string :description @@ -15,7 +15,7 @@ def change t.integer :lane, null: false, default: 1 t.string :customer_label t.datetime :deleted_at - t.references :original_promotion, type: :integer, index: { name: :index_original_promotion_id }, foreign_key: promotion_foreign_key + t.references :original_promotion, type: :integer, index: {name: :index_original_promotion_id}, foreign_key: promotion_foreign_key t.timestamps end diff --git a/promotions/db/migrate/20230703113625_create_promotion_benefits.rb b/promotions/db/migrate/20230703113625_create_promotion_benefits.rb index accb7fa76e0..4acdc1fb5a7 100644 --- a/promotions/db/migrate/20230703113625_create_promotion_benefits.rb +++ b/promotions/db/migrate/20230703113625_create_promotion_benefits.rb @@ -1,12 +1,12 @@ class CreatePromotionBenefits < ActiveRecord::Migration[7.0] def change - promotion_action_foreign_key = table_exists?(:spree_promotion_actions) ? { to_table: :spree_promotion_actions } : false + promotion_action_foreign_key = table_exists?(:spree_promotion_actions) ? {to_table: :spree_promotion_actions} : false create_table :solidus_promotions_benefits do |t| - t.references :promotion, index: true, null: false, foreign_key: { to_table: :solidus_promotions_promotions } + t.references :promotion, index: true, null: false, foreign_key: {to_table: :solidus_promotions_promotions} t.string :type t.text :preferences - t.references :original_promotion_action, type: :integer, index: { name: :index_original_promotion_action_id }, foreign_key: promotion_action_foreign_key + t.references :original_promotion_action, type: :integer, index: {name: :index_original_promotion_action_id}, foreign_key: promotion_action_foreign_key t.index [:id, :type], name: :index_solidus_promotions_benefits_on_id_and_type t.timestamps diff --git a/promotions/db/migrate/20230703141116_create_promotion_categories.rb b/promotions/db/migrate/20230703141116_create_promotion_categories.rb index 0cd5f5c72f6..73920f9eb94 100644 --- a/promotions/db/migrate/20230703141116_create_promotion_categories.rb +++ b/promotions/db/migrate/20230703141116_create_promotion_categories.rb @@ -9,6 +9,6 @@ def change add_reference :solidus_promotions_promotions, :promotion_category, - foreign_key: { to_table: :solidus_promotions_promotion_categories } + foreign_key: {to_table: :solidus_promotions_promotion_categories} end end diff --git a/promotions/db/migrate/20230703143943_create_promotion_conditions.rb b/promotions/db/migrate/20230703143943_create_promotion_conditions.rb index 444becadf9d..2116b5f006e 100644 --- a/promotions/db/migrate/20230703143943_create_promotion_conditions.rb +++ b/promotions/db/migrate/20230703143943_create_promotion_conditions.rb @@ -2,7 +2,7 @@ class CreatePromotionConditions < ActiveRecord::Migration[7.0] def change create_table :solidus_promotions_conditions do |t| t.references :benefit, - foreign_key: { to_table: :solidus_promotions_benefits } + foreign_key: {to_table: :solidus_promotions_benefits} t.string :type t.text :preferences diff --git a/promotions/db/migrate/20230704083830_add_condition_join_tables.rb b/promotions/db/migrate/20230704083830_add_condition_join_tables.rb index 212879750cf..23a867790a1 100644 --- a/promotions/db/migrate/20230704083830_add_condition_join_tables.rb +++ b/promotions/db/migrate/20230704083830_add_condition_join_tables.rb @@ -1,29 +1,29 @@ class AddConditionJoinTables < ActiveRecord::Migration[7.0] def change create_table :solidus_promotions_condition_products, force: :cascade do |t| - t.references :product, type: :integer, index: true, null: false, foreign_key: { to_table: :spree_products } - t.references :condition, index: true, null: false, foreign_key: { to_table: :solidus_promotions_conditions } + t.references :product, type: :integer, index: true, null: false, foreign_key: {to_table: :spree_products} + t.references :condition, index: true, null: false, foreign_key: {to_table: :solidus_promotions_conditions} t.timestamps end create_table :solidus_promotions_condition_taxons, force: :cascade do |t| - t.references :taxon, type: :integer, index: true, null: false, foreign_key: { to_table: :spree_taxons } - t.references :condition, index: true, null: false, foreign_key: { to_table: :solidus_promotions_conditions } + t.references :taxon, type: :integer, index: true, null: false, foreign_key: {to_table: :spree_taxons} + t.references :condition, index: true, null: false, foreign_key: {to_table: :solidus_promotions_conditions} t.timestamps end create_table :solidus_promotions_condition_users, force: :cascade do |t| - t.references :user, type: :integer, index: true, null: false, foreign_key: { to_table: Spree.user_class.table_name } - t.references :condition, index: true, null: false, foreign_key: { to_table: :solidus_promotions_conditions } + t.references :user, type: :integer, index: true, null: false, foreign_key: {to_table: Spree.user_class.table_name} + t.references :condition, index: true, null: false, foreign_key: {to_table: :solidus_promotions_conditions} t.timestamps end create_table :solidus_promotions_condition_stores do |t| - t.references :store, type: :integer, index: true, null: false, foreign_key: { to_table: :spree_stores } - t.references :condition, index: true, null: false, foreign_key: { to_table: :solidus_promotions_conditions } + t.references :store, type: :integer, index: true, null: false, foreign_key: {to_table: :spree_stores} + t.references :condition, index: true, null: false, foreign_key: {to_table: :solidus_promotions_conditions} t.timestamps end diff --git a/promotions/db/migrate/20230704102444_create_promotion_codes.rb b/promotions/db/migrate/20230704102444_create_promotion_codes.rb index 36b48e46059..a3719681721 100644 --- a/promotions/db/migrate/20230704102444_create_promotion_codes.rb +++ b/promotions/db/migrate/20230704102444_create_promotion_codes.rb @@ -1,7 +1,7 @@ class CreatePromotionCodes < ActiveRecord::Migration[7.0] def change create_table :solidus_promotions_promotion_codes, force: :cascade do |t| - t.references :promotion, null: false, index: true, foreign_key: { to_table: :solidus_promotions_promotions } + t.references :promotion, null: false, index: true, foreign_key: {to_table: :solidus_promotions_promotions} t.string :value, null: false t.timestamps diff --git a/promotions/db/migrate/20230704102656_create_promotion_code_batches.rb b/promotions/db/migrate/20230704102656_create_promotion_code_batches.rb index 5a626b36ff5..8fb32f7d855 100644 --- a/promotions/db/migrate/20230704102656_create_promotion_code_batches.rb +++ b/promotions/db/migrate/20230704102656_create_promotion_code_batches.rb @@ -3,7 +3,7 @@ class CreatePromotionCodeBatches < ActiveRecord::Migration[7.0] def change create_table :solidus_promotions_promotion_code_batches do |t| - t.references :promotion, null: false, index: true, foreign_key: { to_table: :solidus_promotions_promotions } + t.references :promotion, null: false, index: true, foreign_key: {to_table: :solidus_promotions_promotions} t.string :base_code, null: false t.integer :number_of_codes, null: false t.string :join_characters, null: false, default: "_" diff --git a/promotions/db/migrate/20230705171556_create_order_promotions.rb b/promotions/db/migrate/20230705171556_create_order_promotions.rb index ff9a9cd0175..7048122f396 100644 --- a/promotions/db/migrate/20230705171556_create_order_promotions.rb +++ b/promotions/db/migrate/20230705171556_create_order_promotions.rb @@ -1,9 +1,9 @@ class CreateOrderPromotions < ActiveRecord::Migration[7.0] def change create_table :solidus_promotions_order_promotions do |t| - t.references :order, type: :integer, index: true, null: false, foreign_key: { to_table: :spree_orders } - t.references :promotion, index: true, null: false, foreign_key: { to_table: :solidus_promotions_promotions } - t.references :promotion_code, index: true, null: true, foreign_key: { to_table: :solidus_promotions_promotion_codes } + t.references :order, type: :integer, index: true, null: false, foreign_key: {to_table: :spree_orders} + t.references :promotion, index: true, null: false, foreign_key: {to_table: :solidus_promotions_promotions} + t.references :promotion_code, index: true, null: true, foreign_key: {to_table: :solidus_promotions_promotion_codes} t.timestamps end diff --git a/promotions/db/migrate/20230725074235_create_shipping_rate_discounts.rb b/promotions/db/migrate/20230725074235_create_shipping_rate_discounts.rb index a10309362f0..01fb00e5da1 100644 --- a/promotions/db/migrate/20230725074235_create_shipping_rate_discounts.rb +++ b/promotions/db/migrate/20230725074235_create_shipping_rate_discounts.rb @@ -1,8 +1,8 @@ class CreateShippingRateDiscounts < ActiveRecord::Migration[7.0] def change create_table :solidus_promotions_shipping_rate_discounts do |t| - t.references :benefit, type: :bigint, null: false, foreign_key: { to_table: :solidus_promotions_benefits }, index: { name: "index_shipping_rate_discounts_on_benefit_id" } - t.references :shipping_rate, type: :integer, null: false, foreign_key: { to_table: :spree_shipping_rates }, index: { name: "index_shipping_rate_discounts_on_shipping_rate_id" } + t.references :benefit, type: :bigint, null: false, foreign_key: {to_table: :solidus_promotions_benefits}, index: {name: "index_shipping_rate_discounts_on_benefit_id"} + t.references :shipping_rate, type: :integer, null: false, foreign_key: {to_table: :spree_shipping_rates}, index: {name: "index_shipping_rate_discounts_on_shipping_rate_id"} t.decimal :amount, precision: 10, scale: 2, null: false t.string :label, null: false diff --git a/promotions/db/migrate/20231104135812_add_managed_by_order_benefit_to_line_items.rb b/promotions/db/migrate/20231104135812_add_managed_by_order_benefit_to_line_items.rb index b0b1efaa58b..f2be50411f0 100644 --- a/promotions/db/migrate/20231104135812_add_managed_by_order_benefit_to_line_items.rb +++ b/promotions/db/migrate/20231104135812_add_managed_by_order_benefit_to_line_items.rb @@ -1,5 +1,5 @@ class AddManagedByOrderBenefitToLineItems < ActiveRecord::Migration[7.0] def change - add_reference :spree_line_items, :managed_by_order_benefit, foreign_key: { to_table: :solidus_promotions_benefits, null: true } + add_reference :spree_line_items, :managed_by_order_benefit, foreign_key: {to_table: :solidus_promotions_benefits, null: true} end end diff --git a/promotions/lib/components/admin/solidus_promotions/promotion_categories/index/component.rb b/promotions/lib/components/admin/solidus_promotions/promotion_categories/index/component.rb index 9ff6b534244..2100997bb79 100644 --- a/promotions/lib/components/admin/solidus_promotions/promotion_categories/index/component.rb +++ b/promotions/lib/components/admin/solidus_promotions/promotion_categories/index/component.rb @@ -6,7 +6,7 @@ def model_class end def title - t('solidus_promotions.promotion_categories.title') + t("solidus_promotions.promotion_categories.title") end def edit_path(record) @@ -22,7 +22,7 @@ def page_actions tag: :a, text: t(".add"), href: solidus_promotions.new_promotion_category_path(**search_filter_params), - data: { turbo_frame: :resource_form }, + data: {turbo_frame: :resource_form}, icon: "add-line" ) end @@ -50,8 +50,8 @@ def name_column header: :name, data: ->(record) do link_to record.name, edit_path(record), - data: { turbo_frame: :resource_form }, - class: 'body-link' + data: {turbo_frame: :resource_form}, + class: "body-link" end } end @@ -61,8 +61,8 @@ def code_column header: :code, data: ->(record) do link_to record.code, edit_path(record), - data: { turbo_frame: :resource_form }, - class: 'body-link' + data: {turbo_frame: :resource_form}, + class: "body-link" end } end diff --git a/promotions/lib/components/admin/solidus_promotions/promotions/index/component.rb b/promotions/lib/components/admin/solidus_promotions/promotions/index/component.rb index 8416e5d343c..814f7e2098d 100644 --- a/promotions/lib/components/admin/solidus_promotions/promotions/index/component.rb +++ b/promotions/lib/components/admin/solidus_promotions/promotions/index/component.rb @@ -39,11 +39,11 @@ def batch_actions def scopes [ - { name: :active, label: t(".scopes.active"), default: true }, - { name: :draft, label: t(".scopes.draft") }, - { name: :future, label: t(".scopes.future") }, - { name: :expired, label: t(".scopes.expired") }, - { name: :all, label: t(".scopes.all") } + {name: :active, label: t(".scopes.active"), default: true}, + {name: :draft, label: t(".scopes.draft")}, + {name: :future, label: t(".scopes.future")}, + {name: :expired, label: t(".scopes.expired")}, + {name: :all, label: t(".scopes.all")} ] end diff --git a/promotions/lib/solidus_promotions/promotion_map.rb b/promotions/lib/solidus_promotions/promotion_map.rb index 8a8ed1005b3..39e2faa5c06 100644 --- a/promotions/lib/solidus_promotions/promotion_map.rb +++ b/promotions/lib/solidus_promotions/promotion_map.rb @@ -61,9 +61,9 @@ module SolidusPromotions actions: { Spree::Promotion::Actions::CreateAdjustment => ->(old_action) { calculator = case old_action.calculator - when Spree::Calculator::FlatRate + when Spree::Calculator::FlatRate SolidusPromotions::Calculators::DistributedAmount.new(preferences: old_action.calculator.preferences) - when Spree::Calculator::FlatPercentItemTotal + when Spree::Calculator::FlatPercentItemTotal SolidusPromotions::Calculators::Percent.new(preferred_percent: old_action.calculator.preferred_flat_percent) end @@ -74,17 +74,17 @@ module SolidusPromotions Spree::Promotion::Actions::CreateItemAdjustments => ->(old_action) { preferences = old_action.calculator.preferences calculator = case old_action.calculator - when Spree::Calculator::FlatRate + when Spree::Calculator::FlatRate SolidusPromotions::Calculators::FlatRate.new(preferences: preferences) - when Spree::Calculator::PercentOnLineItem + when Spree::Calculator::PercentOnLineItem SolidusPromotions::Calculators::Percent.new(preferences: preferences) - when Spree::Calculator::FlexiRate + when Spree::Calculator::FlexiRate SolidusPromotions::Calculators::FlexiRate.new(preferences: preferences) - when Spree::Calculator::DistributedAmount + when Spree::Calculator::DistributedAmount SolidusPromotions::Calculators::DistributedAmount.new(preferences: preferences) - when Spree::Calculator::TieredFlatRate + when Spree::Calculator::TieredFlatRate SolidusPromotions::Calculators::TieredFlatRate.new(preferences: preferences) - when Spree::Calculator::TieredPercent + when Spree::Calculator::TieredPercent SolidusPromotions::Calculators::TieredPercent.new(preferences: preferences) end @@ -95,17 +95,17 @@ module SolidusPromotions Spree::Promotion::Actions::CreateQuantityAdjustments => ->(old_action) { preferences = old_action.calculator.preferences calculator = case old_action.calculator - when Spree::Calculator::FlatRate + when Spree::Calculator::FlatRate SolidusPromotions::Calculators::FlatRate.new(preferences: preferences) - when Spree::Calculator::PercentOnLineItem + when Spree::Calculator::PercentOnLineItem SolidusPromotions::Calculators::Percent.new(preferences: preferences) - when Spree::Calculator::FlexiRate + when Spree::Calculator::FlexiRate SolidusPromotions::Calculators::FlexiRate.new(preferences: preferences) - when Spree::Calculator::DistributedAmount + when Spree::Calculator::DistributedAmount SolidusPromotions::Calculators::DistributedAmount.new(preferences: preferences) - when Spree::Calculator::TieredFlatRate + when Spree::Calculator::TieredFlatRate SolidusPromotions::Calculators::TieredFlatRate.new(preferences: preferences) - when Spree::Calculator::TieredPercent + when Spree::Calculator::TieredPercent SolidusPromotions::Calculators::TieredPercent.new(preferences: preferences) end diff --git a/promotions/spec/models/promotion/integration_spec.rb b/promotions/spec/models/promotion/integration_spec.rb index c469ca61229..a51b617d27e 100644 --- a/promotions/spec/models/promotion/integration_spec.rb +++ b/promotions/spec/models/promotion/integration_spec.rb @@ -185,7 +185,7 @@ context "with a migrated spree_promotion that is attached to the current order" do let(:shirt) { create(:variant) } let(:spree_promotion) { create(:promotion, :with_adjustable_action, code: true) } - let(:order) { create(:order_with_line_items, line_items_attributes: [{ variant: shirt }]) } + let(:order) { create(:order_with_line_items, line_items_attributes: [{variant: shirt}]) } before do Spree::Config.promotions = SolidusLegacyPromotions::Configuration.new diff --git a/promotions/spec/models/solidus_promotions/benefits/adjust_line_item_quantity_groups_spec.rb b/promotions/spec/models/solidus_promotions/benefits/adjust_line_item_quantity_groups_spec.rb index d3a6630e230..73b2f4ec9c4 100644 --- a/promotions/spec/models/solidus_promotions/benefits/adjust_line_item_quantity_groups_spec.rb +++ b/promotions/spec/models/solidus_promotions/benefits/adjust_line_item_quantity_groups_spec.rb @@ -14,7 +14,7 @@ let(:line_items_attributes) do [ - { price: 10, quantity: quantity } + {price: 10, quantity: quantity} ] end @@ -64,9 +64,9 @@ context "and 2x item A, 1x item B and 1x item C" do let(:line_items_attributes) do [ - { price: 10, quantity: 2 }, - { price: 10, quantity: 1 }, - { price: 10, quantity: 1 } + {price: 10, quantity: 2}, + {price: 10, quantity: 1}, + {price: 10, quantity: 1} ] end @@ -90,7 +90,7 @@ create( :order_with_line_items, line_items_attributes: [ - { quantity: 3 } + {quantity: 3} ] ) end @@ -110,8 +110,8 @@ let(:line_items_attributes) do [ - { price: 10, quantity: 1 }.merge(line_one_options), - { price: 10, quantity: 1 }.merge(line_two_options) + {price: 10, quantity: 1}.merge(line_one_options), + {price: 10, quantity: 1}.merge(line_two_options) ] end @@ -124,7 +124,7 @@ end context "and 2x item A and 1x item B" do - let(:line_one_options) { { quantity: 2 } } + let(:line_one_options) { {quantity: 2} } describe "the adjustment for the first item" do let(:line_item) { order.line_items.first } @@ -137,8 +137,8 @@ end context "and the items cost different amounts" do - let(:line_one_options) { { quantity: 3 } } - let(:line_two_options) { { price: 20 } } + let(:line_one_options) { {quantity: 3} } + let(:line_two_options) { {price: 20} } describe "the adjustment for the first item" do let(:line_item) { order.line_items.first } @@ -165,8 +165,8 @@ end let(:line_items_attributes) do [ - { price: 10, quantity: 1 }.merge(line_one_options), - { price: 10, quantity: 1 }.merge(line_two_options) + {price: 10, quantity: 1}.merge(line_one_options), + {price: 10, quantity: 1}.merge(line_two_options) ] end @@ -179,7 +179,7 @@ end context "and 2x item A and 1x item B" do - let(:line_one_options) { { quantity: 2 } } + let(:line_one_options) { {quantity: 2} } context "when amount falls within the first tier" do describe "the adjustment for the first item" do @@ -193,7 +193,7 @@ end context "when amount falls within the second tier" do - let(:line_two_options) { { price: 20 } } + let(:line_two_options) { {price: 20} } describe "the adjustment for the first item" do let(:line_item) { order.line_items.first } diff --git a/promotions/spec/models/solidus_promotions/calculators/distributed_amount_spec.rb b/promotions/spec/models/solidus_promotions/calculators/distributed_amount_spec.rb index 0fcafc3c088..d3b5fe7a704 100644 --- a/promotions/spec/models/solidus_promotions/calculators/distributed_amount_spec.rb +++ b/promotions/spec/models/solidus_promotions/calculators/distributed_amount_spec.rb @@ -14,7 +14,7 @@ let(:currency) { "USD" } context "applied to an order" do - let(:line_items_attributes) { [{ price: 20 }, { price: 30 }, { price: 100 }] } + let(:line_items_attributes) { [{price: 20}, {price: 30}, {price: 100}] } before do order.recalculate @@ -47,7 +47,7 @@ describe "#compute_line_item" do subject { calculator.compute_line_item(order.line_items.first) } - let(:line_items_attributes) { [{ price: 50 }, { price: 50 }, { price: 50 }] } + let(:line_items_attributes) { [{price: 50}, {price: 50}, {price: 50}] } context "when the order currency matches the store's currency" do let(:currency) { "USD" } diff --git a/promotions/spec/models/solidus_promotions/calculators/flexi_rate_spec.rb b/promotions/spec/models/solidus_promotions/calculators/flexi_rate_spec.rb index d8112638378..3aa8c6a1200 100644 --- a/promotions/spec/models/solidus_promotions/calculators/flexi_rate_spec.rb +++ b/promotions/spec/models/solidus_promotions/calculators/flexi_rate_spec.rb @@ -178,7 +178,7 @@ end it "allows creation of new object with all the attributes" do - attributes = { preferred_first_item: 1, preferred_additional_item: 1, preferred_max_items: 1 } + attributes = {preferred_first_item: 1, preferred_additional_item: 1, preferred_max_items: 1} calculator = described_class.new(attributes) expect(calculator).to have_attributes(attributes) end diff --git a/promotions/spec/models/solidus_promotions/calculators/tiered_flat_rate_spec.rb b/promotions/spec/models/solidus_promotions/calculators/tiered_flat_rate_spec.rb index 8307f211439..25d706f868b 100644 --- a/promotions/spec/models/solidus_promotions/calculators/tiered_flat_rate_spec.rb +++ b/promotions/spec/models/solidus_promotions/calculators/tiered_flat_rate_spec.rb @@ -13,53 +13,53 @@ context "when tiers is a hash" do context "and the key is not a positive number" do - before { calculator.preferred_tiers = { "nope" => 20 } } + before { calculator.preferred_tiers = {"nope" => 20} } it { is_expected.to be false } end context "and the key is an integer" do - before { calculator.preferred_tiers = { 20 => 20 } } + before { calculator.preferred_tiers = {20 => 20} } it "converts successfully" do expect(subject).to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal("20") => BigDecimal("20") }) + expect(calculator.preferred_tiers).to eq({BigDecimal(20) => BigDecimal(20)}) end end context "and the key is a float" do - before { calculator.preferred_tiers = { 20.5 => 20.5 } } + before { calculator.preferred_tiers = {20.5 => 20.5} } it "converts successfully" do expect(subject).to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal("20.5") => BigDecimal("20.5") }) + expect(calculator.preferred_tiers).to eq({BigDecimal("20.5") => BigDecimal("20.5")}) end end context "and the key is a string number" do - before { calculator.preferred_tiers = { "20" => 20 } } + before { calculator.preferred_tiers = {"20" => 20} } it "converts successfully" do expect(subject).to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal("20") => BigDecimal("20") }) + expect(calculator.preferred_tiers).to eq({BigDecimal(20) => BigDecimal(20)}) end end context "and the key is a numeric string with spaces" do - before { calculator.preferred_tiers = { " 20 " => 20 } } + before { calculator.preferred_tiers = {" 20 " => 20} } it "converts successfully" do expect(subject).to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal("20") => BigDecimal("20") }) + expect(calculator.preferred_tiers).to eq({BigDecimal(20) => BigDecimal(20)}) end end context "and the key is a string number with decimals" do - before { calculator.preferred_tiers = { "20.5" => "20.5" } } + before { calculator.preferred_tiers = {"20.5" => "20.5"} } it "converts successfully" do expect(subject).to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal("20.5") => BigDecimal("20.5") }) + expect(calculator.preferred_tiers).to eq({BigDecimal("20.5") => BigDecimal("20.5")}) end end end diff --git a/promotions/spec/models/solidus_promotions/calculators/tiered_percent_on_eligible_item_quantity_spec.rb b/promotions/spec/models/solidus_promotions/calculators/tiered_percent_on_eligible_item_quantity_spec.rb index c9c20ccb6ea..079333b4c0f 100644 --- a/promotions/spec/models/solidus_promotions/calculators/tiered_percent_on_eligible_item_quantity_spec.rb +++ b/promotions/spec/models/solidus_promotions/calculators/tiered_percent_on_eligible_item_quantity_spec.rb @@ -7,9 +7,9 @@ create(:order_with_line_items, line_items_attributes: [first_item_attrs, second_item_attrs, third_item_attrs]) end - let(:first_item_attrs) { { variant: shirt, quantity: 2, price: 50 } } - let(:second_item_attrs) { { variant: pants, quantity: 3 } } - let(:third_item_attrs) { { variant: mug, quantity: 1 } } + let(:first_item_attrs) { {variant: shirt, quantity: 2, price: 50} } + let(:second_item_attrs) { {variant: pants, quantity: 3} } + let(:third_item_attrs) { {variant: mug, quantity: 1} } let(:shirt) { create(:variant) } let(:pants) { create(:variant) } @@ -20,7 +20,7 @@ let(:promotion) { create(:solidus_promotion, name: "10 Percent on 5 apparel, 15 percent on 10", benefits: [benefit]) } let(:clothes_only) { SolidusPromotions::Conditions::Taxon.new(taxons: [clothes]) } let(:benefit) { SolidusPromotions::Benefits::AdjustLineItem.new(calculator: calculator, conditions: [clothes_only]) } - let(:calculator) { described_class.new(preferred_base_percent: 10, preferred_tiers: { 10 => 15.0 }) } + let(:calculator) { described_class.new(preferred_base_percent: 10, preferred_tiers: {10 => 15.0}) } let(:line_item) { order.line_items.detect { _1.variant == shirt } } @@ -30,8 +30,8 @@ it { is_expected.to eq(10) } context "if we have 12" do - let(:first_item_attrs) { { variant: shirt, quantity: 7, price: 50 } } - let(:second_item_attrs) { { variant: pants, quantity: 5 } } + let(:first_item_attrs) { {variant: shirt, quantity: 7, price: 50} } + let(:second_item_attrs) { {variant: pants, quantity: 5} } # 7 Shirts at 50, 350 USD, 15 % == 52.5 it { is_expected.to eq(52.5) } diff --git a/promotions/spec/models/solidus_promotions/calculators/tiered_percent_spec.rb b/promotions/spec/models/solidus_promotions/calculators/tiered_percent_spec.rb index 88ccf6ef278..693296d2883 100644 --- a/promotions/spec/models/solidus_promotions/calculators/tiered_percent_spec.rb +++ b/promotions/spec/models/solidus_promotions/calculators/tiered_percent_spec.rb @@ -25,59 +25,59 @@ context "when tiers is a hash" do context "and the key is not a positive number" do - before { calculator.preferred_tiers = { "nope" => 20 } } + before { calculator.preferred_tiers = {"nope" => 20} } it { is_expected.to be false } end context "and one of the values is not a percent" do - before { calculator.preferred_tiers = { 10 => 110 } } + before { calculator.preferred_tiers = {10 => 110} } it { is_expected.to be false } end context "and the key is an integer" do - before { calculator.preferred_tiers = { 20 => 20 } } + before { calculator.preferred_tiers = {20 => 20} } it "converts successfully" do expect(subject).to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal("20") => BigDecimal("20") }) + expect(calculator.preferred_tiers).to eq({BigDecimal(20) => BigDecimal(20)}) end end context "and the key is a float" do - before { calculator.preferred_tiers = { 20.5 => 20.5 } } + before { calculator.preferred_tiers = {20.5 => 20.5} } it "converts successfully" do expect(subject).to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal("20.5") => BigDecimal("20.5") }) + expect(calculator.preferred_tiers).to eq({BigDecimal("20.5") => BigDecimal("20.5")}) end end context "and the key is a string number" do - before { calculator.preferred_tiers = { "20" => 20 } } + before { calculator.preferred_tiers = {"20" => 20} } it "converts successfully" do expect(subject).to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal("20") => BigDecimal("20") }) + expect(calculator.preferred_tiers).to eq({BigDecimal(20) => BigDecimal(20)}) end end context "and the key is a numeric string with spaces" do - before { calculator.preferred_tiers = { " 20 " => 20 } } + before { calculator.preferred_tiers = {" 20 " => 20} } it "converts successfully" do expect(subject).to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal("20") => BigDecimal("20") }) + expect(calculator.preferred_tiers).to eq({BigDecimal(20) => BigDecimal(20)}) end end context "and the key is a string number with decimals" do - before { calculator.preferred_tiers = { "20.5" => "20.5" } } + before { calculator.preferred_tiers = {"20.5" => "20.5"} } it "converts successfully" do expect(subject).to be true - expect(calculator.preferred_tiers).to eq({ BigDecimal("20.5") => BigDecimal("20.5") }) + expect(calculator.preferred_tiers).to eq({BigDecimal("20.5") => BigDecimal("20.5")}) end end end diff --git a/promotions/spec/models/solidus_promotions/conditions/minimum_quantity_spec.rb b/promotions/spec/models/solidus_promotions/conditions/minimum_quantity_spec.rb index d4655125dbf..609411fbd88 100644 --- a/promotions/spec/models/solidus_promotions/conditions/minimum_quantity_spec.rb +++ b/promotions/spec/models/solidus_promotions/conditions/minimum_quantity_spec.rb @@ -48,19 +48,19 @@ context "when only the quantity condition is applied" do context "when the quantity is less than the minimum" do - let(:line_items) { [{ quantity: 1 }] } + let(:line_items) { [{quantity: 1}] } it { is_expected.to be false } end context "when the quantity is equal to the minimum" do - let(:line_items) { [{ quantity: 2 }] } + let(:line_items) { [{quantity: 2}] } it { is_expected.to be true } end context "when the quantity is greater than the minimum" do - let(:line_items) { [{ quantity: 4 }] } + let(:line_items) { [{quantity: 4}] } it { is_expected.to be true } end @@ -83,8 +83,8 @@ context "when the applicable quantity is less than the minimum" do let(:line_items) do [ - { variant: carry_on, quantity: 1 }, - { variant: everywhere_bag, quantity: 1 } + {variant: carry_on, quantity: 1}, + {variant: everywhere_bag, quantity: 1} ] end @@ -94,9 +94,9 @@ context "when the applicable quantity is greater than the minimum" do let(:line_items) do [ - { variant: carry_on, quantity: 1 }, - { variant: other_carry_on, quantity: 1 }, - { variant: everywhere_bag, quantity: 1 } + {variant: carry_on, quantity: 1}, + {variant: other_carry_on, quantity: 1}, + {variant: everywhere_bag, quantity: 1} ] end diff --git a/promotions/spec/models/solidus_promotions/conditions/option_value_spec.rb b/promotions/spec/models/solidus_promotions/conditions/option_value_spec.rb index 29d00b7b34f..af727a39ad2 100644 --- a/promotions/spec/models/solidus_promotions/conditions/option_value_spec.rb +++ b/promotions/spec/models/solidus_promotions/conditions/option_value_spec.rb @@ -9,8 +9,8 @@ subject { condition.preferred_eligible_values } it "assigns a nicely formatted hash" do - condition.preferred_eligible_values = { "5" => "1,2", "6" => "1" } - expect(subject).to eq({ 5 => [1, 2], 6 => [1] }) + condition.preferred_eligible_values = {"5" => "1,2", "6" => "1"} + expect(subject).to eq({5 => [1, 2], 6 => [1]}) end end @@ -23,9 +23,9 @@ context "when there are any applicable line items" do before do - condition.preferred_eligible_values = { line_item.product.id => [ + condition.preferred_eligible_values = {line_item.product.id => [ line_item.variant.option_values.pick(:id) - ] } + ]} end it { is_expected.to be true } @@ -33,7 +33,7 @@ context "when there are no applicable line items" do before do - condition.preferred_eligible_values = { 99 => [99] } + condition.preferred_eligible_values = {99 => [99]} end it { is_expected.to be false } @@ -49,9 +49,9 @@ context "when there are any applicable line items" do before do - condition.preferred_eligible_values = { line_item.product.id => [ + condition.preferred_eligible_values = {line_item.product.id => [ line_item.variant.option_values.pick(:id) - ] } + ]} end it { is_expected.to be true } @@ -59,7 +59,7 @@ context "when there are no applicable line items" do before do - condition.preferred_eligible_values = { 99 => [99] } + condition.preferred_eligible_values = {99 => [99]} end it { is_expected.to be false } diff --git a/promotions/spec/models/solidus_promotions/conditions/product_spec.rb b/promotions/spec/models/solidus_promotions/conditions/product_spec.rb index 8ed9f5b64b2..65906cc2b39 100644 --- a/promotions/spec/models/solidus_promotions/conditions/product_spec.rb +++ b/promotions/spec/models/solidus_promotions/conditions/product_spec.rb @@ -27,7 +27,7 @@ it { is_expected.to be true } context "with line item applicable set to false" do - let(:condition_options) { { preferred_line_item_applicable: false } } + let(:condition_options) { {preferred_line_item_applicable: false} } it { is_expected.to be false } end diff --git a/promotions/spec/models/solidus_promotions/distributed_amounts_handler_spec.rb b/promotions/spec/models/solidus_promotions/distributed_amounts_handler_spec.rb index d7fa53a2940..db17c59c595 100644 --- a/promotions/spec/models/solidus_promotions/distributed_amounts_handler_spec.rb +++ b/promotions/spec/models/solidus_promotions/distributed_amounts_handler_spec.rb @@ -18,7 +18,7 @@ let(:total_amount) { 15 } context "when there is only one line item" do - let(:line_items_attributes) { [{ price: 100 }] } + let(:line_items_attributes) { [{price: 100}] } let(:line_item) { order.line_items.first } it "applies the entire amount to the line item" do @@ -28,7 +28,7 @@ context "when there are multiple line items" do let(:line_items_attributes) do - [{ price: 50 }, { price: 50 }, { price: 50 }] + [{price: 50}, {price: 50}, {price: 50}] end context "and the line items are equally priced" do @@ -63,7 +63,7 @@ context "and the line items do not have equal subtotal amounts" do let(:line_items_attributes) do - [{ price: 50, quantity: 3 }, { price: 50, quantity: 1 }, { price: 50, quantity: 2 }] + [{price: 50, quantity: 3}, {price: 50, quantity: 1}, {price: 50, quantity: 2}] end it "distributes the total amount relative to the item's price" do diff --git a/promotions/spec/models/solidus_promotions/order_adjuster/discount_order_spec.rb b/promotions/spec/models/solidus_promotions/order_adjuster/discount_order_spec.rb index 606e687d5a2..c25dec057d9 100644 --- a/promotions/spec/models/solidus_promotions/order_adjuster/discount_order_spec.rb +++ b/promotions/spec/models/solidus_promotions/order_adjuster/discount_order_spec.rb @@ -17,7 +17,7 @@ describe "discounting orders" do let(:shirt) { create(:product, name: "Shirt") } - let(:order) { create(:order_with_line_items, line_items_attributes: [{ variant: shirt.master, quantity: 1 }]) } + let(:order) { create(:order_with_line_items, line_items_attributes: [{variant: shirt.master, quantity: 1}]) } let!(:promotion) { create(:solidus_promotion, :with_free_shipping, name: "20% off Shirts", apply_automatically: true) } let(:promotions) { [promotion] } let(:discounter) { described_class.new(order, promotions) } @@ -35,7 +35,7 @@ describe "collecting eligibility results in a dry run" do let(:shirt) { create(:product, name: "Shirt") } - let(:order) { create(:order_with_line_items, line_items_attributes: [{ variant: shirt.master, quantity: 1 }]) } + let(:order) { create(:order_with_line_items, line_items_attributes: [{variant: shirt.master, quantity: 1}]) } let(:conditions) { [product_condition] } let!(:promotion) { create(:solidus_promotion, :with_adjustable_benefit, conditions: conditions, name: "20% off Shirts", apply_automatically: true) } let(:product_condition) { SolidusPromotions::Conditions::Product.new(products: [shirt], preferred_line_item_applicable: false) } @@ -96,7 +96,7 @@ let(:order) do create( :order_with_line_items, - line_items_attributes: [{ variant: shirt.master, quantity: 1 }, { variant: pants.master, quantity: 1 }] + line_items_attributes: [{variant: shirt.master, quantity: 1}, {variant: pants.master, quantity: 1}] ) end @@ -148,7 +148,7 @@ context "where one benefit succeeds and another errors" do let(:usps) { create(:shipping_method) } let(:ups_ground) { create(:shipping_method) } - let(:order) { create(:order_with_line_items, line_items_attributes: [{ variant: shirt.master, quantity: 1 }], shipping_method: ups_ground) } + let(:order) { create(:order_with_line_items, line_items_attributes: [{variant: shirt.master, quantity: 1}], shipping_method: ups_ground) } let(:product_condition) { SolidusPromotions::Conditions::Product.new(products: [shirt], preferred_line_item_applicable: false) } let(:shipping_method_condition) { SolidusPromotions::Conditions::ShippingMethod.new(preferred_shipping_method_ids: [usps.id]) } let(:ten_off_items) { SolidusPromotions::Calculators::Percent.create!(preferred_percent: 10) } diff --git a/promotions/spec/models/solidus_promotions/promotion_handler/coupon_spec.rb b/promotions/spec/models/solidus_promotions/promotion_handler/coupon_spec.rb index 7b6df6178de..0a828159588 100644 --- a/promotions/spec/models/solidus_promotions/promotion_handler/coupon_spec.rb +++ b/promotions/spec/models/solidus_promotions/promotion_handler/coupon_spec.rb @@ -425,7 +425,7 @@ def expect_adjustment_creation(adjustable:, promotion:) context "with multiple errors" do let(:shirt) { create(:product) } let(:hat) { create(:product) } - let(:order) { create(:order_with_line_items, coupon_code: "XMAS", line_items_attributes: [{ variant: shirt.master, quantity: 1 }]) } + let(:order) { create(:order_with_line_items, coupon_code: "XMAS", line_items_attributes: [{variant: shirt.master, quantity: 1}]) } let(:product_condition) { SolidusPromotions::Conditions::Product.new(products: [hat], preferred_line_item_applicable: false) } let(:nth_order_condition) { SolidusPromotions::Conditions::NthOrder.new(preferred_nth_order: 2) } let(:ten_off_items) { SolidusPromotions::Calculators::Percent.create!(preferred_percent: 10) } diff --git a/promotions/spec/models/solidus_promotions/promotion_spec.rb b/promotions/spec/models/solidus_promotions/promotion_spec.rb index 6d941eabf6b..59ec987196c 100644 --- a/promotions/spec/models/solidus_promotions/promotion_spec.rb +++ b/promotions/spec/models/solidus_promotions/promotion_spec.rb @@ -112,7 +112,7 @@ describe ".ordered_lanes" do subject { described_class.ordered_lanes } - it { is_expected.to eq({ "pre" => 0, "default" => 1, "post" => 2 }) } + it { is_expected.to eq({"pre" => 0, "default" => 1, "post" => 2}) } end describe "validations" do diff --git a/promotions/spec/requests/solidus_promotions/admin/promotion_categories_spec.rb b/promotions/spec/requests/solidus_promotions/admin/promotion_categories_spec.rb index f05d2902f78..9e947ef744e 100644 --- a/promotions/spec/requests/solidus_promotions/admin/promotion_categories_spec.rb +++ b/promotions/spec/requests/solidus_promotions/admin/promotion_categories_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'rails_helper' -require 'solidus_admin/testing_support/shared_examples/crud_resource_requests' +require "rails_helper" +require "solidus_admin/testing_support/shared_examples/crud_resource_requests" -RSpec.describe 'SolidusPromotions::PromotionCategoriesController', :solidus_admin, type: :request do - include_examples 'CRUD resource requests', 'promotion_category' do +RSpec.describe "SolidusPromotions::PromotionCategoriesController", :solidus_admin, type: :request do + include_examples "CRUD resource requests", "promotion_category" do let(:resource_class) { SolidusPromotions::PromotionCategory } - let(:valid_attributes) { { name: "Expired", code: "exp.1" } } - let(:invalid_attributes) { { name: "", code: "" } } + let(:valid_attributes) { {name: "Expired", code: "exp.1"} } + let(:invalid_attributes) { {name: "", code: ""} } let(:factory) { :solidus_promotion_category } let(:url_helpers) { solidus_promotions } end diff --git a/promotions/spec/requests/solidus_promotions/api/checkout_spec.rb b/promotions/spec/requests/solidus_promotions/api/checkout_spec.rb index eb8f0688c1a..88d6cc73751 100644 --- a/promotions/spec/requests/solidus_promotions/api/checkout_spec.rb +++ b/promotions/spec/requests/solidus_promotions/api/checkout_spec.rb @@ -56,7 +56,7 @@ def update_order(order_params: {}) def create_line_item(variant, quantity = 1) expect { post "/api/orders/#{@order.number}/line_items", - params: { line_item: { variant_id: variant.id, quantity: quantity } } + params: {line_item: {variant_id: variant.id, quantity: quantity}} }.to change { @order.line_items.count }.by 1 expect(response).to have_http_status(:created) end @@ -64,7 +64,7 @@ def create_line_item(variant, quantity = 1) def add_promotion(_promotion) expect { post "/api/orders/#{@order.number}/coupon_codes", - params: { coupon_code: promotion_code.value } + params: {coupon_code: promotion_code.value} }.to change { @order.solidus_promotions.count }.by 1 expect(response).to have_http_status(:ok) end @@ -74,14 +74,14 @@ def add_address(address, billing: true) # It seems we are missing an order-scoped address api endpoint since we need # to use update here. expect { - update_order(order_params: { order: { address_type => address.as_json.except("id") } }) + update_order(order_params: {order: {address_type => address.as_json.except("id")}}) }.to change { @order.reload.public_send(address_type) }.to address end def add_payment expect { post "/api/orders/#{@order.number}/payments", - params: { payment: { payment_method_id: payment_method.id } } + params: {payment: {payment_method_id: payment_method.id}} }.to change { @order.reload.payments.count }.by 1 expect(response).to have_http_status(:created) expect(@order.payments.last.payment_method).to eq payment_method @@ -141,8 +141,8 @@ def assert_order_expectations bill_address: bill_address.as_json.except("id"), ship_address: ship_address.as_json.except("id"), line_items: { - 0 => { variant_id: variant_1.id, quantity: 2 }, - 1 => { variant_id: variant_2.id, quantity: 2 } + 0 => {variant_id: variant_1.id, quantity: 2}, + 1 => {variant_id: variant_2.id, quantity: 2} } # Would like to do this, but it puts the payment in a complete state, # which the order does not like when transitioning from confirm to complete @@ -169,8 +169,8 @@ def assert_order_expectations bill_address: bill_address.as_json.except("id"), ship_address: ship_address.as_json.except("id"), line_items: { - 0 => { variant_id: variant_1.id, quantity: 2 }, - 1 => { variant_id: variant_2.id, quantity: 2 } + 0 => {variant_id: variant_1.id, quantity: 2}, + 1 => {variant_id: variant_2.id, quantity: 2} } # Would like to do this, but it puts the payment in a complete state, # which the order does not like when transitioning from confirm to complete diff --git a/promotions/spec/requests/solidus_promotions/backend/benefits_request_spec.rb b/promotions/spec/requests/solidus_promotions/backend/benefits_request_spec.rb index a0d3e89dbbf..aa705849a09 100644 --- a/promotions/spec/requests/solidus_promotions/backend/benefits_request_spec.rb +++ b/promotions/spec/requests/solidus_promotions/backend/benefits_request_spec.rb @@ -11,7 +11,7 @@ post solidus_promotions.admin_promotion_benefits_path(promotion_id: promotion.id), params: { benefit: { type: "SolidusPromotions::Benefits::AdjustLineItem", - calculator_attributes: { type: "SolidusPromotions::Calculators::FlatRate" } + calculator_attributes: {type: "SolidusPromotions::Calculators::FlatRate"} } } expect(response).to be_redirect @@ -21,7 +21,7 @@ it "can not create a promotion benefit of an invalid type" do post solidus_promotions.admin_promotion_benefits_path(promotion_id: promotion.id), params: { - benefit: { type: "Spree::InvalidType" } + benefit: {type: "Spree::InvalidType"} } expect(response).to be_redirect expect(response).to redirect_to solidus_promotions.edit_admin_promotion_path(promotion) diff --git a/promotions/spec/requests/solidus_promotions/backend/conditions_request_spec.rb b/promotions/spec/requests/solidus_promotions/backend/conditions_request_spec.rb index b7274c5b8cf..1b28d541b6f 100644 --- a/promotions/spec/requests/solidus_promotions/backend/conditions_request_spec.rb +++ b/promotions/spec/requests/solidus_promotions/backend/conditions_request_spec.rb @@ -13,7 +13,7 @@ it "can create a promotion condition of a valid type" do post solidus_promotions.admin_promotion_benefit_conditions_path(promotion, benefit), params: { - condition: { type: "SolidusPromotions::Conditions::Product" } + condition: {type: "SolidusPromotions::Conditions::Product"} } expect(response).to be_redirect expect(response).to redirect_to solidus_promotions.edit_admin_promotion_path(promotion) @@ -22,7 +22,7 @@ it "can not create a promotion condition of an invalid type" do post solidus_promotions.admin_promotion_benefit_conditions_path(promotion, benefit), params: { - condition: { type: "Spree::InvalidType" } + condition: {type: "Spree::InvalidType"} } expect(response).to be_redirect expect(response).to redirect_to solidus_promotions.edit_admin_promotion_path(promotion) @@ -33,7 +33,7 @@ context "when the user is not authorized" do it "redirects the user to login" do post solidus_promotions.admin_promotion_benefit_conditions_path(promotion, benefit), params: { - condition: { type: "SolidusPromotions::Conditions::Product" } + condition: {type: "SolidusPromotions::Conditions::Product"} } expect(response).to be_redirect end diff --git a/promotions/spec/system/solidus_promotions/admin/promotion_categories_spec.rb b/promotions/spec/system/solidus_promotions/admin/promotion_categories_spec.rb index 878947c049d..b529fcacdfa 100644 --- a/promotions/spec/system/solidus_promotions/admin/promotion_categories_spec.rb +++ b/promotions/spec/system/solidus_promotions/admin/promotion_categories_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'rails_helper' -require 'solidus_admin/testing_support/shared_examples/promotion_categories_features' +require "rails_helper" +require "solidus_admin/testing_support/shared_examples/promotion_categories_features" RSpec.describe "Promotion Categories", type: :feature, solidus_admin: true do - include_examples 'promotion categories features' do + include_examples "promotion categories features" do let(:factory_name) { :solidus_promotion_category } let(:model_class) { SolidusPromotions::PromotionCategory } let(:index_path) { "/admin/solidus/promotion_categories" } diff --git a/promotions/spec/system/solidus_promotions/backend/orders/adjustments_spec.rb b/promotions/spec/system/solidus_promotions/backend/orders/adjustments_spec.rb index d861d498fa2..2b206fd69d9 100644 --- a/promotions/spec/system/solidus_promotions/backend/orders/adjustments_spec.rb +++ b/promotions/spec/system/solidus_promotions/backend/orders/adjustments_spec.rb @@ -27,13 +27,13 @@ click_link "Adjustments" end - let!(:order) { create(:order, line_items_attributes: [{ price: 10, variant: }]) } + let!(:order) { create(:order, line_items_attributes: [{price: 10, variant:}]) } context "when the order is completed" do let!(:order) do create( :completed_order_with_totals, - line_items_attributes: [{ price: 10, variant: }], + line_items_attributes: [{price: 10, variant:}], ship_address: ) end @@ -52,7 +52,7 @@ end context "when the promotion system is configured to not allow applying promotions to completed orders" do - let(:preferences) { { recalculate_complete_orders: false } } + let(:preferences) { {recalculate_complete_orders: false} } it "does not show input field for promotion code" do expect(page).to have_content("Adjustments") diff --git a/promotions/spec/system/solidus_promotions/backend/promotions_spec.rb b/promotions/spec/system/solidus_promotions/backend/promotions_spec.rb index fd431057cc6..6f025ca8d43 100644 --- a/promotions/spec/system/solidus_promotions/backend/promotions_spec.rb +++ b/promotions/spec/system/solidus_promotions/backend/promotions_spec.rb @@ -51,39 +51,39 @@ end it "filters by name" do - visit solidus_promotions.admin_promotions_path(q: { name_cont: promotion1.name }) + visit solidus_promotions.admin_promotions_path(q: {name_cont: promotion1.name}) expect(page).to have_content(promotion1.name) expect(page).not_to have_content(promotion2.name) end it "filters by code" do - visit solidus_promotions.admin_promotions_path(q: { codes_value_cont: promotion1.codes.first.value }) + visit solidus_promotions.admin_promotions_path(q: {codes_value_cont: promotion1.codes.first.value}) expect(page).to have_content(promotion1.name) expect(page).not_to have_content(promotion2.name) end it "filters by path" do - visit solidus_promotions.admin_promotions_path(q: { path_cont: promotion1.path }) + visit solidus_promotions.admin_promotions_path(q: {path_cont: promotion1.path}) expect(page).to have_content(promotion1.name) expect(page).not_to have_content(promotion2.name) end it "filters by active date" do - visit solidus_promotions.admin_promotions_path(q: { active: Time.current }) + visit solidus_promotions.admin_promotions_path(q: {active: Time.current}) expect(page).to have_content(promotion1.name) expect(page).to have_content(promotion2.name) expect(page).not_to have_content(promotion3.name) end it "filters by active the day before yesterday" do - visit solidus_promotions.admin_promotions_path(q: { active: 2.days.ago }) + visit solidus_promotions.admin_promotions_path(q: {active: 2.days.ago}) expect(page).to have_content(promotion1.name) expect(page).to have_content(promotion2.name) expect(page).to have_content(promotion3.name) end it "filters by lane" do - visit solidus_promotions.admin_promotions_path(q: { lane_eq: :pre }) + visit solidus_promotions.admin_promotions_path(q: {lane_eq: :pre}) expect(page).to have_content(promotion1.name) expect(page).not_to have_content(promotion2.name) expect(page).not_to have_content(promotion3.name) diff --git a/sample/Rakefile b/sample/Rakefile index c392cfd6396..a7a97510bb8 100644 --- a/sample/Rakefile +++ b/sample/Rakefile @@ -1,17 +1,17 @@ # frozen_string_literal: true -require 'rake' -require 'rake/testtask' -require 'rspec/core/rake_task' -require 'spree/testing_support/dummy_app/rake_tasks' -require 'bundler/gem_tasks' +require "rake" +require "rake/testtask" +require "rspec/core/rake_task" +require "spree/testing_support/dummy_app/rake_tasks" +require "bundler/gem_tasks" RSpec::Core::RakeTask.new task default: :spec DummyApp::RakeTasks.new( gem_root: File.expand_path(__dir__), - lib_name: 'solidus_sample' + lib_name: "solidus_sample" ) -task test_app: 'db:reset' +task test_app: "db:reset" diff --git a/sample/db/samples/addresses.rb b/sample/db/samples/addresses.rb index 972b2f1e0ef..d24b82d2114 100644 --- a/sample/db/samples/addresses.rb +++ b/sample/db/samples/addresses.rb @@ -4,25 +4,25 @@ new_york = Spree::State.find_by!(name: "New York") names = ["Sterling Torp", "Jennette Vandervort", "Salome Stroman", "Lyla Lang", - "Lola Zulauf", "Cheree Bruen", "Hettie Torp", "Barbie Gutmann", - "Amelia Renner", "Marceline Bergstrom", "Keeley Sauer", "Mi Gaylord", - "Karon Mills", "Jessika Daugherty", "Emmy Stark"] + "Lola Zulauf", "Cheree Bruen", "Hettie Torp", "Barbie Gutmann", + "Amelia Renner", "Marceline Bergstrom", "Keeley Sauer", "Mi Gaylord", + "Karon Mills", "Jessika Daugherty", "Emmy Stark"] street_addresses = ["7377 Jacobi Passage", "4725 Serena Ridges", - "79832 Hamill Creek", "0746 Genoveva Villages", - "86717 D'Amore Hollow", "8529 Delena Well", - "959 Lockman Ferry", "67016 Murphy Fork", - "193 Larkin Divide", "80697 Cole Parks"] + "79832 Hamill Creek", "0746 Genoveva Villages", + "86717 D'Amore Hollow", "8529 Delena Well", + "959 Lockman Ferry", "67016 Murphy Fork", + "193 Larkin Divide", "80697 Cole Parks"] secondary_addresses = ["Suite 918", "Suite 374", "Apt. 714", "Apt. 351", - "Suite 274", "Suite 240", "Suite 892", "Apt. 176", - "Apt. 986", "Apt. 583"] + "Suite 274", "Suite 240", "Suite 892", "Apt. 176", + "Apt. 986", "Apt. 583"] cities = ["Lake Laurenceview", "Lucilefurt", "South Jannetteport", - "Leannonport", "Legrosburgh", "Willmsberg", "Karoleside", - "Lake German", "Keeblerfort", "Lemkehaven"] + "Leannonport", "Legrosburgh", "Willmsberg", "Karoleside", + "Lake German", "Keeblerfort", "Lemkehaven"] phone_numbers = ["(392)859-7319 x670", "738-831-3210 x6047", - "(441)881-8127 x030", "1-744-701-0536 x30504", - "(992)432-8273 x97676", "482.249.0178 x532", - "(855)317-6523", "1-529-214-7315 x90865", - "(662)877-7894 x703", "689.578.8564 x72399"] + "(441)881-8127 x030", "1-744-701-0536 x30504", + "(992)432-8273 x97676", "482.249.0178 x532", + "(855)317-6523", "1-529-214-7315 x90865", + "(662)877-7894 x703", "689.578.8564 x72399"] 2.times do Spree::Address.create!( diff --git a/sample/db/samples/assets.rb b/sample/db/samples/assets.rb index 1f0dbf44ee5..d3aa325d0a7 100644 --- a/sample/db/samples/assets.rb +++ b/sample/db/samples/assets.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'thor' +require "thor" shell = Thor::Base.shell.new Spree::Sample.load_sample("products") @@ -94,7 +94,7 @@ def image(name, type = "png") { attachment: image("solidus_cap_black_1") } - ], + ] } products.each do |key, product| @@ -103,7 +103,7 @@ def image(name, type = "png") index = 1 loop do - image_path = image("#{key}_#{color}_#{index}", 'png') + image_path = image("#{key}_#{color}_#{index}", "png") break unless image_path File.open(image_path) do |f| diff --git a/sample/db/samples/option_values.rb b/sample/db/samples/option_values.rb index 6d56c7f8429..44a2d0e56fd 100644 --- a/sample/db/samples/option_values.rb +++ b/sample/db/samples/option_values.rb @@ -53,5 +53,5 @@ presentation: "Red", position: 4, option_type: color - }, + } ]) diff --git a/sample/db/samples/orders.rb b/sample/db/samples/orders.rb index 1f93d855aa6..b309e584cec 100644 --- a/sample/db/samples/orders.rb +++ b/sample/db/samples/orders.rb @@ -44,6 +44,6 @@ order.payments.create!(payment_method:) order.update(store:) - order.next! while !order.can_complete? + order.next! until order.can_complete? order.complete! end diff --git a/sample/db/samples/payments.rb b/sample/db/samples/payments.rb index b26d6c176dc..e40c747feee 100644 --- a/sample/db/samples/payments.rb +++ b/sample/db/samples/payments.rb @@ -1,17 +1,17 @@ # frozen_string_literal: true # create payments based on the totals since they can't be known in YAML (quantities are random) -method = Spree::PaymentMethod.where(name: 'Credit Card', active: true).first +method = Spree::PaymentMethod.where(name: "Credit Card", active: true).first # This table was previously called spree_creditcards, and older migrations # reference it as such. Make it explicit here that this table has been renamed. -Spree::CreditCard.table_name = 'spree_credit_cards' +Spree::CreditCard.table_name = "spree_credit_cards" -creditcard = Spree::CreditCard.create(cc_type: 'visa', month: 12, year: 2.years.from_now.year, last_digits: '1111', - name: 'Sean Schofield', gateway_customer_profile_id: 'BGS-1234') +creditcard = Spree::CreditCard.create(cc_type: "visa", month: 12, year: 2.years.from_now.year, last_digits: "1111", + name: "Sean Schofield", gateway_customer_profile_id: "BGS-1234") Spree::Order.all.each_with_index do |order, _index| order.recalculate payment = order.payments.create!(amount: order.total, source: creditcard.clone, payment_method: method) - payment.update_columns(state: 'pending', response_code: '12345') + payment.update_columns(state: "pending", response_code: "12345") end diff --git a/sample/db/samples/product_properties.rb b/sample/db/samples/product_properties.rb index 4a4754ec11b..29777f39d13 100644 --- a/sample/db/samples/product_properties.rb +++ b/sample/db/samples/product_properties.rb @@ -5,13 +5,13 @@ "Solidus tote" => { "Type" => "Tote", - "Size" => %{15" x 18" x 6"}, + "Size" => %(15" x 18" x 6"), "Material" => "Canvas" }, "Solidus canvas tote bag" => { "Type" => "Tote", - "Size" => %{15" x 18" x 6"}, + "Size" => %(15" x 18" x 6"), "Material" => "Canvas" }, "Solidus cap" => @@ -67,7 +67,7 @@ "Solidus Water Bottle" => { "Type" => "Insulated Water Bottle", - "Size" => %{4.5" tall, 3.25" dia.} + "Size" => %(4.5" tall, 3.25" dia.) } } diff --git a/sample/db/samples/products.rb b/sample/db/samples/products.rb index f1808cb3a41..6ccede77e88 100644 --- a/sample/db/samples/products.rb +++ b/sample/db/samples/products.rb @@ -12,7 +12,7 @@ "Perferendis sed voluptatem error ipsam voluptatem esse ipsa incidunt. Doloremque quos ratione quia voluptas consequatur mollitia optio. Optio sed iure aut aliquid voluptatum facilis mollitia cum. Dignissimos in saepe consequatur et consequatur dolorem blanditiis.", "Necessitatibus optio quod ullam itaque quis corporis occaecati. Saepe harum voluptates consectetur rerum dolorum. Corrupti officiis reprehenderit quo excepturi cumque. Soluta eos perspiciatis aut et ea nulla amet dolores. Dolores distinctio nesciunt libero voluptas molestiae consequatur aut veritatis.", "Soluta sed error debitis repellendus et. Voluptates unde enim qui velit. Libero earum tenetur nulla similique temporibus quod repellendus quibusdam.", - "Recusandae animi deserunt provident dignissimos ullam harum alias et. Itaque dicta maxime consectetur ut nemo non voluptatem. Voluptatem ipsum ut culpa eaque dolores.", + "Recusandae animi deserunt provident dignissimos ullam harum alias et. Itaque dicta maxime consectetur ut nemo non voluptatem. Voluptatem ipsum ut culpa eaque dolores." ] default_attrs = { @@ -32,7 +32,7 @@ weight: 0.5, height: 20, width: 10, - depth: 5, + depth: 5 }, { name: "Solidus tote", @@ -45,7 +45,7 @@ weight: 0.5, height: 20, width: 10, - depth: 5, + depth: 5 }, { name: "Solidus hoodie", @@ -58,7 +58,7 @@ weight: 1, height: 20, width: 10, - depth: 5, + depth: 5 }, { name: "Solidus mug set", diff --git a/sample/db/samples/reimbursements.rb b/sample/db/samples/reimbursements.rb index 7445e6c8ac7..ece137bab93 100644 --- a/sample/db/samples/reimbursements.rb +++ b/sample/db/samples/reimbursements.rb @@ -6,11 +6,11 @@ inventory_unit = order.inventory_units.take! stock_location = inventory_unit.find_stock_item.stock_location return_reason = Spree::ReturnReason.active.take! -preferred_reimbursement_type = Spree::ReimbursementType.where(name: 'Original').take! +preferred_reimbursement_type = Spree::ReimbursementType.where(name: "Original").take! admin_user = if defined?(Spree::Auth) Spree.user_class.admin.take! else - Spree.user_class.find_or_create_by!(email: 'admin@example.com') + Spree.user_class.find_or_create_by!(email: "admin@example.com") end # Mark the order paid and shipped diff --git a/sample/db/samples/shipping_methods.rb b/sample/db/samples/shipping_methods.rb index d4cfa51b9cc..fcc74a3e5f4 100644 --- a/sample/db/samples/shipping_methods.rb +++ b/sample/db/samples/shipping_methods.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true begin -north_america = Spree::Zone.find_by!(name: "North America") + north_america = Spree::Zone.find_by!(name: "North America") rescue ActiveRecord::RecordNotFound puts "Couldn't find 'North America' zone. Did you run `rake db:seed` first?" puts "That task will set up the countries, states and zones required for Spree." @@ -10,7 +10,7 @@ tax_category = Spree::TaxCategory.find_by!(name: "Default") europe_vat = Spree::Zone.find_by!(name: "EU_VAT") -shipping_category = Spree::ShippingCategory.find_or_create_by!(name: 'Default') +shipping_category = Spree::ShippingCategory.find_or_create_by!(name: "Default") Spree::ShippingMethod.create!([ { diff --git a/sample/db/samples/stock.rb b/sample/db/samples/stock.rb index 678e68b5bce..af87928cd07 100644 --- a/sample/db/samples/stock.rb +++ b/sample/db/samples/stock.rb @@ -2,8 +2,8 @@ Spree::Sample.load_sample("variants") -country = Spree::Country.find_by(iso: 'US') -location = Spree::StockLocation.first_or_create! name: 'default', address1: 'Example Street', city: 'City', zipcode: '12345', country:, state: country.states.first +country = Spree::Country.find_by(iso: "US") +location = Spree::StockLocation.first_or_create! name: "default", address1: "Example Street", city: "City", zipcode: "12345", country:, state: country.states.first location.active = true location.save! diff --git a/sample/db/samples/stores.rb b/sample/db/samples/stores.rb index 8ced1c06f61..b5191f92535 100644 --- a/sample/db/samples/stores.rb +++ b/sample/db/samples/stores.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -unless Spree::Store.where(code: 'sample-store').exists? +unless Spree::Store.where(code: "sample-store").exists? Spree::Store.create!( name: "Sample Store", code: "sample-store", diff --git a/sample/db/samples/taxonomies.rb b/sample/db/samples/taxonomies.rb index ca65f8a2130..4b5f4ce86c5 100644 --- a/sample/db/samples/taxonomies.rb +++ b/sample/db/samples/taxonomies.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true taxonomies = [ - { name: "Categories" }, - { name: "Brands" } + {name: "Categories"}, + {name: "Brands"} ] taxonomies.each do |taxonomy_attrs| diff --git a/sample/db/samples/taxons.rb b/sample/db/samples/taxons.rb index f882792a61e..e991bdb922a 100644 --- a/sample/db/samples/taxons.rb +++ b/sample/db/samples/taxons.rb @@ -28,7 +28,7 @@ taxons = [ { name: "Categories", - taxonomy: categories, + taxonomy: categories }, { name: "Brands", @@ -94,7 +94,7 @@ taxonomy: categories, parent: "Accessories", products: [ - products[:solidus_bottles], + products[:solidus_bottles] ] }, { @@ -105,14 +105,14 @@ products[:solidus_tshirt], products[:solidus_dark_tee], products[:solidus_long_sleeve_tee] - ], + ] }, { name: "Hoodies", taxonomy: categories, parent: "Clothing", products: [ - products[:solidus_hoodie], + products[:solidus_hoodie] ] } ] diff --git a/sample/db/samples/variants.rb b/sample/db/samples/variants.rb index 662b50f5be3..39d21295769 100644 --- a/sample/db/samples/variants.rb +++ b/sample/db/samples/variants.rb @@ -318,7 +318,7 @@ }, solidus_cap => { sku: "SOL-CAP99", - cost_price: 24, + cost_price: 24 } } diff --git a/sample/lib/solidus_sample.rb b/sample/lib/solidus_sample.rb index 5e1fc34b0e2..f95d4f9347c 100644 --- a/sample/lib/solidus_sample.rb +++ b/sample/lib/solidus_sample.rb @@ -1,3 +1,3 @@ # frozen_string_literal: true -require 'spree_sample' +require "spree_sample" diff --git a/sample/lib/spree/sample.rb b/sample/lib/spree/sample.rb index 3b3f7d34def..048a3abbae7 100644 --- a/sample/lib/spree/sample.rb +++ b/sample/lib/spree/sample.rb @@ -1,18 +1,18 @@ # frozen_string_literal: true -require 'thor' -require 'spree_core' +require "thor" +require "spree_core" module Spree module Sample class << self def load_sample(file, shell: Thor::Base.shell.new) # If file is exists within application it takes precendence. - if File.exist?(File.join(Rails.root, 'db', 'samples', "#{file}.rb")) - path = File.expand_path(File.join(Rails.root, 'db', 'samples', "#{file}.rb")) + path = if File.exist?(File.join(Rails.root, "db", "samples", "#{file}.rb")) + File.expand_path(File.join(Rails.root, "db", "samples", "#{file}.rb")) else # Otherwise we will use this gems default file. - path = File.expand_path(samples_path + "#{file}.rb") + File.expand_path(samples_path + "#{file}.rb") end # Check to see if the specified file has been loaded before unless $LOADED_FEATURES.include?(path) @@ -24,7 +24,7 @@ def load_sample(file, shell: Thor::Base.shell.new) private def samples_path - Pathname.new(File.join(File.dirname(__FILE__), '..', '..', 'db', 'samples')) + Pathname.new(File.join(File.dirname(__FILE__), "..", "..", "db", "samples")) end end end diff --git a/sample/lib/spree_sample.rb b/sample/lib/spree_sample.rb index 4e5ad392361..d1b845a25f5 100644 --- a/sample/lib/spree_sample.rb +++ b/sample/lib/spree_sample.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'spree_core' -require 'spree/sample' +require "spree_core" +require "spree/sample" module SpreeSample class Engine < Rails::Engine - engine_name 'spree_sample' + engine_name "spree_sample" # Needs to be here so we can access it inside the tests def self.load_samples diff --git a/sample/lib/tasks/sample.rake b/sample/lib/tasks/sample.rake index 8d9794dcbce..38c8fb83fbe 100644 --- a/sample/lib/tasks/sample.rake +++ b/sample/lib/tasks/sample.rake @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'pathname' -require 'spree/sample' +require "pathname" +require "spree/sample" namespace :spree_sample do - desc 'Loads sample data' + desc "Loads sample data" task load: :environment do if ARGV.include?("db:migrate") puts <<~TEXT diff --git a/sample/solidus_sample.gemspec b/sample/solidus_sample.gemspec index 02895023364..ea058f415c1 100644 --- a/sample/solidus_sample.gemspec +++ b/sample/solidus_sample.gemspec @@ -1,27 +1,27 @@ # frozen_string_literal: true -require_relative '../core/lib/spree/core/version.rb' +require_relative "../core/lib/spree/core/version" Gem::Specification.new do |s| - s.platform = Gem::Platform::RUBY - s.name = 'solidus_sample' - s.version = Spree.solidus_version - s.summary = 'Sample data (including images) for use with Solidus.' + s.platform = Gem::Platform::RUBY + s.name = "solidus_sample" + s.version = Spree.solidus_version + s.summary = "Sample data (including images) for use with Solidus." s.description = s.summary - s.author = 'Solidus Team' - s.email = 'contact@solidus.io' - s.homepage = 'http://solidus.io' - s.license = 'BSD-3-Clause' + s.author = "Solidus Team" + s.email = "contact@solidus.io" + s.homepage = "http://solidus.io" + s.license = "BSD-3-Clause" - s.metadata['rubygems_mfa_required'] = 'true' + s.metadata["rubygems_mfa_required"] = "true" s.files = `git ls-files -z`.split("\x0").reject do |f| f.match(%r{^(spec|script)/}) end - s.required_ruby_version = '>= 3.1.0' - s.required_rubygems_version = '>= 1.8.23' + s.required_ruby_version = ">= 3.1.0" + s.required_rubygems_version = ">= 1.8.23" - s.add_dependency 'solidus_core', s.version + s.add_dependency "solidus_core", s.version end diff --git a/sample/spec/lib/load_sample_spec.rb b/sample/spec/lib/load_sample_spec.rb index 801a9c69bed..07c26d9424b 100644 --- a/sample/spec/lib/load_sample_spec.rb +++ b/sample/spec/lib/load_sample_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe "Load samples" do it "doesn't raise any error" do diff --git a/sample/spec/spec_helper.rb b/sample/spec/spec_helper.rb index 9d02552afc2..12337463aa4 100644 --- a/sample/spec/spec_helper.rb +++ b/sample/spec/spec_helper.rb @@ -2,17 +2,17 @@ # This file is copied to ~/spec when you run 'ruby script/generate rspec' # from the project root directory. -ENV["RAILS_ENV"] ||= 'test' +ENV["RAILS_ENV"] ||= "test" -require 'solidus_sample' -require 'spree/testing_support/dummy_app' +require "solidus_sample" +require "spree/testing_support/dummy_app" DummyApp.setup( - gem_root: File.expand_path('..', __dir__), - lib_name: 'solidus_sample' + gem_root: File.expand_path("..", __dir__), + lib_name: "solidus_sample" ) -require 'rspec/rails' -require 'database_cleaner' +require "rspec/rails" +require "database_cleaner" RSpec.configure do |config| config.color = true diff --git a/solidus.gemspec b/solidus.gemspec index 41b70ca15c9..f836b4e2eb8 100644 --- a/solidus.gemspec +++ b/solidus.gemspec @@ -1,29 +1,29 @@ # frozen_string_literal: true -require_relative 'core/lib/spree/core/version.rb' +require_relative "core/lib/spree/core/version" Gem::Specification.new do |s| - s.platform = Gem::Platform::RUBY - s.name = 'solidus' - s.version = Spree.solidus_version - s.summary = 'Full-stack e-commerce framework for Ruby on Rails.' - s.description = 'Solidus is an open source e-commerce framework for Ruby on Rails.' + s.platform = Gem::Platform::RUBY + s.name = "solidus" + s.version = Spree.solidus_version + s.summary = "Full-stack e-commerce framework for Ruby on Rails." + s.description = "Solidus is an open source e-commerce framework for Ruby on Rails." - s.author = 'Solidus Team' - s.email = 'contact@solidus.io' - s.homepage = 'http://solidus.io' - s.license = 'BSD-3-Clause' + s.author = "Solidus Team" + s.email = "contact@solidus.io" + s.homepage = "http://solidus.io" + s.license = "BSD-3-Clause" - s.metadata['rubygems_mfa_required'] = 'true' + s.metadata["rubygems_mfa_required"] = "true" - s.files = Dir['README.md', 'lib/**/*'] + s.files = Dir["README.md", "lib/**/*"] - s.required_ruby_version = '>= 3.1.0' - s.required_rubygems_version = '>= 1.8.23' + s.required_ruby_version = ">= 3.1.0" + s.required_rubygems_version = ">= 1.8.23" - s.add_dependency 'solidus_api', s.version - s.add_dependency 'solidus_backend', s.version - s.add_dependency 'solidus_core', s.version - s.add_dependency 'solidus_legacy_promotions', s.version - s.add_dependency 'solidus_sample', s.version + s.add_dependency "solidus_api", s.version + s.add_dependency "solidus_backend", s.version + s.add_dependency "solidus_core", s.version + s.add_dependency "solidus_legacy_promotions", s.version + s.add_dependency "solidus_sample", s.version end diff --git a/tasks/cleaning.rake b/tasks/cleaning.rake index 403a380e999..031f3e61991 100644 --- a/tasks/cleaning.rake +++ b/tasks/cleaning.rake @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rake/clean' +require "rake/clean" CLOBBER.include "sandbox" CLOBBER.include "Gemfile.lock" diff --git a/tasks/linting.rake b/tasks/linting.rake index 52f81816492..86c074e3f25 100644 --- a/tasks/linting.rake +++ b/tasks/linting.rake @@ -2,7 +2,7 @@ namespace :lint do task :rb do - ci_options = "-f junit -o '#{__dir__}/../test-results/rubocop-results.xml' " if ENV['CI'] + ci_options = "-f junit -o '#{__dir__}/../test-results/rubocop-results.xml' " if ENV["CI"] sh %{bundle exec rubocop -P -f clang #{ci_options}$(git ls-files -co --exclude-standard | grep -E "\\.rb$" | grep -v "/templates/")} end diff --git a/tasks/linting/wrong_migration_version.rb b/tasks/linting/wrong_migration_version.rb index 4b24bf87894..0a9f89824a9 100644 --- a/tasks/linting/wrong_migration_version.rb +++ b/tasks/linting/wrong_migration_version.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_relative '../../core/lib/spree/core/version' +require_relative "../../core/lib/spree/core/version" module Solidus class WrongMigrationVersion < RuboCop::Cop::Base diff --git a/tasks/releasing.rake b/tasks/releasing.rake index 098192672c5..e8035b4abcb 100644 --- a/tasks/releasing.rake +++ b/tasks/releasing.rake @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'bundler/gem_tasks' +require "bundler/gem_tasks" SOLIDUS_GEM_NAMES = %w[core api backend sample promotions legacy_promotions] diff --git a/tasks/testing.rake b/tasks/testing.rake index e3c62f0eb10..ec1c7e11f90 100644 --- a/tasks/testing.rake +++ b/tasks/testing.rake @@ -2,9 +2,9 @@ task default: :spec -def print_title(gem_name = '') - title = ["Solidus", gem_name].join(' ').strip - puts "\n#{'-' * title.size}\n#{title}\n#{'-' * title.size}" +def print_title(gem_name = "") + title = ["Solidus", gem_name].join(" ").strip + puts "\n#{"-" * title.size}\n#{title}\n#{"-" * title.size}" end def subproject_task(project, task, title: project, task_name: nil) @@ -20,7 +20,7 @@ end %w[spec db:drop db:create db:migrate db:reset].each do |task| solidus_gem_names = %w[core api backend sample promotions legacy_promotions] solidus_gem_names.each do |project| - desc "Run specs for #{project}" if task == 'spec' + desc "Run specs for #{project}" if task == "spec" subproject_task(project, task) end @@ -32,10 +32,10 @@ desc "Run backend JS specs" subproject_task("backend", "spec:js", title: "backend JS", task_name: "spec:backend:js") # Add backend JS specs to `rake spec` dependencies -task spec: 'spec:backend:js' +task spec: "spec:backend:js" task test: :spec -task test_app: 'db:reset' +task test_app: "db:reset" namespace :solidus do desc "Report code coverage results for all solidus gems"