diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-08 18:13:35 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-08 18:13:35 +0300 |
commit | 05db4ead6d5c73cf62ad95d80ccac415bc3bf3cd (patch) | |
tree | 4db17ac5879083050b2b2dad83a60f63fae8b72b /spec/lib | |
parent | 6a380347147d1a55afbc6a1c16e04b567ab90d86 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/lib')
-rw-r--r-- | spec/lib/gitlab/graphql/known_operations_spec.rb | 72 | ||||
-rw-r--r-- | spec/lib/gitlab/sidekiq_config/cli_methods_spec.rb | 15 | ||||
-rw-r--r-- | spec/lib/gitlab/sidekiq_config/worker_spec.rb | 17 | ||||
-rw-r--r-- | spec/lib/gitlab/webpack/file_loader_spec.rb | 79 | ||||
-rw-r--r-- | spec/lib/gitlab/webpack/graphql_known_operations_spec.rb | 47 | ||||
-rw-r--r-- | spec/lib/sidebars/projects/menus/infrastructure_menu_spec.rb | 16 |
6 files changed, 236 insertions, 10 deletions
diff --git a/spec/lib/gitlab/graphql/known_operations_spec.rb b/spec/lib/gitlab/graphql/known_operations_spec.rb new file mode 100644 index 00000000000..58fa2c18639 --- /dev/null +++ b/spec/lib/gitlab/graphql/known_operations_spec.rb @@ -0,0 +1,72 @@ +# frozen_string_literal: true + +require 'fast_spec_helper' +require 'rspec-parameterized' +require "support/graphql/fake_query_type" + +RSpec.describe Gitlab::Graphql::KnownOperations do + using RSpec::Parameterized::TableSyntax + + # Include duplicated operation names to test that we are unique-ifying them + let(:fake_operations) { %w(foo foo bar bar) } + let(:fake_schema) do + Class.new(GraphQL::Schema) do + query Graphql::FakeQueryType + end + end + + subject { described_class.new(fake_operations) } + + describe "#from_query" do + where(:query_string, :expected) do + "query { helloWorld }" | described_class::ANONYMOUS + "query fuzzyyy { helloWorld }" | described_class::UNKNOWN + "query foo { helloWorld }" | described_class::Operation.new("foo") + end + + with_them do + it "returns known operation name from GraphQL Query" do + query = ::GraphQL::Query.new(fake_schema, query_string) + + expect(subject.from_query(query)).to eq(expected) + end + end + end + + describe "#operations" do + it "returns array of known operations" do + expect(subject.operations.map(&:name)).to match_array(%w(anonymous unknown foo bar)) + end + end + + describe "Operation#to_caller_id" do + where(:query_string, :expected) do + "query { helloWorld }" | "graphql:#{described_class::ANONYMOUS.name}" + "query foo { helloWorld }" | "graphql:foo" + end + + with_them do + it "formats operation name for caller_id metric property" do + query = ::GraphQL::Query.new(fake_schema, query_string) + + expect(subject.from_query(query).to_caller_id).to eq(expected) + end + end + end + + describe ".default" do + it "returns a memoization of values from webpack", :aggregate_failures do + # .default could have been referenced in another spec, so we need to clean it up here + described_class.instance_variable_set(:@default, nil) + + expect(Gitlab::Webpack::GraphqlKnownOperations).to receive(:load).once.and_return(fake_operations) + + 2.times { described_class.default } + + # Uses reference equality to verify memoization + expect(described_class.default).to equal(described_class.default) + expect(described_class.default).to be_a(described_class) + expect(described_class.default.operations.map(&:name)).to include(*fake_operations) + end + end +end diff --git a/spec/lib/gitlab/sidekiq_config/cli_methods_spec.rb b/spec/lib/gitlab/sidekiq_config/cli_methods_spec.rb index bc63289a344..576b36c1829 100644 --- a/spec/lib/gitlab/sidekiq_config/cli_methods_spec.rb +++ b/spec/lib/gitlab/sidekiq_config/cli_methods_spec.rb @@ -11,12 +11,12 @@ RSpec.describe Gitlab::SidekiqConfig::CliMethods do end def stub_exists(exists: true) - ['app/workers/all_queues.yml', 'ee/app/workers/all_queues.yml'].each do |path| + ['app/workers/all_queues.yml', 'ee/app/workers/all_queues.yml', 'jh/app/workers/all_queues.yml'].each do |path| allow(File).to receive(:exist?).with(expand_path(path)).and_return(exists) end end - def stub_contents(foss_queues, ee_queues) + def stub_contents(foss_queues, ee_queues, jh_queues) allow(YAML).to receive(:load_file) .with(expand_path('app/workers/all_queues.yml')) .and_return(foss_queues) @@ -24,6 +24,10 @@ RSpec.describe Gitlab::SidekiqConfig::CliMethods do allow(YAML).to receive(:load_file) .with(expand_path('ee/app/workers/all_queues.yml')) .and_return(ee_queues) + + allow(YAML).to receive(:load_file) + .with(expand_path('jh/app/workers/all_queues.yml')) + .and_return(jh_queues) end before do @@ -45,8 +49,9 @@ RSpec.describe Gitlab::SidekiqConfig::CliMethods do end it 'flattens and joins the contents' do - expected_queues = %w[queue_a queue_b] - expected_queues = expected_queues.first(1) unless Gitlab.ee? + expected_queues = %w[queue_a] + expected_queues << 'queue_b' if Gitlab.ee? + expected_queues << 'queue_c' if Gitlab.jh? expect(described_class.worker_queues(dummy_root)) .to match_array(expected_queues) @@ -55,7 +60,7 @@ RSpec.describe Gitlab::SidekiqConfig::CliMethods do context 'when the file contains an array of hashes' do before do - stub_contents([{ name: 'queue_a' }], [{ name: 'queue_b' }]) + stub_contents([{ name: 'queue_a' }], [{ name: 'queue_b' }], [{ name: 'queue_c' }]) end include_examples 'valid file contents' diff --git a/spec/lib/gitlab/sidekiq_config/worker_spec.rb b/spec/lib/gitlab/sidekiq_config/worker_spec.rb index f4d7a4b3359..9c252b3d50b 100644 --- a/spec/lib/gitlab/sidekiq_config/worker_spec.rb +++ b/spec/lib/gitlab/sidekiq_config/worker_spec.rb @@ -18,19 +18,26 @@ RSpec.describe Gitlab::SidekiqConfig::Worker do get_tags: attributes[:tags] ) - described_class.new(inner_worker, ee: false) + described_class.new(inner_worker, ee: false, jh: false) end describe '#ee?' do it 'returns the EE status set on creation' do - expect(described_class.new(double, ee: true)).to be_ee - expect(described_class.new(double, ee: false)).not_to be_ee + expect(described_class.new(double, ee: true, jh: false)).to be_ee + expect(described_class.new(double, ee: false, jh: false)).not_to be_ee + end + end + + describe '#jh?' do + it 'returns the JH status set on creation' do + expect(described_class.new(double, ee: false, jh: true)).to be_jh + expect(described_class.new(double, ee: false, jh: false)).not_to be_jh end end describe '#==' do def worker_with_yaml(yaml) - described_class.new(double, ee: false).tap do |worker| + described_class.new(double, ee: false, jh: false).tap do |worker| allow(worker).to receive(:to_yaml).and_return(yaml) end end @@ -57,7 +64,7 @@ RSpec.describe Gitlab::SidekiqConfig::Worker do expect(worker).to receive(meth) - described_class.new(worker, ee: false).send(meth) + described_class.new(worker, ee: false, jh: false).send(meth) end end end diff --git a/spec/lib/gitlab/webpack/file_loader_spec.rb b/spec/lib/gitlab/webpack/file_loader_spec.rb new file mode 100644 index 00000000000..34d00b9f106 --- /dev/null +++ b/spec/lib/gitlab/webpack/file_loader_spec.rb @@ -0,0 +1,79 @@ +# frozen_string_literal: true + +require 'fast_spec_helper' +require 'support/helpers/file_read_helpers' +require 'support/webmock' + +RSpec.describe Gitlab::Webpack::FileLoader do + include FileReadHelpers + include WebMock::API + + let(:error_file_path) { "error.yml" } + let(:file_path) { "my_test_file.yml" } + let(:file_contents) do + <<-EOF + - hello + - world + - test + EOF + end + + before do + allow(Gitlab.config.webpack.dev_server).to receive_messages(host: 'hostname', port: 2000, https: false) + allow(Gitlab.config.webpack).to receive(:public_path).and_return('public_path') + allow(Gitlab.config.webpack).to receive(:output_dir).and_return('webpack_output') + end + + context "with dev server enabled" do + before do + allow(Gitlab.config.webpack.dev_server).to receive(:enabled).and_return(true) + + stub_request(:get, "http://hostname:2000/public_path/not_found").to_return(status: 404) + stub_request(:get, "http://hostname:2000/public_path/#{file_path}").to_return(body: file_contents, status: 200) + stub_request(:get, "http://hostname:2000/public_path/#{error_file_path}").to_raise(StandardError) + end + + it "returns content when respondes succesfully" do + expect(Gitlab::Webpack::FileLoader.load(file_path)).to be(file_contents) + end + + it "raises error when 404" do + expect { Gitlab::Webpack::FileLoader.load("not_found") }.to raise_error("HTTP error 404") + end + + it "raises error when errors out" do + expect { Gitlab::Webpack::FileLoader.load(error_file_path) }.to raise_error(Gitlab::Webpack::FileLoader::DevServerLoadError) + end + end + + context "with dev server enabled and https" do + before do + allow(Gitlab.config.webpack.dev_server).to receive(:enabled).and_return(true) + allow(Gitlab.config.webpack.dev_server).to receive(:https).and_return(true) + + stub_request(:get, "https://hostname:2000/public_path/#{error_file_path}").to_raise(EOFError) + end + + it "raises error if catches SSLError" do + expect { Gitlab::Webpack::FileLoader.load(error_file_path) }.to raise_error(Gitlab::Webpack::FileLoader::DevServerSSLError) + end + end + + context "with dev server disabled" do + before do + allow(Gitlab.config.webpack.dev_server).to receive(:enabled).and_return(false) + stub_file_read(::Rails.root.join("webpack_output/#{file_path}"), content: file_contents) + stub_file_read(::Rails.root.join("webpack_output/#{error_file_path}"), error: Errno::ENOENT) + end + + describe ".load" do + it "returns file content from file path" do + expect(Gitlab::Webpack::FileLoader.load(file_path)).to be(file_contents) + end + + it "throws error if file cannot be read" do + expect { Gitlab::Webpack::FileLoader.load(error_file_path) }.to raise_error(Gitlab::Webpack::FileLoader::StaticLoadError) + end + end + end +end diff --git a/spec/lib/gitlab/webpack/graphql_known_operations_spec.rb b/spec/lib/gitlab/webpack/graphql_known_operations_spec.rb new file mode 100644 index 00000000000..89cade82fe6 --- /dev/null +++ b/spec/lib/gitlab/webpack/graphql_known_operations_spec.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +require 'fast_spec_helper' + +RSpec.describe Gitlab::Webpack::GraphqlKnownOperations do + let(:content) do + <<-EOF + - hello + - world + - test + EOF + end + + around do |example| + described_class.clear_memoization! + + example.run + + described_class.clear_memoization! + end + + describe ".load" do + context "when file loader returns" do + before do + allow(::Gitlab::Webpack::FileLoader).to receive(:load).with("graphql_known_operations.yml").and_return(content) + end + + it "returns memoized value" do + expect(::Gitlab::Webpack::FileLoader).to receive(:load).once + + 2.times { ::Gitlab::Webpack::GraphqlKnownOperations.load } + + expect(::Gitlab::Webpack::GraphqlKnownOperations.load).to eq(%w(hello world test)) + end + end + + context "when file loader errors" do + before do + allow(::Gitlab::Webpack::FileLoader).to receive(:load).and_raise(StandardError.new("test")) + end + + it "returns empty array" do + expect(::Gitlab::Webpack::GraphqlKnownOperations.load).to eq([]) + end + end + end +end diff --git a/spec/lib/sidebars/projects/menus/infrastructure_menu_spec.rb b/spec/lib/sidebars/projects/menus/infrastructure_menu_spec.rb index 2415598da9c..55281171634 100644 --- a/spec/lib/sidebars/projects/menus/infrastructure_menu_spec.rb +++ b/spec/lib/sidebars/projects/menus/infrastructure_menu_spec.rb @@ -51,6 +51,16 @@ RSpec.describe Sidebars::Projects::Menus::InfrastructureMenu do it 'menu link points to Terraform page' do expect(subject.link).to eq find_menu_item(:terraform).link end + + context 'when Terraform menu is not visible' do + before do + subject.renderable_items.delete(find_menu_item(:terraform)) + end + + it 'menu link points to Google Cloud page' do + expect(subject.link).to eq find_menu_item(:google_cloud).link + end + end end end @@ -89,5 +99,11 @@ RSpec.describe Sidebars::Projects::Menus::InfrastructureMenu do it_behaves_like 'access rights checks' end + + describe 'Google Cloud' do + let(:item_id) { :google_cloud } + + it_behaves_like 'access rights checks' + end end end |