2019-09-04 21:01:54 +05:30
# frozen_string_literal: true
module Quality
class TestLevel
UnknownTestLevelError = Class . new ( StandardError )
TEST_LEVEL_FOLDERS = {
unit : %w[
bin
config
db
dependencies
factories
finders
frontend
graphql
2019-10-12 21:52:04 +05:30
haml_lint
2019-09-04 21:01:54 +05:30
helpers
initializers
javascripts
lib
migrations
models
policies
presenters
rack_servers
routing
rubocop
serializers
services
sidekiq
tasks
uploaders
validators
views
workers
elastic_integration
] ,
integration : %w[
controllers
mailers
requests
] ,
system : [ 'features' ]
} . freeze
attr_reader :prefix
def initialize ( prefix = nil )
@prefix = prefix
@patterns = { }
@regexps = { }
end
def pattern ( level )
2019-12-04 20:38:33 +05:30
@patterns [ level ] || = " #{ prefix } spec/{ #{ TEST_LEVEL_FOLDERS . fetch ( level ) . join ( ',' ) } }{,/**/}*_spec.rb "
2019-09-04 21:01:54 +05:30
end
def regexp ( level )
@regexps [ level ] || = Regexp . new ( " #{ prefix } spec/( #{ TEST_LEVEL_FOLDERS . fetch ( level ) . join ( '|' ) } ) " ) . freeze
end
def level_for ( file_path )
case file_path
when regexp ( :unit )
:unit
when regexp ( :integration )
:integration
when regexp ( :system )
:system
else
raise UnknownTestLevelError , " Test level for #{ file_path } couldn't be set. Please rename the file properly or change the test level detection regexes in #{ __FILE__ } . "
end
end
end
end