chore(toasts): refactor and test flash to toast logic

This commit is contained in:
Berkeley Martinez
2016-09-01 18:46:09 -07:00
parent 1a7c289324
commit 9d1e8c5a33
4 changed files with 55 additions and 17 deletions

View File

@@ -0,0 +1,16 @@
import { makeToast } from '../../common/app/toasts/redux/actions';
export default function flashToToast(flash) {
return Object.keys(flash)
.map(key => {
const messages = flash[key];
return messages.map(message => ({
message: message.msg,
type: key,
timeout: 5000
}));
})
.reduce((toasts, messages) => toasts.concat(messages), [])
.map(makeToast)
.map(({ payload }) => payload);
}

View File

@@ -0,0 +1,32 @@
import test from 'tape';
import flashToToast from './flash-to-toast';
test('client/utils/flash-to-toast.js', t => {
t.test('should return an array', t => {
t.plan(2);
const toasts = flashToToast({});
t.assert(Array.isArray(toasts), 'toasts was not an array');
t.equal(toasts.length, 0, 'toasts should be empty');
});
t.test('should convert keyed messages to typed toasts', t => {
t.plan(3);
const expected = [{ message: 'foo', type: 'info' }];
const actual = flashToToast({
info: [{ msg: 'foo' }]
});
t.equal(
expected.length,
actual.length,
'number of toasts does not match number of messages'
);
t.equal(
expected[0].type,
actual[0].type
);
t.equal(
expected[0].message,
actual[0].message
);
});
});