summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorErik Larkö <erik@mullvad.net>2017-08-18 13:29:22 +0200
committerErik Larkö <erik@mullvad.net>2017-08-18 13:29:22 +0200
commit750d633006774154301fffaeb680b9eb4065c745 (patch)
tree5bc58525834fa92ff625395953f880a5ae0fec3b
parent61c56110c3c2d550966edab662405c2f6d84c05b (diff)
parentca6a2f8965b517bd5d5df512796d4ceeda637d79 (diff)
downloadmullvadvpn-750d633006774154301fffaeb680b9eb4065c745.tar.xz
mullvadvpn-750d633006774154301fffaeb680b9eb4065c745.zip
Merge branch 'login-failure-notification-test'
-rw-r--r--flow-typed/npm/enzyme_v2.3.x.js85
-rw-r--r--package.json2
-rw-r--r--test/components/Login.spec.js64
-rw-r--r--yarn.lock203
4 files changed, 352 insertions, 2 deletions
diff --git a/flow-typed/npm/enzyme_v2.3.x.js b/flow-typed/npm/enzyme_v2.3.x.js
new file mode 100644
index 0000000000..3898acbe2e
--- /dev/null
+++ b/flow-typed/npm/enzyme_v2.3.x.js
@@ -0,0 +1,85 @@
+// flow-typed signature: 67cf88555a22019251c4870d6e78a462
+// flow-typed version: 60d0f06df5/enzyme_v2.3.x/flow_>=v0.28.x
+
+declare module 'enzyme' {
+ declare type PredicateFunction<T: Wrapper> = (wrapper: T, index: number) => boolean;
+ declare type NodeOrNodes = React$Element<any> | Array<React$Element<any>>;
+ declare type EnzymeSelector = string | ReactClass<any> | Object;
+
+ // CheerioWrapper is a type alias for an actual cheerio instance
+ // TODO: Reference correct type from cheerio's type declarations
+ declare type CheerioWrapper = any;
+
+ declare class Wrapper {
+ find(selector: EnzymeSelector): this;
+ findWhere(predicate: PredicateFunction<this>): this;
+ filter(selector: EnzymeSelector): this;
+ filterWhere(predicate: PredicateFunction<this>): this;
+ contains(nodeOrNodes: NodeOrNodes): boolean;
+ containsMatchingElement(node: React$Element<any>): boolean;
+ containsAllMatchingElements(nodes: NodeOrNodes): boolean;
+ containsAnyMatchingElements(nodes: NodeOrNodes): boolean;
+ dive(option?: { context?: Object }): this;
+ exists(): boolean;
+ matchesElement(node: React$Element<any>): boolean;
+ hasClass(className: string): boolean;
+ is(selector: EnzymeSelector): boolean;
+ isEmpty(): boolean;
+ not(selector: EnzymeSelector): this;
+ children(selector?: EnzymeSelector): this;
+ childAt(index: number): this;
+ parents(selector?: EnzymeSelector): this;
+ parent(): this;
+ closest(selector: EnzymeSelector): this;
+ render(): CheerioWrapper;
+ unmount(): this;
+ text(): string;
+ html(): string;
+ get(index: number): React$Element<any>;
+ getNode(): React$Element<any>;
+ getNodes(): Array<React$Element<any>>;
+ getDOMNode(): HTMLElement | HTMLInputElement;
+ at(index: number): this;
+ first(): this;
+ last(): this;
+ state(key?: string): any;
+ context(key?: string): any;
+ props(): Object;
+ prop(key: string): any;
+ key(): string;
+ simulate(event: string, ...args: Array<any>): this;
+ setState(state: {}, callback?: Function): this,
+ setProps(props: {}): this;
+ setContext(context: Object): this;
+ instance(): React$Component<*, *, *>;
+ update(): this;
+ debug(): string;
+ type(): string | Function | null;
+ name(): string;
+ forEach(fn: (node: this, index: number) => mixed): this;
+ map<T>(fn: (node: this, index: number) => T): Array<T>;
+ reduce<T>(fn: (value: T, node: this, index: number) => T, initialValue?: T): Array<T>;
+ reduceRight<T>(fn: (value: T, node: this, index: number) => T, initialValue?: T): Array<T>;
+ some(selector: EnzymeSelector): boolean;
+ someWhere(predicate: PredicateFunction<this>): boolean;
+ every(selector: EnzymeSelector): boolean;
+ everyWhere(predicate: PredicateFunction<this>): boolean;
+ length: number;
+ }
+
+ declare export class ReactWrapper extends Wrapper {
+ constructor(nodes: NodeOrNodes, root: any, options?: ?Object): ReactWrapper;
+ mount(): this;
+ ref(refName: string): this;
+ detach(): void;
+ }
+
+ declare export class ShallowWrapper extends Wrapper {
+ equals(node: React$Element<any>): boolean;
+ shallow(options?: { context?: Object }): ShallowWrapper;
+ }
+
+ declare export function shallow(node: React$Element<any>, options?: { context?: Object }): ShallowWrapper;
+ declare export function mount(node: React$Element<any>, options?: { context?: Object, attachTo?: HTMLElement, childContextTypes?: Object }): ReactWrapper;
+ declare export function render(node: React$Element<any>, options?: { context?: Object }): CheerioWrapper;
+}
diff --git a/package.json b/package.json
index 2d3f89e984..159de2f127 100644
--- a/package.json
+++ b/package.json
@@ -52,12 +52,14 @@
"electron-builder": "^19.12.0",
"electron-devtools-installer": "^2.1.0",
"electron-mocha": "^3.3.0",
+ "enzyme": "^2.9.1",
"eslint": "^4.1.1",
"eslint-plugin-flowtype": "^2.34.1",
"eslint-plugin-react": "^7.1.0",
"flow-bin": "^0.50.0",
"flow-typed": "^2.1.5",
"npm-run-all": "^4.0.1",
+ "react-test-renderer": "^15.6.1",
"redux-mock-store": "^1.2.2",
"rimraf": "^2.5.4"
},
diff --git a/test/components/Login.spec.js b/test/components/Login.spec.js
new file mode 100644
index 0000000000..0f82102d4e
--- /dev/null
+++ b/test/components/Login.spec.js
@@ -0,0 +1,64 @@
+// @flow
+
+import { expect } from 'chai';
+import React from 'react';
+import { shallow } from 'enzyme';
+import Login from '../../app/components/Login';
+import AccountInput from '../../app/components/AccountInput';
+
+import type { ShallowWrapper } from 'enzyme';
+
+describe('components/Login', () => {
+
+ it('notifies on the first change after failure', () => {
+
+ let cbCalled = false;
+ const props = {
+ onFirstChangeAfterFailure: () => { cbCalled=true; },
+ };
+
+ const component = renderWithProps( props );
+ const accountInput = component.find(AccountInput);
+
+ // Change the props to a failed state
+ component.setProps({ account: {
+ status: 'failed',
+ }});
+
+
+ // Write something in the input field
+ setInputText(accountInput, 'foo');
+ expect(cbCalled).to.be.true;
+
+
+ // Reset the test state
+ cbCalled = false;
+
+ // Write some other thing in the input field
+ setInputText(accountInput, 'bar');
+ expect(cbCalled).to.be.false;
+ });
+
+});
+
+function renderWithProps(customProps): ShallowWrapper {
+ const defaultProps = {
+ account: {accountNumber: null,
+ paidUntil: null,
+ status: 'none',
+ error: null,
+ },
+ onLogin: () => {},
+ onSettings: () => {},
+ onChange: () => {},
+ onFirstChangeAfterFailure: () => {},
+ onExternalLink: () => {},
+ };
+ const props = Object.assign({}, defaultProps, customProps);
+
+ return shallow( <Login { ...props } /> );
+}
+
+function setInputText(input: ShallowWrapper, text: string) {
+ input.simulate('change', {target: {value: text}});
+}
diff --git a/yarn.lock b/yarn.lock
index 866633aec5..66543bbd91 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1090,6 +1090,10 @@ bluebird@^3.4.6, bluebird@^3.4.7, bluebird@^3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
+boolbase@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+
boom@2.x.x:
version "2.10.1"
resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
@@ -1359,6 +1363,27 @@ check-error@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
+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.7.0, chokidar@^1.6.1:
version "1.7.0"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
@@ -1606,6 +1631,19 @@ crypto-random-string@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
+css-select@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+ dependencies:
+ boolbase "~1.0.0"
+ css-what "2.1"
+ domutils "1.5.1"
+ nth-check "~1.0.1"
+
+css-what@2.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
+
csso@~2.3.1:
version "2.3.2"
resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
@@ -1759,6 +1797,34 @@ dom-helpers@^3.2.0:
version "3.2.1"
resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.2.1.tgz#3203e07fed217bd1f424b019735582fc37b2825a"
+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:
+ domelementtype "~1.1.1"
+ entities "~1.1.1"
+
+domelementtype@1, domelementtype@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
+
+domelementtype@~1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
+
+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.5.1, domutils@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
dot-prop@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.1.1.tgz#a8493f0b7b5eeec82525b5c7587fa7de7ca859c1"
@@ -2012,17 +2078,36 @@ engine.io@1.8.0:
engine.io-parser "1.3.1"
ws "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"
+
env-paths@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0"
+enzyme@^2.9.1:
+ version "2.9.1"
+ resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.9.1.tgz#07d5ce691241240fb817bf2c4b18d6e530240df6"
+ dependencies:
+ cheerio "^0.22.0"
+ function.prototype.name "^1.0.0"
+ is-subset "^0.1.1"
+ lodash "^4.17.4"
+ object-is "^1.0.1"
+ object.assign "^4.0.4"
+ object.entries "^1.0.4"
+ object.values "^1.0.4"
+ prop-types "^15.5.10"
+ uuid "^3.0.1"
+
error-ex@^1.2.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
dependencies:
is-arrayish "^0.2.1"
-es-abstract@^1.4.3:
+es-abstract@^1.4.3, es-abstract@^1.6.1:
version "1.7.0"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c"
dependencies:
@@ -2569,6 +2654,14 @@ function-bind@^1.0.2, function-bind@^1.1.0:
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.3"
+ resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.0.3.tgz#0099ae5572e9dd6f03c97d023fd92bcc5e639eac"
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.1.0"
+ is-callable "^1.1.3"
+
gauge@~2.7.3:
version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
@@ -2867,6 +2960,17 @@ hosted-git-info@^2.1.4, hosted-git-info@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c"
+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"
+
http-errors@~1.5.0:
version "1.5.1"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750"
@@ -3157,6 +3261,10 @@ is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
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-symbol@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
@@ -3415,6 +3523,14 @@ lodash.assign@^4.0.3, lodash.assign@^4.0.6:
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.create@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7"
@@ -3423,6 +3539,22 @@ lodash.create@3.1.1:
lodash._basecreate "^3.0.0"
lodash._isiterateecall "^3.0.0"
+lodash.defaults@^4.0.1:
+ 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.isarguments@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
@@ -3447,6 +3579,30 @@ lodash.keys@^3.0.0:
lodash.isarguments "^3.0.0"
lodash.isarray "^3.0.0"
+lodash.map@^4.4.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3"
+
+lodash.merge@^4.4.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5"
+
+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@^3.10.1:
version "3.10.1"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
@@ -3821,6 +3977,12 @@ npmlog@^4.0.2:
dependencies:
bindings "^1.2.1"
+nth-check@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4"
+ dependencies:
+ boolbase "~1.0.0"
+
nugget@^2.0.0, nugget@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/nugget/-/nugget-2.0.1.tgz#201095a487e1ad36081b3432fa3cada4f8d071b0"
@@ -3857,7 +4019,11 @@ object-inspect@~0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-0.4.0.tgz#f5157c116c1455b243b06ee97703392c5ad89fec"
-object-keys@^1.0.6, 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.6, object-keys@^1.0.8:
version "1.0.11"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
@@ -3869,6 +4035,23 @@ object-path@^0.9.0:
version "0.9.2"
resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.9.2.tgz#0fd9a74fc5fad1ae3968b586bda5c632bd6c05a5"
+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.4:
+ 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"
@@ -3876,6 +4059,15 @@ object.omit@^2.0.0:
for-own "^0.1.4"
is-extendable "^0.1.1"
+object.values@^1.0.4:
+ 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"
+
on-finished@~2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
@@ -4368,6 +4560,13 @@ react-router@^4.1.1:
prop-types "^15.5.4"
warning "^3.0.0"
+react-test-renderer@^15.6.1:
+ version "15.6.1"
+ resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-15.6.1.tgz#026f4a5bb5552661fd2cc4bbcd0d4bc8a35ebf7e"
+ dependencies:
+ fbjs "^0.8.9"
+ object-assign "^4.1.0"
+
react-transition-group@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-1.2.0.tgz#b51fc921b0c3835a7ef7c571c79fc82c73e9204f"