UNPKG

datajunction-ui

Version:
60 lines (50 loc) 1.82 kB
import * as domTestingLib from '@testing-library/dom'; import React from 'react'; import { render, screen, waitFor } from '@testing-library/react'; import NodeColumnLineage from '../NodeLineageTab'; import DJClientContext from '../../../providers/djclient'; import { mocks } from '../../../../mocks/mockNodes'; describe('<NodeColumnLineage />', () => { /* moved to top */ const { queryHelpers } = domTestingLib; const queryByAttribute = attribute => queryHelpers.queryAllByAttribute.bind(null, attribute); function getByAttribute(container, id, attribute, ...rest) { const result = queryByAttribute(attribute)(container, id, ...rest); return result[0]; } const mockDJClient = () => { return { DataJunctionAPI: { node: vi.fn(), metric: vi.fn(), node_lineage: vi.fn(name => { return mocks.mockNodeLineage; }), }, }; }; const defaultProps = { djNode: mocks.mockMetricNodeJson, }; it('renders and calls node_lineage with the correct node name', async () => { const djClient = mockDJClient(); djClient.DataJunctionAPI.node = name => mocks.mockMetricNode; djClient.DataJunctionAPI.getMetric = name => mocks.mockMetricNodeJson; const { container } = render( <DJClientContext.Provider value={djClient}> <NodeColumnLineage {...defaultProps} /> </DJClientContext.Provider>, ); await waitFor(() => { expect(djClient.DataJunctionAPI.node_lineage).toHaveBeenCalledWith( mocks.mockMetricNode.name, ); // The origin node should be displayed expect(screen.getByText('Default: Avg Repair Price')).toBeInTheDocument(); expect( getByAttribute(container, 'default.avg_repair_price', 'data-id'), ).toBeInTheDocument(); }); }); });