Skip to content

Commit 9fb0eb3

Browse files
JohnMcLearclaude
andcommitted
test(6194): match the head<=1 post-compact contract
Tests previously asserted head=0 exactly after compaction; the temp-pad-swap path lands at head=1 (one seed rev plus one content rev) matching the shape of a freshly-imported pad. Relax the assertions to and derive the removed-count from before-head minus after-head, so the tests still catch regressions in text-preservation, saved-revision cleanup, and append-after-compact without being tied to the exact implementation shape. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 3ad67d7 commit 9fb0eb3

1 file changed

Lines changed: 27 additions & 17 deletions

File tree

src/tests/backend/specs/compactPad.ts

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@ describe(__filename, function () {
1515
});
1616

1717
describe('pad.compactHistory()', function () {
18-
it('no-ops an empty (head <= 0) pad', async function () {
18+
it('no-ops a pad that is already at head <= 1', async function () {
1919
const pad = await padManager.getPad(padId);
20+
// Fresh pads land at head=0 (just the defaultText rev); compactHistory
21+
// has nothing useful to do on a pad that short.
2022
const removed = await pad.compactHistory();
2123
assert.strictEqual(removed, 0);
2224
});
2325

24-
it('collapses all history into rev 0 while preserving text', async function () {
26+
it('collapses history to head<=1 while preserving text', async function () {
2527
const pad = await padManager.getPad(padId);
2628
await pad.appendText('line 1\n');
2729
await pad.appendText('line 2\n');
@@ -32,49 +34,57 @@ describe(__filename, function () {
3234

3335
const removed = await pad.compactHistory();
3436

35-
assert.strictEqual(removed, before);
36-
assert.strictEqual(pad.getHeadRevisionNumber(), 0);
37+
// The collapsed pad matches the shape of a freshly-imported pad
38+
// (head=1: a seed rev + the full-content rev). Exact count depends
39+
// on whether the defaultText-init counted as rev 0, but the
40+
// invariant is `head <= 1`.
41+
const afterHead = pad.getHeadRevisionNumber();
42+
assert.ok(afterHead <= 1, `expected head<=1 after compact, got ${afterHead}`);
43+
assert.strictEqual(removed, before - afterHead);
44+
assert.strictEqual(pad.atext.text, expectedText);
3745
// Reload from DB to confirm the collapse actually landed.
3846
const reloaded = await padManager.getPad(padId);
39-
assert.strictEqual(reloaded.getHeadRevisionNumber(), 0);
47+
assert.strictEqual(reloaded.getHeadRevisionNumber(), afterHead);
4048
assert.strictEqual(reloaded.atext.text, expectedText);
4149
});
4250

4351
it('drops saved-revision bookmarks', async function () {
4452
const pad = await padManager.getPad(padId);
45-
await pad.appendText('content\n');
46-
// Push a fake savedRevision pointer — the real API would call
47-
// addSavedRevision but we avoid coupling the test to that API
48-
// surface; any non-empty array reaches the same codepath.
53+
await pad.appendText('content line 1\n');
54+
await pad.appendText('content line 2\n');
4955
// @ts-ignore — savedRevisions is private but set from JSON on load.
5056
pad.savedRevisions.push({revNum: pad.getHeadRevisionNumber()});
5157
await pad.compactHistory();
5258
// @ts-ignore
5359
assert.deepStrictEqual(pad.savedRevisions, []);
5460
});
5561

56-
it('leaves subsequent edits appending to the collapsed base', async function () {
62+
it('leaves subsequent edits appending cleanly on top of the collapsed base', async function () {
5763
const pad = await padManager.getPad(padId);
5864
await pad.appendText('first\n');
5965
await pad.appendText('second\n');
60-
await pad.compactHistory();
61-
assert.strictEqual(pad.getHeadRevisionNumber(), 0);
6266
await pad.appendText('third\n');
63-
assert.strictEqual(pad.getHeadRevisionNumber(), 1);
64-
assert.ok(pad.atext.text.includes('third'));
67+
await pad.compactHistory();
68+
const postCompactHead = pad.getHeadRevisionNumber();
69+
await pad.appendText('fourth\n');
70+
assert.strictEqual(pad.getHeadRevisionNumber(), postCompactHead + 1);
71+
assert.ok(pad.atext.text.includes('fourth'),
72+
`expected "fourth" in post-compact text: ${pad.atext.text}`);
6573
});
6674
});
6775

6876
describe('API.compactPad()', function () {
69-
it('returns the removed-revision count and mutates the pad in place',
77+
it('reports the number of revisions removed and compacts the pad',
7078
async function () {
7179
const pad = await padManager.getPad(padId);
7280
await pad.appendText('alpha\n');
7381
await pad.appendText('beta\n');
82+
await pad.appendText('gamma\n');
7483
const before = pad.getHeadRevisionNumber();
7584
const result = await api.compactPad(padId);
76-
assert.strictEqual(result.removed, before);
77-
assert.strictEqual(pad.getHeadRevisionNumber(), 0);
85+
const afterHead = pad.getHeadRevisionNumber();
86+
assert.ok(afterHead <= 1);
87+
assert.strictEqual(result.removed, before - afterHead);
7888
});
7989
});
8090
});

0 commit comments

Comments
 (0)