Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-06-07 09:08:42 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-06-07 09:08:42 +0300
commit02b949f3b64f88e97abec62c355ca1b1da2bd460 (patch)
treefffb942e5c6b9f19d3903a709172423595308643 /spec
parent3e59f1f11a387ab3e0383f7beea8ea599291a293 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/controllers/graphql_controller_spec.rb2
-rw-r--r--spec/controllers/omniauth_callbacks_controller_spec.rb55
-rw-r--r--spec/finders/users_finder_spec.rb40
-rw-r--r--spec/frontend/boards/boards_util_spec.js39
-rw-r--r--spec/frontend/work_items/components/notes/work_item_add_note_spec.js8
-rw-r--r--spec/graphql/resolvers/timelog_resolver_spec.rb48
-rw-r--r--spec/helpers/search_helper_spec.rb12
-rw-r--r--spec/lib/gitlab/search_results_spec.rb16
-rw-r--r--spec/models/timelog_spec.rb56
-rw-r--r--spec/requests/rack_middlewares/omniauth_spec.rb14
10 files changed, 264 insertions, 26 deletions
diff --git a/spec/controllers/graphql_controller_spec.rb b/spec/controllers/graphql_controller_spec.rb
index 2842ce93e3a..2a16fb1ea37 100644
--- a/spec/controllers/graphql_controller_spec.rb
+++ b/spec/controllers/graphql_controller_spec.rb
@@ -463,7 +463,7 @@ RSpec.describe GraphqlController, feature_category: :integrations do
it 'fails if the GraphiQL gem version is not 1.8.0' do
# We cache the IntrospectionQuery based on the default IntrospectionQuery by GraphiQL. If this spec fails,
# GraphiQL has been updated, so we should check whether the IntropsectionQuery we cache is still valid.
- # It is stored in `app/assets/javascripts/graphql_shared/queries/introspection.query.graphql`
+ # It is stored in `app/graphql/cached_introspection_query.rb#query_string`
expect(GraphiQL::Rails::VERSION).to eq("1.8.0")
end
end
diff --git a/spec/controllers/omniauth_callbacks_controller_spec.rb b/spec/controllers/omniauth_callbacks_controller_spec.rb
index 2e9fc1cece5..21672cf5dbe 100644
--- a/spec/controllers/omniauth_callbacks_controller_spec.rb
+++ b/spec/controllers/omniauth_callbacks_controller_spec.rb
@@ -18,6 +18,39 @@ RSpec.describe OmniauthCallbacksController, type: :controller, feature_category:
Rails.application.env_config['omniauth.auth'] = @original_env_config_omniauth_auth
end
+ context 'authentication succeeds' do
+ let(:extern_uid) { 'my-uid' }
+ let(:provider) { :github }
+
+ context 'without signed-in user' do
+ it 'increments Prometheus counter' do
+ expect { post(provider) }.to(
+ change do
+ Gitlab::Metrics.registry
+ .get(:gitlab_omniauth_login_total)
+ .get(provider: 'github', status: 'succeeded')
+ end.by(1)
+ )
+ end
+ end
+
+ context 'with signed-in user' do
+ before do
+ sign_in user
+ end
+
+ it 'increments Prometheus counter' do
+ expect { post(provider) }.to(
+ change do
+ Gitlab::Metrics.registry
+ .get(:gitlab_omniauth_login_total)
+ .get(provider: 'github', status: 'succeeded')
+ end.by(1)
+ )
+ end
+ end
+ end
+
context 'a deactivated user' do
let(:provider) { :github }
let(:extern_uid) { 'my-uid' }
@@ -96,21 +129,31 @@ RSpec.describe OmniauthCallbacksController, type: :controller, feature_category:
let(:extern_uid) { 'my-uid' }
let(:provider) { :saml }
- def stub_route_as(path)
- allow(@routes).to receive(:generate_extras) { [path, []] }
- end
-
- it 'calls through to the failure handler' do
+ before do
request.env['omniauth.error'] = OneLogin::RubySaml::ValidationError.new("Fingerprint mismatch")
request.env['omniauth.error.strategy'] = OmniAuth::Strategies::SAML.new(nil)
- stub_route_as('/users/auth/saml/callback')
+ allow(@routes).to receive(:generate_extras).and_return(['/users/auth/saml/callback', []])
+ end
+ it 'calls through to the failure handler' do
ForgeryProtection.with_forgery_protection do
post :failure
end
expect(flash[:alert]).to match(/Fingerprint mismatch/)
end
+
+ it 'increments Prometheus counter' do
+ ForgeryProtection.with_forgery_protection do
+ expect { post :failure }.to(
+ change do
+ Gitlab::Metrics.registry
+ .get(:gitlab_omniauth_login_total)
+ .get(provider: 'saml', status: 'failed')
+ end.by(1)
+ )
+ end
+ end
end
context 'when a redirect fragment is provided' do
diff --git a/spec/finders/users_finder_spec.rb b/spec/finders/users_finder_spec.rb
index 2e94ca5757a..e0a9237a79b 100644
--- a/spec/finders/users_finder_spec.rb
+++ b/spec/finders/users_finder_spec.rb
@@ -45,6 +45,46 @@ RSpec.describe UsersFinder do
expect(users).to be_empty
end
+ describe 'minimum character limit for search' do
+ it 'passes use_minimum_char_limit from params' do
+ search_term = normal_user.username[..1]
+ expect(User).to receive(:search)
+ .with(search_term, use_minimum_char_limit: false, with_private_emails: anything)
+ .once.and_call_original
+
+ described_class.new(user, { search: search_term, use_minimum_char_limit: false }).execute
+ end
+
+ it 'allows searching with 2 characters when use_minimum_char_limit is false' do
+ users = described_class
+ .new(user, { search: normal_user.username[..1], use_minimum_char_limit: false })
+ .execute
+
+ expect(users).to include(normal_user)
+ end
+
+ it 'does not allow searching with 2 characters when use_minimum_char_limit is not set' do
+ users = described_class
+ .new(user, search: normal_user.username[..1])
+ .execute
+
+ expect(users).to be_empty
+ end
+
+ context 'when autocomplete_users_use_search_service feature flag is disabled' do
+ before do
+ stub_feature_flags(autocomplete_users_use_search_service: false)
+ end
+
+ it 'does not pass use_minimum_char_limit from params' do
+ search_term = normal_user.username[..1]
+ expect(User).to receive(:search).with(search_term, with_private_emails: anything).once.and_call_original
+
+ described_class.new(user, { search: search_term, use_minimum_char_limit: false }).execute
+ end
+ end
+ end
+
it 'filters by external users' do
users = described_class.new(user, external: true).execute
diff --git a/spec/frontend/boards/boards_util_spec.js b/spec/frontend/boards/boards_util_spec.js
index ab3cf072357..3601bf14703 100644
--- a/spec/frontend/boards/boards_util_spec.js
+++ b/spec/frontend/boards/boards_util_spec.js
@@ -1,4 +1,5 @@
-import { formatIssueInput, filterVariables } from '~/boards/boards_util';
+import { formatIssueInput, filterVariables, FiltersInfo } from '~/boards/boards_util';
+import { FilterFields } from '~/boards/constants';
describe('formatIssueInput', () => {
const issueInput = {
@@ -149,4 +150,40 @@ describe('filterVariables', () => {
expect(result).toEqual(expected);
});
+
+ it.each([
+ [
+ 'converts milestone wild card',
+ {
+ filters: {
+ milestoneTitle: 'Started',
+ },
+ expected: {
+ milestoneWildcardId: 'STARTED',
+ not: {},
+ },
+ },
+ ],
+ [
+ 'converts assignee wild card',
+ {
+ filters: {
+ assigneeUsername: 'Any',
+ },
+ expected: {
+ assigneeWildcardId: 'ANY',
+ not: {},
+ },
+ },
+ ],
+ ])('%s', (_, { filters, issuableType = 'issue', expected }) => {
+ const result = filterVariables({
+ filters,
+ issuableType,
+ filterInfo: FiltersInfo,
+ filterFields: FilterFields,
+ });
+
+ expect(result).toEqual(expected);
+ });
});
diff --git a/spec/frontend/work_items/components/notes/work_item_add_note_spec.js b/spec/frontend/work_items/components/notes/work_item_add_note_spec.js
index fc907edcac9..9bb84947db5 100644
--- a/spec/frontend/work_items/components/notes/work_item_add_note_spec.js
+++ b/spec/frontend/work_items/components/notes/work_item_add_note_spec.js
@@ -41,6 +41,7 @@ describe('Work item add note', () => {
signedIn = true,
isEditing = true,
workItemType = 'Task',
+ isInternalThread = false,
} = {}) => {
workItemResponseHandler = jest.fn().mockResolvedValue(workItemResponse);
if (signedIn) {
@@ -65,6 +66,7 @@ describe('Work item add note', () => {
workItemType,
markdownPreviewPath: '/group/project/preview_markdown?target_type=WorkItem',
autocompleteDataSources: {},
+ isInternalThread,
},
stubs: {
WorkItemCommentLocked,
@@ -257,4 +259,10 @@ describe('Work item add note', () => {
expect(workItemResponseHandler).not.toHaveBeenCalled();
});
+
+ it('wrapper adds `internal-note` class when internal thread', async () => {
+ await createComponent({ isInternalThread: true });
+
+ expect(wrapper.attributes('class')).toContain('internal-note');
+ });
});
diff --git a/spec/graphql/resolvers/timelog_resolver_spec.rb b/spec/graphql/resolvers/timelog_resolver_spec.rb
index 5177873321c..798d8a56cf5 100644
--- a/spec/graphql/resolvers/timelog_resolver_spec.rb
+++ b/spec/graphql/resolvers/timelog_resolver_spec.rb
@@ -291,17 +291,51 @@ RSpec.describe Resolvers::TimelogResolver, feature_category: :team_planning do
end
context 'when the sort argument is provided' do
- let_it_be(:timelog_a) { create(:issue_timelog, time_spent: 7200, spent_at: 1.hour.ago, user: current_user) }
- let_it_be(:timelog_b) { create(:issue_timelog, time_spent: 5400, spent_at: 2.hours.ago, user: current_user) }
- let_it_be(:timelog_c) { create(:issue_timelog, time_spent: 1800, spent_at: 30.minutes.ago, user: current_user) }
- let_it_be(:timelog_d) { create(:issue_timelog, time_spent: 3600, spent_at: 1.day.ago, user: current_user) }
+ let_it_be(:timelog_a) do
+ create(
+ :issue_timelog, time_spent: 7200, spent_at: 1.hour.ago,
+ created_at: 1.hour.ago, updated_at: 1.hour.ago, user: current_user
+ )
+ end
+
+ let_it_be(:timelog_b) do
+ create(
+ :issue_timelog, time_spent: 5400, spent_at: 2.hours.ago,
+ created_at: 2.hours.ago, updated_at: 2.hours.ago, user: current_user
+ )
+ end
+
+ let_it_be(:timelog_c) do
+ create(
+ :issue_timelog, time_spent: 1800, spent_at: 30.minutes.ago,
+ created_at: 30.minutes.ago, updated_at: 30.minutes.ago, user: current_user
+ )
+ end
+
+ let_it_be(:timelog_d) do
+ create(
+ :issue_timelog, time_spent: 3600, spent_at: 1.day.ago,
+ created_at: 1.day.ago, updated_at: 1.day.ago, user: current_user
+ )
+ end
let(:object) { current_user }
- let(:args) { { sort: 'TIME_SPENT_ASC' } }
let(:extra_args) { {} }
- it 'returns all the timelogs in the correct order' do
- expect(timelogs.items).to eq([timelog_c, timelog_d, timelog_b, timelog_a])
+ context 'when sort argument comes from TimelogSortEnum' do
+ let(:args) { { sort: 'TIME_SPENT_ASC' } }
+
+ it 'returns all the timelogs in the correct order' do
+ expect(timelogs.items).to eq([timelog_c, timelog_d, timelog_b, timelog_a])
+ end
+ end
+
+ context 'when sort argument comes from SortEnum' do
+ let(:args) { { sort: 'CREATED_ASC' } }
+
+ it 'returns all the timelogs in the correct order' do
+ expect(timelogs.items).to eq([timelog_d, timelog_b, timelog_a, timelog_c])
+ end
end
end
diff --git a/spec/helpers/search_helper_spec.rb b/spec/helpers/search_helper_spec.rb
index c0f129cefc3..bbc07e91728 100644
--- a/spec/helpers/search_helper_spec.rb
+++ b/spec/helpers/search_helper_spec.rb
@@ -60,7 +60,7 @@ RSpec.describe SearchHelper, feature_category: :global_search do
expect(search_autocomplete_opts(project.name).size).to eq(1)
end
- context 'for users' do
+ shared_examples 'for users' do
let_it_be(:another_user) { create(:user, name: 'Jane Doe') }
let(:term) { 'jane' }
@@ -153,6 +153,16 @@ RSpec.describe SearchHelper, feature_category: :global_search do
end
end
+ [true, false].each do |enabled|
+ context "with feature flag autcomplete_users_use_search_service #{enabled}" do
+ before do
+ stub_feature_flags(autocomplete_users_use_search_service: enabled)
+ end
+
+ include_examples 'for users'
+ end
+ end
+
it "includes the required project attrs" do
project = create(:project, namespace: create(:namespace, owner: user))
result = search_autocomplete_opts(project.name).first
diff --git a/spec/lib/gitlab/search_results_spec.rb b/spec/lib/gitlab/search_results_spec.rb
index 0d4411a5d41..ce54f853e1b 100644
--- a/spec/lib/gitlab/search_results_spec.rb
+++ b/spec/lib/gitlab/search_results_spec.rb
@@ -292,16 +292,28 @@ RSpec.describe Gitlab::SearchResults, feature_category: :global_search do
it 'does not call the UsersFinder when the current_user is not allowed to read users list' do
allow(Ability).to receive(:allowed?).and_return(false)
- expect(UsersFinder).not_to receive(:new).with(user, search: 'foo').and_call_original
+ expect(UsersFinder).not_to receive(:new).with(user, { search: 'foo', use_minimum_char_limit: false }).and_call_original
results.objects('users')
end
it 'calls the UsersFinder' do
- expect(UsersFinder).to receive(:new).with(user, search: 'foo').and_call_original
+ expect(UsersFinder).to receive(:new).with(user, { search: 'foo', use_minimum_char_limit: false }).and_call_original
results.objects('users')
end
+
+ context 'when autocomplete_users_use_search_service feature flag is disabled' do
+ before do
+ stub_feature_flags(autocomplete_users_use_search_service: false)
+ end
+
+ it 'calls the UsersFinder without use_minimum_char_limit' do
+ expect(UsersFinder).to receive(:new).with(user, search: 'foo').and_call_original
+
+ results.objects('users')
+ end
+ end
end
end
diff --git a/spec/models/timelog_spec.rb b/spec/models/timelog_spec.rb
index 515057a862b..4f2f16875b8 100644
--- a/spec/models/timelog_spec.rb
+++ b/spec/models/timelog_spec.rb
@@ -152,26 +152,66 @@ RSpec.describe Timelog, feature_category: :team_planning do
describe 'sorting' do
let_it_be(:user) { create(:user) }
- let_it_be(:timelog_a) { create(:issue_timelog, time_spent: 7200, spent_at: 1.hour.ago, user: user) }
- let_it_be(:timelog_b) { create(:issue_timelog, time_spent: 5400, spent_at: 2.hours.ago, user: user) }
- let_it_be(:timelog_c) { create(:issue_timelog, time_spent: 1800, spent_at: 30.minutes.ago, user: user) }
- let_it_be(:timelog_d) { create(:issue_timelog, time_spent: 3600, spent_at: 1.day.ago, user: user) }
+
+ let_it_be(:timelog_a) do
+ create(
+ :issue_timelog, time_spent: 7200, spent_at: 1.hour.ago,
+ created_at: 1.hour.ago, updated_at: 1.hour.ago, user: user
+ )
+ end
+
+ let_it_be(:timelog_b) do
+ create(
+ :issue_timelog, time_spent: 5400, spent_at: 2.hours.ago,
+ created_at: 2.hours.ago, updated_at: 2.hours.ago, user: user
+ )
+ end
+
+ let_it_be(:timelog_c) do
+ create(
+ :issue_timelog, time_spent: 1800, spent_at: 30.minutes.ago,
+ created_at: 30.minutes.ago, updated_at: 30.minutes.ago, user: user
+ )
+ end
+
+ let_it_be(:timelog_d) do
+ create(
+ :issue_timelog, time_spent: 3600, spent_at: 1.day.ago,
+ created_at: 1.day.ago, updated_at: 1.day.ago, user: user
+ )
+ end
describe '.sort_by_field' do
it 'sorts timelogs by time spent in ascending order' do
- expect(user.timelogs.sort_by_field('time_spent', :asc)).to eq([timelog_c, timelog_d, timelog_b, timelog_a])
+ expect(user.timelogs.sort_by_field(:time_spent_asc)).to eq([timelog_c, timelog_d, timelog_b, timelog_a])
end
it 'sorts timelogs by time spent in descending order' do
- expect(user.timelogs.sort_by_field('time_spent', :desc)).to eq([timelog_a, timelog_b, timelog_d, timelog_c])
+ expect(user.timelogs.sort_by_field(:time_spent_desc)).to eq([timelog_a, timelog_b, timelog_d, timelog_c])
end
it 'sorts timelogs by spent at in ascending order' do
- expect(user.timelogs.sort_by_field('spent_at', :asc)).to eq([timelog_d, timelog_b, timelog_a, timelog_c])
+ expect(user.timelogs.sort_by_field(:spent_at_asc)).to eq([timelog_d, timelog_b, timelog_a, timelog_c])
end
it 'sorts timelogs by spent at in descending order' do
- expect(user.timelogs.sort_by_field('spent_at', :desc)).to eq([timelog_c, timelog_a, timelog_b, timelog_d])
+ expect(user.timelogs.sort_by_field(:spent_at_desc)).to eq([timelog_c, timelog_a, timelog_b, timelog_d])
+ end
+
+ it 'sorts timelogs by created at in ascending order' do
+ expect(user.timelogs.sort_by_field(:created_at_asc)).to eq([timelog_d, timelog_b, timelog_a, timelog_c])
+ end
+
+ it 'sorts timelogs by created at in descending order' do
+ expect(user.timelogs.sort_by_field(:created_at_desc)).to eq([timelog_c, timelog_a, timelog_b, timelog_d])
+ end
+
+ it 'sorts timelogs by updated at in ascending order' do
+ expect(user.timelogs.sort_by_field(:updated_at_asc)).to eq([timelog_d, timelog_b, timelog_a, timelog_c])
+ end
+
+ it 'sorts timelogs by updated at in descending order' do
+ expect(user.timelogs.sort_by_field(:updated_at_desc)).to eq([timelog_c, timelog_a, timelog_b, timelog_d])
end
end
end
diff --git a/spec/requests/rack_middlewares/omniauth_spec.rb b/spec/requests/rack_middlewares/omniauth_spec.rb
new file mode 100644
index 00000000000..e0401d37d91
--- /dev/null
+++ b/spec/requests/rack_middlewares/omniauth_spec.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'OmniAuth Rack middlewares', feature_category: :system_access do
+ describe 'OmniAuth before_request_phase callback' do
+ it 'increments Prometheus counter' do
+ post('/users/auth/google_oauth2')
+
+ counter = Gitlab::Metrics.registry.get(:gitlab_omniauth_login_total)
+ expect(counter.get(provider: 'google_oauth2', status: 'initiated')).to eq(1)
+ end
+ end
+end