diff --git a/app/assets/javascripts/diffs/store/actions.js b/app/assets/javascripts/diffs/store/actions.js
index d04fa5d2cae96ab0f86176e583d589e1398d5947..c60a0e7f593b01dd3e599b76a417e7789ee6daf3 100644
--- a/app/assets/javascripts/diffs/store/actions.js
+++ b/app/assets/javascripts/diffs/store/actions.js
@@ -65,6 +65,7 @@ export const assignDiscussionsToDiff = ({ state, commit }, allLineDiscussions) =
export const removeDiscussionsFromDiff = ({ state, commit }, removeDiscussion) => {
const { fileHash } = removeDiscussion;
const selectedFile = state.diffFiles.find(file => file.fileHash === fileHash);
+
if (selectedFile) {
const targetLine = selectedFile.parallelDiffLines.find(
line =>
diff --git a/spec/javascripts/diffs/store/actions_spec.js b/spec/javascripts/diffs/store/actions_spec.js
index 8b52c9bffc795cb596fddc052b57268f812f7858..44c2eb27e0d6027386f1261e3e8fee65a52185a8 100644
--- a/spec/javascripts/diffs/store/actions_spec.js
+++ b/spec/javascripts/diffs/store/actions_spec.js
@@ -10,10 +10,27 @@ import * as types from '~/diffs/store/mutation_types';
import { reduceDiscussionsToLineCodes } from '~/notes/stores/utils';
import axios from '~/lib/utils/axios_utils';
import testAction from '../../helpers/vuex_action_helper';
-import mockFile from '../mock_data/diff_file';
-import mockDiscussion from '../mock_data/diff_discussions';
describe('DiffsStoreActions', () => {
+ const originalMethods = {
+ requestAnimationFrame: global.requestAnimationFrame,
+ requestIdleCallback: global.requestIdleCallback,
+ };
+
+ beforeEach(() => {
+ ['requestAnimationFrame', 'requestIdleCallback'].forEach(method => {
+ global[method] = cb => {
+ cb();
+ };
+ });
+ });
+
+ afterEach(() => {
+ ['requestAnimationFrame', 'requestIdleCallback'].forEach(method => {
+ global[method] = originalMethods[method];
+ });
+ });
+
describe('setBaseConfig', () => {
it('should set given endpoint and project path', done => {
const endpoint = '/diffs/set/endpoint';
@@ -58,8 +75,40 @@ describe('DiffsStoreActions', () => {
describe('assignDiscussionsToDiff', () => {
it('should merge discussions into diffs', done => {
- const state = { diffFiles: [Object.assign({}, mockFile)] };
- const singleDiscussion = Object.assign({}, mockDiscussion);
+ const state = {
+ diffFiles: [
+ {
+ fileHash: 'ABC',
+ parallelDiffLines: [
+ {
+ left: {
+ lineCode: 'ABC_1_1',
+ discussions: [],
+ },
+ right: {
+ lineCode: 'ABC_1_1',
+ discussions: [],
+ },
+ },
+ ],
+ highlightedDiffLines: [
+ {
+ lineCode: 'ABC_1_1',
+ discussions: [],
+ },
+ ],
+ },
+ ],
+ };
+ const singleDiscussion = {
+ line_code: 'ABC_1_1',
+ diff_discussion: {},
+ diff_file: {
+ file_hash: 'ABC',
+ },
+ resolvable: true,
+ };
+
const discussions = reduceDiscussionsToLineCodes([singleDiscussion]);
testAction(
@@ -71,32 +120,20 @@ describe('DiffsStoreActions', () => {
type: types.SET_LINE_DISCUSSIONS,
payload: {
line: {
- lineCode: '1c497fbb3a46b78edf04cc2a2fa33f67e3ffbe2a_1_2',
- type: 'new',
- oldLine: null,
- newLine: 2,
+ lineCode: 'ABC_1_1',
discussions: [],
- text: '+\n',
- richText: '\n',
- metaData: null,
},
- discussions: discussions['1c497fbb3a46b78edf04cc2a2fa33f67e3ffbe2a_1_2'],
+ discussions: [singleDiscussion],
},
},
{
type: types.SET_LINE_DISCUSSIONS,
payload: {
line: {
- lineCode: '1c497fbb3a46b78edf04cc2a2fa33f67e3ffbe2a_1_2',
- type: 'new',
- oldLine: null,
- newLine: 2,
+ lineCode: 'ABC_1_1',
discussions: [],
- text: '+\n',
- richText: '+\n',
- metaData: null,
},
- discussions: discussions['1c497fbb3a46b78edf04cc2a2fa33f67e3ffbe2a_1_2'],
+ discussions: [singleDiscussion],
},
},
],
@@ -110,10 +147,39 @@ describe('DiffsStoreActions', () => {
describe('removeDiscussionsFromDiff', () => {
it('should remove discussions from diffs', done => {
- const state = { diffFiles: [Object.assign({}, mockFile)] };
- const singleDiscussion = Object.assign({}, mockDiscussion);
-
- reduceDiscussionsToLineCodes([singleDiscussion]);
+ const state = {
+ diffFiles: [
+ {
+ fileHash: 'ABC',
+ parallelDiffLines: [
+ {
+ left: {
+ lineCode: 'ABC_1_1',
+ discussions: [
+ {
+ id: 1,
+ },
+ ],
+ },
+ right: {
+ lineCode: 'ABC_1_1',
+ discussions: [],
+ },
+ },
+ ],
+ highlightedDiffLines: [
+ {
+ lineCode: 'ABC_1_1',
+ discussions: [],
+ },
+ ],
+ },
+ ],
+ };
+ const singleDiscussion = {
+ fileHash: 'ABC',
+ line_code: 'ABC_1_1',
+ };
testAction(
actions.removeDiscussionsFromDiff,
@@ -123,27 +189,19 @@ describe('DiffsStoreActions', () => {
{
type: types.REMOVE_LINE_DISCUSSIONS,
payload: {
- lineCode: '1c497fbb3a46b78edf04cc2a2fa33f67e3ffbe2a_1_2',
- type: 'new',
- oldLine: null,
- newLine: 2,
- discussions: [],
- text: '+\n',
- richText: '\n',
- metaData: null,
+ lineCode: 'ABC_1_1',
+ discussions: [
+ {
+ id: 1,
+ },
+ ],
},
},
{
type: types.REMOVE_LINE_DISCUSSIONS,
payload: {
- lineCode: '1c497fbb3a46b78edf04cc2a2fa33f67e3ffbe2a_1_2',
- type: 'new',
- oldLine: null,
- newLine: 2,
+ lineCode: 'ABC_1_1',
discussions: [],
- text: '+\n',
- richText: '+\n',
- metaData: null,
},
},
],
@@ -157,11 +215,6 @@ describe('DiffsStoreActions', () => {
describe('startRenderDiffsQueue', () => {
it('should set all files to RENDER_FILE', done => {
- const actualRAF = global.requestAnimationFrame;
- global.requestAnimationFrame = cb => {
- cb();
- };
-
const state = {
diffFiles: [
{
@@ -187,8 +240,6 @@ describe('DiffsStoreActions', () => {
actions
.startRenderDiffsQueue({ state, commit: pseudoCommit })
.then(() => {
- global.requestAnimationFrame = actualRAF;
-
expect(state.diffFiles[0].renderIt).toBeTruthy();
expect(state.diffFiles[1].renderIt).toBeTruthy();