Add vuex store tests for language filter

This commit is contained in:
roschaefer 2019-10-31 17:32:18 +01:00
parent 3c8a35d371
commit 5715d3e9d5
4 changed files with 71 additions and 7 deletions

View File

@ -73,7 +73,7 @@ describe('FilterPosts.vue', () => {
'posts/filteredCategoryIds': jest.fn(() => []), 'posts/filteredCategoryIds': jest.fn(() => []),
'posts/filteredByUsersFollowed': jest.fn(), 'posts/filteredByUsersFollowed': jest.fn(),
'posts/filteredByEmotions': jest.fn(() => []), 'posts/filteredByEmotions': jest.fn(() => []),
'posts/filteredLanguagesCodes': jest.fn(() => []), 'posts/filteredLanguageCodes': jest.fn(() => []),
} }
const openFilterPosts = () => { const openFilterPosts = () => {
const store = new Vuex.Store({ mutations, getters }) const store = new Vuex.Store({ mutations, getters })
@ -124,7 +124,7 @@ describe('FilterPosts.vue', () => {
}) })
it('sets language button attribute `primary` when corresponding language is filtered', () => { it('sets language button attribute `primary` when corresponding language is filtered', () => {
getters['posts/filteredLanguagesCodes'] = jest.fn(() => ['es']) getters['posts/filteredLanguageCodes'] = jest.fn(() => ['es'])
const wrapper = openFilterPosts() const wrapper = openFilterPosts()
spanishButton = wrapper spanishButton = wrapper
.findAll('button.language-buttons') .findAll('button.language-buttons')

View File

@ -15,7 +15,7 @@
<ds-button <ds-button
icon="check" icon="check"
@click.stop.prevent="resetLanguages" @click.stop.prevent="resetLanguages"
:primary="!filteredLanguagesCodes.length" :primary="!filteredLanguageCodes.length"
/> />
<ds-flex-item> <ds-flex-item>
<label class="language-labels">{{ $t('filter-posts.language.all') }}</label> <label class="language-labels">{{ $t('filter-posts.language.all') }}</label>
@ -34,7 +34,7 @@
<ds-flex-item width="100%" class="language-menu-item"> <ds-flex-item width="100%" class="language-menu-item">
<ds-button <ds-button
class="language-buttons" class="language-buttons"
:primary="filteredLanguagesCodes.includes(language.code)" :primary="filteredLanguageCodes.includes(language.code)"
@click.stop.prevent="toggleLanguage(language.code)" @click.stop.prevent="toggleLanguage(language.code)"
> >
{{ language.code.toUpperCase() }} {{ language.code.toUpperCase() }}
@ -65,7 +65,7 @@ export default {
}, },
computed: { computed: {
...mapGetters({ ...mapGetters({
filteredLanguagesCodes: 'posts/filteredLanguagesCodes', filteredLanguageCodes: 'posts/filteredLanguageCodes',
}), }),
}, },
methods: { methods: {

View File

@ -86,7 +86,7 @@ export const getters = {
filteredCategoryIds(state) { filteredCategoryIds(state) {
return get(state.filter, 'categories_some.id_in') || [] return get(state.filter, 'categories_some.id_in') || []
}, },
filteredLanguagesCodes(state) { filteredLanguageCodes(state) {
return get(state.filter, 'language_in') || [] return get(state.filter, 'language_in') || []
}, },
filteredByUsersFollowed(state) { filteredByUsersFollowed(state) {

View File

@ -19,12 +19,24 @@ describe('getters', () => {
expect(getters.filteredCategoryIds(state)).toEqual([24]) expect(getters.filteredCategoryIds(state)).toEqual([24])
}) })
it('returns empty array if filter is not set', () => { it('returns empty array if category filter is not set', () => {
state = { filter: { author: { followedBy_some: { id: 7 } } } } state = { filter: { author: { followedBy_some: { id: 7 } } } }
expect(getters.filteredCategoryIds(state)).toEqual([]) expect(getters.filteredCategoryIds(state)).toEqual([])
}) })
}) })
describe('filteredLanguageCodes', () => {
it('returns category ids if filter is set', () => {
state = { filter: { language_in: ['en', 'de', 'pt'] } }
expect(getters.filteredLanguageCodes(state)).toEqual(['en', 'de', 'pt'])
})
it('returns empty array if language filter is not set', () => {
state = { filter: { author: { followedBy_some: { id: 7 } } } }
expect(getters.filteredLanguageCodes(state)).toEqual([])
})
})
describe('filter', () => { describe('filter', () => {
it('returns filter', () => { it('returns filter', () => {
state = { filter: { author: { followedBy_some: { id: 7 } } } } state = { filter: { author: { followedBy_some: { id: 7 } } } }
@ -104,6 +116,19 @@ describe('getters', () => {
}) })
describe('mutations', () => { describe('mutations', () => {
describe('RESET_LANGUAGES', () => {
it('resets the languages filter', () => {
state = {
filter: {
author: { followedBy_some: { id: 7 } },
language_in: ['nl'],
},
}
mutations.RESET_LANGUAGES(state)
expect(getters.filter(state)).toEqual({ author: { followedBy_some: { id: 7 } } })
})
})
describe('RESET_CATEGORIES', () => { describe('RESET_CATEGORIES', () => {
beforeEach(() => { beforeEach(() => {
testMutation = categoryId => { testMutation = categoryId => {
@ -122,6 +147,45 @@ describe('mutations', () => {
}) })
}) })
describe('TOGGLE_LANGUAGE', () => {
beforeEach(() => {
testMutation = languageCode => {
mutations.TOGGLE_LANGUAGE(state, languageCode)
return getters.filter(state)
}
})
it('creates category filter if empty', () => {
state = { filter: {} }
expect(testMutation('de')).toEqual({ language_in: ['de'] })
})
it('adds language code to existing filter', () => {
state = { filter: { language_in: ['de'] } }
expect(testMutation('en')).toEqual({ language_in: ['de', 'en'] })
})
it('removes category id if present', () => {
state = { filter: { language_in: ['de', 'en'] } }
expect(testMutation('de')).toEqual({ language_in: ['en'] })
})
it('removes language filter if empty', () => {
state = { filter: { language_in: ['de'] } }
expect(testMutation('de')).toEqual({})
})
it('does not get in the way of other filters', () => {
state = {
filter: {
author: { followedBy_some: { id: 7 } },
language_in: ['de'],
},
}
expect(testMutation('de')).toEqual({ author: { followedBy_some: { id: 7 } } })
})
})
describe('TOGGLE_CATEGORY', () => { describe('TOGGLE_CATEGORY', () => {
beforeEach(() => { beforeEach(() => {
testMutation = categoryId => { testMutation = categoryId => {