Appearance
DOCX Import Library Browser Smoke
This opt-in Playwright smoke verifies the browser-facing DOCX import library route without changing the default gateway route table. It opens the real /teacher/exams/library page, seeds browser auth and organization state, and asserts that the browser-observed GET /api/exam-import/teacher-library response came through the non-default native exam-import-teacher-library gateway route.
Required Runtime
Start these processes before live mode:
- Next.js web app, default
WEB_BASE_URL=http://localhost:3000 - API gateway, default
GATEWAY_BASE_URL=http://localhost:8085 docx-import-service, default target fromdeploy/gateway/routes.import-status-native-localhost-example.json- gateway route table:
GATEWAY_ROUTE_TABLE=deploy/gateway/routes.import-status-native-localhost-example.json
The web app must be started with NEXT_PUBLIC_API_URL pointing at the gateway base URL. If the frontend points directly at the legacy API process, the smoke fails because the response will not include gateway route headers.
Run
Static self-test:
bash
cd go-platform
DOCX_IMPORT_LIBRARY_BROWSER_SELF_TEST=1 make test-docx-import-library-browserLive browser mode:
bash
cd go-platform
DOCX_IMPORT_LIBRARY_BROWSER_AUTHORIZATION='Bearer <teacher-token>' \
DOCX_IMPORT_LIBRARY_BROWSER_ORGANIZATION_ID=<org-id> \
make test-docx-import-library-browserLive mode with a specific pending/processing job and BullMQ queue assertion:
bash
cd go-platform
DOCX_IMPORT_LIBRARY_BROWSER_AUTHORIZATION='Bearer <teacher-token>' \
DOCX_IMPORT_LIBRARY_BROWSER_ORGANIZATION_ID=<org-id> \
DOCX_IMPORT_LIBRARY_BROWSER_JOB_ID=<job-id> \
DOCX_IMPORT_LIBRARY_BROWSER_EXPECT_QUEUE_STATUS=waiting \
DOCX_IMPORT_LIBRARY_BROWSER_EXPECT_MIN_TOTAL_PENDING=1 \
make test-docx-import-library-browserUseful optional variables:
DOCX_IMPORT_LIBRARY_BROWSER_HEADLESS=0to see Chromium.DOCX_IMPORT_LIBRARY_BROWSER_PATH=/teacher/exams/libraryto override the page path.DOCX_IMPORT_LIBRARY_BROWSER_REQUIRE_ITEMS=1to fail on an empty list.DOCX_IMPORT_LIBRARY_BROWSER_REQUIRE_QUEUE=0to search for a job without asserting its queue snapshot.DOCX_IMPORT_LIBRARY_BROWSER_ARTIFACT_DIR=output/playwright/<name>to control artifact output.
Assertions
The smoke fails unless:
- the route table has
exam-import-teacher-libraryas exactGETnative_read - the route table has
exam-import-job-statusandimports-job-statusas native read status carve-outs - broad
/api/exam-importand/api/importsremainlegacy_proxy - the browser observes
X-Hoctapaz-Gateway-Route: exam-import-teacher-library - the browser observes
X-Hoctapaz-Gateway-Route-State: native_read - the list response contains a legacy-compatible
rows/metashape - when
DOCX_IMPORT_LIBRARY_BROWSER_JOB_IDis set, the searched response contains that job id - when queue assertion is enabled, the job row contains the legacy-shaped BullMQ
queuefields
Live artifacts are written under output/playwright/ and include response headers, response body, a summary file, and a full-page screenshot.
Rollback
Switch GATEWAY_ROUTE_TABLE back to deploy/gateway/routes.json, remove the native route-table entries, or set them to legacy_proxy. This smoke is read-only and does not modify import jobs.