Skip to content

Commit b92ece2

Browse files
authored
[WALL] Lubega / WALL-5219 / CtraderSuccessModal unit test (#17748)
* chore: ctrader success modal unit test * fix: clean up
1 parent 9c078f0 commit b92ece2

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
import React from 'react';
2+
import { useCtraderAccountsList } from '@deriv/api-v2';
3+
import { useDevice } from '@deriv-com/ui';
4+
import { render, screen } from '@testing-library/react';
5+
import { ModalProvider, useModal } from '../../../../../components/ModalProvider';
6+
import CTraderSuccessModal from '../CTraderSuccessModal';
7+
8+
jest.mock('@deriv/api-v2', () => ({
9+
useCtraderAccountsList: jest.fn(),
10+
}));
11+
12+
jest.mock('@deriv-com/ui', () => ({
13+
Loader: () => <div>Loading...</div>,
14+
useDevice: jest.fn(),
15+
}));
16+
17+
jest.mock('../../../../../components/ModalProvider', () => ({
18+
...jest.requireActual('../../../../../components/ModalProvider'),
19+
useModal: jest.fn(),
20+
}));
21+
22+
jest.mock('../../../screens', () => ({
23+
CFDSuccess: ({ actionButtons, title }: { actionButtons: React.ReactNode; title: string }) => (
24+
<div data-testid='cfd-success'>
25+
{title}
26+
{actionButtons}
27+
</div>
28+
),
29+
}));
30+
31+
jest.mock('../../../../../components', () => ({
32+
ModalStepWrapper: ({
33+
children,
34+
renderFooter,
35+
}: {
36+
children: React.ReactNode;
37+
renderFooter?: () => React.ReactNode;
38+
}) => (
39+
<div>
40+
{children}
41+
{renderFooter && <div>{renderFooter()}</div>}
42+
</div>
43+
),
44+
ModalWrapper: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
45+
}));
46+
47+
jest.mock('../components', () => ({
48+
CTraderSuccessModalButtons: () => <div>CTraderSuccessModalButtons</div>,
49+
}));
50+
51+
describe('CTraderSuccessModal', () => {
52+
const mockHide = jest.fn();
53+
54+
beforeEach(() => {
55+
jest.clearAllMocks();
56+
(useModal as jest.Mock).mockReturnValue({ hide: mockHide });
57+
});
58+
59+
it('renders loader when data is loading', () => {
60+
(useCtraderAccountsList as jest.Mock).mockReturnValue({ data: null, isLoading: true });
61+
(useDevice as jest.Mock).mockReturnValue({ isDesktop: true });
62+
63+
render(<CTraderSuccessModal walletCurrencyType='USD' />);
64+
expect(screen.getByText('Loading...')).toBeInTheDocument();
65+
});
66+
67+
it('renders desktop layout correctly', () => {
68+
(useCtraderAccountsList as jest.Mock).mockReturnValue({
69+
data: [{ display_balance: '1000 USD', login: '12345' }],
70+
isLoading: false,
71+
});
72+
(useDevice as jest.Mock).mockReturnValue({ isDesktop: true });
73+
74+
render(<CTraderSuccessModal walletCurrencyType='USD' />);
75+
expect(screen.getByTestId('cfd-success')).toHaveTextContent('Your Deriv cTrader account is ready');
76+
expect(screen.getByText('CTraderSuccessModalButtons')).toBeInTheDocument();
77+
});
78+
79+
it('renders mobile layout correctly', () => {
80+
(useCtraderAccountsList as jest.Mock).mockReturnValue({
81+
data: [{ display_balance: '1000 USD', login: '12345' }],
82+
isLoading: false,
83+
});
84+
(useDevice as jest.Mock).mockReturnValue({ isDesktop: false });
85+
86+
render(
87+
<ModalProvider>
88+
<CTraderSuccessModal isDemo={false} walletCurrencyType='USD' />
89+
</ModalProvider>
90+
);
91+
expect(screen.getByTestId('cfd-success')).toHaveTextContent('Your Deriv cTrader account is ready');
92+
expect(screen.getAllByText('CTraderSuccessModalButtons')).toHaveLength(2);
93+
});
94+
95+
it('renders correct content for demo account', () => {
96+
(useCtraderAccountsList as jest.Mock).mockReturnValue({
97+
data: [{ display_balance: '1000 USD', login: '12345' }],
98+
isLoading: false,
99+
});
100+
(useDevice as jest.Mock).mockReturnValue({ isDesktop: true });
101+
102+
render(<CTraderSuccessModal isDemo walletCurrencyType='USD' />);
103+
expect(screen.getByTestId('cfd-success')).toHaveTextContent('Your Deriv cTrader demo account is ready');
104+
expect(screen.getByText('CTraderSuccessModalButtons')).toBeInTheDocument();
105+
});
106+
});

0 commit comments

Comments
 (0)