summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWinnie Hellmann <winnie@gitlab.com>2019-05-13 20:34:23 +0200
committerWinnie Hellmann <winnie@gitlab.com>2019-05-14 10:36:50 +0200
commit9f3203475c8c2825df23364cac5cdece746a5d4f (patch)
tree69de7742695becbd66a7bac402eca292529e787a
parent40733611c64238c039654166f733ce0f8e59544e (diff)
downloadgitlab-ce-9f3203475c8c2825df23364cac5cdece746a5d4f.tar.gz
Delete some tests
-rw-r--r--spec/javascripts/diffs/components/app_spec.js483
-rw-r--r--spec/javascripts/diffs/components/settings_dropdown_spec.js167
-rw-r--r--spec/javascripts/environments/confirm_rollback_modal_spec.js70
-rw-r--r--spec/javascripts/environments/environment_rollback_spec.js61
-rw-r--r--spec/javascripts/error_tracking_settings/components/app_spec.js63
-rw-r--r--spec/javascripts/error_tracking_settings/components/error_tracking_form_spec.js91
-rw-r--r--spec/javascripts/error_tracking_settings/components/project_dropdown_spec.js109
-rw-r--r--spec/javascripts/frequent_items/components/frequent_items_list_item_spec.js95
-rw-r--r--spec/javascripts/frequent_items/components/frequent_items_search_input_spec.js81
-rw-r--r--spec/javascripts/helpers/vue_test_utils_helper_spec.js48
-rw-r--r--spec/javascripts/monitoring/charts/area_spec.js231
-rw-r--r--spec/javascripts/notes/components/noteable_discussion_spec.js269
-rw-r--r--spec/javascripts/pipelines/pipeline_triggerer_spec.js54
-rw-r--r--spec/javascripts/vue_shared/components/user_avatar/user_avatar_list_spec.js156
14 files changed, 0 insertions, 1978 deletions
diff --git a/spec/javascripts/diffs/components/app_spec.js b/spec/javascripts/diffs/components/app_spec.js
deleted file mode 100644
index 1aabf3c2132..00000000000
--- a/spec/javascripts/diffs/components/app_spec.js
+++ /dev/null
@@ -1,483 +0,0 @@
-import Vuex from 'vuex';
-import { shallowMount, createLocalVue } from '@vue/test-utils';
-import { GlLoadingIcon } from '@gitlab/ui';
-import { TEST_HOST } from 'spec/test_constants';
-import App from '~/diffs/components/app.vue';
-import NoChanges from '~/diffs/components/no_changes.vue';
-import DiffFile from '~/diffs/components/diff_file.vue';
-import Mousetrap from 'mousetrap';
-import CompareVersions from '~/diffs/components/compare_versions.vue';
-import HiddenFilesWarning from '~/diffs/components/hidden_files_warning.vue';
-import CommitWidget from '~/diffs/components/commit_widget.vue';
-import TreeList from '~/diffs/components/tree_list.vue';
-import createDiffsStore from '../create_diffs_store';
-import diffsMockData from '../mock_data/merge_request_diffs';
-
-const mergeRequestDiff = { version_index: 1 };
-
-describe('diffs/components/app', () => {
- const oldMrTabs = window.mrTabs;
- let store;
- let wrapper;
-
- function createComponent(props = {}, extendStore = () => {}) {
- const localVue = createLocalVue();
-
- localVue.use(Vuex);
-
- store = createDiffsStore();
- store.state.diffs.isLoading = false;
-
- extendStore(store);
-
- wrapper = shallowMount(localVue.extend(App), {
- localVue,
- propsData: {
- endpoint: `${TEST_HOST}/diff/endpoint`,
- projectPath: 'namespace/project',
- currentUser: {},
- changesEmptyStateIllustration: '',
- ...props,
- },
- store,
- });
- }
-
- beforeEach(() => {
- // setup globals (needed for component to mount :/)
- window.mrTabs = jasmine.createSpyObj('mrTabs', ['resetViewContainer']);
- window.mrTabs.expandViewContainer = jasmine.createSpy();
- });
-
- afterEach(() => {
- // reset globals
- window.mrTabs = oldMrTabs;
-
- // reset component
- wrapper.destroy();
- });
-
- it('adds container-limiting classes when showFileTree is false with inline diffs', () => {
- createComponent({}, ({ state }) => {
- state.diffs.showTreeList = false;
- state.diffs.isParallelView = false;
- });
-
- expect(wrapper.contains('.container-limited.limit-container-width')).toBe(true);
- });
-
- it('does not add container-limiting classes when showFileTree is false with inline diffs', () => {
- createComponent({}, ({ state }) => {
- state.diffs.showTreeList = true;
- state.diffs.isParallelView = false;
- });
-
- expect(wrapper.contains('.container-limited.limit-container-width')).toBe(false);
- });
-
- it('does not add container-limiting classes when isFluidLayout', () => {
- createComponent({ isFluidLayout: true }, ({ state }) => {
- state.diffs.isParallelView = false;
- });
-
- expect(wrapper.contains('.container-limited.limit-container-width')).toBe(false);
- });
-
- it('displays loading icon on loading', () => {
- createComponent({}, ({ state }) => {
- state.diffs.isLoading = true;
- });
-
- expect(wrapper.contains(GlLoadingIcon)).toBe(true);
- });
-
- it('displays diffs container when not loading', () => {
- createComponent();
-
- expect(wrapper.contains(GlLoadingIcon)).toBe(false);
- expect(wrapper.contains('#diffs')).toBe(true);
- });
-
- it('does not show commit info', () => {
- createComponent();
-
- expect(wrapper.contains('.blob-commit-info')).toBe(false);
- });
-
- describe('row highlighting', () => {
- beforeEach(() => {
- window.location.hash = 'ABC_123';
- });
-
- it('sets highlighted row if hash exists in location object', done => {
- createComponent({
- shouldShow: true,
- });
-
- // Component uses $nextTick so we wait until that has finished
- setTimeout(() => {
- expect(store.state.diffs.highlightedRow).toBe('ABC_123');
-
- done();
- });
- });
-
- it('marks current diff file based on currently highlighted row', done => {
- createComponent({
- shouldShow: true,
- });
-
- // Component uses $nextTick so we wait until that has finished
- setTimeout(() => {
- expect(store.state.diffs.currentDiffFileId).toBe('ABC');
-
- done();
- });
- });
- });
-
- describe('resizable', () => {
- afterEach(() => {
- localStorage.removeItem('mr_tree_list_width');
- });
-
- it('sets initial width when no localStorage has been set', () => {
- createComponent();
-
- expect(wrapper.vm.treeWidth).toEqual(320);
- });
-
- it('sets initial width to localStorage size', () => {
- localStorage.setItem('mr_tree_list_width', '200');
-
- createComponent();
-
- expect(wrapper.vm.treeWidth).toEqual(200);
- });
-
- it('sets width of tree list', () => {
- createComponent();
-
- expect(wrapper.find('.js-diff-tree-list').element.style.width).toEqual('320px');
- });
- });
-
- it('marks current diff file based on currently highlighted row', done => {
- createComponent({
- shouldShow: true,
- });
-
- // Component uses $nextTick so we wait until that has finished
- setTimeout(() => {
- expect(store.state.diffs.currentDiffFileId).toBe('ABC');
-
- done();
- });
- });
-
- describe('empty state', () => {
- it('renders empty state when no diff files exist', () => {
- createComponent();
-
- expect(wrapper.contains(NoChanges)).toBe(true);
- });
-
- it('does not render empty state when diff files exist', () => {
- createComponent({}, ({ state }) => {
- state.diffs.diffFiles.push({
- id: 1,
- });
- });
-
- expect(wrapper.contains(NoChanges)).toBe(false);
- expect(wrapper.findAll(DiffFile).length).toBe(1);
- });
-
- it('does not render empty state when versions match', () => {
- createComponent({}, ({ state }) => {
- state.diffs.startVersion = mergeRequestDiff;
- state.diffs.mergeRequestDiff = mergeRequestDiff;
- });
-
- expect(wrapper.contains(NoChanges)).toBe(false);
- });
- });
-
- describe('keyboard shortcut navigation', () => {
- const mappings = {
- '[': -1,
- k: -1,
- ']': +1,
- j: +1,
- };
- let spy;
-
- describe('visible app', () => {
- beforeEach(() => {
- spy = jasmine.createSpy('spy');
-
- createComponent({
- shouldShow: true,
- });
- wrapper.setMethods({
- jumpToFile: spy,
- });
- });
-
- it('calls `jumpToFile()` with correct parameter whenever pre-defined key is pressed', done => {
- wrapper.vm
- .$nextTick()
- .then(() => {
- Object.keys(mappings).forEach(function(key) {
- Mousetrap.trigger(key);
-
- expect(spy.calls.mostRecent().args).toEqual([mappings[key]]);
- });
-
- expect(spy.calls.count()).toEqual(Object.keys(mappings).length);
- })
- .then(done)
- .catch(done.fail);
- });
-
- it('does not call `jumpToFile()` when unknown key is pressed', done => {
- wrapper.vm
- .$nextTick()
- .then(() => {
- Mousetrap.trigger('d');
-
- expect(spy).not.toHaveBeenCalled();
- })
- .then(done)
- .catch(done.fail);
- });
- });
-
- describe('hideen app', () => {
- beforeEach(() => {
- spy = jasmine.createSpy('spy');
-
- createComponent({
- shouldShow: false,
- });
- wrapper.setMethods({
- jumpToFile: spy,
- });
- });
-
- it('stops calling `jumpToFile()` when application is hidden', done => {
- wrapper.vm
- .$nextTick()
- .then(() => {
- Object.keys(mappings).forEach(function(key) {
- Mousetrap.trigger(key);
-
- expect(spy).not.toHaveBeenCalled();
- });
- })
- .then(done)
- .catch(done.fail);
- });
- });
- });
-
- describe('jumpToFile', () => {
- let spy;
-
- beforeEach(() => {
- spy = jasmine.createSpy();
-
- createComponent({}, () => {
- store.state.diffs.diffFiles = [
- { file_hash: '111', file_path: '111.js' },
- { file_hash: '222', file_path: '222.js' },
- { file_hash: '333', file_path: '333.js' },
- ];
- });
-
- wrapper.setMethods({
- scrollToFile: spy,
- });
- });
-
- afterEach(() => {
- wrapper.destroy();
- });
-
- it('jumps to next and previous files in the list', done => {
- wrapper.vm
- .$nextTick()
- .then(() => {
- wrapper.vm.jumpToFile(+1);
-
- expect(spy.calls.mostRecent().args).toEqual(['222.js']);
- store.state.diffs.currentDiffFileId = '222';
- wrapper.vm.jumpToFile(+1);
-
- expect(spy.calls.mostRecent().args).toEqual(['333.js']);
- store.state.diffs.currentDiffFileId = '333';
- wrapper.vm.jumpToFile(-1);
-
- expect(spy.calls.mostRecent().args).toEqual(['222.js']);
- })
- .then(done)
- .catch(done.fail);
- });
-
- it('does not jump to previous file from the first one', done => {
- wrapper.vm
- .$nextTick()
- .then(() => {
- store.state.diffs.currentDiffFileId = '333';
-
- expect(wrapper.vm.currentDiffIndex).toEqual(2);
-
- wrapper.vm.jumpToFile(+1);
-
- expect(wrapper.vm.currentDiffIndex).toEqual(2);
- expect(spy).not.toHaveBeenCalled();
- })
- .then(done)
- .catch(done.fail);
- });
-
- it('does not jump to next file from the last one', done => {
- wrapper.vm
- .$nextTick()
- .then(() => {
- expect(wrapper.vm.currentDiffIndex).toEqual(0);
-
- wrapper.vm.jumpToFile(-1);
-
- expect(wrapper.vm.currentDiffIndex).toEqual(0);
- expect(spy).not.toHaveBeenCalled();
- })
- .then(done)
- .catch(done.fail);
- });
- });
-
- describe('diffs', () => {
- it('should render compare versions component', () => {
- createComponent({}, ({ state }) => {
- state.diffs.mergeRequestDiffs = diffsMockData;
- state.diffs.targetBranchName = 'target-branch';
- state.diffs.mergeRequestDiff = mergeRequestDiff;
- });
-
- expect(wrapper.contains(CompareVersions)).toBe(true);
- expect(wrapper.find(CompareVersions).props()).toEqual(
- jasmine.objectContaining({
- targetBranch: {
- branchName: 'target-branch',
- versionIndex: -1,
- path: '',
- },
- mergeRequestDiffs: diffsMockData,
- mergeRequestDiff,
- }),
- );
- });
-
- it('should render hidden files warning if render overflow warning is present', () => {
- createComponent({}, ({ state }) => {
- state.diffs.renderOverflowWarning = true;
- state.diffs.realSize = '5';
- state.diffs.plainDiffPath = 'plain diff path';
- state.diffs.emailPatchPath = 'email patch path';
- state.diffs.size = 1;
- });
-
- expect(wrapper.contains(HiddenFilesWarning)).toBe(true);
- expect(wrapper.find(HiddenFilesWarning).props()).toEqual(
- jasmine.objectContaining({
- total: '5',
- plainDiffPath: 'plain diff path',
- emailPatchPath: 'email patch path',
- visible: 1,
- }),
- );
- });
-
- it('should display commit widget if store has a commit', () => {
- createComponent({}, () => {
- store.state.diffs.commit = {
- author: 'John Doe',
- };
- });
-
- expect(wrapper.contains(CommitWidget)).toBe(true);
- });
-
- it('should display diff file if there are diff files', () => {
- createComponent({}, ({ state }) => {
- state.diffs.diffFiles.push({ sha: '123' });
- });
-
- expect(wrapper.contains(DiffFile)).toBe(true);
- });
-
- it('should render tree list', () => {
- createComponent();
-
- expect(wrapper.find(TreeList).exists()).toBe(true);
- });
- });
-
- describe('hideTreeListIfJustOneFile', () => {
- let toggleShowTreeList;
-
- beforeEach(() => {
- toggleShowTreeList = jasmine.createSpy('toggleShowTreeList');
- });
-
- afterEach(() => {
- localStorage.removeItem('mr_tree_show');
- });
-
- it('calls toggleShowTreeList when only 1 file', () => {
- createComponent({}, ({ state }) => {
- state.diffs.diffFiles.push({ sha: '123' });
- });
-
- wrapper.setMethods({
- toggleShowTreeList,
- });
-
- wrapper.vm.hideTreeListIfJustOneFile();
-
- expect(toggleShowTreeList).toHaveBeenCalledWith(false);
- });
-
- it('does not call toggleShowTreeList when more than 1 file', () => {
- createComponent({}, ({ state }) => {
- state.diffs.diffFiles.push({ sha: '123' });
- state.diffs.diffFiles.push({ sha: '124' });
- });
-
- wrapper.setMethods({
- toggleShowTreeList,
- });
-
- wrapper.vm.hideTreeListIfJustOneFile();
-
- expect(toggleShowTreeList).not.toHaveBeenCalled();
- });
-
- it('does not call toggleShowTreeList when localStorage is set', () => {
- localStorage.setItem('mr_tree_show', 'true');
-
- createComponent({}, ({ state }) => {
- state.diffs.diffFiles.push({ sha: '123' });
- });
-
- wrapper.setMethods({
- toggleShowTreeList,
- });
-
- wrapper.vm.hideTreeListIfJustOneFile();
-
- expect(toggleShowTreeList).not.toHaveBeenCalled();
- });
- });
-});
diff --git a/spec/javascripts/diffs/components/settings_dropdown_spec.js b/spec/javascripts/diffs/components/settings_dropdown_spec.js
deleted file mode 100644
index 5031846cff0..00000000000
--- a/spec/javascripts/diffs/components/settings_dropdown_spec.js
+++ /dev/null
@@ -1,167 +0,0 @@
-import { mount, createLocalVue } from '@vue/test-utils';
-import Vuex from 'vuex';
-import diffModule from '~/diffs/store/modules';
-import SettingsDropdown from '~/diffs/components/settings_dropdown.vue';
-import { PARALLEL_DIFF_VIEW_TYPE, INLINE_DIFF_VIEW_TYPE } from '~/diffs/constants';
-
-describe('Diff settiings dropdown component', () => {
- let vm;
- let actions;
-
- function createComponent(extendStore = () => {}) {
- const localVue = createLocalVue();
-
- localVue.use(Vuex);
-
- const store = new Vuex.Store({
- modules: {
- diffs: {
- namespaced: true,
- actions,
- state: diffModule().state,
- getters: diffModule().getters,
- },
- },
- });
-
- extendStore(store);
-
- vm = mount(SettingsDropdown, {
- localVue,
- store,
- });
- }
-
- beforeEach(() => {
- actions = {
- setInlineDiffViewType: jasmine.createSpy('setInlineDiffViewType'),
- setParallelDiffViewType: jasmine.createSpy('setParallelDiffViewType'),
- setRenderTreeList: jasmine.createSpy('setRenderTreeList'),
- setShowWhitespace: jasmine.createSpy('setShowWhitespace'),
- };
- });
-
- afterEach(() => {
- vm.destroy();
- });
-
- describe('tree view buttons', () => {
- it('list view button dispatches setRenderTreeList with false', () => {
- createComponent();
-
- vm.find('.js-list-view').trigger('click');
-
- expect(actions.setRenderTreeList).toHaveBeenCalledWith(jasmine.anything(), false, undefined);
- });
-
- it('tree view button dispatches setRenderTreeList with true', () => {
- createComponent();
-
- vm.find('.js-tree-view').trigger('click');
-
- expect(actions.setRenderTreeList).toHaveBeenCalledWith(jasmine.anything(), true, undefined);
- });
-
- it('sets list button as active when renderTreeList is false', () => {
- createComponent(store => {
- Object.assign(store.state.diffs, {
- renderTreeList: false,
- });
- });
-
- expect(vm.find('.js-list-view').classes('active')).toBe(true);
- expect(vm.find('.js-tree-view').classes('active')).toBe(false);
- });
-
- it('sets tree button as active when renderTreeList is true', () => {
- createComponent(store => {
- Object.assign(store.state.diffs, {
- renderTreeList: true,
- });
- });
-
- expect(vm.find('.js-list-view').classes('active')).toBe(false);
- expect(vm.find('.js-tree-view').classes('active')).toBe(true);
- });
- });
-
- describe('compare changes', () => {
- it('sets inline button as active', () => {
- createComponent(store => {
- Object.assign(store.state.diffs, {
- diffViewType: INLINE_DIFF_VIEW_TYPE,
- });
- });
-
- expect(vm.find('.js-inline-diff-button').classes('active')).toBe(true);
- expect(vm.find('.js-parallel-diff-button').classes('active')).toBe(false);
- });
-
- it('sets parallel button as active', () => {
- createComponent(store => {
- Object.assign(store.state.diffs, {
- diffViewType: PARALLEL_DIFF_VIEW_TYPE,
- });
- });
-
- expect(vm.find('.js-inline-diff-button').classes('active')).toBe(false);
- expect(vm.find('.js-parallel-diff-button').classes('active')).toBe(true);
- });
-
- it('calls setInlineDiffViewType when clicking inline button', () => {
- createComponent();
-
- vm.find('.js-inline-diff-button').trigger('click');
-
- expect(actions.setInlineDiffViewType).toHaveBeenCalled();
- });
-
- it('calls setParallelDiffViewType when clicking parallel button', () => {
- createComponent();
-
- vm.find('.js-parallel-diff-button').trigger('click');
-
- expect(actions.setParallelDiffViewType).toHaveBeenCalled();
- });
- });
-
- describe('whitespace toggle', () => {
- it('does not set as checked when showWhitespace is false', () => {
- createComponent(store => {
- Object.assign(store.state.diffs, {
- showWhitespace: false,
- });
- });
-
- expect(vm.find('#show-whitespace').element.checked).toBe(false);
- });
-
- it('sets as checked when showWhitespace is true', () => {
- createComponent(store => {
- Object.assign(store.state.diffs, {
- showWhitespace: true,
- });
- });
-
- expect(vm.find('#show-whitespace').element.checked).toBe(true);
- });
-
- it('calls setShowWhitespace on change', () => {
- createComponent();
-
- const checkbox = vm.find('#show-whitespace');
-
- checkbox.element.checked = true;
- checkbox.trigger('change');
-
- expect(actions.setShowWhitespace).toHaveBeenCalledWith(
- jasmine.anything(),
- {
- showWhitespace: true,
- pushState: true,
- },
- undefined,
- );
- });
- });
-});
diff --git a/spec/javascripts/environments/confirm_rollback_modal_spec.js b/spec/javascripts/environments/confirm_rollback_modal_spec.js
deleted file mode 100644
index 05715bce38f..00000000000
--- a/spec/javascripts/environments/confirm_rollback_modal_spec.js
+++ /dev/null
@@ -1,70 +0,0 @@
-import { shallowMount } from '@vue/test-utils';
-import { GlModal } from '@gitlab/ui';
-import ConfirmRollbackModal from '~/environments/components/confirm_rollback_modal.vue';
-import eventHub from '~/environments/event_hub';
-
-describe('Confirm Rollback Modal Component', () => {
- let environment;
-
- beforeEach(() => {
- environment = {
- name: 'test',
- last_deployment: {
- commit: {
- short_id: 'abc0123',
- },
- },
- modalId: 'test',
- };
- });
-
- it('should show "Rollback" when isLastDeployment is false', () => {
- const component = shallowMount(ConfirmRollbackModal, {
- propsData: {
- environment: {
- ...environment,
- isLastDeployment: false,
- },
- },
- });
- const modal = component.find(GlModal);
-
- expect(modal.attributes('title')).toContain('Rollback');
- expect(modal.attributes('title')).toContain('test');
- expect(modal.attributes('ok-title')).toBe('Rollback');
- expect(modal.text()).toContain('commit abc0123');
- expect(modal.text()).toContain('Are you sure you want to continue?');
- });
-
- it('should show "Re-deploy" when isLastDeployment is true', () => {
- const component = shallowMount(ConfirmRollbackModal, {
- propsData: {
- environment: {
- ...environment,
- isLastDeployment: true,
- },
- },
- });
- const modal = component.find(GlModal);
-
- expect(modal.attributes('title')).toContain('Re-deploy');
- expect(modal.attributes('title')).toContain('test');
- expect(modal.attributes('ok-title')).toBe('Re-deploy');
- expect(modal.text()).toContain('commit abc0123');
- expect(modal.text()).toContain('Are you sure you want to continue?');
- });
-
- it('should emit the "rollback" event when "ok" is clicked', () => {
- environment = { ...environment, isLastDeployment: true };
- const component = shallowMount(ConfirmRollbackModal, {
- propsData: {
- environment,
- },
- });
- const eventHubSpy = spyOn(eventHub, '$emit');
- const modal = component.find(GlModal);
- modal.vm.$emit('ok');
-
- expect(eventHubSpy).toHaveBeenCalledWith('rollbackEnvironment', environment);
- });
-});
diff --git a/spec/javascripts/environments/environment_rollback_spec.js b/spec/javascripts/environments/environment_rollback_spec.js
deleted file mode 100644
index 8c47f6a12c0..00000000000
--- a/spec/javascripts/environments/environment_rollback_spec.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import Vue from 'vue';
-import { shallowMount } from '@vue/test-utils';
-import { GlButton } from '@gitlab/ui';
-import eventHub from '~/environments/event_hub';
-import rollbackComp from '~/environments/components/environment_rollback.vue';
-
-describe('Rollback Component', () => {
- const retryUrl = 'https://gitlab.com/retry';
- let RollbackComponent;
-
- beforeEach(() => {
- RollbackComponent = Vue.extend(rollbackComp);
- });
-
- it('Should render Re-deploy label when isLastDeployment is true', () => {
- const component = new RollbackComponent({
- el: document.querySelector('.test-dom-element'),
- propsData: {
- retryUrl,
- isLastDeployment: true,
- environment: {},
- },
- }).$mount();
-
- expect(component.$el).toHaveSpriteIcon('repeat');
- });
-
- it('Should render Rollback label when isLastDeployment is false', () => {
- const component = new RollbackComponent({
- el: document.querySelector('.test-dom-element'),
- propsData: {
- retryUrl,
- isLastDeployment: false,
- environment: {},
- },
- }).$mount();
-
- expect(component.$el).toHaveSpriteIcon('redo');
- });
-
- it('should emit a "rollback" event on button click', () => {
- const eventHubSpy = spyOn(eventHub, '$emit');
- const component = shallowMount(RollbackComponent, {
- propsData: {
- retryUrl,
- environment: {
- name: 'test',
- },
- },
- });
- const button = component.find(GlButton);
-
- button.vm.$emit('click');
-
- expect(eventHubSpy).toHaveBeenCalledWith('requestRollbackEnvironment', {
- retryUrl,
- isLastDeployment: true,
- name: 'test',
- });
- });
-});
diff --git a/spec/javascripts/error_tracking_settings/components/app_spec.js b/spec/javascripts/error_tracking_settings/components/app_spec.js
deleted file mode 100644
index 2e52a45fd34..00000000000
--- a/spec/javascripts/error_tracking_settings/components/app_spec.js
+++ /dev/null
@@ -1,63 +0,0 @@
-import Vuex from 'vuex';
-import { createLocalVue, shallowMount } from '@vue/test-utils';
-import ErrorTrackingSettings from '~/error_tracking_settings/components/app.vue';
-import ErrorTrackingForm from '~/error_tracking_settings/components/error_tracking_form.vue';
-import ProjectDropdown from '~/error_tracking_settings/components/project_dropdown.vue';
-import createStore from '~/error_tracking_settings/store';
-import { TEST_HOST } from 'spec/test_constants';
-
-const localVue = createLocalVue();
-localVue.use(Vuex);
-
-describe('error tracking settings app', () => {
- let store;
- let wrapper;
-
- function mountComponent() {
- wrapper = shallowMount(ErrorTrackingSettings, {
- localVue,
- store, // Override the imported store
- propsData: {
- initialEnabled: 'true',
- initialApiHost: TEST_HOST,
- initialToken: 'someToken',
- initialProject: null,
- listProjectsEndpoint: TEST_HOST,
- operationsSettingsEndpoint: TEST_HOST,
- },
- });
- }
-
- beforeEach(() => {
- store = createStore();
-
- mountComponent();
- });
-
- afterEach(() => {
- if (wrapper) {
- wrapper.destroy();
- }
- });
-
- describe('section', () => {
- it('renders the form and dropdown', () => {
- expect(wrapper.find(ErrorTrackingForm).exists()).toBeTruthy();
- expect(wrapper.find(ProjectDropdown).exists()).toBeTruthy();
- });
-
- it('renders the Save Changes button', () => {
- expect(wrapper.find('.js-error-tracking-button').exists()).toBeTruthy();
- });
-
- it('enables the button by default', () => {
- expect(wrapper.find('.js-error-tracking-button').attributes('disabled')).toBeFalsy();
- });
-
- it('disables the button when saving', () => {
- store.state.settingsLoading = true;
-
- expect(wrapper.find('.js-error-tracking-button').attributes('disabled')).toBeTruthy();
- });
- });
-});
diff --git a/spec/javascripts/error_tracking_settings/components/error_tracking_form_spec.js b/spec/javascripts/error_tracking_settings/components/error_tracking_form_spec.js
deleted file mode 100644
index 23e57c4bbf1..00000000000
--- a/spec/javascripts/error_tracking_settings/components/error_tracking_form_spec.js
+++ /dev/null
@@ -1,91 +0,0 @@
-import Vuex from 'vuex';
-import { createLocalVue, shallowMount } from '@vue/test-utils';
-import { GlButton, GlFormInput } from '@gitlab/ui';
-import ErrorTrackingForm from '~/error_tracking_settings/components/error_tracking_form.vue';
-import { defaultProps } from '../mock';
-
-const localVue = createLocalVue();
-localVue.use(Vuex);
-
-describe('error tracking settings form', () => {
- let wrapper;
-
- function mountComponent() {
- wrapper = shallowMount(ErrorTrackingForm, {
- localVue,
- propsData: defaultProps,
- });
- }
-
- beforeEach(() => {
- mountComponent();
- });
-
- afterEach(() => {
- if (wrapper) {
- wrapper.destroy();
- }
- });
-
- describe('an empty form', () => {
- it('is rendered', () => {
- expect(wrapper.findAll(GlFormInput).length).toBe(2);
- expect(wrapper.find(GlFormInput).attributes('id')).toBe('error-tracking-api-host');
- expect(
- wrapper
- .findAll(GlFormInput)
- .at(1)
- .attributes('id'),
- ).toBe('error-tracking-token');
-
- expect(wrapper.findAll(GlButton).exists()).toBe(true);
- });
-
- it('is rendered with labels and placeholders', () => {
- const pageText = wrapper.text();
-
- expect(pageText).toContain('Find your hostname in your Sentry account settings page');
- expect(pageText).toContain(
- "After adding your Auth Token, use the 'Connect' button to load projects",
- );
-
- expect(pageText).not.toContain('Connection has failed. Re-check Auth Token and try again');
- expect(
- wrapper
- .findAll(GlFormInput)
- .at(0)
- .attributes('placeholder'),
- ).toContain('https://mysentryserver.com');
- });
- });
-
- describe('after a successful connection', () => {
- beforeEach(() => {
- wrapper.setProps({ connectSuccessful: true });
- });
-
- it('shows the success checkmark', () => {
- expect(wrapper.find('.js-error-tracking-connect-success').isVisible()).toBe(true);
- });
-
- it('does not show an error', () => {
- expect(wrapper.text()).not.toContain(
- 'Connection has failed. Re-check Auth Token and try again',
- );
- });
- });
-
- describe('after an unsuccessful connection', () => {
- beforeEach(() => {
- wrapper.setProps({ connectError: true });
- });
-
- it('does not show the check mark', () => {
- expect(wrapper.find('.js-error-tracking-connect-success').isVisible()).toBe(false);
- });
-
- it('shows an error', () => {
- expect(wrapper.text()).toContain('Connection has failed. Re-check Auth Token and try again');
- });
- });
-});
diff --git a/spec/javascripts/error_tracking_settings/components/project_dropdown_spec.js b/spec/javascripts/error_tracking_settings/components/project_dropdown_spec.js
deleted file mode 100644
index 8e5dbe28452..00000000000
--- a/spec/javascripts/error_tracking_settings/components/project_dropdown_spec.js
+++ /dev/null
@@ -1,109 +0,0 @@
-import _ from 'underscore';
-import Vuex from 'vuex';
-import { createLocalVue, shallowMount } from '@vue/test-utils';
-import { GlDropdown, GlDropdownItem } from '@gitlab/ui';
-import ProjectDropdown from '~/error_tracking_settings/components/project_dropdown.vue';
-import { defaultProps, projectList, staleProject } from '../mock';
-
-const localVue = createLocalVue();
-localVue.use(Vuex);
-
-describe('error tracking settings project dropdown', () => {
- let wrapper;
-
- function mountComponent() {
- wrapper = shallowMount(ProjectDropdown, {
- localVue,
- propsData: {
- ..._.pick(
- defaultProps,
- 'dropdownLabel',
- 'invalidProjectLabel',
- 'projects',
- 'projectSelectionLabel',
- 'selectedProject',
- 'token',
- ),
- hasProjects: false,
- isProjectInvalid: false,
- },
- });
- }
-
- beforeEach(() => {
- mountComponent();
- });
-
- afterEach(() => {
- if (wrapper) {
- wrapper.destroy();
- }
- });
-
- describe('empty project list', () => {
- it('renders the dropdown', () => {
- expect(wrapper.find('#project-dropdown').exists()).toBeTruthy();
- expect(wrapper.find(GlDropdown).exists()).toBeTruthy();
- });
-
- it('shows helper text', () => {
- expect(wrapper.find('.js-project-dropdown-label').exists()).toBeTruthy();
- expect(wrapper.find('.js-project-dropdown-label').text()).toContain(
- 'To enable project selection',
- );
- });
-
- it('does not show an error', () => {
- expect(wrapper.find('.js-project-dropdown-error').exists()).toBeFalsy();
- });
-
- it('does not contain any dropdown items', () => {
- expect(wrapper.find(GlDropdownItem).exists()).toBeFalsy();
- expect(wrapper.find(GlDropdown).props('text')).toBe('No projects available');
- });
- });
-
- describe('populated project list', () => {
- beforeEach(() => {
- wrapper.setProps({ projects: _.clone(projectList), hasProjects: true });
- });
-
- it('renders the dropdown', () => {
- expect(wrapper.find('#project-dropdown').exists()).toBeTruthy();
- expect(wrapper.find(GlDropdown).exists()).toBeTruthy();
- });
-
- it('contains a number of dropdown items', () => {
- expect(wrapper.find(GlDropdownItem).exists()).toBeTruthy();
- expect(wrapper.findAll(GlDropdownItem).length).toBe(2);
- });
- });
-
- describe('selected project', () => {
- const selectedProject = _.clone(projectList[0]);
-
- beforeEach(() => {
- wrapper.setProps({ projects: _.clone(projectList), selectedProject, hasProjects: true });
- });
-
- it('does not show helper text', () => {
- expect(wrapper.find('.js-project-dropdown-label').exists()).toBeFalsy();
- expect(wrapper.find('.js-project-dropdown-error').exists()).toBeFalsy();
- });
- });
-
- describe('invalid project selected', () => {
- beforeEach(() => {
- wrapper.setProps({
- projects: _.clone(projectList),
- selectedProject: staleProject,
- isProjectInvalid: true,
- });
- });
-
- it('displays a error', () => {
- expect(wrapper.find('.js-project-dropdown-label').exists()).toBeFalsy();
- expect(wrapper.find('.js-project-dropdown-error').exists()).toBeTruthy();
- });
- });
-});
diff --git a/spec/javascripts/frequent_items/components/frequent_items_list_item_spec.js b/spec/javascripts/frequent_items/components/frequent_items_list_item_spec.js
deleted file mode 100644
index f00bc2eeb6d..00000000000
--- a/spec/javascripts/frequent_items/components/frequent_items_list_item_spec.js
+++ /dev/null
@@ -1,95 +0,0 @@
-import Vue from 'vue';
-import frequentItemsListItemComponent from '~/frequent_items/components/frequent_items_list_item.vue';
-import { shallowMount } from '@vue/test-utils';
-import { trimText } from 'spec/helpers/vue_component_helper';
-import { mockProject } from '../mock_data'; // can also use 'mockGroup', but not useful to test here
-
-const createComponent = () => {
- const Component = Vue.extend(frequentItemsListItemComponent);
-
- return shallowMount(Component, {
- propsData: {
- itemId: mockProject.id,
- itemName: mockProject.name,
- namespace: mockProject.namespace,
- webUrl: mockProject.webUrl,
- avatarUrl: mockProject.avatarUrl,
- },
- });
-};
-
-describe('FrequentItemsListItemComponent', () => {
- let wrapper;
- let vm;
-
- beforeEach(() => {
- wrapper = createComponent();
-
- ({ vm } = wrapper);
- });
-
- afterEach(() => {
- vm.$destroy();
- });
-
- describe('computed', () => {
- describe('hasAvatar', () => {
- it('should return `true` or `false` if whether avatar is present or not', () => {
- wrapper.setProps({ avatarUrl: 'path/to/avatar.png' });
-
- expect(vm.hasAvatar).toBe(true);
-
- wrapper.setProps({ avatarUrl: null });
-
- expect(vm.hasAvatar).toBe(false);
- });
- });
-
- describe('highlightedItemName', () => {
- it('should enclose part of project name in <b> & </b> which matches with `matcher` prop', () => {
- wrapper.setProps({ matcher: 'lab' });
-
- expect(wrapper.find('.js-frequent-items-item-title').html()).toContain(
- '<b>L</b><b>a</b><b>b</b>',
- );
- });
-
- it('should return project name as it is if `matcher` is not available', () => {
- wrapper.setProps({ matcher: null });
-
- expect(trimText(wrapper.find('.js-frequent-items-item-title').text())).toBe(
- mockProject.name,
- );
- });
- });
-
- describe('truncatedNamespace', () => {
- it('should truncate project name from namespace string', () => {
- wrapper.setProps({ namespace: 'platform / nokia-3310' });
-
- expect(trimText(wrapper.find('.js-frequent-items-item-namespace').text())).toBe('platform');
- });
-
- it('should truncate namespace string from the middle if it includes more than two groups in path', () => {
- wrapper.setProps({
- namespace: 'platform / hardware / broadcom / Wifi Group / Mobile Chipset / nokia-3310',
- });
-
- expect(trimText(wrapper.find('.js-frequent-items-item-namespace').text())).toBe(
- 'platform / ... / Mobile Chipset',
- );
- });
- });
- });
-
- describe('template', () => {
- it('should render component element', () => {
- expect(wrapper.classes()).toContain('frequent-items-list-item-container');
- expect(wrapper.findAll('a').length).toBe(1);
- expect(wrapper.findAll('.frequent-items-item-avatar-container').length).toBe(1);
- expect(wrapper.findAll('.frequent-items-item-metadata-container').length).toBe(1);
- expect(wrapper.findAll('.frequent-items-item-title').length).toBe(1);
- expect(wrapper.findAll('.frequent-items-item-namespace').length).toBe(1);
- });
- });
-});
diff --git a/spec/javascripts/frequent_items/components/frequent_items_search_input_spec.js b/spec/javascripts/frequent_items/components/frequent_items_search_input_spec.js
deleted file mode 100644
index ddbbc5c2d29..00000000000
--- a/spec/javascripts/frequent_items/components/frequent_items_search_input_spec.js
+++ /dev/null
@@ -1,81 +0,0 @@
-import Vue from 'vue';
-import searchComponent from '~/frequent_items/components/frequent_items_search_input.vue';
-import eventHub from '~/frequent_items/event_hub';
-import { shallowMount } from '@vue/test-utils';
-
-const createComponent = (namespace = 'projects') => {
- const Component = Vue.extend(searchComponent);
-
- return shallowMount(Component, { propsData: { namespace } });
-};
-
-describe('FrequentItemsSearchInputComponent', () => {
- let wrapper;
- let vm;
-
- beforeEach(() => {
- wrapper = createComponent();
-
- ({ vm } = wrapper);
- });
-
- afterEach(() => {
- vm.$destroy();
- });
-
- describe('methods', () => {
- describe('setFocus', () => {
- it('should set focus to search input', () => {
- spyOn(vm.$refs.search, 'focus');
-
- vm.setFocus();
-
- expect(vm.$refs.search.focus).toHaveBeenCalled();
- });
- });
- });
-
- describe('mounted', () => {
- it('should listen `dropdownOpen` event', done => {
- spyOn(eventHub, '$on');
- const vmX = createComponent().vm;
-
- Vue.nextTick(() => {
- expect(eventHub.$on).toHaveBeenCalledWith(
- `${vmX.namespace}-dropdownOpen`,
- jasmine.any(Function),
- );
- done();
- });
- });
- });
-
- describe('beforeDestroy', () => {
- it('should unbind event listeners on eventHub', done => {
- const vmX = createComponent().vm;
- spyOn(eventHub, '$off');
-
- vmX.$mount();
- vmX.$destroy();
-
- Vue.nextTick(() => {
- expect(eventHub.$off).toHaveBeenCalledWith(
- `${vmX.namespace}-dropdownOpen`,
- jasmine.any(Function),
- );
- done();
- });
- });
- });
-
- describe('template', () => {
- it('should render component element', () => {
- expect(wrapper.classes()).toContain('search-input-container');
- expect(wrapper.contains('input.form-control')).toBe(true);
- expect(wrapper.contains('.search-icon')).toBe(true);
- expect(wrapper.find('input.form-control').attributes('placeholder')).toBe(
- 'Search your projects',
- );
- });
- });
-});
diff --git a/spec/javascripts/helpers/vue_test_utils_helper_spec.js b/spec/javascripts/helpers/vue_test_utils_helper_spec.js
deleted file mode 100644
index 41714066da5..00000000000
--- a/spec/javascripts/helpers/vue_test_utils_helper_spec.js
+++ /dev/null
@@ -1,48 +0,0 @@
-import { shallowMount } from '@vue/test-utils';
-import { shallowWrapperContainsSlotText } from './vue_test_utils_helper';
-
-describe('Vue test utils helpers', () => {
- describe('shallowWrapperContainsSlotText', () => {
- const mockText = 'text';
- const mockSlot = `<div>${mockText}</div>`;
- let mockComponent;
-
- beforeEach(() => {
- mockComponent = shallowMount(
- {
- render(h) {
- h(`<div>mockedComponent</div>`);
- },
- },
- {
- slots: {
- default: mockText,
- namedSlot: mockSlot,
- },
- },
- );
- });
-
- it('finds text within shallowWrapper default slot', () => {
- expect(shallowWrapperContainsSlotText(mockComponent, 'default', mockText)).toBe(true);
- });
-
- it('finds text within shallowWrapper named slot', () => {
- expect(shallowWrapperContainsSlotText(mockComponent, 'namedSlot', mockText)).toBe(true);
- });
-
- it('returns false when text is not present', () => {
- const searchText = 'absent';
-
- expect(shallowWrapperContainsSlotText(mockComponent, 'default', searchText)).toBe(false);
- expect(shallowWrapperContainsSlotText(mockComponent, 'namedSlot', searchText)).toBe(false);
- });
-
- it('searches with case-sensitivity', () => {
- const searchText = mockText.toUpperCase();
-
- expect(shallowWrapperContainsSlotText(mockComponent, 'default', searchText)).toBe(false);
- expect(shallowWrapperContainsSlotText(mockComponent, 'namedSlot', searchText)).toBe(false);
- });
- });
-});
diff --git a/spec/javascripts/monitoring/charts/area_spec.js b/spec/javascripts/monitoring/charts/area_spec.js
deleted file mode 100644
index 41a6c04efb9..00000000000
--- a/spec/javascripts/monitoring/charts/area_spec.js
+++ /dev/null
@@ -1,231 +0,0 @@
-import { shallowMount } from '@vue/test-utils';
-import { GlAreaChart, GlChartSeriesLabel } from '@gitlab/ui/dist/charts';
-import { shallowWrapperContainsSlotText } from 'spec/helpers/vue_test_utils_helper';
-import Area from '~/monitoring/components/charts/area.vue';
-import MonitoringStore from '~/monitoring/stores/monitoring_store';
-import MonitoringMock, { deploymentData } from '../mock_data';
-
-describe('Area component', () => {
- const mockWidgets = 'mockWidgets';
- const mockSvgPathContent = 'mockSvgPathContent';
- let mockGraphData;
- let areaChart;
- let spriteSpy;
-
- beforeEach(() => {
- const store = new MonitoringStore();
- store.storeMetrics(MonitoringMock.data);
- store.storeDeploymentData(deploymentData);
-
- [mockGraphData] = store.groups[0].metrics;
-
- areaChart = shallowMount(Area, {
- propsData: {
- graphData: mockGraphData,
- containerWidth: 0,
- deploymentData: store.deploymentData,
- },
- slots: {
- default: mockWidgets,
- },
- });
-
- spriteSpy = spyOnDependency(Area, 'getSvgIconPathContent').and.callFake(
- () => new Promise(resolve => resolve(mockSvgPathContent)),
- );
- });
-
- afterEach(() => {
- areaChart.destroy();
- });
-
- it('renders chart title', () => {
- expect(areaChart.find({ ref: 'graphTitle' }).text()).toBe(mockGraphData.title);
- });
-
- it('contains graph widgets from slot', () => {
- expect(areaChart.find({ ref: 'graphWidgets' }).text()).toBe(mockWidgets);
- });
-
- describe('wrapped components', () => {
- describe('GitLab UI area chart', () => {
- let glAreaChart;
-
- beforeEach(() => {
- glAreaChart = areaChart.find(GlAreaChart);
- });
-
- it('is a Vue instance', () => {
- expect(glAreaChart.isVueInstance()).toBe(true);
- });
-
- it('receives data properties needed for proper chart render', () => {
- const props = glAreaChart.props();
-
- expect(props.data).toBe(areaChart.vm.chartData);
- expect(props.option).toBe(areaChart.vm.chartOptions);
- expect(props.formatTooltipText).toBe(areaChart.vm.formatTooltipText);
- expect(props.thresholds).toBe(areaChart.vm.thresholds);
- });
-
- it('recieves a tooltip title', () => {
- const mockTitle = 'mockTitle';
- areaChart.vm.tooltip.title = mockTitle;
-
- expect(shallowWrapperContainsSlotText(glAreaChart, 'tooltipTitle', mockTitle)).toBe(true);
- });
-
- describe('when tooltip is showing deployment data', () => {
- beforeEach(() => {
- areaChart.vm.tooltip.isDeployment = true;
- });
-
- it('uses deployment title', () => {
- expect(shallowWrapperContainsSlotText(glAreaChart, 'tooltipTitle', 'Deployed')).toBe(
- true,
- );
- });
-
- it('renders commit sha in tooltip content', () => {
- const mockSha = 'mockSha';
- areaChart.vm.tooltip.sha = mockSha;
-
- expect(shallowWrapperContainsSlotText(glAreaChart, 'tooltipContent', mockSha)).toBe(true);
- });
- });
- });
- });
-
- describe('methods', () => {
- describe('formatTooltipText', () => {
- const mockDate = deploymentData[0].created_at;
- const generateSeriesData = type => ({
- seriesData: [
- {
- seriesName: areaChart.vm.chartData[0].name,
- componentSubType: type,
- value: [mockDate, 5.55555],
- seriesIndex: 0,
- },
- ],
- value: mockDate,
- });
-
- describe('when series is of line type', () => {
- beforeEach(() => {
- areaChart.vm.formatTooltipText(generateSeriesData('line'));
- });
-
- it('formats tooltip title', () => {
- expect(areaChart.vm.tooltip.title).toBe('31 May 2017, 9:23PM');
- });
-
- it('formats tooltip content', () => {
- const name = 'Core Usage';
- const value = '5.556';
- const seriesLabel = areaChart.find(GlChartSeriesLabel);
-
- expect(seriesLabel.vm.color).toBe('');
- expect(shallowWrapperContainsSlotText(seriesLabel, 'default', name)).toBe(true);
- expect(areaChart.vm.tooltip.content).toEqual([{ name, value, color: undefined }]);
- expect(
- shallowWrapperContainsSlotText(areaChart.find(GlAreaChart), 'tooltipContent', value),
- ).toBe(true);
- });
- });
-
- describe('when series is of scatter type', () => {
- beforeEach(() => {
- areaChart.vm.formatTooltipText(generateSeriesData('scatter'));
- });
-
- it('formats tooltip title', () => {
- expect(areaChart.vm.tooltip.title).toBe('31 May 2017, 9:23PM');
- });
-
- it('formats tooltip sha', () => {
- expect(areaChart.vm.tooltip.sha).toBe('f5bcd1d9');
- });
- });
- });
-
- describe('setSvg', () => {
- const mockSvgName = 'mockSvgName';
-
- beforeEach(() => {
- areaChart.vm.setSvg(mockSvgName);
- });
-
- it('gets svg path content', () => {
- expect(spriteSpy).toHaveBeenCalledWith(mockSvgName);
- });
-
- it('sets svg path content', done => {
- areaChart.vm.$nextTick(() => {
- expect(areaChart.vm.svgs[mockSvgName]).toBe(`path://${mockSvgPathContent}`);
- done();
- });
- });
- });
-
- describe('onResize', () => {
- const mockWidth = 233;
-
- beforeEach(() => {
- spyOn(Element.prototype, 'getBoundingClientRect').and.callFake(() => ({
- width: mockWidth,
- }));
- areaChart.vm.onResize();
- });
-
- it('sets area chart width', () => {
- expect(areaChart.vm.width).toBe(mockWidth);
- });
- });
- });
-
- describe('computed', () => {
- describe('chartData', () => {
- let chartData;
- const seriesData = () => chartData[0];
-
- beforeEach(() => {
- ({ chartData } = areaChart.vm);
- });
-
- it('utilizes all data points', () => {
- expect(chartData.length).toBe(1);
- expect(seriesData().data.length).toBe(297);
- });
-
- it('creates valid data', () => {
- const { data } = seriesData();
-
- expect(
- data.filter(([time, value]) => new Date(time).getTime() > 0 && typeof value === 'number')
- .length,
- ).toBe(data.length);
- });
-
- it('formats line width correctly', () => {
- expect(chartData[0].lineStyle.width).toBe(2);
- });
- });
-
- describe('scatterSeries', () => {
- it('utilizes deployment data', () => {
- expect(areaChart.vm.scatterSeries.data).toEqual([
- ['2017-05-31T21:23:37.881Z', 0],
- ['2017-05-30T20:08:04.629Z', 0],
- ['2017-05-30T17:42:38.409Z', 0],
- ]);
- });
- });
-
- describe('yAxisLabel', () => {
- it('constructs a label for the chart y-axis', () => {
- expect(areaChart.vm.yAxisLabel).toBe('CPU');
- });
- });
- });
-});
diff --git a/spec/javascripts/notes/components/noteable_discussion_spec.js b/spec/javascripts/notes/components/noteable_discussion_spec.js
deleted file mode 100644
index efa864e7d00..00000000000
--- a/spec/javascripts/notes/components/noteable_discussion_spec.js
+++ /dev/null
@@ -1,269 +0,0 @@
-import { shallowMount, createLocalVue } from '@vue/test-utils';
-import createStore from '~/notes/stores';
-import noteableDiscussion from '~/notes/components/noteable_discussion.vue';
-import ReplyPlaceholder from '~/notes/components/discussion_reply_placeholder.vue';
-import ResolveWithIssueButton from '~/notes/components/discussion_resolve_with_issue_button.vue';
-import NoteForm from '~/notes/components/note_form.vue';
-import '~/behaviors/markdown/render_gfm';
-import { noteableDataMock, discussionMock, notesDataMock } from '../mock_data';
-import mockDiffFile from '../../diffs/mock_data/diff_file';
-
-const discussionWithTwoUnresolvedNotes = 'merge_requests/resolved_diff_discussion.json';
-
-describe('noteable_discussion component', () => {
- let store;
- let wrapper;
-
- preloadFixtures(discussionWithTwoUnresolvedNotes);
-
- beforeEach(() => {
- window.mrTabs = {};
- store = createStore();
- store.dispatch('setNoteableData', noteableDataMock);
- store.dispatch('setNotesData', notesDataMock);
-
- const localVue = createLocalVue();
- wrapper = shallowMount(noteableDiscussion, {
- store,
- propsData: { discussion: discussionMock },
- localVue,
- sync: false,
- });
- });
-
- afterEach(() => {
- wrapper.destroy();
- });
-
- it('should render user avatar', () => {
- expect(wrapper.find('.user-avatar-link').exists()).toBe(true);
- });
-
- it('should not render discussion header for non diff discussions', () => {
- expect(wrapper.find('.discussion-header').exists()).toBe(false);
- });
-
- it('should render discussion header', done => {
- const discussion = { ...discussionMock };
- discussion.diff_file = mockDiffFile;
- discussion.diff_discussion = true;
-
- wrapper.setProps({ discussion });
-
- wrapper.vm
- .$nextTick()
- .then(() => {
- expect(wrapper.find('.discussion-header').exists()).toBe(true);
- })
- .then(done)
- .catch(done.fail);
- });
-
- describe('actions', () => {
- it('should toggle reply form', done => {
- const replyPlaceholder = wrapper.find(ReplyPlaceholder);
-
- wrapper.vm
- .$nextTick()
- .then(() => {
- expect(wrapper.vm.isReplying).toEqual(false);
-
- replyPlaceholder.vm.$emit('onClick');
- })
- .then(() => wrapper.vm.$nextTick())
- .then(() => {
- expect(wrapper.vm.isReplying).toEqual(true);
-
- const noteForm = wrapper.find(NoteForm);
-
- expect(noteForm.exists()).toBe(true);
-
- const noteFormProps = noteForm.props();
-
- expect(noteFormProps.discussion).toBe(discussionMock);
- expect(noteFormProps.isEditing).toBe(false);
- expect(noteFormProps.line).toBe(null);
- expect(noteFormProps.saveButtonTitle).toBe('Comment');
- expect(noteFormProps.autosaveKey).toBe(`Note/Issue/${discussionMock.id}/Reply`);
- })
- .then(done)
- .catch(done.fail);
- });
-
- it('does not render jump to discussion button', () => {
- expect(
- wrapper.find('*[data-original-title="Jump to next unresolved discussion"]').exists(),
- ).toBe(false);
- });
- });
-
- describe('methods', () => {
- describe('jumpToNextDiscussion', () => {
- it('expands next unresolved discussion', done => {
- const discussion2 = getJSONFixture(discussionWithTwoUnresolvedNotes)[0];
- discussion2.resolved = false;
- discussion2.active = true;
- discussion2.id = 'next'; // prepare this for being identified as next one (to be jumped to)
- store.dispatch('setInitialNotes', [discussionMock, discussion2]);
- window.mrTabs.currentAction = 'show';
-
- wrapper.vm
- .$nextTick()
- .then(() => {
- spyOn(wrapper.vm, 'expandDiscussion').and.stub();
-
- const nextDiscussionId = discussion2.id;
-
- setFixtures(`
- <div class="discussion" data-discussion-id="${nextDiscussionId}"></div>
- `);
-
- wrapper.vm.jumpToNextDiscussion();
-
- expect(wrapper.vm.expandDiscussion).toHaveBeenCalledWith({
- discussionId: nextDiscussionId,
- });
- })
- .then(done)
- .catch(done.fail);
- });
- });
- });
-
- describe('action text', () => {
- const commitId = 'razupaltuff';
- const truncatedCommitId = commitId.substr(0, 8);
- let commitElement;
-
- beforeEach(done => {
- store.state.diffs = {
- projectPath: 'something',
- };
-
- wrapper.setProps({
- discussion: {
- ...discussionMock,
- for_commit: true,
- commit_id: commitId,
- diff_discussion: true,
- diff_file: {
- ...mockDiffFile,
- },
- },
- renderDiffFile: true,
- });
-
- wrapper.vm
- .$nextTick()
- .then(() => {
- commitElement = wrapper.find('.commit-sha');
- })
- .then(done)
- .catch(done.fail);
- });
-
- describe('for commit discussions', () => {
- it('should display a monospace started a discussion on commit', () => {
- expect(wrapper.text()).toContain(`started a discussion on commit ${truncatedCommitId}`);
- expect(commitElement.exists()).toBe(true);
- expect(commitElement.text()).toContain(truncatedCommitId);
- });
- });
-
- describe('for diff discussion with a commit id', () => {
- it('should display started discussion on commit header', done => {
- wrapper.vm.discussion.for_commit = false;
-
- wrapper.vm.$nextTick(() => {
- expect(wrapper.text()).toContain(`started a discussion on commit ${truncatedCommitId}`);
-
- expect(commitElement).not.toBe(null);
-
- done();
- });
- });
-
- it('should display outdated change on commit header', done => {
- wrapper.vm.discussion.for_commit = false;
- wrapper.vm.discussion.active = false;
-
- wrapper.vm.$nextTick(() => {
- expect(wrapper.text()).toContain(
- `started a discussion on an outdated change in commit ${truncatedCommitId}`,
- );
-
- expect(commitElement).not.toBe(null);
-
- done();
- });
- });
- });
-
- describe('for diff discussions without a commit id', () => {
- it('should show started a discussion on the diff text', done => {
- Object.assign(wrapper.vm.discussion, {
- for_commit: false,
- commit_id: null,
- });
-
- wrapper.vm.$nextTick(() => {
- expect(wrapper.text()).toContain('started a discussion on the diff');
-
- done();
- });
- });
-
- it('should show discussion on older version text', done => {
- Object.assign(wrapper.vm.discussion, {
- for_commit: false,
- commit_id: null,
- active: false,
- });
-
- wrapper.vm.$nextTick(() => {
- expect(wrapper.text()).toContain('started a discussion on an old version of the diff');
-
- done();
- });
- });
- });
- });
-
- describe('for resolved discussion', () => {
- beforeEach(() => {
- const discussion = getJSONFixture(discussionWithTwoUnresolvedNotes)[0];
- wrapper.setProps({ discussion });
- });
-
- it('does not display a button to resolve with issue', () => {
- const button = wrapper.find(ResolveWithIssueButton);
-
- expect(button.exists()).toBe(false);
- });
- });
-
- describe('for unresolved discussion', () => {
- beforeEach(done => {
- const discussion = {
- ...getJSONFixture(discussionWithTwoUnresolvedNotes)[0],
- expanded: true,
- };
- discussion.notes = discussion.notes.map(note => ({
- ...note,
- resolved: false,
- }));
-
- wrapper.setProps({ discussion });
- wrapper.vm
- .$nextTick()
- .then(done)
- .catch(done.fail);
- });
-
- it('displays a button to resolve with issue', () => {
- const button = wrapper.find(ResolveWithIssueButton);
-
- expect(button.exists()).toBe(true);
- });
- });
-});
diff --git a/spec/javascripts/pipelines/pipeline_triggerer_spec.js b/spec/javascripts/pipelines/pipeline_triggerer_spec.js
deleted file mode 100644
index 8cf290f2663..00000000000
--- a/spec/javascripts/pipelines/pipeline_triggerer_spec.js
+++ /dev/null
@@ -1,54 +0,0 @@
-import { mount } from '@vue/test-utils';
-import pipelineTriggerer from '~/pipelines/components/pipeline_triggerer.vue';
-
-describe('Pipelines Triggerer', () => {
- let wrapper;
-
- const mockData = {
- pipeline: {
- user: {
- name: 'foo',
- avatar_url: '/avatar',
- path: '/path',
- },
- },
- };
-
- const createComponent = () => {
- wrapper = mount(pipelineTriggerer, {
- propsData: mockData,
- });
- };
-
- beforeEach(() => {
- createComponent();
- });
-
- afterEach(() => {
- wrapper.destroy();
- });
-
- it('should render a table cell', () => {
- expect(wrapper.contains('.table-section')).toBe(true);
- });
-
- it('should render triggerer information when triggerer is provided', () => {
- const link = wrapper.find('.js-pipeline-url-user');
-
- expect(link.attributes('href')).toEqual(mockData.pipeline.user.path);
- expect(link.find('.js-user-avatar-image-toolip').text()).toEqual(mockData.pipeline.user.name);
- expect(link.find('img.avatar').attributes('src')).toEqual(
- `${mockData.pipeline.user.avatar_url}?width=26`,
- );
- });
-
- it('should render "API" when no triggerer is provided', () => {
- wrapper.setProps({
- pipeline: {
- user: null,
- },
- });
-
- expect(wrapper.find('.js-pipeline-url-api').text()).toEqual('API');
- });
-});
diff --git a/spec/javascripts/vue_shared/components/user_avatar/user_avatar_list_spec.js b/spec/javascripts/vue_shared/components/user_avatar/user_avatar_list_spec.js
deleted file mode 100644
index 96bc3b0cc17..00000000000
--- a/spec/javascripts/vue_shared/components/user_avatar/user_avatar_list_spec.js
+++ /dev/null
@@ -1,156 +0,0 @@
-import { shallowMount, createLocalVue } from '@vue/test-utils';
-import { GlButton } from '@gitlab/ui';
-import { TEST_HOST } from 'spec/test_constants';
-import UserAvatarList from '~/vue_shared/components/user_avatar/user_avatar_list.vue';
-import UserAvatarLink from '~/vue_shared/components/user_avatar/user_avatar_link.vue';
-
-const TEST_IMAGE_SIZE = 7;
-const TEST_BREAKPOINT = 5;
-const TEST_EMPTY_MESSAGE = 'Lorem ipsum empty';
-const DEFAULT_EMPTY_MESSAGE = 'None';
-
-const createUser = id => ({
- id,
- name: 'Lorem',
- web_url: `${TEST_HOST}/${id}`,
- avatar_url: `${TEST_HOST}/${id}/avatar`,
-});
-const createList = n =>
- Array(n)
- .fill(1)
- .map((x, id) => createUser(id));
-
-const localVue = createLocalVue();
-
-describe('UserAvatarList', () => {
- let props;
- let wrapper;
-
- const factory = (options = {}) => {
- const propsData = {
- ...props,
- ...options.propsData,
- };
-
- wrapper = shallowMount(localVue.extend(UserAvatarList), {
- ...options,
- localVue,
- propsData,
- });
- };
-
- const clickButton = () => {
- const button = wrapper.find(GlButton);
- button.vm.$emit('click');
- };
-
- beforeEach(() => {
- props = { imgSize: TEST_IMAGE_SIZE };
- });
-
- afterEach(() => {
- wrapper.destroy();
- });
-
- describe('empty text', () => {
- it('shows when items are empty', () => {
- factory({ propsData: { items: [] } });
-
- expect(wrapper.text()).toContain(DEFAULT_EMPTY_MESSAGE);
- });
-
- it('does not show when items are not empty', () => {
- factory({ propsData: { items: createList(1) } });
-
- expect(wrapper.text()).not.toContain(DEFAULT_EMPTY_MESSAGE);
- });
-
- it('can be set in props', () => {
- factory({ propsData: { items: [], emptyText: TEST_EMPTY_MESSAGE } });
-
- expect(wrapper.text()).toContain(TEST_EMPTY_MESSAGE);
- });
- });
-
- describe('with no breakpoint', () => {
- beforeEach(() => {
- props.breakpoint = 0;
- });
-
- it('renders avatars', () => {
- const items = createList(20);
- factory({ propsData: { items } });
-
- const links = wrapper.findAll(UserAvatarLink);
- const linkProps = links.wrappers.map(x => x.props());
-
- expect(linkProps).toEqual(
- items.map(x =>
- jasmine.objectContaining({
- linkHref: x.web_url,
- imgSrc: x.avatar_url,
- imgAlt: x.name,
- tooltipText: x.name,
- imgSize: TEST_IMAGE_SIZE,
- }),
- ),
- );
- });
- });
-
- describe('with breakpoint and length equal to breakpoint', () => {
- beforeEach(() => {
- props.breakpoint = TEST_BREAKPOINT;
- props.items = createList(TEST_BREAKPOINT);
- });
-
- it('renders all avatars if length is <= breakpoint', () => {
- factory();
-
- const links = wrapper.findAll(UserAvatarLink);
-
- expect(links.length).toEqual(props.items.length);
- });
-
- it('does not show button', () => {
- factory();
-
- expect(wrapper.find(GlButton).exists()).toBe(false);
- });
- });
-
- describe('with breakpoint and length greater than breakpoint', () => {
- beforeEach(() => {
- props.breakpoint = TEST_BREAKPOINT;
- props.items = createList(TEST_BREAKPOINT + 1);
- });
-
- it('renders avatars up to breakpoint', () => {
- factory();
-
- const links = wrapper.findAll(UserAvatarLink);
-
- expect(links.length).toEqual(TEST_BREAKPOINT);
- });
-
- describe('with expand clicked', () => {
- beforeEach(() => {
- factory();
- clickButton();
- });
-
- it('renders all avatars', () => {
- const links = wrapper.findAll(UserAvatarLink);
-
- expect(links.length).toEqual(props.items.length);
- });
-
- it('with collapse clicked, it renders avatars up to breakpoint', () => {
- clickButton();
- const links = wrapper.findAll(UserAvatarLink);
-
- expect(links.length).toEqual(TEST_BREAKPOINT);
- });
- });
- });
-});