11import * as React from "react" ;
2- import { render as reactRender , screen } from "@testing-library/react" ;
2+ import { act , render as reactRender , screen } from "@testing-library/react" ;
33import { ResultsApp } from "../results" ;
44import {
55 Interpretation ,
@@ -20,18 +20,20 @@ const exampleSarif = fs.readJSONSync(
2020describe ( ResultsApp . name , ( ) => {
2121 const render = ( ) => reactRender ( < ResultsApp /> ) ;
2222 const postMessage = async ( msg : IntoResultsViewMsg ) => {
23- // window.postMessage doesn't set the origin correctly, see
24- // https://github.com/jsdom/jsdom/issues/2745
25- window . dispatchEvent (
26- new MessageEvent ( "message" , {
27- source : window ,
28- origin : window . location . origin ,
29- data : msg ,
30- } ) ,
31- ) ;
23+ await act ( async ( ) => {
24+ // window.postMessage doesn't set the origin correctly, see
25+ // https://github.com/jsdom/jsdom/issues/2745
26+ window . dispatchEvent (
27+ new MessageEvent ( "message" , {
28+ source : window ,
29+ origin : window . location . origin ,
30+ data : msg ,
31+ } ) ,
32+ ) ;
3233
33- // The event is dispatched asynchronously, so we need to wait for it to be handled.
34- await new Promise ( ( resolve ) => setTimeout ( resolve , 0 ) ) ;
34+ // The event is dispatched asynchronously, so we need to wait for it to be handled.
35+ await new Promise ( ( resolve ) => setTimeout ( resolve , 0 ) ) ;
36+ } ) ;
3537 } ;
3638
3739 it ( "renders results" , async ( ) => {
@@ -95,6 +97,7 @@ describe(ResultsApp.name, () => {
9597 } ,
9698 } ,
9799 } ;
100+
98101 await postMessage ( message ) ;
99102
100103 expect (
@@ -117,4 +120,84 @@ describe(ResultsApp.name, () => {
117120 screen . getByText ( "'x' is assigned a value but never used." ) ,
118121 ) . toBeInTheDocument ( ) ;
119122 } ) ;
123+
124+ it ( "renders results when switching between queries with different result set names" , async ( ) => {
125+ render ( ) ;
126+
127+ await postMessage ( {
128+ t : "setState" ,
129+ interpretation : undefined ,
130+ origResultsPaths : {
131+ resultsPath : "/a/b/c/results.bqrs" ,
132+ interpretedResultsPath : "/a/b/c/interpretedResults.sarif" ,
133+ } ,
134+ resultsPath : "/a/b/c/results.bqrs" ,
135+ parsedResultSets : {
136+ pageNumber : 0 ,
137+ pageSize : 200 ,
138+ numPages : 1 ,
139+ numInterpretedPages : 0 ,
140+ resultSet : {
141+ schema : {
142+ name : "#select" ,
143+ rows : 1 ,
144+ columns : [ { kind : "s" } ] ,
145+ pagination : { "step-size" : 200 , offsets : [ 13 ] } ,
146+ } ,
147+ rows : [ [ "foobar1" ] ] ,
148+ t : "RawResultSet" ,
149+ } ,
150+ resultSetNames : [ "#select" ] ,
151+ } ,
152+ sortedResultsMap : { } ,
153+ database : {
154+ name : "test-db" ,
155+ databaseUri : "test-db-uri" ,
156+ } ,
157+ shouldKeepOldResultsWhileRendering : false ,
158+ metadata : { } ,
159+ queryName : "empty.ql" ,
160+ queryPath : "/a/b/c/empty.ql" ,
161+ } ) ;
162+
163+ expect ( screen . getByText ( "foobar1" ) ) . toBeInTheDocument ( ) ;
164+
165+ await postMessage ( {
166+ t : "setState" ,
167+ interpretation : undefined ,
168+ origResultsPaths : {
169+ resultsPath : "/a/b/c/results.bqrs" ,
170+ interpretedResultsPath : "/a/b/c/interpretedResults.sarif" ,
171+ } ,
172+ resultsPath : "/a/b/c/results.bqrs" ,
173+ parsedResultSets : {
174+ pageNumber : 0 ,
175+ pageSize : 200 ,
176+ numPages : 1 ,
177+ numInterpretedPages : 0 ,
178+ resultSet : {
179+ schema : {
180+ name : "#Quick_evaluation_of_expression" ,
181+ rows : 1 ,
182+ columns : [ { name : "#expr_result" , kind : "s" } ] ,
183+ pagination : { "step-size" : 200 , offsets : [ 49 ] } ,
184+ } ,
185+ rows : [ [ "foobar2" ] ] ,
186+ t : "RawResultSet" ,
187+ } ,
188+ resultSetNames : [ "#Quick_evaluation_of_expression" ] ,
189+ } ,
190+ sortedResultsMap : { } ,
191+ database : {
192+ name : "test-db" ,
193+ databaseUri : "test-db-uri" ,
194+ } ,
195+ shouldKeepOldResultsWhileRendering : false ,
196+ metadata : { } ,
197+ queryName : "Quick evaluation of empty.ql:1" ,
198+ queryPath : "/a/b/c/empty.ql" ,
199+ } ) ;
200+
201+ expect ( screen . getByText ( "foobar2" ) ) . toBeInTheDocument ( ) ;
202+ } ) ;
120203} ) ;
0 commit comments