test(ui): qualify open correspondence surfaces across widths

This commit is contained in:
cesnimda
2026-11-11 14:17:51 +01:00
parent c637587648
commit e3ea2ef471
77 changed files with 1075 additions and 0 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

@@ -0,0 +1,672 @@
{
"journeys": [
{
"name": "390-en-light",
"readRetryPreservesDraft": true,
"rejectedWritePreservesDraft": true,
"pendingWriteExcludesDuplicate": true,
"committedReadFailureRetriesGetOnly": true,
"reads": 4,
"posts": 2
},
{
"name": "390-en-dark",
"readRetryPreservesDraft": true,
"rejectedWritePreservesDraft": true,
"pendingWriteExcludesDuplicate": true,
"committedReadFailureRetriesGetOnly": true,
"reads": 4,
"posts": 2
},
{
"name": "390-nb-light",
"readRetryPreservesDraft": true,
"rejectedWritePreservesDraft": true,
"pendingWriteExcludesDuplicate": true,
"committedReadFailureRetriesGetOnly": true,
"reads": 4,
"posts": 2
},
{
"name": "390-nb-dark",
"readRetryPreservesDraft": true,
"rejectedWritePreservesDraft": true,
"pendingWriteExcludesDuplicate": true,
"committedReadFailureRetriesGetOnly": true,
"reads": 4,
"posts": 2
},
{
"name": "768-en-light",
"readRetryPreservesDraft": true,
"rejectedWritePreservesDraft": true,
"pendingWriteExcludesDuplicate": true,
"committedReadFailureRetriesGetOnly": true,
"reads": 4,
"posts": 2
},
{
"name": "768-en-dark",
"readRetryPreservesDraft": true,
"rejectedWritePreservesDraft": true,
"pendingWriteExcludesDuplicate": true,
"committedReadFailureRetriesGetOnly": true,
"reads": 4,
"posts": 2
},
{
"name": "768-nb-light",
"readRetryPreservesDraft": true,
"rejectedWritePreservesDraft": true,
"pendingWriteExcludesDuplicate": true,
"committedReadFailureRetriesGetOnly": true,
"reads": 4,
"posts": 2
},
{
"name": "768-nb-dark",
"readRetryPreservesDraft": true,
"rejectedWritePreservesDraft": true,
"pendingWriteExcludesDuplicate": true,
"committedReadFailureRetriesGetOnly": true,
"reads": 4,
"posts": 2
},
{
"name": "1440-en-light",
"readRetryPreservesDraft": true,
"rejectedWritePreservesDraft": true,
"pendingWriteExcludesDuplicate": true,
"committedReadFailureRetriesGetOnly": true,
"reads": 4,
"posts": 2
},
{
"name": "1440-en-dark",
"readRetryPreservesDraft": true,
"rejectedWritePreservesDraft": true,
"pendingWriteExcludesDuplicate": true,
"committedReadFailureRetriesGetOnly": true,
"reads": 4,
"posts": 2
},
{
"name": "1440-nb-light",
"readRetryPreservesDraft": true,
"rejectedWritePreservesDraft": true,
"pendingWriteExcludesDuplicate": true,
"committedReadFailureRetriesGetOnly": true,
"reads": 4,
"posts": 2
},
{
"name": "1440-nb-dark",
"readRetryPreservesDraft": true,
"rejectedWritePreservesDraft": true,
"pendingWriteExcludesDuplicate": true,
"committedReadFailureRetriesGetOnly": true,
"reads": 4,
"posts": 2
}
],
"captures": [
{
"name": "390-en-light",
"state": "read-error",
"violations": []
},
{
"name": "390-en-light",
"state": "write-error",
"violations": []
},
{
"name": "390-en-light",
"state": "write-pending",
"violations": []
},
{
"name": "390-en-light",
"state": "committed-read-error",
"violations": []
},
{
"name": "390-en-light",
"state": "recovered",
"violations": []
},
{
"name": "390-en-dark",
"state": "read-error",
"violations": []
},
{
"name": "390-en-dark",
"state": "write-error",
"violations": []
},
{
"name": "390-en-dark",
"state": "write-pending",
"violations": []
},
{
"name": "390-en-dark",
"state": "committed-read-error",
"violations": []
},
{
"name": "390-en-dark",
"state": "recovered",
"violations": []
},
{
"name": "390-nb-light",
"state": "read-error",
"violations": []
},
{
"name": "390-nb-light",
"state": "write-error",
"violations": []
},
{
"name": "390-nb-light",
"state": "write-pending",
"violations": []
},
{
"name": "390-nb-light",
"state": "committed-read-error",
"violations": []
},
{
"name": "390-nb-light",
"state": "recovered",
"violations": []
},
{
"name": "390-nb-dark",
"state": "read-error",
"violations": []
},
{
"name": "390-nb-dark",
"state": "write-error",
"violations": []
},
{
"name": "390-nb-dark",
"state": "write-pending",
"violations": []
},
{
"name": "390-nb-dark",
"state": "committed-read-error",
"violations": []
},
{
"name": "390-nb-dark",
"state": "recovered",
"violations": []
},
{
"name": "768-en-light",
"state": "read-error",
"violations": []
},
{
"name": "768-en-light",
"state": "write-error",
"violations": []
},
{
"name": "768-en-light",
"state": "write-pending",
"violations": []
},
{
"name": "768-en-light",
"state": "committed-read-error",
"violations": []
},
{
"name": "768-en-light",
"state": "recovered",
"violations": []
},
{
"name": "768-en-dark",
"state": "read-error",
"violations": []
},
{
"name": "768-en-dark",
"state": "write-error",
"violations": []
},
{
"name": "768-en-dark",
"state": "write-pending",
"violations": []
},
{
"name": "768-en-dark",
"state": "committed-read-error",
"violations": []
},
{
"name": "768-en-dark",
"state": "recovered",
"violations": []
},
{
"name": "768-nb-light",
"state": "read-error",
"violations": []
},
{
"name": "768-nb-light",
"state": "write-error",
"violations": []
},
{
"name": "768-nb-light",
"state": "write-pending",
"violations": []
},
{
"name": "768-nb-light",
"state": "committed-read-error",
"violations": []
},
{
"name": "768-nb-light",
"state": "recovered",
"violations": []
},
{
"name": "768-nb-dark",
"state": "read-error",
"violations": []
},
{
"name": "768-nb-dark",
"state": "write-error",
"violations": []
},
{
"name": "768-nb-dark",
"state": "write-pending",
"violations": []
},
{
"name": "768-nb-dark",
"state": "committed-read-error",
"violations": []
},
{
"name": "768-nb-dark",
"state": "recovered",
"violations": []
},
{
"name": "1440-en-light",
"state": "read-error",
"violations": []
},
{
"name": "1440-en-light",
"state": "write-error",
"violations": []
},
{
"name": "1440-en-light",
"state": "write-pending",
"violations": []
},
{
"name": "1440-en-light",
"state": "committed-read-error",
"violations": []
},
{
"name": "1440-en-light",
"state": "recovered",
"violations": []
},
{
"name": "1440-en-dark",
"state": "read-error",
"violations": []
},
{
"name": "1440-en-dark",
"state": "write-error",
"violations": []
},
{
"name": "1440-en-dark",
"state": "write-pending",
"violations": []
},
{
"name": "1440-en-dark",
"state": "committed-read-error",
"violations": []
},
{
"name": "1440-en-dark",
"state": "recovered",
"violations": []
},
{
"name": "1440-nb-light",
"state": "read-error",
"violations": []
},
{
"name": "1440-nb-light",
"state": "write-error",
"violations": []
},
{
"name": "1440-nb-light",
"state": "write-pending",
"violations": []
},
{
"name": "1440-nb-light",
"state": "committed-read-error",
"violations": []
},
{
"name": "1440-nb-light",
"state": "recovered",
"violations": []
},
{
"name": "1440-nb-dark",
"state": "read-error",
"violations": []
},
{
"name": "1440-nb-dark",
"state": "write-error",
"violations": []
},
{
"name": "1440-nb-dark",
"state": "write-pending",
"violations": []
},
{
"name": "1440-nb-dark",
"state": "committed-read-error",
"violations": []
},
{
"name": "1440-nb-dark",
"state": "recovered",
"violations": []
}
],
"writes": [
{
"name": "390-en-light",
"attempt": 1,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixture500"
},
{
"name": "390-en-light",
"attempt": 2,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixtureCommitted"
},
{
"name": "390-en-dark",
"attempt": 1,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixture500"
},
{
"name": "390-en-dark",
"attempt": 2,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixtureCommitted"
},
{
"name": "390-nb-light",
"attempt": 1,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixture500"
},
{
"name": "390-nb-light",
"attempt": 2,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixtureCommitted"
},
{
"name": "390-nb-dark",
"attempt": 1,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixture500"
},
{
"name": "390-nb-dark",
"attempt": 2,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixtureCommitted"
},
{
"name": "768-en-light",
"attempt": 1,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixture500"
},
{
"name": "768-en-light",
"attempt": 2,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixtureCommitted"
},
{
"name": "768-en-dark",
"attempt": 1,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixture500"
},
{
"name": "768-en-dark",
"attempt": 2,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixtureCommitted"
},
{
"name": "768-nb-light",
"attempt": 1,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixture500"
},
{
"name": "768-nb-light",
"attempt": 2,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixtureCommitted"
},
{
"name": "768-nb-dark",
"attempt": 1,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixture500"
},
{
"name": "768-nb-dark",
"attempt": 2,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixtureCommitted"
},
{
"name": "1440-en-light",
"attempt": 1,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixture500"
},
{
"name": "1440-en-light",
"attempt": 2,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixtureCommitted"
},
{
"name": "1440-en-dark",
"attempt": 1,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixture500"
},
{
"name": "1440-en-dark",
"attempt": 2,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixtureCommitted"
},
{
"name": "1440-nb-light",
"attempt": 1,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixture500"
},
{
"name": "1440-nb-light",
"attempt": 2,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixtureCommitted"
},
{
"name": "1440-nb-dark",
"attempt": 1,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixture500"
},
{
"name": "1440-nb-dark",
"attempt": 2,
"body": {
"jobApplicationId": 42,
"from": "Me",
"content": "Retain the synthetic note"
},
"result": "fixtureCommitted"
}
],
"errors": [],
"unavailableReads": [],
"blockedExternal": [
"https://fonts.googleapis.com",
"https://fonts.googleapis.com",
"https://fonts.googleapis.com",
"https://fonts.googleapis.com",
"https://fonts.googleapis.com",
"https://fonts.googleapis.com",
"https://fonts.googleapis.com",
"https://fonts.googleapis.com",
"https://fonts.googleapis.com",
"https://fonts.googleapis.com",
"https://fonts.googleapis.com",
"https://fonts.googleapis.com"
]
}
@@ -0,0 +1,13 @@
Checking 390-en-light
Checking 390-en-dark
Checking 390-nb-light
Checking 390-nb-dark
Checking 768-en-light
Checking 768-en-dark
Checking 768-nb-light
Checking 768-nb-dark
Checking 1440-en-light
Checking 1440-en-dark
Checking 1440-nb-light
Checking 1440-nb-dark
PASS 12 recovery journeys, 60 accessibility captures, 24 intercepted write attempts
@@ -0,0 +1,23 @@
> job-tracker-ui@0.1.0 build
> node --max-old-space-size=4096 ./node_modules/next/dist/bin/next build
▲ Next.js 16.4.1 (Turbopack)
✓ Running next.config.js took 24ms
Creating an optimized production build ...
✓ Compiled successfully in 510ms
Running TypeScript ...
Finished TypeScript in 5.5s ...
Collecting page data using 4 workers ...
Generating static pages using 4 workers (0/3) ...
✓ Generating static pages using 4 workers (3/3) in 811ms
Finalizing page optimization ...
Route (app)
┌ ○ /
└ ○ /_not-found
○ (Static) prerendered as static content
@@ -0,0 +1,6 @@
C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\job-tracker-ui\src\components\Correspondence.tsx
281:37 warning The ref value 'messageRequest.current' will likely have changed by the time this effect cleanup function runs. If this ref points to a node rendered by React, copy 'messageRequest.current' to a variable inside the effect, and use that variable in the cleanup function react-hooks/exhaustive-deps
✖ 1 problem (0 errors, 1 warning)
@@ -0,0 +1,10 @@
{
"journeys": [],
"captures": [],
"writes": [],
"errors": [],
"unavailableReads": [],
"blockedExternal": [
"https://fonts.googleapis.com"
]
}
@@ -0,0 +1,10 @@
{
"journeys": [],
"captures": [],
"writes": [],
"errors": [],
"unavailableReads": [],
"blockedExternal": [
"https://fonts.googleapis.com"
]
}
@@ -0,0 +1,51 @@
Checking 390-nb-dark
node:internal/modules/run_main:107
triggerUncaughtException(
^
ExpectError: expect(locator).toHaveCount(expected) failed
Locator: locator('.MuiPaper-outlined')
Expected: 0
Received: 1
Timeout: 5000ms
Call log:
- Expect "to.have.count" with timeout 5000ms
- waiting for locator('.MuiPaper-outlined')
14 × locator resolved to 1 element
- unexpected value "1"
at captureRawStack (C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\job-tracker-ui\node_modules\playwright-core\lib\coreBundle.js:9681:17)
at callMatcherAsStep (C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\job-tracker-ui\node_modules\playwright\lib\matchers\expect.js:13310:57)
at Object.toHaveCount (C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\job-tracker-ui\node_modules\playwright\lib\matchers\expect.js:13300:23)
at C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\job-tracker-ui\scripts\verify-correspondence-recovery.mjs:71:78 {
matcherResult: {
actual: 1,
expected: 0,
message: 'expect(locator).toHaveCount(expected) failed\n' +
'\n' +
"Locator: locator('.MuiPaper-outlined')\n" +
'Expected: 0\n' +
'Received: 1\n' +
'Timeout: 5000ms\n' +
'\n' +
'Call log:\n' +
' - Expect "to.have.count" with timeout 5000ms\n' +
" - waiting for locator('.MuiPaper-outlined')\n" +
' 14 × locator resolved to 1 element\n' +
' - unexpected value "1"\n',
name: 'toHaveCount',
pass: false,
log: [
' - Expect "to.have.count" with timeout 5000ms',
" - waiting for locator('.MuiPaper-outlined')",
' 14 × locator resolved to 1 element',
' - unexpected value "1"'
],
timeout: 5000,
ariaSnapshot: undefined
}
}
Node.js v24.19.0
@@ -0,0 +1,10 @@
> job-tracker-ui@0.1.0 test
> jest --runInBand correspondence-recovery.test.tsx correspondence-gmail-import.test.tsx
Test Suites: 2 passed, 2 total
Tests: 33 passed, 33 total
Snapshots: 0 total
Time: 10.316 s
Ran all test suites matching correspondence-recovery.test.tsx|correspondence-gmail-import.test.tsx.
Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

@@ -0,0 +1,2 @@
Checking 390-nb-dark
PASS 1 recovery journeys, 5 accessibility captures, 2 intercepted write attempts
@@ -0,0 +1,77 @@
{
"journeys": [
{
"name": "390-nb-dark",
"readRetryPreservesDraft": true,
"rejectedWritePreservesDraft": true,
"pendingWriteExcludesDuplicate": true,
"committedReadFailureRetriesGetOnly": true,
"reads": 4,
"posts": 2
}
],
"captures": [
{
"name": "390-nb-dark",
"state": "read-error",
"violations": []
},
{
"name": "390-nb-dark",
"state": "write-error",
"violations": []
},
{
"name": "390-nb-dark",
"state": "write-pending",
"violations": []
},
{
"name": "390-nb-dark",
"state": "committed-read-error",
"violations": []
},
{
"name": "390-nb-dark",
"state": "recovered",
"violations": []
}
],
"writes": [
{
"name": "390-nb-dark",
"attempt": 1,
"body": {
"jobApplicationId": 42,
"from": "Me",
"channel": "Email",
"subject": "Synthetic interview",
"content": "Synthetic email body",
"date": "2026-11-11T12:00:00.000Z",
"externalFrom": "recruiter@example.test",
"externalTo": "applicant@example.test"
},
"result": "fixture500"
},
{
"name": "390-nb-dark",
"attempt": 2,
"body": {
"jobApplicationId": 42,
"from": "Me",
"channel": "Email",
"subject": "Synthetic interview",
"content": "Synthetic email body",
"date": "2026-11-11T12:00:00.000Z",
"externalFrom": "recruiter@example.test",
"externalTo": "applicant@example.test"
},
"result": "fixtureCommitted"
}
],
"errors": [],
"unavailableReads": [],
"blockedExternal": [
"https://fonts.googleapis.com"
]
}