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

related_merge_requests_spec.js « components « related_merge_requests « issues « frontend « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 4d780a674be4b8f9601b58bc5fbb52ea33d9c0f1 (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
import { mount, createLocalVue } from '@vue/test-utils';
import MockAdapter from 'axios-mock-adapter';
import mockData from 'test_fixtures/issues/related_merge_requests.json';
import axios from '~/lib/utils/axios_utils';
import RelatedMergeRequests from '~/issues/related_merge_requests/components/related_merge_requests.vue';
import createStore from '~/issues/related_merge_requests/store/index';
import RelatedIssuableItem from '~/issuable/components/related_issuable_item.vue';

const API_ENDPOINT = '/api/v4/projects/2/issues/33/related_merge_requests';
const localVue = createLocalVue();

describe('RelatedMergeRequests', () => {
  let wrapper;
  let mock;

  beforeEach((done) => {
    // put the fixture in DOM as the component expects
    document.body.innerHTML = `<div id="js-issuable-app"></div>`;
    document.getElementById('js-issuable-app').dataset.initial = JSON.stringify(mockData);

    mock = new MockAdapter(axios);
    mock.onGet(`${API_ENDPOINT}?per_page=100`).reply(200, mockData, { 'x-total': 2 });

    wrapper = mount(localVue.extend(RelatedMergeRequests), {
      localVue,
      store: createStore(),
      propsData: {
        endpoint: API_ENDPOINT,
        projectNamespace: 'gitlab-org',
        projectPath: 'gitlab-ce',
      },
    });

    setImmediate(done);
  });

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

  describe('methods', () => {
    describe('getAssignees', () => {
      const assignees = [{ name: 'foo' }, { name: 'bar' }];

      describe('when there is assignees array', () => {
        it('should return assignees array', () => {
          const mr = { assignees };

          expect(wrapper.vm.getAssignees(mr)).toEqual(assignees);
        });
      });

      it('should return an array with single assingee', () => {
        const mr = { assignee: assignees[0] };

        expect(wrapper.vm.getAssignees(mr)).toEqual([assignees[0]]);
      });

      it('should return empty array when assignee is not set', () => {
        expect(wrapper.vm.getAssignees({})).toEqual([]);
        expect(wrapper.vm.getAssignees({ assignee: null })).toEqual([]);
      });
    });
  });

  describe('template', () => {
    it('should render related merge request items', () => {
      expect(wrapper.find('[data-testid="count"]').text()).toBe('2');
      expect(wrapper.findAll(RelatedIssuableItem)).toHaveLength(2);

      const props = wrapper.findAll(RelatedIssuableItem).at(1).props();
      const data = mockData[1];

      expect(props.idKey).toEqual(data.id);
      expect(props.pathIdSeparator).toEqual('!');
      expect(props.pipelineStatus).toBe(data.head_pipeline.detailed_status);
      expect(props.assignees).toEqual([data.assignee]);
      expect(props.isMergeRequest).toBe(true);
      expect(props.confidential).toEqual(false);
      expect(props.title).toEqual(data.title);
      expect(props.state).toEqual(data.state);
      expect(props.createdAt).toEqual(data.created_at);
    });
  });
});