blob: 33e3e7bd2c0296e0ffa37b1b3e3ab268796ca8dd [file]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
import { buildClientTableView, compareCells, displayCell, type DynamicRow } from './dynamicTable';
const rows: DynamicRow[] = [
{ key: 'large', cells: ['9223372036854775807', 'alpha', null] },
{ key: 'small', cells: ['9', 'beta', ''] },
{ key: 'negative', cells: ['-12', 'alphabet', '\\N'] },
];
describe('dynamic table operations', () => {
it('keeps large integer sorting precise without converting to Number', () => {
expect(compareCells('9223372036854775807', '9007199254740993')).toBeGreaterThan(0);
const view = buildClientTableView(rows, {
search: '', sortColumn: 0, sortDirection: 'ascend', page: 1, pageSize: 10,
});
expect(view.rows.map((row) => row.key)).toEqual(['negative', 'small', 'large']);
});
it('combines filtering, sorting, pagination, and clamps an obsolete page', () => {
const view = buildClientTableView(rows, {
search: 'alpha', sortColumn: 1, sortDirection: 'descend', page: 8, pageSize: 1,
});
expect(view.total).toBe(2);
expect(view.page).toBe(2);
expect(view.rows).toHaveLength(1);
});
it('renders null, empty, and Doris null cells consistently', () => {
expect(displayCell(null)).toBe('—');
expect(displayCell('')).toBe('—');
expect(displayCell('\\N')).toBe('—');
});
});