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