Skip to content

Commit

Permalink
fixed: update the store load in testt
Browse files Browse the repository at this point in the history
  • Loading branch information
zzggo committed Feb 13, 2025
1 parent 2332c4b commit 746abe5
Show file tree
Hide file tree
Showing 3 changed files with 178 additions and 267 deletions.
146 changes: 79 additions & 67 deletions src/ui/hooks/__tests__/useCoinHook.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,79 +2,81 @@ import { act } from 'react';
import { describe, it, expect, vi, beforeEach } from 'vitest';

import { useCoinStore } from '@/ui/stores/coinStore';
import { useNetworkStore } from '@/ui/stores/networkStore';
import { useProfileStore } from '@/ui/stores/profileStore';
import { useWallet, useWalletLoaded } from '@/ui/utils/WalletContext';

import { useCoinHook } from '../useCoinHook';

// Mock React
vi.mock('react', async () => {
const actual = await vi.importActual('react');
return {
...actual,
useRef: vi.fn(),
useEffect: vi.fn(),
useEffect: vi.fn().mockImplementation((fn) => fn()),
useCallback: vi.fn().mockImplementation((fn) => fn),
};
});

// Mock the stores
vi.mock('@/ui/stores/coinStore', () => {
const mockSetBalance = vi.fn();
const mockSetCoinData = vi.fn();
const mockSetTotalFlow = vi.fn();
const mockSetAvailableFlow = vi.fn();

return {
useCoinStore: Object.assign(
vi.fn().mockReturnValue({
setCoinData: mockSetCoinData,
setBalance: mockSetBalance,
setTotalFlow: mockSetTotalFlow,
totalFlow: '0',
setAvailableFlow: mockSetAvailableFlow,
}),
{
getState: () => ({
setCoinData: mockSetCoinData,
setBalance: mockSetBalance,
setTotalFlow: mockSetTotalFlow,
totalFlow: '0',
setAvailableFlow: mockSetAvailableFlow,
}),
}
),
};
});
// Mock all stores first
vi.mock('@/ui/stores/networkStore', () => ({
useNetworkStore: vi.fn((selector) =>
selector({
currentNetwork: 'mainnet',
developerMode: false,
emulatorModeOn: false,
setNetwork: vi.fn(),
setDeveloperMode: vi.fn(),
setEmulatorModeOn: vi.fn(),
})
),
}));

vi.mock('@/ui/stores/profileStore', () => ({
useProfileStore: vi.fn().mockReturnValue({
mainAddress: 'test-address',
}),
useProfileStore: vi.fn((selector) =>
selector({
mainAddress: 'test-address',
currentWallet: {},
setMainAddress: vi.fn(),
})
),
}));

// Mock the wallet context
vi.mock('@/ui/utils/WalletContext', () => ({
useWalletLoaded: vi.fn().mockResolvedValue(true),
useWallet: () => ({
refreshCoinList: vi.fn().mockResolvedValue(undefined),
getMainWallet: vi.fn(),
openapi: {
getAccountMinFlow: vi.fn(),
},
vi.mock('@/ui/stores/coinStore', () => ({
useCoinStore: vi.fn((selector) =>
selector({
coins: [],
balance: '$ 0.00',
availableFlow: '0',
totalFlow: '0',
setCoinData: vi.fn(),
setBalance: vi.fn(),
setTotalFlow: vi.fn(),
setAvailableFlow: vi.fn(),
clearCoins: vi.fn(),
})
),
getState: vi.fn().mockReturnValue({
setCoinData: vi.fn(),
}),
}));

// Mock Storage
const mockStorage = {
get: vi.fn().mockImplementation(() =>
Promise.resolve([
{ unit: 'USDC.e', total: null, balance: null },
// Mock storage
vi.mock('@/background/webapi', () => ({
storage: {
get: vi.fn().mockResolvedValue([
{ unit: 'FLOW', total: '5.0', balance: '5.0' },
{ unit: 'WFLOW', total: '2.0', balance: '2.0' },
])
),
};
]),
},
}));

vi.mock('@/background/webapi', () => ({
storage: mockStorage,
// Mock wallet context
vi.mock('@/ui/utils/WalletContext', () => ({
useWalletLoaded: vi.fn().mockReturnValue(true),
useWallet: vi.fn().mockReturnValue({
refreshCoinList: vi.fn().mockResolvedValue(undefined),
}),
}));

describe('useCoinHook', () => {
Expand All @@ -84,27 +86,32 @@ describe('useCoinHook', () => {
let mockSetAvailableFlow: ReturnType<typeof vi.fn>;

beforeEach(() => {
vi.clearAllMocks();
mockSetBalance = vi.fn();
mockSetCoinData = vi.fn();
mockSetTotalFlow = vi.fn();
mockSetAvailableFlow = vi.fn();

vi.mocked(useCoinStore).mockReturnValue({
setCoinData: mockSetCoinData,
setBalance: mockSetBalance,
setTotalFlow: mockSetTotalFlow,
totalFlow: '0',
setAvailableFlow: mockSetAvailableFlow,
});

vi.clearAllMocks();
vi.mocked(useCoinStore).mockImplementation((selector) =>
selector({
coins: [],
balance: '$ 0.00',
availableFlow: '0',
totalFlow: '0',
setCoinData: mockSetCoinData,
setBalance: mockSetBalance,
setTotalFlow: mockSetTotalFlow,
setAvailableFlow: mockSetAvailableFlow,
clearCoins: vi.fn(),
})
);
});

describe('handleStorageData', () => {
it('should handle empty data', async () => {
const { handleStorageData } = useCoinHook();
await handleStorageData(null);
expect(useCoinStore.getState().setCoinData).not.toHaveBeenCalled();
expect(mockSetCoinData).not.toHaveBeenCalled();
});

it('should process unique tokens and calculate totals', async () => {
Expand Down Expand Up @@ -159,14 +166,20 @@ describe('useCoinHook', () => {
}));

// Mock storage
mockStorage.get.mockReset();
vi.mock('@/background/webapi', () => ({
storage: {
get: vi.fn().mockResolvedValue([
{ unit: 'FLOW', total: '5.0', balance: '5.0' },
{ unit: 'WFLOW', total: '2.0', balance: '2.0' },
]),
},
}));
});

it('should handle empty data', async () => {
mockStorage.get.mockResolvedValue(null);
const { refreshCoinData } = useCoinHook();
await refreshCoinData();
expect(useCoinStore.getState().setCoinData).not.toHaveBeenCalled();
expect(mockSetCoinData).not.toHaveBeenCalled();
});

it('should handle null totals', async () => {
Expand All @@ -176,7 +189,6 @@ describe('useCoinHook', () => {
{ unit: 'WFLOW', total: '2.0', balance: '2.0' },
];

mockStorage.get.mockResolvedValue(mockData);
const { refreshCoinData } = useCoinHook();

await act(async () => {
Expand All @@ -185,7 +197,7 @@ describe('useCoinHook', () => {
await new Promise((resolve) => setTimeout(resolve, 0));
});

console.log('Storage mock calls:', mockStorage.get.mock.calls);
console.log('Storage mock calls:', vi.mocked(vi.fn()).mock.calls);
console.log('TotalFlow mock calls:', mockSetTotalFlow.mock.calls);
});
});
Expand Down
36 changes: 25 additions & 11 deletions src/ui/hooks/__tests__/useNetworkHook.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { describe, it, expect, vi, beforeEach } from 'vitest';

import { useNetworkStore } from '@/ui/stores/networkStore';
import { useWallet, useWalletLoaded } from '@/ui/utils/WalletContext';

import { useNetworkHook } from '../useNetworkHook';

Expand All @@ -15,15 +16,21 @@ vi.mock('react', async () => {

// Mock the store
vi.mock('@/ui/stores/networkStore', () => ({
useNetworkStore: vi.fn().mockReturnValue({
setNetwork: vi.fn(),
}),
useNetworkStore: vi.fn((selector) =>
selector({
currentNetwork: 'mainnet',
developerMode: false,
emulatorModeOn: false,
setNetwork: vi.fn(),
setDeveloperMode: vi.fn(),
setEmulatorModeOn: vi.fn(),
})
),
}));

// Mock the wallet context
vi.mock('@/ui/utils/WalletContext', () => ({
useWalletLoaded: vi.fn().mockResolvedValue(true),

useWalletLoaded: vi.fn().mockReturnValue(true),
useWallet: vi.fn().mockReturnValue({
getNetwork: vi.fn().mockResolvedValue('mainnet'),
}),
Expand All @@ -34,17 +41,24 @@ describe('useNetworkHook', () => {

beforeEach(() => {
mockSetNetwork = vi.fn();
vi.mocked(useNetworkStore).mockReturnValue({
setNetwork: mockSetNetwork,
});
vi.mocked(useNetworkStore).mockImplementation((selector) =>
selector({
currentNetwork: 'mainnet',
developerMode: false,
emulatorModeOn: false,
setNetwork: mockSetNetwork,
setDeveloperMode: vi.fn(),
setEmulatorModeOn: vi.fn(),
})
);
});

describe('fetchNetwork', () => {
it('should correctly identify network type', async () => {
const { fetchNetwork } = useNetworkHook();
await fetchNetwork();
const hook = useNetworkHook();
await hook.fetchNetwork();

expect(mockSetNetwork).toHaveBeenCalledWith(expect.stringMatching(/^(mainnet|testnet)$/));
expect(mockSetNetwork).toHaveBeenCalledWith('mainnet');
});
});
});
Loading

0 comments on commit 746abe5

Please sign in to comment.