Skip to content

Commit 22c3121

Browse files
authored
Merge pull request #1632 from w3c/releases
November 7, 2025 Production Release [v1.25.1] Includes changes recently included in the [releases branch](https://github.com/w3c/aria-at-app/tree/releases) through #1631. [Latest CHANGELOG.md update: v1.25.1](https://github.com/w3c/aria-at-app/blob/development/CHANGELOG.md#1251-2025-11-07).
2 parents 092ca3c + 62e1fd7 commit 22c3121

File tree

13 files changed

+117
-74
lines changed

13 files changed

+117
-74
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
### [1.25.1](https://github.com/w3c/aria-at-app/compare/v1.25.0...v1.25.1) (2025-11-07)
2+
3+
4+
### Bug Fixes
5+
6+
* Tabs component loses focus to tab when programmatically navigating ([#1630](https://github.com/w3c/aria-at-app/issues/1630)) ([35ad3e2](https://github.com/w3c/aria-at-app/commit/35ad3e2a6bfbd2035319b3a108237aca7feaf89e))
7+
* Update path to aria-at test page for reports pages and issues creation ([#1629](https://github.com/w3c/aria-at-app/issues/1629)) ([f564ada](https://github.com/w3c/aria-at-app/commit/f564adafcc9c11dba1b83ac5d41c091d0b93b7b4))
8+
19
## [1.25.0](https://github.com/w3c/aria-at-app/compare/v1.24.0...v1.25.0) (2025-11-06)
210

311

client/components/Reports/Reports.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ const Reports = () => {
4444
<KeyMetricsBanner />
4545
<section className={clsx(reportsStyles.contentSection)}>
4646
<h1>Assistive Technology Interoperability Reports</h1>
47-
<p>Loading ...</p>
47+
<p className="loading">Loading ...</p>
4848
</section>
4949
</Container>
5050
);

client/components/Reports/SummarizeTestPlanReport.jsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,11 +317,12 @@ const SummarizeTestPlanReport = ({ testPlanVersion, testPlanReports }) => {
317317
{renderUntestableAssertionsSummary()}
318318
{testPlanReport.finalizedTestResults.map((testResult, index) => {
319319
const test = testResult.test;
320+
const testPlanDirectory = testPlanVersion.testPlan.directory;
320321

321322
const reportLink = `https://aria-at.w3.org${location.pathname}#result-${testResult.id}`;
322323
const issueLink = createIssueLink({
323324
testPlanTitle: testPlanVersion.title,
324-
testPlanDirectory: testPlanVersion.testPlan.directory,
325+
testPlanDirectory,
325326
versionString: testPlanVersion.versionString,
326327
testTitle: test.title,
327328
testRowNumber: test.rowNumber,
@@ -335,11 +336,18 @@ const SummarizeTestPlanReport = ({ testPlanVersion, testPlanReports }) => {
335336
reportLink
336337
});
337338

338-
// TODO: fix renderedUrl
339+
// TODO: fix renderedUrl source
339340
let modifiedRenderedUrl = test.renderedUrl.replace(
340341
/.+(?=\/tests)/,
341342
'https://aria-at.netlify.app'
342343
);
344+
if (!modifiedRenderedUrl.includes(testPlanDirectory)) {
345+
const lastDirectorySegment = testPlanDirectory.split('/').pop();
346+
modifiedRenderedUrl = modifiedRenderedUrl.replace(
347+
new RegExp(`/${lastDirectorySegment}/`),
348+
`/${testPlanDirectory}/`
349+
);
350+
}
343351

344352
const assertionsSummary = summarizeAssertions(
345353
getMetrics({

client/components/common/Tabs/Tabs.jsx

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const Tabs = ({ tabs, basePath }) => {
77
const location = useLocation();
88
const navigate = useNavigate();
99
const tabRefs = useRef([]);
10+
const focusRef = useRef(null);
1011

1112
const getTabIndexFromPath = () => {
1213
if (!basePath) return 0;
@@ -26,6 +27,23 @@ const Tabs = ({ tabs, basePath }) => {
2627
tabRefs.current = tabRefs.current.slice(0, tabs.length);
2728
}, [tabs]);
2829

30+
useEffect(() => {
31+
const targetIndex = focusRef.current;
32+
if (
33+
targetIndex !== null &&
34+
targetIndex === selectedTab &&
35+
tabRefs.current[targetIndex]
36+
) {
37+
// setTimeout to ensure focus happens after DOM updates and path changes
38+
setTimeout(() => {
39+
if (tabRefs.current[targetIndex]) {
40+
tabRefs.current[targetIndex].focus();
41+
}
42+
focusRef.current = null;
43+
}, 0);
44+
}
45+
}, [selectedTab, location.pathname]);
46+
2947
useEffect(() => {
3048
if (!basePath) return;
3149

@@ -43,7 +61,9 @@ const Tabs = ({ tabs, basePath }) => {
4361
}
4462

4563
const pathIndex = getTabIndexFromPath();
46-
if (pathIndex !== selectedTab) {
64+
// Don't update selectedTab if we're in the middle of a programmatic nav
65+
// (indicated by focusTargetRef being set)
66+
if (pathIndex !== selectedTab && focusRef.current === null) {
4767
setSelectedTab(pathIndex);
4868
}
4969
}, [location.pathname, tabs, basePath, selectedTab, navigate]);
@@ -87,8 +107,8 @@ const Tabs = ({ tabs, basePath }) => {
87107
}
88108

89109
event.preventDefault();
110+
focusRef.current = newIndex;
90111
updateSelectedTab(newIndex);
91-
tabRefs.current[newIndex]?.focus();
92112
};
93113

94114
return (

client/tests/e2e/TestQueue.e2e.test.js

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ describe('Test Queue admin traits when reports exist', () => {
9090
const modalDialogSectionButtonSelector =
9191
'button#disclosure-btn-apg\\/modal-dialog-0';
9292
const modalDialogTableSelector =
93-
'table[aria-label="Reports for Modal Dialog Example V25.10.16 in draft phase"]';
93+
'table[aria-label="Reports for Modal Dialog Example V25.11.06 in draft phase"]';
9494

9595
await page.waitForSelector(modalDialogSectionButtonSelector);
9696

@@ -103,7 +103,7 @@ describe('Test Queue admin traits when reports exist', () => {
103103
modalDialogSectionContainerSelector
104104
);
105105

106-
// Expand Modal Dialog's V25.10.16 section
106+
// Expand Modal Dialog's V25.11.06 section
107107
await page.click(modalDialogSectionButtonSelector);
108108
const postClickModalDialogSectionDisplay = await display(
109109
page,
@@ -169,7 +169,7 @@ describe('Test Queue admin traits when reports exist', () => {
169169
);
170170
});
171171

172-
expect(modalDialogSectionButton.includes('V25.10.16')).toBe(true);
172+
expect(modalDialogSectionButton.includes('V25.11.06')).toBe(true);
173173
expect(preClickModalDialogSectionDisplay).toBe('none');
174174
expect(postClickModalDialogSectionDisplay).toBe('block');
175175
expect(validTable).toBe(true);
@@ -181,19 +181,19 @@ describe('Test Queue admin traits when reports exist', () => {
181181
const modalDialogSectionButtonSelector =
182182
'button#disclosure-btn-apg\\/modal-dialog-0';
183183
const modalDialogTableSelector =
184-
'table[aria-label="Reports for Modal Dialog Example V25.10.16 in draft phase"]';
184+
'table[aria-label="Reports for Modal Dialog Example V25.11.06 in draft phase"]';
185185

186186
await page.waitForSelector(modalDialogSectionButtonSelector);
187187

188-
// Expand Modal Dialog's V25.10.16 section
188+
// Expand Modal Dialog's V25.11.06 section
189189
await page.click(modalDialogSectionButtonSelector);
190190

191191
// Wait for the table to render
192192
await page.waitForSelector(modalDialogTableSelector);
193193

194194
const assignTestersDropdownButton = await page.evaluateHandle(() => {
195195
const modalDialogTableSelector =
196-
'table[aria-label="Reports for Modal Dialog Example V25.10.16 in draft phase"]';
196+
'table[aria-label="Reports for Modal Dialog Example V25.11.06 in draft phase"]';
197197
const modalDialogTable = document.querySelector(
198198
modalDialogTableSelector
199199
);
@@ -263,11 +263,11 @@ describe('Test Queue admin traits when reports exist', () => {
263263
const modalDialogRequiredReportsButtonSelector =
264264
'div#disclosure-btn-controls-apg\\/modal-dialog-0 div.metadata-container button.test-plan-report-status-dialog-button';
265265
const modalDialogTableSelector =
266-
'table[aria-label="Reports for Modal Dialog Example V25.10.16 in draft phase"]';
266+
'table[aria-label="Reports for Modal Dialog Example V25.11.06 in draft phase"]';
267267

268268
await page.waitForSelector(modalDialogSectionButtonSelector);
269269

270-
// Expand Modal Dialog's V25.10.16 section
270+
// Expand Modal Dialog's V25.11.06 section
271271
await page.click(modalDialogSectionButtonSelector);
272272

273273
// Wait for the table to render
@@ -321,11 +321,11 @@ describe('Test Queue admin traits when reports exist', () => {
321321
const modalDialogRequiredReportsButtonSelector =
322322
'div#disclosure-btn-controls-apg\\/modal-dialog-0 div.metadata-container button.test-plan-report-status-dialog-button';
323323
const modalDialogTableSelector =
324-
'table[aria-label="Reports for Modal Dialog Example V25.10.16 in draft phase"]';
324+
'table[aria-label="Reports for Modal Dialog Example V25.11.06 in draft phase"]';
325325

326326
await page.waitForSelector(modalDialogSectionButtonSelector);
327327

328-
// Expand Modal Dialog's V25.10.16 section
328+
// Expand Modal Dialog's V25.11.06 section
329329
await page.click(modalDialogSectionButtonSelector);
330330

331331
// Wait for the table to render
@@ -391,7 +391,7 @@ describe('Test Queue admin traits when reports exist', () => {
391391
const sectionButtonSelector =
392392
'button#disclosure-btn-apg\\/modal-dialog-0';
393393
const tableSelector =
394-
'table[aria-label="Reports for Modal Dialog Example V25.10.16 in draft phase"]';
394+
'table[aria-label="Reports for Modal Dialog Example V25.11.06 in draft phase"]';
395395

396396
await page.waitForSelector(sectionButtonSelector);
397397
await page.click(sectionButtonSelector);
@@ -520,7 +520,7 @@ describe('Test Queue tester traits when reports exist', () => {
520520
const modalDialogSectionButtonSelector =
521521
'button#disclosure-btn-apg\\/modal-dialog-0';
522522
const modalDialogTableSelector =
523-
'table[aria-label="Reports for Modal Dialog Example V25.10.16 in draft phase"]';
523+
'table[aria-label="Reports for Modal Dialog Example V25.11.06 in draft phase"]';
524524

525525
await page.waitForSelector(modalDialogSectionButtonSelector);
526526

@@ -533,7 +533,7 @@ describe('Test Queue tester traits when reports exist', () => {
533533
modalDialogSectionContainerSelector
534534
);
535535

536-
// Expand Modal Dialog's V25.10.16 section
536+
// Expand Modal Dialog's V25.11.06 section
537537
await page.click(modalDialogSectionButtonSelector);
538538
const postClickModalDialogSectionDisplay = await display(
539539
page,
@@ -600,7 +600,7 @@ describe('Test Queue tester traits when reports exist', () => {
600600
);
601601
});
602602

603-
expect(modalDialogSectionButton.includes('V25.10.16')).toBe(true);
603+
expect(modalDialogSectionButton.includes('V25.11.06')).toBe(true);
604604
expect(preClickModalDialogSectionDisplay).toBe('none');
605605
expect(postClickModalDialogSectionDisplay).toBe('block');
606606
expect(validTable).toBe(true);
@@ -612,11 +612,11 @@ describe('Test Queue tester traits when reports exist', () => {
612612
const modalDialogSectionButtonSelector =
613613
'button#disclosure-btn-apg\\/modal-dialog-0';
614614
const modalDialogTableSelector =
615-
'table[aria-label="Reports for Modal Dialog Example V25.10.16 in draft phase"]';
615+
'table[aria-label="Reports for Modal Dialog Example V25.11.06 in draft phase"]';
616616

617617
await page.waitForSelector(modalDialogSectionButtonSelector);
618618

619-
// Expand Modal Dialog's V25.10.16 section
619+
// Expand Modal Dialog's V25.11.06 section
620620
await page.click(modalDialogSectionButtonSelector);
621621

622622
// Wait for the table to render
@@ -655,7 +655,7 @@ describe('Test Queue tester traits when reports exist', () => {
655655

656656
const assignYourselfButton = await page.evaluateHandle(() => {
657657
const modalDialogTableSelector =
658-
'table[aria-label="Reports for Modal Dialog Example V25.10.16 in draft phase"]';
658+
'table[aria-label="Reports for Modal Dialog Example V25.11.06 in draft phase"]';
659659
const modalDialogTable = document.querySelector(
660660
modalDialogTableSelector
661661
);
@@ -719,7 +719,7 @@ describe('Test Queue tester traits when reports exist', () => {
719719
const modalDialogSectionButtonSelector =
720720
'button#disclosure-btn-apg\\/modal-dialog-0';
721721
const modalDialogTableSelector =
722-
'table[aria-label="Reports for Modal Dialog Example V25.10.16 in draft phase"]';
722+
'table[aria-label="Reports for Modal Dialog Example V25.11.06 in draft phase"]';
723723

724724
await page.waitForSelector(modalDialogSectionButtonSelector);
725725
await page.click(modalDialogSectionButtonSelector);

client/tests/e2e/TestRun.e2e.test.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,10 @@ describe('Test Run when signed in as admin', () => {
114114
page,
115115
{
116116
testPlanSectionButtonSelector = 'button#disclosure-btn-apg\\/modal-dialog-0',
117-
testPlanTableSelector = 'table[aria-label="Reports for Modal Dialog Example V25.10.16 in draft phase"]'
117+
testPlanTableSelector = 'table[aria-label="Reports for Modal Dialog Example V25.11.06 in draft phase"]'
118118
} = {}
119119
) => {
120-
// Expand Modal Dialog's V25.10.16 section
120+
// Expand Modal Dialog's V25.11.06 section
121121
await page.waitForSelector(testPlanSectionButtonSelector);
122122
await page.click(testPlanSectionButtonSelector);
123123

@@ -127,7 +127,7 @@ describe('Test Run when signed in as admin', () => {
127127
// Find the 'Open run as...' dropdown button from the Actions Column
128128
await page.evaluate(() => {
129129
const modalDialogTableSelector =
130-
'table[aria-label="Reports for Modal Dialog Example V25.10.16 in draft phase"]';
130+
'table[aria-label="Reports for Modal Dialog Example V25.11.06 in draft phase"]';
131131
const modalDialogTable = document.querySelector(modalDialogTableSelector);
132132

133133
// Find the 'Open run as...' button from the Actions Column
@@ -281,13 +281,13 @@ describe('Test Run when signed in as tester', () => {
281281
page,
282282
{
283283
testPlanSectionButtonSelector = 'button#disclosure-btn-apg\\/modal-dialog-0',
284-
testPlanTableSelector = 'table[aria-label="Reports for Modal Dialog Example V25.10.16 in draft phase"]'
284+
testPlanTableSelector = 'table[aria-label="Reports for Modal Dialog Example V25.11.06 in draft phase"]'
285285
} = {}
286286
) => {
287287
const startTestingButtonSelector =
288288
'a[role="button"] ::-p-text(Start Testing)';
289289

290-
// Expand Modal Dialog's V25.10.16 section
290+
// Expand Modal Dialog's V25.11.06 section
291291
await page.waitForSelector(testPlanSectionButtonSelector);
292292
await page.click(testPlanSectionButtonSelector);
293293

@@ -340,10 +340,10 @@ describe('Test Run when signed in as tester', () => {
340340
page,
341341
{
342342
testPlanSectionButtonSelector = 'button#disclosure-btn-apg\\/modal-dialog-0',
343-
testPlanTableSelector = 'table[aria-label="Reports for Modal Dialog Example V25.10.16 in draft phase"]'
343+
testPlanTableSelector = 'table[aria-label="Reports for Modal Dialog Example V25.11.06 in draft phase"]'
344344
} = {}
345345
) => {
346-
// Expand Modal Dialog's V25.10.16 section
346+
// Expand Modal Dialog's V25.11.06 section
347347
await page.waitForSelector(testPlanSectionButtonSelector);
348348
await page.click(testPlanSectionButtonSelector);
349349

@@ -353,7 +353,7 @@ describe('Test Run when signed in as tester', () => {
353353
// Find the 'View Results for...' dropdown button from the Actions Column
354354
await page.evaluate(() => {
355355
const modalDialogTableSelector =
356-
'table[aria-label="Reports for Modal Dialog Example V25.10.16 in draft phase"]';
356+
'table[aria-label="Reports for Modal Dialog Example V25.11.06 in draft phase"]';
357357
const modalDialogTable = document.querySelector(modalDialogTableSelector);
358358

359359
// Find the 'View Results for...' button from the Actions Column
@@ -799,7 +799,7 @@ describe('Test Run when signed in as tester', () => {
799799
testPlanSectionButtonSelector:
800800
'button#disclosure-btn-apg\\/horizontal-slider-0',
801801
testPlanTableSelector:
802-
'table[aria-label="Reports for Color Viewer Slider V25.10.16 in draft phase"]'
802+
'table[aria-label="Reports for Color Viewer Slider V25.11.06 in draft phase"]'
803803
});
804804
await handlePageSubmit(page, { expectConflicts: false });
805805
}
@@ -831,7 +831,7 @@ describe('Test Run when signed in as tester', () => {
831831
const sectionButtonSelector =
832832
'button#disclosure-btn-apg\\/modal-dialog-0';
833833
const tableSelector =
834-
'table[aria-label="Reports for Modal Dialog Example V25.10.16 in draft phase"]';
834+
'table[aria-label="Reports for Modal Dialog Example V25.11.06 in draft phase"]';
835835

836836
await page.waitForSelector(sectionButtonSelector);
837837
await page.click(sectionButtonSelector);

0 commit comments

Comments
 (0)