mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
142 lines
4.0 KiB
TypeScript
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(),
|
|
})
|
|
),
|
|
];
|
|
}
|