diff --git a/client/components/DataManagement/DataManagementRow/index.jsx b/client/components/DataManagement/DataManagementRow/index.jsx index c3b8d777c..14c0c9295 100644 --- a/client/components/DataManagement/DataManagementRow/index.jsx +++ b/client/components/DataManagement/DataManagementRow/index.jsx @@ -767,7 +767,6 @@ const DataManagementRow = ({ )} @@ -971,7 +970,6 @@ const DataManagementRow = ({ )} @@ -1060,7 +1058,6 @@ const DataManagementRow = ({ diff --git a/client/components/TestPlanReportStatusDialog/WithButton.jsx b/client/components/TestPlanReportStatusDialog/WithButton.jsx index 8e17d674a..a131cfb6f 100644 --- a/client/components/TestPlanReportStatusDialog/WithButton.jsx +++ b/client/components/TestPlanReportStatusDialog/WithButton.jsx @@ -2,7 +2,6 @@ import React, { useMemo, useRef, useState } from 'react'; import PropTypes from 'prop-types'; import { Button } from 'react-bootstrap'; import TestPlanReportStatusDialog from './index'; -import { getRequiredReports } from './isRequired'; import { calculateTestPlanReportCompletionPercentage } from './calculateTestPlanReportCompletionPercentage'; import styled from '@emotion/styled'; import ReportStatusDot from '../common/ReportStatusDot'; @@ -26,7 +25,7 @@ const TestPlanReportStatusDialogButton = styled(Button)` margin-top: auto; `; -const TestPlanReportStatusDialogWithButton = ({ ats, testPlanVersionId }) => { +const TestPlanReportStatusDialogWithButton = ({ testPlanVersionId }) => { const { data: { testPlanVersion } = {}, refetch, @@ -39,60 +38,48 @@ const TestPlanReportStatusDialogWithButton = ({ ats, testPlanVersionId }) => { const buttonRef = useRef(null); const [showDialog, setShowDialog] = useState(false); - const { testPlanReports } = testPlanVersion ?? {}; - - // TODO: Use the DB provided AtBrowsers combinations when doing the edit UI task - const requiredReports = useMemo( - () => getRequiredReports(testPlanVersion?.phase), - [testPlanVersion?.phase] - ); + const { testPlanReportStatuses } = testPlanVersion ?? {}; const buttonLabel = useMemo(() => { - const initialCounts = { completed: 0, inProgress: 0, missing: 0 }; + if (!testPlanReportStatuses) return; - const counts = requiredReports.reduce((acc, requiredReport) => { - const matchingReport = testPlanReports.find( - report => - report.at.id === requiredReport.at.id && - report.browser.id === requiredReport.browser.id - ); - if (matchingReport) { + const counts = { completed: 0, inProgress: 0, missing: 0 }; + + testPlanReportStatuses.forEach(status => { + if (!status.isRequired) return; + + const { testPlanReport } = status; + + if (testPlanReport) { const percentComplete = - calculateTestPlanReportCompletionPercentage(matchingReport); - if (percentComplete === 100 && matchingReport.markedFinalAt) { - acc.completed++; + calculateTestPlanReportCompletionPercentage(testPlanReport); + + if (percentComplete === 100 && testPlanReport.markedFinalAt) { + counts.completed += 1; } else { - acc.inProgress++; + counts.inProgress += 1; } } else { - acc.missing++; + counts.missing += 1; } - return acc; - }, initialCounts); + }); - // All AT/browser pairs that require a report have a complete report - if (counts.completed === requiredReports.length) { + if (counts.missing === 0 && counts.inProgress === 0) { return ( Required Reports Complete ); - } - // At least one AT/browser pair that requires a report does not have a complete report and is in the test queue. - // All other AT/browser pairs that require a report are either complete or are in the test queue. - else if (counts.inProgress > 0 && counts.missing === 0) { + } else if (counts.missing === 0 && counts.inProgress !== 0) { return ( Required Reports In Progress ); - } - // At least one of the AT/browser pairs that requires a report neither has a complete report nor has a run in the test queue. - // At the same time, at least one of the AT/browser pairs that requires a report either has a complete report or has a run in the test queue. - else if ( - counts.missing > 0 && + } else if ( + counts.missing !== 0 && (counts.completed > 0 || counts.inProgress > 0) ) { return ( @@ -101,18 +88,19 @@ const TestPlanReportStatusDialogWithButton = ({ ats, testPlanVersionId }) => { Some Required Reports Missing ); - } - // For every AT/browser pair that requires a report, the report is neither complete nor in the test queue. - else if (counts.missing === requiredReports.length) { + } else if ( + counts.missing !== 0 && + counts.completed === 0 && + counts.inProgress === 0 + ) { return ( Required Reports Not Started ); - } - // Fallback case - else { + } else { + // Fallback case return ( @@ -120,7 +108,7 @@ const TestPlanReportStatusDialogWithButton = ({ ats, testPlanVersionId }) => { ); } - }, [requiredReports, testPlanReports]); + }, [testPlanReportStatuses]); if ( loading || @@ -149,32 +137,12 @@ const TestPlanReportStatusDialogWithButton = ({ ats, testPlanVersionId }) => { buttonRef.current.focus(); }} triggerUpdate={refetch} - ats={ats} /> ); }; TestPlanReportStatusDialogWithButton.propTypes = { - ats: PropTypes.arrayOf( - PropTypes.shape({ - id: PropTypes.string.isRequired, - name: PropTypes.string.isRequired, - browsers: PropTypes.arrayOf( - PropTypes.shape({ id: PropTypes.string.isRequired }).isRequired - ).isRequired, - candidateBrowsers: PropTypes.arrayOf( - PropTypes.shape({ - id: PropTypes.string.isRequired - }).isRequired - ).isRequired, - recommendedBrowsers: PropTypes.arrayOf( - PropTypes.shape({ - id: PropTypes.string.isRequired - }).isRequired - ).isRequired - }).isRequired - ).isRequired, testPlanVersionId: PropTypes.string.isRequired }; diff --git a/client/components/TestPlanReportStatusDialog/index.jsx b/client/components/TestPlanReportStatusDialog/index.jsx index 493f87db6..dec8a9cb5 100644 --- a/client/components/TestPlanReportStatusDialog/index.jsx +++ b/client/components/TestPlanReportStatusDialog/index.jsx @@ -16,10 +16,30 @@ const IncompleteStatusReport = styled.span` display: inline-block; `; +const AtInner = styled.div` + display: inline-block; + flex-wrap: wrap; + background: #f5f5f5; + border-radius: 4px; + padding: 0 5px; + font-weight: bold; + + & :last-of-type { + margin-left: 6px; + font-weight: initial; + } +`; + +const VersionBox = styled.span` + /* font-size: 15px; + color: #4a4a4a; + top: 1px; + position: relative; */ +`; + const TestPlanReportStatusDialog = ({ testPlanVersion, show, - ats, handleHide = () => {}, triggerUpdate = () => {} }) => { @@ -27,7 +47,7 @@ const TestPlanReportStatusDialog = ({ fetchPolicy: 'cache-and-network' }); - const { testPlanReports } = testPlanVersion; + const { testPlanReportStatuses } = testPlanVersion; const auth = evaluateAuth(me ?? {}); const { isSignedIn, isAdmin } = auth; @@ -77,13 +97,19 @@ const TestPlanReportStatusDialog = ({ } }; - const renderReportStatus = ({ report, at, browser }) => { - if (report) { - const { markedFinalAt } = report; + const renderReportStatus = ({ + testPlanReport, + at, + browser, + minimumAtVersion, + exactAtVersion + }) => { + if (testPlanReport) { + const { markedFinalAt } = testPlanReport; if (markedFinalAt) { - return renderCompleteReportStatus(report); + return renderCompleteReportStatus(testPlanReport); } else { - return renderPartialCompleteReportStatus(report); + return renderPartialCompleteReportStatus(testPlanReport); } } return ( @@ -92,6 +118,8 @@ const TestPlanReportStatusDialog = ({ {isSignedIn && isAdmin ? ( { - // DRAFT as well because those reports are required to be promoted to CANDIDATE - if ( - testPlanVersion.phase === 'DRAFT' || - testPlanVersion.phase === 'CANDIDATE' - ) { - requiredReports += at.candidateBrowsers.length; - } - if (testPlanVersion.phase === 'RECOMMENDED') { - requiredReports += at.recommendedBrowsers.length; - } + const tableRows = testPlanReportStatuses.map(status => { + const { + isRequired, + at, + browser, + minimumAtVersion, + exactAtVersion, + testPlanReport + } = status; - at.browsers.forEach(browser => { - const report = testPlanReports.find(eachReport => { - return ( - eachReport.at.id === at.id && - eachReport.browser.id === browser.id - ); - }); + if (isRequired) requiredReports += 1; - let isRequired = false; - if ( - testPlanVersion.phase === 'DRAFT' || - testPlanVersion.phase === 'CANDIDATE' - ) { - isRequired = at.candidateBrowsers.some(candidateBrowser => { - return candidateBrowser.id === browser.id; - }); - } else if (testPlanVersion.phase === 'RECOMMENDED') { - isRequired = at.recommendedBrowsers.some(recommendedBrowser => { - return recommendedBrowser.id === browser.id; - }); - } - rowData.push({ report, at, browser, isRequired }); - }); - }); + const key = `${at.name}-${browser.name}-${ + testPlanReport?.id ?? 'missing' + }`; + + const atVersionFormatted = minimumAtVersion + ? `${minimumAtVersion.name} or later` + : exactAtVersion.name; - // Sort by required then AT then browser - rowData.sort((a, b) => { - if (a.isRequired !== b.isRequired) return a.isRequired ? -1 : 1; - if (a.at.name !== b.at.name) return a.at.name.localeCompare(b.at.name); - return a.browser.name.localeCompare(b.browser.name); - }); - const tableRows = rowData.map(({ report, at, browser, isRequired }) => { return ( - + {isRequired ? 'Yes' : 'No'} - {at.name} + + + {at.name} + {atVersionFormatted} + + {browser.name} - {renderReportStatus({ report, at, browser })} + + {renderReportStatus({ + testPlanReport, + at, + browser, + minimumAtVersion, + exactAtVersion + })} + ); }); @@ -237,12 +253,8 @@ TestPlanReportStatusDialog.propTypes = { id: PropTypes.string.isRequired, title: PropTypes.string.isRequired, phase: PropTypes.string.isRequired, - testPlanReports: PropTypes.arrayOf( + testPlanReportStatuses: PropTypes.arrayOf( PropTypes.shape({ - id: PropTypes.string.isRequired, - status: PropTypes.string, - runnableTests: PropTypes.arrayOf(PropTypes.object), - finalizedTestResults: PropTypes.arrayOf(PropTypes.object), at: PropTypes.shape({ id: PropTypes.string.isRequired, name: PropTypes.string.isRequired @@ -250,32 +262,27 @@ TestPlanReportStatusDialog.propTypes = { browser: PropTypes.shape({ id: PropTypes.string.isRequired, name: PropTypes.string.isRequired - }).isRequired + }).isRequired, + minimumAtVersion: PropTypes.shape({ + id: PropTypes.string.isRequired, + name: PropTypes.string.isRequired + }), + exactAtVersion: PropTypes.shape({ + id: PropTypes.string.isRequired, + name: PropTypes.string.isRequired + }), + testPlanReport: PropTypes.shape({ + id: PropTypes.string.isRequired, + status: PropTypes.string, + runnableTests: PropTypes.arrayOf(PropTypes.object), + finalizedTestResults: PropTypes.arrayOf(PropTypes.object) + }) }).isRequired ).isRequired }).isRequired, handleHide: PropTypes.func.isRequired, triggerUpdate: PropTypes.func, - show: PropTypes.bool.isRequired, - ats: PropTypes.arrayOf( - PropTypes.shape({ - id: PropTypes.string.isRequired, - name: PropTypes.string.isRequired, - browsers: PropTypes.arrayOf( - PropTypes.shape({ id: PropTypes.string.isRequired }).isRequired - ).isRequired, - candidateBrowsers: PropTypes.arrayOf( - PropTypes.shape({ - id: PropTypes.string.isRequired - }).isRequired - ).isRequired, - recommendedBrowsers: PropTypes.arrayOf( - PropTypes.shape({ - id: PropTypes.string.isRequired - }).isRequired - ).isRequired - }).isRequired - ).isRequired + show: PropTypes.bool.isRequired }; export default TestPlanReportStatusDialog; diff --git a/client/components/TestPlanReportStatusDialog/isRequired.js b/client/components/TestPlanReportStatusDialog/isRequired.js deleted file mode 100644 index bf2281e46..000000000 --- a/client/components/TestPlanReportStatusDialog/isRequired.js +++ /dev/null @@ -1,60 +0,0 @@ -const requiredReports = { - DRAFT: [ - { - browser: { name: 'Chrome', id: '2' }, - at: { name: 'JAWS', id: '1' } - }, - { - browser: { name: 'Chrome', id: '2' }, - at: { name: 'NVDA', id: '2' } - }, - { - browser: { name: 'Safari', id: '3' }, - at: { name: 'VoiceOver for macOS', id: '3' } - } - ], - CANDIDATE: [ - { - browser: { name: 'Chrome', id: '2' }, - at: { name: 'JAWS', id: '1' } - }, - { - browser: { name: 'Chrome', id: '2' }, - at: { name: 'NVDA', id: '2' } - }, - { - browser: { name: 'Safari', id: '3' }, - at: { name: 'VoiceOver for macOS', id: '3' } - } - ], - RECOMMENDED: [ - { - browser: { name: 'Chrome', id: '2' }, - at: { name: 'JAWS', id: '1' } - }, - { - browser: { name: 'Chrome', id: '2' }, - at: { name: 'NVDA', id: '2' } - }, - { - browser: { name: 'Safari', id: '3' }, - at: { name: 'VoiceOver for macOS', id: '3' } - }, - { - browser: { name: 'Firefox', id: '1' }, - at: { name: 'NVDA', id: '2' } - }, - { - browser: { name: 'Firefox', id: '1' }, - at: { name: 'JAWS', id: '1' } - }, - { - browser: { name: 'Chrome', id: '2' }, - at: { name: 'VoiceOver for macOS', id: '3' } - } - ] -}; - -export const getRequiredReports = testPlanPhase => { - return requiredReports[testPlanPhase] ?? []; -}; diff --git a/client/components/TestPlanReportStatusDialog/queries.js b/client/components/TestPlanReportStatusDialog/queries.js index 4a7b4e044..d2ff383fc 100644 --- a/client/components/TestPlanReportStatusDialog/queries.js +++ b/client/components/TestPlanReportStatusDialog/queries.js @@ -16,11 +16,8 @@ export const TEST_PLAN_REPORT_STATUS_DIALOG_QUERY = gql` testPlan { directory } - testPlanReports { - id - metrics - isFinal - markedFinalAt + testPlanReportStatuses { + isRequired at { id name @@ -29,31 +26,45 @@ export const TEST_PLAN_REPORT_STATUS_DIALOG_QUERY = gql` id name } - issues { - link - isOpen - feedbackType + minimumAtVersion { + id + name } - draftTestPlanRuns { - tester { - username - } - testPlanReport { - id + exactAtVersion { + id + name + } + testPlanReport { + id + metrics + isFinal + markedFinalAt + issues { + link + isOpen + feedbackType } - testResults { - test { - id + draftTestPlanRuns { + tester { + username } - atVersion { + testPlanReport { id - name } - browserVersion { - id - name + testResults { + test { + id + } + atVersion { + id + name + } + browserVersion { + id + name + } + completedAt } - completedAt } } } diff --git a/client/tests/__mocks__/GraphQLMocks/DataManagementPagePopulatedMock.js b/client/tests/__mocks__/GraphQLMocks/DataManagementPagePopulatedMock.js index 34f34a85c..b743fc11f 100644 --- a/client/tests/__mocks__/GraphQLMocks/DataManagementPagePopulatedMock.js +++ b/client/tests/__mocks__/GraphQLMocks/DataManagementPagePopulatedMock.js @@ -2505,11 +2505,10 @@ export default ( id: '1', title: 'Alert Example', phase: 'DRAFT', - gitSha: '0928bcf530efcf4faa677285439701537674e014', + gitSha: 'c665367f3742c2b607f7b3c2655782188b93f302', gitMessage: - 'Alert and Radiogroup/activedescendent updates (#865)', - updatedAt: '2022-12-08T21:47:42.000Z', - versionString: 'V22.12.08', + 'Create updated tests for APG design pattern example: Alert (#685)', + updatedAt: '2022-04-14T17:59:42.000Z', draftPhaseReachedAt: '2022-07-06T00:00:00.000Z', candidatePhaseReachedAt: null, recommendedPhaseTargetDate: null, @@ -2517,686 +2516,141 @@ export default ( testPlan: { directory: 'alert' }, - testPlanReports: [ + testPlanReportStatuses: [ { - id: '7', - metrics: {}, - markedFinalAt: null, - isFinal: false, + isRequired: true, at: { - id: '3', - name: 'VoiceOver for macOS' + id: '1', + name: 'JAWS' }, browser: { + id: '2', + name: 'Chrome' + }, + minimumAtVersion: { id: '1', - name: 'Firefox' + name: '2021.2111.13' }, - issues: [], - draftTestPlanRuns: [] - } - ], - metadata: {} - } - } - } - }, - { - request: { - query: testPlanReportStatusDialogQuery, - variables: { testPlanVersionId: '5' } - }, - result: { - data: { - testPlanVersion: { - id: '5', - title: 'Checkbox Example (Mixed-State)', - phase: 'RECOMMENDED', - gitSha: '836fb2a997f5b2844035b8c934f8fda9833cd5b2', - gitMessage: 'Validation for test csv formats (#980)', - updatedAt: '2023-08-23T20:30:34.000Z', - draftPhaseReachedAt: null, - candidatePhaseReachedAt: '2022-07-06T00:00:00.000Z', - recommendedPhaseTargetDate: '2023-01-02T00:00:00.000Z', - recommendedPhaseReachedAt: '2023-01-03T00:00:00.000Z', - testPlan: { - directory: 'checkbox-tri-state' - }, - testPlanReports: [ + exactAtVersion: null, + testPlanReport: { + id: '101', + metrics: {}, + isFinal: false, + markedFinalAt: null, + issues: [], + draftTestPlanRuns: [] + } + }, { - id: '6', - metrics: { - testsCount: 7, - supportLevel: 'FAILING', - conflictsCount: 0, - supportPercent: 96, - testsFailedCount: 3, - testsPassedCount: 4, - shouldFormatted: '4 of 4 passed', - mustFormatted: '44 of 46 passed', - shouldAssertionsCount: 4, - mustAssertionsCount: 46, - unexpectedBehaviorCount: 0, - unexpectedBehaviorsFormatted: false, - shouldAssertionsFailedCount: 0, - shouldAssertionsPassedCount: 4, - mustAssertionsFailedCount: 2, - mustAssertionsPassedCount: 44 - }, - markedFinalAt: '2022-07-06T00:00:00.000Z', - isFinal: true, + isRequired: false, at: { - id: '3', - name: 'VoiceOver for macOS' + id: '1', + name: 'JAWS' }, browser: { - id: '3', - name: 'Safari' + id: '1', + name: 'Firefox' }, - issues: [], - draftTestPlanRuns: [ - { - tester: { - username: 'tom-proudfeet' - }, - testPlanReport: { - id: '6' - }, - testResults: [ - { - test: { - id: 'YTE3NeyIyIjoiNSJ9WJlMj' - }, - atVersion: { - id: '3', - name: '11.6 (20G165)' - }, - browserVersion: { - id: '3', - name: '14.1.2' - }, - completedAt: - '2023-08-30T13:23:57.070Z' - }, - { - test: { - id: 'YWJiOeyIyIjoiNSJ9GQ5Zm' - }, - atVersion: { - id: '3', - name: '11.6 (20G165)' - }, - browserVersion: { - id: '3', - name: '14.1.2' - }, - completedAt: - '2023-08-30T13:23:57.142Z' - }, - { - test: { - id: 'ZGFlYeyIyIjoiNSJ9TJlMW' - }, - atVersion: { - id: '3', - name: '11.6 (20G165)' - }, - browserVersion: { - id: '3', - name: '14.1.2' - }, - completedAt: - '2023-08-30T13:23:57.204Z' - }, - { - test: { - id: 'YjI2MeyIyIjoiNSJ9WE1OT' - }, - atVersion: { - id: '3', - name: '11.6 (20G165)' - }, - browserVersion: { - id: '3', - name: '14.1.2' - }, - completedAt: - '2023-08-30T13:23:57.275Z' - }, - { - test: { - id: 'ZjAwZeyIyIjoiNSJ9TZmZj' - }, - atVersion: { - id: '3', - name: '11.6 (20G165)' - }, - browserVersion: { - id: '3', - name: '14.1.2' - }, - completedAt: - '2023-08-30T13:23:57.330Z' - }, - { - test: { - id: 'MGRjZeyIyIjoiNSJ9WNiZD' - }, - atVersion: { - id: '3', - name: '11.6 (20G165)' - }, - browserVersion: { - id: '3', - name: '14.1.2' - }, - completedAt: - '2023-08-30T13:23:57.382Z' - }, - { - test: { - id: 'OTZmYeyIyIjoiNSJ9TU5Ym' - }, - atVersion: { - id: '3', - name: '11.6 (20G165)' - }, - browserVersion: { - id: '3', - name: '14.1.2' - }, - completedAt: - '2023-08-30T13:23:57.439Z' - } - ] - } - ] + minimumAtVersion: { + id: '1', + name: '2021.2111.13' + }, + exactAtVersion: null, + testPlanReport: null }, { - id: '12', - metrics: { - testsCount: 14, - supportLevel: 'FULL', - conflictsCount: 0, - supportPercent: 100, - testsFailedCount: 12, - testsPassedCount: 2, - shouldFormatted: false, - mustFormatted: '25 of 25 passed', - shouldAssertionsCount: 0, - mustAssertionsCount: 25, - unexpectedBehaviorCount: 0, - unexpectedBehaviorsFormatted: false, - shouldAssertionsFailedCount: 0, - shouldAssertionsPassedCount: 0, - mustAssertionsFailedCount: 0, - mustAssertionsPassedCount: 25 - }, - markedFinalAt: '2022-07-06T00:00:00.000Z', - isFinal: true, + isRequired: true, at: { - id: '1', - name: 'JAWS' + id: '2', + name: 'NVDA' }, browser: { id: '2', name: 'Chrome' }, - issues: [], - draftTestPlanRuns: [ - { - tester: { - username: 'esmeralda-baggins' - }, - testPlanReport: { - id: '12' - }, - testResults: [ - { - test: { - id: 'MTVlZeyIyIjoiNSJ9DUzMz' - }, - atVersion: { - id: '1', - name: '2021.2111.13' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-30T13:23:58.343Z' - }, - { - test: { - id: 'OThhMeyIyIjoiNSJ9WMxM2' - }, - atVersion: { - id: '1', - name: '2021.2111.13' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-30T13:23:58.404Z' - }, - { - test: { - id: 'YWNhNeyIyIjoiNSJ9TliN2' - }, - atVersion: { - id: '1', - name: '2021.2111.13' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-30T13:23:58.472Z' - } - ] - } - ] + minimumAtVersion: { + id: '2', + name: '2020.4' + }, + exactAtVersion: null, + testPlanReport: null }, { - id: '13', - metrics: { - testsCount: 14, - supportLevel: 'FULL', - conflictsCount: 0, - supportPercent: 100, - testsFailedCount: 12, - testsPassedCount: 2, - shouldFormatted: false, - mustFormatted: '25 of 25 passed', - shouldAssertionsCount: 0, - mustAssertionsCount: 25, - unexpectedBehaviorCount: 0, - unexpectedBehaviorsFormatted: false, - shouldAssertionsFailedCount: 0, - shouldAssertionsPassedCount: 0, - mustAssertionsFailedCount: 0, - mustAssertionsPassedCount: 25 - }, - markedFinalAt: '2022-07-07T00:00:00.000Z', - isFinal: true, + isRequired: false, at: { id: '2', name: 'NVDA' }, browser: { + id: '1', + name: 'Firefox' + }, + minimumAtVersion: { id: '2', - name: 'Chrome' + name: '2020.4' }, - issues: [], - draftTestPlanRuns: [ - { - tester: { - username: 'esmeralda-baggins' - }, - testPlanReport: { - id: '13' - }, - testResults: [ - { - test: { - id: 'MTVlZeyIyIjoiNSJ9DUzMz' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-30T13:23:58.531Z' - }, - { - test: { - id: 'OThhMeyIyIjoiNSJ9WMxM2' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-30T13:23:58.593Z' - }, - { - test: { - id: 'YWNhNeyIyIjoiNSJ9TliN2' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-30T13:23:58.655Z' - } - ] - } - ] - } - ], - metadata: {} - } - } - } - }, - { - request: { - query: testPlanReportStatusDialogQuery, - variables: { testPlanVersionId: '7' } - }, - result: { - data: { - testPlanVersion: { - id: '7', - title: 'Select Only Combobox Example', - phase: 'DRAFT', - gitSha: '7c4b5dce23c74fcf280ed164bdb903e02e0e7726', - gitMessage: - 'Generate html source script to support aria-at-app (#646)', - updatedAt: '2022-03-17T18:34:51.000Z', - draftPhaseReachedAt: '2022-07-06T00:00:00.000Z', - candidatePhaseReachedAt: null, - recommendedPhaseTargetDate: null, - recommendedPhaseReachedAt: null, - testPlan: { - directory: 'combobox-select-only' - }, - testPlanReports: [ + exactAtVersion: null, + testPlanReport: null + }, { - id: '2', - metrics: { - testsCount: 21, - supportLevel: 'FAILING', - conflictsCount: 5, - supportPercent: 96, - testsFailedCount: 16, - testsPassedCount: 5, - shouldFormatted: '3 of 3 passed', - mustFormatted: '48 of 50 passed', - shouldAssertionsCount: 3, - mustAssertionsCount: 50, - unexpectedBehaviorCount: 3, - unexpectedBehaviorsFormatted: '3 found', - shouldAssertionsFailedCount: 0, - shouldAssertionsPassedCount: 3, - mustAssertionsFailedCount: 2, - mustAssertionsPassedCount: 48 + isRequired: true, + at: { + id: '3', + name: 'VoiceOver for macOS' + }, + browser: { + id: '3', + name: 'Safari' }, - markedFinalAt: null, - isFinal: false, + minimumAtVersion: { + id: '3', + name: '11.6 (20G165)' + }, + exactAtVersion: null, + testPlanReport: null + }, + { + isRequired: false, at: { + id: '3', + name: 'VoiceOver for macOS' + }, + browser: { id: '2', - name: 'NVDA' + name: 'Chrome' + }, + minimumAtVersion: { + id: '3', + name: '11.6 (20G165)' + }, + exactAtVersion: null, + testPlanReport: null + }, + { + isRequired: false, + at: { + id: '3', + name: 'VoiceOver for macOS' }, browser: { id: '1', name: 'Firefox' }, - issues: [], - draftTestPlanRuns: [ - { - tester: { - username: 'tom-proudfeet' - }, - testPlanReport: { - id: '2' - }, - testResults: [ - { - test: { - id: 'Nzg5NeyIyIjoiNyJ9zNjZj' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:08.240Z' - }, - { - test: { - id: 'MmY0YeyIyIjoiNyJ9jRkZD' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:08.332Z' - }, - { - test: { - id: 'ZjUwNeyIyIjoiNyJ9mE2ZT' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:08.412Z' - }, - { - test: { - id: 'MDNiMeyIyIjoiNyJ9Dk1MT' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:08.501Z' - }, - { - test: { - id: 'MjRmNeyIyIjoiNyJ92MyMT' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:08.593Z' - }, - { - test: { - id: 'ZmVlMeyIyIjoiNyJ9mUyYj' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: null - }, - { - test: { - id: 'YWFiNeyIyIjoiNyJ9zE2Zj' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:08.811Z' - }, - { - test: { - id: 'YjZkYeyIyIjoiNyJ9WIxZm' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:08.902Z' - }, - { - test: { - id: 'ZmIzMeyIyIjoiNyJ9TQ1NW' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:08.996Z' - } - ] - }, - { - tester: { - username: 'esmeralda-baggins' - }, - testPlanReport: { - id: '2' - }, - testResults: [ - { - test: { - id: 'Nzg5NeyIyIjoiNyJ9zNjZj' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:07.718Z' - }, - { - test: { - id: 'MmY0YeyIyIjoiNyJ9jRkZD' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:07.813Z' - }, - { - test: { - id: 'ZjUwNeyIyIjoiNyJ9mE2ZT' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:07.914Z' - }, - { - test: { - id: 'MDNiMeyIyIjoiNyJ9Dk1MT' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:07.988Z' - }, - { - test: { - id: 'MjRmNeyIyIjoiNyJ92MyMT' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:08.074Z' - }, - { - test: { - id: 'ZmVlMeyIyIjoiNyJ9mUyYj' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: null - } - ] - } - ] + minimumAtVersion: { + id: '3', + name: '11.6 (20G165)' + }, + exactAtVersion: null, + testPlanReport: { + id: '7', + metrics: {}, + isFinal: false, + markedFinalAt: null, + issues: [], + draftTestPlanRuns: [] + } } - ], - metadata: {} + ] } } } @@ -3204,583 +2658,4303 @@ export default ( { request: { query: testPlanReportStatusDialogQuery, - variables: { testPlanVersionId: '26' } + variables: { testPlanVersionId: '5' } }, result: { data: { testPlanVersion: { - id: '26', - title: 'Modal Dialog Example', - phase: 'CANDIDATE', - gitSha: 'd0e16b42179de6f6c070da2310e99de837c71215', - gitMessage: - 'Delete down arrow command for navigating to the beginning of a dialog with JAWS and add the ESC command to exit forms or focus mode (#759)', - updatedAt: '2022-06-22T17:56:16.000Z', - draftPhaseReachedAt: '2022-07-06T00:00:00.000Z', + id: '69', + title: 'Checkbox Example (Mixed-State)', + phase: 'RECOMMENDED', + gitSha: '836fb2a997f5b2844035b8c934f8fda9833cd5b2', + gitMessage: 'Validation for test csv formats (#980)', + updatedAt: '2023-08-23T20:30:34.000Z', + draftPhaseReachedAt: null, candidatePhaseReachedAt: '2022-07-06T00:00:00.000Z', recommendedPhaseTargetDate: '2023-01-02T00:00:00.000Z', - recommendedPhaseReachedAt: null, + recommendedPhaseReachedAt: '2023-01-03T00:00:00.000Z', testPlan: { - directory: 'modal-dialog' + directory: 'checkbox-tri-state' }, - testPlanReports: [ + testPlanReportStatuses: [ { - id: '10', - metrics: { - testsCount: 11, - supportLevel: 'FULL', - conflictsCount: 0, - supportPercent: 100, - testsFailedCount: 9, - testsPassedCount: 2, - shouldFormatted: false, - mustFormatted: '14 of 14 passed', - shouldAssertionsCount: 0, - mustAssertionsCount: 14, - unexpectedBehaviorCount: 0, - unexpectedBehaviorsFormatted: false, - shouldAssertionsFailedCount: 0, - shouldAssertionsPassedCount: 0, - mustAssertionsFailedCount: 0, - mustAssertionsPassedCount: 14 - }, - markedFinalAt: null, - isFinal: false, + isRequired: true, at: { - id: '3', - name: 'VoiceOver for macOS' + id: '1', + name: 'JAWS' }, browser: { + id: '2', + name: 'Chrome' + }, + minimumAtVersion: { id: '1', - name: 'Firefox' + name: '2021.2111.13' }, - issues: [], - draftTestPlanRuns: [ - { - tester: { - username: 'esmeralda-baggins' - }, - testPlanReport: { - id: '10' - }, - testResults: [ - { - test: { - id: 'MzlmYeyIyIjoiMjYifQzIxY2' - }, - atVersion: { - id: '3', - name: '11.6 (20G165)' + exactAtVersion: null, + testPlanReport: { + id: '12', + metrics: { + testsCount: 14, + mayFormatted: false, + supportLevel: 'FULL', + commandsCount: 26, + mustFormatted: '116 of 116 passed', + conflictsCount: 0, + supportPercent: 100, + shouldFormatted: '34 of 34 passed', + testsFailedCount: 0, + testsPassedCount: 14, + mayAssertionsCount: 0, + mustAssertionsCount: 116, + assertionsFailedCount: 0, + assertionsPassedCount: 150, + shouldAssertionsCount: 34, + unexpectedBehaviorCount: 0, + mayAssertionsFailedCount: 0, + mayAssertionsPassedCount: 0, + mustAssertionsFailedCount: 0, + mustAssertionsPassedCount: 116, + shouldAssertionsFailedCount: 0, + shouldAssertionsPassedCount: 34, + unexpectedBehaviorsFormatted: false, + severeImpactFailedAssertionCount: 0, + severeImpactPassedAssertionCount: 26, + moderateImpactFailedAssertionCount: 0, + moderateImpactPassedAssertionCount: 26 + }, + isFinal: true, + markedFinalAt: '2022-07-06T00:00:00.000Z', + issues: [], + draftTestPlanRuns: [ + { + tester: { + username: 'esmeralda-baggins' + }, + testPlanReport: { + id: '12' + }, + testResults: [ + { + test: { + id: 'YWYzOeyIyIjoiNjkifQTQ0MT' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:52.053Z' }, - browserVersion: { - id: '1', - name: '99.0.1' + { + test: { + id: 'OGZjNeyIyIjoiNjkifQjQxZW' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:52.149Z' }, - completedAt: - '2023-08-18T03:17:11.295Z' - }, - { - test: { - id: 'N2FkZeyIyIjoiMjYifQDQ5NT' + { + test: { + id: 'NjM3ZeyIyIjoiNjkifQmUxYz' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:52.242Z' + }, + { + test: { + id: 'ZWQ0MeyIyIjoiNjkifQGZhYT' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:52.321Z' + }, + { + test: { + id: 'ZGI3ZeyIyIjoiNjkifQTc5Mj' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:52.409Z' + }, + { + test: { + id: 'MDZjOeyIyIjoiNjkifQGJkYz' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:52.510Z' }, - atVersion: { - id: '3', - name: '11.6 (20G165)' + { + test: { + id: 'ZmI3NeyIyIjoiNjkifQzUwMT' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:52.614Z' }, - browserVersion: { - id: '1', - name: '99.0.1' + { + test: { + id: 'NmY2YeyIyIjoiNjkifQTczOW' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:52.731Z' }, - completedAt: - '2023-08-18T03:17:11.369Z' - }, - { - test: { - id: 'ZDJkYeyIyIjoiMjYifQzRkYj' - }, - atVersion: { - id: '3', - name: '11.6 (20G165)' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:11.450Z' - } - ] - } - ] + { + test: { + id: 'MjIwYeyIyIjoiNjkifQmUzZj' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:52.882Z' + }, + { + test: { + id: 'ODg0OeyIyIjoiNjkifQWFlYm' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:53.038Z' + }, + { + test: { + id: 'ZDQ2MeyIyIjoiNjkifQjlmZj' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:53.184Z' + }, + { + test: { + id: 'MjdlYeyIyIjoiNjkifQTgyNj' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:53.317Z' + }, + { + test: { + id: 'OGE5MeyIyIjoiNjkifQGZjOT' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:53.428Z' + }, + { + test: { + id: 'YWNlNeyIyIjoiNjkifQjQzOW' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:53.567Z' + } + ] + } + ] + } }, { - id: '9', - metrics: { - testsCount: 18, - supportLevel: 'FULL', - conflictsCount: 0, - supportPercent: 100, - testsFailedCount: 16, - testsPassedCount: 2, - shouldFormatted: false, - mustFormatted: '16 of 16 passed', - shouldAssertionsCount: 0, - mustAssertionsCount: 16, - unexpectedBehaviorCount: 0, - unexpectedBehaviorsFormatted: false, - shouldAssertionsFailedCount: 0, - shouldAssertionsPassedCount: 0, - mustAssertionsFailedCount: 0, - mustAssertionsPassedCount: 16 + isRequired: true, + at: { + id: '1', + name: 'JAWS' + }, + browser: { + id: '1', + name: 'Firefox' + }, + minimumAtVersion: { + id: '1', + name: '2021.2111.13' }, - markedFinalAt: null, - isFinal: false, + exactAtVersion: null, + testPlanReport: null + }, + { + isRequired: true, at: { id: '2', name: 'NVDA' }, + browser: { + id: '2', + name: 'Chrome' + }, + minimumAtVersion: { + id: '2', + name: '2020.4' + }, + exactAtVersion: null, + testPlanReport: { + id: '13', + metrics: { + testsCount: 14, + mayFormatted: false, + supportLevel: 'FULL', + commandsCount: 28, + mustFormatted: '124 of 124 passed', + conflictsCount: 0, + supportPercent: 100, + shouldFormatted: '36 of 36 passed', + testsFailedCount: 0, + testsPassedCount: 14, + mayAssertionsCount: 0, + mustAssertionsCount: 124, + assertionsFailedCount: 0, + assertionsPassedCount: 160, + shouldAssertionsCount: 36, + unexpectedBehaviorCount: 0, + mayAssertionsFailedCount: 0, + mayAssertionsPassedCount: 0, + mustAssertionsFailedCount: 0, + mustAssertionsPassedCount: 124, + shouldAssertionsFailedCount: 0, + shouldAssertionsPassedCount: 36, + unexpectedBehaviorsFormatted: false, + severeImpactFailedAssertionCount: 0, + severeImpactPassedAssertionCount: 28, + moderateImpactFailedAssertionCount: 0, + moderateImpactPassedAssertionCount: 28 + }, + isFinal: true, + markedFinalAt: '2022-07-07T00:00:00.000Z', + issues: [], + draftTestPlanRuns: [ + { + tester: { + username: 'esmeralda-baggins' + }, + testPlanReport: { + id: '13' + }, + testResults: [ + { + test: { + id: 'YWYzOeyIyIjoiNjkifQTQ0MT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:53.698Z' + }, + { + test: { + id: 'OGZjNeyIyIjoiNjkifQjQxZW' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:53.814Z' + }, + { + test: { + id: 'NjM3ZeyIyIjoiNjkifQmUxYz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:53.921Z' + }, + { + test: { + id: 'ZWQ0MeyIyIjoiNjkifQGZhYT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:54.038Z' + }, + { + test: { + id: 'ZGI3ZeyIyIjoiNjkifQTc5Mj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:54.181Z' + }, + { + test: { + id: 'MDZjOeyIyIjoiNjkifQGJkYz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:54.327Z' + }, + { + test: { + id: 'ZmI3NeyIyIjoiNjkifQzUwMT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:54.421Z' + }, + { + test: { + id: 'NmY2YeyIyIjoiNjkifQTczOW' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:54.541Z' + }, + { + test: { + id: 'MjIwYeyIyIjoiNjkifQmUzZj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:54.666Z' + }, + { + test: { + id: 'ODg0OeyIyIjoiNjkifQWFlYm' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:54.794Z' + }, + { + test: { + id: 'ZDQ2MeyIyIjoiNjkifQjlmZj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:54.881Z' + }, + { + test: { + id: 'MjdlYeyIyIjoiNjkifQTgyNj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:54.967Z' + }, + { + test: { + id: 'OGE5MeyIyIjoiNjkifQGZjOT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:55.059Z' + }, + { + test: { + id: 'YWNlNeyIyIjoiNjkifQjQzOW' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:55.140Z' + } + ] + } + ] + } + }, + { + isRequired: true, + at: { + id: '2', + name: 'NVDA' + }, + browser: { + id: '1', + name: 'Firefox' + }, + minimumAtVersion: { + id: '2', + name: '2020.4' + }, + exactAtVersion: null, + testPlanReport: null + }, + { + isRequired: true, + at: { + id: '3', + name: 'VoiceOver for macOS' + }, + browser: { + id: '2', + name: 'Chrome' + }, + minimumAtVersion: { + id: '3', + name: '11.6 (20G165)' + }, + exactAtVersion: null, + testPlanReport: null + }, + { + isRequired: true, + at: { + id: '3', + name: 'VoiceOver for macOS' + }, + browser: { + id: '3', + name: 'Safari' + }, + minimumAtVersion: { + id: '3', + name: '11.6 (20G165)' + }, + exactAtVersion: null, + testPlanReport: { + id: '6', + metrics: { + testsCount: 7, + mayFormatted: false, + supportLevel: 'FAILING', + commandsCount: 16, + mustFormatted: '66 of 68 passed', + conflictsCount: 0, + supportPercent: 97, + shouldFormatted: '20 of 20 passed', + testsFailedCount: 2, + testsPassedCount: 5, + mayAssertionsCount: 0, + mustAssertionsCount: 68, + assertionsFailedCount: 2, + assertionsPassedCount: 86, + shouldAssertionsCount: 20, + unexpectedBehaviorCount: 0, + mayAssertionsFailedCount: 0, + mayAssertionsPassedCount: 0, + mustAssertionsFailedCount: 2, + mustAssertionsPassedCount: 66, + shouldAssertionsFailedCount: 0, + shouldAssertionsPassedCount: 20, + unexpectedBehaviorsFormatted: false, + severeImpactFailedAssertionCount: 0, + severeImpactPassedAssertionCount: 16, + moderateImpactFailedAssertionCount: 0, + moderateImpactPassedAssertionCount: 16 + }, + isFinal: true, + markedFinalAt: '2022-07-06T00:00:00.000Z', + issues: [], + draftTestPlanRuns: [ + { + tester: { + username: 'tom-proudfeet' + }, + testPlanReport: { + id: '6' + }, + testResults: [ + { + test: { + id: 'NmUzMeyIyIjoiNjkifQmU0OT' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:45.554Z' + }, + { + test: { + id: 'Y2UyYeyIyIjoiNjkifQ2Y1Mz' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:45.671Z' + }, + { + test: { + id: 'ODc2OeyIyIjoiNjkifQTA1Yz' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:45.794Z' + }, + { + test: { + id: 'OTgwZeyIyIjoiNjkifQDZjOG' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:45.909Z' + }, + { + test: { + id: 'ODA3ZeyIyIjoiNjkifQjI4Y2' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:45.997Z' + }, + { + test: { + id: 'OWI4MeyIyIjoiNjkifQzFlZD' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:46.091Z' + }, + { + test: { + id: 'MzhiZeyIyIjoiNjkifQWE4Nj' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:46.189Z' + } + ] + } + ] + } + }, + { + isRequired: false, + at: { + id: '3', + name: 'VoiceOver for macOS' + }, + browser: { + id: '1', + name: 'Firefox' + }, + minimumAtVersion: { + id: '3', + name: '11.6 (20G165)' + }, + exactAtVersion: null, + testPlanReport: null + } + ] + } + } + } + }, + { + request: { + query: testPlanReportStatusDialogQuery, + variables: { testPlanVersionId: '7' } + }, + result: { + data: { + testPlanVersion: { + id: '7', + title: 'Select Only Combobox Example', + phase: 'DRAFT', + gitSha: '7c4b5dce23c74fcf280ed164bdb903e02e0e7726', + gitMessage: + 'Generate html source script to support aria-at-app (#646)', + updatedAt: '2022-03-17T18:34:51.000Z', + draftPhaseReachedAt: '2022-07-06T00:00:00.000Z', + candidatePhaseReachedAt: null, + recommendedPhaseTargetDate: null, + recommendedPhaseReachedAt: null, + testPlan: { + directory: 'combobox-select-only' + }, + testPlanReportStatuses: [ + { + isRequired: true, + at: { + id: '1', + name: 'JAWS' + }, + browser: { + id: '2', + name: 'Chrome' + }, + minimumAtVersion: { + id: '1', + name: '2021.2111.13' + }, + exactAtVersion: null, + testPlanReport: null + }, + { + isRequired: false, + at: { + id: '1', + name: 'JAWS' + }, + browser: { + id: '1', + name: 'Firefox' + }, + minimumAtVersion: { + id: '1', + name: '2021.2111.13' + }, + exactAtVersion: null, + testPlanReport: null + }, + { + isRequired: true, + at: { + id: '2', + name: 'NVDA' + }, + browser: { + id: '2', + name: 'Chrome' + }, + minimumAtVersion: { + id: '2', + name: '2020.4' + }, + exactAtVersion: null, + testPlanReport: null + }, + { + isRequired: false, + at: { + id: '2', + name: 'NVDA' + }, + browser: { + id: '1', + name: 'Firefox' + }, + minimumAtVersion: { + id: '2', + name: '2020.4' + }, + exactAtVersion: null, + testPlanReport: { + id: '2', + metrics: { + testsCount: 21, + mayFormatted: false, + supportLevel: 'FAILING', + commandsCount: 24, + mustFormatted: '118 of 122 passed', + conflictsCount: 3, + supportPercent: 97, + shouldFormatted: '34 of 36 passed', + testsFailedCount: 6, + testsPassedCount: 15, + mayAssertionsCount: 0, + mustAssertionsCount: 122, + assertionsFailedCount: 6, + assertionsPassedCount: 152, + shouldAssertionsCount: 36, + unexpectedBehaviorCount: 3, + mayAssertionsFailedCount: 0, + mayAssertionsPassedCount: 0, + mustAssertionsFailedCount: 4, + mustAssertionsPassedCount: 118, + shouldAssertionsFailedCount: 2, + shouldAssertionsPassedCount: 34, + unexpectedBehaviorsFormatted: '3 found', + severeImpactFailedAssertionCount: 1, + severeImpactPassedAssertionCount: 23, + moderateImpactFailedAssertionCount: 2, + moderateImpactPassedAssertionCount: 22 + }, + isFinal: false, + markedFinalAt: null, + issues: [ + { + link: 'https://github.com/bocoup/aria-at/issues/128#issue-2157878584', + isOpen: true, + feedbackType: 'FEEDBACK' + } + ], + draftTestPlanRuns: [ + { + tester: { + username: 'tom-proudfeet' + }, + testPlanReport: { + id: '2' + }, + testResults: [ + { + test: { + id: 'Nzg5NeyIyIjoiNyJ9zNjZj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:38.949Z' + }, + { + test: { + id: 'MmY0YeyIyIjoiNyJ9jRkZD' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:39.070Z' + }, + { + test: { + id: 'ZjUwNeyIyIjoiNyJ9mE2ZT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:39.180Z' + }, + { + test: { + id: 'MDNiMeyIyIjoiNyJ9Dk1MT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:39.292Z' + }, + { + test: { + id: 'MjRmNeyIyIjoiNyJ92MyMT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:39.406Z' + }, + { + test: { + id: 'ZmVlMeyIyIjoiNyJ9mUyYj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: null + }, + { + test: { + id: 'YWFiNeyIyIjoiNyJ9zE2Zj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:39.640Z' + }, + { + test: { + id: 'YjZkYeyIyIjoiNyJ9WIxZm' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:39.761Z' + }, + { + test: { + id: 'ZmIzMeyIyIjoiNyJ9TQ1NW' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:39.888Z' + }, + { + test: { + id: 'MmZkNeyIyIjoiNyJ9zIwN2' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:40.006Z' + }, + { + test: { + id: 'ZmQwOeyIyIjoiNyJ9DEzYz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:40.122Z' + }, + { + test: { + id: 'MGViNeyIyIjoiNyJ9GQ3MT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:40.234Z' + }, + { + test: { + id: 'YTg5MeyIyIjoiNyJ9WEzOT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:40.355Z' + }, + { + test: { + id: 'NTRjMeyIyIjoiNyJ9zQ0OD' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:40.467Z' + }, + { + test: { + id: 'MjRlZeyIyIjoiNyJ9DcyY2' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:40.588Z' + }, + { + test: { + id: 'YWQzNeyIyIjoiNyJ9mE2Nm' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:40.712Z' + }, + { + test: { + id: 'OTYxOeyIyIjoiNyJ9TdmYj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:40.826Z' + }, + { + test: { + id: 'MjgzNeyIyIjoiNyJ9TZjNz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:40.948Z' + }, + { + test: { + id: 'NWNiZeyIyIjoiNyJ9jI2MD' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:41.075Z' + } + ] + }, + { + tester: { + username: 'esmeralda-baggins' + }, + testPlanReport: { + id: '2' + }, + testResults: [ + { + test: { + id: 'Nzg5NeyIyIjoiNyJ9zNjZj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:36.666Z' + }, + { + test: { + id: 'MmY0YeyIyIjoiNyJ9jRkZD' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:36.793Z' + }, + { + test: { + id: 'ZjUwNeyIyIjoiNyJ9mE2ZT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:36.914Z' + }, + { + test: { + id: 'MDNiMeyIyIjoiNyJ9Dk1MT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:37.031Z' + }, + { + test: { + id: 'MjRmNeyIyIjoiNyJ92MyMT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:37.150Z' + }, + { + test: { + id: 'ZmVlMeyIyIjoiNyJ9mUyYj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: null + }, + { + test: { + id: 'YWFiNeyIyIjoiNyJ9zE2Zj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:37.384Z' + }, + { + test: { + id: 'YjZkYeyIyIjoiNyJ9WIxZm' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:37.512Z' + }, + { + test: { + id: 'ZmIzMeyIyIjoiNyJ9TQ1NW' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:37.638Z' + }, + { + test: { + id: 'MmZkNeyIyIjoiNyJ9zIwN2' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:37.760Z' + }, + { + test: { + id: 'ZmQwOeyIyIjoiNyJ9DEzYz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:37.883Z' + }, + { + test: { + id: 'MGViNeyIyIjoiNyJ9GQ3MT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:38.014Z' + }, + { + test: { + id: 'YTg5MeyIyIjoiNyJ9WEzOT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:38.145Z' + }, + { + test: { + id: 'NTRjMeyIyIjoiNyJ9zQ0OD' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:38.268Z' + }, + { + test: { + id: 'MjRlZeyIyIjoiNyJ9DcyY2' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:38.382Z' + }, + { + test: { + id: 'YWQzNeyIyIjoiNyJ9mE2Nm' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:38.481Z' + }, + { + test: { + id: 'OTYxOeyIyIjoiNyJ9TdmYj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:38.596Z' + }, + { + test: { + id: 'MjgzNeyIyIjoiNyJ9TZjNz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:38.701Z' + }, + { + test: { + id: 'NWNiZeyIyIjoiNyJ9jI2MD' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:38.811Z' + } + ] + } + ] + } + }, + { + isRequired: true, + at: { + id: '3', + name: 'VoiceOver for macOS' + }, + browser: { + id: '3', + name: 'Safari' + }, + minimumAtVersion: { + id: '3', + name: '11.6 (20G165)' + }, + exactAtVersion: null, + testPlanReport: null + }, + { + isRequired: false, + at: { + id: '3', + name: 'VoiceOver for macOS' + }, + browser: { + id: '2', + name: 'Chrome' + }, + minimumAtVersion: { + id: '3', + name: '11.6 (20G165)' + }, + exactAtVersion: null, + testPlanReport: null + }, + { + isRequired: false, + at: { + id: '3', + name: 'VoiceOver for macOS' + }, + browser: { + id: '1', + name: 'Firefox' + }, + minimumAtVersion: { + id: '3', + name: '11.6 (20G165)' + }, + exactAtVersion: null, + testPlanReport: null + } + ] + } + } + } + }, + { + request: { + query: testPlanReportStatusDialogQuery, + variables: { testPlanVersionId: '26' } + }, + result: { + data: { + testPlanVersion: { + id: '24', + title: 'Modal Dialog Example', + phase: 'CANDIDATE', + gitSha: '5fe7afd82fe51c185b8661276105190a59d47322', + gitMessage: 'Task 7: delete incorrect instructions (#733)', + updatedAt: '2022-05-26T16:10:10.000Z', + draftPhaseReachedAt: '2022-07-06T00:00:00.000Z', + candidatePhaseReachedAt: '2022-07-06T00:00:00.000Z', + recommendedPhaseTargetDate: '2023-01-02T00:00:00.000Z', + recommendedPhaseReachedAt: null, + testPlan: { + directory: 'modal-dialog' + }, + testPlanReportStatuses: [ + { + isRequired: true, + at: { + id: '1', + name: 'JAWS' + }, + browser: { + id: '2', + name: 'Chrome' + }, + minimumAtVersion: { + id: '1', + name: '2021.2111.13' + }, + exactAtVersion: null, + testPlanReport: { + id: '3', + metrics: { + testsCount: 18, + mayFormatted: false, + supportLevel: 'FAILING', + commandsCount: 26, + mustFormatted: '115 of 117 passed', + conflictsCount: 0, + supportPercent: 98, + shouldFormatted: '25 of 26 passed', + testsFailedCount: 2, + testsPassedCount: 16, + mayAssertionsCount: 0, + mustAssertionsCount: 117, + assertionsFailedCount: 3, + assertionsPassedCount: 140, + shouldAssertionsCount: 26, + unexpectedBehaviorCount: 1, + mayAssertionsFailedCount: 0, + mayAssertionsPassedCount: 0, + mustAssertionsFailedCount: 2, + mustAssertionsPassedCount: 115, + shouldAssertionsFailedCount: 1, + shouldAssertionsPassedCount: 25, + unexpectedBehaviorsFormatted: '1 found', + severeImpactFailedAssertionCount: 0, + severeImpactPassedAssertionCount: 26, + moderateImpactFailedAssertionCount: 1, + moderateImpactPassedAssertionCount: 25 + }, + isFinal: true, + markedFinalAt: '2022-07-06T00:00:00.000Z', + issues: [], + draftTestPlanRuns: [ + { + tester: { + username: 'esmeralda-baggins' + }, + testPlanReport: { + id: '3' + }, + testResults: [ + { + test: { + id: 'ZjE0NeyIyIjoiMjQifQmI0NT' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:41.177Z' + }, + { + test: { + id: 'YjZlNeyIyIjoiMjQifQTc5ZW' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:41.256Z' + }, + { + test: { + id: 'NWM0MeyIyIjoiMjQifQzhiYz' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:41.349Z' + }, + { + test: { + id: 'YzM0ZeyIyIjoiMjQifQmRmMz' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:41.419Z' + }, + { + test: { + id: 'ZjVjMeyIyIjoiMjQifQDRhY2' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:41.496Z' + }, + { + test: { + id: 'YmUzMeyIyIjoiMjQifQmRmNm' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:41.574Z' + }, + { + test: { + id: 'ZGJmMeyIyIjoiMjQifQzU5Yz' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:41.661Z' + }, + { + test: { + id: 'Nzg1OeyIyIjoiMjQifQTYxM2' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:41.741Z' + }, + { + test: { + id: 'ZTI0MeyIyIjoiMjQifQzM4YT' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:41.823Z' + }, + { + test: { + id: 'MzY5ZeyIyIjoiMjQifQmQ0OT' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:41.950Z' + }, + { + test: { + id: 'ZjVmYeyIyIjoiMjQifQjJjYW' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:42.044Z' + }, + { + test: { + id: 'ZTMwNeyIyIjoiMjQifQzI5Nz' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:42.112Z' + }, + { + test: { + id: 'NGY0MeyIyIjoiMjQifQ2FjMj' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:42.191Z' + }, + { + test: { + id: 'OTI0OeyIyIjoiMjQifQTU1ZT' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:42.271Z' + }, + { + test: { + id: 'MDRhMeyIyIjoiMjQifQWEzMj' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:42.344Z' + }, + { + test: { + id: 'ZThlZeyIyIjoiMjQifQjQ2Nz' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:42.412Z' + }, + { + test: { + id: 'NjhjMeyIyIjoiMjQifQGE0ND' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:42.482Z' + }, + { + test: { + id: 'YTAzZeyIyIjoiMjQifQTc5ZD' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:42.575Z' + } + ] + } + ] + } + }, + { + isRequired: false, + at: { + id: '1', + name: 'JAWS' + }, + browser: { + id: '2', + name: 'Chrome' + }, + minimumAtVersion: null, + exactAtVersion: { + id: '1', + name: '2021.2111.13' + }, + testPlanReport: { + id: '105', + metrics: {}, + isFinal: false, + markedFinalAt: null, + issues: [], + draftTestPlanRuns: [] + } + }, + { + isRequired: false, + at: { + id: '1', + name: 'JAWS' + }, + browser: { + id: '1', + name: 'Firefox' + }, + minimumAtVersion: { + id: '1', + name: '2021.2111.13' + }, + exactAtVersion: null, + testPlanReport: { + id: '8', + metrics: { + testsCount: 18, + mayFormatted: false, + supportLevel: 'FULL', + commandsCount: 26, + mustFormatted: '117 of 117 passed', + conflictsCount: 0, + supportPercent: 100, + shouldFormatted: '26 of 26 passed', + testsFailedCount: 0, + testsPassedCount: 18, + mayAssertionsCount: 0, + mustAssertionsCount: 117, + assertionsFailedCount: 0, + assertionsPassedCount: 143, + shouldAssertionsCount: 26, + unexpectedBehaviorCount: 0, + mayAssertionsFailedCount: 0, + mayAssertionsPassedCount: 0, + mustAssertionsFailedCount: 0, + mustAssertionsPassedCount: 117, + shouldAssertionsFailedCount: 0, + shouldAssertionsPassedCount: 26, + unexpectedBehaviorsFormatted: false, + severeImpactFailedAssertionCount: 0, + severeImpactPassedAssertionCount: 26, + moderateImpactFailedAssertionCount: 0, + moderateImpactPassedAssertionCount: 26 + }, + isFinal: false, + markedFinalAt: null, + issues: [], + draftTestPlanRuns: [ + { + tester: { + username: 'esmeralda-baggins' + }, + testPlanReport: { + id: '8' + }, + testResults: [ + { + test: { + id: 'ZjE0NeyIyIjoiMjQifQmI0NT' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:46.300Z' + }, + { + test: { + id: 'YjZlNeyIyIjoiMjQifQTc5ZW' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:46.396Z' + }, + { + test: { + id: 'NWM0MeyIyIjoiMjQifQzhiYz' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:46.490Z' + }, + { + test: { + id: 'YzM0ZeyIyIjoiMjQifQmRmMz' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:46.572Z' + }, + { + test: { + id: 'ZjVjMeyIyIjoiMjQifQDRhY2' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:46.656Z' + }, + { + test: { + id: 'YmUzMeyIyIjoiMjQifQmRmNm' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:46.743Z' + }, + { + test: { + id: 'ZGJmMeyIyIjoiMjQifQzU5Yz' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:46.828Z' + }, + { + test: { + id: 'Nzg1OeyIyIjoiMjQifQTYxM2' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:46.912Z' + }, + { + test: { + id: 'ZTI0MeyIyIjoiMjQifQzM4YT' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:46.990Z' + }, + { + test: { + id: 'MzY5ZeyIyIjoiMjQifQmQ0OT' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:47.087Z' + }, + { + test: { + id: 'ZjVmYeyIyIjoiMjQifQjJjYW' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:47.215Z' + }, + { + test: { + id: 'ZTMwNeyIyIjoiMjQifQzI5Nz' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:47.355Z' + }, + { + test: { + id: 'NGY0MeyIyIjoiMjQifQ2FjMj' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:47.484Z' + }, + { + test: { + id: 'OTI0OeyIyIjoiMjQifQTU1ZT' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:47.614Z' + }, + { + test: { + id: 'MDRhMeyIyIjoiMjQifQWEzMj' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:47.738Z' + }, + { + test: { + id: 'ZThlZeyIyIjoiMjQifQjQ2Nz' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:47.862Z' + }, + { + test: { + id: 'NjhjMeyIyIjoiMjQifQGE0ND' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:47.981Z' + }, + { + test: { + id: 'YTAzZeyIyIjoiMjQifQTc5ZD' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:48.105Z' + } + ] + } + ] + } + }, + { + isRequired: true, + at: { + id: '2', + name: 'NVDA' + }, + browser: { + id: '2', + name: 'Chrome' + }, + minimumAtVersion: { + id: '2', + name: '2020.4' + }, + exactAtVersion: null, + testPlanReport: { + id: '4', + metrics: { + testsCount: 18, + mayFormatted: false, + supportLevel: 'FAILING', + commandsCount: 26, + mustFormatted: '115 of 117 passed', + conflictsCount: 0, + supportPercent: 98, + shouldFormatted: '25 of 26 passed', + testsFailedCount: 2, + testsPassedCount: 16, + mayAssertionsCount: 0, + mustAssertionsCount: 117, + assertionsFailedCount: 3, + assertionsPassedCount: 140, + shouldAssertionsCount: 26, + unexpectedBehaviorCount: 1, + mayAssertionsFailedCount: 0, + mayAssertionsPassedCount: 0, + mustAssertionsFailedCount: 2, + mustAssertionsPassedCount: 115, + shouldAssertionsFailedCount: 1, + shouldAssertionsPassedCount: 25, + unexpectedBehaviorsFormatted: '1 found', + severeImpactFailedAssertionCount: 0, + severeImpactPassedAssertionCount: 26, + moderateImpactFailedAssertionCount: 1, + moderateImpactPassedAssertionCount: 25 + }, + isFinal: true, + markedFinalAt: '2022-07-06T00:00:00.000Z', + issues: [], + draftTestPlanRuns: [ + { + tester: { + username: 'esmeralda-baggins' + }, + testPlanReport: { + id: '4' + }, + testResults: [ + { + test: { + id: 'ZjE0NeyIyIjoiMjQifQmI0NT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:42.683Z' + }, + { + test: { + id: 'YjZlNeyIyIjoiMjQifQTc5ZW' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:42.772Z' + }, + { + test: { + id: 'NWM0MeyIyIjoiMjQifQzhiYz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:42.848Z' + }, + { + test: { + id: 'YzM0ZeyIyIjoiMjQifQmRmMz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:42.928Z' + }, + { + test: { + id: 'ZjVjMeyIyIjoiMjQifQDRhY2' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:43.005Z' + }, + { + test: { + id: 'YmUzMeyIyIjoiMjQifQmRmNm' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:43.093Z' + }, + { + test: { + id: 'ZGJmMeyIyIjoiMjQifQzU5Yz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:43.173Z' + }, + { + test: { + id: 'Nzg1OeyIyIjoiMjQifQTYxM2' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:43.245Z' + }, + { + test: { + id: 'ZTI0MeyIyIjoiMjQifQzM4YT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:43.318Z' + }, + { + test: { + id: 'MzY5ZeyIyIjoiMjQifQmQ0OT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:43.399Z' + }, + { + test: { + id: 'ZjVmYeyIyIjoiMjQifQjJjYW' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:43.473Z' + }, + { + test: { + id: 'ZTMwNeyIyIjoiMjQifQzI5Nz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:43.554Z' + }, + { + test: { + id: 'NGY0MeyIyIjoiMjQifQ2FjMj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:43.643Z' + }, + { + test: { + id: 'OTI0OeyIyIjoiMjQifQTU1ZT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:43.738Z' + }, + { + test: { + id: 'MDRhMeyIyIjoiMjQifQWEzMj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:43.844Z' + }, + { + test: { + id: 'ZThlZeyIyIjoiMjQifQjQ2Nz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:43.950Z' + }, + { + test: { + id: 'NjhjMeyIyIjoiMjQifQGE0ND' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:44.078Z' + }, + { + test: { + id: 'YTAzZeyIyIjoiMjQifQTc5ZD' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:44.219Z' + } + ] + } + ] + } + }, + { + isRequired: false, + at: { + id: '2', + name: 'NVDA' + }, + browser: { + id: '1', + name: 'Firefox' + }, + minimumAtVersion: { + id: '2', + name: '2020.4' + }, + exactAtVersion: null, + testPlanReport: { + id: '9', + metrics: { + testsCount: 18, + mayFormatted: false, + supportLevel: 'FULL', + commandsCount: 26, + mustFormatted: '117 of 117 passed', + conflictsCount: 0, + supportPercent: 100, + shouldFormatted: '26 of 26 passed', + testsFailedCount: 0, + testsPassedCount: 18, + mayAssertionsCount: 0, + mustAssertionsCount: 117, + assertionsFailedCount: 0, + assertionsPassedCount: 143, + shouldAssertionsCount: 26, + unexpectedBehaviorCount: 0, + mayAssertionsFailedCount: 0, + mayAssertionsPassedCount: 0, + mustAssertionsFailedCount: 0, + mustAssertionsPassedCount: 117, + shouldAssertionsFailedCount: 0, + shouldAssertionsPassedCount: 26, + unexpectedBehaviorsFormatted: false, + severeImpactFailedAssertionCount: 0, + severeImpactPassedAssertionCount: 26, + moderateImpactFailedAssertionCount: 0, + moderateImpactPassedAssertionCount: 26 + }, + isFinal: false, + markedFinalAt: null, + issues: [], + draftTestPlanRuns: [ + { + tester: { + username: 'esmeralda-baggins' + }, + testPlanReport: { + id: '9' + }, + testResults: [ + { + test: { + id: 'ZjE0NeyIyIjoiMjQifQmI0NT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:48.229Z' + }, + { + test: { + id: 'YjZlNeyIyIjoiMjQifQTc5ZW' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:48.339Z' + }, + { + test: { + id: 'NWM0MeyIyIjoiMjQifQzhiYz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:48.439Z' + }, + { + test: { + id: 'YzM0ZeyIyIjoiMjQifQmRmMz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:48.537Z' + }, + { + test: { + id: 'ZjVjMeyIyIjoiMjQifQDRhY2' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:48.636Z' + }, + { + test: { + id: 'YmUzMeyIyIjoiMjQifQmRmNm' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:48.736Z' + }, + { + test: { + id: 'ZGJmMeyIyIjoiMjQifQzU5Yz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:48.824Z' + }, + { + test: { + id: 'Nzg1OeyIyIjoiMjQifQTYxM2' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:48.901Z' + }, + { + test: { + id: 'ZTI0MeyIyIjoiMjQifQzM4YT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:48.978Z' + }, + { + test: { + id: 'MzY5ZeyIyIjoiMjQifQmQ0OT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:49.070Z' + }, + { + test: { + id: 'ZjVmYeyIyIjoiMjQifQjJjYW' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:49.161Z' + }, + { + test: { + id: 'ZTMwNeyIyIjoiMjQifQzI5Nz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:49.264Z' + }, + { + test: { + id: 'NGY0MeyIyIjoiMjQifQ2FjMj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:49.387Z' + }, + { + test: { + id: 'OTI0OeyIyIjoiMjQifQTU1ZT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:49.527Z' + }, + { + test: { + id: 'MDRhMeyIyIjoiMjQifQWEzMj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:49.646Z' + }, + { + test: { + id: 'ZThlZeyIyIjoiMjQifQjQ2Nz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:49.747Z' + }, + { + test: { + id: 'NjhjMeyIyIjoiMjQifQGE0ND' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:49.847Z' + }, + { + test: { + id: 'YTAzZeyIyIjoiMjQifQTc5ZD' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:49.951Z' + } + ] + } + ] + } + }, + { + isRequired: true, + at: { + id: '3', + name: 'VoiceOver for macOS' + }, + browser: { + id: '3', + name: 'Safari' + }, + minimumAtVersion: { + id: '3', + name: '11.6 (20G165)' + }, + exactAtVersion: null, + testPlanReport: { + id: '5', + metrics: { + testsCount: 11, + mayFormatted: false, + supportLevel: 'FAILING', + commandsCount: 20, + mustFormatted: '88 of 90 passed', + conflictsCount: 0, + supportPercent: 98, + shouldFormatted: '19 of 20 passed', + testsFailedCount: 2, + testsPassedCount: 9, + mayAssertionsCount: 0, + mustAssertionsCount: 90, + assertionsFailedCount: 3, + assertionsPassedCount: 107, + shouldAssertionsCount: 20, + unexpectedBehaviorCount: 1, + mayAssertionsFailedCount: 0, + mayAssertionsPassedCount: 0, + mustAssertionsFailedCount: 2, + mustAssertionsPassedCount: 88, + shouldAssertionsFailedCount: 1, + shouldAssertionsPassedCount: 19, + unexpectedBehaviorsFormatted: '1 found', + severeImpactFailedAssertionCount: 0, + severeImpactPassedAssertionCount: 20, + moderateImpactFailedAssertionCount: 1, + moderateImpactPassedAssertionCount: 19 + }, + isFinal: true, + markedFinalAt: '2022-07-06T00:00:00.000Z', + issues: [], + draftTestPlanRuns: [ + { + tester: { + username: 'esmeralda-baggins' + }, + testPlanReport: { + id: '5' + }, + testResults: [ + { + test: { + id: 'NjM0MeyIyIjoiMjQifQTdiZG' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:44.402Z' + }, + { + test: { + id: 'YWYzOeyIyIjoiMjQifQDBjN2' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:44.489Z' + }, + { + test: { + id: 'ZmJjYeyIyIjoiMjQifQWJiNT' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:44.594Z' + }, + { + test: { + id: 'MjU2NeyIyIjoiMjQifQTk2YW' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:44.694Z' + }, + { + test: { + id: 'MWNlNeyIyIjoiMjQifQTRhNT' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:44.781Z' + }, + { + test: { + id: 'YzFlYeyIyIjoiMjQifQjE5Yj' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:44.877Z' + }, + { + test: { + id: 'N2UwMeyIyIjoiMjQifQTQ1OT' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:44.966Z' + }, + { + test: { + id: 'OTYwOeyIyIjoiMjQifQTE3ND' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:45.061Z' + }, + { + test: { + id: 'OWI2MeyIyIjoiMjQifQmE0ZD' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:45.165Z' + }, + { + test: { + id: 'YTU0MeyIyIjoiMjQifQjNhNj' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:45.296Z' + }, + { + test: { + id: 'NTM4MeyIyIjoiMjQifQGVlNm' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:45.433Z' + } + ] + } + ] + } + }, + { + isRequired: false, + at: { + id: '3', + name: 'VoiceOver for macOS' + }, + browser: { + id: '2', + name: 'Chrome' + }, + minimumAtVersion: { + id: '3', + name: '11.6 (20G165)' + }, + exactAtVersion: null, + testPlanReport: { + id: '11', + metrics: { + testsCount: 11, + mayFormatted: false, + supportLevel: 'FULL', + commandsCount: 20, + mustFormatted: '90 of 90 passed', + conflictsCount: 0, + supportPercent: 100, + shouldFormatted: '20 of 20 passed', + testsFailedCount: 0, + testsPassedCount: 11, + mayAssertionsCount: 0, + mustAssertionsCount: 90, + assertionsFailedCount: 0, + assertionsPassedCount: 110, + shouldAssertionsCount: 20, + unexpectedBehaviorCount: 0, + mayAssertionsFailedCount: 0, + mayAssertionsPassedCount: 0, + mustAssertionsFailedCount: 0, + mustAssertionsPassedCount: 90, + shouldAssertionsFailedCount: 0, + shouldAssertionsPassedCount: 20, + unexpectedBehaviorsFormatted: false, + severeImpactFailedAssertionCount: 0, + severeImpactPassedAssertionCount: 20, + moderateImpactFailedAssertionCount: 0, + moderateImpactPassedAssertionCount: 20 + }, + isFinal: false, + markedFinalAt: null, + issues: [], + draftTestPlanRuns: [ + { + tester: { + username: 'esmeralda-baggins' + }, + testPlanReport: { + id: '11' + }, + testResults: [ + { + test: { + id: 'NjM0MeyIyIjoiMjQifQTdiZG' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:51.034Z' + }, + { + test: { + id: 'YWYzOeyIyIjoiMjQifQDBjN2' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:51.120Z' + }, + { + test: { + id: 'ZmJjYeyIyIjoiMjQifQWJiNT' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:51.205Z' + }, + { + test: { + id: 'MjU2NeyIyIjoiMjQifQTk2YW' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:51.313Z' + }, + { + test: { + id: 'MWNlNeyIyIjoiMjQifQTRhNT' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:51.410Z' + }, + { + test: { + id: 'YzFlYeyIyIjoiMjQifQjE5Yj' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:51.489Z' + }, + { + test: { + id: 'N2UwMeyIyIjoiMjQifQTQ1OT' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:51.561Z' + }, + { + test: { + id: 'OTYwOeyIyIjoiMjQifQTE3ND' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:51.648Z' + }, + { + test: { + id: 'OWI2MeyIyIjoiMjQifQmE0ZD' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:51.736Z' + }, + { + test: { + id: 'YTU0MeyIyIjoiMjQifQjNhNj' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:51.832Z' + }, + { + test: { + id: 'NTM4MeyIyIjoiMjQifQGVlNm' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:51.954Z' + } + ] + } + ] + } + }, + { + isRequired: false, + at: { + id: '3', + name: 'VoiceOver for macOS' + }, + browser: { + id: '1', + name: 'Firefox' + }, + minimumAtVersion: { + id: '3', + name: '11.6 (20G165)' + }, + exactAtVersion: null, + testPlanReport: { + id: '10', + metrics: { + testsCount: 11, + mayFormatted: false, + supportLevel: 'FULL', + commandsCount: 20, + mustFormatted: '90 of 90 passed', + conflictsCount: 0, + supportPercent: 100, + shouldFormatted: '20 of 20 passed', + testsFailedCount: 0, + testsPassedCount: 11, + mayAssertionsCount: 0, + mustAssertionsCount: 90, + assertionsFailedCount: 0, + assertionsPassedCount: 110, + shouldAssertionsCount: 20, + unexpectedBehaviorCount: 0, + mayAssertionsFailedCount: 0, + mayAssertionsPassedCount: 0, + mustAssertionsFailedCount: 0, + mustAssertionsPassedCount: 90, + shouldAssertionsFailedCount: 0, + shouldAssertionsPassedCount: 20, + unexpectedBehaviorsFormatted: false, + severeImpactFailedAssertionCount: 0, + severeImpactPassedAssertionCount: 20, + moderateImpactFailedAssertionCount: 0, + moderateImpactPassedAssertionCount: 20 + }, + isFinal: false, + markedFinalAt: null, + issues: [], + draftTestPlanRuns: [ + { + tester: { + username: 'esmeralda-baggins' + }, + testPlanReport: { + id: '10' + }, + testResults: [ + { + test: { + id: 'NjM0MeyIyIjoiMjQifQTdiZG' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:50.048Z' + }, + { + test: { + id: 'YWYzOeyIyIjoiMjQifQDBjN2' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:50.128Z' + }, + { + test: { + id: 'ZmJjYeyIyIjoiMjQifQWJiNT' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:50.203Z' + }, + { + test: { + id: 'MjU2NeyIyIjoiMjQifQTk2YW' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:50.278Z' + }, + { + test: { + id: 'MWNlNeyIyIjoiMjQifQTRhNT' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:50.355Z' + }, + { + test: { + id: 'YzFlYeyIyIjoiMjQifQjE5Yj' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:50.426Z' + }, + { + test: { + id: 'N2UwMeyIyIjoiMjQifQTQ1OT' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:50.508Z' + }, + { + test: { + id: 'OTYwOeyIyIjoiMjQifQTE3ND' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:50.591Z' + }, + { + test: { + id: 'OWI2MeyIyIjoiMjQifQmE0ZD' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:50.687Z' + }, + { + test: { + id: 'YTU0MeyIyIjoiMjQifQjNhNj' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:50.788Z' + }, + { + test: { + id: 'NTM4MeyIyIjoiMjQifQGVlNm' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: + '2024-04-25T16:44:50.914Z' + } + ] + } + ] + } + } + ] + } + } + } + }, + { + request: { + query: testPlanReportStatusDialogQuery, + variables: { testPlanVersionId: '34' } + }, + result: { + data: { + testPlanVersion: { + id: '31', + title: 'Toggle Button', + phase: 'DRAFT', + gitSha: '022340081280b8cafb8ae0716a5b67e9ab942ef4', + gitMessage: + 'Delete duplicated assertion for operating a not pressed togle button (VoiceOver) (#716)', + updatedAt: '2022-05-18T20:51:40.000Z', + draftPhaseReachedAt: '2022-07-06T00:00:00.000Z', + candidatePhaseReachedAt: null, + recommendedPhaseTargetDate: null, + recommendedPhaseReachedAt: null, + testPlan: { + directory: 'toggle-button' + }, + testPlanReportStatuses: [ + { + isRequired: true, + at: { + id: '1', + name: 'JAWS' + }, + browser: { + id: '2', + name: 'Chrome' + }, + minimumAtVersion: { + id: '1', + name: '2021.2111.13' + }, + exactAtVersion: null, + testPlanReport: { + id: '1', + metrics: { + testsCount: 16, + mayFormatted: false, + supportLevel: 'FAILING', + commandsCount: 26, + mustFormatted: '86 of 88 passed', + conflictsCount: 0, + supportPercent: 98, + shouldFormatted: '25 of 26 passed', + testsFailedCount: 6, + testsPassedCount: 10, + mayAssertionsCount: 0, + mustAssertionsCount: 88, + assertionsFailedCount: 3, + assertionsPassedCount: 111, + shouldAssertionsCount: 26, + unexpectedBehaviorCount: 1, + mayAssertionsFailedCount: 0, + mayAssertionsPassedCount: 0, + mustAssertionsFailedCount: 2, + mustAssertionsPassedCount: 86, + shouldAssertionsFailedCount: 1, + shouldAssertionsPassedCount: 25, + unexpectedBehaviorsFormatted: '1 found', + severeImpactFailedAssertionCount: 0, + severeImpactPassedAssertionCount: 26, + moderateImpactFailedAssertionCount: 1, + moderateImpactPassedAssertionCount: 25 + }, + isFinal: false, + markedFinalAt: null, + issues: [], + draftTestPlanRuns: [ + { + tester: { + username: 'esmeralda-baggins' + }, + testPlanReport: { + id: '1' + }, + testResults: [ + { + test: { + id: 'MTExZeyIyIjoiMzEifQWZhZG' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:35.281Z' + }, + { + test: { + id: 'MzJkZeyIyIjoiMzEifQTAzMm' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: null + }, + { + test: { + id: 'NDBjMeyIyIjoiMzEifQjc1NT' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: null + }, + { + test: { + id: 'MjE2MeyIyIjoiMzEifQ2M0NW' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: null + }, + { + test: { + id: 'MWZiZeyIyIjoiMzEifQjhhYz' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:35.541Z' + }, + { + test: { + id: 'NmI4NeyIyIjoiMzEifQDU2OD' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:35.636Z' + }, + { + test: { + id: 'YmExNeyIyIjoiMzEifQWE5Nj' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:35.730Z' + }, + { + test: { + id: 'YzA3NeyIyIjoiMzEifQGZhYT' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:35.831Z' + }, + { + test: { + id: 'YmYxOeyIyIjoiMzEifQDAxY2' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:35.928Z' + }, + { + test: { + id: 'YzIwOeyIyIjoiMzEifQGE2Yz' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:36.034Z' + }, + { + test: { + id: 'YWMwNeyIyIjoiMzEifQDQ5MG' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:36.126Z' + }, + { + test: { + id: 'MjQyMeyIyIjoiMzEifQWExMm' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:36.210Z' + }, + { + test: { + id: 'NDFiYeyIyIjoiMzEifQzg4MD' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:36.332Z' + }, + { + test: { + id: 'M2RmNeyIyIjoiMzEifQzQ0MG' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:36.409Z' + }, + { + test: { + id: 'ODhlYeyIyIjoiMzEifQmVmMT' + }, + atVersion: { + id: '1', + name: '2021.2111.13' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:36.510Z' + } + ] + } + ] + } + }, + { + isRequired: false, + at: { + id: '1', + name: 'JAWS' + }, browser: { id: '1', name: 'Firefox' }, - issues: [], - draftTestPlanRuns: [ - { - tester: { - username: 'esmeralda-baggins' - }, - testPlanReport: { - id: '9' - }, - testResults: [ - { - test: { - id: 'MThhNeyIyIjoiMjYifQmEyMj' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:11.059Z' - }, - { - test: { - id: 'ODY5MeyIyIjoiMjYifQzhmNW' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:11.137Z' - }, - { - test: { - id: 'NWVkNeyIyIjoiMjYifQTZkOT' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:11.218Z' - } - ] - } - ] + minimumAtVersion: { + id: '1', + name: '2021.2111.13' + }, + exactAtVersion: null, + testPlanReport: null }, { - id: '3', - metrics: { - testsCount: 18, - supportLevel: 'FAILING', - conflictsCount: 0, - supportPercent: 88, - testsFailedCount: 16, - testsPassedCount: 2, - shouldFormatted: false, - mustFormatted: '14 of 16 passed', - shouldAssertionsCount: 0, - mustAssertionsCount: 16, - unexpectedBehaviorCount: 1, - unexpectedBehaviorsFormatted: '1 found', - shouldAssertionsFailedCount: 0, - shouldAssertionsPassedCount: 0, - mustAssertionsFailedCount: 2, - mustAssertionsPassedCount: 14 - }, - markedFinalAt: '2022-07-06T00:00:00.000Z', - isFinal: true, + isRequired: true, at: { - id: '1', - name: 'JAWS' + id: '2', + name: 'NVDA' }, browser: { id: '2', name: 'Chrome' }, - issues: [], - draftTestPlanRuns: [ - { - tester: { - username: 'esmeralda-baggins' - }, - testPlanReport: { - id: '3' - }, - testResults: [ - { - test: { - id: 'MThhNeyIyIjoiMjYifQmEyMj' - }, - atVersion: { - id: '1', - name: '2021.2111.13' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-18T03:17:09.074Z' + minimumAtVersion: { + id: '2', + name: '2020.4' + }, + exactAtVersion: null, + testPlanReport: { + id: '14', + metrics: { + testsCount: 16, + mayFormatted: false, + supportLevel: 'FULL', + commandsCount: 36, + mustFormatted: '128 of 128 passed', + conflictsCount: 0, + supportPercent: 100, + shouldFormatted: '36 of 36 passed', + testsFailedCount: 0, + testsPassedCount: 16, + mayAssertionsCount: 0, + mustAssertionsCount: 128, + assertionsFailedCount: 0, + assertionsPassedCount: 164, + shouldAssertionsCount: 36, + unexpectedBehaviorCount: 0, + mayAssertionsFailedCount: 0, + mayAssertionsPassedCount: 0, + mustAssertionsFailedCount: 0, + mustAssertionsPassedCount: 128, + shouldAssertionsFailedCount: 0, + shouldAssertionsPassedCount: 36, + unexpectedBehaviorsFormatted: false, + severeImpactFailedAssertionCount: 0, + severeImpactPassedAssertionCount: 36, + moderateImpactFailedAssertionCount: 0, + moderateImpactPassedAssertionCount: 36 + }, + isFinal: true, + markedFinalAt: '2022-07-07T00:00:00.000Z', + issues: [], + draftTestPlanRuns: [ + { + tester: { + username: 'esmeralda-baggins' }, - { - test: { - id: 'NWVkNeyIyIjoiMjYifQTZkOT' + testPlanReport: { + id: '14' + }, + testResults: [ + { + test: { + id: 'MTExZeyIyIjoiMzEifQWZhZG' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:55.237Z' }, - atVersion: { - id: '1', - name: '2021.2111.13' + { + test: { + id: 'MzJkZeyIyIjoiMzEifQTAzMm' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:55.347Z' }, - browserVersion: { - id: '2', - name: '99.0.4844.84' + { + test: { + id: 'NDBjMeyIyIjoiMzEifQjc1NT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:55.423Z' }, - completedAt: - '2023-08-18T03:17:09.134Z' - }, - { - test: { - id: 'NWM4NeyIyIjoiMjYifQDEwM2' + { + test: { + id: 'MjE2MeyIyIjoiMzEifQ2M0NW' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:55.518Z' }, - atVersion: { - id: '1', - name: '2021.2111.13' + { + test: { + id: 'MmZmNeyIyIjoiMzEifQ2IxOG' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:55.613Z' }, - browserVersion: { - id: '2', - name: '99.0.4844.84' + { + test: { + id: 'MWZiZeyIyIjoiMzEifQjhhYz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:55.721Z' }, - completedAt: - '2023-08-18T03:17:09.202Z' - }, - { - test: { - id: 'NGFiZeyIyIjoiMjYifQWZiYW' + { + test: { + id: 'NmI4NeyIyIjoiMzEifQDU2OD' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:55.838Z' }, - atVersion: { - id: '1', - name: '2021.2111.13' + { + test: { + id: 'YmExNeyIyIjoiMzEifQWE5Nj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:55.965Z' }, - browserVersion: { - id: '2', - name: '99.0.4844.84' + { + test: { + id: 'YzA3NeyIyIjoiMzEifQGZhYT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:56.079Z' }, - completedAt: - '2023-08-18T03:17:09.268Z' - }, - { - test: { - id: 'MzQzYeyIyIjoiMjYifQzU5Zm' - }, - atVersion: { - id: '1', - name: '2021.2111.13' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-18T03:17:09.336Z' - } - ] - } - ] - }, - { - id: '11', - metrics: { - testsCount: 11, - supportLevel: 'FULL', - conflictsCount: 0, - supportPercent: 100, - testsFailedCount: 9, - testsPassedCount: 2, - shouldFormatted: false, - mustFormatted: '14 of 14 passed', - shouldAssertionsCount: 0, - mustAssertionsCount: 14, - unexpectedBehaviorCount: 0, - unexpectedBehaviorsFormatted: false, - shouldAssertionsFailedCount: 0, - shouldAssertionsPassedCount: 0, - mustAssertionsFailedCount: 0, - mustAssertionsPassedCount: 14 - }, - markedFinalAt: null, - isFinal: false, - at: { - id: '3', - name: 'VoiceOver for macOS' - }, - browser: { - id: '2', - name: 'Chrome' - }, - issues: [], - draftTestPlanRuns: [ - { - tester: { - username: 'esmeralda-baggins' - }, - testPlanReport: { - id: '11' - }, - testResults: [ - { - test: { - id: 'MzlmYeyIyIjoiMjYifQzIxY2' + { + test: { + id: 'YmYxOeyIyIjoiMzEifQDAxY2' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:56.177Z' }, - atVersion: { - id: '3', - name: '11.6 (20G165)' + { + test: { + id: 'YzIwOeyIyIjoiMzEifQGE2Yz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:56.286Z' }, - browserVersion: { - id: '2', - name: '99.0.4844.84' + { + test: { + id: 'YWMwNeyIyIjoiMzEifQDQ5MG' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:56.389Z' }, - completedAt: - '2023-08-18T03:17:11.532Z' - }, - { - test: { - id: 'N2FkZeyIyIjoiMjYifQDQ5NT' + { + test: { + id: 'MjQyMeyIyIjoiMzEifQWExMm' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:56.509Z' }, - atVersion: { - id: '3', - name: '11.6 (20G165)' + { + test: { + id: 'NDFiYeyIyIjoiMzEifQzg4MD' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:56.639Z' }, - browserVersion: { - id: '2', - name: '99.0.4844.84' + { + test: { + id: 'M2RmNeyIyIjoiMzEifQzQ0MG' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:56.783Z' }, - completedAt: - '2023-08-18T03:17:11.611Z' - }, - { - test: { - id: 'ZDJkYeyIyIjoiMjYifQzRkYj' - }, - atVersion: { - id: '3', - name: '11.6 (20G165)' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-18T03:17:11.696Z' - } - ] - } - ] + { + test: { + id: 'ODhlYeyIyIjoiMzEifQmVmMT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '2', + name: '99.0.4844.84' + }, + completedAt: + '2024-04-25T16:44:56.935Z' + } + ] + } + ] + } }, { - id: '4', - metrics: { - testsCount: 18, - supportLevel: 'FAILING', - conflictsCount: 0, - supportPercent: 91, - testsFailedCount: 14, - testsPassedCount: 4, - shouldFormatted: false, - mustFormatted: '20 of 22 passed', - shouldAssertionsCount: 0, - mustAssertionsCount: 22, - unexpectedBehaviorCount: 1, - unexpectedBehaviorsFormatted: '1 found', - shouldAssertionsFailedCount: 0, - shouldAssertionsPassedCount: 0, - mustAssertionsFailedCount: 2, - mustAssertionsPassedCount: 20 - }, - markedFinalAt: '2022-07-06T00:00:00.000Z', - isFinal: true, + isRequired: false, at: { id: '2', name: 'NVDA' }, browser: { + id: '1', + name: 'Firefox' + }, + minimumAtVersion: { id: '2', - name: 'Chrome' + name: '2020.4' }, - issues: [], - draftTestPlanRuns: [ - { - tester: { - username: 'esmeralda-baggins' - }, - testPlanReport: { - id: '4' - }, - testResults: [ - { - test: { - id: 'MThhNeyIyIjoiMjYifQmEyMj' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-18T03:17:09.409Z' - }, - { - test: { - id: 'NWVkNeyIyIjoiMjYifQTZkOT' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-18T03:17:09.478Z' - }, - { - test: { - id: 'NWM4NeyIyIjoiMjYifQDEwM2' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-18T03:17:09.551Z' - }, - { - test: { - id: 'NGFiZeyIyIjoiMjYifQWZiYW' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-18T03:17:09.629Z' - }, - { - test: { - id: 'MzQzYeyIyIjoiMjYifQzU5Zm' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-18T03:17:09.704Z' - }, - { - test: { - id: 'MmI1MeyIyIjoiMjYifQmU3Yz' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-18T03:17:09.777Z' - }, - { - test: { - id: 'YmRmYeyIyIjoiMjYifQjEyMT' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-18T03:17:09.852Z' - } - ] - } - ] + exactAtVersion: null, + testPlanReport: null }, { - id: '5', - metrics: { - testsCount: 11, - supportLevel: 'FAILING', - conflictsCount: 0, - supportPercent: 92, - testsFailedCount: 8, - testsPassedCount: 3, - shouldFormatted: false, - mustFormatted: '23 of 25 passed', - shouldAssertionsCount: 0, - mustAssertionsCount: 25, - unexpectedBehaviorCount: 1, - unexpectedBehaviorsFormatted: '1 found', - shouldAssertionsFailedCount: 0, - shouldAssertionsPassedCount: 0, - mustAssertionsFailedCount: 2, - mustAssertionsPassedCount: 23 - }, - markedFinalAt: '2022-07-06T00:00:00.000Z', - isFinal: true, + isRequired: true, at: { id: '3', name: 'VoiceOver for macOS' @@ -3789,391 +6963,214 @@ export default ( id: '3', name: 'Safari' }, - issues: [], - draftTestPlanRuns: [ - { - tester: { - username: 'esmeralda-baggins' - }, - testPlanReport: { - id: '5' - }, - testResults: [ - { - test: { - id: 'MzlmYeyIyIjoiMjYifQzIxY2' - }, - atVersion: { - id: '3', - name: '11.6 (20G165)' - }, - browserVersion: { - id: '3', - name: '14.1.2' - }, - completedAt: - '2023-08-18T03:17:09.923Z' + minimumAtVersion: { + id: '3', + name: '11.6 (20G165)' + }, + exactAtVersion: null, + testPlanReport: { + id: '15', + metrics: { + testsCount: 8, + mayFormatted: false, + supportLevel: 'FULL', + commandsCount: 22, + mustFormatted: '76 of 76 passed', + conflictsCount: 0, + supportPercent: 100, + shouldFormatted: '22 of 22 passed', + testsFailedCount: 0, + testsPassedCount: 8, + mayAssertionsCount: 0, + mustAssertionsCount: 76, + assertionsFailedCount: 0, + assertionsPassedCount: 98, + shouldAssertionsCount: 22, + unexpectedBehaviorCount: 0, + mayAssertionsFailedCount: 0, + mayAssertionsPassedCount: 0, + mustAssertionsFailedCount: 0, + mustAssertionsPassedCount: 76, + shouldAssertionsFailedCount: 0, + shouldAssertionsPassedCount: 22, + unexpectedBehaviorsFormatted: false, + severeImpactFailedAssertionCount: 0, + severeImpactPassedAssertionCount: 22, + moderateImpactFailedAssertionCount: 0, + moderateImpactPassedAssertionCount: 22 + }, + isFinal: true, + markedFinalAt: '2022-07-07T00:00:00.000Z', + issues: [], + draftTestPlanRuns: [ + { + tester: { + username: 'esmeralda-baggins' }, - { - test: { - id: 'ZDJkYeyIyIjoiMjYifQzRkYj' - }, - atVersion: { - id: '3', - name: '11.6 (20G165)' - }, - browserVersion: { - id: '3', - name: '14.1.2' - }, - completedAt: - '2023-08-18T03:17:09.991Z' + testPlanReport: { + id: '15' }, - { - test: { - id: 'ZmQyNeyIyIjoiMjYifQ2M2ND' - }, - atVersion: { - id: '3', - name: '11.6 (20G165)' - }, - browserVersion: { - id: '3', - name: '14.1.2' + testResults: [ + { + test: { + id: 'NWUyZeyIyIjoiMzEifQDVkND' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:57.086Z' }, - completedAt: - '2023-08-18T03:17:10.059Z' - }, - { - test: { - id: 'OGE3YeyIyIjoiMjYifQjU1ND' + { + test: { + id: 'N2I0YeyIyIjoiMzEifQjEwYj' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:57.206Z' }, - atVersion: { - id: '3', - name: '11.6 (20G165)' + { + test: { + id: 'NmZjOeyIyIjoiMzEifQGY5ZT' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:57.334Z' }, - browserVersion: { - id: '3', - name: '14.1.2' + { + test: { + id: 'YmU1MeyIyIjoiMzEifQzBiYj' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:57.464Z' }, - completedAt: - '2023-08-18T03:17:10.129Z' - }, - { - test: { - id: 'YWI3OeyIyIjoiMjYifQWJlNW' + { + test: { + id: 'MGQyYeyIyIjoiMzEifQzcxZm' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:57.599Z' }, - atVersion: { - id: '3', - name: '11.6 (20G165)' + { + test: { + id: 'ZmI0YeyIyIjoiMzEifQTU2Nz' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:57.734Z' }, - browserVersion: { - id: '3', - name: '14.1.2' + { + test: { + id: 'YmRjZeyIyIjoiMzEifQGQyND' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:57.880Z' }, - completedAt: - '2023-08-18T03:17:10.198Z' - }, - { - test: { - id: 'M2RiOeyIyIjoiMjYifQGY1Nj' - }, - atVersion: { - id: '3', - name: '11.6 (20G165)' - }, - browserVersion: { - id: '3', - name: '14.1.2' - }, - completedAt: - '2023-08-18T03:17:10.272Z' - } - ] - } - ] + { + test: { + id: 'YWFmMeyIyIjoiMzEifQzMwMT' + }, + atVersion: { + id: '3', + name: '11.6 (20G165)' + }, + browserVersion: { + id: '3', + name: '14.1.2' + }, + completedAt: + '2024-04-25T16:44:58.035Z' + } + ] + } + ] + } }, { - id: '8', - metrics: { - testsCount: 18, - supportLevel: 'FULL', - conflictsCount: 0, - supportPercent: 100, - testsFailedCount: 16, - testsPassedCount: 2, - shouldFormatted: false, - mustFormatted: '16 of 16 passed', - shouldAssertionsCount: 0, - mustAssertionsCount: 16, - unexpectedBehaviorCount: 0, - unexpectedBehaviorsFormatted: false, - shouldAssertionsFailedCount: 0, - shouldAssertionsPassedCount: 0, - mustAssertionsFailedCount: 0, - mustAssertionsPassedCount: 16 - }, - markedFinalAt: null, - isFinal: false, + isRequired: false, at: { - id: '1', - name: 'JAWS' + id: '3', + name: 'VoiceOver for macOS' }, browser: { - id: '1', - name: 'Firefox' + id: '2', + name: 'Chrome' }, - issues: [], - draftTestPlanRuns: [ - { - tester: { - username: 'esmeralda-baggins' - }, - testPlanReport: { - id: '8' - }, - testResults: [ - { - test: { - id: 'MThhNeyIyIjoiMjYifQmEyMj' - }, - atVersion: { - id: '1', - name: '2021.2111.13' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:10.817Z' - }, - { - test: { - id: 'ODY5MeyIyIjoiMjYifQzhmNW' - }, - atVersion: { - id: '1', - name: '2021.2111.13' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:10.894Z' - }, - { - test: { - id: 'NWVkNeyIyIjoiMjYifQTZkOT' - }, - atVersion: { - id: '1', - name: '2021.2111.13' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: - '2023-08-18T03:17:10.979Z' - } - ] - } - ] - } - ], - metadata: {} - } - } - } - }, - { - request: { - query: testPlanReportStatusDialogQuery, - variables: { testPlanVersionId: '34' } - }, - result: { - data: { - testPlanVersion: { - id: '34', - title: 'Toggle Button', - phase: 'DRAFT', - gitSha: '022340081280b8cafb8ae0716a5b67e9ab942ef4', - gitMessage: - 'Delete duplicated assertion for operating a not pressed togle button (VoiceOver) (#716)', - updatedAt: '2022-05-18T20:51:40.000Z', - draftPhaseReachedAt: '2022-07-06T00:00:00.000Z', - candidatePhaseReachedAt: null, - recommendedPhaseTargetDate: null, - recommendedPhaseReachedAt: null, - testPlan: { - directory: 'toggle-button' - }, - testPlanReports: [ - { - id: '1', - metrics: { - testsCount: 16, - supportLevel: 'FAILING', - conflictsCount: 0, - supportPercent: 93, - testsFailedCount: 14, - testsPassedCount: 2, - shouldFormatted: false, - mustFormatted: '28 of 30 passed', - shouldAssertionsCount: 0, - mustAssertionsCount: 30, - unexpectedBehaviorCount: 1, - unexpectedBehaviorsFormatted: '1 found', - shouldAssertionsFailedCount: 0, - shouldAssertionsPassedCount: 0, - mustAssertionsFailedCount: 2, - mustAssertionsPassedCount: 28 + minimumAtVersion: { + id: '3', + name: '11.6 (20G165)' }, - markedFinalAt: null, - isFinal: false, + exactAtVersion: null, + testPlanReport: null + }, + { + isRequired: false, at: { - id: '1', - name: 'JAWS' + id: '3', + name: 'VoiceOver for macOS' }, browser: { - id: '2', - name: 'Chrome' + id: '1', + name: 'Firefox' }, - issues: [], - draftTestPlanRuns: [ - { - tester: { - username: 'esmeralda-baggins' - }, - testPlanReport: { - id: '1' - }, - testResults: [ - { - test: { - id: 'OWY5NeyIyIjoiMzQifQTRmOD' - }, - atVersion: { - id: '1', - name: '2021.2111.13' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-18T03:17:07.154Z' - }, - { - test: { - id: 'NGFjMeyIyIjoiMzQifQjQxY2' - }, - atVersion: { - id: '1', - name: '2021.2111.13' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: null - }, - { - test: { - id: 'NTAwOeyIyIjoiMzQifQWI5YT' - }, - atVersion: { - id: '1', - name: '2021.2111.13' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: null - }, - { - test: { - id: 'YThjMeyIyIjoiMzQifQzIyYT' - }, - atVersion: { - id: '1', - name: '2021.2111.13' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: null - }, - { - test: { - id: 'YTgxMeyIyIjoiMzQifQzExOW' - }, - atVersion: { - id: '1', - name: '2021.2111.13' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-18T03:17:07.381Z' - }, - { - test: { - id: 'NGMwNeyIyIjoiMzQifQ2IwN2' - }, - atVersion: { - id: '1', - name: '2021.2111.13' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-18T03:17:07.464Z' - }, - { - test: { - id: 'YzQxNeyIyIjoiMzQifQjY5ND' - }, - atVersion: { - id: '1', - name: '2021.2111.13' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-18T03:17:07.537Z' - }, - { - test: { - id: 'MjgwNeyIyIjoiMzQifQzk3YT' - }, - atVersion: { - id: '1', - name: '2021.2111.13' - }, - browserVersion: { - id: '2', - name: '99.0.4844.84' - }, - completedAt: - '2023-08-18T03:17:07.610Z' - } - ] - } - ] + minimumAtVersion: { + id: '3', + name: '11.6 (20G165)' + }, + exactAtVersion: null, + testPlanReport: null } - ], - metadata: {} + ] } } } diff --git a/client/tests/__mocks__/GraphQLMocks/TestPlanReportStatusDialogMock.js b/client/tests/__mocks__/GraphQLMocks/TestPlanReportStatusDialogMock.js index 3dee6df1b..84faac768 100644 --- a/client/tests/__mocks__/GraphQLMocks/TestPlanReportStatusDialogMock.js +++ b/client/tests/__mocks__/GraphQLMocks/TestPlanReportStatusDialogMock.js @@ -12,28 +12,60 @@ export const mockedTestPlanVersion = { testPlan: { directory: 'combobox-select-only' }, - testPlanReports: [ + testPlanReportStatuses: [ { - id: '2', - metrics: { - testsCount: 21, - supportLevel: 'FAILING', - conflictsCount: 5, - supportPercent: 96, - testsFailedCount: 16, - testsPassedCount: 5, - shouldFormatted: '3 of 3 passed', - mustFormatted: '48 of 50 passed', - shouldAssertionsCount: 3, - mustAssertionsCount: 50, - unexpectedBehaviorCount: 3, - unexpectedBehaviorsFormatted: '3 found', - shouldAssertionsFailedCount: 0, - shouldAssertionsPassedCount: 3, - mustAssertionsFailedCount: 2, - mustAssertionsPassedCount: 48 + isRequired: true, + at: { + id: '1', + name: 'JAWS' + }, + browser: { + id: '2', + name: 'Chrome' + }, + minimumAtVersion: { + id: '1', + name: '2021.2111.13' }, - markedFinalAt: null, + exactAtVersion: null, + testPlanReport: null + }, + { + isRequired: false, + at: { + id: '1', + name: 'JAWS' + }, + browser: { + id: '1', + name: 'Firefox' + }, + minimumAtVersion: { + id: '1', + name: '2021.2111.13' + }, + exactAtVersion: null, + testPlanReport: null + }, + { + isRequired: true, + at: { + id: '2', + name: 'NVDA' + }, + browser: { + id: '2', + name: 'Chrome' + }, + minimumAtVersion: { + id: '2', + name: '2020.4' + }, + exactAtVersion: null, + testPlanReport: null + }, + { + isRequired: false, at: { id: '2', name: 'NVDA' @@ -42,239 +74,657 @@ export const mockedTestPlanVersion = { id: '1', name: 'Firefox' }, - issues: [], - draftTestPlanRuns: [ - { - tester: { - username: 'tom-proudfeet' - }, - testPlanReport: { - id: '2' - }, - testResults: [ - { - test: { - id: 'Nzg5NeyIyIjoiNyJ9zNjZj' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: '2023-08-18T03:17:08.240Z' - }, - { - test: { - id: 'MmY0YeyIyIjoiNyJ9jRkZD' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: '2023-08-18T03:17:08.332Z' + minimumAtVersion: { + id: '2', + name: '2020.4' + }, + exactAtVersion: null, + testPlanReport: { + id: '2', + metrics: { + testsCount: 21, + mayFormatted: false, + supportLevel: 'FAILING', + commandsCount: 24, + mustFormatted: '118 of 122 passed', + conflictsCount: 3, + supportPercent: 97, + shouldFormatted: '34 of 36 passed', + testsFailedCount: 6, + testsPassedCount: 15, + mayAssertionsCount: 0, + mustAssertionsCount: 122, + assertionsFailedCount: 6, + assertionsPassedCount: 152, + shouldAssertionsCount: 36, + unexpectedBehaviorCount: 3, + mayAssertionsFailedCount: 0, + mayAssertionsPassedCount: 0, + mustAssertionsFailedCount: 4, + mustAssertionsPassedCount: 118, + shouldAssertionsFailedCount: 2, + shouldAssertionsPassedCount: 34, + unexpectedBehaviorsFormatted: '3 found', + severeImpactFailedAssertionCount: 1, + severeImpactPassedAssertionCount: 23, + moderateImpactFailedAssertionCount: 2, + moderateImpactPassedAssertionCount: 22 + }, + isFinal: false, + markedFinalAt: null, + issues: [ + { + link: 'https://github.com/bocoup/aria-at/issues/128#issue-2157878584', + isOpen: true, + feedbackType: 'FEEDBACK' + } + ], + draftTestPlanRuns: [ + { + tester: { + username: 'tom-proudfeet' }, - { - test: { - id: 'ZjUwNeyIyIjoiNyJ9mE2ZT' - }, - atVersion: { - id: '2', - name: '2020.4' - }, - browserVersion: { - id: '1', - name: '99.0.1' - }, - completedAt: '2023-08-18T03:17:08.412Z' + testPlanReport: { + id: '2' }, - { - test: { - id: 'MDNiMeyIyIjoiNyJ9Dk1MT' + testResults: [ + { + test: { + id: 'Nzg5NeyIyIjoiNyJ9zNjZj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:38.949Z' }, - atVersion: { - id: '2', - name: '2020.4' + { + test: { + id: 'MmY0YeyIyIjoiNyJ9jRkZD' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:39.070Z' }, - browserVersion: { - id: '1', - name: '99.0.1' + { + test: { + id: 'ZjUwNeyIyIjoiNyJ9mE2ZT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:39.180Z' }, - completedAt: '2023-08-18T03:17:08.501Z' - }, - { - test: { - id: 'MjRmNeyIyIjoiNyJ92MyMT' + { + test: { + id: 'MDNiMeyIyIjoiNyJ9Dk1MT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:39.292Z' }, - atVersion: { - id: '2', - name: '2020.4' + { + test: { + id: 'MjRmNeyIyIjoiNyJ92MyMT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:39.406Z' }, - browserVersion: { - id: '1', - name: '99.0.1' + { + test: { + id: 'ZmVlMeyIyIjoiNyJ9mUyYj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: null }, - completedAt: '2023-08-18T03:17:08.593Z' - }, - { - test: { - id: 'ZmVlMeyIyIjoiNyJ9mUyYj' + { + test: { + id: 'YWFiNeyIyIjoiNyJ9zE2Zj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:39.640Z' }, - atVersion: { - id: '2', - name: '2020.4' + { + test: { + id: 'YjZkYeyIyIjoiNyJ9WIxZm' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:39.761Z' }, - browserVersion: { - id: '1', - name: '99.0.1' + { + test: { + id: 'ZmIzMeyIyIjoiNyJ9TQ1NW' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:39.888Z' }, - completedAt: null - }, - { - test: { - id: 'YWFiNeyIyIjoiNyJ9zE2Zj' + { + test: { + id: 'MmZkNeyIyIjoiNyJ9zIwN2' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:40.006Z' }, - atVersion: { - id: '2', - name: '2020.4' + { + test: { + id: 'ZmQwOeyIyIjoiNyJ9DEzYz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:40.122Z' }, - browserVersion: { - id: '1', - name: '99.0.1' + { + test: { + id: 'MGViNeyIyIjoiNyJ9GQ3MT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:40.234Z' }, - completedAt: '2023-08-18T03:17:08.811Z' - }, - { - test: { - id: 'YjZkYeyIyIjoiNyJ9WIxZm' + { + test: { + id: 'YTg5MeyIyIjoiNyJ9WEzOT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:40.355Z' }, - atVersion: { - id: '2', - name: '2020.4' + { + test: { + id: 'NTRjMeyIyIjoiNyJ9zQ0OD' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:40.467Z' }, - browserVersion: { - id: '1', - name: '99.0.1' + { + test: { + id: 'MjRlZeyIyIjoiNyJ9DcyY2' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:40.588Z' }, - completedAt: '2023-08-18T03:17:08.902Z' - }, - { - test: { - id: 'ZmIzMeyIyIjoiNyJ9TQ1NW' + { + test: { + id: 'YWQzNeyIyIjoiNyJ9mE2Nm' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:40.712Z' }, - atVersion: { - id: '2', - name: '2020.4' + { + test: { + id: 'OTYxOeyIyIjoiNyJ9TdmYj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:40.826Z' }, - browserVersion: { - id: '1', - name: '99.0.1' + { + test: { + id: 'MjgzNeyIyIjoiNyJ9TZjNz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:40.948Z' }, - completedAt: '2023-08-18T03:17:08.996Z' - } - ] - }, - { - tester: { - username: 'esmeralda-baggins' - }, - testPlanReport: { - id: '2' + { + test: { + id: 'NWNiZeyIyIjoiNyJ9jI2MD' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:41.075Z' + } + ] }, - testResults: [ - { - test: { - id: 'Nzg5NeyIyIjoiNyJ9zNjZj' + { + tester: { + username: 'esmeralda-baggins' + }, + testPlanReport: { + id: '2' + }, + testResults: [ + { + test: { + id: 'Nzg5NeyIyIjoiNyJ9zNjZj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:36.666Z' }, - atVersion: { - id: '2', - name: '2020.4' + { + test: { + id: 'MmY0YeyIyIjoiNyJ9jRkZD' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:36.793Z' }, - browserVersion: { - id: '1', - name: '99.0.1' + { + test: { + id: 'ZjUwNeyIyIjoiNyJ9mE2ZT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:36.914Z' }, - completedAt: '2023-08-18T03:17:07.718Z' - }, - { - test: { - id: 'MmY0YeyIyIjoiNyJ9jRkZD' + { + test: { + id: 'MDNiMeyIyIjoiNyJ9Dk1MT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:37.031Z' }, - atVersion: { - id: '2', - name: '2020.4' + { + test: { + id: 'MjRmNeyIyIjoiNyJ92MyMT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:37.150Z' }, - browserVersion: { - id: '1', - name: '99.0.1' + { + test: { + id: 'ZmVlMeyIyIjoiNyJ9mUyYj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: null }, - completedAt: '2023-08-18T03:17:07.813Z' - }, - { - test: { - id: 'ZjUwNeyIyIjoiNyJ9mE2ZT' + { + test: { + id: 'YWFiNeyIyIjoiNyJ9zE2Zj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:37.384Z' }, - atVersion: { - id: '2', - name: '2020.4' + { + test: { + id: 'YjZkYeyIyIjoiNyJ9WIxZm' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:37.512Z' }, - browserVersion: { - id: '1', - name: '99.0.1' + { + test: { + id: 'ZmIzMeyIyIjoiNyJ9TQ1NW' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:37.638Z' }, - completedAt: '2023-08-18T03:17:07.914Z' - }, - { - test: { - id: 'MDNiMeyIyIjoiNyJ9Dk1MT' + { + test: { + id: 'MmZkNeyIyIjoiNyJ9zIwN2' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:37.760Z' }, - atVersion: { - id: '2', - name: '2020.4' + { + test: { + id: 'ZmQwOeyIyIjoiNyJ9DEzYz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:37.883Z' }, - browserVersion: { - id: '1', - name: '99.0.1' + { + test: { + id: 'MGViNeyIyIjoiNyJ9GQ3MT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:38.014Z' }, - completedAt: '2023-08-18T03:17:07.988Z' - }, - { - test: { - id: 'MjRmNeyIyIjoiNyJ92MyMT' + { + test: { + id: 'YTg5MeyIyIjoiNyJ9WEzOT' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:38.145Z' }, - atVersion: { - id: '2', - name: '2020.4' + { + test: { + id: 'NTRjMeyIyIjoiNyJ9zQ0OD' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:38.268Z' }, - browserVersion: { - id: '1', - name: '99.0.1' + { + test: { + id: 'MjRlZeyIyIjoiNyJ9DcyY2' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:38.382Z' }, - completedAt: '2023-08-18T03:17:08.074Z' - }, - { - test: { - id: 'ZmVlMeyIyIjoiNyJ9mUyYj' + { + test: { + id: 'YWQzNeyIyIjoiNyJ9mE2Nm' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:38.481Z' }, - atVersion: { - id: '2', - name: '2020.4' + { + test: { + id: 'OTYxOeyIyIjoiNyJ9TdmYj' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:38.596Z' }, - browserVersion: { - id: '1', - name: '99.0.1' + { + test: { + id: 'MjgzNeyIyIjoiNyJ9TZjNz' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:38.701Z' }, - completedAt: null - } - ] - } - ] + { + test: { + id: 'NWNiZeyIyIjoiNyJ9jI2MD' + }, + atVersion: { + id: '2', + name: '2020.4' + }, + browserVersion: { + id: '1', + name: '99.0.1' + }, + completedAt: '2024-04-25T16:44:38.811Z' + } + ] + } + ] + } + }, + { + isRequired: true, + at: { + id: '3', + name: 'VoiceOver for macOS' + }, + browser: { + id: '3', + name: 'Safari' + }, + minimumAtVersion: { + id: '3', + name: '11.6 (20G165)' + }, + exactAtVersion: null, + testPlanReport: null + }, + { + isRequired: false, + at: { + id: '3', + name: 'VoiceOver for macOS' + }, + browser: { + id: '2', + name: 'Chrome' + }, + minimumAtVersion: { + id: '3', + name: '11.6 (20G165)' + }, + exactAtVersion: null, + testPlanReport: null + }, + { + isRequired: false, + at: { + id: '3', + name: 'VoiceOver for macOS' + }, + browser: { + id: '1', + name: 'Firefox' + }, + minimumAtVersion: { + id: '3', + name: '11.6 (20G165)' + }, + exactAtVersion: null, + testPlanReport: null } ] }; @@ -305,82 +755,7 @@ export default ( }, result: { data: { - testPlanVersion: mockedTestPlanVersion, - ats: [ - { - id: '1', - name: 'JAWS', - atVersions: [ - { - id: '1', - name: '2021.2111.13', - releasedAt: '2021-11-01T04:00:00.000Z' - } - ], - browsers: [ - { - id: '2', - name: 'Chrome' - }, - { - id: '1', - name: 'Firefox' - } - ], - candidateBrowsers: [{ id: '2' }], - recommendedBrowsers: [{ id: '1' }, { id: '2' }] - }, - { - id: '2', - name: 'NVDA', - atVersions: [ - { - id: '2', - name: '2020.4', - releasedAt: '2021-02-19T05:00:00.000Z' - } - ], - browsers: [ - { - id: '2', - name: 'Chrome' - }, - { - id: '1', - name: 'Firefox' - } - ], - candidateBrowsers: [{ id: '2' }], - recommendedBrowsers: [{ id: '1' }, { id: '2' }] - }, - { - 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' - } - ], - candidateBrowsers: [{ id: '3' }], - recommendedBrowsers: [{ id: '2' }, { id: '3' }] - } - ] + testPlanVersion: mockedTestPlanVersion } } }, diff --git a/server/graphql-schema.js b/server/graphql-schema.js index 27004b5eb..9e3309e26 100644 --- a/server/graphql-schema.js +++ b/server/graphql-schema.js @@ -334,11 +334,11 @@ const graphqlSchema = gql` version was imported from the ARIA-AT repo. Used to version the test plan over time. """ - gitSha: String! # TODO: remove if using version labels + gitSha: String! """ Git commit message corresponding to the git sha's commit. """ - gitMessage: String! # TODO: remove if using version labels + gitMessage: String! """ The date (originating in Git) corresponding to the Git sha's commit. This can also be considered as the time for when R & D was complete @@ -367,8 +367,7 @@ const graphqlSchema = gql` """ tests: [Test]! """ - The TestPlanReports attached to the TestPlanVersion. There will always - be a unique combination of AT + Browser + TestPlanVersion. + The TestPlanReports attached to the TestPlanVersion. isFinal is used to check if a TestPlanReport has been "Marked as Final", indicated by TestPlanReport.markedFinalAt existence. @@ -378,6 +377,10 @@ const graphqlSchema = gql` """ testPlanReports(isFinal: Boolean): [TestPlanReport]! """ + A list of existing or missing TestPlanReports that may be collected. + """ + testPlanReportStatuses: [TestPlanReportStatus]! + """ For each report under this TestPlanVersion, if the report's combination is indicated as required and the report is marked as final at the time the TestPlanVersion is updated to RECOMMENDED then by checking the @@ -402,6 +405,50 @@ const graphqlSchema = gql` earliestAtVersion(atId: ID!): AtVersion } + """ + An existing or missing TestPlanReport that can be collected for a given + TestPlanVersion. + """ + type TestPlanReportStatus { + """ + Whether the TestPlanReport is actually required during the given + TestPlanVersion phase. + """ + isRequired: Boolean! + """ + The report's AT, which will be populated even if the TestPlanReport is + missing. + """ + at: At! + """ + The version of the AT that should be used for the report will be + specified either as an exactAtVersion or minimumAtVersion and will be + populated even if the TestPlanReport is missing. + + During the TestPlanVersion's draft and candidate phases, the looser + requirement of minimumAtVersion will be used to reduce the amount of + data collected before consensus is achieved. + + During the recommended phase all reports will be associated with an + exactAtVersion, enabling large-scale data collection for all versions + of the AT as they are released. + """ + exactAtVersion: AtVersion + """ + See exactAtVersion for more information. + """ + minimumAtVersion: AtVersion + """ + The report's browser, which will be populated even if the + TestPlanReport is missing. + """ + browser: Browser! + """ + The TestPlanReport, which may not currently exist. + """ + testPlanReport: TestPlanReport + } + """ A parsed version of an ARIA-AT test, which, although it may produce multiple executable artifacts (i.e. the scenarios), originated from a single row in @@ -961,6 +1008,14 @@ const graphqlSchema = gql` """ at: At! """ + Either a minimumAtVersion or exactAtVersion will be available. The minimumAtVersion, when defined, is the oldest version of the AT that testers are allowed to use when collecting results. + """ + minimumAtVersion: AtVersion + """ + Either a minimumAtVersion or exactAtVersion will be available. The exactAtVersion, when defined, is the only version of the AT that testers are allowed to use when collecting results. Note that when a TestPlanVersion reaches the recommended stage, all its reports will automatically switch from having a minimumAtVersion to an exactAtVersion. See the earliestAtVersion field of TestPlanVersion for more information. + """ + exactAtVersion: AtVersion + """ The unique AT Versions used when collecting results for this report. """ atVersions: [AtVersion]! diff --git a/server/models/services/TestResultReadService.js b/server/models/services/TestResultReadService.js index 96fefb1b0..a834136f9 100644 --- a/server/models/services/TestResultReadService.js +++ b/server/models/services/TestResultReadService.js @@ -18,7 +18,7 @@ const getTestResults = async ({ testPlanRun, context }) => { const { atLoader, browserLoader, transaction } = context; const { testPlanReport } = testPlanRun; - const tests = getTests(testPlanReport); + const tests = getTests(testPlanRun); const ats = await atLoader.getAll({ transaction }); const browsers = await browserLoader.getAll({ transaction }); diff --git a/server/models/services/TestsService.js b/server/models/services/TestsService.js index 03fa55187..58e839357 100644 --- a/server/models/services/TestsService.js +++ b/server/models/services/TestsService.js @@ -5,12 +5,20 @@ const { } = require('../../resolvers/helpers/retrieveCommands'); const getTests = parentRecord => { - const isTestPlanVersion = !!parentRecord.tests; - const testPlanReport = isTestPlanVersion ? null : parentRecord; - const testPlanVersion = isTestPlanVersion - ? parentRecord - : testPlanReport.testPlanVersion; + let testPlanVersion; + let testPlanReport; + if (parentRecord.tests) { + testPlanVersion = parentRecord; + } else if (parentRecord.testPlanRuns) { + testPlanReport = parentRecord; + testPlanVersion = parentRecord.testPlanVersion; + } else if (parentRecord.testResults) { + testPlanReport = parentRecord.testPlanReport; + testPlanVersion = parentRecord.testPlanReport.testPlanVersion; + } + const inferredAtId = testPlanReport?.atId; + const isV2 = testPlanVersion.metadata?.testFormatVersion === 2; // Populate nested At and Command fields diff --git a/server/resolvers/TestPlanReport/browserResolver.js b/server/resolvers/TestPlanReport/browserResolver.js index b5c28a009..ce0192288 100644 --- a/server/resolvers/TestPlanReport/browserResolver.js +++ b/server/resolvers/TestPlanReport/browserResolver.js @@ -3,7 +3,7 @@ const browserResolver = async (testPlanReport, _, context) => { const browsers = await browserLoader.getAll({ transaction }); - return browsers.find(browser => browser.id === testPlanReport.browser.id); + return browsers.find(browser => browser.id === testPlanReport.browserId); }; module.exports = browserResolver; diff --git a/server/resolvers/TestPlanReport/exactAtVersionResolver.js b/server/resolvers/TestPlanReport/exactAtVersionResolver.js new file mode 100644 index 000000000..a3e156abf --- /dev/null +++ b/server/resolvers/TestPlanReport/exactAtVersionResolver.js @@ -0,0 +1,17 @@ +const exactAtVersionResolver = async (testPlanReport, _, context) => { + if (!testPlanReport.exactAtVersionId) return null; + + const { transaction, atLoader } = context; + + const ats = await atLoader.getAll({ transaction }); + + const at = ats.find(at => at.id === testPlanReport.atId); + + const atVersion = at.atVersions.find( + atVersion => atVersion.id === testPlanReport.exactAtVersionId + ); + + return atVersion; +}; + +module.exports = exactAtVersionResolver; diff --git a/server/resolvers/TestPlanReport/index.js b/server/resolvers/TestPlanReport/index.js index 7f714a3bf..07f392249 100644 --- a/server/resolvers/TestPlanReport/index.js +++ b/server/resolvers/TestPlanReport/index.js @@ -10,6 +10,8 @@ const at = require('./atResolver'); const browser = require('./browserResolver'); const latestAtVersionReleasedAt = require('./latestAtVersionReleasedAtResolver'); const isFinal = require('./isFinalResolver'); +const exactAtVersion = require('./exactAtVersionResolver'); +const minimumAtVersion = require('./minimumAtVersionResolver'); module.exports = { runnableTests, @@ -21,6 +23,8 @@ module.exports = { issues, atVersions, at, + exactAtVersion, + minimumAtVersion, browser, latestAtVersionReleasedAt, isFinal diff --git a/server/resolvers/TestPlanReport/minimumAtVersionResolver.js b/server/resolvers/TestPlanReport/minimumAtVersionResolver.js new file mode 100644 index 000000000..c8fe6a317 --- /dev/null +++ b/server/resolvers/TestPlanReport/minimumAtVersionResolver.js @@ -0,0 +1,17 @@ +const minimumAtVersionResolver = async (testPlanReport, _, context) => { + if (!testPlanReport.minimumAtVersionId) return null; + + const { transaction, atLoader } = context; + + const ats = await atLoader.getAll({ transaction }); + + const at = ats.find(at => at.id === testPlanReport.atId); + + const atVersion = at.atVersions.find( + atVersion => atVersion.id === testPlanReport.minimumAtVersionId + ); + + return atVersion; +}; + +module.exports = minimumAtVersionResolver; diff --git a/server/resolvers/TestPlanVersion/index.js b/server/resolvers/TestPlanVersion/index.js index 6a94ec000..6aa63ff2f 100644 --- a/server/resolvers/TestPlanVersion/index.js +++ b/server/resolvers/TestPlanVersion/index.js @@ -3,6 +3,7 @@ const gitMessage = require('./gitMessageResolver'); const tests = require('./testsResolver'); const testPlanReports = require('./testPlanReportsResolver'); const recommendedPhaseTargetDate = require('./recommendedPhaseTargetDateResolver'); +const testPlanReportStatuses = require('./testPlanReportStatusesResolver'); const earliestAtVersion = require('./earliestAtVersionResolver'); const TestPlanVersion = { @@ -11,6 +12,7 @@ const TestPlanVersion = { tests, testPlanReports, recommendedPhaseTargetDate, + testPlanReportStatuses, earliestAtVersion }; diff --git a/server/resolvers/TestPlanVersion/testPlanReportStatusesResolver.js b/server/resolvers/TestPlanVersion/testPlanReportStatusesResolver.js new file mode 100644 index 000000000..5fd8db1c0 --- /dev/null +++ b/server/resolvers/TestPlanVersion/testPlanReportStatusesResolver.js @@ -0,0 +1,179 @@ +const atResolver = require('../TestPlanReport/atResolver'); +const browserResolver = require('../TestPlanReport/browserResolver'); +const exactAtVersionResolver = require('../TestPlanReport/exactAtVersionResolver'); +const minimumAtVersionResolver = require('../TestPlanReport/minimumAtVersionResolver'); + +const testPlanReportStatusesResolver = async (testPlanVersion, _, context) => { + const { transaction, atLoader } = context; + + const ats = await atLoader.getAll({ transaction }); + + const { testPlanReports, phase } = testPlanVersion; + + const indexedTestPlanReports = await indexTestPlanReports( + testPlanReports ?? [], + context + ); + + const populateTestPlanVersion = testPlanReport => { + return { ...testPlanReport, testPlanVersion }; + }; + + const unsortedStatuses = []; + + ats.forEach(at => { + at.browsers.forEach(browser => { + let isRequiredAtBrowser = false; + if (phase === 'DRAFT' || phase === 'CANDIDATE') { + isRequiredAtBrowser = at.candidateBrowsers.some( + candidateBrowser => candidateBrowser.id === browser.id + ); + } else if (phase === 'RECOMMENDED') { + isRequiredAtBrowser = at.recommendedBrowsers.some( + recommendedBrowser => recommendedBrowser.id === browser.id + ); + } + + const hasNoReports = + Object.keys(indexedTestPlanReports?.[at.id]?.[browser.id] ?? {}) + .length === 0; + + if (hasNoReports) { + const earliestAtVersion = at.atVersions[0]; + + unsortedStatuses.push({ + isRequired: isRequiredAtBrowser, + at, + browser, + minimumAtVersion: earliestAtVersion, + exactAtVersion: null, + testPlanReport: null + }); + + return; + } + + let isFirstAtBrowserInstance = true; + let firstTestPlanReportFound = false; + let minimumAtVersionFound = false; + + const atVersions = at.atVersions.sort((a, b) => { + return new Date(a.releasedAt) - new Date(b.releasedAt); + }); + + atVersions.forEach(atVersion => { + const testPlanReports = + indexedTestPlanReports?.[at.id]?.[browser.id]?.[ + atVersion.id + ] ?? []; + + if (testPlanReports.length) { + firstTestPlanReportFound = true; + testPlanReports.forEach(testPlanReport => { + let isRequired = false; + if (isRequiredAtBrowser && isFirstAtBrowserInstance) { + isFirstAtBrowserInstance = false; + isRequired = true; + } + if (testPlanReport.minimumAtVersion) { + minimumAtVersionFound = true; + } + unsortedStatuses.push({ + isRequired, + at, + browser, + minimumAtVersion: testPlanReport.minimumAtVersion, + exactAtVersion: testPlanReport.exactAtVersion, + testPlanReport: + populateTestPlanVersion(testPlanReport) + }); + }); + + return; + } + + if (firstTestPlanReportFound && !minimumAtVersionFound) { + unsortedStatuses.push({ + isRequired: false, + at, + browser, + minimumAtVersion: null, + exactAtVersion: atVersion, + testPlanReport: null + }); + } + }); + }); + }); + + const statuses = unsortedStatuses.sort((a, b) => { + if (a.at.name !== b.at.name) return a.at.name.localeCompare(b.at.name); + if (a.isRequired !== b.isRequired) return a.isRequired ? -1 : 1; + if (a.browser.name !== b.browser.name) { + return a.browser.name.localeCompare(b.browser.name); + } + const dateA = (a.minimumAtVersion ?? a.exactAtVersion).releasedAt; + const dateB = (b.minimumAtVersion ?? b.exactAtVersion).releasedAt; + return new Date(dateA) - new Date(dateB); + }); + + return statuses; +}; + +const indexTestPlanReports = async (unpopulatedTestPlanReports, context) => { + const unsortedTestPlanReports = await Promise.all( + unpopulatedTestPlanReports.map(async report => { + const [at, browser, minimumAtVersion, exactAtVersion] = + await Promise.all([ + atResolver(report, null, context), + browserResolver(report, null, context), + minimumAtVersionResolver(report, null, context), + exactAtVersionResolver(report, null, context) + ]); + + return { + ...report.dataValues, + at, + browser, + minimumAtVersion, + exactAtVersion + }; + }) + ); + + const releaseOrderTestPlanReports = unsortedTestPlanReports.sort((a, b) => { + const dateA = (a.minimumAtVersion ?? a.exactAtVersion).releasedAt; + const dateB = (b.minimumAtVersion ?? b.exactAtVersion).releasedAt; + if (dateA !== dateB) return new Date(dateB) - new Date(dateA); + + // With duplicate reports list the oldest first + return new Date(a.createdAt) - new Date(b.createdAt); + }); + + const indexedTestPlanReports = {}; + + releaseOrderTestPlanReports.forEach(testPlanReport => { + const { at, browser, minimumAtVersion, exactAtVersion } = + testPlanReport; + + if (!indexedTestPlanReports[at.id]) indexedTestPlanReports[at.id] = {}; + if (!indexedTestPlanReports[at.id][browser.id]) { + indexedTestPlanReports[at.id][browser.id] = {}; + } + + const atVersion = minimumAtVersion ?? exactAtVersion; + + if (!indexedTestPlanReports[at.id][browser.id][atVersion.id]) { + // Must be an array to accommodate duplicates, which are allowed + indexedTestPlanReports[at.id][browser.id][atVersion.id] = []; + } + + indexedTestPlanReports[at.id][browser.id][atVersion.id].push( + testPlanReport + ); + }); + + return indexedTestPlanReports; +}; + +module.exports = testPlanReportStatusesResolver; diff --git a/server/resolvers/TestPlanVersion/testPlanReportStatusesResolver.test.js b/server/resolvers/TestPlanVersion/testPlanReportStatusesResolver.test.js new file mode 100644 index 000000000..b0b112b62 --- /dev/null +++ b/server/resolvers/TestPlanVersion/testPlanReportStatusesResolver.test.js @@ -0,0 +1,205 @@ +const { uniq: unique } = require('lodash'); +const getGraphQLContext = require('../../graphql-context'); +const testPlanReportStatusesResolver = require('./testPlanReportStatusesResolver'); +const db = require('../../models'); +const dbCleaner = require('../../tests/util/db-cleaner'); +const { createAtVersion } = require('../../models/services/AtService'); + +describe('testPlanReportStatusesResolver', () => { + const getFakeTestPlanReport = values => { + const fake = { ...values }; + fake.dataValues = values; + return values; + }; + + let context; + + beforeEach(() => { + context = getGraphQLContext({ req: { transaction: false } }); + }); + + afterAll(async () => { + // Closing the DB connection allows Jest to exit successfully. + await db.sequelize.close(); + }); + + it('uses minimumAtVersions when no testPlanReports exist', async () => { + const testPlanVersionWithoutReports = { + phase: 'DRAFT', + testPlanReports: [] + }; + + const statuses = await testPlanReportStatusesResolver( + testPlanVersionWithoutReports, + null, + context + ); + + const atsInOrder = unique(statuses.map(status => status.at.name)); + const jawsBrowsersInOrder = unique( + statuses + .filter(status => status.at.id === 1) + .map(status => status.browser.name) + ); + const voiceoverBrowsersInOrder = unique( + statuses + .filter(status => status.at.id === 3) + .map(status => status.browser.name) + ); + const exactAtVersions = statuses.filter( + status => status.exactAtVersion + ); + const requiredStatuses = statuses.filter(status => status.isRequired); + + expect(statuses.length).toBe(7); + expect(atsInOrder).toEqual(['JAWS', 'NVDA', 'VoiceOver for macOS']); + expect(jawsBrowsersInOrder).toEqual(['Chrome', 'Firefox']); + expect(voiceoverBrowsersInOrder).toEqual([ + 'Safari', + 'Chrome', + 'Firefox' + ]); + expect(exactAtVersions).toEqual([]); + expect(requiredStatuses.length).toBe(3); + }); + + it('matches up testPlanReports when they exist', async () => { + const testPlanVersion = { + phase: 'DRAFT', + testPlanReports: [ + getFakeTestPlanReport({ + atId: 1, + browserId: 2, + minimumAtVersionId: 1 + }) + ] + }; + + const statuses = await testPlanReportStatusesResolver( + testPlanVersion, + null, + context + ); + + const statusesWithReport = statuses.filter( + status => status.testPlanReport + ); + + expect(statuses.length).toBe(7); + expect(statusesWithReport.length).toBe(1); + expect(statusesWithReport[0].isRequired).toBe(true); + expect(statusesWithReport[0].at.name).toBe('JAWS'); + expect(statusesWithReport[0].browser.name).toBe('Chrome'); + expect(statusesWithReport[0].minimumAtVersion.id).toBe(1); + }); + + it('supports duplicate at / browser / atVersions', async () => { + const testPlanVersion = { + phase: 'DRAFT', + testPlanReports: [ + getFakeTestPlanReport({ + atId: 1, + browserId: 2, + minimumAtVersionId: 1 + }), + getFakeTestPlanReport({ + atId: 1, + browserId: 2, + minimumAtVersionId: 1 + }) + ] + }; + + const statuses = await testPlanReportStatusesResolver( + testPlanVersion, + null, + context + ); + + const statusesWithReport = statuses.filter( + status => status.testPlanReport + ); + + expect(statuses.length).toBe(8); + expect(statusesWithReport.length).toBe(2); + expect(statusesWithReport[0].isRequired).toBe(true); + expect(statusesWithReport[0].at.name).toBe('JAWS'); + expect(statusesWithReport[0].browser.name).toBe('Chrome'); + expect(statusesWithReport[0].minimumAtVersion.id).toBe(1); + expect(statusesWithReport[1].isRequired).toBe(false); + expect(statusesWithReport[1].at.name).toBe('JAWS'); + expect(statusesWithReport[1].browser.name).toBe('Chrome'); + expect(statusesWithReport[1].minimumAtVersion.id).toBe(1); + }); + + it('requires all versions to be covered', async () => { + await dbCleaner(async transaction => { + const context = getGraphQLContext({ req: { transaction } }); + + const getDate = dayAdjustment => { + return new Date( + Number(new Date()) + dayAdjustment * 1000 * 60 * 60 * 24 + ).toISOString(); + }; + + await createAtVersion({ + values: { atId: 1, name: 'v2', releasedAt: getDate(-20) }, + transaction + }); + + const v3 = await createAtVersion({ + values: { atId: 1, name: 'v3', releasedAt: getDate(-15) }, + transaction + }); + + await createAtVersion({ + values: { atId: 1, name: 'v4', releasedAt: getDate(-10) }, + transaction + }); + + await createAtVersion({ + values: { atId: 1, name: 'v5', releasedAt: getDate(-5) }, + transaction + }); + + const testPlanVersion = { + phase: 'RECOMMENDED', + testPlanReports: [ + getFakeTestPlanReport({ + atId: 1, + browserId: 2, + exactAtVersionId: v3.id + }) + ] + }; + + const statuses = await testPlanReportStatusesResolver( + testPlanVersion, + null, + context + ); + + const jawsChromeStatuses = statuses.filter( + status => + status.at.name === 'JAWS' && + status.browser.name === 'Chrome' + ); + + const v2Status = jawsChromeStatuses.find( + status => status.exactAtVersion.name == 'v2' + ); + + expect(jawsChromeStatuses[0].exactAtVersion.name).toBe('v3'); + expect(jawsChromeStatuses[0].isRequired).toBe(true); + expect(jawsChromeStatuses[0].testPlanReport).toBeTruthy(); + expect(jawsChromeStatuses[1].exactAtVersion.name).toBe('v4'); + expect(jawsChromeStatuses[1].isRequired).toBe(false); + expect(jawsChromeStatuses[1].testPlanReport).toBe(null); + expect(jawsChromeStatuses[2].exactAtVersion.name).toBe('v5'); + expect(jawsChromeStatuses[2].isRequired).toBe(false); + expect(jawsChromeStatuses[2].testPlanReport).toBe(null); + expect(jawsChromeStatuses.length).toBe(3); + expect(v2Status).toBe(undefined); // Old versions can be ignored + }); + }); +}); diff --git a/server/resolvers/testPlanReportsResolver.js b/server/resolvers/testPlanReportsResolver.js index 5fab775a1..e927f7d7c 100644 --- a/server/resolvers/testPlanReportsResolver.js +++ b/server/resolvers/testPlanReportsResolver.js @@ -52,6 +52,16 @@ const testPlanReportsResolver = async ( if (testPlanReportRawAttributes.includes('conflictsLength')) testPlanReportAttributes.push('metrics'); + if (testPlanReportRawAttributes.includes('minimumAtVersion')) { + testPlanReportAttributes.push('atId'); + testPlanReportAttributes.push('minimumAtVersionId'); + } + + if (testPlanReportRawAttributes.includes('exactAtVersion')) { + testPlanReportAttributes.push('atId'); + testPlanReportAttributes.push('exactAtVersionId'); + } + if (isFinal === undefined) { // Do nothing } else testPlanReportAttributes.push('markedFinalAt'); diff --git a/server/scripts/populate-test-data/pg_dump_test_data.sql b/server/scripts/populate-test-data/pg_dump_test_data.sql index e942cb340..9a0cbb598 100644 --- a/server/scripts/populate-test-data/pg_dump_test_data.sql +++ b/server/scripts/populate-test-data/pg_dump_test_data.sql @@ -60,24 +60,24 @@ $$; -- Data for Name: TestPlanReport; Type: TABLE DATA; Schema: public; Owner: atr -- -INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "atId", "browserId") VALUES (1, get_test_plan_version_id(text 'Toggle Button', '1'), '2021-05-14 14:18:23.602-05', 1, 2); -INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "atId", "browserId") VALUES (2, get_test_plan_version_id(text 'Select Only Combobox Example', '1'), '2021-05-14 14:18:23.602-05', 2, 1); -INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "browserId", "vendorReviewStatus") VALUES (3, get_test_plan_version_id(text 'Modal Dialog Example', '1'), '2021-05-14 14:18:23.602-05', '2022-07-06', 1, 2, 'READY'); -INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "browserId", "vendorReviewStatus") VALUES (4, get_test_plan_version_id(text 'Modal Dialog Example', '1'), '2021-05-14 14:18:23.602-05', '2022-07-06', 2, 2, 'READY'); -INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "browserId", "vendorReviewStatus") VALUES (5, get_test_plan_version_id(text 'Modal Dialog Example', '1'), '2021-05-14 14:18:23.602-05', '2022-07-06', 3, 3, 'READY'); -INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "browserId", "vendorReviewStatus") VALUES (6, get_test_plan_version_id(text 'Checkbox Example (Mixed-State)', '1'), '2021-05-14 14:18:23.602-05', '2022-07-06', 3, 3, 'READY'); -INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "atId", "browserId") VALUES (7, get_test_plan_version_id(text 'Alert Example', '1'), '2021-05-14 14:18:23.602-05', 3, 1); -INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "atId", "browserId", "vendorReviewStatus") VALUES (8, get_test_plan_version_id(text 'Modal Dialog Example', '1'), '2021-05-14 14:18:23.602-05', 1, 1, 'READY'); -INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "atId", "browserId", "vendorReviewStatus") VALUES (9, get_test_plan_version_id(text 'Modal Dialog Example', '1'), '2021-05-14 14:18:23.602-05', 2, 1, 'READY'); -INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "atId", "browserId", "vendorReviewStatus") VALUES (10, get_test_plan_version_id(text 'Modal Dialog Example', '1'), '2021-05-14 14:18:23.602-05', 3, 1, 'READY'); -INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "atId", "browserId", "vendorReviewStatus") VALUES (11, get_test_plan_version_id(text 'Modal Dialog Example', '1'), '2021-05-14 14:18:23.602-05', 3, 2, 'READY'); -INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "browserId", "vendorReviewStatus") VALUES (12, get_test_plan_version_id(text 'Checkbox Example (Mixed-State)', '1'), '2021-05-14 14:18:23.602-05', '2022-07-06', 1, 2, 'READY'); -INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "browserId", "vendorReviewStatus") VALUES (13, get_test_plan_version_id(text 'Checkbox Example (Mixed-State)', '1'), '2021-05-14 14:18:23.602-05', '2022-07-07', 2, 2, 'READY'); -INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "browserId", "vendorReviewStatus") VALUES (14, get_test_plan_version_id(text 'Toggle Button', '1'), '2021-05-14 14:18:23.602-05', '2022-07-07', 2, 2, 'READY'); -INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "browserId", "vendorReviewStatus") VALUES (15, get_test_plan_version_id(text 'Toggle Button', '1'), '2021-05-14 14:18:23.602-05', '2022-07-07', 3, 3, 'READY'); -INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "browserId", "vendorReviewStatus") VALUES (16, get_test_plan_version_id(text 'Command Button Example', '2'), '2023-12-13 14:18:23.602-05', '2023-12-14', 1, 2, 'READY'); -INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "browserId", "vendorReviewStatus") VALUES (17, get_test_plan_version_id(text 'Command Button Example', '2'), '2023-12-13 14:18:23.602-05', '2023-12-14', 2, 2, 'READY'); -INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "browserId", "vendorReviewStatus") VALUES (18, get_test_plan_version_id(text 'Command Button Example', '2'), '2023-12-13 14:18:23.602-05', '2023-12-14', 3, 3, 'READY'); +INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "atId", "minimumAtVersionId", "browserId") VALUES (1, get_test_plan_version_id(text 'Toggle Button', '1'), '2021-05-14 14:18:23.602-05', 1, 1, 2); +INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "atId", "minimumAtVersionId", "browserId") VALUES (2, get_test_plan_version_id(text 'Select Only Combobox Example', '1'), '2021-05-14 14:18:23.602-05', 2, 2, 1); +INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "minimumAtVersionId", "browserId", "vendorReviewStatus") VALUES (3, get_test_plan_version_id(text 'Modal Dialog Example', '1'), '2021-05-14 14:18:23.602-05', '2022-07-06', 1, 1, 2, 'READY'); +INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "minimumAtVersionId", "browserId", "vendorReviewStatus") VALUES (4, get_test_plan_version_id(text 'Modal Dialog Example', '1'), '2021-05-14 14:18:23.602-05', '2022-07-06', 2, 2, 2, 'READY'); +INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "minimumAtVersionId", "browserId", "vendorReviewStatus") VALUES (5, get_test_plan_version_id(text 'Modal Dialog Example', '1'), '2021-05-14 14:18:23.602-05', '2022-07-06', 3, 3, 3, 'READY'); +INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "minimumAtVersionId", "browserId", "vendorReviewStatus") VALUES (6, get_test_plan_version_id(text 'Checkbox Example (Mixed-State)', '1'), '2021-05-14 14:18:23.602-05', '2022-07-06', 3, 3, 3, 'READY'); +INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "atId", "minimumAtVersionId", "browserId") VALUES (7, get_test_plan_version_id(text 'Alert Example', '1'), '2021-05-14 14:18:23.602-05', 3, 3, 1); +INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "atId", "minimumAtVersionId", "browserId", "vendorReviewStatus") VALUES (8, get_test_plan_version_id(text 'Modal Dialog Example', '1'), '2021-05-14 14:18:23.602-05', 1, 1, 1, 'READY'); +INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "atId", "minimumAtVersionId", "browserId", "vendorReviewStatus") VALUES (9, get_test_plan_version_id(text 'Modal Dialog Example', '1'), '2021-05-14 14:18:23.602-05', 2, 2, 1, 'READY'); +INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "atId", "minimumAtVersionId", "browserId", "vendorReviewStatus") VALUES (10, get_test_plan_version_id(text 'Modal Dialog Example', '1'), '2021-05-14 14:18:23.602-05', 3, 3, 1, 'READY'); +INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "atId", "minimumAtVersionId", "browserId", "vendorReviewStatus") VALUES (11, get_test_plan_version_id(text 'Modal Dialog Example', '1'), '2021-05-14 14:18:23.602-05', 3, 3, 2, 'READY'); +INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "exactAtVersionId", "browserId", "vendorReviewStatus") VALUES (12, get_test_plan_version_id(text 'Checkbox Example (Mixed-State)', '1'), '2021-05-14 14:18:23.602-05', '2022-07-06', 1, 1, 2, 'READY'); +INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "exactAtVersionId", "browserId", "vendorReviewStatus") VALUES (13, get_test_plan_version_id(text 'Checkbox Example (Mixed-State)', '1'), '2021-05-14 14:18:23.602-05', '2022-07-07', 2, 2, 2, 'READY'); +INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "minimumAtVersionId", "browserId", "vendorReviewStatus") VALUES (14, get_test_plan_version_id(text 'Toggle Button', '1'), '2021-05-14 14:18:23.602-05', '2022-07-07', 2, 2, 2, 'READY'); +INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "minimumAtVersionId", "browserId", "vendorReviewStatus") VALUES (15, get_test_plan_version_id(text 'Toggle Button', '1'), '2021-05-14 14:18:23.602-05', '2022-07-07', 3, 3, 3, 'READY'); +INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "minimumAtVersionId", "browserId", "vendorReviewStatus") VALUES (16, get_test_plan_version_id(text 'Command Button Example', '2'), '2023-12-13 14:18:23.602-05', '2023-12-14', 1, 1, 2, 'READY'); +INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "minimumAtVersionId", "browserId", "vendorReviewStatus") VALUES (17, get_test_plan_version_id(text 'Command Button Example', '2'), '2023-12-13 14:18:23.602-05', '2023-12-14', 2, 2, 2, 'READY'); +INSERT INTO "TestPlanReport" (id, "testPlanVersionId", "createdAt", "markedFinalAt", "atId", "minimumAtVersionId", "browserId", "vendorReviewStatus") VALUES (18, get_test_plan_version_id(text 'Command Button Example', '2'), '2023-12-13 14:18:23.602-05', '2023-12-14', 3, 3, 3, 'READY'); -- -- Data for Name: TestPlanVersion; Type: TABLE DATA; Schema: public; Owner: atr diff --git a/server/tests/integration/graphql.test.js b/server/tests/integration/graphql.test.js index ad49d7d5d..e9808d589 100644 --- a/server/tests/integration/graphql.test.js +++ b/server/tests/integration/graphql.test.js @@ -384,6 +384,25 @@ describe('graphql', () => { name releasedAt } + testPlanReportStatuses { + __typename + isRequired + at { + id + } + exactAtVersion { + id + } + minimumAtVersion { + id + } + browser { + id + } + testPlanReport { + id + } + } } conflictTestPlanReport: testPlanReport(id: 2) { __typename @@ -506,6 +525,15 @@ describe('graphql', () => { releasedAt } markedFinalAt + minimumAtVersion { + id + } + } + recommendedPhaseTestPlanReport: testPlanReport(id: 12) { + __typename + exactAtVersion { + id + } } testPlanReports { id