@powerhousedao/reactor-api 6.0.0-dev.102 → 6.0.0-dev.104
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/dev.d.ts +2 -0
- package/dist/src/dev.d.ts.map +1 -0
- package/dist/src/dev.js +51 -0
- package/dist/src/dev.js.map +1 -0
- package/dist/src/graphql/document-model-subgraph.d.ts +88 -1
- package/dist/src/graphql/document-model-subgraph.d.ts.map +1 -1
- package/dist/src/graphql/document-model-subgraph.js +33 -38
- package/dist/src/graphql/document-model-subgraph.js.map +1 -1
- package/dist/src/graphql/graphql-manager.d.ts.map +1 -1
- package/dist/src/graphql/graphql-manager.js +66 -1
- package/dist/src/graphql/graphql-manager.js.map +1 -1
- package/dist/src/graphql/playground.d.ts.map +1 -1
- package/dist/src/graphql/playground.js +19 -12
- package/dist/src/graphql/playground.js.map +1 -1
- package/dist/src/graphql/sse.d.ts +42 -0
- package/dist/src/graphql/sse.d.ts.map +1 -0
- package/dist/src/graphql/sse.js +33 -0
- package/dist/src/graphql/sse.js.map +1 -0
- package/dist/src/graphql/types.d.ts +1 -0
- package/dist/src/graphql/types.d.ts.map +1 -1
- package/dist/src/packages/import-loader.d.ts +1 -3
- package/dist/src/packages/import-loader.d.ts.map +1 -1
- package/dist/src/packages/import-loader.js +2 -17
- package/dist/src/packages/import-loader.js.map +1 -1
- package/dist/src/packages/types.d.ts +0 -2
- package/dist/src/packages/types.d.ts.map +1 -1
- package/dist/src/packages/vite-loader.d.ts +3 -4
- package/dist/src/packages/vite-loader.d.ts.map +1 -1
- package/dist/src/packages/vite-loader.js +5 -18
- package/dist/src/packages/vite-loader.js.map +1 -1
- package/dist/src/server.d.ts +7 -24
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +60 -123
- package/dist/src/server.js.map +1 -1
- package/dist/src/types.d.ts +1 -2
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/create-schema.d.ts +6 -0
- package/dist/src/utils/create-schema.d.ts.map +1 -1
- package/dist/src/utils/create-schema.js +39 -25
- package/dist/src/utils/create-schema.js.map +1 -1
- package/dist/test/document-drive-subgraph.test.js +151 -88
- package/dist/test/document-drive-subgraph.test.js.map +1 -1
- package/dist/test/document-model-subgraph-permissions.test.js +34 -70
- package/dist/test/document-model-subgraph-permissions.test.js.map +1 -1
- package/dist/test/subscriptions-sse.test.d.ts +2 -0
- package/dist/test/subscriptions-sse.test.d.ts.map +1 -0
- package/dist/test/subscriptions-sse.test.js +264 -0
- package/dist/test/subscriptions-sse.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +16 -14
|
@@ -1,67 +1,120 @@
|
|
|
1
1
|
import { testSetupReactor } from "@powerhousedao/reactor-api/test";
|
|
2
2
|
import { driveDocumentModelModule } from "document-drive";
|
|
3
|
-
import { print } from "graphql";
|
|
3
|
+
import { Kind, print } from "graphql";
|
|
4
|
+
import { parse } from "graphql";
|
|
4
5
|
import { beforeEach, describe, expect, it } from "vitest";
|
|
5
|
-
import { DocumentModelSubgraph } from "../src/graphql/document-model-subgraph.js";
|
|
6
|
+
import { DocumentModelSubgraph, } from "../src/graphql/document-model-subgraph.js";
|
|
6
7
|
import { generateDocumentModelSchema, getDocumentModelSchemaName, } from "../src/utils/create-schema.js";
|
|
7
8
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* Verifies that the new DocumentModelSubgraph produces valid schemas, resolvers,
|
|
11
|
-
* and union type resolvers for the document-drive document model.
|
|
9
|
+
* Parse a generated DocumentNode into a map of type definitions.
|
|
10
|
+
* Returns { typeName -> { kind, fieldNames } } for easy assertion.
|
|
12
11
|
*/
|
|
12
|
+
function parseSchemaTypes(docNode) {
|
|
13
|
+
const ast = parse(print(docNode));
|
|
14
|
+
const types = {};
|
|
15
|
+
for (const def of ast.definitions) {
|
|
16
|
+
if (def.kind === Kind.OBJECT_TYPE_DEFINITION ||
|
|
17
|
+
def.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION) {
|
|
18
|
+
types[def.name.value] = {
|
|
19
|
+
kind: def.kind,
|
|
20
|
+
fields: def.fields?.map((f) => f.name.value) ?? [],
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return types;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Extract the return type name from a field definition AST node,
|
|
28
|
+
* stripping NonNull and List wrappers.
|
|
29
|
+
*/
|
|
30
|
+
function getFieldReturnTypeName(field) {
|
|
31
|
+
let node = field.type;
|
|
32
|
+
while (node.kind === Kind.NON_NULL_TYPE || node.kind === Kind.LIST_TYPE) {
|
|
33
|
+
node = node.type;
|
|
34
|
+
}
|
|
35
|
+
return node.name?.value ?? "";
|
|
36
|
+
}
|
|
13
37
|
describe("Document-Drive Subgraph", () => {
|
|
14
38
|
const driveModule = driveDocumentModelModule;
|
|
15
39
|
const documentName = getDocumentModelSchemaName(driveModule.documentModel.global);
|
|
16
40
|
describe("schema generation", () => {
|
|
41
|
+
const buildTypes = () => parseSchemaTypes(generateDocumentModelSchema(driveModule.documentModel.global, {
|
|
42
|
+
useNewApi: true,
|
|
43
|
+
}));
|
|
17
44
|
it("should generate a valid schema for document-drive", () => {
|
|
18
45
|
expect(() => generateDocumentModelSchema(driveModule.documentModel.global, {
|
|
19
46
|
useNewApi: true,
|
|
20
47
|
})).not.toThrow();
|
|
21
48
|
});
|
|
22
|
-
it("should
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
expect(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
expect(
|
|
32
|
-
expect(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
expect(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
expect(
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
expect(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
expect(
|
|
63
|
-
expect(
|
|
64
|
-
expect(
|
|
49
|
+
it("should have Query type with a namespace field returning the Queries type", () => {
|
|
50
|
+
const ast = parse(print(generateDocumentModelSchema(driveModule.documentModel.global, {
|
|
51
|
+
useNewApi: true,
|
|
52
|
+
})));
|
|
53
|
+
const queryDef = ast.definitions.find((d) => d.kind === Kind.OBJECT_TYPE_DEFINITION && d.name.value === "Query");
|
|
54
|
+
expect(queryDef).toBeDefined();
|
|
55
|
+
if (queryDef?.kind !== Kind.OBJECT_TYPE_DEFINITION)
|
|
56
|
+
throw new Error("unreachable");
|
|
57
|
+
const nsField = queryDef.fields?.find((f) => f.name.value === documentName);
|
|
58
|
+
expect(nsField).toBeDefined();
|
|
59
|
+
expect(getFieldReturnTypeName(nsField)).toBe(`${documentName}Queries`);
|
|
60
|
+
});
|
|
61
|
+
it("should have Mutation type with a namespace field returning the Mutations type", () => {
|
|
62
|
+
const ast = parse(print(generateDocumentModelSchema(driveModule.documentModel.global, {
|
|
63
|
+
useNewApi: true,
|
|
64
|
+
})));
|
|
65
|
+
const mutationDef = ast.definitions.find((d) => d.kind === Kind.OBJECT_TYPE_DEFINITION && d.name.value === "Mutation");
|
|
66
|
+
expect(mutationDef).toBeDefined();
|
|
67
|
+
if (mutationDef?.kind !== Kind.OBJECT_TYPE_DEFINITION)
|
|
68
|
+
throw new Error("unreachable");
|
|
69
|
+
const nsField = mutationDef.fields?.find((f) => f.name.value === documentName);
|
|
70
|
+
expect(nsField).toBeDefined();
|
|
71
|
+
expect(getFieldReturnTypeName(nsField)).toBe(`${documentName}Mutations`);
|
|
72
|
+
});
|
|
73
|
+
it("should have unprefixed query fields inside the Queries namespace type", () => {
|
|
74
|
+
const types = buildTypes();
|
|
75
|
+
const queriesType = types[`${documentName}Queries`];
|
|
76
|
+
expect(queriesType).toBeDefined();
|
|
77
|
+
expect(queriesType.fields).toContain("document");
|
|
78
|
+
expect(queriesType.fields).toContain("findDocuments");
|
|
79
|
+
expect(queriesType.fields).toContain("documentChildren");
|
|
80
|
+
expect(queriesType.fields).toContain("documentParents");
|
|
81
|
+
expect(queriesType.fields).not.toContain(`${documentName}_document`);
|
|
82
|
+
});
|
|
83
|
+
it("should have unprefixed mutation fields inside the Mutations namespace type", () => {
|
|
84
|
+
const types = buildTypes();
|
|
85
|
+
const mutationsType = types[`${documentName}Mutations`];
|
|
86
|
+
expect(mutationsType).toBeDefined();
|
|
87
|
+
expect(mutationsType.fields).toContain("createDocument");
|
|
88
|
+
expect(mutationsType.fields).toContain("createEmptyDocument");
|
|
89
|
+
expect(mutationsType.fields).toContain("addFile");
|
|
90
|
+
expect(mutationsType.fields).toContain("addFolder");
|
|
91
|
+
expect(mutationsType.fields).toContain("deleteNode");
|
|
92
|
+
expect(mutationsType.fields).toContain("updateFile");
|
|
93
|
+
expect(mutationsType.fields).toContain("updateNode");
|
|
94
|
+
expect(mutationsType.fields).toContain("copyNode");
|
|
95
|
+
expect(mutationsType.fields).toContain("moveNode");
|
|
96
|
+
expect(mutationsType.fields).toContain("setDriveName");
|
|
97
|
+
expect(mutationsType.fields).toContain("setDriveIcon");
|
|
98
|
+
expect(mutationsType.fields).toContain("setSharingType");
|
|
99
|
+
expect(mutationsType.fields).toContain("setAvailableOffline");
|
|
100
|
+
expect(mutationsType.fields).toContain("removeListener");
|
|
101
|
+
expect(mutationsType.fields).toContain("removeTrigger");
|
|
102
|
+
expect(mutationsType.fields).not.toContain(`${documentName}_addFile`);
|
|
103
|
+
});
|
|
104
|
+
it("should include listener and trigger operations in the Mutations namespace type", () => {
|
|
105
|
+
const types = buildTypes();
|
|
106
|
+
const fields = types[`${documentName}Mutations`].fields;
|
|
107
|
+
expect(fields).toContain("addListener");
|
|
108
|
+
expect(fields).toContain("addTrigger");
|
|
109
|
+
expect(fields).toContain("addListenerAsync");
|
|
110
|
+
expect(fields).toContain("addTriggerAsync");
|
|
111
|
+
});
|
|
112
|
+
it("should include async mutation variants in the Mutations namespace type", () => {
|
|
113
|
+
const types = buildTypes();
|
|
114
|
+
const fields = types[`${documentName}Mutations`].fields;
|
|
115
|
+
expect(fields).toContain("addFileAsync");
|
|
116
|
+
expect(fields).toContain("deleteNodeAsync");
|
|
117
|
+
expect(fields).toContain("setDriveNameAsync");
|
|
65
118
|
});
|
|
66
119
|
});
|
|
67
120
|
describe("DocumentModelSubgraph resolver generation", () => {
|
|
@@ -80,49 +133,59 @@ describe("Document-Drive Subgraph", () => {
|
|
|
80
133
|
analyticsStore: {},
|
|
81
134
|
});
|
|
82
135
|
});
|
|
83
|
-
it("should
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
expect(
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
expect(
|
|
91
|
-
expect(
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
expect(
|
|
96
|
-
|
|
97
|
-
expect(
|
|
98
|
-
expect(
|
|
99
|
-
expect(
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
expect(mutations[
|
|
105
|
-
expect(mutations[
|
|
136
|
+
it("should have a namespace resolver on Query that returns an empty object", () => {
|
|
137
|
+
const queryResolvers = subgraph.resolvers.Query;
|
|
138
|
+
expect(queryResolvers[documentName]).toBeTypeOf("function");
|
|
139
|
+
expect(queryResolvers[documentName]()).toEqual({});
|
|
140
|
+
});
|
|
141
|
+
it("should have a namespace resolver on Mutation that returns an empty object", () => {
|
|
142
|
+
const mutationResolvers = subgraph.resolvers.Mutation;
|
|
143
|
+
expect(mutationResolvers[documentName]).toBeTypeOf("function");
|
|
144
|
+
expect(mutationResolvers[documentName]()).toEqual({});
|
|
145
|
+
});
|
|
146
|
+
it("should generate query resolvers on the Queries namespace key", () => {
|
|
147
|
+
const queries = subgraph.queryResolvers;
|
|
148
|
+
expect(queries).toBeDefined();
|
|
149
|
+
expect(queries.document).toBeTypeOf("function");
|
|
150
|
+
expect(queries.findDocuments).toBeTypeOf("function");
|
|
151
|
+
expect(queries.documentChildren).toBeTypeOf("function");
|
|
152
|
+
expect(queries.documentParents).toBeTypeOf("function");
|
|
153
|
+
});
|
|
154
|
+
it("should generate mutation resolvers for valid operations (sync + async) on the Mutations namespace key", () => {
|
|
155
|
+
const mutations = subgraph.mutationResolvers;
|
|
156
|
+
expect(mutations).toBeDefined();
|
|
157
|
+
expect(mutations["addFile"]).toBeTypeOf("function");
|
|
158
|
+
expect(mutations["addFolder"]).toBeTypeOf("function");
|
|
159
|
+
expect(mutations["deleteNode"]).toBeTypeOf("function");
|
|
160
|
+
expect(mutations["updateFile"]).toBeTypeOf("function");
|
|
161
|
+
expect(mutations["updateNode"]).toBeTypeOf("function");
|
|
162
|
+
expect(mutations["copyNode"]).toBeTypeOf("function");
|
|
163
|
+
expect(mutations["moveNode"]).toBeTypeOf("function");
|
|
164
|
+
expect(mutations["addFileAsync"]).toBeTypeOf("function");
|
|
165
|
+
expect(mutations["deleteNodeAsync"]).toBeTypeOf("function");
|
|
166
|
+
expect(mutations["setDriveName"]).toBeTypeOf("function");
|
|
167
|
+
expect(mutations["setDriveIcon"]).toBeTypeOf("function");
|
|
168
|
+
expect(mutations["setSharingType"]).toBeTypeOf("function");
|
|
169
|
+
expect(mutations["setAvailableOffline"]).toBeTypeOf("function");
|
|
170
|
+
expect(mutations["setDriveNameAsync"]).toBeTypeOf("function");
|
|
171
|
+
expect(mutations["removeListener"]).toBeTypeOf("function");
|
|
172
|
+
expect(mutations["removeTrigger"]).toBeTypeOf("function");
|
|
106
173
|
});
|
|
107
174
|
it("should generate mutation resolvers for listener and trigger operations", () => {
|
|
108
|
-
const mutations = subgraph.
|
|
109
|
-
|
|
110
|
-
expect(mutations[
|
|
111
|
-
expect(mutations[
|
|
112
|
-
expect(mutations[
|
|
113
|
-
expect(mutations[`${documentName}_addTriggerAsync`]).toBeTypeOf("function");
|
|
114
|
-
});
|
|
115
|
-
it("should generate flat query resolvers", () => {
|
|
116
|
-
const queries = subgraph.resolvers.Query;
|
|
117
|
-
expect(queries[`${documentName}_document`]).toBeTypeOf("function");
|
|
118
|
-
expect(queries[`${documentName}_findDocuments`]).toBeTypeOf("function");
|
|
119
|
-
expect(queries[`${documentName}_documentChildren`]).toBeTypeOf("function");
|
|
120
|
-
expect(queries[`${documentName}_documentParents`]).toBeTypeOf("function");
|
|
175
|
+
const mutations = subgraph.mutationResolvers;
|
|
176
|
+
expect(mutations["addListener"]).toBeTypeOf("function");
|
|
177
|
+
expect(mutations["addTrigger"]).toBeTypeOf("function");
|
|
178
|
+
expect(mutations["addListenerAsync"]).toBeTypeOf("function");
|
|
179
|
+
expect(mutations["addTriggerAsync"]).toBeTypeOf("function");
|
|
121
180
|
});
|
|
122
181
|
it("should generate createDocument and createEmptyDocument mutations", () => {
|
|
123
|
-
const mutations = subgraph.
|
|
124
|
-
expect(mutations
|
|
125
|
-
expect(mutations
|
|
182
|
+
const mutations = subgraph.mutationResolvers;
|
|
183
|
+
expect(mutations.createDocument).toBeTypeOf("function");
|
|
184
|
+
expect(mutations.createEmptyDocument).toBeTypeOf("function");
|
|
185
|
+
});
|
|
186
|
+
it("should not have flat prefixed resolvers on Query or Mutation", () => {
|
|
187
|
+
expect(Object.keys(subgraph.resolvers.Query)).toEqual([documentName]);
|
|
188
|
+
expect(Object.keys(subgraph.resolvers.Mutation)).toEqual([documentName]);
|
|
126
189
|
});
|
|
127
190
|
});
|
|
128
191
|
describe("union type resolvers", () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-drive-subgraph.test.js","sourceRoot":"","sources":["../../test/document-drive-subgraph.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"document-drive-subgraph.test.js","sourceRoot":"","sources":["../../test/document-drive-subgraph.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,7 +32,10 @@ describe("DocumentModelSubgraph Permission Checks", () => {
|
|
|
32
32
|
actions: {
|
|
33
33
|
setName: vi.fn((input) => ({ type: "SET_NAME", input })),
|
|
34
34
|
setValue: vi.fn((input) => ({ type: "SET_VALUE", input })),
|
|
35
|
-
restrictedOp: vi.fn((input) => ({
|
|
35
|
+
restrictedOp: vi.fn((input) => ({
|
|
36
|
+
type: "RESTRICTED_OP",
|
|
37
|
+
input,
|
|
38
|
+
})),
|
|
36
39
|
},
|
|
37
40
|
reducer: vi.fn(),
|
|
38
41
|
};
|
|
@@ -106,17 +109,14 @@ describe("DocumentModelSubgraph Permission Checks", () => {
|
|
|
106
109
|
});
|
|
107
110
|
});
|
|
108
111
|
describe("Query: document", () => {
|
|
109
|
-
// Updated to match new flat resolver structure (TestModel_document instead of TestModel.getDocument)
|
|
110
112
|
const callGetDocument = async (ctx, identifier) => {
|
|
111
|
-
const queryResolver = subgraph.
|
|
112
|
-
?.TestModel_document;
|
|
113
|
+
const queryResolver = subgraph.queryResolvers.document;
|
|
113
114
|
return queryResolver(null, { identifier }, ctx);
|
|
114
115
|
};
|
|
115
116
|
describe("Global Admin Access", () => {
|
|
116
117
|
it("should allow access when user is global admin", async () => {
|
|
117
118
|
const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
|
|
118
119
|
const result = await callGetDocument(ctx, "doc-123");
|
|
119
|
-
// Result is DocumentWithChildren: { document: PHDocument, childIds: string[] }
|
|
120
120
|
expect(result).toBeDefined();
|
|
121
121
|
expect(result.document.id).toBe("doc-123");
|
|
122
122
|
expect(mockDocumentPermissionService.canRead).not.toHaveBeenCalled();
|
|
@@ -146,17 +146,6 @@ describe("DocumentModelSubgraph Permission Checks", () => {
|
|
|
146
146
|
const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
|
|
147
147
|
await expect(callGetDocument(ctx, "")).rejects.toThrow("Document identifier is required");
|
|
148
148
|
});
|
|
149
|
-
// Note: Drive validation is no longer part of document query in new API
|
|
150
|
-
// Documents are retrieved directly by identifier, parentId filtering is done via findDocuments
|
|
151
|
-
it.skip("should verify document is in specified drive when driveId provided", async () => {
|
|
152
|
-
mockReactorClient.find = vi.fn().mockResolvedValue({
|
|
153
|
-
results: [],
|
|
154
|
-
options: { limit: 10, cursor: "" },
|
|
155
|
-
});
|
|
156
|
-
const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
|
|
157
|
-
// This test is no longer applicable - drive filtering is done via findDocuments
|
|
158
|
-
await expect(callGetDocument(ctx, "doc-123")).rejects.toThrow("is not part of");
|
|
159
|
-
});
|
|
160
149
|
it("should throw error if document type does not match", async () => {
|
|
161
150
|
const wrongTypeDoc = {
|
|
162
151
|
...mockDocument,
|
|
@@ -178,9 +167,9 @@ describe("DocumentModelSubgraph Permission Checks", () => {
|
|
|
178
167
|
options: { limit: 10, cursor: "" },
|
|
179
168
|
});
|
|
180
169
|
let capturedGetParentsFn = null;
|
|
181
|
-
vi.mocked(mockDocumentPermissionService.canRead).mockImplementation(
|
|
170
|
+
vi.mocked(mockDocumentPermissionService.canRead).mockImplementation((_docId, _user, getParentsFn) => {
|
|
182
171
|
capturedGetParentsFn = getParentsFn;
|
|
183
|
-
return true;
|
|
172
|
+
return Promise.resolve(true);
|
|
184
173
|
});
|
|
185
174
|
const ctx = createContext({ userAddress: "0xuser" });
|
|
186
175
|
await callGetDocument(ctx, "child-doc");
|
|
@@ -191,9 +180,9 @@ describe("DocumentModelSubgraph Permission Checks", () => {
|
|
|
191
180
|
it("should return empty array if getParents fails", async () => {
|
|
192
181
|
vi.mocked(mockReactorClient.getParents).mockRejectedValue(new Error("Not found"));
|
|
193
182
|
let capturedGetParentsFn = null;
|
|
194
|
-
vi.mocked(mockDocumentPermissionService.canRead).mockImplementation(
|
|
183
|
+
vi.mocked(mockDocumentPermissionService.canRead).mockImplementation((_docId, _user, getParentsFn) => {
|
|
195
184
|
capturedGetParentsFn = getParentsFn;
|
|
196
|
-
return true;
|
|
185
|
+
return Promise.resolve(true);
|
|
197
186
|
});
|
|
198
187
|
const ctx = createContext({ userAddress: "0xuser" });
|
|
199
188
|
await callGetDocument(ctx, "child-doc");
|
|
@@ -202,29 +191,16 @@ describe("DocumentModelSubgraph Permission Checks", () => {
|
|
|
202
191
|
});
|
|
203
192
|
});
|
|
204
193
|
describe("reactorClient integration", () => {
|
|
205
|
-
// Note: Drive filtering is now done via findDocuments, not document query
|
|
206
|
-
it.skip("should use reactorClient.find to check document in drive", async () => {
|
|
207
|
-
const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
|
|
208
|
-
await callGetDocument(ctx, "doc-123");
|
|
209
|
-
// This test is no longer applicable - drive filtering is done via findDocuments
|
|
210
|
-
expect(mockReactorClient.find).toHaveBeenCalledWith({
|
|
211
|
-
parentId: "drive-1",
|
|
212
|
-
ids: ["doc-123"],
|
|
213
|
-
});
|
|
214
|
-
});
|
|
215
194
|
it("should use reactorClient.get to fetch document", async () => {
|
|
216
195
|
const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
|
|
217
196
|
await callGetDocument(ctx, "doc-123");
|
|
218
|
-
// The shared resolver calls get with identifier and optional view
|
|
219
197
|
expect(mockReactorClient.get).toHaveBeenCalledWith("doc-123", undefined);
|
|
220
198
|
});
|
|
221
199
|
});
|
|
222
200
|
});
|
|
223
201
|
describe("Query: findDocuments", () => {
|
|
224
|
-
// Updated to match new flat resolver structure (TestModel_findDocuments)
|
|
225
202
|
const callFindDocuments = async (ctx, parentId) => {
|
|
226
|
-
const queryResolver = subgraph.
|
|
227
|
-
?.TestModel_findDocuments;
|
|
203
|
+
const queryResolver = subgraph.queryResolvers.findDocuments;
|
|
228
204
|
const result = await queryResolver(null, { search: { parentId }, paging: { limit: 10 } }, ctx);
|
|
229
205
|
return result.items;
|
|
230
206
|
};
|
|
@@ -249,26 +225,26 @@ describe("DocumentModelSubgraph Permission Checks", () => {
|
|
|
249
225
|
});
|
|
250
226
|
});
|
|
251
227
|
it("should filter documents based on permissions when no global access", async () => {
|
|
252
|
-
vi.mocked(mockDocumentPermissionService.canRead).mockImplementation(
|
|
228
|
+
vi.mocked(mockDocumentPermissionService.canRead).mockImplementation((docId) => Promise.resolve(docId === "drive-1" || docId === "doc-1" || docId === "doc-3"));
|
|
253
229
|
const ctx = createContext({ userAddress: "0xpartial" });
|
|
254
230
|
const result = await callFindDocuments(ctx, "drive-1");
|
|
255
231
|
expect(result).toHaveLength(2);
|
|
256
|
-
expect(result.map((d) => d.id).sort()).toEqual([
|
|
232
|
+
expect(result.map((d) => d.id).sort()).toEqual([
|
|
233
|
+
"doc-1",
|
|
234
|
+
"doc-3",
|
|
235
|
+
]);
|
|
257
236
|
});
|
|
258
237
|
it("should return empty array when user has no document permissions", async () => {
|
|
259
|
-
vi.mocked(mockDocumentPermissionService.canRead).mockImplementation(
|
|
238
|
+
vi.mocked(mockDocumentPermissionService.canRead).mockImplementation((docId) => Promise.resolve(docId === "drive-1"));
|
|
260
239
|
const ctx = createContext({ userAddress: "0xnopermissions" });
|
|
261
240
|
const result = await callFindDocuments(ctx, "drive-1");
|
|
262
241
|
expect(result).toHaveLength(0);
|
|
263
242
|
});
|
|
264
243
|
});
|
|
265
244
|
describe("Permission filtering", () => {
|
|
266
|
-
|
|
267
|
-
// rather than checking drive permission first
|
|
268
|
-
it("should filter documents when user has no global access", async () => {
|
|
245
|
+
it("should filter out all documents when user has no permissions", async () => {
|
|
269
246
|
vi.mocked(mockDocumentPermissionService.canRead).mockResolvedValue(false);
|
|
270
247
|
const ctx = createContext({ userAddress: "0xunpermitted" });
|
|
271
|
-
// With no permissions, all documents should be filtered out
|
|
272
248
|
const result = await callFindDocuments(ctx, "drive-1");
|
|
273
249
|
expect(result).toHaveLength(0);
|
|
274
250
|
});
|
|
@@ -277,7 +253,6 @@ describe("DocumentModelSubgraph Permission Checks", () => {
|
|
|
277
253
|
it("should use reactorClient.find with type filter", async () => {
|
|
278
254
|
const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
|
|
279
255
|
await callFindDocuments(ctx, "drive-1");
|
|
280
|
-
// The shared resolver now uses find with these parameters - first call includes type filter
|
|
281
256
|
expect(mockReactorClient.find).toHaveBeenCalledWith(expect.objectContaining({
|
|
282
257
|
type: "powerhouse/test-model",
|
|
283
258
|
parentId: "drive-1",
|
|
@@ -289,9 +264,9 @@ describe("DocumentModelSubgraph Permission Checks", () => {
|
|
|
289
264
|
});
|
|
290
265
|
describe("Query: documents (get all)", () => {
|
|
291
266
|
const callDocuments = async (ctx, paging) => {
|
|
292
|
-
const queryResolver = subgraph.
|
|
293
|
-
|
|
294
|
-
return
|
|
267
|
+
const queryResolver = subgraph.queryResolvers.documents;
|
|
268
|
+
const result = await queryResolver(null, { paging }, ctx);
|
|
269
|
+
return result;
|
|
295
270
|
};
|
|
296
271
|
describe("Global Role Access", () => {
|
|
297
272
|
it("should return all documents for admin", async () => {
|
|
@@ -349,8 +324,7 @@ describe("DocumentModelSubgraph Permission Checks", () => {
|
|
|
349
324
|
});
|
|
350
325
|
describe("Mutation: createDocument", () => {
|
|
351
326
|
const callCreateDocument = async (ctx, name, parentIdentifier) => {
|
|
352
|
-
const mutation = subgraph.
|
|
353
|
-
?.TestModel_createDocument;
|
|
327
|
+
const mutation = subgraph.mutationResolvers.createDocument;
|
|
354
328
|
return mutation(null, { name, parentIdentifier }, ctx);
|
|
355
329
|
};
|
|
356
330
|
describe("Global Admin Access", () => {
|
|
@@ -376,7 +350,7 @@ describe("DocumentModelSubgraph Permission Checks", () => {
|
|
|
376
350
|
});
|
|
377
351
|
});
|
|
378
352
|
describe("Without parentIdentifier", () => {
|
|
379
|
-
it("should
|
|
353
|
+
it("should deny when user lacks global admin access", async () => {
|
|
380
354
|
const ctx = createContext({ userAddress: "0xnoglobal" });
|
|
381
355
|
await expect(callCreateDocument(ctx, "New Doc")).rejects.toThrow("Forbidden: insufficient permissions to create documents");
|
|
382
356
|
});
|
|
@@ -402,8 +376,8 @@ describe("DocumentModelSubgraph Permission Checks", () => {
|
|
|
402
376
|
});
|
|
403
377
|
describe("Mutation: operations (setName, setValue, etc.)", () => {
|
|
404
378
|
const callMutation = async (ctx, operationName, docId, input) => {
|
|
405
|
-
const mutation = subgraph.
|
|
406
|
-
return mutation(null, { docId, input }, ctx);
|
|
379
|
+
const mutation = subgraph.mutationResolvers[operationName];
|
|
380
|
+
return await mutation(null, { docId, input }, ctx);
|
|
407
381
|
};
|
|
408
382
|
describe("Write Permission Check", () => {
|
|
409
383
|
it("should check write permission before executing operation", async () => {
|
|
@@ -534,22 +508,15 @@ describe("DocumentModelSubgraph Permission Checks", () => {
|
|
|
534
508
|
});
|
|
535
509
|
describe("AUTH_ENABLED=false behavior", () => {
|
|
536
510
|
it("should allow all read access when admin role returns true", async () => {
|
|
537
|
-
const ctx = createContext({
|
|
538
|
-
|
|
539
|
-
userAddress: "0xanyone",
|
|
540
|
-
});
|
|
541
|
-
const queryResolver = subgraph.resolvers.Query
|
|
542
|
-
?.TestModel_document;
|
|
511
|
+
const ctx = createContext({ isAdmin: true, userAddress: "0xanyone" });
|
|
512
|
+
const queryResolver = subgraph.queryResolvers.document;
|
|
543
513
|
const result = await queryResolver(null, { identifier: "doc-123" }, ctx);
|
|
544
514
|
expect(result).toBeDefined();
|
|
545
515
|
expect(mockDocumentPermissionService.canRead).not.toHaveBeenCalled();
|
|
546
516
|
});
|
|
547
517
|
it("should allow all write access when admin role returns true", async () => {
|
|
548
|
-
const ctx = createContext({
|
|
549
|
-
|
|
550
|
-
userAddress: "0xanyone",
|
|
551
|
-
});
|
|
552
|
-
const result = await subgraph.resolvers.Mutation?.TestModel_setName(null, { docId: "doc-123", input: { name: "New" } }, ctx);
|
|
518
|
+
const ctx = createContext({ isAdmin: true, userAddress: "0xanyone" });
|
|
519
|
+
const result = await subgraph.mutationResolvers.setName(null, { docId: "doc-123", input: { name: "New" } }, ctx);
|
|
553
520
|
expect(result).toMatchObject({
|
|
554
521
|
id: "doc-123",
|
|
555
522
|
revisionsList: expect.arrayContaining([
|
|
@@ -573,24 +540,22 @@ describe("DocumentModelSubgraph Permission Checks", () => {
|
|
|
573
540
|
});
|
|
574
541
|
it("should deny read access when no permission service and no global access", async () => {
|
|
575
542
|
const ctx = createContext({ userAddress: "0xuser" });
|
|
576
|
-
const queryResolver = subgraphWithoutPermService.
|
|
577
|
-
?.TestModel_document;
|
|
543
|
+
const queryResolver = subgraphWithoutPermService.queryResolvers.document;
|
|
578
544
|
await expect(queryResolver(null, { identifier: "doc-123" }, ctx)).rejects.toThrow("Forbidden");
|
|
579
545
|
});
|
|
580
546
|
it("should deny write access when no permission service and no global access", async () => {
|
|
581
547
|
const ctx = createContext({ userAddress: "0xuser" });
|
|
582
|
-
await expect(subgraphWithoutPermService.
|
|
548
|
+
await expect(subgraphWithoutPermService.mutationResolvers.setName(null, { docId: "doc-123", input: { name: "New" } }, ctx)).rejects.toThrow("Forbidden");
|
|
583
549
|
});
|
|
584
550
|
it("should allow access with global roles even without permission service", async () => {
|
|
585
551
|
const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
|
|
586
|
-
const queryResolver = subgraphWithoutPermService.
|
|
587
|
-
?.TestModel_document;
|
|
552
|
+
const queryResolver = subgraphWithoutPermService.queryResolvers.document;
|
|
588
553
|
const result = await queryResolver(null, { identifier: "doc-123" }, ctx);
|
|
589
554
|
expect(result).toBeDefined();
|
|
590
555
|
});
|
|
591
556
|
it("should skip operation restriction check when no permission service", async () => {
|
|
592
557
|
const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
|
|
593
|
-
const result = await subgraphWithoutPermService.
|
|
558
|
+
const result = await subgraphWithoutPermService.mutationResolvers.setName(null, { docId: "doc-123", input: { name: "New" } }, ctx);
|
|
594
559
|
expect(result).toMatchObject({
|
|
595
560
|
id: "doc-123",
|
|
596
561
|
revisionsList: expect.arrayContaining([
|
|
@@ -605,8 +570,7 @@ describe("DocumentModelSubgraph Permission Checks", () => {
|
|
|
605
570
|
user: { address: "" },
|
|
606
571
|
isAdmin: vi.fn().mockReturnValue(false),
|
|
607
572
|
};
|
|
608
|
-
const queryResolver = subgraph.
|
|
609
|
-
?.TestModel_document;
|
|
573
|
+
const queryResolver = subgraph.queryResolvers.document;
|
|
610
574
|
await expect(queryResolver(null, { identifier: "doc-123" }, ctx)).rejects.toThrow("Forbidden");
|
|
611
575
|
expect(ctx.isAdmin).toHaveBeenCalledWith("");
|
|
612
576
|
});
|
|
@@ -615,7 +579,7 @@ describe("DocumentModelSubgraph Permission Checks", () => {
|
|
|
615
579
|
vi.mocked(mockDocumentPermissionService.isOperationRestricted).mockResolvedValue(true);
|
|
616
580
|
vi.mocked(mockDocumentPermissionService.canExecuteOperation).mockResolvedValue(true);
|
|
617
581
|
const ctx = createContext({ userAddress: "0xuser" });
|
|
618
|
-
await subgraph.
|
|
582
|
+
await subgraph.mutationResolvers.setValue(null, { docId: "doc-123", input: { value: 42 } }, ctx);
|
|
619
583
|
expect(mockDocumentPermissionService.isOperationRestricted).toHaveBeenCalledWith("doc-123", "SET_VALUE");
|
|
620
584
|
});
|
|
621
585
|
});
|