mirror of
https://github.com/thoughtbot/shoulda-matchers.git
synced 2022-11-09 12:01:38 -05:00
b7e02184d9
- bump rubocop to v1.0 - Fix Layout/MultilineAssignmentLayout and other remaining offences - Exculde appraisal generated gemfiles in rubocop - Replace NON_NUMERIC_VALUE constant with instance method against failing test case in rails <= 5.1 and postgres adapter. This is a defect in rails where a frozen string is modified in https://github.com/rails/rails/blob/v5.1.7/activerecord/lib/active_record/connection_adapters/postgresql/oid/money.rb#L25
134 lines
3.2 KiB
Ruby
134 lines
3.2 KiB
Ruby
require_relative 'helpers/base_helpers'
|
|
require_relative 'helpers/rspec_helpers'
|
|
|
|
module AcceptanceTests
|
|
class AddsShouldaMatchersToProject
|
|
def self.call(options)
|
|
new(options).call
|
|
end
|
|
|
|
include BaseHelpers
|
|
include RspecHelpers
|
|
|
|
def initialize(options)
|
|
@options = options
|
|
end
|
|
|
|
def call
|
|
add_gem 'shoulda-matchers', gem_options
|
|
|
|
unless options[:with_configuration] === false
|
|
configure_test_helper_files
|
|
end
|
|
end
|
|
|
|
protected
|
|
|
|
attr_reader :options
|
|
|
|
private
|
|
|
|
def gem_options
|
|
gem_options = { path: fs.root_directory }
|
|
|
|
if options[:manually]
|
|
gem_options[:require] = false
|
|
end
|
|
|
|
gem_options
|
|
end
|
|
|
|
def configure_test_helper_files
|
|
each_test_helper_file do |test_helper_file, test_framework, library|
|
|
add_configuration_block_to(
|
|
test_helper_file,
|
|
test_framework,
|
|
library,
|
|
)
|
|
end
|
|
end
|
|
|
|
def each_test_helper_file
|
|
options[:test_frameworks].each do |test_framework|
|
|
libraries = options.fetch(:libraries, [])
|
|
|
|
test_helper_files_for(test_framework, libraries).each do |test_helper_file|
|
|
yield test_helper_file, test_framework, libraries
|
|
end
|
|
end
|
|
end
|
|
|
|
def add_configuration_block_to(test_helper_file, test_framework, libraries)
|
|
test_framework_config = test_framework_config_for(test_framework)
|
|
library_config = library_config_for(libraries)
|
|
|
|
content = <<-EOT
|
|
Shoulda::Matchers.configure do |config|
|
|
config.integrate do |with|
|
|
#{test_framework_config}
|
|
#{library_config}
|
|
end
|
|
end
|
|
EOT
|
|
|
|
if options[:manually]
|
|
content = "require 'shoulda-matchers'\n#{content}"
|
|
end
|
|
|
|
fs.append_to_file(test_helper_file, content)
|
|
end
|
|
|
|
def test_framework_config_for(test_framework)
|
|
if test_framework
|
|
"with.test_framework :#{test_framework}\n"
|
|
else
|
|
''
|
|
end
|
|
end
|
|
|
|
def library_config_for(libraries)
|
|
libraries.map { |library| "with.library :#{library}" }.join("\n")
|
|
end
|
|
|
|
def test_helper_files_for(test_framework, libraries)
|
|
files = []
|
|
|
|
if integrates_with_nunit_and_rails?(test_framework, libraries) ||
|
|
integrates_with_nunit_only?(test_framework)
|
|
files << 'test/test_helper.rb'
|
|
end
|
|
|
|
if integrates_with_rspec?(test_framework)
|
|
files <<
|
|
if bundle.includes?('rspec-rails')
|
|
'spec/rails_helper.rb'
|
|
else
|
|
'spec/spec_helper.rb'
|
|
end
|
|
end
|
|
|
|
files
|
|
end
|
|
|
|
def integrates_with_nunit_only?(test_framework)
|
|
nunit_frameworks = [:test_unit, :minitest, :minitest_4, :minitest_5]
|
|
nunit_frameworks.include?(test_framework)
|
|
end
|
|
|
|
def integrates_with_rspec?(test_framework)
|
|
test_framework == :rspec
|
|
end
|
|
|
|
def integrates_with_rspec_rails_3_x?(_test_framework, libraries)
|
|
integrates_with_rails?(libraries) && rspec_rails_version >= 3
|
|
end
|
|
|
|
def integrates_with_nunit_and_rails?(test_framework, libraries)
|
|
test_framework.nil? && libraries.include?(:rails)
|
|
end
|
|
|
|
def integrates_with_rails?(libraries)
|
|
libraries.include?(:rails)
|
|
end
|
|
end
|
|
end
|