@spacesops/wdk-react-native-core 1.0.0-beta.69 → 1.0.0-beta.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hooks/useBalance.js +50 -7
- package/dist/hooks/useBalance.js.map +1 -1
- package/dist/hooks/useTransactions.d.ts +21 -0
- package/dist/hooks/useTransactions.js +64 -0
- package/dist/hooks/useTransactions.js.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/provider/WdkAppProvider.d.ts +7 -2
- package/dist/provider/WdkAppProvider.js +6 -1
- package/dist/provider/WdkAppProvider.js.map +1 -1
- package/dist/services/transactionService.d.ts +27 -0
- package/dist/services/transactionService.js +154 -0
- package/dist/services/transactionService.js.map +1 -0
- package/dist/store/indexerConfigStore.d.ts +7 -0
- package/dist/store/indexerConfigStore.js +14 -0
- package/dist/store/indexerConfigStore.js.map +1 -0
- package/dist/types.d.ts +33 -0
- package/dist/utils/constants.d.ts +18 -0
- package/dist/utils/constants.js +18 -0
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/mmkvKeyManager.js +3 -3
- package/dist/utils/mmkvKeyManager.js.map +1 -1
- package/dist/utils/operationMutex.js.map +1 -1
- package/dist/utils/retryUtils.d.ts +19 -0
- package/dist/utils/retryUtils.js +55 -0
- package/dist/utils/retryUtils.js.map +1 -0
- package/dist/utils/schemas.d.ts +15 -3
- package/dist/utils/schemas.js +27 -2
- package/dist/utils/schemas.js.map +1 -1
- package/dist/utils/typeGuards.d.ts +1 -1
- package/dist/utils/typeGuards.js +3 -3
- package/dist/utils/typeGuards.js.map +1 -1
- package/package.json +2 -1
- package/src/hooks/useBalance.ts +2 -3
- package/src/services/transactionService.ts +2 -1
- package/src/utils/mmkvKeyManager.ts +3 -3
- package/src/utils/operationMutex.ts +1 -1
- package/dist/__mocks__/react.d.ts +0 -40
- package/dist/__mocks__/react.js +0 -33
- package/dist/__mocks__/react.js.map +0 -1
- package/dist/__mocks__/secureStorage.d.ts +0 -27
- package/dist/__mocks__/secureStorage.js +0 -81
- package/dist/__mocks__/secureStorage.js.map +0 -1
- package/dist/__tests__/hooks/useBalance.test.d.ts +0 -6
- package/dist/__tests__/hooks/useBalance.test.js +0 -217
- package/dist/__tests__/hooks/useBalance.test.js.map +0 -1
- package/dist/__tests__/hooks/useWallet.test.d.ts +0 -6
- package/dist/__tests__/hooks/useWallet.test.js +0 -105
- package/dist/__tests__/hooks/useWallet.test.js.map +0 -1
- package/dist/__tests__/hooks/useWalletManager.test.d.ts +0 -6
- package/dist/__tests__/hooks/useWalletManager.test.js +0 -193
- package/dist/__tests__/hooks/useWalletManager.test.js.map +0 -1
- package/dist/__tests__/hooks/useWdkApp.test.d.ts +0 -6
- package/dist/__tests__/hooks/useWdkApp.test.js +0 -55
- package/dist/__tests__/hooks/useWdkApp.test.js.map +0 -1
- package/dist/__tests__/hooks/useWorklet.test.d.ts +0 -6
- package/dist/__tests__/hooks/useWorklet.test.js +0 -168
- package/dist/__tests__/hooks/useWorklet.test.js.map +0 -1
- package/dist/__tests__/provider/WdkAppProvider.test.d.ts +0 -6
- package/dist/__tests__/provider/WdkAppProvider.test.js +0 -57
- package/dist/__tests__/provider/WdkAppProvider.test.js.map +0 -1
- package/dist/__tests__/services/accountService.test.d.ts +0 -6
- package/dist/__tests__/services/accountService.test.js +0 -263
- package/dist/__tests__/services/accountService.test.js.map +0 -1
- package/dist/__tests__/services/addressService.test.d.ts +0 -6
- package/dist/__tests__/services/addressService.test.js +0 -258
- package/dist/__tests__/services/addressService.test.js.map +0 -1
- package/dist/__tests__/services/balanceService.test.d.ts +0 -6
- package/dist/__tests__/services/balanceService.test.js +0 -333
- package/dist/__tests__/services/balanceService.test.js.map +0 -1
- package/dist/__tests__/services/walletSetupService.test.d.ts +0 -6
- package/dist/__tests__/services/walletSetupService.test.js +0 -304
- package/dist/__tests__/services/walletSetupService.test.js.map +0 -1
- package/dist/__tests__/services/walletSwitchingService.test.d.ts +0 -6
- package/dist/__tests__/services/walletSwitchingService.test.js +0 -209
- package/dist/__tests__/services/walletSwitchingService.test.js.map +0 -1
- package/dist/__tests__/services/workletLifecycleService.test.d.ts +0 -6
- package/dist/__tests__/services/workletLifecycleService.test.js +0 -451
- package/dist/__tests__/services/workletLifecycleService.test.js.map +0 -1
- package/dist/__tests__/setup.d.ts +0 -4
- package/dist/__tests__/setup.js +0 -49
- package/dist/__tests__/setup.js.map +0 -1
- package/dist/__tests__/storage/mmkvStorage.test.d.ts +0 -6
- package/dist/__tests__/storage/mmkvStorage.test.js +0 -213
- package/dist/__tests__/storage/mmkvStorage.test.js.map +0 -1
- package/dist/__tests__/store/walletStore.test.d.ts +0 -4
- package/dist/__tests__/store/walletStore.test.js +0 -86
- package/dist/__tests__/store/walletStore.test.js.map +0 -1
- package/dist/__tests__/store/workletStore.test.d.ts +0 -4
- package/dist/__tests__/store/workletStore.test.js +0 -255
- package/dist/__tests__/store/workletStore.test.js.map +0 -1
- package/dist/__tests__/types/hrpc.test.d.ts +0 -4
- package/dist/__tests__/types/hrpc.test.js +0 -99
- package/dist/__tests__/types/hrpc.test.js.map +0 -1
- package/dist/__tests__/utils/balanceUtils.test.d.ts +0 -4
- package/dist/__tests__/utils/balanceUtils.test.js +0 -133
- package/dist/__tests__/utils/balanceUtils.test.js.map +0 -1
- package/dist/__tests__/utils/errorHandling.test.d.ts +0 -6
- package/dist/__tests__/utils/errorHandling.test.js +0 -119
- package/dist/__tests__/utils/errorHandling.test.js.map +0 -1
- package/dist/__tests__/utils/errorUtils.test.d.ts +0 -4
- package/dist/__tests__/utils/errorUtils.test.js +0 -133
- package/dist/__tests__/utils/errorUtils.test.js.map +0 -1
- package/dist/__tests__/utils/initializationState.test.d.ts +0 -6
- package/dist/__tests__/utils/initializationState.test.js +0 -243
- package/dist/__tests__/utils/initializationState.test.js.map +0 -1
- package/dist/__tests__/utils/jsonUtils.test.d.ts +0 -4
- package/dist/__tests__/utils/jsonUtils.test.js +0 -118
- package/dist/__tests__/utils/jsonUtils.test.js.map +0 -1
- package/dist/__tests__/utils/mmkvKeyManager.test.d.ts +0 -6
- package/dist/__tests__/utils/mmkvKeyManager.test.js +0 -158
- package/dist/__tests__/utils/mmkvKeyManager.test.js.map +0 -1
- package/dist/__tests__/utils/mnemonicUtils.test.d.ts +0 -4
- package/dist/__tests__/utils/mnemonicUtils.test.js +0 -40
- package/dist/__tests__/utils/mnemonicUtils.test.js.map +0 -1
- package/dist/__tests__/utils/raceConditions.test.d.ts +0 -6
- package/dist/__tests__/utils/raceConditions.test.js +0 -239
- package/dist/__tests__/utils/raceConditions.test.js.map +0 -1
- package/dist/__tests__/utils/result.test.d.ts +0 -4
- package/dist/__tests__/utils/result.test.js +0 -66
- package/dist/__tests__/utils/result.test.js.map +0 -1
- package/dist/__tests__/utils/schemas.test.d.ts +0 -4
- package/dist/__tests__/utils/schemas.test.js +0 -66
- package/dist/__tests__/utils/schemas.test.js.map +0 -1
- package/dist/__tests__/utils/storeHelpers.test.d.ts +0 -4
- package/dist/__tests__/utils/storeHelpers.test.js +0 -227
- package/dist/__tests__/utils/storeHelpers.test.js.map +0 -1
- package/dist/__tests__/utils/typeGuards.test.d.ts +0 -4
- package/dist/__tests__/utils/typeGuards.test.js +0 -175
- package/dist/__tests__/utils/typeGuards.test.js.map +0 -1
- package/dist/__tests__/utils/validation.test.d.ts +0 -4
- package/dist/__tests__/utils/validation.test.js +0 -167
- package/dist/__tests__/utils/validation.test.js.map +0 -1
- package/dist/__tests__/utils/walletUtils.test.d.ts +0 -4
- package/dist/__tests__/utils/walletUtils.test.js +0 -156
- package/dist/__tests__/utils/walletUtils.test.js.map +0 -1
- package/dist/utils/types.js +0 -6
- package/dist/utils/utils/schemas.js +0 -173
- package/dist/utils/utils/validation.js +0 -151
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Mock SecureStorage for testing
|
|
3
|
-
*
|
|
4
|
-
* Supports identifier parameter for multi-wallet testing
|
|
5
|
-
*/
|
|
6
|
-
// Internal storage to simulate per-identifier wallet storage
|
|
7
|
-
const storage = {};
|
|
8
|
-
const getStorageKey = (identifier) => {
|
|
9
|
-
return identifier || 'default';
|
|
10
|
-
};
|
|
11
|
-
export const mockSecureStorage = {
|
|
12
|
-
authenticate: jest.fn(() => Promise.resolve(true)),
|
|
13
|
-
hasWallet: jest.fn((identifier) => {
|
|
14
|
-
const key = getStorageKey(identifier);
|
|
15
|
-
const wallet = storage[key];
|
|
16
|
-
return Promise.resolve(wallet !== undefined && wallet.encryptionKey !== null);
|
|
17
|
-
}),
|
|
18
|
-
setEncryptionKey: jest.fn((key, identifier) => {
|
|
19
|
-
const storageKey = getStorageKey(identifier);
|
|
20
|
-
if (!storage[storageKey]) {
|
|
21
|
-
storage[storageKey] = { encryptionKey: null, encryptedSeed: null, encryptedEntropy: null };
|
|
22
|
-
}
|
|
23
|
-
storage[storageKey].encryptionKey = key;
|
|
24
|
-
return Promise.resolve();
|
|
25
|
-
}),
|
|
26
|
-
getEncryptionKey: jest.fn((identifier) => {
|
|
27
|
-
const storageKey = getStorageKey(identifier);
|
|
28
|
-
return Promise.resolve(storage[storageKey]?.encryptionKey || null);
|
|
29
|
-
}),
|
|
30
|
-
setEncryptedSeed: jest.fn((seed, identifier) => {
|
|
31
|
-
const storageKey = getStorageKey(identifier);
|
|
32
|
-
if (!storage[storageKey]) {
|
|
33
|
-
storage[storageKey] = { encryptionKey: null, encryptedSeed: null, encryptedEntropy: null };
|
|
34
|
-
}
|
|
35
|
-
storage[storageKey].encryptedSeed = seed;
|
|
36
|
-
return Promise.resolve();
|
|
37
|
-
}),
|
|
38
|
-
getEncryptedSeed: jest.fn((identifier) => {
|
|
39
|
-
const storageKey = getStorageKey(identifier);
|
|
40
|
-
return Promise.resolve(storage[storageKey]?.encryptedSeed || null);
|
|
41
|
-
}),
|
|
42
|
-
setEncryptedEntropy: jest.fn((entropy, identifier) => {
|
|
43
|
-
const storageKey = getStorageKey(identifier);
|
|
44
|
-
if (!storage[storageKey]) {
|
|
45
|
-
storage[storageKey] = { encryptionKey: null, encryptedSeed: null, encryptedEntropy: null };
|
|
46
|
-
}
|
|
47
|
-
storage[storageKey].encryptedEntropy = entropy;
|
|
48
|
-
return Promise.resolve();
|
|
49
|
-
}),
|
|
50
|
-
getEncryptedEntropy: jest.fn((identifier) => {
|
|
51
|
-
const storageKey = getStorageKey(identifier);
|
|
52
|
-
return Promise.resolve(storage[storageKey]?.encryptedEntropy || null);
|
|
53
|
-
}),
|
|
54
|
-
getAllEncrypted: jest.fn((identifier) => {
|
|
55
|
-
const storageKey = getStorageKey(identifier);
|
|
56
|
-
const wallet = storage[storageKey];
|
|
57
|
-
return Promise.resolve({
|
|
58
|
-
encryptedSeed: wallet?.encryptedSeed || null,
|
|
59
|
-
encryptedEntropy: wallet?.encryptedEntropy || null,
|
|
60
|
-
encryptionKey: wallet?.encryptionKey || null,
|
|
61
|
-
});
|
|
62
|
-
}),
|
|
63
|
-
clearAll: jest.fn(() => {
|
|
64
|
-
Object.keys(storage).forEach(key => delete storage[key]);
|
|
65
|
-
return Promise.resolve();
|
|
66
|
-
}),
|
|
67
|
-
isBiometricAvailable: jest.fn(() => Promise.resolve(true)),
|
|
68
|
-
isDeviceSecurityEnabled: jest.fn(() => Promise.resolve(true)),
|
|
69
|
-
deleteWallet: jest.fn((identifier) => {
|
|
70
|
-
const storageKey = getStorageKey(identifier);
|
|
71
|
-
delete storage[storageKey];
|
|
72
|
-
return Promise.resolve();
|
|
73
|
-
}),
|
|
74
|
-
cleanup: jest.fn(),
|
|
75
|
-
// Helper method to clear storage between tests
|
|
76
|
-
_clearStorage: () => {
|
|
77
|
-
Object.keys(storage).forEach(key => delete storage[key]);
|
|
78
|
-
},
|
|
79
|
-
};
|
|
80
|
-
export default mockSecureStorage;
|
|
81
|
-
//# sourceMappingURL=secureStorage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"secureStorage.js","sourceRoot":"","sources":["../../src/__mocks__/secureStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for useBalance hook
|
|
3
|
-
*
|
|
4
|
-
* Tests balance hook logic with TanStack Query integration
|
|
5
|
-
*/
|
|
6
|
-
import { balanceQueryKeys } from '../../hooks/useBalance';
|
|
7
|
-
import { AccountService } from '../../services/accountService';
|
|
8
|
-
import { BalanceService } from '../../services/balanceService';
|
|
9
|
-
import { getWorkletStore } from '../../store/workletStore';
|
|
10
|
-
import { getWalletStore } from '../../store/walletStore';
|
|
11
|
-
import { convertBalanceToString } from '../../utils/balanceUtils';
|
|
12
|
-
import { NATIVE_TOKEN_KEY } from '../../utils/constants';
|
|
13
|
-
// Mock TanStack Query
|
|
14
|
-
jest.mock('@tanstack/react-query', () => ({
|
|
15
|
-
useQuery: jest.fn(),
|
|
16
|
-
useMutation: jest.fn(),
|
|
17
|
-
useQueryClient: jest.fn(),
|
|
18
|
-
}));
|
|
19
|
-
// Mock stores and services
|
|
20
|
-
jest.mock('../../store/workletStore', () => ({
|
|
21
|
-
getWorkletStore: jest.fn(),
|
|
22
|
-
}));
|
|
23
|
-
jest.mock('../../store/walletStore', () => ({
|
|
24
|
-
getWalletStore: jest.fn(),
|
|
25
|
-
}));
|
|
26
|
-
jest.mock('../../services/accountService', () => ({
|
|
27
|
-
AccountService: {
|
|
28
|
-
callAccountMethod: jest.fn(),
|
|
29
|
-
},
|
|
30
|
-
}));
|
|
31
|
-
jest.mock('../../services/balanceService', () => ({
|
|
32
|
-
BalanceService: {
|
|
33
|
-
updateBalance: jest.fn(),
|
|
34
|
-
updateLastBalanceUpdate: jest.fn(),
|
|
35
|
-
getBalance: jest.fn(),
|
|
36
|
-
},
|
|
37
|
-
}));
|
|
38
|
-
jest.mock('../../utils/balanceUtils', () => ({
|
|
39
|
-
convertBalanceToString: jest.fn((val) => String(val)),
|
|
40
|
-
}));
|
|
41
|
-
jest.mock('../../utils/storeHelpers', () => ({
|
|
42
|
-
resolveWalletId: jest.fn((id) => id || 'default-wallet'),
|
|
43
|
-
}));
|
|
44
|
-
jest.mock('../../utils/validation', () => ({
|
|
45
|
-
validateWalletParams: jest.fn(),
|
|
46
|
-
}));
|
|
47
|
-
jest.mock('../../utils/logger', () => ({
|
|
48
|
-
log: jest.fn(),
|
|
49
|
-
logError: jest.fn(),
|
|
50
|
-
}));
|
|
51
|
-
describe('useBalance', () => {
|
|
52
|
-
let mockWorkletStore;
|
|
53
|
-
let mockWalletStore;
|
|
54
|
-
beforeEach(() => {
|
|
55
|
-
jest.clearAllMocks();
|
|
56
|
-
mockWorkletStore = {
|
|
57
|
-
getState: jest.fn(() => ({
|
|
58
|
-
isInitialized: true,
|
|
59
|
-
})),
|
|
60
|
-
};
|
|
61
|
-
mockWalletStore = {
|
|
62
|
-
getState: jest.fn(() => ({
|
|
63
|
-
activeWalletId: 'test-wallet-1',
|
|
64
|
-
})),
|
|
65
|
-
};
|
|
66
|
-
getWorkletStore.mockReturnValue(mockWorkletStore);
|
|
67
|
-
getWalletStore.mockReturnValue(mockWalletStore);
|
|
68
|
-
});
|
|
69
|
-
describe('balanceQueryKeys', () => {
|
|
70
|
-
it('should create correct query keys', () => {
|
|
71
|
-
expect(balanceQueryKeys.all).toEqual(['balances']);
|
|
72
|
-
const walletKey = balanceQueryKeys.byWallet('wallet-1', 0);
|
|
73
|
-
expect(walletKey).toEqual(['balances', 'wallet', 'wallet-1', 0]);
|
|
74
|
-
const networkKey = balanceQueryKeys.byNetwork('ethereum');
|
|
75
|
-
expect(networkKey).toEqual(['balances', 'network', 'ethereum']);
|
|
76
|
-
const walletNetworkKey = balanceQueryKeys.byWalletAndNetwork('wallet-1', 0, 'ethereum');
|
|
77
|
-
expect(walletNetworkKey).toEqual([
|
|
78
|
-
'balances',
|
|
79
|
-
'wallet',
|
|
80
|
-
'wallet-1',
|
|
81
|
-
0,
|
|
82
|
-
'network',
|
|
83
|
-
'ethereum',
|
|
84
|
-
]);
|
|
85
|
-
const nativeTokenKey = balanceQueryKeys.byToken('wallet-1', 0, 'ethereum', null);
|
|
86
|
-
expect(nativeTokenKey).toEqual([
|
|
87
|
-
'balances',
|
|
88
|
-
'wallet',
|
|
89
|
-
'wallet-1',
|
|
90
|
-
0,
|
|
91
|
-
'network',
|
|
92
|
-
'ethereum',
|
|
93
|
-
'token',
|
|
94
|
-
NATIVE_TOKEN_KEY,
|
|
95
|
-
]);
|
|
96
|
-
const tokenKey = balanceQueryKeys.byToken('wallet-1', 0, 'ethereum', '0x123');
|
|
97
|
-
expect(tokenKey).toEqual([
|
|
98
|
-
'balances',
|
|
99
|
-
'wallet',
|
|
100
|
-
'wallet-1',
|
|
101
|
-
0,
|
|
102
|
-
'network',
|
|
103
|
-
'ethereum',
|
|
104
|
-
'token',
|
|
105
|
-
'0x123',
|
|
106
|
-
]);
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
describe('fetchBalance function (tested via hook)', () => {
|
|
110
|
-
it('should handle wallet not initialized', async () => {
|
|
111
|
-
mockWorkletStore.getState.mockReturnValue({ isInitialized: false });
|
|
112
|
-
// Import after mocks are set up
|
|
113
|
-
const { useBalance } = await import('../../hooks/useBalance');
|
|
114
|
-
const { useQuery } = await import('@tanstack/react-query');
|
|
115
|
-
const mockUseQuery = useQuery;
|
|
116
|
-
mockUseQuery.mockReturnValue({
|
|
117
|
-
data: {
|
|
118
|
-
success: false,
|
|
119
|
-
network: 'ethereum',
|
|
120
|
-
accountIndex: 0,
|
|
121
|
-
tokenAddress: null,
|
|
122
|
-
balance: null,
|
|
123
|
-
error: 'Wallet not initialized',
|
|
124
|
-
},
|
|
125
|
-
isLoading: false,
|
|
126
|
-
error: null,
|
|
127
|
-
});
|
|
128
|
-
// The hook would be called in a React component, but we can test the query function
|
|
129
|
-
expect(mockUseQuery).toBeDefined();
|
|
130
|
-
});
|
|
131
|
-
it('should fetch native balance successfully', async () => {
|
|
132
|
-
const mockBalance = '1000000000000000000';
|
|
133
|
-
AccountService.callAccountMethod.mockResolvedValue(mockBalance);
|
|
134
|
-
convertBalanceToString.mockReturnValue(mockBalance);
|
|
135
|
-
const { useQuery } = await import('@tanstack/react-query');
|
|
136
|
-
const mockUseQuery = useQuery;
|
|
137
|
-
// Simulate query function call
|
|
138
|
-
const queryFn = mockUseQuery.mock.calls[0]?.[0]?.queryFn;
|
|
139
|
-
if (queryFn) {
|
|
140
|
-
const result = await queryFn();
|
|
141
|
-
expect(result.success).toBe(true);
|
|
142
|
-
expect(result.balance).toBe(mockBalance);
|
|
143
|
-
expect(AccountService.callAccountMethod).toHaveBeenCalled();
|
|
144
|
-
expect(BalanceService.updateBalance).toHaveBeenCalled();
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
it('should fetch token balance successfully', async () => {
|
|
148
|
-
const mockBalance = '2000000000000000000';
|
|
149
|
-
const tokenAddress = '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0';
|
|
150
|
-
AccountService.callAccountMethod.mockResolvedValue(mockBalance);
|
|
151
|
-
convertBalanceToString.mockReturnValue(mockBalance);
|
|
152
|
-
const { useQuery } = await import('@tanstack/react-query');
|
|
153
|
-
const mockUseQuery = useQuery;
|
|
154
|
-
// Simulate query function call
|
|
155
|
-
const queryFn = mockUseQuery.mock.calls[0]?.[0]?.queryFn;
|
|
156
|
-
if (queryFn) {
|
|
157
|
-
const result = await queryFn();
|
|
158
|
-
expect(result.success).toBe(true);
|
|
159
|
-
expect(result.balance).toBe(mockBalance);
|
|
160
|
-
expect(AccountService.callAccountMethod).toHaveBeenCalledWith('ethereum', 0, 'getTokenBalance', tokenAddress);
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
it('should handle fetch errors', async () => {
|
|
164
|
-
const error = new Error('Network error');
|
|
165
|
-
AccountService.callAccountMethod.mockRejectedValue(error);
|
|
166
|
-
const { useQuery } = await import('@tanstack/react-query');
|
|
167
|
-
const mockUseQuery = useQuery;
|
|
168
|
-
// Simulate query function call
|
|
169
|
-
const queryFn = mockUseQuery.mock.calls[0]?.[0]?.queryFn;
|
|
170
|
-
if (queryFn) {
|
|
171
|
-
const result = await queryFn();
|
|
172
|
-
expect(result.success).toBe(false);
|
|
173
|
-
expect(result.error).toBe('Network error');
|
|
174
|
-
expect(result.balance).toBeNull();
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
describe('useBalancesForWallet', () => {
|
|
179
|
-
it('should build query keys for all tokens', async () => {
|
|
180
|
-
const tokenConfigs = {
|
|
181
|
-
ethereum: {
|
|
182
|
-
native: { address: null, symbol: 'ETH', decimals: 18 },
|
|
183
|
-
tokens: [{ address: '0x123', symbol: 'USDC', decimals: 6 }],
|
|
184
|
-
},
|
|
185
|
-
};
|
|
186
|
-
const { useQuery } = await import('@tanstack/react-query');
|
|
187
|
-
const mockUseQuery = useQuery;
|
|
188
|
-
mockUseQuery.mockReturnValue({
|
|
189
|
-
data: [],
|
|
190
|
-
isLoading: false,
|
|
191
|
-
error: null,
|
|
192
|
-
});
|
|
193
|
-
// Test that query keys are built correctly
|
|
194
|
-
// This would be tested in a React component, but we verify the structure
|
|
195
|
-
expect(mockUseQuery).toBeDefined();
|
|
196
|
-
});
|
|
197
|
-
});
|
|
198
|
-
describe('useRefreshBalance', () => {
|
|
199
|
-
it('should invalidate queries correctly', async () => {
|
|
200
|
-
// Since we can't actually call React hooks in Node environment,
|
|
201
|
-
// we verify that the hook exports exist and the query key functions work
|
|
202
|
-
const { useRefreshBalance, balanceQueryKeys } = await import('../../hooks/useBalance');
|
|
203
|
-
// Verify the hook is exported
|
|
204
|
-
expect(typeof useRefreshBalance).toBe('function');
|
|
205
|
-
// Verify query keys can be used for invalidation
|
|
206
|
-
const allKeys = balanceQueryKeys.all;
|
|
207
|
-
const walletKeys = balanceQueryKeys.byWallet('wallet-1', 0);
|
|
208
|
-
const networkKeys = balanceQueryKeys.byNetwork('ethereum');
|
|
209
|
-
const tokenKeys = balanceQueryKeys.byToken('wallet-1', 0, 'ethereum', null);
|
|
210
|
-
expect(allKeys).toEqual(['balances']);
|
|
211
|
-
expect(walletKeys).toEqual(['balances', 'wallet', 'wallet-1', 0]);
|
|
212
|
-
expect(networkKeys).toEqual(['balances', 'network', 'ethereum']);
|
|
213
|
-
expect(tokenKeys).toContain('balances');
|
|
214
|
-
});
|
|
215
|
-
});
|
|
216
|
-
});
|
|
217
|
-
//# sourceMappingURL=useBalance.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useBalance.test.js","sourceRoot":"","sources":["../../../src/__tests__/hooks/useBalance.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD,sBAAsB;AACtB,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE;IACnB,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;IACtB,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;CAC1B,CAAC,CAAC,CAAA;AAEH,2BAA2B;AAC3B,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;CAC3B,CAAC,CAAC,CAAA;AAEH,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;CAC1B,CAAC,CAAC,CAAA;AAEH,IAAI,CAAC,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE,CAAC,CAAC;IAChD,cAAc,EAAE;QACd,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE;KAC7B;CACF,CAAC,CAAC,CAAA;AAEH,IAAI,CAAC,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE,CAAC,CAAC;IAChD,cAAc,EAAE;QACd,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE;QACxB,uBAAuB,EAAE,IAAI,CAAC,EAAE,EAAE;QAClC,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE;KACtB;CACF,CAAC,CAAC,CAAA;AAEH,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,sBAAsB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;CACtD,CAAC,CAAC,CAAA;AAEH,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,gBAAgB,CAAC;CACzD,CAAC,CAAC,CAAA;AAEH,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,oBAAoB,EAAE,IAAI,CAAC,EAAE,EAAE;CAChC,CAAC,CAAC,CAAA;AAEH,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;IACd,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE;CACpB,CAAC,CAAC,CAAA;AAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,gBAAqB,CAAA;IACzB,IAAI,eAAoB,CAAA;IAExB,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAA;QAEpB,gBAAgB,GAAG;YACjB,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;gBACvB,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;SACJ,CAAA;QAED,eAAe,GAAG;YAChB,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;gBACvB,cAAc,EAAE,eAAe;aAChC,CAAC,CAAC;SACJ,CACA;QAAC,eAA6B,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAChE;QAAC,cAA4B,CAAC,eAAe,CAAC,eAAe,CAAC,CAAA;IACjE,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;YAElD,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;YAC1D,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAA;YAEhE,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;YACzD,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAA;YAE/D,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,kBAAkB,CAC1D,UAAU,EACV,CAAC,EACD,UAAU,CACX,CAAA;YACD,MAAM,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC;gBAC/B,UAAU;gBACV,QAAQ;gBACR,UAAU;gBACV,CAAC;gBACD,SAAS;gBACT,UAAU;aACX,CAAC,CAAA;YAEF,MAAM,cAAc,GAAG,gBAAgB,CAAC,OAAO,CAC7C,UAAU,EACV,CAAC,EACD,UAAU,EACV,IAAI,CACL,CAAA;YACD,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC;gBAC7B,UAAU;gBACV,QAAQ;gBACR,UAAU;gBACV,CAAC;gBACD,SAAS;gBACT,UAAU;gBACV,OAAO;gBACP,gBAAgB;aACjB,CAAC,CAAA;YAEF,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CACvC,UAAU,EACV,CAAC,EACD,UAAU,EACV,OAAO,CACR,CAAA;YACD,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;gBACvB,UAAU;gBACV,QAAQ;gBACR,UAAU;gBACV,CAAC;gBACD,SAAS;gBACT,UAAU;gBACV,OAAO;gBACP,OAAO;aACR,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACvD,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAA;YAEnE,gCAAgC;YAChC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;YAC7D,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;YAE1D,MAAM,YAAY,GAAG,QAAqB,CAAA;YAC1C,YAAY,CAAC,eAAe,CAAC;gBAC3B,IAAI,EAAE;oBACJ,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,UAAU;oBACnB,YAAY,EAAE,CAAC;oBACf,YAAY,EAAE,IAAI;oBAClB,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,wBAAwB;iBAChC;gBACD,SAAS,EAAE,KAAK;gBAChB,KAAK,EAAE,IAAI;aACZ,CAAC,CAAA;YAEF,oFAAoF;YACpF,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAA;QACpC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,WAAW,GAAG,qBAAqB,CACxC;YAAC,cAAc,CAAC,iBAA+B,CAAC,iBAAiB,CAChE,WAAW,CACZ,CACA;YAAC,sBAAoC,CAAC,eAAe,CAAC,WAAW,CAAC,CAAA;YAEnE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;YAC1D,MAAM,YAAY,GAAG,QAAqB,CAAA;YAE1C,+BAA+B;YAC/B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAA;YACxD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAA;gBAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACjC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBACxC,MAAM,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,gBAAgB,EAAE,CAAA;gBAC3D,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,gBAAgB,EAAE,CAAA;YACzD,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,WAAW,GAAG,qBAAqB,CAAA;YACzC,MAAM,YAAY,GAAG,4CAA4C,CAChE;YAAC,cAAc,CAAC,iBAA+B,CAAC,iBAAiB,CAChE,WAAW,CACZ,CACA;YAAC,sBAAoC,CAAC,eAAe,CAAC,WAAW,CAAC,CAAA;YAEnE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;YAC1D,MAAM,YAAY,GAAG,QAAqB,CAAA;YAE1C,+BAA+B;YAC/B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAA;YACxD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAA;gBAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACjC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBACxC,MAAM,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAC3D,UAAU,EACV,CAAC,EACD,iBAAiB,EACjB,YAAY,CACb,CAAA;YACH,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,eAAe,CAAC,CACvC;YAAC,cAAc,CAAC,iBAA+B,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAA;YAEzE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;YAC1D,MAAM,YAAY,GAAG,QAAqB,CAAA;YAE1C,+BAA+B;YAC/B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAA;YACxD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAA;gBAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAClC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;gBAC1C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;YACnC,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,YAAY,GAAG;gBACnB,QAAQ,EAAE;oBACR,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;oBACtD,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;iBAC5D;aACF,CAAA;YAED,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;YAC1D,MAAM,YAAY,GAAG,QAAqB,CAAA;YAC1C,YAAY,CAAC,eAAe,CAAC;gBAC3B,IAAI,EAAE,EAAE;gBACR,SAAS,EAAE,KAAK;gBAChB,KAAK,EAAE,IAAI;aACZ,CAAC,CAAA;YAEF,2CAA2C;YAC3C,yEAAyE;YACzE,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAA;QACpC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,gEAAgE;YAChE,yEAAyE;YACzE,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAC1D,wBAAwB,CACzB,CAAA;YAED,8BAA8B;YAC9B,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAEjD,iDAAiD;YACjD,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAA;YACpC,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;YAC3D,MAAM,WAAW,GAAG,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;YAC1D,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CACxC,UAAU,EACV,CAAC,EACD,UAAU,EACV,IAAI,CACL,CAAA;YAED,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;YACrC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAA;YACjE,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAA;YAChE,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for useWallet hook
|
|
3
|
-
*
|
|
4
|
-
* Tests wallet hook logic without React rendering
|
|
5
|
-
*/
|
|
6
|
-
import { getWorkletStore } from '../../store/workletStore';
|
|
7
|
-
import { getWalletStore } from '../../store/walletStore';
|
|
8
|
-
import { AddressService } from '../../services/addressService';
|
|
9
|
-
import { AccountService } from '../../services/accountService';
|
|
10
|
-
import { BalanceService } from '../../services/balanceService';
|
|
11
|
-
// Mock stores and services
|
|
12
|
-
jest.mock('../../store/workletStore', () => ({
|
|
13
|
-
getWorkletStore: jest.fn(),
|
|
14
|
-
}));
|
|
15
|
-
jest.mock('../../store/walletStore', () => ({
|
|
16
|
-
getWalletStore: jest.fn(),
|
|
17
|
-
}));
|
|
18
|
-
jest.mock('../../services/addressService', () => ({
|
|
19
|
-
AddressService: {
|
|
20
|
-
getAddress: jest.fn(),
|
|
21
|
-
},
|
|
22
|
-
}));
|
|
23
|
-
jest.mock('../../services/accountService', () => ({
|
|
24
|
-
AccountService: {
|
|
25
|
-
callAccountMethod: jest.fn(),
|
|
26
|
-
},
|
|
27
|
-
}));
|
|
28
|
-
jest.mock('../../services/balanceService', () => ({
|
|
29
|
-
BalanceService: {
|
|
30
|
-
updateBalance: jest.fn(),
|
|
31
|
-
getBalance: jest.fn(),
|
|
32
|
-
getBalancesForWallet: jest.fn(),
|
|
33
|
-
setBalanceLoading: jest.fn(),
|
|
34
|
-
isBalanceLoading: jest.fn(),
|
|
35
|
-
updateLastBalanceUpdate: jest.fn(),
|
|
36
|
-
getLastBalanceUpdate: jest.fn(),
|
|
37
|
-
clearBalances: jest.fn(),
|
|
38
|
-
},
|
|
39
|
-
}));
|
|
40
|
-
describe('useWallet', () => {
|
|
41
|
-
let mockWorkletStore;
|
|
42
|
-
let mockWalletStore;
|
|
43
|
-
beforeEach(() => {
|
|
44
|
-
jest.clearAllMocks();
|
|
45
|
-
mockWorkletStore = jest.fn((selector) => {
|
|
46
|
-
const state = {
|
|
47
|
-
isInitialized: true,
|
|
48
|
-
};
|
|
49
|
-
return selector ? selector(state) : state;
|
|
50
|
-
});
|
|
51
|
-
mockWalletStore = jest.fn((selector) => {
|
|
52
|
-
const state = {
|
|
53
|
-
addresses: {
|
|
54
|
-
ethereum: {
|
|
55
|
-
0: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0',
|
|
56
|
-
},
|
|
57
|
-
},
|
|
58
|
-
walletLoading: {},
|
|
59
|
-
balances: {
|
|
60
|
-
ethereum: {
|
|
61
|
-
0: {
|
|
62
|
-
native: '1000000000000000000',
|
|
63
|
-
},
|
|
64
|
-
},
|
|
65
|
-
},
|
|
66
|
-
balanceLoading: {},
|
|
67
|
-
lastBalanceUpdate: {
|
|
68
|
-
ethereum: {
|
|
69
|
-
0: 1234567890,
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
};
|
|
73
|
-
return selector ? selector(state) : state;
|
|
74
|
-
});
|
|
75
|
-
getWorkletStore.mockReturnValue(mockWorkletStore);
|
|
76
|
-
getWalletStore.mockReturnValue(mockWalletStore);
|
|
77
|
-
});
|
|
78
|
-
it('should call services correctly', () => {
|
|
79
|
-
// Test that the hook calls the correct services
|
|
80
|
-
// Since we can't easily test React hooks in Node, we verify the service calls
|
|
81
|
-
const mockAddress = '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0';
|
|
82
|
-
AddressService.getAddress.mockResolvedValue(mockAddress);
|
|
83
|
-
// Verify service methods are callable
|
|
84
|
-
expect(typeof AddressService.getAddress).toBe('function');
|
|
85
|
-
expect(typeof AccountService.callAccountMethod).toBe('function');
|
|
86
|
-
expect(typeof BalanceService.updateBalance).toBe('function');
|
|
87
|
-
expect(typeof BalanceService.getBalance).toBe('function');
|
|
88
|
-
expect(typeof BalanceService.getBalancesForWallet).toBe('function');
|
|
89
|
-
expect(typeof BalanceService.setBalanceLoading).toBe('function');
|
|
90
|
-
expect(typeof BalanceService.isBalanceLoading).toBe('function');
|
|
91
|
-
expect(typeof BalanceService.updateLastBalanceUpdate).toBe('function');
|
|
92
|
-
expect(typeof BalanceService.getLastBalanceUpdate).toBe('function');
|
|
93
|
-
expect(typeof BalanceService.clearBalances).toBe('function');
|
|
94
|
-
});
|
|
95
|
-
it('should have correct store structure', () => {
|
|
96
|
-
// Verify stores return expected structure
|
|
97
|
-
expect(getWorkletStore).toBeDefined();
|
|
98
|
-
expect(getWalletStore).toBeDefined();
|
|
99
|
-
const workletStore = getWorkletStore();
|
|
100
|
-
const walletStore = getWalletStore();
|
|
101
|
-
expect(workletStore).toBeDefined();
|
|
102
|
-
expect(walletStore).toBeDefined();
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
//# sourceMappingURL=useWallet.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useWallet.test.js","sourceRoot":"","sources":["../../../src/__tests__/hooks/useWallet.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for useWalletManager hook
|
|
3
|
-
*
|
|
4
|
-
* Tests wallet lifecycle management hook
|
|
5
|
-
*/
|
|
6
|
-
import { WalletSetupService } from '../../services/walletSetupService';
|
|
7
|
-
import { getWalletStore } from '../../store/walletStore';
|
|
8
|
-
// Mock stores and services
|
|
9
|
-
jest.mock('../../store/walletStore', () => ({
|
|
10
|
-
getWalletStore: jest.fn(),
|
|
11
|
-
}));
|
|
12
|
-
jest.mock('../../services/walletSetupService', () => ({
|
|
13
|
-
WalletSetupService: {
|
|
14
|
-
initializeWallet: jest.fn(),
|
|
15
|
-
hasWallet: jest.fn(),
|
|
16
|
-
initializeFromMnemonic: jest.fn(),
|
|
17
|
-
deleteWallet: jest.fn(),
|
|
18
|
-
getMnemonic: jest.fn(),
|
|
19
|
-
createNewWallet: jest.fn(),
|
|
20
|
-
},
|
|
21
|
-
}));
|
|
22
|
-
jest.mock('../../utils/logger', () => ({
|
|
23
|
-
log: jest.fn(),
|
|
24
|
-
logError: jest.fn(),
|
|
25
|
-
}));
|
|
26
|
-
// Mock React hooks
|
|
27
|
-
jest.mock('react', () => ({
|
|
28
|
-
useCallback: jest.fn((fn) => fn),
|
|
29
|
-
useMemo: jest.fn((fn) => fn()),
|
|
30
|
-
useState: jest.fn((initial) => [initial, jest.fn()]),
|
|
31
|
-
}));
|
|
32
|
-
jest.mock('zustand/react/shallow', () => ({
|
|
33
|
-
useShallow: jest.fn((selector) => selector),
|
|
34
|
-
}));
|
|
35
|
-
describe('useWalletManager', () => {
|
|
36
|
-
let mockWalletStore;
|
|
37
|
-
const mockNetworkConfigs = {
|
|
38
|
-
ethereum: {
|
|
39
|
-
chainId: 1,
|
|
40
|
-
blockchain: 'ethereum',
|
|
41
|
-
},
|
|
42
|
-
};
|
|
43
|
-
beforeEach(() => {
|
|
44
|
-
jest.clearAllMocks();
|
|
45
|
-
mockWalletStore = {
|
|
46
|
-
getState: jest.fn(() => ({
|
|
47
|
-
walletList: [],
|
|
48
|
-
activeWalletId: null,
|
|
49
|
-
})),
|
|
50
|
-
setState: jest.fn(),
|
|
51
|
-
};
|
|
52
|
-
getWalletStore.mockReturnValue(mockWalletStore);
|
|
53
|
-
});
|
|
54
|
-
describe('initializeWallet', () => {
|
|
55
|
-
it('should call WalletSetupService.initializeWallet', async () => {
|
|
56
|
-
;
|
|
57
|
-
WalletSetupService.initializeWallet.mockResolvedValue(undefined);
|
|
58
|
-
const { useWalletManager } = await import('../../hooks/useWalletManager');
|
|
59
|
-
// Since we can't easily test React hooks in Node, we verify the service calls
|
|
60
|
-
expect(WalletSetupService.initializeWallet).toBeDefined();
|
|
61
|
-
expect(typeof WalletSetupService.initializeWallet).toBe('function');
|
|
62
|
-
});
|
|
63
|
-
it('should handle initialization errors', async () => {
|
|
64
|
-
const error = new Error('Initialization failed');
|
|
65
|
-
WalletSetupService.initializeWallet.mockRejectedValue(error);
|
|
66
|
-
expect(WalletSetupService.initializeWallet).toBeDefined();
|
|
67
|
-
await expect(WalletSetupService.initializeWallet(mockNetworkConfigs, {})).rejects.toThrow('Initialization failed');
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
describe('initializeFromMnemonic', () => {
|
|
71
|
-
it('should call WalletSetupService.initializeFromMnemonic', async () => {
|
|
72
|
-
const mnemonic = 'word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12';
|
|
73
|
-
WalletSetupService.initializeFromMnemonic.mockResolvedValue(undefined);
|
|
74
|
-
expect(WalletSetupService.initializeFromMnemonic).toBeDefined();
|
|
75
|
-
await WalletSetupService.initializeFromMnemonic(mockNetworkConfigs, mnemonic, 'test-wallet');
|
|
76
|
-
expect(WalletSetupService.initializeFromMnemonic).toHaveBeenCalledWith(mockNetworkConfigs, mnemonic, 'test-wallet');
|
|
77
|
-
});
|
|
78
|
-
it('should handle mnemonic import errors', async () => {
|
|
79
|
-
const error = new Error('Invalid mnemonic');
|
|
80
|
-
WalletSetupService.initializeFromMnemonic.mockRejectedValue(error);
|
|
81
|
-
await expect(WalletSetupService.initializeFromMnemonic(mockNetworkConfigs, 'invalid', 'test-wallet')).rejects.toThrow('Invalid mnemonic');
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
describe('hasWallet', () => {
|
|
85
|
-
it('should check if wallet exists', async () => {
|
|
86
|
-
;
|
|
87
|
-
WalletSetupService.hasWallet.mockResolvedValue(true);
|
|
88
|
-
const result = await WalletSetupService.hasWallet('test-wallet');
|
|
89
|
-
expect(result).toBe(true);
|
|
90
|
-
expect(WalletSetupService.hasWallet).toHaveBeenCalledWith('test-wallet');
|
|
91
|
-
});
|
|
92
|
-
it('should return false if wallet does not exist', async () => {
|
|
93
|
-
;
|
|
94
|
-
WalletSetupService.hasWallet.mockResolvedValue(false);
|
|
95
|
-
const result = await WalletSetupService.hasWallet('non-existent');
|
|
96
|
-
expect(result).toBe(false);
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
describe('deleteWallet', () => {
|
|
100
|
-
it('should delete wallet and update store', async () => {
|
|
101
|
-
;
|
|
102
|
-
WalletSetupService.deleteWallet.mockResolvedValue(undefined);
|
|
103
|
-
mockWalletStore.getState.mockReturnValue({
|
|
104
|
-
walletList: [
|
|
105
|
-
{ identifier: 'test-wallet', exists: true, isActive: true },
|
|
106
|
-
],
|
|
107
|
-
activeWalletId: 'test-wallet',
|
|
108
|
-
});
|
|
109
|
-
await WalletSetupService.deleteWallet('test-wallet');
|
|
110
|
-
expect(WalletSetupService.deleteWallet).toHaveBeenCalledWith('test-wallet');
|
|
111
|
-
});
|
|
112
|
-
it('should handle delete errors', async () => {
|
|
113
|
-
const error = new Error('Delete failed');
|
|
114
|
-
WalletSetupService.deleteWallet.mockRejectedValue(error);
|
|
115
|
-
await expect(WalletSetupService.deleteWallet('test-wallet')).rejects.toThrow('Delete failed');
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
describe('getMnemonic', () => {
|
|
119
|
-
it('should retrieve mnemonic phrase', async () => {
|
|
120
|
-
const mnemonic = 'word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12';
|
|
121
|
-
WalletSetupService.getMnemonic.mockResolvedValue(mnemonic);
|
|
122
|
-
const result = await WalletSetupService.getMnemonic('test-wallet');
|
|
123
|
-
expect(result).toBe(mnemonic);
|
|
124
|
-
expect(WalletSetupService.getMnemonic).toHaveBeenCalledWith('test-wallet');
|
|
125
|
-
});
|
|
126
|
-
it('should return null if mnemonic not found', async () => {
|
|
127
|
-
;
|
|
128
|
-
WalletSetupService.getMnemonic.mockResolvedValue(null);
|
|
129
|
-
const result = await WalletSetupService.getMnemonic('non-existent');
|
|
130
|
-
expect(result).toBeNull();
|
|
131
|
-
});
|
|
132
|
-
it('should handle get mnemonic errors', async () => {
|
|
133
|
-
const error = new Error('Failed to get mnemonic');
|
|
134
|
-
WalletSetupService.getMnemonic.mockRejectedValue(error);
|
|
135
|
-
await expect(WalletSetupService.getMnemonic('test-wallet')).rejects.toThrow('Failed to get mnemonic');
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
describe('createWallet', () => {
|
|
139
|
-
it('should create new wallet', async () => {
|
|
140
|
-
;
|
|
141
|
-
WalletSetupService.hasWallet.mockResolvedValue(false);
|
|
142
|
-
WalletSetupService.createNewWallet.mockResolvedValue(undefined);
|
|
143
|
-
await WalletSetupService.createNewWallet(mockNetworkConfigs, 'new-wallet');
|
|
144
|
-
expect(WalletSetupService.createNewWallet).toHaveBeenCalledWith(mockNetworkConfigs, 'new-wallet');
|
|
145
|
-
});
|
|
146
|
-
it('should throw error if wallet already exists', async () => {
|
|
147
|
-
;
|
|
148
|
-
WalletSetupService.hasWallet.mockResolvedValue(true);
|
|
149
|
-
// This would be handled in the hook, but we verify the service
|
|
150
|
-
expect(WalletSetupService.hasWallet).toBeDefined();
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
describe('refreshWalletList', () => {
|
|
154
|
-
it('should refresh wallet list with known identifiers', async () => {
|
|
155
|
-
;
|
|
156
|
-
WalletSetupService.hasWallet.mockImplementation((id) => {
|
|
157
|
-
return Promise.resolve(id === 'wallet-1' || id === 'wallet-2');
|
|
158
|
-
});
|
|
159
|
-
mockWalletStore.getState.mockReturnValue({
|
|
160
|
-
walletList: [],
|
|
161
|
-
activeWalletId: 'wallet-1',
|
|
162
|
-
});
|
|
163
|
-
// Verify hasWallet can be called for multiple wallets
|
|
164
|
-
const wallet1Exists = await WalletSetupService.hasWallet('wallet-1');
|
|
165
|
-
const wallet2Exists = await WalletSetupService.hasWallet('wallet-2');
|
|
166
|
-
const wallet3Exists = await WalletSetupService.hasWallet('wallet-3');
|
|
167
|
-
expect(wallet1Exists).toBe(true);
|
|
168
|
-
expect(wallet2Exists).toBe(true);
|
|
169
|
-
expect(wallet3Exists).toBe(false);
|
|
170
|
-
});
|
|
171
|
-
it('should handle refresh errors', async () => {
|
|
172
|
-
const error = new Error('Refresh failed');
|
|
173
|
-
WalletSetupService.hasWallet.mockRejectedValue(error);
|
|
174
|
-
await expect(WalletSetupService.hasWallet('test-wallet')).rejects.toThrow('Refresh failed');
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
describe('wallet list state', () => {
|
|
178
|
-
it('should return wallet list from store', () => {
|
|
179
|
-
const walletList = [
|
|
180
|
-
{ identifier: 'wallet-1', exists: true, isActive: true },
|
|
181
|
-
{ identifier: 'wallet-2', exists: true, isActive: false },
|
|
182
|
-
];
|
|
183
|
-
mockWalletStore.getState.mockReturnValue({
|
|
184
|
-
walletList,
|
|
185
|
-
activeWalletId: 'wallet-1',
|
|
186
|
-
});
|
|
187
|
-
const state = mockWalletStore.getState();
|
|
188
|
-
expect(state.walletList).toEqual(walletList);
|
|
189
|
-
expect(state.activeWalletId).toBe('wallet-1');
|
|
190
|
-
});
|
|
191
|
-
});
|
|
192
|
-
});
|
|
193
|
-
//# sourceMappingURL=useWalletManager.test.js.map
|