@memberjunction/react-test-harness 6.2.0-edge.0 → 6.2.0-edge.2
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/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/assertion-helpers.d.ts +49 -0
- package/dist/lib/assertion-helpers.d.ts.map +1 -1
- package/dist/lib/assertion-helpers.js +85 -25
- package/dist/lib/assertion-helpers.js.map +1 -1
- package/dist/lib/browser-context.d.ts +22 -0
- package/dist/lib/browser-context.d.ts.map +1 -1
- package/dist/lib/browser-context.js +58 -18
- package/dist/lib/browser-context.js.map +1 -1
- package/dist/lib/component-runner.d.ts +192 -0
- package/dist/lib/component-runner.d.ts.map +1 -1
- package/dist/lib/component-runner.js +364 -49
- package/dist/lib/component-runner.js.map +1 -1
- package/dist/lib/linter-test-tool.d.ts +12 -2
- package/dist/lib/linter-test-tool.d.ts.map +1 -1
- package/dist/lib/linter-test-tool.js +39 -19
- package/dist/lib/linter-test-tool.js.map +1 -1
- package/dist/lib/test-harness.d.ts +50 -0
- package/dist/lib/test-harness.d.ts.map +1 -1
- package/dist/lib/test-harness.js +68 -16
- package/dist/lib/test-harness.js.map +1 -1
- package/package.json +15 -15
|
@@ -2,6 +2,175 @@ import { BrowserManager } from './browser-context.js';
|
|
|
2
2
|
import type { UserInfo } from '@memberjunction/core';
|
|
3
3
|
import { Violation, type LinterOptions } from '@memberjunction/react-linter';
|
|
4
4
|
import { ComponentSpec, SimpleAITools } from '@memberjunction/interactive-component-types';
|
|
5
|
+
/**
|
|
6
|
+
* Row ceilings applied to the data bridges the component under test calls through
|
|
7
|
+
* (`__mjRunView`, `__mjRunViews`, `__mjRunQuery`).
|
|
8
|
+
*
|
|
9
|
+
* A test run only needs enough rows to render and be looked at, so the harness does not
|
|
10
|
+
* honour an unbounded request. `MaxRows` is applied at the SQL level by the provider, so
|
|
11
|
+
* the surplus is never produced rather than fetched and discarded — which matters because
|
|
12
|
+
* a bridge result is serialized in Node, shipped over CDP and rehydrated in Chromium,
|
|
13
|
+
* leaving several resident copies of the same data.
|
|
14
|
+
*/
|
|
15
|
+
export interface DataCapOptions {
|
|
16
|
+
/** Ceiling for `RunView` / `RunViews`. @default 1000 */
|
|
17
|
+
runViewMaxRows?: number;
|
|
18
|
+
/** Ceiling for `RunQuery`. @default 1000 */
|
|
19
|
+
runQueryMaxRows?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* One data call made by the component under test, recorded by the harness bridges.
|
|
23
|
+
*
|
|
24
|
+
* Lets a caller tell apart failure modes that a screenshot alone cannot: a component
|
|
25
|
+
* showing no data because its query returned zero rows is an upstream data or parameter
|
|
26
|
+
* problem, while one showing no data after rows *were* returned is a render or binding
|
|
27
|
+
* bug.
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Machine-readable identity of what a data call resolved to.
|
|
31
|
+
*
|
|
32
|
+
* Field names mirror `ComponentSpec.dataRequirements` (`ComponentQueryDataRequirement.name`
|
|
33
|
+
* / `.categoryPath`, `ComponentEntityDataRequirement.name`) so a caller can correlate what
|
|
34
|
+
* a component declared against what it actually called, without parsing a display string.
|
|
35
|
+
*
|
|
36
|
+
* It mirrors that vocabulary rather than referencing the spec, because a record must be
|
|
37
|
+
* able to describe a call that appears nowhere in `dataRequirements`.
|
|
38
|
+
*/
|
|
39
|
+
export interface DataAccessIdentity {
|
|
40
|
+
/** Entity name — corresponds to `ComponentEntityDataRequirement.name`. */
|
|
41
|
+
entityName?: string;
|
|
42
|
+
/** Query name — corresponds to `ComponentQueryDataRequirement.name`. Not unique alone. */
|
|
43
|
+
queryName?: string;
|
|
44
|
+
/** Category path that disambiguates `queryName` — `ComponentQueryDataRequirement.categoryPath`. */
|
|
45
|
+
categoryPath?: string;
|
|
46
|
+
/** Present when the call named a query by ID, which takes precedence over name. */
|
|
47
|
+
queryId?: string;
|
|
48
|
+
/** Present when the call named a saved view by ID. */
|
|
49
|
+
viewId?: string;
|
|
50
|
+
/** Present when the call named a saved view by name. */
|
|
51
|
+
viewName?: string;
|
|
52
|
+
}
|
|
53
|
+
export interface DataAccessRecord {
|
|
54
|
+
kind: 'RunView' | 'RunViews' | 'RunQuery';
|
|
55
|
+
/**
|
|
56
|
+
* Human/LLM-readable rendering of {@link identity} — a category-qualified query path,
|
|
57
|
+
* or the view/entity a `RunView` resolved to. For display and prompts; use `identity`
|
|
58
|
+
* for matching.
|
|
59
|
+
*/
|
|
60
|
+
target: string;
|
|
61
|
+
/** Structured identity, for correlating against declared data requirements. */
|
|
62
|
+
identity: DataAccessIdentity;
|
|
63
|
+
/** Rows actually handed to the component. */
|
|
64
|
+
rowsReturned: number;
|
|
65
|
+
/**
|
|
66
|
+
* Rows the query would have produced without the harness ceiling, when the provider
|
|
67
|
+
* reports it (`TotalRowCount`). Equal to `rowsReturned` when nothing was capped.
|
|
68
|
+
*/
|
|
69
|
+
totalRowCount?: number;
|
|
70
|
+
/** True when the harness ceiling reduced the result below what the source held. */
|
|
71
|
+
capped: boolean;
|
|
72
|
+
/** Ceiling actually applied to this call. */
|
|
73
|
+
appliedMaxRows?: number;
|
|
74
|
+
/** `MaxRows` the component asked for, when it asked for one. */
|
|
75
|
+
requestedMaxRows?: number;
|
|
76
|
+
/** Wall-clock duration of the call, in milliseconds. */
|
|
77
|
+
durationMs: number;
|
|
78
|
+
/** Present when the call failed; the bridge returns an empty result set in that case. */
|
|
79
|
+
error?: string;
|
|
80
|
+
}
|
|
81
|
+
/** Default row ceiling for `RunView` / `RunViews`. @see DataCapOptions */
|
|
82
|
+
export declare const DEFAULT_RUN_VIEW_MAX_ROWS = 1000;
|
|
83
|
+
/** Default row ceiling for `RunQuery`. @see DataCapOptions */
|
|
84
|
+
export declare const DEFAULT_RUN_QUERY_MAX_ROWS = 1000;
|
|
85
|
+
/**
|
|
86
|
+
* Resolves the `MaxRows` to send for one data call.
|
|
87
|
+
*
|
|
88
|
+
* Clamps downward only: a component asking for 50 rows still gets 50, while one asking for
|
|
89
|
+
* nothing or for more than the ceiling gets the ceiling. A nonsensical request (zero,
|
|
90
|
+
* negative, non-numeric) is treated as absent.
|
|
91
|
+
*
|
|
92
|
+
* Returns the requested value alongside the applied one, so a capped call can report what
|
|
93
|
+
* the component wanted.
|
|
94
|
+
*
|
|
95
|
+
* Pure (no I/O) so it can be unit-tested without launching a browser.
|
|
96
|
+
*/
|
|
97
|
+
export declare function ResolveDataCapMaxRows(requested: number | undefined, ceiling: number): {
|
|
98
|
+
applied: number;
|
|
99
|
+
requested?: number;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Builds a {@link DataAccessRecord} from a completed provider call.
|
|
103
|
+
*
|
|
104
|
+
* `TotalRowCount` is the provider's count of rows the query would have produced without
|
|
105
|
+
* paging, making it the denominator for "capped at N of M". Providers that omit it, or
|
|
106
|
+
* leave it equal to `RowCount`, yield `capped: false` rather than a guess.
|
|
107
|
+
*
|
|
108
|
+
* Pure (no I/O) so it can be unit-tested without launching a browser.
|
|
109
|
+
*/
|
|
110
|
+
export declare function BuildDataAccessRecord(kind: DataAccessRecord['kind'], resolved: {
|
|
111
|
+
target: string;
|
|
112
|
+
identity: DataAccessIdentity;
|
|
113
|
+
}, result: {
|
|
114
|
+
Results?: any[];
|
|
115
|
+
TotalRowCount?: number;
|
|
116
|
+
} | undefined, maxRows: {
|
|
117
|
+
applied: number;
|
|
118
|
+
requested?: number;
|
|
119
|
+
}, durationMs: number): DataAccessRecord;
|
|
120
|
+
/** Debug-log suffix naming the cap, e.g. ` (capped at 1000 of 205802)`. Empty when uncapped. */
|
|
121
|
+
export declare function DescribeDataCap(record: DataAccessRecord): string;
|
|
122
|
+
/**
|
|
123
|
+
* Names the query a `RunQuery` call resolved to, as both a display string and a structured
|
|
124
|
+
* {@link DataAccessIdentity}.
|
|
125
|
+
*
|
|
126
|
+
* A query name is not unique on its own — name and category path identify a query together
|
|
127
|
+
* — so the display form is category-qualified.
|
|
128
|
+
*
|
|
129
|
+
* Precedence mirrors how `RunQuery` itself resolves: `QueryID` wins and `QueryName` is
|
|
130
|
+
* ignored when both are supplied, so the ID is reported as the identity and the supplied
|
|
131
|
+
* name is kept only as a label. `identity` retains every part the caller passed, so a
|
|
132
|
+
* correlation by name and path still works when an ID drove the resolution.
|
|
133
|
+
*/
|
|
134
|
+
export declare function ResolveQueryTarget(params: {
|
|
135
|
+
QueryID?: string;
|
|
136
|
+
QueryName?: string;
|
|
137
|
+
CategoryPath?: string;
|
|
138
|
+
CategoryID?: string;
|
|
139
|
+
}): {
|
|
140
|
+
target: string;
|
|
141
|
+
identity: DataAccessIdentity;
|
|
142
|
+
};
|
|
143
|
+
/** Display-only form of {@link ResolveQueryTarget}. */
|
|
144
|
+
export declare function DescribeQueryTarget(params: {
|
|
145
|
+
QueryID?: string;
|
|
146
|
+
QueryName?: string;
|
|
147
|
+
CategoryPath?: string;
|
|
148
|
+
CategoryID?: string;
|
|
149
|
+
}): string;
|
|
150
|
+
/**
|
|
151
|
+
* Names the view a `RunView` call resolved to, as both a display string and a structured
|
|
152
|
+
* {@link DataAccessIdentity}.
|
|
153
|
+
*
|
|
154
|
+
* Follows `RunViewParams`' own precedence — `ViewEntity` → `ViewID` → `ViewName` →
|
|
155
|
+
* `EntityName` — where each earlier field causes the later ones to be ignored. Reporting
|
|
156
|
+
* `EntityName` regardless would name something the call did not resolve by.
|
|
157
|
+
*/
|
|
158
|
+
export declare function ResolveViewTarget(params: {
|
|
159
|
+
ViewEntity?: unknown;
|
|
160
|
+
ViewID?: string;
|
|
161
|
+
ViewName?: string;
|
|
162
|
+
EntityName?: string;
|
|
163
|
+
}): {
|
|
164
|
+
target: string;
|
|
165
|
+
identity: DataAccessIdentity;
|
|
166
|
+
};
|
|
167
|
+
/** Display-only form of {@link ResolveViewTarget}. */
|
|
168
|
+
export declare function DescribeViewTarget(params: {
|
|
169
|
+
ViewEntity?: unknown;
|
|
170
|
+
ViewID?: string;
|
|
171
|
+
ViewName?: string;
|
|
172
|
+
EntityName?: string;
|
|
173
|
+
}): string;
|
|
5
174
|
/**
|
|
6
175
|
* Browser-execution options for {@link ComponentRunner}. Extends {@link LinterOptions}
|
|
7
176
|
* (which carries `componentSpec`, `contextUser`, `entityMetadata`, `utilities` —
|
|
@@ -94,6 +263,15 @@ export interface ComponentExecutionOptions extends LinterOptions {
|
|
|
94
263
|
* @default 15000
|
|
95
264
|
*/
|
|
96
265
|
dataIdleTimeoutMs?: number;
|
|
266
|
+
/**
|
|
267
|
+
* Row ceilings for the data bridges. Omitted fields fall back to
|
|
268
|
+
* {@link DEFAULT_RUN_VIEW_MAX_ROWS} /
|
|
269
|
+
* {@link DEFAULT_RUN_QUERY_MAX_ROWS} (1000).
|
|
270
|
+
*
|
|
271
|
+
* A component asking for fewer rows than the ceiling keeps its own smaller number;
|
|
272
|
+
* the ceiling only ever clamps downward.
|
|
273
|
+
*/
|
|
274
|
+
dataCaps?: DataCapOptions;
|
|
97
275
|
}
|
|
98
276
|
export interface ComponentExecutionResult {
|
|
99
277
|
success: boolean;
|
|
@@ -134,6 +312,13 @@ export interface ComponentExecutionResult {
|
|
|
134
312
|
* This field gives you the "did the code work?" answer directly.
|
|
135
313
|
*/
|
|
136
314
|
codeExecutionSuccess?: boolean;
|
|
315
|
+
/**
|
|
316
|
+
* Every data call the component made, in the order the bridges served them.
|
|
317
|
+
*
|
|
318
|
+
* Empty when the component fetched nothing — itself a useful signal, and distinct from
|
|
319
|
+
* a component whose calls all returned zero rows.
|
|
320
|
+
*/
|
|
321
|
+
dataAccess?: DataAccessRecord[];
|
|
137
322
|
}
|
|
138
323
|
/**
|
|
139
324
|
* ComponentRunner that uses the actual React runtime via Playwright UMD bundle
|
|
@@ -157,10 +342,17 @@ export declare class ComponentRunner {
|
|
|
157
342
|
/**
|
|
158
343
|
* Lint component code before execution
|
|
159
344
|
*/
|
|
345
|
+
LintComponent(componentCode: string, componentName: string, componentSpec?: any, isRootComponent?: boolean, contextUser?: UserInfo, options?: any): Promise<{
|
|
346
|
+
violations: Violation[];
|
|
347
|
+
hasErrors: boolean;
|
|
348
|
+
}>;
|
|
349
|
+
/** @deprecated Use {@link LintComponent}. */
|
|
160
350
|
lintComponent(componentCode: string, componentName: string, componentSpec?: any, isRootComponent?: boolean, contextUser?: UserInfo, options?: any): Promise<{
|
|
161
351
|
violations: Violation[];
|
|
162
352
|
hasErrors: boolean;
|
|
163
353
|
}>;
|
|
354
|
+
ExecuteComponent(options: ComponentExecutionOptions): Promise<ComponentExecutionResult>;
|
|
355
|
+
/** @deprecated Use {@link ExecuteComponent}. */
|
|
164
356
|
executeComponent(options: ComponentExecutionOptions): Promise<ComponentExecutionResult>;
|
|
165
357
|
/**
|
|
166
358
|
* Load core runtime libraries into the page (React, ReactDOM, Babel, MJRuntime)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-runner.d.ts","sourceRoot":"","sources":["../../src/lib/component-runner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMnD,OAAO,KAAK,EAAiC,QAAQ,EAAyD,MAAM,sBAAsB,CAAC;AAC3I,OAAO,EAAmB,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EACL,aAAa,EAEb,aAAa,EAOd,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"component-runner.d.ts","sourceRoot":"","sources":["../../src/lib/component-runner.ts"],"names":[],"mappings":"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"}
|