diff options
author | Rémy Coutable <remy@rymai.me> | 2019-04-18 22:08:04 +0200 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2019-05-20 14:31:58 +0200 |
commit | 4d9c76e9e44119ee2578c94b2b98bb72e80e874b (patch) | |
tree | 441a0b95536a35959f237c487cfba44f5dbdd7ed /lib/quality | |
parent | 27d207bd8fa0ca095f4008fbcc62c0b924b8c405 (diff) | |
download | gitlab-ce-4d9c76e9e44119ee2578c94b2b98bb72e80e874b.tar.gz |
Reorganize test jobs by levelreorganize-tests-jobs-by-level
Signed-off-by: Rémy Coutable <remy@rymai.me>
Diffstat (limited to 'lib/quality')
-rw-r--r-- | lib/quality/test_level.rb | 75 |
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 |