From ba80f14d8cd6f1405768e1550aa8257528e6f448 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Fri, 2 Jun 2023 16:55:01 +0200 Subject: [PATCH] refactor store and store tests --- webapp/store/posts.js | 28 ++++++++++-- webapp/store/posts.spec.js | 90 ++++++++++++++++++++++++++++++++------ 2 files changed, 101 insertions(+), 17 deletions(-) diff --git a/webapp/store/posts.js b/webapp/store/posts.js index e20391a9c..58d786ba2 100644 --- a/webapp/store/posts.js +++ b/webapp/store/posts.js @@ -24,10 +24,23 @@ export const state = () => { const TOGGLE_POST_TYPE = (state, postType) => { const filter = clone(state.filter) - update(filter, 'postType_in', (postTypes) => xor(postTypes, [postType])) - if (isEmpty(get(filter, 'postType_in'))) delete filter.postType_in + if (postType && !(filter.postType_in && filter.postType_in.includes(postType))) { + filter.postType_in = [postType] + if (postType === 'Event') { + filter.eventStart_gte = new Date() + state.order = 'eventStart_asc' + } else { + delete filter.eventStart_gte + state.order = 'createdAt_desc' + } + } else { + delete filter.eventStart_gte + delete filter.postType_in + state.order = 'createdAt_desc' + } state.filter = filter } + const TOGGLE_UNSET_ALL_POST_TYPES_FILTERS = (state) => { const beforeEventSetInPostTypeFilter = eventSetInPostTypeFilter(state) filterPostTypes.forEach((postType) => { @@ -59,9 +72,16 @@ const TOGGLE_SET_UNSET_POST_TYPE_FILTER = (state, setPostType) => { adjustEventsEnded(state, beforeEventSetInPostTypeFilter) adjustOrder(state) } -const TOGGLE_EVENTS_ENDED = (state, value) => { - state.eventsEnded = value ? new Date() : null +const TOGGLE_EVENTS_ENDED = (state) => { + if (state.filter.eventStart_gte) { + delete state.filter.eventStart_gte + } else { + if (state.filter.postType_in && state.filter.postType_in.includes('Event')) { + state.filter.eventStart_gte = new Date() + } + } } + const TOGGLE_ORDER = (state, value) => { state.order = value } diff --git a/webapp/store/posts.spec.js b/webapp/store/posts.spec.js index 72e35ef95..123d7815b 100644 --- a/webapp/store/posts.spec.js +++ b/webapp/store/posts.spec.js @@ -233,25 +233,49 @@ describe('mutations', () => { } }) - it('creates post type filter if empty', () => { + it('creates post type filter if empty, sets event start filter and event start order', () => { state = { filter: {} } - expect(testMutation('Event')).toEqual({ postType_in: ['Event'] }) + expect(testMutation('Event')).toEqual({ + postType_in: ['Event'], + eventStart_gte: expect.any(Date), + }) + expect(getters.orderBy(state)).toEqual('eventStart_asc') }) - it('adds post type not present', () => { - state = { filter: { postType_in: ['Event'] } } - expect(testMutation('Article')).toEqual({ postType_in: ['Event', 'Article'] }) + it('changes post type if present, resets filter event start and order', () => { + state = { + filter: { + postType_in: ['Event'], + eventStart_gte: new Date(), + }, + order: 'eventStart_asc', + } + expect(testMutation('Article')).toEqual({ postType_in: ['Article'] }) + expect(getters.orderBy(state)).toEqual('createdAt_desc') }) - it('removes category id if present', () => { - state = { filter: { postType_in: ['Event', 'Article'] } } - const result = testMutation('Event') - expect(result).toEqual({ postType_in: ['Article'] }) - }) - - it('removes category filter if empty', () => { - state = { filter: { postType_in: ['Event'] } } + it('removes post type filter if same post type is present and sets order', () => { + state = { + filter: { + postType_in: ['Event'], + eventStart_gte: new Date(), + }, + order: 'eventStart_asc', + } expect(testMutation('Event')).toEqual({}) + expect(getters.orderBy(state)).toEqual('createdAt_desc') + }) + + it('removes post type filter if called with null', () => { + state = { + filter: { + postType_in: ['Event'], + eventStart_gte: new Date(), + }, + order: 'eventStart_asc', + } + expect(testMutation(null)).toEqual({}) + expect(getters.orderBy(state)).toEqual('createdAt_desc') }) it('does not get in the way of other filters', () => { @@ -265,6 +289,46 @@ describe('mutations', () => { }) }) + describe('TOGGLE_EVENTS_ENDED', () => { + beforeEach(() => { + testMutation = (postType) => { + mutations.TOGGLE_EVENTS_ENDED(state, postType) + return getters.filter(state) + } + }) + + it('does not set events ended when post type is not Event', () => { + state = { + filter: {}, + } + expect(testMutation()).toEqual({}) + }) + + it('sets events ended when post type is Event', () => { + state = { + filter: { + postType_in: ['Event'], + }, + } + expect(testMutation()).toEqual({ + postType_in: ['Event'], + eventStart_gte: expect.any(Date), + }) + }) + + it('unsets events ended when set', () => { + state = { + filter: { + postType_in: ['Event'], + eventStart_gte: new Date(), + }, + } + expect(testMutation()).toEqual({ + postType_in: ['Event'], + }) + }) + }) + describe('TOGGLE_FILTER_BY_FOLLOWED', () => { beforeEach(() => { testMutation = (userId) => {