101 lines
2.7 KiB
JavaScript
101 lines
2.7 KiB
JavaScript
import Vue from 'vue';
|
|
import SuggestionDiffComponent from '~/vue_shared/components/markdown/suggestion_diff.vue';
|
|
import { selectDiffLines } from '~/vue_shared/components/lib/utils/diff_utils';
|
|
|
|
const MOCK_DATA = {
|
|
canApply: true,
|
|
suggestion: {
|
|
id: 1,
|
|
diff_lines: [
|
|
{
|
|
can_receive_suggestion: false,
|
|
line_code: null,
|
|
meta_data: null,
|
|
new_line: null,
|
|
old_line: 5,
|
|
rich_text: '-test',
|
|
text: '-test',
|
|
type: 'old',
|
|
},
|
|
{
|
|
can_receive_suggestion: true,
|
|
line_code: null,
|
|
meta_data: null,
|
|
new_line: 5,
|
|
old_line: null,
|
|
rich_text: '+new test',
|
|
text: '+new test',
|
|
type: 'new',
|
|
},
|
|
{
|
|
can_receive_suggestion: true,
|
|
line_code: null,
|
|
meta_data: null,
|
|
new_line: 5,
|
|
old_line: null,
|
|
rich_text: '+new test2',
|
|
text: '+new test2',
|
|
type: 'new',
|
|
},
|
|
],
|
|
},
|
|
helpPagePath: 'path_to_docs',
|
|
};
|
|
|
|
const lines = selectDiffLines(MOCK_DATA.suggestion.diff_lines);
|
|
const newLines = lines.filter(line => line.type === 'new');
|
|
|
|
describe('Suggestion Diff component', () => {
|
|
let vm;
|
|
|
|
beforeEach(done => {
|
|
const Component = Vue.extend(SuggestionDiffComponent);
|
|
|
|
vm = new Component({
|
|
propsData: MOCK_DATA,
|
|
}).$mount();
|
|
|
|
Vue.nextTick(done);
|
|
});
|
|
|
|
describe('init', () => {
|
|
it('renders a suggestion header', () => {
|
|
expect(vm.$el.querySelector('.js-suggestion-diff-header')).not.toBeNull();
|
|
});
|
|
|
|
it('renders a diff table with syntax highlighting', () => {
|
|
expect(vm.$el.querySelector('.md-suggestion-diff.js-syntax-highlight.code')).not.toBeNull();
|
|
});
|
|
|
|
it('renders the oldLineNumber', () => {
|
|
const fromLine = vm.$el.querySelector('.old_line').innerHTML;
|
|
|
|
expect(parseInt(fromLine, 10)).toBe(lines[0].old_line);
|
|
});
|
|
|
|
it('renders the oldLineContent', () => {
|
|
const fromContent = vm.$el.querySelector('.line_content.old').innerHTML;
|
|
|
|
expect(fromContent.includes(lines[0].text)).toBe(true);
|
|
});
|
|
|
|
it('renders new lines', () => {
|
|
const newLinesElements = vm.$el.querySelectorAll('.line_holder.new');
|
|
|
|
newLinesElements.forEach((line, i) => {
|
|
expect(newLinesElements[i].innerHTML.includes(newLines[i].new_line)).toBe(true);
|
|
expect(newLinesElements[i].innerHTML.includes(newLines[i].text)).toBe(true);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('applySuggestion', () => {
|
|
it('emits apply event when applySuggestion is called', () => {
|
|
const callback = () => {};
|
|
spyOn(vm, '$emit');
|
|
vm.applySuggestion(callback);
|
|
|
|
expect(vm.$emit).toHaveBeenCalledWith('apply', { suggestionId: vm.suggestion.id, callback });
|
|
});
|
|
});
|
|
});
|