This commit is contained in:
Zeeshaun
2026-03-17 11:09:46 -05:00
parent bd1a9744ad
commit 6e7edcfe1b
332 changed files with 64174 additions and 0 deletions
@@ -0,0 +1,120 @@
import { shallow, ShallowWrapper } from "enzyme";
import moment from "moment";
import React from "react";
import * as adalConfig from "../../adalConfig";
import { IRepoAccount } from "../../services/service-types/RepoAccountTypes";
import AccountPageHeader from "./AccountPageHeader";
describe("AccountPageHeader", () => {
var spy: jest.SpyInstance;
let wrapper: ShallowWrapper;
const selectedAccount: IRepoAccount = {
repoId: 476,
origAccountTypeCode: "",
accountNo: "123456",
status: "string",
memberNo: 1453,
loanNo: 0,
accountTypeCode: "acct-type-code",
branch: 0,
balance: 0,
dueToPayDate: moment("1941-12-07"),
o4RDate: moment("1945-05-07"),
dateFirstDelinquent: moment("1918-11-11"),
delinquentAmount: 0,
daysDelinquent: 101,
paidSkipAmount: 0,
subStatus: "string",
requiredPaymentAmount: 3.14,
currentDelinquentAmount: 19.45,
lstPmtAmt: 1912.00000,
origAmount: 42,
lastPaymentDate: moment("1865-04-15"),
dateFirstIntellect: moment("1963-11-22"),
primaryIndividualId: "string",
manualRedemptionDate: moment("1812-06-12"),
borrowers: [{
repoId: 1,
individualId: "1",
ownershipType: 6,
individualName: "John Doe",
}],
collaterals: [],
repoStatusChanges: [],
};
let updatedBackButtonValue: boolean;
beforeEach(() => {
updatedBackButtonValue = false;
wrapper = shallow(
<AccountPageHeader
accountNoHeader="abcd1234"
selectedRepoAccount={selectedAccount}
allowedStatusChanges={[]}
onStatusChange={() => {}}
onBackButtonClicked={() => updatedBackButtonValue = true}
putRepoAccount={()=>{}}
/>
);
spy = jest.spyOn(adalConfig, "hasAdminRole").mockReturnValueOnce(false).mockReturnValueOnce(true);
});
it ("Renders Member Name", () => {
const memberName = wrapper.find(`[data-test='account-page-header-member-name']`);
expect(memberName.length).toBe(1);
expect(memberName.text()).toEqual("John Doe");
});
it ("Renders Missing When There is No Selected Account", () => {
wrapper.setProps({
selectedRepoAccount: undefined,
});
const memberName = wrapper.find(`[data-test='account-page-header-member-name']`);
expect(memberName.length).toBe(1);
expect(memberName.text()).toEqual("Missing");
});
it ("Back Button Callback Works", () => {
const backBtn = wrapper.find(`[data-test='account-page-header-back-btn']`);
expect(backBtn.length).toBe(1);
expect(updatedBackButtonValue).toBe(false);
backBtn.simulate("click");
expect(updatedBackButtonValue).toBe(true);
});
it ("Does Not Render \"(Closed)\" Next to Name When Account is Open", () => {
const closedAccountLabel = wrapper.find(`[data-test='closed-account-label']`);
expect(closedAccountLabel.length).toBe(0);
});
it ("Renders \"(Closed)\" Next to Name When Account is Closed", () => {
wrapper = wrapper.setProps({
selectedRepoAccount: {
...selectedAccount,
dateClosed: moment("1941-12-07")
}
});
var closedAccountLabel = wrapper.find(`[data-test='closed-account-label']`);
expect(closedAccountLabel.length).toBe(1);
closedAccountLabel = wrapper.find(`[data-test='reopen-button']`);
expect(closedAccountLabel.length).toBe(0);
});
it ("Renders \"Repopen\" button Next to Name When Account is Closed and user is Admin", () => {
wrapper = wrapper.setProps({
selectedRepoAccount: {
...selectedAccount,
dateClosed: moment("1941-12-07")
}
});
var closedAccountLabel = wrapper.find(`[data-test='closed-account-label']`);
expect(closedAccountLabel.length).toBe(1);
closedAccountLabel = wrapper.find(`[data-test='reopen-button']`);
expect(closedAccountLabel.length).toBe(1);
});
});
@@ -0,0 +1,78 @@
import React from 'react';
import { IAllowedStatusChange } from '../../reducers/SettingsReducer';
import StatusChangeSelector from '../status-change-selector/StatusChangeSelector';
import RepoAccountService from '../../services/RepoAccountService';
import { IRepoAccount } from '../../services/service-types/RepoAccountTypes';
import * as adalConfig from "../../adalConfig";
const cloneDeep = require("lodash.clonedeep");
interface AccountPageHeaderProps {
accountNoHeader: string;
selectedRepoAccount?: IRepoAccount;
allowedStatusChanges: IAllowedStatusChange[];
onBackButtonClicked: () => any;
onStatusChange: (status: string) => any;
putRepoAccount: (repoAccount: IRepoAccount) => any;
}
const AccountPageHeader: React.FC<AccountPageHeaderProps> = (props) => {
const isAccountClosed = RepoAccountService.IsAccountClosed(props.selectedRepoAccount);
const reopenAccountClicked = () => {
const shouldReOpenAccount = window.confirm("Are you sure you want to reopen this account? This can have unexpected side effects. Use Caution with accounts that have already been refunded.");
if(shouldReOpenAccount) {
reopenClosedAccount();
}
}
const reopenClosedAccount = () => {
if (!props.selectedRepoAccount) {
console.warn("Cannot close account when the Selected Account is not loaded. Returning.");
return;
}
const copiedRepoAccount = cloneDeep(props.selectedRepoAccount) as IRepoAccount;
copiedRepoAccount.dateClosed = undefined;
props.putRepoAccount(copiedRepoAccount);
}
return (
<div className={'back-navigation-header' + (isAccountClosed ? ' header-closed' : '')}>
<div className="row form-inline">
<div className="col-sm">
<h5>
<i className="fa fa-chevron-left text-primary" aria-hidden="true" onClick={props.onBackButtonClicked} data-test="account-page-header-back-btn"></i>
Account: { props.accountNoHeader }
{ isAccountClosed ?
(
<span className="text-danger" data-test="closed-account-label"> (CLOSED)</span>
)
: null}
{ isAccountClosed && adalConfig.hasAdminRole() ?
(
<button className="form-input btn btn-danger btn-sm ml-2" data-test="reopen-button" onClick={() => reopenAccountClicked()}>Reopen This Account</button>
)
: null }
</h5>
</div>
<div className="col-sm">
<p><b data-test="account-page-header-member-name">{RepoAccountService.GetMemberName(props.selectedRepoAccount)}</b></p>
</div>
<div className="col-sm">
<StatusChangeSelector
allowedStatusChanges={props.allowedStatusChanges}
onStatusChange={props.onStatusChange}
selectedRepoAccount={props.selectedRepoAccount}
/>
</div>
</div>
<hr></hr>
</div>
);
}
export default AccountPageHeader;