feat(TEAMMSBMOB-22636): added currency transfer list page
This commit is contained in:
@@ -40,6 +40,7 @@ enum FEATURE_TOGGLE_NAMES {
|
||||
LOCAL_QUALIFIED_SIGN_IBMSB = 'localQualifiedSignIBMSB',
|
||||
IMPORT_PAYMENTS = 'ImportPaymentsIBMSB',
|
||||
FEA_OPERATION_DAY = 'vedOperationDayInformIBMSB',
|
||||
CURRENCY_TRANSFER_LIST = 'currencyTransferIBMSB',
|
||||
MAIN_PAGE_DYNAMIC_BANNERS = 'mainpageDinamicBannersIBMSB',
|
||||
SENTRY = 'monitoringIBMSB',
|
||||
STAR_RATING = 'starRatingIBMSB',
|
||||
|
||||
@@ -78,6 +78,10 @@ const FEATURE_TOGGLE_MOCK: FeatureToggleResponse = {
|
||||
featureCode: FEATURE_TOGGLE_NAMES.VED_CALLBACK_IMSB,
|
||||
isEnabled: true,
|
||||
},
|
||||
{
|
||||
featureCode: FEATURE_TOGGLE_NAMES.CURRENCY_TRANSFER_LIST,
|
||||
isEnabled: true,
|
||||
},
|
||||
{
|
||||
featureCode: FEATURE_TOGGLE_NAMES.STAR_RATING,
|
||||
isEnabled: true,
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
import { Route, Switch } from 'react-router-dom';
|
||||
import { CurrencyTransferListPage } from '@/pages/CurrencyTransferListPage';
|
||||
import { FeaMainPage } from '@/pages/FeaMainPage';
|
||||
import { PATHS } from '@/shared/constants';
|
||||
|
||||
const AppRouter = () => (
|
||||
<Switch>
|
||||
<Route exact component={FeaMainPage} path={PATHS.HOME.PATH} />
|
||||
<Route exact component={CurrencyTransferListPage} path={PATHS.CURRENCY_TRANSFER.PATH} />
|
||||
</Switch>
|
||||
);
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
export { CurrencyTransferListPage } from './ui';
|
||||
@@ -0,0 +1,5 @@
|
||||
import { CurrencyTransferList } from '@/widgets/CurrencyTransferList';
|
||||
|
||||
const CurrencyTransferListPage = () => <CurrencyTransferList />;
|
||||
|
||||
export { CurrencyTransferListPage };
|
||||
@@ -0,0 +1 @@
|
||||
export { CurrencyTransferListPage } from './CurrencyTransferListPage';
|
||||
@@ -1 +1,2 @@
|
||||
export * from './FeaMainPage';
|
||||
export * from './CurrencyTransferListPage';
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
const ROOT_PATH = '/fea';
|
||||
|
||||
const CURRENCY_TRANSFER = `${ROOT_PATH}/currency-transfer/paydoccurr`;
|
||||
|
||||
const PATHS = {
|
||||
HOME: { PATH: ROOT_PATH, TITLE: 'ВЭД' },
|
||||
CURRENCY_TRANSFER: { PATH: CURRENCY_TRANSFER, TITLE: '' },
|
||||
} as const;
|
||||
|
||||
export { PATHS, ROOT_PATH };
|
||||
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
import { render } from '@msb/shared/lib/tests/customRender';
|
||||
import '@testing-library/jest-dom';
|
||||
import { screen } from '@testing-library/react';
|
||||
import { CurrencyTransferList } from '../ui';
|
||||
|
||||
const userAuthorities = {
|
||||
data: {
|
||||
authorities: ['CURRENCY_TRANSFER_CLIENT_SCROLLER_VIEW'],
|
||||
clientAuthorities: {
|
||||
'123': ['CURRENCY_TRANSFER_CLIENT_SCROLLER_VIEW'],
|
||||
},
|
||||
tmgUser: true,
|
||||
},
|
||||
};
|
||||
|
||||
const appContextMock = {
|
||||
organizations: [],
|
||||
userProfile: {},
|
||||
isUserProfileError: false,
|
||||
refetchUserProfile: jest.fn(),
|
||||
organizationsError: null,
|
||||
userAuthorities,
|
||||
refetchUserAuthorities: jest.fn(),
|
||||
refetchOrganizations: jest.fn(),
|
||||
systemConfigs: {
|
||||
systemClientConfig: new Map([]),
|
||||
systemPublicConfig: new Map([]),
|
||||
},
|
||||
refetchSystemConfigs: jest.fn(),
|
||||
};
|
||||
|
||||
const useFeatureTogglesMock = jest.fn(() => ({ isEnabled: true }));
|
||||
const useAppContextMock = jest.fn(() => appContextMock);
|
||||
const useMediaQueryMock = jest.fn();
|
||||
const showModalMock = jest.fn();
|
||||
|
||||
jest.mock('@msb/shared', () => ({
|
||||
...jest.requireActual('@msb/shared'),
|
||||
Permissions: ({ children }: any) => <div>{children}</div>,
|
||||
useAppContext: () => useAppContextMock(),
|
||||
useRedirect: jest.fn(),
|
||||
useFeatureToggles: () => useFeatureTogglesMock(),
|
||||
useModal: () => ({
|
||||
showModal: (data: any) => showModalMock(data),
|
||||
hideModal: jest.fn(),
|
||||
updateModal: jest.fn(),
|
||||
}),
|
||||
useModalContext: () => ({
|
||||
showModal: (data: any) => showModalMock(data),
|
||||
hideModal: jest.fn(),
|
||||
updateModal: jest.fn(),
|
||||
}),
|
||||
useMediaQuery: () => useMediaQueryMock(),
|
||||
}));
|
||||
|
||||
const historyPushMock = jest.fn();
|
||||
|
||||
jest.mock('react-router-dom', () => ({
|
||||
...jest.requireActual('react-router-dom'),
|
||||
useHistory: () => ({
|
||||
push: historyPushMock,
|
||||
}),
|
||||
}));
|
||||
|
||||
const renderAccountsMainPage = () => render(<CurrencyTransferList />);
|
||||
|
||||
describe('CurrencyTransferList', () => {
|
||||
beforeEach(() => {
|
||||
useAppContextMock.mockReturnValue(appContextMock);
|
||||
});
|
||||
|
||||
it('должен показывать модальное окно "Раздел в разработке" при выключенном FT', () => {
|
||||
useFeatureTogglesMock.mockReturnValue({ isEnabled: false });
|
||||
|
||||
renderAccountsMainPage();
|
||||
|
||||
expect(showModalMock).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('должен показывать контент при включенном FT', () => {
|
||||
useFeatureTogglesMock.mockReturnValue({ isEnabled: true });
|
||||
|
||||
renderAccountsMainPage();
|
||||
|
||||
expect(screen.getByText('CurrencyTransferList')).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1 @@
|
||||
export { CurrencyTransferList } from './ui';
|
||||
@@ -0,0 +1,12 @@
|
||||
import { AUTHORITIES_FIELD } from '@msb/shared';
|
||||
import type { PermissionItem } from '@msb/shared';
|
||||
import { PERMISSIONS } from '@/shared/constants';
|
||||
|
||||
const PERMISSION_CONFIG: PermissionItem[] = [
|
||||
{
|
||||
permissions: [PERMISSIONS.CURRENCY_TRANSFER_CLIENT_SCROLLER_VIEW],
|
||||
authoritiesField: AUTHORITIES_FIELD.CLIENT_AUTHORITIES,
|
||||
},
|
||||
];
|
||||
|
||||
export { PERMISSION_CONFIG };
|
||||
@@ -0,0 +1,2 @@
|
||||
export * from './constants';
|
||||
export * from './localization';
|
||||
@@ -0,0 +1,5 @@
|
||||
const LOCALIZATION = {
|
||||
TITLE: 'Поручения на перевод валюты',
|
||||
};
|
||||
|
||||
export { LOCALIZATION };
|
||||
@@ -0,0 +1,25 @@
|
||||
import { Permissions, TableLayout } from '@msb/shared';
|
||||
import { PERMISSION_CONFIG, LOCALIZATION } from '../lib';
|
||||
import { useCurrencyTransferList } from './useCurrencyTransferList';
|
||||
|
||||
const CurrencyTransferList = () => {
|
||||
const { isEnabled } = useCurrencyTransferList();
|
||||
|
||||
// При отсутствии доступа показываем модалку и редиректим на стартовую в компоненте "useRedirectByToggle".
|
||||
if (!isEnabled) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: Когда появятся метрики - использовать "PermissionsWithYM", чтобы не прокидывать YaMetrikaReachGoal.
|
||||
*/
|
||||
return (
|
||||
<Permissions permissionsList={PERMISSION_CONFIG}>
|
||||
<TableLayout title={LOCALIZATION.TITLE}>
|
||||
<div>CurrencyTransferList</div>
|
||||
</TableLayout>
|
||||
</Permissions>
|
||||
);
|
||||
};
|
||||
|
||||
export { CurrencyTransferList };
|
||||
@@ -0,0 +1 @@
|
||||
export { CurrencyTransferList } from './CurrencyTransferList';
|
||||
@@ -0,0 +1,12 @@
|
||||
import { FEATURE_TOGGLE_NAMES } from '@msb/http';
|
||||
import { useRedirectByToggle } from '@msb/shared';
|
||||
|
||||
const useCurrencyTransferList = () => {
|
||||
const { isEnabled } = useRedirectByToggle(FEATURE_TOGGLE_NAMES.CURRENCY_TRANSFER_LIST);
|
||||
|
||||
return {
|
||||
isEnabled,
|
||||
};
|
||||
};
|
||||
|
||||
export { useCurrencyTransferList };
|
||||
@@ -1,2 +1,3 @@
|
||||
export * from './AvailableServices';
|
||||
export * from './FeaNeedHelp';
|
||||
export * from './CurrencyTransferList';
|
||||
|
||||
Reference in New Issue
Block a user