SourceR85 commented on code in PR #9166:
URL: https://github.com/apache/pouchdb/pull/9166#discussion_r2643334682
##########
tests/unit/test.checkpointer.js:
##########
@@ -0,0 +1,354 @@
+"use strict";
+
+require("chai").should();
+
+var PouchDB = require("../../packages/node_modules/pouchdb-for-coverage");
+var Checkpointer = require("../../packages/node_modules/pouchdb-checkpointer");
+var memdown = require("memdown");
+
+var genReplicationId = PouchDB.utils.generateReplicationId;
+var sourceDb = new PouchDB({ name: "local_test_db", db: memdown });
+var targetDb = new PouchDB({ name: "target_test_db", db: memdown });
+
+describe("test.checkpointer.js", () => {
+ it("create checkpointer instance", async () => {
+ const checkpointer = await createCheckpointer();
+
+ checkpointer.src.name.should.equal("local_test_db");
+ checkpointer.target.name.should.equal("target_test_db");
+ checkpointer.opts.writeSourceCheckpoint.should.be.true;
+ checkpointer.opts.writeTargetCheckpoint.should.be.true;
+ checkpointer.id.startsWith("_local/").should.be.true;
+ });
+
+ it("write and retrieve checkpoint doc to/from src and target db", async ()
=> {
+ const checkpointer = await createCheckpointer();
+
+ const result = await checkpointer.writeCheckpoint(1, "session-1");
+ // { ok: true, id: '_local/1DB6QfM3RDEOFoOwE65CpQ==', rev: '0-1' }
+ result.ok.should.equal(true);
+ result.rev.should.equal("0-1");
+
+ //get checkpoint doc from source and target db by id
+ let { srcDoc, tgtDoc } = await getCheckpointDocs(checkpointer.id);
+
+ srcDoc._rev.should.equal("0-1");
+ tgtDoc._rev.should.equal("0-1");
+ srcDoc._id.should.equal(checkpointer.id);
+ tgtDoc._id.should.equal(checkpointer.id);
+ srcDoc.history.length.should.equal(1);
+ srcDoc.last_seq.should.equal(srcDoc.history[0].last_seq);
+ });
+
+ it("update: new checkpoint with next replication session", async () => {
+ const checkpointer = await createCheckpointer();
+ await checkpointer.writeCheckpoint(1, "session-1");
+
+ const update = await checkpointer.writeCheckpoint(2, "session-2");
+ update.ok.should.equal(true);
+ update.rev.should.equal("0-2");
+
+ let { srcDoc, tgtDoc } = await getCheckpointDocs(checkpointer.id);
+
+ srcDoc.last_seq.should.equal(2);
+ tgtDoc.last_seq.should.equal(2);
+ srcDoc.history.length.should.equal(2);
+ srcDoc.history[0].session_id.should.equal("session-2");
+ });
+
+ it("update: don't update if checkpoint hasn't changed", async () => {
+ const checkpointer = await createCheckpointer();
+ await checkpointer.writeCheckpoint(1, "session-1");
+
+ // attempt to update with the same checkpoint number
+ // -> returns undefined
+ await checkpointer.writeCheckpoint(1, "session-2");
+ let { srcDoc, tgtDoc } = await getCheckpointDocs(checkpointer.id);
+
+ srcDoc.last_seq.should.equal(1);
+ srcDoc.history.length.should.equal(1);
+ tgtDoc.last_seq.should.equal(1);
+ tgtDoc.history.length.should.equal(1);
+ srcDoc.history[0].session_id.should.equal("session-1");
+ tgtDoc.history[0].session_id.should.equal("session-1");
+ });
+
+ it("update: only keep one history entry per replication session", async ()
=> {
+ const checkpointer = await createCheckpointer();
+ await checkpointer.writeCheckpoint(1, "session-1");
+
+ let { srcDoc, tgtDoc } = await getCheckpointDocs(checkpointer.id);
+ srcDoc.last_seq.should.equal(1);
+ srcDoc.history.length.should.equal(1);
+ tgtDoc.last_seq.should.equal(1);
+ tgtDoc.history.length.should.equal(1);
+
+ // update changed checkpoint with the same sessionId as before
+ const update = await checkpointer.writeCheckpoint(2, "session-1");
+ update.ok.should.equal(true);
+ update.rev.should.equal("0-2");
+
+ // update should have replaced the history entry with that sessionId
+ ({ srcDoc, tgtDoc } = await getCheckpointDocs(checkpointer.id));
Review Comment:
Destructured object assignments are invalid without surrounding parentheses.
(Not the case with array destructuring)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring#syntax
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]