mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
	
	
		
			106 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
		
		
			
		
	
	
			106 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
| 
								 | 
							
								import { silenceConsoleOutput } from 'test/core/utils/silenceConsoleOutput';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import { VariableFormatID } from '@grafana/schema';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import { formatVariableValue } from './formatVariableValue';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								describe('format variable to string values', () => {
							 | 
						||
| 
								 | 
							
								  silenceConsoleOutput();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('single value should return value', () => {
							 | 
						||
| 
								 | 
							
								    const result = formatVariableValue('test');
							 | 
						||
| 
								 | 
							
								    expect(result).toBe('test');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should use glob format when unknown format provided', () => {
							 | 
						||
| 
								 | 
							
								    let result = formatVariableValue('test', 'nonexistentformat');
							 | 
						||
| 
								 | 
							
								    expect(result).toBe('test');
							 | 
						||
| 
								 | 
							
								    result = formatVariableValue(['test', 'test1'], 'nonexistentformat');
							 | 
						||
| 
								 | 
							
								    expect(result).toBe('{test,test1}');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('multi value and glob format should render glob string', () => {
							 | 
						||
| 
								 | 
							
								    const result = formatVariableValue(['test', 'test2'], 'glob');
							 | 
						||
| 
								 | 
							
								    expect(result).toBe('{test,test2}');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('multi value and lucene should render as lucene expr', () => {
							 | 
						||
| 
								 | 
							
								    const result = formatVariableValue(['test', 'test2'], 'lucene');
							 | 
						||
| 
								 | 
							
								    expect(result).toBe('("test" OR "test2")');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('multi value and regex format should render regex string', () => {
							 | 
						||
| 
								 | 
							
								    const result = formatVariableValue(['test.', 'test2'], 'regex');
							 | 
						||
| 
								 | 
							
								    expect(result).toBe('(test\\.|test2)');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('multi value and pipe should render pipe string', () => {
							 | 
						||
| 
								 | 
							
								    const result = formatVariableValue(['test', 'test2'], 'pipe');
							 | 
						||
| 
								 | 
							
								    expect(result).toBe('test|test2');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('multi value and distributed should render distributed string', () => {
							 | 
						||
| 
								 | 
							
								    const result = formatVariableValue(['test', 'test2'], 'distributed', {
							 | 
						||
| 
								 | 
							
								      name: 'build',
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    expect(result).toBe('test,build=test2');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('multi value and distributed should render when not string', () => {
							 | 
						||
| 
								 | 
							
								    const result = formatVariableValue(['test'], 'distributed', {
							 | 
						||
| 
								 | 
							
								      name: 'build',
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    expect(result).toBe('test');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('multi value and csv format should render csv string', () => {
							 | 
						||
| 
								 | 
							
								    const result = formatVariableValue(['test', 'test2'], VariableFormatID.CSV);
							 | 
						||
| 
								 | 
							
								    expect(result).toBe('test,test2');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('multi value and percentencode format should render percent-encoded string', () => {
							 | 
						||
| 
								 | 
							
								    const result = formatVariableValue(['foo()bar BAZ', 'test2'], VariableFormatID.PercentEncode);
							 | 
						||
| 
								 | 
							
								    expect(result).toBe('%7Bfoo%28%29bar%20BAZ%2Ctest2%7D');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('slash should be properly escaped in regex format', () => {
							 | 
						||
| 
								 | 
							
								    const result = formatVariableValue('Gi3/14', 'regex');
							 | 
						||
| 
								 | 
							
								    expect(result).toBe('Gi3\\/14');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('single value and singlequote format should render string with value enclosed in single quotes', () => {
							 | 
						||
| 
								 | 
							
								    const result = formatVariableValue('test', 'singlequote');
							 | 
						||
| 
								 | 
							
								    expect(result).toBe("'test'");
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('multi value and singlequote format should render string with values enclosed in single quotes', () => {
							 | 
						||
| 
								 | 
							
								    const result = formatVariableValue(['test', "test'2"], 'singlequote');
							 | 
						||
| 
								 | 
							
								    expect(result).toBe("'test','test\\'2'");
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('single value and doublequote format should render string with value enclosed in double quotes', () => {
							 | 
						||
| 
								 | 
							
								    const result = formatVariableValue('test', 'doublequote');
							 | 
						||
| 
								 | 
							
								    expect(result).toBe('"test"');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('multi value and doublequote format should render string with values enclosed in double quotes', () => {
							 | 
						||
| 
								 | 
							
								    const result = formatVariableValue(['test', 'test"2'], 'doublequote');
							 | 
						||
| 
								 | 
							
								    expect(result).toBe('"test","test\\"2"');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('single value and sqlstring format should render string with value enclosed in single quotes', () => {
							 | 
						||
| 
								 | 
							
								    const result = formatVariableValue("test'value", 'sqlstring');
							 | 
						||
| 
								 | 
							
								    expect(result).toBe(`'test''value'`);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('multi value and sqlstring format should render string with values enclosed in single quotes', () => {
							 | 
						||
| 
								 | 
							
								    const result = formatVariableValue(['test', "test'value2"], 'sqlstring');
							 | 
						||
| 
								 | 
							
								    expect(result).toBe(`'test','test''value2'`);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('raw format should leave value intact and do no escaping', () => {
							 | 
						||
| 
								 | 
							
								    const result = formatVariableValue("'test\n", 'raw');
							 | 
						||
| 
								 | 
							
								    expect(result).toBe("'test\n");
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								});
							 |