diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-24 12:09:35 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-24 12:09:35 +0300 |
commit | 7a8d983c19c9fe14e7c0b8b6256b8cbacbff1959 (patch) | |
tree | cec99f05c5a70ed5bd034d98ee54f60921cc490a /spec/lib | |
parent | 49383089ee517652d2d1a77392d85aa4b6c63be0 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/lib')
5 files changed, 57 insertions, 215 deletions
diff --git a/spec/lib/banzai/filter/issue_reference_filter_spec.rb b/spec/lib/banzai/filter/issue_reference_filter_spec.rb index 447802d18a7..4b8b575c1f0 100644 --- a/spec/lib/banzai/filter/issue_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/issue_reference_filter_spec.rb @@ -296,6 +296,12 @@ RSpec.describe Banzai::Filter::IssueReferenceFilter do .to eq reference end + it 'link with trailing slash' do + doc = reference_filter("Fixed (#{issue_url + "/"}.)") + + expect(doc.to_html).to match(%r{\(<a.+>#{Regexp.escape(issue.to_reference(project))}</a>\.\)}) + end + it 'links with adjacent text' do doc = reference_filter("Fixed (#{reference}.)") diff --git a/spec/lib/gitlab/alerting/notification_payload_parser_spec.rb b/spec/lib/gitlab/alerting/notification_payload_parser_spec.rb deleted file mode 100644 index ff5ab1116fa..00000000000 --- a/spec/lib/gitlab/alerting/notification_payload_parser_spec.rb +++ /dev/null @@ -1,204 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe Gitlab::Alerting::NotificationPayloadParser do - let_it_be(:project) { build(:project) } - - describe '.call' do - let(:starts_at) { Time.current.change(usec: 0) } - let(:ends_at) { Time.current.change(usec: 0) } - let(:payload) do - { - 'title' => 'alert title', - 'start_time' => starts_at.rfc3339, - 'end_time' => ends_at.rfc3339, - 'description' => 'Description', - 'monitoring_tool' => 'Monitoring tool name', - 'service' => 'Service', - 'hosts' => ['gitlab.com'], - 'severity' => 'low' - } - end - - subject { described_class.call(payload, project) } - - it 'returns Prometheus-like payload' do - is_expected.to eq( - { - 'annotations' => { - 'title' => 'alert title', - 'description' => 'Description', - 'monitoring_tool' => 'Monitoring tool name', - 'service' => 'Service', - 'hosts' => ['gitlab.com'], - 'severity' => 'low' - }, - 'startsAt' => starts_at.rfc3339, - 'endsAt' => ends_at.rfc3339 - } - ) - end - - context 'when title is blank' do - before do - payload[:title] = '' - end - - it 'sets a predefined title' do - expect(subject.dig('annotations', 'title')).to eq('New: Incident') - end - end - - context 'when hosts attribute is a string' do - before do - payload[:hosts] = 'gitlab.com' - end - - it 'returns hosts as an array of one element' do - expect(subject.dig('annotations', 'hosts')).to eq(['gitlab.com']) - end - end - - context 'when the time is in unsupported format' do - before do - payload[:start_time] = 'invalid/date/format' - end - - it 'sets startsAt to a current time in RFC3339 format' do - expect(subject['startsAt']).to eq(starts_at.rfc3339) - end - end - - context 'when payload is blank' do - let(:payload) { {} } - - it 'returns default parameters' do - is_expected.to match( - 'annotations' => { - 'title' => described_class::DEFAULT_TITLE, - 'severity' => described_class::DEFAULT_SEVERITY - }, - 'startsAt' => starts_at.rfc3339 - ) - end - - context 'when severity is blank' do - before do - payload[:severity] = '' - end - - it 'sets severity to the default ' do - expect(subject.dig('annotations', 'severity')).to eq(described_class::DEFAULT_SEVERITY) - end - end - end - - context 'with fingerprint' do - before do - payload[:fingerprint] = data - end - - shared_examples 'fingerprint generation' do - it 'generates the fingerprint correctly' do - expect(result).to eq(Gitlab::AlertManagement::Fingerprint.generate(data)) - end - end - - context 'with blank fingerprint' do - it_behaves_like 'fingerprint generation' do - let(:data) { ' ' } - let(:result) { subject.dig('annotations', 'fingerprint') } - end - end - - context 'with fingerprint given' do - it_behaves_like 'fingerprint generation' do - let(:data) { 'fingerprint' } - let(:result) { subject.dig('annotations', 'fingerprint') } - end - end - - context 'with array fingerprint given' do - it_behaves_like 'fingerprint generation' do - let(:data) { [1, 'fingerprint', 'given'] } - let(:result) { subject.dig('annotations', 'fingerprint') } - end - end - end - - context 'with environment' do - let(:environment) { create(:environment, project: project) } - - before do - payload[:gitlab_environment_name] = environment.name - end - - it 'sets the environment ' do - expect(subject.dig('annotations', 'environment')).to eq(environment) - end - end - - context 'when payload attributes have blank lines' do - let(:payload) do - { - 'title' => '', - 'start_time' => '', - 'end_time' => '', - 'description' => '', - 'monitoring_tool' => '', - 'service' => '', - 'hosts' => [''] - } - end - - it 'returns default parameters' do - is_expected.to eq( - 'annotations' => { - 'title' => 'New: Incident', - 'severity' => described_class::DEFAULT_SEVERITY - }, - 'startsAt' => starts_at.rfc3339 - ) - end - end - - context 'when payload has secondary params' do - let(:payload) do - { - 'description' => 'Description', - 'additional' => { - 'params' => { - '1' => 'Some value 1', - '2' => 'Some value 2', - 'blank' => '' - } - } - } - end - - it 'adds secondary params to annotations' do - is_expected.to eq( - 'annotations' => { - 'title' => 'New: Incident', - 'severity' => described_class::DEFAULT_SEVERITY, - 'description' => 'Description', - 'additional.params.1' => 'Some value 1', - 'additional.params.2' => 'Some value 2' - }, - 'startsAt' => starts_at.rfc3339 - ) - end - end - - context 'when secondary params hash is too big' do - before do - allow(Gitlab::Utils::SafeInlineHash).to receive(:merge_keys!).and_raise(ArgumentError) - end - - it 'catches and re-raises an error' do - expect { subject }.to raise_error Gitlab::Alerting::NotificationPayloadParser::BadPayloadError, 'The payload is too big' - end - end - end -end diff --git a/spec/lib/gitlab/database/similarity_score_spec.rb b/spec/lib/gitlab/database/similarity_score_spec.rb index e36a4f610e1..cf75e5a72d9 100644 --- a/spec/lib/gitlab/database/similarity_score_spec.rb +++ b/spec/lib/gitlab/database/similarity_score_spec.rb @@ -90,4 +90,15 @@ RSpec.describe Gitlab::Database::SimilarityScore do expect(subject).to eq(%w[different same gitlab-danger]) end end + + describe 'annotation' do + it 'annotates the generated SQL expression' do + expression = Gitlab::Database::SimilarityScore.build_expression(search: 'test', rules: [ + { column: Arel.sql('path'), multiplier: 1 }, + { column: Arel.sql('name'), multiplier: 0.8 } + ]) + + expect(Gitlab::Database::SimilarityScore).to be_order_by_similarity(expression) + end + end end diff --git a/spec/lib/gitlab/experimentation_spec.rb b/spec/lib/gitlab/experimentation_spec.rb index 9bc865f4d29..8765d078995 100644 --- a/spec/lib/gitlab/experimentation_spec.rb +++ b/spec/lib/gitlab/experimentation_spec.rb @@ -73,8 +73,8 @@ RSpec.describe Gitlab::Experimentation do subject { controller.experiment_enabled?(:test_experiment) } context 'cookie is not present' do - it 'calls Gitlab::Experimentation.enabled_for_user? with the name of the experiment and an experimentation_subject_index of nil' do - expect(Gitlab::Experimentation).to receive(:enabled_for_user?).with(:test_experiment, nil) + it 'calls Gitlab::Experimentation.enabled_for_value? with the name of the experiment and an experimentation_subject_index of nil' do + expect(Gitlab::Experimentation).to receive(:enabled_for_value?).with(:test_experiment, nil) controller.experiment_enabled?(:test_experiment) end end @@ -85,22 +85,22 @@ RSpec.describe Gitlab::Experimentation do get :index end - it 'calls Gitlab::Experimentation.enabled_for_user? with the name of the experiment and an experimentation_subject_index of the modulo 100 of the hex value of the uuid' do + it 'calls Gitlab::Experimentation.enabled_for_value? with the name of the experiment and an experimentation_subject_index of the modulo 100 of the hex value of the uuid' do # 'abcd1234'.hex % 100 = 76 - expect(Gitlab::Experimentation).to receive(:enabled_for_user?).with(:test_experiment, 76) + expect(Gitlab::Experimentation).to receive(:enabled_for_value?).with(:test_experiment, 76) controller.experiment_enabled?(:test_experiment) end end it 'returns true when DNT: 0 is set in the request' do - allow(Gitlab::Experimentation).to receive(:enabled_for_user?) { true } + allow(Gitlab::Experimentation).to receive(:enabled_for_value?) { true } controller.request.headers['DNT'] = '0' is_expected.to be_truthy end it 'returns false when DNT: 1 is set in the request' do - allow(Gitlab::Experimentation).to receive(:enabled_for_user?) { true } + allow(Gitlab::Experimentation).to receive(:enabled_for_value?) { true } controller.request.headers['DNT'] = '1' is_expected.to be_falsy @@ -336,8 +336,8 @@ RSpec.describe Gitlab::Experimentation do end end - describe '.enabled_for_user?' do - subject { described_class.enabled_for_user?(:test_experiment, experimentation_subject_index) } + describe '.enabled_for_value?' do + subject { described_class.enabled_for_value?(:test_experiment, experimentation_subject_index) } let(:experimentation_subject_index) { 9 } @@ -377,4 +377,32 @@ RSpec.describe Gitlab::Experimentation do end end end + + describe '.enabled_for_attribute?' do + subject { described_class.enabled_for_attribute?(:test_experiment, attribute) } + + let(:attribute) { 'abcd' } # Digest::SHA1.hexdigest('abcd').hex % 100 = 7 + + context 'experiment is disabled' do + before do + allow(described_class).to receive(:enabled?).and_return(false) + end + + it { is_expected.to be false } + end + + context 'experiment is enabled' do + before do + allow(described_class).to receive(:enabled?).and_return(true) + end + + it { is_expected.to be true } + + context 'outside enabled ratio' do + let(:attribute) { 'abc' } # Digest::SHA1.hexdigest('abc').hex % 100 = 17 + + it { is_expected.to be false } + end + end + end end diff --git a/spec/lib/gitlab/graphql/pagination/keyset/query_builder_spec.rb b/spec/lib/gitlab/graphql/pagination/keyset/query_builder_spec.rb index c7e7db4d535..fa631aa5666 100644 --- a/spec/lib/gitlab/graphql/pagination/keyset/query_builder_spec.rb +++ b/spec/lib/gitlab/graphql/pagination/keyset/query_builder_spec.rb @@ -136,11 +136,12 @@ RSpec.describe Gitlab::Graphql::Pagination::Keyset::QueryBuilder do let(:relation) { Project.sorted_by_similarity_desc('test', include_in_select: true) } let(:arel_table) { Project.arel_table } let(:decoded_cursor) { { 'similarity' => 0.5, 'id' => 100 } } + let(:similarity_function_call) { Gitlab::Database::SimilarityScore::SIMILARITY_FUNCTION_CALL_WITH_ANNOTATION } let(:similarity_sql) do [ - '(SIMILARITY(COALESCE("projects"."path", \'\'), \'test\') * CAST(\'1\' AS numeric))', - '(SIMILARITY(COALESCE("projects"."name", \'\'), \'test\') * CAST(\'0.7\' AS numeric))', - '(SIMILARITY(COALESCE("projects"."description", \'\'), \'test\') * CAST(\'0.2\' AS numeric))' + "(#{similarity_function_call}(COALESCE(\"projects\".\"path\", ''), 'test') * CAST('1' AS numeric))", + "(#{similarity_function_call}(COALESCE(\"projects\".\"name\", ''), 'test') * CAST('0.7' AS numeric))", + "(#{similarity_function_call}(COALESCE(\"projects\".\"description\", ''), 'test') * CAST('0.2' AS numeric))" ].join(' + ') end |