mirror of
https://github.com/actualbudget/actual.git
synced 2026-04-28 10:33:02 -05:00
TestProviders
This commit is contained in:
@@ -10,7 +10,7 @@ import type { AccountEntity } from 'loot-core/types/models';
|
||||
import { ReconcileMenu, ReconcilingMessage } from './Reconcile';
|
||||
|
||||
import { useSheetValue } from '@desktop-client/hooks/useSheetValue';
|
||||
import { TestProvider } from '@desktop-client/redux/mock';
|
||||
import { TestProviders } from '@desktop-client/mocks';
|
||||
|
||||
vi.mock('@desktop-client/hooks/useSheetValue', () => ({
|
||||
useSheetValue: vi.fn(),
|
||||
@@ -40,14 +40,14 @@ describe('ReconcilingMessage math & UI', () => {
|
||||
const onCreateTransaction = vi.fn();
|
||||
|
||||
render(
|
||||
<TestProvider>
|
||||
<TestProviders>
|
||||
<ReconcilingMessage
|
||||
balanceQuery={makeBalanceQuery()}
|
||||
targetBalance={5000}
|
||||
onDone={onDone}
|
||||
onCreateTransaction={onCreateTransaction}
|
||||
/>
|
||||
</TestProvider>,
|
||||
</TestProviders>,
|
||||
);
|
||||
|
||||
expect(screen.getByText('All reconciled!')).toBeInTheDocument();
|
||||
@@ -67,14 +67,14 @@ describe('ReconcilingMessage math & UI', () => {
|
||||
const onCreateTransaction = vi.fn();
|
||||
|
||||
render(
|
||||
<TestProvider>
|
||||
<TestProviders>
|
||||
<ReconcilingMessage
|
||||
balanceQuery={makeBalanceQuery()}
|
||||
targetBalance={10000}
|
||||
onDone={vi.fn()}
|
||||
onCreateTransaction={onCreateTransaction}
|
||||
/>
|
||||
</TestProvider>,
|
||||
</TestProviders>,
|
||||
);
|
||||
|
||||
// Formatted amounts present
|
||||
@@ -95,14 +95,14 @@ describe('ReconcilingMessage math & UI', () => {
|
||||
const onCreateTransaction = vi.fn();
|
||||
|
||||
render(
|
||||
<TestProvider>
|
||||
<TestProviders>
|
||||
<ReconcilingMessage
|
||||
balanceQuery={makeBalanceQuery()}
|
||||
targetBalance={10000}
|
||||
onDone={vi.fn()}
|
||||
onCreateTransaction={onCreateTransaction}
|
||||
/>
|
||||
</TestProvider>,
|
||||
</TestProviders>,
|
||||
);
|
||||
|
||||
expect(screen.getByText('120.00')).toBeInTheDocument();
|
||||
@@ -133,13 +133,13 @@ describe('ReconcileMenu arithmetic evaluation', () => {
|
||||
const onClose = vi.fn();
|
||||
|
||||
render(
|
||||
<TestProvider>
|
||||
<TestProviders>
|
||||
<ReconcileMenu
|
||||
account={baseAccount as AccountEntity}
|
||||
onReconcile={onReconcile}
|
||||
onClose={onClose}
|
||||
/>
|
||||
</TestProvider>,
|
||||
</TestProviders>,
|
||||
);
|
||||
|
||||
const input = screen.getByRole('textbox');
|
||||
@@ -162,13 +162,13 @@ describe('ReconcileMenu arithmetic evaluation', () => {
|
||||
const onClose = vi.fn();
|
||||
|
||||
render(
|
||||
<TestProvider>
|
||||
<TestProviders>
|
||||
<ReconcileMenu
|
||||
account={baseAccount as AccountEntity}
|
||||
onReconcile={onReconcile}
|
||||
onClose={onClose}
|
||||
/>
|
||||
</TestProvider>,
|
||||
</TestProviders>,
|
||||
);
|
||||
|
||||
const input = screen.getByRole('textbox');
|
||||
@@ -200,13 +200,13 @@ describe('ReconcileMenu arithmetic evaluation', () => {
|
||||
connectedAccount.balance_current = 4321;
|
||||
|
||||
render(
|
||||
<TestProvider>
|
||||
<TestProviders>
|
||||
<ReconcileMenu
|
||||
account={connectedAccount}
|
||||
onReconcile={onReconcile}
|
||||
onClose={onClose}
|
||||
/>
|
||||
</TestProvider>,
|
||||
</TestProviders>,
|
||||
);
|
||||
|
||||
// Fill from last synced value (43.21)
|
||||
@@ -223,13 +223,13 @@ describe('ReconcileMenu arithmetic evaluation', () => {
|
||||
const onReconcile = vi.fn();
|
||||
const onClose = vi.fn();
|
||||
render(
|
||||
<TestProvider>
|
||||
<TestProviders>
|
||||
<ReconcileMenu
|
||||
account={baseAccount as AccountEntity}
|
||||
onReconcile={onReconcile}
|
||||
onClose={onClose}
|
||||
/>
|
||||
</TestProvider>,
|
||||
</TestProviders>,
|
||||
);
|
||||
|
||||
const input = screen.getByRole('textbox');
|
||||
@@ -247,13 +247,13 @@ describe('ReconcileMenu arithmetic evaluation', () => {
|
||||
const onReconcile = vi.fn();
|
||||
const onClose = vi.fn();
|
||||
render(
|
||||
<TestProvider>
|
||||
<TestProviders>
|
||||
<ReconcileMenu
|
||||
account={baseAccount as AccountEntity}
|
||||
onReconcile={onReconcile}
|
||||
onClose={onClose}
|
||||
/>
|
||||
</TestProvider>,
|
||||
</TestProviders>,
|
||||
);
|
||||
|
||||
await userEvent.click(screen.getByRole('button', { name: 'Reconcile' }));
|
||||
|
||||
@@ -11,7 +11,7 @@ import type { PayeeAutocompleteProps } from './PayeeAutocomplete';
|
||||
|
||||
import { AuthProvider } from '@desktop-client/auth/AuthProvider';
|
||||
import { useCommonPayees } from '@desktop-client/hooks/usePayees';
|
||||
import { TestProvider } from '@desktop-client/redux/mock';
|
||||
import { TestProviders } from '@desktop-client/mocks';
|
||||
|
||||
const PAYEE_SELECTOR = '[data-testid][role=option]';
|
||||
const PAYEE_SECTION_SELECTOR = '[data-testid$="-item-group"]';
|
||||
@@ -74,7 +74,7 @@ function renderPayeeAutocomplete(
|
||||
};
|
||||
|
||||
render(
|
||||
<TestProvider>
|
||||
<TestProviders>
|
||||
<AuthProvider>
|
||||
<div data-testid="autocomplete-test">
|
||||
<PayeeAutocomplete
|
||||
@@ -86,7 +86,7 @@ function renderPayeeAutocomplete(
|
||||
/>
|
||||
</div>
|
||||
</AuthProvider>
|
||||
</TestProvider>,
|
||||
</TestProviders>,
|
||||
);
|
||||
return screen.getByTestId('autocomplete-test');
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ import { vi } from 'vitest';
|
||||
|
||||
import { GoCardlessExternalMsgModal } from './GoCardlessExternalMsgModal';
|
||||
|
||||
import { TestProvider } from '@desktop-client/redux/mock';
|
||||
import { TestProviders } from '@desktop-client/mocks';
|
||||
|
||||
vi.mock('@desktop-client/hooks/useGlobalPref', () => ({
|
||||
useGlobalPref: () => [null],
|
||||
@@ -50,9 +50,9 @@ describe('GoCardlessExternalMsgModal - Country Auto-selection', () => {
|
||||
});
|
||||
|
||||
render(
|
||||
<TestProvider>
|
||||
<TestProviders>
|
||||
<GoCardlessExternalMsgModal {...mockProps} />
|
||||
</TestProvider>,
|
||||
</TestProviders>,
|
||||
);
|
||||
|
||||
const countryInput = screen.getByPlaceholderText('(please select)');
|
||||
@@ -76,9 +76,9 @@ describe('GoCardlessExternalMsgModal - Country Auto-selection', () => {
|
||||
});
|
||||
|
||||
render(
|
||||
<TestProvider>
|
||||
<TestProviders>
|
||||
<GoCardlessExternalMsgModal {...mockProps} />
|
||||
</TestProvider>,
|
||||
</TestProviders>,
|
||||
);
|
||||
|
||||
const countryInput = screen.getByPlaceholderText('(please select)');
|
||||
@@ -101,9 +101,9 @@ describe('GoCardlessExternalMsgModal - Country Auto-selection', () => {
|
||||
});
|
||||
|
||||
render(
|
||||
<TestProvider>
|
||||
<TestProviders>
|
||||
<GoCardlessExternalMsgModal {...mockProps} />
|
||||
</TestProvider>,
|
||||
</TestProviders>,
|
||||
);
|
||||
|
||||
const countryInput = screen.getByPlaceholderText('(please select)');
|
||||
@@ -126,9 +126,9 @@ describe('GoCardlessExternalMsgModal - Country Auto-selection', () => {
|
||||
});
|
||||
|
||||
render(
|
||||
<TestProvider>
|
||||
<TestProviders>
|
||||
<GoCardlessExternalMsgModal {...mockProps} />
|
||||
</TestProvider>,
|
||||
</TestProviders>,
|
||||
);
|
||||
|
||||
const countryInput = screen.getByPlaceholderText('(please select)');
|
||||
|
||||
@@ -33,7 +33,7 @@ import { SchedulesProvider } from '@desktop-client/hooks/useCachedSchedules';
|
||||
import { SelectedProviderWithItems } from '@desktop-client/hooks/useSelected';
|
||||
import { SplitsExpandedProvider } from '@desktop-client/hooks/useSplitsExpanded';
|
||||
import { SpreadsheetProvider } from '@desktop-client/hooks/useSpreadsheet';
|
||||
import { TestProvider } from '@desktop-client/redux/mock';
|
||||
import { TestProviders } from '@desktop-client/mocks';
|
||||
|
||||
vi.mock('loot-core/platform/client/fetch');
|
||||
vi.mock('../../hooks/useFeatureFlag', () => ({
|
||||
@@ -195,7 +195,7 @@ function LiveTransactionTable(props: LiveTransactionTableProps) {
|
||||
// implementation properly uses the right latest state even if the
|
||||
// hook dependencies haven't changed
|
||||
return (
|
||||
<TestProvider>
|
||||
<TestProviders>
|
||||
<AuthProvider>
|
||||
<SpreadsheetProvider>
|
||||
<SchedulesProvider>
|
||||
@@ -226,7 +226,7 @@ function LiveTransactionTable(props: LiveTransactionTableProps) {
|
||||
</SchedulesProvider>
|
||||
</SpreadsheetProvider>
|
||||
</AuthProvider>
|
||||
</TestProvider>
|
||||
</TestProviders>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
25
packages/desktop-client/src/mocks.tsx
Normal file
25
packages/desktop-client/src/mocks.tsx
Normal file
@@ -0,0 +1,25 @@
|
||||
import React, { type ReactNode } from 'react';
|
||||
import { Provider } from 'react-redux';
|
||||
|
||||
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
||||
|
||||
import { configureAppStore, type AppStore } from './redux/store';
|
||||
|
||||
let mockQueryClient = new QueryClient();
|
||||
|
||||
export let mockStore: AppStore = configureAppStore({
|
||||
queryClient: mockQueryClient,
|
||||
});
|
||||
|
||||
export function resetTestProviders() {
|
||||
mockQueryClient = new QueryClient();
|
||||
mockStore = configureAppStore({ queryClient: mockQueryClient });
|
||||
}
|
||||
|
||||
export function TestProviders({ children }: { children: ReactNode }) {
|
||||
return (
|
||||
<QueryClientProvider client={mockQueryClient}>
|
||||
<Provider store={mockStore}>{children}</Provider>
|
||||
</QueryClientProvider>
|
||||
);
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
import React from 'react';
|
||||
import type { ReactNode } from 'react';
|
||||
import { Provider } from 'react-redux';
|
||||
|
||||
import { QueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { configureAppStore, type AppStore } from './store';
|
||||
|
||||
let mockQueryClient = new QueryClient();
|
||||
|
||||
export let mockStore: AppStore = configureAppStore({
|
||||
queryClient: mockQueryClient,
|
||||
});
|
||||
|
||||
export function resetMockStore() {
|
||||
mockQueryClient = new QueryClient();
|
||||
mockStore = configureAppStore({ queryClient: mockQueryClient });
|
||||
}
|
||||
|
||||
export function TestProvider({ children }: { children: ReactNode }) {
|
||||
return <Provider store={mockStore}>{children}</Provider>;
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import '@testing-library/jest-dom';
|
||||
import { resetTestProviders } from './mocks';
|
||||
import { installPolyfills } from './polyfills';
|
||||
import { resetMockStore } from './redux/mock';
|
||||
|
||||
installPolyfills();
|
||||
|
||||
@@ -22,7 +22,7 @@ vi.mock('react-virtualized-auto-sizer', () => {
|
||||
global.Date.now = () => 123456789;
|
||||
|
||||
global.__resetWorld = () => {
|
||||
resetMockStore();
|
||||
resetTestProviders();
|
||||
};
|
||||
|
||||
process.on('unhandledRejection', reason => {
|
||||
|
||||
Reference in New Issue
Block a user