Restore generic Studio object navigation and discovery
This commit is contained in:
@@ -89,7 +89,7 @@ package Reader id "package:reader" revision "package:reader@1" {
|
||||
assert.ok(transaction.ok, JSON.stringify(transaction.diagnostics));
|
||||
});
|
||||
|
||||
test("query placement round-trips and local extents never claim complete membership", async () => {
|
||||
test("query placement distinguishes confirmed windows from local candidate extents", async () => {
|
||||
const { compileQuery } = await import("../src/query/compile.js");
|
||||
const { linkQueries } = await import("../src/query/link.js");
|
||||
const { toBinary, fromBinary, fromJson } = await import("@bufbuild/protobuf");
|
||||
@@ -125,10 +125,8 @@ package Reader id "package:reader" revision "package:reader@1" {
|
||||
await compileQuery(admission, [iface], async () => document("Visible", "objects")),
|
||||
await compileQuery(local, [iface], async () => document("Presentation", "availableObjects")),
|
||||
];
|
||||
await assert.rejects(
|
||||
compileQuery(local, [iface], async () => document("Presentation", "objects")),
|
||||
/Cannot query field "objects"/,
|
||||
);
|
||||
const confirmed = await compileQuery(local, [iface], async () => document("Presentation", "objects"));
|
||||
assert.equal(confirmed.selection[0]!.selection[0]!.name, "objects");
|
||||
const remote = structuredClone(iface);
|
||||
delete remote.members[0]!.operations[0]!.execution;
|
||||
await assert.rejects(
|
||||
|
||||
@@ -18,3 +18,17 @@ test("local relationship pages may reuse exactly the confirmed source window", a
|
||||
});
|
||||
assert.doesNotThrow(() => compileExecutionPlan(workspace));
|
||||
});
|
||||
|
||||
test("local workspace objects reads the exact server window without adding local candidates", async () => {
|
||||
const load = (first: number) =>
|
||||
loadReaderWorkspace((name, text) => {
|
||||
if (name === "ReaderRuntime.qx") return text.replace(/^.*query HighlightList id.*$/m, "");
|
||||
if (name === "queries/highlight-list.graphql")
|
||||
return text.replace("availableObjects(all: 200", `objects(first: ${first}`);
|
||||
return text;
|
||||
});
|
||||
const workspace = await load(2);
|
||||
assert.doesNotThrow(() => compileExecutionPlan(workspace));
|
||||
const wrong = await load(3);
|
||||
assert.throws(() => compileExecutionPlan(wrong), /REPLICA_WINDOW_MISMATCH/);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user