Skip to content

Commit 84928fa

Browse files
committed
Add test for empty result view bug
1 parent 2a4a912 commit 84928fa

File tree

1 file changed

+95
-12
lines changed

1 file changed

+95
-12
lines changed

extensions/ql-vscode/src/view/results/__tests__/results.spec.tsx

Lines changed: 95 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * 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";
33
import { ResultsApp } from "../results";
44
import {
55
Interpretation,
@@ -20,18 +20,20 @@ const exampleSarif = fs.readJSONSync(
2020
describe(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

Comments
 (0)