test(trading): use fixture for provider metadata in selectTradingProviderMetadata test

This commit is contained in:
Lukas 'Sherpa' Werner
2026-02-11 14:18:33 +01:00
committed by vytick
parent 68f5c75281
commit 53075567b7
4 changed files with 18 additions and 64 deletions

View File

@@ -3,16 +3,18 @@ import { Provider } from 'react-redux';
import { combineReducers } from '@reduxjs/toolkit';
import { RenderHookOptions, renderHook } from '@testing-library/react';
import type { BuyProviderInfo, ExchangeProviderInfo, SellProviderInfo } from 'invity-api';
import { configureMockStore } from '@suite-common/test-utils';
import type { BuyInfo } from '../reducers/buyReducer';
import type { ExchangeInfo } from '../reducers/exchangeReducer';
import type { SellInfo } from '../reducers/sellReducer';
import { TradingState, initialState, tradingCommonReducer } from '../reducers/tradingCommonReducer';
import { regional } from '../regional';
/**
* TODO This utility is a temporary solution to simplify testing of trading-related hooks and components.
* Is should be moved to the correct place defined in the issue below.
* @see https://github.com/trezor/trezor-suite/issues/25138
*/
export type TradingTestState = {
wallet: {
trading: TradingState;
@@ -51,19 +53,17 @@ export const createTradingTestState = (
/**
* Creates a partial BuyInfo state for testing.
*
* @param providerInfos - Map of provider name to BuyProviderInfo
* @returns Partial BuyInfo with minimal required fields
* @param providerInfos - Map of provider name to BuyProviderInfo (or Partial for testing)
* @returns BuyInfo-like object for testing (with any type for flexibility)
*
* @example
* ```ts
* const buyInfo = createBuyInfoState({
* changenow: getProviderMetadataFixture('changenow') as BuyProviderInfo
* changenow: getProviderMetadataFixture('changenow') as any
* });
* ```
*/
export const createBuyInfoState = (
providerInfos: Record<string, BuyProviderInfo> = {},
): Partial<BuyInfo> => ({
export const createBuyInfoState = (providerInfos: Record<string, any> = {}): any => ({
buyInfo: {
country: regional.UNKNOWN_COUNTRY,
providers: [],
@@ -77,12 +77,10 @@ export const createBuyInfoState = (
/**
* Creates a partial ExchangeInfo state for testing.
*
* @param providerInfos - Map of provider name to ExchangeProviderInfo
* @returns Partial ExchangeInfo with minimal required fields
* @param providerInfos - Map of provider name to ExchangeProviderInfo (or Partial for testing)
* @returns ExchangeInfo-like object for testing (with any type for flexibility)
*/
export const createExchangeInfoState = (
providerInfos: Record<string, ExchangeProviderInfo> = {},
): Partial<ExchangeInfo> => ({
export const createExchangeInfoState = (providerInfos: Record<string, any> = {}): any => ({
providerInfos,
buyCryptoIds: [],
sellCryptoIds: [],
@@ -91,12 +89,10 @@ export const createExchangeInfoState = (
/**
* Creates a partial SellInfo state for testing.
*
* @param providerInfos - Map of provider name to SellProviderInfo
* @returns Partial SellInfo with minimal required fields
* @param providerInfos - Map of provider name to SellProviderInfo (or Partial for testing)
* @returns SellInfo-like object for testing (with any type for flexibility)
*/
export const createSellInfoState = (
providerInfos: Record<string, SellProviderInfo> = {},
): Partial<SellInfo> => ({
export const createSellInfoState = (providerInfos: Record<string, any> = {}): any => ({
country: regional.UNKNOWN_COUNTRY,
providerInfos,
supportedCryptoCurrencies: [],

View File

@@ -143,12 +143,4 @@ describe('useProviderMetadataChangeEffect', () => {
unmount();
expect(store.getState().wallet.trading.currentProviderMetadata).toBeUndefined();
});
it('should handle undefined quoteName gracefully', () => {
const { result } = renderHookWithTradingStore(() =>
useProviderMetadataChangeEffect('buy', undefined, true),
);
expect(result.current).toBeUndefined();
});
});

View File

@@ -142,42 +142,12 @@ describe('Testing trading reducer', () => {
it('should set currentProviderMetadata with complete provider data', () => {
const providerMetadata = getProviderMetadataFixture('changenow');
expect(store.getState().wallet.trading.currentProviderMetadata).toBeUndefined();
store.dispatch(tradingActions.setCurrentProviderMetadata(providerMetadata));
expect(store.getState().wallet.trading.currentProviderMetadata).toEqual(
providerMetadata,
);
});
it('should update currentProviderMetadata when called multiple times', () => {
const firstProvider = getProviderMetadataFixture('changenow');
const secondProvider = getProviderMetadataFixture('sideshift');
store.dispatch(tradingActions.setCurrentProviderMetadata(firstProvider));
expect(store.getState().wallet.trading.currentProviderMetadata).toEqual(
firstProvider,
);
store.dispatch(tradingActions.setCurrentProviderMetadata(secondProvider));
expect(store.getState().wallet.trading.currentProviderMetadata).toEqual(
secondProvider,
);
});
it('should clear currentProviderMetadata when set to undefined', () => {
const providerMetadata = getProviderMetadataFixture('changenow');
store.dispatch(tradingActions.setCurrentProviderMetadata(providerMetadata));
expect(store.getState().wallet.trading.currentProviderMetadata).toEqual(
providerMetadata,
);
store.dispatch(tradingActions.setCurrentProviderMetadata(undefined));
expect(store.getState().wallet.trading.currentProviderMetadata).toBeUndefined();
});
});
describe('tradingSettings', () => {

View File

@@ -15,6 +15,7 @@ import coins from '../../__fixtures__/coins.json';
import { invityAPIFixtures } from '../../__fixtures__/invityAPI';
import platforms from '../../__fixtures__/platforms.json';
import { accountBtc, accountEth } from '../../__fixtures__/utils';
import { getProviderMetadataFixture } from '../../reducers/__fixtures__/providerMetadata';
import { BuyInfo, TradingBuyState } from '../../reducers/buyReducer';
import { ExchangeInfo, exchangeInitialState } from '../../reducers/exchangeReducer';
import { SellInfo, sellInitialState } from '../../reducers/sellReducer';
@@ -1490,12 +1491,7 @@ describe('tradingSelectors', () => {
describe('selectTradingProviderMetadata', () => {
it('should return currentProviderMetadata from state', () => {
const providerMetadata = {
name: 'TEST_PROVIDER',
companyName: 'Test Company',
logo: 'https://example.com/logo.png',
isActive: true,
};
const providerMetadata = getProviderMetadataFixture('changenow');
state.wallet.trading.currentProviderMetadata = providerMetadata;
const result = selectTradingProviderMetadata(state);