From ce0d1537184c83c47c4925a7f6c13c3f7784f54c Mon Sep 17 00:00:00 2001 From: James Person Date: Thu, 9 May 2024 10:02:11 -0400 Subject: [PATCH 01/30] A11y - Install Cypress Axe, new test file --- backend/cypress/e2e/accessibility.cy.js | 129 +++++++++++++++++++++++ backend/cypress/plugins/index.js | 13 ++- backend/cypress/support/e2e.js | 4 +- backend/cypress/support/log-functions.js | 22 ++++ backend/package-lock.json | 24 +++++ backend/package.json | 1 + 6 files changed, 191 insertions(+), 2 deletions(-) create mode 100644 backend/cypress/e2e/accessibility.cy.js create mode 100644 backend/cypress/support/log-functions.js diff --git a/backend/cypress/e2e/accessibility.cy.js b/backend/cypress/e2e/accessibility.cy.js new file mode 100644 index 000000000..0e507d004 --- /dev/null +++ b/backend/cypress/e2e/accessibility.cy.js @@ -0,0 +1,129 @@ +import { terminalLog } from '../support/log-functions' + +const screen_sizes = ['iphone-6', ['iphone-6', 'landscape'], [3840, 2160]] + +function test_check_a11y(url, pageName, report_id) { + if (report_id) { + it(`Tests the full ${pageName} page for all screen sizes`, () => { + check_a11y(`${url}${report_id}`, 'eligibility'); + }) + } else { + it(`Tests the full ${pageName} page for all screen sizes`, () => { + check_a11y(url) + }) + } +} + +function check_a11y(url) { + cy.visit(url) + cy.injectAxe() + screen_sizes.forEach((size) => { + if (Cypress._.isArray(size)) { + cy.viewport(size[0], size[1]) + } else { + cy.viewport(size) + } + cy.checkA11y(null, null, terminalLog) + }) +} + +describe('A11y Testing on Home Page', () => { + test_check_a11y('/', 'home'); + + it('Tests the pop out primary nav', () => { + cy.visit('/') + cy.injectAxe() + cy.get(".usa-menu-btn").contains("Menu").click() + cy.checkA11y(null, null, terminalLog) + }) + + // Log in modal fails contrast tests with the darker background, which is expected. + // it('Tests the log in modal', () => { + // cy.get('[aria-controls="login-modal"]').contains("Submit an audit").click(); + // cy.checkA11y(null, null, terminalLog) + // }) +}) + +describe('A11y Testing on search pages', () => { + before(() => { + cy.visit('/dissemination/search/') + cy.get('label').contains("All years").click() + cy.get('[id="search-form"]').submit() + cy.get('tbody > :nth-child(1) > td > a').invoke('attr', 'href').as('summary_url') + }) + + it(`Tests the summary page for all screen sizes`, () => { + cy.get('@summary_url').then(val => { + check_a11y(val) + }) + }) + + test_check_a11y('/dissemination/search/', 'basic search'); + test_check_a11y('/dissemination/search/advanced/', 'advanced search'); +}) + + +describe('A11y Testing on pre-submission pages', () => { + test_check_a11y('/audit/', 'my submissions'); + test_check_a11y('/report_submission/eligibility/', 'eligibility'); + test_check_a11y('/report_submission/auditeeinfo/', 'auditee info'); + test_check_a11y('/report_submission/accessandsubmission/', 'submission access'); +}) + +describe('A11y tests on an in progress report', () => { + before(() => { + cy.visit('/audit') + cy.get('tr').contains('In Progress').parent().parent().contains('GSAFAC').invoke('text').as('report_id') + }) + + it(`Tests submission pages for all screen sizes`, () => { + cy.get('@report_id').then(val => { + // Submission items: + check_a11y(`/audit/submission-progress/${val}`) + check_a11y(`/report_submission/general-information/${val}`) + check_a11y(`/audit/audit-info/${val}`) + check_a11y(`/audit/upload-report/${val}`) + check_a11y(`/report_submission/federal-awards/${val}`) + // Cross validation: + check_a11y(`/audit/cross-validation/${val}`) + check_a11y(`/audit/ready-for-certification/${val}`) + // Access Management: + check_a11y(`/audit/manage-submission/${val}`) + check_a11y(`/audit/manage-submission/add-editor/${val}`) + check_a11y(`/audit/manage-submission/auditee-certifying-official/${val}`) + check_a11y(`/audit/manage-submission/auditor-certifying-official/${val}`) + }) + }) +}) + +describe('A11y tests on a ready for certification report', () => { + before(() => { + cy.visit('/audit') + cy.get('tr').contains('Ready for Certification').parent().parent().contains('GSAFAC').invoke('text').as('report_id') + }) + + it(`Tests submission pages for all screen sizes after locking for certification`, () => { + cy.get('@report_id').then(val => { + // Check checklist after locking for certification: + check_a11y(`/audit/submission-progress/${val}`) + // Certification and final submission pages: + check_a11y(`/audit/auditor-certification/${val}`) + check_a11y(`/audit/auditee-certification/${val}`) + check_a11y(`/audit/submission/${val}`) + }) + }) +}) + +describe('A11y tests on a fully submitted report', () => { + before(() => { + cy.visit('/audit') + cy.get('tr').contains('Accepted').parent().parent().contains('GSAFAC').invoke('text').as('report_id') + }) + + it(`Tests submission checklist for all screen sizes after submission`, () => { + cy.get('@report_id').then(val => { + // Check the checklist after submission: + check_a11y(`/audit/submission-progress/${val}`) + }) + }) +}) \ No newline at end of file diff --git a/backend/cypress/plugins/index.js b/backend/cypress/plugins/index.js index f39f3dcb3..139f4c51c 100644 --- a/backend/cypress/plugins/index.js +++ b/backend/cypress/plugins/index.js @@ -18,6 +18,17 @@ // eslint-disable-next-line no-unused-vars module.exports = (on, config) => { on("task", { - generateOTP: require("cypress-otp") + generateOTP: require("cypress-otp"), + log(message) { + console.log(message) + + return null + }, + table(message) { + console.table(message) + + return null + } }); + } diff --git a/backend/cypress/support/e2e.js b/backend/cypress/support/e2e.js index 8e86ba548..285ae4e4c 100644 --- a/backend/cypress/support/e2e.js +++ b/backend/cypress/support/e2e.js @@ -14,6 +14,8 @@ // *********************************************************** // Import commands.js using ES2015 syntax: +import './commands' +import 'cypress-axe' // Alternatively you can use CommonJS syntax: -require('./commands'); +// require('./commands'); diff --git a/backend/cypress/support/log-functions.js b/backend/cypress/support/log-functions.js new file mode 100644 index 000000000..e077924fc --- /dev/null +++ b/backend/cypress/support/log-functions.js @@ -0,0 +1,22 @@ +export function terminalLog(violations) { + cy.task( + 'log', + `${violations.length} accessibility violation${violations.length === 1 ? '' : 's' + } ${violations.length === 1 ? 'was' : 'were'} detected` + ) + + console.log(violations) + + // Pluck specific keys for readability. Add helpUrl if messages are not as clear as needed. + const violationData = violations.map( + ({ id, impact, description, nodes, helpUrl }) => ({ + id, + impact, + description, + nodes: nodes.length, + helpUrl: helpUrl + }) + ) + + cy.task('table', violationData) +} \ No newline at end of file diff --git a/backend/package-lock.json b/backend/package-lock.json index 91be90b70..a8db51359 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -21,6 +21,7 @@ "devDependencies": { "@4tw/cypress-drag-drop": "^2.2.5", "cypress": "^13.8.1", + "cypress-axe": "^1.5.0", "cypress-file-upload": "^5.0.8", "cypress-otp": "^1.0.3", "eslint": "8.57", @@ -1306,6 +1307,16 @@ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", "dev": true }, + "node_modules/axe-core": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.1.tgz", + "integrity": "sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1919,6 +1930,19 @@ "node": "^16.0.0 || ^18.0.0 || >=20.0.0" } }, + "node_modules/cypress-axe": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cypress-axe/-/cypress-axe-1.5.0.tgz", + "integrity": "sha512-Hy/owCjfj+25KMsecvDgo4fC/781ccL+e8p+UUYoadGVM2ogZF9XIKbiM6KI8Y3cEaSreymdD6ZzccbI2bY0lQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "axe-core": "^3 || ^4", + "cypress": "^10 || ^11 || ^12 || ^13" + } + }, "node_modules/cypress-file-upload": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/cypress-file-upload/-/cypress-file-upload-5.0.8.tgz", diff --git a/backend/package.json b/backend/package.json index 7fd8c332a..9756199f4 100644 --- a/backend/package.json +++ b/backend/package.json @@ -26,6 +26,7 @@ "devDependencies": { "@4tw/cypress-drag-drop": "^2.2.5", "cypress": "^13.8.1", + "cypress-axe": "^1.5.0", "cypress-file-upload": "^5.0.8", "cypress-otp": "^1.0.3", "eslint": "8.57", From b1513f258e73320d3831368a200661b01f61dc57 Mon Sep 17 00:00:00 2001 From: James Person Date: Thu, 9 May 2024 10:03:23 -0400 Subject: [PATCH 02/30] A11y - Allow SAC/home access if DISABLE_AUTH =true --- backend/audit/mixins.py | 3 ++- backend/audit/views/home.py | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/backend/audit/mixins.py b/backend/audit/mixins.py index 626836611..19387a0c1 100644 --- a/backend/audit/mixins.py +++ b/backend/audit/mixins.py @@ -4,6 +4,7 @@ from django.http.request import HttpRequest from django.http.response import HttpResponse from django.core.exceptions import PermissionDenied +from django.conf import settings from .models import Access, SingleAuditChecklist @@ -50,7 +51,7 @@ def dispatch(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpRespo sac = SingleAuditChecklist.objects.get(report_id=kwargs["report_id"]) - if not has_access(sac, request.user): + if not has_access(sac, request.user) and not settings.DISABLE_AUTH: raise PermissionDenied(PERMISSION_DENIED_MESSAGE) except SingleAuditChecklist.DoesNotExist: raise PermissionDenied(PERMISSION_DENIED_MESSAGE) diff --git a/backend/audit/views/home.py b/backend/audit/views/home.py index ce30f60ef..cf86c565b 100644 --- a/backend/audit/views/home.py +++ b/backend/audit/views/home.py @@ -1,6 +1,7 @@ -from django.views import generic +from django.conf import settings from django.shortcuts import render, redirect from django.urls import reverse +from django.views import generic # class based views for posts @@ -13,9 +14,9 @@ class Home(generic.View): """ def get(self, request, *args, **kwargs): - if request.user.is_authenticated: + if request.user.is_authenticated and not settings.DISABLE_AUTH: url = reverse("audit:MySubmissions") return redirect(url) template_name = "home.html" - extra_context = {} + extra_context = {"DISABLE_AUTH": settings.DISABLE_AUTH} return render(request, template_name, extra_context) From e28d1fa509495f2c719be1394ba7dfaa4f40eb46 Mon Sep 17 00:00:00 2001 From: James Person Date: Thu, 9 May 2024 10:05:13 -0400 Subject: [PATCH 03/30] A11y - load_fixtures for new SACs, dummy dissem --- backend/audit/fixtures/dissemination.py | 42 +++++++++++++++++++ .../audit/fixtures/single_audit_checklist.py | 23 ++++++++-- .../management/commands/load_fixtures.py | 3 +- .../end_to_end_test_data_generator.py | 2 +- 4 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 backend/audit/fixtures/dissemination.py diff --git a/backend/audit/fixtures/dissemination.py b/backend/audit/fixtures/dissemination.py new file mode 100644 index 000000000..126ca75ee --- /dev/null +++ b/backend/audit/fixtures/dissemination.py @@ -0,0 +1,42 @@ +""" +Fixtures for dissemination models. +We want a few example submissions for testing front end accessibility. +""" + +import logging +from model_bakery import baker +from dissemination.models import ( + General, + FederalAward, + Finding, + FindingText, + Note, + CapText, +) + +logger = logging.getLogger(__name__) + +sac_info_without_findings = { + "auditee_name": "Test SAC - No findings", + "auditee_uei": "GSA_TESTDATA", + "audit_year": "2024", + "report_id": "2024-06-TSTDAT-0000000001", +} + + +def load_dissemination(): + """ + Generate an example SAC with an accompanying award. + """ + logger.info("Creating example SACs for dissemination.") + + report_id_no_findings = sac_info_without_findings.get("report_id", "") + sac_no_findings = General.objects.filter( + report_id=report_id_no_findings, + ).first() + if sac_no_findings is None: + general_no_findings = baker.make(General, **sac_info_without_findings) + baker.make(FederalAward, report_id=general_no_findings) + logger.info("Created SAC example %s", report_id_no_findings) + else: + logger.info("SAC %s already exists, skipping.", report_id_no_findings) diff --git a/backend/audit/fixtures/single_audit_checklist.py b/backend/audit/fixtures/single_audit_checklist.py index 2c5fef00d..abde66455 100644 --- a/backend/audit/fixtures/single_audit_checklist.py +++ b/backend/audit/fixtures/single_audit_checklist.py @@ -119,12 +119,13 @@ def fake_auditee_certification(): return data_step_1, data_step_2 -def _create_sac(user, auditee_name): +def _create_sac(user, auditee_name, submission_status="in_progress"): """Create a single example SAC.""" SingleAuditChecklist = apps.get_model("audit.SingleAuditChecklist") sac = SingleAuditChecklist.objects.create( submitted_by=user, general_information=_fake_general_information(auditee_name), + submission_status=submission_status, ) Access = apps.get_model("audit.Access") @@ -134,6 +135,18 @@ def _create_sac(user, auditee_name): email=user.email, role="editor", ) + Access.objects.create( + sac=sac, + user=user, + email=user.email, + role="certifying_auditor_contact", + ) + Access.objects.create( + sac=sac, + user=user, + email=user.email, + role="certifying_auditee_contact", + ) logger.info("Created single audit checklist %s", sac) return sac @@ -193,9 +206,10 @@ def _post_create_federal_awards(this_sac, this_user): SACS = [ {"auditee_name": "SAC in progress"}, { - "auditee_name": "Federal awards submitted", - "post_create_callable": _post_create_federal_awards, + "auditee_name": "SAC ready for certification", + "submission_status": "ready_for_certification", }, + {"auditee_name": "SAC fully submitted", "submission_status": "disseminated"}, ] @@ -205,12 +219,13 @@ def _load_single_audit_checklists_for_user(user): SingleAuditChecklist = apps.get_model("audit.SingleAuditChecklist") for item_info in SACS: auditee_name = item_info["auditee_name"] + submission_status = item_info.get("submission_status", "in_progress") sac = SingleAuditChecklist.objects.filter( submitted_by=user, general_information__auditee_name=auditee_name ).first() if sac is None: # need to make this object - sac = _create_sac(user, auditee_name) + sac = _create_sac(user, auditee_name, submission_status) def load_single_audit_checklists(): diff --git a/backend/audit/management/commands/load_fixtures.py b/backend/audit/management/commands/load_fixtures.py index dfa0196cb..9341cf878 100644 --- a/backend/audit/management/commands/load_fixtures.py +++ b/backend/audit/management/commands/load_fixtures.py @@ -13,7 +13,7 @@ load_single_audit_checklists, load_single_audit_checklists_for_email_address, ) - +from audit.fixtures.dissemination import load_dissemination from users.fixtures import load_users logger = logging.getLogger(__name__) @@ -33,6 +33,7 @@ def handle(self, *args, **options): if not options.get("email_addresses"): load_users() load_single_audit_checklists() + load_dissemination() logger.info("All fixtures loaded.") else: # We assume each arg is an email address: diff --git a/backend/dissemination/management/commands/end_to_end_test_data_generator.py b/backend/dissemination/management/commands/end_to_end_test_data_generator.py index a1d442e66..07773af68 100644 --- a/backend/dissemination/management/commands/end_to_end_test_data_generator.py +++ b/backend/dissemination/management/commands/end_to_end_test_data_generator.py @@ -54,7 +54,7 @@ def handle(self, *args, **options): (191734, 22), ] - if ENVIRONMENT in ["LOCAL", "DEVELOPMENT", "PREVIEW", "STAGING"]: + if ENVIRONMENT in ["LOCAL", "DEVELOPMENT", "PREVIEW", "STAGING", "TESTING"]: if dbkeys_str and years_str: logger.info( f"Generating test reports for DBKEYS: {dbkeys_str} and YEARS: {years_str}" From 9968813306976e7ae04cebdd25d337c0bf60b72c Mon Sep 17 00:00:00 2001 From: James Person Date: Thu, 9 May 2024 10:05:47 -0400 Subject: [PATCH 04/30] Linting, remove unused file. --- backend/audit/test_validators.py | 6 +++--- .../dissemination/management/commands/populate_aln_table.py | 0 2 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 backend/dissemination/management/commands/populate_aln_table.py diff --git a/backend/audit/test_validators.py b/backend/audit/test_validators.py index 0e96633e9..3a8f441b6 100644 --- a/backend/audit/test_validators.py +++ b/backend/audit/test_validators.py @@ -932,9 +932,9 @@ def test_error_raised_for_wrong_value_types(self): """Test that wrong value types raise a validation error.""" for case in self.SIMPLE_CASES: case_copy = jsoncopy(case) - case_copy["is_tribal_information_authorized_to_be_public"] = ( - "incorrect_type" - ) + case_copy[ + "is_tribal_information_authorized_to_be_public" + ] = "incorrect_type" with self.assertRaises(ValidationError): validate_tribal_data_consent_json(case_copy) diff --git a/backend/dissemination/management/commands/populate_aln_table.py b/backend/dissemination/management/commands/populate_aln_table.py deleted file mode 100644 index e69de29bb..000000000 From 92b0d3f355e1d016cb3fe758a1c1a2da850978da Mon Sep 17 00:00:00 2001 From: James Person Date: Thu, 9 May 2024 10:06:23 -0400 Subject: [PATCH 05/30] A11y - HTML and SCSS changes for accessibility --- .../templates/audit/audit-info-form.html | 4 +-- .../audit/auditee-certification-step-1.html | 4 +-- .../audit/auditor-certification-step-1.html | 4 +-- .../cross-validation-results.html | 3 +- .../cross-validation/cross-validation.html | 5 ++- .../ready-for-certification.html | 5 ++- .../manage-submission-change-access.html | 3 +- .../templates/audit/manage-submission.html | 8 ++--- .../key-info-certification.html | 6 ++-- .../key-info-pre-validation.html | 6 ++-- .../key-info-preliminary.html | 6 ++-- .../preview-button-group.html | 4 +-- .../submission-checklist.html | 12 +++---- .../audit/templates/audit/upload-report.html | 35 +++++++++---------- .../templates/search-alert-info.html | 8 ++--- backend/dissemination/templates/search.html | 3 +- backend/dissemination/templates/summary.html | 10 +++--- .../report_submission/delete-file-page.html | 3 +- .../templates/report_submission/gen-form.html | 2 +- .../report_submission/upload-page.html | 9 +++-- backend/static/scss/_search.scss | 4 +-- backend/templates/home.html | 5 +-- backend/templates/includes/nav_primary.html | 4 +-- 23 files changed, 73 insertions(+), 80 deletions(-) diff --git a/backend/audit/templates/audit/audit-info-form.html b/backend/audit/templates/audit/audit-info-form.html index b57dd2930..b589c4318 100644 --- a/backend/audit/templates/audit/audit-info-form.html +++ b/backend/audit/templates/audit/audit-info-form.html @@ -244,6 +244,7 @@

Federal programs

Federal programs - Cancel + Cancel diff --git a/backend/audit/templates/audit/auditee-certification-step-1.html b/backend/audit/templates/audit/auditee-certification-step-1.html index be3cf95d4..c01de146d 100644 --- a/backend/audit/templates/audit/auditee-certification-step-1.html +++ b/backend/audit/templates/audit/auditee-certification-step-1.html @@ -9,8 +9,8 @@ method="post"> {% csrf_token %}
- Auditee certification -

Check the box next to each item confirm your report meets the requirements.

+

Auditee certification

+

Check the box next to each item confirm your report meets the requirements.

You must check all boxes must be checked in order to certify your single audit.

{% csrf_token %}
- Auditor certification -

Check the box next to each item confirm your report meets the requirements.

+

Auditor certification

+

Check the box next to each item confirm your report meets the requirements.

You must check all boxes in order to certify your single audit.

No errors were found. Proceed to certification {% endif %} - Cancel + Cancel
diff --git a/backend/audit/templates/audit/cross-validation/cross-validation.html b/backend/audit/templates/audit/cross-validation/cross-validation.html index b224be20a..95790bc78 100644 --- a/backend/audit/templates/audit/cross-validation/cross-validation.html +++ b/backend/audit/templates/audit/cross-validation/cross-validation.html @@ -6,7 +6,7 @@
{% csrf_token %}
- Pre-submission validation +

Pre-submission validation

Check your workbooks to confirm you entered your data correctly. This tool also cross-validates the workbooks against each other.

@@ -19,8 +19,7 @@
- Cancel + Cancel
diff --git a/backend/audit/templates/audit/cross-validation/ready-for-certification.html b/backend/audit/templates/audit/cross-validation/ready-for-certification.html index e8affcedf..70911c72a 100644 --- a/backend/audit/templates/audit/cross-validation/ready-for-certification.html +++ b/backend/audit/templates/audit/cross-validation/ready-for-certification.html @@ -6,7 +6,7 @@
{% csrf_token %}
- Lock for certification +

Lock for certification

You are now ready to lock your single audit submission for auditee and auditor certification. Each must review and certify the documents before they can be submitted to the FAC.

@@ -20,8 +20,7 @@ Cancel + href="{% url 'audit:SubmissionProgress' report_id %}">Cancel
diff --git a/backend/audit/templates/audit/manage-submission-change-access.html b/backend/audit/templates/audit/manage-submission-change-access.html index 58035dcc1..61216e7dd 100644 --- a/backend/audit/templates/audit/manage-submission-change-access.html +++ b/backend/audit/templates/audit/manage-submission-change-access.html @@ -51,8 +51,7 @@

Add Audit Editor

Cancel + href="{% url 'audit:ManageSubmission' report_id %}">Cancel diff --git a/backend/audit/templates/audit/manage-submission.html b/backend/audit/templates/audit/manage-submission.html index abb930c47..8d79d5b70 100644 --- a/backend/audit/templates/audit/manage-submission.html +++ b/backend/audit/templates/audit/manage-submission.html @@ -5,7 +5,7 @@
{% csrf_token %}
- Manage user roles +

Manage user roles

{% if auditee_name %}

{{ auditee_name }}

{% endif %}

@@ -67,11 +67,9 @@

(*) Indicates user has not logged in to view this submission.

Add editor + href="{{ add_editor_url }}">Add editor Return to checklist + href="{{ progress_url }}">Return to checklist
{% include "audit-metadata.html" %} diff --git a/backend/audit/templates/audit/submission_checklist/key-info-certification.html b/backend/audit/templates/audit/submission_checklist/key-info-certification.html index 6cef5548c..66c3c30bc 100644 --- a/backend/audit/templates/audit/submission_checklist/key-info-certification.html +++ b/backend/audit/templates/audit/submission_checklist/key-info-certification.html @@ -1,8 +1,8 @@ {% comment %} Key information (certification steps) {% endcomment %} -
+
  • + aria-label="summary-box-certification">
    Key information @@ -15,4 +15,4 @@
    -
  • + diff --git a/backend/audit/templates/audit/submission_checklist/key-info-pre-validation.html b/backend/audit/templates/audit/submission_checklist/key-info-pre-validation.html index 8a2c980fb..7fd3c3c53 100644 --- a/backend/audit/templates/audit/submission_checklist/key-info-pre-validation.html +++ b/backend/audit/templates/audit/submission_checklist/key-info-pre-validation.html @@ -1,8 +1,8 @@ {% comment %} Key information (certification steps) {% endcomment %} -
    +
  • + aria-label="summary-box-pre-validation">
    Key information @@ -13,4 +13,4 @@
    -
  • \ No newline at end of file + \ No newline at end of file diff --git a/backend/audit/templates/audit/submission_checklist/key-info-preliminary.html b/backend/audit/templates/audit/submission_checklist/key-info-preliminary.html index 4296d3428..de83bafa7 100644 --- a/backend/audit/templates/audit/submission_checklist/key-info-preliminary.html +++ b/backend/audit/templates/audit/submission_checklist/key-info-preliminary.html @@ -1,7 +1,7 @@ -
    +
  • + aria-label="summary-box-preliminary">
    Key information @@ -16,4 +16,4 @@
    -
  • \ No newline at end of file + \ No newline at end of file diff --git a/backend/audit/templates/audit/submission_checklist/preview-button-group.html b/backend/audit/templates/audit/submission_checklist/preview-button-group.html index 0de190121..c1a47c0a3 100644 --- a/backend/audit/templates/audit/submission_checklist/preview-button-group.html +++ b/backend/audit/templates/audit/submission_checklist/preview-button-group.html @@ -7,7 +7,7 @@ 3. The unlock page {% endcomment %} - \ No newline at end of file + \ No newline at end of file diff --git a/backend/audit/templates/audit/submission_checklist/submission-checklist.html b/backend/audit/templates/audit/submission_checklist/submission-checklist.html index 10afa5965..245a8dc5c 100644 --- a/backend/audit/templates/audit/submission_checklist/submission-checklist.html +++ b/backend/audit/templates/audit/submission_checklist/submission-checklist.html @@ -106,10 +106,10 @@ {% comment %} Submit to the FAC for processing {% endcomment %} {% if submission.enabled %} -
    +
  • + aria-label="summary-box-submission">

    @@ -121,12 +121,12 @@

    -
  • + {% else %} -
    +
  • + aria-label="summary-box-submission">

    @@ -138,7 +138,7 @@

    -
  • + {% endif %} diff --git a/backend/audit/templates/audit/upload-report.html b/backend/audit/templates/audit/upload-report.html index 2dbea8af3..f772c2606 100644 --- a/backend/audit/templates/audit/upload-report.html +++ b/backend/audit/templates/audit/upload-report.html @@ -13,16 +13,16 @@

    Upload single audit report package

    There were errors when attempting to submit the form. Scroll down for more details. {% endif %} -
      -
      - {% csrf_token %} -
      + + {% csrf_token %} +
      +
      1. -

        Formatting requirements:

        +

        Formatting requirements:

        • Less than 30MB
        • Unlocked with no password requirements
        • @@ -32,13 +32,13 @@

          Formatting requirements:

      2. -

        Remove all Personally Identifiable Information (PII)

        +

        Remove all Personally Identifiable Information (PII)

        PII includes but is not limited to: Social Security Numbers, account numbers, vehicle identification numbers, copies of cancelled checks, student names, dates of birth, personal addresses or personal phone numbers.

      3. -

        Component page number

        +

        Component page number

        Each required component on the checklist must have a numeric page number. Enter the starting PDF page number for each of the components listed below. * indicates a required field.

        @@ -56,7 +56,7 @@

        Component page number

        {% endif %} Component page number
      4. -

        {% if already_submitted %}Re-upload{% else %}Upload{% endif %} your PDF

        +

        {% if already_submitted %}Re-upload{% else %}Upload{% endif %} your PDF

        Select a compliant PDF to upload. *

        @@ -84,7 +84,8 @@

        {% if already_submitted %}Re-upload{% else type="file" /> {{ form.errors.upload_report | striptags }}

      5. -
      +
    + {% if already_submitted %}

    A file has already been uploaded for this section. A successful reupload will overwrite your previous submission. @@ -96,10 +97,8 @@

    {% if already_submitted %}Re-upload{% else - Cancel - - + Cancel + {% include "audit-metadata.html" %} diff --git a/backend/dissemination/templates/search-alert-info.html b/backend/dissemination/templates/search-alert-info.html index 67894f656..95db5c203 100644 --- a/backend/dissemination/templates/search-alert-info.html +++ b/backend/dissemination/templates/search-alert-info.html @@ -2,24 +2,24 @@ {% load sprite_helper %}
    -

    Searching the FAC database

    +

    Searching the FAC database

    Learn more about search on our Search Resources page.

    -

    Summary reports

    +

    Summary reports

    For search results of {{ summary_report_download_limit|intcomma }} submissions or less, you can download a combined spreadsheet of all data. If you need to download more than {{ summary_report_download_limit|intcomma }} submissions, try limiting your search parameters to download in batches.

    {% if advanced_search_flag %} -

    Basic search

    +

    Basic search

    We update advanced search nightly with new submissions. Basic search is always up-to-date. This is best for users wanting to confirm their submissions are complete.

    {% else %} -

    Advanced search

    +

    Advanced search

    Audit resolution officials may want to use the advanced search for additional filters.

    diff --git a/backend/dissemination/templates/search.html b/backend/dissemination/templates/search.html index f8a04b1a3..83490956a 100644 --- a/backend/dissemination/templates/search.html +++ b/backend/dissemination/templates/search.html @@ -81,7 +81,7 @@

    Filters

    -

    Search single audit reports

    +

    Search single audit reports

    {% include "search-alert-info.html"%} {% if results|length > 0 %}
    @@ -270,6 +270,7 @@

    Please rota

    diff --git a/backend/dissemination/templates/summary.html b/backend/dissemination/templates/summary.html index a6d6701ec..faf147a31 100644 --- a/backend/dissemination/templates/summary.html +++ b/backend/dissemination/templates/summary.html @@ -10,7 +10,7 @@ {% comment %} Title & Header {% endcomment %}
    - Single audit summary +

    Single audit summary

    {{ auditee_name }}

    @@ -254,7 +254,7 @@

    Summary

    -

    +

    Notes to SEFA:  {% if general.is_public or include_private %} {{ data|getkey:"Notes to SEFA"|length }} @@ -267,7 +267,7 @@

    Summary

    -

    +

    Findings:  {{ data|getkey:"Audit Findings"|length }} @@ -275,7 +275,7 @@

    Summary

    {% comment %} Findings text - If none, show the gray box with no link. {% endcomment %} -

    +

    Findings text:  {% if general.is_public or include_private %} {{ data|getkey:"Audit Findings Text"|length }} @@ -289,7 +289,7 @@

    Summary

    -

    +

    CAP:  {% if general.is_public or include_private %} {{ data|getkey:"Corrective Action Plan"|length }} diff --git a/backend/report_submission/templates/report_submission/delete-file-page.html b/backend/report_submission/templates/report_submission/delete-file-page.html index 5309dad22..3d5eea1eb 100644 --- a/backend/report_submission/templates/report_submission/delete-file-page.html +++ b/backend/report_submission/templates/report_submission/delete-file-page.html @@ -36,8 +36,7 @@

    Confirm the deletion of the {{section_name}} worksheet by clicking the Delete Worksheet button below.

    - Cancel + Cancel
    diff --git a/backend/report_submission/templates/report_submission/gen-form.html b/backend/report_submission/templates/report_submission/gen-form.html index 7e4de3bac..eb9cba5fa 100644 --- a/backend/report_submission/templates/report_submission/gen-form.html +++ b/backend/report_submission/templates/report_submission/gen-form.html @@ -35,7 +35,7 @@ method="post"> {% csrf_token %}
    - General information +

    General information

    All Fields are required before a final submission can be made.

    {% if errors %} There were errors when attempting to submit the form. Scroll down for more details. diff --git a/backend/report_submission/templates/report_submission/upload-page.html b/backend/report_submission/templates/report_submission/upload-page.html index 4c028423d..2f00d7b8e 100644 --- a/backend/report_submission/templates/report_submission/upload-page.html +++ b/backend/report_submission/templates/report_submission/upload-page.html @@ -10,9 +10,9 @@ method="post"> {% csrf_token %}
    - {{ view_name }} + id_test="upload-page__legend">{{ view_name }}

    {{ instructions }}