mirror of
https://github.com/amitwh/markdown-converter.git
synced 2026-08-03 02:11:07 +05:30
76 lines
2.4 KiB
JavaScript
76 lines
2.4 KiB
JavaScript
const { SnapshotManager } = require('../src/plugins/built-in/writing-studio/snapshot-manager');
|
|
|
|
describe('SnapshotManager', () => {
|
|
let manager;
|
|
let store;
|
|
|
|
beforeEach(() => {
|
|
store = {};
|
|
manager = new SnapshotManager({
|
|
get: (key) => store[key],
|
|
set: (key, value) => {
|
|
store[key] = value;
|
|
},
|
|
});
|
|
});
|
|
|
|
test('create stores snapshot with timestamp, content, wordCount', () => {
|
|
const snap = manager.create('Hello world this is a test', 'auto');
|
|
expect(snap).toHaveProperty('id');
|
|
expect(snap.content).toBe('Hello world this is a test');
|
|
expect(snap.wordCount).toBe(6);
|
|
expect(snap.label).toBe('auto');
|
|
});
|
|
|
|
test('list returns snapshots ordered newest first', () => {
|
|
manager.create('first', 'auto');
|
|
manager.create('second', 'auto');
|
|
const list = manager.list();
|
|
expect(list.length).toBe(2);
|
|
expect(list[0].content).toBe('second');
|
|
});
|
|
|
|
test('getById returns specific snapshot', () => {
|
|
const snap = manager.create('find me', 'manual');
|
|
const found = manager.getById(snap.id);
|
|
expect(found.content).toBe('find me');
|
|
});
|
|
|
|
test('getById returns null for missing id', () => {
|
|
expect(manager.getById('nope')).toBeNull();
|
|
});
|
|
|
|
test('restore returns content of snapshot', () => {
|
|
const snap = manager.create('restore this', 'manual');
|
|
expect(manager.restore(snap.id)).toBe('restore this');
|
|
});
|
|
|
|
test('restore throws for missing snapshot', () => {
|
|
expect(() => manager.restore('nope')).toThrow('Snapshot not found');
|
|
});
|
|
|
|
test('delete removes a snapshot', () => {
|
|
const snap = manager.create('delete me', 'auto');
|
|
manager.delete(snap.id);
|
|
expect(manager.getById(snap.id)).toBeNull();
|
|
});
|
|
|
|
test('diff returns added/removed line counts', () => {
|
|
const snap = manager.create('line one\nline two\nline three', 'auto');
|
|
const result = manager.diff(snap.id, 'line one\nline modified\nline three\nline four');
|
|
expect(result.added).toBe(2);
|
|
expect(result.removed).toBe(1);
|
|
});
|
|
|
|
test('diff throws for missing snapshot', () => {
|
|
expect(() => manager.diff('nope', 'new content')).toThrow('Snapshot not found');
|
|
});
|
|
|
|
test('prune keeps only the N most recent snapshots', () => {
|
|
for (let i = 0; i < 10; i++) manager.create('snap ' + i, 'auto');
|
|
manager.prune(5);
|
|
expect(manager.list().length).toBe(5);
|
|
expect(manager.list()[0].content).toBe('snap 9');
|
|
});
|
|
});
|