/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/
import React from 'react';
import userEvent from '@testing-library/user-event';
import { render, screen, within } from '../../../../test/test_utils';
import { NodesTable } from '../nodes_table';
const NODES = [
{
id: 'id1',
deployed: true,
},
{
id: 'id2',
deployed: false,
},
];
function setup({ nodes = NODES, loading = false }) {
const user = userEvent.setup({});
render();
return { user };
}
describe('', () => {
it('should render table and 2 columns when pass nodes', () => {
setup({});
expect(screen.getAllByRole('columnheader').length).toBe(2);
expect(screen.getByText('id1')).toBeInTheDocument();
expect(screen.getByText('id2')).toBeInTheDocument();
});
it('should render status at first column with asc by default', () => {
const columnIndex = 0;
setup({});
const header = screen.getAllByRole('columnheader')[columnIndex];
const columnContent = header
.closest('table')
?.querySelectorAll(`tbody tr td:nth-child(${columnIndex + 1})`);
expect(within(header).getByText('Status')).toBeInTheDocument();
expect(columnContent?.length).toBe(2);
const cells = columnContent!;
expect(within(cells[0] as HTMLElement).getByText('Not responding')).toBeInTheDocument();
expect(within(cells[1] as HTMLElement).getByText('Responding')).toBeInTheDocument();
});
it('should render node id at second column with desc by default', () => {
const columnIndex = 1;
setup({});
const header = screen.getAllByRole('columnheader')[columnIndex];
const columnContent = header
.closest('table')
?.querySelectorAll(`tbody tr td:nth-child(${columnIndex + 1})`);
expect(within(header).getByText('Node ID')).toBeInTheDocument();
expect(columnContent?.length).toBe(2);
const cells = columnContent!;
expect(within(cells[0] as HTMLElement).getByText('id2')).toBeInTheDocument();
expect(within(cells[1] as HTMLElement).getByText('id1')).toBeInTheDocument();
});
it('should render loading state when loading is true', () => {
setup({ nodes: [], loading: true });
expect(screen.getByText('Loading...')).toBeInTheDocument();
});
});