logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe
commit: 25ecac846f4bbb2172cbdb876c47ea2796974574
parent: 20b2675471f028a0e8b7a7c52bdfb48aed1dfb10
Author: Roger Braun <roger@rogerbraun.net>
Date:   Wed, 30 Nov 2016 18:29:44 +0100

Add users repository in users module.

Diffstat:

Msrc/modules/users.js55+++++++++++++++++++++++++++++++++++++++++--------------
Atest/unit/specs/modules/users.spec.js20++++++++++++++++++++
2 files changed, 61 insertions(+), 14 deletions(-)

diff --git a/src/modules/users.js b/src/modules/users.js @@ -1,23 +1,50 @@ import timelineFetcher from '../services/timeline_fetcher/timeline_fetcher.service.js' import backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js' +import { map, each, find, merge } from 'lodash' -const users = { - state: { - currentUser: false, - loggingIn: false +// TODO: Unify with mergeOrAdd in statuses.js +export const mergeOrAdd = (arr, item) => { + const oldItem = find(arr, {id: item.id}) + if (oldItem) { + // We already have this, so only merge the new info. + merge(oldItem, item) + return {item: oldItem, new: false} + } else { + // This is a new item, prepare it + arr.push(item) + return {item, new: true} + } +} + +export const mutations = { + setCurrentUser (state, user) { + state.currentUser = user }, - mutations: { - setCurrentUser (state, user) { - state.currentUser = user - }, - beginLogin (state) { - state.loggingIn = true - }, - endLogin (state) { - state.loggingIn = false - } + beginLogin (state) { + state.loggingIn = true + }, + endLogin (state) { + state.loggingIn = false }, + addNewUsers (state, users) { + each(users, (user) => mergeOrAdd(state.users, user)) + } +} + +export const defaultState = { + currentUser: false, + loggingIn: false, + users: [] +} + +const users = { + state: defaultState, + mutations, actions: { + addNewStatuses (store, { statuses }) { + const users = map(statuses, 'user') + store.commit('addNewUsers', users) + }, loginUser (store, userCredentials) { const commit = store.commit commit('beginLogin') diff --git a/test/unit/specs/modules/users.spec.js b/test/unit/specs/modules/users.spec.js @@ -0,0 +1,20 @@ +import { cloneDeep } from 'lodash' + +import { defaultState, mutations } from '../../../../src/modules/users.js' + +describe('The users module', () => { + it('adds new users to the set, merging in new information for old users', () => { + const state = cloneDeep(defaultState) + const user = { id: 1, name: 'Guy' } + const modUser = { id: 1, name: 'Dude' } + + mutations.addNewUsers(state, [user]) + expect(state.users).to.have.length(1) + expect(state.users).to.eql([user]) + + mutations.addNewUsers(state, [modUser]) + expect(state.users).to.have.length(1) + expect(state.users).to.eql([user]) + expect(state.users[0].name).to.eql('Dude') + }) +})