Add server reducer tests

This commit is contained in:
Ken-Håvard Lieng 2017-04-25 05:13:57 +02:00
parent 164c47d1a6
commit 294114028a
2 changed files with 135 additions and 6 deletions

View File

@ -0,0 +1,128 @@
import Immutable from 'immutable';
import reducer from '../reducers/servers';
import * as actions from '../actions';
import { connect } from '../actions/server';
describe('reducers/servers', () => {
it('adds the server on CONNECT', () => {
let state = reducer(undefined, connect('127.0.0.1:1337', 'nick', {}));
expect(state.toJS()).toEqual({
'127.0.0.1': {
connected: false,
name: '127.0.0.1',
nick: 'nick'
}
});
state = reducer(state, connect('127.0.0.1:1337', 'nick', {}));
expect(state.toJS()).toEqual({
'127.0.0.1': {
connected: false,
name: '127.0.0.1',
nick: 'nick'
}
});
state = reducer(state, connect('127.0.0.2:1337', 'nick', {
name: 'srv'
}));
expect(state.toJS()).toEqual({
'127.0.0.1': {
connected: false,
name: '127.0.0.1',
nick: 'nick'
},
'127.0.0.2': {
connected: false,
name: 'srv',
nick: 'nick'
}
});
});
it('removes the server on DISCONNECT', () => {
let state = Immutable.fromJS({
srv: {},
srv2: {}
});
state = reducer(state, {
type: actions.DISCONNECT,
server: 'srv2'
});
expect(state.toJS()).toEqual({
srv: {}
});
});
it('updates the nick on SOCKET_NICK', () => {
let state = reducer(undefined, connect('127.0.0.1:1337', 'nick', {}));
state = reducer(state, {
type: actions.SOCKET_NICK,
server: '127.0.0.1',
old: 'nick',
new: 'nick2'
});
expect(state.toJS()).toEqual({
'127.0.0.1': {
connected: false,
name: '127.0.0.1',
nick: 'nick2'
}
});
});
it('adds the servers on SOCKET_SERVERS', () => {
let state = reducer(undefined, {
type: 'SOCKET_SERVERS',
data: [
{
host: '127.0.0.1',
name: 'stuff',
nick: 'nick',
connected: true
},
{
host: '127.0.0.2',
name: 'stuffz',
nick: 'nick2',
connected: false
},
]
});
expect(state.toJS()).toEqual({
'127.0.0.1': {
name: 'stuff',
nick: 'nick',
connected: true
},
'127.0.0.2': {
name: 'stuffz',
nick: 'nick2',
connected: false
}
});
});
it('updates connection status on SOCKET_CONNECTION_UPDATE', () => {
let state = reducer(undefined, connect('127.0.0.1:1337', 'nick', {}));
state = reducer(state, {
type: actions.SOCKET_CONNECTION_UPDATE,
'127.0.0.1': true
});
expect(state.toJS()).toEqual({
'127.0.0.1': {
name: '127.0.0.1',
nick: 'nick',
connected: true
}
});
});
});

View File

@ -1,5 +1,4 @@
import { Map, Record } from 'immutable';
import forEach from 'lodash/forEach';
import createReducer from '../util/createReducer';
import * as actions from '../actions';
@ -48,10 +47,12 @@ export default createReducer(Map(), {
},
[actions.SOCKET_CONNECTION_UPDATE](state, action) {
return state.withMutations(s => forEach(action, (connected, server) => {
if (s.has(server)) {
s.setIn([server, 'connected'], connected);
}
}));
return state.withMutations(s =>
Object.keys(action).forEach(server => {
if (s.has(server)) {
s.setIn([server, 'connected'], action[server]);
}
})
);
}
});