kibana/x-pack/plugins/lens/public/indexpattern_datasource/rename_columns.test.ts

240 lines
5.2 KiB
TypeScript

/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
import { renameColumns } from './rename_columns';
import { Datatable } from '../../../../../src/plugins/expressions/public';
import { createMockExecutionContext } from '../../../../../src/plugins/expressions/common/mocks';
describe('rename_columns', () => {
it('should rename columns of a given datatable', () => {
const input: Datatable = {
type: 'datatable',
columns: [
{ id: 'a', name: 'A', meta: { type: 'number' } },
{ id: 'b', name: 'B', meta: { type: 'number' } },
],
rows: [
{ a: 1, b: 2 },
{ a: 3, b: 4 },
{ a: 5, b: 6 },
{ a: 7, b: 8 },
],
};
const idMap = {
a: {
id: 'b',
label: 'Austrailia',
},
b: {
id: 'c',
label: 'Boomerang',
},
};
const result = renameColumns.fn(
input,
{ idMap: JSON.stringify(idMap) },
createMockExecutionContext()
);
expect(result).toMatchInlineSnapshot(`
Object {
"columns": Array [
Object {
"id": "b",
"meta": Object {
"type": "number",
},
"name": "Austrailia",
},
Object {
"id": "c",
"meta": Object {
"type": "number",
},
"name": "Boomerang",
},
],
"rows": Array [
Object {
"b": 1,
"c": 2,
},
Object {
"b": 3,
"c": 4,
},
Object {
"b": 5,
"c": 6,
},
Object {
"b": 7,
"c": 8,
},
],
"type": "datatable",
}
`);
});
it('should replace "" with a visible value', () => {
const input: Datatable = {
type: 'datatable',
columns: [{ id: 'a', name: 'A', meta: { type: 'string' } }],
rows: [{ a: '' }],
};
const idMap = {
a: {
id: 'a',
label: 'Austrailia',
},
};
const result = renameColumns.fn(
input,
{ idMap: JSON.stringify(idMap) },
createMockExecutionContext()
);
expect(result.rows[0].a).toEqual('(empty)');
});
it('should keep columns which are not mapped', () => {
const input: Datatable = {
type: 'datatable',
columns: [
{ id: 'a', name: 'A', meta: { type: 'number' } },
{ id: 'b', name: 'B', meta: { type: 'number' } },
],
rows: [
{ a: 1, b: 2 },
{ a: 3, b: 4 },
{ a: 5, b: 6 },
{ a: 7, b: 8 },
],
};
const idMap = {
b: { id: 'c', label: 'Catamaran' },
};
const result = renameColumns.fn(
input,
{ idMap: JSON.stringify(idMap) },
createMockExecutionContext()
);
expect(result).toMatchInlineSnapshot(`
Object {
"columns": Array [
Object {
"id": "a",
"meta": Object {
"type": "number",
},
"name": "A",
},
Object {
"id": "c",
"meta": Object {
"type": "number",
},
"name": "Catamaran",
},
],
"rows": Array [
Object {
"a": 1,
"c": 2,
},
Object {
"a": 3,
"c": 4,
},
Object {
"a": 5,
"c": 6,
},
Object {
"a": 7,
"c": 8,
},
],
"type": "datatable",
}
`);
});
it('should rename date histograms', () => {
const input: Datatable = {
type: 'datatable',
columns: [
{ id: 'a', name: 'A', meta: { type: 'number' } },
{ id: 'b', name: 'banana per 30 seconds', meta: { type: 'number' } },
],
rows: [
{ a: 1, b: 2 },
{ a: 3, b: 4 },
{ a: 5, b: 6 },
{ a: 7, b: 8 },
],
};
const idMap = {
b: { id: 'c', label: 'Apple', operationType: 'date_histogram', sourceField: 'banana' },
};
const result = renameColumns.fn(
input,
{ idMap: JSON.stringify(idMap) },
createMockExecutionContext()
);
expect(result).toMatchInlineSnapshot(`
Object {
"columns": Array [
Object {
"id": "a",
"meta": Object {
"type": "number",
},
"name": "A",
},
Object {
"id": "c",
"meta": Object {
"type": "number",
},
"name": "Apple per 30 seconds",
},
],
"rows": Array [
Object {
"a": 1,
"c": 2,
},
Object {
"a": 3,
"c": 4,
},
Object {
"a": 5,
"c": 6,
},
Object {
"a": 7,
"c": 8,
},
],
"type": "datatable",
}
`);
});
});