Merge branch 'development' into tweak/common-tests

This commit is contained in:
Mark Drobnak
2019-06-07 22:51:57 -04:00
committed by GitHub
9 changed files with 152 additions and 239 deletions
+6 -1
View File
@@ -8,7 +8,7 @@ version: 2
.test: &test
run:
name: "Test"
command: npm test
command: npm run coverage
.store_version: &store_version
run:
@@ -50,6 +50,11 @@ jobs:
chmod +x ./FTL-client
./FTL-client "$FOLDER" pihole-web.tar.gz "$FTL_SECRET"
rm ./FTL-client
- run:
name: "Upload Code Coverage"
command: |
npm install codecov -g
codecov
- save_cache:
key: v1-build-{{ checksum "package-lock.json" }}
paths:
+3
View File
@@ -9,6 +9,9 @@ node_modules
build
src/scss/style.css
# Test Files
coverage
# Generated Files
src/languages.json
+91 -205
View File
@@ -1177,9 +1177,9 @@
}
},
"@coreui/coreui": {
"version": "2.1.10",
"resolved": "https://registry.npmjs.org/@coreui/coreui/-/coreui-2.1.10.tgz",
"integrity": "sha512-0TUCe+7yS1bcdPBqIvjRepHR2r+zdiDyVElQeZjZvvWc+prHecsJA4dh0qfUgtrdWNaWJE/wIgJ4Za2jhgfNXA==",
"version": "2.1.11",
"resolved": "https://registry.npmjs.org/@coreui/coreui/-/coreui-2.1.11.tgz",
"integrity": "sha512-qGgRcNstB6bqW+D5UMUFQHPVUD4gfTmsPsZpiQYNLvAKWCszq2LhilTIWAAJHxs9yf2iTer0s30MjccTsqjXOA==",
"requires": {
"@coreui/coreui-plugin-npm-postinstall": "^1.0.2",
"bootstrap": "^4.3.1",
@@ -1300,9 +1300,9 @@
"dev": true
},
"@fortawesome/fontawesome-free": {
"version": "5.8.2",
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.8.2.tgz",
"integrity": "sha512-E4fDUF4fbu9AxKpaQQqCN3XBnNzb/5e0Gvd9OaQsYkK574LVI57v/EqqPfIm/mC7jYbxaPNrhvT5AF+Yzwyizg=="
"version": "5.9.0",
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.9.0.tgz",
"integrity": "sha512-g795BBEzM/Hq2SYNPm/NQTIp3IWd4eXSH0ds87Na2jnrAUFX3wkyZAI4Gwj9DOaWMuz2/01i8oWI7P7T/XLkhg=="
},
"@hapi/address": {
"version": "2.0.0",
@@ -2584,12 +2584,6 @@
"integrity": "sha512-ui3WwXmjTaY73fOQ3/m3nnajU/Orhi6cEu5rzX+BrAAJxa3eITXZ5ch9suPqtM03OWhAHhPSyBGCN4UKoxO20Q==",
"dev": true
},
"@types/i18next-browser-languagedetector": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@types/i18next-browser-languagedetector/-/i18next-browser-languagedetector-2.0.1.tgz",
"integrity": "sha512-9TwP0tw0PSXUtBtM12PFUjBsl9sP5bNHd54qdSXBrrZ4HJmtVdqbKvmXLH4Qd3KQzIS2g/Z7HhLhygL2LUSb8w==",
"dev": true
},
"@types/istanbul-lib-coverage": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz",
@@ -2654,10 +2648,19 @@
"@types/lodash": "*"
}
},
"@types/lodash.isequal": {
"version": "4.5.5",
"resolved": "https://registry.npmjs.org/@types/lodash.isequal/-/lodash.isequal-4.5.5.tgz",
"integrity": "sha512-4IKbinG7MGP131wRfceK6W4E/Qt3qssEFLF30LnJbjYiSfHGGRU/Io8YxXrZX109ir+iDETC8hw8QsDijukUVg==",
"dev": true,
"requires": {
"@types/lodash": "*"
}
},
"@types/node": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.4.tgz",
"integrity": "sha512-j8YL2C0fXq7IONwl/Ud5Kt0PeXw22zGERt+HSSnwbKOJVsAGkEz3sFCYwaF9IOuoG1HOtE0vKCj6sXF7Q0+Vaw==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.7.tgz",
"integrity": "sha512-1YKeT4JitGgE4SOzyB9eMwO0nGVNkNEsm9qlIt1Lqm/tG2QEiSMTD4kS3aO6L+w5SClLVxALmIBESK6Mk5wX0A==",
"dev": true
},
"@types/prop-types": {
@@ -3146,32 +3149,6 @@
"requires": {
"function-bind": "^1.1.1"
}
},
"loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
"dev": true,
"requires": {
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
"prop-types": {
"version": "15.7.2",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
"integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
"dev": true,
"requires": {
"loose-envify": "^1.4.0",
"object-assign": "^4.1.1",
"react-is": "^16.8.1"
}
},
"react-is": {
"version": "16.8.6",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
"integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==",
"dev": true
}
}
},
@@ -6889,9 +6866,9 @@
"dev": true
},
"enzyme": {
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.9.0.tgz",
"integrity": "sha512-JqxI2BRFHbmiP7/UFqvsjxTirWoM1HfeaJrmVSZ9a1EADKkZgdPcAuISPMpoUiHlac9J4dYt81MC5BBIrbJGMg==",
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.10.0.tgz",
"integrity": "sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg==",
"dev": true,
"requires": {
"array.prototype.flat": "^1.2.1",
@@ -6935,9 +6912,9 @@
}
},
"enzyme-adapter-react-16": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.13.2.tgz",
"integrity": "sha512-h0neTuAAFfQUgEZ+PPHVIMDFJ9+CGafI8AjojNlSVh4Fd1pLDgtl2OeVkm4yKF7RSgzrPAwugq4JW8Jjo2iRJA==",
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.14.0.tgz",
"integrity": "sha512-7PcOF7pb4hJUvjY7oAuPGpq3BmlCig3kxXGi2kFx0YzJHppqX1K8IIV9skT1IirxXlu8W7bneKi+oQ10QRnhcA==",
"dev": true,
"requires": {
"enzyme-adapter-utils": "^1.12.0",
@@ -6950,40 +6927,6 @@
"semver": "^5.7.0"
},
"dependencies": {
"define-properties": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
"integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
"dev": true,
"requires": {
"object-keys": "^1.0.12"
}
},
"es-abstract": {
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
"integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
"dev": true,
"requires": {
"es-to-primitive": "^1.2.0",
"function-bind": "^1.1.1",
"has": "^1.0.3",
"is-callable": "^1.1.4",
"is-regex": "^1.0.4",
"object-keys": "^1.0.12"
}
},
"es-to-primitive": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
"integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
"dev": true,
"requires": {
"is-callable": "^1.1.4",
"is-date-object": "^1.0.1",
"is-symbol": "^1.0.2"
}
},
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -6993,65 +6936,6 @@
"function-bind": "^1.1.1"
}
},
"is-callable": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
"integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
"dev": true
},
"is-symbol": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
"integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
"dev": true,
"requires": {
"has-symbols": "^1.0.0"
}
},
"loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
"dev": true,
"requires": {
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
"object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true
},
"object.values": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz",
"integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==",
"dev": true,
"requires": {
"define-properties": "^1.1.3",
"es-abstract": "^1.12.0",
"function-bind": "^1.1.1",
"has": "^1.0.3"
}
},
"prop-types": {
"version": "15.7.2",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
"integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
"dev": true,
"requires": {
"loose-envify": "^1.4.0",
"object-assign": "^4.1.1",
"react-is": "^16.8.1"
}
},
"react-is": {
"version": "16.8.6",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
"integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==",
"dev": true
},
"semver": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
@@ -7074,32 +6958,6 @@
"semver": "^5.6.0"
},
"dependencies": {
"loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
"dev": true,
"requires": {
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
"prop-types": {
"version": "15.7.2",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
"integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
"dev": true,
"requires": {
"loose-envify": "^1.4.0",
"object-assign": "^4.1.1",
"react-is": "^16.8.1"
}
},
"react-is": {
"version": "16.8.6",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
"integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==",
"dev": true
},
"semver": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
@@ -10141,13 +9999,6 @@
"integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==",
"requires": {
"react-is": "^16.7.0"
},
"dependencies": {
"react-is": {
"version": "16.8.6",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
"integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA=="
}
}
},
"hosted-git-info": {
@@ -10668,9 +10519,9 @@
"dev": true
},
"i18next": {
"version": "15.1.3",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-15.1.3.tgz",
"integrity": "sha512-hN2DZLoRSY2h/RYeNqth5XxV4N1ekKGSJDCGhFmmuXkOCAfK5CkUG4VBv9OBXrvf93xApv0KKBVrb0zJP31EKg==",
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-17.0.2.tgz",
"integrity": "sha512-hDjPzq0R6njFCHQJufxgZw0+czFaepapVB+Bm02AEUyy/50qmnbfvho1LW2tw6HrSwOinDF1yvn1MayefjSscg==",
"requires": {
"@babel/runtime": "^7.3.1"
},
@@ -10691,14 +10542,32 @@
}
},
"i18next-browser-languagedetector": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-2.2.4.tgz",
"integrity": "sha512-wPbtH18FdOuB245I8Bhma5/XSDdN/HpYlX+wga1eMy+slhaFQSnrWX6fp+aYSL2eEuj0RlfHeEVz6Fo/lxAj6A=="
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-3.0.1.tgz",
"integrity": "sha512-WFjPLNPWl62uu07AHY2g+KsC9qz0tyMq+OZEB/H7N58YKL/JLiCz9U709gaR20Mule/Ppn+uyfVx5REJJjn1HA=="
},
"i18next-xhr-backend": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/i18next-xhr-backend/-/i18next-xhr-backend-2.0.1.tgz",
"integrity": "sha512-CP0XPjJsTE4hY1rM1KXFYo63Ib61EBLEcTvMDyJwr0vs9p/UTuA3ENCmzSs9+ghZgWSjdOigc0oUERHaxctbsQ=="
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/i18next-xhr-backend/-/i18next-xhr-backend-3.0.0.tgz",
"integrity": "sha512-Pi/X91Zk2nEqdEHTV+FG6VeMHRcMcPKRsYW/A0wlaCfKsoJc3TI7A75Tqse/d5LVGN2Ymzx0FT+R+gLag9Eb2g==",
"requires": {
"@babel/runtime": "^7.4.5"
},
"dependencies": {
"@babel/runtime": {
"version": "7.4.5",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz",
"integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==",
"requires": {
"regenerator-runtime": "^0.13.2"
}
},
"regenerator-runtime": {
"version": "0.13.2",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz",
"integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA=="
}
}
},
"iconv-lite": {
"version": "0.4.18",
@@ -15025,8 +14894,7 @@
"lodash.isequal": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
"integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
"dev": true
"integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
},
"lodash.isfunction": {
"version": "3.0.9",
@@ -15383,6 +15251,31 @@
"integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
"dev": true
},
"mini-create-react-context": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz",
"integrity": "sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw==",
"requires": {
"@babel/runtime": "^7.4.0",
"gud": "^1.0.0",
"tiny-warning": "^1.0.2"
},
"dependencies": {
"@babel/runtime": {
"version": "7.4.5",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz",
"integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==",
"requires": {
"regenerator-runtime": "^0.13.2"
}
},
"regenerator-runtime": {
"version": "0.13.2",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz",
"integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA=="
}
}
},
"mini-css-extract-plugin": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz",
@@ -18474,9 +18367,9 @@
"integrity": "sha512-BZwwRaWcUDZVVgzQBtbmnbV1jyNNlfI5v7Jxb9FNEJ9FW8m+hzJgDFUMUlvz3VKCe5JNKcv5fKBizIDFSIUu+A=="
},
"react-bootstrap-typeahead": {
"version": "3.4.4",
"resolved": "https://registry.npmjs.org/react-bootstrap-typeahead/-/react-bootstrap-typeahead-3.4.4.tgz",
"integrity": "sha512-9v9l3a+GzwpFgBBwl9Rnvg/65LLyStsPuaFOan+XLrsS9pBOp+ukBwEHhgdkwblsT1snur06R8TB1aUtY7f8lg==",
"version": "3.4.5",
"resolved": "https://registry.npmjs.org/react-bootstrap-typeahead/-/react-bootstrap-typeahead-3.4.5.tgz",
"integrity": "sha512-accbqAcc7YLEiFSr+XfWfk0LamPZ8oU8VgYNcMpxk0Dt1JtctsuMoRQXRDs2JMS5W+g4r5zdx+qyYZ/bPCODoA==",
"requires": {
"classnames": "^2.2.0",
"create-react-context": "^0.2.3",
@@ -18796,9 +18689,9 @@
}
},
"react-is": {
"version": "16.4.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.4.1.tgz",
"integrity": "sha512-xpb0PpALlFWNw/q13A+1aHeyJyLYCg0/cCHPUA43zYluZuIPHaHL3k8OBsTgQtxqW0FhyDEMvi8fZ/+7+r4OSQ=="
"version": "16.8.6",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
"integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA=="
},
"react-lifecycles-compat": {
"version": "3.0.4",
@@ -18852,39 +18745,32 @@
}
},
"react-router": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-5.0.0.tgz",
"integrity": "sha512-6EQDakGdLG/it2x9EaCt9ZpEEPxnd0OCLBHQ1AcITAAx7nCnyvnzf76jKWG1s2/oJ7SSviUgfWHofdYljFexsA==",
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-5.0.1.tgz",
"integrity": "sha512-EM7suCPNKb1NxcTZ2LEOWFtQBQRQXecLxVpdsP4DW4PbbqYWeRiLyV/Tt1SdCrvT2jcyXAXmVTmzvSzrPR63Bg==",
"requires": {
"@babel/runtime": "^7.1.2",
"create-react-context": "^0.2.2",
"history": "^4.9.0",
"hoist-non-react-statics": "^3.1.0",
"loose-envify": "^1.3.1",
"mini-create-react-context": "^0.3.0",
"path-to-regexp": "^1.7.0",
"prop-types": "^15.6.2",
"react-is": "^16.6.0",
"tiny-invariant": "^1.0.2",
"tiny-warning": "^1.0.0"
},
"dependencies": {
"react-is": {
"version": "16.8.6",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
"integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA=="
}
}
},
"react-router-dom": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.0.0.tgz",
"integrity": "sha512-wSpja5g9kh5dIteZT3tUoggjnsa+TPFHSMrpHXMpFsaHhQkm/JNVGh2jiF9Dkh4+duj4MKCkwO6H08u6inZYgQ==",
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.0.1.tgz",
"integrity": "sha512-zaVHSy7NN0G91/Bz9GD4owex5+eop+KvgbxXsP/O+iW1/Ln+BrJ8QiIR5a6xNPtrdTvLkxqlDClx13QO1uB8CA==",
"requires": {
"@babel/runtime": "^7.1.2",
"history": "^4.9.0",
"loose-envify": "^1.3.1",
"prop-types": "^15.6.2",
"react-router": "5.0.0",
"react-router": "5.0.1",
"tiny-invariant": "^1.0.2",
"tiny-warning": "^1.0.0"
}
+13 -11
View File
@@ -8,10 +8,10 @@
"@types/enzyme": "^3.9.3",
"@types/enzyme-adapter-react-16": "^1.0.5",
"@types/fetch-mock": "^7.3.0",
"@types/i18next-browser-languagedetector": "^2.0.1",
"@types/jest": "^24.0.13",
"@types/lodash.debounce": "^4.0.6",
"@types/node": "^12.0.4",
"@types/lodash.isequal": "^4.5.5",
"@types/node": "^12.0.7",
"@types/react": "^16.8.19",
"@types/react-bootstrap-daterangepicker": "0.0.26",
"@types/react-bootstrap-typeahead": "^3.4.5",
@@ -20,8 +20,8 @@
"@types/react-table": "^6.8.3",
"@types/reactstrap": "^8.0.1",
"@types/sha.js": "^2.4.0",
"enzyme": "^3.9.0",
"enzyme-adapter-react-16": "^1.13.2",
"enzyme": "^3.10.0",
"enzyme-adapter-react-16": "^1.14.0",
"faker": "^4.1.0",
"fetch-mock": "^7.3.3",
"fs-extra": "^8.0.1",
@@ -37,27 +37,28 @@
"typescript": "^3.5.1"
},
"dependencies": {
"@coreui/coreui": "^2.1.10",
"@coreui/coreui": "^2.1.11",
"@coreui/icons": "0.3.0",
"@coreui/react": "^2.5.1",
"@fortawesome/fontawesome-free": "^5.8.2",
"@fortawesome/fontawesome-free": "^5.9.0",
"bootstrap": "^4.3.1",
"bootstrap-daterangepicker": "^3.0.5",
"chart.js": "^2.8.0",
"i18next": "^15.1.3",
"i18next-browser-languagedetector": "^2.2.4",
"i18next-xhr-backend": "^2.0.1",
"i18next": "^17.0.2",
"i18next-browser-languagedetector": "^3.0.1",
"i18next-xhr-backend": "^3.0.0",
"ionicons": "^4.5.8",
"lodash.debounce": "^4.0.8",
"lodash.isequal": "^4.5.0",
"moment": "^2.24.0",
"prop-types": "^15.7.2",
"react": "^16.8.6",
"react-bootstrap-daterangepicker": "^4.1.0",
"react-bootstrap-typeahead": "^3.4.4",
"react-bootstrap-typeahead": "^3.4.5",
"react-chartjs-2": "^2.7.6",
"react-dom": "^16.8.6",
"react-i18next": "^10.11.0",
"react-router-dom": "^5.0.0",
"react-router-dom": "^5.0.1",
"react-table": "^6.10.0",
"reactstrap": "^8.0.0",
"sha.js": "^2.4.11",
@@ -75,6 +76,7 @@
"generate-language-list": "node scripts/generate-language-list.js",
"make-fake-data": "node scripts/make-fake-data.js",
"test": "react-scripts test --env=jsdom",
"coverage": "react-scripts test --env=jsdom --coverage",
"eject": "react-scripts eject",
"format": "prettier --write \"src/**/*.tsx\"",
"check-format": "prettier --list-different \"src/**/*.tsx\""
+1 -1
View File
@@ -40,7 +40,7 @@
<!-- End Single Page Apps for GitHub Pages -->
</head>
<body class="app header-fixed sidebar-fixed sidebar-show sidebar-lg-show boxcontainer background-image">
<body class="app header-fixed sidebar-fixed sidebar-lg-show boxcontainer background-image">
<noscript>
<p align="center">Please enable JavaScript! This web interface will not work without it.</p>
</noscript>
@@ -8,7 +8,7 @@
* This file is copyright under the latest version of the EUPL.
* Please see LICENSE file for your rights under this license. */
import { mount, shallow, ShallowWrapper } from "enzyme";
import { shallow, ShallowWrapper } from "enzyme";
import {
EnableDisable,
EnableDisableContainer,
@@ -37,14 +37,13 @@ describe("EnableDisableContainer", () => {
refresh: jest.fn()
};
// Using mount here as there are issues with passing functions via context
// when using shallow (the passed in value is not equal to the received
// value)
const wrapper = mount(
const wrapper = shallow(
<StatusContext.Provider value={context}>
<EnableDisableContainer />
</StatusContext.Provider>
);
)
.dive()
.dive();
const props = wrapper.find(EnableDisable).props();
+20 -11
View File
@@ -19,6 +19,7 @@ import i18n from "i18next";
import i18next from "i18next";
import { WithTranslation, withTranslation } from "react-i18next";
import debounce from "lodash.debounce";
import isEqual from "lodash.isequal";
import moment from "moment";
import { padNumber } from "../../util/graphUtils";
import api from "../../util/api";
@@ -201,17 +202,15 @@ class QueryLog extends Component<WithTranslation, QueryLogState> {
* @param pageSize The number of queries in the page
*/
fetchQueries = ({ page, pageSize }: { page: number; pageSize: number }) => {
// Check if we've reached the end of the queries, or are still waiting for
// the last fetch to finish
if (this.state.atEnd || this.state.loading) {
return;
}
// Check if the filters are the same and we already have this page and the
// next page.
// Don't fetch the queries if:
// - We've reached the end of the queries
// - We are still waiting for the last fetch to finish
// - Filters are the same and we already have this page and the next
if (
!this.state.filtersChanged &&
this.state.history.length >= (page + 2) * pageSize
this.state.atEnd ||
this.state.loading ||
(!this.state.filtersChanged &&
this.state.history.length >= (page + 2) * pageSize)
) {
return;
}
@@ -255,7 +254,7 @@ class QueryLog extends Component<WithTranslation, QueryLogState> {
data={this.state.history}
loading={this.state.loading}
onFetchData={state => {
if (state.filtered === this.state.filters) {
if (isEqual(state.filtered, this.state.filters)) {
// If the filters have not changed, do not debounce the fetch.
// This allows fetching the next page to happen without waiting for
// the debounce.
@@ -267,6 +266,10 @@ class QueryLog extends Component<WithTranslation, QueryLogState> {
}
}}
onFilteredChange={debounce(filters => {
if (isEqual(filters, this.state.filters)) {
return;
}
this.setState({
filters,
filtersChanged: true,
@@ -276,6 +279,12 @@ class QueryLog extends Component<WithTranslation, QueryLogState> {
history: []
});
}, 300)}
defaultFiltered={[
{
id: "time",
value: getDefaultRange(t)
}
]}
getTrProps={this.getRowProps}
ofText={this.state.atEnd ? "of" : "of at least"}
// Pad empty rows to have the same height as filled rows
+6
View File
@@ -219,3 +219,9 @@ body {
display: none;
}
}
@media (max-width: 576px) {
.modal-dialog {
margin: 0.5rem auto;
}
}
+7 -4
View File
@@ -12,6 +12,9 @@ import { padNumber, getIntervalForRange } from "../graphUtils";
import { TimeRange } from "../../components/common/context/TimeRangeContext";
import moment from "moment";
// A timestamp used for testing
const timestamp = 1559614028;
describe("padNumber", () => {
it("pads 0 to 00", () => {
expect(padNumber(0)).toEqual("00");
@@ -30,8 +33,8 @@ describe("getIntervalForRange", () => {
it("returns 10 minutes for 24 hours", () => {
const range: TimeRange = {
name: "24 Hours",
from: moment().subtract(1, "day"),
until: moment()
from: moment(timestamp).subtract(1, "day"),
until: moment(timestamp)
};
expect(getIntervalForRange(range)).toEqual(10 * 60);
@@ -42,8 +45,8 @@ describe("getIntervalForRange", () => {
name: "144 days",
// Use seconds instead of days to ensure the difference in epoch time is
// equal to 144 days
from: moment().subtract(144 * 24 * 60 * 60, "seconds"),
until: moment()
from: moment(timestamp).subtract(144 * 24 * 60 * 60, "seconds"),
until: moment(timestamp)
};
expect(getIntervalForRange(range)).toEqual(24 * 60 * 60);