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-05-16 18:07:40 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-05-16 18:07:40 +0300
commit0e1756ac5c275f8d548c06693b15578baf189d56 (patch)
tree095610add4bf2e78c66a2dec230438aaf599fdb2 /spec
parent0045970352e8729b2797591beb88a7df884d84f4 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/components/pajamas/alert_component_spec.rb52
-rw-r--r--spec/features/projects/environments/environment_metrics_spec.rb2
-rw-r--r--spec/frontend/__helpers__/mocks/mr_notes/stores/index.js15
-rw-r--r--spec/frontend/batch_comments/components/preview_item_spec.js47
-rw-r--r--spec/frontend/diffs/components/compare_versions_spec.js51
-rw-r--r--spec/frontend/diffs/components/diff_line_note_form_spec.js119
-rw-r--r--spec/frontend/diffs/components/no_changes_spec.js57
-rw-r--r--spec/frontend/diffs/components/settings_dropdown_spec.js93
-rw-r--r--spec/frontend/diffs/store/actions_spec.js2
-rw-r--r--spec/frontend/issuable/components/issuable_header_warnings_spec.js17
-rw-r--r--spec/lib/gitlab/cluster/puma_worker_killer_initializer_spec.rb30
-rw-r--r--spec/lib/gitlab/cluster/puma_worker_killer_observer_spec.rb25
-rw-r--r--spec/models/packages/package_spec.rb10
-rw-r--r--spec/services/quick_actions/interpret_service_spec.rb12
-rw-r--r--spec/support/rspec_order_todo.yml1
15 files changed, 274 insertions, 259 deletions
diff --git a/spec/components/pajamas/alert_component_spec.rb b/spec/components/pajamas/alert_component_spec.rb
index 8f02979357e..4b554564d6e 100644
--- a/spec/components/pajamas/alert_component_spec.rb
+++ b/spec/components/pajamas/alert_component_spec.rb
@@ -126,25 +126,45 @@ RSpec.describe Pajamas::AlertComponent, :aggregate_failures, type: :component do
end
context 'with dismissible content' do
- before do
- render_inline described_class.new(
- close_button_options: {
- class: '_close_button_class_',
- data: {
- testid: '_close_button_testid_'
- }
- }
- )
- end
+ context 'with no custom options' do
+ before do
+ render_inline described_class.new
+ end
- it 'does not have "not dismissible" class' do
- expect(page).not_to have_selector('.gl-alert-not-dismissible')
+ it 'does not have "not dismissible" class' do
+ expect(page).not_to have_selector('.gl-alert-not-dismissible')
+ end
+
+ it 'renders a dismiss button and data' do
+ expect(page).to have_selector('.gl-button.btn-sm.btn-icon.gl-button.gl-dismiss-btn.js-close')
+ expect(page).to have_selector("[data-testid='close-icon']")
+ expect(page).to have_selector('[aria-label="Dismiss"]')
+ end
end
- it 'renders a dismiss button and data' do
- expect(page).to have_selector('.gl-dismiss-btn.js-close._close_button_class_')
- expect(page).to have_selector("[data-testid='close-icon']")
- expect(page).to have_selector('[data-testid="_close_button_testid_"]')
+ context 'with custom options' do
+ before do
+ render_inline described_class.new(
+ close_button_options: {
+ aria: {
+ label: '_custom_aria_label_'
+ },
+ class: '_close_button_class_',
+ data: {
+ testid: '_close_button_testid_',
+ "custom-attribute": '_custom_data_'
+ }
+ }
+ )
+ end
+
+ it 'renders a dismiss button and data' do
+ expect(page).to have_selector('.gl-button.btn-sm.btn-icon.gl-dismiss-btn.js-close._close_button_class_')
+ expect(page).to have_selector("[data-testid='close-icon']")
+ expect(page).to have_selector('[data-testid="_close_button_testid_"]')
+ expect(page).to have_selector('[aria-label="Dismiss"]')
+ expect(page).to have_selector('[data-custom-attribute="_custom_data_"]')
+ end
end
end
diff --git a/spec/features/projects/environments/environment_metrics_spec.rb b/spec/features/projects/environments/environment_metrics_spec.rb
index e212d464029..335866a7d75 100644
--- a/spec/features/projects/environments/environment_metrics_spec.rb
+++ b/spec/features/projects/environments/environment_metrics_spec.rb
@@ -6,7 +6,7 @@ RSpec.describe 'Environment > Metrics', feature_category: :projects do
include PrometheusHelpers
let(:user) { create(:user) }
- let(:project) { create(:project, :with_prometheus_integration, :repository) }
+ let_it_be(:project) { create(:project, :with_prometheus_integration, :repository) }
let(:pipeline) { create(:ci_pipeline, project: project) }
let(:build) { create(:ci_build, pipeline: pipeline) }
let(:environment) { create(:environment, project: project) }
diff --git a/spec/frontend/__helpers__/mocks/mr_notes/stores/index.js b/spec/frontend/__helpers__/mocks/mr_notes/stores/index.js
new file mode 100644
index 00000000000..a983edbbb72
--- /dev/null
+++ b/spec/frontend/__helpers__/mocks/mr_notes/stores/index.js
@@ -0,0 +1,15 @@
+import { Store } from 'vuex-mock-store';
+import createDiffState from 'ee_else_ce/diffs/store/modules/diff_state';
+import createNotesState from '~/notes/stores/state';
+
+const store = new Store({
+ state: {
+ diffs: createDiffState(),
+ notes: createNotesState(),
+ },
+ spy: {
+ create: (handler) => jest.fn(handler).mockImplementation(() => Promise.resolve()),
+ },
+});
+
+export default store;
diff --git a/spec/frontend/batch_comments/components/preview_item_spec.js b/spec/frontend/batch_comments/components/preview_item_spec.js
index a19a72af813..191586e44cc 100644
--- a/spec/frontend/batch_comments/components/preview_item_spec.js
+++ b/spec/frontend/batch_comments/components/preview_item_spec.js
@@ -1,29 +1,33 @@
import { mount } from '@vue/test-utils';
import PreviewItem from '~/batch_comments/components/preview_item.vue';
-import { createStore } from '~/batch_comments/stores';
-import diffsModule from '~/diffs/store/modules';
-import notesModule from '~/notes/stores/modules';
+import store from '~/mr_notes/stores';
import { createDraft } from '../mock_data';
jest.mock('~/behaviors/markdown/render_gfm');
+jest.mock('~/mr_notes/stores', () => jest.requireActual('helpers/mocks/mr_notes/stores'));
describe('Batch comments draft preview item component', () => {
let wrapper;
let draft;
- function createComponent(isLast = false, extra = {}, extendStore = () => {}) {
- const store = createStore();
- store.registerModule('diffs', diffsModule());
- store.registerModule('notes', notesModule());
+ beforeEach(() => {
+ store.reset();
- extendStore(store);
+ store.getters.getDiscussion = jest.fn(() => null);
+ });
+ function createComponent(isLast = false, extra = {}) {
draft = {
...createDraft(),
...extra,
};
- wrapper = mount(PreviewItem, { store, propsData: { draft, isLast } });
+ wrapper = mount(PreviewItem, {
+ mocks: {
+ $store: store,
+ },
+ propsData: { draft, isLast },
+ });
}
it('renders text content', () => {
@@ -87,18 +91,19 @@ describe('Batch comments draft preview item component', () => {
describe('for thread', () => {
beforeEach(() => {
- createComponent(false, { discussion_id: '1', resolve_discussion: true }, (store) => {
- store.state.notes.discussions.push({
- id: '1',
- notes: [
- {
- author: {
- name: "Author 'Nick' Name",
- },
+ store.getters.getDiscussion.mockReturnValue({
+ id: '1',
+ notes: [
+ {
+ author: {
+ name: "Author 'Nick' Name",
},
- ],
- });
+ },
+ ],
});
+ store.getters.isDiscussionResolved = jest.fn().mockReturnValue(false);
+
+ createComponent(false, { discussion_id: '1', resolve_discussion: true });
});
it('renders title', () => {
@@ -114,9 +119,7 @@ describe('Batch comments draft preview item component', () => {
describe('for new comment', () => {
it('renders title', () => {
- createComponent(false, {}, (store) => {
- store.state.notes.discussions.push({});
- });
+ createComponent();
expect(wrapper.find('.review-preview-item-header-text').text()).toContain('Your new comment');
});
diff --git a/spec/frontend/diffs/components/compare_versions_spec.js b/spec/frontend/diffs/components/compare_versions_spec.js
index 47a266c2e36..cbbfd88260b 100644
--- a/spec/frontend/diffs/components/compare_versions_spec.js
+++ b/spec/frontend/diffs/components/compare_versions_spec.js
@@ -1,15 +1,14 @@
import { mount } from '@vue/test-utils';
-import Vue, { nextTick } from 'vue';
-import Vuex from 'vuex';
+import { nextTick } from 'vue';
import getDiffWithCommit from 'test_fixtures/merge_request_diffs/with_commit.json';
import setWindowLocation from 'helpers/set_window_location_helper';
import { TEST_HOST } from 'helpers/test_constants';
import { trimText } from 'helpers/text_helper';
import CompareVersionsComponent from '~/diffs/components/compare_versions.vue';
-import { createStore } from '~/mr_notes/stores';
+import store from '~/mr_notes/stores';
import diffsMockData from '../mock_data/merge_request_diffs';
-Vue.use(Vuex);
+jest.mock('~/mr_notes/stores', () => jest.requireActual('helpers/mocks/mr_notes/stores'));
const NEXT_COMMIT_URL = `${TEST_HOST}/?commit_id=next`;
const PREV_COMMIT_URL = `${TEST_HOST}/?commit_id=prev`;
@@ -20,8 +19,6 @@ beforeEach(() => {
describe('CompareVersions', () => {
let wrapper;
- let store;
- let dispatchMock;
const targetBranchName = 'tmp-wine-dev';
const { commit } = getDiffWithCommit;
@@ -30,10 +27,10 @@ describe('CompareVersions', () => {
store.state.diffs.commit = { ...store.state.diffs.commit, ...commitArgs };
}
- dispatchMock = jest.spyOn(store, 'dispatch');
-
wrapper = mount(CompareVersionsComponent, {
- store,
+ mocks: {
+ $store: store,
+ },
propsData: {
mergeRequestDiffs: diffsMockData,
diffFilesCountText: '1',
@@ -50,8 +47,25 @@ describe('CompareVersions', () => {
getCommitNavButtonsElement().find('.btn-group > *:first-child');
beforeEach(() => {
- store = createStore();
+ store.reset();
+
const mergeRequestDiff = diffsMockData[0];
+ const version = {
+ ...mergeRequestDiff,
+ href: `${TEST_HOST}/latest/version`,
+ versionName: 'latest version',
+ };
+ store.getters['diffs/diffCompareDropdownSourceVersions'] = [version];
+ store.getters['diffs/diffCompareDropdownTargetVersions'] = [
+ {
+ ...version,
+ selected: true,
+ versionName: targetBranchName,
+ },
+ ];
+ store.getters['diffs/whichCollapsedTypes'] = { any: false };
+ store.getters['diffs/isInlineView'] = false;
+ store.getters['diffs/isParallelView'] = false;
store.state.diffs.addedLines = 10;
store.state.diffs.removedLines = 20;
@@ -104,7 +118,6 @@ describe('CompareVersions', () => {
it('should not render Tree List toggle button when there are no changes', () => {
createWrapper();
-
const treeListBtn = wrapper.find('.js-toggle-tree-list');
expect(treeListBtn.exists()).toBe(false);
@@ -118,7 +131,10 @@ describe('CompareVersions', () => {
const viewTypeBtn = wrapper.find('#inline-diff-btn');
viewTypeBtn.trigger('click');
- expect(window.location.toString()).toContain('?view=inline');
+ expect(store.dispatch).toHaveBeenCalledWith(
+ 'diffs/setInlineDiffViewType',
+ expect.any(MouseEvent),
+ );
});
});
@@ -128,13 +144,16 @@ describe('CompareVersions', () => {
const viewTypeBtn = wrapper.find('#parallel-diff-btn');
viewTypeBtn.trigger('click');
- expect(window.location.toString()).toContain('?view=parallel');
+ expect(store.dispatch).toHaveBeenCalledWith(
+ 'diffs/setParallelDiffViewType',
+ expect.any(MouseEvent),
+ );
});
});
describe('commit', () => {
beforeEach(() => {
- store.state.diffs.commit = getDiffWithCommit.commit;
+ store.state.diffs.commit = commit;
createWrapper();
});
@@ -218,7 +237,7 @@ describe('CompareVersions', () => {
link.trigger('click');
await nextTick();
- expect(dispatchMock).toHaveBeenCalledWith('diffs/moveToNeighboringCommit', {
+ expect(store.dispatch).toHaveBeenCalledWith('diffs/moveToNeighboringCommit', {
direction: 'previous',
});
});
@@ -248,7 +267,7 @@ describe('CompareVersions', () => {
link.trigger('click');
await nextTick();
- expect(dispatchMock).toHaveBeenCalledWith('diffs/moveToNeighboringCommit', {
+ expect(store.dispatch).toHaveBeenCalledWith('diffs/moveToNeighboringCommit', {
direction: 'next',
});
});
diff --git a/spec/frontend/diffs/components/diff_line_note_form_spec.js b/spec/frontend/diffs/components/diff_line_note_form_spec.js
index eb895bd9057..e42b98e4d68 100644
--- a/spec/frontend/diffs/components/diff_line_note_form_spec.js
+++ b/spec/frontend/diffs/components/diff_line_note_form_spec.js
@@ -1,8 +1,7 @@
import { shallowMount } from '@vue/test-utils';
import { nextTick } from 'vue';
-import Vuex from 'vuex';
import DiffLineNoteForm from '~/diffs/components/diff_line_note_form.vue';
-import { createModules } from '~/mr_notes/stores';
+import store from '~/mr_notes/stores';
import NoteForm from '~/notes/components/note_form.vue';
import MultilineCommentForm from '~/notes/components/multiline_comment_form.vue';
import { confirmAction } from '~/lib/utils/confirm_via_gl_modal/confirm_via_gl_modal';
@@ -10,51 +9,25 @@ import { noteableDataMock } from 'jest/notes/mock_data';
import { getDiffFileMock } from '../mock_data/diff_file';
jest.mock('~/lib/utils/confirm_via_gl_modal/confirm_via_gl_modal');
+jest.mock('~/mr_notes/stores', () => jest.requireActual('helpers/mocks/mr_notes/stores'));
describe('DiffLineNoteForm', () => {
let wrapper;
let diffFile;
let diffLines;
- let actions;
- let store;
- const getSelectedLine = () => {
- const lineCode = diffLines[1].line_code;
- return diffFile.highlighted_diff_lines.find((l) => l.line_code === lineCode);
- };
-
- const createStore = (state) => {
- const modules = createModules();
- modules.diffs.actions = {
- ...modules.diffs.actions,
- saveDiffDiscussion: jest.fn(() => Promise.resolve()),
- };
- modules.diffs.getters = {
- ...modules.diffs.getters,
- diffCompareDropdownTargetVersions: jest.fn(),
- diffCompareDropdownSourceVersions: jest.fn(),
- selectedSourceIndex: jest.fn(),
- };
- modules.notes.getters = {
- ...modules.notes.getters,
- noteableType: jest.fn(),
- };
- actions = modules.diffs.actions;
+ beforeEach(() => {
+ diffFile = getDiffFileMock();
+ diffLines = diffFile.highlighted_diff_lines;
- store = new Vuex.Store({ modules });
- store.state.notes.userData.id = 1;
store.state.notes.noteableData = noteableDataMock;
- store.replaceState({ ...store.state, ...state });
- };
+ store.getters.isLoggedIn = jest.fn().mockReturnValue(true);
+ store.getters['diffs/getDiffFileByHash'] = jest.fn().mockReturnValue(diffFile);
+ });
- const createComponent = ({ props, state } = {}) => {
+ const createComponent = ({ props } = {}) => {
wrapper?.destroy();
- diffFile = getDiffFileMock();
- diffLines = diffFile.highlighted_diff_lines;
-
- createStore(state);
- store.state.diffs.diffFiles = [diffFile];
const propsData = {
diffFileHash: diffFile.file_hash,
@@ -66,7 +39,9 @@ describe('DiffLineNoteForm', () => {
};
wrapper = shallowMount(DiffLineNoteForm, {
- store,
+ mocks: {
+ $store: store,
+ },
propsData,
});
};
@@ -129,7 +104,10 @@ describe('DiffLineNoteForm', () => {
expect(confirmAction).toHaveBeenCalled();
await nextTick();
- expect(getSelectedLine().hasForm).toBe(false);
+ expect(store.dispatch).toHaveBeenCalledWith('diffs/cancelCommentForm', {
+ lineCode: diffLines[1].line_code,
+ fileHash: diffFile.file_hash,
+ });
});
});
@@ -157,6 +135,10 @@ describe('DiffLineNoteForm', () => {
});
describe('saving note', () => {
+ beforeEach(() => {
+ store.getters.noteableType = 'merge-request';
+ });
+
it('should save original line', async () => {
const lineRange = {
start: {
@@ -172,20 +154,65 @@ describe('DiffLineNoteForm', () => {
old_line: null,
},
};
- await findNoteForm().vm.$emit('handleFormUpdate', 'note body');
- expect(actions.saveDiffDiscussion.mock.calls[0][1].formData).toMatchObject({
- lineRange,
+
+ const noteBody = 'note body';
+ await findNoteForm().vm.$emit('handleFormUpdate', noteBody);
+
+ expect(store.dispatch).toHaveBeenCalledWith('diffs/saveDiffDiscussion', {
+ note: noteBody,
+ formData: {
+ noteableData: noteableDataMock,
+ noteableType: store.getters.noteableType,
+ noteTargetLine: diffLines[1],
+ diffViewType: store.state.diffs.diffViewType,
+ diffFile,
+ linePosition: '',
+ lineRange,
+ },
+ });
+ expect(store.dispatch).toHaveBeenCalledWith('diffs/cancelCommentForm', {
+ lineCode: diffLines[1].line_code,
+ fileHash: diffFile.file_hash,
});
});
it('should save selected line from the store', async () => {
const lineCode = 'test';
store.state.notes.selectedCommentPosition = { start: { line_code: lineCode } };
- createComponent({ state: store.state });
- await findNoteForm().vm.$emit('handleFormUpdate', 'note body');
- expect(actions.saveDiffDiscussion.mock.calls[0][1].formData.lineRange.start.line_code).toBe(
- lineCode,
- );
+ createComponent();
+ const noteBody = 'note body';
+
+ await findNoteForm().vm.$emit('handleFormUpdate', noteBody);
+
+ expect(store.dispatch).toHaveBeenCalledWith('diffs/saveDiffDiscussion', {
+ note: noteBody,
+ formData: {
+ noteableData: noteableDataMock,
+ noteableType: store.getters.noteableType,
+ noteTargetLine: diffLines[1],
+ diffViewType: store.state.diffs.diffViewType,
+ diffFile,
+ linePosition: '',
+ lineRange: {
+ start: {
+ line_code: lineCode,
+ new_line: undefined,
+ old_line: undefined,
+ type: undefined,
+ },
+ end: {
+ line_code: diffLines[1].line_code,
+ new_line: diffLines[1].new_line,
+ old_line: diffLines[1].old_line,
+ type: diffLines[1].type,
+ },
+ },
+ },
+ });
+ expect(store.dispatch).toHaveBeenCalledWith('diffs/cancelCommentForm', {
+ lineCode: diffLines[1].line_code,
+ fileHash: diffFile.file_hash,
+ });
});
});
});
diff --git a/spec/frontend/diffs/components/no_changes_spec.js b/spec/frontend/diffs/components/no_changes_spec.js
index e637b1dd43d..fd89d52a59e 100644
--- a/spec/frontend/diffs/components/no_changes_spec.js
+++ b/spec/frontend/diffs/components/no_changes_spec.js
@@ -1,55 +1,53 @@
import { GlButton } from '@gitlab/ui';
import { shallowMount, mount } from '@vue/test-utils';
-import Vue from 'vue';
-import Vuex from 'vuex';
import NoChanges from '~/diffs/components/no_changes.vue';
-import { createStore } from '~/mr_notes/stores';
+import store from '~/mr_notes/stores';
import diffsMockData from '../mock_data/merge_request_diffs';
-Vue.use(Vuex);
+jest.mock('~/mr_notes/stores', () => jest.requireActual('helpers/mocks/mr_notes/stores'));
const TEST_TARGET_BRANCH = 'foo';
const TEST_SOURCE_BRANCH = 'dev/update';
+const latestVersionNumber = Math.max(...diffsMockData.map((version) => version.version_index));
describe('Diff no changes empty state', () => {
- let wrapper;
- let store;
-
- function createComponent(mountFn = shallowMount) {
- wrapper = mountFn(NoChanges, {
- store,
+ const createComponent = (mountFn = shallowMount) =>
+ mountFn(NoChanges, {
+ mocks: {
+ $store: store,
+ },
propsData: {
changesEmptyStateIllustration: '',
},
});
- }
beforeEach(() => {
- store = createStore();
- store.state.diffs.mergeRequestDiff = {};
- store.state.notes.noteableData = {
+ store.reset();
+
+ store.getters.getNoteableData = {
target_branch: TEST_TARGET_BRANCH,
source_branch: TEST_SOURCE_BRANCH,
};
- store.state.diffs.mergeRequestDiffs = diffsMockData;
+ store.getters['diffs/diffCompareDropdownSourceVersions'] = [];
+ store.getters['diffs/diffCompareDropdownTargetVersions'] = [];
});
- const findMessage = () => wrapper.find('[data-testid="no-changes-message"]');
+ const findMessage = (wrapper) => wrapper.find('[data-testid="no-changes-message"]');
it('prevents XSS', () => {
- store.state.notes.noteableData = {
+ store.getters.getNoteableData = {
source_branch: '<script>alert("test");</script>',
target_branch: '<script>alert("test");</script>',
};
- createComponent();
+ const wrapper = createComponent();
expect(wrapper.find('script').exists()).toBe(false);
});
describe('Renders', () => {
it('Show create commit button', () => {
- createComponent();
+ const wrapper = createComponent();
expect(wrapper.findComponent(GlButton).exists()).toBe(true);
});
@@ -64,15 +62,28 @@ describe('Diff no changes empty state', () => {
'renders text "$expectedText" (sourceIndex=$sourceIndex and targetIndex=$targetIndex)',
({ expectedText, targetIndex, sourceIndex }) => {
if (targetIndex !== null) {
- store.state.diffs.startVersion = { version_index: targetIndex };
+ store.getters['diffs/diffCompareDropdownTargetVersions'] = [
+ {
+ selected: true,
+ version_index: targetIndex,
+ versionName: `version ${targetIndex}`,
+ },
+ ];
}
if (sourceIndex !== null) {
- store.state.diffs.mergeRequestDiff.version_index = sourceIndex;
+ store.getters['diffs/diffCompareDropdownSourceVersions'] = [
+ {
+ isLatestVersion: sourceIndex === latestVersionNumber,
+ selected: true,
+ version_index: targetIndex,
+ versionName: `version ${sourceIndex}`,
+ },
+ ];
}
- createComponent(mount);
+ const wrapper = createComponent(mount);
- expect(findMessage().text()).toBe(expectedText);
+ expect(findMessage(wrapper).text()).toBe(expectedText);
},
);
});
diff --git a/spec/frontend/diffs/components/settings_dropdown_spec.js b/spec/frontend/diffs/components/settings_dropdown_spec.js
index 3d2bbe43746..cbd2ae3e525 100644
--- a/spec/frontend/diffs/components/settings_dropdown_spec.js
+++ b/spec/frontend/diffs/components/settings_dropdown_spec.js
@@ -5,44 +5,34 @@ import { extendedWrapper } from 'helpers/vue_test_utils_helper';
import SettingsDropdown from '~/diffs/components/settings_dropdown.vue';
import { PARALLEL_DIFF_VIEW_TYPE, INLINE_DIFF_VIEW_TYPE } from '~/diffs/constants';
import eventHub from '~/diffs/event_hub';
+import store from '~/mr_notes/stores';
-import createDiffsStore from '../create_diffs_store';
+jest.mock('~/mr_notes/stores', () => jest.requireActual('helpers/mocks/mr_notes/stores'));
describe('Diff settings dropdown component', () => {
- let wrapper;
- let store;
-
- function createComponent(extendStore = () => {}) {
- store = createDiffsStore();
-
- extendStore(store);
-
- wrapper = extendedWrapper(
+ const createComponent = () =>
+ extendedWrapper(
mount(SettingsDropdown, {
- store,
+ mocks: {
+ $store: store,
+ },
}),
);
- }
function getFileByFileCheckbox(vueWrapper) {
return vueWrapper.findByTestId('file-by-file');
}
- function setup({ storeUpdater } = {}) {
- createComponent(storeUpdater);
- jest.spyOn(store, 'dispatch').mockImplementation(() => {});
- }
-
beforeEach(() => {
- setup();
- });
+ store.reset();
- afterEach(() => {
- store.dispatch.mockRestore();
+ store.getters['diffs/isInlineView'] = false;
+ store.getters['diffs/isParallelView'] = false;
});
describe('tree view buttons', () => {
it('list view button dispatches setRenderTreeList with false', () => {
+ const wrapper = createComponent();
wrapper.find('.js-list-view').trigger('click');
expect(store.dispatch).toHaveBeenCalledWith('diffs/setRenderTreeList', {
@@ -51,6 +41,7 @@ describe('Diff settings dropdown component', () => {
});
it('tree view button dispatches setRenderTreeList with true', () => {
+ const wrapper = createComponent();
wrapper.find('.js-tree-view').trigger('click');
expect(store.dispatch).toHaveBeenCalledWith('diffs/setRenderTreeList', {
@@ -59,19 +50,18 @@ describe('Diff settings dropdown component', () => {
});
it('sets list button as selected when renderTreeList is false', () => {
- setup({
- storeUpdater: (origStore) =>
- Object.assign(origStore.state.diffs, { renderTreeList: false }),
- });
+ store.state.diffs = { renderTreeList: false };
+
+ const wrapper = createComponent();
expect(wrapper.find('.js-list-view').classes('selected')).toBe(true);
expect(wrapper.find('.js-tree-view').classes('selected')).toBe(false);
});
it('sets tree button as selected when renderTreeList is true', () => {
- setup({
- storeUpdater: (origStore) => Object.assign(origStore.state.diffs, { renderTreeList: true }),
- });
+ store.state.diffs = { renderTreeList: true };
+
+ const wrapper = createComponent();
expect(wrapper.find('.js-list-view').classes('selected')).toBe(false);
expect(wrapper.find('.js-tree-view').classes('selected')).toBe(true);
@@ -80,32 +70,36 @@ describe('Diff settings dropdown component', () => {
describe('compare changes', () => {
it('sets inline button as selected', () => {
- setup({
- storeUpdater: (origStore) =>
- Object.assign(origStore.state.diffs, { diffViewType: INLINE_DIFF_VIEW_TYPE }),
- });
+ store.state.diffs = { diffViewType: INLINE_DIFF_VIEW_TYPE };
+ store.getters['diffs/isInlineView'] = true;
+
+ const wrapper = createComponent();
expect(wrapper.find('.js-inline-diff-button').classes('selected')).toBe(true);
expect(wrapper.find('.js-parallel-diff-button').classes('selected')).toBe(false);
});
it('sets parallel button as selected', () => {
- setup({
- storeUpdater: (origStore) =>
- Object.assign(origStore.state.diffs, { diffViewType: PARALLEL_DIFF_VIEW_TYPE }),
- });
+ store.state.diffs = { diffViewType: PARALLEL_DIFF_VIEW_TYPE };
+ store.getters['diffs/isParallelView'] = true;
+
+ const wrapper = createComponent();
expect(wrapper.find('.js-inline-diff-button').classes('selected')).toBe(false);
expect(wrapper.find('.js-parallel-diff-button').classes('selected')).toBe(true);
});
it('calls setInlineDiffViewType when clicking inline button', () => {
+ const wrapper = createComponent();
+
wrapper.find('.js-inline-diff-button').trigger('click');
expect(store.dispatch).toHaveBeenCalledWith('diffs/setInlineDiffViewType', expect.anything());
});
it('calls setParallelDiffViewType when clicking parallel button', () => {
+ const wrapper = createComponent();
+
wrapper.find('.js-parallel-diff-button').trigger('click');
expect(store.dispatch).toHaveBeenCalledWith(
@@ -117,23 +111,23 @@ describe('Diff settings dropdown component', () => {
describe('whitespace toggle', () => {
it('does not set as checked when showWhitespace is false', () => {
- setup({
- storeUpdater: (origStore) =>
- Object.assign(origStore.state.diffs, { showWhitespace: false }),
- });
+ store.state.diffs = { showWhitespace: false };
+
+ const wrapper = createComponent();
expect(wrapper.findByTestId('show-whitespace').element.checked).toBe(false);
});
it('sets as checked when showWhitespace is true', () => {
- setup({
- storeUpdater: (origStore) => Object.assign(origStore.state.diffs, { showWhitespace: true }),
- });
+ store.state.diffs = { showWhitespace: true };
+
+ const wrapper = createComponent();
expect(wrapper.findByTestId('show-whitespace').element.checked).toBe(true);
});
it('calls setShowWhitespace on change', async () => {
+ const wrapper = createComponent();
const checkbox = wrapper.findByTestId('show-whitespace');
const { checked } = checkbox.element;
@@ -157,10 +151,9 @@ describe('Diff settings dropdown component', () => {
`(
'sets the checkbox to { checked: $checked } if the fileByFile setting is $fileByFile',
({ fileByFile, checked }) => {
- setup({
- storeUpdater: (origStore) =>
- Object.assign(origStore.state.diffs, { viewDiffsFileByFile: fileByFile }),
- });
+ store.state.diffs = { viewDiffsFileByFile: fileByFile };
+
+ const wrapper = createComponent();
expect(getFileByFileCheckbox(wrapper).element.checked).toBe(checked);
},
@@ -173,11 +166,9 @@ describe('Diff settings dropdown component', () => {
`(
'when the file by file setting starts as $start, toggling the checkbox should call setFileByFile with $setting',
async ({ start, setting }) => {
- setup({
- storeUpdater: (origStore) =>
- Object.assign(origStore.state.diffs, { viewDiffsFileByFile: start }),
- });
+ store.state.diffs = { viewDiffsFileByFile: start };
+ const wrapper = createComponent();
await getFileByFileCheckbox(wrapper).setChecked(setting);
expect(store.dispatch).toHaveBeenCalledWith('diffs/setFileByFile', {
diff --git a/spec/frontend/diffs/store/actions_spec.js b/spec/frontend/diffs/store/actions_spec.js
index f883aea764f..f084458b5c7 100644
--- a/spec/frontend/diffs/store/actions_spec.js
+++ b/spec/frontend/diffs/store/actions_spec.js
@@ -707,6 +707,7 @@ describe('DiffsStoreActions', () => {
[{ type: types.SET_DIFF_VIEW_TYPE, payload: INLINE_DIFF_VIEW_TYPE }],
[],
);
+ expect(window.location.toString()).toContain('?view=inline');
expect(Cookies.get('diff_view')).toEqual(INLINE_DIFF_VIEW_TYPE);
});
});
@@ -720,6 +721,7 @@ describe('DiffsStoreActions', () => {
[{ type: types.SET_DIFF_VIEW_TYPE, payload: PARALLEL_DIFF_VIEW_TYPE }],
[],
);
+ expect(window.location.toString()).toContain('?view=parallel');
expect(Cookies.get(DIFF_VIEW_COOKIE_NAME)).toEqual(PARALLEL_DIFF_VIEW_TYPE);
});
});
diff --git a/spec/frontend/issuable/components/issuable_header_warnings_spec.js b/spec/frontend/issuable/components/issuable_header_warnings_spec.js
index ff772040d22..cbe2810a443 100644
--- a/spec/frontend/issuable/components/issuable_header_warnings_spec.js
+++ b/spec/frontend/issuable/components/issuable_header_warnings_spec.js
@@ -1,15 +1,13 @@
-import Vue from 'vue';
-import Vuex from 'vuex';
import { createMockDirective, getBinding } from 'helpers/vue_mock_directive';
import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
-import { createStore as createMrStore } from '~/mr_notes/stores';
+import mrStore from '~/mr_notes/stores';
import createIssueStore from '~/notes/stores';
import IssuableHeaderWarnings from '~/issuable/components/issuable_header_warnings.vue';
const ISSUABLE_TYPE_ISSUE = 'issue';
const ISSUABLE_TYPE_MR = 'merge_request';
-Vue.use(Vuex);
+jest.mock('~/mr_notes/stores', () => jest.requireActual('helpers/mocks/mr_notes/stores'));
describe('IssuableHeaderWarnings', () => {
let wrapper;
@@ -22,7 +20,9 @@ describe('IssuableHeaderWarnings', () => {
const createComponent = ({ store, provide }) => {
wrapper = shallowMountExtended(IssuableHeaderWarnings, {
- store,
+ mocks: {
+ $store: store,
+ },
provide,
directives: {
GlTooltip: createMockDirective('gl-tooltip'),
@@ -47,9 +47,14 @@ describe('IssuableHeaderWarnings', () => {
`(
`when locked=$lockStatus, confidential=$confidentialStatus, and hidden=$hiddenStatus`,
({ lockStatus, confidentialStatus, hiddenStatus }) => {
- const store = issuableType === ISSUABLE_TYPE_ISSUE ? createIssueStore() : createMrStore();
+ const store = issuableType === ISSUABLE_TYPE_ISSUE ? createIssueStore() : mrStore;
beforeEach(() => {
+ // TODO: simplify to single assignment after issue store is mock
+ if (store === mrStore) {
+ store.getters.getNoteableData = {};
+ }
+
store.getters.getNoteableData.confidential = confidentialStatus;
store.getters.getNoteableData.discussion_locked = lockStatus;
store.getters.getNoteableData.targetType = issuableType;
diff --git a/spec/lib/gitlab/cluster/puma_worker_killer_initializer_spec.rb b/spec/lib/gitlab/cluster/puma_worker_killer_initializer_spec.rb
deleted file mode 100644
index cb13a711857..00000000000
--- a/spec/lib/gitlab/cluster/puma_worker_killer_initializer_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# frozen_string_literal: true
-
-require 'fast_spec_helper'
-require 'puma_worker_killer'
-
-RSpec.describe Gitlab::Cluster::PumaWorkerKillerInitializer do
- describe '.start' do
- context 'when GITLAB_MEMORY_WATCHDOG_ENABLED is false' do
- before do
- stub_env('GITLAB_MEMORY_WATCHDOG_ENABLED', 'false')
- end
-
- it 'configures and start PumaWorkerKiller' do
- expect(PumaWorkerKiller).to receive(:config)
- expect(PumaWorkerKiller).to receive(:start)
-
- described_class.start({})
- end
- end
-
- context 'when GITLAB_MEMORY_WATCHDOG_ENABLED is not set' do
- it 'configures and start PumaWorkerKiller' do
- expect(PumaWorkerKiller).not_to receive(:config)
- expect(PumaWorkerKiller).not_to receive(:start)
-
- described_class.start({})
- end
- end
- end
-end
diff --git a/spec/lib/gitlab/cluster/puma_worker_killer_observer_spec.rb b/spec/lib/gitlab/cluster/puma_worker_killer_observer_spec.rb
deleted file mode 100644
index cf532cf7be6..00000000000
--- a/spec/lib/gitlab/cluster/puma_worker_killer_observer_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# frozen_string_literal: true
-
-require 'fast_spec_helper'
-
-RSpec.describe Gitlab::Cluster::PumaWorkerKillerObserver do
- let(:counter) { Gitlab::Metrics::NullMetric.instance }
-
- before do
- allow(Gitlab::Metrics).to receive(:counter)
- .with(any_args)
- .and_return(counter)
- end
-
- describe '#callback' do
- subject { described_class.new }
-
- it 'increments timeout counter' do
- worker = double(index: 0)
-
- expect(counter).to receive(:increment)
-
- subject.callback.call(worker)
- end
- end
-end
diff --git a/spec/models/packages/package_spec.rb b/spec/models/packages/package_spec.rb
index e79459e0c7c..6e312dbeb4d 100644
--- a/spec/models/packages/package_spec.rb
+++ b/spec/models/packages/package_spec.rb
@@ -1251,16 +1251,6 @@ RSpec.describe Packages::Package, type: :model, feature_category: :package_regis
it 'returns the last build info' do
expect(package.original_build_info).to eq(second_build_info)
end
-
- context 'with packages_display_last_pipeline disabled' do
- before do
- stub_feature_flags(packages_display_last_pipeline: false)
- end
-
- it 'returns the first build info' do
- expect(package.original_build_info).to eq(first_build_info)
- end
- end
end
end
diff --git a/spec/services/quick_actions/interpret_service_spec.rb b/spec/services/quick_actions/interpret_service_spec.rb
index 966782aca98..2f65441dd01 100644
--- a/spec/services/quick_actions/interpret_service_spec.rb
+++ b/spec/services/quick_actions/interpret_service_spec.rb
@@ -2875,18 +2875,6 @@ RSpec.describe QuickActions::InterpretService, feature_category: :team_planning
expect(explanations)
.to contain_exactly("Converts work item to Issue. Widgets not supported in new type are removed.")
end
-
- context 'when feature flag work_items_mvc_2 is disabled' do
- before do
- stub_feature_flags(work_items_mvc_2: false)
- end
-
- it 'does not have the command available' do
- _, explanations = service.explain(command, work_item)
-
- expect(explanations).to be_empty
- end
- end
end
describe 'relate command' do
diff --git a/spec/support/rspec_order_todo.yml b/spec/support/rspec_order_todo.yml
index 82dc6659dbf..ee0854c2483 100644
--- a/spec/support/rspec_order_todo.yml
+++ b/spec/support/rspec_order_todo.yml
@@ -6033,7 +6033,6 @@
- './spec/lib/gitlab/closing_issue_extractor_spec.rb'
- './spec/lib/gitlab/cluster/lifecycle_events_spec.rb'
- './spec/lib/gitlab/cluster/mixins/puma_cluster_spec.rb'
-- './spec/lib/gitlab/cluster/puma_worker_killer_observer_spec.rb'
- './spec/lib/gitlab/cluster/rack_timeout_observer_spec.rb'
- './spec/lib/gitlab/code_navigation_path_spec.rb'
- './spec/lib/gitlab/color_schemes_spec.rb'