feat: add conversation image previews and sharing
This commit is contained in:
1 parent
488145340d
commit
b573b88b08
20 files changed
+634
-26
No files matched your search
@@ -81,6 +81,54 @@ describe('MediaLibraryExchangeService', () => {
|
||||
expect(chat.sendChatImage).toHaveBeenCalledOnce();
|
||||
db.close();
|
||||
});
|
||||
|
||||
it('lists eligible choices and sends only the operator-selected matching asset', async () => {
|
||||
const db = createTestDb();
|
||||
const repository = new MediaLibraryRepository(db);
|
||||
await addAsset(repository, directory, 'selfie-one', ['selfie'], 'sfw', 1);
|
||||
await addAsset(repository, directory, 'selfie-two', ['selfie'], 'sfw', 2);
|
||||
await addAsset(repository, directory, 'topless', ['topless'], 'nsfw', 3);
|
||||
const chat = {
|
||||
sendChatImage: vi.fn().mockResolvedValue({ eventId: '$selected', mxcUri: 'mxc://selected' }),
|
||||
sendChatMessage: vi.fn().mockResolvedValue(true),
|
||||
};
|
||||
const service = new MediaLibraryExchangeService(repository, chat, logger(), 'account', directory);
|
||||
|
||||
expect(service.listShareable('room', 'send a selfie').assets.map((asset) => asset.id)).toEqual([
|
||||
'selfie-two', 'selfie-one',
|
||||
]);
|
||||
expect(await service.handleSelected('room', '$request', 'send a selfie', 'topless')).toMatchObject({
|
||||
kind: 'human-required',
|
||||
});
|
||||
expect(await service.handleSelected('room', '$request', 'send a selfie', 'selfie-one')).toMatchObject({
|
||||
kind: 'sent', assetId: 'selfie-one', requestKind: 'selfie',
|
||||
});
|
||||
expect(chat.sendChatImage).toHaveBeenCalledWith(
|
||||
'room', expect.objectContaining({ fileName: 'selfie-one.jpg' }), expect.any(String), null,
|
||||
);
|
||||
db.close();
|
||||
});
|
||||
|
||||
it('keeps an image-only partial delivery human-required on later attempts', async () => {
|
||||
const db = createTestDb();
|
||||
const repository = new MediaLibraryRepository(db);
|
||||
await addAsset(repository, directory, 'selfie', ['selfie'], 'sfw', 1);
|
||||
const chat = {
|
||||
sendChatImage: vi.fn().mockResolvedValue({ eventId: '$image', mxcUri: 'mxc://image' }),
|
||||
sendChatMessage: vi.fn().mockResolvedValue(false),
|
||||
};
|
||||
const service = new MediaLibraryExchangeService(repository, chat, logger(), 'account', directory);
|
||||
|
||||
await expect(service.handleSelected('room', '$request', 'send a selfie', 'selfie')).resolves.toMatchObject({
|
||||
kind: 'human-required', remoteSent: true,
|
||||
});
|
||||
await expect(service.handleSelected('room', '$request', 'send a selfie', 'selfie')).resolves.toMatchObject({
|
||||
kind: 'human-required', remoteSent: true,
|
||||
});
|
||||
expect(chat.sendChatImage).toHaveBeenCalledOnce();
|
||||
expect(chat.sendChatMessage).toHaveBeenCalledOnce();
|
||||
db.close();
|
||||
});
|
||||
});
|
||||
|
||||
async function addAsset(
|
||||
|
||||
Reference in new issue
Block a user