signal-desktop/ts/test-node/sql/migration_90_test.ts
2024-07-22 11:16:33 -07:00

106 lines
2.7 KiB
TypeScript

// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { assert } from 'chai';
import type { WritableDB } from '../../sql/Interface';
import { createDB, updateToVersion, insertData, getTableData } from './helpers';
describe('SQL/updateToSchemaVersion90', () => {
let db: WritableDB;
beforeEach(() => {
db = createDB();
});
afterEach(() => {
db.close();
});
it('should delete screenshot.data but leave remainder', () => {
updateToVersion(db, 89);
insertData(db, 'messages', [
{
id: 'message_with_screenshot_data',
json: {
id: 'message_with_screenshot_data',
storyReplyContext: {
attachment: {
contentType: 'video/mp4',
filename: 'filename',
path: 'path',
screenshot: {
contentType: 'image/png',
path: 'screenshotPath',
width: 1920,
height: 1080,
},
screenshotData: {
'4389410': 144,
'4389411': 255,
'4389412': 75,
'4389413': 168,
'4389414': 81,
'4389415': 142,
'4389416': 120,
'4389417': 150,
'4389418': 14,
},
size: 100,
},
messageId: 'story_id',
},
},
storyId: 'story_id',
},
]);
updateToVersion(db, 90);
assert.deepStrictEqual(
getTableData(db, 'messages').map(msg => msg.json),
[
{
id: 'message_with_screenshot_data',
storyReplyContext: {
attachment: {
contentType: 'video/mp4',
filename: 'filename',
path: 'path',
screenshot: {
contentType: 'image/png',
path: 'screenshotPath',
width: 1920,
height: 1080,
},
size: 100,
},
messageId: 'story_id',
},
},
]
);
});
it('should use storyId index', () => {
updateToVersion(db, 90);
const details = db
.prepare(
`
EXPLAIN QUERY PLAN
UPDATE messages
SET json = json_remove(json, '$.storyReplyContext.attachment.screenshotData')
WHERE isStory = 0
AND storyId > '0'
AND json->'storyReplyContext.attachment.screenshotData' IS NOT NULL;
`
)
.all()
.map(({ detail }) => detail)
.join('\n');
assert.include(details, 'USING INDEX messages_by_storyId');
assert.notInclude(details, 'SCAN');
});
});