From 423c7ee5f1df89eba408a4c93eb3ff08043c78f7 Mon Sep 17 00:00:00 2001 From: JamesHawks224 <146897935+JamesHawks224@users.noreply.github.com> Date: Wed, 27 Nov 2024 22:27:08 +0000 Subject: [PATCH 01/12] added alaska FF to filter order types --- .../ServicesCounselingOrders.jsx | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.jsx b/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.jsx index 260b126ad7f..87bdf90d0c0 100644 --- a/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.jsx +++ b/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.jsx @@ -1,5 +1,5 @@ /* eslint-disable camelcase */ -import React, { useEffect, useReducer } from 'react'; +import React, { useEffect, useReducer, useState } from 'react'; import { Link, useNavigate, useParams } from 'react-router-dom'; import { Button } from '@trussworks/react-uswds'; import { Formik } from 'formik'; @@ -8,6 +8,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import ordersFormValidationSchema from '../Orders/ordersFormValidationSchema'; +import { isBooleanFlagEnabled } from 'utils/featureFlags'; import styles from 'styles/documentViewerWithSidebar.module.scss'; import { milmoveLogger } from 'utils/milmoveLog'; import OrdersDetailForm from 'components/Office/OrdersDetailForm/OrdersDetailForm'; @@ -23,11 +24,10 @@ import SomethingWentWrong from 'shared/SomethingWentWrong'; import { LineOfAccountingDfasElementOrder } from 'types/lineOfAccounting'; import { LOA_VALIDATION_ACTIONS, reducer as loaReducer, initialState as initialLoaState } from 'reducers/loaValidation'; import { TAC_VALIDATION_ACTIONS, reducer as tacReducer, initialState as initialTacState } from 'reducers/tacValidation'; -import { LOA_TYPE, MOVE_DOCUMENT_TYPE } from 'shared/constants'; +import { LOA_TYPE, MOVE_DOCUMENT_TYPE, FEATURE_FLAG_KEYS } from 'shared/constants'; import DocumentViewerFileManager from 'components/DocumentViewerFileManager/DocumentViewerFileManager'; const deptIndicatorDropdownOptions = dropdownInputOptions(DEPARTMENT_INDICATOR_OPTIONS); -const ordersTypeDropdownOptions = dropdownInputOptions(ORDERS_TYPE_OPTIONS); const ordersTypeDetailsDropdownOptions = dropdownInputOptions(ORDERS_TYPE_DETAILS_OPTIONS); const payGradeDropdownOptions = dropdownInputOptions(ORDERS_PAY_GRADE_OPTIONS); @@ -38,6 +38,7 @@ const ServicesCounselingOrders = ({ files, amendedDocumentId, updateAmendedDocum const [tacValidationState, tacValidationDispatch] = useReducer(tacReducer, null, initialTacState); const [loaValidationState, loaValidationDispatch] = useReducer(loaReducer, null, initialLoaState); const { move, orders, isLoading, isError } = useOrdersDocumentQueries(moveCode); + const [orderTypeOptions, setOrderTypeOptions] = useState(ORDERS_TYPE_OPTIONS); const orderId = move?.ordersId; const orderDocumentId = orders[orderId]?.uploaded_order_id; @@ -246,6 +247,19 @@ const ServicesCounselingOrders = ({ files, amendedDocumentId, updateAmendedDocum validateLoa, ]); + useEffect(() => { + const checkAlaskaFeatureFlag = async () => { + const isAlaskaEnabled = await isBooleanFlagEnabled(FEATURE_FLAG_KEYS.ENABLE_ALASKA); + if (!isAlaskaEnabled) { + const options = orderTypeOptions; + delete orderTypeOptions.EARLY_RETURN_OF_DEPENDENTS; + delete orderTypeOptions.STUDENT_TRAVEL; + setOrderTypeOptions(options); + } + }; + checkAlaskaFeatureFlag(); + }, [orderTypeOptions]); + if (isLoading) return ; if (isError) return ; @@ -291,6 +305,8 @@ const ServicesCounselingOrders = ({ files, amendedDocumentId, updateAmendedDocum 'Unable to find a LOA based on the provided details. Please ensure a department indicator and TAC are present on this form.'; const loaInvalidWarningMsg = 'The LOA identified based on the provided details appears to be invalid.'; + const ordersTypeDropdownOptions = dropdownInputOptions(orderTypeOptions); + return (
From 3d0d83fe78d3ed7496c42e51c6491987f80e2654 Mon Sep 17 00:00:00 2001 From: JamesHawks224 <146897935+JamesHawks224@users.noreply.github.com> Date: Mon, 9 Dec 2024 19:46:15 +0000 Subject: [PATCH 02/12] added hasDependents to 'order update by service conselor' api. --- pkg/gen/ghcapi/embedded_spec.go | 10 ++++++++++ pkg/gen/ghcmessages/counseling_update_order_payload.go | 3 +++ pkg/services/order/order_updater.go | 4 ++++ .../ServicesCounselingOrders.jsx | 3 ++- swagger-def/ghc.yaml | 4 ++++ swagger/ghc.yaml | 4 ++++ 6 files changed, 27 insertions(+), 1 deletion(-) diff --git a/pkg/gen/ghcapi/embedded_spec.go b/pkg/gen/ghcapi/embedded_spec.go index 576c53137fb..22877e3ef0b 100644 --- a/pkg/gen/ghcapi/embedded_spec.go +++ b/pkg/gen/ghcapi/embedded_spec.go @@ -6842,6 +6842,11 @@ func init() { "grade": { "$ref": "#/definitions/Grade" }, + "hasDependents": { + "type": "boolean", + "title": "Are dependents included in your orders?", + "x-nullable": true + }, "issueDate": { "description": "The date and time that these orders were cut.", "type": "string", @@ -23095,6 +23100,11 @@ func init() { "grade": { "$ref": "#/definitions/Grade" }, + "hasDependents": { + "type": "boolean", + "title": "Are dependents included in your orders?", + "x-nullable": true + }, "issueDate": { "description": "The date and time that these orders were cut.", "type": "string", diff --git a/pkg/gen/ghcmessages/counseling_update_order_payload.go b/pkg/gen/ghcmessages/counseling_update_order_payload.go index a03a99a22de..281972b5196 100644 --- a/pkg/gen/ghcmessages/counseling_update_order_payload.go +++ b/pkg/gen/ghcmessages/counseling_update_order_payload.go @@ -26,6 +26,9 @@ type CounselingUpdateOrderPayload struct { // grade Grade *Grade `json:"grade,omitempty"` + // Are dependents included in your orders? + HasDependents *bool `json:"hasDependents,omitempty"` + // Orders date // // The date and time that these orders were cut. diff --git a/pkg/services/order/order_updater.go b/pkg/services/order/order_updater.go index 2645a0bcea1..2969bab841f 100644 --- a/pkg/services/order/order_updater.go +++ b/pkg/services/order/order_updater.go @@ -400,6 +400,10 @@ func orderFromCounselingPayload(existingOrder models.Order, payload ghcmessages. order.Entitlement.DBAuthorizedWeight = &weight } + if payload.HasDependents != nil { + order.HasDependents = *payload.HasDependents + } + return order } diff --git a/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.jsx b/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.jsx index 87bdf90d0c0..86fe3879045 100644 --- a/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.jsx +++ b/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.jsx @@ -18,7 +18,7 @@ import { ORDERS } from 'constants/queryKeys'; import { servicesCounselingRoutes } from 'constants/routes'; import { useOrdersDocumentQueries } from 'hooks/queries'; import { getTacValid, getLoa, counselingUpdateOrder, getOrder } from 'services/ghcApi'; -import { formatSwaggerDate, dropdownInputOptions } from 'utils/formatters'; +import { formatSwaggerDate, dropdownInputOptions, formatYesNoAPIValue } from 'utils/formatters'; import LoadingPlaceholder from 'shared/LoadingPlaceholder'; import SomethingWentWrong from 'shared/SomethingWentWrong'; import { LineOfAccountingDfasElementOrder } from 'types/lineOfAccounting'; @@ -277,6 +277,7 @@ const ServicesCounselingOrders = ({ files, amendedDocumentId, updateAmendedDocum reportByDate: formatSwaggerDate(values.reportByDate), ordersType: values.ordersType, grade: values.payGrade, + has_dependents: formatYesNoAPIValue('no'), }; mutateOrders({ orderID: orderId, ifMatchETag: newOrderEtag, body: orderBody }); }; diff --git a/swagger-def/ghc.yaml b/swagger-def/ghc.yaml index b8876b5c4e7..7fd0f2903c5 100644 --- a/swagger-def/ghc.yaml +++ b/swagger-def/ghc.yaml @@ -5579,6 +5579,10 @@ definitions: $ref: definitions/NullableString.yaml grade: $ref: '#/definitions/Grade' + hasDependents: + type: boolean + title: Are dependents included in your orders? + x-nullable: true required: - issueDate - reportByDate diff --git a/swagger/ghc.yaml b/swagger/ghc.yaml index a93a2f7c820..61d62ddaa5f 100644 --- a/swagger/ghc.yaml +++ b/swagger/ghc.yaml @@ -5805,6 +5805,10 @@ definitions: $ref: '#/definitions/NullableString' grade: $ref: '#/definitions/Grade' + hasDependents: + type: boolean + title: Are dependents included in your orders? + x-nullable: true required: - issueDate - reportByDate From 8f962330cf6352dee642a13d11b6bd9ff00fbca4 Mon Sep 17 00:00:00 2001 From: JamesHawks224 <146897935+JamesHawks224@users.noreply.github.com> Date: Tue, 10 Dec 2024 20:31:25 +0000 Subject: [PATCH 03/12] update swagger api to return hasDependents for getOrder --- pkg/handlers/ghcapi/internal/payloads/model_to_payload.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go b/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go index 163b1052cda..b7167e4e504 100644 --- a/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go +++ b/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go @@ -680,6 +680,7 @@ func Order(order *models.Order) *ghcmessages.Order { MoveCode: moveCode, MoveTaskOrderID: moveTaskOrderID, OriginDutyLocationGBLOC: ghcmessages.GBLOC(swag.StringValue(order.OriginDutyLocationGBLOC)), + HasDependents: order.HasDependents, } return &payload From bc18330e1a7218675a89df0e59f0ffe29b184c63 Mon Sep 17 00:00:00 2001 From: JamesHawks224 <146897935+JamesHawks224@users.noreply.github.com> Date: Thu, 12 Dec 2024 16:32:50 +0000 Subject: [PATCH 04/12] fixed linter error due to missing space --- src/components/Customer/OrdersInfoForm/OrdersInfoForm.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Customer/OrdersInfoForm/OrdersInfoForm.jsx b/src/components/Customer/OrdersInfoForm/OrdersInfoForm.jsx index e9d874690ec..e4ab0bf904c 100644 --- a/src/components/Customer/OrdersInfoForm/OrdersInfoForm.jsx +++ b/src/components/Customer/OrdersInfoForm/OrdersInfoForm.jsx @@ -153,7 +153,7 @@ const OrdersInfoForm = ({ ordersTypeOptions, initialValues, onSubmit, onBack }) const handleHasDependentsChange = (e) => { // Declare a duplicate local scope of the field value // for the form to prevent state race conditions - if (e.target.value === '') { + if (e.target.value === '') { setFieldValue('has_dependents', ''); } else { const fieldValueHasDependents = e.target.value === 'yes'; From e6a690a5b7f0a396656bc79cd90489b96899556b Mon Sep 17 00:00:00 2001 From: JamesHawks224 <146897935+JamesHawks224@users.noreply.github.com> Date: Thu, 12 Dec 2024 18:08:12 +0000 Subject: [PATCH 05/12] fixed hasDependents update via the api --- .../ServicesCounselingOrders/ServicesCounselingOrders.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.jsx b/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.jsx index 86fe3879045..9e205cc0b55 100644 --- a/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.jsx +++ b/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.jsx @@ -277,7 +277,7 @@ const ServicesCounselingOrders = ({ files, amendedDocumentId, updateAmendedDocum reportByDate: formatSwaggerDate(values.reportByDate), ordersType: values.ordersType, grade: values.payGrade, - has_dependents: formatYesNoAPIValue('no'), + hasDependents: formatYesNoAPIValue('no'), }; mutateOrders({ orderID: orderId, ifMatchETag: newOrderEtag, body: orderBody }); }; From 1051f7506d828150473ae9e21124e374dbcca7dc Mon Sep 17 00:00:00 2001 From: JamesHawks224 <146897935+JamesHawks224@users.noreply.github.com> Date: Thu, 12 Dec 2024 18:36:13 +0000 Subject: [PATCH 06/12] functional change for SC complete. tests need to be added. --- .../ServicesCounselingOrders.jsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.jsx b/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.jsx index 9e205cc0b55..fb311e68928 100644 --- a/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.jsx +++ b/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.jsx @@ -13,7 +13,12 @@ import styles from 'styles/documentViewerWithSidebar.module.scss'; import { milmoveLogger } from 'utils/milmoveLog'; import OrdersDetailForm from 'components/Office/OrdersDetailForm/OrdersDetailForm'; import { DEPARTMENT_INDICATOR_OPTIONS } from 'constants/departmentIndicators'; -import { ORDERS_TYPE_DETAILS_OPTIONS, ORDERS_TYPE_OPTIONS, ORDERS_PAY_GRADE_OPTIONS } from 'constants/orders'; +import { + ORDERS_TYPE_DETAILS_OPTIONS, + ORDERS_TYPE_OPTIONS, + ORDERS_PAY_GRADE_OPTIONS, + ORDERS_TYPE, +} from 'constants/orders'; import { ORDERS } from 'constants/queryKeys'; import { servicesCounselingRoutes } from 'constants/routes'; import { useOrdersDocumentQueries } from 'hooks/queries'; @@ -41,6 +46,7 @@ const ServicesCounselingOrders = ({ files, amendedDocumentId, updateAmendedDocum const [orderTypeOptions, setOrderTypeOptions] = useState(ORDERS_TYPE_OPTIONS); const orderId = move?.ordersId; + const initialValueOfHasDependents = orders[orderId]?.has_dependents; const orderDocumentId = orders[orderId]?.uploaded_order_id; const amendedOrderDocumentId = orders[orderId]?.uploadedAmendedOrderID || amendedDocumentId; @@ -277,7 +283,10 @@ const ServicesCounselingOrders = ({ files, amendedDocumentId, updateAmendedDocum reportByDate: formatSwaggerDate(values.reportByDate), ordersType: values.ordersType, grade: values.payGrade, - hasDependents: formatYesNoAPIValue('no'), + hasDependents: + values.ordersType === ORDERS_TYPE.STUDENT_TRAVEL || values.ordersType === ORDERS_TYPE.EARLY_RETURN_OF_DEPENDENTS + ? formatYesNoAPIValue('yes') + : initialValueOfHasDependents, }; mutateOrders({ orderID: orderId, ifMatchETag: newOrderEtag, body: orderBody }); }; From 7b05e17cf5b5ef584241384b821b836d0d24b17d Mon Sep 17 00:00:00 2001 From: JamesHawks224 <146897935+JamesHawks224@users.noreply.github.com> Date: Fri, 13 Dec 2024 19:55:19 +0000 Subject: [PATCH 07/12] added functionality for SC create move --- .../Office/AddOrdersForm/AddOrdersForm.jsx | 66 +++++++++++++++---- 1 file changed, 55 insertions(+), 11 deletions(-) diff --git a/src/components/Office/AddOrdersForm/AddOrdersForm.jsx b/src/components/Office/AddOrdersForm/AddOrdersForm.jsx index 07949b46c2e..27b1d563fc0 100644 --- a/src/components/Office/AddOrdersForm/AddOrdersForm.jsx +++ b/src/components/Office/AddOrdersForm/AddOrdersForm.jsx @@ -13,7 +13,7 @@ import ToolTip from 'shared/ToolTip/ToolTip'; import { DatePickerInput, DropdownInput, DutyLocationInput } from 'components/form/fields'; import { Form } from 'components/form/Form'; import SectionWrapper from 'components/Customer/SectionWrapper'; -import { ORDERS_PAY_GRADE_OPTIONS } from 'constants/orders'; +import { ORDERS_PAY_GRADE_OPTIONS, ORDERS_TYPE } from 'constants/orders'; import { dropdownInputOptions } from 'utils/formatters'; import WizardNavigation from 'components/Customer/WizardNavigation/WizardNavigation'; import Callout from 'components/Callout'; @@ -32,6 +32,9 @@ const AddOrdersForm = ({ onSubmit, ordersTypeOptions, initialValues, onBack, isS const [hasDependents, setHasDependents] = useState(false); const [isOconusMove, setIsOconusMove] = useState(false); const [enableUB, setEnableUB] = useState(false); + const [isHasDependentsDisabled, setHasDependentsDisabled] = useState(false); + const [prevOrderType, setPrevOrderType] = useState(''); + const [filteredOrderTypeOptions, setFilteredOrderTypeOptions] = useState(ordersTypeOptions); const validationSchema = Yup.object().shape({ ordersType: Yup.mixed() @@ -88,9 +91,24 @@ const AddOrdersForm = ({ onSubmit, ordersTypeOptions, initialValues, onBack, isS } }, [currentDutyLocation, newDutyLocation, isOconusMove, hasDependents, enableUB]); + useEffect(() => { + const fetchData = async () => { + const alaskaEnabled = await isBooleanFlagEnabled(FEATURE_FLAG_KEYS.ENABLE_ALASKA); + + const updatedOptions = alaskaEnabled + ? ordersTypeOptions + : ordersTypeOptions.filter( + (e) => e.key !== ORDERS_TYPE.EARLY_RETURN_OF_DEPENDENTS && e.key !== ORDERS_TYPE.STUDENT_TRAVEL, + ); + + setFilteredOrderTypeOptions(updatedOptions); + }; + fetchData(); + }, [ordersTypeOptions]); + return ( - {({ values, isValid, isSubmitting, handleSubmit, touched, setFieldValue }) => { + {({ values, isValid, isSubmitting, handleSubmit, handleChange, touched, setFieldValue }) => { const isRetirementOrSeparation = ['RETIREMENT', 'SEPARATION'].includes(values.ordersType); if (!values.origin_duty_location && touched.origin_duty_location) originMeta = 'Required'; else originMeta = null; @@ -100,17 +118,37 @@ const AddOrdersForm = ({ onSubmit, ordersTypeOptions, initialValues, onBack, isS const handleHasDependentsChange = (e) => { // Declare a duplicate local scope of the field value // for the form to prevent state race conditions - const fieldValueHasDependents = e.target.value === 'yes'; - setHasDependents(e.target.value === 'yes'); - setFieldValue('hasDependents', fieldValueHasDependents ? 'yes' : 'no'); - if (fieldValueHasDependents && isOconusMove && enableUB) { - setShowAccompaniedTourField(true); - setShowDependentAgeFields(true); + if (e.target.value === '') { + setFieldValue('hasDependents', ''); } else { - setShowAccompaniedTourField(false); - setShowDependentAgeFields(false); + const fieldValueHasDependents = e.target.value === 'yes'; + setHasDependents(e.target.value === 'yes'); + setFieldValue('hasDependents', fieldValueHasDependents ? 'yes' : 'no'); + if (fieldValueHasDependents && isOconusMove && enableUB) { + setShowAccompaniedTourField(true); + setShowDependentAgeFields(true); + } else { + setShowAccompaniedTourField(false); + setShowDependentAgeFields(false); + } } }; + const handleOrderTypeChange = (e) => { + const { value } = e.target; + if (value === ORDERS_TYPE.STUDENT_TRAVEL || value === ORDERS_TYPE.EARLY_RETURN_OF_DEPENDENTS) { + setHasDependentsDisabled(true); + handleHasDependentsChange({ target: { value: 'yes' } }); + } else { + setHasDependentsDisabled(false); + if ( + prevOrderType === ORDERS_TYPE.STUDENT_TRAVEL || + prevOrderType === ORDERS_TYPE.EARLY_RETURN_OF_DEPENDENTS + ) { + handleHasDependentsChange({ target: { value: '' } }); + } + } + setPrevOrderType(value); + }; return (
@@ -120,8 +158,12 @@ const AddOrdersForm = ({ onSubmit, ordersTypeOptions, initialValues, onBack, isS { + handleChange(e); + handleOrderTypeChange(e); + }} isDisabled={isSafetyMoveSelected} /> @@ -199,6 +241,7 @@ const AddOrdersForm = ({ onSubmit, ordersTypeOptions, initialValues, onBack, isS onChange={(e) => { handleHasDependentsChange(e); }} + disabled={isHasDependentsDisabled} /> { handleHasDependentsChange(e); }} + disabled={isHasDependentsDisabled} />
From a30890a8575deb5fa0879f559a4030c942868588 Mon Sep 17 00:00:00 2001 From: JamesHawks224 <146897935+JamesHawks224@users.noreply.github.com> Date: Thu, 19 Dec 2024 17:01:45 +0000 Subject: [PATCH 08/12] added tests for SC edit orders page --- .../ServicesCounselingOrders.test.jsx | 348 ++++++++++++++++++ 1 file changed, 348 insertions(+) diff --git a/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.test.jsx b/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.test.jsx index c6d994b9a84..b10032c6da9 100644 --- a/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.test.jsx +++ b/src/pages/Office/ServicesCounselingOrders/ServicesCounselingOrders.test.jsx @@ -7,6 +7,9 @@ import ServicesCounselingOrders from 'pages/Office/ServicesCounselingOrders/Serv import { MockProviders } from 'testUtils'; import { useOrdersDocumentQueries } from 'hooks/queries'; import { MOVE_DOCUMENT_TYPE } from 'shared/constants'; +import { counselingUpdateOrder, getOrder } from 'services/ghcApi'; +import { formatYesNoAPIValue } from 'utils/formatters'; +import { ORDERS_TYPE } from 'constants/orders'; const mockOriginDutyLocation = { address: { @@ -100,6 +103,13 @@ jest.mock('services/ghcApi', () => ({ // Default to no LOA return Promise.resolve(undefined); }, + counselingUpdateOrder: jest.fn(), + getOrder: jest.fn(), +})); + +jest.mock('utils/featureFlags', () => ({ + ...jest.requireActual('utils/featureFlags'), + isBooleanFlagEnabled: jest.fn().mockImplementation(() => Promise.resolve(true)), })); const useOrdersDocumentQueriesReturnValue = { @@ -218,6 +228,8 @@ describe('Orders page', () => { }); it('renders each option for orders type dropdown', async () => { + useOrdersDocumentQueries.mockReturnValue(useOrdersDocumentQueriesReturnValue); + render( @@ -238,6 +250,12 @@ describe('Orders page', () => { await userEvent.selectOptions(ordersTypeDropdown, 'SEPARATION'); expect(ordersTypeDropdown).toHaveValue('SEPARATION'); + + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.EARLY_RETURN_OF_DEPENDENTS); + expect(ordersTypeDropdown).toHaveValue(ORDERS_TYPE.EARLY_RETURN_OF_DEPENDENTS); + + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.STUDENT_TRAVEL); + expect(ordersTypeDropdown).toHaveValue(ORDERS_TYPE.STUDENT_TRAVEL); }); it('populates initial field values', async () => { @@ -409,6 +427,7 @@ describe('Orders page', () => { }); }); }); + describe('LOA concatenation', () => { it('concatenates the LOA string correctly', async () => { useOrdersDocumentQueries.mockReturnValue(useOrdersDocumentQueriesReturnValue); @@ -430,6 +449,7 @@ describe('Orders page', () => { expect(loaTextField).toHaveValue(expectedLongLineOfAccounting); }); }); + describe('LOA concatenation with regex removes extra spaces', () => { it('concatenates the LOA string correctly and without extra spaces', async () => { let extraSpacesLongLineOfAccounting = @@ -446,4 +466,332 @@ describe('Orders page', () => { expect(extraSpacesLongLineOfAccounting).toEqual(expectedLongLineOfAccounting); }); }); + + describe('Order type: STUDENT_TRAVEL', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('select STUDENT_TRAVEL', async () => { + // create a local copy of order return value and set initial values + const orderQueryReturnValues = JSON.parse(JSON.stringify(useOrdersDocumentQueriesReturnValue)); + orderQueryReturnValues.move = { id: 123, moveCode: 'GLOBAL123', ordersId: 1 }; + orderQueryReturnValues.orders[1].order_type = ORDERS_TYPE.PERMANENT_CHANGE_OF_STATION; + orderQueryReturnValues.orders[1].has_dependents = formatYesNoAPIValue('no'); + + // set return values for mocked functions + useOrdersDocumentQueries.mockReturnValue(orderQueryReturnValues); + getOrder.mockResolvedValue(orderQueryReturnValues); + + // render component + render( + + + , + ); + + // Select STUDENT_TRAVEL from the dropdown + const ordersTypeDropdown = await screen.findByLabelText('Orders type'); + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.STUDENT_TRAVEL); + + // Submit the form + const saveButton = screen.getByRole('button', { name: 'Save' }); + await userEvent.click(saveButton); + + // Verify correct values were passed + await waitFor(() => { + expect(counselingUpdateOrder).toHaveBeenCalledWith( + expect.objectContaining({ + body: expect.objectContaining({ + hasDependents: formatYesNoAPIValue('yes'), + ordersType: ORDERS_TYPE.STUDENT_TRAVEL, + }), + }), + ); + }); + }); + + it('De-select STUDENT_TRAVEL', async () => { + // create a local copy of order return value and set initial values + const orderQueryReturnValues = JSON.parse(JSON.stringify(useOrdersDocumentQueriesReturnValue)); + orderQueryReturnValues.move = { id: 123, moveCode: 'GLOBAL123', ordersId: 1 }; + orderQueryReturnValues.orders[1].order_type = ORDERS_TYPE.STUDENT_TRAVEL; + orderQueryReturnValues.orders[1].has_dependents = formatYesNoAPIValue('yes'); + + // set return values for mocked functions + useOrdersDocumentQueries.mockReturnValue(orderQueryReturnValues); + getOrder.mockResolvedValue(orderQueryReturnValues); + + // render component + render( + + + , + ); + + // De-select STUDENT_TRAVEL from the dropdown + const ordersTypeDropdown = await screen.findByLabelText('Orders type'); + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.PERMANENT_CHANGE_OF_STATION); + + // Submit the form + const saveButton = screen.getByRole('button', { name: 'Save' }); + await userEvent.click(saveButton); + + // Verify correct values were passed + await waitFor(() => { + expect(counselingUpdateOrder).toHaveBeenCalledWith( + expect.objectContaining({ + body: expect.objectContaining({ + hasDependents: formatYesNoAPIValue('yes'), + ordersType: ORDERS_TYPE.PERMANENT_CHANGE_OF_STATION, + }), + }), + ); + }); + }); + + it('select STUDENT_TRAVEL, De-select STUDENT_TRAVEL', async () => { + // create a local copy of order return value and set initial values + const orderQueryReturnValues = JSON.parse(JSON.stringify(useOrdersDocumentQueriesReturnValue)); + orderQueryReturnValues.move = { id: 123, moveCode: 'GLOBAL123', ordersId: 1 }; + orderQueryReturnValues.orders[1].order_type = ORDERS_TYPE.PERMANENT_CHANGE_OF_STATION; + orderQueryReturnValues.orders[1].has_dependents = formatYesNoAPIValue('no'); + + // set return values for mocked functions + useOrdersDocumentQueries.mockReturnValue(orderQueryReturnValues); + getOrder.mockResolvedValue(orderQueryReturnValues); + + // render component + render( + + + , + ); + + // Select EARLY_RETURN_OF_DEPENDENTS and then de-select from the dropdown + const ordersTypeDropdown = await screen.findByLabelText('Orders type'); + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.STUDENT_TRAVEL); + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.LOCAL_MOVE); + + // Submit the form + const saveButton = screen.getByRole('button', { name: 'Save' }); + await userEvent.click(saveButton); + + // Verify correct values were passed + await waitFor(() => { + expect(counselingUpdateOrder).toHaveBeenCalledWith( + expect.objectContaining({ + body: expect.objectContaining({ + hasDependents: formatYesNoAPIValue('no'), + ordersType: ORDERS_TYPE.LOCAL_MOVE, + }), + }), + ); + }); + }); + + it('select STUDENT_TRAVEL, select EARLY_RETURN_OF_DEPENDENTS', async () => { + // create a local copy of order return value and set initial values + const orderQueryReturnValues = JSON.parse(JSON.stringify(useOrdersDocumentQueriesReturnValue)); + orderQueryReturnValues.move = { id: 123, moveCode: 'GLOBAL123', ordersId: 1 }; + orderQueryReturnValues.orders[1].order_type = ORDERS_TYPE.PERMANENT_CHANGE_OF_STATION; + orderQueryReturnValues.orders[1].has_dependents = formatYesNoAPIValue('no'); + + // set return values for mocked functions + useOrdersDocumentQueries.mockReturnValue(orderQueryReturnValues); + getOrder.mockResolvedValue(orderQueryReturnValues); + + // render component + render( + + + , + ); + + // Select STUDENT_TRAVEL and then select EARLY_RETURN_OF_DEPENDENTS from the dropdown + const ordersTypeDropdown = await screen.findByLabelText('Orders type'); + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.STUDENT_TRAVEL); + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.EARLY_RETURN_OF_DEPENDENTS); + + // Submit the form + const saveButton = screen.getByRole('button', { name: 'Save' }); + await userEvent.click(saveButton); + + // Verify correct values were passed + await waitFor(() => { + expect(counselingUpdateOrder).toHaveBeenCalledWith( + expect.objectContaining({ + body: expect.objectContaining({ + hasDependents: formatYesNoAPIValue('yes'), + ordersType: ORDERS_TYPE.EARLY_RETURN_OF_DEPENDENTS, + }), + }), + ); + }); + }); + }); + + describe('Order type: EARLY_RETURN_OF_DEPENDENTS', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('select EARLY_RETURN_OF_DEPENDENTS', async () => { + // create a local copy of order return value and set initial values + const orderQueryReturnValues = JSON.parse(JSON.stringify(useOrdersDocumentQueriesReturnValue)); + orderQueryReturnValues.move = { id: 123, moveCode: 'GLOBAL123', ordersId: 1 }; + orderQueryReturnValues.orders[1].order_type = ORDERS_TYPE.PERMANENT_CHANGE_OF_STATION; + orderQueryReturnValues.orders[1].has_dependents = formatYesNoAPIValue('no'); + + // set return values for mocked functions + useOrdersDocumentQueries.mockReturnValue(orderQueryReturnValues); + getOrder.mockResolvedValue(orderQueryReturnValues); + + // render component + render( + + + , + ); + + // Select EARLY_RETURN_OF_DEPENDENTS from the dropdown + const ordersTypeDropdown = await screen.findByLabelText('Orders type'); + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.EARLY_RETURN_OF_DEPENDENTS); + + // Submit the form + const saveButton = screen.getByRole('button', { name: 'Save' }); + await userEvent.click(saveButton); + + // Verify correct values were passed + await waitFor(() => { + expect(counselingUpdateOrder).toHaveBeenCalledWith( + expect.objectContaining({ + body: expect.objectContaining({ + hasDependents: formatYesNoAPIValue('yes'), + ordersType: ORDERS_TYPE.EARLY_RETURN_OF_DEPENDENTS, + }), + }), + ); + }); + }); + + it('De-select EARLY_RETURN_OF_DEPENDENTS', async () => { + // create a local copy of order return value and set initial values + const orderQueryReturnValues = JSON.parse(JSON.stringify(useOrdersDocumentQueriesReturnValue)); + orderQueryReturnValues.move = { id: 123, moveCode: 'GLOBAL123', ordersId: 1 }; + orderQueryReturnValues.orders[1].order_type = ORDERS_TYPE.EARLY_RETURN_OF_DEPENDENTS; + orderQueryReturnValues.orders[1].has_dependents = formatYesNoAPIValue('yes'); + + // set return values for mocked functions + useOrdersDocumentQueries.mockReturnValue(orderQueryReturnValues); + getOrder.mockResolvedValue(orderQueryReturnValues); + + // render component + render( + + + , + ); + + // De-select EARLY_RETURN_OF_DEPENDENTS from the dropdown + const ordersTypeDropdown = await screen.findByLabelText('Orders type'); + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.PERMANENT_CHANGE_OF_STATION); + + // Submit the form + const saveButton = screen.getByRole('button', { name: 'Save' }); + await userEvent.click(saveButton); + + // Verify correct values were passed + await waitFor(() => { + expect(counselingUpdateOrder).toHaveBeenCalledWith( + expect.objectContaining({ + body: expect.objectContaining({ + hasDependents: formatYesNoAPIValue('yes'), + ordersType: ORDERS_TYPE.PERMANENT_CHANGE_OF_STATION, + }), + }), + ); + }); + }); + + it('select EARLY_RETURN_OF_DEPENDENTS, De-select EARLY_RETURN_OF_DEPENDENTS', async () => { + // create a local copy of order return value and set initial values + const orderQueryReturnValues = JSON.parse(JSON.stringify(useOrdersDocumentQueriesReturnValue)); + orderQueryReturnValues.move = { id: 123, moveCode: 'GLOBAL123', ordersId: 1 }; + orderQueryReturnValues.orders[1].order_type = ORDERS_TYPE.PERMANENT_CHANGE_OF_STATION; + orderQueryReturnValues.orders[1].has_dependents = formatYesNoAPIValue('no'); + + // set return values for mocked functions + useOrdersDocumentQueries.mockReturnValue(orderQueryReturnValues); + getOrder.mockResolvedValue(orderQueryReturnValues); + + // render component + render( + + + , + ); + + // Select EARLY_RETURN_OF_DEPENDENTS and then de-select from the dropdown + const ordersTypeDropdown = await screen.findByLabelText('Orders type'); + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.EARLY_RETURN_OF_DEPENDENTS); + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.LOCAL_MOVE); + + // Submit the form + const saveButton = screen.getByRole('button', { name: 'Save' }); + await userEvent.click(saveButton); + + // Verify correct values were passed + await waitFor(() => { + expect(counselingUpdateOrder).toHaveBeenCalledWith( + expect.objectContaining({ + body: expect.objectContaining({ + hasDependents: formatYesNoAPIValue('no'), + ordersType: ORDERS_TYPE.LOCAL_MOVE, + }), + }), + ); + }); + }); + + it('select EARLY_RETURN_OF_DEPENDENTS, select STUDENT_TRAVEL', async () => { + // create a local copy of order return value and set initial values + const orderQueryReturnValues = JSON.parse(JSON.stringify(useOrdersDocumentQueriesReturnValue)); + orderQueryReturnValues.move = { id: 123, moveCode: 'GLOBAL123', ordersId: 1 }; + orderQueryReturnValues.orders[1].order_type = ORDERS_TYPE.PERMANENT_CHANGE_OF_STATION; + orderQueryReturnValues.orders[1].has_dependents = formatYesNoAPIValue('no'); + + // set return values for mocked functions + useOrdersDocumentQueries.mockReturnValue(orderQueryReturnValues); + getOrder.mockResolvedValue(orderQueryReturnValues); + + // render component + render( + + + , + ); + + // Select EARLY_RETURN_OF_DEPENDENTS and then select STUDENT_TRAVEL from the dropdown + const ordersTypeDropdown = await screen.findByLabelText('Orders type'); + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.EARLY_RETURN_OF_DEPENDENTS); + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.STUDENT_TRAVEL); + + // Submit the form + const saveButton = screen.getByRole('button', { name: 'Save' }); + await userEvent.click(saveButton); + + // Verify correct values were passed + await waitFor(() => { + expect(counselingUpdateOrder).toHaveBeenCalledWith( + expect.objectContaining({ + body: expect.objectContaining({ + hasDependents: formatYesNoAPIValue('yes'), + ordersType: ORDERS_TYPE.STUDENT_TRAVEL, + }), + }), + ); + }); + }); + }); }); From de0976e71d320afdfe58ce22491b7cd1a344ae74 Mon Sep 17 00:00:00 2001 From: JamesHawks224 <146897935+JamesHawks224@users.noreply.github.com> Date: Thu, 19 Dec 2024 18:38:08 +0000 Subject: [PATCH 09/12] add tests for add orders form --- .../AddOrdersForm/AddOrdersForm.test.jsx | 155 +++++++++++++++++- 1 file changed, 154 insertions(+), 1 deletion(-) diff --git a/src/components/Office/AddOrdersForm/AddOrdersForm.test.jsx b/src/components/Office/AddOrdersForm/AddOrdersForm.test.jsx index f6c4f04e22f..43d57b49e46 100644 --- a/src/components/Office/AddOrdersForm/AddOrdersForm.test.jsx +++ b/src/components/Office/AddOrdersForm/AddOrdersForm.test.jsx @@ -6,7 +6,7 @@ import { Provider } from 'react-redux'; import AddOrdersForm from './AddOrdersForm'; import { dropdownInputOptions } from 'utils/formatters'; -import { ORDERS_TYPE_OPTIONS } from 'constants/orders'; +import { ORDERS_TYPE, ORDERS_TYPE_OPTIONS } from 'constants/orders'; import { configureStore } from 'shared/store'; import { isBooleanFlagEnabled } from 'utils/featureFlags'; @@ -126,6 +126,40 @@ describe('CreateMoveCustomerInfo Component', () => { }); }); + it('renders each option for orders type', async () => { + isBooleanFlagEnabled.mockImplementation(() => Promise.resolve(true)); + + const { getByLabelText } = render( + + + , + ); + + const ordersTypeDropdown = getByLabelText('Orders type'); + expect(ordersTypeDropdown).toBeInstanceOf(HTMLSelectElement); + + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.PERMANENT_CHANGE_OF_STATION); + expect(ordersTypeDropdown).toHaveValue(ORDERS_TYPE.PERMANENT_CHANGE_OF_STATION); + + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.LOCAL_MOVE); + expect(ordersTypeDropdown).toHaveValue(ORDERS_TYPE.LOCAL_MOVE); + + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.RETIREMENT); + expect(ordersTypeDropdown).toHaveValue(ORDERS_TYPE.RETIREMENT); + + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.SEPARATION); + expect(ordersTypeDropdown).toHaveValue(ORDERS_TYPE.SEPARATION); + + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.TEMPORARY_DUTY); + expect(ordersTypeDropdown).toHaveValue(ORDERS_TYPE.TEMPORARY_DUTY); + + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.EARLY_RETURN_OF_DEPENDENTS); + expect(ordersTypeDropdown).toHaveValue(ORDERS_TYPE.EARLY_RETURN_OF_DEPENDENTS); + + await userEvent.selectOptions(ordersTypeDropdown, ORDERS_TYPE.STUDENT_TRAVEL); + expect(ordersTypeDropdown).toHaveValue(ORDERS_TYPE.STUDENT_TRAVEL); + }); + it('shows an error message if trying to submit an invalid form', async () => { const { getByRole, findAllByRole, getByLabelText } = render( @@ -194,3 +228,122 @@ describe('AddOrdersForm - OCONUS and Accompanied Tour Test', () => { }); }); }); + +describe('AddOrdersForm - Student Travel, Early Return of Dependents Test', () => { + it('has dependents is yes and disabled when order type is student travel', async () => { + isBooleanFlagEnabled.mockImplementation(() => Promise.resolve(true)); + + render( + + + , + ); + + await userEvent.selectOptions(screen.getByLabelText('Orders type'), ORDERS_TYPE.STUDENT_TRAVEL); + + const hasDependentsYes = screen.getByLabelText('Yes'); + const hasDependentsNo = screen.getByLabelText('No'); + + await waitFor(() => { + expect(hasDependentsYes).toBeChecked(); + expect(hasDependentsYes).toBeDisabled(); + expect(hasDependentsNo).toBeDisabled(); + }); + }); + + it('has dependents is yes and disabled when order type is early return', async () => { + isBooleanFlagEnabled.mockImplementation(() => Promise.resolve(true)); + + render( + + + , + ); + + await userEvent.selectOptions(screen.getByLabelText('Orders type'), ORDERS_TYPE.EARLY_RETURN_OF_DEPENDENTS); + const hasDependentsYes = screen.getByLabelText('Yes'); + const hasDependentsNo = screen.getByLabelText('No'); + + await waitFor(() => { + expect(hasDependentsYes).toBeChecked(); + expect(hasDependentsYes).toBeDisabled(); + expect(hasDependentsNo).toBeDisabled(); + }); + }); + + it('has dependents becomes disabled and then re-enabled for order type student travel', async () => { + isBooleanFlagEnabled.mockImplementation(() => Promise.resolve(true)); + + render( + + + , + ); + + await userEvent.selectOptions(screen.getByLabelText('Orders type'), ORDERS_TYPE.PERMANENT_CHANGE_OF_STATION); + + const hasDependentsYesPermChg = screen.getByLabelText('Yes'); + const hasDependentsNoPermChg = screen.getByLabelText('No'); + + await waitFor(() => { + expect(hasDependentsYesPermChg).not.toBeChecked(); + expect(hasDependentsYesPermChg).toBeEnabled(); + expect(hasDependentsNoPermChg).not.toBeChecked(); + expect(hasDependentsNoPermChg).toBeEnabled(); + }); + + // set order type to value that disables and defaults "has dependents" + await userEvent.selectOptions(screen.getByLabelText('Orders type'), ORDERS_TYPE.STUDENT_TRAVEL); + + // set order type to value the re-enables "has dependents" + await userEvent.selectOptions(screen.getByLabelText('Orders type'), ORDERS_TYPE.LOCAL_MOVE); + + const hasDependentsYesLocalMove = screen.getByLabelText('Yes'); + const hasDependentsNoLocalMove = screen.getByLabelText('No'); + + await waitFor(() => { + expect(hasDependentsYesLocalMove).not.toBeChecked(); + expect(hasDependentsYesLocalMove).toBeEnabled(); + expect(hasDependentsNoLocalMove).not.toBeChecked(); + expect(hasDependentsNoLocalMove).toBeEnabled(); + }); + }); + + it('has dependents becomes disabled and then re-enabled for order type early return', async () => { + isBooleanFlagEnabled.mockImplementation(() => Promise.resolve(true)); + + render( + + + , + ); + + await userEvent.selectOptions(screen.getByLabelText('Orders type'), ORDERS_TYPE.PERMANENT_CHANGE_OF_STATION); + + const hasDependentsYesPermChg = screen.getByLabelText('Yes'); + const hasDependentsNoPermChg = screen.getByLabelText('No'); + + await waitFor(() => { + expect(hasDependentsYesPermChg).not.toBeChecked(); + expect(hasDependentsYesPermChg).toBeEnabled(); + expect(hasDependentsNoPermChg).not.toBeChecked(); + expect(hasDependentsNoPermChg).toBeEnabled(); + }); + + // set order type to value that disables and defaults "has dependents" + await userEvent.selectOptions(screen.getByLabelText('Orders type'), ORDERS_TYPE.EARLY_RETURN_OF_DEPENDENTS); + + // set order type to value the re-enables "has dependents" + await userEvent.selectOptions(screen.getByLabelText('Orders type'), ORDERS_TYPE.LOCAL_MOVE); + + const hasDependentsYesLocalMove = screen.getByLabelText('Yes'); + const hasDependentsNoLocalMove = screen.getByLabelText('No'); + + await waitFor(() => { + expect(hasDependentsYesLocalMove).not.toBeChecked(); + expect(hasDependentsYesLocalMove).toBeEnabled(); + expect(hasDependentsNoLocalMove).not.toBeChecked(); + expect(hasDependentsNoLocalMove).toBeEnabled(); + }); + }); +}); From 7bc8a3529f36f3cbba305c238c15e3e28129db10 Mon Sep 17 00:00:00 2001 From: JamesHawks224 <146897935+JamesHawks224@users.noreply.github.com> Date: Fri, 3 Jan 2025 17:50:33 +0000 Subject: [PATCH 10/12] updated test cases --- migrations/app/migrations_manifest.txt | 2 +- .../AddOrdersForm/AddOrdersForm.test.jsx | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/migrations/app/migrations_manifest.txt b/migrations/app/migrations_manifest.txt index 2b66fac7861..5c5d0b075f2 100644 --- a/migrations/app/migrations_manifest.txt +++ b/migrations/app/migrations_manifest.txt @@ -1051,9 +1051,9 @@ 20241203024453_add_ppm_max_incentive_column.up.sql 20241204155919_update_ordering_proc.up.sql 20241204210208_retroactive_update_of_ppm_max_and_estimated_incentives_prd.up.sql -20241218201833_add_PPPO_BASE_ELIZABETH.up.sql 20241217163231_update_duty_locations_bad_zips.up.sql 20241217180136_add_AK_zips_to_zip3_distances.up.sql +20241218201833_add_PPPO_BASE_ELIZABETH.up.sql 20241220171035_add_additional_AK_zips_to_zip3_distances.up.sql 20241227153723_remove_empty_string_emplid_values.up.sql 20241230190638_remove_AK_zips_from_zip3.up.sql diff --git a/src/components/Office/AddOrdersForm/AddOrdersForm.test.jsx b/src/components/Office/AddOrdersForm/AddOrdersForm.test.jsx index 43d57b49e46..e2698ead501 100644 --- a/src/components/Office/AddOrdersForm/AddOrdersForm.test.jsx +++ b/src/components/Office/AddOrdersForm/AddOrdersForm.test.jsx @@ -295,6 +295,15 @@ describe('AddOrdersForm - Student Travel, Early Return of Dependents Test', () = // set order type to value that disables and defaults "has dependents" await userEvent.selectOptions(screen.getByLabelText('Orders type'), ORDERS_TYPE.STUDENT_TRAVEL); + const hasDependentsYesStudent = screen.getByLabelText('Yes'); + const hasDependentsNoStudent = screen.getByLabelText('No'); + + await waitFor(() => { + expect(hasDependentsYesStudent).toBeChecked(); + expect(hasDependentsYesStudent).toBeDisabled(); + expect(hasDependentsNoStudent).toBeDisabled(); + }); + // set order type to value the re-enables "has dependents" await userEvent.selectOptions(screen.getByLabelText('Orders type'), ORDERS_TYPE.LOCAL_MOVE); @@ -333,6 +342,15 @@ describe('AddOrdersForm - Student Travel, Early Return of Dependents Test', () = // set order type to value that disables and defaults "has dependents" await userEvent.selectOptions(screen.getByLabelText('Orders type'), ORDERS_TYPE.EARLY_RETURN_OF_DEPENDENTS); + const hasDependentsYesEarly = screen.getByLabelText('Yes'); + const hasDependentsNoEarly = screen.getByLabelText('No'); + + await waitFor(() => { + expect(hasDependentsYesEarly).toBeChecked(); + expect(hasDependentsYesEarly).toBeDisabled(); + expect(hasDependentsNoEarly).toBeDisabled(); + }); + // set order type to value the re-enables "has dependents" await userEvent.selectOptions(screen.getByLabelText('Orders type'), ORDERS_TYPE.LOCAL_MOVE); From 1272969f935d1194da8f06aab6c955ccaa303d12 Mon Sep 17 00:00:00 2001 From: JamesHawks224 <146897935+JamesHawks224@users.noreply.github.com> Date: Wed, 8 Jan 2025 16:50:13 +0000 Subject: [PATCH 11/12] undo circleci config change for exp env --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 62e8c1921d6..0fd794cb1e1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -43,7 +43,7 @@ references: dp3-branch: &dp3-branch integrationTesting # MUST BE ONE OF: loadtest, demo, exp. # These are used to pull in env vars so the spelling matters! - dp3-env: &dp3-env loadtest + dp3-env: &dp3-env placeholder_env # set integration-ignore-branch to the branch if you want to IGNORE # integration tests, or `placeholder_branch_name` if you do want to From 290b675adb985f645326aae3e2edeb4dc7277769 Mon Sep 17 00:00:00 2001 From: JamesHawks224 <146897935+JamesHawks224@users.noreply.github.com> Date: Thu, 9 Jan 2025 16:51:35 +0000 Subject: [PATCH 12/12] Revert "undo circleci config change for exp env" This reverts commit 1272969f935d1194da8f06aab6c955ccaa303d12. --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 0fd794cb1e1..62e8c1921d6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -43,7 +43,7 @@ references: dp3-branch: &dp3-branch integrationTesting # MUST BE ONE OF: loadtest, demo, exp. # These are used to pull in env vars so the spelling matters! - dp3-env: &dp3-env placeholder_env + dp3-env: &dp3-env loadtest # set integration-ignore-branch to the branch if you want to IGNORE # integration tests, or `placeholder_branch_name` if you do want to