Skip to content

Commit 75f043f

Browse files
authored
Merge pull request #158 from ameerul-deriv/FEQ-2392-add-test-coverage-for-useAdvertiserStats
Ameerul / FEQ-2392 Add test coverage for useAdvertiserStats
2 parents 375344c + 892e295 commit 75f043f

File tree

1 file changed

+219
-0
lines changed

1 file changed

+219
-0
lines changed
Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
import { renderHook } from '@testing-library/react';
2+
import useAdvertiserStats from '../useAdvertiserStats';
3+
4+
const mockUseGetInfo = {
5+
data: {},
6+
subscribe: jest.fn(),
7+
unsubscribe: jest.fn(),
8+
};
9+
10+
const mockUseAuthentication = {
11+
data: {
12+
document: {
13+
status: 'none',
14+
},
15+
identity: {
16+
status: 'none',
17+
},
18+
},
19+
isSuccess: false,
20+
};
21+
22+
const mockUseGetSettings = {
23+
data: {},
24+
isSuccess: false,
25+
};
26+
27+
const mockUseAdvertiserInfoState = {
28+
error: undefined,
29+
isIdle: false,
30+
isLoading: false,
31+
isSubscribed: false,
32+
};
33+
34+
jest.mock('@deriv-com/api-hooks', () => ({
35+
useGetSettings: jest.fn(() => mockUseGetSettings),
36+
}));
37+
38+
jest.mock('@/hooks', () => ({
39+
api: {
40+
account: {
41+
useAuthentication: jest.fn(() => mockUseAuthentication),
42+
},
43+
advertiser: {
44+
useGetInfo: jest.fn(() => mockUseGetInfo),
45+
},
46+
},
47+
}));
48+
49+
jest.mock('@/providers/AdvertiserInfoStateProvider', () => ({
50+
useAdvertiserInfoState: jest.fn(() => mockUseAdvertiserInfoState),
51+
}));
52+
53+
describe('useAdvertiserStats', () => {
54+
it('should return undefined if the data is not ready', () => {
55+
const { result } = renderHook(() => useAdvertiserStats());
56+
expect(result.current.data).toBeUndefined();
57+
});
58+
59+
it('should return default values if the data is not ready but isSubscribed and isSuccess are true', () => {
60+
mockUseGetInfo.data = {
61+
is_approved_boolean: false,
62+
};
63+
mockUseAdvertiserInfoState.isSubscribed = true;
64+
mockUseGetSettings.isSuccess = true;
65+
mockUseAuthentication.isSuccess = true;
66+
67+
const { result } = renderHook(() => useAdvertiserStats());
68+
expect(result.current.data).toEqual({
69+
averagePayTime: -1,
70+
averageReleaseTime: -1,
71+
buy_completion_rate: undefined,
72+
buy_orders_amount: undefined,
73+
buy_orders_count: undefined,
74+
buy_time_avg: undefined,
75+
buyCompletionRate: 0,
76+
buyOrdersCount: 0,
77+
created_time: undefined,
78+
daily_buy: undefined,
79+
daily_buy_limit: undefined,
80+
daily_sell: undefined,
81+
daily_sell_limit: undefined,
82+
dailyAvailableBuyLimit: 0,
83+
dailyAvailableSellLimit: 0,
84+
daysSinceJoined: 0,
85+
fullName: ' ',
86+
has_basic_verification: undefined,
87+
has_full_verification: undefined,
88+
is_approved_boolean: false,
89+
isAddressVerified: false,
90+
isAdvertiser: false,
91+
isEligibleForLimitUpgrade: false,
92+
isIdentityVerified: false,
93+
partner_count: undefined,
94+
release_time_avg: undefined,
95+
sell_completion_rate: undefined,
96+
sell_orders_amount: undefined,
97+
sell_orders_count: undefined,
98+
sellCompletionRate: 0,
99+
sellOrdersCount: 0,
100+
total_orders_count: undefined,
101+
total_turnover: undefined,
102+
totalOrders: 0,
103+
totalOrdersLifetime: 0,
104+
tradePartners: 0,
105+
tradeVolume: 0,
106+
tradeVolumeLifetime: 0,
107+
upgradable_daily_limits: undefined,
108+
});
109+
});
110+
111+
it('should return the transformed data if the data is ready', () => {
112+
mockUseGetInfo.data = {
113+
buy_completion_rate: 0.5,
114+
buy_orders_amount: 1000,
115+
buy_orders_count: 10,
116+
buy_time_avg: 120,
117+
created_time: 1620000000,
118+
daily_buy: 50,
119+
daily_buy_limit: 100,
120+
daily_sell: 50,
121+
daily_sell_limit: 100,
122+
has_basic_verification: true,
123+
has_full_verification: true,
124+
is_approved_boolean: true,
125+
partner_count: 10,
126+
release_time_avg: 180,
127+
sell_completion_rate: 0.5,
128+
sell_orders_amount: 1000,
129+
sell_orders_count: 10,
130+
total_orders_count: 20,
131+
total_turnover: 2000,
132+
upgradable_daily_limits: {
133+
max_daily_buy: 1000,
134+
max_daily_sell: 1000,
135+
},
136+
};
137+
138+
mockUseAdvertiserInfoState.isSubscribed = true;
139+
140+
mockUseGetSettings.data = {
141+
first_name: 'John',
142+
last_name: 'Doe',
143+
};
144+
mockUseGetSettings.isSuccess = true;
145+
146+
mockUseAuthentication.data = {
147+
document: {
148+
status: 'none',
149+
},
150+
identity: {
151+
status: 'none',
152+
},
153+
};
154+
mockUseAuthentication.isSuccess = true;
155+
156+
const { result } = renderHook(() => useAdvertiserStats());
157+
expect(result.current.data).toEqual({
158+
averagePayTime: 2,
159+
averageReleaseTime: 3,
160+
buy_completion_rate: 0.5,
161+
buy_orders_amount: 1000,
162+
buy_orders_count: 10,
163+
buy_time_avg: 120,
164+
buyCompletionRate: 0.5,
165+
buyOrdersCount: 10,
166+
created_time: 1620000000,
167+
daily_buy: 50,
168+
daily_buy_limit: 100,
169+
daily_sell: 50,
170+
daily_sell_limit: 100,
171+
dailyAvailableBuyLimit: 50,
172+
dailyAvailableSellLimit: 50,
173+
daysSinceJoined: 1148,
174+
fullName: 'John Doe',
175+
has_basic_verification: true,
176+
has_full_verification: true,
177+
is_approved_boolean: true,
178+
isAddressVerified: true,
179+
isAdvertiser: true,
180+
isEligibleForLimitUpgrade: true,
181+
isIdentityVerified: true,
182+
partner_count: 10,
183+
release_time_avg: 180,
184+
sell_completion_rate: 0.5,
185+
sell_orders_amount: 1000,
186+
sell_orders_count: 10,
187+
sellCompletionRate: 0.5,
188+
sellOrdersCount: 10,
189+
total_orders_count: 20,
190+
total_turnover: 2000,
191+
totalOrders: 20,
192+
totalOrdersLifetime: 20,
193+
tradePartners: 10,
194+
tradeVolume: 2000,
195+
tradeVolumeLifetime: 2000,
196+
upgradable_daily_limits: {
197+
max_daily_buy: 1000,
198+
max_daily_sell: 1000,
199+
},
200+
});
201+
});
202+
203+
it('should return 1 if buy_time_avg and release_time_avg are less than 60', () => {
204+
mockUseGetInfo.data = {
205+
buy_time_avg: 30,
206+
release_time_avg: 30,
207+
};
208+
209+
const { result } = renderHook(() => useAdvertiserStats());
210+
211+
expect(result?.current?.data?.averagePayTime).toEqual(1);
212+
expect(result?.current?.data?.averageReleaseTime).toEqual(1);
213+
});
214+
215+
it('should call subscribe if advertiserId is passed', () => {
216+
renderHook(() => useAdvertiserStats('123'));
217+
expect(mockUseGetInfo.subscribe).toHaveBeenCalledTimes(1);
218+
});
219+
});

0 commit comments

Comments
 (0)