summaryrefslogtreecommitdiff
path: root/spec/javascripts/issuable_spec.js.es6
blob: 2daadfa0c77b8babd066146f821e5490142fdfdd (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
/* global Issuable */
/* global Turbolinks */

require('issuable');
require('turbolinks');

(() => {
  const BASE_URL = '/user/project/issues?scope=all&state=closed';
  const DEFAULT_PARAMS = '&utf8=%E2%9C%93';

  function updateForm(formValues, form) {
    $.each(formValues, (id, value) => {
      $(`#${id}`, form).val(value);
    });
  }

  function resetForm(form) {
    $('input[name!="utf8"]', form).each((index, input) => {
      input.setAttribute('value', '');
    });
  }

  describe('Issuable', () => {
    preloadFixtures('static/issuable_filter.html.raw');

    beforeEach(() => {
      loadFixtures('static/issuable_filter.html.raw');
      Issuable.init();
    });

    it('should be defined', () => {
      expect(window.Issuable).toBeDefined();
    });

    describe('filtering', () => {
      let $filtersForm;

      beforeEach(() => {
        $filtersForm = $('.js-filter-form');
        loadFixtures('static/issuable_filter.html.raw');
        resetForm($filtersForm);
      });

      it('should contain only the default parameters', () => {
        spyOn(Turbolinks, 'visit');

        Issuable.filterResults($filtersForm);

        expect(Turbolinks.visit).toHaveBeenCalledWith(BASE_URL + DEFAULT_PARAMS);
      });

      it('should filter for the phrase "broken"', () => {
        spyOn(Turbolinks, 'visit');

        updateForm({ search: 'broken' }, $filtersForm);
        Issuable.filterResults($filtersForm);
        const params = `${DEFAULT_PARAMS}&search=broken`;

        expect(Turbolinks.visit).toHaveBeenCalledWith(BASE_URL + params);
      });

      it('should keep query parameters after modifying filter', () => {
        spyOn(Turbolinks, 'visit');

        // initial filter
        updateForm({ milestone_title: 'v1.0' }, $filtersForm);

        Issuable.filterResults($filtersForm);
        let params = `${DEFAULT_PARAMS}&milestone_title=v1.0`;
        expect(Turbolinks.visit).toHaveBeenCalledWith(BASE_URL + params);

        // update filter
        updateForm({ label_name: 'Frontend' }, $filtersForm);

        Issuable.filterResults($filtersForm);
        params = `${DEFAULT_PARAMS}&milestone_title=v1.0&label_name=Frontend`;
        expect(Turbolinks.visit).toHaveBeenCalledWith(BASE_URL + params);
      });
    });
  });
})();