diff options
Diffstat (limited to 'spec/tooling/lib/tooling/test_map_generator_spec.rb')
-rw-r--r-- | spec/tooling/lib/tooling/test_map_generator_spec.rb | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/spec/tooling/lib/tooling/test_map_generator_spec.rb b/spec/tooling/lib/tooling/test_map_generator_spec.rb new file mode 100644 index 00000000000..7f3b2807162 --- /dev/null +++ b/spec/tooling/lib/tooling/test_map_generator_spec.rb @@ -0,0 +1,109 @@ +# frozen_string_literal: true + +require_relative '../../../../tooling/lib/tooling/test_map_generator' + +RSpec.describe Tooling::TestMapGenerator do + subject { described_class.new } + + describe '#parse' do + let(:yaml1) do + <<~YAML + --- + :type: Crystalball::ExecutionMap + :commit: a7d57d333042f3b0334b2f8a282354eef7365976 + :timestamp: 1602668405 + :version: + --- + "./spec/factories_spec.rb[1]": + - lib/gitlab/current_settings.rb + - lib/feature.rb + - lib/gitlab/marginalia.rb + YAML + end + + let(:yaml2) do + <<~YAML + --- + :type: Crystalball::ExecutionMap + :commit: 74056e8d9cf3773f43faa1cf5416f8779c8284c8 + :timestamp: 1602671965 + :version: + --- + "./spec/models/project_spec.rb[1]": + - lib/gitlab/current_settings.rb + - lib/feature.rb + - lib/gitlab/marginalia.rb + YAML + end + + let(:pathname) { instance_double(Pathname) } + + before do + allow(File).to receive(:read).with('yaml1.yml').and_return(yaml1) + allow(File).to receive(:read).with('yaml2.yml').and_return(yaml2) + end + + context 'with single yaml' do + let(:expected_mapping) do + { + 'lib/gitlab/current_settings.rb' => [ + './spec/factories_spec.rb' + ], + 'lib/feature.rb' => [ + './spec/factories_spec.rb' + ], + 'lib/gitlab/marginalia.rb' => [ + './spec/factories_spec.rb' + ] + } + end + + it 'parses crystalball data into test mapping' do + subject.parse('yaml1.yml') + + expect(subject.mapping.keys).to match_array(expected_mapping.keys) + end + + it 'stores test files without example uid' do + subject.parse('yaml1.yml') + + expected_mapping.each do |file, tests| + expect(subject.mapping[file]).to match_array(tests) + end + end + end + + context 'with multiple yamls' do + let(:expected_mapping) do + { + 'lib/gitlab/current_settings.rb' => [ + './spec/factories_spec.rb', + './spec/models/project_spec.rb' + ], + 'lib/feature.rb' => [ + './spec/factories_spec.rb', + './spec/models/project_spec.rb' + ], + 'lib/gitlab/marginalia.rb' => [ + './spec/factories_spec.rb', + './spec/models/project_spec.rb' + ] + } + end + + it 'parses crystalball data into test mapping' do + subject.parse(%w[yaml1.yml yaml2.yml]) + + expect(subject.mapping.keys).to match_array(expected_mapping.keys) + end + + it 'stores test files without example uid' do + subject.parse(%w[yaml1.yml yaml2.yml]) + + expected_mapping.each do |file, tests| + expect(subject.mapping[file]).to match_array(tests) + end + end + end + end +end |