diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-06-07 09:08:42 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-06-07 09:08:42 +0300 |
commit | 02b949f3b64f88e97abec62c355ca1b1da2bd460 (patch) | |
tree | fffb942e5c6b9f19d3903a709172423595308643 /spec | |
parent | 3e59f1f11a387ab3e0383f7beea8ea599291a293 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r-- | spec/controllers/graphql_controller_spec.rb | 2 | ||||
-rw-r--r-- | spec/controllers/omniauth_callbacks_controller_spec.rb | 55 | ||||
-rw-r--r-- | spec/finders/users_finder_spec.rb | 40 | ||||
-rw-r--r-- | spec/frontend/boards/boards_util_spec.js | 39 | ||||
-rw-r--r-- | spec/frontend/work_items/components/notes/work_item_add_note_spec.js | 8 | ||||
-rw-r--r-- | spec/graphql/resolvers/timelog_resolver_spec.rb | 48 | ||||
-rw-r--r-- | spec/helpers/search_helper_spec.rb | 12 | ||||
-rw-r--r-- | spec/lib/gitlab/search_results_spec.rb | 16 | ||||
-rw-r--r-- | spec/models/timelog_spec.rb | 56 | ||||
-rw-r--r-- | spec/requests/rack_middlewares/omniauth_spec.rb | 14 |
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 |