Skip to content

Commit 32ae109

Browse files
committed
fix: update tests to match new hook-based data fetching
Update 10 test files to work with the refactored pages that now use data hooks instead of inline query logic: - Add @/hooks/use-tenant-context mock for hooks that need tenantSlug - Switch from useClients to useApiClients mocks where hooks changed - Mock ../hooks module for payments and reconciliation tests - Update booking-log-header test to use instrumentCode (was baseCurrency)
1 parent 6d1dc3f commit 32ae109

10 files changed

Lines changed: 154 additions & 82 deletions

File tree

frontend/src/features/ledger/pages/booking-log-header.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const mockBookingLog: FinancialBookingLog = {
99
productServiceReference: 'PRODUCT-A',
1010
businessUnitReference: 'BU-TRADING',
1111
chartOfAccountsRules: 'STANDARD',
12-
baseCurrency: 'GBP',
12+
instrumentCode: 'GBP',
1313
status: 'PENDING',
1414
createdAt: { seconds: 1700000000n, nanos: 0 },
1515
updatedAt: { seconds: 1700001000n, nanos: 0 },

frontend/src/features/parties/pages/[partyId].test.tsx

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,23 @@ vi.mock('@/api/context', () => ({
2323
retrieveDemographics: vi.fn().mockResolvedValue(null),
2424
},
2525
})),
26+
useApiClients: vi.fn(() => ({
27+
party: {
28+
retrieveParty: vi.fn().mockResolvedValue({
29+
party: {
30+
partyId: 'test-party-1',
31+
legalName: 'Test Party',
32+
partyType: 'PARTY_TYPE_ORGANIZATION',
33+
status: 'PARTY_STATUS_ACTIVE',
34+
},
35+
}),
36+
listPaymentMethods: vi.fn().mockResolvedValue({ paymentMethods: [] }),
37+
retrieveReference: vi.fn().mockResolvedValue({}),
38+
retrieveAssociations: vi.fn().mockResolvedValue({}),
39+
retrieveBankRelations: vi.fn().mockResolvedValue({}),
40+
retrieveDemographics: vi.fn().mockResolvedValue(null),
41+
},
42+
})),
2643
}))
2744

2845
// Mock useAuth to avoid requiring AuthProvider in tests
@@ -35,6 +52,14 @@ vi.mock('@/contexts/tenant-context', () => ({
3552
useTenantContext: vi.fn(() => ({ tenantSlug: 'test-tenant', isPlatformAdmin: false, currentTenant: null, switchTenant: vi.fn() })),
3653
}))
3754

55+
vi.mock('@/hooks/use-tenant-context', () => ({
56+
useTenantSlug: () => 'test-tenant',
57+
useCurrentTenant: () => null,
58+
useIsPlatformAdmin: () => false,
59+
useSwitchTenant: () => vi.fn(),
60+
useClearTenant: () => vi.fn(),
61+
}))
62+
3863
import { PartyDetailPage } from './[partyId]'
3964

4065
function makeQueryClient() {

frontend/src/features/parties/pages/tabs/associations-tab.test.tsx

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,21 @@ import { render, screen, waitFor } from '@testing-library/react'
33
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
44
import { TooltipProvider } from '@/components/ui/tooltip'
55

6+
const mockRetrieveAssociations = vi.fn().mockResolvedValue({})
7+
68
vi.mock('@/api/context', () => ({
7-
useClients: vi.fn(),
8-
useApiClients: vi.fn(),
9+
useClients: vi.fn(() => ({
10+
party: {
11+
retrieveAssociations: mockRetrieveAssociations,
12+
},
13+
})),
14+
useApiClients: vi.fn(() => ({
15+
party: {
16+
retrieveAssociations: mockRetrieveAssociations,
17+
listParties: vi.fn().mockResolvedValue({ parties: [] }),
18+
registerAssociations: vi.fn(),
19+
},
20+
})),
921
}))
1022

1123
vi.mock('@/hooks/use-tenant-context', () => ({
@@ -53,11 +65,11 @@ describe('AssociationsTab', () => {
5365

5466
describe('loading state', () => {
5567
it('renders skeletons while loading', () => {
56-
vi.mocked(useClients).mockReturnValue({
68+
vi.mocked(useApiClients).mockReturnValue({
5769
party: {
5870
retrieveAssociations: vi.fn(() => new Promise(() => {})),
5971
},
60-
} as ReturnType<typeof useClients>)
72+
} as ReturnType<typeof useApiClients>)
6173

6274
const { container } = renderTab()
6375

@@ -66,11 +78,11 @@ describe('AssociationsTab', () => {
6678
})
6779

6880
it('does not render empty state while loading', () => {
69-
vi.mocked(useClients).mockReturnValue({
81+
vi.mocked(useApiClients).mockReturnValue({
7082
party: {
7183
retrieveAssociations: vi.fn(() => new Promise(() => {})),
7284
},
73-
} as ReturnType<typeof useClients>)
85+
} as ReturnType<typeof useApiClients>)
7486

7587
renderTab()
7688

@@ -80,11 +92,11 @@ describe('AssociationsTab', () => {
8092

8193
describe('empty state', () => {
8294
it('renders empty state heading after data loads', async () => {
83-
vi.mocked(useClients).mockReturnValue({
95+
vi.mocked(useApiClients).mockReturnValue({
8496
party: {
8597
retrieveAssociations: vi.fn().mockResolvedValue({}),
8698
},
87-
} as ReturnType<typeof useClients>)
99+
} as ReturnType<typeof useApiClients>)
88100

89101
renderTab()
90102

@@ -94,11 +106,11 @@ describe('AssociationsTab', () => {
94106
})
95107

96108
it('renders descriptive message', async () => {
97-
vi.mocked(useClients).mockReturnValue({
109+
vi.mocked(useApiClients).mockReturnValue({
98110
party: {
99111
retrieveAssociations: vi.fn().mockResolvedValue({}),
100112
},
101-
} as ReturnType<typeof useClients>)
113+
} as ReturnType<typeof useApiClients>)
102114

103115
renderTab()
104116

@@ -108,11 +120,11 @@ describe('AssociationsTab', () => {
108120
})
109121

110122
it('renders add association button', async () => {
111-
vi.mocked(useClients).mockReturnValue({
123+
vi.mocked(useApiClients).mockReturnValue({
112124
party: {
113125
retrieveAssociations: vi.fn().mockResolvedValue({}),
114126
},
115-
} as ReturnType<typeof useClients>)
127+
} as ReturnType<typeof useApiClients>)
116128

117129
renderTab()
118130

@@ -125,9 +137,9 @@ describe('AssociationsTab', () => {
125137
describe('query key', () => {
126138
it('calls retrieveAssociations with the provided partyId', async () => {
127139
const retrieveAssociations = vi.fn().mockResolvedValue({})
128-
vi.mocked(useClients).mockReturnValue({
140+
vi.mocked(useApiClients).mockReturnValue({
129141
party: { retrieveAssociations },
130-
} as ReturnType<typeof useClients>)
142+
} as ReturnType<typeof useApiClients>)
131143

132144
renderTab('party-abc')
133145

frontend/src/features/payments/pages/payment-detail.test.tsx

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,15 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
66
import { TooltipProvider } from '@/components/ui/tooltip'
77
import { AuthProvider } from '@/contexts/auth-context'
88
import { TenantProvider } from '@/contexts/tenant-context'
9-
import { PaymentDetailPage } from './payment-detail'
10-
11-
vi.mock('./payment-detail-query', () => ({
12-
fetchPaymentDetail: vi.fn(),
9+
// Mock the payment detail hook
10+
const mockPaymentDetailQuery = vi.fn()
11+
12+
vi.mock('../hooks', () => ({
13+
usePaymentDetail: vi.fn(() => ({
14+
data: null,
15+
isLoading: false,
16+
isError: false,
17+
})),
1318
}))
1419

1520
// Mock dialog mutations to avoid requiring a live API transport
@@ -19,8 +24,17 @@ vi.mock('./dialogs/payment-mutations', () => ({
1924
useReversePayment: () => ({ mutateAsync: vi.fn(), isPending: false, reset: vi.fn() }),
2025
}))
2126

22-
import { fetchPaymentDetail } from './payment-detail-query'
23-
const mockFetch = vi.mocked(fetchPaymentDetail)
27+
vi.mock('@/hooks/use-tenant-context', () => ({
28+
useTenantSlug: () => 'test-tenant',
29+
useCurrentTenant: () => null,
30+
useIsPlatformAdmin: () => false,
31+
useSwitchTenant: () => vi.fn(),
32+
useClearTenant: () => vi.fn(),
33+
}))
34+
35+
import { usePaymentDetail } from '../hooks'
36+
import { PaymentDetailPage } from './payment-detail'
37+
const mockUsePaymentDetail = vi.mocked(usePaymentDetail)
2438

2539
function makeQueryClient() {
2640
return new QueryClient({
@@ -73,7 +87,7 @@ const sampleDetail = {
7387

7488
describe('PaymentDetailPage - structure', () => {
7589
beforeEach(() => {
76-
mockFetch.mockResolvedValue(sampleDetail)
90+
mockUsePaymentDetail.mockReturnValue({ data: sampleDetail, isLoading: false, isError: false } as ReturnType<typeof usePaymentDetail>)
7791
})
7892

7993
it('renders payment order ID as heading', async () => {
@@ -117,7 +131,7 @@ describe('PaymentDetailPage - structure', () => {
117131

118132
describe('PaymentDetailPage - Overview tab', () => {
119133
beforeEach(() => {
120-
mockFetch.mockResolvedValue(sampleDetail)
134+
mockUsePaymentDetail.mockReturnValue({ data: sampleDetail, isLoading: false, isError: false } as ReturnType<typeof usePaymentDetail>)
121135
})
122136

123137
it('shows payment details in Overview tab', async () => {
@@ -174,7 +188,7 @@ describe('PaymentDetailPage - Overview tab', () => {
174188

175189
describe('PaymentDetailPage - Saga Steps tab', () => {
176190
beforeEach(() => {
177-
mockFetch.mockResolvedValue(sampleDetail)
191+
mockUsePaymentDetail.mockReturnValue({ data: sampleDetail, isLoading: false, isError: false } as ReturnType<typeof usePaymentDetail>)
178192
})
179193

180194
it('shows SagaTimeline when Saga Steps tab is clicked', async () => {
@@ -221,8 +235,7 @@ describe('PaymentDetailPage - Saga Steps tab', () => {
221235

222236
describe('PaymentDetailPage - loading state', () => {
223237
it('shows skeleton while loading', () => {
224-
// Never resolves
225-
mockFetch.mockReturnValue(new Promise(() => {}))
238+
mockUsePaymentDetail.mockReturnValue({ data: undefined, isLoading: true, isError: false } as ReturnType<typeof usePaymentDetail>)
226239

227240
render(
228241
<Wrapper>
@@ -236,7 +249,7 @@ describe('PaymentDetailPage - loading state', () => {
236249

237250
describe('PaymentDetailPage - error state', () => {
238251
it('shows error message on fetch failure', async () => {
239-
mockFetch.mockRejectedValue(new Error('Not found'))
252+
mockUsePaymentDetail.mockReturnValue({ data: undefined, isLoading: false, isError: true } as ReturnType<typeof usePaymentDetail>)
240253

241254
render(
242255
<Wrapper>

frontend/src/features/payments/pages/payments-list.test.tsx

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,18 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
66
import { TooltipProvider } from '@/components/ui/tooltip'
77
import { AuthProvider } from '@/contexts/auth-context'
88
import { TenantProvider } from '@/contexts/tenant-context'
9-
import { PaymentsPage } from './index'
10-
11-
// Mock the payments query function
12-
vi.mock('./payments-query', () => ({
13-
fetchPayments: vi.fn(),
9+
// Mock the payments hook
10+
const mockQueryFn = vi.fn()
11+
12+
vi.mock('../hooks', () => ({
13+
usePaymentsTable: vi.fn(() => ({
14+
queryKey: ['test-tenant', 'payments'],
15+
queryFn: mockQueryFn,
16+
tenantSlug: 'test-tenant',
17+
})),
1418
}))
1519

16-
import { fetchPayments } from './payments-query'
17-
const mockFetchPayments = vi.mocked(fetchPayments)
20+
import { PaymentsPage } from './index'
1821

1922
function makeQueryClient() {
2023
return new QueryClient({
@@ -60,7 +63,7 @@ const samplePayments = [
6063

6164
describe('PaymentsPage - list rendering', () => {
6265
it('renders page heading', async () => {
63-
mockFetchPayments.mockResolvedValue({ items: [] })
66+
mockQueryFn.mockResolvedValue({ items: [] })
6467

6568
render(
6669
<Wrapper>
@@ -72,7 +75,7 @@ describe('PaymentsPage - list rendering', () => {
7275
})
7376

7477
it('renders column headers', async () => {
75-
mockFetchPayments.mockResolvedValue({ items: [] })
78+
mockQueryFn.mockResolvedValue({ items: [] })
7679

7780
render(
7881
<Wrapper>
@@ -91,7 +94,7 @@ describe('PaymentsPage - list rendering', () => {
9194
})
9295

9396
it('renders payment rows with data', async () => {
94-
mockFetchPayments.mockResolvedValue({ items: samplePayments })
97+
mockQueryFn.mockResolvedValue({ items: samplePayments })
9598

9699
render(
97100
<Wrapper>
@@ -106,7 +109,7 @@ describe('PaymentsPage - list rendering', () => {
106109
})
107110

108111
it('renders amount using MoneyDisplay', async () => {
109-
mockFetchPayments.mockResolvedValue({ items: samplePayments })
112+
mockQueryFn.mockResolvedValue({ items: samplePayments })
110113

111114
render(
112115
<Wrapper>
@@ -121,7 +124,7 @@ describe('PaymentsPage - list rendering', () => {
121124
})
122125

123126
it('renders status using StatusBadge', async () => {
124-
mockFetchPayments.mockResolvedValue({ items: samplePayments })
127+
mockQueryFn.mockResolvedValue({ items: samplePayments })
125128

126129
render(
127130
<Wrapper>
@@ -138,7 +141,7 @@ describe('PaymentsPage - list rendering', () => {
138141

139142
describe('PaymentsPage - navigation', () => {
140143
it('navigates to detail page on row click', async () => {
141-
mockFetchPayments.mockResolvedValue({ items: samplePayments })
144+
mockQueryFn.mockResolvedValue({ items: samplePayments })
142145

143146
const onNavigate = vi.fn()
144147

@@ -166,7 +169,7 @@ describe('PaymentsPage - navigation', () => {
166169

167170
describe('PaymentsPage - filters', () => {
168171
it('renders status filter select', async () => {
169-
mockFetchPayments.mockResolvedValue({ items: [] })
172+
mockQueryFn.mockResolvedValue({ items: [] })
170173

171174
render(
172175
<Wrapper>

frontend/src/features/positions/pages/detail.test.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,14 @@ vi.mock('@/api/context', () => ({
1515
})),
1616
}))
1717

18+
vi.mock('@/hooks/use-tenant-context', () => ({
19+
useTenantSlug: () => 'test-tenant',
20+
useCurrentTenant: () => null,
21+
useIsPlatformAdmin: () => false,
22+
useSwitchTenant: () => vi.fn(),
23+
useClearTenant: () => vi.fn(),
24+
}))
25+
1826
import { PositionDetailPage } from './detail'
1927

2028
function makeQueryClient() {

frontend/src/features/positions/pages/index.test.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@ vi.mock('@/api/context', () => ({
2020
})),
2121
}))
2222

23+
vi.mock('@/hooks/use-tenant-context', () => ({
24+
useTenantSlug: () => 'test-tenant',
25+
useCurrentTenant: () => null,
26+
useIsPlatformAdmin: () => false,
27+
useSwitchTenant: () => vi.fn(),
28+
useClearTenant: () => vi.fn(),
29+
}))
30+
2331
import { PositionsPage } from './index'
2432

2533
function makeQueryClient() {

0 commit comments

Comments
 (0)