diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-07-25 21:10:00 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-07-25 21:10:00 +0300 |
commit | 0599ea8fb389d70cab67a78e80d61eadc6aeaaff (patch) | |
tree | ec1a88b84086f74d20b5a7c018ef1c53f11a592d /spec | |
parent | d5fa3bac88ff4b8c5870d6d7988fc7e37832c183 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r-- | spec/factories/ci/secure_files.rb | 6 | ||||
-rw-r--r-- | spec/features/merge_request/user_comments_on_merge_request_spec.rb | 39 | ||||
-rw-r--r-- | spec/frontend/gfm_auto_complete/mock_data.js | 34 | ||||
-rw-r--r-- | spec/frontend/gfm_auto_complete_spec.js | 48 | ||||
-rw-r--r-- | spec/frontend/notes/components/note_form_spec.js | 16 | ||||
-rw-r--r-- | spec/lib/gitlab/database/migration_helpers_spec.rb | 9 | ||||
-rw-r--r-- | spec/lib/google_api/cloud_platform/client_spec.rb | 9 |
7 files changed, 157 insertions, 4 deletions
diff --git a/spec/factories/ci/secure_files.rb b/spec/factories/ci/secure_files.rb index 9afec5db858..74988202c71 100644 --- a/spec/factories/ci/secure_files.rb +++ b/spec/factories/ci/secure_files.rb @@ -6,5 +6,11 @@ FactoryBot.define do file { fixture_file_upload('spec/fixtures/ci_secure_files/upload-keystore.jks', 'application/octet-stream') } checksum { 'foo1234' } project + + trait :remote_store do + after(:create) do |ci_secure_file| + ci_secure_file.update!(file_store: ObjectStorage::Store::REMOTE) + end + end end end diff --git a/spec/features/merge_request/user_comments_on_merge_request_spec.rb b/spec/features/merge_request/user_comments_on_merge_request_spec.rb index 43096f8e7f9..dbcfc2b968f 100644 --- a/spec/features/merge_request/user_comments_on_merge_request_spec.rb +++ b/spec/features/merge_request/user_comments_on_merge_request_spec.rb @@ -51,6 +51,45 @@ RSpec.describe 'User comments on a merge request', :js do expect(page).to have_button('Resolve thread') end + array = [':', '@', '#', '%', '!', '~', '$', '[contact:'] + array.each do |x| + it 'handles esc key correctly when atwho is active' do + page.within('.js-main-target-form') do + fill_in('note[note]', with: 'comment 1') + click_button('Comment') + end + + wait_for_requests + + page.within('.note') do + click_button('Reply to comment') + fill_in('note[note]', with: x) + send_keys :escape + end + + wait_for_requests + expect(page.html).not_to include('Are you sure you want to cancel creating this comment?') + end + end + + it 'handles esc key correctly when atwho is not active' do + page.within('.js-main-target-form') do + fill_in('note[note]', with: 'comment 1') + click_button('Comment') + end + + wait_for_requests + + page.within('.note') do + click_button('Reply to comment') + fill_in('note[note]', with: 'comment 2') + send_keys :escape + end + + wait_for_requests + expect(page.html).to include('Are you sure you want to cancel creating this comment?') + end + it 'loads new comment' do # Add new comment in background in order to check # if it's going to be loaded automatically for current user. diff --git a/spec/frontend/gfm_auto_complete/mock_data.js b/spec/frontend/gfm_auto_complete/mock_data.js new file mode 100644 index 00000000000..86795ffd0a5 --- /dev/null +++ b/spec/frontend/gfm_auto_complete/mock_data.js @@ -0,0 +1,34 @@ +export const eventlistenersMockDefaultMap = [ + { + key: 'shown', + namespace: 'atwho', + }, + { + key: 'shown-users', + namespace: 'atwho', + }, + { + key: 'shown-issues', + namespace: 'atwho', + }, + { + key: 'shown-milestones', + namespace: 'atwho', + }, + { + key: 'shown-mergerequests', + namespace: 'atwho', + }, + { + key: 'shown-labels', + namespace: 'atwho', + }, + { + key: 'shown-snippets', + namespace: 'atwho', + }, + { + key: 'shown-contacts', + namespace: 'atwho', + }, +]; diff --git a/spec/frontend/gfm_auto_complete_spec.js b/spec/frontend/gfm_auto_complete_spec.js index 072cf34d0ef..c3dfc4570f9 100644 --- a/spec/frontend/gfm_auto_complete_spec.js +++ b/spec/frontend/gfm_auto_complete_spec.js @@ -10,6 +10,7 @@ import { TEST_HOST } from 'helpers/test_constants'; import waitForPromises from 'helpers/wait_for_promises'; import AjaxCache from '~/lib/utils/ajax_cache'; import axios from '~/lib/utils/axios_utils'; +import { eventlistenersMockDefaultMap } from 'ee_else_ce_jest/gfm_auto_complete/mock_data'; describe('GfmAutoComplete', () => { const fetchDataMock = { fetchData: jest.fn() }; @@ -457,12 +458,12 @@ describe('GfmAutoComplete', () => { it('should be false with actual array data', () => { expect( - GfmAutoComplete.isLoading([{ title: 'Foo' }, { title: 'Bar' }, { title: 'Qux' }]), + GfmAutoComplete.isLoading([{ title: 'events' }, { title: 'Bar' }, { title: 'Qux' }]), ).toBe(false); }); it('should be false with actual data item', () => { - expect(GfmAutoComplete.isLoading({ title: 'Foo' })).toBe(false); + expect(GfmAutoComplete.isLoading({ title: 'events' })).toBe(false); }); }); @@ -884,4 +885,47 @@ describe('GfmAutoComplete', () => { ).toBe(`<li><small>${escapedPayload} ${escapedPayload}</small> ${escapedPayload}</li>`); }); }); + + describe('autocomplete show eventlisteners', () => { + let $textarea; + + beforeEach(() => { + setHTMLFixture('<textarea></textarea>'); + $textarea = $('textarea'); + }); + + it('sets correct eventlisteners when autocomplete features are enabled', () => { + const autocomplete = new GfmAutoComplete({}); + autocomplete.setup($textarea); + autocomplete.setupAtWho($textarea); + /* eslint-disable-next-line no-underscore-dangle */ + const events = $._data($textarea[0], 'events'); + expect( + Object.keys(events) + .filter((x) => { + return x.startsWith('shown'); + }) + .map((e) => { + return { key: e, namespace: events[e][0].namespace }; + }), + ).toEqual(expect.arrayContaining(eventlistenersMockDefaultMap)); + }); + + it('sets no eventlisteners when features are disabled', () => { + const autocomplete = new GfmAutoComplete({}); + autocomplete.setup($textarea, {}); + autocomplete.setupAtWho($textarea); + /* eslint-disable-next-line no-underscore-dangle */ + const events = $._data($textarea[0], 'events'); + expect( + Object.keys(events) + .filter((x) => { + return x.startsWith('shown'); + }) + .map((e) => { + return { key: e, namespace: events[e][0].namespace }; + }), + ).toStrictEqual([]); + }); + }); }); diff --git a/spec/frontend/notes/components/note_form_spec.js b/spec/frontend/notes/components/note_form_spec.js index 252c24d1117..563fd570d52 100644 --- a/spec/frontend/notes/components/note_form_spec.js +++ b/spec/frontend/notes/components/note_form_spec.js @@ -6,6 +6,7 @@ import { getDraft, updateDraft } from '~/lib/utils/autosave'; import NoteForm from '~/notes/components/note_form.vue'; import createStore from '~/notes/stores'; import MarkdownField from '~/vue_shared/components/markdown/field.vue'; +import { AT_WHO_ACTIVE_CLASS } from '~/gfm_auto_complete'; import { noteableDataMock, notesDataMock, discussionMock, note } from '../mock_data'; jest.mock('~/lib/utils/autosave'); @@ -201,6 +202,21 @@ describe('issue_note_form component', () => { expect(wrapper.emitted().cancelForm).toHaveLength(1); }); + it('will not cancel form if there is an active at-who-active class', async () => { + wrapper.setProps({ + ...props, + }); + await nextTick(); + + const textareaEl = wrapper.vm.$refs.textarea; + const cancelButton = findCancelButton(); + textareaEl.classList.add(AT_WHO_ACTIVE_CLASS); + cancelButton.vm.$emit('click'); + await nextTick(); + + expect(wrapper.emitted().cancelForm).toBeUndefined(); + }); + it('should be possible to update the note', async () => { wrapper.setProps({ ...props, diff --git a/spec/lib/gitlab/database/migration_helpers_spec.rb b/spec/lib/gitlab/database/migration_helpers_spec.rb index 3ccc3a17862..c289277d6be 100644 --- a/spec/lib/gitlab/database/migration_helpers_spec.rb +++ b/spec/lib/gitlab/database/migration_helpers_spec.rb @@ -1080,6 +1080,8 @@ RSpec.describe Gitlab::Database::MigrationHelpers do end it 'renames a column concurrently' do + expect(Gitlab::Database::QueryAnalyzers::GitlabSchemasValidateConnection).to receive(:with_suppressed).and_yield + expect(model).to receive(:check_trigger_permissions!).with(:users) expect(model).to receive(:install_rename_triggers) @@ -1112,6 +1114,7 @@ RSpec.describe Gitlab::Database::MigrationHelpers do let(:connection) { ActiveRecord::Migration.connection } before do + expect(Gitlab::Database::QueryAnalyzers::GitlabSchemasValidateConnection).to receive(:with_suppressed).and_yield expect(Gitlab::Database::UnidirectionalCopyTrigger).to receive(:on_table) .with(:users, connection: connection).and_return(copy_trigger) end @@ -1165,6 +1168,8 @@ RSpec.describe Gitlab::Database::MigrationHelpers do end it 'copies the default to the new column' do + expect(Gitlab::Database::QueryAnalyzers::GitlabSchemasValidateConnection).to receive(:with_suppressed).and_yield + expect(model).to receive(:change_column_default) .with(:users, :new, old_column.default) @@ -1246,6 +1251,8 @@ RSpec.describe Gitlab::Database::MigrationHelpers do end it 'reverses the operations of cleanup_concurrent_column_rename' do + expect(Gitlab::Database::QueryAnalyzers::GitlabSchemasValidateConnection).to receive(:with_suppressed).and_yield + expect(model).to receive(:check_trigger_permissions!).with(:users) expect(model).to receive(:install_rename_triggers) @@ -1302,6 +1309,8 @@ RSpec.describe Gitlab::Database::MigrationHelpers do end it 'copies the default to the old column' do + expect(Gitlab::Database::QueryAnalyzers::GitlabSchemasValidateConnection).to receive(:with_suppressed).and_yield + expect(model).to receive(:change_column_default) .with(:users, :old, new_column.default) diff --git a/spec/lib/google_api/cloud_platform/client_spec.rb b/spec/lib/google_api/cloud_platform/client_spec.rb index ba49c00245e..d8818d46836 100644 --- a/spec/lib/google_api/cloud_platform/client_spec.rb +++ b/spec/lib/google_api/cloud_platform/client_spec.rb @@ -217,7 +217,11 @@ RSpec.describe GoogleApi::CloudPlatform::Client do describe '#list_projects' do subject { client.list_projects } - let(:list_of_projects) { [{}, {}, {}] } + let(:gcp_project_01) { Google::Apis::CloudresourcemanagerV1::Project.new(project_id: '01') } + let(:gcp_project_02) { Google::Apis::CloudresourcemanagerV1::Project.new(project_id: '02') } + let(:gcp_project_03) { Google::Apis::CloudresourcemanagerV1::Project.new(project_id: '03') } + let(:list_of_projects) { [gcp_project_03, gcp_project_01, gcp_project_02] } + let(:next_page_token) { nil } let(:operation) { double('projects': list_of_projects, 'next_page_token': next_page_token) } @@ -225,7 +229,8 @@ RSpec.describe GoogleApi::CloudPlatform::Client do expect_any_instance_of(Google::Apis::CloudresourcemanagerV1::CloudResourceManagerService) .to receive(:list_projects) .and_return(operation) - is_expected.to eq(list_of_projects) + + is_expected.to contain_exactly(gcp_project_01, gcp_project_02, gcp_project_03) end end |