From c30ceecbb1ec7177a8af8d87476fee613cb573f1 Mon Sep 17 00:00:00 2001 From: evlist Date: Thu, 9 Feb 2023 21:07:09 +0100 Subject: [PATCH] More tests and debugging putRtept --- package-lock.json | 213 +++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + src/db/gpx.test.ts | 14 ++- src/db/rte.test.ts | 49 +++++++++- src/db/rte.ts | 44 ++++----- src/db/rtept.test.ts | 81 ++++++++++++++-- src/db/rtept.ts | 20 ++-- 7 files changed, 370 insertions(+), 52 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2da9b73..fa0da15 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,6 +49,7 @@ "@types/pouchdb": "^6.4.0", "@types/proj4": "^2.5.2", "@types/shelljs": "^0.8.11", + "@vitest/ui": "^0.28.4", "jsdom": "^21.1.0", "license-checker": "^25.0.1", "license-compatibility-checker": "^0.3.5", @@ -1408,11 +1409,52 @@ "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==" }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@petamoriken/float16": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.7.1.tgz", "integrity": "sha512-oXZOc+aePd0FnhTWk15pyqK+Do87n0TyLV1nxdEougE95X/WXWDqmQobfhgnSY7QsWn5euZUWuDVeTQvoQ5VNw==" }, + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, "node_modules/@popperjs/core": { "version": "2.11.6", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", @@ -2234,6 +2276,19 @@ "tinyspy": "^1.0.2" } }, + "node_modules/@vitest/ui": { + "version": "0.28.4", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.28.4.tgz", + "integrity": "sha512-LQfCCFc17n49mwtraV9/NAWl2DUqJS/9ZEa3fqJjoYO+HowdseQ5jvWflpzliCyfrIAh6cXVo1bNzHnDXe0cbw==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.12", + "flatted": "^3.2.7", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "sirv": "^2.0.2" + } + }, "node_modules/@vitest/utils": { "version": "0.28.4", "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.28.4.tgz", @@ -3947,12 +4002,37 @@ "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -3992,6 +4072,12 @@ "micromatch": "^4.0.2" } }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -4194,6 +4280,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", @@ -4702,6 +4800,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -4711,6 +4818,18 @@ "node": ">=8" } }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -6052,6 +6171,15 @@ "url": "https://github.com/sponsors/mesqueeb" } }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/mgrs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mgrs/-/mgrs-1.0.0.tgz", @@ -6188,6 +6316,15 @@ "ufo": "^1.0.1" } }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -7145,6 +7282,26 @@ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/quick-lru": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.1.tgz", @@ -7376,6 +7533,16 @@ "lowercase-keys": "^1.0.0" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -7433,6 +7600,29 @@ "estree-walker": "^0.6.1" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/rw": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", @@ -7600,6 +7790,20 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/sirv": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", + "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -8153,6 +8357,15 @@ "node": ">=8.0" } }, + "node_modules/totalist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", + "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/tough-cookie": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", diff --git a/package.json b/package.json index 2f90c06..f6ce0ef 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "@types/pouchdb": "^6.4.0", "@types/proj4": "^2.5.2", "@types/shelljs": "^0.8.11", + "@vitest/ui": "^0.28.4", "jsdom": "^21.1.0", "license-checker": "^25.0.1", "license-compatibility-checker": "^0.3.5", diff --git a/src/db/gpx.test.ts b/src/db/gpx.test.ts index 10a434d..d925807 100644 --- a/src/db/gpx.test.ts +++ b/src/db/gpx.test.ts @@ -1,7 +1,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import shell from 'shelljs'; -import { initDb } from '.'; +import PouchDB from 'pouchdb'; + import { existsGpx, putNewGpx } from './gpx'; const test = it; @@ -67,17 +68,20 @@ describe('putNewGpx', () => { describe('The gpx module with a real db', () => { beforeEach(async () => { - await initDb({}); + globalThis.db = new PouchDB('dyomedea', { + auto_compaction: false, + }); globalThis.Date.now = () => 0; }); afterEach(async () => { try { await db.destroy(); } catch (err) { - // console.error(err); - shell.exec('rm -rf $*$'); + // console.error(err); + await shell.exec('rm -rf $*$'); } - db = undefined; + globalThis.db = undefined; + globalThis.dbReady = false; globalThis.Date.now = originalDateNow; }); diff --git a/src/db/rte.test.ts b/src/db/rte.test.ts index c8d710b..9e06646 100644 --- a/src/db/rte.test.ts +++ b/src/db/rte.test.ts @@ -1,9 +1,11 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import shell from 'shelljs'; -import { initDb } from '.'; +import PouchDB from 'pouchdb'; import { emptyRte, getRte, putNewRte, putRte } from './rte'; +import { put } from './lib'; +import { emptyWpt } from './wpt'; const test = it; const jest = vi; @@ -56,17 +58,20 @@ describe('The rte module', () => { describe('The rte module with a real db', () => { beforeEach(async () => { - await initDb({}); + globalThis.db = new PouchDB('dyomedea', { + auto_compaction: false, + }); globalThis.Date.now = () => 0; }); afterEach(async () => { try { await db.destroy(); } catch (err) { -// console.error(err); - shell.exec('rm -rf \$*\$'); + // console.error(err); + await shell.exec('rm -rf $*$'); } - db = undefined; + globalThis.db = undefined; + globalThis.dbReady = false; globalThis.Date.now = originalDateNow; }); it('can write and read a rte', async () => { @@ -97,4 +102,38 @@ describe('The rte module with a real db', () => { const rteGet = await getRte({ id }); expect(rteGet).toEqual(rte); }); + it('can read external rtepts ', async () => { + const idRte = 'gpx/4320836410265485/2rte/000034'; + const idRtept = 'gpx/4320836410265485/2rte/000034/000035'; + const rtept3: Wpt = { + $: { lat: 3, lon: 3 }, + }; + const rte0: Rte = { + name: 'A new route', + rtept: [ + { + $: { lat: 1, lon: 1 }, + }, + { + $: { lat: 2, lon: 2 }, + }, + ], + }; + const rte1: Rte = { + name: 'A new route', + rtept: [ + { + $: { lat: 1, lon: 1 }, + }, + { + $: { lat: 2, lon: 2 }, + }, + rtept3, + ], + }; + const rtePut = await putRte({ id: idRte, rte: rte0 }); + expect(rtePut).toEqual(rte0); + await put(idRtept, 'rtept', () => rtept3, emptyWpt); + expect(await getRte({ id: idRte })).toEqual(rte1); + }); }); diff --git a/src/db/rte.ts b/src/db/rte.ts index c915c78..68fa9ce 100644 --- a/src/db/rte.ts +++ b/src/db/rte.ts @@ -1,4 +1,4 @@ -import { debounce, memoize, property, wrap } from 'lodash'; +import { cloneDeep, debounce, memoize, property, wrap } from 'lodash'; import { delay } from '../lib/delay'; import getUri from '../lib/ids'; import { appendToArray, putNewGpx } from './gpx'; @@ -75,32 +75,24 @@ export const getRteDocs: ({ const { id } = params; const docs = await getFamily(id, { include_docs: true }); console.log({ caller: 'getRteDocs', id, docs }); - let target: any[]; - let rte: Rte | undefined = undefined; - docs.rows.every((row: any) => { - // level 0 - if (row.doc.type === 'rte') { - if (!!rte) { - console.error({ - caller: 'getRte', - id, - row, - target, - rte, - }); - return false; // Hack to stop if getFamily fails - } - target = [row.doc.doc]; - rte = row.doc.doc; + let rte: Rte; + if (docs.rows.length === 1) { + rte = docs.rows[0].doc.doc; + } else { + rte = cloneDeep(docs.rows[0].doc.doc); + if (!rte.rtept) { + rte.rtept = []; } - //level 1 - if (row.doc.type === 'rtept') { - target.splice(1); - // row.doc.doc.id = row.doc._id; - appendToArray(target.at(-1), row.doc.type, row.doc.doc); - target.push(row.doc.doc); - } - return true; + docs.rows.slice(1).forEach((row: any) => { + rte.rtept.push(row.doc.doc); + }); + } + console.log({ + caller: 'getRteDocs', + id, + docs, + nbRteptIn: docs.rows[0].doc.rtept?.length, + nbRteptTotal: rte?.rtept?.length, }); return { docs, rte }; }; diff --git a/src/db/rtept.test.ts b/src/db/rtept.test.ts index 9661906..0d91205 100644 --- a/src/db/rtept.test.ts +++ b/src/db/rtept.test.ts @@ -1,9 +1,11 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import shell from 'shelljs'; -import { initDb } from '.'; -import { getRte, putRte } from './rte'; +import PouchDB from 'pouchdb'; +import { getRte, compactRteOrTrksegDebounced, putRte } from './rte'; import { putRtept } from './rtept'; +import { get, getFamily, put } from './lib'; +import { emptyWpt } from './wpt'; const test = it; const jest = vi; @@ -18,22 +20,28 @@ const originalDateNow = globalThis.Date.now; describe('The rtept module with a real db', () => { beforeEach(async () => { - await initDb({}); + globalThis.db = new PouchDB('dyomedea', { + auto_compaction: false, + }); globalThis.Date.now = () => 0; + vi.mock('compactRteOrTrksegDebounced', () => { + console.log({ caller: 'mocked compactRteOrTrksegDebounced' }); + }); }); afterEach(async () => { try { await db.destroy(); } catch (err) { -// console.error(err); - shell.exec('rm -rf \$*\$'); + // console.error(err); + await shell.exec('rm -rf $*$'); } - db = undefined; + globalThis.db = undefined; + globalThis.dbReady = false; globalThis.Date.now = originalDateNow; }); it('can write a rtept inside a rte', async () => { const idRte = 'whatever'; - const rtept: Rtept = { + const rtept: Wpt = { $: { lat: 2, lon: 2 }, }; const rte0: Rte = { @@ -62,8 +70,65 @@ describe('The rtept module with a real db', () => { const rtePut = await putRte({ id: idRte, rte: rte0 }); expect(rtePut).toEqual(rte0); const rtePutRtept = await putRtept({ idRte, index: 1, rtept }); - expect(rtePutRtept).toEqual(rte1); const rteGetRtept = await getRte({ id: idRte }); expect(rteGetRtept).toEqual(rte1); }); + it('can write a rtept outside a rte', async () => { + const idRte = 'gpx/4320836410265485/2rte/000034'; + const idRtept = 'gpx/4320836410265485/2rte/000034/000035'; + const rtept3: Wpt = { + $: { lat: 3, lon: 3 }, + }; + const rtept4: Wpt = { + $: { lat: 4, lon: 4 }, + }; + const rte0: Rte = { + name: 'A new route', + rtept: [ + { + $: { lat: 1, lon: 1 }, + }, + { + $: { lat: 2, lon: 2 }, + }, + ], + }; + const rte1: Rte = { + name: 'A new route', + rtept: [ + { + $: { lat: 1, lon: 1 }, + }, + { + $: { lat: 2, lon: 2 }, + }, + rtept3, + ], + }; + const rte2: Rte = { + name: 'A new route', + rtept: [ + { + $: { lat: 1, lon: 1 }, + }, + { + $: { lat: 2, lon: 2 }, + }, + rtept4, + ], + }; + + const rtePut = await putRte({ id: idRte, rte: rte0 }); + expect(rtePut).toEqual(rte0); + await put(idRtept, 'rtept', () => rtept3, emptyWpt); + expect(await getRte({ id: idRte })).toEqual(rte1); + await putRtept({ + idRte, + index: 2, + rtept: rtept4, + }); + expect((await getFamily(idRte)).rows.length).toEqual(2); + expect(await getRte({ id: idRte })).toEqual(rte2); + expect((await get(idRtept)).doc).toEqual(rtept4); + }); }); diff --git a/src/db/rtept.ts b/src/db/rtept.ts index 0826c9b..f1adddb 100644 --- a/src/db/rtept.ts +++ b/src/db/rtept.ts @@ -26,22 +26,26 @@ export const emptyRtept: Wpt = { }; export const putRtept = async (params: any) => { - console.log({ caller: 'putRtept', params }); const { idRte, index, rtept } = params; - const { docs, rte } = await getRteDocs({ id: idRte }); + const { docs } = await getRteDocs({ id: idRte }); + const rte = docs.rows[0].doc.doc; const nbRteptInRte = rte && rte.rtept ? rte.rtept.length : 0; - console.log({ caller: 'putRtept', nbRteptInRte }); const nbRteptOutRte = docs.rows.length - 1; const nbRtept = nbRteptInRte + nbRteptOutRte; const positiveIndex = index >= 0 ? index : nbRtept - index; + // console.log({ + // caller: 'putRtept', + // nbRteptInRte, + // nbRteptOutRte, + // nbRtept, + // positiveIndex, + // }); if (positiveIndex < nbRteptInRte) { rte.rtept[positiveIndex] = rtept; await putRte({ id: idRte, rte }); } else { - let rteptIdObj = getUri('rtept', docs.rows[1].id); - rteptIdObj.rtept = rteptIdObj.rtept + positiveIndex - nbRteptInRte; - const rteptUri = getUri('rtept', rteptIdObj); - await put(rteptUri, 'rtept', () => rtept, emptyRtept); + const reptId = docs.rows[1 + positiveIndex - nbRteptInRte].doc._id; + await put(reptId, 'rtept', () => rtept, emptyRtept); } - return rte; + return rtept; };