add example tests for each type

This commit is contained in:
Sérgio Ramos 2016-12-20 11:29:54 +00:00
parent 382f184580
commit 4f50e56e00
15 changed files with 503 additions and 20 deletions

View File

@ -22,7 +22,7 @@ ui:
.PHONY: test
test: ui
NODE_ENV=test BABEL_DISABLE_CACHE=1 CONFIG=$(shell pwd)/webpack/index.js $(NYC) $(AVA) test/*.js $(TEST_ARGS)
NODE_ENV=test BABEL_DISABLE_CACHE=1 CONFIG=$(shell pwd)/webpack/index.js $(NYC) $(AVA) test/**/*.js $(TEST_ARGS)
XUNIT_DIR := ${CIRCLE_TEST_REPORTS}/tap-xunit
XUNIT := $(bindir)/tap-xunit
@ -30,7 +30,7 @@ XUNIT_OUTPUT := >> ${CIRCLE_TEST_REPORTS}/tap-xunit/xunit-$(NAME)
.PHONY: test-ci
test-ci: ui
mkdir -p $(XUNIT_DIR)
BABEL_DISABLE_CACHE=1 NODE_ENV=test CONFIG=$(shell pwd)/webpack/index.js $(NYC) $(AVA) test/*.js -t | $(XUNIT) $(XUNIT_OUTPUT).xml
BABEL_DISABLE_CACHE=1 NODE_ENV=test CONFIG=$(shell pwd)/webpack/index.js $(NYC) $(AVA) test/**/*.js -t | $(XUNIT) $(XUNIT_OUTPUT).xml
.PHONY: compile
compile: ui install

View File

@ -25,6 +25,7 @@
"inherits": "^2.0.3",
"locale": "^0.1.0",
"lodash.find": "^4.6.0",
"lodash.get": "^4.4.2",
"lodash.isempty": "^4.4.0",
"lodash.template": "^4.4.0",
"lodash.uniq": "^4.5.0",
@ -76,12 +77,15 @@
"eslint-plugin-react": "^6.8.0",
"eslint-plugin-standard": "^2.0.1",
"fast-async": "^6.1.2",
"jsdom": "^9.9.1",
"json-loader": "^0.5.4",
"ncp": "^2.0.0",
"node-hook": "^0.4.0",
"nyc": "^10.0.0",
"pre-commit": "^1.2.2",
"react-addons-test-utils": "^15.4.1",
"redux-ava": "^2.2.0",
"simple-mock": "^0.7.3",
"tap-xunit": "^1.5.0",
"thenify": "^3.2.1",
"webpack": "^2.1.0-beta.25",

View File

@ -23,7 +23,7 @@ const Projects = ({
const empty = projects.length ? null : (
<Row>
<Column xs={12}>
<p>
<p name='empty'>
<FormattedMessage id='no-personal-projects' />
</p>
</Column>
@ -48,7 +48,7 @@ const Projects = ({
</Column>
</Row>
<Row>
<ul>
<ul name='projects'>
{_projects}
</ul>
</Row>

View File

@ -11,8 +11,14 @@ const {
} = selectors;
const mapStateToProps = (state, ownProps) => ({
projects: projectsByOrgIdSelector(ownProps.params.org)(state)
const mapStateToProps = (state, {
params = {}
}) => ({
projects: projectsByOrgIdSelector(params.org)(state)
});
module.exports = connect(mapStateToProps)(Projects);
module.exports = connect(
mapStateToProps
)(Projects);
module.exports.mapStateToProps = mapStateToProps;

View File

@ -1,15 +1,16 @@
const find = require('lodash.find');
const forceArray = require('force-array');
const get = require('lodash.get');
const reselect = require('reselect');
const {
createSelector
} = reselect;
const account = (state) => state.account.data;
const orgUiSections = (state) => state.orgs.ui.sections;
const orgs = (state) => state.orgs.data;
const projects = (state) => state.projects.data;
const account = (state) => get(state, 'account.data', {});
const orgUiSections = (state) => get(state, 'orgs.ui.sections', []);
const orgs = (state) => get(state, 'orgs.data', []);
const projects = (state) => get(state, 'projects.data', []);
const orgById = (id) => createSelector(
orgs,

View File

@ -7,7 +7,10 @@ const transitionTo = (pathname) => (dispatch, getState) => {
}
} = getState();
return transitionTo(pathname);
return dispatch({
type: 'TRANSITION_TO',
PAYLOAD: transitionTo(pathname)
});
};
module.exports = {

View File

@ -1,4 +1,5 @@
const hook = require('node-hook');
const jsdom = require('jsdom');
const register = require('babel-register');
hook.hook('.png', () => '');
@ -6,3 +7,11 @@ hook.hook('.png', () => '');
register({
extensions: ['.js']
});
// import ExecutionEnvironment from 'react/lib/ExecutionEnvironment';
if (!global.document || !global.window) {
global.document = jsdom.jsdom('<!doctype html><html><body></body></html>');
global.window = global.document.defaultView;
global.navigator = global.window.navigator;
}

View File

@ -0,0 +1,25 @@
const ReduxAva = require('redux-ava');
const test = require('ava');
const actions = require('@state/actions');
const {
actionTest
} = ReduxAva;
const {
updateRouter
} = actions;
test('updateRouter action', actionTest(updateRouter, {
type: '/APP/UPDATE_ROUTER'
}));
test('updateRouter action', actionTest(updateRouter, {
transitionTo: '[Function]'
}, {
type: '/APP/UPDATE_ROUTER',
payload: {
transitionTo: '[Function]'
}
}));

View File

@ -7,19 +7,19 @@ const {
} = enzyme;
test('renders <App> without exploding', (t) => {
const App = require('../src/containers/app');
const App = require('@containers/app');
const wrapper = shallow(<App />);
t.deepEqual(wrapper.length, 1);
});
test('renders <Home> without exploding', (t) => {
const Home = require('../src/containers/home').WrappedComponent;
const Home = require('@containers/home').WrappedComponent;
const wrapper = shallow(<Home />);
t.deepEqual(wrapper.length, 1);
});
test('renders <NotFound> without exploding', (t) => {
const NotFound = require('../src/containers/not-found');
const NotFound = require('@containers/not-found');
const wrapper = shallow(<NotFound />);
t.deepEqual(wrapper.length, 1);
});

View File

@ -0,0 +1,61 @@
const test = require('ava');
const enzyme = require('enzyme');
const React = require('react');
const create = require('../helpers/create');
const {
render
} = enzyme;
test('renders <Projects> without exploding', (t) => {
const Projects = require('@containers/org/projects').WrappedComponent;
const wrapper = render(create.withIntl(<Projects />));
t.deepEqual(wrapper.length, 1);
});
test('renders connected <Projects> without exploding', (t) => {
const Projects = require('@containers/org/projects');
const wrapper = render(create(<Projects />));
t.deepEqual(wrapper.length, 1);
});
test('renders <Projects>\'s list of projects ', (t) => {
const projects = [{
id: 'forest-foundation-dev',
name: 'Forest Foundation Dev',
plan: '20.05$ per day'
}, {
id: 'forest-foundation-testing',
name: 'Forest Foundation Testing',
plan: '20.05$ per day'
}, {
id: 'forest-foundation-production',
name: 'Forest Foundation Production',
plan: '100.17$ per day'
}];
const Projects = require('@containers/org/projects').WrappedComponent;
const wrapper = render(create.withIntl(<Projects projects={projects} />));
const empty = wrapper.find('p[name=empty]');
const ul = wrapper.find('ul[name=projects]');
const li = ul.find('li');
t.deepEqual(wrapper.length, 1);
t.deepEqual(li.length, projects.length);
t.deepEqual(empty.length, 0);
});
test('renders <Projects>\'s empty <p> when no projects ', (t) => {
const Projects = require('@containers/org/projects').WrappedComponent;
const wrapper = render(create.withIntl(<Projects />));
const empty = wrapper.find('p[name=empty]');
const ul = wrapper.find('ul[name=projects]');
const li = ul.find('li');
t.deepEqual(wrapper.length, 1);
t.deepEqual(li.length, 0);
t.deepEqual(empty.length, 1);
});

View File

@ -0,0 +1,61 @@
const React = require('react');
const ReactRedux = require('react-redux');
const ReactIntl = require('react-intl');
const createStore = require('@state/store');
const {
addLocaleData,
IntlProvider
} = ReactIntl;
const {
Provider
} = ReactRedux;
const Messages = {
'en-us': require('../../locales/en-us.json'),
'pt-pt': require('../../locales/pt-pt.json')
};
const Locales = {
'en': require('react-intl/locale-data/en'),
'pt': require('react-intl/locale-data/pt')
};
const LocalesMessages = {
'en-us': {
messages: Messages['en-us'],
locale: 'en'
},
'pt-pt': {
messages: Messages['pt-pt'],
locale: 'pt'
}
};
Object.keys(Locales).forEach((lang) => {
addLocaleData(Locales[lang] || []);
});
const withRedux = (children, {
store = createStore()
} = {}) => (
<Provider store={store}>
{children}
</Provider>
);
const withIntl = (children, {
locale = 'en-us'
} = {}) => (
<IntlProvider
locale={LocalesMessages[locale].locale}
messages={LocalesMessages[locale].messages}
>
{children}
</IntlProvider>
);
module.exports = (children, props) => withRedux(withIntl(children), props);
module.exports.withRedux = withRedux;
module.exports.withIntl = withIntl;

View File

@ -0,0 +1,21 @@
const ReduxAva = require('redux-ava');
const test = require('ava');
const reducer = require('@state/reducers/app');
const actions = require('@state/actions');
const {
reducerTest
} = ReduxAva;
const {
updateRouter
} = actions;
test('updateReducer', reducerTest(reducer, {}, updateRouter({
transitionTo: '[Function]'
}), {
router: {
transitionTo: '[Function]'
}
}));

View File

@ -0,0 +1,105 @@
const test = require('ava');
const selectors = require('@state/selectors');
const {
accountSelector,
orgByIdSelector
// orgsSelector,
// orgSectionsSelector,
// projectsByOrgIdSelector
} = selectors;
test('accountSelector with empty input', (t) => {
t.deepEqual(accountSelector(), {});
t.deepEqual(accountSelector({
account: undefined
}), {});
t.deepEqual(accountSelector({
account: {}
}), {});
t.deepEqual(accountSelector({
account: {
data: undefined
}
}), {});
t.deepEqual(accountSelector({
account: {
data: {}
}
}), {});
});
test('accountSelector with attrs', (t) => {
t.deepEqual(accountSelector({
account: {
data: {
id: '[id]',
uuid: '[uuid]'
}
}
}), {
id: '[id]',
uuid: '[uuid]'
});
});
test('orgByIdSelector with empty input', (t) => {
t.deepEqual(orgByIdSelector()(), undefined);
t.deepEqual(orgByIdSelector()({
orgs: undefined
}), undefined);
t.deepEqual(orgByIdSelector()({
orgs: {}
}), undefined);
t.deepEqual(orgByIdSelector()({
orgs: {
data: undefined
}
}), undefined);
t.deepEqual(orgByIdSelector()({
orgs: {
data: {}
}
}), undefined);
});
test('orgByIdSelector should find org', (t) => {
const orgs = [{
id: '1'
}, {
id: '2'
}, {
id: '3'
}];
t.deepEqual(orgByIdSelector('1')({
orgs: {
data: orgs
}
}), {
id: '1'
});
t.deepEqual(orgByIdSelector('2')({
orgs: {
data: orgs
}
}), {
id: '2'
});
t.deepEqual(orgByIdSelector('4')({
orgs: {
data: orgs
}
}), undefined);
});

View File

@ -0,0 +1,35 @@
const mock = require('simple-mock');
const test = require('ava');
const thunks = require('@state/thunks');
const {
transitionTo
} = thunks;
test('transitionTo should dispatch', (t) => {
const pathname = '/hello';
const state = {
app: {
router: {
transitionTo: mock.spy((pathname) => pathname)
}
}
};
const dispatch = mock.spy(({
PAYLOAD
}) => {
t.deepEqual(PAYLOAD, pathname);
});
const getState = () => state;
transitionTo(pathname)(dispatch, getState);
t.deepEqual(dispatch.called, true);
t.deepEqual(dispatch.callCount, 1);
t.deepEqual(state.app.router.transitionTo.called, true);
t.deepEqual(state.app.router.transitionTo.callCount, 1);
});

View File

@ -1,5 +1,9 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
abab@^1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d"
abbrev@1:
version "1.0.9"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
@ -21,12 +25,22 @@ acorn-es7-plugin@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/acorn-es7-plugin/-/acorn-es7-plugin-1.1.3.tgz#6a032a71f1faf396a1a29729c7b150fe480cc17a"
acorn-globals@^1.0.4:
version "1.0.9"
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf"
dependencies:
acorn "^2.1.0"
acorn-jsx@^3.0.0, acorn-jsx@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
dependencies:
acorn "^3.0.4"
acorn@^2.1.0, acorn@^2.4.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7"
acorn@^3.0.4:
version "3.3.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
@ -134,6 +148,10 @@ array-differ@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
array-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
array-find-index@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
@ -1639,6 +1657,10 @@ content-disposition@0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b"
content-type-parser@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94"
content-type@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed"
@ -1770,6 +1792,16 @@ css-what@2.1:
version "2.1.0"
resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
"cssom@>= 0.3.0 < 0.4.0", cssom@0.3.x:
version "0.3.1"
resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.1.tgz#c9e37ef2490e64f6d1baa10fda852257082c25d3"
"cssstyle@>= 0.2.36 < 0.3.0":
version "0.2.37"
resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54"
dependencies:
cssom "0.3.x"
currently-unhandled@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
@ -1832,6 +1864,10 @@ deep-extend@~0.4.0:
version "0.4.1"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
deep-freeze@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/deep-freeze/-/deep-freeze-0.0.1.tgz#3a0b0005de18672819dfd38cd31f91179c893e84"
deep-is@~0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
@ -2128,6 +2164,17 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
escodegen@^1.6.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
dependencies:
esprima "^2.7.1"
estraverse "^1.9.1"
esutils "^2.0.2"
optionator "^0.8.1"
optionalDependencies:
source-map "~0.2.0"
escope@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
@ -2227,7 +2274,7 @@ espree@^3.3.1:
acorn "^4.0.1"
acorn-jsx "^3.0.0"
esprima@^2.6.0:
esprima@^2.6.0, esprima@^2.7.1:
version "2.7.3"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
@ -2244,6 +2291,10 @@ esrecurse@^4.1.0:
estraverse "~4.1.0"
object-assign "^4.0.1"
estraverse@^1.9.1:
version "1.9.3"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
@ -2791,6 +2842,12 @@ hosted-git-info@^2.1.4:
version "2.1.5"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b"
html-encoding-sniffer@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da"
dependencies:
whatwg-encoding "^1.0.1"
htmlparser2@^3.9.1:
version "3.9.2"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338"
@ -2842,10 +2899,14 @@ hyphenate-style-name@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b"
iconv-lite@~0.4.13:
iconv-lite@^0.4.13, iconv-lite@~0.4.13:
version "0.4.15"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb"
iconv-lite@0.4.13:
version "0.4.13"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2"
ieee754@^1.1.4:
version "1.1.8"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
@ -2858,6 +2919,10 @@ ignore@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.0.tgz#8d88f03c3002a0ac52114db25d2c673b0bf1e435"
immutable@^3.8.1:
version "3.8.1"
resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.1.tgz#200807f11ab0f72710ea485542de088075f68cd2"
imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
@ -3277,6 +3342,31 @@ jsbn@~0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
jsdom:
version "9.9.1"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.9.1.tgz#84f3972ad394ab963233af8725211bce4d01bfd5"
dependencies:
abab "^1.0.0"
acorn "^2.4.0"
acorn-globals "^1.0.4"
array-equal "^1.0.0"
content-type-parser "^1.0.1"
cssom ">= 0.3.0 < 0.4.0"
cssstyle ">= 0.2.36 < 0.3.0"
escodegen "^1.6.1"
html-encoding-sniffer "^1.0.1"
iconv-lite "^0.4.13"
nwmatcher ">= 1.3.9 < 2.0.0"
parse5 "^1.5.1"
request "^2.55.0"
sax "^1.1.4"
symbol-tree ">= 3.1.0 < 4.0.0"
tough-cookie "^2.3.1"
webidl-conversions "^3.0.1"
whatwg-encoding "^1.0.1"
whatwg-url "^4.1.0"
xml-name-validator ">= 2.0.1 < 3.0.0"
jsesc@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
@ -3451,6 +3541,10 @@ lodash.foreach@^4.3.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53"
lodash.get:
version "4.4.2"
resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
lodash.isempty@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e"
@ -3859,6 +3953,10 @@ number-is-nan@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
"nwmatcher@>= 1.3.9 < 2.0.0":
version "1.3.9"
resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a"
nyc@^10.0.0:
version "10.0.0"
resolved "https://registry.yarnpkg.com/nyc/-/nyc-10.0.0.tgz#95bd4a2c3487f33e1e78f213c6d5a53d88074ce6"
@ -3990,7 +4088,7 @@ option-chain@^0.1.0:
dependencies:
object-assign "^4.0.1"
optionator@^0.8.2:
optionator@^0.8.1, optionator@^0.8.2:
version "0.8.2"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
dependencies:
@ -4112,6 +4210,10 @@ parse-ms@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d"
parse5@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
parseurl@~1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56"
@ -4626,6 +4728,13 @@ redux-actions@^1.2.0:
lodash "^4.13.1"
reduce-reducers "^0.1.0"
redux-ava:
version "2.2.0"
resolved "https://registry.yarnpkg.com/redux-ava/-/redux-ava-2.2.0.tgz#b93d26d725d97e7577af08cd18d9a542804ac5dc"
dependencies:
deep-freeze "0.0.1"
immutable "^3.8.1"
redux-batched-actions@^0.1.5:
version "0.1.5"
resolved "https://registry.yarnpkg.com/redux-batched-actions/-/redux-batched-actions-0.1.5.tgz#b39b84775f4499a4724f3154b882968073b58bed"
@ -4720,7 +4829,7 @@ repeating@^2.0.0:
dependencies:
is-finite "^1.0.0"
request@^2.79.0:
request@^2.55.0, request@^2.79.0:
version "2.79.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
dependencies:
@ -4831,6 +4940,10 @@ rx-lite@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
sax@^1.1.4:
version "1.2.1"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a"
semver-diff@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
@ -4928,6 +5041,10 @@ signal-exit@^3.0.0, signal-exit@^3.0.1:
version "3.0.2"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
simple-mock:
version "0.7.3"
resolved "https://registry.yarnpkg.com/simple-mock/-/simple-mock-0.7.3.tgz#461c9e6f1c339cc49a7871b390676cd064388036"
slash@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
@ -4996,6 +5113,12 @@ source-map@^0.5.0, source-map@^0.5.3, source-map@~0.5.1, source-map@~0.5.3, sour
version "0.5.6"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
source-map@~0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
dependencies:
amdefine ">=0.0.4"
spawn-sync@^1.0.15:
version "1.0.15"
resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476"
@ -5192,6 +5315,10 @@ symbol-observable@^1.0.2:
version "1.0.4"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d"
"symbol-tree@>= 3.1.0 < 4.0.0":
version "3.2.1"
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.1.tgz#8549dd1d01fa9f893c18cc9ab0b106b4d9b168cb"
symbol@^0.2.1:
version "0.2.3"
resolved "https://registry.yarnpkg.com/symbol/-/symbol-0.2.3.tgz#3b9873b8a901e47c6efe21526a3ac372ef28bbc7"
@ -5315,12 +5442,16 @@ to-fast-properties@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320"
tough-cookie@~2.3.0:
tough-cookie@^2.3.1, tough-cookie@~2.3.0:
version "2.3.2"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
dependencies:
punycode "^1.4.1"
tr46@~0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
traverse@^0.6.6:
version "0.6.6"
resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137"
@ -5541,6 +5672,10 @@ watchpack@^1.0.0:
chokidar "^1.4.3"
graceful-fs "^4.1.2"
webidl-conversions@^3.0.0, webidl-conversions@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
webpack-dev-middleware@^1.4.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.9.0.tgz#a1c67a3dfd8a5c5d62740aa0babe61758b4c84aa"
@ -5615,10 +5750,23 @@ websocket-extensions@>=0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7"
whatwg-encoding@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4"
dependencies:
iconv-lite "0.4.13"
whatwg-fetch@>=0.10.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.1.tgz#078b9461bbe91cea73cbce8bb122a05f9e92b772"
whatwg-url@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.1.1.tgz#567074923352de781e3500d64a86aa92a971b4a4"
dependencies:
tr46 "~0.0.3"
webidl-conversions "^3.0.0"
which-module@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
@ -5710,6 +5858,10 @@ xdg-basedir@^2.0.0:
dependencies:
os-homedir "^1.0.0"
"xml-name-validator@>= 2.0.1 < 3.0.0":
version "2.0.1"
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635"
xmlbuilder@~4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.1.0.tgz#687e84d9c4145af8db438d8bec88805df66249f4"