import React from 'react'; import {render} from 'sentry-test/reactTestingLibrary'; import {SQLishFormatter} from 'sentry/views/starfish/utils/sqlish/SQLishFormatter'; describe('SQLishFormatter', function () { describe('SQLishFormatter.toString()', () => { const formatter = new SQLishFormatter(); it('Falls back to original string if unable to parse', () => { expect(formatter.toString('😤')).toEqual('😤'); }); it('Adds newlines for keywords in SELECTs', () => { expect( formatter.toString('SELECT hello FROM users ORDER BY name DESC LIMIT 1;') ).toEqual('SELECT hello \nFROM users \nORDER BY name DESC \nLIMIT 1;'); }); it('Adds newlines for keywords in INSERTs', () => { expect( formatter.toString('INSERT INTO users (id, name) VALUES (:c0, :c1) RETURNING *') ).toEqual('INSERT INTO users (id, name) \nVALUES (:c0, :c1) \nRETURNING *'); }); }); describe('SQLishFormatter.toSimpleMarkup()', () => { const formatter = new SQLishFormatter(); const getMarkup = (markup: any): string => { const {container} = render({markup}); return container.innerHTML; }; beforeEach(() => { // The renderer throws an error because elements in the list do not have // a `"key"` prop, but that's intentional. The list elements are spans // with no semantic meaning, and their keys are not meaningful. jest.spyOn(console, 'error').mockImplementation(jest.fn()); }); it('Capitalizes keywords', () => { expect(getMarkup(formatter.toSimpleMarkup('select hello'))).toEqual( 'SELECT hello' ); }); it('Wraps every token in a `` element', () => { expect(getMarkup(formatter.toSimpleMarkup('SELECT hello;'))).toEqual( 'SELECT hello;' ); }); }); });