mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
ElasticSearch: Fix lucene formatted variables being wrongly escaped (#54981)
* fixed negative numbers are encoded * Chore: move variableModel to TypedVariableModel * add tests
This commit is contained in:
parent
7ec1d137b4
commit
f1e8a528d1
75
public/app/features/templating/formatRegistry.test.ts
Normal file
75
public/app/features/templating/formatRegistry.test.ts
Normal file
@ -0,0 +1,75 @@
|
||||
import { customBuilder } from '../variables/shared/testing/builders';
|
||||
|
||||
import { FormatRegistryID, formatRegistry } from './formatRegistry';
|
||||
|
||||
const dummyVar = customBuilder().withId('variable').build();
|
||||
describe('formatRegistry', () => {
|
||||
describe('with lucene formatter', () => {
|
||||
const { formatter } = formatRegistry.get(FormatRegistryID.lucene);
|
||||
|
||||
it('should escape single value', () => {
|
||||
expect(
|
||||
formatter(
|
||||
{
|
||||
value: 'foo bar',
|
||||
text: '',
|
||||
args: [],
|
||||
},
|
||||
dummyVar
|
||||
)
|
||||
).toBe('foo\\ bar');
|
||||
});
|
||||
|
||||
it('should not escape negative number', () => {
|
||||
expect(
|
||||
formatter(
|
||||
{
|
||||
value: '-1',
|
||||
text: '',
|
||||
args: [],
|
||||
},
|
||||
dummyVar
|
||||
)
|
||||
).toBe('-1');
|
||||
});
|
||||
|
||||
it('should escape string prepended with dash', () => {
|
||||
expect(
|
||||
formatter(
|
||||
{
|
||||
value: '-test',
|
||||
text: '',
|
||||
args: [],
|
||||
},
|
||||
dummyVar
|
||||
)
|
||||
).toBe('\\-test');
|
||||
});
|
||||
|
||||
it('should escape multi value', () => {
|
||||
expect(
|
||||
formatter(
|
||||
{
|
||||
value: ['foo bar', 'baz'],
|
||||
text: '',
|
||||
args: [],
|
||||
},
|
||||
dummyVar
|
||||
)
|
||||
).toBe('("foo\\ bar" OR "baz")');
|
||||
});
|
||||
|
||||
it('should escape empty value', () => {
|
||||
expect(
|
||||
formatter(
|
||||
{
|
||||
value: [],
|
||||
text: '',
|
||||
args: [],
|
||||
},
|
||||
dummyVar
|
||||
)
|
||||
).toBe('__empty__');
|
||||
});
|
||||
});
|
||||
});
|
@ -1,6 +1,6 @@
|
||||
import { isArray, map, replace } from 'lodash';
|
||||
|
||||
import { dateTime, Registry, RegistryItem, textUtil, VariableModel } from '@grafana/data';
|
||||
import { dateTime, Registry, RegistryItem, textUtil, TypedVariableModel } from '@grafana/data';
|
||||
import kbn from 'app/core/utils/kbn';
|
||||
|
||||
import { ALL_VARIABLE_TEXT, ALL_VARIABLE_VALUE } from '../variables/constants';
|
||||
@ -13,7 +13,7 @@ export interface FormatOptions {
|
||||
}
|
||||
|
||||
export interface FormatRegistryItem extends RegistryItem {
|
||||
formatter(options: FormatOptions, variable: VariableModel): string;
|
||||
formatter(options: FormatOptions, variable: TypedVariableModel): string;
|
||||
}
|
||||
|
||||
export enum FormatRegistryID {
|
||||
@ -260,6 +260,10 @@ export const formatRegistry = new Registry<FormatRegistryItem>(() => {
|
||||
});
|
||||
|
||||
function luceneEscape(value: string) {
|
||||
if (isNaN(+value) === false) {
|
||||
return value;
|
||||
}
|
||||
|
||||
return value.replace(/([\!\*\+\-\=<>\s\&\|\(\)\[\]\{\}\^\~\?\:\\/"])/g, '\\$1');
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user