summaryrefslogtreecommitdiff
path: root/spec/javascripts/vue_shared/components/markdown/suggestions_spec.js
blob: b7de40b483120ade6916319413bb482ffccf3d59 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import Vue from 'vue';
import SuggestionsComponent from '~/vue_shared/components/markdown/suggestions.vue';

const MOCK_DATA = {
  suggestions: [
    {
      id: 1,
      appliable: true,
      applied: false,
      current_user: {
        can_apply: true,
      },
      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',
        },
      ],
    },
  ],
  noteHtml: `
      <div class="suggestion">
      <div class="line">-oldtest</div>
    </div>  
    <div class="suggestion">
      <div class="line">+newtest</div>
    </div>    
  `,
  isApplied: false,
  helpPagePath: 'path_to_docs',
};

describe('Suggestion component', () => {
  let vm;
  let diffTable;

  beforeEach(done => {
    const Component = Vue.extend(SuggestionsComponent);

    vm = new Component({
      propsData: MOCK_DATA,
    }).$mount();

    diffTable = vm.generateDiff(0).$mount().$el;

    spyOn(vm, 'renderSuggestions');
    vm.renderSuggestions();
    Vue.nextTick(done);
  });

  describe('mounted', () => {
    it('renders a flash container', () => {
      expect(vm.$el.querySelector('.js-suggestions-flash')).not.toBeNull();
    });

    it('renders a container for suggestions', () => {
      expect(vm.$refs.container).not.toBeNull();
    });

    it('renders suggestions', () => {
      expect(vm.renderSuggestions).toHaveBeenCalled();
      expect(vm.$el.innerHTML.includes('oldtest')).toBe(true);
      expect(vm.$el.innerHTML.includes('newtest')).toBe(true);
    });
  });

  describe('generateDiff', () => {
    it('generates a diff table', () => {
      expect(diffTable.querySelector('.md-suggestion-diff')).not.toBeNull();
    });

    it('generates a diff table that contains contents of `oldLineContent`', () => {
      expect(diffTable.innerHTML.includes(vm.fromContent)).toBe(true);
    });

    it('generates a diff table that contains contents the suggested lines', () => {
      MOCK_DATA.suggestions[0].diff_lines.forEach(line => {
        const text = line.text.substring(1);

        expect(diffTable.innerHTML.includes(text)).toBe(true);
      });
    });

    it('generates a diff table with the correct line number for each suggested line', () => {
      const lines = diffTable.querySelectorAll('.old_line');

      expect(parseInt([...lines][0].innerHTML, 10)).toBe(5);
    });
  });
});