summaryrefslogtreecommitdiff
path: root/spec/javascripts/filtered_search/filtered_search_dropdown_manager_spec.js.es6
blob: 562673a4ee5056aa13fd23bc29960542c141e9ea (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
//= require filtered_search/filtered_search_tokenizer
//= require filtered_search/filtered_search_dropdown_manager

(() => {
  describe('Filtered Search Dropdown Manager', () => {
    describe('addWordToInput', () => {
      function getInputValue() {
        return document.querySelector('.filtered-search').value;
      }

      beforeEach(() => {
        const input = document.createElement('input');
        input.classList.add('filtered-search');
        document.body.appendChild(input);

        expect(input.value).toBe('');
      });

      afterEach(() => {
        document.querySelector('.filtered-search').outerHTML = '';
      });

      describe('input has no existing value', () => {
        it('should add word', () => {
          gl.FilteredSearchDropdownManager.addWordToInput('firstWord');
          expect(getInputValue()).toBe('firstWord');
        });

        it('should not add space before first word', () => {
          gl.FilteredSearchDropdownManager.addWordToInput('firstWord', true);
          expect(getInputValue()).toBe('firstWord');
        });

        it('should not add space before second word by default', () => {
          gl.FilteredSearchDropdownManager.addWordToInput('firstWord');
          expect(getInputValue()).toBe('firstWord');
          gl.FilteredSearchDropdownManager.addWordToInput('secondWord');
          expect(getInputValue()).toBe('firstWordsecondWord');
        });

        it('should add space before new word when addSpace is passed', () => {
          expect(getInputValue()).toBe('');
          gl.FilteredSearchDropdownManager.addWordToInput('firstWord');
          expect(getInputValue()).toBe('firstWord');
          gl.FilteredSearchDropdownManager.addWordToInput('secondWord', true);
          expect(getInputValue()).toBe('firstWord secondWord');
        });
      });

      describe('input has exsting value', () => {
        it('should only add the remaining characters of the word', () => {
          const lastToken = {
            key: 'author',
            value: 'roo',
          };

          document.querySelector('.filtered-search').value = `${lastToken.key}:${lastToken.value}`;
          gl.FilteredSearchDropdownManager.addWordToInput('root');
          expect(getInputValue()).toBe('author:root');
        });

        it('should only add the remaining characters of the word (contains space)', () => {
          document.querySelector('.filtered-search').value = 'label:~"test';
          gl.FilteredSearchDropdownManager.addWordToInput('~\'"test me"\'');
          expect(getInputValue()).toBe('label:~\'"test me"\'');
        });
      });
    });
  });
})();