diff --git a/ui/package-lock.json b/ui/package-lock.json
index ec0fd83a1..60d423e5d 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -139,6 +139,12 @@
"integrity": "sha512-/UMY+2GkOZ27Vrc51pqC5J8SPd39FKt7kkoGAtWJ8s4msj0b15KehDWIiJpWY3/7tLxBQLLzJhIBhnEsXdzpgw==",
"dev": true
},
+ "@types/node": {
+ "version": "10.9.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.9.0.tgz",
+ "integrity": "sha512-YoYH0vd8TxV3cEJNnWBBb+QlwJyWh1wL/Gj6+sfuDKbq4kRjn1VTJcxGRRJBeuNNvGKrwkivdw2Qs6WzOyqyag==",
+ "dev": true
+ },
"abab": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz",
@@ -488,6 +494,17 @@
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
},
+ "array.prototype.flat": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz",
+ "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.12.0",
+ "function-bind": "1.1.1"
+ }
+ },
"arrify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
@@ -2063,6 +2080,54 @@
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
"integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I="
},
+ "cheerio": {
+ "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": "4.17.10",
+ "parse5": "3.0.3"
+ },
+ "dependencies": {
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
+ },
+ "htmlparser2": {
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
+ "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0",
+ "domhandler": "2.4.2",
+ "domutils": "1.5.1",
+ "entities": "1.1.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ }
+ },
+ "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": "10.9.0"
+ }
+ }
+ }
+ },
"chokidar": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz",
@@ -3045,6 +3110,12 @@
"randombytes": "2.0.6"
}
},
+ "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",
@@ -3255,6 +3326,66 @@
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
"integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA="
},
+ "enzyme": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.4.4.tgz",
+ "integrity": "sha512-/xkHs9vLDmmZbyvhu0zgBHqK+aAZHyTTXvclLjATqo4SlnpReZ7JqEyrjADAhy2Kha0gKmKq4759E/+VjIExMg==",
+ "dev": true,
+ "requires": {
+ "array.prototype.flat": "1.2.1",
+ "cheerio": "1.0.0-rc.2",
+ "function.prototype.name": "1.1.0",
+ "has": "1.0.3",
+ "is-boolean-object": "1.0.0",
+ "is-callable": "1.1.4",
+ "is-number-object": "1.0.3",
+ "is-string": "1.0.4",
+ "is-subset": "0.1.1",
+ "lodash": "4.17.10",
+ "object-inspect": "1.6.0",
+ "object-is": "1.0.1",
+ "object.assign": "4.1.0",
+ "object.entries": "1.0.4",
+ "object.values": "1.0.4",
+ "raf": "3.4.0",
+ "rst-selector-parser": "2.2.3"
+ },
+ "dependencies": {
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+ "dev": true
+ }
+ }
+ },
+ "enzyme-adapter-react-16": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.2.0.tgz",
+ "integrity": "sha512-UgBra+xZFVFbU5Tw7Inw0bPrNJhM2ru4vCoO7preX6sOicXuDbOH927QJx4pk6m6vatd8jnPXTF6/GCjzytJTg==",
+ "dev": true,
+ "requires": {
+ "enzyme-adapter-utils": "1.5.0",
+ "function.prototype.name": "1.1.0",
+ "object.assign": "4.1.0",
+ "object.values": "1.0.4",
+ "prop-types": "15.6.2",
+ "react-is": "16.4.2",
+ "react-reconciler": "0.7.0",
+ "react-test-renderer": "16.4.2"
+ }
+ },
+ "enzyme-adapter-utils": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.5.0.tgz",
+ "integrity": "sha512-cLUaPYU8GEzAHi/1hiO+ylz4QiQWI8eb9SysAk8Tbul2O918dRf4cfD4s2BjijtwSvhapkOsPW9XRix1EXlJ1Q==",
+ "dev": true,
+ "requires": {
+ "function.prototype.name": "1.1.0",
+ "object.assign": "4.1.0",
+ "prop-types": "15.6.2"
+ }
+ },
"errno": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
@@ -4842,6 +4973,17 @@
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
+ "function.prototype.name": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz",
+ "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.2",
+ "function-bind": "1.1.1",
+ "is-callable": "1.1.3"
+ }
+ },
"functional-red-black-tree": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
@@ -5155,6 +5297,12 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
+ "dev": true
+ },
"has-unicode": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
@@ -5756,6 +5904,12 @@
"binary-extensions": "1.11.0"
}
},
+ "is-boolean-object": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz",
+ "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=",
+ "dev": true
+ },
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
@@ -5903,6 +6057,12 @@
}
}
},
+ "is-number-object": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz",
+ "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=",
+ "dev": true
+ },
"is-obj": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
@@ -6005,6 +6165,12 @@
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
},
+ "is-string": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz",
+ "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=",
+ "dev": true
+ },
"is-subset": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
@@ -6861,12 +7027,6 @@
"jsonify": "0.0.0"
}
},
- "json-stringify-pretty-compact": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-1.2.0.tgz",
- "integrity": "sha512-/11Pj1OyX814QMKO7K8l85SHPTr/KsFxHp8GE2zVa0BtJgGimDjXHfM3FhC7keQdWDea7+nXf+f1de7ATZcZkQ==",
- "dev": true
- },
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
@@ -7112,6 +7272,12 @@
"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.isarray": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-4.0.0.tgz",
@@ -7564,6 +7730,12 @@
"resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz",
"integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y="
},
+ "moo": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz",
+ "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==",
+ "dev": true
+ },
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -7617,6 +7789,19 @@
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
},
+ "nearley": {
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.15.1.tgz",
+ "integrity": "sha512-8IUY/rUrKz2mIynUGh8k+tul1awMKEjeHHC5G3FHvvyAW6oq4mQfNp2c0BMea+sYZJvYcrrM6GmZVIle/GRXGw==",
+ "dev": true,
+ "requires": {
+ "moo": "0.4.3",
+ "nomnom": "1.6.2",
+ "railroad-diagrams": "1.0.0",
+ "randexp": "0.4.6",
+ "semver": "5.5.0"
+ }
+ },
"negotiator": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
@@ -7982,6 +8167,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",
@@ -8112,6 +8315,18 @@
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.0.tgz",
"integrity": "sha512-05KzQ70lSeGSrZJQXE5wNDiTkBJDlUT/myi6RX9dVIvz7a7Qh4oH93BQdiPMn27nldYvVQCKMUaM83AfizZlsQ=="
},
+ "object-inspect": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz",
+ "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==",
+ "dev": true
+ },
+ "object-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz",
+ "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=",
+ "dev": true
+ },
"object-keys": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
@@ -8125,6 +8340,30 @@
"isobject": "3.0.1"
}
},
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.2",
+ "function-bind": "1.1.1",
+ "has-symbols": "1.0.0",
+ "object-keys": "1.0.11"
+ }
+ },
+ "object.entries": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz",
+ "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.12.0",
+ "function-bind": "1.1.1",
+ "has": "1.0.3"
+ }
+ },
"object.omit": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
@@ -8142,6 +8381,18 @@
"isobject": "3.0.1"
}
},
+ "object.values": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz",
+ "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.12.0",
+ "function-bind": "1.1.1",
+ "has": "1.0.3"
+ }
+ },
"obuf": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
@@ -9837,6 +10088,22 @@
"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": "3.1.0",
"resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz",
@@ -10027,16 +10294,6 @@
"prop-types": "15.6.2"
}
},
- "react-element-to-string": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/react-element-to-string/-/react-element-to-string-1.0.2.tgz",
- "integrity": "sha1-AmLyzg/6i1GOo1l7w6jcJuBVGkc=",
- "dev": true,
- "requires": {
- "indent-string": "2.1.0",
- "json-stringify-pretty-compact": "1.2.0"
- }
- },
"react-error-overlay": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-4.0.1.tgz",
@@ -10140,6 +10397,18 @@
"warning": "3.0.0"
}
},
+ "react-reconciler": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.7.0.tgz",
+ "integrity": "sha512-50JwZ3yNyMS8fchN+jjWEJOH3Oze7UmhxeoJLn2j6f3NjpfCRbcmih83XTWmzqtar/ivd5f7tvQhvvhism2fgg==",
+ "dev": true,
+ "requires": {
+ "fbjs": "0.8.17",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "prop-types": "15.6.2"
+ }
+ },
"react-resize-detector": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-3.1.1.tgz",
@@ -10695,6 +10964,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.15.1"
+ }
+ },
"run-async": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
@@ -10994,18 +11273,6 @@
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
},
- "skin-deep": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/skin-deep/-/skin-deep-1.2.0.tgz",
- "integrity": "sha512-2TFImKMDE4bS4hm8hdpjTf4+0RXAUxK0jjQRKPrf4qypAk9zDcEldIcxdQNMUdhsJhWwFrENz7jGu5Gu/IWbbQ==",
- "dev": true,
- "requires": {
- "escape-string-regexp": "1.0.5",
- "is-subset": "0.1.1",
- "react-element-to-string": "1.0.2",
- "semver": "5.5.0"
- }
- },
"slash": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
@@ -11908,6 +12175,12 @@
}
}
},
+ "underscore": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
+ "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=",
+ "dev": true
+ },
"union-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
diff --git a/ui/package.json b/ui/package.json
index 697012e63..c04a1fb51 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -51,14 +51,14 @@
"watch-css": "npm run build-css && node_modules/.bin/node-sass-chokidar src/ -o src/ --watch --recursive"
},
"devDependencies": {
+ "enzyme": "3.4.4",
+ "enzyme-adapter-react-16": "1.2.0",
"eslint-plugin-react": "7.11.1",
"jest-fetch-mock": "1.6.5",
"jest-localstorage-mock": "2.2.0",
"jest-mock-console": "0.4.0",
"markdownlint-cli": "0.13.0",
"node-sass-chokidar": "1.3.3",
- "onchange": "4.1.0",
- "react-test-renderer": "16.4.2",
- "skin-deep": "1.2.0"
+ "onchange": "4.1.0"
}
}
diff --git a/ui/src/Components/MainModal/Configuration/index.test.js b/ui/src/Components/MainModal/Configuration/index.test.js
index 47b5fbeb2..a895c7495 100644
--- a/ui/src/Components/MainModal/Configuration/index.test.js
+++ b/ui/src/Components/MainModal/Configuration/index.test.js
@@ -1,5 +1,6 @@
import React from "react";
-import sd from "skin-deep";
+
+import { shallow } from "enzyme";
import { Settings } from "Stores/Settings";
import { Configuration } from ".";
@@ -7,9 +8,7 @@ import { Configuration } from ".";
describe("", () => {
it("renders correctly", () => {
const settingsStore = new Settings();
- const tree = sd.shallowRender(
-
- );
+ const tree = shallow();
expect(tree.text()).toBe(
""
);
diff --git a/ui/src/Components/MainModal/index.test.js b/ui/src/Components/MainModal/index.test.js
index 2e19b794b..79b6e5ee6 100644
--- a/ui/src/Components/MainModal/index.test.js
+++ b/ui/src/Components/MainModal/index.test.js
@@ -1,5 +1,6 @@
import React from "react";
-import sd from "skin-deep";
+
+import { shallow } from "enzyme";
import { AlertStore } from "Stores/AlertStore";
import { Settings } from "Stores/Settings";
@@ -14,7 +15,7 @@ beforeEach(() => {
});
const RenderMainModal = () => {
- return sd.shallowRender(
+ return shallow(
);
};
@@ -22,33 +23,31 @@ const RenderMainModal = () => {
describe("", () => {
it("only renders FontAwesomeIcon when modal is not shown", () => {
const tree = RenderMainModal();
- // is how React.Fragment gets rendered
- expect(tree.text()).toBe("");
+ expect(tree.text()).toBe("");
});
it("renders the modal when it is shown", () => {
const tree = RenderMainModal();
- const instance = tree.getMountedInstance();
- instance.toggle.toggle();
- // is how React.Fragment gets rendered
- expect(tree.text()).toBe(
- ""
- );
+ const toggle = tree.find(".nav-link");
+ toggle.simulate("click");
+ expect(tree.text()).toBe("");
});
it("hides the modal when toggle() is called twice", () => {
const tree = RenderMainModal();
- const instance = tree.getMountedInstance();
- instance.toggle.toggle();
- instance.toggle.toggle();
- expect(tree.text()).toBe("");
+ const toggle = tree.find(".nav-link");
+ toggle.simulate("click");
+ toggle.simulate("click");
+ expect(tree.text()).toBe("");
});
it("hides the modal when hide() is called", () => {
const tree = RenderMainModal();
- const instance = tree.getMountedInstance();
- instance.toggle.show = true;
+ const toggle = tree.find(".nav-link");
+ toggle.simulate("click");
+ expect(tree.text()).toBe("");
+ const instance = tree.instance();
instance.toggle.hide();
- expect(tree.text()).toBe("");
+ expect(tree.text()).toBe("");
});
});
diff --git a/ui/src/Components/NavBar/index.test.js b/ui/src/Components/NavBar/index.test.js
index db7bb9daa..ca76b2367 100644
--- a/ui/src/Components/NavBar/index.test.js
+++ b/ui/src/Components/NavBar/index.test.js
@@ -1,5 +1,6 @@
import React from "react";
-import sd from "skin-deep";
+
+import { shallow } from "enzyme";
import moment from "moment";
@@ -22,7 +23,7 @@ beforeEach(() => {
});
const RenderNavbar = () => {
- return sd.shallowRender(
+ return shallow(
{
alertStore.filters.values.push(NewUnappliedFilter(`foo=${i}`));
}
const tree = RenderNavbar();
- const nav = tree.subTree(".navbar-nav");
- expect(nav.props.className.split(" ")).toContain(expectedClass);
+ const nav = tree.find(".navbar-nav");
+ expect(nav.props().className.split(" ")).toContain(expectedClass);
};
describe("", () => {
@@ -55,7 +56,7 @@ describe("", () => {
it("navbar-brand shows 15 alerts with totalAlerts=15", () => {
alertStore.info.totalAlerts = 15;
const tree = RenderNavbar();
- const brand = tree.subTree(".navbar-brand");
+ const brand = tree.find(".navbar-brand");
expect(brand.text()).toBe("15");
});
diff --git a/ui/src/setupTests.js b/ui/src/setupTests.js
index 6c3236b3f..776ea72d2 100644
--- a/ui/src/setupTests.js
+++ b/ui/src/setupTests.js
@@ -1,5 +1,11 @@
+import Enzyme from "enzyme";
+import Adapter from "enzyme-adapter-react-16";
+
import mockConsole from "jest-mock-console";
+// https://github.com/airbnb/enzyme
+Enzyme.configure({ adapter: new Adapter() });
+
// mock console
mockConsole(["error", "warn", "info", "log", "trace"]);