mirror of
https://github.com/signalapp/Signal-Desktop.git
synced 2025-12-20 10:19:08 +00:00
139 lines
2.8 KiB
TypeScript
139 lines
2.8 KiB
TypeScript
// Copyright 2025 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
import { assert } from 'chai';
|
|
|
|
import { type WritableDB } from '../../sql/Interface.std.js';
|
|
import {
|
|
createDB,
|
|
getTableData,
|
|
insertData,
|
|
updateToVersion,
|
|
} from './helpers.node.js';
|
|
|
|
type ConversationRow = {
|
|
id: string;
|
|
json: {
|
|
username?: string;
|
|
needsStorageServiceSync?: boolean;
|
|
};
|
|
};
|
|
describe('SQL/updateToSchemaVersion1600', () => {
|
|
let db: WritableDB;
|
|
|
|
beforeEach(() => {
|
|
db = createDB();
|
|
updateToVersion(db, 1590);
|
|
});
|
|
afterEach(() => {
|
|
db.close();
|
|
});
|
|
|
|
it('deduplicates usernames based on most recent active_at', () => {
|
|
insertData(db, 'conversations', [
|
|
{
|
|
id: 'convo1',
|
|
type: 'private',
|
|
active_at: 1,
|
|
json: {
|
|
username: 'username1',
|
|
},
|
|
},
|
|
{
|
|
id: 'convo2',
|
|
type: 'private',
|
|
active_at: 2,
|
|
json: {
|
|
username: 'username1',
|
|
},
|
|
},
|
|
{
|
|
id: 'convo3',
|
|
type: 'private',
|
|
active_at: null,
|
|
json: {
|
|
username: 'username1',
|
|
},
|
|
},
|
|
{
|
|
id: 'convo4',
|
|
type: 'private',
|
|
active_at: 4,
|
|
json: {
|
|
username: 'username2',
|
|
},
|
|
},
|
|
{
|
|
id: 'convo5',
|
|
type: 'private',
|
|
active_at: 5,
|
|
json: {
|
|
username: 'username2',
|
|
},
|
|
},
|
|
{
|
|
id: 'convo6',
|
|
type: 'private',
|
|
active_at: 6,
|
|
json: {
|
|
username: 'username3',
|
|
},
|
|
},
|
|
{
|
|
id: 'convo7',
|
|
type: 'private',
|
|
active_at: 7,
|
|
json: {},
|
|
},
|
|
]);
|
|
|
|
updateToVersion(db, 1600);
|
|
|
|
assert.deepStrictEqual(
|
|
(getTableData(db, 'conversations') as Array<ConversationRow>)
|
|
.sort((a, b) => a.id.localeCompare(b.id))
|
|
.map(({ id, json }) => ({
|
|
id,
|
|
username: json.username,
|
|
needsStorageServiceSync: json.needsStorageServiceSync,
|
|
})),
|
|
[
|
|
{
|
|
id: 'convo1',
|
|
username: undefined,
|
|
needsStorageServiceSync: true,
|
|
},
|
|
{
|
|
id: 'convo2',
|
|
username: 'username1',
|
|
needsStorageServiceSync: undefined,
|
|
},
|
|
{
|
|
id: 'convo3',
|
|
username: undefined,
|
|
needsStorageServiceSync: true,
|
|
},
|
|
{
|
|
id: 'convo4',
|
|
username: undefined,
|
|
needsStorageServiceSync: true,
|
|
},
|
|
{
|
|
id: 'convo5',
|
|
username: 'username2',
|
|
needsStorageServiceSync: undefined,
|
|
},
|
|
{
|
|
id: 'convo6',
|
|
username: 'username3',
|
|
needsStorageServiceSync: undefined,
|
|
},
|
|
{
|
|
id: 'convo7',
|
|
username: undefined,
|
|
needsStorageServiceSync: undefined,
|
|
},
|
|
]
|
|
);
|
|
});
|
|
});
|