mirror of https://github.com/grafana/grafana
Merge pull request #12874 from grafana/davkal/explore-facetting-filtered
Explore: Filter out existing labels in label suggestionspull/12334/merge
commit
c970e1e4b8
@ -1,33 +1,61 @@ |
||||
import { getCleanSelector } from './prometheus'; |
||||
import { parseSelector } from './prometheus'; |
||||
|
||||
describe('parseSelector()', () => { |
||||
let parsed; |
||||
|
||||
describe('getCleanSelector()', () => { |
||||
it('returns a clean selector from an empty selector', () => { |
||||
expect(getCleanSelector('{}', 1)).toBe('{}'); |
||||
parsed = parseSelector('{}', 1); |
||||
expect(parsed.selector).toBe('{}'); |
||||
expect(parsed.labelKeys).toEqual([]); |
||||
}); |
||||
|
||||
it('throws if selector is broken', () => { |
||||
expect(() => getCleanSelector('{foo')).toThrow(); |
||||
expect(() => parseSelector('{foo')).toThrow(); |
||||
}); |
||||
|
||||
it('returns the selector sorted by label key', () => { |
||||
expect(getCleanSelector('{foo="bar"}')).toBe('{foo="bar"}'); |
||||
expect(getCleanSelector('{foo="bar",baz="xx"}')).toBe('{baz="xx",foo="bar"}'); |
||||
parsed = parseSelector('{foo="bar"}'); |
||||
expect(parsed.selector).toBe('{foo="bar"}'); |
||||
expect(parsed.labelKeys).toEqual(['foo']); |
||||
|
||||
parsed = parseSelector('{foo="bar",baz="xx"}'); |
||||
expect(parsed.selector).toBe('{baz="xx",foo="bar"}'); |
||||
}); |
||||
|
||||
it('returns a clean selector from an incomplete one', () => { |
||||
expect(getCleanSelector('{foo}')).toBe('{}'); |
||||
expect(getCleanSelector('{foo="bar",baz}')).toBe('{foo="bar"}'); |
||||
expect(getCleanSelector('{foo="bar",baz="}')).toBe('{foo="bar"}'); |
||||
parsed = parseSelector('{foo}'); |
||||
expect(parsed.selector).toBe('{}'); |
||||
|
||||
parsed = parseSelector('{foo="bar",baz}'); |
||||
expect(parsed.selector).toBe('{foo="bar"}'); |
||||
|
||||
parsed = parseSelector('{foo="bar",baz="}'); |
||||
expect(parsed.selector).toBe('{foo="bar"}'); |
||||
}); |
||||
|
||||
it('throws if not inside a selector', () => { |
||||
expect(() => getCleanSelector('foo{}', 0)).toThrow(); |
||||
expect(() => getCleanSelector('foo{} + bar{}', 5)).toThrow(); |
||||
expect(() => parseSelector('foo{}', 0)).toThrow(); |
||||
expect(() => parseSelector('foo{} + bar{}', 5)).toThrow(); |
||||
}); |
||||
|
||||
it('returns the selector nearest to the cursor offset', () => { |
||||
expect(() => getCleanSelector('{foo="bar"} + {foo="bar"}', 0)).toThrow(); |
||||
expect(getCleanSelector('{foo="bar"} + {foo="bar"}', 1)).toBe('{foo="bar"}'); |
||||
expect(getCleanSelector('{foo="bar"} + {baz="xx"}', 1)).toBe('{foo="bar"}'); |
||||
expect(getCleanSelector('{baz="xx"} + {foo="bar"}', 16)).toBe('{foo="bar"}'); |
||||
expect(() => parseSelector('{foo="bar"} + {foo="bar"}', 0)).toThrow(); |
||||
|
||||
parsed = parseSelector('{foo="bar"} + {foo="bar"}', 1); |
||||
expect(parsed.selector).toBe('{foo="bar"}'); |
||||
|
||||
parsed = parseSelector('{foo="bar"} + {baz="xx"}', 1); |
||||
expect(parsed.selector).toBe('{foo="bar"}'); |
||||
|
||||
parsed = parseSelector('{baz="xx"} + {foo="bar"}', 16); |
||||
expect(parsed.selector).toBe('{foo="bar"}'); |
||||
}); |
||||
|
||||
it('returns a selector with metric if metric is given', () => { |
||||
expect(getCleanSelector('bar{foo}', 4)).toBe('{__name__="bar"}'); |
||||
expect(getCleanSelector('baz{foo="bar"}', 12)).toBe('{__name__="baz",foo="bar"}'); |
||||
parsed = parseSelector('bar{foo}', 4); |
||||
expect(parsed.selector).toBe('{__name__="bar"}'); |
||||
|
||||
parsed = parseSelector('baz{foo="bar"}', 12); |
||||
expect(parsed.selector).toBe('{__name__="baz",foo="bar"}'); |
||||
}); |
||||
}); |
||||
|
||||
Loading…
Reference in new issue