-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Expand file tree
/
Copy pathusePredictActivity.test.ts
More file actions
114 lines (90 loc) · 3.26 KB
/
usePredictActivity.test.ts
File metadata and controls
114 lines (90 loc) · 3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import React from 'react';
import { renderHook, waitFor, act } from '@testing-library/react-native';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { usePredictActivity } from './usePredictActivity';
const MOCK_ADDRESS = '0x1234567890123456789012345678901234567890';
const mockGetActivity = jest.fn();
jest.mock('../../../../core/Engine', () => ({
context: {
PredictController: {
getActivity: (...args: unknown[]) => mockGetActivity(...args),
},
},
}));
jest.mock('../utils/accounts', () => ({
getEvmAccountFromSelectedAccountGroup: jest.fn(() => ({
address: MOCK_ADDRESS,
})),
}));
const mockEnsurePolygonNetworkExists = jest.fn<Promise<void>, []>();
jest.mock('./usePredictNetworkManagement', () => ({
usePredictNetworkManagement: () => ({
ensurePolygonNetworkExists: mockEnsurePolygonNetworkExists,
}),
}));
const createWrapper = () => {
const queryClient = new QueryClient({
defaultOptions: { queries: { retry: false, gcTime: Infinity } },
});
const Wrapper = ({ children }: { children: React.ReactNode }) =>
React.createElement(QueryClientProvider, { client: queryClient }, children);
return { Wrapper };
};
describe('usePredictActivity', () => {
beforeEach(() => {
jest.clearAllMocks();
mockGetActivity.mockResolvedValue([]);
mockEnsurePolygonNetworkExists.mockResolvedValue(undefined);
});
it('fetches activity automatically on mount', async () => {
const { Wrapper } = createWrapper();
const activity = [{ id: '1' }];
mockGetActivity.mockResolvedValueOnce(activity);
const { result } = renderHook(() => usePredictActivity(), {
wrapper: Wrapper,
});
await waitFor(() => {
expect(result.current.isLoading).toBe(false);
});
expect(result.current.data).toEqual(activity);
expect(result.current.error).toBeNull();
expect(mockGetActivity).toHaveBeenCalledWith({ address: MOCK_ADDRESS });
});
it('exposes error when activity fetch fails', async () => {
const { Wrapper } = createWrapper();
mockGetActivity.mockRejectedValueOnce(new Error('Boom'));
const { result } = renderHook(() => usePredictActivity(), {
wrapper: Wrapper,
});
await waitFor(() => {
expect(result.current.error).toBeInstanceOf(Error);
});
expect(result.current.error?.message).toBe('Boom');
});
it('uses refetch for refresh behavior', async () => {
const { Wrapper } = createWrapper();
mockGetActivity.mockResolvedValueOnce([{ id: '1' }]);
const { result } = renderHook(() => usePredictActivity(), {
wrapper: Wrapper,
});
await waitFor(() => {
expect(result.current.isLoading).toBe(false);
});
mockGetActivity.mockResolvedValueOnce([{ id: '2' }]);
await act(async () => {
await result.current.refetch();
});
expect(mockGetActivity).toHaveBeenCalledTimes(2);
expect(result.current.isRefetching).toBe(false);
});
it('ensures polygon network before running query', async () => {
const { Wrapper } = createWrapper();
const { result } = renderHook(() => usePredictActivity(), {
wrapper: Wrapper,
});
await waitFor(() => {
expect(result.current.isLoading).toBe(false);
});
expect(mockEnsurePolygonNetworkExists).toHaveBeenCalledTimes(1);
});
});