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 (
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