import { v4 as uuidv4 } from 'uuid'; import { addPendingTask, getPendingTasks, updatePendingTask } from '..'; import { generateMessage } from '../../../mock-builders/generator/message'; import { BetterSqlite } from '../../../test-utils/BetterSqlite'; import { SqliteClient } from '../../SqliteClient'; describe('updatePendingTask', () => { beforeEach(async () => { await SqliteClient.initializeDatabase(); await BetterSqlite.openDB(); }); afterEach(() => { BetterSqlite.dropAllTables(); BetterSqlite.closeDB(); jest.clearAllMocks(); }); it('should replace an existing pending task row by id without changing its createdAt ordering', async () => { const channelId = uuidv4(); const originalMessage = generateMessage({ cid: `messaging:${channelId}`, id: uuidv4(), text: 'original text', }); await addPendingTask({ channelId, channelType: 'messaging', messageId: originalMessage.id, payload: [originalMessage, {}], type: 'send-message', }); const [originalRow] = await BetterSqlite.selectFromTable('pendingTasks'); const [originalTask] = await getPendingTasks({ messageId: originalMessage.id }); const editedMessage = { ...originalMessage, text: 'edited text', }; await updatePendingTask({ id: originalTask.id, task: { channelId, channelType: 'messaging', messageId: originalMessage.id, payload: [editedMessage, {}], type: 'send-message', }, }); const [updatedRow] = await BetterSqlite.selectFromTable('pendingTasks'); const [updatedTask] = await getPendingTasks({ messageId: originalMessage.id }); expect(updatedRow.id).toBe(originalRow.id); expect(updatedRow.createdAt).toBe(originalRow.createdAt); expect(updatedRow.type).toBe('send-message'); expect(JSON.parse(updatedRow.payload)[0].text).toBe('edited text'); expect(updatedTask.id).toBe(originalTask.id); expect(updatedTask.type).toBe('send-message'); expect(updatedTask.payload[0].text).toBe('edited text'); }); });