Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix the factories loading mechanism #3814

Merged
merged 4 commits into from
Jan 8, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,15 @@ group :backend, :frontend, :core, :api do
end

gem 'database_cleaner', '~> 1.3', require: false
gem 'factory_bot_rails', '~> 4.8', require: false
gem 'rspec-activemodel-mocks', '~> 1.1', require: false
gem 'rspec-rails', '~> 4.0.0.beta2', require: false
gem 'rspec-rails', '~> 4.0.1', require: false
gem 'simplecov', require: false
gem 'with_model', require: false
gem 'rails-controller-testing', require: false
gem 'puma', require: false

# Ensure the requirement is also updated in core/lib/spree/testing_support.rb
gem 'factory_bot_rails', '~> 4.8', require: false
end

group :backend, :frontend do
Expand Down
40 changes: 40 additions & 0 deletions core/lib/spree/testing_support.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# frozen_string_literal: true

module Spree
module TestingSupport
SEQUENCES = ["#{::Spree::Core::Engine.root}/lib/spree/testing_support/sequences.rb"]
FACTORIES = Dir["#{::Spree::Core::Engine.root}/lib/spree/testing_support/factories/**/*_factory.rb"]

def self.factory_bot_paths
@paths ||= (SEQUENCES + FACTORIES).sort.map { |path| path.sub(/.rb\z/, '') }
end

def self.deprecate_cherry_picking_factory_bot_files
# All good if the factory is being loaded by FactoryBot.
return if caller.find { |line| line.include? "/factory_bot/find_definitions.rb" }

Spree::Deprecation.warn(
"Please do not cherry-pick factories, this is not well supported by FactoryBot. " \
'Use `require "spree/testing_support/factories"` instead.', caller(2)
)
end

def self.load_all_factories
require 'factory_bot'
require 'factory_bot/version'

requirement = Gem::Requirement.new("~> 4.8")
version = Gem::Version.new(FactoryBot::VERSION)

unless requirement.satisfied_by? version
Spree::Deprecation.warn(
"Please be aware that the supported version of FactoryBot is #{requirement}, " \
"using version #{version} could lead to factory loading issues.", caller(2)
)
end

FactoryBot.definition_file_paths.concat(factory_bot_paths).uniq!
FactoryBot.reload
end
end
end
6 changes: 2 additions & 4 deletions core/lib/spree/testing_support/factories.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
# frozen_string_literal: true

require 'factory_bot'
require 'spree/testing_support'

Dir["#{File.dirname(__FILE__)}/factories/**"].each do |f|
require File.expand_path(f)
end
Spree::TestingSupport.load_all_factories
4 changes: 2 additions & 2 deletions core/lib/spree/testing_support/factories/address_factory.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/factories/state_factory'
require 'spree/testing_support/factories/country_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :address, class: 'Spree::Address' do
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/factories/line_item_factory'
require 'spree/testing_support/factories/order_factory'
require 'spree/testing_support/factories/tax_category_factory'
require 'spree/testing_support/factories/tax_rate_factory'
require 'spree/testing_support/factories/zone_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :adjustment, class: 'Spree::Adjustment' do
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# frozen_string_literal: true

require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :adjustment_reason, class: 'Spree::AdjustmentReason' do
sequence(:name) { |n| "Refund for return ##{n}" }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# frozen_string_literal: true

require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :calculator, aliases: [:flat_rate_calculator], class: 'Spree::Calculator::FlatRate' do
preferred_amount { 10.0 }
Expand Down
4 changes: 2 additions & 2 deletions core/lib/spree/testing_support/factories/carton_factory.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/factories/shipment_factory'
require 'spree/testing_support/factories/inventory_unit_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :carton, class: 'Spree::Carton' do
Expand Down
3 changes: 3 additions & 0 deletions core/lib/spree/testing_support/factories/country_factory.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# frozen_string_literal: true

require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

require 'carmen'

FactoryBot.define do
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# frozen_string_literal: true

require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :credit_card, class: 'Spree::CreditCard' do
verification_value { 123 }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/factories/stock_location_factory'
require 'spree/testing_support/factories/order_factory'
require 'spree/testing_support/factories/return_item_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :customer_return, class: 'Spree::CustomerReturn' do
Expand Down
3 changes: 3 additions & 0 deletions core/lib/spree/testing_support/factories/image_factory.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# frozen_string_literal: true

require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :image, class: 'Spree::Image' do
attachment { Spree::Core::Engine.root.join('lib', 'spree', 'testing_support', 'fixtures', 'blank.jpg').open }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/factories/line_item_factory'
require 'spree/testing_support/factories/variant_factory'
require 'spree/testing_support/factories/order_factory'
require 'spree/testing_support/factories/shipment_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :inventory_unit, class: 'Spree::InventoryUnit' do
Expand Down
4 changes: 2 additions & 2 deletions core/lib/spree/testing_support/factories/line_item_factory.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/factories/order_factory'
require 'spree/testing_support/factories/product_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :line_item, class: 'Spree::LineItem' do
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# frozen_string_literal: true

require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :option_type, class: 'Spree::OptionType' do
sequence(:name) { |n| "foo-size-#{n}" }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# frozen_string_literal: true

require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :option_value, class: 'Spree::OptionValue' do
sequence(:name) { |n| "Size-#{n}" }
Expand Down
8 changes: 2 additions & 6 deletions core/lib/spree/testing_support/factories/order_factory.rb
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/factories/address_factory'
require 'spree/testing_support/factories/shipment_factory'
require 'spree/testing_support/factories/store_factory'
require 'spree/testing_support/factories/user_factory'
require 'spree/testing_support/factories/line_item_factory'
require 'spree/testing_support/factories/payment_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :order, class: 'Spree::Order' do
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/factories/order_factory'
require 'spree/testing_support/factories/promotion_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :order_promotion, class: 'Spree::OrderPromotion' do
Expand Down
6 changes: 2 additions & 4 deletions core/lib/spree/testing_support/factories/payment_factory.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/factories/payment_method_factory'
require 'spree/testing_support/factories/credit_card_factory'
require 'spree/testing_support/factories/order_factory'
require 'spree/testing_support/factories/store_credit_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :payment, aliases: [:credit_card_payment], class: 'Spree::Payment' do
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# frozen_string_literal: true

require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :payment_method, aliases: [:credit_card_payment_method], class: 'Spree::PaymentMethod::BogusCreditCard' do
name { 'Credit Card' }
Expand Down
3 changes: 2 additions & 1 deletion core/lib/spree/testing_support/factories/price_factory.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/factories/variant_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :price, class: 'Spree::Price' do
Expand Down
7 changes: 2 additions & 5 deletions core/lib/spree/testing_support/factories/product_factory.rb
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/sequences'
require 'spree/testing_support/factories/shipping_category_factory'
require 'spree/testing_support/factories/stock_location_factory'
require 'spree/testing_support/factories/tax_category_factory'
require 'spree/testing_support/factories/product_option_type_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :base_product, class: 'Spree::Product' do
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/factories/product_factory'
require 'spree/testing_support/factories/option_type_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :product_option_type, class: 'Spree::ProductOptionType' do
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/factories/product_factory'
require 'spree/testing_support/factories/property_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :product_property, class: 'Spree::ProductProperty' do
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# frozen_string_literal: true

require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :promotion_category, class: 'Spree::PromotionCategory' do
name { 'Promotion Category' }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/sequences'
require 'spree/testing_support/factories/promotion_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :promotion_code, class: 'Spree::PromotionCode' do
Expand Down
4 changes: 2 additions & 2 deletions core/lib/spree/testing_support/factories/promotion_factory.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/factories/promotion_code_factory'
require 'spree/testing_support/factories/variant_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :promotion, class: 'Spree::Promotion' do
Expand Down
3 changes: 3 additions & 0 deletions core/lib/spree/testing_support/factories/property_factory.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# frozen_string_literal: true

require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :property, class: 'Spree::Property' do
name { 'baseball_cap_color' }
Expand Down
4 changes: 2 additions & 2 deletions core/lib/spree/testing_support/factories/refund_factory.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/factories/payment_factory'
require 'spree/testing_support/factories/refund_reason_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
sequence(:refund_transaction_id) { |n| "fake-refund-transaction-#{n}" }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# frozen_string_literal: true

require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :refund_reason, class: 'Spree::RefundReason' do
sequence(:name) { |n| "Refund for return ##{n}" }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/factories/customer_return_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :reimbursement, class: 'Spree::Reimbursement' do
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# frozen_string_literal: true

require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :reimbursement_type, class: 'Spree::ReimbursementType' do
sequence(:name) { |n| "Reimbursement Type #{n}" }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/factories/order_factory'
require 'spree/testing_support/factories/stock_location_factory'
require 'spree/testing_support/factories/return_reason_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :return_authorization, class: 'Spree::ReturnAuthorization' do
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
# frozen_string_literal: true

require 'spree/testing_support/factories/inventory_unit_factory'
require 'spree/testing_support/factories/return_reason_factory'
require 'spree/testing_support/factories/return_authorization_factory'
require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :return_item, class: 'Spree::ReturnItem' do
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# frozen_string_literal: true

require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :return_reason, class: 'Spree::ReturnReason' do
sequence(:name) { |n| "Defect ##{n}" }
Expand Down
3 changes: 3 additions & 0 deletions core/lib/spree/testing_support/factories/role_factory.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# frozen_string_literal: true

require 'spree/testing_support'
Spree::TestingSupport.deprecate_cherry_picking_factory_bot_files

FactoryBot.define do
factory :role, class: 'Spree::Role' do
sequence(:name) { |n| "Role ##{n}" }
Expand Down
Loading