read-revisions.test.mjs 1.8 KB

12345678910111213141516171819
  1. import {test} from 'node:test';import assert from 'node:assert/strict';import {PGlite} from '@electric-sql/pglite';import {readFileSync,existsSync} from 'node:fs';
  2. const file=new URL('../sql/read-revisions.sql',import.meta.url);
  3. test('revisions follow insert/update/delete/tenant moves and rollback across all source writers',async()=>{
  4. assert.ok(existsSync(file),'revision migration exists');const db=new PGlite();
  5. try{
  6. await db.exec('CREATE TABLE "LessonRecord"(company text,id int);CREATE TABLE "_User"(company text,id int);');
  7. await db.exec(readFileSync(file,'utf8'));
  8. const version=async co=>(await db.query('SELECT xs_read_version($1,$2) v',[co,'lessons'])).rows[0].v;
  9. const initial=await version('a');await db.exec("INSERT INTO \"LessonRecord\" VALUES('a',1),('a',2)");assert.notEqual(await version('a'),initial);
  10. const before=await version('a');await db.exec("BEGIN;UPDATE \"LessonRecord\" SET id=3;ROLLBACK");assert.equal(await version('a'),before);
  11. await db.exec("UPDATE \"LessonRecord\" SET company='b' WHERE id=1");assert.notEqual(await version('a'),before);assert.notEqual(await version('b'),'0');
  12. const b=await version('b');await db.exec("DELETE FROM \"LessonRecord\" WHERE company='b'");assert.notEqual(await version('b'),b);
  13. const a=await version('a');await db.exec("UPDATE \"_User\" SET id=2");assert.equal(await version('a'),a);
  14. await db.exec("INSERT INTO \"_User\" VALUES('a',10)");assert.notEqual(await version('a'),a);
  15. const last=await version('a');await db.exec('TRUNCATE "LessonRecord"');assert.notEqual(await version('a'),last);
  16. const stable=await version('a');await db.exec('SELECT xs_prune_read_revisions()');assert.equal(await version('a'),stable);
  17. await db.exec(readFileSync(file,'utf8'));assert.equal(typeof await version('a'),'string');
  18. }finally{await db.close();}
  19. });