Ctrl K
ComunidadGuías…

test/knowledge-db-storage-compatibility.test.js

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
var test = require("node:test");
var assert = require("node:assert/strict");
var fs = require("fs");
var os = require("os");
var path = require("path");
var child = require("child_process");
var legacy = require("./fixtures/knowledge-db-legacy-aggregate.json");
var modulePath = path.resolve(__dirname, "../lib/knowledge-db-service.js");

test("default adapter reopens original 76abe088 aggregates without migrating ids, history, receipts or mappings", async function (t) {
  var root = fs.mkdtempSync(path.join(os.tmpdir(), "clay-adapter-legacy-read-"));
  var backup = fs.mkdtempSync(path.join(os.tmpdir(), "clay-adapter-legacy-backup-"));
  t.after(function () { fs.rmSync(root, { recursive: true, force: true }); fs.rmSync(backup, { recursive: true, force: true }); });
  var actualNow = Date.now; Date.now = function () { return legacy.clock; }; t.after(function () { Date.now = actualNow; });
  var directory = path.join(root, "knowledge", ".clay-db"); fs.mkdirSync(directory, { recursive: true });
  // These snapshots were generated by the unmodified service at sourceCommit.
  // Persist its existing JSON-lines aggregate representation, not a new adapter format.
  var filename = path.join(directory, "databases.db"); fs.writeFileSync(filename, legacy.databases.map(function (value) { return JSON.stringify(value); }).join("\n") + "\n");
  assert.equal(legacy.sourceCommit, "76abe088");
  var create = require("../lib/knowledge-db-service").createKnowledgeDbService;
  var service = create({ projectDir: root }); assert.equal(service.hasStore(), true); assert.equal(service.isReady(), false); assert.equal(await service.initialize(), undefined);
  var adapter = require("../lib/knowledge-db-storage-nedb").createKnowledgeDbNedbStorage({ projectDir: root });
  var before = legacy.databases[0]; assert.deepEqual(await adapter.get(before._id), before);
  assert.equal(service.listCached({}).databases[0].recordCount, 1); assert.equal((await service.read({ databaseId: before._id })).database.name, "Legacy renamed");
  var first = await service.readRecord({ databaseId: before._id, recordId: legacy.firstId }); assert.equal(first.record.values.fld_notes00, "Human correction"); assert.equal(first.history.length, 1); assert.equal(first.record.revision, 2);
  var second = await service.readRecord({ databaseId: before._id, recordId: legacy.secondId }); assert.ok(second.record.archivedAt); assert.equal(second.history.length, 1);
  var replay = await service.importRecords(legacy.originalImportArgs); assert.equal(replay.createdCount, 2); assert.equal(replay.mappings[0].recordId, legacy.firstId);
  assert.deepEqual(await adapter.get(before._id), before);
  var progress = await service.readImportProgress({ databaseId: before._id, sourceNamespace: "legacy" }); assert.equal(progress.total, 2); assert.deepEqual(progress.mappings.map(function (item) { return item.recordId; }), [legacy.firstId, legacy.secondId]);
  var fresh = await service.importRecords(Object.assign({}, legacy.originalImportArgs, { expectedDatabaseRevision: before.revision, operationId: "fresh_" + legacy.clock + "_compatibility" })); assert.equal(fresh.createdCount, 0); assert.equal(fresh.databaseRevision, before.revision);
  var corrected = await service.updateRecord({ databaseId: before._id, recordId: legacy.firstId, expectedRevision: 2, values: { fld_notes00: "Second correction" }, operationId: "edit_" + legacy.clock + "_compatibility" }); assert.equal(corrected.record.revision, 3);
  var after = await adapter.get(before._id); assert.equal(after.recordHistory[legacy.firstId].length, 2); assert.deepEqual(after.databaseHistory, before.databaseHistory); assert.deepEqual(after.importMappings, before.importMappings);
  assert.ok(after.receipts.some(function (receipt) { return receipt.operationId === legacy.originalImportArgs.operationId; }));
  fs.cpSync(path.join(root, "knowledge"), path.join(backup, "knowledge"), { recursive: true });
  var script = 'var assert=require("assert/strict");var fixture=JSON.parse(process.argv[3]);Date.now=function(){return fixture.clock;};var service=require(process.argv[1]).createKnowledgeDbService({projectDir:process.argv[2]});(async function(){assert.equal(await service.initialize(),undefined);var record=await service.readRecord({databaseId:fixture.originalImportArgs.databaseId,recordId:fixture.firstId});assert.equal(record.record.values.fld_notes00,"Second correction");assert.equal(record.history.length,2);assert.ok((await service.readRecord({databaseId:fixture.originalImportArgs.databaseId,recordId:fixture.secondId})).record.archivedAt);var replay=await service.importRecords(fixture.originalImportArgs);assert.equal(replay.createdCount,2);assert.equal(replay.mappings[0].recordId,fixture.firstId);process.stdout.write("compatible");})().catch(function(e){console.error(e);process.exit(1);});';
  assert.equal(child.execFileSync(process.execPath, ["-e", script, modulePath, backup, JSON.stringify(legacy)], { encoding: "utf8" }), "compatible");
});