mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-13 07:46:06 +00:00
It's sometimes unbelievable how many bugs you find when doing refactoring. This time there was some apparent confusion about `commentsCount` and `commentedCount`. The counters on the post card were never showing the correct number.
144 lines
4.2 KiB
JavaScript
144 lines
4.2 KiB
JavaScript
import { mount, createLocalVue } from '@vue/test-utils'
|
|
import SearchInput from './SearchInput.vue'
|
|
import Vuex from 'vuex'
|
|
import Styleguide from '@human-connection/styleguide'
|
|
const localVue = createLocalVue()
|
|
|
|
localVue.use(Vuex)
|
|
localVue.use(Styleguide)
|
|
localVue.filter('truncate', () => 'truncated string')
|
|
localVue.filter('dateTime', () => Date.now)
|
|
|
|
describe('SearchInput.vue', () => {
|
|
let mocks
|
|
let propsData
|
|
|
|
beforeEach(() => {
|
|
propsData = {}
|
|
})
|
|
|
|
describe('mount', () => {
|
|
const Wrapper = () => {
|
|
mocks = {
|
|
$t: () => {},
|
|
}
|
|
return mount(SearchInput, { mocks, localVue, propsData })
|
|
}
|
|
|
|
it('renders', () => {
|
|
expect(Wrapper().is('div')).toBe(true)
|
|
})
|
|
|
|
it('has id "nav-search"', () => {
|
|
expect(Wrapper().contains('#nav-search')).toBe(true)
|
|
})
|
|
|
|
it('defaults to an empty value', () => {
|
|
expect(Wrapper().vm.value).toBe('')
|
|
})
|
|
|
|
it('defaults to id "nav-search"', () => {
|
|
expect(Wrapper().vm.id).toBe('nav-search')
|
|
})
|
|
|
|
it('default to a 300 millisecond delay from the time the user stops typing to when the search starts', () => {
|
|
expect(Wrapper().vm.delay).toEqual(300)
|
|
})
|
|
|
|
it('defaults to an empty array as results', () => {
|
|
expect(Wrapper().vm.results).toEqual([])
|
|
})
|
|
|
|
it('defaults to pending false, as in the search is not pending', () => {
|
|
expect(Wrapper().vm.pending).toBe(false)
|
|
})
|
|
|
|
it('accepts values as a string', () => {
|
|
propsData = { value: 'abc' }
|
|
const wrapper = Wrapper()
|
|
expect(wrapper.vm.value).toEqual('abc')
|
|
})
|
|
|
|
describe('testing custom functions', () => {
|
|
let select
|
|
let wrapper
|
|
|
|
beforeEach(() => {
|
|
wrapper = Wrapper()
|
|
select = wrapper.find('.ds-select')
|
|
select.trigger('focus')
|
|
select.element.value = 'abcd'
|
|
})
|
|
|
|
it('opens the select dropdown when focused on', () => {
|
|
expect(wrapper.vm.isOpen).toBe(true)
|
|
})
|
|
|
|
it('opens the select dropdown and blurs after focused on', () => {
|
|
select.trigger('blur')
|
|
expect(wrapper.vm.isOpen).toBe(false)
|
|
})
|
|
|
|
it('is clearable', () => {
|
|
select.trigger('input')
|
|
select.trigger('keyup.esc')
|
|
expect(wrapper.emitted().clear.length).toBe(1)
|
|
})
|
|
|
|
it('changes the unprocessedSearchInput as the value changes', () => {
|
|
select.trigger('input')
|
|
expect(wrapper.vm.unprocessedSearchInput).toBe('abcd')
|
|
})
|
|
|
|
it('searches for the term when enter is pressed', async () => {
|
|
select.trigger('input')
|
|
select.trigger('keyup.enter')
|
|
await expect(wrapper.emitted().search[0]).toEqual(['abcd'])
|
|
})
|
|
|
|
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)
|
|
})
|
|
|
|
it('calls query when a user starts a search by pressing enter', () => {
|
|
const spy = jest.spyOn(wrapper.vm, 'query')
|
|
select.trigger('input')
|
|
select.trigger('keyup.enter')
|
|
expect(spy).toHaveBeenCalledWith('abcd')
|
|
})
|
|
|
|
it('calls onSelect when a user selects an item in the search dropdown menu', async () => {
|
|
// searched for term in the browser, copied the results from Vuex in Vue dev tools
|
|
propsData = {
|
|
results: [
|
|
{
|
|
__typename: 'Post',
|
|
author: {
|
|
__typename: 'User',
|
|
id: 'u5',
|
|
name: 'Trick',
|
|
slug: 'trick',
|
|
},
|
|
commentsCount: 0,
|
|
createdAt: '2019-03-13T11:00:20.835Z',
|
|
id: 'p10',
|
|
label: 'Eos aut illo omnis quis eaque et iure aut.',
|
|
shoutedCount: 0,
|
|
slug: 'eos-aut-illo-omnis-quis-eaque-et-iure-aut',
|
|
value: 'Eos aut illo omnis quis eaque et iure aut.',
|
|
},
|
|
],
|
|
}
|
|
wrapper = Wrapper()
|
|
select.trigger('input')
|
|
const results = wrapper.find('.ds-select-option')
|
|
results.trigger('click')
|
|
await expect(wrapper.emitted().select[0]).toEqual(propsData.results)
|
|
})
|
|
})
|
|
})
|
|
})
|