diff --git a/webapp/components/generic/SearchHeading/SearchHeading.vue b/webapp/components/generic/SearchHeading/SearchHeading.vue index fdd9357ab..6431ae66d 100644 --- a/webapp/components/generic/SearchHeading/SearchHeading.vue +++ b/webapp/components/generic/SearchHeading/SearchHeading.vue @@ -1,9 +1,7 @@ diff --git a/webapp/components/generic/SearchableInput/SearchableInput.spec.js b/webapp/components/generic/SearchableInput/SearchableInput.spec.js index db314630f..994e617d6 100644 --- a/webapp/components/generic/SearchableInput/SearchableInput.spec.js +++ b/webapp/components/generic/SearchableInput/SearchableInput.spec.js @@ -32,81 +32,79 @@ describe('SearchableInput.vue', () => { } describe('mount', () => { - describe('testing custom functions', () => { - let select + let select, dropdown + beforeEach(() => { + select = wrapper.find('.ds-select') + select.trigger('focus') + select.element.value = 'abcd' + }) + + it('opens the dropdown when focused', () => { + expect(wrapper.find('.ds-select-dropdown').isVisible()).toBe(true) + }) + + it('closes the dropdown when blurred', () => { + select.trigger('blur') + expect(wrapper.find('.ds-select-is-open').exists()).toBe(false) + }) + + it('closes the dropdown when cleared with esc key', () => { + select.trigger('input') + select.trigger('keyup.esc') + expect(wrapper.find('.ds-select-is-open').exists()).toBe(false) + }) + + it('changes the unprocessedSearchInput as the value changes', () => { + select.trigger('input') + expect(select.element.value).toBe('abcd') + }) + + it('searches for the term when enter is pressed', async () => { + select.element.value = 'ab' + select.trigger('input') + select.trigger('keyup.enter') + await expect(wrapper.emitted().query[0]).toEqual(['ab']) + }) + + it('calls onDelete when the delete key is pressed', () => { + const spy = jest.spyOn(wrapper.vm, 'onDelete') + select.trigger('input') + select.trigger('keyup.delete') + expect(spy).toHaveBeenCalledTimes(1) + }) + + describe('navigating to resource', () => { beforeEach(() => { + propsData = { options: searchResults } + wrapper = Wrapper() select = wrapper.find('.ds-select') select.trigger('focus') - select.element.value = 'abcd' }) - it('opens the select dropdown when focused on', () => { - expect(wrapper.find('.is-open').exists()).toBe(true) - }) - - it('opens the select dropdown and blurs after focused on', () => { - select.trigger('blur') - expect(wrapper.find('.is-open').exists()).toBe(false) - }) - - it('is clearable', () => { + it('pushes to post page', async () => { + select.element.value = 'Post' select.trigger('input') - select.trigger('keyup.esc') - expect(wrapper.find('.is-open').exists()).toBe(false) - }) - - it('changes the unprocessedSearchInput as the value changes', () => { - select.trigger('input') - expect(select.element.value).toBe('abcd') - }) - - it('searches for the term when enter is pressed', async () => { - select.element.value = 'ab' - select.trigger('input') - select.trigger('keyup.enter') - await expect(wrapper.emitted().query[0]).toEqual(['ab']) - }) - - it('calls onDelete when the delete key is pressed', () => { - const spy = jest.spyOn(wrapper.vm, 'onDelete') - select.trigger('input') - select.trigger('keyup.delete') - expect(spy).toHaveBeenCalledTimes(1) - }) - - describe('navigating to resource', () => { - beforeEach(() => { - propsData = { options: searchResults } - wrapper = Wrapper() - select = wrapper.find('.ds-select') - select.trigger('focus') - }) - - it('pushes to post page', async () => { - select.element.value = 'Post' - select.trigger('input') - const post = wrapper.find('.search-post') - post.trigger('click') - await Vue.nextTick().then(() => { - expect(mocks.$router.push).toHaveBeenCalledWith({ - name: 'post-id-slug', - params: { id: 'post-by-jenny', slug: 'user-post-by-jenny' }, - }) + const post = wrapper.find('.search-post') + post.trigger('click') + await Vue.nextTick().then(() => { + expect(mocks.$router.push).toHaveBeenCalledWith({ + name: 'post-id-slug', + params: { id: 'post-by-jenny', slug: 'user-post-by-jenny' }, }) }) + }) - it("pushes to user's profile", async () => { - select.element.value = 'Bob' - select.trigger('input') - const users = wrapper.findAll('.userinfo') - const bob = users.filter(item => item.text() === '@bob-der-baumeister') - bob.trigger('click') - await Vue.nextTick().then(() => { - expect(mocks.$router.push).toHaveBeenCalledWith({ - name: 'profile-id-slug', - params: { id: 'u2', slug: 'bob-der-baumeister' }, - }) + it("pushes to user's profile", async () => { + select.element.value = 'Bob' + select.trigger('input') + const users = wrapper.findAll('.userinfo') + const bob = users.filter(item => item.text() === '@bob-der-baumeister') + bob.trigger('click') + await Vue.nextTick().then(() => { + expect(mocks.$router.push).toHaveBeenCalledWith({ + name: 'profile-id-slug', + params: { id: 'u2', slug: 'bob-der-baumeister' }, }) }) }) diff --git a/webapp/components/generic/SearchableInput/SearchableInput.vue b/webapp/components/generic/SearchableInput/SearchableInput.vue index cc9269ecf..c92d22cbe 100644 --- a/webapp/components/generic/SearchableInput/SearchableInput.vue +++ b/webapp/components/generic/SearchableInput/SearchableInput.vue @@ -3,58 +3,48 @@ class="searchable-input" aria-label="search" role="search" - :class="{ - 'is-active': isActive, - 'is-open': isOpen, - }" > -
-
- - + + +
+ +