Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

INTEGRATION - BP-18060 - Wire up AOA packet link customer/office (PART 2 - FIX CUSTOMER ISSUE) #12182

Merged
merged 36 commits into from
Mar 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
ea2dda5
temp update to deploy to exp
MInthavongsay Feb 28, 2024
203b9c9
temp change to resolve db migration for exp deployment. must undo bef…
MInthavongsay Feb 28, 2024
77a64a3
part 2 temp change to resolve db migration for exp deployment. must u…
MInthavongsay Feb 28, 2024
4bbd021
part 3 temp change to resolve db migration for exp deployment. must u…
MInthavongsay Feb 28, 2024
5104175
part 3 temp change to resolve db migration for exp deployment. must u…
MInthavongsay Feb 28, 2024
85ea6d0
Create main-to-integration-sync.yml
cameroncaci Mar 6, 2024
7b066ff
create new shared component for download link. changed from link to b…
MInthavongsay Mar 6, 2024
1480da1
Update main-to-integration-sync.yml
cameroncaci Mar 6, 2024
11e784c
Merge branch 'main' into B-18060-UI-Download-AOA-Packet-Customer
MInthavongsay Mar 6, 2024
bf8d38d
merged main
MInthavongsay Mar 6, 2024
7c91c5a
restore config after exp
MInthavongsay Mar 6, 2024
d845a11
Merge branch 'B-18060-UI-Download-AOA-Packet-Customer' into BP-18060-…
MInthavongsay Mar 6, 2024
af26544
18060 merge
MInthavongsay Mar 6, 2024
66ef7b6
Merge branch 'main' into sync-integration-workflow
deandreJones Mar 7, 2024
8928001
Merge branch 'main' into sync-integration-workflow
deandreJones Mar 7, 2024
fbd0920
Merge branch 'main' into sync-integration-workflow
deandreJones Mar 8, 2024
ba7bec6
Added AsyncPacketDownloadLink component to MoveHome page for compatab…
ajlusk Mar 8, 2024
b37404d
Merge branch 'integrationTesting' into BP-18060-INTEGRATION
ajlusk Mar 8, 2024
0791b93
Update main-to-integration-sync.yml
deandreJones Mar 11, 2024
d3b1d02
Merge branch 'main' into MAIN-B-18753-Move-History-Log-for-Service-Co…
taeJungCaci Mar 11, 2024
3e66254
Merge pull request #12205 from transcom/MAIN-B-18753-Move-History-Log…
JamesHawks224 Mar 11, 2024
c5c361a
Began tests for AOA download on MoveHome.jsx
ajlusk Mar 11, 2024
e2b80cd
Merge branch 'main' into sync-integration-workflow
deandreJones Mar 11, 2024
f40dcf7
Merge pull request #12181 from transcom/sync-integration-workflow
deandreJones Mar 11, 2024
4995571
Revert "Began tests for AOA download on MoveHome.jsx"
ajlusk Mar 11, 2024
878edbb
Revert "Added AsyncPacketDownloadLink component to MoveHome page for …
ajlusk Mar 11, 2024
555b415
Implement new HomePage for MultiMove to use new download component
MInthavongsay Mar 12, 2024
fa80b18
Merge branch 'main' into B-18060-UI-Download-AOA-Packet-Customer
MInthavongsay Mar 12, 2024
942f4d4
Added AsyncPacketDownloadLink component to MoveHome page for compatab…
ajlusk Mar 12, 2024
c1f3a1d
Merge branch 'B-18060-UI-Download-AOA-Packet-Customer' into BP-18060-…
ajlusk Mar 12, 2024
afb08fa
Merge branch 'integrationTesting' into BP-18060-INTEGRATION
MInthavongsay Mar 12, 2024
a1f07b9
Merge branch 'B-18060-UI-Download-AOA-Packet-Customer' into BP-18060-…
MInthavongsay Mar 12, 2024
2dc8349
Merge branch 'BP-18060-INTEGRATION' of github.com:transcom/mymove int…
MInthavongsay Mar 12, 2024
c9a99c5
Merge branch 'integrationTesting' into BP-18060-INTEGRATION
r-mettler Mar 12, 2024
c03a7c5
Merge branch 'integrationTesting' into BP-18060-INTEGRATION
r-mettler Mar 12, 2024
57ca8cb
Merge branch 'integrationTesting' into BP-18060-INTEGRATION
r-mettler Mar 12, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .github/workflows/main-to-integration-sync.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Integration Testing Syncing

on:
pull_request:
branches: main
types: closed
jobs:
merge-main-to-int-testing:
if: github.event.pull_request.merged == true
timeout-minutes: 2
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- name: Set Git config
run: |
git config --local user.email "actions@github.com"
git config --local user.name "Github Actions"
- name: Merge main to integrationTesting-Dummy
run: |
git fetch --unshallow
git checkout integrationTesting-Dummy
git pull
git merge --no-ff master -m "Auto-merge main to integrationTesting-Dummy"
git push
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
-- Adds new columns to shipment address update table
ALTER TABLE shipment_address_updates
ADD COLUMN sit_original_address_id uuid DEFAULT NULL,
ADD COLUMN old_sit_distance_between INTEGER DEFAULT NULL,
ADD COLUMN new_sit_distance_between INTEGER DEFAULT NULL;
ADD COLUMN IF NOT EXISTS sit_original_address_id uuid DEFAULT NULL,
ADD COLUMN IF NOT EXISTS old_sit_distance_between INTEGER DEFAULT NULL,
ADD COLUMN IF NOT EXISTS new_sit_distance_between INTEGER DEFAULT NULL;
-- ADD COLUMN sit_original_address_id uuid DEFAULT NULL,
-- ADD COLUMN old_sit_distance_between INTEGER DEFAULT NULL,
-- ADD COLUMN new_sit_distance_between INTEGER DEFAULT NULL;

-- Add foreign key constraint
ALTER TABLE shipment_address_updates
ADD CONSTRAINT fk_sit_original_address
FOREIGN KEY (sit_original_address_id) REFERENCES addresses(id);
-- ALTER TABLE shipment_address_updates
-- ADD CONSTRAINT fk_sit_original_address
-- FOREIGN KEY (sit_original_address_id) REFERENCES addresses(id);

-- Comments on new columns
COMMENT on COLUMN shipment_address_updates.sit_original_address_id IS 'SIT address at the original time of SIT approval';
COMMENT on COLUMN shipment_address_updates.old_sit_distance_between IS 'Distance between original SIT address and previous shipment destination address';
COMMENT on COLUMN shipment_address_updates.new_sit_distance_between IS 'Distance between original SIT address and new shipment destination address';
-- COMMENT on COLUMN shipment_address_updates.sit_original_address_id IS 'SIT address at the original time of SIT approval';
-- COMMENT on COLUMN shipment_address_updates.old_sit_distance_between IS 'Distance between original SIT address and previous shipment destination address';
-- COMMENT on COLUMN shipment_address_updates.new_sit_distance_between IS 'Distance between original SIT address and new shipment destination address';

--SOME COMMENT
22 changes: 7 additions & 15 deletions src/components/Office/DefinitionLists/PPMShipmentInfoList.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import React from 'react';
import * as PropTypes from 'prop-types';
import classNames from 'classnames';
import { Link } from 'react-router-dom';

import shipmentDefinitionListsStyles from './ShipmentDefinitionLists.module.scss';

import styles from 'styles/descriptionList.module.scss';
import { formatDate } from 'shared/dates';
import AsyncPacketDownloadLink from 'shared/AsyncPacketDownloadLink/AsyncPacketDownloadLink';
import { ShipmentShape } from 'types/shipment';
import { formatCentsTruncateWhole, formatWeight } from 'utils/formatters';
import { setFlagStyles, setDisplayFlags, getDisplayFlags, fieldValidationShape } from 'utils/displayFlags';
Expand All @@ -15,7 +15,6 @@ import affiliation from 'content/serviceMemberAgencies';
import { permissionTypes } from 'constants/permissions';
import Restricted from 'components/Restricted/Restricted';
import { downloadPPMAOAPacket } from 'services/ghcApi';
import { downloadPPMAOAPacketOnSuccessHandler } from 'utils/download';

const PPMShipmentInfoList = ({
className,
Expand Down Expand Up @@ -72,16 +71,6 @@ const PPMShipmentInfoList = ({
return (isExpanded || elementFlags.alwaysShow) && !elementFlags.hideRow;
};

const handlePPMAOAPacketDownloadClick = (shipmentId) => {
downloadPPMAOAPacket(shipmentId)
.then((response) => {
downloadPPMAOAPacketOnSuccessHandler(response);
})
.catch(() => {
onErrorModalToggle();
});
};

const expectedDepartureDateElementFlags = getDisplayFlags('expectedDepartureDate');
const expectedDepartureDateElement = (
<div className={expectedDepartureDateElementFlags.classes}>
Expand Down Expand Up @@ -201,9 +190,12 @@ const PPMShipmentInfoList = ({
<dt>AOA Packet</dt>
<dd data-testid="aoaPacketDownload">
<p className={styles.downloadLink}>
<Link onClick={() => handlePPMAOAPacketDownloadClick(shipment?.ppmShipment.id)}>
Download AOA Paperwork (PDF)
</Link>
<AsyncPacketDownloadLink
id={shipment?.ppmShipment?.id}
label="Download AOA Paperwork (PDF)"
asyncRetrieval={downloadPPMAOAPacket}
onFailure={onErrorModalToggle}
/>
</p>
</dd>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,12 @@ import { MockProviders } from 'testUtils';
import { permissionTypes } from 'constants/permissions';
import { ADVANCE_STATUSES } from 'constants/ppms';
import { downloadPPMAOAPacket } from 'services/ghcApi';
import { downloadPPMAOAPacketOnSuccessHandler } from 'utils/download';

jest.mock('services/ghcApi', () => ({
...jest.requireActual('services/ghcApi'),
downloadPPMAOAPacket: jest.fn(),
}));

jest.mock('utils/download', () => ({
...jest.requireActual('utils/download'),
downloadPPMAOAPacketOnSuccessHandler: jest.fn(),
}));

afterEach(() => {
jest.resetAllMocks();
});
Expand Down Expand Up @@ -91,7 +85,6 @@ describe('PPMShipmentInfoList', () => {

await waitFor(() => {
expect(downloadPPMAOAPacket).toHaveBeenCalledTimes(1);
expect(downloadPPMAOAPacketOnSuccessHandler).toHaveBeenCalledTimes(1);
});
});

Expand All @@ -117,7 +110,6 @@ describe('PPMShipmentInfoList', () => {

await waitFor(() => {
expect(downloadPPMAOAPacket).toHaveBeenCalledTimes(1);
expect(downloadPPMAOAPacketOnSuccessHandler).toHaveBeenCalledTimes(0);
expect(onErrorHandler).toHaveBeenCalledTimes(1);
});
});
Expand Down
20 changes: 15 additions & 5 deletions src/pages/MyMove/Home/MoveHome.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ import {
HelperPPMCloseoutSubmitted,
} from './HomeHelpers';

import AsyncPacketDownloadLink from 'shared/AsyncPacketDownloadLink/AsyncPacketDownloadLink';
import DownloadAOAErrorModal from 'shared/DownloadAOAErrorModal/DownloadAOAErrorModal';
import ConnectedDestructiveShipmentConfirmationModal from 'components/ConfirmationModals/DestructiveShipmentConfirmationModal';
import Contact from 'components/Customer/Home/Contact';
import DocsUploaded from 'components/Customer/Home/DocsUploaded';
Expand All @@ -30,7 +32,7 @@ import MOVE_STATUSES from 'constants/moves';
import { customerRoutes } from 'constants/routes';
import { ppmShipmentStatuses, shipmentTypes } from 'constants/shipments';
import ConnectedFlashMessage from 'containers/FlashMessage/FlashMessage';
import { deleteMTOShipment, getAllMoves, getMTOShipmentsForMove } from 'services/internalApi';
import { deleteMTOShipment, getAllMoves, getMTOShipmentsForMove, downloadPPMAOAPacket } from 'services/internalApi';
import { withContext } from 'shared/AppContext';
import { SHIPMENT_OPTIONS } from 'shared/constants';
import {
Expand Down Expand Up @@ -79,6 +81,7 @@ const MoveHome = ({ serviceMemberMoves, isProfileComplete, serviceMember, signed
const [targetShipmentId, setTargetShipmentId] = useState(null);
const [showDeleteSuccessAlert, setShowDeleteSuccessAlert] = useState(false);
const [showDeleteErrorAlert, setShowDeleteErrorAlert] = useState(false);
const [showDownloadPPMAOAPaperworkErrorAlert, setShowDownloadPPMAOAPaperworkErrorAlert] = useState(false);

// fetching all move data on load since this component is dependent on that data
// this will run each time the component is loaded/accessed
Expand Down Expand Up @@ -371,6 +374,10 @@ const MoveHome = ({ serviceMemberMoves, isProfileComplete, serviceMember, signed
);
};

const toggleDownloadAOAErrorModal = () => {
setShowDownloadPPMAOAPaperworkErrorAlert(!showDownloadPPMAOAPaperworkErrorAlert);
};

// early return if loading user/service member
if (!serviceMember) {
return (
Expand Down Expand Up @@ -414,6 +421,7 @@ const MoveHome = ({ serviceMemberMoves, isProfileComplete, serviceMember, signed
submitText="Yes, Delete"
closeText="No, Keep It"
/>
<DownloadAOAErrorModal isOpen={showDownloadPPMAOAPaperworkErrorAlert} closeModal={toggleDownloadAOAErrorModal} />
<div className={styles.homeContainer}>
<header data-testid="customer-header" className={styles['customer-header']}>
<div className={`usa-prose grid-container ${styles['grid-container']}`}>
Expand Down Expand Up @@ -587,11 +595,13 @@ const MoveHome = ({ serviceMemberMoves, isProfileComplete, serviceMember, signed
{` ${shipmentNumber} `}
</strong>
{shipment?.ppmShipment?.advanceStatus === ADVANCE_STATUSES.APPROVED.apiValue && (
// TODO: B-18060 will add link to method that will create the AOA packet and return for download
<p className={styles.downloadLink}>
<a href="">
<span>Download AOA Paperwork (PDF)</span>
</a>
<AsyncPacketDownloadLink
id={shipment?.ppmShipment?.id}
label="Download AOA Paperwork (PDF)"
asyncRetrieval={downloadPPMAOAPacket}
onFailure={toggleDownloadAOAErrorModal}
/>
</p>
)}
{shipment?.ppmShipment?.advanceStatus === ADVANCE_STATUSES.REJECTED.apiValue && (
Expand Down
39 changes: 38 additions & 1 deletion src/pages/MyMove/Home/MoveHome.test.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@
import React from 'react';
import { v4 } from 'uuid';
import { mount } from 'enzyme';
import { waitFor } from '@testing-library/react';

import MoveHome from './MoveHome';

import { customerRoutes } from 'constants/routes';
import { MockProviders } from 'testUtils';
import { downloadPPMAOAPacket } from 'services/internalApi';

jest.mock('containers/FlashMessage/FlashMessage', () => {
const MockFlash = () => <div>Flash message</div>;
Expand All @@ -29,6 +31,7 @@ jest.mock('services/internalApi', () => ({
deleteMTOShipment: jest.fn(),
getMTOShipmentsForMove: jest.fn(),
getAllMoves: jest.fn().mockImplementation(() => Promise.resolve()),
downloadPPMAOAPacket: jest.fn().mockImplementation(() => Promise.resolve()),
}));

const props = {
Expand Down Expand Up @@ -794,6 +797,8 @@ const defaultPropsAmendedOrdersWithAdvanceRequested = {
uploadedAmendedOrderDocuments: [],
};

const expectedPpmShipmentID = 'd18b865f-fd12-495d-91fa-65b53d72705a';

const defaultPropsWithAdvanceAndPPMApproved = {
...props,
serviceMemberMoves: {
Expand Down Expand Up @@ -829,7 +834,7 @@ const defaultPropsWithAdvanceAndPPMApproved = {
hasProGear: false,
hasReceivedAdvance: null,
hasRequestedAdvance: true,
id: 'd18b865f-fd12-495d-91fa-65b53d72705a',
id: expectedPpmShipmentID,
movingExpenses: [],
pickupPostalCode: '74133',
proGearWeight: null,
Expand Down Expand Up @@ -1248,5 +1253,37 @@ describe('Home component', () => {
expect(confirmMoveRequest.prop('actionBtnDisabled')).toBeFalsy();
expect(confirmMoveRequest.prop('actionBtnLabel')).toBe('Review your request');
});

it('Download AOA Paperwork - success', async () => {
const buttonId = `button[data-testid="asyncPacketDownloadLink${expectedPpmShipmentID}"]`;
expect(wrapper.find(buttonId).length).toBe(1);
const mockResponse = {
ok: true,
headers: {
'content-disposition': 'filename="test.pdf"',
},
status: 200,
data: null,
};
downloadPPMAOAPacket.mockImplementation(() => Promise.resolve(mockResponse));
await wrapper.find(buttonId).simulate('click');
await waitFor(() => {
expect(downloadPPMAOAPacket).toHaveBeenCalledTimes(1);
});
});

it('Download AOA Paperwork - failure', async () => {
const buttonId = `button[data-testid="asyncPacketDownloadLink${expectedPpmShipmentID}"]`;
expect(wrapper.find(buttonId).length).toBe(1);
downloadPPMAOAPacket.mockRejectedValue({
response: { body: { title: 'Error title', detail: 'Error detail' } },
});
await wrapper.find(buttonId).simulate('click');
await waitFor(() => {
// scrape text from error modal
expect(wrapper.text()).toContain('Something went wrong downloading PPM AOA paperwork');
expect(downloadPPMAOAPacket).toHaveBeenCalledTimes(1);
});
});
});
});
26 changes: 8 additions & 18 deletions src/pages/MyMove/Home/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { arrayOf, bool, func, node, shape, string } from 'prop-types';
import moment from 'moment';
import { connect } from 'react-redux';
import { Alert, Button } from '@trussworks/react-uswds';
import { generatePath, Link } from 'react-router-dom';
import { generatePath } from 'react-router-dom';

import styles from './Home.module.scss';
import {
Expand All @@ -16,6 +16,7 @@ import {
HelperPPMCloseoutSubmitted,
} from './HomeHelpers';

import AsyncPacketDownloadLink from 'shared/AsyncPacketDownloadLink/AsyncPacketDownloadLink';
import ConnectedDestructiveShipmentConfirmationModal from 'components/ConfirmationModals/DestructiveShipmentConfirmationModal';
import Contact from 'components/Customer/Home/Contact';
import DocsUploaded from 'components/Customer/Home/DocsUploaded';
Expand Down Expand Up @@ -52,7 +53,6 @@ import { MoveShape, OrdersShape, UploadShape } from 'types/customerShapes';
import { ShipmentShape } from 'types/shipment';
import { formatCustomerDate, formatWeight } from 'utils/formatters';
import { isPPMAboutInfoComplete, isPPMShipmentComplete, isWeightTicketComplete } from 'utils/shipments';
import { downloadPPMAOAPacketOnSuccessHandler } from 'utils/download';
import withRouter from 'utils/routing';
import { RouterShape } from 'types/router';
import { ADVANCE_STATUSES } from 'constants/ppms';
Expand Down Expand Up @@ -369,17 +369,6 @@ export class Home extends Component {
}));
};

// eslint-disable-next-line class-methods-use-this
handlePPMAOAPacketDownloadClick = (shipmentId) => {
downloadPPMAOAPacket(shipmentId)
.then((response) => {
downloadPPMAOAPacketOnSuccessHandler(response);
})
.catch(() => {
this.toggleDownloadAOAErrorModal();
});
};

// eslint-disable-next-line class-methods-use-this
sortAllShipments = (mtoShipments) => {
const allShipments = JSON.parse(JSON.stringify(mtoShipments));
Expand Down Expand Up @@ -637,11 +626,12 @@ export class Home extends Component {
</strong>
{shipment?.ppmShipment?.advanceStatus === ADVANCE_STATUSES.APPROVED.apiValue && (
<p className={styles.downloadLink}>
<Link
onClick={() => this.handlePPMAOAPacketDownloadClick(shipment?.ppmShipment.id)}
>
Download AOA Paperwork (PDF)
</Link>
<AsyncPacketDownloadLink
id={shipment?.ppmShipment?.id}
label="Download AOA Paperwork (PDF)"
asyncRetrieval={downloadPPMAOAPacket}
onFailure={this.toggleDownloadAOAErrorModal}
/>
</p>
)}
{shipment?.ppmShipment?.advanceStatus === ADVANCE_STATUSES.REJECTED.apiValue && (
Expand Down
8 changes: 0 additions & 8 deletions src/pages/MyMove/Home/index.test.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import {
createSubmittedPPMShipment,
} from 'utils/test/factories/ppmShipment';
import { downloadPPMAOAPacket } from 'services/internalApi';
import { downloadPPMAOAPacketOnSuccessHandler } from 'utils/download';

jest.mock('containers/FlashMessage/FlashMessage', () => {
const MockFlash = () => <div>Flash message</div>;
Expand All @@ -43,11 +42,6 @@ jest.mock('services/internalApi', () => ({
downloadPPMAOAPacket: jest.fn(),
}));

jest.mock('utils/download', () => ({
...jest.requireActual('utils/download'),
downloadPPMAOAPacketOnSuccessHandler: jest.fn(),
}));

const defaultProps = {
serviceMember: {
id: v4(),
Expand Down Expand Up @@ -661,7 +655,6 @@ describe('Home component', () => {
screen.getByText(/Something went wrong downloading PPM AOA paperwork./, { exact: false }),
).toBeInTheDocument();
expect(downloadPPMAOAPacket).toHaveBeenCalledTimes(1);
expect(downloadPPMAOAPacketOnSuccessHandler).toHaveBeenCalledTimes(0);
});
});

Expand Down Expand Up @@ -694,7 +687,6 @@ describe('Home component', () => {

await waitFor(() => {
expect(downloadPPMAOAPacket).toHaveBeenCalledTimes(1);
expect(downloadPPMAOAPacketOnSuccessHandler).toHaveBeenCalledTimes(1);
});
});
});
Expand Down
Loading