From 5704b9501b40f73c1b7c291cabd478f06117eac9 Mon Sep 17 00:00:00 2001 From: yutakobayashidev Date: Mon, 13 Jul 2026 23:02:53 +0900 Subject: [PATCH] test: verify intentional reader flows --- .env.example | 2 + .gitignore | 5 + README.md | 74 ++++++ .../plans/2026-07-13-twitter-lite.md | 235 +++++++++--------- playwright.config.ts | 41 +++ src/routes/__root.tsx | 8 +- tests/e2e/mock-relay.mjs | 220 ++++++++++++++++ tests/e2e/reader.spec.ts | 143 +++++++++++ .../mist-user-desktop-linux.png | Bin 0 -> 59765 bytes .../mist-user-mobile-linux.png | Bin 0 -> 47939 bytes tests/live/relay.test.ts | 28 +++ 11 files changed, 633 insertions(+), 123 deletions(-) create mode 100644 .env.example create mode 100644 README.md create mode 100644 playwright.config.ts create mode 100644 tests/e2e/mock-relay.mjs create mode 100644 tests/e2e/reader.spec.ts create mode 100644 tests/e2e/reader.spec.ts-snapshots/mist-user-desktop-linux.png create mode 100644 tests/e2e/reader.spec.ts-snapshots/mist-user-mobile-linux.png create mode 100644 tests/live/relay.test.ts diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..5f5d809 --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +TWITTER_RELAY_BASE_URL=http://127.0.0.1:6900 +BIRD_PROFILE_NAME= diff --git a/.gitignore b/.gitignore index a8ccfc4..8a9f57c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,9 @@ .superpowers/ .worktrees/ +.env* +!.env.example .output/ +dist/ node_modules/ +playwright-report/ +test-results/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..79f537b --- /dev/null +++ b/README.md @@ -0,0 +1,74 @@ +# Twitter Lite + +Twitter Lite is an intentional, read-only X reader. It stays empty until you +enter a user handle, profile URL, or search query. + +## Scope + +- User timelines and raw X search syntax +- Popular (`Top`) and chronological (`Latest`) search +- Optional `filter:follows` search +- Infinite cursor pagination with explicit retry +- Read-only cards for text, media, quotes, articles, and quiet engagement counts + +It intentionally has no home feed, recommendations, trends, notifications, +history, account directory, or write actions. + +## Requirements and setup + +Use Nix, or Node.js `>=22.12.0` with pnpm `11.9.0`. The package link also +requires a local Bird checkout at `../bird`, exactly at unpublished commit +`81921226f099e7f7a2107be15fc9783218a6f400`. + +A fresh clone of the remote Bird repository alone does **not** contain that +local Top/Latest commit yet. Obtain the supplied checkout; do not assume the +commit or a compatible package has been published. + +```bash +cd ../bird +git rev-parse HEAD +nix develop -c pnpm install --frozen-lockfile +nix develop -c pnpm run build:dist + +cd ../twitter-lite +nix develop -c pnpm install --frozen-lockfile +cp .env.example .env.local +``` + +Set `TWITTER_RELAY_BASE_URL` in `.env.local` for Vite development, and set +`BIRD_PROFILE_NAME` when the relay has multiple profiles. Export the same +values in the process environment before `start` or `test:live`: + +```bash +export TWITTER_RELAY_BASE_URL=http://127.0.0.1:6900 +export BIRD_PROFILE_NAME= +``` + +Both values are read by server-only code at runtime; neither value nor Bird is +sent to the browser. + +## Commands + +```bash +nix develop -c pnpm dev +nix develop -c pnpm dev:tailscale +nix develop -c pnpm test +nix develop -c pnpm test:e2e +nix develop -c pnpm test:live +nix develop -c pnpm build +nix develop -c pnpm start +``` + +`test:e2e` is intentionally Nix-only and uses the system Chromium supplied by +the dev shell. `test:live` is an explicit, opt-in smoke test that performs +exactly one read-only Top search using the configured relay. + +Development binds to `127.0.0.1` by default. `dev:tailscale` binds to +`0.0.0.0`, so it exposes the app on LAN interfaces as well as Tailscale. Use it +only on a trusted network and obtain the Tailscale address with +`tailscale ip -4`. + +## Reliability + +Bird uses X's internal GraphQL operations through the configured relay. Query +IDs and response shapes can change without notice. diff --git a/docs/superpowers/plans/2026-07-13-twitter-lite.md b/docs/superpowers/plans/2026-07-13-twitter-lite.md index a1bb96a..780abd1 100644 --- a/docs/superpowers/plans/2026-07-13-twitter-lite.md +++ b/docs/superpowers/plans/2026-07-13-twitter-lite.md @@ -2861,28 +2861,36 @@ Create `playwright.config.ts`: ```ts import { defineConfig, devices } from '@playwright/test' +const appPort = 4173 +const relayPort = 6911 +const chromiumExecutable = process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE + +if (!chromiumExecutable) { + throw new Error('Run E2E tests through `nix develop` to provide Chromium.') +} + export default defineConfig({ testDir: './tests/e2e', fullyParallel: false, + workers: 1, use: { - baseURL: 'http://127.0.0.1:3000', - launchOptions: { - executablePath: process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE, - }, + baseURL: `http://127.0.0.1:${appPort}`, + launchOptions: { executablePath: chromiumExecutable }, screenshot: 'only-on-failure', trace: 'retain-on-failure', }, webServer: [ { - command: 'node tests/e2e/mock-relay.mjs', - port: 6901, + command: `TWITTER_LITE_MOCK_RELAY_PORT=${relayPort} node tests/e2e/mock-relay.mjs`, + port: relayPort, reuseExistingServer: false, + timeout: 120_000, }, { - command: - 'TWITTER_RELAY_BASE_URL=http://127.0.0.1:6901 BIRD_PROFILE_NAME=e2e pnpm dev', - url: 'http://127.0.0.1:3000/user?target=', + command: `TWITTER_RELAY_BASE_URL=http://127.0.0.1:${relayPort} BIRD_PROFILE_NAME=e2e pnpm exec vite dev --host 127.0.0.1 --port ${appPort} --strictPort`, + url: `http://127.0.0.1:${appPort}`, reuseExistingServer: false, + timeout: 120_000, }, ], projects: [ @@ -2894,11 +2902,11 @@ export default defineConfig({ - [ ] **Step 2: Create a deterministic read-only relay** -Create `tests/e2e/mock-relay.mjs`: +Create `tests/e2e/mock-relay.mjs`. The response-shape excerpt below is only +part of the mock: the executable implementation must also enforce the request +contract listed after it. ```js -import { createServer } from 'node:http' - const tweet = (id, text, username = 'yuta') => ({ entryId: `tweet-${id}`, content: { @@ -2934,89 +2942,22 @@ const cursor = (value) => ({ entryId: 'cursor-bottom', content: { cursorType: 'Bottom', value }, }) - -const send = (response, payload, status = 200) => { - response.writeHead(status, { 'content-type': 'application/json' }) - response.end(JSON.stringify(payload)) -} - -createServer((request, response) => { - if (request.headers['x-profile-name'] !== 'e2e') { - send(response, { errors: [{ message: 'missing profile' }] }, 403) - return - } - const url = new URL(request.url ?? '/', 'http://127.0.0.1:6901') - const variables = JSON.parse(url.searchParams.get('variables') ?? '{}') - - if (url.pathname.endsWith('/UserByScreenName')) { - send(response, { - data: { - user: { - result: { - rest_id: '42', - legacy: { screen_name: variables.screen_name, name: 'Yuta' }, - }, - }, - }, - }) - return - } - - if (url.pathname.endsWith('/UserTweets')) { - const second = Boolean(variables.cursor) - send(response, { - data: { - user: { - result: { - timeline: { - timeline: { - instructions: [ - { - entries: second - ? [tweet('u2', 'user page 2')] - : [tweet('u1', 'user page 1'), cursor('user-next')], - }, - ], - }, - }, - }, - }, - }, - }) - return - } - - if (url.pathname.endsWith('/SearchTimeline')) { - const second = Boolean(variables.cursor) - const label = `${variables.product} · ${ - String(variables.rawQuery).includes('filter:follows') - ? 'follows' - : 'all' - }` - send(response, { - data: { - search_by_raw_query: { - search_timeline: { - timeline: { - instructions: [ - { - entries: second - ? [tweet('s2', `${label} page 2`)] - : [tweet('s1', `${label} page 1`), cursor('search-next')], - }, - ], - }, - }, - }, - }, - }) - return - } - - send(response, { errors: [{ message: 'unsupported read operation' }] }, 404) -}).listen(6901, '127.0.0.1') ``` +Route by the operation-name suffix, never the query ID. Require +`x-profile-name: e2e`; require GET for `UserByScreenName` and `UserTweets`; and +require POST plus JSON `{ features, queryId }` for `SearchTimeline`, whose +`variables` remain in the URL. Validate only the minimal fixture variables, +not exact query IDs or complete feature bags. Return 405 for a wrong method, +403 for a wrong profile, 400 for malformed supported input, and 501 for an +unsupported operation. Never return 404 or make an outbound request. + +Key transient state by raw query. The first cursor request for each +`retry-` query returns 503 once, then succeeds on explicit retry. A +`slow-` cursor request is delayed long enough to observe the loading +rail. Every page carrying a cursor also carries a parseable tweet, and page two +omits the cursor. + - [ ] **Step 3: Write failing end-to-end flows** Create `tests/e2e/reader.spec.ts`: @@ -3024,6 +2965,23 @@ Create `tests/e2e/reader.spec.ts`: ```ts import { expect, test } from '@playwright/test' +let consoleErrors: string[] +let pageErrors: string[] + +test.beforeEach(async ({ page }) => { + consoleErrors = [] + pageErrors = [] + page.on('console', (message) => { + if (message.type() === 'error') consoleErrors.push(message.text()) + }) + page.on('pageerror', (error) => pageErrors.push(error.message)) +}) + +test.afterEach(() => { + expect(consoleErrors).toEqual([]) + expect(pageErrors).toEqual([]) +}) + test('requires intent and infinitely loads a user timeline', async ({ page }) => { await page.goto('/') await expect(page).toHaveURL(/\/user\?target=/) @@ -3061,6 +3019,14 @@ test('keeps discovery surfaces absent', async ({ page }) => { }) ``` +Wait for the cold SSR page to hydrate before manipulating controlled fields. +In addition to the excerpted happy paths, cover a later-page 503 that retains +page one and succeeds only after Retry, the exact keyboard Tab order across +both navigation links and all form controls, absent discovery/mutation links +and controls, and a `slow-` request under reduced motion whose loading +rail pseudo-element has `animation-name: none`. Run every flow in both projects +and let the slow request finish before teardown. + Run: ```bash @@ -3085,23 +3051,32 @@ Expected: the first run creates reviewed desktop and mobile `mist-user.png` snap Create `tests/live/relay.test.ts`: ```ts +// @vitest-environment node + import { TwitterClient } from '@yuta/bird' import { describe, expect, it } from 'vitest' describe.runIf(process.env.TWITTER_LITE_LIVE === '1')( 'configured relay', () => { - it('reads one Top search result without a mutation', async () => { - const client = new TwitterClient({ - relayBaseUrl: process.env.TWITTER_RELAY_BASE_URL, - profileName: process.env.BIRD_PROFILE_NAME, - timeoutMs: 20_000, - }) - - const result = await client.search('OpenAI', 1, { product: 'Top' }) - expect(result.success).toBe(true) - if (result.success) expect(result.tweets.length).toBeGreaterThan(0) - }) + it( + 'performs one read-only Top search', + async () => { + const relayBaseUrl = process.env.TWITTER_RELAY_BASE_URL + if (!relayBaseUrl) { + throw new Error('TWITTER_RELAY_BASE_URL is required for the live test') + } + const client = new TwitterClient({ + relayBaseUrl, + profileName: process.env.BIRD_PROFILE_NAME, + timeoutMs: 20_000, + }) + const query = process.env.TWITTER_LITE_LIVE_QUERY ?? 'OpenAI' + const result = await client.search(query, 1, { product: 'Top' }) + expect(result.success).toBe(true) + }, + 30_000, + ) }, ) ``` @@ -3112,7 +3087,9 @@ Run: nix develop -c pnpm test:live ``` -Expected: one read-only Top search test passes using the configured relay. +Expected: when relay/profile environment configuration is actually available, +one read-only Top search test passes. Do not run this opt-in command +unconditionally or log relay configuration, response bodies, or post content. - [ ] **Step 6: Document setup and intentional omissions** @@ -3127,8 +3104,9 @@ Extend `.gitignore` to exactly: ```gitignore .superpowers/ -.env -.env.local +.worktrees/ +.env* +!.env.example .output/ dist/ node_modules/ @@ -3141,8 +3119,8 @@ Create `README.md` with these sections and commands: ````md # Twitter Lite -A localhost-only X reader that shows content only after a deliberate handle, -profile URL, or search query. +An intentional, read-only X reader that shows content only after a deliberate +handle, profile URL, or search query. ## Features @@ -3155,19 +3133,23 @@ profile URL, or search query. ## Setup -Clone the modified Bird checkout beside this repository: +Use Nix, or Node.js `>=22.12.0` with pnpm `11.9.0`. Obtain the supplied local +Bird checkout beside this repository at unpublished commit +`81921226f099e7f7a2107be15fc9783218a6f400`. A fresh remote clone alone does +not contain that Top/Latest commit yet. ```bash -git clone https://git.yutakobayashi.com/yuta/bird ../bird cd ../bird +git rev-parse HEAD nix develop -c pnpm install --frozen-lockfile nix develop -c pnpm run build:dist cd ../twitter-lite nix develop -c pnpm install --frozen-lockfile ``` -Set `TWITTER_RELAY_BASE_URL` and, when the relay has multiple profiles, -`BIRD_PROFILE_NAME`. Bird and both values remain in the server bundle. +Set `TWITTER_RELAY_BASE_URL` at runtime and, when the relay has multiple +profiles, `BIRD_PROFILE_NAME`. Bird and both values are read only by +server-side code and never reach the browser. ## Commands @@ -3181,8 +3163,11 @@ nix develop -c pnpm build nix develop -c pnpm start ``` -The default bind address is `127.0.0.1`. Use `dev:tailscale` only on a trusted -tailnet. +The default bind address is `127.0.0.1`. E2E runs through Nix with the system +Chromium; the live command performs exactly one explicitly configured read. +`dev:tailscale` binds `0.0.0.0`, including LAN interfaces as well as Tailscale, +so use it only on a trusted network. Find the Tailscale address with +`tailscale ip -4`. ## Reliability @@ -3198,20 +3183,22 @@ From `../bird`: nix develop -c pnpm run build:dist nix develop -c pnpm run lint nix develop -c pnpm test -git status --short +git status --short --branch +git rev-list --count origin/main..HEAD +git log --oneline origin/main..HEAD ``` From Twitter Lite: ```bash nix develop -c pnpm install --frozen-lockfile -nix develop -c pnpm generate-routes +nix develop -c pnpm check:routes nix develop -c pnpm lint nix develop -c pnpm typecheck nix develop -c pnpm test -nix develop -c pnpm test:e2e -nix develop -c pnpm test:live nix develop -c pnpm build +nix develop -c pnpm test:e2e +nix develop -c pnpm test:live # only with configured relay environment git diff --check ``` @@ -3220,7 +3207,9 @@ Expected: - Bird build, lint, and all non-live tests pass. - Twitter Lite lint, typecheck, unit tests, desktop/mobile browser tests, live read test, and production build pass. - Bird has one local feature commit and no remote push. -- Browser bundles contain no relay environment value and expose no mutation endpoint. +- Fresh `.output/public` scans contain no Bird/client or relay environment names; + source contains only the two intended server functions and no mutation/generic + proxy calls. - `README.md` and the design docs match the delivered commands and behavior. - `AGENTS.md` and `CLAUDE.md` remain absent because no agent-specific instruction changed. @@ -3229,17 +3218,19 @@ Expected: ```bash git add \ .env.example .gitignore README.md playwright.config.ts \ - tests/e2e tests/live docs + src/routes/__root.tsx tests/e2e tests/live docs git commit -m "test: verify intentional reader flows" ``` Run one fresh post-commit audit: ```bash -git status --short +git status --short --branch git log --oneline --decorate -8 nix develop -c pnpm test +nix develop -c pnpm test:e2e nix develop -c pnpm build +git diff --check ``` Expected: clean status, the planned commits are present, all unit tests pass, and the production build exits zero. diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000..a10fdeb --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,41 @@ +import { defineConfig, devices } from '@playwright/test' + +const appPort = 4173 +const relayPort = 6911 +const chromiumExecutable = process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE + +if (!chromiumExecutable) { + throw new Error( + 'PLAYWRIGHT_CHROMIUM_EXECUTABLE is required; run E2E tests with `nix develop -c pnpm test:e2e`.', + ) +} + +export default defineConfig({ + testDir: './tests/e2e', + fullyParallel: false, + workers: 1, + use: { + baseURL: `http://127.0.0.1:${appPort}`, + launchOptions: { executablePath: chromiumExecutable }, + screenshot: 'only-on-failure', + trace: 'retain-on-failure', + }, + webServer: [ + { + command: `TWITTER_LITE_MOCK_RELAY_PORT=${relayPort} node tests/e2e/mock-relay.mjs`, + port: relayPort, + reuseExistingServer: false, + timeout: 120_000, + }, + { + command: `TWITTER_RELAY_BASE_URL=http://127.0.0.1:${relayPort} BIRD_PROFILE_NAME=e2e pnpm exec vite dev --host 127.0.0.1 --port ${appPort} --strictPort`, + url: `http://127.0.0.1:${appPort}`, + reuseExistingServer: false, + timeout: 120_000, + }, + ], + projects: [ + { name: 'desktop', use: { ...devices['Desktop Chrome'] } }, + { name: 'mobile', use: { ...devices['Pixel 7'] } }, + ], +}) diff --git a/src/routes/__root.tsx b/src/routes/__root.tsx index 0983bd3..1593d6b 100644 --- a/src/routes/__root.tsx +++ b/src/routes/__root.tsx @@ -18,7 +18,13 @@ export const Route = createRootRouteWithContext()({ }, { title: 'Twitter Lite' }, ], - links: [{ rel: 'stylesheet', href: appCss }], + links: [ + { rel: 'stylesheet', href: appCss }, + { + rel: 'icon', + href: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='7' fill='%23255f6e'/%3E%3C/svg%3E", + }, + ], }), shellComponent: RootDocument, }) diff --git a/tests/e2e/mock-relay.mjs b/tests/e2e/mock-relay.mjs new file mode 100644 index 0000000..416032a --- /dev/null +++ b/tests/e2e/mock-relay.mjs @@ -0,0 +1,220 @@ +import { createServer } from 'node:http' + +const portValue = process.env.TWITTER_LITE_MOCK_RELAY_PORT +const port = Number(portValue) + +if (!portValue || !Number.isInteger(port) || port < 1) { + throw new Error('TWITTER_LITE_MOCK_RELAY_PORT must be a valid port') +} + +const failedRetryQueries = new Set() + +const isRecord = (value) => + value !== null && typeof value === 'object' && !Array.isArray(value) + +const tweet = (id, text, username = 'yuta') => ({ + entryId: `tweet-${id}`, + content: { + itemContent: { + tweet_results: { + result: { + rest_id: id, + legacy: { + full_text: text, + created_at: 'Mon Jul 13 00:00:00 +0000 2026', + reply_count: 1, + retweet_count: 2, + favorite_count: 3, + conversation_id_str: id, + }, + core: { + user_results: { + result: { + rest_id: '42', + legacy: { screen_name: username, name: 'Yuta' }, + }, + }, + }, + }, + }, + }, + }, +}) + +const cursor = (value) => ({ + entryId: 'cursor-bottom', + content: { cursorType: 'Bottom', value }, +}) + +const send = (response, payload, status = 200, headers = {}) => { + response.writeHead(status, { + 'content-type': 'application/json; charset=utf-8', + ...headers, + }) + response.end(JSON.stringify(payload)) +} + +const fail = (response, status, message, headers) => + send(response, { errors: [{ message }] }, status, headers) + +const variablesFrom = (url) => { + const encoded = url.searchParams.get('variables') + if (!encoded) throw new Error('variables are required') + const variables = JSON.parse(encoded) + if (!isRecord(variables)) throw new Error('variables must be an object') + return variables +} + +const jsonBodyFrom = async (request) => { + let body = '' + for await (const chunk of request) { + body += chunk + if (body.length > 1_000_000) throw new Error('request body is too large') + } + const parsed = JSON.parse(body) + if (!isRecord(parsed)) throw new Error('JSON body must be an object') + return parsed +} + +const timeline = (entries) => ({ instructions: [{ entries }] }) + +const server = createServer(async (request, response) => { + const url = new URL(request.url ?? '/', `http://127.0.0.1:${port}`) + const operation = ['UserByScreenName', 'UserTweets', 'SearchTimeline'].find( + (name) => url.pathname.endsWith(`/${name}`), + ) + + if (!operation) { + fail(response, 501, 'unsupported read operation') + return + } + + const expectedMethod = operation === 'SearchTimeline' ? 'POST' : 'GET' + if (request.method !== expectedMethod) { + fail(response, 405, `expected ${expectedMethod}`, { + allow: expectedMethod, + }) + return + } + if (request.headers['x-profile-name'] !== 'e2e') { + fail(response, 403, 'invalid profile') + return + } + + let variables + try { + variables = variablesFrom(url) + } catch { + fail(response, 400, 'malformed variables') + return + } + + if (operation === 'UserByScreenName') { + if ( + typeof variables.screen_name !== 'string' || + variables.screen_name.length === 0 + ) { + fail(response, 400, 'screen_name is required') + return + } + send(response, { + data: { + user: { + result: { + rest_id: '42', + legacy: { screen_name: variables.screen_name, name: 'Yuta' }, + }, + }, + }, + }) + return + } + + if (operation === 'UserTweets') { + const expectedCursor = + variables.cursor === undefined || variables.cursor === 'user-next' + if ( + variables.userId !== '42' || + variables.count !== 20 || + !expectedCursor + ) { + fail(response, 400, 'invalid user timeline variables') + return + } + const secondPage = variables.cursor === 'user-next' + const entries = secondPage + ? [tweet('u2', 'user page 2')] + : [tweet('u1', 'user page 1'), cursor('user-next')] + send(response, { + data: { + user: { result: { timeline: { timeline: timeline(entries) } } }, + }, + }) + return + } + + const contentType = request.headers['content-type'] ?? '' + if (!/^application\/json(?:\s*;|$)/i.test(contentType)) { + fail(response, 400, 'SearchTimeline requires JSON') + return + } + + let body + try { + body = await jsonBodyFrom(request) + } catch { + fail(response, 400, 'malformed JSON body') + return + } + + const rawQuery = variables.rawQuery + const expectedCursor = + variables.cursor === undefined || + variables.cursor === `search-next:${rawQuery}` + if ( + typeof rawQuery !== 'string' || + rawQuery.length === 0 || + variables.count !== 20 || + variables.querySource !== 'typed_query' || + !['Top', 'Latest'].includes(variables.product) || + !expectedCursor || + !isRecord(body.features) || + typeof body.queryId !== 'string' || + body.queryId.length === 0 || + Object.hasOwn(body, 'variables') + ) { + fail(response, 400, 'invalid search request') + return + } + + const secondPage = variables.cursor !== undefined + if ( + secondPage && + rawQuery.startsWith('retry-') && + !failedRetryQueries.has(rawQuery) + ) { + failedRetryQueries.add(rawQuery) + fail(response, 503, 'transient fixture failure') + return + } + if (secondPage && rawQuery.startsWith('slow-')) { + await new Promise((resolve) => setTimeout(resolve, 1_200)) + } + + const follows = rawQuery.includes('filter:follows') ? 'follows' : 'all' + const label = `${variables.product} · ${follows}` + const id = encodeURIComponent(rawQuery) + const entries = secondPage + ? [tweet(`s-${id}-2`, `${label} page 2`)] + : [tweet(`s-${id}-1`, `${label} page 1`), cursor(`search-next:${rawQuery}`)] + + send(response, { + data: { + search_by_raw_query: { + search_timeline: { timeline: timeline(entries) }, + }, + }, + }) +}) + +server.listen(port, '127.0.0.1') diff --git a/tests/e2e/reader.spec.ts b/tests/e2e/reader.spec.ts new file mode 100644 index 0000000..9ce1f65 --- /dev/null +++ b/tests/e2e/reader.spec.ts @@ -0,0 +1,143 @@ +import { expect, type Locator, test } from '@playwright/test' + +let consoleErrors: string[] +let pageErrors: string[] + +test.beforeEach(async ({ page }) => { + consoleErrors = [] + pageErrors = [] + page.on('console', (message) => { + if (message.type() === 'error') consoleErrors.push(message.text()) + }) + page.on('pageerror', (error) => pageErrors.push(error.message)) +}) + +test.afterEach(() => { + expect(consoleErrors, 'browser console errors').toEqual([]) + expect(pageErrors, 'uncaught browser errors').toEqual([]) +}) + +const ambientLinkNames = /ホーム|おすすめ|トレンド|通知|履歴/ +const mutationControlNames = /投稿する|返信|いいね|再投稿|フォロー|ブックマーク/ + +async function submitSearch( + page: import('@playwright/test').Page, + query: string, +) { + await openReader(page, '/search?q=&product=Latest&following=false') + await expect(page.locator('article')).toHaveCount(0) + await page.getByLabel('検索語').fill(query) + await page.getByRole('button', { name: '検索' }).click() +} + +async function openReader(page: import('@playwright/test').Page, path: string) { + await page.goto(path) + await page.waitForLoadState('networkidle') +} + +async function tabTo(page: import('@playwright/test').Page, target: Locator) { + await page.keyboard.press('Tab') + await expect(target).toBeFocused() +} + +test('requires intent and infinitely loads a user timeline', async ({ + page, +}) => { + await openReader(page, '/') + await expect(page).toHaveURL(/\/user\?target=$/) + await expect(page.locator('article')).toHaveCount(0) + await expect(page.getByRole('link', { name: ambientLinkNames })).toHaveCount( + 0, + ) + + await page.getByLabel('ハンドルまたはプロフィール URL').fill('@yuta') + await page.getByRole('button', { name: '表示' }).click() + + await expect(page.getByText('user page 1')).toBeVisible() + await expect(page.getByText('user page 2')).toBeVisible() + await expect(page.getByText('これ以上の投稿はありません。')).toBeVisible() + await expect(page).toHaveScreenshot('mist-user.png', { + animations: 'disabled', + fullPage: true, + }) +}) + +test('searches Top posts from followed accounts', async ({ page }) => { + await openReader(page, '/search?q=&product=Latest&following=false') + await expect(page.locator('article')).toHaveCount(0) + await page.getByLabel('検索語').fill('AI lang:ja') + await page.getByLabel('人気順').check() + await page.getByLabel('フォロー中のみ').check() + await expect(page.getByLabel('フォロー中のみ')).toBeChecked() + await page.getByRole('button', { name: '検索' }).click() + + await expect(page).toHaveURL(/following=true/) + await expect(page.getByText('Top · follows page 1')).toBeVisible() + await expect(page.getByText('Top · follows page 2')).toBeVisible() + await expect(page.getByText('これ以上の投稿はありません。')).toBeVisible() +}) + +test('retains the first page through a pagination error and retries explicitly', async ({ + page, +}, testInfo) => { + await submitSearch(page, `retry-${testInfo.project.name}`) + + await expect(page.getByText('Latest · all page 1')).toBeVisible() + const laterPageAlert = page + .getByRole('alert') + .filter({ hasText: '続きの投稿を取得できませんでした。' }) + await expect(laterPageAlert).toHaveCount(1) + await expect(page.getByText('Latest · all page 1')).toBeVisible() + await expect(page.getByText('Latest · all page 2')).toHaveCount(0) + + await laterPageAlert.getByRole('button', { name: '再試行' }).click() + + await expect(page.getByText('Latest · all page 2')).toBeVisible() + await expect(laterPageAlert).toHaveCount(0) + await expect(page.getByText('これ以上の投稿はありません。')).toBeVisible() +}) + +test('keeps keyboard focus intentional and discovery or mutation controls absent', async ({ + page, +}) => { + await openReader(page, '/search?q=&product=Latest&following=false') + + await tabTo(page, page.getByRole('link', { name: 'ユーザー' })) + await tabTo(page, page.getByRole('link', { name: '検索' })) + await tabTo(page, page.getByLabel('検索語')) + const ranking = page.getByLabel('最新順') + await expect(ranking).toBeChecked() + await tabTo(page, ranking) + await tabTo(page, page.getByLabel('フォロー中のみ')) + await tabTo(page, page.getByRole('button', { name: '検索' })) + + await expect(page.getByRole('link', { name: ambientLinkNames })).toHaveCount( + 0, + ) + await expect( + page.getByRole('button', { name: mutationControlNames }), + ).toHaveCount(0) + await expect( + page.getByRole('link', { name: mutationControlNames }), + ).toHaveCount(0) +}) + +test('removes loading rail animation for reduced motion', async ({ + page, +}, testInfo) => { + await page.emulateMedia({ reducedMotion: 'reduce' }) + await submitSearch(page, `slow-${testInfo.project.name}`) + + const rail = page.locator('.loading-rail') + await expect(rail).toBeVisible() + await expect + .poll(() => + rail.evaluate((element) => + getComputedStyle(element, '::after').getPropertyValue('animation-name'), + ), + ) + .toBe('none') + + await expect(page.getByText('Latest · all page 2')).toBeVisible() + await expect(page.getByText('これ以上の投稿はありません。')).toBeVisible() +}) diff --git a/tests/e2e/reader.spec.ts-snapshots/mist-user-desktop-linux.png b/tests/e2e/reader.spec.ts-snapshots/mist-user-desktop-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..69f7c53e897841c0398152efbd78404e47a36704 GIT binary patch literal 59765 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¨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 TJbN5JsHN%Y>gTe~DWM4f69$dw literal 0 HcmV?d00001 diff --git a/tests/e2e/reader.spec.ts-snapshots/mist-user-mobile-linux.png b/tests/e2e/reader.spec.ts-snapshots/mist-user-mobile-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..2767866e48d7294419479ed4114cbd2d4485eb4c GIT binary patch literal 47939 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 AyZ`_I literal 0 HcmV?d00001 diff --git a/tests/live/relay.test.ts b/tests/live/relay.test.ts new file mode 100644 index 0000000..c48d832 --- /dev/null +++ b/tests/live/relay.test.ts @@ -0,0 +1,28 @@ +// @vitest-environment node + +import { TwitterClient } from '@yuta/bird' +import { describe, expect, it } from 'vitest' + +describe.runIf(process.env.TWITTER_LITE_LIVE === '1')( + 'configured relay', + () => { + it('performs one read-only Top search', async () => { + const relayBaseUrl = process.env.TWITTER_RELAY_BASE_URL + if (!relayBaseUrl) { + throw new Error( + 'TWITTER_RELAY_BASE_URL is required for the opt-in live smoke test', + ) + } + + const client = new TwitterClient({ + relayBaseUrl, + profileName: process.env.BIRD_PROFILE_NAME, + timeoutMs: 20_000, + }) + const query = process.env.TWITTER_LITE_LIVE_QUERY ?? 'OpenAI' + const result = await client.search(query, 1, { product: 'Top' }) + + expect(result.success).toBe(true) + }, 30_000) + }, +)