Welcome to mirror list, hosted at ThFree Co, Russian Federation.

legacy_sidebar_header_spec.js « job « components « jobs « frontend « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 95eb10118ee65c15ef8be589791c86e25fbdf4c9 (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
107
108
109
import { shallowMount } from '@vue/test-utils';
import { extendedWrapper } from 'helpers/vue_test_utils_helper';
import JobRetryButton from '~/jobs/components/job/sidebar/job_sidebar_retry_button.vue';
import LegacySidebarHeader from '~/jobs/components/job/sidebar/legacy_sidebar_header.vue';
import createStore from '~/jobs/store';
import job, { failedJobStatus } from '../../mock_data';

describe('Legacy Sidebar Header', () => {
  let store;
  let wrapper;

  const findCancelButton = () => wrapper.findByTestId('cancel-button');
  const findRetryButton = () => wrapper.findComponent(JobRetryButton);
  const findEraseLink = () => wrapper.findByTestId('job-log-erase-link');

  const createWrapper = (props) => {
    store = createStore();

    wrapper = extendedWrapper(
      shallowMount(LegacySidebarHeader, {
        propsData: {
          job,
          ...props,
        },
        store,
      }),
    );
  };

  afterEach(() => {
    wrapper.destroy();
  });

  describe('when job log is erasable', () => {
    const path = '/root/ci-project/-/jobs/1447/erase';

    beforeEach(() => {
      createWrapper({
        erasePath: path,
      });
    });

    it('renders erase job link', () => {
      expect(findEraseLink().exists()).toBe(true);
    });

    it('erase job link has correct path', () => {
      expect(findEraseLink().attributes('href')).toBe(path);
    });
  });

  describe('when job log is not erasable', () => {
    beforeEach(() => {
      createWrapper();
    });

    it('does not render erase button', () => {
      expect(findEraseLink().exists()).toBe(false);
    });
  });

  describe('when the job is retryable', () => {
    beforeEach(() => {
      createWrapper();
    });

    it('should render the retry button', () => {
      expect(findRetryButton().props('href')).toBe(job.retry_path);
    });

    it('should have a different label when the job status is passed', () => {
      expect(findRetryButton().attributes('title')).toBe(
        LegacySidebarHeader.i18n.runAgainJobButtonLabel,
      );
    });
  });

  describe('when there is no retry path', () => {
    it('should not render a retry button', async () => {
      const copy = { ...job, retry_path: null };
      createWrapper({ job: copy });

      expect(findRetryButton().exists()).toBe(false);
    });
  });

  describe('when the job is cancelable', () => {
    beforeEach(() => {
      createWrapper();
    });

    it('should render link to cancel job', () => {
      expect(findCancelButton().props('icon')).toBe('cancel');
      expect(findCancelButton().attributes('href')).toBe(job.cancel_path);
    });
  });

  describe('when the job is failed', () => {
    describe('retry button', () => {
      it('should have a different label when the job status is failed', () => {
        createWrapper({ job: { ...job, status: failedJobStatus } });

        expect(findRetryButton().attributes('title')).toBe(
          LegacySidebarHeader.i18n.retryJobButtonLabel,
        );
      });
    });
  });
});