@@ -16,21 +16,20 @@ describe('SQLTerminal', () => {
1616 cln : mockCLNStoreData ,
1717 bkpr : mockBKPRStoreData
1818 } ;
19+
1920 it ( 'should be in the document' , async ( ) => {
2021 await renderWithProviders ( < SQLTerminal /> , { preloadedState : customMockStore } ) ;
2122 expect ( screen . getByTestId ( 'terminal-container' ) ) . not . toBeEmptyDOMElement ( ) ;
2223 } ) ;
2324
2425 it ( 'should render the terminal container' , async ( ) => {
2526 await renderWithProviders ( < SQLTerminal /> , { preloadedState : customMockStore } ) ;
26- const terminalContainer = screen . getByTestId ( 'terminal-container' ) ;
27- expect ( terminalContainer ) . toBeInTheDocument ( ) ;
27+ expect ( screen . getByTestId ( 'terminal-container' ) ) . toBeInTheDocument ( ) ;
2828 } ) ;
2929
3030 it ( 'should display initial placeholder in the input field' , async ( ) => {
3131 await renderWithProviders ( < SQLTerminal /> , { preloadedState : customMockStore } ) ;
32- const inputField = screen . getByTestId ( 'query-input' ) ;
33- expect ( inputField ) . toBeInTheDocument ( ) ;
32+ expect ( screen . getByTestId ( 'query-input' ) ) . toBeInTheDocument ( ) ;
3433 } ) ;
3534
3635 it ( 'should update query state on input change' , async ( ) => {
@@ -40,16 +39,29 @@ describe('SQLTerminal', () => {
4039 expect ( inputField ) . toHaveValue ( 'select * from bkpr_accountevents' ) ;
4140 } ) ;
4241
43- it ( 'should call executeSql and display result in the output area ' , async ( ) => {
42+ it ( 'should call executeSql and display result as table by default ' , async ( ) => {
4443 spyOnExecuteSql ( ) ;
4544 await renderWithProviders ( < SQLTerminal /> , { preloadedState : customMockStore } ) ;
4645 const inputField = screen . getByTestId ( 'query-input' ) ;
47- const executeButton = screen . getByText ( 'Execute' ) ;
4846 fireEvent . change ( inputField , { target : { value : 'select * from bkpr_accountevents' } } ) ;
49- fireEvent . click ( executeButton ) ;
47+ fireEvent . click ( screen . getByText ( 'Execute' ) ) ;
48+ await waitFor ( ( ) => {
49+ expect ( screen . getByTestId ( 'terminal-container' ) . querySelector ( '.sql-table' ) ) . toBeInTheDocument ( ) ;
50+ } ) ;
51+ } ) ;
52+
53+ it ( 'should display result as JSON when switched to JSON view' , async ( ) => {
54+ spyOnExecuteSql ( ) ;
55+ await renderWithProviders ( < SQLTerminal /> , { preloadedState : customMockStore } ) ;
56+ const inputField = screen . getByTestId ( 'query-input' ) ;
57+ fireEvent . change ( inputField , { target : { value : 'select * from bkpr_accountevents' } } ) ;
58+ fireEvent . click ( screen . getByText ( 'Execute' ) ) ;
59+ await waitFor ( ( ) => {
60+ expect ( screen . getByTestId ( 'terminal-container' ) . querySelector ( '.sql-table' ) ) . toBeInTheDocument ( ) ;
61+ } ) ;
62+ fireEvent . click ( screen . getByTestId ( 'toggle-switch' ) ) ;
5063 await waitFor ( ( ) => {
5164 const output = screen . getByTestId ( 'terminal-container' ) . textContent ;
52- expect ( output ) . toContain ( 'select * from bkpr_accountevents' ) ;
5365 expect ( output ) . toContain ( JSON . stringify ( mockSQLResponse . rows , null , 2 ) ) ;
5466 } ) ;
5567 } ) ;
@@ -58,39 +70,55 @@ describe('SQLTerminal', () => {
5870 spyOnExecuteSql ( ) ;
5971 await renderWithProviders ( < SQLTerminal /> , { preloadedState : customMockStore } ) ;
6072 const inputField = screen . getByTestId ( 'query-input' ) ;
61- const executeButton = screen . getByText ( 'Execute' ) ;
6273 fireEvent . change ( inputField , { target : { value : 'select * from non_existing_table' } } ) ;
63- fireEvent . click ( executeButton ) ;
74+ fireEvent . click ( screen . getByText ( 'Execute' ) ) ;
6475 await waitFor ( ( ) => {
6576 const output = screen . getByTestId ( 'terminal-container' ) . textContent ;
6677 expect ( output ) . not . toContain ( JSON . stringify ( mockSQLResponse . rows , null , 2 ) ) ;
6778 } ) ;
6879 } ) ;
6980
7081 it ( 'should open the help link when Help button is clicked' , async ( ) => {
71- await renderWithProviders ( < SQLTerminal /> , { preloadedState : customMockStore } ) ;
72- const helpButton = screen . getByText ( 'Help' ) ;
82+ await renderWithProviders ( < SQLTerminal /> , { preloadedState : customMockStore } ) ;
7383 const windowOpenSpy = jest . spyOn ( window , 'open' ) . mockImplementation ( ( ) => null ) ;
74- fireEvent . click ( helpButton ) ;
84+ fireEvent . click ( screen . getByText ( 'Help' ) ) ;
7585 expect ( windowOpenSpy ) . toHaveBeenCalledWith ( 'https://docs.corelightning.org/reference/sql' , '_blank' ) ;
7686 } ) ;
7787
78- it ( 'should clear the output when Clear button is clicked' , async ( ) => {
88+ it ( 'should clear the query and output when Clear button is clicked' , async ( ) => {
7989 spyOnExecuteSql ( ) ;
8090 await renderWithProviders ( < SQLTerminal /> , { preloadedState : customMockStore } ) ;
8191 const inputField = screen . getByTestId ( 'query-input' ) ;
82- const executeButton = screen . getByText ( 'Execute' ) ;
83- const clearButton = screen . getByText ( 'Clear' ) ;
8492 fireEvent . change ( inputField , { target : { value : 'select * from bkpr_accountevents' } } ) ;
85- fireEvent . click ( executeButton ) ;
93+ fireEvent . click ( screen . getByText ( 'Execute' ) ) ;
8694 await waitFor ( ( ) => {
87- const output = screen . getByTestId ( 'terminal-container' ) . textContent ;
88- expect ( output ) . toContain ( 'select * from bkpr_accountevents' ) ;
89- expect ( output ) . toContain ( JSON . stringify ( mockSQLResponse . rows , null , 2 ) ) ;
95+ expect ( screen . getByTestId ( 'terminal-container' ) . querySelector ( '.sql-table' ) ) . toBeInTheDocument ( ) ;
9096 } ) ;
91- fireEvent . click ( clearButton ) ;
97+ fireEvent . click ( screen . getByText ( 'Clear' ) ) ;
98+ await waitFor ( ( ) => {
99+ expect ( screen . getByTestId ( 'query-input' ) ) . toHaveValue ( '' ) ;
100+ expect ( screen . getByTestId ( 'terminal-container' ) . querySelector ( '.sql-table' ) ) . not . toBeInTheDocument ( ) ;
101+ } ) ;
102+ } ) ;
92103
93- const outputAfterClear = screen . getByTestId ( 'terminal-container' ) . textContent ;
94- expect ( outputAfterClear ) . not . toContain ( 'select * from bkpr_accountevents' ) ;
104+ it ( 'should reset to Table view when Clear button is clicked' , async ( ) => {
105+ spyOnExecuteSql ( ) ;
106+ await renderWithProviders ( < SQLTerminal /> , { preloadedState : customMockStore } ) ;
107+ const inputField = screen . getByTestId ( 'query-input' ) ;
108+ fireEvent . change ( inputField , { target : { value : 'select * from bkpr_accountevents' } } ) ;
109+ fireEvent . click ( screen . getByText ( 'Execute' ) ) ;
110+ await waitFor ( ( ) => {
111+ expect ( screen . getByTestId ( 'terminal-container' ) . querySelector ( '.sql-table' ) ) . toBeInTheDocument ( ) ;
112+ } ) ;
113+ fireEvent . click ( screen . getByTestId ( 'toggle-switch' ) ) ;
114+ await waitFor ( ( ) => {
115+ expect ( screen . getByTestId ( 'terminal-container' ) . querySelector ( '.sql-table' ) ) . not . toBeInTheDocument ( ) ;
116+ } ) ;
117+ fireEvent . click ( screen . getByText ( 'Clear' ) ) ;
118+ fireEvent . change ( inputField , { target : { value : 'select * from bkpr_accountevents' } } ) ;
119+ fireEvent . click ( screen . getByText ( 'Execute' ) ) ;
120+ await waitFor ( ( ) => {
121+ expect ( screen . getByTestId ( 'terminal-container' ) . querySelector ( '.sql-table' ) ) . toBeInTheDocument ( ) ;
122+ } ) ;
95123 } ) ;
96124} ) ;
0 commit comments