Add exported query fragments and scoped coverage observations
This commit is contained in:
@@ -218,3 +218,50 @@ package Runtime id "package:runtime" revision "package:runtime@1" { }
|
||||
/requires external interface Named \(interface:named@1\)/,
|
||||
);
|
||||
});
|
||||
|
||||
test("resource-owned fragment imports compile through the locked package closure", async (context) => {
|
||||
const directory = await mkdtemp(path.join(os.tmpdir(), "quixos-fragment-assembly-"));
|
||||
context.after(() => rm(directory, { recursive: true, force: true }));
|
||||
const dirs = Object.fromEntries(["item", "rows", "screen"].map((name) => [name, path.join(directory, name)]));
|
||||
await Promise.all(Object.values(dirs).map((dir) => mkdir(dir)));
|
||||
const dependency = (kind: string, name: string) =>
|
||||
`${kind} ${name} source {repository "https://example.test/${name.toLowerCase()}.git"; commit "${namedCommit}";}`;
|
||||
await writeFile(path.join(dirs.item!, "quixos.lock"), lock());
|
||||
await writeFile(
|
||||
path.join(dirs.item!, "interface.qx"),
|
||||
`interface Item id "item" revision "item@1" {queryable value title id "title" : string {get id "title:get" execution snapshot targets [browser,server];}}`,
|
||||
);
|
||||
await writeFile(path.join(dirs.rows!, "quixos.lock"), lock(dependency("interface", "Item")));
|
||||
await writeFile(
|
||||
path.join(dirs.rows!, "package.qx"),
|
||||
`import interface Item; package Rows id "rows" revision "rows@1" {query fragment Row id "row" root Item document "row.graphql" fragment "Row";}`,
|
||||
);
|
||||
await writeFile(path.join(dirs.rows!, "row.graphql"), "fragment Row on Item {_camino {ref} title}");
|
||||
await writeFile(
|
||||
path.join(dirs.screen!, "quixos.lock"),
|
||||
lock(dependency("interface", "Item") + dependency("package", "Rows")),
|
||||
);
|
||||
await writeFile(
|
||||
path.join(dirs.screen!, "package.qx"),
|
||||
`import interface Item; import package Rows; package Screen id "screen" revision "screen@1" {
|
||||
query Inputs id "inputs" root Item document "screen.graphql" operation "Screen" {replica; fragments Rows.Row;}
|
||||
query View id "view" root Item document "screen.graphql" operation "Screen" {local from Inputs; fragments Rows.Row;}
|
||||
}`,
|
||||
);
|
||||
await writeFile(path.join(dirs.screen!, "screen.graphql"), "query Screen {root {...Row}}");
|
||||
const result = await compileCapabilityResourceRepository({
|
||||
rootDirectory: dirs.screen!,
|
||||
kind: "package",
|
||||
source: { resolver: "git", repository: "https://example.test/screen.git", commit: packageCommit },
|
||||
resolveResource: async (source) => {
|
||||
const name = new URL(source.repository).pathname.slice(1, -4);
|
||||
assert.ok(dirs[name], name);
|
||||
return { directory: dirs[name]! };
|
||||
},
|
||||
});
|
||||
assert.equal(result.resource.kind, "package");
|
||||
if (result.resource.kind !== "package") throw Error("expected package");
|
||||
const view = result.resource.revision.checkedQueries!.find((q) => q.declaration.id === "view")!;
|
||||
assert.equal(view.selection[0]!.selection[0]!.fragmentSpread?.package, "rows@1");
|
||||
assert.equal(result.resources.length, 3);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user