Skip to content

Commit 35e9469

Browse files
stalgiaghoward-e
andauthored
fix: populate test plan versions and filter on first disclosure open (#1643)
* fix: populate test plan versions and filter on first disclosure open * Don't rely on TestPlanVersion.title because of future chance of mismatch --------- Co-authored-by: Howard Edwards <[email protected]>
1 parent 119fbdc commit 35e9469

File tree

3 files changed

+114
-65
lines changed

3 files changed

+114
-65
lines changed

client/components/ManageTestQueue/AddTestPlans.jsx

Lines changed: 97 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState } from 'react';
1+
import React, { useState, useMemo, useCallback } from 'react';
22
import { Form } from 'react-bootstrap';
33
import RadioBox from '@components/common/RadioBox';
44
import AddTestToQueueWithConfirmation from '@components/AddTestToQueueWithConfirmation';
@@ -24,10 +24,6 @@ const AddTestPlans = ({
2424
getMatchingTestPlanVersions
2525
} = useAddTestPlansFormState(allTestPlanVersions);
2626

27-
const matchingTestPlanVersions = getMatchingTestPlanVersions(
28-
selectedTestPlanVersionId
29-
);
30-
3127
const [selectedAtId, setSelectedAtId] = useState('');
3228
const [selectedBrowserId, setSelectedBrowserId] = useState('');
3329
const [selectedAtVersionExactOrMinimum, setSelectedAtVersionExactOrMinimum] =
@@ -39,37 +35,98 @@ const AddTestPlans = ({
3935
setShowMinimumAtVersionErrorMessage
4036
] = useState(false);
4137

42-
const onTestPlanVersionChange = e => {
43-
const { value } = e.target;
44-
setShowMinimumAtVersionErrorMessage(false);
45-
setSelectedAtVersionExactOrMinimum('Exact Version');
46-
setSelectedTestPlanVersionId(value);
47-
};
38+
const matchingTestPlanVersions = useMemo(
39+
() => getMatchingTestPlanVersions(selectedTestPlanVersionId),
40+
[selectedTestPlanVersionId, getMatchingTestPlanVersions]
41+
);
42+
43+
const selectedTestPlan = useMemo(() => {
44+
const matchingVersion = allTestPlanVersions.find(
45+
version => version.id === selectedTestPlanVersionId
46+
);
47+
if (!matchingVersion) return null;
48+
49+
return allTestPlans.find(
50+
testPlan =>
51+
testPlan.title === matchingVersion.title &&
52+
testPlan.directory === matchingVersion.testPlan.directory
53+
);
54+
}, [allTestPlans, allTestPlanVersions, selectedTestPlanVersionId]);
55+
56+
const selectedTestPlanVersion = useMemo(
57+
() =>
58+
allTestPlanVersions.find(({ id }) => id === selectedTestPlanVersionId),
59+
[allTestPlanVersions, selectedTestPlanVersionId]
60+
);
61+
62+
const selectedAt = useMemo(
63+
() => ats.find(item => item.id === selectedAtId),
64+
[ats, selectedAtId]
65+
);
66+
67+
const exactOrMinimumAtVersion = useMemo(
68+
() =>
69+
selectedAt?.atVersions.find(
70+
item => item.id === selectedReportAtVersionId
71+
),
72+
[selectedAt, selectedReportAtVersionId]
73+
);
74+
75+
const selectedBrowser = useMemo(
76+
() =>
77+
selectedAt?.browsers.find(browser => browser.id === selectedBrowserId),
78+
[selectedAt, selectedBrowserId]
79+
);
80+
81+
const onTestPlanChange = useCallback(
82+
e => {
83+
const { value } = e.target;
84+
setShowMinimumAtVersionErrorMessage(false);
85+
setSelectedAtVersionExactOrMinimum('Exact Version');
86+
const selectedPlan = allTestPlans.find(plan => plan.id === value);
87+
if (selectedPlan) {
88+
const matchingVersions = allTestPlanVersions
89+
.filter(
90+
version =>
91+
version.testPlan.directory === selectedPlan.directory &&
92+
version.phase !== 'DEPRECATED' &&
93+
version.phase !== 'RD'
94+
)
95+
.sort((a, b) => new Date(b.updatedAt) - new Date(a.updatedAt));
96+
if (matchingVersions.length > 0) {
97+
setSelectedTestPlanVersionId(matchingVersions[0].id);
98+
}
99+
}
100+
},
101+
[allTestPlans, allTestPlanVersions, setSelectedTestPlanVersionId]
102+
);
48103

49-
const onAtChange = e => {
104+
const onTestPlanVersionChange = useCallback(
105+
e => {
106+
const { value } = e.target;
107+
setShowMinimumAtVersionErrorMessage(false);
108+
setSelectedAtVersionExactOrMinimum('Exact Version');
109+
setSelectedTestPlanVersionId(value);
110+
},
111+
[setSelectedTestPlanVersionId]
112+
);
113+
114+
const onAtChange = useCallback(e => {
50115
const { value } = e.target;
51116
setShowMinimumAtVersionErrorMessage(false);
52117
setSelectedAtId(value);
53118
setSelectedReportAtVersionId(null);
54-
};
119+
}, []);
55120

56-
const onReportAtVersionIdChange = e => {
121+
const onReportAtVersionIdChange = useCallback(e => {
57122
const { value } = e.target;
58123
setSelectedReportAtVersionId(value);
59-
};
124+
}, []);
60125

61-
const onBrowserChange = e => {
126+
const onBrowserChange = useCallback(e => {
62127
const { value } = e.target;
63128
setSelectedBrowserId(value);
64-
};
65-
66-
const selectedTestPlanVersion = allTestPlanVersions.find(
67-
({ id }) => id === selectedTestPlanVersionId
68-
);
69-
70-
const exactOrMinimumAtVersion = ats
71-
.find(item => item.id === selectedAtId)
72-
?.atVersions.find(item => item.id === selectedReportAtVersionId);
129+
}, []);
73130

74131
return (
75132
<div className={styles.manageDisclosureContainer}>
@@ -83,12 +140,8 @@ const AddTestPlans = ({
83140
Test Plan
84141
</Form.Label>
85142
<Form.Select
86-
onChange={e => {
87-
const { value } = e.target;
88-
setShowMinimumAtVersionErrorMessage(false);
89-
setSelectedAtVersionExactOrMinimum('Exact Version');
90-
setSelectedTestPlanVersionId(value);
91-
}}
143+
value={selectedTestPlan?.id || ''}
144+
onChange={onTestPlanChange}
92145
>
93146
{allTestPlans.map(item => (
94147
<option key={`${item.title}-${item.id}`} value={item.id}>
@@ -169,13 +222,11 @@ const AddTestPlans = ({
169222
<option value={''} disabled>
170223
Select AT Version
171224
</option>
172-
{ats
173-
.find(at => at.id === selectedAtId)
174-
?.atVersions.map(item => (
175-
<option key={`${item.name}-${item.id}`} value={item.id}>
176-
{item.name}
177-
</option>
178-
))}
225+
{selectedAt?.atVersions.map(item => (
226+
<option key={`${item.name}-${item.id}`} value={item.id}>
227+
{item.name}
228+
</option>
229+
))}
179230
</Form.Select>
180231
{showMinimumAtVersionErrorMessage &&
181232
selectedTestPlanVersion?.phase === 'RECOMMENDED' ? (
@@ -198,21 +249,17 @@ const AddTestPlans = ({
198249
<option value={''} disabled>
199250
Select a Browser
200251
</option>
201-
{ats
202-
.find(at => at.id === selectedAtId)
203-
?.browsers.map(item => (
204-
<option key={`${item.name}-${item.id}`} value={item.id}>
205-
{item.name}
206-
</option>
207-
))}
252+
{selectedAt?.browsers.map(item => (
253+
<option key={`${item.name}-${item.id}`} value={item.id}>
254+
{item.name}
255+
</option>
256+
))}
208257
</Form.Select>
209258
</Form.Group>
210259
</div>
211260
<AddTestToQueueWithConfirmation
212-
testPlanVersion={allTestPlanVersions.find(
213-
item => item.id === selectedTestPlanVersionId
214-
)}
215-
at={ats.find(item => item.id === selectedAtId)}
261+
testPlanVersion={selectedTestPlanVersion}
262+
at={selectedAt}
216263
exactAtVersion={
217264
selectedAtVersionExactOrMinimum === 'Exact Version'
218265
? exactOrMinimumAtVersion
@@ -223,9 +270,7 @@ const AddTestPlans = ({
223270
? exactOrMinimumAtVersion
224271
: null
225272
}
226-
browser={ats
227-
.find(at => at.id === selectedAtId)
228-
?.browsers.find(browser => browser.id === selectedBrowserId)}
273+
browser={selectedBrowser}
229274
triggerUpdate={triggerUpdate}
230275
disabled={
231276
!selectedTestPlanVersionId ||

client/components/ManageTestQueue/index.jsx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,9 @@ import { LoadingStatus, useTriggerLoad } from '../common/LoadingStatus';
44
import DisclosureComponent from '../common/DisclosureComponent';
55
import ManageAtVersions from '@components/ManageTestQueue/ManageAtVersions';
66
import AddTestPlans from '@components/ManageTestQueue/AddTestPlans';
7-
import { AtPropType, TestPlanVersionPropType } from '../common/proptypes';
7+
import { AtPropType } from '../common/proptypes';
88

9-
const ManageTestQueue = ({
10-
ats = [],
11-
testPlanVersions = [],
12-
triggerUpdate = () => {}
13-
}) => {
9+
const ManageTestQueue = ({ ats = [], triggerUpdate = () => {} }) => {
1410
const { loadingMessage } = useTriggerLoad();
1511

1612
const [showManageATs, setShowManageATs] = useState(false);
@@ -49,7 +45,6 @@ const ManageTestQueue = ({
4945

5046
ManageTestQueue.propTypes = {
5147
ats: PropTypes.arrayOf(AtPropType).isRequired,
52-
testPlanVersions: PropTypes.arrayOf(TestPlanVersionPropType),
5348
triggerUpdate: PropTypes.func
5449
};
5550

client/components/ManageTestQueue/useAddTestPlansData.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,21 @@ export const useAddTestPlansFormState = allTestPlanVersions => {
8686
useState('');
8787

8888
useMemo(() => {
89-
if (
90-
allTestPlanVersions.length &&
91-
!selectedTestPlanVersionId &&
92-
allTestPlanVersions[0]
93-
) {
94-
setSelectedTestPlanVersionId(allTestPlanVersions[0].id);
89+
if (allTestPlanVersions.length && !selectedTestPlanVersionId) {
90+
const sortedVersions = [...allTestPlanVersions].sort((a, b) => {
91+
if (a.title !== b.title) {
92+
return a.title < b.title ? -1 : 1;
93+
}
94+
return new Date(b.updatedAt) - new Date(a.updatedAt);
95+
});
96+
97+
const firstValidVersion = sortedVersions.find(
98+
version => version.phase !== 'DEPRECATED' && version.phase !== 'RD'
99+
);
100+
101+
if (firstValidVersion) {
102+
setSelectedTestPlanVersionId(firstValidVersion.id);
103+
}
95104
}
96105
}, [allTestPlanVersions]);
97106

0 commit comments

Comments
 (0)