datajunction-ui
Version:
DataJunction UI
60 lines (50 loc) • 1.82 kB
JSX
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();
});
});
});