fix: Bug - Sending files and attachment issues
Hydrate playable media after disk receive, relay file-announce to sibling devices via account_sync, bind DM attachments to pre-allocated message ids, and improve gallery retry/cancel UX with bounded parallel auto-downloads. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -85,6 +85,61 @@ test.describe('Multi-device attachment sharing', () => {
|
||||
await expect(getButton.first()).toBeVisible({ timeout: 20_000 });
|
||||
});
|
||||
});
|
||||
|
||||
test('relays file-announce metadata to a sibling device that is already online during upload', async ({
|
||||
createClient
|
||||
}) => {
|
||||
const suffix = uniqueMultiDeviceName('attach-online');
|
||||
const credentials = {
|
||||
username: `online_${suffix}`,
|
||||
displayName: 'Multi Device User',
|
||||
password: MULTI_DEVICE_PASSWORD
|
||||
};
|
||||
const serverName = `Attachment Online Relay ${suffix}`;
|
||||
const fileName = `${suffix}-relay.bin`;
|
||||
const caption = `Uploaded while device B was online ${suffix}`;
|
||||
const fileAttachment = createBinaryFilePayload(fileName, 'application/octet-stream', `relay-body-${suffix}`);
|
||||
const clientA = await createClient();
|
||||
const clientB = await createClient();
|
||||
const messagesA = new ChatMessagesPage(clientA.page);
|
||||
const messagesB = new ChatMessagesPage(clientB.page);
|
||||
|
||||
await test.step('device A registers and creates a server', async () => {
|
||||
const registerPage = new RegisterPage(clientA.page);
|
||||
|
||||
await registerPage.goto();
|
||||
await registerPage.register(credentials.username, credentials.displayName, credentials.password);
|
||||
await expect(clientA.page).toHaveURL(/\/dashboard/, { timeout: 15_000 });
|
||||
|
||||
const search = new ServerSearchPage(clientA.page);
|
||||
|
||||
await search.createServer(serverName, { description: 'Sibling online file-announce relay coverage' });
|
||||
await expect(clientA.page).toHaveURL(/\/room\//, { timeout: 15_000 });
|
||||
await messagesA.waitForReady();
|
||||
});
|
||||
|
||||
await test.step('device B logs into the same server before the upload starts', async () => {
|
||||
await loginSecondDeviceIntoServer(clientB.page, credentials, serverName);
|
||||
await clientA.page.bringToFront();
|
||||
await messagesA.waitForReady();
|
||||
await clientB.page.bringToFront();
|
||||
await messagesB.waitForReady();
|
||||
});
|
||||
|
||||
await test.step('device A uploads while device B is already in the room', async () => {
|
||||
await clientA.page.bringToFront();
|
||||
await messagesA.attachFiles([fileAttachment]);
|
||||
await messagesA.sendMessage(caption);
|
||||
await expect(messagesA.getMessageItemByText(caption)).toBeVisible({ timeout: 30_000 });
|
||||
});
|
||||
|
||||
await test.step('device B learns attachment metadata without a server-rail click dance', async () => {
|
||||
await clientB.page.bringToFront();
|
||||
await expect(messagesB.getMessageItemByText(caption)).toBeVisible({ timeout: 90_000 });
|
||||
await expect(messagesB.getMessageItemByText(caption).getByText(fileName, { exact: false }))
|
||||
.toBeVisible({ timeout: 90_000 });
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function createBinaryFilePayload(name: string, mimeType: string, content: string): ChatDropFilePayload {
|
||||
|
||||
Reference in New Issue
Block a user