feat(trash): NoteRepository.trash with pending_jobs cleanup (#4 v0.2.3)
This commit is contained in:
@@ -215,3 +215,34 @@ describe('NoteRepository', () => {
|
||||
expect(n).toBeGreaterThanOrEqual(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe('NoteRepository.trash', () => {
|
||||
let db: Database.Database;
|
||||
let repo: NoteRepository;
|
||||
|
||||
beforeEach(() => {
|
||||
db = new Database(':memory:');
|
||||
runMigrations(db);
|
||||
repo = new NoteRepository(db);
|
||||
});
|
||||
|
||||
it('sets deleted_at and removes pending_jobs row atomically', () => {
|
||||
const { id } = repo.create({ rawText: 'x' });
|
||||
expect(db.prepare('SELECT COUNT(*) AS c FROM pending_jobs WHERE note_id=?').get(id)).toMatchObject({ c: 1 });
|
||||
repo.trash(id, '2026-05-01T12:00:00.000Z');
|
||||
const note = repo.findById(id)!;
|
||||
expect(note.deletedAt).toBe('2026-05-01T12:00:00.000Z');
|
||||
expect(db.prepare('SELECT COUNT(*) AS c FROM pending_jobs WHERE note_id=?').get(id)).toMatchObject({ c: 0 });
|
||||
});
|
||||
|
||||
it('updates updated_at to deletedAt timestamp', () => {
|
||||
const { id } = repo.create({ rawText: 'x' });
|
||||
repo.trash(id, '2026-05-01T12:00:00.000Z');
|
||||
const note = repo.findById(id)!;
|
||||
expect(note.updatedAt).toBe('2026-05-01T12:00:00.000Z');
|
||||
});
|
||||
|
||||
it('is no-op when note does not exist', () => {
|
||||
expect(() => repo.trash('nonexistent', '2026-05-01T12:00:00.000Z')).not.toThrow();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user