diff --git a/backend/src/schema/types/type/EMOTED.gql b/backend/src/schema/types/type/EMOTED.gql index c41a75228..cefb26f21 100644 --- a/backend/src/schema/types/type/EMOTED.gql +++ b/backend/src/schema/types/type/EMOTED.gql @@ -16,7 +16,7 @@ input _EMOTEDInput { } input _PostEMOTEDFilter { - emotion: Emotion + emotion_in: [Emotion] createdAt: String updatedAt: String } diff --git a/webapp/components/FilterPosts/FilterPosts.spec.js b/webapp/components/FilterPosts/FilterPosts.spec.js index 75991c4e5..c0ad56843 100644 --- a/webapp/components/FilterPosts/FilterPosts.spec.js +++ b/webapp/components/FilterPosts/FilterPosts.spec.js @@ -61,7 +61,7 @@ describe('FilterPosts.vue', () => { }, 'postsFilter/filteredCategoryIds': jest.fn(() => []), 'postsFilter/filteredByUsersFollowed': jest.fn(), - 'postsFilter/filteredByEmotions': jest.fn(() => jest.fn()), + 'postsFilter/filteredByEmotions': jest.fn(() => []), } const openFilterPosts = () => { const store = new Vuex.Store({ mutations, getters }) diff --git a/webapp/components/FilterPosts/GeneralFilterMenuItems.vue b/webapp/components/FilterPosts/GeneralFilterMenuItems.vue index 8e79ee622..4dd79591a 100644 --- a/webapp/components/FilterPosts/GeneralFilterMenuItems.vue +++ b/webapp/components/FilterPosts/GeneralFilterMenuItems.vue @@ -32,7 +32,7 @@ -
+
xor(emotions, [emotion])) + if (isEmpty(get(filter, 'emotions_some.emotion_in'))) delete filter.emotions_some + state.filter = filter }, } @@ -68,7 +61,7 @@ export const getters = { filteredByUsersFollowed(state) { return !!get(state.filter, 'author.followedBy_some.id') }, - filteredByEmotions: state => emotion => { - return get(state.filter, 'emotions_in.emotion') === emotion + filteredByEmotions(state) { + return get(state.filter, 'emotions_some.emotion_in') || [] }, } diff --git a/webapp/store/postsFilter.spec.js b/webapp/store/postsFilter.spec.js index f06b4a31d..68a3dbd6e 100644 --- a/webapp/store/postsFilter.spec.js +++ b/webapp/store/postsFilter.spec.js @@ -43,6 +43,30 @@ describe('getters', () => { expect(getters.filteredByUsersFollowed(state)).toBe(false) }) }) + + describe('filteredByEmotions', () => { + it('returns an emotions array if filter is set', () => { + state = { filter: { emotions_some: { emotion_in: ['sad'] } } } + expect(getters.filteredByEmotions(state)).toEqual(['sad']) + }) + + it('returns an emotions array even when other filters are set', () => { + state = { + filter: { emotions_some: { emotion_in: ['sad'] }, categories_some: { id_in: [23] } }, + } + expect(getters.filteredByEmotions(state)).toEqual(['sad']) + }) + + it('returns empty array if filter is not set', () => { + state = { filter: {} } + expect(getters.filteredByEmotions(state)).toEqual([]) + }) + + it('returns empty array if another filter is set, but not emotions', () => { + state = { filter: { categories_some: { id_in: [23] } } } + expect(getters.filteredByEmotions(state)).toEqual([]) + }) + }) }) describe('mutations', () => {