summaryrefslogtreecommitdiff
path: root/spec/javascripts/repo/components/repo_file_buttons_spec.js
blob: 701c260224f0ae23fcbdd23acc178a93dc142929 (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
import Vue from 'vue';
import repoFileButtons from '~/repo/components/repo_file_buttons.vue';
import RepoStore from '~/repo/stores/repo_store';

describe('RepoFileButtons', () => {
  function createComponent() {
    const RepoFileButtons = Vue.extend(repoFileButtons);

    return new RepoFileButtons().$mount();
  }

  afterEach(() => {
    RepoStore.openedFiles = [];
  });

  it('renders Raw, Blame, History, Permalink and Preview toggle', () => {
    const activeFile = {
      extension: 'md',
      url: 'url',
      raw_path: 'raw_path',
      blame_path: 'blame_path',
      commits_path: 'commits_path',
      permalink: 'permalink',
    };
    const activeFileLabel = 'activeFileLabel';
    RepoStore.openedFiles = new Array(1);
    RepoStore.activeFile = activeFile;
    RepoStore.activeFileLabel = activeFileLabel;
    RepoStore.editMode = true;
    RepoStore.binary = false;

    const vm = createComponent();
    const raw = vm.$el.querySelector('.raw');
    const blame = vm.$el.querySelector('.blame');
    const history = vm.$el.querySelector('.history');

    expect(vm.$el.id).toEqual('repo-file-buttons');
    expect(raw.href).toMatch(`/${activeFile.raw_path}`);
    expect(raw.textContent.trim()).toEqual('Raw');
    expect(blame.href).toMatch(`/${activeFile.blame_path}`);
    expect(blame.textContent.trim()).toEqual('Blame');
    expect(history.href).toMatch(`/${activeFile.commits_path}`);
    expect(history.textContent.trim()).toEqual('History');
    expect(vm.$el.querySelector('.permalink').textContent.trim()).toEqual('Permalink');
    expect(vm.$el.querySelector('.preview').textContent.trim()).toEqual(activeFileLabel);
  });

  it('triggers rawPreviewToggle on preview click', () => {
    const activeFile = {
      extension: 'md',
      url: 'url',
    };
    RepoStore.openedFiles = new Array(1);
    RepoStore.activeFile = activeFile;
    RepoStore.editMode = true;

    const vm = createComponent();
    const preview = vm.$el.querySelector('.preview');

    spyOn(vm, 'rawPreviewToggle');

    preview.click();

    expect(vm.rawPreviewToggle).toHaveBeenCalled();
  });

  it('does not render preview toggle if not canPreview', () => {
    const activeFile = {
      extension: 'abcd',
      url: 'url',
    };
    RepoStore.openedFiles = new Array(1);
    RepoStore.activeFile = activeFile;

    const vm = createComponent();

    expect(vm.$el.querySelector('.preview')).toBeFalsy();
  });
});