From 89204c22f15720080f71e424e50bad9485a49172 Mon Sep 17 00:00:00 2001 From: Clement Ho Date: Thu, 15 Dec 2016 12:19:03 -0600 Subject: [PATCH] Add specs for addWordToInput --- ...ltered_search_dropdown_manager_spec.js.es6 | 76 ++++++++++++++----- 1 file changed, 55 insertions(+), 21 deletions(-) diff --git a/spec/javascripts/filtered_search/filtered_search_dropdown_manager_spec.js.es6 b/spec/javascripts/filtered_search/filtered_search_dropdown_manager_spec.js.es6 index 4a358bd43e3..17d414aaad1 100644 --- a/spec/javascripts/filtered_search/filtered_search_dropdown_manager_spec.js.es6 +++ b/spec/javascripts/filtered_search/filtered_search_dropdown_manager_spec.js.es6 @@ -4,51 +4,85 @@ (() => { describe('Filtered Search Dropdown Manager', () => { describe('addWordToInput', () => { - describe('add word and when lastToken is an empty object', () => { - function getInput() { - return document.querySelector('.filtered-search'); - } + 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', () => { beforeEach(() => { spyOn(gl.FilteredSearchTokenizer, 'processTokens') .and.callFake(() => ({ lastToken: {}, })); - - const input = document.createElement('input'); - input.classList.add('filtered-search'); - document.body.appendChild(input); - - expect(input.value).toBe(''); - }); - - afterEach(() => { - document.querySelector('.filtered-search').outerHTML = ''; }); it('should add word', () => { gl.FilteredSearchDropdownManager.addWordToInput('firstWord'); - expect(getInput().value).toBe('firstWord'); + expect(getInputValue()).toBe('firstWord'); }); it('should not add space before first word', () => { gl.FilteredSearchDropdownManager.addWordToInput('firstWord', true); - expect(getInput().value).toBe('firstWord'); + expect(getInputValue()).toBe('firstWord'); }); it('should not add space before second word by default', () => { gl.FilteredSearchDropdownManager.addWordToInput('firstWord'); - expect(getInput().value).toBe('firstWord'); + expect(getInputValue()).toBe('firstWord'); gl.FilteredSearchDropdownManager.addWordToInput('secondWord'); - expect(getInput().value).toBe('firstWordsecondWord'); + expect(getInputValue()).toBe('firstWordsecondWord'); }); it('should add space before new word when addSpace is passed', () => { - expect(getInput().value).toBe(''); + expect(getInputValue()).toBe(''); gl.FilteredSearchDropdownManager.addWordToInput('firstWord'); - expect(getInput().value).toBe('firstWord'); + expect(getInputValue()).toBe('firstWord'); gl.FilteredSearchDropdownManager.addWordToInput('secondWord', true); - expect(getInput().value).toBe('firstWord secondWord'); + 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', + }; + + spyOn(gl.FilteredSearchTokenizer, 'processTokens').and.callFake(() => ({ + lastToken, + })); + + 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)', () => { + const lastToken = { + key: 'label', + value: 'test me', + }; + + spyOn(gl.FilteredSearchTokenizer, 'processTokens').and.callFake(() => ({ + lastToken, + })); + + document.querySelector('.filtered-search').value = `${lastToken.key}:"${lastToken.value}"`; + gl.FilteredSearchDropdownManager.addWordToInput('~\'"test me"\''); + expect(getInputValue()).toBe('label:~\'"test me"\''); }); }); });