Files
Desktop/ts/test-electron/sql/getMostRecentAttachmentUploadData_test.preload.ts
2026-02-24 12:58:17 -05:00

145 lines
4.0 KiB
TypeScript

// Copyright 2026 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { assert } from 'chai';
import { v4 as generateUuid } from 'uuid';
import { DataReader, DataWriter } from '../../sql/Client.preload.js';
import { generateAci } from '../../types/ServiceId.std.js';
import type { MessageAttributesType } from '../../model-types.d.ts';
import { postSaveUpdates } from '../../util/cleanup.preload.js';
import { IMAGE_JPEG } from '../../types/MIME.std.js';
import { testPlaintextHash } from '../../test-helpers/attachments.node.js';
const { getMostRecentAttachmentUploadData } = DataReader;
const { removeAll, saveMessages } = DataWriter;
describe('sql/getMostRecentAttachmentUploadData', () => {
const ourAci = generateAci();
const now = Date.now();
beforeEach(async () => {
await removeAll();
});
function composeMessage(
attachments: MessageAttributesType['attachments']
): MessageAttributesType {
return {
id: generateUuid(),
type: 'incoming',
conversationId: generateUuid(),
sent_at: now,
received_at: now,
timestamp: now,
attachments,
};
}
it('returns undefined when no attachment matches the plaintextHash', async () => {
const result = await getMostRecentAttachmentUploadData('nonexistent-hash');
assert.isUndefined(result);
});
it('returns CDN upload data for a matching attachment', async () => {
const plaintextHash = testPlaintextHash();
await saveMessages(
[
composeMessage([
{
size: 128,
contentType: IMAGE_JPEG,
plaintextHash,
key: 'test-key',
digest: 'test-digest',
cdnKey: 'cdn-key-1',
cdnNumber: 3,
uploadTimestamp: now,
incrementalMac: 'test-incremental-mac',
chunkSize: 256,
},
]),
],
{ forceSave: true, ourAci, postSaveUpdates }
);
const result = await getMostRecentAttachmentUploadData(plaintextHash);
assert.deepStrictEqual(result, {
key: 'test-key',
digest: 'test-digest',
cdnKey: 'cdn-key-1',
cdnNumber: 3,
uploadTimestamp: now,
incrementalMac: 'test-incremental-mac',
chunkSize: 256,
});
});
it('returns undefined when a matching attachment lacks CDN fields', async () => {
const plaintextHash = testPlaintextHash();
await saveMessages(
[
composeMessage([
{
size: 128,
contentType: IMAGE_JPEG,
plaintextHash,
key: 'test-key',
digest: 'test-digest',
// No cdnKey, cdnNumber, or uploadTimestamp
},
]),
],
{ forceSave: true, ourAci, postSaveUpdates }
);
const result = await getMostRecentAttachmentUploadData(plaintextHash);
assert.isUndefined(result);
});
it('returns the most recently uploaded entry when multiple attachments share a plaintextHash', async () => {
const plaintextHash = testPlaintextHash();
await saveMessages(
[
composeMessage([
{
size: 128,
contentType: IMAGE_JPEG,
plaintextHash,
key: 'older-key',
digest: 'older-digest',
cdnKey: 'older-cdn-key',
cdnNumber: 3,
uploadTimestamp: now - 1000,
},
]),
composeMessage([
{
size: 128,
contentType: IMAGE_JPEG,
plaintextHash,
key: 'newer-key',
digest: 'newer-digest',
cdnKey: 'newer-cdn-key',
cdnNumber: 3,
uploadTimestamp: now,
},
]),
],
{ forceSave: true, ourAci, postSaveUpdates }
);
const result = await getMostRecentAttachmentUploadData(plaintextHash);
assert.deepStrictEqual(result, {
key: 'newer-key',
digest: 'newer-digest',
cdnKey: 'newer-cdn-key',
cdnNumber: 3,
uploadTimestamp: now,
incrementalMac: null,
chunkSize: null,
});
});
});