Unit tests
This commit is contained in:
Generated
+146
-109
@@ -1114,7 +1114,7 @@
|
||||
"babel-plugin-transform-es2015-unicode-regex": "6.24.1",
|
||||
"babel-plugin-transform-exponentiation-operator": "6.24.1",
|
||||
"babel-plugin-transform-regenerator": "6.26.0",
|
||||
"browserslist": "3.2.7",
|
||||
"browserslist": "3.2.8",
|
||||
"invariant": "2.2.4",
|
||||
"semver": "5.5.0"
|
||||
}
|
||||
@@ -1485,13 +1485,13 @@
|
||||
}
|
||||
},
|
||||
"browserslist": {
|
||||
"version": "3.2.7",
|
||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.7.tgz",
|
||||
"integrity": "sha512-oYVLxFVqpX9uMhOIQBLtZL+CX4uY8ZpWcjNTaxyWl5rO8yA9SSNikFnAfvk8J3P/7z3BZwNmEqFKaJoYltj3MQ==",
|
||||
"version": "3.2.8",
|
||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz",
|
||||
"integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"caniuse-lite": "1.0.30000843",
|
||||
"electron-to-chromium": "1.3.47"
|
||||
"caniuse-lite": "1.0.30000846",
|
||||
"electron-to-chromium": "1.3.48"
|
||||
}
|
||||
},
|
||||
"bser": {
|
||||
@@ -1587,9 +1587,9 @@
|
||||
"integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs="
|
||||
},
|
||||
"caniuse-lite": {
|
||||
"version": "1.0.30000843",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000843.tgz",
|
||||
"integrity": "sha512-1ntiW826MhRBmM0CeI7w1cQr16gxwOoM8doJWh3BFalPZoKWdZXs27Bc04xth/3NR1/wNXn9cpP4F92lVenCvg==",
|
||||
"version": "1.0.30000846",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000846.tgz",
|
||||
"integrity": "sha512-qxUOHr5mTaadWH1ap0ueivHd8x42Bnemcn+JutVr7GWmm2bU4zoBhjuv5QdXgALQnnT626lOQros7cCDf8PwCg==",
|
||||
"dev": true
|
||||
},
|
||||
"capture-exit": {
|
||||
@@ -2334,9 +2334,9 @@
|
||||
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
|
||||
},
|
||||
"electron-to-chromium": {
|
||||
"version": "1.3.47",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.47.tgz",
|
||||
"integrity": "sha1-dk6IfKkQTQGgrI6r7n38DizhQQQ=",
|
||||
"version": "1.3.48",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.48.tgz",
|
||||
"integrity": "sha1-07DYWTgUBE4JLs4hCPw6ya6kuQA=",
|
||||
"dev": true
|
||||
},
|
||||
"enabled": {
|
||||
@@ -2577,9 +2577,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"eslint-plugin-flowtype": {
|
||||
"version": "2.47.1",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.47.1.tgz",
|
||||
"integrity": "sha512-8PSgM3Fvnpkz5yE8MedV16cWIbXG1vgT3okqdopLEy9mH8Ok+5xce+t+K2EmYhUzEUEJTdIRQPXE/7xSLuAkKA==",
|
||||
"version": "2.48.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.48.0.tgz",
|
||||
"integrity": "sha512-D9zX5os88JjrIdM2eLldLYL8xJcbPIiMMT6n4fBFcAk/r6lGc+XPKOv5hpHt6OwfVrZ4TVoQAcKPyZB1hS0Ovg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"lodash": "4.17.10"
|
||||
@@ -2868,16 +2868,16 @@
|
||||
}
|
||||
},
|
||||
"expect": {
|
||||
"version": "23.0.1",
|
||||
"resolved": "https://registry.npmjs.org/expect/-/expect-23.0.1.tgz",
|
||||
"integrity": "sha1-mRMfL9kRVZX4zDaXQB5/BzTUX+8=",
|
||||
"version": "23.1.0",
|
||||
"resolved": "https://registry.npmjs.org/expect/-/expect-23.1.0.tgz",
|
||||
"integrity": "sha1-v9/VeiogFw2HWZnul4fMcfAcIF8=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-styles": "3.2.1",
|
||||
"jest-diff": "23.0.1",
|
||||
"jest-get-type": "22.4.3",
|
||||
"jest-matcher-utils": "23.0.1",
|
||||
"jest-message-util": "23.0.0",
|
||||
"jest-message-util": "23.1.0",
|
||||
"jest-regex-util": "23.0.0"
|
||||
}
|
||||
},
|
||||
@@ -5197,13 +5197,13 @@
|
||||
}
|
||||
},
|
||||
"jest": {
|
||||
"version": "23.0.1",
|
||||
"resolved": "https://registry.npmjs.org/jest/-/jest-23.0.1.tgz",
|
||||
"integrity": "sha1-DQgykO5BEs7Pt4Dfb/gTMu03MgE=",
|
||||
"version": "23.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest/-/jest-23.1.0.tgz",
|
||||
"integrity": "sha1-u7f4kxAKEadC3YvQ0EelSwlorRo=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"import-local": "1.0.0",
|
||||
"jest-cli": "23.0.1"
|
||||
"jest-cli": "23.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-regex": {
|
||||
@@ -5292,9 +5292,9 @@
|
||||
}
|
||||
},
|
||||
"jest-cli": {
|
||||
"version": "23.0.1",
|
||||
"resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.0.1.tgz",
|
||||
"integrity": "sha1-NRpbpRzyjs8gM22XowuXDR9TClY=",
|
||||
"version": "23.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.1.0.tgz",
|
||||
"integrity": "sha1-64vdTODRUlCJLjGtm2m8mdKo9r8=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-escapes": "3.1.0",
|
||||
@@ -5309,18 +5309,19 @@
|
||||
"istanbul-lib-instrument": "1.10.1",
|
||||
"istanbul-lib-source-maps": "1.2.4",
|
||||
"jest-changed-files": "23.0.1",
|
||||
"jest-config": "23.0.1",
|
||||
"jest-environment-jsdom": "23.0.1",
|
||||
"jest-config": "23.1.0",
|
||||
"jest-environment-jsdom": "23.1.0",
|
||||
"jest-get-type": "22.4.3",
|
||||
"jest-haste-map": "23.0.1",
|
||||
"jest-message-util": "23.0.0",
|
||||
"jest-haste-map": "23.1.0",
|
||||
"jest-message-util": "23.1.0",
|
||||
"jest-regex-util": "23.0.0",
|
||||
"jest-resolve-dependencies": "23.0.1",
|
||||
"jest-runner": "23.0.1",
|
||||
"jest-runtime": "23.0.1",
|
||||
"jest-runner": "23.1.0",
|
||||
"jest-runtime": "23.1.0",
|
||||
"jest-snapshot": "23.0.1",
|
||||
"jest-util": "23.0.1",
|
||||
"jest-util": "23.1.0",
|
||||
"jest-validate": "23.0.1",
|
||||
"jest-watcher": "23.1.0",
|
||||
"jest-worker": "23.0.1",
|
||||
"micromatch": "2.3.11",
|
||||
"node-notifier": "5.2.1",
|
||||
@@ -5413,22 +5414,22 @@
|
||||
}
|
||||
},
|
||||
"jest-config": {
|
||||
"version": "23.0.1",
|
||||
"resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.0.1.tgz",
|
||||
"integrity": "sha1-Z5i/8SR8ejkLEycZMwUAFYL8WPo=",
|
||||
"version": "23.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.1.0.tgz",
|
||||
"integrity": "sha1-cIyg9DHTVu5CT7SJXTMIAGvdgkE=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"babel-core": "6.26.3",
|
||||
"babel-jest": "23.0.1",
|
||||
"chalk": "2.4.1",
|
||||
"glob": "7.1.2",
|
||||
"jest-environment-jsdom": "23.0.1",
|
||||
"jest-environment-node": "23.0.1",
|
||||
"jest-environment-jsdom": "23.1.0",
|
||||
"jest-environment-node": "23.1.0",
|
||||
"jest-get-type": "22.4.3",
|
||||
"jest-jasmine2": "23.0.1",
|
||||
"jest-jasmine2": "23.1.0",
|
||||
"jest-regex-util": "23.0.0",
|
||||
"jest-resolve": "23.0.1",
|
||||
"jest-util": "23.0.1",
|
||||
"jest-resolve": "23.1.0",
|
||||
"jest-util": "23.1.0",
|
||||
"jest-validate": "23.0.1",
|
||||
"pretty-format": "23.0.1"
|
||||
}
|
||||
@@ -5455,9 +5456,9 @@
|
||||
}
|
||||
},
|
||||
"jest-each": {
|
||||
"version": "23.0.1",
|
||||
"resolved": "https://registry.npmjs.org/jest-each/-/jest-each-23.0.1.tgz",
|
||||
"integrity": "sha1-puXb9TCvxr+ddHkt3mnY23D4RwY=",
|
||||
"version": "23.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-each/-/jest-each-23.1.0.tgz",
|
||||
"integrity": "sha1-FhRrWSw1SGelrl4TzfFcbGW2lsY=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"chalk": "2.4.1",
|
||||
@@ -5465,24 +5466,24 @@
|
||||
}
|
||||
},
|
||||
"jest-environment-jsdom": {
|
||||
"version": "23.0.1",
|
||||
"resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.0.1.tgz",
|
||||
"integrity": "sha1-2mieuTWNwW5XCKuyCPTrJqQ5V1w=",
|
||||
"version": "23.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.1.0.tgz",
|
||||
"integrity": "sha1-hZKZFOI77TV32sl1X0EG0Gl8R5w=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"jest-mock": "23.0.1",
|
||||
"jest-util": "23.0.1",
|
||||
"jest-mock": "23.1.0",
|
||||
"jest-util": "23.1.0",
|
||||
"jsdom": "11.11.0"
|
||||
}
|
||||
},
|
||||
"jest-environment-node": {
|
||||
"version": "23.0.1",
|
||||
"resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.0.1.tgz",
|
||||
"integrity": "sha1-Z2t0DiBfHyvnckGWnngSvoJO55U=",
|
||||
"version": "23.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.1.0.tgz",
|
||||
"integrity": "sha1-RSwL+UnPy7rNoeF2Lu7XC8eEx9U=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"jest-mock": "23.0.1",
|
||||
"jest-util": "23.0.1"
|
||||
"jest-mock": "23.1.0",
|
||||
"jest-util": "23.1.0"
|
||||
}
|
||||
},
|
||||
"jest-get-type": {
|
||||
@@ -5492,9 +5493,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"jest-haste-map": {
|
||||
"version": "23.0.1",
|
||||
"resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.0.1.tgz",
|
||||
"integrity": "sha1-zYkFKr/Iy6AfVgu+wJ1PNq7CXU8=",
|
||||
"version": "23.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.1.0.tgz",
|
||||
"integrity": "sha1-GObH1ajScTb5G32YUvhd4McHTEk=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fb-watchman": "2.0.0",
|
||||
@@ -5598,21 +5599,21 @@
|
||||
}
|
||||
},
|
||||
"jest-jasmine2": {
|
||||
"version": "23.0.1",
|
||||
"resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.0.1.tgz",
|
||||
"integrity": "sha1-Fth1NW5jYIcrukhCb30x/cGwvOo=",
|
||||
"version": "23.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.1.0.tgz",
|
||||
"integrity": "sha1-SvqzFym2VN3NKwdK3YSTlvE7MLg=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"chalk": "2.4.1",
|
||||
"co": "4.6.0",
|
||||
"expect": "23.0.1",
|
||||
"expect": "23.1.0",
|
||||
"is-generator-fn": "1.0.0",
|
||||
"jest-diff": "23.0.1",
|
||||
"jest-each": "23.0.1",
|
||||
"jest-each": "23.1.0",
|
||||
"jest-matcher-utils": "23.0.1",
|
||||
"jest-message-util": "23.0.0",
|
||||
"jest-message-util": "23.1.0",
|
||||
"jest-snapshot": "23.0.1",
|
||||
"jest-util": "23.0.1",
|
||||
"jest-util": "23.1.0",
|
||||
"pretty-format": "23.0.1"
|
||||
}
|
||||
},
|
||||
@@ -5637,9 +5638,9 @@
|
||||
}
|
||||
},
|
||||
"jest-message-util": {
|
||||
"version": "23.0.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.0.0.tgz",
|
||||
"integrity": "sha1-Bz89dscB98cYpLmvHrfxOHksR5Y=",
|
||||
"version": "23.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.1.0.tgz",
|
||||
"integrity": "sha1-moCbpIfsrFzlEdTmmO47XuJGHqk=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/code-frame": "7.0.0-beta.44",
|
||||
@@ -5741,9 +5742,9 @@
|
||||
}
|
||||
},
|
||||
"jest-mock": {
|
||||
"version": "23.0.1",
|
||||
"resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-23.0.1.tgz",
|
||||
"integrity": "sha1-FWn0d5aMZo/HKCc6F8N2d3O0Y1c=",
|
||||
"version": "23.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-23.1.0.tgz",
|
||||
"integrity": "sha1-o4HDGxIasfYMRiotrbe4bczKxIc=",
|
||||
"dev": true
|
||||
},
|
||||
"jest-regex-util": {
|
||||
@@ -5753,9 +5754,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"jest-resolve": {
|
||||
"version": "23.0.1",
|
||||
"resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.0.1.tgz",
|
||||
"integrity": "sha1-P4QDRisQo0wt8dR6q1V0xJNbzSQ=",
|
||||
"version": "23.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.1.0.tgz",
|
||||
"integrity": "sha1-ueMW7s69bwC8UKOWDRUnuuZXktI=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"browser-resolve": "1.11.2",
|
||||
@@ -5774,21 +5775,21 @@
|
||||
}
|
||||
},
|
||||
"jest-runner": {
|
||||
"version": "23.0.1",
|
||||
"resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-23.0.1.tgz",
|
||||
"integrity": "sha1-sXauPs+eGUqkuEp/z3DRuNsjGqc=",
|
||||
"version": "23.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-23.1.0.tgz",
|
||||
"integrity": "sha1-+iCpM//3MaVDKzVh5/ZCZZT6KbU=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"exit": "0.1.2",
|
||||
"graceful-fs": "4.1.11",
|
||||
"jest-config": "23.0.1",
|
||||
"jest-config": "23.1.0",
|
||||
"jest-docblock": "23.0.1",
|
||||
"jest-haste-map": "23.0.1",
|
||||
"jest-jasmine2": "23.0.1",
|
||||
"jest-haste-map": "23.1.0",
|
||||
"jest-jasmine2": "23.1.0",
|
||||
"jest-leak-detector": "23.0.1",
|
||||
"jest-message-util": "23.0.0",
|
||||
"jest-runtime": "23.0.1",
|
||||
"jest-util": "23.0.1",
|
||||
"jest-message-util": "23.1.0",
|
||||
"jest-runtime": "23.1.0",
|
||||
"jest-util": "23.1.0",
|
||||
"jest-worker": "23.0.1",
|
||||
"source-map-support": "0.5.6",
|
||||
"throat": "4.1.0"
|
||||
@@ -5813,9 +5814,9 @@
|
||||
}
|
||||
},
|
||||
"jest-runtime": {
|
||||
"version": "23.0.1",
|
||||
"resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-23.0.1.tgz",
|
||||
"integrity": "sha1-sddl+wP7bUBDgFrycGdqaT9QTVc=",
|
||||
"version": "23.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-23.1.0.tgz",
|
||||
"integrity": "sha1-tK4OhyWeys/UqIS2OdsHz03WIK8=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"babel-core": "6.26.3",
|
||||
@@ -5825,13 +5826,13 @@
|
||||
"exit": "0.1.2",
|
||||
"fast-json-stable-stringify": "2.0.0",
|
||||
"graceful-fs": "4.1.11",
|
||||
"jest-config": "23.0.1",
|
||||
"jest-haste-map": "23.0.1",
|
||||
"jest-message-util": "23.0.0",
|
||||
"jest-config": "23.1.0",
|
||||
"jest-haste-map": "23.1.0",
|
||||
"jest-message-util": "23.1.0",
|
||||
"jest-regex-util": "23.0.0",
|
||||
"jest-resolve": "23.0.1",
|
||||
"jest-resolve": "23.1.0",
|
||||
"jest-snapshot": "23.0.1",
|
||||
"jest-util": "23.0.1",
|
||||
"jest-util": "23.1.0",
|
||||
"jest-validate": "23.0.1",
|
||||
"micromatch": "2.3.11",
|
||||
"realpath-native": "1.0.0",
|
||||
@@ -6017,17 +6018,18 @@
|
||||
}
|
||||
},
|
||||
"jest-util": {
|
||||
"version": "23.0.1",
|
||||
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-23.0.1.tgz",
|
||||
"integrity": "sha1-aOpb1+2xd9MFn5eXJZ+ODazOL5k=",
|
||||
"version": "23.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-23.1.0.tgz",
|
||||
"integrity": "sha1-wCUbrzRkTG3S/qeKli9CY6xVdy0=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"callsites": "2.0.0",
|
||||
"chalk": "2.4.1",
|
||||
"graceful-fs": "4.1.11",
|
||||
"is-ci": "1.1.0",
|
||||
"jest-message-util": "23.0.0",
|
||||
"jest-message-util": "23.1.0",
|
||||
"mkdirp": "0.5.1",
|
||||
"slash": "1.0.0",
|
||||
"source-map": "0.6.1"
|
||||
},
|
||||
"dependencies": {
|
||||
@@ -6057,6 +6059,17 @@
|
||||
"pretty-format": "23.0.1"
|
||||
}
|
||||
},
|
||||
"jest-watcher": {
|
||||
"version": "23.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-23.1.0.tgz",
|
||||
"integrity": "sha1-qNWELjjZ+0r/+CPfartCpYrmzb0=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-escapes": "3.1.0",
|
||||
"chalk": "2.4.1",
|
||||
"string-length": "2.0.0"
|
||||
}
|
||||
},
|
||||
"jest-worker": {
|
||||
"version": "23.0.1",
|
||||
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.0.1.tgz",
|
||||
@@ -6177,9 +6190,9 @@
|
||||
}
|
||||
},
|
||||
"jsonwebtoken": {
|
||||
"version": "8.2.1",
|
||||
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.2.1.tgz",
|
||||
"integrity": "sha512-l8rUBr0fqYYwPc8/ZGrue7GiW7vWdZtZqelxo4Sd5lMvuEeCK8/wS54sEo6tJhdZ6hqfutsj6COgC0d1XdbHGw==",
|
||||
"version": "8.2.2",
|
||||
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.2.2.tgz",
|
||||
"integrity": "sha512-rFFq7ow/JpPzwgaz4IyRL9cp7f4ptjW92eZgsQyqkysLBmDjSSBhnKfQESoq0GU+qJXK/CQ0o4shgwbUPiFCdw==",
|
||||
"requires": {
|
||||
"jws": "3.1.5",
|
||||
"lodash.includes": "4.3.0",
|
||||
@@ -6588,8 +6601,7 @@
|
||||
"mime": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
|
||||
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
|
||||
"dev": true
|
||||
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
|
||||
},
|
||||
"mime-db": {
|
||||
"version": "1.33.0",
|
||||
@@ -6738,6 +6750,11 @@
|
||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
|
||||
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
|
||||
},
|
||||
"net": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/net/-/net-1.0.2.tgz",
|
||||
"integrity": "sha1-0XV+yaf7I3HYPPR1XOPifhCCk4g="
|
||||
},
|
||||
"nocache": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz",
|
||||
@@ -6759,6 +6776,23 @@
|
||||
"integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
|
||||
"dev": true
|
||||
},
|
||||
"node-mocks-http": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/node-mocks-http/-/node-mocks-http-1.7.0.tgz",
|
||||
"integrity": "sha512-AX1jGG87itK38N9UZif1CFYjJDibCOj07d0YGpUsxzglVWJjyJ3R7fxtuK7l6RVCKZteLiQyaTo9UR8rIEESgw==",
|
||||
"requires": {
|
||||
"accepts": "1.3.5",
|
||||
"depd": "1.1.2",
|
||||
"fresh": "0.5.2",
|
||||
"merge-descriptors": "1.0.1",
|
||||
"methods": "1.1.2",
|
||||
"mime": "1.6.0",
|
||||
"net": "1.0.2",
|
||||
"parseurl": "1.3.2",
|
||||
"range-parser": "1.2.0",
|
||||
"type-is": "1.6.16"
|
||||
}
|
||||
},
|
||||
"node-notifier": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.2.1.tgz",
|
||||
@@ -7296,9 +7330,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"prettier": {
|
||||
"version": "1.12.1",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-1.12.1.tgz",
|
||||
"integrity": "sha1-wa0g6APndJ+vkFpAnSNn4Gu+cyU=",
|
||||
"version": "1.13.3",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.3.tgz",
|
||||
"integrity": "sha512-CIWJNU+cFFdeA0GJSzzFkxiq2WuMvWZMlz6cV/EXhPlRnI3esSFMh+lNmyZ8z/X8O8C1U60Sc8puXALj4/WmZw==",
|
||||
"dev": true
|
||||
},
|
||||
"pretty-format": {
|
||||
@@ -9326,9 +9360,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"winston": {
|
||||
"version": "3.0.0-rc5",
|
||||
"resolved": "https://registry.npmjs.org/winston/-/winston-3.0.0-rc5.tgz",
|
||||
"integrity": "sha512-BRYS7jsNkfLAqGu4dZW3kp6CmqiWKrComvfsIMYdsnpPre7g8BIw63nWRyX69vxyLYvZdszcEyxJkJmILXd/pA==",
|
||||
"version": "3.0.0-rc6",
|
||||
"resolved": "https://registry.npmjs.org/winston/-/winston-3.0.0-rc6.tgz",
|
||||
"integrity": "sha512-4QwLccPbU/aJMA+j6uYTQ8TobwLKPWhpceJZwz1lkQ+wYv7bxGyAHIdbfEOrxsKHD8zRCcgCXPbbpV3BDRD1rw==",
|
||||
"requires": {
|
||||
"async": "2.6.1",
|
||||
"diagnostics": "1.1.0",
|
||||
@@ -9337,13 +9371,16 @@
|
||||
"one-time": "0.0.4",
|
||||
"stack-trace": "0.0.10",
|
||||
"triple-beam": "1.3.0",
|
||||
"winston-transport": "3.2.1"
|
||||
"winston-transport": "4.0.0"
|
||||
}
|
||||
},
|
||||
"winston-transport": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-3.2.1.tgz",
|
||||
"integrity": "sha512-WPqbdAmMK/kfWCWKM2bA1o997wWPZ0jg5NpO8JPqoaDZgCiZnFpIEddcf7Ur4UZV2sYRUdySVBWKx0+gQQ/jrg=="
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.0.0.tgz",
|
||||
"integrity": "sha512-0f2989AvU0GAzj8R7sG2/VWunlG9xd10eEQ3fP+MbP04249DXECww5H5HHvk5zY3Eflz7DtA5NTNXal5+RmAYQ==",
|
||||
"requires": {
|
||||
"triple-beam": "1.3.0"
|
||||
}
|
||||
},
|
||||
"wordwrap": {
|
||||
"version": "1.0.0",
|
||||
|
||||
+10
-8
@@ -14,14 +14,13 @@
|
||||
"flow": "flow",
|
||||
"flow-coverage": "flow-coverage-report",
|
||||
"eslint": "eslint src",
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
"test": "jest out/"
|
||||
},
|
||||
"author": "Federico Kereki",
|
||||
"license": "ISC",
|
||||
"babel": {
|
||||
"presets": [
|
||||
"env",
|
||||
"node",
|
||||
"flow"
|
||||
]
|
||||
},
|
||||
@@ -33,7 +32,8 @@
|
||||
"parser": "babel-eslint",
|
||||
"env": {
|
||||
"node": true,
|
||||
"es6": true
|
||||
"es6": true,
|
||||
"jest": true
|
||||
},
|
||||
"extends": [
|
||||
"eslint:recommended",
|
||||
@@ -78,24 +78,26 @@
|
||||
"dotenv": "^5.0.1",
|
||||
"express": "^4.16.3",
|
||||
"helmet": "^3.12.1",
|
||||
"jsonwebtoken": "^8.2.1",
|
||||
"jsonwebtoken": "^8.2.2",
|
||||
"mariasql": "^0.2.6",
|
||||
"morgan": "^1.9.0",
|
||||
"winston": "^3.0.0-rc5"
|
||||
"node-mocks-http": "^1.7.0",
|
||||
"winston": "^3.0.0-rc6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-eslint": "^8.2.2",
|
||||
"babel-jest": "^23.0.1",
|
||||
"babel-preset-env": "^1.7.0",
|
||||
"babel-preset-flow": "^6.23.0",
|
||||
"eslint": "^4.19.0",
|
||||
"eslint-config-recommended": "^2.0.0",
|
||||
"eslint-plugin-flowtype": "^2.47.1",
|
||||
"eslint-plugin-flowtype": "^2.48.0",
|
||||
"flow-bin": "^0.68.0",
|
||||
"flow-coverage-report": "^0.5.0",
|
||||
"flow-remove-types": "^1.2.3",
|
||||
"flow-typed": "^2.4.0",
|
||||
"jest": "^23.0.1",
|
||||
"jest": "^23.1.0",
|
||||
"nodemon": "^1.17.5",
|
||||
"prettier": "^1.11.1"
|
||||
"prettier": "^1.13.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,182 @@
|
||||
/* @flow */
|
||||
"use strict";
|
||||
|
||||
const getRegion = async (
|
||||
res: any,
|
||||
dbConn: any,
|
||||
country: ?string,
|
||||
region: ?string
|
||||
) => {
|
||||
try {
|
||||
let sqlQuery = "";
|
||||
if (country == null) {
|
||||
sqlQuery = `
|
||||
SELECT rr.*
|
||||
FROM regions rr
|
||||
JOIN countries cc
|
||||
ON cc.countryCode=rr.countryCode
|
||||
ORDER BY cc.countryCode, rr.regionCode
|
||||
`;
|
||||
} else if (region == null) {
|
||||
sqlQuery = `
|
||||
SELECT 1
|
||||
FROM countries
|
||||
WHERE countryCode="${country}"
|
||||
`;
|
||||
|
||||
const countries = await dbConn.query(sqlQuery);
|
||||
if (countries.length === 0) {
|
||||
return res.status(404).send("Country not found");
|
||||
}
|
||||
|
||||
sqlQuery = `
|
||||
SELECT rr.*
|
||||
FROM regions rr
|
||||
JOIN countries cc
|
||||
ON cc.countryCode=rr.countryCode
|
||||
WHERE rr.countryCode="${country}"
|
||||
ORDER BY rr.regionCode
|
||||
`;
|
||||
} else {
|
||||
sqlQuery = `
|
||||
SELECT rr.*
|
||||
FROM regions rr
|
||||
JOIN countries cc
|
||||
ON cc.countryCode=rr.countryCode
|
||||
WHERE rr.countryCode="${country}"
|
||||
AND rr.regionCode="${region}"
|
||||
`;
|
||||
}
|
||||
|
||||
const regions = await dbConn.query(sqlQuery);
|
||||
if (regions.length > 0 || region === null) {
|
||||
res
|
||||
.status(200)
|
||||
.set("Content-Type", "application/json")
|
||||
.send(JSON.stringify(regions));
|
||||
} else {
|
||||
res.status(404).send("Not found");
|
||||
}
|
||||
} catch (e) {
|
||||
res.status(500).send("Server error");
|
||||
}
|
||||
};
|
||||
|
||||
const deleteRegion = async (
|
||||
res: any,
|
||||
dbConn: any,
|
||||
country: string,
|
||||
region: string
|
||||
) => {
|
||||
try {
|
||||
const sqlCities = `
|
||||
SELECT 1 FROM cities
|
||||
WHERE countryCode="${country}"
|
||||
AND regionCode="${region}"
|
||||
LIMIT 1
|
||||
`;
|
||||
const cities = await dbConn.query(sqlCities);
|
||||
if (cities.length > 0) {
|
||||
res.status(405).send("Cannot delete a region with cities");
|
||||
} else {
|
||||
const deleteRegion = `
|
||||
DELETE FROM regions
|
||||
WHERE countryCode="${country}"
|
||||
AND regionCode="${region}"
|
||||
`;
|
||||
|
||||
const result = await dbConn.query(deleteRegion);
|
||||
if (result.info.affectedRows > 0) {
|
||||
res.status(204).send();
|
||||
} else {
|
||||
res.status(404).send("Region not found");
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
res.status(500).send("Server error");
|
||||
}
|
||||
};
|
||||
|
||||
const postRegion = async (
|
||||
res: any,
|
||||
dbConn: any,
|
||||
country: string,
|
||||
name: string
|
||||
) => {
|
||||
if (!name) {
|
||||
return res.status(400).send("Missing name");
|
||||
}
|
||||
|
||||
try {
|
||||
const sqlCountry = `
|
||||
SELECT 1
|
||||
FROM countries
|
||||
WHERE countryCode="${country}"
|
||||
`;
|
||||
const countries = await dbConn.query(sqlCountry);
|
||||
if (countries.length === 0) {
|
||||
res.status(403).send("Country must exist");
|
||||
}
|
||||
|
||||
const sqlGetId = `
|
||||
SELECT MAX(CAST(regionCode AS INTEGER)) AS maxr
|
||||
FROM regions
|
||||
WHERE countryCode="${country}"
|
||||
`;
|
||||
const regions = await dbConn.query(sqlGetId);
|
||||
const newId =
|
||||
regions.length === 0 ? 1 : 1 + Number(regions[0].maxr);
|
||||
|
||||
const sqlAddRegion = `
|
||||
INSERT INTO regions SET
|
||||
countryCode="${country}",
|
||||
regionCode="${newId}",
|
||||
regionName="${name}"
|
||||
`;
|
||||
|
||||
const result = await dbConn.query(sqlAddRegion);
|
||||
if (result.info.affectedRows > 0) {
|
||||
res
|
||||
.status(201)
|
||||
.header("Location", `/regions/${country}/${newId}`)
|
||||
.send("Region created");
|
||||
} else {
|
||||
res.status(409).send("Region not created");
|
||||
}
|
||||
} catch (e) {
|
||||
res.status(500).send("Server error");
|
||||
}
|
||||
};
|
||||
|
||||
const putRegion = async (
|
||||
res: any,
|
||||
dbConn: any,
|
||||
country: string,
|
||||
region: string,
|
||||
name: string
|
||||
) => {
|
||||
if (!name) {
|
||||
return res.status(400).send("Missing name");
|
||||
}
|
||||
|
||||
try {
|
||||
const sqlUpdateRegion = `
|
||||
UPDATE regions
|
||||
SET regionName="${name}"
|
||||
WHERE countryCode="${country}"
|
||||
AND regionCode="${region}"
|
||||
`;
|
||||
|
||||
const result = await dbConn.query(sqlUpdateRegion);
|
||||
|
||||
if (result.info.affectedRows > 0) {
|
||||
res.status(204).send();
|
||||
} else {
|
||||
res.status(409).send("Region not updated");
|
||||
}
|
||||
} catch (e) {
|
||||
res.status(500).send("Server error");
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = { getRegion, deleteRegion, postRegion, putRegion };
|
||||
@@ -0,0 +1,44 @@
|
||||
/* @flow */
|
||||
"use strict";
|
||||
|
||||
const { deleteRegion } = require("./restful_regions");
|
||||
|
||||
const mockRes = require("node-mocks-http");
|
||||
|
||||
describe("deleteRegion", () => {
|
||||
it("should not delete a region with cities", async () => {
|
||||
const mDb = { query: jest.fn() };
|
||||
mDb.query.mockReturnValueOnce(Promise.resolve([1]));
|
||||
const mRes = new mockRes.createResponse();
|
||||
await deleteRegion(mRes, mDb, "UY", "11");
|
||||
expect(mRes.statusCode).toBe(405);
|
||||
});
|
||||
|
||||
it("should delete a region without cities", async () => {
|
||||
const mDb = { query: jest.fn() };
|
||||
mDb.query
|
||||
.mockReturnValueOnce(Promise.resolve([]))
|
||||
.mockReturnValueOnce(
|
||||
Promise.resolve({
|
||||
info: { affectedRows: 1 }
|
||||
})
|
||||
);
|
||||
const mRes = new mockRes.createResponse();
|
||||
await deleteRegion(mRes, mDb, "UY", "11");
|
||||
expect(mRes.statusCode).toBe(204);
|
||||
});
|
||||
|
||||
it("should produce a 404 for non-existing region", async () => {
|
||||
const mDb = { query: jest.fn() };
|
||||
mDb.query
|
||||
.mockReturnValueOnce(Promise.resolve([]))
|
||||
.mockReturnValueOnce(
|
||||
Promise.resolve({
|
||||
info: { affectedRows: 0 }
|
||||
})
|
||||
);
|
||||
const mRes = new mockRes.createResponse();
|
||||
await deleteRegion(mRes, mDb, "UY", "11");
|
||||
expect(mRes.statusCode).toBe(404);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,34 @@
|
||||
/* @flow */
|
||||
"use strict";
|
||||
|
||||
// These won't be exported:
|
||||
|
||||
const roundToCents = (x: number): number => Math.round(x * 100) / 100;
|
||||
|
||||
const changeSign = (x: number): number => -x;
|
||||
|
||||
// The following will be exported:
|
||||
|
||||
const addR = (x: number, y: number): number => roundToCents(x + y);
|
||||
|
||||
const subR = (x: number, y: number): number => addR(x, changeSign(y));
|
||||
|
||||
const multR = (x: number, y: number): number => roundToCents(x * y);
|
||||
|
||||
const divR = (x: number, y: number): number => {
|
||||
if (y === 0) {
|
||||
throw new Error("Divisor must be nonzero");
|
||||
} else {
|
||||
return roundToCents(x / y);
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
NOTES:
|
||||
1. Exports are all together, at the end, per convention
|
||||
2. roundToCents and changeSign are not exported, on purpose
|
||||
*/
|
||||
exports.addR = addR;
|
||||
exports.subR = subR;
|
||||
exports.multR = multR;
|
||||
exports.divR = divR;
|
||||
@@ -0,0 +1,23 @@
|
||||
/* @flow */
|
||||
"use strict";
|
||||
|
||||
const rm = require("./roundmath");
|
||||
|
||||
describe("addR", () => {
|
||||
it("should add first and round later", () => {
|
||||
expect(rm.addR(1.505, 2.505)).toBe(4.01);
|
||||
});
|
||||
|
||||
it("should handle negatives", () => {
|
||||
expect(rm.addR(3.15, -2.149)).toBe(1.0);
|
||||
});
|
||||
});
|
||||
|
||||
describe("divR", () => {
|
||||
it("should divide first, then round", () => {
|
||||
expect(rm.divR(22.96, 0.001)).toBe(22960);
|
||||
});
|
||||
|
||||
it("should not divide by zero", () =>
|
||||
expect(() => rm.divR(22, 0)).toThrow());
|
||||
});
|
||||
Reference in New Issue
Block a user