# HG changeset patch # User ymh # Date 1495538134 -7200 # Node ID 3b5d37d84cfe60f80853702e7595b1f15d53c958 # Parent b52921a63e775356bb616f79d1e1a5fc8125471c Some code rename and reorg + basic tests diff -r b52921a63e77 -r 3b5d37d84cfe client/package.json --- a/client/package.json Mon May 22 17:59:19 2017 +0200 +++ b/client/package.json Tue May 23 13:15:34 2017 +0200 @@ -2,6 +2,7 @@ "name": "client", "version": "0.1.0", "private": true, + "homepage": ".", "dependencies": { "bootstrap-sass": "^3.3.7", "immutable": "^3.8.1", @@ -14,9 +15,11 @@ "uuid": "^3.0.1" }, "devDependencies": { + "enzyme": "^2.8.2", "node-sass-chokidar": "^0.0.1", "npm-run-all": "^4.0.2", - "react-scripts": "1.0.2" + "react-scripts": "1.0.2", + "react-test-renderer": "^15.5.4" }, "scripts": { "build-css": "node-sass-chokidar --include-path ./src --include-path ./node_modules --include-path ./node_modules/bootstrap-sass/assets/stylesheets src/ -o src/", diff -r b52921a63e77 -r 3b5d37d84cfe client/src/App.test.js --- a/client/src/App.test.js Mon May 22 17:59:19 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import App from './App'; -import {Provider} from 'react-redux'; - -import configureStore from './store/configure-store'; - -const store = configureStore(); - -it('renders without crashing', () => { - const div = document.createElement('div'); - ReactDOM.render( - - - , - div); -}); diff -r b52921a63e77 -r 3b5d37d84cfe client/src/__tests__/App.test.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/__tests__/App.test.js Tue May 23 13:15:34 2017 +0200 @@ -0,0 +1,17 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import {Provider} from 'react-redux'; + +import App from '../App'; +import configureStore from '../store/configureStore'; + +const store = configureStore(); + +it('renders without crashing', () => { + const div = document.createElement('div'); + ReactDOM.render( + + + , + div); +}); diff -r b52921a63e77 -r 3b5d37d84cfe client/src/actions/__tests__/notesActions.test.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/actions/__tests__/notesActions.test.js Tue May 23 13:15:34 2017 +0200 @@ -0,0 +1,22 @@ +// cf. http://redux.js.org/docs/recipes/WritingTests.html + +import * as actions from '../notesActions' +import * as types from '../../constants/actionTypes' + +describe('actions', () => { + + it('should create an action to add a note', () => { + const text = 'test note' + const expectedAction = { + type: types.ADD_NOTE, + note: { + id: expect.stringMatching(/[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}/), + text: text + } + } + + const receivedAction = actions.addNote(text); + expect(receivedAction).toMatchObject(expectedAction); + + }) +}) \ No newline at end of file diff -r b52921a63e77 -r 3b5d37d84cfe client/src/actions/action-types.js --- a/client/src/actions/action-types.js Mon May 22 17:59:19 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -export const ADD_NOTE = 'ADD_NOTE'; \ No newline at end of file diff -r b52921a63e77 -r 3b5d37d84cfe client/src/actions/notes-actions.js --- a/client/src/actions/notes-actions.js Mon May 22 17:59:19 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -import * as types from './action-types'; - -import uuidV1 from 'uuid/v1'; - -export const addNote = (noteText) => { - return { - type: types.ADD_NOTE, - note: { - id: uuidV1(), - text: noteText - } - }; -} diff -r b52921a63e77 -r 3b5d37d84cfe client/src/actions/notesActions.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/actions/notesActions.js Tue May 23 13:15:34 2017 +0200 @@ -0,0 +1,13 @@ +import uuidV1 from 'uuid/v1'; + +import * as types from '../constants/actionTypes'; + +export const addNote = (noteText) => { + return { + type: types.ADD_NOTE, + note: { + id: uuidV1(), + text: noteText + } + }; +} diff -r b52921a63e77 -r 3b5d37d84cfe client/src/components/NotesContainer.js --- a/client/src/components/NotesContainer.js Mon May 22 17:59:19 2017 +0200 +++ b/client/src/components/NotesContainer.js Tue May 23 13:15:34 2017 +0200 @@ -7,7 +7,7 @@ import { Grid, Row, Col} from 'react-bootstrap'; -import * as notesActions from '../actions/notes-actions'; +import * as notesActions from '../actions/notesActions'; import NotesList from './NotesList'; import NoteInput from './NoteInput'; diff -r b52921a63e77 -r 3b5d37d84cfe client/src/components/__tests__/Note.test.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/components/__tests__/Note.test.js Tue May 23 13:15:34 2017 +0200 @@ -0,0 +1,39 @@ +import React from 'react'; +import { shallow } from 'enzyme'; +import Note from '../Note'; + + +const setup = propOverrides => { + const props = Object.assign({ + note: { + id: 'abc', + text: 'test text' + } + }, propOverrides); + + const wrapper = shallow(); + + return { + props, + wrapper, + } +} + +describe('Notes container Component', () => { + test('render', () => { + const { wrapper } = setup() + expect(wrapper.exists()).toBe(true) + }); + + test('contains note text', () => { + const { wrapper } = setup(); + expect(wrapper.text()).toBe('test text'); + }); + + test('contains note id', () => { + const { wrapper } = setup(); + expect(wrapper.first().prop('id')).toBe('note-abc'); + }); + + +}); \ No newline at end of file diff -r b52921a63e77 -r 3b5d37d84cfe client/src/components/__tests__/NoteInput.test.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/components/__tests__/NoteInput.test.js Tue May 23 13:15:34 2017 +0200 @@ -0,0 +1,40 @@ +import React from 'react'; +import { shallow, mount } from 'enzyme'; +import NoteInput from '../NoteInput'; + +const setup = (propOverrides, doMount=false) => { + const props = Object.assign({ + addNote: jest.fn() + }, propOverrides); + + const renderFn = doMount?mount:shallow; + const wrapper = renderFn(); + + return { + props, + wrapper, + } +}; + +describe('Notes container Component', () => { + test('render', () => { + const { wrapper } = setup(); + expect(wrapper.exists()).toBe(true) + }); + + test('click button', () => { + const { props, wrapper } = setup({}, true); + wrapper.find('button').simulate('click'); + expect(props.addNote.mock.calls.length).toBe(1); + }); + + test('note value on clickbutton', () => { + const { props, wrapper } = setup({}, true); + wrapper.find('textarea').simulate('change', {target: {value: 'note text'}}); + wrapper.find('button').simulate('click'); + expect(props.addNote.mock.calls.length).toBe(1); + expect(props.addNote.mock.calls[0]).toEqual(['note text']); + }); + +}); + diff -r b52921a63e77 -r 3b5d37d84cfe client/src/components/__tests__/NotesContainer.test.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/components/__tests__/NotesContainer.test.js Tue May 23 13:15:34 2017 +0200 @@ -0,0 +1,40 @@ +import React from 'react'; +import { shallow } from 'enzyme'; +import NotesContainer from '../NotesContainer'; +import {createStore} from 'redux'; +import Immutable from 'immutable'; + +const initialState = Immutable.Map({ + notes: Immutable.List([]) +}); + + +const setup = propOverrides => { + const props = Object.assign({ + store: createStore((state) => { return state; }, initialState) + }, propOverrides); + + const wrapper = shallow().dive(); + + return { + props, + wrapper, + } +} + +describe('Notes container Component', () => { + test('render', () => { + const { wrapper } = setup() + expect(wrapper.exists()).toBe(true) + }); + + test('contains notes list', () => { + const { wrapper } = setup(); + expect(wrapper.find('NotesList').exists()).toBe(true); + }); + + test('contains note input', () => { + const { wrapper } = setup(); + expect(wrapper.find('NoteInput').exists()).toBe(true); + }); +}); diff -r b52921a63e77 -r 3b5d37d84cfe client/src/components/__tests__/NotesList.test.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/components/__tests__/NotesList.test.js Tue May 23 13:15:34 2017 +0200 @@ -0,0 +1,58 @@ +import React from 'react'; +import { shallow } from 'enzyme'; +import NotesList from '../NotesList'; +import Immutable from 'immutable'; + +const setup = propOverrides => { + const props = Object.assign({ + notes: Immutable.List([{ + id: 'note1', + text: 'test text 1' + }, + { + id: 'note2', + text: 'test text 2' + }, + { + id: 'note3', + text: 'test text 3' + }]) + }, propOverrides); + + const wrapper = shallow(); + + return { + props, + wrapper, + } +}; + +describe('Notes container Component', () => { + test('render', () => { + const { wrapper } = setup(); + expect(wrapper.exists()).toBe(true) + }); + + test('test note nb', () => { + const { wrapper } = setup(); + expect(wrapper.find('Note').getNodes()).toHaveLength(3); + }); + + test('test node key', () => { + const { wrapper } = setup(); + wrapper.find('li').forEach((node, i) => { + expect(node.key()).toBe('note'+(i+1)); + }); + }); + + test('test node note', () => { + const { wrapper } = setup(); + wrapper.find('Note').forEach((node, i) => { + const {note} = node.props(); + expect(note.id).toBe('note'+(i+1)); + expect(note.text).toBe('test text '+(i+1)); + }); + }); + +}); + diff -r b52921a63e77 -r 3b5d37d84cfe client/src/constants/actionTypes.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/constants/actionTypes.js Tue May 23 13:15:34 2017 +0200 @@ -0,0 +1,1 @@ +export const ADD_NOTE = 'ADD_NOTE'; \ No newline at end of file diff -r b52921a63e77 -r 3b5d37d84cfe client/src/index.js --- a/client/src/index.js Mon May 22 17:59:19 2017 +0200 +++ b/client/src/index.js Tue May 23 13:15:34 2017 +0200 @@ -1,10 +1,11 @@ import React from 'react'; import ReactDOM from 'react-dom'; +import {Provider} from 'react-redux'; + import App from './App'; -import registerServiceWorker from './registerServiceWorker'; import './index.css'; -import {Provider} from 'react-redux'; -import configureStore from './store/configure-store'; +import registerServiceWorker from './registerServiceWorker'; +import configureStore from './store/configureStore'; const store = configureStore(); diff -r b52921a63e77 -r 3b5d37d84cfe client/src/reducers/__tests__/notesReducer.test.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/reducers/__tests__/notesReducer.test.js Tue May 23 13:15:34 2017 +0200 @@ -0,0 +1,94 @@ +// cf http://redux.js.org/docs/recipes/WritingTests.html + +import Immutable from 'immutable'; + +import uuidV1 from 'uuid/v1'; + +import reducer from '../notesReducer' +import * as types from '../../constants/ActionTypes' +import noteRecord from '../../store/noteRecord'; + +describe('note reducer', () => { + it('should return the initial state', () => { + expect( + reducer(undefined, {}) + ).toEqual(Immutable.List([])) + }); + + it('should handle ADD_NOTE', () => { + + const newId = uuidV1(); + expect( + reducer(Immutable.List([]), { + type: types.ADD_NOTE, + note: { + id: newId, + text: 'Run the tests' + } + }) + ).toEqual( + Immutable.List([ + new noteRecord({ + id: newId, + text: 'Run the tests', + }) + ]) + ); + + const initialStore = Immutable.List([ + new noteRecord({ + id: uuidV1(), + text: 'origial note', + }) + ]); + expect( + reducer(initialStore, { + type: types.ADD_NOTE, + note: { + id: newId, + text: 'Run the tests' + } + }) + ).toEqual( + initialStore.push( + new noteRecord({ + id: newId, + text: 'Run the tests', + }) + ) + ); + + }); + + + +}); + +// expect( +// reducer( +// [ +// { +// text: 'Use Redux', +// completed: false, +// id: 0 +// } +// ], +// { +// type: types.ADD_TODO, +// text: 'Run the tests' +// } +// ) +// ).toEqual( +// [ +// { +// text: 'Run the tests', +// completed: false, +// id: 1 +// }, +// { +// text: 'Use Redux', +// completed: false, +// id: 0 +// } +// ] +// ) diff -r b52921a63e77 -r 3b5d37d84cfe client/src/reducers/index.js --- a/client/src/reducers/index.js Mon May 22 17:59:19 2017 +0200 +++ b/client/src/reducers/index.js Tue May 23 13:15:34 2017 +0200 @@ -1,6 +1,7 @@ -import notes from './notes-reducer'; import {combineReducers} from 'redux-immutable'; +import notes from './notesReducer'; + const rootReducer = combineReducers({ notes }); diff -r b52921a63e77 -r 3b5d37d84cfe client/src/reducers/notes-reducer.js --- a/client/src/reducers/notes-reducer.js Mon May 22 17:59:19 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -import * as types from '../actions/action-types'; -import Immutable from 'immutable'; - -const noteRecord = Immutable.Record({id:'', text: ''}); - -export default (state = Immutable.List([]), action) => { - switch (action.type) { - case types.ADD_NOTE: - return state.push(new noteRecord(action.note)); - default: - return state; - } -}; diff -r b52921a63e77 -r 3b5d37d84cfe client/src/reducers/notesReducer.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/reducers/notesReducer.js Tue May 23 13:15:34 2017 +0200 @@ -0,0 +1,14 @@ +import Immutable from 'immutable'; + +import * as types from '../constants/actionTypes'; +import noteRecord from '../store/noteRecord'; + + +export default (state = Immutable.List([]), action) => { + switch (action.type) { + case types.ADD_NOTE: + return state.push(new noteRecord(action.note)); + default: + return state; + } +}; diff -r b52921a63e77 -r 3b5d37d84cfe client/src/store/configure-store.js --- a/client/src/store/configure-store.js Mon May 22 17:59:19 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -import rootReducer from '../reducers'; -import {createStore} from 'redux'; -import Immutable from 'immutable'; - -const storeInitialState = Immutable.Map({ - notes: Immutable.List([]) -}); - -export default (initialState = storeInitialState) => { - return createStore(rootReducer, initialState); -}; diff -r b52921a63e77 -r 3b5d37d84cfe client/src/store/configureStore.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/store/configureStore.js Tue May 23 13:15:34 2017 +0200 @@ -0,0 +1,11 @@ +import rootReducer from '../reducers'; +import {createStore} from 'redux'; +import Immutable from 'immutable'; + +const storeInitialState = Immutable.Map({ + notes: Immutable.List([]) +}); + +export default (initialState = storeInitialState) => { + return createStore(rootReducer, initialState); +}; diff -r b52921a63e77 -r 3b5d37d84cfe client/src/store/noteRecord.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/store/noteRecord.js Tue May 23 13:15:34 2017 +0200 @@ -0,0 +1,3 @@ +import Immutable from 'immutable'; + +export default Immutable.Record({id:'', text: ''}); \ No newline at end of file diff -r b52921a63e77 -r 3b5d37d84cfe client/yarn.lock --- a/client/yarn.lock Mon May 22 17:59:19 2017 +0200 +++ b/client/yarn.lock Tue May 23 13:15:34 2017 +0200 @@ -1232,6 +1232,27 @@ strip-ansi "^3.0.0" supports-color "^2.0.0" +cheerio@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash.assignin "^4.0.9" + lodash.bind "^4.1.4" + lodash.defaults "^4.0.1" + lodash.filter "^4.4.0" + lodash.flatten "^4.2.0" + lodash.foreach "^4.3.0" + lodash.map "^4.4.0" + lodash.merge "^4.4.0" + lodash.pick "^4.2.1" + lodash.reduce "^4.4.0" + lodash.reject "^4.4.0" + lodash.some "^4.4.0" + chokidar@^1.4.3, chokidar@^1.6.0, chokidar@^1.6.1: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" @@ -1602,7 +1623,7 @@ postcss-value-parser "^3.3.0" source-list-map "^0.1.7" -css-select@^1.1.0: +css-select@^1.1.0, css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" dependencies: @@ -1839,7 +1860,7 @@ version "3.2.1" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.2.1.tgz#3203e07fed217bd1f424b019735582fc37b2825a" -dom-serializer@0: +dom-serializer@0, dom-serializer@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" dependencies: @@ -1856,7 +1877,7 @@ version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" -domelementtype@1: +domelementtype@1, domelementtype@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" @@ -1870,13 +1891,19 @@ dependencies: domelementtype "1" +domhandler@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" + dependencies: + domelementtype "1" + domutils@1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" dependencies: domelementtype "1" -domutils@1.5.1: +domutils@1.5.1, domutils@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" dependencies: @@ -1956,10 +1983,25 @@ object-assign "^4.0.1" tapable "^0.2.5" -entities@~1.1.1: +entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" +enzyme@^2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.8.2.tgz#6c8bcb05012abc4aa4bc3213fb23780b9b5b1714" + dependencies: + cheerio "^0.22.0" + function.prototype.name "^1.0.0" + is-subset "^0.1.1" + lodash "^4.17.2" + object-is "^1.0.1" + object.assign "^4.0.4" + object.entries "^1.0.3" + object.values "^1.0.3" + prop-types "^15.5.4" + uuid "^2.0.3" + "errno@>=0.1.1 <0.2.0-0", errno@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" @@ -1972,7 +2014,7 @@ dependencies: is-arrayish "^0.2.1" -es-abstract@^1.4.3, es-abstract@^1.7.0: +es-abstract@^1.4.3, es-abstract@^1.6.1, es-abstract@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" dependencies: @@ -2588,6 +2630,14 @@ version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" +function.prototype.name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.0.0.tgz#5f523ca64e491a5f95aba80cc1e391080a14482e" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.0" + is-callable "^1.1.2" + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -2860,6 +2910,17 @@ pretty-error "^2.0.2" toposort "^1.0.0" +htmlparser2@^3.9.1: + version "3.9.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + htmlparser2@~3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" @@ -3057,7 +3118,7 @@ dependencies: builtin-modules "^1.0.0" -is-callable@^1.1.1, is-callable@^1.1.3: +is-callable@^1.1.1, is-callable@^1.1.2, is-callable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" @@ -3208,6 +3269,10 @@ version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +is-subset@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" + is-svg@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" @@ -3769,6 +3834,14 @@ version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" +lodash.assignin@^4.0.9: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" + +lodash.bind@^4.1.4: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" + lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" @@ -3781,18 +3854,54 @@ version "4.5.2" resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" -lodash.defaults@^4.2.0: +lodash.defaults@^4.0.1, lodash.defaults@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" +lodash.filter@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" + +lodash.flatten@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + +lodash.foreach@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + +lodash.map@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" +lodash.merge@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" + lodash.mergewith@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" +lodash.pick@^4.2.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + +lodash.reduce@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" + +lodash.reject@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" + +lodash.some@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + lodash.template@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" @@ -4243,10 +4352,31 @@ version "1.1.8" resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.1.8.tgz#28a659cf987d96a4dabe7860289f3b5326c4a03c" -object-keys@^1.0.8: +object-is@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" + +object-keys@^1.0.10, object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" +object.assign@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.0" + object-keys "^1.0.10" + +object.entries@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -4254,6 +4384,15 @@ for-own "^0.1.4" is-extendable "^0.1.1" +object.values@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + obuf@^1.0.0, obuf@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e" @@ -4856,7 +4995,7 @@ dependencies: asap "~2.0.3" -prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@~15.5.7: +prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@~15.5.7: version "15.5.10" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" dependencies: @@ -5087,6 +5226,13 @@ optionalDependencies: fsevents "1.0.17" +react-test-renderer@^15.5.4: + version "15.5.4" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-15.5.4.tgz#d4ebb23f613d685ea8f5390109c2d20fbf7c83bc" + dependencies: + fbjs "^0.8.9" + object-assign "^4.1.0" + react@^15.5.4: version "15.5.4" resolved "https://registry.yarnpkg.com/react/-/react-15.5.4.tgz#fa83eb01506ab237cdc1c8c3b1cea8de012bf047" @@ -6185,7 +6331,7 @@ version "1.0.0" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" -uuid@^2.0.1, uuid@^2.0.2: +uuid@^2.0.1, uuid@^2.0.2, uuid@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"