// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import React from "react"; import { Typography, Button } from "@mui/material"; import { DataTable } from "./data-table"; import { SortDirection, createDataColumn } from "./data-column"; import { ThemeProvider } from "@mui/material"; import { CustomTheme } from "common/custom-theme"; describe("", () => { it("shows only selected columns", () => { const columns = [ createDataColumn({ name: "Column 1", render: () => , selected: true, configurable: true, }), createDataColumn({ name: "Column 2", render: () => , selected: true, configurable: true, }), createDataColumn({ name: "Column 3", render: () => , selected: false, configurable: true, }), ]; cy.mount( ); cy.get('th').should('have.length', 3); }); it("renders column name", () => { const columns = [ createDataColumn({ name: "Column 1", render: () => , selected: true, configurable: true, }), ]; cy.mount( ); cy.get('th').last().contains('Column 1').should('exist'); }); it("uses renderHeader instead of name prop", () => { const columns = [ createDataColumn({ name: "Column 1", renderHeader: () => Column Header, render: () => , selected: true, configurable: true, }), ]; cy.mount( ); cy.get('th').last().contains('Column Header').should('exist'); }); it("passes column key prop to corresponding cells", () => { const columns = [ createDataColumn({ name: "Column 1", key: "column-1-key", render: () => , selected: true, configurable: true, }), ]; cy.mount( ); setTimeout(() => { // cannot access key prop directly, so data-cy is assigned to column.key value cy.get('td').last().should('have.attr', 'data-cy', 'column-1-key'); }, 1000); }); it("renders items", () => { const columns = [ createDataColumn({ name: "Column 1", render: item => {item}, selected: true, configurable: true, }), createDataColumn({ name: "Column 2", render: item => , selected: true, configurable: true, }), ]; cy.mount( ); setTimeout(() => { cy.get('p').last().contains('item 1').should('exist'); cy.get('button').last().contains('item 1').should('exist'); }, 1000); }); it("passes sorting props to ", () => { const columns = [ createDataColumn({ name: "Column 1", sort: { direction: SortDirection.ASC, field: "length" }, selected: true, configurable: true, render: item => {item}, }), ]; const onSortToggle = cy.spy().as("onSortToggle"); cy.mount( ); setTimeout(() => { cy.get('th').last().contains('Column 1').should('exist'); cy.get('[data-cy="sort-button"]').should('exist').click(); cy.get('@onSortToggle').should('have.been.calledWith', columns[1]); }, 1000); }); it("does not display if there is no filters provided", () => { const columns = [ { name: "Column 1", selected: true, configurable: true, filters: [], render: item => {item}, }, ]; const onFiltersChange = cy.stub(); cy.mount( ); cy.get('[data-cy=data-table]').should('exist'); cy.get('[data-cy=popover]').should('not.exist'); }); it("passes filter props to ", () => { const filters = { Filters : { id: 'Filters id', active: false, children: ['Filter 1', 'Filter 2'], expanded: false, initialState: true, parent: "", selected: false, status: "LOADED", value: { name: 'Filter'} } }; const columns = [ { name: "Column 1", selected: true, configurable: true, filters: filters, render: item => {item}, }, ]; const onFiltersChange = cy.spy().as("onFiltersChange"); cy.mount( ); setTimeout(() => { cy.get('span[role="button"]').contains('Column 1').should('exist').click(); cy.get('[data-cy="tree-li"]').contains('Filter').should('exist').click(); cy.get('@onFiltersChange').should('have.been.calledWith', filters, columns[1]); }, 1000); }); });