summaryrefslogtreecommitdiff
path: root/spec/frontend/diffs
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/diffs')
-rw-r--r--spec/frontend/diffs/components/compare_versions_spec.js156
-rw-r--r--spec/frontend/diffs/components/diff_file_header_spec.js1
-rw-r--r--spec/frontend/diffs/components/diff_gutter_avatars_spec.js3
-rw-r--r--spec/frontend/diffs/components/edit_button_spec.js3
-rw-r--r--spec/frontend/diffs/mock_data/diff_with_commit.js7
-rw-r--r--spec/frontend/diffs/mock_data/merge_request_diffs.js46
6 files changed, 214 insertions, 2 deletions
diff --git a/spec/frontend/diffs/components/compare_versions_spec.js b/spec/frontend/diffs/components/compare_versions_spec.js
new file mode 100644
index 00000000000..9900fcdb6e1
--- /dev/null
+++ b/spec/frontend/diffs/components/compare_versions_spec.js
@@ -0,0 +1,156 @@
+import { trimText } from 'helpers/text_helper';
+import { mount, createLocalVue } from '@vue/test-utils';
+import Vuex from 'vuex';
+import CompareVersionsComponent from '~/diffs/components/compare_versions.vue';
+import Icon from '~/vue_shared/components/icon.vue';
+import { createStore } from '~/mr_notes/stores';
+import diffsMockData from '../mock_data/merge_request_diffs';
+import getDiffWithCommit from '../mock_data/diff_with_commit';
+
+const localVue = createLocalVue();
+localVue.use(Vuex);
+
+describe('CompareVersions', () => {
+ let wrapper;
+ const targetBranch = { branchName: 'tmp-wine-dev', versionIndex: -1 };
+
+ const createWrapper = props => {
+ const store = createStore();
+
+ store.state.diffs.addedLines = 10;
+ store.state.diffs.removedLines = 20;
+ store.state.diffs.diffFiles.push('test');
+
+ wrapper = mount(CompareVersionsComponent, {
+ sync: false,
+ attachToDocument: true,
+ localVue,
+ store,
+ propsData: {
+ mergeRequestDiffs: diffsMockData,
+ mergeRequestDiff: diffsMockData[0],
+ targetBranch,
+ ...props,
+ },
+ });
+ };
+
+ beforeEach(() => {
+ createWrapper();
+ });
+
+ afterEach(() => {
+ wrapper.destroy();
+ wrapper = null;
+ });
+
+ describe('template', () => {
+ it('should render Tree List toggle button with correct attribute values', () => {
+ const treeListBtn = wrapper.find('.js-toggle-tree-list');
+
+ expect(treeListBtn.exists()).toBe(true);
+ expect(treeListBtn.attributes('data-original-title')).toBe('Hide file browser');
+ expect(treeListBtn.findAll(Icon).length).not.toBe(0);
+ expect(treeListBtn.find(Icon).props('name')).toBe('collapse-left');
+ });
+
+ it('should render comparison dropdowns with correct values', () => {
+ const sourceDropdown = wrapper.find('.mr-version-dropdown');
+ const targetDropdown = wrapper.find('.mr-version-compare-dropdown');
+
+ expect(sourceDropdown.exists()).toBe(true);
+ expect(targetDropdown.exists()).toBe(true);
+ expect(sourceDropdown.find('a span').html()).toContain('latest version');
+ expect(targetDropdown.find('a span').html()).toContain(targetBranch.branchName);
+ });
+
+ it('should not render comparison dropdowns if no mergeRequestDiffs are specified', () => {
+ createWrapper({ mergeRequestDiffs: [] });
+
+ const sourceDropdown = wrapper.find('.mr-version-dropdown');
+ const targetDropdown = wrapper.find('.mr-version-compare-dropdown');
+
+ expect(sourceDropdown.exists()).toBe(false);
+ expect(targetDropdown.exists()).toBe(false);
+ });
+
+ it('should render view types buttons with correct values', () => {
+ const inlineBtn = wrapper.find('#inline-diff-btn');
+ const parallelBtn = wrapper.find('#parallel-diff-btn');
+
+ expect(inlineBtn.exists()).toBe(true);
+ expect(parallelBtn.exists()).toBe(true);
+ expect(inlineBtn.attributes('data-view-type')).toEqual('inline');
+ expect(parallelBtn.attributes('data-view-type')).toEqual('parallel');
+ expect(inlineBtn.html()).toContain('Inline');
+ expect(parallelBtn.html()).toContain('Side-by-side');
+ });
+
+ it('adds container-limiting classes when showFileTree is false with inline diffs', () => {
+ createWrapper({ isLimitedContainer: true });
+
+ const limitedContainer = wrapper.find('.container-limited.limit-container-width');
+
+ expect(limitedContainer.exists()).toBe(true);
+ });
+
+ it('does not add container-limiting classes when showFileTree is false with inline diffs', () => {
+ createWrapper({ isLimitedContainer: false });
+
+ const limitedContainer = wrapper.find('.container-limited.limit-container-width');
+
+ expect(limitedContainer.exists()).toBe(false);
+ });
+ });
+
+ describe('setInlineDiffViewType', () => {
+ it('should persist the view type in the url', () => {
+ const viewTypeBtn = wrapper.find('#inline-diff-btn');
+ viewTypeBtn.trigger('click');
+
+ expect(window.location.toString()).toContain('?view=inline');
+ });
+ });
+
+ describe('setParallelDiffViewType', () => {
+ it('should persist the view type in the url', () => {
+ const viewTypeBtn = wrapper.find('#parallel-diff-btn');
+ viewTypeBtn.trigger('click');
+
+ expect(window.location.toString()).toContain('?view=parallel');
+ });
+ });
+
+ describe('comparableDiffs', () => {
+ it('should not contain the first item in the mergeRequestDiffs property', () => {
+ const { comparableDiffs } = wrapper.vm;
+ const comparableDiffsMock = diffsMockData.slice(1);
+
+ expect(comparableDiffs).toEqual(comparableDiffsMock);
+ });
+ });
+
+ describe('baseVersionPath', () => {
+ it('should be set correctly from mergeRequestDiff', () => {
+ expect(wrapper.vm.baseVersionPath).toEqual(wrapper.vm.mergeRequestDiff.base_version_path);
+ });
+ });
+
+ describe('commit', () => {
+ beforeEach(done => {
+ wrapper.vm.$store.state.diffs.commit = getDiffWithCommit().commit;
+ wrapper.mergeRequestDiffs = [];
+
+ wrapper.vm.$nextTick(done);
+ });
+
+ it('renders latest version button', () => {
+ expect(trimText(wrapper.find('.js-latest-version').text())).toBe('Show latest version');
+ });
+
+ it('renders short commit ID', () => {
+ expect(wrapper.text()).toContain('Viewing commit');
+ expect(wrapper.text()).toContain(wrapper.vm.commit.short_id);
+ });
+ });
+});
diff --git a/spec/frontend/diffs/components/diff_file_header_spec.js b/spec/frontend/diffs/components/diff_file_header_spec.js
index ac770c896bd..48fd6dd6f58 100644
--- a/spec/frontend/diffs/components/diff_file_header_spec.js
+++ b/spec/frontend/diffs/components/diff_file_header_spec.js
@@ -92,6 +92,7 @@ describe('DiffFileHeader component', () => {
localVue,
store,
sync: false,
+ attachToDocument: true,
});
};
diff --git a/spec/frontend/diffs/components/diff_gutter_avatars_spec.js b/spec/frontend/diffs/components/diff_gutter_avatars_spec.js
index 48ee5c63f35..b2debe36b89 100644
--- a/spec/frontend/diffs/components/diff_gutter_avatars_spec.js
+++ b/spec/frontend/diffs/components/diff_gutter_avatars_spec.js
@@ -15,10 +15,11 @@ describe('DiffGutterAvatars', () => {
const createComponent = (props = {}) => {
wrapper = shallowMount(DiffGutterAvatars, {
localVue,
- sync: false,
propsData: {
...props,
},
+ sync: false,
+ attachToDocument: true,
});
};
diff --git a/spec/frontend/diffs/components/edit_button_spec.js b/spec/frontend/diffs/components/edit_button_spec.js
index ccdae4cb312..4e2cfc75212 100644
--- a/spec/frontend/diffs/components/edit_button_spec.js
+++ b/spec/frontend/diffs/components/edit_button_spec.js
@@ -10,8 +10,9 @@ describe('EditButton', () => {
const createComponent = (props = {}) => {
wrapper = shallowMount(EditButton, {
localVue,
- sync: false,
propsData: { ...props },
+ sync: false,
+ attachToDocument: true,
});
};
diff --git a/spec/frontend/diffs/mock_data/diff_with_commit.js b/spec/frontend/diffs/mock_data/diff_with_commit.js
new file mode 100644
index 00000000000..d646294ee84
--- /dev/null
+++ b/spec/frontend/diffs/mock_data/diff_with_commit.js
@@ -0,0 +1,7 @@
+const FIXTURE = 'merge_request_diffs/with_commit.json';
+
+preloadFixtures(FIXTURE);
+
+export default function getDiffWithCommit() {
+ return getJSONFixture(FIXTURE);
+}
diff --git a/spec/frontend/diffs/mock_data/merge_request_diffs.js b/spec/frontend/diffs/mock_data/merge_request_diffs.js
new file mode 100644
index 00000000000..4bbef146336
--- /dev/null
+++ b/spec/frontend/diffs/mock_data/merge_request_diffs.js
@@ -0,0 +1,46 @@
+export default [
+ {
+ base_version_path: '/gnuwget/wget2/merge_requests/6/diffs?diff_id=37',
+ version_index: 4,
+ created_at: '2018-10-23T11:49:16.611Z',
+ commits_count: 4,
+ latest: true,
+ short_commit_sha: 'de7a8f7f',
+ version_path: '/gnuwget/wget2/merge_requests/6/diffs?diff_id=37',
+ compare_path:
+ '/gnuwget/wget2/merge_requests/6/diffs?diff_id=37&start_sha=de7a8f7f20c3ea2e0bef3ba01cfd41c21f6b4995',
+ },
+ {
+ base_version_path: '/gnuwget/wget2/merge_requests/6/diffs?diff_id=36',
+ version_index: 3,
+ created_at: '2018-10-23T11:46:40.617Z',
+ commits_count: 3,
+ latest: false,
+ short_commit_sha: 'e78fc18f',
+ version_path: '/gnuwget/wget2/merge_requests/6/diffs?diff_id=36',
+ compare_path:
+ '/gnuwget/wget2/merge_requests/6/diffs?diff_id=37&start_sha=e78fc18fa37acb2185c59ca94d4a964464feb50e',
+ },
+ {
+ base_version_path: '/gnuwget/wget2/merge_requests/6/diffs?diff_id=35',
+ version_index: 2,
+ created_at: '2018-10-04T09:57:39.648Z',
+ commits_count: 2,
+ latest: false,
+ short_commit_sha: '48da7e7e',
+ version_path: '/gnuwget/wget2/merge_requests/6/diffs?diff_id=35',
+ compare_path:
+ '/gnuwget/wget2/merge_requests/6/diffs?diff_id=37&start_sha=48da7e7e9a99d41c852578bd9cb541ca4d864b3e',
+ },
+ {
+ base_version_path: '/gnuwget/wget2/merge_requests/6/diffs?diff_id=20',
+ version_index: 1,
+ created_at: '2018-09-25T20:30:39.493Z',
+ commits_count: 1,
+ latest: false,
+ short_commit_sha: '47bac2ed',
+ version_path: '/gnuwget/wget2/merge_requests/6/diffs?diff_id=20',
+ compare_path:
+ '/gnuwget/wget2/merge_requests/6/diffs?diff_id=37&start_sha=47bac2ed972c5bee344c1cea159a22cd7f711dc0',
+ },
+];