Commit a67e2d86 by Jae Bradley Committed by Ari Rizzitano

fix(dependencies): update to React 16 and Enzyme 3

parents 1f9a726e 0bf81740
{
"name": "@edx/paragon",
"version": "0.2.0",
"version": "1.1.8",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@edx/edx-bootstrap": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/@edx/edx-bootstrap/-/edx-bootstrap-0.4.0.tgz",
"integrity": "sha512-aPO1TXMH9VcwGDxeIu3IKFwvh1bpm2f+ma2+2/gGtn0qW098MQ1e4HcXwHQ5SZQYNSTzQyASMHSkxMIKMaHLVw==",
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/@edx/edx-bootstrap/-/edx-bootstrap-0.4.2.tgz",
"integrity": "sha512-wvt1ZyQC1JHkT3WPmuRz5AafIj6wVGOIPfMRkLjxv1Y6g+vUF/UNCIvZYQ3JiK89UwKdv/BMKeYE0Xe2A894bA==",
"requires": {
"bootstrap": "4.0.0-beta.2"
"bootstrap": "4.0.0-beta.2",
"jquery": "3.2.1",
"popper.js": "1.12.9"
}
},
"@hypnosphi/fuse.js": {
......@@ -32,13 +34,13 @@
"uuid": "3.1.0"
}
},
"@storybook/addon-links": {
"version": "3.2.12",
"resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-3.2.12.tgz",
"integrity": "sha512-8cv5Pcoersdbp3QrYnzp+vXpCut4EIWEVoqkJUDosC4r+qT36nnq3l+Ot7ic9R4f87CdPM/Wjt2qzgTpamoSvA==",
"@storybook/addon-console": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@storybook/addon-console/-/addon-console-1.0.0.tgz",
"integrity": "sha1-kxOmXwQ5K1JGmOAc7qpIAfXQeyA=",
"dev": true,
"requires": {
"@storybook/addons": "3.2.12"
"global": "4.3.2"
}
},
"@storybook/addon-options": {
......@@ -68,47 +70,36 @@
"integrity": "sha512-gbbW68MWfDxsht9v9V/rqx6aVZUBw6akwyv45T5+lM23Sy7GfoOQ0jR7eRl+DM4KmA/74P/rIZRu0mznT9IfCg==",
"dev": true
},
"@storybook/channel-postmessage": {
"version": "3.2.12",
"resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-3.2.12.tgz",
"integrity": "sha512-IjSI7Mjf/u+Msf8Jm+zlYlTuzYxj2yvcQV/rFkm7fkhmv2UAZTsb5B8Mi3KKN7Lr9d5eRumLCtUBkzkBOcSzSg==",
"dev": true,
"requires": {
"@storybook/channels": "3.2.12",
"global": "4.3.2",
"json-stringify-safe": "5.0.1"
}
},
"@storybook/channels": {
"version": "3.2.12",
"resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-3.2.12.tgz",
"integrity": "sha512-smexrg30+mlXIsS/z/0CN+a3Tn/DePZETnu3G42r8Qdm7PbdRo1oC2pcHAEmIjaukRp5qK+txuDJ6WdOvyVsMw==",
"dev": true
},
"@storybook/components": {
"version": "3.2.12",
"resolved": "https://registry.npmjs.org/@storybook/components/-/components-3.2.12.tgz",
"integrity": "sha512-vMVrPmXKP7Rh3JfHfN7dAf+MJkjyl0iaU4TePsSZD3esqpkr24H+yw0HiLKBsINPJvFlEGLfDT73urXcb4oPQQ==",
"@storybook/mantra-core": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/@storybook/mantra-core/-/mantra-core-1.7.2.tgz",
"integrity": "sha512-GD4OYJ8GsayVhIg306sfgcKDk9j8YfuSKIAWvdB/g7IDlw0pDgueONALVEEE2XWJtCwcsUyDtCYzXFgCBWLEjA==",
"dev": true,
"requires": {
"glamor": "2.20.40",
"glamorous": "4.9.7",
"prop-types": "15.6.0"
"@storybook/react-komposer": "2.0.3",
"@storybook/react-simple-di": "1.2.1",
"babel-runtime": "6.26.0"
}
},
"@storybook/react": {
"version": "3.2.11",
"resolved": "https://registry.npmjs.org/@storybook/react/-/react-3.2.11.tgz",
"integrity": "sha512-73aup7efGRKKFBwEfyvebuZWaHbCsBQq03l29ke8e7gWiPEcRBBzlkXA0Jkt2LZ63K4ZFSsEiryltaouu6rZIA==",
"version": "3.2.16",
"resolved": "https://registry.npmjs.org/@storybook/react/-/react-3.2.16.tgz",
"integrity": "sha512-gMS+KrI5u0OTnHYhyLkMLknCQRCyDL3QULXKCYtkUcZ6l2MKvOVSMwwG1VUPWssWtLBvN4Fdx9A+9BxDWLZhpw==",
"dev": true,
"requires": {
"@storybook/addon-actions": "3.2.12",
"@storybook/addon-links": "3.2.12",
"@storybook/addons": "3.2.12",
"@storybook/channel-postmessage": "3.2.12",
"@storybook/ui": "3.2.12",
"@storybook/addon-actions": "3.2.16",
"@storybook/addon-links": "3.2.16",
"@storybook/addons": "3.2.16",
"@storybook/channel-postmessage": "3.2.16",
"@storybook/ui": "3.2.16",
"airbnb-js-shims": "1.3.0",
"autoprefixer": "7.1.5",
"autoprefixer": "7.1.6",
"babel-core": "6.26.0",
"babel-loader": "7.1.2",
"babel-plugin-react-docgen": "1.8.1",
......@@ -117,20 +108,21 @@
"babel-preset-env": "1.6.1",
"babel-preset-minify": "0.2.0",
"babel-preset-react": "6.24.1",
"babel-preset-react-app": "3.0.3",
"babel-preset-react-app": "3.1.0",
"babel-preset-stage-0": "6.24.1",
"babel-runtime": "6.26.0",
"case-sensitive-paths-webpack-plugin": "2.1.1",
"chalk": "2.2.0",
"chalk": "2.3.0",
"commander": "2.11.0",
"common-tags": "1.4.0",
"configstore": "3.1.1",
"core-js": "2.5.1",
"css-loader": "0.28.7",
"express": "4.16.2",
"file-loader": "0.11.2",
"file-loader": "1.1.5",
"find-cache-dir": "1.0.0",
"glamor": "2.20.40",
"glamorous": "4.9.7",
"glamorous": "4.11.0",
"global": "4.3.2",
"json-loader": "0.5.7",
"json-stringify-safe": "5.0.1",
......@@ -141,13 +133,12 @@
"postcss-loader": "2.0.8",
"prop-types": "15.6.0",
"qs": "6.5.1",
"react-modal": "2.4.1",
"redux": "3.7.2",
"request": "2.83.0",
"serve-favicon": "2.4.5",
"shelljs": "0.7.8",
"style-loader": "0.17.0",
"url-loader": "0.5.9",
"style-loader": "0.18.2",
"url-loader": "0.6.2",
"util-deprecate": "1.0.2",
"uuid": "3.1.0",
"webpack": "3.8.1",
......@@ -155,27 +146,269 @@
"webpack-hot-middleware": "2.20.0"
},
"dependencies": {
"@storybook/addon-actions": {
"version": "3.2.16",
"resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-3.2.16.tgz",
"integrity": "sha512-TXR/H5lDCtPCmc+/nidvVBiTlGsPHxeJ/LMPuGxq/yF7EvzrfXw+CuEuaPNp5qknSioOLm9GngbozNg8HfBgKg==",
"dev": true,
"requires": {
"@storybook/addons": "3.2.16",
"deep-equal": "1.0.1",
"json-stringify-safe": "5.0.1",
"prop-types": "15.6.0",
"react-inspector": "2.2.1",
"uuid": "3.1.0"
}
},
"@storybook/addon-links": {
"version": "3.2.16",
"resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-3.2.16.tgz",
"integrity": "sha512-JFs2p7EGRFpwUkg7xV7Vi3h/zBr4UjmprF9YYHR2L5TQFbztlKJPBhiATRSQtgFyNNAo7zNkSf439Rkrb9k7yQ==",
"dev": true,
"requires": {
"@storybook/addons": "3.2.16"
}
},
"@storybook/addons": {
"version": "3.2.16",
"resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-3.2.16.tgz",
"integrity": "sha512-Dxs0XceqqUSG+vao5uCZdphmCAGlpnwDLV0abjYpPH0eKb2QN5Rs/Vrl0MzuOYGghPv8Y1QfhdB6DFh7AuIoTQ==",
"dev": true
},
"@storybook/channel-postmessage": {
"version": "3.2.16",
"resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-3.2.16.tgz",
"integrity": "sha512-8D3UeZfb4TarkEp0xMCUxX5rW/m2YghYmlnFDcMCgPhN9R2pRySjxxbCjK+ry0q2hUII4R9Bbck63AUqwcQDow==",
"dev": true,
"requires": {
"@storybook/channels": "3.2.16",
"global": "4.3.2",
"json-stringify-safe": "5.0.1"
}
},
"@storybook/channels": {
"version": "3.2.16",
"resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-3.2.16.tgz",
"integrity": "sha512-zjaDE/0yvlLfOcpzeTIWi1K7d873UykUmGLwFSO2hUIM7hlc+QxCeE0MH+OrQYUWC8gcU8pg+IWAk/6qzWAZsA==",
"dev": true
},
"@storybook/components": {
"version": "3.2.16",
"resolved": "https://registry.npmjs.org/@storybook/components/-/components-3.2.16.tgz",
"integrity": "sha512-+bxwsvwa7TPqwxG6ap2hjjrwSg1g8e2ZGijPQDEGpvNfEnLfbZRyQKXRhfCyeAN3DL8F8Bx95AJuWaYKr0pqpA==",
"dev": true,
"requires": {
"glamor": "2.20.40",
"glamorous": "4.11.0",
"prop-types": "15.6.0"
}
},
"@storybook/react-fuzzy": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/@storybook/react-fuzzy/-/react-fuzzy-0.4.3.tgz",
"integrity": "sha512-TaFbDiEc/34eiAFyOjyvrh5tOqoKscyVH2BHJB15cQ8RepccX3LKIBqSNr7IUi1jmMB5aWjeefvJywPQf13ByQ==",
"dev": true,
"requires": {
"babel-runtime": "6.26.0",
"classnames": "2.2.5",
"fuse.js": "3.2.0",
"prop-types": "15.6.0"
}
},
"@storybook/ui": {
"version": "3.2.16",
"resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-3.2.16.tgz",
"integrity": "sha512-K6DwvT2Oo4GrJkT0ij8EW1GsjX7Sw9U6hDp2II5tnKsV7egnIKgJ6y5xGOZLHNvDDkeo5KS+Ii3GjrUbnZ1QzQ==",
"dev": true,
"requires": {
"@hypnosphi/fuse.js": "3.0.9",
"@storybook/components": "3.2.16",
"@storybook/mantra-core": "1.7.2",
"@storybook/react-fuzzy": "0.4.3",
"@storybook/react-komposer": "2.0.3",
"babel-runtime": "6.26.0",
"deep-equal": "1.0.1",
"events": "1.1.1",
"global": "4.3.2",
"json-stringify-safe": "5.0.1",
"keycode": "2.1.9",
"lodash.debounce": "4.0.8",
"lodash.pick": "4.4.0",
"lodash.sortby": "4.7.0",
"podda": "1.2.2",
"prop-types": "15.6.0",
"qs": "6.5.1",
"react-icons": "2.2.7",
"react-inspector": "2.2.1",
"react-modal": "3.1.2",
"react-split-pane": "0.1.71",
"react-treebeard": "2.0.3",
"redux": "3.7.2"
}
},
"autoprefixer": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.1.6.tgz",
"integrity": "sha512-C9yv/UF3X+eJTi/zvfxuyfxmLibYrntpF3qoJYrMeQwgUJOZrZvpJiMG2FMQ3qnhWtF/be4pYONBBw95ZGe3vA==",
"dev": true,
"requires": {
"browserslist": "2.5.1",
"caniuse-lite": "1.0.30000748",
"normalize-range": "0.1.2",
"num2fraction": "1.2.2",
"postcss": "6.0.13",
"postcss-value-parser": "3.3.0"
}
},
"babel-plugin-dynamic-import-node": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.1.0.tgz",
"integrity": "sha512-tTfZbM9Ecwj3GK50mnPrUpinTwA4xXmDiQGCk/aBYbvl1+X8YqldK86wZ1owVJ4u3mrKbRlXMma80J18qwiaTQ==",
"dev": true,
"requires": {
"babel-plugin-syntax-dynamic-import": "6.18.0",
"babel-template": "6.26.0",
"babel-types": "6.26.0"
}
},
"babel-preset-react-app": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-3.1.0.tgz",
"integrity": "sha512-jEAeVozxLzftLl0iDZ0d5jrmfbo3yogON/eI4AsEDIs8p6WW+t9mDRUsj5l12bqPOLSiVOElCQ3QyGjMcyBiwA==",
"dev": true,
"requires": {
"babel-plugin-dynamic-import-node": "1.1.0",
"babel-plugin-syntax-dynamic-import": "6.18.0",
"babel-plugin-transform-class-properties": "6.24.1",
"babel-plugin-transform-object-rest-spread": "6.26.0",
"babel-plugin-transform-react-constant-elements": "6.23.0",
"babel-plugin-transform-react-jsx": "6.24.1",
"babel-plugin-transform-react-jsx-self": "6.22.0",
"babel-plugin-transform-react-jsx-source": "6.22.0",
"babel-plugin-transform-regenerator": "6.26.0",
"babel-plugin-transform-runtime": "6.23.0",
"babel-preset-env": "1.6.1",
"babel-preset-react": "6.24.1"
}
},
"chalk": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
"integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
"dev": true,
"requires": {
"ansi-styles": "3.2.0",
"escape-string-regexp": "1.0.5",
"supports-color": "4.5.0"
}
},
"core-js": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
"integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=",
"dev": true
},
"glamorous": {
"version": "4.11.0",
"resolved": "https://registry.npmjs.org/glamorous/-/glamorous-4.11.0.tgz",
"integrity": "sha512-qWRmq5HZ6kGnp09/z3I0L5ZWZF8PX9W90ED8Ndm3ccfaamWRcEURYilk3zA1M1VW1xJlV28+aD2XlwbQF5YlSw==",
"dev": true,
"requires": {
"brcast": "3.0.1",
"fast-memoize": "2.2.8",
"html-tag-names": "1.1.2",
"is-function": "1.0.1",
"is-plain-object": "2.0.4",
"react-html-attributes": "1.4.1",
"svg-tag-names": "1.1.1"
}
},
"react-inspector": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-2.2.1.tgz",
"integrity": "sha512-aXrxJTfriJtZtv/+A9cFIOpfbt711yCD1Ht3fSn3JyuDaAt1+eLtb01R5d/8gGpyquOVWn/d+eM1VPqFXS7UZA==",
"dev": true,
"requires": {
"babel-runtime": "6.26.0",
"is-dom": "1.0.9"
}
},
"react-modal": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.1.2.tgz",
"integrity": "sha512-a3L2qP0kaqMBy4C1aojs2caUIz3kHRFlnuWJ8zsnuUmh/fKHEDASujVBiQcatn+yUosdE9hViB6JvLfkB0tN2A==",
"dev": true,
"requires": {
"exenv": "1.2.2",
"prop-types": "15.6.0"
}
},
"react-split-pane": {
"version": "0.1.71",
"resolved": "https://registry.npmjs.org/react-split-pane/-/react-split-pane-0.1.71.tgz",
"integrity": "sha512-c7aK5ffRyeOySSWVeoSEsQHBUrNtzXTB9TFNUnZv/2EM7HEnN1Rfsgxag/bpDcl5GuaY5IuMvq7XySc6nyokog==",
"dev": true,
"requires": {
"@types/inline-style-prefixer": "3.0.1",
"@types/react": "16.0.24",
"inline-style-prefixer": "3.0.8",
"prop-types": "15.6.0",
"react-style-proptype": "3.0.0"
}
},
"style-loader": {
"version": "0.17.0",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.17.0.tgz",
"integrity": "sha1-6CVLzNt690vVgnTjYQe01atN8xA=",
"version": "0.18.2",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.18.2.tgz",
"integrity": "sha512-WPpJPZGUxWYHWIUMNNOYqql7zh85zGmr84FdTVWq52WTIkqlW9xSxD3QYWi/T31cqn9UNSsietVEgGn2aaSCzw==",
"dev": true,
"requires": {
"loader-utils": "1.1.0",
"schema-utils": "0.3.0"
}
},
"url-loader": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.6.2.tgz",
"integrity": "sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==",
"dev": true,
"requires": {
"loader-utils": "1.1.0"
"loader-utils": "1.1.0",
"mime": "1.4.1",
"schema-utils": "0.3.0"
}
}
}
},
"@storybook/react-fuzzy": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/@storybook/react-fuzzy/-/react-fuzzy-0.4.1.tgz",
"integrity": "sha512-UCV8HZ3rzEpn36Tn+Ip0ZqcwQjphIcxmnWDF7MgjBJkCPlSahSzALhS9EH6WLBeCDzajoDynAAUhwqC1EPkhkA==",
"@storybook/react-komposer": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@storybook/react-komposer/-/react-komposer-2.0.3.tgz",
"integrity": "sha512-DjL/XwZLNx79Rc1y0dyjxme64eUSJeJvajCN587sVDsVZIgsPlDWwmaohOCkPhR8HNGrY89qoeFZZxFslT203w==",
"dev": true,
"requires": {
"@storybook/react-stubber": "1.0.1",
"babel-runtime": "6.26.0",
"classnames": "2.2.5",
"fuse.js": "3.2.0",
"prop-types": "15.6.0"
"hoist-non-react-statics": "1.2.0",
"lodash.pick": "4.4.0",
"shallowequal": "0.2.2"
}
},
"@storybook/react-simple-di": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@storybook/react-simple-di/-/react-simple-di-1.2.1.tgz",
"integrity": "sha512-Sj3JU1KpnTIyBWBp+uAZT3PlZ2IVYrxvOOXgpT92Injcmg2KV2ry1GkZen6XuVZqUfU0vz/sK08aP45boErFnw==",
"dev": true,
"requires": {
"babel-runtime": "6.26.0",
"hoist-non-react-statics": "1.2.0"
}
},
"@storybook/react-stubber": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@storybook/react-stubber/-/react-stubber-1.0.1.tgz",
"integrity": "sha512-k+CHH+vA8bQfCmzBTtJsPkITFgD+C/w19KuByZ9WeEvNUFtnDaCqfP+Vp3/OR+3IAfAXYYOWolqPLxNPcEqEjw==",
"dev": true,
"requires": {
"babel-runtime": "6.26.0"
}
},
"@storybook/storybook-deployer": {
......@@ -189,36 +422,23 @@
"yargs": "8.0.2"
}
},
"@storybook/ui": {
"version": "3.2.12",
"resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-3.2.12.tgz",
"integrity": "sha512-g7O+YO92qJiWqgSp1U1q4sSgiobNxRBSWCrlYmRfHAUzEzD4cgYDnlldFWWUvR4zCEOCIG/MbJKtqG4727srNg==",
"dev": true,
"requires": {
"@hypnosphi/fuse.js": "3.0.9",
"@storybook/components": "3.2.12",
"@storybook/react-fuzzy": "0.4.1",
"babel-runtime": "6.26.0",
"deep-equal": "1.0.1",
"events": "1.1.1",
"global": "4.3.2",
"json-stringify-safe": "5.0.1",
"keycode": "2.1.9",
"lodash.debounce": "4.0.8",
"lodash.pick": "4.4.0",
"lodash.sortby": "4.7.0",
"mantra-core": "1.7.0",
"podda": "1.2.2",
"prop-types": "15.6.0",
"qs": "6.5.1",
"react-icons": "2.2.7",
"react-inspector": "2.2.0",
"react-komposer": "2.0.0",
"react-modal": "2.4.1",
"react-split-pane": "0.1.66",
"react-treebeard": "2.0.3",
"redux": "3.7.2"
}
"@types/inline-style-prefixer": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@types/inline-style-prefixer/-/inline-style-prefixer-3.0.1.tgz",
"integrity": "sha512-+kbOcYW1/noncDwRryRoB9tH87IYcMfdBGvw98iocK39LtTA2DFL7agmk4UHW/GxjzVfwrxfjlLrqrgA7MCtmg==",
"dev": true
},
"@types/node": {
"version": "8.0.53",
"resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.53.tgz",
"integrity": "sha512-54Dm6NwYeiSQmRB1BLXKr5GELi0wFapR1npi8bnZhEcu84d/yQKqnwwXQ56hZ0RUbTG6L5nqDZaN3dgByQXQRQ==",
"dev": true
},
"@types/react": {
"version": "16.0.24",
"resolved": "https://registry.npmjs.org/@types/react/-/react-16.0.24.tgz",
"integrity": "sha512-id3ypgsBA9En2Nzx46Gqk2A4DyYHhiykH8Cv2pclOfFh549csxbB5dkX9DrpRKxJ491vuVcWxKusI1tFoNCQYw==",
"dev": true
},
"abab": {
"version": "1.0.4",
......@@ -610,20 +830,6 @@
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true
},
"autoprefixer": {
"version": "7.1.5",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.1.5.tgz",
"integrity": "sha512-sMN453qIm8Z+tunzYWW+Y490wWkICHhCYm/VohLjjl+N7ARSFuF5au7E6tr7oEbeeXj8mNjpSw2kxjJaO6YCOw==",
"dev": true,
"requires": {
"browserslist": "2.5.1",
"caniuse-lite": "1.0.30000748",
"normalize-range": "0.1.2",
"num2fraction": "1.2.2",
"postcss": "6.0.13",
"postcss-value-parser": "3.3.0"
}
},
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
......@@ -1101,17 +1307,6 @@
"babel-runtime": "6.26.0"
}
},
"babel-plugin-dynamic-import-node": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.0.2.tgz",
"integrity": "sha1-rbW8j0iokxFUA5WunwzD7UsQuy4=",
"dev": true,
"requires": {
"babel-plugin-syntax-dynamic-import": "6.18.0",
"babel-template": "6.26.0",
"babel-types": "6.26.0"
}
},
"babel-plugin-istanbul": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz",
......@@ -1841,7 +2036,6 @@
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
"integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
"dev": true,
"requires": {
"babel-runtime": "6.26.0",
"core-js": "2.5.1",
......@@ -1851,14 +2045,12 @@
"core-js": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
"integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=",
"dev": true
"integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs="
},
"regenerator-runtime": {
"version": "0.10.5",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
"integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
"dev": true
"integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
}
}
},
......@@ -1964,96 +2156,6 @@
"babel-preset-flow": "6.23.0"
}
},
"babel-preset-react-app": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-3.0.3.tgz",
"integrity": "sha512-hK1hPq8xOFxmnNwpsOcQ2wSRAQwNBhDqsMV75gyKYQ7Z39KmTRpMN2Jx6Wp0Mberqd2QEWsUqd9ccP2jfd4z2Q==",
"dev": true,
"requires": {
"babel-plugin-dynamic-import-node": "1.0.2",
"babel-plugin-syntax-dynamic-import": "6.18.0",
"babel-plugin-transform-class-properties": "6.24.1",
"babel-plugin-transform-object-rest-spread": "6.23.0",
"babel-plugin-transform-react-constant-elements": "6.23.0",
"babel-plugin-transform-react-jsx": "6.24.1",
"babel-plugin-transform-react-jsx-self": "6.22.0",
"babel-plugin-transform-react-jsx-source": "6.22.0",
"babel-plugin-transform-regenerator": "6.24.1",
"babel-plugin-transform-runtime": "6.23.0",
"babel-preset-env": "1.5.2",
"babel-preset-react": "6.24.1"
},
"dependencies": {
"babel-plugin-transform-object-rest-spread": {
"version": "6.23.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz",
"integrity": "sha1-h11ryb52HFiirj/u5dxIldjH+SE=",
"dev": true,
"requires": {
"babel-plugin-syntax-object-rest-spread": "6.13.0",
"babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-regenerator": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz",
"integrity": "sha1-uNowWtQ8PJm0hI5P5AN7dw0jxBg=",
"dev": true,
"requires": {
"regenerator-transform": "0.9.11"
}
},
"babel-preset-env": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.5.2.tgz",
"integrity": "sha1-zUrpCm6Utwn5c3SzPl+LmDVWre8=",
"dev": true,
"requires": {
"babel-plugin-check-es2015-constants": "6.22.0",
"babel-plugin-syntax-trailing-function-commas": "6.22.0",
"babel-plugin-transform-async-to-generator": "6.24.1",
"babel-plugin-transform-es2015-arrow-functions": "6.22.0",
"babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
"babel-plugin-transform-es2015-block-scoping": "6.26.0",
"babel-plugin-transform-es2015-classes": "6.24.1",
"babel-plugin-transform-es2015-computed-properties": "6.24.1",
"babel-plugin-transform-es2015-destructuring": "6.23.0",
"babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
"babel-plugin-transform-es2015-for-of": "6.23.0",
"babel-plugin-transform-es2015-function-name": "6.24.1",
"babel-plugin-transform-es2015-literals": "6.22.0",
"babel-plugin-transform-es2015-modules-amd": "6.24.1",
"babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
"babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
"babel-plugin-transform-es2015-modules-umd": "6.24.1",
"babel-plugin-transform-es2015-object-super": "6.24.1",
"babel-plugin-transform-es2015-parameters": "6.24.1",
"babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
"babel-plugin-transform-es2015-spread": "6.22.0",
"babel-plugin-transform-es2015-sticky-regex": "6.24.1",
"babel-plugin-transform-es2015-template-literals": "6.22.0",
"babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
"babel-plugin-transform-es2015-unicode-regex": "6.24.1",
"babel-plugin-transform-exponentiation-operator": "6.24.1",
"babel-plugin-transform-regenerator": "6.24.1",
"browserslist": "2.5.1",
"invariant": "2.2.2",
"semver": "5.4.1"
}
},
"regenerator-transform": {
"version": "0.9.11",
"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.9.11.tgz",
"integrity": "sha1-On0GdSDLe3F2dp61/4aGkb7+EoM=",
"dev": true,
"requires": {
"babel-runtime": "6.26.0",
"babel-types": "6.26.0",
"private": "0.1.8"
}
}
}
},
"babel-preset-stage-0": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz",
......@@ -2134,7 +2236,6 @@
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
"core-js": "2.5.1",
"regenerator-runtime": "0.11.0"
......@@ -2143,8 +2244,7 @@
"core-js": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
"integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=",
"dev": true
"integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs="
}
}
},
......@@ -2646,27 +2746,34 @@
}
},
"cheerio": {
"version": "0.22.0",
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
"integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=",
"version": "1.0.0-rc.2",
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz",
"integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=",
"dev": true,
"requires": {
"css-select": "1.2.0",
"dom-serializer": "0.1.0",
"entities": "1.1.1",
"htmlparser2": "3.9.2",
"lodash.assignin": "4.2.0",
"lodash.bind": "4.2.1",
"lodash.defaults": "4.2.0",
"lodash.filter": "4.6.0",
"lodash.flatten": "4.4.0",
"lodash.foreach": "4.5.0",
"lodash.map": "4.6.0",
"lodash.merge": "4.6.0",
"lodash.pick": "4.4.0",
"lodash.reduce": "4.6.0",
"lodash.reject": "4.6.0",
"lodash.some": "4.6.0"
"lodash": "4.17.4",
"parse5": "3.0.3"
},
"dependencies": {
"lodash": {
"version": "4.17.4",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
"integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
"dev": true
},
"parse5": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
"integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
"dev": true,
"requires": {
"@types/node": "8.0.53"
}
}
}
},
"chokidar": {
......@@ -3149,16 +3256,6 @@
"sha.js": "2.4.9"
}
},
"create-react-class": {
"version": "15.6.2",
"resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.2.tgz",
"integrity": "sha1-zx7RXxKq1/FO9fLf4F5sQvke8Co=",
"requires": {
"fbjs": "0.8.16",
"loose-envify": "1.3.1",
"object-assign": "4.1.1"
}
},
"cross-spawn": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
......@@ -3703,6 +3800,12 @@
"randombytes": "2.0.5"
}
},
"discontinuous-range": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz",
"integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=",
"dev": true
},
"dns-equal": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
......@@ -3890,21 +3993,63 @@
"dev": true
},
"enzyme": {
"version": "2.9.1",
"resolved": "https://registry.npmjs.org/enzyme/-/enzyme-2.9.1.tgz",
"integrity": "sha1-B9XOaRJBJA+4F78sSxjW5TAkDfY=",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.2.0.tgz",
"integrity": "sha512-l0HcjycivXjB4IXkwuRc1K5z8hzWIVZB2b/Y/H2bao9eFTpBz4ACOwAQf44SgG5Nu3d1jF41LasxDgFWZeeysA==",
"dev": true,
"requires": {
"cheerio": "0.22.0",
"cheerio": "1.0.0-rc.2",
"function.prototype.name": "1.0.3",
"has": "1.0.1",
"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",
"raf": "3.4.0",
"rst-selector-parser": "2.2.3"
},
"dependencies": {
"lodash": {
"version": "4.17.4",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
"integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
"dev": true
}
}
},
"enzyme-adapter-react-16": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.0.tgz",
"integrity": "sha512-OlZJn5PJUJ91EOQQRuISZpXgPlqT9fYR2yBZQPu9UYok+wS19Rn4teXywF34LMcyw2AzE1s0ZRDtcI952/vQHg==",
"dev": true,
"requires": {
"enzyme-adapter-utils": "1.1.1",
"lodash": "4.17.4",
"object.assign": "4.0.4",
"object.values": "1.0.4",
"prop-types": "15.6.0",
"uuid": "3.1.0"
"react-test-renderer": "16.1.1"
},
"dependencies": {
"lodash": {
"version": "4.17.4",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
"integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
"dev": true
}
}
},
"enzyme-adapter-utils": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.1.1.tgz",
"integrity": "sha512-XU41nEiTl7O2JJvRA7JoCMhkDYRW9mQAgiy67Yz9BqTiRP/ldwuJYX8Gkom2LlihKIb9wy96IDuayR3RQspSNg==",
"dev": true,
"requires": {
"lodash": "4.17.4",
"object.assign": "4.0.4",
"prop-types": "15.6.0"
},
"dependencies": {
"lodash": {
......@@ -4179,27 +4324,27 @@
}
},
"eslint-config-airbnb": {
"version": "15.1.0",
"resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-15.1.0.tgz",
"integrity": "sha512-m0q9fiMBzDAIbirlGnpJNWToIhdhJmXXnMG+IFflYzzod9231ZhtmGKegKg8E9T8F1YuVaDSU1FnCm5b9iXVhQ==",
"version": "16.1.0",
"resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-16.1.0.tgz",
"integrity": "sha512-zLyOhVWhzB/jwbz7IPSbkUuj7X2ox4PHXTcZkEmDqTvd0baJmJyuxlFPDlZOE/Y5bC+HQRaEkT3FoHo9wIdRiw==",
"dev": true,
"requires": {
"eslint-config-airbnb-base": "11.3.2"
"eslint-config-airbnb-base": "12.1.0"
}
},
"eslint-config-airbnb-base": {
"version": "11.3.2",
"resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz",
"integrity": "sha512-/fhjt/VqzBA2SRsx7ErDtv6Ayf+XLw9LIOqmpBuHFCVwyJo2EtzGWMB9fYRFBoWWQLxmNmCpenNiH0RxyeS41w==",
"version": "12.1.0",
"resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz",
"integrity": "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==",
"dev": true,
"requires": {
"eslint-restricted-globals": "0.1.1"
}
},
"eslint-config-edx": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/eslint-config-edx/-/eslint-config-edx-4.0.0.tgz",
"integrity": "sha1-E27ESi1CfzVhZeUvrAFNX05jqEA=",
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/eslint-config-edx/-/eslint-config-edx-4.0.1.tgz",
"integrity": "sha1-jLFiErhbiRUfMxZnIVe+JpzO5J0=",
"dev": true,
"requires": {
"eslint": "4.9.0",
......@@ -4208,6 +4353,41 @@
"eslint-plugin-import": "2.8.0",
"eslint-plugin-jsx-a11y": "5.1.1",
"eslint-plugin-react": "7.4.0"
},
"dependencies": {
"eslint-config-airbnb": {
"version": "15.1.0",
"resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-15.1.0.tgz",
"integrity": "sha512-m0q9fiMBzDAIbirlGnpJNWToIhdhJmXXnMG+IFflYzzod9231ZhtmGKegKg8E9T8F1YuVaDSU1FnCm5b9iXVhQ==",
"dev": true,
"requires": {
"eslint-config-airbnb-base": "11.3.2"
}
},
"eslint-config-airbnb-base": {
"version": "11.3.2",
"resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz",
"integrity": "sha512-/fhjt/VqzBA2SRsx7ErDtv6Ayf+XLw9LIOqmpBuHFCVwyJo2EtzGWMB9fYRFBoWWQLxmNmCpenNiH0RxyeS41w==",
"dev": true,
"requires": {
"eslint-restricted-globals": "0.1.1"
}
},
"eslint-plugin-jsx-a11y": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz",
"integrity": "sha512-5I9SpoP7gT4wBFOtXT8/tXNPYohHBVfyVfO17vkbC7r9kEIxYJF12D3pKqhk8+xnk12rfxKClS3WCFpVckFTPQ==",
"dev": true,
"requires": {
"aria-query": "0.7.0",
"array-includes": "3.0.3",
"ast-types-flow": "0.0.7",
"axobject-query": "0.1.0",
"damerau-levenshtein": "1.0.4",
"emoji-regex": "6.5.1",
"jsx-ast-utils": "1.4.1"
}
}
}
},
"eslint-import-resolver-node": {
......@@ -4393,9 +4573,9 @@
}
},
"eslint-plugin-jsx-a11y": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz",
"integrity": "sha512-5I9SpoP7gT4wBFOtXT8/tXNPYohHBVfyVfO17vkbC7r9kEIxYJF12D3pKqhk8+xnk12rfxKClS3WCFpVckFTPQ==",
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.2.tgz",
"integrity": "sha1-ZZJ3p1iwNsMFp+ShMFfDAc075z8=",
"dev": true,
"requires": {
"aria-query": "0.7.0",
......@@ -4748,12 +4928,13 @@
}
},
"file-loader": {
"version": "0.11.2",
"resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.11.2.tgz",
"integrity": "sha512-N+uhF3mswIFeziHQjGScJ/yHXYt3DiLBeC+9vWW+WjUBiClMSOlV1YrXQi+7KM2aA3Rn4Bybgv+uXFQbfkzpvg==",
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.5.tgz",
"integrity": "sha512-RzGHDatcVNpGISTvCpfUfOGpYuSR7HSsSg87ki+wF6rw1Hm0RALPTiAdsxAq1UwLf0RRhbe22/eHK6nhXspiOQ==",
"dev": true,
"requires": {
"loader-utils": "1.1.0"
"loader-utils": "1.1.0",
"schema-utils": "0.3.0"
}
},
"filename-regex": {
......@@ -4855,6 +5036,11 @@
"integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=",
"dev": true
},
"font-awesome": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
"integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM="
},
"for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
......@@ -6067,21 +6253,6 @@
"through": "2.3.8"
}
},
"glamorous": {
"version": "4.9.7",
"resolved": "https://registry.npmjs.org/glamorous/-/glamorous-4.9.7.tgz",
"integrity": "sha512-4Ts/k1fCvRez1k6xYIuXQqFmVG1RjbpQZOHNCWSteY1Tza4YeyExkj4SypAhCspcAzkjvqaUboaLmSfMmx9uLQ==",
"dev": true,
"requires": {
"brcast": "3.0.1",
"fast-memoize": "2.2.8",
"html-tag-names": "1.1.2",
"is-function": "1.0.1",
"is-plain-object": "2.0.4",
"react-html-attributes": "1.4.1",
"svg-tag-names": "1.1.1"
}
},
"glob": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
......@@ -7628,6 +7799,11 @@
"pretty-format": "21.2.1"
}
},
"jquery": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz",
"integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c="
},
"js-base64": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz",
......@@ -7964,18 +8140,6 @@
"integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
"dev": true
},
"lodash.assignin": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
"integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=",
"dev": true
},
"lodash.bind": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
"integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=",
"dev": true
},
"lodash.camelcase": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
......@@ -8000,36 +8164,12 @@
"integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
"dev": true
},
"lodash.defaults": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
"integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
"dev": true
},
"lodash.filter": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
"integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=",
"dev": true
},
"lodash.flatten": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
"integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
"dev": true
},
"lodash.flattendeep": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
"integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
"dev": true
},
"lodash.foreach": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
"integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=",
"dev": true
},
"lodash.get": {
"version": "3.7.0",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-3.7.0.tgz",
......@@ -8069,24 +8209,12 @@
"lodash.isarray": "3.0.4"
}
},
"lodash.map": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
"integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
"dev": true
},
"lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
"integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
"dev": true
},
"lodash.merge": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz",
"integrity": "sha1-aYhLoUSsM/5plzemCG3v+t0PicU=",
"dev": true
},
"lodash.mergewith": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz",
......@@ -8099,18 +8227,6 @@
"integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
"dev": true
},
"lodash.reduce": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
"integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=",
"dev": true
},
"lodash.reject": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
"integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=",
"dev": true
},
"lodash.some": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
......@@ -8211,32 +8327,6 @@
"tmpl": "1.0.4"
}
},
"mantra-core": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/mantra-core/-/mantra-core-1.7.0.tgz",
"integrity": "sha1-qMg+jO6D72pzgxMVGf6AMa1UY4Y=",
"dev": true,
"requires": {
"babel-runtime": "6.26.0",
"react-komposer": "1.13.1",
"react-simple-di": "1.2.0"
},
"dependencies": {
"react-komposer": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/react-komposer/-/react-komposer-1.13.1.tgz",
"integrity": "sha1-S4rEvMcTI710E9yrlcgxGX9Q7tA=",
"dev": true,
"requires": {
"babel-runtime": "6.26.0",
"hoist-non-react-statics": "1.2.0",
"invariant": "2.2.2",
"mobx": "2.7.0",
"shallowequal": "0.2.2"
}
}
}
},
"map-obj": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
......@@ -8580,12 +8670,6 @@
"minimist": "0.0.8"
}
},
"mobx": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/mobx/-/mobx-2.7.0.tgz",
"integrity": "sha1-zz2C0YwMp/RY2PKiQIF7PcflSgE=",
"dev": true
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
......@@ -8626,6 +8710,17 @@
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
"dev": true
},
"nearley": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/nearley/-/nearley-2.11.0.tgz",
"integrity": "sha512-clqqhEuP0ZCJQ85Xv2I/4o2Gs/fvSR6fCg5ZHVE2c8evWyNk2G++ih4JOO3lMb/k/09x6ihQ2nzKUlB/APCWjg==",
"dev": true,
"requires": {
"nomnom": "1.6.2",
"railroad-diagrams": "1.0.0",
"randexp": "0.4.6"
}
},
"negotiator": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
......@@ -8820,6 +8915,24 @@
}
}
},
"nomnom": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz",
"integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=",
"dev": true,
"requires": {
"colors": "0.5.1",
"underscore": "1.4.4"
},
"dependencies": {
"colors": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz",
"integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=",
"dev": true
}
}
},
"nopt": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
......@@ -9356,6 +9469,11 @@
"immutable": "3.8.2"
}
},
"popper.js": {
"version": "1.12.9",
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.12.9.tgz",
"integrity": "sha1-DfvC3/lsRRuzMu3Pz6r1ZtMx1bM="
},
"portfinder": {
"version": "1.0.13",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz",
......@@ -11531,6 +11649,31 @@
}
}
},
"raf": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz",
"integrity": "sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==",
"dev": true,
"requires": {
"performance-now": "2.1.0"
}
},
"railroad-diagrams": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz",
"integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=",
"dev": true
},
"randexp": {
"version": "0.4.6",
"resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz",
"integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==",
"dev": true,
"requires": {
"discontinuous-range": "1.0.0",
"ret": "0.1.15"
}
},
"randomatic": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
......@@ -11600,11 +11743,10 @@
}
},
"react": {
"version": "15.6.2",
"resolved": "https://registry.npmjs.org/react/-/react-15.6.2.tgz",
"integrity": "sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=",
"version": "16.1.1",
"resolved": "https://registry.npmjs.org/react/-/react-16.1.1.tgz",
"integrity": "sha512-FQfiFfk2z2Fk87OngNJHT05KyC9DOVn8LPeB7ZX+9u5+yU1JK6o5ozRlU3PeOMr0IFkWNvgn9jU8/IhRxR1F0g==",
"requires": {
"create-react-class": "15.6.2",
"fbjs": "0.8.16",
"loose-envify": "1.3.1",
"object-assign": "4.1.1",
......@@ -11635,9 +11777,9 @@
}
},
"react-dom": {
"version": "15.6.2",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.2.tgz",
"integrity": "sha1-Qc+t9pO3V/rycIRDodH9WgK+9zA=",
"version": "16.1.1",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.1.1.tgz",
"integrity": "sha512-q06jiwST8SEPAMIEkAsu7BgynEZtqF87VrTc70XsW7nxVhWEu2Y4MF5UfxxHQO/mNtQHQWP0YcFxmwm9oMrMaQ==",
"requires": {
"fbjs": "0.8.16",
"loose-envify": "1.3.1",
......@@ -11645,6 +11787,11 @@
"prop-types": "15.6.0"
}
},
"react-element-proptypes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/react-element-proptypes/-/react-element-proptypes-1.0.0.tgz",
"integrity": "sha1-ygpafBYk646CrQjqeIzfyWvBpRc="
},
"react-html-attributes": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/react-html-attributes/-/react-html-attributes-1.4.1.tgz",
......@@ -11679,29 +11826,6 @@
"is-dom": "1.0.9"
}
},
"react-komposer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/react-komposer/-/react-komposer-2.0.0.tgz",
"integrity": "sha1-uWRzgBSptK7klKg8C1uDPWYHKpA=",
"dev": true,
"requires": {
"babel-runtime": "6.26.0",
"hoist-non-react-statics": "1.2.0",
"lodash.pick": "4.4.0",
"react-stubber": "1.0.0",
"shallowequal": "0.2.2"
}
},
"react-modal": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/react-modal/-/react-modal-2.4.1.tgz",
"integrity": "sha512-3WQCn3xqkbEUvxRUO3nkeqxMNgt1F4CyEU3BiUIrg7C71tnqjQIuSE7+JXp85yFl8X1iRTJouySNpwNqv4kiWg==",
"dev": true,
"requires": {
"exenv": "1.2.2",
"prop-types": "15.6.0"
}
},
"react-proptype-conditional-require": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/react-proptype-conditional-require/-/react-proptype-conditional-require-1.0.4.tgz",
......@@ -11759,36 +11883,6 @@
"warning": "3.0.0"
}
},
"react-simple-di": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/react-simple-di/-/react-simple-di-1.2.0.tgz",
"integrity": "sha1-3eDlv2ifOR7yqwLJBDshP+I5xtA=",
"dev": true,
"requires": {
"babel-runtime": "6.26.0",
"hoist-non-react-statics": "1.2.0"
}
},
"react-split-pane": {
"version": "0.1.66",
"resolved": "https://registry.npmjs.org/react-split-pane/-/react-split-pane-0.1.66.tgz",
"integrity": "sha512-k4F0+BaHkPn0WclipkxEDL18Td2Ocgu+XzhOZznGngWk2l3mB5ujX7jxd5DSa8spHIuCGKQXzgjrk7rc2Y5BUQ==",
"dev": true,
"requires": {
"inline-style-prefixer": "3.0.8",
"prop-types": "15.6.0",
"react-style-proptype": "3.0.0"
}
},
"react-stubber": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/react-stubber/-/react-stubber-1.0.0.tgz",
"integrity": "sha1-Qe4srHLU1P1wpjiW2pjhNzm4Rig=",
"dev": true,
"requires": {
"babel-runtime": "6.26.0"
}
},
"react-style-proptype": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/react-style-proptype/-/react-style-proptype-3.0.0.tgz",
......@@ -11799,13 +11893,14 @@
}
},
"react-test-renderer": {
"version": "15.6.2",
"resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-15.6.2.tgz",
"integrity": "sha1-0DM0NPwsQ4CSaWyncNpe1IA376g=",
"version": "16.1.1",
"resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.1.1.tgz",
"integrity": "sha512-RV0Krfuc6wDnlv5C/BJzW3e2/s7ZTMZ25gfVjdXdT3hhXNDCQlZucP83HMD8mVh1XScGx9hRaXnIRJ7mE+2N6A==",
"dev": true,
"requires": {
"fbjs": "0.8.16",
"object-assign": "4.1.1"
"object-assign": "4.1.1",
"prop-types": "15.6.0"
}
},
"react-transition-group": {
......@@ -12016,8 +12111,7 @@
"regenerator-runtime": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz",
"integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==",
"dev": true
"integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A=="
},
"regenerator-transform": {
"version": "0.10.1",
......@@ -12201,6 +12295,12 @@
"signal-exit": "3.0.2"
}
},
"ret": {
"version": "0.1.15",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
"integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
"dev": true
},
"right-align": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
......@@ -12229,6 +12329,16 @@
"inherits": "2.0.3"
}
},
"rst-selector-parser": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz",
"integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=",
"dev": true,
"requires": {
"lodash.flattendeep": "4.4.0",
"nearley": "2.11.0"
}
},
"run-async": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
......@@ -13489,6 +13599,12 @@
"integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
"dev": true
},
"underscore": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
"integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=",
"dev": true
},
"uniq": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
......@@ -13543,24 +13659,6 @@
}
}
},
"url-loader": {
"version": "0.5.9",
"resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.9.tgz",
"integrity": "sha512-B7QYFyvv+fOBqBVeefsxv6koWWtjmHaMFT6KZWti4KRw8YUD/hOU+3AECvXuzyVawIBx3z7zQRejXCDSO5kk1Q==",
"dev": true,
"requires": {
"loader-utils": "1.1.0",
"mime": "1.3.6"
},
"dependencies": {
"mime": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz",
"integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=",
"dev": true
}
}
},
"url-parse": {
"version": "1.1.9",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.1.9.tgz",
......
......@@ -24,11 +24,12 @@
},
"dependencies": {
"@edx/edx-bootstrap": "^0.4.2",
"babel-polyfill": "^6.26.0",
"classnames": "^2.2.5",
"font-awesome": "^4.7.0",
"prop-types": "^15.5.8",
"react": "^15.5.4",
"react-dom": "^15.5.4",
"react": "^16.1.0",
"react-dom": "^16.1.0",
"react-element-proptypes": "^1.0.0",
"react-proptype-conditional-require": "^1.0.4"
},
......@@ -37,8 +38,8 @@
"@storybook/addon-console": "^1.0.0",
"@storybook/addon-options": "^3.2.6",
"@storybook/addon-storyshots": "^3.2.8",
"@storybook/channels": "^3.2.15",
"@storybook/react": "^3.2.12",
"@storybook/channels": "^3.2.16",
"@storybook/react": "^3.2.16",
"@storybook/storybook-deployer": "^2.0.0",
"babel-cli": "^6.24.1",
"babel-jest": "^21.0.0",
......@@ -52,9 +53,10 @@
"coveralls": "^3.0.0",
"css-loader": "^0.28.4",
"cz-conventional-changelog": "^2.1.0",
"enzyme": "^2.8.2",
"enzyme": "^3.1.1",
"enzyme-adapter-react-16": "^1.0.4",
"eslint": "^4.5.0",
"eslint-config-airbnb": "^15.0.1",
"eslint-config-airbnb": "^16.0.0",
"eslint-config-edx": "^4.0.1",
"eslint-import-resolver-webpack": "^0.8.1",
"eslint-plugin-jsx-a11y": "^5.1.0",
......@@ -67,7 +69,7 @@
"node-sass": "^4.5.3",
"postcss-scss": "^1.0.1",
"react-router-dom": "^4.1.1",
"react-test-renderer": "^15.6.1",
"react-test-renderer": "^16.1.0",
"sass-loader": "^6.0.5",
"semantic-release": "^8.2.0",
"source-map-loader": "^0.2.1",
......@@ -77,6 +79,9 @@
"webpack-dev-server": "^2.4.4"
},
"jest": {
"setupFiles": [
"./src/setupTest.js"
],
"moduleNameMapper": {
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",
"\\.(css|scss)$": "identity-obj-proxy"
......
......@@ -12,11 +12,9 @@ describe('<Button />', () => {
let button;
beforeEach(() => {
wrapper = mount(
<Button
{...defaultProps}
/>,
);
wrapper = mount(<Button
{...defaultProps}
/>);
button = wrapper.find('button');
});
......@@ -26,7 +24,8 @@ describe('<Button />', () => {
it('puts focus on button on click', () => {
expect(button.matchesElement(document.activeElement)).toEqual(false);
button.simulate('click');
expect(button.at(0).matchesElement(document.activeElement)).toEqual(true);
button = wrapper.find('button');
expect(button.at(0).html()).toEqual(document.activeElement.outerHTML);
});
it('calls onClick prop on click', () => {
const onClickSpy = jest.fn();
......
......@@ -5,12 +5,7 @@ import CheckBox from './index';
describe('<CheckBox />', () => {
it('attributes are set correctly', () => {
const wrapper = mount(
<CheckBox
name="checkbox"
label="check me out!"
/>,
);
const wrapper = mount(<CheckBox name="checkbox" label="check me out!" />);
expect(wrapper.find('[name="checkbox"]').exists()).toEqual(true);
expect(wrapper.find('[type="checkbox"]').exists()).toEqual(true);
......@@ -19,12 +14,7 @@ describe('<CheckBox />', () => {
});
it('aria-label changes after click', () => {
const wrapper = mount(
<CheckBox
name="checkbox"
label="check me out!"
/>,
);
const wrapper = mount(<CheckBox name="checkbox" label="check me out!" />);
expect(wrapper.find('[aria-checked=false]').exists()).toEqual(true);
......@@ -39,13 +29,7 @@ describe('<CheckBox />', () => {
it('check that callback function is triggered when clicked', () => {
const spy = jest.fn();
const wrapper = mount(
<CheckBox
name="checkbox"
label="check me out!"
onChange={spy}
/>,
);
const wrapper = mount(<CheckBox name="checkbox" label="check me out!"onChange={spy} />);
expect(spy).toHaveBeenCalledTimes(0);
// check
......@@ -59,13 +43,7 @@ describe('<CheckBox />', () => {
});
it('checks if start state can be set to checked', () => {
const wrapper = mount(
<CheckBox
name="checkbox"
label="I start checked"
checked
/>,
);
const wrapper = mount(<CheckBox name="checkbox" label="I start checked" checked />);
expect(wrapper.find('[defaultChecked=true]').exists()).toEqual(true);
expect(wrapper.find('[aria-checked=true]').exists()).toEqual(true);
......@@ -76,13 +54,7 @@ describe('<CheckBox />', () => {
});
it('checkbox can be disabled', () => {
const wrapper = mount(
<CheckBox
name="checkbox"
label="I am disabled"
disabled
/>,
);
const wrapper = mount(<CheckBox name="checkbox" label="I am disabled" disabled />);
expect(wrapper.props().disabled).toEqual(true);
......
/* eslint-disable import/no-extraneous-dependencies */
import React from 'react';
import { shallow, mount } from 'enzyme';
import { mount, shallow } from 'enzyme';
import Dropdown, { triggerKeys } from './index';
......@@ -14,20 +14,16 @@ const props = {
};
const menuOpen = (isOpen, wrapper) => {
expect(wrapper.hasClass('show')).toEqual(isOpen);
expect(wrapper.find('[type="button"]').prop('aria-expanded')).toEqual(isOpen);
expect(wrapper.childAt(0).hasClass('show')).toEqual(isOpen);
expect(wrapper.find('Button').prop('aria-expanded')).toEqual(isOpen);
expect(wrapper.find('[aria-hidden=false]').exists()).toEqual(isOpen);
};
describe('<Dropdown />', () => {
describe('renders', () => {
const wrapper = shallow(
<Dropdown
{...props}
/>,
);
const wrapper = shallow(<Dropdown {...props} />);
const menu = wrapper.find('.dropdown-menu');
const button = wrapper.find('[type="button"]');
const button = wrapper.find('Button');
it('with menu and toggle', () => {
expect(button.exists()).toEqual(true);
......@@ -45,21 +41,17 @@ describe('<Dropdown />', () => {
let wrapper;
beforeEach(() => {
wrapper = mount(
<Dropdown
{...props}
/>,
);
wrapper = mount(<Dropdown {...props} />);
});
it('on toggle click', () => {
wrapper.find('[type="button"]').simulate('click');
wrapper.find('Button').simulate('click');
menuOpen(true, wrapper);
});
triggerKeys.OPEN_MENU.forEach((key) => {
it(`on ${key}`, () => {
wrapper.find('[type="button"]').simulate('keyDown', { key });
wrapper.find('Button').simulate('keyDown', { key });
menuOpen(true, wrapper);
});
});
......@@ -69,27 +61,24 @@ describe('<Dropdown />', () => {
let wrapper;
beforeEach(() => {
wrapper = mount(
<Dropdown
{...props}
/>,
);
wrapper.find('[type="button"]').simulate('click');
wrapper = mount(<Dropdown {...props} />);
wrapper.find('Button').simulate('click');
});
it('on toggle click', () => {
wrapper.find('[type="button"]').simulate('click');
wrapper.find('Button').simulate('click');
menuOpen(false, wrapper);
});
it('on document click', () => {
document.querySelector('body').click();
wrapper.update();
menuOpen(false, wrapper);
});
triggerKeys.CLOSE_MENU.forEach((key) => {
it(`on button ${key}`, () => {
wrapper.find('[type="button"]').simulate('keyDown', { key });
wrapper.find('Button').simulate('keyDown', { key });
menuOpen(false, wrapper);
});
......@@ -109,7 +98,7 @@ describe('<Dropdown />', () => {
/>,
{ attachTo: div },
);
wrapper.find('[type="button"]').simulate('click');
wrapper.find('Button').simulate('click');
document.querySelector('.dropdown-menu').click();
menuOpen(true, wrapper);
});
......@@ -118,23 +107,19 @@ describe('<Dropdown />', () => {
let wrapper;
beforeEach(() => {
wrapper = mount(
<Dropdown
{...props}
/>,
);
wrapper.find('[type="button"]').simulate('click');
wrapper = mount(<Dropdown {...props} />);
wrapper.find('Button').simulate('click');
});
it('first menu item on open', () => {
expect(wrapper.find('a').at(0).matchesElement(document.activeElement)).toEqual(true);
expect(wrapper.find('a').at(0).html()).toEqual(document.activeElement.outerHTML);
});
describe('forward in list', () => {
triggerKeys.NAVIGATE_DOWN.forEach((key) => {
it(`on ${key}`, () => {
wrapper.find('a').at(0).simulate('keyDown', { key });
expect(wrapper.find('a').at(1).matchesElement(document.activeElement)).toEqual(true);
expect(wrapper.find('a').at(1).html()).toEqual(document.activeElement.outerHTML);
});
});
});
......@@ -144,7 +129,7 @@ describe('<Dropdown />', () => {
it(`on ${key}`, () => {
wrapper.find('a').at(0).simulate('keyDown', { key: triggerKeys.NAVIGATE_DOWN[0] });
wrapper.find('a').at(1).simulate('keyDown', { key });
expect(wrapper.find('a').at(0).matchesElement(document.activeElement)).toEqual(true);
expect(wrapper.find('a').at(0).html()).toEqual(document.activeElement.outerHTML);
});
});
});
......@@ -152,10 +137,10 @@ describe('<Dropdown />', () => {
describe('invalid key in open menu', () => {
it('test', () => {
menuOpen(true, wrapper);
expect(wrapper.find('a').at(0).matchesElement(document.activeElement)).toEqual(true);
expect(wrapper.find('a').at(0).html()).toEqual(document.activeElement.outerHTML);
wrapper.find('a').at(0).simulate('keyDown', { key: 'q' });
menuOpen(true, wrapper);
expect(wrapper.find('a').at(0).matchesElement(document.activeElement)).toEqual(true);
expect(wrapper.find('a').at(0).html()).toEqual(document.activeElement.outerHTML);
});
});
......@@ -163,31 +148,32 @@ describe('<Dropdown />', () => {
wrapper.find('a').at(0).simulate('keyDown', { key: triggerKeys.NAVIGATE_DOWN[0] });
wrapper.find('a').at(1).simulate('keyDown', { key: triggerKeys.NAVIGATE_DOWN[0] });
wrapper.find('a').at(2).simulate('keyDown', { key: triggerKeys.NAVIGATE_DOWN[0] });
expect(wrapper.find('a').at(0).matchesElement(document.activeElement)).toEqual(true);
expect(wrapper.find('a').at(0).html()).toEqual(document.activeElement.outerHTML);
});
describe('toggle', () => {
it('toggle on close', () => {
wrapper.find('a').at(0).simulate('keyDown', { key: triggerKeys.CLOSE_MENU[0] });
expect(wrapper.find('[type="button"]').matchesElement(document.activeElement)).toEqual(true);
wrapper.instance().forceUpdate();
expect(wrapper.find('Button').html()).toEqual(document.activeElement.outerHTML);
});
it('does not toggle with invalid key', () => {
wrapper = mount(
<Dropdown
{...props}
/>,
);
wrapper = mount(<Dropdown {...props} />);
menuOpen(false, wrapper);
// open and close button to get focus on button
wrapper.find('[type="button"]').simulate('click');
wrapper.find('[type="button"]').simulate('click');
expect(wrapper.find('[type="button"]').matchesElement(document.activeElement)).toEqual(true);
wrapper.find('Button').prop('onClick');
wrapper.instance().forceUpdate();
wrapper.find('Button').prop('onClick');
wrapper.instance().forceUpdate();
expect(wrapper.find('Button').html()).toEqual(document.activeElement.outerHTML);
wrapper.find('[type="button"]').simulate('keyDown', { key: 'q' });
wrapper.find('Button').simulate('keyDown', { key: 'q' });
menuOpen(false, wrapper);
expect(wrapper.find('[type="button"]').matchesElement(document.activeElement)).toEqual(true);
expect(wrapper.find('Button').html()).toEqual(document.activeElement.outerHTML);
});
});
});
......
......@@ -19,22 +19,22 @@ const onClick = (event) => {
storiesOf('HyperLink', module)
.add('minimal usage', () => (
<Hyperlink
destination={'https://en.wikipedia.org/wiki/Hyperlink'}
content={'edX.org'}
destination="https://en.wikipedia.org/wiki/Hyperlink"
content="edX.org"
/>
))
.add('with blank target', () => (
<Hyperlink
destination={'https://www.edx.org'}
content={'edX.org'}
target={'_blank'}
destination="https://www.edx.org"
content="edX.org"
target="_blank"
/>
))
.add('with onClick', () => (
<Hyperlink
destination={'https://www.edx.org'}
content={'edX.org'}
target={'_blank'}
destination="https://www.edx.org"
content="edX.org"
target="_blank"
onClick={onClick}
/>
));
/* eslint-disable import/no-extraneous-dependencies */
import React from 'react';
import { mount } from 'enzyme';
import Modal from './index';
import Button from '../Button';
const modalOpen = (isOpen, wrapper) => {
expect(wrapper.hasClass('modal-open')).toEqual(isOpen);
expect(wrapper.childAt(0).hasClass('modal-open')).toEqual(isOpen);
expect(wrapper.state('open')).toEqual(isOpen);
};
const title = 'Modal title';
......@@ -38,11 +39,7 @@ describe('<Modal />', () => {
];
it('renders default buttons', () => {
wrapper = mount(
<Modal
{...defaultProps}
/>,
);
wrapper = mount(<Modal {...defaultProps} />);
const modalTitle = wrapper.find('.modal-title');
const modalBody = wrapper.find('.modal-body');
......@@ -52,36 +49,21 @@ describe('<Modal />', () => {
});
it('renders custom buttons', () => {
wrapper = mount(
<Modal
{...defaultProps}
buttons={buttons}
/>,
);
wrapper = mount(<Modal {...defaultProps} buttons={buttons} />);
expect(wrapper.find('button')).toHaveLength(buttons.length + 2);
});
});
describe('props received correctly', () => {
it('component receives props', () => {
wrapper = mount(
<Modal
title={title}
body={body}
onClose={() => {}}
/>,
);
wrapper = mount(<Modal title={title} body={body} onClose={() => {}} />);
modalOpen(false, wrapper);
wrapper.setProps({ open: true });
modalOpen(true, wrapper);
});
it('component receives props and ignores prop change', () => {
wrapper = mount(
<Modal
{...defaultProps}
/>,
);
wrapper = mount(<Modal {...defaultProps} />);
modalOpen(true, wrapper);
wrapper.setProps({ title: 'Changed modal title' });
......@@ -91,11 +73,7 @@ describe('<Modal />', () => {
describe('close functions properly', () => {
beforeEach(() => {
wrapper = mount(
<Modal
{...defaultProps}
/>,
);
wrapper = mount(<Modal {...defaultProps} />);
});
it('closes when x button pressed', () => {
......@@ -118,12 +96,10 @@ describe('<Modal />', () => {
it('calls callback function on close', () => {
const spy = jest.fn();
wrapper = mount(
<Modal
{...defaultProps}
onClose={spy}
/>,
);
wrapper = mount(<Modal
{...defaultProps}
onClose={spy}
/>);
expect(spy).toHaveBeenCalledTimes(0);
......@@ -134,29 +110,29 @@ describe('<Modal />', () => {
});
describe('invalid keystrokes do nothing', () => {
beforeEach(() => {
wrapper = mount(
<Modal
{...defaultProps}
/>,
);
wrapper = mount(<Modal
{...defaultProps}
/>);
});
it('does nothing on invalid keystroke q', () => {
const buttons = wrapper.find('button');
let buttons = wrapper.find('button');
expect(buttons.at(0).matchesElement(document.activeElement)).toEqual(true);
expect(buttons.at(0).html()).toEqual(document.activeElement.outerHTML);
modalOpen(true, wrapper);
buttons.at(0).simulate('keyDown', { key: 'q' });
expect(buttons.at(0).matchesElement(document.activeElement)).toEqual(true);
buttons = wrapper.find('button');
expect(buttons.at(0).html()).toEqual(document.activeElement.outerHTML);
modalOpen(true, wrapper);
});
it('does nothing on invalid keystroke + ctrl', () => {
const buttons = wrapper.find('button');
expect(buttons.at(0).matchesElement(document.activeElement)).toEqual(true);
expect(buttons.at(0).html()).toEqual(document.activeElement.outerHTML);
modalOpen(true, wrapper);
buttons.at(0).simulate('keyDown', { key: 'Tab', ctrlKey: true });
expect(buttons.at(0).matchesElement(document.activeElement)).toEqual(true);
expect(buttons.at(0).html()).toEqual(document.activeElement.outerHTML);
modalOpen(true, wrapper);
});
});
......@@ -164,35 +140,31 @@ describe('<Modal />', () => {
let buttons;
beforeEach(() => {
wrapper = mount(
<Modal
{...defaultProps}
/>,
);
wrapper = mount(<Modal {...defaultProps} />);
buttons = wrapper.find('button');
});
it('has correct initial focus', () => {
expect(buttons.at(0).matchesElement(document.activeElement)).toEqual(true);
expect(buttons.at(0).html()).toEqual(document.activeElement.outerHTML);
});
it('has reset focus after close and reopen', () => {
expect(buttons.at(0).matchesElement(document.activeElement)).toEqual(true);
expect(buttons.at(0).html()).toEqual(document.activeElement.outerHTML);
wrapper.setProps({ open: false });
modalOpen(false, wrapper);
wrapper.setProps({ open: true });
modalOpen(true, wrapper);
expect(buttons.at(0).matchesElement(document.activeElement)).toEqual(true);
expect(buttons.at(0).html()).toEqual(document.activeElement.outerHTML);
});
it('traps focus forwards on tab keystroke', () => {
expect(buttons.at(0).matchesElement(document.activeElement)).toEqual(true);
expect(buttons.at(0).html()).toEqual(document.activeElement.outerHTML);
buttons.last().simulate('keyDown', { key: 'Tab' });
expect(buttons.at(0).matchesElement(document.activeElement)).toEqual(true);
expect(buttons.at(0).html()).toEqual(document.activeElement.outerHTML);
});
it('traps focus backwards on shift + tab keystroke', () => {
expect(buttons.at(0).matchesElement(document.activeElement)).toEqual(true);
expect(buttons.at(0).html()).toEqual(document.activeElement.outerHTML);
buttons.at(0).simulate('keyDown', { key: 'Tab', shiftKey: true });
expect(buttons.last().matchesElement(document.activeElement)).toEqual(true);
expect(buttons.last().html()).toEqual(document.activeElement.outerHTML);
});
});
});
......@@ -40,23 +40,23 @@ const onKeyDown = (event) => {
storiesOf('RadioButtonGroup', module)
.add('unselected minimal usage', () => (
<RadioButtonGroup
name={'rbg'}
label={'Radio Button Group'}
name="rbg"
label="Radio Button Group"
onBlur={action('Radio Button Blur')}
onChange={onChange}
onClick={onClick}
onFocus={onFocus}
onKeyDown={onKeyDown}
>
<RadioButton value={'jaebaebae'}>First Value</RadioButton>
<RadioButton value={'value2'}>Second Value</RadioButton>
<RadioButton value={'value3'}>Third Value</RadioButton>
<RadioButton value="jaebaebae">First Value</RadioButton>
<RadioButton value="value2">Second Value</RadioButton>
<RadioButton value="value3">Third Value</RadioButton>
</RadioButtonGroup>
))
.add('selected minimal usage', () => (
<RadioButtonGroup
name={'rbg'}
label={'Radio Button Group'}
name="rbg"
label="Radio Button Group"
onBlur={action('Radio Button Blur')}
onChange={onChange}
onClick={onClick}
......@@ -64,8 +64,8 @@ storiesOf('RadioButtonGroup', module)
onKeyDown={onKeyDown}
selectedIndex={1}
>
<RadioButton value={'jaebaebae'}>First Value</RadioButton>
<RadioButton value={'value2'}>Second Value</RadioButton>
<RadioButton value={'value3'}>Third Value</RadioButton>
<RadioButton value="jaebaebae">First Value</RadioButton>
<RadioButton value="value2">Second Value</RadioButton>
<RadioButton value="value3">Third Value</RadioButton>
</RadioButtonGroup>
));
......@@ -34,7 +34,7 @@ class RadioButton extends React.PureComponent {
return (
<div>
<input
type={'radio'}
type="radio"
name={name}
aria-checked={isChecked}
defaultChecked={isChecked}
......@@ -95,8 +95,7 @@ class RadioButtonGroup extends React.Component {
onFocus,
onKeyDown,
index,
}),
);
}));
}
render() {
......@@ -115,7 +114,7 @@ class RadioButtonGroup extends React.Component {
return (
<div
role={'radiogroup'}
role="radiogroup"
aria-label={label}
onChange={this.onChange}
tabIndex={-1}
......
import React from 'react';
import { mount } from 'enzyme';
import StatusAlert from './index';
import StatusAlert from './index';
const statusAlertOpen = (isOpen, wrapper) => {
expect(wrapper.hasClass('show')).toEqual(isOpen);
expect(wrapper.childAt(0).hasClass('show')).toEqual(isOpen);
expect(wrapper.state('open')).toEqual(isOpen);
};
const dialog = 'Status Alert dialog';
......@@ -19,11 +19,7 @@ let wrapper;
describe('<StatusAlert />', () => {
describe('correct rendering', () => {
it('renders default view', () => {
wrapper = mount(
<StatusAlert
{...defaultProps}
/>,
);
wrapper = mount(<StatusAlert {...defaultProps} />);
const statusAlertDialog = wrapper.find('.alert-dialog');
expect(statusAlertDialog.text()).toEqual(dialog);
......@@ -31,12 +27,7 @@ describe('<StatusAlert />', () => {
});
it('renders non-dismissible view', () => {
wrapper = mount(
<StatusAlert
{...defaultProps}
dismissible={false}
/>,
);
wrapper = mount(<StatusAlert {...defaultProps} dismissible={false} />);
const statusAlertDialog = wrapper.find('.alert-dialog');
expect(statusAlertDialog.text()).toEqual(dialog);
......@@ -46,12 +37,7 @@ describe('<StatusAlert />', () => {
describe('props received correctly', () => {
it('component receives props', () => {
wrapper = mount(
<StatusAlert
dialog={dialog}
onClose={() => {}}
/>,
);
wrapper = mount(<StatusAlert dialog={dialog} onClose={() => {}} />);
statusAlertOpen(false, wrapper);
wrapper.setProps({ open: true });
......@@ -59,11 +45,7 @@ describe('<StatusAlert />', () => {
});
it('component receives props and ignores prop change', () => {
wrapper = mount(
<StatusAlert
{...defaultProps}
/>,
);
wrapper = mount(<StatusAlert {...defaultProps} />);
statusAlertOpen(true, wrapper);
wrapper.setProps({ dialog: 'Changed alert dialog' });
......@@ -73,11 +55,7 @@ describe('<StatusAlert />', () => {
describe('close functions properly', () => {
beforeEach(() => {
wrapper = mount(
<StatusAlert
{...defaultProps}
/>,
);
wrapper = mount(<StatusAlert {...defaultProps} />);
});
it('closes when x button pressed', () => {
......@@ -101,12 +79,7 @@ describe('<StatusAlert />', () => {
it('calls callback function on close', () => {
const spy = jest.fn();
wrapper = mount(
<StatusAlert
{...defaultProps}
onClose={spy}
/>,
);
wrapper = mount(<StatusAlert {...defaultProps} onClose={spy} />);
expect(spy).toHaveBeenCalledTimes(0);
......@@ -118,30 +91,26 @@ describe('<StatusAlert />', () => {
describe('invalid keystrokes do nothing', () => {
beforeEach(() => {
wrapper = mount(
<StatusAlert
{...defaultProps}
/>,
);
wrapper = mount(<StatusAlert {...defaultProps} />);
});
it('does nothing on invalid keystroke q', () => {
const buttons = wrapper.find('button');
expect(buttons.at(0).matchesElement(document.activeElement)).toEqual(true);
expect(buttons.at(0).html()).toEqual(document.activeElement.outerHTML);
statusAlertOpen(true, wrapper);
buttons.at(0).simulate('keyDown', { key: 'q' });
expect(buttons.at(0).matchesElement(document.activeElement)).toEqual(true);
expect(buttons.at(0).html()).toEqual(document.activeElement.outerHTML);
statusAlertOpen(true, wrapper);
});
it('does nothing on invalid keystroke + ctrl', () => {
const buttons = wrapper.find('button');
expect(buttons.at(0).matchesElement(document.activeElement)).toEqual(true);
expect(buttons.at(0).html()).toEqual(document.activeElement.outerHTML);
statusAlertOpen(true, wrapper);
buttons.at(0).simulate('keyDown', { key: 'Tab', ctrlKey: true });
expect(buttons.at(0).matchesElement(document.activeElement)).toEqual(true);
expect(buttons.at(0).html()).toEqual(document.activeElement.outerHTML);
statusAlertOpen(true, wrapper);
});
});
......
......@@ -51,11 +51,7 @@ const sortableProps = {
describe('<Table />', () => {
describe('renders', () => {
const wrapper = shallow(
<Table
{...props}
/>,
);
const wrapper = shallow(<Table {...props} />);
it('with display columns in the right order', () => {
wrapper.find('th').forEach((th, i) => {
......@@ -78,12 +74,7 @@ describe('<Table />', () => {
});
describe('that is non-sortable renders', () => {
const wrapper = mount(
<Table
{...sortableProps}
tableSortable={false}
/>,
);
const wrapper = mount(<Table {...sortableProps} tableSortable={false} />);
it('without sortable columns', () => {
const tableHeadings = wrapper.find('th');
......@@ -105,11 +96,7 @@ describe('<Table />', () => {
});
describe('that is sortable and has mixed columns renders', () => {
let wrapper = shallow(
<Table
{...sortableProps}
/>,
);
let wrapper = shallow(<Table {...sortableProps} />);
it('with sortable classname on correct headings', () => {
const tableHeadings = wrapper.find('th');
......@@ -140,11 +127,7 @@ describe('<Table />', () => {
expect(wrapper.state('sortDirection')).toEqual(sortableProps.defaultSortDirection);
});
wrapper = mount(
<Table
{...sortableProps}
/>,
);
wrapper = mount(<Table {...sortableProps} />);
it('with correct column buttons', () => {
const buttons = wrapper.find('button');
......@@ -167,11 +150,7 @@ describe('<Table />', () => {
let x2Spy;
beforeEach(() => {
wrapper = mount(
<Table
{...sortableProps}
/>,
);
wrapper = mount(<Table {...sortableProps} />);
buttons = wrapper.find('button');
numSpy = jest.fn();
......@@ -183,6 +162,7 @@ describe('<Table />', () => {
it('changes sort icons appropriately on click', () => {
buttons.at(0).simulate('click');
buttons = wrapper.find('button');
expect(buttons.at(0).find('.fa')).toHaveLength(1);
expect(buttons.at(0).find('.fa-sort-asc')).toHaveLength(1);
......@@ -195,6 +175,7 @@ describe('<Table />', () => {
expect(buttons.at(1).find('.fa-sort')).toHaveLength(1);
buttons.at(1).simulate('click');
buttons = wrapper.find('button');
expect(buttons.at(0).find('.fa')).toHaveLength(1);
expect(buttons.at(0).find('.fa-sort-asc')).toHaveLength(0);
......@@ -211,6 +192,7 @@ describe('<Table />', () => {
const headings = wrapper.find('.sr-only');
buttons.at(0).simulate('click');
buttons = wrapper.find('button');
expect(headings.at(0).text()).toEqual(' sort ascending');
expect(headings.at(1).text()).toEqual(' click to sort');
......@@ -223,16 +205,19 @@ describe('<Table />', () => {
it('changes state appropriately on click', () => {
buttons.at(0).simulate('click');
buttons = wrapper.find('button');
expect(wrapper.state('sortedColumn')).toEqual(sortableProps.defaultSortedColumn);
expect(wrapper.state('sortDirection')).toEqual('asc');
buttons.at(0).simulate('click');
buttons = wrapper.find('button');
expect(wrapper.state('sortedColumn')).toEqual(sortableProps.defaultSortedColumn);
expect(wrapper.state('sortDirection')).toEqual('desc');
buttons.at(1).simulate('click');
buttons = wrapper.find('button');
expect(wrapper.state('sortedColumn')).toEqual(sortableProps.columns[1].key);
expect(wrapper.state('sortDirection')).toEqual('desc');
......@@ -243,6 +228,7 @@ describe('<Table />', () => {
expect(x2Spy).toHaveBeenCalledTimes(0);
buttons.at(0).simulate('click');
buttons = wrapper.find('button');
expect(numSpy).toHaveBeenCalledTimes(1);
expect(x2Spy).toHaveBeenCalledTimes(0);
......@@ -250,6 +236,7 @@ describe('<Table />', () => {
expect(numSpy).toBeCalledWith('asc');
buttons.at(0).simulate('click');
buttons = wrapper.find('button');
expect(numSpy).toHaveBeenCalledTimes(2);
expect(x2Spy).toHaveBeenCalledTimes(0);
......@@ -257,6 +244,7 @@ describe('<Table />', () => {
expect(numSpy).toBeCalledWith('desc');
buttons.at(1).simulate('click');
buttons = wrapper.find('button');
expect(numSpy).toHaveBeenCalledTimes(2);
expect(x2Spy).toHaveBeenCalledTimes(1);
......
......@@ -31,8 +31,7 @@ class Table extends React.Component {
sortDirection: newDirection,
});
const currentlySortedColumn = this.props.columns.find(
column => (columnKey === column.key));
const currentlySortedColumn = this.props.columns.find(column => (columnKey === column.key));
currentlySortedColumn.onSort(newDirection);
}
......@@ -90,9 +89,8 @@ class Table extends React.Component {
getHeadings() {
return (
<thead className={classNames(
...this.props.headingClassName.map(className => styles[className]),
)}
<thead
className={classNames(...this.props.headingClassName.map(className => styles[className]))}
>
<tr>
{this.props.columns.map(col => (
......@@ -167,7 +165,8 @@ Table.propTypes = {
desc: PropTypes.string,
defaultText: PropTypes.string,
}),
props => props.tableSortable),
props => props.tableSortable,
),
};
Table.defaultProps = {
......
/* eslint-disable import/no-extraneous-dependencies */
import React from 'react';
import { shallow } from 'enzyme';
import Tabs from './index';
const props = {
......@@ -29,21 +28,13 @@ const tabSelectedAtIndex = (index, wrapper) => {
describe('<Tabs />', () => {
it('renders with first tab selected', () => {
const wrapper = shallow(
<Tabs
{...props}
/>,
);
const wrapper = shallow(<Tabs {...props} />);
tabSelectedAtIndex(0, wrapper);
});
describe('switches tab selection', () => {
it('on click', () => {
const wrapper = shallow(
<Tabs
{...props}
/>,
);
const wrapper = shallow(<Tabs {...props} />);
wrapper.find('a').forEach((node, i) => {
node.simulate('click');
tabSelectedAtIndex(i, wrapper);
......
......@@ -37,9 +37,7 @@ describe('asInput()', () => {
...baseProps,
value: 'foofoo',
};
const wrapper = mount(
<InputTestComponent {...props} />,
);
const wrapper = mount(<InputTestComponent {...props} />);
expect(wrapper.find('label').text()).toEqual(props.label);
expect(wrapper.find('#description-asInput1').text()).toEqual(props.description);
expect(wrapper.state('value')).toEqual(props.value);
......@@ -52,9 +50,7 @@ describe('asInput()', () => {
...baseProps,
onBlur: spy,
};
const wrapper = mount(
<InputTestComponent {...props} />,
);
const wrapper = mount(<InputTestComponent {...props} />);
wrapper.find('input').simulate('blur');
expect(spy).toHaveBeenCalledTimes(1);
});
......@@ -65,9 +61,7 @@ describe('asInput()', () => {
...baseProps,
onChange: spy,
};
const wrapper = mount(
<InputTestComponent {...props} />,
);
const wrapper = mount(<InputTestComponent {...props} />);
wrapper.find('input').simulate('change');
expect(spy).toHaveBeenCalledTimes(1);
});
......@@ -80,9 +74,7 @@ describe('asInput()', () => {
...baseProps,
validator: spy,
};
const wrapper = mount(
<InputTestComponent {...props} />,
);
const wrapper = mount(<InputTestComponent {...props} />);
wrapper.find('input').simulate('blur');
expect(spy).toHaveBeenCalledTimes(1);
});
......@@ -98,9 +90,7 @@ describe('asInput()', () => {
...baseProps,
validator: spy,
};
const wrapper = mount(
<InputTestComponent {...props} />,
);
const wrapper = mount(<InputTestComponent {...props} />);
wrapper.find('input').simulate('blur');
expect(spy).toHaveBeenCalledTimes(1);
const err = wrapper.find('.form-control-feedback');
......
// TODO: @jaebradley refactor this when Jest issue (https://github.com/facebook/jest/issues/4545#issuecomment-333004504) is patched
// eslint-disable-next-line no-unused-vars
import raf from './tempPolyfills'; // need to import this first to ignore warnings
// eslint-disable-next-line import/no-extraneous-dependencies, import/first
import Enzyme from 'enzyme';
// eslint-disable-next-line import/no-extraneous-dependencies, import/first
import Adapter from 'enzyme-adapter-react-16';
Enzyme.configure({ adapter: new Adapter() });
global.requestAnimationFrame = (cb) => {
setTimeout(cb, 0);
};
const raf = global.requestAnimationFrame;
export default raf;
import raf from './tempPolyfills';
jest.useFakeTimers();
describe('tempPolyfills', () => {
it('raf should equal global.requestAnimationFrame', () => { expect(raf).toEqual(global.requestAnimationFrame); });
describe('callback with setTimeout', () => {
it('should call setTimeout with callback', () => {
const foo = () => { console.log('foo'); }; // eslint-disable-line no-console
raf(foo);
expect(setTimeout.mock.calls.length).toBe(1);
expect(setTimeout.mock.calls[0][1]).toBe(0);
expect(setTimeout.mock.calls[0][0]).toEqual(foo);
});
});
});
......@@ -6,6 +6,7 @@ const env = process.env.NODE_ENV || 'dev';
const base = {
devtool: 'source-map',
entry: {
polyfill: 'babel-polyfill',
main: path.resolve('./docs/App.js'),
},
output: {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment