Changing alert back to a focus and fixing tests

This commit is contained in:
Jonathan Bobel
2025-04-02 11:39:07 -04:00
parent 38451d77ad
commit 193184983d
4 changed files with 12 additions and 9 deletions
+4 -2
View File
@@ -10,11 +10,13 @@ function announceUploadStatusFromElement() {
if (message) { if (message) {
srRegion.textContent = ''; srRegion.textContent = '';
setTimeout(() => { setTimeout(() => {
srRegion.textContent = message; srRegion.textContent = message + '\u00A0'; // add a non-breaking space
}, 50); srRegion.focus(); // Optional
}, 300);
} }
} }
// Exported for use in tests // Exported for use in tests
function initUploadStatusAnnouncer() { function initUploadStatusAnnouncer() {
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
+1
View File
@@ -14,6 +14,7 @@
<div id="upload-status-live" <div id="upload-status-live"
class="usa-sr-only" class="usa-sr-only"
aria-live="assertive" aria-live="assertive"
tabindex="-1"
role="status"> role="status">
</div> </div>
<script nonce="{{ csp_nonce() }}">document.body.className = ((document.body.className) ? document.body.className + ' js-enabled' : 'js-enabled');</script> <script nonce="{{ csp_nonce() }}">document.body.className = ((document.body.className) ? document.body.className + ' js-enabled' : 'js-enabled');</script>
+2 -2
View File
@@ -19,8 +19,8 @@ test('writes upload message to the live region on DOMContentLoaded', () => {
document.dispatchEvent(new Event('DOMContentLoaded')); document.dispatchEvent(new Event('DOMContentLoaded'));
// Live region will be cleared first, then updated // Live region will be cleared first, then updated
jest.advanceTimersByTime(50); jest.advanceTimersByTime(300);
const srRegion = document.getElementById('upload-status-live'); const srRegion = document.getElementById('upload-status-live');
expect(srRegion.textContent).toBe('File upload successful'); expect(srRegion.textContent).toBe('File upload successful\u00A0');
}); });
+5 -5
View File
@@ -146,10 +146,10 @@ describe('announceUploadStatusFromElement', () => {
expect(srRegion.textContent).toBe(''); expect(srRegion.textContent).toBe('');
// Fast-forward the timer // Fast-forward the timer
jest.advanceTimersByTime(50); jest.advanceTimersByTime(300);
// Confirm it updates after delay // Confirm it updates after delay
expect(srRegion.textContent).toBe('File upload failed'); expect(srRegion.textContent).toBe('File upload failed\u00A0');
}); });
test('announces success message from #upload-success if no error is present', () => { test('announces success message from #upload-success if no error is present', () => {
@@ -163,9 +163,9 @@ describe('announceUploadStatusFromElement', () => {
expect(srRegion.textContent).toBe(''); expect(srRegion.textContent).toBe('');
jest.advanceTimersByTime(50); jest.advanceTimersByTime(301);
expect(srRegion.textContent).toBe('File upload successful'); expect(srRegion.textContent).toBe('File upload successful\u00A0');
}); });
test('does nothing if neither success nor error is present', () => { test('does nothing if neither success nor error is present', () => {
@@ -178,7 +178,7 @@ describe('announceUploadStatusFromElement', () => {
// Should not clear or update if no message element is found // Should not clear or update if no message element is found
expect(srRegion.textContent).toBe('Old message'); expect(srRegion.textContent).toBe('Old message');
jest.advanceTimersByTime(50); jest.advanceTimersByTime(300);
// Still unchanged // Still unchanged
expect(srRegion.textContent).toBe('Old message'); expect(srRegion.textContent).toBe('Old message');