From a1c3739d097235873399a97c9288867a9dd93800 Mon Sep 17 00:00:00 2001 From: Gaurav Saxena Date: Mon, 1 Jun 2026 13:41:33 +0530 Subject: [PATCH] fix(twitter): ignore timeline media after post submit --- clis/twitter/post.js | 7 +++++-- clis/twitter/post.test.js | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/clis/twitter/post.js b/clis/twitter/post.js index c79d19747..38b54ed18 100644 --- a/clis/twitter/post.js +++ b/clis/twitter/post.js @@ -235,8 +235,11 @@ async function submitTweet(page, text) { const boxes = Array.from(document.querySelectorAll('[data-testid="tweetTextarea_0"]')).filter(visible); const composerStillHasText = boxes.some((box) => normalize(box.innerText || box.textContent || '').includes(expectedText)); - const hasMedia = !!document.querySelector('[data-testid="attachments"], [data-testid="tweetPhoto"]') - || document.querySelectorAll('img[src^="blob:"], video[src^="blob:"]').length > 0; + const isComposeRoute = /^\\/compose\\/post\\/?$/.test(window.location.pathname); + const hasMedia = isComposeRoute && ( + !!document.querySelector('[data-testid="attachments"], [data-testid="tweetPhoto"]') + || document.querySelectorAll('img[src^="blob:"], video[src^="blob:"]').length > 0 + ); if (!composerStillHasText && !hasMedia) { return { ok: true, message: 'Tweet posted successfully.', ...statusUrl() }; } diff --git a/clis/twitter/post.test.js b/clis/twitter/post.test.js index 13808c333..b2c1588f2 100644 --- a/clis/twitter/post.test.js +++ b/clis/twitter/post.test.js @@ -217,6 +217,24 @@ describe('twitter post command', () => { expect(submitScript).toContain('your post was sent'); }); + it('does not treat timeline media as composer media after compose navigation completes', async () => { + const command = getCommand(); + const page = makePage([ + { ok: true, previewCount: 1 }, // upload polling returns true + { ok: true }, // focus composer + { ok: true }, // verify native insertText + { ok: true }, // click post + { ok: true, message: 'Tweet posted successfully.' }, + ]); + + await command.func(page, { text: 'with image', images: 'a.png' }); + + const submitScript = page.evaluate.mock.calls[4][0]; + expect(submitScript).toContain('isComposeRoute'); + expect(submitScript).toContain('/^\\/compose\\/post'); + expect(submitScript).toContain('isComposeRoute &&'); + }); + it('returns failed when image upload times out', async () => { const command = getCommand(); const page = makePage([