From e88078da252d38bb9de7c447cfe1abfc57db5f1f Mon Sep 17 00:00:00 2001 From: asiaznik Date: Mon, 7 Aug 2023 12:52:00 +0200 Subject: [PATCH] chore: tests --- .../market-info/market-info-panels.spec.tsx | 96 ++++++++++++++++++- .../market-info/market-info-panels.tsx | 20 +++- 2 files changed, 109 insertions(+), 7 deletions(-) diff --git a/libs/markets/src/lib/components/market-info/market-info-panels.spec.tsx b/libs/markets/src/lib/components/market-info/market-info-panels.spec.tsx index b13e7c6be..98d8aa390 100644 --- a/libs/markets/src/lib/components/market-info/market-info-panels.spec.tsx +++ b/libs/markets/src/lib/components/market-info/market-info-panels.spec.tsx @@ -1,9 +1,11 @@ -import { render, screen } from '@testing-library/react'; +import { render, screen, waitFor } from '@testing-library/react'; import { ConditionOperator, ConditionOperatorMapping, } from '@vegaprotocol/types'; -import { DataSourceProof } from './market-info-panels'; +import { DataSourceProof, SuccessionLineInfoPanel } from './market-info-panels'; +import { MockedProvider } from '@apollo/react-testing'; +import { SuccessorMarketIdsDocument } from '../../__generated__'; jest.mock('../../hooks/use-oracle-markets', () => ({ useOracleMarkets: () => [], @@ -137,3 +139,93 @@ describe('DataSourceProof', () => { ).toBeInTheDocument(); }); }); + +describe('SuccessionLineInfoPanel', () => { + const mocks = [ + { + request: { + query: SuccessorMarketIdsDocument, + }, + result: { + data: { + __typename: 'Query', + marketsConnection: { + __typename: 'MarketConnection', + edges: [ + { + __typename: 'MarketEdge', + node: { + __typename: 'Market', + id: 'abc', + successorMarketID: 'def', + parentMarketID: null, + }, + }, + { + __typename: 'MarketEdge', + node: { + __typename: 'Market', + id: 'def', + successorMarketID: 'ghi', + parentMarketID: 'abc', + }, + }, + { + __typename: 'MarketEdge', + node: { + __typename: 'Market', + id: 'ghi', + successorMarketID: null, + parentMarketID: 'def', + }, + }, + ], + }, + }, + }, + }, + ]; + + it.each([ + ['abc', 1], + ['def', 2], + ['ghi', 3], + ])( + 'renders succession line for %s (current position %d)', + async (id, number) => { + render( + + + + ); + + await waitFor(() => { + const items = screen.getAllByTestId('succession-line-item'); + expect(items.length).toBe(3); + expect( + items[0].querySelector( + '[data-testid="succession-line-item-market-id"]' + )?.textContent + ).toBe('abc'); + expect( + items[1].querySelector( + '[data-testid="succession-line-item-market-id"]' + )?.textContent + ).toBe('def'); + expect( + items[2].querySelector( + '[data-testid="succession-line-item-market-id"]' + )?.textContent + ).toBe('ghi'); + + expect( + items[number - 1].querySelector('[data-testid="icon-bullet"]') + ).toBeInTheDocument(); + }); + } + ); +}); diff --git a/libs/markets/src/lib/components/market-info/market-info-panels.tsx b/libs/markets/src/lib/components/market-info/market-info-panels.tsx index 60b3fa042..001f562c6 100644 --- a/libs/markets/src/lib/components/market-info/market-info-panels.tsx +++ b/libs/markets/src/lib/components/market-info/market-info-panels.tsx @@ -1,5 +1,5 @@ import type { ReactNode } from 'react'; -import { useState } from 'react'; +import { Fragment, useState } from 'react'; import { useMemo } from 'react'; import { AssetDetailsTable, useAssetDataProvider } from '@vegaprotocol/assets'; import { t } from '@vegaprotocol/i18n'; @@ -230,6 +230,7 @@ const SuccessionLineItem = ({ return (
)}
-
{marketId}
+
+ {marketId} +
); }; @@ -302,7 +308,11 @@ const buildSuccessionLine = ( find(id, 'down'); return line; }; -export const SuccessionLineInfoPanel = ({ market }: MarketInfoProps) => { +export const SuccessionLineInfoPanel = ({ + market, +}: { + market: Pick; +}) => { const { data } = useSuccessorMarketIdsQuery(); const ids = compact(data?.marketsConnection?.edges.map((e) => e.node)); const line = buildSuccessionLine(ids, market.id); @@ -310,10 +320,10 @@ export const SuccessionLineInfoPanel = ({ market }: MarketInfoProps) => { return (
{line.map((id, i) => ( - <> + {i > 0 && } - + ))}
);