datajunction-ui
Version:
DataJunction Metrics Platform UI
149 lines (142 loc) • 3.73 kB
JSX
import React from 'react';
import { render, waitFor, screen } from '@testing-library/react';
import NodeMaterializationTab from '../NodeMaterializationTab';
describe('<NodeMaterializationTab />', () => {
const mockDjClient = {
node: jest.fn(),
materializations: jest.fn(),
};
const mockMaterializations = [
{
name: 'mat_one',
config: {},
schedule: '@daily',
job: 'SparkSqlMaterializationJob',
backfills: [
{
spec: [
{
column_name: 'date',
values: ['20200101'],
range: ['20201010'],
},
],
urls: ['https://example.com/'],
},
],
strategy: 'full',
output_tables: ['table1'],
urls: ['https://example.com/'],
},
];
const mockNode = {
node_revision_id: 1,
node_id: 1,
type: 'source',
name: 'default.repair_orders',
display_name: 'Default: Repair Orders',
version: 'v1.0',
status: 'valid',
mode: 'published',
catalog: {
id: 1,
uuid: '0fc18295-e1a2-4c3c-b72a-894725c12488',
created_at: '2023-08-21T16:48:51.146121+00:00',
updated_at: '2023-08-21T16:48:51.146122+00:00',
extra_params: {},
name: 'warehouse',
},
schema_: 'roads',
table: 'repair_orders',
description: 'Repair orders',
query: null,
availability: {
catalog: 'default',
categorical_partitions: [],
max_temporal_partition: ['2023', '01', '25'],
min_temporal_partition: ['2022', '01', '01'],
partitions: [],
schema_: 'foo',
table: 'bar',
temporal_partitions: [],
valid_through_ts: 1729667463,
url: 'https://www.table.com',
links: { dashboard: 'https://www.foobar.com/dashboard' },
},
columns: [
{
name: 'repair_order_id',
type: 'int',
attributes: [],
dimension: null,
partition: {
type_: 'temporal',
format: 'YYYYMMDD',
granularity: 'day',
},
},
{
name: 'municipality_id',
type: 'string',
attributes: [],
dimension: null,
partition: null,
},
{
name: 'hard_hat_id',
type: 'int',
attributes: [],
dimension: null,
partition: null,
},
],
updated_at: '2023-08-21T16:48:52.880498+00:00',
materializations: [
{
name: 'mat1',
config: {},
schedule: 'string',
job: 'string',
backfills: [
{
spec: [
{
column_name: 'string',
values: ['string'],
range: ['string'],
},
],
urls: ['string'],
},
],
strategy: 'string',
output_tables: ['string'],
urls: ['https://example.com/'],
},
],
parents: [],
dimension_links: [
{
dimension: {
name: 'default.contractor',
},
join_type: 'left',
join_sql:
'default.contractor.contractor_id = default.repair_orders.contractor_id',
join_cardinality: 'one_to_one',
role: 'contractor',
},
],
};
beforeEach(() => {
mockDjClient.materializations.mockReset();
});
it('renders NodeMaterializationTab tab correctly', async () => {
mockDjClient.materializations.mockReturnValue(mockMaterializations);
render(<NodeMaterializationTab node={mockNode} djClient={mockDjClient} />);
await waitFor(() => {
const link = screen.getByText('dashboard').closest('a');
expect(link).toHaveAttribute('href', `https://www.foobar.com/dashboard`);
});
});
});