diff --git a/client/components/TestManagement/StatusSummaryRow/index.jsx b/client/components/TestManagement/StatusSummaryRow/index.jsx
index a789962ee..302579c7d 100644
--- a/client/components/TestManagement/StatusSummaryRow/index.jsx
+++ b/client/components/TestManagement/StatusSummaryRow/index.jsx
@@ -51,6 +51,11 @@ const PhaseDot = styled.span`
}
`;
+const NoPhaseText = styled.span`
+ margin-left: 12px;
+ margin-right: 12px;
+`;
+
const StatusSummaryRow = ({ reportResult, testPlanVersion }) => {
const [bulkUpdateTestPlanReportStatusMutation] = useMutation(
BULK_UPDATE_TEST_PLAN_REPORT_STATUS_MUTATION
@@ -114,63 +119,69 @@ const StatusSummaryRow = ({ reportResult, testPlanVersion }) => {
{testPlanVersion.title}
-
- {phase}
-
+ {Object.entries(reportResult).length > 0 && (
+
+ {phase}
+
+ )}
|
-
-
-
- {phase}
-
-
- {
- await bulkUpdateReportStatus(
- testPlanReports.map(i => i.id),
- 'DRAFT'
- );
- }}
- >
-
- Draft
-
- {
- await bulkUpdateReportStatus(
- testPlanReports.map(i => i.id),
- 'CANDIDATE'
- );
- }}
- >
-
- Candidate
-
- {
- await bulkUpdateReportStatus(
- testPlanReports.map(i => i.id),
- 'RECOMMENDED'
- );
- }}
+ {(Object.entries(reportResult).length <= 0 && (
+ Not tested
+ )) || (
+
+
-
- Recommended
-
-
-
+
+ {phase}
+
+
+ {
+ await bulkUpdateReportStatus(
+ testPlanReports.map(i => i.id),
+ 'DRAFT'
+ );
+ }}
+ >
+
+ Draft
+
+ {
+ await bulkUpdateReportStatus(
+ testPlanReports.map(i => i.id),
+ 'CANDIDATE'
+ );
+ }}
+ >
+
+ Candidate
+
+ {
+ await bulkUpdateReportStatus(
+ testPlanReports.map(i => i.id),
+ 'RECOMMENDED'
+ );
+ }}
+ >
+
+ Recommended
+
+
+
+ )}
|
diff --git a/client/components/TestManagement/TestManagement.css b/client/components/TestManagement/TestManagement.css
index 66b21b759..0aaf40174 100644
--- a/client/components/TestManagement/TestManagement.css
+++ b/client/components/TestManagement/TestManagement.css
@@ -5,6 +5,11 @@
.test-management.table tbody tr th {
padding: 20px;
+ vertical-align: middle;
+}
+
+.test-management.table tbody tr td {
+ vertical-align: middle;
}
.test-management.table th.phase {
diff --git a/client/components/TestManagement/index.jsx b/client/components/TestManagement/index.jsx
index 6cb17a120..44d787f34 100644
--- a/client/components/TestManagement/index.jsx
+++ b/client/components/TestManagement/index.jsx
@@ -25,6 +25,7 @@ const TestManagement = () => {
const [pageReady, setPageReady] = useState(false);
const [ats, setAts] = useState([]);
const [browsers, setBrowsers] = useState([]);
+ const [testPlans, setTestPlans] = useState([]);
const [testPlanVersions, setTestPlanVersions] = useState([]);
const [testPlanReports, setTestPlanReports] = useState([]);
@@ -34,11 +35,13 @@ const TestManagement = () => {
ats = [],
browsers = [],
testPlanVersions = [],
- testPlanReports = []
+ testPlanReports = [],
+ testPlans = []
} = data;
setAts(ats);
setTestPlanVersions(testPlanVersions);
setTestPlanReports(testPlanReports);
+ setTestPlans(testPlans);
setBrowsers(browsers);
setPageReady(true);
}
@@ -102,6 +105,7 @@ const TestManagement = () => {
] = null;
});
});
+
testPlanReports.forEach(testPlanReport => {
const { testPlanVersion, at, browser } = testPlanReport;
const directory = testPlanVersion.testPlan.directory;
@@ -117,6 +121,12 @@ const TestManagement = () => {
].testPlanVersion = testPlanVersion;
});
+ testPlans.forEach(testPlan => {
+ if (!(testPlan.directory in tabularReportsByDirectory)) {
+ tabularReportsByDirectory[testPlan.directory] = testPlan;
+ }
+ });
+
const combineObject = originalObject => {
let combinedTestPlanVersionIdArray = [];
let resultTestPlanTargets = Object.values(originalObject)[0];
@@ -223,14 +233,17 @@ const TestManagement = () => {
{/* Sort the summary items by title */}
{Object.values(tabularReportsByDirectory)
- .sort((a, b) =>
- Object.values(a)[0].testPlanVersion
- .title <
- Object.values(b)[0].testPlanVersion
- .title
- ? -1
- : 1
- )
+ .sort((a, b) => {
+ return (
+ a.title ||
+ Object.values(a)[0].testPlanVersion
+ .title
+ ).localeCompare(
+ b.title ||
+ Object.values(b)[0]
+ .testPlanVersion.title
+ );
+ })
.map(tabularReport => {
let reportResult = null;
let testPlanVersionId = null;
@@ -238,6 +251,24 @@ const TestManagement = () => {
// Evaluate what is prioritised across the
// collection of testPlanVersions
if (
+ typeof Object.values(
+ tabularReport
+ )[0] !== 'object'
+ ) {
+ return (
+
+ );
+ } else if (
Object.values(tabularReport)
.length > 1
) {
diff --git a/client/components/TestManagement/queries.js b/client/components/TestManagement/queries.js
index 0926ae8a1..8a1d78e7c 100644
--- a/client/components/TestManagement/queries.js
+++ b/client/components/TestManagement/queries.js
@@ -15,6 +15,15 @@ export const TEST_MANAGEMENT_PAGE_QUERY = gql`
id
name
}
+ testPlans {
+ directory
+ id
+ title
+ latestTestPlanVersion {
+ id
+ title
+ }
+ }
testPlanVersions {
id
title
diff --git a/client/tests/TestManagement.test.jsx b/client/tests/TestManagement.test.jsx
new file mode 100644
index 000000000..45fe5583a
--- /dev/null
+++ b/client/tests/TestManagement.test.jsx
@@ -0,0 +1,62 @@
+/**
+ * @jest-environment jsdom
+ */
+
+import React from 'react';
+import { render, waitFor } from '@testing-library/react';
+import { InMemoryCache } from '@apollo/client';
+import { MockedProvider } from '@apollo/client/testing';
+import { BrowserRouter } from 'react-router-dom';
+import '@testing-library/jest-dom/extend-expect';
+
+import TestManagement from '../components/TestManagement';
+
+// eslint-disable-next-line jest/no-mocks-import
+import { TEST_MANAGEMENT_PAGE_POPULATED } from './__mocks__/GraphQLMocks';
+
+const setup = (mocks = []) => {
+ return render(
+
+
+
+
+
+ );
+};
+
+describe('Test Management page', () => {
+ let wrapper;
+
+ beforeEach(() => {
+ wrapper = setup(TEST_MANAGEMENT_PAGE_POPULATED);
+ });
+
+ it('renders loading state on initialization', async () => {
+ const { getByTestId } = wrapper;
+ const element = getByTestId('page-status');
+
+ expect(element).toBeTruthy();
+ expect(element).toHaveTextContent('Loading');
+ });
+
+ it('renders Status Summary component', async () => {
+ // allow page time to load
+ await waitFor(() => new Promise(res => setTimeout(res, 0)));
+
+ const { queryAllByText } = wrapper;
+ const statusSummaryElement = queryAllByText(/Status Summary/i);
+ const testPlansElement = queryAllByText(/Test Plans/i);
+ const phaseElement = queryAllByText(/Phase/i);
+ const candidateElements = queryAllByText(/Candidate/i);
+ const notTestedElements = queryAllByText(/Not tested/i);
+
+ expect(statusSummaryElement.length).toBeGreaterThanOrEqual(1);
+ expect(testPlansElement.length).toBeGreaterThanOrEqual(1);
+ expect(phaseElement.length).toBeGreaterThanOrEqual(1);
+ expect(candidateElements.length).toBeGreaterThanOrEqual(1);
+ expect(notTestedElements.length).toBeGreaterThanOrEqual(1);
+ });
+});
diff --git a/client/tests/__mocks__/GraphQLMocks.js b/client/tests/__mocks__/GraphQLMocks.js
index 4134f0d7e..29fe9cff8 100644
--- a/client/tests/__mocks__/GraphQLMocks.js
+++ b/client/tests/__mocks__/GraphQLMocks.js
@@ -1,4 +1,5 @@
import { TEST_QUEUE_PAGE_QUERY } from '../../components/TestQueue/queries';
+import { TEST_MANAGEMENT_PAGE_QUERY } from '../../components/TestManagement/queries';
export const TEST_QUEUE_PAGE_NOT_POPULATED_MOCK_ADMIN = [
{
@@ -550,3 +551,938 @@ export const TEST_QUEUE_PAGE_POPULATED_MOCK_TESTER = [
}
}
];
+
+export const TEST_MANAGEMENT_PAGE_POPULATED = [
+ {
+ request: {
+ query: TEST_MANAGEMENT_PAGE_QUERY
+ },
+ result: {
+ data: {
+ ats: [
+ {
+ id: '1',
+ name: 'JAWS',
+ atVersions: [
+ {
+ id: '1',
+ name: '2021.2111.13',
+ releasedAt: '2021-11-01T04:00:00.000Z'
+ }
+ ]
+ },
+ {
+ id: '2',
+ name: 'NVDA',
+ atVersions: [
+ {
+ id: '2',
+ name: '2020.4',
+ releasedAt: '2021-02-19T05:00:00.000Z'
+ }
+ ]
+ },
+ {
+ id: '3',
+ name: 'VoiceOver for macOS',
+ atVersions: [
+ {
+ id: '3',
+ name: '11.6 (20G165)',
+ releasedAt: '2019-09-01T04:00:00.000Z'
+ }
+ ]
+ }
+ ],
+ browsers: [
+ {
+ id: '2',
+ name: 'Chrome'
+ },
+ {
+ id: '1',
+ name: 'Firefox'
+ },
+ {
+ id: '3',
+ name: 'Safari'
+ }
+ ],
+ testPlans: [
+ {
+ directory: 'alert',
+ id: 'alert',
+ title: 'Alert Example',
+ latestTestPlanVersion: {
+ id: '1',
+ title: 'Alert Example'
+ }
+ },
+ {
+ directory: 'banner',
+ id: 'banner',
+ title: 'Banner Landmark',
+ latestTestPlanVersion: {
+ id: '2',
+ title: 'Banner Landmark'
+ }
+ },
+ {
+ directory: 'breadcrumb',
+ id: 'breadcrumb',
+ title: 'Breadcrumb Example',
+ latestTestPlanVersion: {
+ id: '3',
+ title: 'Breadcrumb Example'
+ }
+ },
+ {
+ directory: 'checkbox',
+ id: 'checkbox',
+ title: 'Checkbox Example (Two State)',
+ latestTestPlanVersion: {
+ id: '4',
+ title: 'Checkbox Example (Two State)'
+ }
+ },
+ {
+ directory: 'checkbox-tri-state',
+ id: 'checkbox-tri-state',
+ title: 'Checkbox Example (Mixed-State)',
+ latestTestPlanVersion: {
+ id: '5',
+ title: 'Checkbox Example (Mixed-State)'
+ }
+ },
+ {
+ directory: 'combobox-autocomplete-both-updated',
+ id: 'combobox-autocomplete-both-updated',
+ title: 'Combobox with Both List and Inline Autocomplete Example',
+ latestTestPlanVersion: {
+ id: '6',
+ title: 'Combobox with Both List and Inline Autocomplete Example'
+ }
+ },
+ {
+ directory: 'combobox-select-only',
+ id: 'combobox-select-only',
+ title: 'Select Only Combobox Example',
+ latestTestPlanVersion: {
+ id: '7',
+ title: 'Select Only Combobox Example'
+ }
+ },
+ {
+ directory: 'command-button',
+ id: 'command-button',
+ title: 'Command Button Example',
+ latestTestPlanVersion: {
+ id: '8',
+ title: 'Command Button Example'
+ }
+ },
+ {
+ directory: 'complementary',
+ id: 'complementary',
+ title: 'Complementary Landmark',
+ latestTestPlanVersion: {
+ id: '9',
+ title: 'Complementary Landmark'
+ }
+ },
+ {
+ directory: 'contentinfo',
+ id: 'contentinfo',
+ title: 'Contentinfo Landmark',
+ latestTestPlanVersion: {
+ id: '10',
+ title: 'Contentinfo Landmark'
+ }
+ },
+ {
+ directory: 'datepicker-spin-button',
+ id: 'datepicker-spin-button',
+ title: 'Date Picker Spin Button Example',
+ latestTestPlanVersion: {
+ id: '11',
+ title: 'Date Picker Spin Button Example'
+ }
+ },
+ {
+ directory: 'disclosure-faq',
+ id: 'disclosure-faq',
+ title: 'Disclosure of Answers to Frequently Asked Questions Example',
+ latestTestPlanVersion: {
+ id: '12',
+ title: 'Disclosure of Answers to Frequently Asked Questions Example'
+ }
+ },
+ {
+ directory: 'disclosure-navigation',
+ id: 'disclosure-navigation',
+ title: 'Disclosure Navigation Menu Example',
+ latestTestPlanVersion: {
+ id: '13',
+ title: 'Disclosure Navigation Menu Example'
+ }
+ },
+ {
+ directory: 'form',
+ id: 'form',
+ title: 'Form Landmark',
+ latestTestPlanVersion: {
+ id: '14',
+ title: 'Form Landmark'
+ }
+ },
+ {
+ directory: 'horizontal-slider',
+ id: 'horizontal-slider',
+ title: 'Color Viewer Slider',
+ latestTestPlanVersion: {
+ id: '15',
+ title: 'Color Viewer Slider'
+ }
+ },
+ {
+ directory: 'link-css',
+ id: 'link-css',
+ title: 'Link Example 3 (CSS :before content property on a span element)',
+ latestTestPlanVersion: {
+ id: '16',
+ title: 'Link Example 3 (CSS :before content property on a span element)'
+ }
+ },
+ {
+ directory: 'link-img-alt',
+ id: 'link-img-alt',
+ title: 'Link Example 2 (img element with alt attribute)',
+ latestTestPlanVersion: {
+ id: '17',
+ title: 'Link Example 2 (img element with alt attribute)'
+ }
+ },
+ {
+ directory: 'link-span-text',
+ id: 'link-span-text',
+ title: 'Link Example 1 (span element with text content)',
+ latestTestPlanVersion: {
+ id: '18',
+ title: 'Link Example 1 (span element with text content)'
+ }
+ },
+ {
+ directory: 'main',
+ id: 'main',
+ title: 'Main Landmark',
+ latestTestPlanVersion: {
+ id: '19',
+ title: 'Main Landmark'
+ }
+ },
+ {
+ directory: 'menu-button-actions',
+ id: 'menu-button-actions',
+ title: 'Action Menu Button Example Using element.focus()',
+ latestTestPlanVersion: {
+ id: '20',
+ title: 'Action Menu Button Example Using element.focus()'
+ }
+ },
+ {
+ directory: 'menu-button-actions-active-descendant',
+ id: 'menu-button-actions-active-descendant',
+ title: 'Action Menu Button Example Using aria-activedescendant',
+ latestTestPlanVersion: {
+ id: '21',
+ title: 'Action Menu Button Example Using aria-activedescendant'
+ }
+ },
+ {
+ directory: 'menu-button-navigation',
+ id: 'menu-button-navigation',
+ title: 'Navigation Menu Button',
+ latestTestPlanVersion: {
+ id: '22',
+ title: 'Navigation Menu Button'
+ }
+ },
+ {
+ directory: 'menubar-editor',
+ id: 'menubar-editor',
+ title: 'Editor Menubar Example',
+ latestTestPlanVersion: {
+ id: '23',
+ title: 'Editor Menubar Example'
+ }
+ },
+ {
+ directory: 'meter',
+ id: 'meter',
+ title: 'Meter',
+ latestTestPlanVersion: {
+ id: '24',
+ title: 'Meter'
+ }
+ },
+ {
+ directory: 'minimal-data-grid',
+ id: 'minimal-data-grid',
+ title: 'Data Grid Example 1: Minimal Data Grid',
+ latestTestPlanVersion: {
+ id: '25',
+ title: 'Data Grid Example 1: Minimal Data Grid'
+ }
+ },
+ {
+ directory: 'modal-dialog',
+ id: 'modal-dialog',
+ title: 'Modal Dialog Example',
+ latestTestPlanVersion: {
+ id: '26',
+ title: 'Modal Dialog Example'
+ }
+ },
+ {
+ directory: 'radiogroup-aria-activedescendant',
+ id: 'radiogroup-aria-activedescendant',
+ title: 'Radio Group Example Using aria-activedescendant',
+ latestTestPlanVersion: {
+ id: '27',
+ title: 'Radio Group Example Using aria-activedescendant'
+ }
+ },
+ {
+ directory: 'radiogroup-roving-tabindex',
+ id: 'radiogroup-roving-tabindex',
+ title: 'Radio Group Example Using Roving tabindex',
+ latestTestPlanVersion: {
+ id: '28',
+ title: 'Radio Group Example Using Roving tabindex'
+ }
+ },
+ {
+ directory: 'rating-slider',
+ id: 'rating-slider',
+ title: 'Rating Slider',
+ latestTestPlanVersion: {
+ id: '29',
+ title: 'Rating Slider'
+ }
+ },
+ {
+ directory: 'seek-slider',
+ id: 'seek-slider',
+ title: 'Media Seek Slider',
+ latestTestPlanVersion: {
+ id: '30',
+ title: 'Media Seek Slider'
+ }
+ },
+ {
+ directory: 'slider-multithumb',
+ id: 'slider-multithumb',
+ title: 'Horizontal Multi-Thumb Slider',
+ latestTestPlanVersion: {
+ id: '31',
+ title: 'Horizontal Multi-Thumb Slider'
+ }
+ },
+ {
+ directory: 'switch',
+ id: 'switch',
+ title: 'Switch Example',
+ latestTestPlanVersion: {
+ id: '32',
+ title: 'Switch Example'
+ }
+ },
+ {
+ directory: 'tabs-manual-activation',
+ id: 'tabs-manual-activation',
+ title: 'Tabs with Manual Activation',
+ latestTestPlanVersion: {
+ id: '33',
+ title: 'Tabs with Manual Activation'
+ }
+ },
+ {
+ directory: 'toggle-button',
+ id: 'toggle-button',
+ title: 'Toggle Button',
+ latestTestPlanVersion: {
+ id: '34',
+ title: 'Toggle Button'
+ }
+ },
+ {
+ directory: 'vertical-temperature-slider',
+ id: 'vertical-temperature-slider',
+ title: 'Vertical Temperature Slider',
+ latestTestPlanVersion: {
+ id: '35',
+ title: 'Vertical Temperature Slider'
+ }
+ }
+ ],
+ testPlanVersions: [
+ {
+ id: '21',
+ title: 'Action Menu Button Example Using aria-activedescendant',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'menu-button-actions-active-descendant'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '20',
+ title: 'Action Menu Button Example Using element.focus()',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'menu-button-actions'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '1',
+ title: 'Alert Example',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'alert'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '2',
+ title: 'Banner Landmark',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'banner'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '3',
+ title: 'Breadcrumb Example',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'breadcrumb'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '5',
+ title: 'Checkbox Example (Mixed-State)',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'checkbox-tri-state'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '4',
+ title: 'Checkbox Example (Two State)',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'checkbox'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '15',
+ title: 'Color Viewer Slider',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'horizontal-slider'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '6',
+ title: 'Combobox with Both List and Inline Autocomplete Example',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'combobox-autocomplete-both-updated'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '8',
+ title: 'Command Button Example',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'command-button'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '9',
+ title: 'Complementary Landmark',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'complementary'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '10',
+ title: 'Contentinfo Landmark',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'contentinfo'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '25',
+ title: 'Data Grid Example 1: Minimal Data Grid',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'minimal-data-grid'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '11',
+ title: 'Date Picker Spin Button Example',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'datepicker-spin-button'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '13',
+ title: 'Disclosure Navigation Menu Example',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'disclosure-navigation'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '12',
+ title: 'Disclosure of Answers to Frequently Asked Questions Example',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'disclosure-faq'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '23',
+ title: 'Editor Menubar Example',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'menubar-editor'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '14',
+ title: 'Form Landmark',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'form'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '31',
+ title: 'Horizontal Multi-Thumb Slider',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'slider-multithumb'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '18',
+ title: 'Link Example 1 (span element with text content)',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'link-span-text'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '17',
+ title: 'Link Example 2 (img element with alt attribute)',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'link-img-alt'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '16',
+ title: 'Link Example 3 (CSS :before content property on a span element)',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'link-css'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '19',
+ title: 'Main Landmark',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'main'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '30',
+ title: 'Media Seek Slider',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'seek-slider'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '24',
+ title: 'Meter',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'meter'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '26',
+ title: 'Modal Dialog Example',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'modal-dialog'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '22',
+ title: 'Navigation Menu Button',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'menu-button-navigation'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '28',
+ title: 'Radio Group Example Using Roving tabindex',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'radiogroup-roving-tabindex'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '27',
+ title: 'Radio Group Example Using aria-activedescendant',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'radiogroup-aria-activedescendant'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '29',
+ title: 'Rating Slider',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'rating-slider'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '7',
+ title: 'Select Only Combobox Example',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'combobox-select-only'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '32',
+ title: 'Switch Example',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'switch'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '33',
+ title: 'Tabs with Manual Activation',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'tabs-manual-activation'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '34',
+ title: 'Toggle Button',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'toggle-button'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ },
+ {
+ id: '35',
+ title: 'Vertical Temperature Slider',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'vertical-temperature-slider'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ }
+ ],
+ testPlanReports: [
+ {
+ id: '2',
+ status: 'DRAFT',
+ at: {
+ id: '2',
+ name: 'NVDA'
+ },
+ latestAtVersionReleasedAt: {
+ id: '2',
+ name: '2020.4',
+ releasedAt: '2021-02-19T05:00:00.000Z'
+ },
+ browser: {
+ id: '1',
+ name: 'Firefox'
+ },
+ testPlanVersion: {
+ id: '7',
+ title: 'Select Only Combobox Example',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'combobox-select-only'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ }
+ },
+ {
+ id: '4',
+ status: 'CANDIDATE',
+ at: {
+ id: '2',
+ name: 'NVDA'
+ },
+ latestAtVersionReleasedAt: {
+ id: '2',
+ name: '2020.4',
+ releasedAt: '2021-02-19T05:00:00.000Z'
+ },
+ browser: {
+ id: '1',
+ name: 'Firefox'
+ },
+ testPlanVersion: {
+ id: '26',
+ title: 'Modal Dialog Example',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'modal-dialog'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ }
+ },
+ {
+ id: '3',
+ status: 'CANDIDATE',
+ at: {
+ id: '1',
+ name: 'JAWS'
+ },
+ latestAtVersionReleasedAt: {
+ id: '1',
+ name: '2021.2111.13',
+ releasedAt: '2021-11-01T04:00:00.000Z'
+ },
+ browser: {
+ id: '2',
+ name: 'Chrome'
+ },
+ testPlanVersion: {
+ id: '26',
+ title: 'Modal Dialog Example',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'modal-dialog'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ }
+ },
+ {
+ id: '1',
+ status: 'DRAFT',
+ at: {
+ id: '1',
+ name: 'JAWS'
+ },
+ latestAtVersionReleasedAt: {
+ id: '1',
+ name: '2021.2111.13',
+ releasedAt: '2021-11-01T04:00:00.000Z'
+ },
+ browser: {
+ id: '2',
+ name: 'Chrome'
+ },
+ testPlanVersion: {
+ id: '34',
+ title: 'Toggle Button',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'toggle-button'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ }
+ },
+ {
+ id: '6',
+ status: 'CANDIDATE',
+ at: {
+ id: '3',
+ name: 'VoiceOver for macOS'
+ },
+ latestAtVersionReleasedAt: {
+ id: '3',
+ name: '11.6 (20G165)',
+ releasedAt: '2019-09-01T04:00:00.000Z'
+ },
+ browser: {
+ id: '3',
+ name: 'Safari'
+ },
+ testPlanVersion: {
+ id: '5',
+ title: 'Checkbox Example (Mixed-State)',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'checkbox-tri-state'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ }
+ },
+ {
+ id: '5',
+ status: 'CANDIDATE',
+ at: {
+ id: '3',
+ name: 'VoiceOver for macOS'
+ },
+ latestAtVersionReleasedAt: {
+ id: '3',
+ name: '11.6 (20G165)',
+ releasedAt: '2019-09-01T04:00:00.000Z'
+ },
+ browser: {
+ id: '3',
+ name: 'Safari'
+ },
+ testPlanVersion: {
+ id: '26',
+ title: 'Modal Dialog Example',
+ gitSha: '1768070bd68beefef29284b568d2da910b449c14',
+ gitMessage:
+ 'Remove Tab and Shift+Tab from radiogroup tests when navigating out of the start and end of a radio group (reading mode and VoiceOver only) (#928)',
+ testPlan: {
+ directory: 'modal-dialog'
+ },
+ updatedAt: '2023-04-10T18:22:22.000Z'
+ }
+ }
+ ]
+ }
+ }
+ }
+];
diff --git a/server/graphql-schema.js b/server/graphql-schema.js
index 7b37ee5fd..04d8a32e1 100644
--- a/server/graphql-schema.js
+++ b/server/graphql-schema.js
@@ -212,6 +212,7 @@ const graphqlSchema = gql`
as a directory, and this allows you to do both.
"""
id: ID!
+ title: String!
"""
Corresponds to directory in the ARIA-AT repo which stores the test plan,
e.g. "checkbox-tri-state" or "disclosure-navigation"
diff --git a/server/models/services/TestPlanVersionService.js b/server/models/services/TestPlanVersionService.js
index 76f327102..e32880cbc 100644
--- a/server/models/services/TestPlanVersionService.js
+++ b/server/models/services/TestPlanVersionService.js
@@ -317,6 +317,7 @@ const getTestPlans = async ({
directory as "id",
directory as "directory",
id as "latestTestPlanVersionId",
+ "title",
"updatedAt"
FROM "TestPlanVersion"
${whereClause}
diff --git a/server/tests/integration/graphql.test.js b/server/tests/integration/graphql.test.js
index b1d5f34f3..fc34a5be4 100644
--- a/server/tests/integration/graphql.test.js
+++ b/server/tests/integration/graphql.test.js
@@ -213,6 +213,7 @@ describe('graphql', () => {
__typename
id
directory
+ title
latestTestPlanVersion {
__typename
id