summaryrefslogtreecommitdiff
path: root/lib/quality/test_level.rb
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2019-05-22 14:16:49 +0200
committerRémy Coutable <remy@rymai.me>2019-05-22 21:47:32 +0200
commit6145ddf515f93fcc7ed873b911b6369cc2bc0462 (patch)
treeabdf5336367a88aaa7af7e1a83c3c4fbba37e7ba /lib/quality/test_level.rb
parentadd00b6986c78497c18a2f48bf83f0a23c7923f8 (diff)
downloadgitlab-ce-6145ddf515f93fcc7ed873b911b6369cc2bc0462.tar.gz
Revert "Merge branch 'revert-04c3c6dd' into 'master'"
This reverts commit 744f1f2e7037f5c70c3168d9e2e89b1c327465d2, reversing changes made to c4d930e5f54e7da07c80cc028dfc0f5c08719146.
Diffstat (limited to 'lib/quality/test_level.rb')
-rw-r--r--lib/quality/test_level.rb75
1 files changed, 75 insertions, 0 deletions
diff --git a/lib/quality/test_level.rb b/lib/quality/test_level.rb
new file mode 100644
index 00000000000..24d8eac200c
--- /dev/null
+++ b/lib/quality/test_level.rb
@@ -0,0 +1,75 @@
+# 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
+ 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)
+ @patterns[level] ||= "#{prefix}spec/{#{TEST_LEVEL_FOLDERS.fetch(level).join(',')}}{,/**/}*_spec.rb".freeze
+ 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