@memberjunction/core 3.3.0 → 4.0.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/dist/__tests__/mocks/TestMetadataProvider.d.ts +45 -0
- package/dist/__tests__/mocks/TestMetadataProvider.d.ts.map +1 -0
- package/dist/__tests__/mocks/TestMetadataProvider.js +217 -0
- package/dist/__tests__/mocks/TestMetadataProvider.js.map +1 -0
- package/dist/__tests__/providerBase.concurrency.test.d.ts +10 -0
- package/dist/__tests__/providerBase.concurrency.test.d.ts.map +1 -0
- package/dist/__tests__/providerBase.concurrency.test.js +253 -0
- package/dist/__tests__/providerBase.concurrency.test.js.map +1 -0
- package/dist/__tests__/providerBase.refresh.test.d.ts +10 -0
- package/dist/__tests__/providerBase.refresh.test.d.ts.map +1 -0
- package/dist/__tests__/providerBase.refresh.test.js +161 -0
- package/dist/__tests__/providerBase.refresh.test.js.map +1 -0
- package/dist/__tests__/setup.d.ts +5 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +17 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/generic/InMemoryLocalStorageProvider.d.ts +1 -1
- package/dist/generic/InMemoryLocalStorageProvider.js +2 -6
- package/dist/generic/InMemoryLocalStorageProvider.js.map +1 -1
- package/dist/generic/QueryCache.d.ts +1 -1
- package/dist/generic/QueryCache.js +6 -10
- package/dist/generic/QueryCache.js.map +1 -1
- package/dist/generic/QueryCacheConfig.js +1 -2
- package/dist/generic/RegisterForStartup.d.ts +2 -2
- package/dist/generic/RegisterForStartup.js +7 -12
- package/dist/generic/RegisterForStartup.js.map +1 -1
- package/dist/generic/applicationInfo.d.ts +3 -3
- package/dist/generic/applicationInfo.js +4 -10
- package/dist/generic/applicationInfo.js.map +1 -1
- package/dist/generic/authEvaluator.d.ts +1 -1
- package/dist/generic/authEvaluator.js +4 -8
- package/dist/generic/authEvaluator.js.map +1 -1
- package/dist/generic/authTypes.js +1 -4
- package/dist/generic/authTypes.js.map +1 -1
- package/dist/generic/baseEngine.d.ts +5 -5
- package/dist/generic/baseEngine.js +51 -56
- package/dist/generic/baseEngine.js.map +1 -1
- package/dist/generic/baseEngineRegistry.js +13 -17
- package/dist/generic/baseEngineRegistry.js.map +1 -1
- package/dist/generic/baseEntity.d.ts +5 -5
- package/dist/generic/baseEntity.js +103 -113
- package/dist/generic/baseEntity.js.map +1 -1
- package/dist/generic/baseInfo.js +3 -7
- package/dist/generic/baseInfo.js.map +1 -1
- package/dist/generic/compositeKey.d.ts +2 -2
- package/dist/generic/compositeKey.js +5 -11
- package/dist/generic/compositeKey.js.map +1 -1
- package/dist/generic/databaseProviderBase.d.ts +2 -2
- package/dist/generic/databaseProviderBase.js +2 -6
- package/dist/generic/databaseProviderBase.js.map +1 -1
- package/dist/generic/entityInfo.d.ts +74 -5
- package/dist/generic/entityInfo.d.ts.map +1 -1
- package/dist/generic/entityInfo.js +138 -105
- package/dist/generic/entityInfo.js.map +1 -1
- package/dist/generic/explorerNavigationItem.d.ts +1 -1
- package/dist/generic/explorerNavigationItem.js +2 -6
- package/dist/generic/explorerNavigationItem.js.map +1 -1
- package/dist/generic/graphqlTypeNames.d.ts +1 -1
- package/dist/generic/graphqlTypeNames.js +4 -9
- package/dist/generic/graphqlTypeNames.js.map +1 -1
- package/dist/generic/interfaces.d.ts +51 -12
- package/dist/generic/interfaces.d.ts.map +1 -1
- package/dist/generic/interfaces.js +15 -30
- package/dist/generic/interfaces.js.map +1 -1
- package/dist/generic/libraryInfo.d.ts +1 -1
- package/dist/generic/libraryInfo.js +2 -6
- package/dist/generic/libraryInfo.js.map +1 -1
- package/dist/generic/localCacheManager.d.ts +2 -2
- package/dist/generic/localCacheManager.js +44 -48
- package/dist/generic/localCacheManager.js.map +1 -1
- package/dist/generic/logging.d.ts.map +1 -1
- package/dist/generic/logging.js +54 -67
- package/dist/generic/logging.js.map +1 -1
- package/dist/generic/metadata.d.ts +10 -10
- package/dist/generic/metadata.js +17 -21
- package/dist/generic/metadata.js.map +1 -1
- package/dist/generic/metadataUtil.d.ts +1 -1
- package/dist/generic/metadataUtil.js +3 -7
- package/dist/generic/metadataUtil.js.map +1 -1
- package/dist/generic/providerBase.d.ts +18 -12
- package/dist/generic/providerBase.d.ts.map +1 -1
- package/dist/generic/providerBase.js +130 -130
- package/dist/generic/providerBase.js.map +1 -1
- package/dist/generic/queryInfo.d.ts +5 -5
- package/dist/generic/queryInfo.js +21 -30
- package/dist/generic/queryInfo.js.map +1 -1
- package/dist/generic/queryInfoInterfaces.js +1 -2
- package/dist/generic/queryInfoInterfaces.js.map +1 -1
- package/dist/generic/querySQLFilters.js +5 -10
- package/dist/generic/querySQLFilters.js.map +1 -1
- package/dist/generic/runQuery.d.ts +2 -2
- package/dist/generic/runQuery.js +5 -9
- package/dist/generic/runQuery.js.map +1 -1
- package/dist/generic/runQuerySQLFilterImplementations.d.ts +1 -1
- package/dist/generic/runQuerySQLFilterImplementations.js +4 -8
- package/dist/generic/runQuerySQLFilterImplementations.js.map +1 -1
- package/dist/generic/runReport.d.ts +2 -2
- package/dist/generic/runReport.js +5 -9
- package/dist/generic/runReport.js.map +1 -1
- package/dist/generic/securityInfo.d.ts +2 -2
- package/dist/generic/securityInfo.js +10 -20
- package/dist/generic/securityInfo.js.map +1 -1
- package/dist/generic/telemetryManager.js +20 -32
- package/dist/generic/telemetryManager.js.map +1 -1
- package/dist/generic/transactionGroup.d.ts +1 -1
- package/dist/generic/transactionGroup.d.ts.map +1 -1
- package/dist/generic/transactionGroup.js +11 -19
- package/dist/generic/transactionGroup.js.map +1 -1
- package/dist/generic/util.js +15 -31
- package/dist/generic/util.js.map +1 -1
- package/dist/index.d.ts +34 -34
- package/dist/index.js +45 -63
- package/dist/index.js.map +1 -1
- package/dist/views/runView.d.ts +3 -3
- package/dist/views/runView.js +6 -11
- package/dist/views/runView.js.map +1 -1
- package/dist/views/viewInfo.d.ts +3 -3
- package/dist/views/viewInfo.js +10 -17
- package/dist/views/viewInfo.js.map +1 -1
- package/package.json +11 -10
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Mock for ProviderBase
|
|
3
|
+
* Provides minimal implementation for testing metadata refresh logic
|
|
4
|
+
* Does NOT require database connection
|
|
5
|
+
*/
|
|
6
|
+
import { ProviderBase } from '../../generic/providerBase.js';
|
|
7
|
+
import { IMetadataProvider, ProviderType, PotentialDuplicateRequest, PotentialDuplicateResponse, DatasetResultType, DatasetStatusResultType, DatasetItemFilterType, ILocalStorageProvider, EntityMergeOptions } from '../../generic/interfaces.js';
|
|
8
|
+
import { UserInfo } from '../../generic/securityInfo.js';
|
|
9
|
+
import { RecordDependency, RecordMergeRequest, RecordMergeResult } from '../../generic/entityInfo.js';
|
|
10
|
+
import { CompositeKey } from '../../generic/compositeKey.js';
|
|
11
|
+
import { TransactionGroupBase } from '../../generic/transactionGroup.js';
|
|
12
|
+
export declare class TestMetadataProvider extends ProviderBase {
|
|
13
|
+
private _allowRefresh;
|
|
14
|
+
private _mockMetadata;
|
|
15
|
+
private _getMetadataCallCount;
|
|
16
|
+
private _mockDelay;
|
|
17
|
+
constructor();
|
|
18
|
+
protected get AllowRefresh(): boolean;
|
|
19
|
+
setAllowRefresh(value: boolean): void;
|
|
20
|
+
get ProviderType(): ProviderType;
|
|
21
|
+
get DatabaseConnection(): any;
|
|
22
|
+
getCallCount(): number;
|
|
23
|
+
resetCallCount(): void;
|
|
24
|
+
setMockDelay(ms: number): void;
|
|
25
|
+
setMockMetadata(metadata: any): void;
|
|
26
|
+
GetEntityRecordName(): Promise<string>;
|
|
27
|
+
GetEntityRecordNames(): Promise<any[]>;
|
|
28
|
+
GetRecordFavoriteStatus(): Promise<boolean>;
|
|
29
|
+
SetRecordFavoriteStatus(): Promise<void>;
|
|
30
|
+
protected InternalRunView(): Promise<any>;
|
|
31
|
+
protected InternalRunViews(): Promise<any[]>;
|
|
32
|
+
protected InternalRunQuery(): Promise<any>;
|
|
33
|
+
protected InternalRunQueries(): Promise<any[]>;
|
|
34
|
+
protected GetCurrentUser(): Promise<UserInfo>;
|
|
35
|
+
GetRecordDependencies(entityName: string, compositeKey: CompositeKey, contextUser?: UserInfo): Promise<RecordDependency[]>;
|
|
36
|
+
GetRecordDuplicates(params: PotentialDuplicateRequest, contextUser?: UserInfo): Promise<PotentialDuplicateResponse>;
|
|
37
|
+
MergeRecords(request: RecordMergeRequest, contextUser?: UserInfo, options?: EntityMergeOptions): Promise<RecordMergeResult>;
|
|
38
|
+
GetDatasetByName(datasetName: string, itemFilters?: DatasetItemFilterType[], contextUser?: UserInfo, providerToUse?: IMetadataProvider): Promise<DatasetResultType>;
|
|
39
|
+
GetDatasetStatusByName(datasetName: string, itemFilters?: DatasetItemFilterType[], contextUser?: UserInfo, providerToUse?: IMetadataProvider): Promise<DatasetStatusResultType>;
|
|
40
|
+
get InstanceConnectionString(): string;
|
|
41
|
+
CreateTransactionGroup(): Promise<TransactionGroupBase>;
|
|
42
|
+
get LocalStorageProvider(): ILocalStorageProvider;
|
|
43
|
+
protected get Metadata(): IMetadataProvider;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=TestMetadataProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestMetadataProvider.d.ts","sourceRoot":"","sources":["../../../src/__tests__/mocks/TestMetadataProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EACH,iBAAiB,EACjB,YAAY,EACZ,yBAAyB,EACzB,0BAA0B,EAC1B,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAErB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,qBAAa,oBAAqB,SAAQ,YAAY;IAClD,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,qBAAqB,CAAK;IAClC,OAAO,CAAC,UAAU,CAAO;;IAMzB,SAAS,KAAK,YAAY,IAAI,OAAO,CAEpC;IAEM,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI5C,IAAW,YAAY,IAAI,YAAY,CAEtC;IAED,IAAW,kBAAkB,IAAI,GAAG,CAEnC;IAEM,YAAY,IAAI,MAAM;IAItB,cAAc,IAAI,IAAI;IAItB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI9B,eAAe,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI;IAQ9B,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAItC,oBAAoB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAItC,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC;IAI3C,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;cAIrC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC;cAI/B,gBAAgB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;cAIlC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC;cAIhC,kBAAkB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;cAKpC,cAAc,IAAI,OAAO,CAAC,QAAQ,CAAC;IAYtC,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAI1H,mBAAmB,CAAC,MAAM,EAAE,yBAAyB,EAAE,WAAW,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAOnH,YAAY,CAAC,OAAO,EAAE,kBAAkB,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAU3H,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,qBAAqB,EAAE,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA0FnK,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,qBAAqB,EAAE,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAW5L,IAAW,wBAAwB,IAAI,MAAM,CAE5C;IAEY,sBAAsB,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAIpE,IAAW,oBAAoB,IAAI,qBAAqB,CAMvD;IAED,SAAS,KAAK,QAAQ,IAAI,iBAAiB,CAE1C;CACJ"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Test Mock for ProviderBase
|
|
4
|
+
* Provides minimal implementation for testing metadata refresh logic
|
|
5
|
+
* Does NOT require database connection
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.TestMetadataProvider = void 0;
|
|
9
|
+
const providerBase_1 = require("../../generic/providerBase.js");
|
|
10
|
+
const interfaces_1 = require("../../generic/interfaces.js");
|
|
11
|
+
const securityInfo_1 = require("../../generic/securityInfo.js");
|
|
12
|
+
const entityInfo_1 = require("../../generic/entityInfo.js");
|
|
13
|
+
class TestMetadataProvider extends providerBase_1.ProviderBase {
|
|
14
|
+
constructor() {
|
|
15
|
+
super();
|
|
16
|
+
this._allowRefresh = true;
|
|
17
|
+
this._mockMetadata = null;
|
|
18
|
+
this._getMetadataCallCount = 0;
|
|
19
|
+
this._mockDelay = 100; // milliseconds
|
|
20
|
+
}
|
|
21
|
+
get AllowRefresh() {
|
|
22
|
+
return this._allowRefresh;
|
|
23
|
+
}
|
|
24
|
+
setAllowRefresh(value) {
|
|
25
|
+
this._allowRefresh = value;
|
|
26
|
+
}
|
|
27
|
+
get ProviderType() {
|
|
28
|
+
return 'Database';
|
|
29
|
+
}
|
|
30
|
+
get DatabaseConnection() {
|
|
31
|
+
return {}; // Mock connection
|
|
32
|
+
}
|
|
33
|
+
getCallCount() {
|
|
34
|
+
return this._getMetadataCallCount;
|
|
35
|
+
}
|
|
36
|
+
resetCallCount() {
|
|
37
|
+
this._getMetadataCallCount = 0;
|
|
38
|
+
}
|
|
39
|
+
setMockDelay(ms) {
|
|
40
|
+
this._mockDelay = ms;
|
|
41
|
+
}
|
|
42
|
+
setMockMetadata(metadata) {
|
|
43
|
+
this._mockMetadata = metadata;
|
|
44
|
+
}
|
|
45
|
+
// Don't override GetAllMetadata() - let the base class handle it
|
|
46
|
+
// It will call our GetDatasetByName() which properly formats the data
|
|
47
|
+
// Stub implementations for other provider methods
|
|
48
|
+
async GetEntityRecordName() {
|
|
49
|
+
return 'Test Record';
|
|
50
|
+
}
|
|
51
|
+
async GetEntityRecordNames() {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
async GetRecordFavoriteStatus() {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
async SetRecordFavoriteStatus() {
|
|
58
|
+
// No-op
|
|
59
|
+
}
|
|
60
|
+
async InternalRunView() {
|
|
61
|
+
return { Success: true, Results: [], RowCount: 0, TotalRowCount: 0, ExecutionTime: 0, ErrorMessage: '', UserViewRunID: '' };
|
|
62
|
+
}
|
|
63
|
+
async InternalRunViews() {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
async InternalRunQuery() {
|
|
67
|
+
return { Success: true, Results: [], RowCount: 0, TotalRowCount: 0, ExecutionTime: 0, ErrorMessage: '', QueryID: '', QueryName: '' };
|
|
68
|
+
}
|
|
69
|
+
async InternalRunQueries() {
|
|
70
|
+
return [];
|
|
71
|
+
}
|
|
72
|
+
// Required abstract methods (minimal stubs for testing - no database needed)
|
|
73
|
+
async GetCurrentUser() {
|
|
74
|
+
// Return a minimal UserInfo object that satisfies TypeScript
|
|
75
|
+
const user = new securityInfo_1.UserInfo();
|
|
76
|
+
user.ID = 'test-user-id';
|
|
77
|
+
user.Name = 'Test User';
|
|
78
|
+
user.Email = 'test@example.com';
|
|
79
|
+
user.FirstName = 'Test';
|
|
80
|
+
user.LastName = 'User';
|
|
81
|
+
user.IsActive = true;
|
|
82
|
+
return user;
|
|
83
|
+
}
|
|
84
|
+
async GetRecordDependencies(entityName, compositeKey, contextUser) {
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
async GetRecordDuplicates(params, contextUser) {
|
|
88
|
+
const response = new interfaces_1.PotentialDuplicateResponse();
|
|
89
|
+
response.Status = 'Success';
|
|
90
|
+
response.PotentialDuplicateResult = [];
|
|
91
|
+
return response;
|
|
92
|
+
}
|
|
93
|
+
async MergeRecords(request, contextUser, options) {
|
|
94
|
+
const result = new entityInfo_1.RecordMergeResult();
|
|
95
|
+
result.Success = true;
|
|
96
|
+
result.OverallStatus = 'Success';
|
|
97
|
+
result.RecordStatus = [];
|
|
98
|
+
result.RecordMergeLogID = null;
|
|
99
|
+
result.Request = request;
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
async GetDatasetByName(datasetName, itemFilters, contextUser, providerToUse) {
|
|
103
|
+
// Simulate the MJ_Metadata dataset structure that GetAllMetadata expects
|
|
104
|
+
if (datasetName === 'MJ_Metadata') {
|
|
105
|
+
// Track calls and simulate delay
|
|
106
|
+
this._getMetadataCallCount++;
|
|
107
|
+
await new Promise(resolve => setTimeout(resolve, this._mockDelay));
|
|
108
|
+
// Use mock data if set, otherwise use default
|
|
109
|
+
const baseData = this._mockMetadata || {
|
|
110
|
+
Applications: [],
|
|
111
|
+
Entities: [
|
|
112
|
+
{
|
|
113
|
+
ID: `entity-${this._getMetadataCallCount}`,
|
|
114
|
+
Name: `Test Entity ${this._getMetadataCallCount}`,
|
|
115
|
+
SchemaName: 'dbo',
|
|
116
|
+
BaseView: `vwTestEntity${this._getMetadataCallCount}`,
|
|
117
|
+
BaseTable: `TestEntity${this._getMetadataCallCount}`,
|
|
118
|
+
EntityFields: [
|
|
119
|
+
{ ID: `f${this._getMetadataCallCount}-1`, EntityID: `entity-${this._getMetadataCallCount}`, Name: 'ID', Type: 'uniqueidentifier', IsPrimaryKey: true, Sequence: 1 },
|
|
120
|
+
{ ID: `f${this._getMetadataCallCount}-2`, EntityID: `entity-${this._getMetadataCallCount}`, Name: 'Name', Type: 'nvarchar', IsPrimaryKey: false, Sequence: 2 },
|
|
121
|
+
]
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
EntityFields: [
|
|
125
|
+
{ ID: `f${this._getMetadataCallCount}-1`, EntityID: `entity-${this._getMetadataCallCount}`, Name: 'ID', Type: 'uniqueidentifier', IsPrimaryKey: true, Sequence: 1 },
|
|
126
|
+
{ ID: `f${this._getMetadataCallCount}-2`, EntityID: `entity-${this._getMetadataCallCount}`, Name: 'Name', Type: 'nvarchar', IsPrimaryKey: false, Sequence: 2 },
|
|
127
|
+
],
|
|
128
|
+
EntityFieldValues: [],
|
|
129
|
+
EntityPermissions: [],
|
|
130
|
+
EntityRelationships: [],
|
|
131
|
+
EntitySettings: [],
|
|
132
|
+
ApplicationEntities: [],
|
|
133
|
+
ApplicationSettings: [],
|
|
134
|
+
Roles: [],
|
|
135
|
+
RowLevelSecurityFilters: [],
|
|
136
|
+
AuditLogTypes: [],
|
|
137
|
+
Authorizations: [],
|
|
138
|
+
QueryCategories: [],
|
|
139
|
+
Queries: [],
|
|
140
|
+
QueryFields: [],
|
|
141
|
+
QueryPermissions: [],
|
|
142
|
+
QueryEntities: [],
|
|
143
|
+
QueryParameters: [],
|
|
144
|
+
EntityDocumentTypes: [],
|
|
145
|
+
Libraries: [],
|
|
146
|
+
ExplorerNavigationItems: [],
|
|
147
|
+
};
|
|
148
|
+
return {
|
|
149
|
+
DatasetID: 'mock-dataset-id',
|
|
150
|
+
DatasetName: 'MJ_Metadata',
|
|
151
|
+
Success: true,
|
|
152
|
+
Status: 'Success',
|
|
153
|
+
LatestUpdateDate: new Date(),
|
|
154
|
+
Results: [
|
|
155
|
+
{ Code: 'Applications', EntityName: 'Applications', EntityID: '1', Results: baseData.Applications || [] },
|
|
156
|
+
{ Code: 'Entities', EntityName: 'Entities', EntityID: '2', Results: baseData.Entities || [] },
|
|
157
|
+
{ Code: 'EntityFields', EntityName: 'Entity Fields', EntityID: '3', Results: baseData.EntityFields || [] },
|
|
158
|
+
{ Code: 'EntityFieldValues', EntityName: 'Entity Field Values', EntityID: '4', Results: baseData.EntityFieldValues || [] },
|
|
159
|
+
{ Code: 'EntityPermissions', EntityName: 'Entity Permissions', EntityID: '5', Results: baseData.EntityPermissions || [] },
|
|
160
|
+
{ Code: 'EntityRelationships', EntityName: 'Entity Relationships', EntityID: '6', Results: baseData.EntityRelationships || [] },
|
|
161
|
+
{ Code: 'EntitySettings', EntityName: 'Entity Settings', EntityID: '7', Results: baseData.EntitySettings || [] },
|
|
162
|
+
{ Code: 'ApplicationEntities', EntityName: 'Application Entities', EntityID: '8', Results: baseData.ApplicationEntities || [] },
|
|
163
|
+
{ Code: 'ApplicationSettings', EntityName: 'Application Settings', EntityID: '9', Results: baseData.ApplicationSettings || [] },
|
|
164
|
+
{ Code: 'Roles', EntityName: 'Roles', EntityID: '10', Results: baseData.Roles || [] },
|
|
165
|
+
{ Code: 'RowLevelSecurityFilters', EntityName: 'Row Level Security Filters', EntityID: '11', Results: baseData.RowLevelSecurityFilters || [] },
|
|
166
|
+
{ Code: 'AuditLogTypes', EntityName: 'Audit Log Types', EntityID: '12', Results: baseData.AuditLogTypes || [] },
|
|
167
|
+
{ Code: 'Authorizations', EntityName: 'Authorizations', EntityID: '13', Results: baseData.Authorizations || [] },
|
|
168
|
+
{ Code: 'QueryCategories', EntityName: 'Query Categories', EntityID: '14', Results: baseData.QueryCategories || [] },
|
|
169
|
+
{ Code: 'Queries', EntityName: 'Queries', EntityID: '15', Results: baseData.Queries || [] },
|
|
170
|
+
{ Code: 'QueryFields', EntityName: 'Query Fields', EntityID: '16', Results: baseData.QueryFields || [] },
|
|
171
|
+
{ Code: 'QueryPermissions', EntityName: 'Query Permissions', EntityID: '17', Results: baseData.QueryPermissions || [] },
|
|
172
|
+
{ Code: 'QueryEntities', EntityName: 'Query Entities', EntityID: '18', Results: baseData.QueryEntities || [] },
|
|
173
|
+
{ Code: 'QueryParameters', EntityName: 'Query Parameters', EntityID: '19', Results: baseData.QueryParameters || [] },
|
|
174
|
+
{ Code: 'EntityDocumentTypes', EntityName: 'Entity Document Types', EntityID: '20', Results: baseData.EntityDocumentTypes || [] },
|
|
175
|
+
{ Code: 'Libraries', EntityName: 'Libraries', EntityID: '21', Results: baseData.Libraries || [] },
|
|
176
|
+
{ Code: 'ExplorerNavigationItems', EntityName: 'Explorer Navigation Items', EntityID: '22', Results: baseData.ExplorerNavigationItems || [] },
|
|
177
|
+
],
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
DatasetID: 'mock-dataset-id',
|
|
182
|
+
DatasetName: datasetName,
|
|
183
|
+
Success: true,
|
|
184
|
+
Status: 'Success',
|
|
185
|
+
LatestUpdateDate: new Date(),
|
|
186
|
+
Results: []
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
async GetDatasetStatusByName(datasetName, itemFilters, contextUser, providerToUse) {
|
|
190
|
+
return {
|
|
191
|
+
DatasetID: 'mock-dataset-id',
|
|
192
|
+
DatasetName: datasetName,
|
|
193
|
+
Success: true,
|
|
194
|
+
Status: 'Ready',
|
|
195
|
+
LatestUpdateDate: new Date(),
|
|
196
|
+
EntityUpdateDates: []
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
get InstanceConnectionString() {
|
|
200
|
+
return 'mock://test-connection';
|
|
201
|
+
}
|
|
202
|
+
async CreateTransactionGroup() {
|
|
203
|
+
throw new Error('TransactionGroup not implemented in test mock - not needed for metadata tests');
|
|
204
|
+
}
|
|
205
|
+
get LocalStorageProvider() {
|
|
206
|
+
return {
|
|
207
|
+
GetItem: async (key) => null,
|
|
208
|
+
SetItem: async (key, value) => { },
|
|
209
|
+
Remove: async (key) => { }
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
get Metadata() {
|
|
213
|
+
return this;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
exports.TestMetadataProvider = TestMetadataProvider;
|
|
217
|
+
//# sourceMappingURL=TestMetadataProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestMetadataProvider.js","sourceRoot":"","sources":["../../../src/__tests__/mocks/TestMetadataProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Concurrency Tests for ProviderBase
|
|
3
|
+
*
|
|
4
|
+
* Purpose: Test behavior under concurrent access patterns
|
|
5
|
+
* These tests will FAIL before the atomic update fix and PASS after
|
|
6
|
+
*
|
|
7
|
+
* Related: METADATA_THREAD_SAFETY_IMPLEMENTATION.md - Phase 3, Task 3.1
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=providerBase.concurrency.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerBase.concurrency.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/providerBase.concurrency.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Concurrency Tests for ProviderBase
|
|
4
|
+
*
|
|
5
|
+
* Purpose: Test behavior under concurrent access patterns
|
|
6
|
+
* These tests will FAIL before the atomic update fix and PASS after
|
|
7
|
+
*
|
|
8
|
+
* Related: METADATA_THREAD_SAFETY_IMPLEMENTATION.md - Phase 3, Task 3.1
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
const interfaces_1 = require("../generic/interfaces.js");
|
|
12
|
+
const TestMetadataProvider_1 = require("./mocks/TestMetadataProvider.js");
|
|
13
|
+
describe('ProviderBase Concurrency Tests', () => {
|
|
14
|
+
let provider;
|
|
15
|
+
let testConfig;
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
provider = new TestMetadataProvider_1.TestMetadataProvider();
|
|
18
|
+
testConfig = new interfaces_1.ProviderConfigDataBase({}, '__mj', [], [], true);
|
|
19
|
+
});
|
|
20
|
+
describe('Parallel Config() Calls', () => {
|
|
21
|
+
test('Multiple parallel Config() calls complete successfully', async () => {
|
|
22
|
+
/**
|
|
23
|
+
* Simulates the actual bug scenario: parallel operations triggering Config()
|
|
24
|
+
* Expected behavior after fix: All complete successfully with valid metadata
|
|
25
|
+
*/
|
|
26
|
+
provider.resetCallCount();
|
|
27
|
+
// Start 10 parallel Config() calls
|
|
28
|
+
const promises = Array(10).fill(0).map(() => provider.Config(testConfig));
|
|
29
|
+
// All should complete without errors
|
|
30
|
+
const results = await Promise.all(promises);
|
|
31
|
+
// Verify results
|
|
32
|
+
expect(results.every(r => r === true)).toBe(true);
|
|
33
|
+
// Metadata should be populated (not empty)
|
|
34
|
+
expect(provider.Entities).toBeDefined();
|
|
35
|
+
expect(provider.Entities.length).toBeGreaterThan(0);
|
|
36
|
+
// All entities should have Fields defined
|
|
37
|
+
for (const entity of provider.Entities) {
|
|
38
|
+
expect(entity.Fields).toBeDefined();
|
|
39
|
+
expect(entity.Fields.length).toBeGreaterThan(0);
|
|
40
|
+
}
|
|
41
|
+
console.log(`GetAllMetadata called ${provider.getCallCount()} times for 10 parallel Config() calls`);
|
|
42
|
+
});
|
|
43
|
+
test('Parallel Config() with different configs', async () => {
|
|
44
|
+
/**
|
|
45
|
+
* Tests concurrent configs with different settings
|
|
46
|
+
* Ensures last config wins but no corruption occurs
|
|
47
|
+
*/
|
|
48
|
+
const configs = [
|
|
49
|
+
new interfaces_1.ProviderConfigDataBase({}, '__mj1', [], [], true),
|
|
50
|
+
new interfaces_1.ProviderConfigDataBase({}, '__mj2', [], [], true),
|
|
51
|
+
new interfaces_1.ProviderConfigDataBase({}, '__mj3', [], [], true),
|
|
52
|
+
];
|
|
53
|
+
const results = await Promise.all(configs.map(config => provider.Config(config)));
|
|
54
|
+
expect(results.every(r => r === true)).toBe(true);
|
|
55
|
+
expect(provider.Entities.length).toBeGreaterThan(0);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
describe('Reading Metadata During Refresh', () => {
|
|
59
|
+
test('Reading Entities during refresh returns valid data', async () => {
|
|
60
|
+
/**
|
|
61
|
+
* CRITICAL TEST: This documents the core issue
|
|
62
|
+
* Before fix: Readers may see empty metadata during refresh
|
|
63
|
+
* After fix: Readers see old metadata until refresh completes
|
|
64
|
+
*/
|
|
65
|
+
// Pre-populate with initial metadata
|
|
66
|
+
await provider.Config(testConfig);
|
|
67
|
+
expect(provider.Entities.length).toBeGreaterThan(0);
|
|
68
|
+
const initialEntityCount = provider.Entities.length;
|
|
69
|
+
// Start a refresh (don't await yet)
|
|
70
|
+
const refreshPromise = provider.Config(testConfig);
|
|
71
|
+
// While refresh is in progress, try to read metadata
|
|
72
|
+
const readsDuringRefresh = [];
|
|
73
|
+
const readPromises = [];
|
|
74
|
+
// Read multiple times during the refresh window
|
|
75
|
+
for (let i = 0; i < 5; i++) {
|
|
76
|
+
readPromises.push((async () => {
|
|
77
|
+
await new Promise(resolve => setTimeout(resolve, i * 20));
|
|
78
|
+
const entities = provider.Entities;
|
|
79
|
+
readsDuringRefresh.push(entities?.length ?? -1);
|
|
80
|
+
// CRITICAL: Should NEVER be undefined or empty after initial load
|
|
81
|
+
expect(entities).toBeDefined();
|
|
82
|
+
expect(Array.isArray(entities)).toBe(true);
|
|
83
|
+
// After fix: Should always have data (old or new)
|
|
84
|
+
// Before fix: Might be empty array
|
|
85
|
+
if (entities.length === 0) {
|
|
86
|
+
console.warn('WARNING: Saw empty entities during refresh (this is the bug)');
|
|
87
|
+
}
|
|
88
|
+
})());
|
|
89
|
+
}
|
|
90
|
+
// Wait for refresh to complete
|
|
91
|
+
await Promise.all([refreshPromise, ...readPromises]);
|
|
92
|
+
// After refresh, should definitely have data
|
|
93
|
+
expect(provider.Entities.length).toBeGreaterThan(0);
|
|
94
|
+
console.log('Entity counts during refresh:', readsDuringRefresh);
|
|
95
|
+
console.log('Final entity count:', provider.Entities.length);
|
|
96
|
+
});
|
|
97
|
+
test('GetEntityObject during refresh does not fail', async () => {
|
|
98
|
+
/**
|
|
99
|
+
* Simulates QueryEntity trying to create child entities during parallel saves
|
|
100
|
+
* This is the exact scenario causing "Entity not found in metadata" errors
|
|
101
|
+
*/
|
|
102
|
+
await provider.Config(testConfig);
|
|
103
|
+
// Start refresh
|
|
104
|
+
const refreshPromise = provider.Config(testConfig);
|
|
105
|
+
// Try to access entity metadata during refresh
|
|
106
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
107
|
+
// Should be able to read Entities array
|
|
108
|
+
const entities = provider.Entities;
|
|
109
|
+
expect(entities).toBeDefined();
|
|
110
|
+
if (entities.length > 0) {
|
|
111
|
+
// Should be able to find entity
|
|
112
|
+
const entity = entities.find(e => e.Name.includes('Test Entity'));
|
|
113
|
+
expect(entity).toBeDefined();
|
|
114
|
+
// Should be able to access Fields
|
|
115
|
+
if (entity) {
|
|
116
|
+
expect(entity.Fields).toBeDefined();
|
|
117
|
+
expect(entity.Fields.length).toBeGreaterThan(0);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
await refreshPromise;
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
describe('Simulated Production Scenarios', () => {
|
|
124
|
+
test('Metadata sync scenario: parallel query saves with refreshes', async () => {
|
|
125
|
+
/**
|
|
126
|
+
* Simulates: mj sync push with parallel query entity saves
|
|
127
|
+
* Each query save may trigger RefreshRelatedMetadata
|
|
128
|
+
* This is the HOT PATH where the bug manifests
|
|
129
|
+
*/
|
|
130
|
+
// Initial metadata load (like PushService.ts:218)
|
|
131
|
+
await provider.Config(testConfig);
|
|
132
|
+
// Simulate 20 parallel query saves, each accessing metadata
|
|
133
|
+
const querySaves = Array(20).fill(0).map(async (_, i) => {
|
|
134
|
+
// Random delay to simulate different save times
|
|
135
|
+
await new Promise(resolve => setTimeout(resolve, Math.random() * 100));
|
|
136
|
+
// Each save accesses metadata (like QueryEntity.extractAndSyncData)
|
|
137
|
+
const entities = provider.Entities;
|
|
138
|
+
// CRITICAL: Should always have valid data
|
|
139
|
+
expect(entities).toBeDefined();
|
|
140
|
+
expect(Array.isArray(entities)).toBe(true);
|
|
141
|
+
// Some saves trigger a refresh (like RefreshRelatedMetadata)
|
|
142
|
+
if (i % 5 === 0) {
|
|
143
|
+
await provider.Refresh();
|
|
144
|
+
}
|
|
145
|
+
// Continue accessing metadata
|
|
146
|
+
const entitiesAfterRefresh = provider.Entities;
|
|
147
|
+
expect(entitiesAfterRefresh).toBeDefined();
|
|
148
|
+
return true;
|
|
149
|
+
});
|
|
150
|
+
// All should complete successfully
|
|
151
|
+
const results = await Promise.all(querySaves);
|
|
152
|
+
expect(results.every(r => r === true)).toBe(true);
|
|
153
|
+
});
|
|
154
|
+
test('High concurrency: 50 parallel operations', async () => {
|
|
155
|
+
/**
|
|
156
|
+
* Stress test with high concurrency
|
|
157
|
+
* Validates that system remains stable under load
|
|
158
|
+
*/
|
|
159
|
+
await provider.Config(testConfig);
|
|
160
|
+
const operations = Array(50).fill(0).map(async (_, i) => {
|
|
161
|
+
await new Promise(resolve => setTimeout(resolve, Math.random() * 50));
|
|
162
|
+
// Mix of reads and refreshes
|
|
163
|
+
if (i % 10 === 0) {
|
|
164
|
+
await provider.Refresh();
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
const entities = provider.Entities;
|
|
168
|
+
expect(entities).toBeDefined();
|
|
169
|
+
}
|
|
170
|
+
return true;
|
|
171
|
+
});
|
|
172
|
+
const results = await Promise.all(operations);
|
|
173
|
+
expect(results.every(r => r === true)).toBe(true);
|
|
174
|
+
});
|
|
175
|
+
test('Rapid successive refreshes', async () => {
|
|
176
|
+
/**
|
|
177
|
+
* Tests rapid refresh calls (like might happen in error retry scenarios)
|
|
178
|
+
* Should handle gracefully without corruption
|
|
179
|
+
*/
|
|
180
|
+
await provider.Config(testConfig);
|
|
181
|
+
provider.resetCallCount();
|
|
182
|
+
// Trigger 5 refreshes in rapid succession
|
|
183
|
+
const refreshes = Array(5).fill(0).map(() => provider.Refresh());
|
|
184
|
+
await Promise.all(refreshes);
|
|
185
|
+
// Should have valid metadata
|
|
186
|
+
expect(provider.Entities.length).toBeGreaterThan(0);
|
|
187
|
+
// Should have called GetAllMetadata (but maybe coalesced)
|
|
188
|
+
console.log(`Rapid refresh: GetAllMetadata called ${provider.getCallCount()} times for 5 refresh calls`);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
describe('Edge Cases', () => {
|
|
192
|
+
test('Refresh during entity iteration', async () => {
|
|
193
|
+
/**
|
|
194
|
+
* Simulates CodeGen iterating over md.Entities while refresh happens
|
|
195
|
+
* The array should remain stable during iteration
|
|
196
|
+
*/
|
|
197
|
+
await provider.Config(testConfig);
|
|
198
|
+
// Start iterating
|
|
199
|
+
const iterationResults = [];
|
|
200
|
+
const iterationPromise = (async () => {
|
|
201
|
+
const entities = provider.Entities;
|
|
202
|
+
for (const entity of entities) {
|
|
203
|
+
iterationResults.push(entity.Name);
|
|
204
|
+
await new Promise(resolve => setTimeout(resolve, 20));
|
|
205
|
+
}
|
|
206
|
+
})();
|
|
207
|
+
// Trigger refresh during iteration
|
|
208
|
+
setTimeout(() => provider.Refresh(), 30);
|
|
209
|
+
// Wait for iteration to complete
|
|
210
|
+
await iterationPromise;
|
|
211
|
+
// Should have iterated over some entities
|
|
212
|
+
expect(iterationResults.length).toBeGreaterThan(0);
|
|
213
|
+
});
|
|
214
|
+
test('Reading specific entity during refresh', async () => {
|
|
215
|
+
/**
|
|
216
|
+
* Tests finding a specific entity during refresh
|
|
217
|
+
* Should not fail with "Entity not found"
|
|
218
|
+
*/
|
|
219
|
+
await provider.Config(testConfig);
|
|
220
|
+
// Start refresh
|
|
221
|
+
const refreshPromise = provider.Config(testConfig);
|
|
222
|
+
// Try to find specific entity during refresh
|
|
223
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
224
|
+
const entity = provider.Entities.find(e => e.Name.includes('Test Entity'));
|
|
225
|
+
// Should find entity (old or new data, but should exist)
|
|
226
|
+
expect(entity).toBeDefined();
|
|
227
|
+
await refreshPromise;
|
|
228
|
+
});
|
|
229
|
+
test('Accessing Fields during refresh', async () => {
|
|
230
|
+
/**
|
|
231
|
+
* Tests accessing entity.Fields during refresh
|
|
232
|
+
* This is where "Cannot read properties of undefined (reading 'Fields')" occurs
|
|
233
|
+
*/
|
|
234
|
+
await provider.Config(testConfig);
|
|
235
|
+
const refreshPromise = provider.Config(testConfig);
|
|
236
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
237
|
+
const entities = provider.Entities;
|
|
238
|
+
if (entities && entities.length > 0) {
|
|
239
|
+
const firstEntity = entities[0];
|
|
240
|
+
// CRITICAL: Fields should always be defined
|
|
241
|
+
expect(firstEntity.Fields).toBeDefined();
|
|
242
|
+
expect(Array.isArray(firstEntity.Fields)).toBe(true);
|
|
243
|
+
// Should be able to iterate fields
|
|
244
|
+
for (const field of firstEntity.Fields) {
|
|
245
|
+
expect(field.Name).toBeDefined();
|
|
246
|
+
expect(field.Type).toBeDefined();
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
await refreshPromise;
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
//# sourceMappingURL=providerBase.concurrency.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerBase.concurrency.test.js","sourceRoot":"","sources":["../../src/__tests__/providerBase.concurrency.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baseline Tests for ProviderBase.Refresh() and Config()
|
|
3
|
+
*
|
|
4
|
+
* Purpose: Document current behavior before implementing thread safety fixes
|
|
5
|
+
* These tests establish a baseline to ensure the fix doesn't break existing functionality
|
|
6
|
+
*
|
|
7
|
+
* Related: METADATA_THREAD_SAFETY_IMPLEMENTATION.md - Phase 1, Task 1.3
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=providerBase.refresh.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerBase.refresh.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/providerBase.refresh.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|