From 3fb02b5809a28f95df3a40b07820ae68a9a09a16 Mon Sep 17 00:00:00 2001 From: Martin Grotz Date: Tue, 29 Sep 2020 22:08:29 +0200 Subject: [PATCH] chore: update package versions and readme --- README.md | 30 +- package-lock.json | 285 +++-- package.json | 24 +- postman-examples/add-track.json | 145 +++ routes/auth.js | 10 +- tests/api-tests.postman.json | 1900 ------------------------------ tests/env-api-tests.postman.json | 14 - 7 files changed, 350 insertions(+), 2058 deletions(-) create mode 100644 postman-examples/add-track.json delete mode 100644 tests/api-tests.postman.json delete mode 100644 tests/env-api-tests.postman.json diff --git a/README.md b/README.md index 659bbab..a567681 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,30 @@ -# obsAPI -OpenBikeSensor Web API +# OpenBikeSensor Web API +The backend API for the [OpenBikeSensor](https://zweirat-stuttgart.de/projekte/openbikesensor/) Web App. +## Running it +### Requirements +A working installation of npm and node.js - get the latest node.js LTS release at [the node.js homepage](https://nodejs.org/en/) and verify it's working via `node -v` and `npm -v` in a command prompt of your choice. +A working installation of [Docker](https://www.docker.com) for the used containerized MongoDB. + +### First start +To get started you need to download all used packages with `npm i` in the project's root folder first. + +Next up is our local MongoDB. This uses docker but can be conveniently started via `sudo npm run mongo:start` (at least in Ubuntu Linux). + +Afterwards the dev server is started with `npm run dev` and can be called via `http://localhost:3000/api`. + +To completely stop the project after running it a call to `sudo npm run mongo:stop` is necessary. + +### Running the tests +Just execute `npm run test` while both the node.js server and the MongoDB are up and running. + +Warning: At the moment (2020-09-29) there are no tests. + +### Uploading a track for test purposes +Uploading a track to the local server requires multiple steps, as uploading is not possible via the dummy upload form in the corresponding web app yet: +- Create a user in the web app and copy the user id, which can be found at (http://localhost:4200/settings) as "API key" +- Import the [Postman](https://www.postman.com) script "add-track.json" from the "postman-examples" into Postman +- In each of the three requests add your user id in the "Pre-request script" tab as the value for the "UserId" variable +- As tracks have to be split into smaller parts to get a working upload from the sensor you have to run the three requests in the order of: begin -> add -> end +- View your freshly uploaded track at (http://localhost:4200) -> Home -> Your feed \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 5518ec9..60e48e8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "conduit-node", + "name": "open-bike-sensor-web-api", "version": "1.0.0", "lockfileVersion": 1, "requires": true, @@ -211,9 +211,9 @@ "dev": true }, "bl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.0.tgz", - "integrity": "sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", "requires": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" @@ -338,9 +338,9 @@ } }, "bson": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.4.tgz", - "integrity": "sha512-S/yKGU1syOMzO86+dGpg2qGoDL0zvzcb262G+gqEy6TgP6rt6z6qxSFX/8X6vLC91P7G7C3nLs0+bvDzmvBA3Q==" + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", + "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" }, "buffer-equal-constant-time": { "version": "1.0.1", @@ -406,9 +406,9 @@ } }, "chardet": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-1.1.0.tgz", - "integrity": "sha512-K6BWWdt9ncg6TDTX42J57s9zZWVI1DXVYQ6zUM8dZUB2TDeV5ia4kDei19r/pMxNzSGYYf6LqHsyvEybvTPHuA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-1.2.1.tgz", + "integrity": "sha512-bnDt+69nS8Hi7Xmt0uDiQ32/hRpMK/0pc4lc32Y87voBgdsz26VZXOyo5VNQWQfe7rUsevZIfWB82C5QSpCXcQ==", "dev": true }, "charset": { @@ -503,9 +503,9 @@ } }, "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.1.0.tgz", + "integrity": "sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA==", "dev": true }, "concat-map": { @@ -571,9 +571,9 @@ "dev": true }, "csv-parse": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.10.1.tgz", - "integrity": "sha512-gdDJVchi0oSLIcYXz1H/VSgLE6htHDqJyFsRU/vTkQgmVOZ3S0IR2LXnNbWUYG7VD76dYVwdfBLyx8AX9+An8A==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.12.0.tgz", + "integrity": "sha512-wPQl3H79vWLPI8cgKFcQXl0NBgYYEqVnT1i6/So7OjMpsI540oD7p93r3w6fDSyPvwkTepG05F69/7AViX2lXg==", "dev": true }, "dashdash": { @@ -650,9 +650,9 @@ }, "dependencies": { "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz", + "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==", "dev": true }, "entities": { @@ -726,9 +726,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "ejs": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.3.tgz", - "integrity": "sha512-wmtrUGyfSC23GC/B1SMv2ogAUgbQEtDmTIhfqielrG5ExIM9TP4UoYdi90jLF1aTcsWCJNEO0UrgKzP0y3nTSg==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.5.tgz", + "integrity": "sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w==", "requires": { "jake": "^10.6.1" } @@ -790,9 +790,9 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "express": { @@ -833,9 +833,9 @@ } }, "express-jwt": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/express-jwt/-/express-jwt-5.3.3.tgz", - "integrity": "sha512-UdB8p5O8vGYTKm3SfREnLgVGIGEHcL3lrVyi3ebEX2qhMuagN623ju7ywWis+qYL+CXE7G1qPc2bCPBAg2MxZQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/express-jwt/-/express-jwt-6.0.0.tgz", + "integrity": "sha512-C26y9myRjx7CyhZ+BAT3p+gQyRCoDZ7qo8plCvLDaRT6je6ALIAQknT6XLVQGFKwIy/Ux7lvM2MNap5dt0T7gA==", "requires": { "async": "^1.5.0", "express-unless": "^0.3.0", @@ -886,9 +886,9 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "faker": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/faker/-/faker-4.1.0.tgz", - "integrity": "sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/faker/-/faker-5.1.0.tgz", + "integrity": "sha512-RrWKFSSA/aNLP0g3o2WW1Zez7/MnMr7xkiZmoCfAGZmdkDQZ6l2KtuXHN5XjdvpRjDl8+3vf+Rrtl06Z352+Mw==", "dev": true }, "fast-json-stable-stringify": { @@ -1535,9 +1535,9 @@ "dev": true }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", "dev": true }, "lodash.clonedeep": { @@ -1632,9 +1632,9 @@ } }, "marked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-1.1.0.tgz", - "integrity": "sha512-EkE7RW6KcXfMHy2PA7Jg0YJE1l8UPEZE8k45tylzmZM30/r1M1MUXWQfJlrSbsTeh7m/XTwHbWUENvAJZpp1YA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/marked/-/marked-1.1.1.tgz", + "integrity": "sha512-mJzT8D2yPxoPh7h0UXkB+dBj4FykPJ2OIfxAWeIHrvoHDkFxukV/29QxoFQoPM6RLEwhIFdJpmKBlqVM3s2ZIw==", "dev": true }, "media-typer": { @@ -1733,11 +1733,11 @@ "dev": true }, "mongodb": { - "version": "3.5.9", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.9.tgz", - "integrity": "sha512-vXHBY1CsGYcEPoVWhwgxIBeWqP3dSu9RuRDsoLRPTITrcrgm1f0Ubu1xqF9ozMwv53agmEiZm0YGo+7WL3Nbug==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.2.tgz", + "integrity": "sha512-sSZOb04w3HcnrrXC82NEh/YGCmBuRgR+C1hZgmmv4L6dBz4BkRse6Y8/q/neXer9i95fKUBbFi4KgeceXmbsOA==", "requires": { - "bl": "^2.2.0", + "bl": "^2.2.1", "bson": "^1.1.4", "denque": "^1.4.1", "require_optional": "^1.0.1", @@ -1746,19 +1746,19 @@ } }, "mongoose": { - "version": "5.9.20", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.9.20.tgz", - "integrity": "sha512-vRP6Csu2obzSl3ed7kTQMrolBNgweiRJ/eBU1PSe/rJfjqWS1oqDE2D1ZPGxkVOsKXs7Gyd84GAXerj8IB2UWg==", + "version": "5.10.7", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.10.7.tgz", + "integrity": "sha512-oiofFrD4I5p3PhJXn49QyrU1nX5CY01qhPkfMMrXYPhkfGLEJVwFVO+0PsCxD91A2kQP+d/iFyk5U8e86KI8eQ==", "requires": { "bson": "^1.1.4", "kareem": "2.3.1", - "mongodb": "3.5.9", + "mongodb": "3.6.2", "mongoose-legacy-pluralize": "1.0.2", "mpath": "0.7.0", "mquery": "3.2.2", "ms": "2.1.2", "regexp-clone": "1.0.0", - "safe-buffer": "5.1.2", + "safe-buffer": "5.2.1", "sift": "7.0.1", "sliced": "1.0.1" }, @@ -1767,6 +1767,11 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, @@ -1846,35 +1851,36 @@ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "newman": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/newman/-/newman-5.1.0.tgz", - "integrity": "sha512-V3HrweC3t7tsHshOiu8cG2dbHvJwMf5/rxwqBHAK/fZq/H1CGPSLM/T6IhbTpbPqIs+GpklQXO9VsFFuUf7Nfw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/newman/-/newman-5.2.0.tgz", + "integrity": "sha512-VzvKHhdPM7QvuwQfnJMj50hHLf27AE9hCAbMgbP5aXIQ12eKhrL3if1U0OWcB+BvSLdww9nKvMDwvuF72/ipFw==", "dev": true, "requires": { "async": "3.2.0", - "chardet": "1.1.0", + "chardet": "1.2.1", "cli-progress": "3.8.2", "cli-table3": "0.6.0", "colors": "1.4.0", - "commander": "5.1.0", - "csv-parse": "4.10.1", - "eventemitter3": "4.0.4", + "commander": "6.1.0", + "csv-parse": "4.12.0", + "eventemitter3": "4.0.7", "filesize": "6.1.0", - "lodash": "4.17.15", + "lodash": "4.17.20", "mkdirp": "1.0.4", - "postman-collection": "3.6.2", - "postman-collection-transformer": "3.3.2", - "postman-request": "2.88.1-postman.23", - "postman-runtime": "7.26.0", + "postman-collection": "3.6.6", + "postman-collection-transformer": "3.3.3", + "postman-request": "2.88.1-postman.24", + "postman-runtime": "7.26.5", "pretty-ms": "7.0.0", "semver": "7.3.2", "serialised-error": "1.1.3", + "tough-cookie": "3.0.1", "word-wrap": "1.2.3", "xmlbuilder": "15.1.1" }, @@ -1890,6 +1896,17 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", "dev": true + }, + "tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "dev": true, + "requires": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + } } } }, @@ -3488,9 +3505,9 @@ "dev": true }, "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -3510,34 +3527,34 @@ } }, "postman-collection": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-3.6.2.tgz", - "integrity": "sha512-daouhC0qe9ThF0EgIgWSJQxEj1fLctRREnWpSC+Tg2Sel/9keEho9zyWET5dYHPisPZcxGCqS3Q+BN/WQO+SAg==", + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-3.6.6.tgz", + "integrity": "sha512-fm9AGKHbL2coSzD5nw+F07JrX7jzqu2doGIXevPPrwlpTZyTM6yagEdENeO/Na8rSUrI1+tKPj+TgAFiLvtF4w==", "dev": true, "requires": { "escape-html": "1.0.3", - "faker": "4.1.0", + "faker": "5.1.0", "file-type": "3.9.0", "http-reasons": "0.1.0", - "iconv-lite": "0.5.1", + "iconv-lite": "0.6.2", "liquid-json": "0.3.1", - "lodash": "4.17.15", - "marked": "1.1.0", + "lodash": "4.17.20", + "marked": "1.1.1", "mime-format": "2.0.0", "mime-types": "2.1.27", - "postman-url-encoder": "2.1.1", + "postman-url-encoder": "2.1.3", "sanitize-html": "1.20.1", "semver": "7.3.2", "uuid": "3.4.0" }, "dependencies": { "iconv-lite": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.1.tgz", - "integrity": "sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "mime-db": { @@ -3564,25 +3581,37 @@ } }, "postman-collection-transformer": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/postman-collection-transformer/-/postman-collection-transformer-3.3.2.tgz", - "integrity": "sha512-ZhhmrOZvAGZkPaX6r4j8G4vR1LHSSHXsGIxyQfMCdzSZqaW0H/d/4L0jqTYqjktb9aTkgHh61jKguM1HQ/L4Cw==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/postman-collection-transformer/-/postman-collection-transformer-3.3.3.tgz", + "integrity": "sha512-Ra0hfljwB6xnGJ7a638K0TkXTf5BuwGNo1Ahpa9ECehOTOlUFisE8dqX5VZl04QGbpvN5nmr0rwrtLXtK53Abg==", "dev": true, "requires": { "commander": "5.1.0", "inherits": "2.0.4", "intel": "1.2.0", - "lodash": "4.17.15", + "lodash": "4.17.19", "semver": "7.3.2", - "strip-json-comments": "3.1.0" + "strip-json-comments": "3.1.1" }, "dependencies": { + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true + }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + }, "semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", @@ -3592,9 +3621,9 @@ } }, "postman-request": { - "version": "2.88.1-postman.23", - "resolved": "https://registry.npmjs.org/postman-request/-/postman-request-2.88.1-postman.23.tgz", - "integrity": "sha512-ftqsjGCGKjk23c+gy85aw1Ubs1MIsULhkZ5D9IMuKP8jiGJXW7avNk9jMVfFcyONayvVllfyJugPHZydbt1baA==", + "version": "2.88.1-postman.24", + "resolved": "https://registry.npmjs.org/postman-request/-/postman-request-2.88.1-postman.24.tgz", + "integrity": "sha512-afW2QxA9YCSaMUBFGRWvxnyjN4SqgXC5HqKJ0DFNfbx4ZW6AsBCFXeb5NAFgCH3kZ/og0XhUSDV+imjWwahLLg==", "dev": true, "requires": { "@postman/form-data": "~3.1.0", @@ -3622,9 +3651,9 @@ }, "dependencies": { "http-signature": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.4.tgz", - "integrity": "sha512-CbG3io8gUSIxNNSgq+XMjgpTMzAeVRipxVXjuGrDhH5M1a2kZ03w20s8FCLR1NjnnJj10KbvabvckmtQcYNb9g==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.5.tgz", + "integrity": "sha512-NwoTQYSJoFt34jSBbwzDHDofoA61NGXzu6wXh95o1Ry62EnmKjXb/nR/RknLeZ3G/uGwrlKNY2z7uPt+Cdl7Tw==", "dev": true, "requires": { "assert-plus": "^1.0.0", @@ -3641,26 +3670,26 @@ } }, "postman-runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/postman-runtime/-/postman-runtime-7.26.0.tgz", - "integrity": "sha512-ueQdLL1PtvfVbzg46eKSy/9tpJz1nIDrJVRabpTph3j6Uz4otB5oC63SW8c50QcOGOn1Q1MlNDYN8mWjvRyPgg==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/postman-runtime/-/postman-runtime-7.26.5.tgz", + "integrity": "sha512-5sY4iWjG4GeGQ5o4QAJkAt79jmcZhOrs3XSbtCLrs4NqoZpTBx5WDQr6h1Dy4Y8Q0X/9NMCYqF/c5pnsqUyDCQ==", "dev": true, "requires": { "async": "2.6.3", - "aws4": "1.10.0", - "eventemitter3": "4.0.4", + "aws4": "1.10.1", + "eventemitter3": "4.0.7", "handlebars": "4.7.6", "http-reasons": "0.1.0", "httpntlm": "1.7.6", "inherits": "2.0.4", "js-sha512": "0.8.0", - "lodash": "4.17.15", + "lodash": "4.17.20", "node-oauth1": "1.3.0", "performance-now": "2.1.0", - "postman-collection": "3.6.2", - "postman-request": "2.88.1-postman.23", - "postman-sandbox": "3.5.4", - "postman-url-encoder": "2.1.1", + "postman-collection": "3.6.6", + "postman-request": "2.88.1-postman.24", + "postman-sandbox": "3.5.9", + "postman-url-encoder": "2.1.3", "resolve-from": "5.0.0", "serialised-error": "1.1.3", "tough-cookie": "3.0.1", @@ -3677,9 +3706,9 @@ } }, "aws4": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", + "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==", "dev": true }, "inherits": { @@ -3708,17 +3737,17 @@ } }, "postman-sandbox": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/postman-sandbox/-/postman-sandbox-3.5.4.tgz", - "integrity": "sha512-spo4UudKdHZ7GsTpkg+fDgwWAYuSaR7pOaMRHkIWR7IArG4iTf1Rm9BDe+vyy8ACFWtOLFWAnOYqPKnLhN6DVA==", + "version": "3.5.9", + "resolved": "https://registry.npmjs.org/postman-sandbox/-/postman-sandbox-3.5.9.tgz", + "integrity": "sha512-B9mREFulQuYOa9+B7rklb94d9iZ6EYyhsUvdIfxphGUByimb6mOhumWV0sGbrtxVTsCAtTpN/68Shm7NCjrZ0A==", "dev": true, "requires": { "inherits": "2.0.4", - "lodash": "4.17.15", + "lodash": "4.17.20", "teleport-javascript": "1.0.0", "tough-cookie": "3.0.1", "uuid": "3.4.0", - "uvm": "1.7.8" + "uvm": "1.7.9" }, "dependencies": { "inherits": { @@ -3741,12 +3770,12 @@ } }, "postman-url-encoder": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-2.1.1.tgz", - "integrity": "sha512-WxXvA3pWupcboNylMpBRO3U3aUmPP6kIftN9GtNOEoXiHWx5vuCHTSw1+eQDj4vHWe4UuwJYN3K0BLAqTsXi8w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-2.1.3.tgz", + "integrity": "sha512-CwQjnoxaugCGeOyzVeZ4k1cNQ6iS8OBCzuWzcf4kLStKeRp0MwmLKYv25frynmDpugUUimq/d+FZCq6GtIX9Ag==", "dev": true, "requires": { - "postman-collection": "^3.6.0", + "postman-collection": "^3.6.4", "punycode": "^2.1.1" } }, @@ -4102,9 +4131,9 @@ "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" }, "slug": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/slug/-/slug-3.3.0.tgz", - "integrity": "sha512-IbENbO0s6VFKWcjWmaNlb5HSvMSwqz0+IFg6G+dotpYptoY2n6+JcfP8dO2OxG8zyMlt9qTcCmMwBBdfsC1Kcw==" + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/slug/-/slug-3.3.5.tgz", + "integrity": "sha512-d/9yTbJDtSIhJThaNRP/U5uxwCl0mWIlV42JmKSfvg8t7DiVt69G8rAWTc0FWhaQOier0fiNAWVs7ctvVhK1RA==" }, "source-map": { "version": "0.6.1", @@ -4202,9 +4231,9 @@ } }, "strip-json-comments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", - "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "supports-color": { @@ -4316,9 +4345,9 @@ } }, "uglify-js": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.0.tgz", - "integrity": "sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.11.0.tgz", + "integrity": "sha512-e1KQFRCpOxnrJsJVqDUCjURq+wXvIn7cK2sRAx9XL3HYLL9aezOP4Pb1+Y3/o693EPk111Yj2Q+IUXxcpHlygQ==", "dev": true, "optional": true }, @@ -4340,9 +4369,9 @@ } }, "underscore": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz", - "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg==" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.11.0.tgz", + "integrity": "sha512-xY96SsN3NA461qIRKZ/+qox37YXPtSBswMGfiNptr+wrt6ds4HaMw23TP612fEyGekRE6LNRiLYr/aqbHXNedw==" }, "unique-string": { "version": "2.0.0", @@ -4477,14 +4506,14 @@ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, "uvm": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/uvm/-/uvm-1.7.8.tgz", - "integrity": "sha512-Uasp7fsWQBo+pZbtlA0C464vYC6uHDdSVbX08vIinvi7r/k1R9sSs7n2/rf8lHkYRR6l4I46i7/xsWdqvLKDVQ==", + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/uvm/-/uvm-1.7.9.tgz", + "integrity": "sha512-Z3Uf7Jm8Cpvxf8FMjE7cFBaXsXzKu2n3kFqV23pQNLg8rrZqi6fmLFnLCn5EhiEC94XdcQCCNjrGeOnFdy1xsA==", "dev": true, "requires": { "flatted": "2.0.1", "inherits": "2.0.4", - "lodash": "4.17.15", + "lodash": "4.17.19", "uuid": "3.3.2" }, "dependencies": { @@ -4494,6 +4523,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + }, "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", diff --git a/package.json b/package.json index 8dfcfc9..7f59547 100644 --- a/package.json +++ b/package.json @@ -1,44 +1,42 @@ { - "name": "conduit-node", + "name": "open-bike-sensor-web-api", "version": "1.0.0", - "description": "conduit on node", + "description": "Backend API for the OpenBikeSensor web app", "main": "app.js", "scripts": { "mongo:start": "docker run --name realworld-mongo -p 27017:27017 mongo & sleep 5", "start": "node ./app.js", "dev": "nodemon ./app.js", - "test": "newman run ./tests/api-tests.postman.json -e ./tests/env-api-tests.postman.json", - "stop": "lsof -ti :3000 | xargs kill", "mongo:stop": "docker stop realworld-mongo && docker rm realworld-mongo" }, "repository": { "type": "git", - "url": "git+https://github.com/gothinkster/productionready-node-api.git" + "url": "git+https://github.com/Friends-of-OpenBikeSensor/obsAPI.git" }, - "license": "ISC", + "license": "LGPLv3", "dependencies": { "body-parser": "1.19.0", "cors": "2.8.5", - "ejs": "3.1.3", + "ejs": "^3.1.5", "errorhandler": "1.5.1", "express": "4.17.1", - "express-jwt": "5.3.3", + "express-jwt": "^6.0.0", "express-session": "1.17.1", "jsonwebtoken": "8.5.1", "latest": "^0.2.0", "method-override": "3.0.0", "methods": "1.1.2", - "mongoose": "5.9.20", + "mongoose": "^5.10.7", "mongoose-unique-validator": "2.0.3", "morgan": "1.10.0", "passport": "0.4.1", "passport-local": "1.0.0", "request": "2.88.2", - "slug": "3.3.0", - "underscore": "1.10.2" + "slug": "^3.3.5", + "underscore": "^1.11.0" }, "devDependencies": { - "newman": "^5.1.0", + "newman": "^5.2.0", "nodemon": "^2.0.4" } -} +} \ No newline at end of file diff --git a/postman-examples/add-track.json b/postman-examples/add-track.json new file mode 100644 index 0000000..c02472a --- /dev/null +++ b/postman-examples/add-track.json @@ -0,0 +1,145 @@ +{ + "info": { + "_postman_id": "97ad5166-ccbf-4b3a-a5e7-0115080bb931", + "name": "obs", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "http://localhost:3000/api/tracks/begin", + "event": [ + { + "listen": "prerequest", + "script": { + "id": "79c80906-fd37-4541-9ff4-a0c2d9610649", + "exec": [ + "pm.environment.set(\"UserId\", \"your-user-id\");" + ], + "type": "text/javascript" + } + } + ], + "protocolProfileBehavior": { + "disabledSystemHeaders": {} + }, + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\"id\": \"{{UserId}}\",\"track\":{\"title\":\"AutoUpload55lp\",\"description\":\"created by an esp32testp\",\"body\":\"Date;Time;Latitude;Longitude;Course;Speed;Right;Left;Confirmed;insidePrivacyArea;$12.07.2020;09:02:59;0.000000;0.000000;0.000;0.0000;255;255;0;0;$12.07.2020;09:02:59;0.000000;0.000000;0.000;0.0000;255;255;0;0;$12.07.2020;09:03:00;0.000000;0.000000;0.000;0.0000;255;255;0;0;$12.07.2020;09:03:01;48.722205;9.270218;0.000;0.4260;255;255;0;0;$12.07.2020;09:03:02;48.722206;9.270219;0.000;0.5741;255;255;0;0;$12.07.2020;09:03:03;48.722204;9.270221;0.000;0.5371;255;255;0;0;$12.07.2020;09:03:04;48.722198;9.270229;0.000;0.7593;255;255;0;0;$12.07.2020;09:03:05;48.722188;9.270241;0.000;0.5556;255;255;0;0;$12.07.2020;09:03:06;48.722174;9.270259;0.000;0.4815;255;255;0;0;$12.07.2020;09:03:07;48.722158;9.270278;0.000;0.3704;255;255;0;0;$12.07.2020;09:03:08;48.722146;9.270293;0.000;0.5741;255;255;0;0;$12.07.2020;09:03:09;48.722138;9.270305;0.000;1.2594;255;255;0;0;$12.07.2020;09:03:10;48.722129;9.270318;0.000;1.5557;255;255;0;0;$12.07.2020;09:03:11;48.722122;9.270329;0.000;1.5372;255;255;0;0;$12.07.2020;09:03:12;48.722115;9.270339;0.000;0.4630;255;255;0;0;$12.07.2020;09:03:13;48.722107;9.270350;0.000;0.2963;255;255;0;0;$12.07.2020;09:03:14;48.722101;9.270357;0.000;0.2963;255;255;0;0;$12.07.2020;09:03:15;48.722092;9.270367;0.000;0.8149;255;255;0;0;$12.07.2020;09:03:16;48.722084;9.270377;0.000;1.2223;255;255;0;0;$12.07.2020;09:03:17;48.722076;9.270385;0.000;0.0926;255;255;0;0;$12.07.2020;09:03:18;48.722070;9.270391;0.000;1.4816;255;255;0;0;$12.07.2020;09:03:19;48.722070;9.270392;0.000;1.0927;255;255;0;0;$12.07.2020;09:03:20;48.722066;9.270395;0.000;1.6668;255;255;0;0;$12.07.2020;09:03:21;48.722068;9.270391;0.000;2.0742;255;255;0;0;$12.07.2020;09:03:22;48.722064;9.270396;0.000;1.6853;255;255;0;0;$12.07.2020;09:03:23;48.722060;9.270401;0.000;1.0927;255;255;0;0;$12.07.2020;09:03:24;48.722056;9.270406;0.000;0.9445;255;255;0;0;$12.07.2020;09:03:25;48.722052;9.270411;0.000;0.7964;255;255;0;0;$12.07.2020;09:03:26;48.722047;9.270416;0.000;0.6482;255;255;0;0;$12.07.2020;09:03:27;48.722042;9.270419;0.000;1.0556;255;255;0;0;$12.07.2020;09:03:28;48.722031;9.270433;0.000;2.0372;255;255;0;0;$12.07.2020;09:03:29;48.722031;9.270432;0.000;2.4261;255;255;0;0;$12.07.2020;09:03:30;48.722029;9.270433;0.000;0.8704;255;255;0;0;$12.07.2020;09:03:31;48.722029;9.270433;0.000;1.8150;255;255;0;0;$12.07.2020;09:03:32;48.722024;9.270439;0.000;1.2223;255;255;0;0;$12.07.2020;09:03:33;48.722025;9.270439;0.000;0.3889;255;255;0;0;$12.07.2020;09:03:34;48.722022;9.270440;0.000;0.3519;255;255;0;0;$12.07.2020;09:03:35;48.722020;9.270445;0.000;0.9445;255;255;0;0;$12.07.2020;09:03:36;48.722018;9.270447;0.000;0.9260;255;255;0;0;$12.07.2020;09:03:37;48.722020;9.270444;0.000;0.9075;255;255;0;0;$12.07.2020;09:03:38;48.722021;9.270443;0.000;1.9261;255;255;0;0;$12.07.2020;09:03:39;48.722018;9.270447;0.000;0.3334;255;255;0;0;$12.07.2020;09:03:40;48.722020;9.270445;0.000;0.1482;255;255;0;0;$12.07.2020;09:03:41;48.722023;9.270440;0.000;1.2594;255;255;0;0;$12.07.2020;09:03:42;48.722023;9.270442;0.000;0.5000;255;255;0;0;$12.07.2020;09:03:43;48.722025;9.270440;0.000;0.6852;220;255;0;0;$12.07.2020;09:03:44;48.722023;9.270441;0.000;0.8519;199;255;0;0;$12.07.2020;09:03:45;48.722026;9.270438;0.000;1.4075;255;255;0;0;$12.07.2020;09:03:46;48.722029;9.270436;0.000;0.5371;255;255;0;0;$12.07.2020;09:03:47;48.722028;9.270435;0.000;0.8334;97;255;0;0;$12.07.2020;09:03:48;48.722029;9.270435;0.000;0.3704;255;255;0;0;$12.07.2020;09:03:49;48.722029;9.270436;0.000;1.1112;96;255;0;0;$12.07.2020;09:03:50;48.722029;9.270435;0.000;1.8890;255;255;0;0;$12.07.2020;09:03:51;48.722034;9.270429;0.000;1.0186;255;255;0;0;$12.07.2020;09:03:52;48.721942;9.270529;128.450;5.2226;255;255;0;0;$12.07.2020;09:03:53;48.721929;9.270546;128.450;1.3520;255;255;0;0;$12.07.2020;09:03:53;48.721929;9.270546;128.450;1.3520;79;255;0;0;$12.07.2020;09:03:53;48.721929;9.270546;128.450;1.3520;178;255;0;0;$12.07.2020;09:03:53;48.721929;9.270546;128.450;1.3520;89;255;0;0;$12.07.2020;09:03:53;48.721929;9.270546;128.450;1.3520;255;255;0;0;$12.07.2020;09:03:53;48.721929;9.270546;128.450;1.3520;156;255;0;0;$12.07.2020;09:03:53;48.721929;9.270546;128.450;1.3520;255;255;0;0;$12.07.2020;09:03:53;48.721929;9.270546;128.450;1.3520;255;255;0;0;$12.07.2020;09:03:53;48.721929;9.270546;128.450;1.3520;255;255;0;0;$12.07.2020;09:03:53;48.721929;9.270546;128.450;1.3520;255;255;0;0;$12.07.2020;09:03:53;48.721929;9.270546;128.450;1.3520;168;255;0;0;$12.07.2020;09:03:53;48.721929;9.270546;128.450;1.3520;255;255;0;0;$12.07.2020;09:03:53;48.721929;9.270546;128.450;1.3520;255;181;0;0;$12.07.2020;09:03:53;48.721929;9.270546;128.450;1.3520;255;176;0;0;$12.07.2020;09:03:53;48.721929;9.270546;128.450;1.3520;255;186;0;0;$12.07.2020;09:03:53;48.721929;9.270546;128.450;1.3520;255;255;0;0;$12.07.2020;09:04:10;48.721896;9.270602;916.230;0.0556;255;255;0;0;$12.07.2020;09:04:11;48.721894;9.270609;916.230;0.0926;255;192;0;0;$12.07.2020;09:04:12;48.721892;9.270616;916.230;0.0556;255;255;0;0;$12.07.2020;09:04:13;48.721890;9.270623;916.230;0.0370;255;255;0;0;$12.07.2020;09:04:14;48.721888;9.270629;916.230;0.0926;255;255;0;0;$12.07.2020;09:04:15;48.721886;9.270635;916.230;0.0926;255;255;0;0;$12.07.2020;09:04:16;48.721883;9.270640;916.230;0.0556;255;255;0;0;$12.07.2020;09:04:17;48.721881;9.270644;916.230;0.0370;255;255;0;0;$12.07.2020;09:04:18;48.721879;9.270649;916.230;0.1111;255;255;0;0;$12.07.2020;09:04:19;48.721877;9.270653;916.230;0.1296;255;255;0;0;$12.07.2020;09:04:20;48.721876;9.270657;916.230;0.0926;255;255;0;0;$12.07.2020;09:04:21;48.721874;9.270658;916.230;0.3148;255;255;0;0;$12.07.2020;09:04:22;48.721873;9.270659;916.230;0.0370;255;255;0;0;$12.07.2020;09:04:23;48.721872;9.270661;916.230;0.0741;255;255;0;0;$12.07.2020;09:04:24;48.721871;9.270661;916.230;0.0926;255;255;0;0;$12.07.2020;09:04:25;48.721870;9.270660;916.230;0.3334;255;255;0;0;$12.07.2020;09:04:26;48.721869;9.270658;916.230;0.5000;255;255;0;0;$12.07.2020;09:04:27;48.721866;9.270660;916.230;1.6853;255;255;0;0;$12.07.2020;09:04:28;48.721866;9.270659;916.230;0.8704;255;198;0;0;$12.07.2020;09:04:29;48.721867;9.270659;916.230;0.5741;255;196;0;0;$12.07.2020;09:04:30;48.721867;9.270660;916.230;0.3148;255;196;0;0;$12.07.2020;09:04:31;48.721867;9.270659;916.230;0.1111;255;255;0;0;$12.07.2020;09:04:32;48.721866;9.270659;916.230;0.0556;255;199;0;0;$12.07.2020;09:04:33;48.721867;9.270656;916.230;0.1482;255;199;0;0;$12.07.2020;09:04:34;48.721867;9.270654;916.230;0.0370;255;198;0;0;$12.07.2020;09:04:35;48.721867;9.270653;916.230;0.1296;255;198;0;0;$12.07.2020;09:04:36;48.721867;9.270651;916.230;0.1667;255;255;0;0;$12.07.2020;09:04:37;48.721867;9.270650;916.230;0.0741;255;255;0;0;$12.07.2020;09:04:38;48.721868;9.270650;916.230;0.1852;255;255;0;0;$12.07.2020;09:04:39;48.721868;9.270649;916.230;0.1667;255;201;0;0;$12.07.2020;09:04:40;48.721868;9.270647;916.230;0.0926;255;255;0;0;$12.07.2020;09:04:41;48.721869;9.270644;916.230;0.0185;255;255;0;0;$12.07.2020;09:04:42;48.721869;9.270641;916.230;0.0185;255;198;0;0;$12.07.2020;09:04:43;48.721870;9.270638;916.230;0.0926;255;255;0;0;$12.07.2020;09:04:44;48.721870;9.270635;916.230;0.0370;255;199;0;0;$12.07.2020;09:04:45;48.721871;9.270632;916.230;0.1482;255;204;0;0;$12.07.2020;09:04:46;48.721871;9.270630;916.230;0.0185;255;201;0;0;$12.07.2020;09:04:47;48.721873;9.270630;916.230;0.0926;255;255;0;0;$12.07.2020;09:04:48;48.721873;9.270629;916.230;0.0370;255;255;0;0;$12.07.2020;09:04:49;48.721874;9.270628;916.230;0.4074;255;255;0;0;$12.07.2020;09:04:50;48.721875;9.270627;916.230;0.2222;255;255;0;0;$12.07.2020;09:04:51;48.721876;9.270625;916.230;0.1667;255;255;0;0;$12.07.2020;09:04:52;48.721877;9.270623;916.230;0.1111;255;255;0;0;$12.07.2020;09:04:53;48.721877;9.270622;916.230;0.2037;255;255;0;0;$12.07.2020;09:04:54;48.721879;9.270621;916.230;0.3148;255;255;0;0;$12.07.2020;09:04:55;48.721881;9.270618;916.230;0.2408;255;255;0;0;$12.07.2020;09:04:56;48.721883;9.270615;916.230;0.3148;255;255;0;0;$12.07.2020;09:04:57;48.721884;9.270612;916.230;0.2778;255;255;0;0;$12.07.2020;09:04:58;48.721885;9.270609;916.230;0.1296;255;255;0;0;$12.07.2020;09:04:59;48.721886;9.270606;916.230;0.0370;255;255;0;0;$12.07.2020;09:05:00;48.721888;9.270602;916.230;0.0370;255;255;0;0;$12.07.2020;09:05:01;48.721889;9.270598;916.230;0.1111;255;191;0;0;$12.07.2020;09:05:02;48.721890;9.270595;916.230;0.1482;255;193;0;0;$12.07.2020;09:05:03;48.721891;9.270593;916.230;0.0741;255;255;0;0;$12.07.2020;09:05:04;48.721891;9.270591;916.230;0.1667;255;255;0;0;$12.07.2020;09:05:05;48.721891;9.270589;916.230;0.1296;255;255;0;0;$12.07.2020;09:05:06;48.721891;9.270587;916.230;0.3519;255;199;0;0;$12.07.2020;09:05:07;48.721891;9.270586;916.230;0.2222;255;255;0;0;$12.07.2020;09:05:08;48.721891;9.270588;916.230;0.1667;255;255;0;0;$12.07.2020;09:05:09;48.721890;9.270589;916.230;0.1667;255;255;0;0;$12.07.2020;09:05:10;48.721889;9.270589;916.230;0.2222;255;255;0;0;$12.07.2020;09:05:11;48.721888;9.270589;916.230;0.1482;255;255;0;0;$12.07.2020;09:05:12;48.721887;9.270589;916.230;0.1296;255;255;0;0;$12.07.2020;09:05:13;48.721886;9.270590;916.230;0.1667;255;255;0;0;$12.07.2020;09:05:14;48.721885;9.270591;916.230;0.3148;255;255;0;0;$12.07.2020;09:05:15;48.721885;9.270592;916.230;0.2037;255;255;0;0;$12.07.2020;09:05:16;48.721885;9.270596;916.230;0.5556;255;255;0;0;$12.07.2020;09:05:17;48.721885;9.270598;916.230;0.3519;255;255;0;0;$12.07.2020;09:05:18;48.721884;9.270600;916.230;0.0370;255;255;0;0;$12.07.2020;09:05:19;48.721882;9.270600;916.230;0.1667;255;255;0;0;$12.07.2020;09:05:20;48.721881;9.270602;916.230;0.0556;255;255;0;0;$12.07.2020;09:05:21;48.721879;9.270603;916.230;0.0185;255;206;0;0;$12.07.2020;09:05:22;48.721878;9.270605;916.230;0.0556;255;203;0;0;$12.07.2020;09:05:23;48.721876;9.270606;916.230;0.0741;255;255;0;0;$12.07.2020;09:05:24;48.721874;9.270605;916.230;0.0185;255;255;0;0;$12.07.2020;09:05:25;48.721873;9.270605;916.230;0.0370;255;255;0;0;$12.07.2020;09:05:26;48.721872;9.270605;916.230;0.1296;255;209;0;0;$12.07.2020;09:05:27;48.721870;9.270606;916.230;0.0556;255;255;0;0;$12.07.2020;09:05:28;48.721869;9.270608;916.230;0.1111;255;206;0;0;$12.07.2020;09:05:29;48.721868;9.270610;916.230;0.3148;255;209;0;0;$12.07.2020;09:05:30;48.721867;9.270610;916.230;0.2593;255;208;0;0;$12.07.2020;09:05:31;48.721866;9.270611;916.230;0.0556;255;210;0;0;$12.07.2020;09:05:32;48.721866;9.270612;916.230;0.2222;255;255;0;0;$12.07.2020;09:05:32;48.721866;9.270612;916.230;0.2222;255;255;0;0;$12.07.2020;09:05:32;48.721866;9.270612;916.230;0.2222;255;255;0;0;$12.07.2020;09:05:32;48.721866;9.270612;916.230;0.2222;255;255;0;0;$12.07.2020;09:05:32;48.721866;9.270612;916.230;0.2222;255;255;0;0;$12.07.2020;09:05:32;48.721866;9.270612;916.230;0.2222;255;255;0;0;$12.07.2020;09:05:32;48.721866;9.270612;916.230;0.2222;255;255;0;0;$12.07.2020;09:05:32;48.721866;9.270612;916.230;0.2222;255;255;0;0;$12.07.2020;09:05:32;48.721866;9.270612;916.230;0.2222;255;255;0;0;$12.07.2020;09:05:32;48.721866;9.270612;916.230;0.2222;255;255;0;0;$12.07.2020;09:05:32;48.721866;9.270612;916.230;0.2222;255;255;0;0;$12.07.2020;09:05:44;48.721855;9.270602;916.230;0.2222;255;255;0;0;$12.07.2020;09:05:44;48.721855;9.270602;916.230;0.2222;255;255;0;0;$12.07.2020;09:05:46;48.721854;9.270602;916.230;0.1667;255;255;0;0;$12.07.2020;09:05:46;48.721854;9.270602;916.230;0.1667;255;255;0;0;$12.07.2020;09:05:48;48.721852;9.270606;916.230;0.0926;255;255;0;0;$12.07.2020;09:05:49;48.721851;9.270611;916.230;0.1482;255;255;0;0;$12.07.2020;09:05:50;48.721851;9.270615;916.230;0.1852;255;255;0;0;$12.07.2020;09:05:51;48.721851;9.270616;916.230;0.0185;255;255;0;0;$12.07.2020;09:05:52;48.721851;9.270617;916.230;0.0926;255;255;0;0;$12.07.2020;09:05:53;48.721852;9.270617;916.230;0.0185;255;255;0;0;$12.07.2020;09:05:54;48.721853;9.270616;916.230;0.0741;255;255;0;0;$12.07.2020;09:05:55;48.721855;9.270613;916.230;0.0556;255;255;0;0;$12.07.2020;09:05:56;48.721858;9.270609;916.230;0.6482;255;255;0;0;$12.07.2020;09:05:57;48.721860;9.270606;916.230;0.4260;255;255;0;0;$12.07.2020;09:05:58;48.721864;9.270601;916.230;0.6297;255;255;0;0;$12.07.2020;09:05:59;48.721867;9.270595;916.230;0.4260;255;255;0;0;$12.07.2020;09:06:00;48.721872;9.270589;916.230;0.5000;255;255;0;0;$12.07.2020;09:06:01;48.721875;9.270584;916.230;0.2593;255;255;0;0;$12.07.2020;09:06:02;48.721880;9.270578;916.230;0.5186;255;255;0;0;$12.07.2020;09:06:03;48.721883;9.270574;916.230;0.2222;255;255;0;0;$12.07.2020;09:06:04;48.721886;9.270570;916.230;0.1667;255;255;0;0;$12.07.2020;09:06:05;48.721890;9.270565;916.230;0.2408;255;255;0;0;$12.07.2020;09:06:06;48.721893;9.270562;916.230;0.2593;255;255;0;0;$12.07.2020;09:06:07;48.721893;9.270560;916.230;0.0926;255;255;0;0;$12.07.2020;09:06:08;48.721894;9.270559;916.230;0.0741;255;255;0;0;$12.07.2020;09:06:09;48.721894;9.270557;916.230;0.0741;255;255;0;0;$12.07.2020;09:06:07;48.721896;9.270556;916.230;0.2778;255;255;0;0;$12.07.2020;09:06:08;48.721896;9.270556;916.230;0.2408;255;255;0;0;$12.07.2020;09:06:09;48.721895;9.270557;916.230;0.0926;255;255;0;0;$12.07.2020;09:06:10;48.721894;9.270559;916.230;0.1482;255;255;0;0;$12.07.2020;09:06:11;48.721892;9.270560;916.230;0.2037;255;255;0;0;$12.07.2020;09:06:12;48.721891;9.270561;916.230;0.1296;255;255;0;0;$12.07.2020;09:06:13;48.721892;9.270562;916.230;0.1852;255;255;0;0;$12.07.2020;09:06:14;48.721891;9.270564;916.230;0.0741;255;255;0;0;$12.07.2020;09:06:15;48.721889;9.270566;916.230;0.1482;255;255;0;0;$12.07.2020;09:06:16;48.721888;9.270568;916.230;0.0370;255;255;0;0;$12.07.2020;09:06:17;48.721888;9.270570;916.230;0.2037;255;255;0;0;$12.07.2020;09:06:18;48.721888;9.270572;916.230;0.4630;255;255;0;0;$12.07.2020;09:06:19;48.721887;9.270573;916.230;0.4815;255;255;0;0;$12.07.2020;09:06:20;48.721886;9.270574;916.230;0.3334;255;255;0;0;$12.07.2020;09:06:21;48.721885;9.270576;916.230;0.1852;255;255;0;0;$12.07.2020;09:06:22;48.721884;9.270579;916.230;0.0926;255;255;0;0;$12.07.2020;09:06:23;48.721882;9.270581;916.230;0.0741;255;255;0;0;$12.07.2020;09:06:24;48.721881;9.270584;916.230;0.0741;255;255;0;0;$12.07.2020;09:06:25;48.721880;9.270589;916.230;0.2963;255;255;0;0;$12.07.2020;09:06:26;48.721879;9.270596;916.230;0.3519;255;255;0;0;$12.07.2020;09:06:27;48.721878;9.270602;916.230;0.1111;255;255;0;0;$12.07.2020;09:06:28;48.721876;9.270601;916.230;0.0926;255;255;0;0;$12.07.2020;09:06:29;48.721874;9.270603;916.230;0.0926;255;255;0;0;$12.07.2020;09:06:30;48.721873;9.270607;916.230;0.0926;255;255;0;0;$12.07.2020;09:06:31;48.721872;9.270614;916.230;0.2037;255;255;0;0;$12.07.2020;09:06:32;48.721870;9.270613;916.230;0.0370;255;255;0;0;$12.07.2020;09:06:33;48.721869;9.270614;916.230;0.0926;255;255;0;0;$12.07.2020;09:06:34;48.721868;9.270616;916.230;0.1111;255;255;0;0;$12.07.2020;09:06:35;48.721867;9.270617;916.230;0.2593;255;255;0;0;$12.07.2020;09:06:36;48.721867;9.270618;916.230;0.1852;255;255;0;0;$12.07.2020;09:06:37;48.721867;9.270618;916.230;0.1296;255;255;0;0;$12.07.2020;09:06:38;48.721867;9.270616;916.230;0.2963;255;255;0;0;$12.07.2020;09:06:39;48.721867;9.270613;916.230;0.1296;255;255;0;0;$12.07.2020;09:06:40;48.721867;9.270607;916.230;0.0185;255;255;0;0;$12.07.2020;09:06:41;48.721866;9.270601;916.230;0.5186;255;255;0;0;$12.07.2020;09:06:42;48.721866;9.270593;916.230;0.2963;255;255;0;0;$12.07.2020;09:06:43;48.721866;9.270587;916.230;0.0741;255;255;0;0;$12.07.2020;09:06:44;48.721866;9.270581;916.230;0.0370;255;255;0;0;$12.07.2020;09:06:45;48.721866;9.270576;916.230;0.0370;255;255;0;0;$12.07.2020;09:06:46;48.721866;9.270567;916.230;0.1111;255;255;0;0;$12.07.2020;09:06:47;48.721866;9.270558;916.230;0.4074;255;255;0;0;$12.07.2020;09:06:48;48.721866;9.270550;916.230;0.4260;255;255;0;0;$12.07.2020;09:06:49;48.721866;9.270543;916.230;0.0370;255;255;0;0;$12.07.2020;09:06:50;48.721867;9.270537;916.230;0.2778;255;255;0;0;$12.07.2020;09:06:51;48.721867;9.270532;916.230;0.2037;255;255;0;0;$12.07.2020;09:06:52;48.721867;9.270526;916.230;0.3148;255;255;0;0;$12.07.2020;09:06:53;48.721868;9.270522;916.230;0.0741;255;255;0;0;$12.07.2020;09:06:54;48.721868;9.270517;916.230;0.0741;255;255;0;0;$12.07.2020;09:06:55;48.721869;9.270512;916.230;0.2222;255;255;0;0;$12.07.2020;09:06:56;48.721869;9.270506;916.230;0.2408;255;255;0;0;$12.07.2020;09:06:57;48.721869;9.270503;916.230;0.1111;255;255;0;0;$12.07.2020;09:06:58;48.721870;9.270500;916.230;0.0370;255;255;0;0;$12.07.2020;09:06:59;48.721870;9.270497;916.230;0.1296;255;255;0;0;$12.07.2020;09:07:00;48.721871;9.270494;916.230;0.1296;255;255;0;0;$12.07.2020;09:07:01;48.721871;9.270493;916.230;0.1482;255;255;0;0;$12.07.2020;09:07:02;48.721871;9.270492;916.230;0.2037;255;255;0;0;$12.07.2020;09:07:03;48.721872;9.270490;916.230;0.0370;255;255;0;0;$12.07.2020;09:07:04;48.721873;9.270489;916.230;0.6667;255;255;0;0;$12.07.2020;09:07:05;48.721873;9.270487;916.230;0.0370;255;255;0;0;$12.07.2020;09:07:06;48.721873;9.270486;916.230;0.2222;255;255;0;0;$12.07.2020;09:07:07;48.721873;9.270486;916.230;0.2408;255;255;0;0;$12.07.2020;09:07:08;48.721873;9.270485;916.230;0.1852;255;255;0;0;$12.07.2020;09:07:09;48.721873;9.270485;916.230;0.2037;255;255;0;0;$12.07.2020;09:07:10;48.721872;9.270485;916.230;0.1296;255;255;0;0;$12.07.2020;09:07:11;48.721870;9.270486;916.230;0.0370;255;255;0;0;$12.07.2020;09:07:12;48.721869;9.270489;916.230;0.2037;255;255;0;0;$12.07.2020;09:07:13;48.721867;9.270492;916.230;0.3148;255;255;0;0;$12.07.2020;09:07:14;48.721865;9.270494;916.230;0.2037;255;255;0;0;$12.07.2020;09:07:15;48.721863;9.270495;916.230;0.1667;255;255;0;0;$12.07.2020;09:07:16;48.721861;9.270497;916.230;0.0000;255;255;0;0;$12.07.2020;09:07:17;48.721860;9.270496;916.230;0.4074;255;255;0;0;$12.07.2020;09:07:18;48.721859;9.270495;916.230;0.4445;255;255;0;0;$12.07.2020;09:07:19;48.721857;9.270496;916.230;0.3889;255;255;0;0;$12.07.2020;09:07:20;48.721856;9.270496;916.230;0.1667;255;255;0;0;$12.07.2020;09:07:21;48.721854;9.270494;916.230;0.7593;255;255;0;0;$12.07.2020;09:07:22;48.721851;9.270496;916.230;0.0926;255;255;0;0;$12.07.2020;09:07:23;48.721850;9.270497;916.230;0.1667;255;255;0;0;$12.07.2020;09:07:24;48.721848;9.270501;916.230;0.4074;255;255;0;0;$12.07.2020;09:07:25;48.721847;9.270504;916.230;0.4074;255;255;0;0;$12.07.2020;09:07:26;48.721846;9.270505;916.230;0.2037;255;255;0;0;$12.07.2020;09:07:27;48.721844;9.270508;916.230;0.1111;255;255;0;0;$12.07.2020;09:07:28;48.721843;9.270507;916.230;0.4630;255;255;0;0;$12.07.2020;09:07:29;48.721842;9.270509;916.230;0.1111;255;255;0;0;$12.07.2020;09:07:30;48.721841;9.270512;916.230;0.0926;255;255;0;0;$12.07.2020;09:07:31;48.721840;9.270515;916.230;0.0926;255;255;0;0;$12.07.2020;09:07:32;48.721839;9.270517;916.230;0.1482;255;255;0;0;$12.07.2020;09:07:33;48.721838;9.270522;916.230;0.0556;255;255;0;0;$12.07.2020;09:07:34;48.721838;9.270527;916.230;0.3889;255;255;0;0;$12.07.2020;09:07:35;48.721837;9.270530;916.230;0.1482;255;255;0;0;$12.07.2020;09:07:36;48.721836;9.270532;916.230;0.1111;255;255;0;0;$12.07.2020;09:07:37;48.721835;9.270536;916.230;0.6112;255;255;0;0;$12.07.2020;09:07:38;48.721835;9.270541;916.230;1.1668;255;255;0;0;$12.07.2020;09:07:39;48.721835;9.270543;916.230;0.3889;255;255;0;0;$12.07.2020;09:07:40;48.721834;9.270545;916.230;0.5000;255;255;0;0;$12.07.2020;09:07:41;48.721834;9.270544;916.230;0.1482;255;255;0;0;$12.07.2020;09:07:42;48.721834;9.270545;916.230;0.7593;255;255;0;0;$12.07.2020;09:07:43;48.721834;9.270545;916.230;0.8890;255;255;0;0;$12.07.2020;09:07:44;48.721834;9.270543;916.230;0.4260;255;255;0;0;$12.07.2020;09:07:45;48.721834;9.270541;916.230;0.2408;255;255;0;0;$12.07.2020;09:07:46;48.721834;9.270540;916.230;0.3148;255;255;0;0;$12.07.2020;09:07:47;48.721835;9.270538;916.230;0.0741;255;255;0;0;$12.07.2020;09:07:48;48.721835;9.270535;916.230;0.0556;255;255;0;0;$12.07.2020;09:07:49;48.721835;9.270534;916.230;0.8890;255;255;0;0;$12.07.2020;09:07:50;48.721835;9.270534;916.230;0.5926;255;255;0;0;$12.07.2020;09:07:51;48.721835;9.270534;916.230;0.7593;255;255;0;0;$12.07.2020;09:07:52;48.721836;9.270533;916.230;0.2408;255;255;0;0;$12.07.2020;09:07:53;48.721836;9.270531;916.230;0.0741;255;255;0;0;$12.07.2020;09:07:54;48.721836;9.270529;916.230;0.3889;255;255;0;0;$12.07.2020;09:07:55;48.721836;9.270530;916.230;0.2222;255;255;0;0;$12.07.2020;09:07:56;48.721836;9.270530;916.230;0.0185;255;255;0;0;$12.07.2020;09:07:57;48.721837;9.270531;916.230;0.0185;255;255;0;0;$12.07.2020;09:07:58;48.721837;9.270530;916.230;0.1482;255;255;0;0;$12.07.2020;09:07:59;48.721838;9.270526;916.230;0.3519;255;255;0;0;$12.07.2020;09:08:00;48.721838;9.270521;916.230;0.4260;255;255;0;0;$12.07.2020;09:08:01;48.721839;9.270522;916.230;0.5556;255;255;0;0;$12.07.2020;09:08:02;48.721840;9.270524;916.230;0.3519;255;255;0;0;$12.07.2020;09:08:03;48.721842;9.270525;916.230;0.2963;255;255;0;0;$12.07.2020;09:08:04;48.721843;9.270525;916.230;0.1482;255;255;0;0;$12.07.2020;09:08:05;48.721844;9.270524;916.230;0.2222;255;255;0;0;$12.07.2020;09:08:06;48.721846;9.270522;916.230;0.3704;255;255;0;0;$12.07.2020;09:08:07;48.721847;9.270519;916.230;0.1482;255;255;0;0;$12.07.2020;09:08:08;48.721848;9.270516;916.230;0.0926;255;255;0;0;$12.07.2020;09:08:09;48.721849;9.270514;916.230;0.1296;255;255;0;0;$12.07.2020;09:08:10;48.721850;9.270512;916.230;0.1482;255;255;0;0;$12.07.2020;09:08:11;48.721851;9.270513;916.230;0.3334;255;255;0;0;$12.07.2020;09:08:12;48.721851;9.270512;916.230;0.0926;255;255;0;0;$12.07.2020;09:08:13;48.721851;9.270512;916.230;0.2593;255;255;0;0;$12.07.2020;09:08:14;48.721852;9.270511;916.230;0.0926;255;255;0;0;$12.07.2020;09:08:15;48.721853;9.270512;916.230;0.0370;255;255;0;0;$12.07.2020;09:08:16;48.721852;9.270515;916.230;0.5371;255;255;0;0;$12.07.2020;09:08:17;48.721853;9.270517;916.230;0.1482;255;255;0;0;$12.07.2020;09:08:18;48.721854;9.270519;916.230;0.3148;255;255;0;0;$12.07.2020;09:08:19;48.721855;9.270520;916.230;0.2408;255;255;0;0;$12.07.2020;09:08:20;48.721856;9.270523;916.230;0.3704;255;255;0;0;$\"}}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:3000/api/tracks/begin", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3000", + "path": [ + "api", + "tracks", + "begin" + ] + } + }, + "response": [] + }, + { + "name": "http://localhost:3000/api/tracks/add", + "event": [ + { + "listen": "prerequest", + "script": { + "id": "d8c21705-813e-4fd8-9c99-34c0bb918a70", + "exec": [ + "pm.environment.set(\"UserId\", \"your-user-id\");" + ], + "type": "text/javascript" + } + } + ], + "protocolProfileBehavior": { + "disabledSystemHeaders": {} + }, + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\"id\": \"{{UserId}}\",\"track\":{\"title\":\"AutoUpload55lp\",\"description\":\"created by an esp32testp\",\"body\":\"Date;Time;Latitude;Longitude;Course;Speed;Right;Left;Confirmed;insidePrivacyArea;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:09:37;48.721866;9.270608;916.230;0.0741;255;255;0;0;$12.07.2020;09:10:46;48.721852;9.270668;132.000;1.3705;255;255;0;0;$12.07.2020;09:10:47;48.721853;9.270668;132.000;0.2593;255;255;0;0;$12.07.2020;09:10:48;48.721852;9.270668;132.000;0.2222;255;255;0;0;$12.07.2020;09:10:49;48.721851;9.270670;132.000;0.3519;255;255;0;0;$12.07.2020;09:10:50;48.721849;9.270672;132.000;0.2037;255;255;0;0;$12.07.2020;09:10:51;48.721848;9.270675;132.000;0.0185;255;255;0;0;$12.07.2020;09:10:52;48.721848;9.270677;132.000;0.0926;255;255;0;0;$12.07.2020;09:10:53;48.721847;9.270679;132.000;0.0185;255;255;0;0;$12.07.2020;09:10:54;48.721845;9.270681;132.000;0.0370;255;255;0;0;$12.07.2020;09:10:55;48.721844;9.270682;132.000;0.1296;255;255;0;0;$12.07.2020;09:10:56;48.721843;9.270683;132.000;0.1296;255;255;0;0;$12.07.2020;09:10:57;48.721842;9.270685;132.000;0.0370;255;255;0;0;$12.07.2020;09:10:58;48.721841;9.270685;132.000;0.4630;255;255;0;0;$12.07.2020;09:10:59;48.721840;9.270685;132.000;0.1111;255;255;0;0;$12.07.2020;09:11:00;48.721839;9.270685;132.000;0.2037;255;255;0;0;$12.07.2020;09:11:01;48.721838;9.270685;132.000;0.1667;255;255;0;0;$12.07.2020;09:11:02;48.721837;9.270688;132.000;0.4630;255;255;0;0;$12.07.2020;09:11:03;48.721836;9.270691;132.000;0.3889;255;255;0;0;$12.07.2020;09:11:04;48.721836;9.270691;132.000;0.2222;255;255;0;0;$12.07.2020;09:11:05;48.721835;9.270692;132.000;0.1667;255;255;0;0;$12.07.2020;09:11:06;48.721835;9.270693;132.000;0.2408;255;255;0;0;$12.07.2020;09:11:07;48.721834;9.270694;132.000;0.0741;255;255;0;0;$12.07.2020;09:11:08;48.721834;9.270695;132.000;0.0556;255;255;0;0;$12.07.2020;09:11:09;48.721834;9.270696;132.000;0.2408;255;255;0;0;$12.07.2020;09:11:10;48.721834;9.270695;132.000;0.1111;255;255;0;0;$12.07.2020;09:11:11;48.721834;9.270693;132.000;0.3148;255;255;0;0;$12.07.2020;09:11:12;48.721834;9.270692;132.000;0.0556;255;255;0;0;$12.07.2020;09:11:13;48.721834;9.270691;132.000;0.0556;255;255;0;0;$12.07.2020;09:11:14;48.721834;9.270688;132.000;0.2408;255;255;0;0;$12.07.2020;09:11:15;48.721834;9.270683;132.000;1.0371;255;255;0;0;$12.07.2020;09:11:16;48.721835;9.270682;132.000;0.0370;255;255;0;0;$12.07.2020;09:11:17;48.721835;9.270682;132.000;0.2408;255;255;0;0;$12.07.2020;09:11:18;48.721836;9.270682;132.000;0.0370;255;255;0;0;$12.07.2020;09:11:19;48.721836;9.270680;132.000;0.2778;255;255;0;0;$12.07.2020;09:11:20;48.721837;9.270679;132.000;0.0741;255;255;0;0;$12.07.2020;09:11:21;48.721838;9.270680;132.000;0.3704;255;255;0;0;$12.07.2020;09:11:22;48.721839;9.270679;132.000;0.1852;255;255;0;0;$12.07.2020;09:11:23;48.721839;9.270677;132.000;0.1667;255;255;0;0;$12.07.2020;09:11:24;48.721840;9.270675;132.000;0.4260;255;255;0;0;$12.07.2020;09:11:25;48.721841;9.270674;132.000;0.1296;255;255;0;0;$12.07.2020;09:11:26;48.721842;9.270674;132.000;0.2963;255;255;0;0;$12.07.2020;09:11:27;48.721843;9.270672;132.000;0.0926;255;255;0;0;$12.07.2020;09:11:28;48.721844;9.270671;132.000;0.2222;255;255;0;0;$12.07.2020;09:11:29;48.721845;9.270668;132.000;0.1482;255;255;0;0;$12.07.2020;09:11:30;48.721846;9.270665;132.000;0.3334;255;255;0;0;$12.07.2020;09:11:31;48.721847;9.270666;132.000;0.3148;255;255;0;0;$12.07.2020;09:11:32;48.721848;9.270664;132.000;0.4260;255;255;0;0;$12.07.2020;09:11:33;48.721849;9.270662;132.000;0.5741;255;255;0;0;$12.07.2020;09:11:34;48.721850;9.270661;132.000;0.1852;255;255;0;0;$12.07.2020;09:11:35;48.721851;9.270664;132.000;0.5000;255;255;0;0;$12.07.2020;09:11:36;48.721853;9.270666;132.000;0.3148;255;255;0;0;$12.07.2020;09:11:37;48.721854;9.270667;132.000;0.2037;255;255;0;0;$12.07.2020;09:11:38;48.721856;9.270665;132.000;0.2222;255;255;0;0;$12.07.2020;09:11:39;48.721857;9.270662;132.000;0.0741;255;255;0;0;$12.07.2020;09:11:40;48.721860;9.270659;132.000;0.0185;255;255;0;0;$12.07.2020;09:11:41;48.721861;9.270656;132.000;0.3148;255;255;0;0;$12.07.2020;09:11:42;48.721862;9.270654;132.000;0.2222;255;255;0;0;$12.07.2020;09:11:43;48.721864;9.270653;132.000;0.0556;255;255;0;0;$12.07.2020;09:11:44;48.721865;9.270652;132.000;0.1296;255;255;0;0;$12.07.2020;09:11:45;48.721866;9.270649;132.000;0.4260;255;255;0;0;$12.07.2020;09:11:46;48.721868;9.270649;132.000;0.2037;255;255;0;0;$12.07.2020;09:11:47;48.721869;9.270649;132.000;0.0185;255;255;0;0;$12.07.2020;09:11:48;48.721870;9.270649;132.000;0.2778;255;255;0;0;$12.07.2020;09:11:49;48.721871;9.270649;132.000;0.1296;255;255;0;0;$12.07.2020;09:11:50;48.721872;9.270649;132.000;0.2778;255;255;0;0;$12.07.2020;09:11:51;48.721873;9.270651;132.000;0.1667;255;255;0;0;$12.07.2020;09:11:52;48.721874;9.270652;132.000;0.2408;255;255;0;0;$12.07.2020;09:11:53;48.721875;9.270653;132.000;0.0741;255;255;0;0;$12.07.2020;09:11:54;48.721876;9.270654;132.000;0.1667;255;255;0;0;$12.07.2020;09:11:55;48.721877;9.270655;132.000;0.1852;255;255;0;0;$12.07.2020;09:11:56;48.721877;9.270655;132.000;0.1667;255;255;0;0;$12.07.2020;09:11:57;48.721878;9.270656;132.000;0.5000;255;255;0;0;$12.07.2020;09:11:58;48.721878;9.270657;132.000;0.1852;255;255;0;0;$12.07.2020;09:11:59;48.721879;9.270657;132.000;0.0741;255;255;0;0;$12.07.2020;09:12:00;48.721879;9.270655;132.000;0.1482;255;255;0;0;$12.07.2020;09:12:01;48.721880;9.270654;132.000;0.2222;255;255;0;0;$12.07.2020;09:12:02;48.721880;9.270651;132.000;1.1297;255;255;0;0;$12.07.2020;09:12:03;48.721880;9.270647;132.000;1.0186;255;255;0;0;$12.07.2020;09:12:04;48.721880;9.270645;132.000;0.3334;255;255;0;0;$12.07.2020;09:12:05;48.721880;9.270645;132.000;0.3889;255;255;0;0;$12.07.2020;09:12:06;48.721879;9.270658;132.000;0.2037;255;255;0;0;$12.07.2020;09:12:07;48.721878;9.270657;132.000;0.2593;255;255;0;0;$12.07.2020;09:12:08;48.721875;9.270670;132.000;0.2778;255;255;0;0;$12.07.2020;09:12:09;48.721873;9.270685;132.000;0.2222;255;255;0;0;$12.07.2020;09:12:10;48.721871;9.270700;132.000;0.1296;255;255;0;0;$12.07.2020;09:12:11;48.721870;9.270700;132.000;0.0370;255;255;0;0;$12.07.2020;09:12:12;48.721867;9.270707;132.000;0.2963;255;255;0;0;$12.07.2020;09:12:13;48.721866;9.270716;132.000;0.3704;255;255;0;0;$12.07.2020;09:12:14;48.721865;9.270724;132.000;0.1296;255;255;0;0;$12.07.2020;09:12:15;48.721863;9.270733;132.000;0.1482;255;255;0;0;$12.07.2020;09:12:16;48.721862;9.270744;132.000;0.0370;255;255;0;0;$12.07.2020;09:12:17;48.721861;9.270756;132.000;0.2963;255;255;0;0;$12.07.2020;09:12:18;48.721860;9.270767;132.000;0.2222;255;255;0;0;$12.07.2020;09:12:19;48.721860;9.270777;132.000;0.1111;255;255;0;0;$12.07.2020;09:12:20;48.721859;9.270786;132.000;0.1111;255;255;0;0;$12.07.2020;09:12:21;48.721859;9.270794;132.000;0.2778;255;255;0;0;$12.07.2020;09:12:22;48.721859;9.270802;132.000;0.1482;255;255;0;0;$12.07.2020;09:12:23;48.721860;9.270810;132.000;0.0556;255;255;0;0;$12.07.2020;09:12:24;48.721860;9.270815;132.000;0.1852;255;255;0;0;$12.07.2020;09:12:25;48.721861;9.270820;132.000;0.0926;255;255;0;0;$12.07.2020;09:12:26;48.721862;9.270826;132.000;0.0370;255;255;0;0;$12.07.2020;09:12:27;48.721863;9.270832;132.000;0.2222;255;255;0;0;$12.07.2020;09:12:28;48.721863;9.270838;132.000;0.0000;255;255;0;0;$12.07.2020;09:12:29;48.721864;9.270843;132.000;0.0370;255;255;0;0;$12.07.2020;09:12:30;48.721864;9.270851;132.000;0.0741;255;255;0;0;$12.07.2020;09:12:31;48.721864;9.270857;132.000;0.1852;255;255;0;0;$12.07.2020;09:12:32;48.721864;9.270864;132.000;0.1482;255;255;0;0;$12.07.2020;09:12:33;48.721864;9.270870;132.000;0.1296;255;255;0;0;$12.07.2020;09:12:34;48.721864;9.270878;132.000;0.0556;255;255;0;0;$12.07.2020;09:12:35;48.721865;9.270886;132.000;0.2222;255;255;0;0;$12.07.2020;09:12:36;48.721865;9.270896;132.000;0.4260;255;255;0;0;$12.07.2020;09:12:37;48.721865;9.270904;132.000;0.0926;255;255;0;0;$12.07.2020;09:12:38;48.721866;9.270901;132.000;0.1852;255;255;0;0;$12.07.2020;09:12:39;48.721866;9.270902;132.000;0.0556;255;255;0;0;$12.07.2020;09:12:40;48.721867;9.270904;132.000;0.3148;255;255;0;0;$12.07.2020;09:12:41;48.721867;9.270909;132.000;0.4074;255;255;0;0;$12.07.2020;09:12:42;48.721867;9.270917;132.000;0.2037;255;255;0;0;$12.07.2020;09:12:43;48.721867;9.270926;132.000;0.0185;255;255;0;0;$12.07.2020;09:12:44;48.721868;9.270921;132.000;0.1482;255;255;0;0;$12.07.2020;09:12:45;48.721869;9.270921;132.000;0.3889;255;255;0;0;$12.07.2020;09:12:46;48.721869;9.270922;132.000;0.1111;255;255;0;0;$12.07.2020;09:12:47;48.721870;9.270925;132.000;0.0741;255;255;0;0;$12.07.2020;09:12:48;48.721870;9.270932;132.000;0.3148;255;255;0;0;$12.07.2020;09:12:49;48.721871;9.270941;132.000;0.2963;255;255;0;0;$12.07.2020;09:12:50;48.721871;9.270948;132.000;0.1296;255;255;0;0;$12.07.2020;09:12:51;48.721872;9.270956;132.000;0.1111;255;255;0;0;$12.07.2020;09:12:52;48.721872;9.270965;132.000;0.0741;255;255;0;0;$12.07.2020;09:12:53;48.721872;9.270971;132.000;0.0741;255;255;0;0;$12.07.2020;09:12:54;48.721873;9.270975;132.000;0.0556;255;255;0;0;$12.07.2020;09:12:55;48.721873;9.270978;132.000;0.0926;255;255;0;0;$12.07.2020;09:12:56;48.721873;9.270981;132.000;0.3334;255;255;0;0;$12.07.2020;09:12:57;48.721873;9.270983;132.000;0.0926;255;255;0;0;$12.07.2020;09:12:58;48.721873;9.270984;132.000;0.0741;255;255;0;0;$12.07.2020;09:12:59;48.721873;9.270985;132.000;0.0185;255;255;0;0;$12.07.2020;09:13:00;48.721872;9.270984;132.000;0.2593;255;255;0;0;$12.07.2020;09:13:01;48.721871;9.270981;132.000;0.2222;255;255;0;0;$12.07.2020;09:13:02;48.721870;9.270980;132.000;0.0741;255;255;0;0;$12.07.2020;09:13:03;48.721869;9.270977;132.000;0.0556;255;255;0;0;$12.07.2020;09:13:04;48.721868;9.270976;132.000;0.2593;255;255;0;0;$12.07.2020;09:13:05;48.721867;9.270973;132.000;0.4815;255;255;0;0;$12.07.2020;09:13:06;48.721866;9.270970;132.000;0.1482;255;255;0;0;$12.07.2020;09:13:07;48.721865;9.270966;132.000;0.2778;255;255;0;0;$12.07.2020;09:13:08;48.721864;9.270964;132.000;0.0556;255;255;0;0;$12.07.2020;09:13:09;48.721863;9.270962;132.000;0.1667;255;255;0;0;$12.07.2020;09:13:10;48.721863;9.270960;132.000;0.0370;255;255;0;0;$12.07.2020;09:13:11;48.721862;9.270958;132.000;0.0741;255;255;0;0;$12.07.2020;09:13:12;48.721861;9.270958;132.000;0.1482;255;255;0;0;$12.07.2020;09:13:13;48.721860;9.270960;132.000;0.0556;255;255;0;0;$12.07.2020;09:13:14;48.721860;9.270961;132.000;0.3148;255;255;0;0;$12.07.2020;09:13:15;48.721860;9.270959;132.000;0.3889;255;255;0;0;$12.07.2020;09:13:16;48.721861;9.270956;132.000;0.2037;255;255;0;0;$12.07.2020;09:13:17;48.721861;9.270958;132.000;0.3704;255;255;0;0;$12.07.2020;09:13:18;48.721861;9.270959;132.000;0.4630;255;255;0;0;$12.07.2020;09:13:19;48.721861;9.270960;132.000;0.2593;255;255;0;0;$12.07.2020;09:13:20;48.721861;9.270962;132.000;0.1667;255;255;0;0;$12.07.2020;09:13:21;48.721860;9.270966;132.000;0.1111;255;255;0;0;$12.07.2020;09:13:22;48.721860;9.270970;132.000;0.1111;255;255;0;0;$12.07.2020;09:13:23;48.721859;9.270972;132.000;0.1296;255;255;0;0;$12.07.2020;09:13:24;48.721858;9.270978;132.000;0.1667;255;89;0;0;$12.07.2020;09:13:25;48.721856;9.270984;132.000;0.1111;255;255;0;0;$12.07.2020;09:13:26;48.721853;9.270990;132.000;0.2778;255;255;0;0;$12.07.2020;09:13:27;48.721851;9.270998;132.000;0.2963;255;255;0;0;$12.07.2020;09:13:28;48.721848;9.271003;132.000;0.2037;255;255;0;0;$12.07.2020;09:13:29;48.721845;9.271010;132.000;0.2778;255;255;0;0;$12.07.2020;09:13:30;48.721842;9.271017;132.000;0.3519;255;255;0;0;$12.07.2020;09:13:31;48.721842;9.271023;132.000;0.2037;255;255;0;0;$12.07.2020;09:13:32;48.721841;9.271026;132.000;0.1482;255;255;0;0;$12.07.2020;09:13:33;48.721839;9.271029;132.000;0.2963;255;255;0;0;$12.07.2020;09:13:34;48.721837;9.271032;132.000;0.1296;255;255;0;0;$12.07.2020;09:13:35;48.721837;9.271035;132.000;0.1296;255;255;0;0;$12.07.2020;09:13:36;48.721836;9.271039;132.000;0.2593;255;255;0;0;$12.07.2020;09:13:38;48.721836;9.271042;132.000;0.1482;255;255;0;0;$12.07.2020;09:13:38;48.721836;9.271042;132.000;0.1482;255;255;0;0;$12.07.2020;09:13:38;48.721836;9.271042;132.000;0.1482;255;255;0;0;$12.07.2020;09:13:38;48.721836;9.271042;132.000;0.1482;255;255;0;0;$12.07.2020;09:13:38;48.721836;9.271042;132.000;0.1482;255;255;0;0;$12.07.2020;09:13:38;48.721836;9.271042;132.000;0.1482;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$\"}}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:3000/api/tracks/add", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3000", + "path": [ + "api", + "tracks", + "add" + ] + } + }, + "response": [] + }, + { + "name": "http://localhost:3000/api/tracks/end", + "event": [ + { + "listen": "prerequest", + "script": { + "id": "8768f80c-adcc-41a8-9e08-e046e7b032ba", + "exec": [ + "pm.environment.set(\"UserId\", \"your-user-id\");" + ], + "type": "text/javascript" + } + } + ], + "protocolProfileBehavior": { + "disabledSystemHeaders": {} + }, + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\"id\": \"{{UserId}}\",\"track\":{\"title\":\"AutoUpload55lp\",\"description\":\"created by an esp32testp\",\"body\":\"Date;Time;Latitude;Longitude;Course;Speed;Right;Left;Confirmed;insidePrivacyArea;$12.07.2020;09:12:27;48.721863;9.270832;132.000;0.2222;255;255;0;0;$12.07.2020;09:12:28;48.721863;9.270838;132.000;0.0000;255;255;0;0;$12.07.2020;09:12:29;48.721864;9.270843;132.000;0.0370;255;255;0;0;$12.07.2020;09:12:30;48.721864;9.270851;132.000;0.0741;255;255;0;0;$12.07.2020;09:12:31;48.721864;9.270857;132.000;0.1852;255;255;0;0;$12.07.2020;09:12:32;48.721864;9.270864;132.000;0.1482;255;255;0;0;$12.07.2020;09:12:33;48.721864;9.270870;132.000;0.1296;255;255;0;0;$12.07.2020;09:12:34;48.721864;9.270878;132.000;0.0556;255;255;0;0;$12.07.2020;09:12:35;48.721865;9.270886;132.000;0.2222;255;255;0;0;$12.07.2020;09:12:36;48.721865;9.270896;132.000;0.4260;255;255;0;0;$12.07.2020;09:12:37;48.721865;9.270904;132.000;0.0926;255;255;0;0;$12.07.2020;09:12:38;48.721866;9.270901;132.000;0.1852;255;255;0;0;$12.07.2020;09:12:39;48.721866;9.270902;132.000;0.0556;255;255;0;0;$12.07.2020;09:12:40;48.721867;9.270904;132.000;0.3148;255;255;0;0;$12.07.2020;09:12:41;48.721867;9.270909;132.000;0.4074;255;255;0;0;$12.07.2020;09:12:42;48.721867;9.270917;132.000;0.2037;255;255;0;0;$12.07.2020;09:12:43;48.721867;9.270926;132.000;0.0185;255;255;0;0;$12.07.2020;09:12:44;48.721868;9.270921;132.000;0.1482;255;255;0;0;$12.07.2020;09:12:45;48.721869;9.270921;132.000;0.3889;255;255;0;0;$12.07.2020;09:12:46;48.721869;9.270922;132.000;0.1111;255;255;0;0;$12.07.2020;09:12:47;48.721870;9.270925;132.000;0.0741;255;255;0;0;$12.07.2020;09:12:48;48.721870;9.270932;132.000;0.3148;255;255;0;0;$12.07.2020;09:12:49;48.721871;9.270941;132.000;0.2963;255;255;0;0;$12.07.2020;09:12:50;48.721871;9.270948;132.000;0.1296;255;255;0;0;$12.07.2020;09:12:51;48.721872;9.270956;132.000;0.1111;255;255;0;0;$12.07.2020;09:12:52;48.721872;9.270965;132.000;0.0741;255;255;0;0;$12.07.2020;09:12:53;48.721872;9.270971;132.000;0.0741;255;255;0;0;$12.07.2020;09:12:54;48.721873;9.270975;132.000;0.0556;255;255;0;0;$12.07.2020;09:12:55;48.721873;9.270978;132.000;0.0926;255;255;0;0;$12.07.2020;09:12:56;48.721873;9.270981;132.000;0.3334;255;255;0;0;$12.07.2020;09:12:57;48.721873;9.270983;132.000;0.0926;255;255;0;0;$12.07.2020;09:12:58;48.721873;9.270984;132.000;0.0741;255;255;0;0;$12.07.2020;09:12:59;48.721873;9.270985;132.000;0.0185;255;255;0;0;$12.07.2020;09:13:00;48.721872;9.270984;132.000;0.2593;255;255;0;0;$12.07.2020;09:13:01;48.721871;9.270981;132.000;0.2222;255;255;0;0;$12.07.2020;09:13:02;48.721870;9.270980;132.000;0.0741;255;255;0;0;$12.07.2020;09:13:03;48.721869;9.270977;132.000;0.0556;255;255;0;0;$12.07.2020;09:13:04;48.721868;9.270976;132.000;0.2593;255;255;0;0;$12.07.2020;09:13:05;48.721867;9.270973;132.000;0.4815;255;255;0;0;$12.07.2020;09:13:06;48.721866;9.270970;132.000;0.1482;255;255;0;0;$12.07.2020;09:13:07;48.721865;9.270966;132.000;0.2778;255;255;0;0;$12.07.2020;09:13:08;48.721864;9.270964;132.000;0.0556;255;255;0;0;$12.07.2020;09:13:09;48.721863;9.270962;132.000;0.1667;255;255;0;0;$12.07.2020;09:13:10;48.721863;9.270960;132.000;0.0370;255;255;0;0;$12.07.2020;09:13:11;48.721862;9.270958;132.000;0.0741;255;255;0;0;$12.07.2020;09:13:12;48.721861;9.270958;132.000;0.1482;255;255;0;0;$12.07.2020;09:13:13;48.721860;9.270960;132.000;0.0556;255;255;0;0;$12.07.2020;09:13:14;48.721860;9.270961;132.000;0.3148;255;255;0;0;$12.07.2020;09:13:15;48.721860;9.270959;132.000;0.3889;255;255;0;0;$12.07.2020;09:13:16;48.721861;9.270956;132.000;0.2037;255;255;0;0;$12.07.2020;09:13:17;48.721861;9.270958;132.000;0.3704;255;255;0;0;$12.07.2020;09:13:18;48.721861;9.270959;132.000;0.4630;255;255;0;0;$12.07.2020;09:13:19;48.721861;9.270960;132.000;0.2593;255;255;0;0;$12.07.2020;09:13:20;48.721861;9.270962;132.000;0.1667;255;255;0;0;$12.07.2020;09:13:21;48.721860;9.270966;132.000;0.1111;255;255;0;0;$12.07.2020;09:13:22;48.721860;9.270970;132.000;0.1111;255;255;0;0;$12.07.2020;09:13:23;48.721859;9.270972;132.000;0.1296;255;255;0;0;$12.07.2020;09:13:24;48.721858;9.270978;132.000;0.1667;255;89;0;0;$12.07.2020;09:13:25;48.721856;9.270984;132.000;0.1111;255;255;0;0;$12.07.2020;09:13:26;48.721853;9.270990;132.000;0.2778;255;255;0;0;$12.07.2020;09:13:27;48.721851;9.270998;132.000;0.2963;255;255;0;0;$12.07.2020;09:13:28;48.721848;9.271003;132.000;0.2037;255;255;0;0;$12.07.2020;09:13:29;48.721845;9.271010;132.000;0.2778;255;255;0;0;$12.07.2020;09:13:30;48.721842;9.271017;132.000;0.3519;255;255;0;0;$12.07.2020;09:13:31;48.721842;9.271023;132.000;0.2037;255;255;0;0;$12.07.2020;09:13:32;48.721841;9.271026;132.000;0.1482;255;255;0;0;$12.07.2020;09:13:33;48.721839;9.271029;132.000;0.2963;255;255;0;0;$12.07.2020;09:13:34;48.721837;9.271032;132.000;0.1296;255;255;0;0;$12.07.2020;09:13:35;48.721837;9.271035;132.000;0.1296;255;255;0;0;$12.07.2020;09:13:36;48.721836;9.271039;132.000;0.2593;255;255;0;0;$12.07.2020;09:13:38;48.721836;9.271042;132.000;0.1482;255;255;0;0;$12.07.2020;09:13:38;48.721836;9.271042;132.000;0.1482;255;255;0;0;$12.07.2020;09:13:38;48.721836;9.271042;132.000;0.1482;255;255;0;0;$12.07.2020;09:13:38;48.721836;9.271042;132.000;0.1482;255;255;0;0;$12.07.2020;09:13:38;48.721836;9.271042;132.000;0.1482;255;255;0;0;$12.07.2020;09:13:38;48.721836;9.271042;132.000;0.1482;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;162;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:13:43;48.721840;9.271041;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:14:35;48.721860;9.270939;132.000;0.0926;255;255;0;0;$12.07.2020;09:15:05;48.721864;9.270883;132.000;0.2037;255;152;0;0;$12.07.2020;09:15:06;48.721864;9.270886;132.000;0.0556;255;255;0;0;$12.07.2020;09:15:07;48.721864;9.270889;132.000;0.0556;255;255;0;0;$12.07.2020;09:15:08;48.721865;9.270892;132.000;0.1667;255;255;0;0;$12.07.2020;09:15:09;48.721865;9.270894;132.000;0.2963;255;255;0;0;$12.07.2020;09:15:10;48.721865;9.270896;132.000;0.0556;255;255;0;0;$12.07.2020;09:15:11;48.721865;9.270899;132.000;0.1667;255;255;0;0;$12.07.2020;09:15:12;48.721864;9.270902;132.000;0.1296;255;255;0;0;$12.07.2020;09:15:13;48.721863;9.270904;132.000;0.2963;255;255;0;0;$12.07.2020;09:15:14;48.721862;9.270906;132.000;0.0926;255;255;0;0;$12.07.2020;09:15:15;48.721861;9.270908;132.000;0.0556;255;255;0;0;$12.07.2020;09:15:16;48.721860;9.270909;132.000;0.0926;255;255;0;0;$12.07.2020;09:15:17;48.721858;9.270911;132.000;0.2778;255;255;0;0;$12.07.2020;09:15:18;48.721857;9.270913;132.000;0.2963;255;255;0;0;$12.07.2020;09:15:19;48.721855;9.270914;132.000;0.0370;255;255;0;0;$12.07.2020;09:15:20;48.721854;9.270916;132.000;0.0370;255;255;0;0;$12.07.2020;09:15:21;48.721854;9.270918;132.000;0.0926;255;255;0;0;$12.07.2020;09:15:22;48.721853;9.270920;132.000;0.2222;255;38;0;0;$12.07.2020;09:15:23;48.721852;9.270919;132.000;0.1111;255;93;0;0;$12.07.2020;09:15:24;48.721851;9.270918;132.000;0.0926;255;255;0;0;$12.07.2020;09:15:25;48.721850;9.270918;132.000;0.1111;255;255;0;0;$12.07.2020;09:15:26;48.721847;9.270921;119.560;2.1668;255;255;0;0;$12.07.2020;09:15:27;48.721845;9.270932;116.220;2.0372;255;255;0;0;$12.07.2020;09:15:28;48.721844;9.270937;116.220;1.0927;255;255;0;0;$12.07.2020;09:15:29;48.721843;9.270927;116.220;0.1667;255;255;0;0;$12.07.2020;09:15:30;48.721843;9.270925;116.220;0.7778;255;14;0;0;$12.07.2020;09:15:31;48.721842;9.270921;116.220;0.7223;255;9;0;0;$12.07.2020;09:15:32;48.721842;9.270917;116.220;0.5556;255;255;0;0;$12.07.2020;09:15:33;48.721840;9.270910;116.220;0.6852;255;255;0;0;$12.07.2020;09:15:34;48.721841;9.270915;116.220;0.5371;255;255;0;0;$12.07.2020;09:15:35;48.721841;9.270914;116.220;0.2593;255;185;0;0;$12.07.2020;09:15:36;48.721838;9.270913;116.220;0.5371;255;156;0;0;$12.07.2020;09:15:37;48.721840;9.270920;116.220;1.0556;255;142;0;0;$12.07.2020;09:15:38;48.721843;9.270925;116.220;2.3706;255;255;0;0;$12.07.2020;09:15:39;48.721849;9.270931;116.220;3.6299;255;159;0;0;$12.07.2020;09:15:40;48.721849;9.270941;116.220;2.8521;255;158;0;0;$12.07.2020;09:15:41;48.721851;9.270952;116.220;2.2594;255;255;0;0;$12.07.2020;09:15:42;48.721858;9.270963;116.220;4.1300;255;174;0;0;$12.07.2020;09:15:43;48.721862;9.270980;59.160;5.1115;255;255;0;0;$12.07.2020;09:15:44;48.721871;9.271001;59.160;4.9448;255;148;0;0;$12.07.2020;09:15:45;48.721885;9.271013;30.100;6.9265;255;255;0;0;$12.07.2020;09:15:46;48.721904;9.271026;11.970;9.1674;255;187;0;0;$12.07.2020;09:15:47;48.721924;9.271036;358.890;10.4823;255;255;0;0;$12.07.2020;09:15:48;48.721942;9.271056;0.110;8.0192;255;255;0;0;$12.07.2020;09:15:49;48.721961;9.271073;11.210;10.7786;255;255;0;0;$12.07.2020;09:15:50;48.721978;9.271096;13.320;6.9080;255;255;0;0;$12.07.2020;09:15:51;48.721987;9.271125;32.040;7.0376;255;255;0;0;$12.07.2020;09:15:52;48.721993;9.271084;351.590;5.7412;255;255;0;0;$12.07.2020;09:15:53;48.721998;9.271031;314.110;7.7043;255;255;0;0;$12.07.2020;09:15:54;48.721979;9.270941;314.110;5.0745;255;255;0;0;$12.07.2020;09:15:55;48.721976;9.270909;296.590;5.6116;255;255;0;0;$12.07.2020;09:15:56;48.721956;9.270884;234.640;9.7786;255;255;0;0;$12.07.2020;09:15:57;48.721929;9.270871;217.460;10.5194;255;255;0;0;$12.07.2020;09:15:58;48.721889;9.270866;193.600;13.7233;255;255;0;0;$12.07.2020;09:15:59;48.721847;9.270853;188.040;14.4456;255;255;0;0;$12.07.2020;09:16:00;48.721793;9.270868;176.540;16.9828;255;255;0;0;$12.07.2020;09:16:01;48.721765;9.270872;177.820;10.9083;255;255;0;0;$12.07.2020;09:16:02;48.721746;9.270891;169.270;7.4265;255;89;0;0;$12.07.2020;09:16:03;48.721758;9.270935;115.650;8.0932;255;87;0;0;$12.07.2020;09:16:04;48.721782;9.270988;36.690;9.3156;255;255;0;0;$12.07.2020;09:16:05;48.721787;9.271013;36.690;3.1669;255;255;0;0;$12.07.2020;09:16:06;48.721794;9.271021;36.690;4.2966;255;129;0;0;$12.07.2020;09:16:07;48.721838;9.270993;13.090;7.0191;255;255;0;0;$12.07.2020;09:16:08;48.721873;9.270955;13.090;3.9448;255;255;0;0;$12.07.2020;09:16:09;48.721869;9.270996;72.540;10.1675;255;255;0;0;$12.07.2020;09:16:10;48.721852;9.271041;98.530;10.8712;255;255;0;0;$12.07.2020;09:16:11;48.721858;9.271085;93.810;9.7786;255;255;0;0;$12.07.2020;09:16:12;48.721854;9.271110;94.780;6.4450;255;255;0;0;$12.07.2020;09:16:13;48.721827;9.271121;123.810;6.0190;255;255;0;0;$12.07.2020;09:16:14;48.721801;9.271121;151.890;7.0561;255;255;0;0;$12.07.2020;09:16:15;48.721754;9.271124;173.890;11.5750;255;255;0;0;$12.07.2020;09:16:16;48.721698;9.271139;177.120;14.7234;255;255;0;0;$12.07.2020;09:16:17;48.721625;9.271156;178.070;19.2793;255;255;0;0;$12.07.2020;09:16:18;48.721555;9.271212;170.700;21.1684;255;255;0;0;$12.07.2020;09:16:19;48.721470;9.271257;167.790;23.7982;255;255;0;0;$12.07.2020;09:16:20;48.721388;9.271275;168.400;25.6687;255;255;0;0;$12.07.2020;09:16:21;48.721313;9.271269;174.140;25.4094;255;255;0;0;$12.07.2020;09:16:22;48.721249;9.271233;183.090;23.6130;255;255;0;0;$12.07.2020;09:16:23;48.721221;9.271200;183.090;23.6130;255;255;0;0;$12.07.2020;09:16:24;48.721212;9.271196;183.090;23.6130;255;255;0;0;$12.07.2020;09:16:25;48.721201;9.271216;183.090;23.6130;255;255;0;0;$12.07.2020;09:16:25;48.721201;9.271216;183.090;23.6130;255;255;0;0;$12.07.2020;09:16:25;48.721201;9.271216;183.090;23.6130;255;255;0;0;$12.07.2020;09:16:25;48.721201;9.271216;183.090;23.6130;255;255;0;0;$12.07.2020;09:16:29;48.721159;9.271218;183.090;23.6130;255;198;0;0;$12.07.2020;09:16:30;48.721146;9.271202;183.090;23.6130;255;167;0;0;$12.07.2020;09:16:30;48.721146;9.271202;183.090;23.6130;255;255;0;0;$12.07.2020;09:16:32;48.721051;9.271244;183.090;23.6130;255;255;0;0;$12.07.2020;09:16:34;48.720942;9.271215;183.090;23.6130;255;83;0;0;$12.07.2020;09:16:34;48.720942;9.271215;183.090;23.6130;255;79;0;0;$12.07.2020;09:16:34;48.720942;9.271215;183.090;23.6130;255;255;0;0;$12.07.2020;09:16:34;48.720942;9.271215;183.090;23.6130;255;255;0;0;$12.07.2020;09:16:34;48.720942;9.271215;183.090;23.6130;255;255;0;0;$12.07.2020;09:16:34;48.720942;9.271215;183.090;23.6130;255;255;0;0;$12.07.2020;09:16:34;48.720942;9.271215;183.090;23.6130;255;255;0;0;$12.07.2020;09:16:34;48.720942;9.271215;183.090;23.6130;255;255;0;0;$12.07.2020;09:16:42;48.720712;9.271604;76.960;19.4830;255;255;0;0;$12.07.2020;09:16:43;48.720670;9.271692;71.490;18.2052;255;255;0;0;$12.07.2020;09:16:44;48.720650;9.271782;67.690;17.9644;255;255;0;0;$12.07.2020;09:16:45;48.720649;9.271870;68.520;19.9460;255;255;0;0;$12.07.2020;09:16:46;48.720643;9.271970;70.870;21.1313;255;255;0;0;$12.07.2020;09:16:47;48.720636;9.272056;71.140;20.9832;255;255;0;0;$12.07.2020;09:16:48;48.720639;9.272149;71.140;22.0758;255;255;0;0;$12.07.2020;09:16:49;48.720636;9.272226;73.280;20.8535;255;255;0;0;$12.07.2020;09:16:50;48.720625;9.272309;75.690;20.3720;255;255;0;0;$12.07.2020;09:16:51;48.720597;9.272384;79.890;18.1311;255;255;0;0;$12.07.2020;09:16:52;48.720575;9.272448;84.380;15.3346;255;31;0;0;$12.07.2020;09:16:53;48.720565;9.272504;86.220;13.3159;255;255;0;0;$12.07.2020;09:16:54;48.720546;9.272562;90.860;11.4454;255;132;0;0;$12.07.2020;09:16:55;48.720536;9.272602;92.630;8.7970;255;77;0;0;$12.07.2020;09:16:56;48.720523;9.272612;98.350;4.6300;255;255;0;0;$12.07.2020;09:16:57;48.720507;9.272598;98.350;3.2410;255;255;0;0;$12.07.2020;09:16:58;48.720477;9.272592;154.880;6.0746;255;142;0;0;$12.07.2020;09:16:59;48.720448;9.272585;186.300;7.3524;255;137;0;0;$12.07.2020;09:17:00;48.720412;9.272567;202.490;9.9638;255;217;0;0;$12.07.2020;09:17:01;48.720370;9.272560;204.580;11.3342;255;165;0;0;$12.07.2020;09:17:02;48.720339;9.272550;205.110;10.7416;255;142;0;0;$12.07.2020;09:17:03;48.720307;9.272520;209.490;11.8343;255;108;0;0;$12.07.2020;09:17:04;48.720273;9.272494;213.320;12.0750;255;115;0;0;$12.07.2020;09:17:05;48.720229;9.272483;213.130;12.9455;255;127;0;0;$12.07.2020;09:17:06;48.720179;9.272485;210.640;12.7047;255;140;0;0;$12.07.2020;09:17:07;48.720122;9.272472;210.790;13.7974;255;135;0;0;$12.07.2020;09:17:08;48.720054;9.272481;207.860;14.3715;255;255;0;0;$12.07.2020;09:17:09;48.720018;9.272471;210.710;11.7602;255;255;0;0;$12.07.2020;09:17:10;48.719964;9.272520;199.970;10.3527;255;255;0;0;$12.07.2020;09:17:11;48.719921;9.272571;197.510;6.4820;255;114;0;0;$12.07.2020;09:17:12;48.719865;9.272625;188.470;7.2598;255;173;0;0;$12.07.2020;09:17:13;48.719799;9.272665;186.190;9.6119;255;191;0;0;$12.07.2020;09:17:14;48.719749;9.272711;179.130;9.7415;255;255;0;0;$12.07.2020;09:17:15;48.719703;9.272743;178.560;9.6304;255;137;0;0;$12.07.2020;09:17:16;48.719653;9.272764;180.380;9.8712;255;255;0;0;$12.07.2020;09:17:17;48.719623;9.272797;176.060;7.0376;255;255;0;0;$12.07.2020;09:17:18;48.719575;9.272855;160.280;8.2599;255;255;0;0;$12.07.2020;09:17:19;48.719547;9.272860;163.960;6.1857;255;255;0;0;$12.07.2020;09:17:20;48.719497;9.272903;162.620;7.9266;255;168;0;0;$12.07.2020;09:17:21;48.719458;9.272949;155.820;7.8710;255;255;0;0;$12.07.2020;09:17:22;48.719429;9.272947;161.520;6.3709;255;128;0;0;$12.07.2020;09:17:23;48.719392;9.272950;172.370;7.0561;255;76;0;0;$12.07.2020;09:17:24;48.719360;9.272974;171.110;6.3709;255;255;0;0;$12.07.2020;09:17:25;48.719324;9.272974;178.840;6.7968;255;255;0;0;$12.07.2020;09:17:26;48.719284;9.272963;190.420;7.9451;255;255;0;0;$12.07.2020;09:17:27;48.719245;9.272954;195.910;7.5932;255;255;0;0;$12.07.2020;09:17:28;48.719226;9.272963;195.910;4.2781;255;255;0;0;$12.07.2020;09:17:29;48.719196;9.272982;195.910;4.1114;255;255;0;0;$12.07.2020;09:17:30;48.719179;9.272971;195.910;4.2040;255;161;0;0;$12.07.2020;09:17:31;48.719143;9.272993;195.910;4.3152;255;172;0;0;$12.07.2020;09:17:32;48.719097;9.273022;196.050;5.0189;255;139;0;0;$12.07.2020;09:17:33;48.719048;9.273047;197.560;5.6116;255;24;0;0;$12.07.2020;09:17:34;48.719011;9.273068;197.560;4.2596;255;25;0;0;$12.07.2020;09:17:35;48.718981;9.273078;197.560;2.8891;255;37;0;0;$12.07.2020;09:17:35;48.718981;9.273078;197.560;2.8891;255;25;0;0;$12.07.2020;09:17:37;48.718930;9.273105;197.560;1.2964;255;23;0;0;$12.07.2020;09:17:38;48.718900;9.273104;197.560;2.5928;255;20;0;0;$12.07.2020;09:17:39;48.718868;9.273104;197.560;4.2781;255;17;0;0;$12.07.2020;09:17:39;48.718868;9.273104;197.560;4.2781;255;17;0;0;$12.07.2020;09:17:39;48.718868;9.273104;197.560;4.2781;5;36;0;0;$12.07.2020;09:17:39;48.718868;9.273104;197.560;4.2781;26;61;0;0;$12.07.2020;09:17:39;48.718868;9.273104;197.560;4.2781;85;255;0;0;$12.07.2020;09:17:39;48.718868;9.273104;197.560;4.2781;218;103;0;0;$12.07.2020;09:17:39;48.718868;9.273104;197.560;4.2781;185;80;1;0;$12.07.2020;09:17:39;48.718868;9.273104;197.560;4.2781;185;87;0;0;$12.07.2020;09:17:47;48.718680;9.273209;197.560;4.2781;185;143;0;0;$12.07.2020;09:17:47;48.718680;9.273209;197.560;4.2781;185;255;0;0;$12.07.2020;09:17:47;48.718680;9.273209;197.560;4.2781;181;255;0;0;$12.07.2020;09:17:47;48.718680;9.273209;197.560;4.2781;208;255;0;0;$\"}}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:3000/api/tracks/end", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3000", + "path": [ + "api", + "tracks", + "end" + ] + } + }, + "response": [] + } + ], + "protocolProfileBehavior": {} +} \ No newline at end of file diff --git a/routes/auth.js b/routes/auth.js index e44a215..201f5c4 100644 --- a/routes/auth.js +++ b/routes/auth.js @@ -1,9 +1,9 @@ var jwt = require('express-jwt'); var secret = require('../config').secret; -function getTokenFromHeader(req){ +function getTokenFromHeader(req) { if (req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Token' || - req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer') { + req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer') { return req.headers.authorization.split(' ')[1]; } @@ -14,13 +14,15 @@ var auth = { required: jwt({ secret: secret, userProperty: 'payload', - getToken: getTokenFromHeader + getToken: getTokenFromHeader, + algorithms: ['HS256'] }), optional: jwt({ secret: secret, userProperty: 'payload', credentialsRequired: false, - getToken: getTokenFromHeader + getToken: getTokenFromHeader, + algorithms: ['HS256'] }) }; diff --git a/tests/api-tests.postman.json b/tests/api-tests.postman.json deleted file mode 100644 index bad71a2..0000000 --- a/tests/api-tests.postman.json +++ /dev/null @@ -1,1900 +0,0 @@ -{ - "variables": [], - "info": { - "name": "Conduit API Tests", - "_postman_id": "dda3e595-02d7-bf12-2a43-3daea0970192", - "description": "Collection for testing the Conduit API\n\nhttps://github.com/gothinkster/realworld", - "schema": "https://schema.getpostman.com/json/collection/v2.0.0/collection.json" - }, - "item": [{ - "name": "Auth", - "description": "", - "item": [{ - "name": "Register", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "if (!(environment.isIntegrationTest)) {", - "var responseJSON = JSON.parse(responseBody);", - "", - "tests['Response contains \"user\" property'] = responseJSON.hasOwnProperty('user');", - "", - "var user = responseJSON.user || {};", - "", - "tests['User has \"email\" property'] = user.hasOwnProperty('email');", - "tests['User has \"username\" property'] = user.hasOwnProperty('username');", - "tests['User has \"token\" property'] = user.hasOwnProperty('token');", - "}", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/users", - "method": "POST", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "{\"user\":{\"email\":\"john@jacob.com\", \"password\":\"johnnyjacob\", \"username\":\"johnjacob\"}}" - }, - "description": "" - }, - "response": [] - }, - { - "name": "Login", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var responseJSON = JSON.parse(responseBody);", - "", - "tests['Response contains \"user\" property'] = responseJSON.hasOwnProperty('user');", - "", - "var user = responseJSON.user || {};", - "", - "tests['User has \"email\" property'] = user.hasOwnProperty('email');", - "tests['User has \"username\" property'] = user.hasOwnProperty('username');", - "tests['User has \"token\" property'] = user.hasOwnProperty('token');", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/users/login", - "method": "POST", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "{\"user\":{\"email\":\"john@jacob.com\", \"password\":\"johnnyjacob\"}}" - }, - "description": "" - }, - "response": [] - }, - { - "name": "Login and Remember Token", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var responseJSON = JSON.parse(responseBody);", - "", - "tests['Response contains \"user\" property'] = responseJSON.hasOwnProperty('user');", - "", - "var user = responseJSON.user || {};", - "", - "tests['User has \"email\" property'] = user.hasOwnProperty('email');", - "tests['User has \"username\" property'] = user.hasOwnProperty('username');", - "tests['User has \"token\" property'] = user.hasOwnProperty('token');", - "", - "if(tests['User has \"token\" property']){", - " postman.setEnvironmentVariable('token', user.token);", - "}", - "", - "tests['Environment variable \"token\" has been set'] = environment.token === user.token;", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/users/login", - "method": "POST", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "{\"user\":{\"email\":\"john@jacob.com\", \"password\":\"johnnyjacob\"}}" - }, - "description": "" - }, - "response": [] - }, - { - "name": "Current User", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var responseJSON = JSON.parse(responseBody);", - "", - "tests['Response contains \"user\" property'] = responseJSON.hasOwnProperty('user');", - "", - "var user = responseJSON.user || {};", - "", - "tests['User has \"email\" property'] = user.hasOwnProperty('email');", - "tests['User has \"username\" property'] = user.hasOwnProperty('username');", - "tests['User has \"token\" property'] = user.hasOwnProperty('token');", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/user", - "method": "GET", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": {}, - "description": "" - }, - "response": [] - }, - { - "name": "Update User", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var responseJSON = JSON.parse(responseBody);", - "", - "tests['Response contains \"user\" property'] = responseJSON.hasOwnProperty('user');", - "", - "var user = responseJSON.user || {};", - "", - "tests['User has \"email\" property'] = user.hasOwnProperty('email');", - "tests['User has \"username\" property'] = user.hasOwnProperty('username');", - "tests['User has \"token\" property'] = user.hasOwnProperty('token');", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/user", - "method": "PUT", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "{\"user\":{\"email\":\"john@jacob.com\"}}" - }, - "description": "" - }, - "response": [] - } - ] - }, - { - "name": "Articles with authentication", - "description": "", - "item": [{ - "name": "Feed", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var is200Response = responseCode.code === 200;", - "", - "tests['Response code is 200 OK'] = is200Response;", - "", - "if(is200Response){", - " var responseJSON = JSON.parse(responseBody);", - "", - " tests['Response contains \"articles\" property'] = responseJSON.hasOwnProperty('articles');", - " tests['Response contains \"articlesCount\" property'] = responseJSON.hasOwnProperty('articlesCount');", - " tests['articlesCount is an integer'] = Number.isInteger(responseJSON.articlesCount);", - "", - " if(responseJSON.articles.length){", - " var article = responseJSON.articles[0];", - "", - " tests['Article has \"title\" property'] = article.hasOwnProperty('title');", - " tests['Article has \"slug\" property'] = article.hasOwnProperty('slug');", - " tests['Article has \"body\" property'] = article.hasOwnProperty('body');", - " tests['Article has \"createdAt\" property'] = article.hasOwnProperty('createdAt');", - " tests['Article\\'s \"createdAt\" property is an ISO 8601 timestamp'] = new Date(article.createdAt).toISOString() === article.createdAt;", - " tests['Article has \"updatedAt\" property'] = article.hasOwnProperty('updatedAt');", - " tests['Article\\'s \"updatedAt\" property is an ISO 8601 timestamp'] = new Date(article.updatedAt).toISOString() === article.updatedAt;", - " tests['Article has \"description\" property'] = article.hasOwnProperty('description');", - " tests['Article has \"tagList\" property'] = article.hasOwnProperty('tagList');", - " tests['Article\\'s \"tagList\" property is an Array'] = Array.isArray(article.tagList);", - " tests['Article has \"author\" property'] = article.hasOwnProperty('author');", - " tests['Article has \"favorited\" property'] = article.hasOwnProperty('favorited');", - " tests['Article has \"favoritesCount\" property'] = article.hasOwnProperty('favoritesCount');", - " tests['favoritesCount is an integer'] = Number.isInteger(article.favoritesCount);", - " } else {", - " tests['articlesCount is 0 when feed is empty'] = responseJSON.articlesCount === 0;", - " }", - "}", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/articles/feed", - "method": "GET", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "" - }, - "description": "" - }, - "response": [] - }, - { - "name": "All Articles", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var is200Response = responseCode.code === 200;", - "", - "tests['Response code is 200 OK'] = is200Response;", - "", - "if(is200Response){", - " var responseJSON = JSON.parse(responseBody);", - "", - " tests['Response contains \"articles\" property'] = responseJSON.hasOwnProperty('articles');", - " tests['Response contains \"articlesCount\" property'] = responseJSON.hasOwnProperty('articlesCount');", - " tests['articlesCount is an integer'] = Number.isInteger(responseJSON.articlesCount);", - "", - " if(responseJSON.articles.length){", - " var article = responseJSON.articles[0];", - "", - " tests['Article has \"title\" property'] = article.hasOwnProperty('title');", - " tests['Article has \"slug\" property'] = article.hasOwnProperty('slug');", - " tests['Article has \"body\" property'] = article.hasOwnProperty('body');", - " tests['Article has \"createdAt\" property'] = article.hasOwnProperty('createdAt');", - " tests['Article\\'s \"createdAt\" property is an ISO 8601 timestamp'] = new Date(article.createdAt).toISOString() === article.createdAt;", - " tests['Article has \"updatedAt\" property'] = article.hasOwnProperty('updatedAt');", - " tests['Article\\'s \"updatedAt\" property is an ISO 8601 timestamp'] = new Date(article.updatedAt).toISOString() === article.updatedAt;", - " tests['Article has \"description\" property'] = article.hasOwnProperty('description');", - " tests['Article has \"tagList\" property'] = article.hasOwnProperty('tagList');", - " tests['Article\\'s \"tagList\" property is an Array'] = Array.isArray(article.tagList);", - " tests['Article has \"author\" property'] = article.hasOwnProperty('author');", - " tests['Article has \"favorited\" property'] = article.hasOwnProperty('favorited');", - " tests['Article has \"favoritesCount\" property'] = article.hasOwnProperty('favoritesCount');", - " tests['favoritesCount is an integer'] = Number.isInteger(article.favoritesCount);", - " } else {", - " tests['articlesCount is 0 when feed is empty'] = responseJSON.articlesCount === 0;", - " }", - "}", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/articles", - "method": "GET", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "" - }, - "description": "" - }, - "response": [] - }, - { - "name": "All Articles with auth", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var is200Response = responseCode.code === 200;", - "", - "tests['Response code is 200 OK'] = is200Response;", - "", - "if(is200Response){", - " var responseJSON = JSON.parse(responseBody);", - "", - " tests['Response contains \"articles\" property'] = responseJSON.hasOwnProperty('articles');", - " tests['Response contains \"articlesCount\" property'] = responseJSON.hasOwnProperty('articlesCount');", - " tests['articlesCount is an integer'] = Number.isInteger(responseJSON.articlesCount);", - "", - " if(responseJSON.articles.length){", - " var article = responseJSON.articles[0];", - "", - " tests['Article has \"title\" property'] = article.hasOwnProperty('title');", - " tests['Article has \"slug\" property'] = article.hasOwnProperty('slug');", - " tests['Article has \"body\" property'] = article.hasOwnProperty('body');", - " tests['Article has \"createdAt\" property'] = article.hasOwnProperty('createdAt');", - " tests['Article\\'s \"createdAt\" property is an ISO 8601 timestamp'] = new Date(article.createdAt).toISOString() === article.createdAt;", - " tests['Article has \"updatedAt\" property'] = article.hasOwnProperty('updatedAt');", - " tests['Article\\'s \"updatedAt\" property is an ISO 8601 timestamp'] = new Date(article.updatedAt).toISOString() === article.updatedAt;", - " tests['Article has \"description\" property'] = article.hasOwnProperty('description');", - " tests['Article has \"tagList\" property'] = article.hasOwnProperty('tagList');", - " tests['Article\\'s \"tagList\" property is an Array'] = Array.isArray(article.tagList);", - " tests['Article has \"author\" property'] = article.hasOwnProperty('author');", - " tests['Article has \"favorited\" property'] = article.hasOwnProperty('favorited');", - " tests['Article has \"favoritesCount\" property'] = article.hasOwnProperty('favoritesCount');", - " tests['favoritesCount is an integer'] = Number.isInteger(article.favoritesCount);", - " } else {", - " tests['articlesCount is 0 when feed is empty'] = responseJSON.articlesCount === 0;", - " }", - "}", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/articles", - "method": "GET", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "" - }, - "description": "" - }, - "response": [] - }, - { - "name": "Articles by Author", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var is200Response = responseCode.code === 200;", - "", - "tests['Response code is 200 OK'] = is200Response;", - "", - "if(is200Response){", - " var responseJSON = JSON.parse(responseBody);", - "", - " tests['Response contains \"articles\" property'] = responseJSON.hasOwnProperty('articles');", - " tests['Response contains \"articlesCount\" property'] = responseJSON.hasOwnProperty('articlesCount');", - " tests['articlesCount is an integer'] = Number.isInteger(responseJSON.articlesCount);", - "", - " if(responseJSON.articles.length){", - " var article = responseJSON.articles[0];", - "", - " tests['Article has \"title\" property'] = article.hasOwnProperty('title');", - " tests['Article has \"slug\" property'] = article.hasOwnProperty('slug');", - " tests['Article has \"body\" property'] = article.hasOwnProperty('body');", - " tests['Article has \"createdAt\" property'] = article.hasOwnProperty('createdAt');", - " tests['Article\\'s \"createdAt\" property is an ISO 8601 timestamp'] = new Date(article.createdAt).toISOString() === article.createdAt;", - " tests['Article has \"updatedAt\" property'] = article.hasOwnProperty('updatedAt');", - " tests['Article\\'s \"updatedAt\" property is an ISO 8601 timestamp'] = new Date(article.updatedAt).toISOString() === article.updatedAt;", - " tests['Article has \"description\" property'] = article.hasOwnProperty('description');", - " tests['Article has \"tagList\" property'] = article.hasOwnProperty('tagList');", - " tests['Article\\'s \"tagList\" property is an Array'] = Array.isArray(article.tagList);", - " tests['Article has \"author\" property'] = article.hasOwnProperty('author');", - " tests['Article has \"favorited\" property'] = article.hasOwnProperty('favorited');", - " tests['Article has \"favoritesCount\" property'] = article.hasOwnProperty('favoritesCount');", - " tests['favoritesCount is an integer'] = Number.isInteger(article.favoritesCount);", - " } else {", - " tests['articlesCount is 0 when feed is empty'] = responseJSON.articlesCount === 0;", - " }", - "}", - "" - ] - } - }], - "request": { - "url": { - "raw": "{{apiUrl}}/articles?author=johnjacob", - "host": [ - "{{apiUrl}}" - ], - "path": [ - "articles" - ], - "query": [{ - "key": "author", - "value": "johnjacob" - }], - "variable": [] - }, - "method": "GET", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "" - }, - "description": "" - }, - "response": [] - }, - { - "name": "Articles by Author with auth", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var is200Response = responseCode.code === 200;", - "", - "tests['Response code is 200 OK'] = is200Response;", - "", - "if(is200Response){", - " var responseJSON = JSON.parse(responseBody);", - "", - " tests['Response contains \"articles\" property'] = responseJSON.hasOwnProperty('articles');", - " tests['Response contains \"articlesCount\" property'] = responseJSON.hasOwnProperty('articlesCount');", - " tests['articlesCount is an integer'] = Number.isInteger(responseJSON.articlesCount);", - "", - " if(responseJSON.articles.length){", - " var article = responseJSON.articles[0];", - "", - " tests['Article has \"title\" property'] = article.hasOwnProperty('title');", - " tests['Article has \"slug\" property'] = article.hasOwnProperty('slug');", - " tests['Article has \"body\" property'] = article.hasOwnProperty('body');", - " tests['Article has \"createdAt\" property'] = article.hasOwnProperty('createdAt');", - " tests['Article\\'s \"createdAt\" property is an ISO 8601 timestamp'] = new Date(article.createdAt).toISOString() === article.createdAt;", - " tests['Article has \"updatedAt\" property'] = article.hasOwnProperty('updatedAt');", - " tests['Article\\'s \"updatedAt\" property is an ISO 8601 timestamp'] = new Date(article.updatedAt).toISOString() === article.updatedAt;", - " tests['Article has \"description\" property'] = article.hasOwnProperty('description');", - " tests['Article has \"tagList\" property'] = article.hasOwnProperty('tagList');", - " tests['Article\\'s \"tagList\" property is an Array'] = Array.isArray(article.tagList);", - " tests['Article has \"author\" property'] = article.hasOwnProperty('author');", - " tests['Article has \"favorited\" property'] = article.hasOwnProperty('favorited');", - " tests['Article has \"favoritesCount\" property'] = article.hasOwnProperty('favoritesCount');", - " tests['favoritesCount is an integer'] = Number.isInteger(article.favoritesCount);", - " } else {", - " tests['articlesCount is 0 when feed is empty'] = responseJSON.articlesCount === 0;", - " }", - "}", - "" - ] - } - }], - "request": { - "url": { - "raw": "{{apiUrl}}/articles?author=johnjacob", - "host": [ - "{{apiUrl}}" - ], - "path": [ - "articles" - ], - "query": [{ - "key": "author", - "value": "johnjacob", - "equals": true, - "description": "" - }], - "variable": [] - }, - "method": "GET", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": {}, - "description": "" - }, - "response": [] - }, - { - "name": "Articles Favorited by Username", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var is200Response = responseCode.code === 200;", - "", - "tests['Response code is 200 OK'] = is200Response;", - "", - "if(is200Response){", - " var responseJSON = JSON.parse(responseBody);", - " ", - " tests['Response contains \"articles\" property'] = responseJSON.hasOwnProperty('articles');", - " tests['Response contains \"articlesCount\" property'] = responseJSON.hasOwnProperty('articlesCount');", - " tests['articlesCount is an integer'] = Number.isInteger(responseJSON.articlesCount);", - "", - " if(responseJSON.articles.length){", - " var article = responseJSON.articles[0];", - "", - " tests['Article has \"title\" property'] = article.hasOwnProperty('title');", - " tests['Article has \"slug\" property'] = article.hasOwnProperty('slug');", - " tests['Article has \"body\" property'] = article.hasOwnProperty('body');", - " tests['Article has \"createdAt\" property'] = article.hasOwnProperty('createdAt');", - " tests['Article\\'s \"createdAt\" property is an ISO 8601 timestamp'] = new Date(article.createdAt).toISOString() === article.createdAt;", - " tests['Article has \"updatedAt\" property'] = article.hasOwnProperty('updatedAt');", - " tests['Article\\'s \"updatedAt\" property is an ISO 8601 timestamp'] = new Date(article.updatedAt).toISOString() === article.updatedAt;", - " tests['Article has \"description\" property'] = article.hasOwnProperty('description');", - " tests['Article has \"tagList\" property'] = article.hasOwnProperty('tagList');", - " tests['Article\\'s \"tagList\" property is an Array'] = Array.isArray(article.tagList);", - " tests['Article has \"author\" property'] = article.hasOwnProperty('author');", - " tests['Article has \"favorited\" property'] = article.hasOwnProperty('favorited');", - " tests['Article has \"favoritesCount\" property'] = article.hasOwnProperty('favoritesCount');", - " tests['favoritesCount is an integer'] = Number.isInteger(article.favoritesCount);", - " } else {", - " tests['articlesCount is 0 when feed is empty'] = responseJSON.articlesCount === 0;", - " }", - "}", - "" - ] - } - }], - "request": { - "url": { - "raw": "{{apiUrl}}/articles?favorited=jane", - "host": [ - "{{apiUrl}}" - ], - "path": [ - "articles" - ], - "query": [{ - "key": "favorited", - "value": "jane" - }], - "variable": [] - }, - "method": "GET", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "" - }, - "description": "" - }, - "response": [] - }, - { - "name": "Articles Favorited by Username with auth", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var is200Response = responseCode.code === 200;", - "", - "tests['Response code is 200 OK'] = is200Response;", - "", - "if(is200Response){", - " var responseJSON = JSON.parse(responseBody);", - " ", - " tests['Response contains \"articles\" property'] = responseJSON.hasOwnProperty('articles');", - " tests['Response contains \"articlesCount\" property'] = responseJSON.hasOwnProperty('articlesCount');", - " tests['articlesCount is an integer'] = Number.isInteger(responseJSON.articlesCount);", - "", - " if(responseJSON.articles.length){", - " var article = responseJSON.articles[0];", - "", - " tests['Article has \"title\" property'] = article.hasOwnProperty('title');", - " tests['Article has \"slug\" property'] = article.hasOwnProperty('slug');", - " tests['Article has \"body\" property'] = article.hasOwnProperty('body');", - " tests['Article has \"createdAt\" property'] = article.hasOwnProperty('createdAt');", - " tests['Article\\'s \"createdAt\" property is an ISO 8601 timestamp'] = new Date(article.createdAt).toISOString() === article.createdAt;", - " tests['Article has \"updatedAt\" property'] = article.hasOwnProperty('updatedAt');", - " tests['Article\\'s \"updatedAt\" property is an ISO 8601 timestamp'] = new Date(article.updatedAt).toISOString() === article.updatedAt;", - " tests['Article has \"description\" property'] = article.hasOwnProperty('description');", - " tests['Article has \"tagList\" property'] = article.hasOwnProperty('tagList');", - " tests['Article\\'s \"tagList\" property is an Array'] = Array.isArray(article.tagList);", - " tests['Article has \"author\" property'] = article.hasOwnProperty('author');", - " tests['Article has \"favorited\" property'] = article.hasOwnProperty('favorited');", - " tests['Article has \"favoritesCount\" property'] = article.hasOwnProperty('favoritesCount');", - " tests['favoritesCount is an integer'] = Number.isInteger(article.favoritesCount);", - " } else {", - " tests['articlesCount is 0 when feed is empty'] = responseJSON.articlesCount === 0;", - " }", - "}", - "" - ] - } - }], - "request": { - "url": { - "raw": "{{apiUrl}}/articles?favorited=jane", - "host": [ - "{{apiUrl}}" - ], - "path": [ - "articles" - ], - "query": [{ - "key": "favorited", - "value": "jane" - }], - "variable": [] - }, - "method": "GET", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "" - }, - "description": "" - }, - "response": [] - }, - { - "name": "Articles by Tag", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var is200Response = responseCode.code === 200;", - "", - "tests['Response code is 200 OK'] = is200Response;", - "", - "if(is200Response){", - " var responseJSON = JSON.parse(responseBody);", - "", - " tests['Response contains \"articles\" property'] = responseJSON.hasOwnProperty('articles');", - " tests['Response contains \"articlesCount\" property'] = responseJSON.hasOwnProperty('articlesCount');", - " tests['articlesCount is an integer'] = Number.isInteger(responseJSON.articlesCount);", - "", - " if(responseJSON.articles.length){", - " var article = responseJSON.articles[0];", - "", - " tests['Article has \"title\" property'] = article.hasOwnProperty('title');", - " tests['Article has \"slug\" property'] = article.hasOwnProperty('slug');", - " tests['Article has \"body\" property'] = article.hasOwnProperty('body');", - " tests['Article has \"createdAt\" property'] = article.hasOwnProperty('createdAt');", - " tests['Article\\'s \"createdAt\" property is an ISO 8601 timestamp'] = new Date(article.createdAt).toISOString() === article.createdAt;", - " tests['Article has \"updatedAt\" property'] = article.hasOwnProperty('updatedAt');", - " tests['Article\\'s \"updatedAt\" property is an ISO 8601 timestamp'] = new Date(article.updatedAt).toISOString() === article.updatedAt;", - " tests['Article has \"description\" property'] = article.hasOwnProperty('description');", - " tests['Article has \"tagList\" property'] = article.hasOwnProperty('tagList');", - " tests['Article\\'s \"tagList\" property is an Array'] = Array.isArray(article.tagList);", - " tests['Article has \"author\" property'] = article.hasOwnProperty('author');", - " tests['Article has \"favorited\" property'] = article.hasOwnProperty('favorited');", - " tests['Article has \"favoritesCount\" property'] = article.hasOwnProperty('favoritesCount');", - " tests['favoritesCount is an integer'] = Number.isInteger(article.favoritesCount);", - " } else {", - " tests['articlesCount is 0 when feed is empty'] = responseJSON.articlesCount === 0;", - " }", - "}", - "" - ] - } - }], - "request": { - "url": { - "raw": "{{apiUrl}}/articles?tag=dragons", - "host": [ - "{{apiUrl}}" - ], - "path": [ - "articles" - ], - "query": [{ - "key": "tag", - "value": "dragons" - }], - "variable": [] - }, - "method": "GET", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "" - }, - "description": "" - }, - "response": [] - }, - { - "name": "Create Article", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var responseJSON = JSON.parse(responseBody);", - "", - "tests['Response contains \"article\" property'] = responseJSON.hasOwnProperty('article');", - "", - "var article = responseJSON.article || {};", - "", - "tests['Article has \"title\" property'] = article.hasOwnProperty('title');", - "tests['Article has \"slug\" property'] = article.hasOwnProperty('slug');", - "if(tests['Article has \"slug\" property']){", - " postman.setEnvironmentVariable('slug', article.slug);", - "}", - "tests['Article has \"body\" property'] = article.hasOwnProperty('body');", - "tests['Article has \"createdAt\" property'] = article.hasOwnProperty('createdAt');", - "tests['Article\\'s \"createdAt\" property is an ISO 8601 timestamp'] = new Date(article.createdAt).toISOString() === article.createdAt;", - "tests['Article has \"updatedAt\" property'] = article.hasOwnProperty('updatedAt');", - "tests['Article\\'s \"updatedAt\" property is an ISO 8601 timestamp'] = new Date(article.updatedAt).toISOString() === article.updatedAt;", - "tests['Article has \"description\" property'] = article.hasOwnProperty('description');", - "tests['Article has \"tagList\" property'] = article.hasOwnProperty('tagList');", - "tests['Article\\'s \"tagList\" property is an Array'] = Array.isArray(article.tagList);", - "tests['Article has \"author\" property'] = article.hasOwnProperty('author');", - "tests['Article has \"favorited\" property'] = article.hasOwnProperty('favorited');", - "tests['Article has \"favoritesCount\" property'] = article.hasOwnProperty('favoritesCount');", - "tests['favoritesCount is an integer'] = Number.isInteger(article.favoritesCount);", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/articles", - "method": "POST", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "{\"article\":{\"title\":\"How to train your dragon\", \"description\":\"Ever wonder how?\", \"body\":\"Very carefully.\", \"tagList\":[\"dragons\",\"training\"]}}" - }, - "description": "" - }, - "response": [] - }, - { - "name": "Single Article by slug", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var responseJSON = JSON.parse(responseBody);", - "", - "tests['Response contains \"article\" property'] = responseJSON.hasOwnProperty('article');", - "", - "var article = responseJSON.article || {};", - "", - "tests['Article has \"title\" property'] = article.hasOwnProperty('title');", - "tests['Article has \"slug\" property'] = article.hasOwnProperty('slug');", - "tests['Article has \"body\" property'] = article.hasOwnProperty('body');", - "tests['Article has \"createdAt\" property'] = article.hasOwnProperty('createdAt');", - "tests['Article\\'s \"createdAt\" property is an ISO 8601 timestamp'] = new Date(article.createdAt).toISOString() === article.createdAt;", - "tests['Article has \"updatedAt\" property'] = article.hasOwnProperty('updatedAt');", - "tests['Article\\'s \"updatedAt\" property is an ISO 8601 timestamp'] = new Date(article.updatedAt).toISOString() === article.updatedAt;", - "tests['Article has \"description\" property'] = article.hasOwnProperty('description');", - "tests['Article has \"tagList\" property'] = article.hasOwnProperty('tagList');", - "tests['Article\\'s \"tagList\" property is an Array'] = Array.isArray(article.tagList);", - "tests['Article has \"author\" property'] = article.hasOwnProperty('author');", - "tests['Article has \"favorited\" property'] = article.hasOwnProperty('favorited');", - "tests['Article has \"favoritesCount\" property'] = article.hasOwnProperty('favoritesCount');", - "tests['favoritesCount is an integer'] = Number.isInteger(article.favoritesCount);", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/articles/{{slug}}", - "method": "GET", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": {}, - "description": "" - }, - "response": [] - }, - { - "name": "Update Article", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "if (!(environment.isIntegrationTest)) {", - "var responseJSON = JSON.parse(responseBody);", - "", - "tests['Response contains \"article\" property'] = responseJSON.hasOwnProperty('article');", - "", - "var article = responseJSON.article || {};", - "", - "tests['Article has \"title\" property'] = article.hasOwnProperty('title');", - "tests['Article has \"slug\" property'] = article.hasOwnProperty('slug');", - "tests['Article has \"body\" property'] = article.hasOwnProperty('body');", - "tests['Article has \"createdAt\" property'] = article.hasOwnProperty('createdAt');", - "tests['Article\\'s \"createdAt\" property is an ISO 8601 timestamp'] = new Date(article.createdAt).toISOString() === article.createdAt;", - "tests['Article has \"updatedAt\" property'] = article.hasOwnProperty('updatedAt');", - "tests['Article\\'s \"updatedAt\" property is an ISO 8601 timestamp'] = new Date(article.updatedAt).toISOString() === article.updatedAt;", - "tests['Article has \"description\" property'] = article.hasOwnProperty('description');", - "tests['Article has \"tagList\" property'] = article.hasOwnProperty('tagList');", - "tests['Article\\'s \"tagList\" property is an Array'] = Array.isArray(article.tagList);", - "tests['Article has \"author\" property'] = article.hasOwnProperty('author');", - "tests['Article has \"favorited\" property'] = article.hasOwnProperty('favorited');", - "tests['Article has \"favoritesCount\" property'] = article.hasOwnProperty('favoritesCount');", - "tests['favoritesCount is an integer'] = Number.isInteger(article.favoritesCount);", - "}", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/articles/{{slug}}", - "method": "PUT", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "{\"article\":{\"body\":\"With two hands\"}}" - }, - "description": "" - }, - "response": [] - }, - { - "name": "Favorite Article", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var responseJSON = JSON.parse(responseBody);", - "", - "tests['Response contains \"article\" property'] = responseJSON.hasOwnProperty('article');", - "", - "var article = responseJSON.article || {};", - "", - "tests['Article has \"title\" property'] = article.hasOwnProperty('title');", - "tests['Article has \"slug\" property'] = article.hasOwnProperty('slug');", - "tests['Article has \"body\" property'] = article.hasOwnProperty('body');", - "tests['Article has \"createdAt\" property'] = article.hasOwnProperty('createdAt');", - "tests['Article\\'s \"createdAt\" property is an ISO 8601 timestamp'] = new Date(article.createdAt).toISOString() === article.createdAt;", - "tests['Article has \"updatedAt\" property'] = article.hasOwnProperty('updatedAt');", - "tests['Article\\'s \"updatedAt\" property is an ISO 8601 timestamp'] = new Date(article.updatedAt).toISOString() === article.updatedAt;", - "tests['Article has \"description\" property'] = article.hasOwnProperty('description');", - "tests['Article has \"tagList\" property'] = article.hasOwnProperty('tagList');", - "tests['Article\\'s \"tagList\" property is an Array'] = Array.isArray(article.tagList);", - "tests['Article has \"author\" property'] = article.hasOwnProperty('author');", - "tests['Article has \"favorited\" property'] = article.hasOwnProperty('favorited');", - "tests[\"Article's 'favorited' property is true\"] = article.favorited === true;", - "tests['Article has \"favoritesCount\" property'] = article.hasOwnProperty('favoritesCount');", - "tests['favoritesCount is an integer'] = Number.isInteger(article.favoritesCount);", - "tests[\"Article's 'favoritesCount' property is greater than 0\"] = article.favoritesCount > 0;", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/articles/{{slug}}/favorite", - "method": "POST", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "" - }, - "description": "" - }, - "response": [] - }, - { - "name": "Unfavorite Article", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var responseJSON = JSON.parse(responseBody);", - "", - "tests['Response contains \"article\" property'] = responseJSON.hasOwnProperty('article');", - "", - "var article = responseJSON.article || {};", - "", - "tests['Article has \"title\" property'] = article.hasOwnProperty('title');", - "tests['Article has \"slug\" property'] = article.hasOwnProperty('slug');", - "tests['Article has \"body\" property'] = article.hasOwnProperty('body');", - "tests['Article has \"createdAt\" property'] = article.hasOwnProperty('createdAt');", - "tests['Article\\'s \"createdAt\" property is an ISO 8601 timestamp'] = new Date(article.createdAt).toISOString() === article.createdAt;", - "tests['Article has \"updatedAt\" property'] = article.hasOwnProperty('updatedAt');", - "tests['Article\\'s \"updatedAt\" property is an ISO 8601 timestamp'] = new Date(article.updatedAt).toISOString() === article.updatedAt;", - "tests['Article has \"description\" property'] = article.hasOwnProperty('description');", - "tests['Article has \"tagList\" property'] = article.hasOwnProperty('tagList');", - "tests['Article\\'s \"tagList\" property is an Array'] = Array.isArray(article.tagList);", - "tests['Article has \"author\" property'] = article.hasOwnProperty('author');", - "tests['Article has \"favorited\" property'] = article.hasOwnProperty('favorited');", - "tests['Article has \"favoritesCount\" property'] = article.hasOwnProperty('favoritesCount');", - "tests['favoritesCount is an integer'] = Number.isInteger(article.favoritesCount);", - "tests[\"Article's \\\"favorited\\\" property is true\"] = article.favorited === false;", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/articles/{{slug}}/favorite", - "method": "DELETE", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "" - }, - "description": "" - }, - "response": [] - } - ] - }, - { - "name": "Articles", - "description": "", - "item": [{ - "name": "All Articles", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var is200Response = responseCode.code === 200;", - "", - "tests['Response code is 200 OK'] = is200Response;", - "", - "if(is200Response){", - " var responseJSON = JSON.parse(responseBody);", - "", - " tests['Response contains \"articles\" property'] = responseJSON.hasOwnProperty('articles');", - " tests['Response contains \"articlesCount\" property'] = responseJSON.hasOwnProperty('articlesCount');", - " tests['articlesCount is an integer'] = Number.isInteger(responseJSON.articlesCount);", - "", - " if(responseJSON.articles.length){", - " var article = responseJSON.articles[0];", - "", - " tests['Article has \"title\" property'] = article.hasOwnProperty('title');", - " tests['Article has \"slug\" property'] = article.hasOwnProperty('slug');", - " tests['Article has \"body\" property'] = article.hasOwnProperty('body');", - " tests['Article has \"createdAt\" property'] = article.hasOwnProperty('createdAt');", - " tests['Article\\'s \"createdAt\" property is an ISO 8601 timestamp'] = new Date(article.createdAt).toISOString() === article.createdAt;", - " tests['Article has \"updatedAt\" property'] = article.hasOwnProperty('updatedAt');", - " tests['Article\\'s \"updatedAt\" property is an ISO 8601 timestamp'] = new Date(article.updatedAt).toISOString() === article.updatedAt;", - " tests['Article has \"description\" property'] = article.hasOwnProperty('description');", - " tests['Article has \"tagList\" property'] = article.hasOwnProperty('tagList');", - " tests['Article\\'s \"tagList\" property is an Array'] = Array.isArray(article.tagList);", - " tests['Article has \"author\" property'] = article.hasOwnProperty('author');", - " tests['Article has \"favorited\" property'] = article.hasOwnProperty('favorited');", - " tests['Article has \"favoritesCount\" property'] = article.hasOwnProperty('favoritesCount');", - " tests['favoritesCount is an integer'] = Number.isInteger(article.favoritesCount);", - " } else {", - " tests['articlesCount is 0 when feed is empty'] = responseJSON.articlesCount === 0;", - " }", - "}", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/articles", - "method": "GET", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "" - }, - "description": "" - }, - "response": [] - }, - { - "name": "Articles by Author", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var is200Response = responseCode.code === 200;", - "", - "tests['Response code is 200 OK'] = is200Response;", - "", - "if(is200Response){", - " var responseJSON = JSON.parse(responseBody);", - "", - " tests['Response contains \"articles\" property'] = responseJSON.hasOwnProperty('articles');", - " tests['Response contains \"articlesCount\" property'] = responseJSON.hasOwnProperty('articlesCount');", - " tests['articlesCount is an integer'] = Number.isInteger(responseJSON.articlesCount);", - "", - " if(responseJSON.articles.length){", - " var article = responseJSON.articles[0];", - "", - " tests['Article has \"title\" property'] = article.hasOwnProperty('title');", - " tests['Article has \"slug\" property'] = article.hasOwnProperty('slug');", - " tests['Article has \"body\" property'] = article.hasOwnProperty('body');", - " tests['Article has \"createdAt\" property'] = article.hasOwnProperty('createdAt');", - " tests['Article\\'s \"createdAt\" property is an ISO 8601 timestamp'] = new Date(article.createdAt).toISOString() === article.createdAt;", - " tests['Article has \"updatedAt\" property'] = article.hasOwnProperty('updatedAt');", - " tests['Article\\'s \"updatedAt\" property is an ISO 8601 timestamp'] = new Date(article.updatedAt).toISOString() === article.updatedAt;", - " tests['Article has \"description\" property'] = article.hasOwnProperty('description');", - " tests['Article has \"tagList\" property'] = article.hasOwnProperty('tagList');", - " tests['Article\\'s \"tagList\" property is an Array'] = Array.isArray(article.tagList);", - " tests['Article has \"author\" property'] = article.hasOwnProperty('author');", - " tests['Article has \"favorited\" property'] = article.hasOwnProperty('favorited');", - " tests['Article has \"favoritesCount\" property'] = article.hasOwnProperty('favoritesCount');", - " tests['favoritesCount is an integer'] = Number.isInteger(article.favoritesCount);", - " } else {", - " tests['articlesCount is 0 when feed is empty'] = responseJSON.articlesCount === 0;", - " }", - "}", - "" - ] - } - }], - "request": { - "url": { - "raw": "{{apiUrl}}/articles?author=johnjacob", - "host": [ - "{{apiUrl}}" - ], - "path": [ - "articles" - ], - "query": [{ - "key": "author", - "value": "johnjacob" - }], - "variable": [] - }, - "method": "GET", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "" - }, - "description": "" - }, - "response": [] - }, - { - "name": "Articles Favorited by Username", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var is200Response = responseCode.code === 200;", - "", - "tests['Response code is 200 OK'] = is200Response;", - "", - "if(is200Response){", - " var responseJSON = JSON.parse(responseBody);", - " ", - " tests['Response contains \"articles\" property'] = responseJSON.hasOwnProperty('articles');", - " tests['Response contains \"articlesCount\" property'] = responseJSON.hasOwnProperty('articlesCount');", - " tests['articlesCount is an integer'] = Number.isInteger(responseJSON.articlesCount);", - "", - " if(responseJSON.articles.length){", - " var article = responseJSON.articles[0];", - "", - " tests['Article has \"title\" property'] = article.hasOwnProperty('title');", - " tests['Article has \"slug\" property'] = article.hasOwnProperty('slug');", - " tests['Article has \"body\" property'] = article.hasOwnProperty('body');", - " tests['Article has \"createdAt\" property'] = article.hasOwnProperty('createdAt');", - " tests['Article\\'s \"createdAt\" property is an ISO 8601 timestamp'] = new Date(article.createdAt).toISOString() === article.createdAt;", - " tests['Article has \"updatedAt\" property'] = article.hasOwnProperty('updatedAt');", - " tests['Article\\'s \"updatedAt\" property is an ISO 8601 timestamp'] = new Date(article.updatedAt).toISOString() === article.updatedAt;", - " tests['Article has \"description\" property'] = article.hasOwnProperty('description');", - " tests['Article has \"tagList\" property'] = article.hasOwnProperty('tagList');", - " tests['Article\\'s \"tagList\" property is an Array'] = Array.isArray(article.tagList);", - " tests['Article has \"author\" property'] = article.hasOwnProperty('author');", - " tests['Article has \"favorited\" property'] = article.hasOwnProperty('favorited');", - " tests['Article has \"favoritesCount\" property'] = article.hasOwnProperty('favoritesCount');", - " tests['favoritesCount is an integer'] = Number.isInteger(article.favoritesCount);", - " } else {", - " tests['articlesCount is 0 when feed is empty'] = responseJSON.articlesCount === 0;", - " }", - "}", - "" - ] - } - }], - "request": { - "url": { - "raw": "{{apiUrl}}/articles?favorited=jane", - "host": [ - "{{apiUrl}}" - ], - "path": [ - "articles" - ], - "query": [{ - "key": "favorited", - "value": "jane" - }], - "variable": [] - }, - "method": "GET", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "" - }, - "description": "" - }, - "response": [] - }, - { - "name": "Articles by Tag", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var is200Response = responseCode.code === 200;", - "", - "tests['Response code is 200 OK'] = is200Response;", - "", - "if(is200Response){", - " var responseJSON = JSON.parse(responseBody);", - "", - " tests['Response contains \"articles\" property'] = responseJSON.hasOwnProperty('articles');", - " tests['Response contains \"articlesCount\" property'] = responseJSON.hasOwnProperty('articlesCount');", - " tests['articlesCount is an integer'] = Number.isInteger(responseJSON.articlesCount);", - "", - " if(responseJSON.articles.length){", - " var article = responseJSON.articles[0];", - "", - " tests['Article has \"title\" property'] = article.hasOwnProperty('title');", - " tests['Article has \"slug\" property'] = article.hasOwnProperty('slug');", - " tests['Article has \"body\" property'] = article.hasOwnProperty('body');", - " tests['Article has \"createdAt\" property'] = article.hasOwnProperty('createdAt');", - " tests['Article\\'s \"createdAt\" property is an ISO 8601 timestamp'] = new Date(article.createdAt).toISOString() === article.createdAt;", - " tests['Article has \"updatedAt\" property'] = article.hasOwnProperty('updatedAt');", - " tests['Article\\'s \"updatedAt\" property is an ISO 8601 timestamp'] = new Date(article.updatedAt).toISOString() === article.updatedAt;", - " tests['Article has \"description\" property'] = article.hasOwnProperty('description');", - " tests['Article has \"tagList\" property'] = article.hasOwnProperty('tagList');", - " tests['Article\\'s \"tagList\" property is an Array'] = Array.isArray(article.tagList);", - " tests['Article has \"author\" property'] = article.hasOwnProperty('author');", - " tests['Article has \"favorited\" property'] = article.hasOwnProperty('favorited');", - " tests['Article has \"favoritesCount\" property'] = article.hasOwnProperty('favoritesCount');", - " tests['favoritesCount is an integer'] = Number.isInteger(article.favoritesCount);", - " } else {", - " tests['articlesCount is 0 when feed is empty'] = responseJSON.articlesCount === 0;", - " }", - "}", - "" - ] - } - }], - "request": { - "url": { - "raw": "{{apiUrl}}/articles?tag=dragons", - "host": [ - "{{apiUrl}}" - ], - "path": [ - "articles" - ], - "query": [{ - "key": "tag", - "value": "dragons" - }], - "variable": [] - }, - "method": "GET", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "" - }, - "description": "" - }, - "response": [] - }, - { - "name": "Single Article by slug", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var responseJSON = JSON.parse(responseBody);", - "", - "tests['Response contains \"article\" property'] = responseJSON.hasOwnProperty('article');", - "", - "var article = responseJSON.article || {};", - "", - "tests['Article has \"title\" property'] = article.hasOwnProperty('title');", - "tests['Article has \"slug\" property'] = article.hasOwnProperty('slug');", - "tests['Article has \"body\" property'] = article.hasOwnProperty('body');", - "tests['Article has \"createdAt\" property'] = article.hasOwnProperty('createdAt');", - "tests['Article\\'s \"createdAt\" property is an ISO 8601 timestamp'] = new Date(article.createdAt).toISOString() === article.createdAt;", - "tests['Article has \"updatedAt\" property'] = article.hasOwnProperty('updatedAt');", - "tests['Article\\'s \"updatedAt\" property is an ISO 8601 timestamp'] = new Date(article.updatedAt).toISOString() === article.updatedAt;", - "tests['Article has \"description\" property'] = article.hasOwnProperty('description');", - "tests['Article has \"tagList\" property'] = article.hasOwnProperty('tagList');", - "tests['Article\\'s \"tagList\" property is an Array'] = Array.isArray(article.tagList);", - "tests['Article has \"author\" property'] = article.hasOwnProperty('author');", - "tests['Article has \"favorited\" property'] = article.hasOwnProperty('favorited');", - "tests['Article has \"favoritesCount\" property'] = article.hasOwnProperty('favoritesCount');", - "tests['favoritesCount is an integer'] = Number.isInteger(article.favoritesCount);", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/articles/{{slug}}", - "method": "GET", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - } - ], - "body": {}, - "description": "" - }, - "response": [] - } - ] - }, - { - "name": "Comments", - "description": "", - "item": [{ - "name": "All Comments for Article", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var is200Response = responseCode.code === 200", - "", - "tests['Response code is 200 OK'] = is200Response;", - "", - "if(is200Response){", - " var responseJSON = JSON.parse(responseBody);", - "", - " tests['Response contains \"comments\" property'] = responseJSON.hasOwnProperty('comments');", - "", - " if(responseJSON.comments.length){", - " var comment = responseJSON.comments[0];", - "", - " tests['Comment has \"id\" property'] = comment.hasOwnProperty('id');", - " tests['Comment has \"body\" property'] = comment.hasOwnProperty('body');", - " tests['Comment has \"createdAt\" property'] = comment.hasOwnProperty('createdAt');", - " tests['\"createdAt\" property is an ISO 8601 timestamp'] = new Date(comment.createdAt).toISOString() === comment.createdAt;", - " tests['Comment has \"updatedAt\" property'] = comment.hasOwnProperty('updatedAt');", - " tests['\"updatedAt\" property is an ISO 8601 timestamp'] = new Date(comment.updatedAt).toISOString() === comment.updatedAt;", - " tests['Comment has \"author\" property'] = comment.hasOwnProperty('author');", - " }", - "}", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/articles/{{slug}}/comments", - "method": "GET", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": {}, - "description": "" - }, - "response": [] - }, - { - "name": "Create Comment for Article", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var responseJSON = JSON.parse(responseBody);", - "", - "tests['Response contains \"comment\" property'] = responseJSON.hasOwnProperty('comment');", - "", - "var comment = responseJSON.comment || {};", - "", - "tests['Comment has \"id\" property'] = comment.hasOwnProperty('id');", - "tests['Comment has \"body\" property'] = comment.hasOwnProperty('body');", - "tests['Comment has \"createdAt\" property'] = comment.hasOwnProperty('createdAt');", - "tests['\"createdAt\" property is an ISO 8601 timestamp'] = new Date(comment.createdAt).toISOString() === comment.createdAt;", - "tests['Comment has \"author\" property'] = comment.hasOwnProperty('author');", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/articles/{{slug}}/comments", - "method": "POST", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "{\"comment\":{\"body\":\"Thank you so much!\"}}" - }, - "description": "" - }, - "response": [] - }, - { - "name": "Delete Comment for Article", - "request": { - "url": "{{apiUrl}}/articles/{{slug}}/comments/1", - "method": "DELETE", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": {}, - "description": "" - }, - "response": [] - } - ] - }, - { - "name": "Profiles", - "description": "", - "item": [{ - "name": "Profile", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "if (!(environment.isIntegrationTest)) {", - "var is200Response = responseCode.code === 200;", - "", - "tests['Response code is 200 OK'] = is200Response;", - "", - "if(is200Response){", - " var responseJSON = JSON.parse(responseBody);", - "", - " tests['Response contains \"profile\" property'] = responseJSON.hasOwnProperty('profile');", - " ", - " var profile = responseJSON.profile || {};", - " ", - " tests['Profile has \"username\" property'] = profile.hasOwnProperty('username');", - " tests['Profile has \"image\" property'] = profile.hasOwnProperty('image');", - " tests['Profile has \"following\" property'] = profile.hasOwnProperty('following');", - "}", - "}", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/profiles/johnjacob", - "method": "GET", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": {}, - "description": "" - }, - "response": [] - }, - { - "name": "Follow Profile", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "if (!(environment.isIntegrationTest)) {", - "var is200Response = responseCode.code === 200;", - "", - "tests['Response code is 200 OK'] = is200Response;", - "", - "if(is200Response){", - " var responseJSON = JSON.parse(responseBody);", - "", - " tests['Response contains \"profile\" property'] = responseJSON.hasOwnProperty('profile');", - " ", - " var profile = responseJSON.profile || {};", - " ", - " tests['Profile has \"username\" property'] = profile.hasOwnProperty('username');", - " tests['Profile has \"image\" property'] = profile.hasOwnProperty('image');", - " tests['Profile has \"following\" property'] = profile.hasOwnProperty('following');", - " tests['Profile\\'s \"following\" property is true'] = profile.following === true;", - "}", - "}", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/profiles/johnjacob/follow", - "method": "POST", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "{\"user\":{\"email\":\"john@jacob.com\"}}" - }, - "description": "" - }, - "response": [] - }, - { - "name": "Unfollow Profile", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "if (!(environment.isIntegrationTest)) {", - "var is200Response = responseCode.code === 200;", - "", - "tests['Response code is 200 OK'] = is200Response;", - "", - "if(is200Response){", - " var responseJSON = JSON.parse(responseBody);", - "", - " tests['Response contains \"profile\" property'] = responseJSON.hasOwnProperty('profile');", - " ", - " var profile = responseJSON.profile || {};", - " ", - " tests['Profile has \"username\" property'] = profile.hasOwnProperty('username');", - " tests['Profile has \"image\" property'] = profile.hasOwnProperty('image');", - " tests['Profile has \"following\" property'] = profile.hasOwnProperty('following');", - " tests['Profile\\'s \"following\" property is false'] = profile.following === false;", - "}", - "}", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/profiles/johnjacob/follow", - "method": "DELETE", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": {}, - "description": "" - }, - "response": [] - } - ] - }, - { - "name": "Tags", - "description": "", - "item": [{ - "name": "All Tags", - "event": [{ - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "var is200Response = responseCode.code === 200;", - "", - "tests['Response code is 200 OK'] = is200Response;", - "", - "if(is200Response){", - " var responseJSON = JSON.parse(responseBody);", - " ", - " tests['Response contains \"tags\" property'] = responseJSON.hasOwnProperty('tags');", - " tests['\"tags\" property returned as array'] = Array.isArray(responseJSON.tags);", - "}", - "" - ] - } - }], - "request": { - "url": "{{apiUrl}}/tags", - "method": "GET", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "" - }, - "description": "" - }, - "response": [] - }] - }, - { - "name": "Cleanup", - "description": "", - "item": [{ - "name": "Delete Article", - "request": { - "url": "{{apiUrl}}/articles/{{slug}}", - "method": "DELETE", - "header": [{ - "key": "Content-Type", - "value": "application/json", - "description": "" - }, - { - "key": "X-Requested-With", - "value": "XMLHttpRequest", - "description": "" - }, - { - "key": "Authorization", - "value": "Token {{token}}", - "description": "" - } - ], - "body": { - "mode": "raw", - "raw": "" - }, - "description": "" - }, - "response": [] - }] - } - ] -} diff --git a/tests/env-api-tests.postman.json b/tests/env-api-tests.postman.json deleted file mode 100644 index f838f79..0000000 --- a/tests/env-api-tests.postman.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "id": "4aa60b52-97fc-456d-4d4f-14a350e95dff", - "name": "Conduit API Tests - Environment", - "values": [{ - "enabled": true, - "key": "apiUrl", - "value": "http://localhost:3000/api", - "type": "text" - }], - "timestamp": 1505871382668, - "_postman_variable_scope": "environment", - "_postman_exported_at": "2017-09-20T01:36:34.835Z", - "_postman_exported_using": "Postman/5.2.0" -}