grafana/public/app/features/dashboard/components/PanelEditor/state/OptionSearchEngine.test.ts

142 lines
4.0 KiB
TypeScript

import { OptionsPaneCategoryDescriptor } from '../OptionsPaneCategoryDescriptor';
import { OptionsPaneItemDescriptor } from '../OptionsPaneItemDescriptor';
import { OptionSearchEngine } from './OptionSearchEngine';
describe('OptionSearchEngine', () => {
it('Can search options based on title', () => {
const engine = new OptionSearchEngine(getOptionCategories(), []);
const results = engine.search('Min');
expect(results.optionHits.length).toBe(2);
expect(results.optionHits[0].props.title).toBe('Min');
});
it('When matching both title and description title should rank higher', () => {
const engine = new OptionSearchEngine(getOptionCategories(), []);
const results = engine.search('DescriptionMatch');
expect(results.optionHits.length).toBe(2);
expect(results.optionHits[0].props.title).toBe('DescriptionMatch');
});
it('When matching both category and title category title should rank higher', () => {
const engine = new OptionSearchEngine(getOptionCategories(), []);
const results = engine.search('frame');
expect(results.optionHits.length).toBe(4);
expect(results.optionHits[0].props.title).toBe('Frame');
});
it('Override hits should contain matcher and matched properties', () => {
const engine = new OptionSearchEngine(getOptionCategories(), getOverrides());
const results = engine.search('Max');
expect(results.overrideHits.length).toBe(2);
expect(results.overrideHits[0].items.length).toBe(2);
expect(results.overrideHits[0].items[0].props.title).toBe('Match by name');
expect(results.overrideHits[0].items[1].props.title).toBe('Max');
});
it('Override hits should not add matcher twice', () => {
const engine = new OptionSearchEngine(getOptionCategories(), getOverrides());
const results = engine.search('Match by name');
expect(results.overrideHits.length).toBe(2);
expect(results.overrideHits[0].items.length).toBe(1);
});
});
function getOptionCategories(): OptionsPaneCategoryDescriptor[] {
return [
new OptionsPaneCategoryDescriptor({
id: 'Panel frame',
title: 'Panel frame',
})
.addItem(
new OptionsPaneItemDescriptor({
title: 'Title',
render: jest.fn(),
})
)
.addItem(
new OptionsPaneItemDescriptor({
title: 'Min',
render: jest.fn(),
})
)
.addItem(
new OptionsPaneItemDescriptor({
title: 'ASDSADASDSADA',
description: 'DescriptionMatch',
render: jest.fn(),
})
),
new OptionsPaneCategoryDescriptor({
id: 'Axis',
title: 'Axis',
})
.addItem(
new OptionsPaneItemDescriptor({
title: 'Min',
render: jest.fn(),
})
)
.addItem(
new OptionsPaneItemDescriptor({
title: 'DescriptionMatch',
render: jest.fn(),
})
)
.addItem(
new OptionsPaneItemDescriptor({
title: 'Frame',
render: jest.fn(),
})
),
];
}
function getOverrides(): OptionsPaneCategoryDescriptor[] {
return [
new OptionsPaneCategoryDescriptor({
id: 'Override 1',
title: 'Override 1',
})
.addItem(
new OptionsPaneItemDescriptor({
title: 'Match by name',
render: jest.fn(),
})
)
.addItem(
new OptionsPaneItemDescriptor({
title: 'Min',
render: jest.fn(),
})
)
.addItem(
new OptionsPaneItemDescriptor({
title: 'Max',
render: jest.fn(),
})
),
new OptionsPaneCategoryDescriptor({
id: 'Override 2',
title: 'Override 2',
})
.addItem(
new OptionsPaneItemDescriptor({
title: 'Match by name',
render: jest.fn(),
})
)
.addItem(
new OptionsPaneItemDescriptor({
title: 'Threshold',
render: jest.fn(),
})
)
.addItem(
new OptionsPaneItemDescriptor({
title: 'Max',
render: jest.fn(),
})
),
];
}