@memberjunction/server 5.35.0 → 5.37.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListOperationsResolver.js","sourceRoot":"","sources":["../../src/resolvers/ListOperationsResolver.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/server",
3
- "version": "5.35.0",
3
+ "version": "5.37.0",
4
4
  "description": "MemberJunction: This project provides API access via GraphQL to the common data store.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./src/index.ts",
@@ -27,73 +27,75 @@
27
27
  "@as-integrations/express5": "^1.0.0",
28
28
  "@graphql-tools/schema": "latest",
29
29
  "@graphql-tools/utils": "^11.0.0",
30
- "@memberjunction/actions": "5.35.0",
31
- "@memberjunction/actions-apollo": "5.35.0",
32
- "@memberjunction/actions-base": "5.35.0",
33
- "@memberjunction/actions-bizapps-accounting": "5.35.0",
34
- "@memberjunction/actions-bizapps-crm": "5.35.0",
35
- "@memberjunction/actions-bizapps-formbuilders": "5.35.0",
36
- "@memberjunction/actions-bizapps-lms": "5.35.0",
37
- "@memberjunction/actions-bizapps-social": "5.35.0",
38
- "@memberjunction/ai": "5.35.0",
39
- "@memberjunction/ai-agent-manager": "5.35.0",
40
- "@memberjunction/ai-agent-manager-actions": "5.35.0",
41
- "@memberjunction/ai-agents": "5.35.0",
42
- "@memberjunction/ai-core-plus": "5.35.0",
43
- "@memberjunction/ai-mcp-client": "5.35.0",
44
- "@memberjunction/ai-prompts": "5.35.0",
45
- "@memberjunction/ai-provider-bundle": "5.35.0",
46
- "@memberjunction/ai-vector-sync": "5.35.0",
47
- "@memberjunction/ai-vectordb": "5.35.0",
48
- "@memberjunction/ai-vectors-pinecone": "5.35.0",
49
- "@memberjunction/aiengine": "5.35.0",
50
- "@memberjunction/api-keys": "5.35.0",
51
- "@memberjunction/auth-providers": "5.35.0",
52
- "@memberjunction/codegen-lib": "5.35.0",
53
- "@memberjunction/communication-ms-graph": "5.35.0",
54
- "@memberjunction/communication-sendgrid": "5.35.0",
55
- "@memberjunction/communication-types": "5.35.0",
56
- "@memberjunction/component-registry-client-sdk": "5.35.0",
57
- "@memberjunction/computer-use-engine": "5.35.0",
58
- "@memberjunction/config": "5.35.0",
59
- "@memberjunction/core": "5.35.0",
60
- "@memberjunction/core-actions": "5.35.0",
61
- "@memberjunction/core-entities": "5.35.0",
62
- "@memberjunction/core-entities-server": "5.35.0",
63
- "@memberjunction/data-context": "5.35.0",
64
- "@memberjunction/data-context-server": "5.35.0",
65
- "@memberjunction/doc-utils": "5.35.0",
66
- "@memberjunction/encryption": "5.35.0",
67
- "@memberjunction/entity-communications-base": "5.35.0",
68
- "@memberjunction/entity-communications-server": "5.35.0",
69
- "@memberjunction/external-change-detection": "5.35.0",
70
- "@memberjunction/generic-database-provider": "5.35.0",
71
- "@memberjunction/global": "5.35.0",
72
- "@memberjunction/graphql-dataprovider": "5.35.0",
73
- "@memberjunction/integration-engine": "5.35.0",
74
- "@memberjunction/integration-schema-builder": "5.35.0",
75
- "@memberjunction/interactive-component-types": "5.35.0",
76
- "@memberjunction/notifications": "5.35.0",
77
- "@memberjunction/postgresql-dataprovider": "5.35.0",
78
- "@memberjunction/queue": "5.35.0",
79
- "@memberjunction/redis-provider": "5.35.0",
80
- "@memberjunction/scheduling-actions": "5.35.0",
81
- "@memberjunction/scheduling-base-types": "5.35.0",
82
- "@memberjunction/scheduling-engine": "5.35.0",
83
- "@memberjunction/scheduling-engine-base": "5.35.0",
84
- "@memberjunction/schema-engine": "5.35.0",
85
- "@memberjunction/search-engine": "5.35.0",
86
- "@memberjunction/server-extensions-core": "5.35.0",
87
- "@memberjunction/skip-types": "5.35.0",
88
- "@memberjunction/sql-dialect": "5.35.0",
89
- "@memberjunction/sqlserver-dataprovider": "5.35.0",
90
- "@memberjunction/storage": "5.35.0",
91
- "@memberjunction/tag-engine": "5.35.0",
92
- "@memberjunction/tag-engine-base": "5.35.0",
93
- "@memberjunction/templates": "5.35.0",
94
- "@memberjunction/testing-engine": "5.35.0",
95
- "@memberjunction/testing-engine-base": "5.35.0",
96
- "@memberjunction/version-history": "5.35.0",
30
+ "@memberjunction/actions": "5.37.0",
31
+ "@memberjunction/actions-apollo": "5.37.0",
32
+ "@memberjunction/actions-base": "5.37.0",
33
+ "@memberjunction/actions-bizapps-accounting": "5.37.0",
34
+ "@memberjunction/actions-bizapps-crm": "5.37.0",
35
+ "@memberjunction/actions-bizapps-formbuilders": "5.37.0",
36
+ "@memberjunction/actions-bizapps-lms": "5.37.0",
37
+ "@memberjunction/actions-bizapps-social": "5.37.0",
38
+ "@memberjunction/ai": "5.37.0",
39
+ "@memberjunction/ai-agent-manager": "5.37.0",
40
+ "@memberjunction/ai-agent-manager-actions": "5.37.0",
41
+ "@memberjunction/ai-agents": "5.37.0",
42
+ "@memberjunction/ai-core-plus": "5.37.0",
43
+ "@memberjunction/ai-mcp-client": "5.37.0",
44
+ "@memberjunction/ai-prompts": "5.37.0",
45
+ "@memberjunction/ai-provider-bundle": "5.37.0",
46
+ "@memberjunction/ai-vector-sync": "5.37.0",
47
+ "@memberjunction/ai-vectordb": "5.37.0",
48
+ "@memberjunction/ai-vectors-pinecone": "5.37.0",
49
+ "@memberjunction/aiengine": "5.37.0",
50
+ "@memberjunction/api-keys": "5.37.0",
51
+ "@memberjunction/auth-providers": "5.37.0",
52
+ "@memberjunction/codegen-lib": "5.37.0",
53
+ "@memberjunction/communication-ms-graph": "5.37.0",
54
+ "@memberjunction/communication-sendgrid": "5.37.0",
55
+ "@memberjunction/communication-types": "5.37.0",
56
+ "@memberjunction/component-registry-client-sdk": "5.37.0",
57
+ "@memberjunction/computer-use-engine": "5.37.0",
58
+ "@memberjunction/config": "5.37.0",
59
+ "@memberjunction/core": "5.37.0",
60
+ "@memberjunction/core-actions": "5.37.0",
61
+ "@memberjunction/core-entities": "5.37.0",
62
+ "@memberjunction/core-entities-server": "5.37.0",
63
+ "@memberjunction/data-context": "5.37.0",
64
+ "@memberjunction/data-context-server": "5.37.0",
65
+ "@memberjunction/doc-utils": "5.37.0",
66
+ "@memberjunction/encryption": "5.37.0",
67
+ "@memberjunction/entity-communications-base": "5.37.0",
68
+ "@memberjunction/entity-communications-server": "5.37.0",
69
+ "@memberjunction/external-change-detection": "5.37.0",
70
+ "@memberjunction/generic-database-provider": "5.37.0",
71
+ "@memberjunction/global": "5.37.0",
72
+ "@memberjunction/graphql-dataprovider": "5.37.0",
73
+ "@memberjunction/integration-engine": "5.37.0",
74
+ "@memberjunction/integration-schema-builder": "5.37.0",
75
+ "@memberjunction/interactive-component-types": "5.37.0",
76
+ "@memberjunction/lists": "5.37.0",
77
+ "@memberjunction/lists-base": "5.37.0",
78
+ "@memberjunction/notifications": "5.37.0",
79
+ "@memberjunction/postgresql-dataprovider": "5.37.0",
80
+ "@memberjunction/queue": "5.37.0",
81
+ "@memberjunction/redis-provider": "5.37.0",
82
+ "@memberjunction/scheduling-actions": "5.37.0",
83
+ "@memberjunction/scheduling-base-types": "5.37.0",
84
+ "@memberjunction/scheduling-engine": "5.37.0",
85
+ "@memberjunction/scheduling-engine-base": "5.37.0",
86
+ "@memberjunction/schema-engine": "5.37.0",
87
+ "@memberjunction/search-engine": "5.37.0",
88
+ "@memberjunction/server-extensions-core": "5.37.0",
89
+ "@memberjunction/skip-types": "5.37.0",
90
+ "@memberjunction/sql-dialect": "5.37.0",
91
+ "@memberjunction/sqlserver-dataprovider": "5.37.0",
92
+ "@memberjunction/storage": "5.37.0",
93
+ "@memberjunction/tag-engine": "5.37.0",
94
+ "@memberjunction/tag-engine-base": "5.37.0",
95
+ "@memberjunction/templates": "5.37.0",
96
+ "@memberjunction/testing-engine": "5.37.0",
97
+ "@memberjunction/testing-engine-base": "5.37.0",
98
+ "@memberjunction/version-history": "5.37.0",
97
99
  "@types/compression": "^1.8.1",
98
100
  "@types/cors": "^2.8.19",
99
101
  "@types/jsonwebtoken": "9.0.10",
@@ -0,0 +1,269 @@
1
+ /**
2
+ * Failing-test suite for known AdhocQueryResolver bugs.
3
+ *
4
+ * Two bugs are encoded here, both observed in production
5
+ * (Skip → ExecuteAdhocQuery → SQL Server rejection):
6
+ *
7
+ * Bug #2 — `{{query:"..."}}` composition macros pass through to SQL
8
+ * Server as literal text because AdhocQueryResolver never
9
+ * calls into the QueryCompositionEngine / RenderPipeline.
10
+ *
11
+ * Bug #3 — `SELECT … GROUP BY … ORDER BY …` (no top-level TOP) gets
12
+ * wrapped as `SELECT TOP N * FROM (<inner>) AS _adhoc_capped`.
13
+ * SQL Server rejects: "The ORDER BY clause is invalid in
14
+ * views, inline functions, derived tables, subqueries, and
15
+ * CTEs, unless TOP, OFFSET or FOR XML is also specified."
16
+ *
17
+ * Instantiating the resolver and running it through MSSQL requires a
18
+ * very heavy mock graph (type-graphql decorators, `mssql`, AppContext,
19
+ * config, auth, providers). To keep these tests fast and deterministic,
20
+ * we use a hybrid strategy:
21
+ *
22
+ * 1. **Source-shape contract tests** — read the resolver source file
23
+ * and assert structural properties that *must* be true after the
24
+ * fix (e.g., RenderPipeline is imported and called; the manual
25
+ * `SELECT TOP N * FROM (...)` wrap is gone).
26
+ *
27
+ * 2. **Pipeline behavior tests** — exercise RenderPipeline.Run with
28
+ * the exact Skip inputs that hit this resolver, asserting on the
29
+ * shape of the output. Once the resolver routes through the
30
+ * pipeline (the fix), these tests become end-to-end coverage.
31
+ *
32
+ * **All tests are expected to FAIL against the current implementation.**
33
+ */
34
+ import { describe, it, expect, vi, afterEach } from 'vitest';
35
+ import { readFileSync } from 'fs';
36
+ import { resolve } from 'path';
37
+ import { Metadata } from '@memberjunction/core';
38
+ import { RenderPipeline } from '@memberjunction/generic-database-provider';
39
+
40
+ const ADHOC_RESOLVER_PATH = resolve(__dirname, '../resolvers/AdhocQueryResolver.ts');
41
+
42
+ function readResolverSource(): string {
43
+ return readFileSync(ADHOC_RESOLVER_PATH, 'utf8');
44
+ }
45
+
46
+ afterEach(() => {
47
+ vi.restoreAllMocks();
48
+ });
49
+
50
+ function stubMetadata(): void {
51
+ vi.spyOn(Metadata, 'Provider', 'get').mockReturnValue({
52
+ Queries: [],
53
+ QueryDependencies: [],
54
+ } as ReturnType<typeof Metadata.Provider>);
55
+ }
56
+
57
+ // ════════════════════════════════════════════════════════════════════
58
+ // Source-shape contract tests
59
+ // ════════════════════════════════════════════════════════════════════
60
+
61
+ describe('AdhocQueryResolver source-shape contract', () => {
62
+
63
+ it('Bug #2: AdhocQueryResolver must import RenderPipeline (currently does not)', () => {
64
+ const src = readResolverSource();
65
+ // After the fix, the resolver should delegate composition + Nunjucks +
66
+ // MaxRows handling to the canonical pipeline rather than re-implementing
67
+ // a partial subset.
68
+ const importsRenderPipeline =
69
+ /import\s*\{[^}]*\bRenderPipeline\b[^}]*\}\s*from\s*['"]@memberjunction\/generic-database-provider['"]/.test(src);
70
+ expect(importsRenderPipeline).toBe(true);
71
+ });
72
+
73
+ it('Bug #2: AdhocQueryResolver must call RenderPipeline.Run() somewhere (currently does not)', () => {
74
+ const src = readResolverSource();
75
+ const callsRenderPipelineRun = /\bRenderPipeline\.Run\s*\(/.test(src);
76
+ expect(callsRenderPipelineRun).toBe(true);
77
+ });
78
+
79
+ it('Bug #3: AdhocQueryResolver must NOT contain the manual `SELECT TOP N * FROM (...)` wrap', () => {
80
+ const src = readResolverSource();
81
+ // The current implementation builds executable SQL with:
82
+ // `SELECT TOP ${startRow + maxRows} * FROM (\n${input.SQL}\n) AS _adhoc_capped`
83
+ // After the fix, MaxRows handling should be routed through the pipeline,
84
+ // not implemented inline with a derived-table wrap.
85
+ const containsManualWrap = /SELECT\s+TOP\s+\$\{[^}]+\}\s+\*\s+FROM\s*\(/.test(src);
86
+ expect(containsManualWrap).toBe(false);
87
+ });
88
+
89
+ it('Bug #3: AdhocQueryResolver must NOT rely on a `^\\s*WITH\\b` guard to skip the wrap', () => {
90
+ const src = readResolverSource();
91
+ // The presence of this regex guard is a tell that there's still a
92
+ // manual wrap; after the fix, no special-casing of `WITH` is needed
93
+ // because the pipeline handles it generically.
94
+ const hasWithGuard = /\/\^\\s\*WITH\\b\/i\.test\(/.test(src);
95
+ expect(hasWithGuard).toBe(false);
96
+ });
97
+ });
98
+
99
+ // ════════════════════════════════════════════════════════════════════
100
+ // Bug #2 — composition macros must be resolved before execution
101
+ // ════════════════════════════════════════════════════════════════════
102
+
103
+ describe('Bug #2: composition macros in ad-hoc SQL', () => {
104
+
105
+ it('RenderPipeline must strip {{query:"..."}} when ContextUser is provided', () => {
106
+ // The pipeline already supports this. The bug is that AdhocQueryResolver
107
+ // doesn't call into it. This test pins the pipeline contract that the
108
+ // resolver fix will rely on.
109
+ stubMetadata();
110
+ const sql = `SELECT YEAR(base.CreatedAt) AS JoinYear, COUNT(*) AS MemberCount
111
+ FROM {{query:"Demos/Active Users"}} base
112
+ GROUP BY YEAR(base.CreatedAt)
113
+ ORDER BY JoinYear DESC`;
114
+
115
+ // Whether or not a real query metadata entry exists, the pipeline
116
+ // should at least detect the composition tokens and report them.
117
+ // We do not require the pipeline to *succeed* without a real dep —
118
+ // we require the resolver to AT LEAST attempt resolution rather than
119
+ // shipping `{{query:` verbatim to SQL Server.
120
+ const hasTokens = RenderPipeline.HasCompositionTokens(sql);
121
+ expect(hasTokens).toBe(true);
122
+ });
123
+
124
+ it('the literal text "{{query:" must not appear in the resolver-executed SQL', () => {
125
+ // This is the end-to-end invariant. After the fix, regardless of
126
+ // success/failure, the resolver should never hand a string containing
127
+ // "{{query:" to SQL Server.
128
+ //
129
+ // We encode this as a contract on the resolver source: it must call
130
+ // into RenderPipeline whenever composition tokens are present, OR
131
+ // reject early with a clear error. Either way, the literal text
132
+ // "{{query:" must not reach `request.query(...)`.
133
+ const src = readResolverSource();
134
+
135
+ // Acceptable post-fix shape: source mentions RenderPipeline.Run and
136
+ // passes input.SQL through it. We've already asserted the import +
137
+ // call above; here we additionally require that input.SQL flows
138
+ // through RenderPipeline.Run rather than directly to request.query.
139
+ //
140
+ // The current code contains `request.query(executableSql)` where
141
+ // `executableSql` is derived from input.SQL via a string concat —
142
+ // bypassing the pipeline entirely.
143
+ const directlyExecutesInputSQL = /request\.query\s*\(\s*input\.SQL\s*\)/.test(src);
144
+ expect(directlyExecutesInputSQL).toBe(false);
145
+
146
+ // And — the executable string must be derived from a pipeline result,
147
+ // not from an inline template literal that just concatenates input.SQL.
148
+ // Heuristic: the file should reference `FinalSQL` (the pipeline's
149
+ // output field) somewhere — this is what gets sent to the DB.
150
+ const referencesFinalSQL = /\bFinalSQL\b/.test(src);
151
+ expect(referencesFinalSQL).toBe(true);
152
+ });
153
+ });
154
+
155
+ // ════════════════════════════════════════════════════════════════════
156
+ // Bug #3 — GROUP BY + ORDER BY (no top-level TOP) must not be wrapped
157
+ // into an ORDER-BY-bearing derived table without TOP/OFFSET
158
+ // ════════════════════════════════════════════════════════════════════
159
+
160
+ describe('Bug #3: GROUP BY + ORDER BY (no top-level TOP) under MaxRows', () => {
161
+
162
+ /**
163
+ * Helper: returns true if `sql` contains the canonical AdhocQuery wrap
164
+ * with an inner ORDER BY that has no inner TOP/OFFSET — SQL Server
165
+ * rejects this shape.
166
+ */
167
+ function hasBrokenAdhocOrderByWrap(sql: string): boolean {
168
+ // Outer wrap form used by AdhocQueryResolver: `... AS _adhoc_capped`
169
+ const m = sql.match(/SELECT\s+TOP\s+\d+\s+\*\s+FROM\s*\(([\s\S]*?)\)\s*AS\s+_adhoc_capped/i);
170
+ if (!m) return false;
171
+ const inner = m[1];
172
+ if (!/ORDER\s+BY\b/i.test(inner)) return false;
173
+ if (/\bTOP\s+\d+\b/i.test(inner)) return false;
174
+ if (/\bOFFSET\s+\d+\s+ROWS?\b/i.test(inner)) return false;
175
+ if (/\bFOR\s+XML\b/i.test(inner)) return false;
176
+ return true;
177
+ }
178
+
179
+ it('RenderPipeline output for the Skip GROUP-BY+ORDER-BY shape must not be the broken adhoc wrap', () => {
180
+ // After the resolver-fix, this exact SQL flows through RenderPipeline.Run.
181
+ // So we test the pipeline output for the post-fix shape.
182
+ stubMetadata();
183
+ const sql = `SELECT YEAR(p.JoinDate) AS JoinYear, COUNT(p.ID) AS PersonCount
184
+ FROM dbo.vwPeople p
185
+ WHERE p.JoinDate IS NOT NULL
186
+ GROUP BY YEAR(p.JoinDate)
187
+ ORDER BY JoinYear DESC`;
188
+
189
+ const result = RenderPipeline.Run(sql, {
190
+ Platform: 'sqlserver',
191
+ MaxRows: 100,
192
+ });
193
+
194
+ expect(hasBrokenAdhocOrderByWrap(result.FinalSQL)).toBe(false);
195
+
196
+ // Acceptable post-fix shapes:
197
+ // - `SELECT TOP 100 ... ORDER BY JoinYear DESC` (TOP at outer scope, same as ORDER BY)
198
+ // - ORDER BY ... OFFSET 0 ROWS FETCH NEXT 100 ROWS ONLY
199
+ // The AST-sqlify round-trip wraps identifiers in [] on SQL Server,
200
+ // so the ORDER BY column may be emitted as `JoinYear` or `[JoinYear]`.
201
+ const outerTopOrderBy =
202
+ /SELECT\s+TOP\s+100\b[\s\S]+ORDER\s+BY\s+\[?JoinYear\]?\s+DESC/i.test(result.FinalSQL);
203
+ const offsetFetch =
204
+ /ORDER\s+BY\s+\[?JoinYear\]?\s+DESC[\s\S]+OFFSET\s+0\s+ROWS\s+FETCH\s+NEXT\s+100\s+ROWS\s+ONLY/i.test(result.FinalSQL);
205
+ expect(outerTopOrderBy || offsetFetch).toBe(true);
206
+ });
207
+
208
+ it('GROUP BY + ORDER BY without TOP under Paging should already work (parity baseline)', () => {
209
+ // Paging path already handles this correctly via OFFSET/FETCH —
210
+ // this test is a baseline showing what "correct" looks like.
211
+ stubMetadata();
212
+ const sql = `SELECT YEAR(p.JoinDate) AS JoinYear, COUNT(p.ID) AS PersonCount
213
+ FROM dbo.vwPeople p
214
+ WHERE p.JoinDate IS NOT NULL
215
+ GROUP BY YEAR(p.JoinDate)
216
+ ORDER BY JoinYear DESC`;
217
+
218
+ const result = RenderPipeline.Run(sql, {
219
+ Platform: 'sqlserver',
220
+ Paging: { StartRow: 0, MaxRows: 100 },
221
+ });
222
+
223
+ expect(result.FinalSQL).toMatch(/ORDER\s+BY\s+JoinYear\s+DESC[\s\S]+OFFSET\s+0\s+ROWS\s+FETCH\s+NEXT\s+100\s+ROWS\s+ONLY/i);
224
+ });
225
+ });
226
+
227
+ // ════════════════════════════════════════════════════════════════════
228
+ // Bug #3b — CTE-headed SQL via AdhocQuery is currently silently bypassed
229
+ // ════════════════════════════════════════════════════════════════════
230
+
231
+ describe('Bug #3b: CTE-headed SQL via AdhocQuery currently has no row cap at all', () => {
232
+
233
+ it('AdhocQueryResolver source: the `^\\s*WITH\\b` guard silently skips the row cap, which is also a bug', () => {
234
+ // The current resolver's `canWrap` predicate excludes CTE-headed SQL
235
+ // from the wrap by detecting `^\s*WITH\b` and falling back to "no
236
+ // wrap, slice in memory after the full result returns". This means a
237
+ // user requesting `MaxRows: 100` against a CTE that returns 10M rows
238
+ // gets a 10M-row scan from SQL Server and then a 100-row slice in
239
+ // JavaScript — a hidden performance bug and a memory hazard.
240
+ //
241
+ // After the fix, MaxRows for CTEs must be enforced AT THE DATABASE
242
+ // (via OFFSET/FETCH appended to the outer SELECT inside the WITH),
243
+ // not via post-execution slicing.
244
+ const src = readResolverSource();
245
+ const hasWithGuard = /\/\^\\s\*WITH\\b\/i\.test\(/.test(src);
246
+ expect(hasWithGuard).toBe(false);
247
+ });
248
+
249
+ it('a CTE with ORDER BY under MaxRows should get an OFFSET/FETCH at the outer SELECT (no in-memory slicing)', () => {
250
+ stubMetadata();
251
+ const sql = `WITH cte AS (
252
+ SELECT ID, Name FROM dbo.Users
253
+ )
254
+ SELECT * FROM cte ORDER BY Name`;
255
+
256
+ const result = RenderPipeline.Run(sql, {
257
+ Platform: 'sqlserver',
258
+ MaxRows: 100,
259
+ });
260
+
261
+ // After the fix the row cap should be expressed in the SQL itself,
262
+ // so SQL Server can short-circuit. Either OFFSET/FETCH at the
263
+ // outer scope OR a TOP injected onto the outermost SELECT is
264
+ // acceptable.
265
+ const outerTop = /\)\s*SELECT\s+TOP\s+100\b/i.test(result.FinalSQL);
266
+ const offsetFetch = /OFFSET\s+0\s+ROWS\s+FETCH\s+NEXT\s+100\s+ROWS\s+ONLY/i.test(result.FinalSQL);
267
+ expect(outerTop || offsetFetch).toBe(true);
268
+ });
269
+ });
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Tests for the pure boundary converters in ListOperationsResolver.
3
+ *
4
+ * The resolver itself depends on type-graphql + AppContext, which would
5
+ * require a full test harness. The converters are standalone functions
6
+ * doing the GraphQL ↔ @memberjunction/lists translation — they have no
7
+ * side effects and are the most likely site of drift if either side's
8
+ * shape changes, so they're the right test target.
9
+ */
10
+
11
+ // type-graphql decorators (`@Field`, `@InputType`, etc.) call
12
+ // `Reflect.getMetadata`, which only exists when this polyfill is loaded
13
+ // first. Vitest doesn't bring it in automatically — `import` ordering
14
+ // matters: this line MUST come before any import that pulls in the
15
+ // resolver file.
16
+ import 'reflect-metadata';
17
+
18
+ import { describe, expect, it } from 'vitest';
19
+
20
+ import type { ApplyResult, ListDelta } from '@memberjunction/lists-base';
21
+
22
+ import {
23
+ ApplyDeltaInput,
24
+ ListSourceInput,
25
+ fromCoreApplyResult,
26
+ fromCoreDelta,
27
+ fromCoreWarning,
28
+ rebuildDeltaFromInput,
29
+ toCoreSource,
30
+ } from '../resolvers/ListOperationsResolver.js';
31
+
32
+ describe('ListOperationsResolver — boundary converters', () => {
33
+ describe('toCoreSource', () => {
34
+ it('maps a list-kind input to a core ListSource', () => {
35
+ const input = Object.assign(new ListSourceInput(), { Kind: 'list', ListID: 'list-1' });
36
+ const result = toCoreSource(input);
37
+ expect(result).toEqual({ kind: 'list', listId: 'list-1' });
38
+ });
39
+
40
+ it('maps a view-kind input to a core ListSource', () => {
41
+ const input = Object.assign(new ListSourceInput(), { Kind: 'view', ViewID: 'view-1' });
42
+ expect(toCoreSource(input)).toEqual({ kind: 'view', viewId: 'view-1' });
43
+ });
44
+
45
+ it('maps an adhoc-kind input to a core ListSource', () => {
46
+ const input = Object.assign(new ListSourceInput(), {
47
+ Kind: 'adhoc',
48
+ EntityName: 'Contacts',
49
+ ExtraFilter: "Status='Active'",
50
+ });
51
+ expect(toCoreSource(input)).toEqual({
52
+ kind: 'adhoc',
53
+ entityName: 'Contacts',
54
+ extraFilter: "Status='Active'",
55
+ });
56
+ });
57
+
58
+ it('throws when list-kind input has no ListID', () => {
59
+ const input = Object.assign(new ListSourceInput(), { Kind: 'list' });
60
+ expect(() => toCoreSource(input)).toThrow(/ListID is required/);
61
+ });
62
+
63
+ it('throws when view-kind input has no ViewID', () => {
64
+ const input = Object.assign(new ListSourceInput(), { Kind: 'view' });
65
+ expect(() => toCoreSource(input)).toThrow(/ViewID is required/);
66
+ });
67
+
68
+ it('throws when adhoc-kind input lacks EntityName or ExtraFilter', () => {
69
+ const input = Object.assign(new ListSourceInput(), { Kind: 'adhoc', EntityName: 'X' });
70
+ expect(() => toCoreSource(input)).toThrow(/EntityName and ExtraFilter/);
71
+ });
72
+
73
+ it('throws on an unknown discriminator', () => {
74
+ const input = Object.assign(new ListSourceInput(), { Kind: 'mystery' as never });
75
+ expect(() => toCoreSource(input)).toThrow(/Unknown ListSourceInput\.Kind/);
76
+ });
77
+ });
78
+
79
+ describe('fromCoreDelta', () => {
80
+ it('mirrors all fields and stringifies warning details', () => {
81
+ const delta: ListDelta = {
82
+ TargetListId: 'list-1',
83
+ EntityName: 'Contacts',
84
+ ToAdd: ['a', 'b'],
85
+ ToRemove: ['c'],
86
+ Unchanged: ['d', 'e'],
87
+ Counts: { Add: 2, Remove: 1, Unchanged: 2, SourceTotal: 4, TargetTotal: 3 },
88
+ Warnings: [
89
+ { Code: 'WILL_REMOVE_RECORDS', Message: '1 record will be removed', Details: { Count: 1 } },
90
+ ],
91
+ DeltaToken: 'abc.def',
92
+ };
93
+ const output = fromCoreDelta(delta);
94
+ expect(output).toMatchObject({
95
+ TargetListId: 'list-1',
96
+ EntityName: 'Contacts',
97
+ ToAdd: ['a', 'b'],
98
+ ToRemove: ['c'],
99
+ Unchanged: ['d', 'e'],
100
+ DeltaToken: 'abc.def',
101
+ });
102
+ expect(output.Counts).toEqual(delta.Counts);
103
+ expect(output.Warnings[0]).toMatchObject({
104
+ Code: 'WILL_REMOVE_RECORDS',
105
+ Message: '1 record will be removed',
106
+ });
107
+ const parsed = JSON.parse(output.Warnings[0].DetailsJSON!);
108
+ expect(parsed).toEqual({ Count: 1 });
109
+ });
110
+ });
111
+
112
+ describe('fromCoreWarning', () => {
113
+ it('leaves DetailsJSON undefined when no details supplied', () => {
114
+ const output = fromCoreWarning({ Code: 'EMPTY_SOURCE', Message: 'No records' });
115
+ expect(output.DetailsJSON).toBeUndefined();
116
+ });
117
+ });
118
+
119
+ describe('fromCoreApplyResult', () => {
120
+ it('flattens Counts into AddedCount / RemovedCount / FailedCount', () => {
121
+ const result: ApplyResult = {
122
+ Success: true,
123
+ ResultCode: 'SUCCESS',
124
+ Message: 'OK',
125
+ TargetListId: 'list-1',
126
+ CreatedListId: 'list-1',
127
+ Counts: { Added: 5, Removed: 2, Failed: 0 },
128
+ };
129
+ const output = fromCoreApplyResult(result);
130
+ expect(output).toMatchObject({
131
+ Success: true,
132
+ ResultCode: 'SUCCESS',
133
+ AddedCount: 5,
134
+ RemovedCount: 2,
135
+ FailedCount: 0,
136
+ CreatedListId: 'list-1',
137
+ TargetListId: 'list-1',
138
+ });
139
+ });
140
+
141
+ it('preserves Errors array when present', () => {
142
+ const result: ApplyResult = {
143
+ Success: false,
144
+ ResultCode: 'PARTIAL_SUCCESS',
145
+ Message: 'partial',
146
+ Errors: ['failed record a'],
147
+ };
148
+ expect(fromCoreApplyResult(result).Errors).toEqual(['failed record a']);
149
+ });
150
+ });
151
+
152
+ describe('rebuildDeltaFromInput', () => {
153
+ it('reconstructs a core ListDelta from a flat ApplyDeltaInput', () => {
154
+ const input = Object.assign(new ApplyDeltaInput(), {
155
+ TargetListId: 'list-1',
156
+ EntityName: 'Contacts',
157
+ ToAdd: ['a'],
158
+ ToRemove: ['b'],
159
+ Unchanged: ['c'],
160
+ AddCount: 1,
161
+ RemoveCount: 1,
162
+ UnchangedCount: 1,
163
+ SourceTotal: 2,
164
+ TargetTotal: 2,
165
+ DeltaToken: 'tok',
166
+ ConfirmDrops: true,
167
+ });
168
+ const out = rebuildDeltaFromInput(input);
169
+ expect(out).toMatchObject({
170
+ TargetListId: 'list-1',
171
+ EntityName: 'Contacts',
172
+ ToAdd: ['a'],
173
+ ToRemove: ['b'],
174
+ Unchanged: ['c'],
175
+ DeltaToken: 'tok',
176
+ });
177
+ expect(out.Counts).toEqual({ Add: 1, Remove: 1, Unchanged: 1, SourceTotal: 2, TargetTotal: 2 });
178
+ // Warnings are dropped on rebuild (they don't survive the wire round-trip in either direction)
179
+ expect(out.Warnings).toEqual([]);
180
+ });
181
+ });
182
+ });