@memberjunction/react-test-harness 2.73.0 → 2.75.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.
- package/README.md +177 -39
- package/dist/cli/index.js +2 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/component-runner.d.ts +5 -6
- package/dist/lib/component-runner.d.ts.map +1 -1
- package/dist/lib/component-runner.js +56 -45
- package/dist/lib/component-runner.js.map +1 -1
- package/dist/lib/test-harness.d.ts +3 -12
- package/dist/lib/test-harness.d.ts.map +1 -1
- package/dist/lib/test-harness.js +21 -66
- package/dist/lib/test-harness.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
# @memberjunction/react-test-harness
|
|
2
2
|
|
|
3
|
-
A powerful test harness for React components using Playwright, designed specifically for MemberJunction's React runtime components.
|
|
3
|
+
A powerful test harness for React components using Playwright, designed specifically for MemberJunction's React runtime components with support for dynamic library configurations.
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
7
7
|
This package provides a comprehensive testing solution for React components, allowing you to:
|
|
8
8
|
- Load and execute React components in a real browser environment
|
|
9
|
+
- Dynamically configure external libraries for testing different scenarios
|
|
9
10
|
- Run assertions on rendered output
|
|
10
11
|
- Execute tests via CLI or programmatically
|
|
11
12
|
- Capture screenshots and console output
|
|
@@ -61,6 +62,126 @@ mj-react-test create-example
|
|
|
61
62
|
mj-react-test create-example --dir ./my-tests
|
|
62
63
|
```
|
|
63
64
|
|
|
65
|
+
## Dynamic Library Configuration (New)
|
|
66
|
+
|
|
67
|
+
The test harness now supports dynamic library configuration, allowing you to test components with different sets of external libraries.
|
|
68
|
+
|
|
69
|
+
### Basic Library Configuration
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
import { ReactTestHarness } from '@memberjunction/react-test-harness';
|
|
73
|
+
import type { LibraryConfiguration } from '@memberjunction/react-runtime';
|
|
74
|
+
|
|
75
|
+
const customLibraryConfig: LibraryConfiguration = {
|
|
76
|
+
libraries: [
|
|
77
|
+
// Runtime libraries (always needed)
|
|
78
|
+
{
|
|
79
|
+
id: 'react',
|
|
80
|
+
name: 'React',
|
|
81
|
+
category: 'runtime',
|
|
82
|
+
globalVariable: 'React',
|
|
83
|
+
version: '18',
|
|
84
|
+
cdnUrl: 'https://unpkg.com/react@18/umd/react.development.js',
|
|
85
|
+
isEnabled: true,
|
|
86
|
+
isCore: true,
|
|
87
|
+
isRuntimeOnly: true
|
|
88
|
+
},
|
|
89
|
+
// Component libraries (available to components)
|
|
90
|
+
{
|
|
91
|
+
id: 'lodash',
|
|
92
|
+
name: 'lodash',
|
|
93
|
+
displayName: 'Lodash',
|
|
94
|
+
category: 'utility',
|
|
95
|
+
globalVariable: '_',
|
|
96
|
+
version: '4.17.21',
|
|
97
|
+
cdnUrl: 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js',
|
|
98
|
+
isEnabled: true,
|
|
99
|
+
isCore: false
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
id: 'chart-js',
|
|
103
|
+
name: 'Chart',
|
|
104
|
+
displayName: 'Chart.js',
|
|
105
|
+
category: 'charting',
|
|
106
|
+
globalVariable: 'Chart',
|
|
107
|
+
version: '4.4.0',
|
|
108
|
+
cdnUrl: 'https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.0/chart.umd.js',
|
|
109
|
+
isEnabled: true,
|
|
110
|
+
isCore: false
|
|
111
|
+
}
|
|
112
|
+
],
|
|
113
|
+
metadata: {
|
|
114
|
+
version: '1.0.0',
|
|
115
|
+
lastUpdated: '2024-01-01'
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
// Test with custom libraries
|
|
120
|
+
const harness = new ReactTestHarness({ headless: true });
|
|
121
|
+
await harness.initialize();
|
|
122
|
+
|
|
123
|
+
const result = await harness.testComponent(
|
|
124
|
+
`const Component = () => {
|
|
125
|
+
if (!_) return <div>Lodash not available</div>;
|
|
126
|
+
const sorted = _.sortBy([3, 1, 2]);
|
|
127
|
+
return <div>{sorted.join(', ')}</div>;
|
|
128
|
+
}`,
|
|
129
|
+
{},
|
|
130
|
+
{ libraryConfiguration: customLibraryConfig }
|
|
131
|
+
);
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Testing Organization-Specific Libraries
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
// Test with minimal libraries
|
|
138
|
+
const minimalConfig: LibraryConfiguration = {
|
|
139
|
+
libraries: [
|
|
140
|
+
// Only runtime essentials
|
|
141
|
+
{ id: 'react', category: 'runtime', isEnabled: true, isRuntimeOnly: true, ... },
|
|
142
|
+
{ id: 'react-dom', category: 'runtime', isEnabled: true, isRuntimeOnly: true, ... },
|
|
143
|
+
{ id: 'babel', category: 'runtime', isEnabled: true, isRuntimeOnly: true, ... },
|
|
144
|
+
// Just one utility library
|
|
145
|
+
{ id: 'lodash', category: 'utility', isEnabled: true, ... }
|
|
146
|
+
],
|
|
147
|
+
metadata: { version: '1.0.0', lastUpdated: '2024-01-01' }
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
// Test with full library suite
|
|
151
|
+
const fullConfig: LibraryConfiguration = {
|
|
152
|
+
libraries: [
|
|
153
|
+
// All runtime libraries
|
|
154
|
+
// All UI libraries (antd, react-bootstrap)
|
|
155
|
+
// All charting libraries (chart.js, d3)
|
|
156
|
+
// All utilities (lodash, dayjs)
|
|
157
|
+
],
|
|
158
|
+
metadata: { version: '1.0.0', lastUpdated: '2024-01-01' }
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
// Test component behavior with different configurations
|
|
162
|
+
const componentCode = `
|
|
163
|
+
const Component = () => {
|
|
164
|
+
const hasChart = typeof Chart !== 'undefined';
|
|
165
|
+
const hasAntd = typeof antd !== 'undefined';
|
|
166
|
+
|
|
167
|
+
return (
|
|
168
|
+
<div>
|
|
169
|
+
<p>Chart.js: {hasChart ? 'Available' : 'Not Available'}</p>
|
|
170
|
+
<p>Ant Design: {hasAntd ? 'Available' : 'Not Available'}</p>
|
|
171
|
+
</div>
|
|
172
|
+
);
|
|
173
|
+
};
|
|
174
|
+
`;
|
|
175
|
+
|
|
176
|
+
const minimalResult = await harness.testComponent(componentCode, {}, {
|
|
177
|
+
libraryConfiguration: minimalConfig
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
const fullResult = await harness.testComponent(componentCode, {}, {
|
|
181
|
+
libraryConfiguration: fullConfig
|
|
182
|
+
});
|
|
183
|
+
```
|
|
184
|
+
|
|
64
185
|
## Programmatic Usage via TypeScript/JavaScript
|
|
65
186
|
|
|
66
187
|
The test harness is designed to be used as a library in your TypeScript/JavaScript code, not just via CLI. All classes and types are fully exported for programmatic use.
|
|
@@ -432,7 +553,7 @@ export class ReactComponentTester {
|
|
|
432
553
|
await this.harness.close();
|
|
433
554
|
}
|
|
434
555
|
|
|
435
|
-
async
|
|
556
|
+
async testMJComponent(
|
|
436
557
|
componentCode: string,
|
|
437
558
|
data: any,
|
|
438
559
|
userState?: any,
|
|
@@ -440,7 +561,7 @@ export class ReactComponentTester {
|
|
|
440
561
|
utilities?: any,
|
|
441
562
|
styles?: any
|
|
442
563
|
): Promise<ComponentExecutionResult> {
|
|
443
|
-
// Test with
|
|
564
|
+
// Test with MJ-style props structure
|
|
444
565
|
const props = { data, userState, callbacks, utilities, styles };
|
|
445
566
|
return this.harness.testComponent(componentCode, props);
|
|
446
567
|
}
|
|
@@ -465,8 +586,8 @@ export class ReactComponentTester {
|
|
|
465
586
|
const tester = new ReactComponentTester();
|
|
466
587
|
await tester.setup();
|
|
467
588
|
|
|
468
|
-
const result = await tester.
|
|
469
|
-
|
|
589
|
+
const result = await tester.testMJComponent(
|
|
590
|
+
componentCode,
|
|
470
591
|
{ title: 'Test', items: [] },
|
|
471
592
|
{ viewMode: 'grid' }
|
|
472
593
|
);
|
|
@@ -479,45 +600,40 @@ tester
|
|
|
479
600
|
await tester.teardown();
|
|
480
601
|
```
|
|
481
602
|
|
|
482
|
-
### Testing
|
|
603
|
+
### Testing with Different Library Configurations
|
|
483
604
|
|
|
484
605
|
```typescript
|
|
485
606
|
import { ReactTestHarness } from '@memberjunction/react-test-harness';
|
|
486
|
-
import type {
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
} from '@memberjunction/skip-types';
|
|
491
|
-
|
|
492
|
-
async function testSkipComponent(spec: SkipComponentRootSpec) {
|
|
493
|
-
const harness = new ReactTestHarness({ headless: true });
|
|
607
|
+
import type { LibraryConfiguration } from '@memberjunction/react-runtime';
|
|
608
|
+
|
|
609
|
+
class LibraryCompatibilityTester {
|
|
610
|
+
private harness: ReactTestHarness;
|
|
494
611
|
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
612
|
+
constructor() {
|
|
613
|
+
this.harness = new ReactTestHarness({ headless: true });
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
async testWithLibraries(
|
|
617
|
+
componentCode: string,
|
|
618
|
+
enabledLibraries: string[]
|
|
619
|
+
) {
|
|
620
|
+
const config: LibraryConfiguration = {
|
|
621
|
+
libraries: [
|
|
622
|
+
// Always include runtime
|
|
623
|
+
{ id: 'react', category: 'runtime', isEnabled: true, isRuntimeOnly: true, ... },
|
|
624
|
+
{ id: 'react-dom', category: 'runtime', isEnabled: true, isRuntimeOnly: true, ... },
|
|
625
|
+
{ id: 'babel', category: 'runtime', isEnabled: true, isRuntimeOnly: true, ... },
|
|
626
|
+
// Conditionally enable other libraries
|
|
627
|
+
{ id: 'lodash', category: 'utility', isEnabled: enabledLibraries.includes('lodash'), ... },
|
|
628
|
+
{ id: 'chart-js', category: 'charting', isEnabled: enabledLibraries.includes('chart-js'), ... },
|
|
629
|
+
{ id: 'antd', category: 'ui', isEnabled: enabledLibraries.includes('antd'), ... },
|
|
630
|
+
],
|
|
631
|
+
metadata: { version: '1.0.0', lastUpdated: '2024-01-01' }
|
|
510
632
|
};
|
|
511
633
|
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
throw new Error(`Component failed: ${result.error}`);
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
return result;
|
|
519
|
-
} finally {
|
|
520
|
-
await harness.close();
|
|
634
|
+
return this.harness.testComponent(componentCode, {}, {
|
|
635
|
+
libraryConfiguration: config
|
|
636
|
+
});
|
|
521
637
|
}
|
|
522
638
|
}
|
|
523
639
|
```
|
|
@@ -596,12 +712,14 @@ if (results.failed > 0) {
|
|
|
596
712
|
|
|
597
713
|
```typescript
|
|
598
714
|
interface ComponentExecutionOptions {
|
|
599
|
-
|
|
715
|
+
componentSpec: ComponentSpec;
|
|
600
716
|
props?: Record<string, any>;
|
|
601
717
|
setupCode?: string; // Additional setup code
|
|
602
718
|
timeout?: number; // Default: 30000ms
|
|
603
719
|
waitForSelector?: string; // Wait for element before capture
|
|
604
720
|
waitForLoadState?: 'load' | 'domcontentloaded' | 'networkidle';
|
|
721
|
+
contextUser: UserInfo;
|
|
722
|
+
libraryConfiguration?: LibraryConfiguration; // New: Custom library configuration
|
|
605
723
|
}
|
|
606
724
|
```
|
|
607
725
|
|
|
@@ -721,12 +839,26 @@ Due to the architecture of the test harness (Node.js controlling a browser via P
|
|
|
721
839
|
]);
|
|
722
840
|
```
|
|
723
841
|
|
|
842
|
+
5. **Test with different library configurations** to ensure compatibility:
|
|
843
|
+
```typescript
|
|
844
|
+
// Test with minimal libraries
|
|
845
|
+
const minimalResult = await harness.testComponent(code, props, {
|
|
846
|
+
libraryConfiguration: minimalLibraryConfig
|
|
847
|
+
});
|
|
848
|
+
|
|
849
|
+
// Test with full libraries
|
|
850
|
+
const fullResult = await harness.testComponent(code, props, {
|
|
851
|
+
libraryConfiguration: fullLibraryConfig
|
|
852
|
+
});
|
|
853
|
+
```
|
|
854
|
+
|
|
724
855
|
## Troubleshooting
|
|
725
856
|
|
|
726
857
|
### Component Not Rendering
|
|
727
858
|
- Ensure your component is named `Component` or modify the execution template
|
|
728
859
|
- Check for syntax errors in your component code
|
|
729
860
|
- Enable debug mode to see console output
|
|
861
|
+
- Verify required libraries are included in libraryConfiguration
|
|
730
862
|
|
|
731
863
|
### Timeout Errors
|
|
732
864
|
- Increase timeout value: `--timeout 60000`
|
|
@@ -738,6 +870,12 @@ Due to the architecture of the test harness (Node.js controlling a browser via P
|
|
|
738
870
|
- Use absolute paths for consistent results
|
|
739
871
|
- Check file permissions
|
|
740
872
|
|
|
873
|
+
### Library Loading Issues
|
|
874
|
+
- Verify CDN URLs are accessible
|
|
875
|
+
- Check that globalVariable names match what components expect
|
|
876
|
+
- Ensure runtime libraries (React, ReactDOM, Babel) are always included
|
|
877
|
+
- Use isRuntimeOnly flag for libraries not exposed to components
|
|
878
|
+
|
|
741
879
|
## License
|
|
742
880
|
|
|
743
881
|
ISC
|
package/dist/cli/index.js
CHANGED
|
@@ -73,7 +73,8 @@ program
|
|
|
73
73
|
spinner.text = 'Loading component...';
|
|
74
74
|
const result = await harness.testComponentFromFile(componentFile, props, {
|
|
75
75
|
waitForSelector: options.selector,
|
|
76
|
-
timeout: parseInt(options.timeout)
|
|
76
|
+
timeout: parseInt(options.timeout),
|
|
77
|
+
contextUser: undefined
|
|
77
78
|
});
|
|
78
79
|
spinner.stop();
|
|
79
80
|
if (result.success) {
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,2CAA6B;AAC7B,uCAAyB;AACzB,kDAA0B;AAC1B,8CAAsB;AACtB,sDAAuD;AAEvD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,eAAe,CAAC;KACrB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,OAAO,CAAC,QAAQ,CAAC,CAAC;AAErB,OAAO;KACJ,OAAO,CAAC,qBAAqB,CAAC;KAC9B,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,oBAAoB,EAAE,gCAAgC,CAAC;KAC9D,MAAM,CAAC,2BAA2B,EAAE,oCAAoC,CAAC;KACzE,MAAM,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,OAAO,CAAC;KAChE,MAAM,CAAC,YAAY,EAAE,gCAAgC,EAAE,IAAI,CAAC;KAC5D,MAAM,CAAC,UAAU,EAAE,sCAAsC,CAAC;KAC1D,MAAM,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;KACxD,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC;KACxC,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;IACvC,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC;IAE5D,IAAI,CAAC;QACH,0BAA0B;QAC1B,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,MAAM,OAAO,GAAG,IAAI,+BAAgB,CAAC;YACnC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM;YACzB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,cAAc,EAAE,OAAO,CAAC,UAAU;SACnC,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,GAAG,qBAAqB,CAAC;QACrC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;QAE3B,OAAO,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAChD,aAAa,EACb,KAAK,EACL;YACE,eAAe,EAAE,OAAO,CAAC,QAAQ;YACjC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { ReactTestHarness, TestHarnessOptions } from './lib/test-harness';
|
|
2
2
|
export { BrowserManager, BrowserContextOptions } from './lib/browser-context';
|
|
3
|
-
export { ComponentRunner, ComponentExecutionOptions, ComponentExecutionResult
|
|
3
|
+
export { ComponentRunner, ComponentExecutionOptions, ComponentExecutionResult } from './lib/component-runner';
|
|
4
4
|
export { AssertionHelpers } from './lib/assertion-helpers';
|
|
5
5
|
export { ComponentLinter, LintResult, Violation, FixSuggestion, ComponentType } from './lib/component-linter';
|
|
6
|
+
export { ComponentSpec } from '@memberjunction/interactive-component-types';
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC9G,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ComponentLinter = exports.AssertionHelpers = exports.ComponentRunner = exports.BrowserManager = exports.ReactTestHarness = void 0;
|
|
3
|
+
exports.ComponentSpec = exports.ComponentLinter = exports.AssertionHelpers = exports.ComponentRunner = exports.BrowserManager = exports.ReactTestHarness = void 0;
|
|
4
4
|
var test_harness_1 = require("./lib/test-harness");
|
|
5
5
|
Object.defineProperty(exports, "ReactTestHarness", { enumerable: true, get: function () { return test_harness_1.ReactTestHarness; } });
|
|
6
6
|
var browser_context_1 = require("./lib/browser-context");
|
|
@@ -11,4 +11,6 @@ var assertion_helpers_1 = require("./lib/assertion-helpers");
|
|
|
11
11
|
Object.defineProperty(exports, "AssertionHelpers", { enumerable: true, get: function () { return assertion_helpers_1.AssertionHelpers; } });
|
|
12
12
|
var component_linter_1 = require("./lib/component-linter");
|
|
13
13
|
Object.defineProperty(exports, "ComponentLinter", { enumerable: true, get: function () { return component_linter_1.ComponentLinter; } });
|
|
14
|
+
var interactive_component_types_1 = require("@memberjunction/interactive-component-types");
|
|
15
|
+
Object.defineProperty(exports, "ComponentSpec", { enumerable: true, get: function () { return interactive_component_types_1.ComponentSpec; } });
|
|
14
16
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mDAA0E;AAAjE,gHAAA,gBAAgB,OAAA;AACzB,yDAA8E;AAArE,iHAAA,cAAc,OAAA;AACvB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mDAA0E;AAAjE,gHAAA,gBAAgB,OAAA;AACzB,yDAA8E;AAArE,iHAAA,cAAc,OAAA;AACvB,2DAA8G;AAArG,mHAAA,eAAe,OAAA;AACxB,6DAA2D;AAAlD,qHAAA,gBAAgB,OAAA;AACzB,2DAA8G;AAArG,mHAAA,eAAe,OAAA;AACxB,2FAA4E;AAAnE,4HAAA,aAAa,OAAA"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { BrowserManager } from './browser-context';
|
|
3
|
+
import { LibraryConfiguration } from '@memberjunction/react-runtime';
|
|
4
|
+
import type { UserInfo } from '@memberjunction/core';
|
|
3
5
|
import { ComponentType, FixSuggestion } from './component-linter';
|
|
6
|
+
import { ComponentSpec } from '@memberjunction/interactive-component-types';
|
|
4
7
|
export interface ComponentExecutionOptions {
|
|
5
8
|
componentSpec: ComponentSpec;
|
|
6
9
|
props?: Record<string, any>;
|
|
@@ -8,12 +11,8 @@ export interface ComponentExecutionOptions {
|
|
|
8
11
|
timeout?: number;
|
|
9
12
|
waitForSelector?: string;
|
|
10
13
|
waitForLoadState?: 'load' | 'domcontentloaded' | 'networkidle';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
componentName: string;
|
|
14
|
-
componentCode?: string;
|
|
15
|
-
childComponents?: ComponentSpec[];
|
|
16
|
-
components?: ComponentSpec[];
|
|
14
|
+
contextUser: UserInfo;
|
|
15
|
+
libraryConfiguration?: LibraryConfiguration;
|
|
17
16
|
}
|
|
18
17
|
export interface ComponentExecutionResult {
|
|
19
18
|
success: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-runner.d.ts","sourceRoot":"","sources":["../../src/lib/component-runner.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"component-runner.d.ts","sourceRoot":"","sources":["../../src/lib/component-runner.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAML,oBAAoB,EACrB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAiC,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAmB,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAE5E,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,kBAAkB,GAAG,aAAa,CAAC;IAC/D,WAAW,EAAE,QAAQ,CAAC;IACtB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAGD,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CAClC;AAED,qBAAa,eAAe;IAoBd,OAAO,CAAC,cAAc;IAnBlC,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,cAAc,CAAiB;IAGvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAS/C;IAGF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;gBAE5B,cAAc,EAAE,cAAc;IAQlD;;OAEG;IACG,aAAa,CACjB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,aAAa,EAAE,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAiBhF,gBAAgB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAwE7F,OAAO,CAAC,kBAAkB;IA8b1B;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsB3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;YACW,oBAAoB;IAMlC;;OAEG;YACW,aAAa;IA0B3B;;OAEG;YACW,cAAc;IAI5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;YACW,iBAAiB;IAgE/B;;;;OAIG;IACH,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAIzD;;;;OAIG;IACH,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE;CAGjD"}
|
|
@@ -39,7 +39,7 @@ class ComponentRunner {
|
|
|
39
39
|
this.setupErrorHandling(page, errors);
|
|
40
40
|
await this.injectRenderTracking(page);
|
|
41
41
|
// Expose MJ utilities to the page
|
|
42
|
-
await this.exposeMJUtilities(page);
|
|
42
|
+
await this.exposeMJUtilities(page, options.contextUser);
|
|
43
43
|
// Create and load the component
|
|
44
44
|
const htmlContent = this.createHTMLTemplate(options);
|
|
45
45
|
await page.goto(`data:text/html;charset=utf-8,${encodeURIComponent(htmlContent)}`);
|
|
@@ -84,17 +84,27 @@ class ComponentRunner {
|
|
|
84
84
|
createHTMLTemplate(options) {
|
|
85
85
|
const propsJson = JSON.stringify(options.props || {});
|
|
86
86
|
const specJson = JSON.stringify(options.componentSpec);
|
|
87
|
-
//
|
|
88
|
-
|
|
89
|
-
.
|
|
87
|
+
// Set configuration if provided
|
|
88
|
+
if (options.libraryConfiguration) {
|
|
89
|
+
react_runtime_1.StandardLibraryManager.setConfiguration(options.libraryConfiguration);
|
|
90
|
+
}
|
|
91
|
+
// Get all enabled libraries from configuration
|
|
92
|
+
const enabledLibraries = react_runtime_1.StandardLibraryManager.getEnabledLibraries();
|
|
93
|
+
// Separate runtime and component libraries
|
|
94
|
+
const runtimeLibraries = enabledLibraries.filter((lib) => lib.category === 'runtime');
|
|
95
|
+
const componentLibraries = enabledLibraries.filter((lib) => lib.category !== 'runtime');
|
|
96
|
+
// Generate script tags for runtime libraries
|
|
97
|
+
const runtimeScripts = runtimeLibraries
|
|
98
|
+
.map((lib) => ` <script crossorigin src="${lib.cdnUrl}"></script>`)
|
|
90
99
|
.join('\n');
|
|
91
|
-
// Generate script tags for
|
|
92
|
-
const
|
|
93
|
-
.map(
|
|
100
|
+
// Generate script tags for component libraries
|
|
101
|
+
const componentScripts = componentLibraries
|
|
102
|
+
.map((lib) => ` <script src="${lib.cdnUrl}"></script>`)
|
|
94
103
|
.join('\n');
|
|
95
104
|
// Generate CSS links
|
|
96
|
-
const cssLinks =
|
|
97
|
-
.
|
|
105
|
+
const cssLinks = enabledLibraries
|
|
106
|
+
.filter((lib) => lib.cdnCssUrl)
|
|
107
|
+
.map((lib) => ` <link rel="stylesheet" href="${lib.cdnCssUrl}">`)
|
|
98
108
|
.join('\n');
|
|
99
109
|
return `
|
|
100
110
|
<!DOCTYPE html>
|
|
@@ -102,11 +112,8 @@ class ComponentRunner {
|
|
|
102
112
|
<head>
|
|
103
113
|
<meta charset="utf-8">
|
|
104
114
|
<title>React Component Test</title>
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
<script src="${react_runtime_1.STANDARD_LIBRARY_URLS.BABEL}"></script>
|
|
108
|
-
${coreLibraryScripts}
|
|
109
|
-
${uiLibraryScripts}
|
|
115
|
+
${runtimeScripts}
|
|
116
|
+
${componentScripts}
|
|
110
117
|
${cssLinks}
|
|
111
118
|
<style>
|
|
112
119
|
body { margin: 0; padding: 20px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; }
|
|
@@ -149,18 +156,23 @@ ${cssLinks}
|
|
|
149
156
|
<script type="text/babel">
|
|
150
157
|
${options.setupCode || ''}
|
|
151
158
|
|
|
152
|
-
// Create runtime context
|
|
159
|
+
// Create runtime context with dynamic libraries
|
|
160
|
+
const componentLibraries = ${JSON.stringify(componentLibraries.map((lib) => ({
|
|
161
|
+
globalVariable: lib.globalVariable,
|
|
162
|
+
displayName: lib.displayName
|
|
163
|
+
})))};
|
|
164
|
+
|
|
165
|
+
const libraries = {};
|
|
166
|
+
componentLibraries.forEach(lib => {
|
|
167
|
+
if (window[lib.globalVariable]) {
|
|
168
|
+
libraries[lib.globalVariable] = window[lib.globalVariable];
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
|
|
153
172
|
const runtimeContext = {
|
|
154
173
|
React: React,
|
|
155
174
|
ReactDOM: ReactDOM,
|
|
156
|
-
libraries:
|
|
157
|
-
_: window._,
|
|
158
|
-
d3: window.d3,
|
|
159
|
-
Chart: window.Chart,
|
|
160
|
-
dayjs: window.dayjs,
|
|
161
|
-
antd: window.antd,
|
|
162
|
-
ReactBootstrap: window.ReactBootstrap
|
|
163
|
-
}
|
|
175
|
+
libraries: libraries
|
|
164
176
|
};
|
|
165
177
|
|
|
166
178
|
// Create component compiler
|
|
@@ -170,8 +182,8 @@ ${cssLinks}
|
|
|
170
182
|
}
|
|
171
183
|
|
|
172
184
|
async compile(options) {
|
|
173
|
-
const componentName = options.
|
|
174
|
-
const componentCode = options.
|
|
185
|
+
const componentName = options.name;
|
|
186
|
+
const componentCode = options.code;
|
|
175
187
|
|
|
176
188
|
try {
|
|
177
189
|
// Transform JSX to JS using Babel
|
|
@@ -181,17 +193,16 @@ ${cssLinks}
|
|
|
181
193
|
});
|
|
182
194
|
|
|
183
195
|
// Create component factory
|
|
196
|
+
const libraryDeclarations = componentLibraries
|
|
197
|
+
.map(lib => \`const \${lib.globalVariable} = libraries['\${lib.globalVariable}'];\`)
|
|
198
|
+
.join('\\n ');
|
|
199
|
+
|
|
184
200
|
const createComponent = new Function(
|
|
185
201
|
'React', 'ReactDOM', 'useState', 'useEffect', 'useCallback',
|
|
186
202
|
'createStateUpdater', 'libraries', 'styles', 'console',
|
|
187
203
|
\`
|
|
188
204
|
// Make libraries available in the component scope
|
|
189
|
-
|
|
190
|
-
const d3 = libraries.d3;
|
|
191
|
-
const Chart = libraries.Chart;
|
|
192
|
-
const dayjs = libraries.dayjs;
|
|
193
|
-
const antd = libraries.antd;
|
|
194
|
-
const ReactBootstrap = libraries.ReactBootstrap;
|
|
205
|
+
\${libraryDeclarations}
|
|
195
206
|
|
|
196
207
|
\${transformed.code}
|
|
197
208
|
return {
|
|
@@ -307,25 +318,25 @@ ${cssLinks}
|
|
|
307
318
|
// Register components recursively
|
|
308
319
|
const registerSpec = async (spec) => {
|
|
309
320
|
// Register children first
|
|
310
|
-
const children = spec.
|
|
321
|
+
const children = spec.dependencies || [];
|
|
311
322
|
for (const child of children) {
|
|
312
323
|
await registerSpec(child);
|
|
313
324
|
}
|
|
314
325
|
|
|
315
326
|
// Register this component
|
|
316
|
-
if (spec.
|
|
327
|
+
if (spec.code) {
|
|
317
328
|
const result = await this.compiler.compile({
|
|
318
|
-
|
|
319
|
-
|
|
329
|
+
name: spec.name,
|
|
330
|
+
code: spec.code
|
|
320
331
|
});
|
|
321
332
|
|
|
322
333
|
if (result.success) {
|
|
323
334
|
const factory = result.component.component(this.runtimeContext, {});
|
|
324
|
-
this.registry.register(spec.
|
|
325
|
-
registeredComponents.push(spec.
|
|
335
|
+
this.registry.register(spec.name, factory.component);
|
|
336
|
+
registeredComponents.push(spec.name);
|
|
326
337
|
} else {
|
|
327
338
|
errors.push({
|
|
328
|
-
componentName: spec.
|
|
339
|
+
componentName: spec.name,
|
|
329
340
|
error: result.error.message,
|
|
330
341
|
phase: 'compilation'
|
|
331
342
|
});
|
|
@@ -483,10 +494,10 @@ ${cssLinks}
|
|
|
483
494
|
const components = registry.getAll();
|
|
484
495
|
|
|
485
496
|
// Get the root component
|
|
486
|
-
const RootComponent = registry.get(componentSpec.
|
|
497
|
+
const RootComponent = registry.get(componentSpec.name);
|
|
487
498
|
|
|
488
499
|
if (!RootComponent) {
|
|
489
|
-
console.error('Root component not found:', componentSpec.
|
|
500
|
+
console.error('Root component not found:', componentSpec.name);
|
|
490
501
|
return;
|
|
491
502
|
}
|
|
492
503
|
|
|
@@ -596,7 +607,7 @@ ${cssLinks}
|
|
|
596
607
|
/**
|
|
597
608
|
* Expose MemberJunction utilities to the browser context
|
|
598
609
|
*/
|
|
599
|
-
async exposeMJUtilities(page) {
|
|
610
|
+
async exposeMJUtilities(page, contextUser) {
|
|
600
611
|
// Check if utilities are already exposed
|
|
601
612
|
const alreadyExposed = await page.evaluate(() => {
|
|
602
613
|
return typeof window.__mjGetEntityObject === 'function';
|
|
@@ -611,7 +622,7 @@ ${cssLinks}
|
|
|
611
622
|
// Expose individual functions since we can't pass complex objects
|
|
612
623
|
await page.exposeFunction('__mjGetEntityObject', async (entityName) => {
|
|
613
624
|
try {
|
|
614
|
-
const entity = await metadata.GetEntityObject(entityName);
|
|
625
|
+
const entity = await metadata.GetEntityObject(entityName, contextUser);
|
|
615
626
|
return entity;
|
|
616
627
|
}
|
|
617
628
|
catch (error) {
|
|
@@ -630,7 +641,7 @@ ${cssLinks}
|
|
|
630
641
|
});
|
|
631
642
|
await page.exposeFunction('__mjRunView', async (params) => {
|
|
632
643
|
try {
|
|
633
|
-
return await runView.RunView(params);
|
|
644
|
+
return await runView.RunView(params, contextUser);
|
|
634
645
|
}
|
|
635
646
|
catch (error) {
|
|
636
647
|
console.error('Error in __mjRunView:', error);
|
|
@@ -640,7 +651,7 @@ ${cssLinks}
|
|
|
640
651
|
});
|
|
641
652
|
await page.exposeFunction('__mjRunViews', async (params) => {
|
|
642
653
|
try {
|
|
643
|
-
return await runView.RunViews(params);
|
|
654
|
+
return await runView.RunViews(params, contextUser);
|
|
644
655
|
}
|
|
645
656
|
catch (error) {
|
|
646
657
|
console.error('Error in __mjRunViews:', error);
|
|
@@ -650,7 +661,7 @@ ${cssLinks}
|
|
|
650
661
|
});
|
|
651
662
|
await page.exposeFunction('__mjRunQuery', async (params) => {
|
|
652
663
|
try {
|
|
653
|
-
return await runQuery.RunQuery(params);
|
|
664
|
+
return await runQuery.RunQuery(params, contextUser);
|
|
654
665
|
}
|
|
655
666
|
catch (error) {
|
|
656
667
|
console.error('Error in __mjRunQuery:', error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-runner.js","sourceRoot":"","sources":["../../src/lib/component-runner.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"component-runner.js","sourceRoot":"","sources":["../../src/lib/component-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
import { BrowserContextOptions } from './browser-context';
|
|
3
3
|
import { ComponentExecutionOptions, ComponentExecutionResult } from './component-runner';
|
|
4
4
|
import { AssertionHelpers } from './assertion-helpers';
|
|
5
|
-
import { ComponentRootSpec, ComponentChildSpec } from '@memberjunction/interactive-component-types';
|
|
6
5
|
export interface TestHarnessOptions extends BrowserContextOptions {
|
|
7
6
|
debug?: boolean;
|
|
8
7
|
screenshotOnError?: boolean;
|
|
@@ -15,22 +14,14 @@ export declare class ReactTestHarness {
|
|
|
15
14
|
constructor(options?: TestHarnessOptions);
|
|
16
15
|
initialize(): Promise<void>;
|
|
17
16
|
/**
|
|
18
|
-
* Test a
|
|
17
|
+
* Test a component with its full hierarchy of child components
|
|
19
18
|
*/
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Test a single child component
|
|
23
|
-
*/
|
|
24
|
-
testChildComponent(childSpec: ComponentChildSpec, props?: Record<string, any>, options?: Partial<ComponentExecutionOptions>): Promise<ComponentExecutionResult>;
|
|
25
|
-
/**
|
|
26
|
-
* Convert Skip child specs to test harness ComponentSpec format
|
|
27
|
-
*/
|
|
28
|
-
private convertSkipChildSpecs;
|
|
19
|
+
testComponent(options: ComponentExecutionOptions): Promise<ComponentExecutionResult>;
|
|
29
20
|
/**
|
|
30
21
|
* Test a component from a file path
|
|
31
22
|
* This is a convenience method for the CLI
|
|
32
23
|
*/
|
|
33
|
-
testComponentFromFile(filePath: string, props
|
|
24
|
+
testComponentFromFile(filePath: string, props: Record<string, any>, options: Omit<ComponentExecutionOptions, 'componentSpec'>): Promise<ComponentExecutionResult>;
|
|
34
25
|
runTest(name: string, testFn: () => Promise<void>): Promise<{
|
|
35
26
|
name: string;
|
|
36
27
|
passed: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-harness.d.ts","sourceRoot":"","sources":["../../src/lib/test-harness.ts"],"names":[],"mappings":";AAAA,OAAO,EAAkB,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAmB,yBAAyB,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"test-harness.d.ts","sourceRoot":"","sources":["../../src/lib/test-harness.ts"],"names":[],"mappings":";AAAA,OAAO,EAAkB,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAmB,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC1G,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,MAAM,WAAW,kBAAmB,SAAQ,qBAAqB;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,OAAO,CAAqB;gBAExB,OAAO,GAAE,kBAAuB;IAYtC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC;IAkDpC;;;OAGG;IACG,qBAAqB,CACzB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,OAAO,EAAE,IAAI,CAAC,yBAAyB,EAAE,eAAe,CAAC,GACxD,OAAO,CAAC,wBAAwB,CAAC;IA+B9B,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAC1B,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAyBzE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC;QAC/E,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,OAAO,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACrF,CAAC;IA0BF,mBAAmB;IAInB,aAAa,CAAC,IAAI,EAAE,MAAM;;;;;;IAIpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;CAG/E"}
|
package/dist/lib/test-harness.js
CHANGED
|
@@ -42,12 +42,13 @@ class ReactTestHarness {
|
|
|
42
42
|
await this.browserManager.initialize();
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
|
-
* Test a
|
|
45
|
+
* Test a component with its full hierarchy of child components
|
|
46
46
|
*/
|
|
47
|
-
async
|
|
48
|
-
// First, lint the
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
async testComponent(options) {
|
|
48
|
+
// First, lint the component code
|
|
49
|
+
const spec = options.componentSpec;
|
|
50
|
+
if (spec.code) {
|
|
51
|
+
const lintResult = await this.componentRunner.lintComponent(spec.code, spec.name, 'root');
|
|
51
52
|
if (lintResult.hasErrors) {
|
|
52
53
|
// Return early with lint errors
|
|
53
54
|
return {
|
|
@@ -63,20 +64,10 @@ class ReactTestHarness {
|
|
|
63
64
|
};
|
|
64
65
|
}
|
|
65
66
|
}
|
|
66
|
-
|
|
67
|
-
const spec = {
|
|
68
|
-
componentName: rootSpec.componentName,
|
|
69
|
-
componentCode: rootSpec.componentCode,
|
|
70
|
-
childComponents: this.convertSkipChildSpecs(rootSpec.childComponents)
|
|
71
|
-
};
|
|
72
|
-
const result = await this.componentRunner.executeComponent({
|
|
73
|
-
componentSpec: spec,
|
|
74
|
-
props,
|
|
75
|
-
...options
|
|
76
|
-
});
|
|
67
|
+
const result = await this.componentRunner.executeComponent(options);
|
|
77
68
|
if (this.options.debug) {
|
|
78
69
|
console.log('=== Test Execution Debug Info ===');
|
|
79
|
-
console.log('Component:', spec.
|
|
70
|
+
console.log('Component:', spec.name);
|
|
80
71
|
console.log('Success:', result.success);
|
|
81
72
|
console.log('Execution Time:', result.executionTime, 'ms');
|
|
82
73
|
console.log('Errors:', result.errors);
|
|
@@ -92,49 +83,6 @@ class ReactTestHarness {
|
|
|
92
83
|
}
|
|
93
84
|
return result;
|
|
94
85
|
}
|
|
95
|
-
/**
|
|
96
|
-
* Test a single child component
|
|
97
|
-
*/
|
|
98
|
-
async testChildComponent(childSpec, props, options) {
|
|
99
|
-
// First, lint the component code
|
|
100
|
-
if (childSpec.componentCode) {
|
|
101
|
-
const lintResult = await this.componentRunner.lintComponent(childSpec.componentCode, childSpec.componentName, 'child');
|
|
102
|
-
if (lintResult.hasErrors) {
|
|
103
|
-
// Return early with lint errors
|
|
104
|
-
return {
|
|
105
|
-
success: false,
|
|
106
|
-
html: '',
|
|
107
|
-
errors: lintResult.violations,
|
|
108
|
-
warnings: [],
|
|
109
|
-
criticalWarnings: [],
|
|
110
|
-
console: [],
|
|
111
|
-
executionTime: 0,
|
|
112
|
-
lintViolations: lintResult.violations,
|
|
113
|
-
fixSuggestions: lintResult.suggestions
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
const spec = {
|
|
118
|
-
componentName: childSpec.componentName,
|
|
119
|
-
componentCode: childSpec.componentCode || '',
|
|
120
|
-
childComponents: childSpec.components ? this.convertSkipChildSpecs(childSpec.components) : []
|
|
121
|
-
};
|
|
122
|
-
return this.componentRunner.executeComponent({
|
|
123
|
-
componentSpec: spec,
|
|
124
|
-
props,
|
|
125
|
-
...options
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Convert Skip child specs to test harness ComponentSpec format
|
|
130
|
-
*/
|
|
131
|
-
convertSkipChildSpecs(children) {
|
|
132
|
-
return children.map(child => ({
|
|
133
|
-
componentName: child.componentName,
|
|
134
|
-
componentCode: child.componentCode,
|
|
135
|
-
childComponents: child.components ? this.convertSkipChildSpecs(child.components) : []
|
|
136
|
-
}));
|
|
137
|
-
}
|
|
138
86
|
/**
|
|
139
87
|
* Test a component from a file path
|
|
140
88
|
* This is a convenience method for the CLI
|
|
@@ -148,15 +96,22 @@ class ReactTestHarness {
|
|
|
148
96
|
}
|
|
149
97
|
const componentCode = fs.readFileSync(absolutePath, 'utf-8');
|
|
150
98
|
const componentName = path.basename(absolutePath, path.extname(absolutePath));
|
|
151
|
-
// Create a minimal
|
|
152
|
-
const
|
|
153
|
-
componentName,
|
|
154
|
-
componentCode,
|
|
99
|
+
// Create a minimal ComponentSpec for the file
|
|
100
|
+
const spec = {
|
|
101
|
+
name: componentName,
|
|
102
|
+
code: componentCode,
|
|
155
103
|
description: `Component loaded from ${filePath}`,
|
|
104
|
+
title: componentName,
|
|
105
|
+
type: 'component',
|
|
106
|
+
functionalRequirements: '',
|
|
107
|
+
technicalDesign: '',
|
|
156
108
|
exampleUsage: `<${componentName} />`,
|
|
157
|
-
|
|
109
|
+
dependencies: []
|
|
158
110
|
};
|
|
159
|
-
return this.
|
|
111
|
+
return this.testComponent({
|
|
112
|
+
...options,
|
|
113
|
+
componentSpec: spec
|
|
114
|
+
});
|
|
160
115
|
}
|
|
161
116
|
async runTest(name, testFn) {
|
|
162
117
|
const startTime = Date.now();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-harness.js","sourceRoot":"","sources":["../../src/lib/test-harness.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAA0E;AAC1E,
|
|
1
|
+
{"version":3,"file":"test-harness.js","sourceRoot":"","sources":["../../src/lib/test-harness.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/react-test-harness",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.75.0",
|
|
4
4
|
"description": "React component test harness for MemberJunction using Playwright",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"typescript": "^5.4.5"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@memberjunction/react-runtime": "^2.
|
|
26
|
-
"@memberjunction/interactive-component-types": "^2.
|
|
25
|
+
"@memberjunction/react-runtime": "^2.75.0",
|
|
26
|
+
"@memberjunction/interactive-component-types": "^2.75.0",
|
|
27
27
|
"@playwright/test": "^1.40.0",
|
|
28
28
|
"playwright": "^1.40.0",
|
|
29
29
|
"commander": "^11.1.0",
|