@genesislcap/pbc-reporting-ui 14.353.3 → 14.353.4
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/dts/new/components/clone-report-config-modal/clone-report-config-modal.d.ts.map +1 -1
- package/dist/dts/new/components/reporting-configurations/reporting-configurations.d.ts.map +1 -1
- package/dist/dts/new/utils/transformers.d.ts +2 -1
- package/dist/dts/new/utils/transformers.d.ts.map +1 -1
- package/dist/dts/new/utils/transformers.test.d.ts +2 -0
- package/dist/dts/new/utils/transformers.test.d.ts.map +1 -0
- package/dist/esm/new/components/clone-report-config-modal/clone-report-config-modal.js +3 -2
- package/dist/esm/new/components/reporting-configurations/reporting-configurations.js +3 -2
- package/dist/esm/new/utils/transformers.js +63 -22
- package/dist/esm/new/utils/transformers.test.js +419 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +22 -22
- package/src/new/components/clone-report-config-modal/clone-report-config-modal.ts +4 -2
- package/src/new/components/reporting-configurations/reporting-configurations.ts +4 -2
- package/src/new/utils/transformers.test.ts +487 -0
- package/src/new/utils/transformers.ts +71 -11
package/dist/dts/new/components/clone-report-config-modal/clone-report-config-modal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clone-report-config-modal.d.ts","sourceRoot":"","sources":["../../../../../src/new/components/clone-report-config-modal/clone-report-config-modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAiB,cAAc,EAAc,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"clone-report-config-modal.d.ts","sourceRoot":"","sources":["../../../../../src/new/components/clone-report-config-modal/clone-report-config-modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAiB,cAAc,EAAc,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAoBtC,qBAKa,sBAAuB,SAAQ,cAAc;IAC/C,OAAO,EAAE,OAAO,CAAC;IAC1B,sBAAsB,EAAE,KAAK,CAAC;IAClB,mBAAmB,EAAE,OAAO,CAAC,kBAAkB,CAAC;IAChD,UAAU,EAAE,MAAM,CAAM;IACxB,QAAQ,EAAE,MAAM,CAAM;IAE5B,sBAAsB,CAAC,EAAE,EAAE,MAAM;IAOjC,qBAAqB,CAAC,EAAE,EAAE,MAAM;IAKtC,2BAA2B;IAM3B,cAAc;IAKd,OAAO,CAAC,YAAY;IASd,iBAAiB;IAqCvB,cAAc,CAAC,OAAO,EAAE,MAAM;CAO/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporting-configurations.d.ts","sourceRoot":"","sources":["../../../../../src/new/components/reporting-configurations/reporting-configurations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,OAAO,EAAwC,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAEpD,OAAO,EAEL,iBAAiB,EACjB,wBAAwB,EAEzB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"reporting-configurations.d.ts","sourceRoot":"","sources":["../../../../../src/new/components/reporting-configurations/reporting-configurations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,OAAO,EAAwC,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAEpD,OAAO,EAEL,iBAAiB,EACjB,wBAAwB,EAEzB,MAAM,6BAA6B,CAAC;AAarC,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,wDAAwD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIhG,qBAKa,uBAAwB,SAAQ,4BAAqD;IACvF,OAAO,EAAE,OAAO,CAAC;IAC1B,8BAA8B,EAAE,wBAAwB,CAAC;IAC7C,YAAY,EAAE,MAAM,CAAM;IAC1B,gBAAgB,EAAE,sBAAsB,CAAC;IAC/C,IAAI,EAAG,IAAI,CAAC;IAEX,eAAe;;;;;QAWpB;IAEF,sBAAsB;IAMhB,uBAAuB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE;IAqBxE,aAAa;IAmHb,cAAc;YAkBA,kBAAkB;YA8BlB,SAAS;IA6BvB,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAiBjD,0BAA0B,CAAC,CAAC,KAAA;CAGnC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import type { JSONSchema7 } from 'json-schema';
|
|
1
2
|
import type { DatasourceInputTypes, DatasourceName, ReportingConfig } from '../store';
|
|
2
3
|
import { Display, Genesis } from '../types';
|
|
3
4
|
export declare function transformToServerPayload(state: ReportingConfig): Genesis.ServerReportConfig;
|
|
4
|
-
export declare function
|
|
5
|
+
export declare function transformFromServerPayload(payload: Genesis.ServerReportConfig, getSchema: (name: string) => Promise<JSONSchema7>): Promise<ReportingConfig>;
|
|
5
6
|
export declare function datasourceInputForDisplay(input: DatasourceInputTypes): Display.DatasourceInputTypes;
|
|
6
7
|
export declare function datasourceInputFromDisplay(display: Display.DatasourceInputTypes): DatasourceInputTypes;
|
|
7
8
|
export declare function buildDatasourceName(key: string, type: DatasourceInputTypes): DatasourceName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformers.d.ts","sourceRoot":"","sources":["../../../../src/new/utils/transformers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,oBAAoB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"transformers.d.ts","sourceRoot":"","sources":["../../../../src/new/utils/transformers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAc,oBAAoB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAElG,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAE5C,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAiB3F;AAiCD,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,OAAO,CAAC,kBAAkB,EACnC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,GAChD,OAAO,CAAC,eAAe,CAAC,CAuE1B;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,oBAAoB,CAI9B;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,CAAC,oBAAoB,GACpC,oBAAoB,CAItB;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,cAAc,CAE3F"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformers.test.d.ts","sourceRoot":"","sources":["../../../../src/new/utils/transformers.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __awaiter, __decorate } from "tslib";
|
|
2
2
|
import { Connect } from '@genesislcap/foundation-comms';
|
|
3
3
|
import { customElement, GenesisElement, observable } from '@genesislcap/web-core';
|
|
4
|
-
import { showNotificationToast,
|
|
4
|
+
import { getDatasourceSchema, showNotificationToast, transformFromServerPayload, validateReportingConfig, } from '../../utils';
|
|
5
5
|
import { cloneReportConfigModalStyles as styles } from './clone-report-config-modal.styles';
|
|
6
6
|
import { CloneReportConfigModalTemplate as template } from './clone-report-config-modal.template';
|
|
7
7
|
const EXCLUDED_FIELDS = [
|
|
@@ -52,7 +52,8 @@ let CloneReportConfigModal = class CloneReportConfigModal extends GenesisElement
|
|
|
52
52
|
var _a, _b;
|
|
53
53
|
try {
|
|
54
54
|
const DETAILS = Object.assign(Object.assign({}, this.filterFields(this.reportConfigDetails, EXCLUDED_FIELDS)), { NAME: this.reportName, FILE_NAME: this.fileName });
|
|
55
|
-
const
|
|
55
|
+
const getSchema = getDatasourceSchema(this.connect);
|
|
56
|
+
const result = yield validateReportingConfig(this.connect)(yield transformFromServerPayload(DETAILS, getSchema));
|
|
56
57
|
if (result.k === 'err') {
|
|
57
58
|
this.showErrorToast((_a = result.info) === null || _a === void 0 ? void 0 : _a.join('\n\n'));
|
|
58
59
|
return;
|
|
@@ -8,7 +8,7 @@ import { getActionsMenuDef, GridProRendererTypes, } from '@genesislcap/rapid-gri
|
|
|
8
8
|
import { customElement, GenesisElement, html, observable } from '@genesislcap/web-core';
|
|
9
9
|
import { writeReduxState, reduxBlankState, StorageKey } from '../../store';
|
|
10
10
|
import { Permissions } from '../../types';
|
|
11
|
-
import { formatDate, getFormattedDateTime, permissionGuard, showNotificationToast,
|
|
11
|
+
import { formatDate, getDatasourceSchema, getFormattedDateTime, permissionGuard, showNotificationToast, transformFromServerPayload, } from '../../utils';
|
|
12
12
|
import { getFilterParams } from '../../utils/date-filter-params';
|
|
13
13
|
import { ReportingEvents } from '../../utils/event-map';
|
|
14
14
|
import { ReportingConfigurationStyles as styles } from './reporting-configurations.styles';
|
|
@@ -41,7 +41,8 @@ let ReportingConfigurations = class ReportingConfigurations extends EventEmitter
|
|
|
41
41
|
const data = (_b = response.REPLY) === null || _b === void 0 ? void 0 : _b[0];
|
|
42
42
|
if (!data)
|
|
43
43
|
throw new Error(`No data returned for edit report with ID ${ID}`);
|
|
44
|
-
const
|
|
44
|
+
const getSchema = getDatasourceSchema(this.connect);
|
|
45
|
+
const transformed = yield transformFromServerPayload(data, getSchema);
|
|
45
46
|
console.log({ transformed });
|
|
46
47
|
writeReduxState(transformed);
|
|
47
48
|
this.$emit(ReportingEvents.setReportConfigDisplayMode, 'edit');
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __rest } from "tslib";
|
|
1
|
+
import { __awaiter, __rest } from "tslib";
|
|
2
2
|
export function transformToServerPayload(state) {
|
|
3
3
|
var _a, _b;
|
|
4
4
|
const { datasourceConfig, baseConfig } = state;
|
|
@@ -12,30 +12,71 @@ export function transformToServerPayload(state) {
|
|
|
12
12
|
? restBaseConfig.DOCUMENT_TEMPLATE_ID
|
|
13
13
|
: null, DATA_SOURCES: Object.values(datasourceConfig) });
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
DESCRIPTION,
|
|
22
|
-
OUTPUT_FORMAT,
|
|
23
|
-
FILE_NAME,
|
|
24
|
-
AUTO_DISPATCH,
|
|
25
|
-
DESTINATION_IDS,
|
|
26
|
-
OUTPUT_DIRECTORY,
|
|
27
|
-
DOCUMENT_TEMPLATE_ID }, (SCHEDULES.length > 0 && { SCHEDULE: SCHEDULES[0] }));
|
|
15
|
+
/**
|
|
16
|
+
* Cleans up orphaned field references from transformer configuration
|
|
17
|
+
* by validating against current schema
|
|
18
|
+
*/
|
|
19
|
+
function cleanupTransformerConfig(config, validFields) {
|
|
20
|
+
var _a;
|
|
28
21
|
return {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
22
|
+
INCLUDE_COLUMNS: (_a = config.INCLUDE_COLUMNS) === null || _a === void 0 ? void 0 : _a.filter((field) => validFields.has(field)),
|
|
23
|
+
COLUMN_RENAMES: config.COLUMN_RENAMES
|
|
24
|
+
? Object.fromEntries(Object.entries(config.COLUMN_RENAMES).filter(([key]) => validFields.has(key)))
|
|
25
|
+
: undefined,
|
|
26
|
+
COLUMN_FORMATS: config.COLUMN_FORMATS
|
|
27
|
+
? Object.fromEntries(Object.entries(config.COLUMN_FORMATS).filter(([key]) => validFields.has(key)))
|
|
28
|
+
: undefined,
|
|
29
|
+
COLUMN_TRANSFORMS: config.COLUMN_TRANSFORMS
|
|
30
|
+
? Object.fromEntries(Object.entries(config.COLUMN_TRANSFORMS).filter(([key]) => validFields.has(key)))
|
|
31
|
+
: undefined,
|
|
32
|
+
ROW_FILTERS: config.ROW_FILTERS,
|
|
37
33
|
};
|
|
38
34
|
}
|
|
35
|
+
// TODO: we'll suppress the bigints on the server so won't need to do this
|
|
36
|
+
// horrible destructing
|
|
37
|
+
export function transformFromServerPayload(payload, getSchema) {
|
|
38
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
const { DATA_SOURCES, ID, NAME, DESCRIPTION, OUTPUT_FORMAT, FILE_NAME, AUTO_DISPATCH, DESTINATION_IDS, SCHEDULES, OUTPUT_DIRECTORY, DOCUMENT_TEMPLATE_ID, } = payload;
|
|
40
|
+
const baseConfig = Object.assign({ ID,
|
|
41
|
+
NAME,
|
|
42
|
+
DESCRIPTION,
|
|
43
|
+
OUTPUT_FORMAT,
|
|
44
|
+
FILE_NAME,
|
|
45
|
+
AUTO_DISPATCH,
|
|
46
|
+
DESTINATION_IDS,
|
|
47
|
+
OUTPUT_DIRECTORY,
|
|
48
|
+
DOCUMENT_TEMPLATE_ID }, (SCHEDULES.length > 0 && { SCHEDULE: SCHEDULES[0] }));
|
|
49
|
+
const cleanedDatasources = yield Promise.all(DATA_SOURCES.map((_a) => __awaiter(this, [_a], void 0, function* ({ KEY, INPUT_TYPE, NAME: DS_NAME, OUTPUT_TYPE, TRANSFORMER_CONFIGURATION }) {
|
|
50
|
+
try {
|
|
51
|
+
const schema = yield getSchema(KEY);
|
|
52
|
+
const validFields = new Set(Object.keys(schema.properties || {}));
|
|
53
|
+
const cleanedConfig = cleanupTransformerConfig(TRANSFORMER_CONFIGURATION || {}, validFields);
|
|
54
|
+
return {
|
|
55
|
+
KEY,
|
|
56
|
+
INPUT_TYPE,
|
|
57
|
+
NAME: DS_NAME,
|
|
58
|
+
OUTPUT_TYPE,
|
|
59
|
+
TRANSFORMER_CONFIGURATION: cleanedConfig,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
// If schema fetch fails, log warning but keep original config
|
|
64
|
+
console.warn(`Failed to fetch schema for ${KEY}, skipping cleanup:`, error);
|
|
65
|
+
return {
|
|
66
|
+
KEY,
|
|
67
|
+
INPUT_TYPE,
|
|
68
|
+
NAME: DS_NAME,
|
|
69
|
+
OUTPUT_TYPE,
|
|
70
|
+
TRANSFORMER_CONFIGURATION: TRANSFORMER_CONFIGURATION || {},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
})));
|
|
74
|
+
return {
|
|
75
|
+
baseConfig,
|
|
76
|
+
datasourceConfig: cleanedDatasources.reduce((acum, ds) => (Object.assign(Object.assign({}, acum), { [buildDatasourceName(ds.NAME, ds.INPUT_TYPE)]: ds })), {}),
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
}
|
|
39
80
|
export function datasourceInputForDisplay(input) {
|
|
40
81
|
if (input === 'REQ_REP')
|
|
41
82
|
return 'Snapshot';
|
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { assert, sinon, suite } from '@genesislcap/foundation-testing';
|
|
3
|
+
import { buildDatasourceName, transformFromServerPayload } from './transformers';
|
|
4
|
+
const TransformFromServerPayload = suite('transformFromServerPayload');
|
|
5
|
+
TransformFromServerPayload.before.each(() => {
|
|
6
|
+
sinon.restore();
|
|
7
|
+
});
|
|
8
|
+
TransformFromServerPayload('cleans up orphaned fields from INCLUDE_COLUMNS', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
9
|
+
var _a, _b, _c, _d;
|
|
10
|
+
const mockGetSchema = sinon.stub();
|
|
11
|
+
const validSchema = {
|
|
12
|
+
properties: {
|
|
13
|
+
COUNTERPARTY_NAME: { genesisType: 'STRING' },
|
|
14
|
+
AMOUNT: { genesisType: 'DOUBLE' },
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
mockGetSchema.resolves(validSchema);
|
|
18
|
+
const payload = {
|
|
19
|
+
ID: 'test-id',
|
|
20
|
+
NAME: 'Test Report',
|
|
21
|
+
SCHEDULES: [],
|
|
22
|
+
DATA_SOURCES: [
|
|
23
|
+
{
|
|
24
|
+
KEY: 'COUNTERPARTY',
|
|
25
|
+
INPUT_TYPE: 'REQ_REP',
|
|
26
|
+
NAME: 'COUNTERPARTY',
|
|
27
|
+
OUTPUT_TYPE: 'TABLE',
|
|
28
|
+
TRANSFORMER_CONFIGURATION: {
|
|
29
|
+
INCLUDE_COLUMNS: ['COUNTERPARTY_NAME', 'AMOUNT', 'NAME'], // NAME is orphaned
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
DESTINATION_IDS: [],
|
|
34
|
+
OUTPUT_DIRECTORY: '/reports',
|
|
35
|
+
};
|
|
36
|
+
const result = yield transformFromServerPayload(payload, mockGetSchema);
|
|
37
|
+
const datasourceKey = buildDatasourceName('COUNTERPARTY', 'REQ_REP');
|
|
38
|
+
const cleanedConfig = result.datasourceConfig[datasourceKey].TRANSFORMER_CONFIGURATION;
|
|
39
|
+
assert.equal((_a = cleanedConfig.INCLUDE_COLUMNS) === null || _a === void 0 ? void 0 : _a.length, 2);
|
|
40
|
+
assert.ok((_b = cleanedConfig.INCLUDE_COLUMNS) === null || _b === void 0 ? void 0 : _b.includes('COUNTERPARTY_NAME'));
|
|
41
|
+
assert.ok((_c = cleanedConfig.INCLUDE_COLUMNS) === null || _c === void 0 ? void 0 : _c.includes('AMOUNT'));
|
|
42
|
+
assert.ok(!((_d = cleanedConfig.INCLUDE_COLUMNS) === null || _d === void 0 ? void 0 : _d.includes('NAME')));
|
|
43
|
+
}));
|
|
44
|
+
TransformFromServerPayload('cleans up orphaned fields from COLUMN_RENAMES', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
45
|
+
var _a, _b, _c;
|
|
46
|
+
const mockGetSchema = sinon.stub();
|
|
47
|
+
const validSchema = {
|
|
48
|
+
properties: {
|
|
49
|
+
COUNTERPARTY_NAME: { genesisType: 'STRING' },
|
|
50
|
+
AMOUNT: { genesisType: 'DOUBLE' },
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
mockGetSchema.resolves(validSchema);
|
|
54
|
+
const payload = {
|
|
55
|
+
ID: 'test-id',
|
|
56
|
+
NAME: 'Test Report',
|
|
57
|
+
SCHEDULES: [],
|
|
58
|
+
DATA_SOURCES: [
|
|
59
|
+
{
|
|
60
|
+
KEY: 'COUNTERPARTY',
|
|
61
|
+
INPUT_TYPE: 'REQ_REP',
|
|
62
|
+
NAME: 'COUNTERPARTY',
|
|
63
|
+
OUTPUT_TYPE: 'TABLE',
|
|
64
|
+
TRANSFORMER_CONFIGURATION: {
|
|
65
|
+
COLUMN_RENAMES: {
|
|
66
|
+
COUNTERPARTY_NAME: 'Counterparty Name',
|
|
67
|
+
AMOUNT: 'Amount',
|
|
68
|
+
NAME: 'Old Name', // orphaned
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
DESTINATION_IDS: [],
|
|
74
|
+
OUTPUT_DIRECTORY: '/reports',
|
|
75
|
+
};
|
|
76
|
+
const result = yield transformFromServerPayload(payload, mockGetSchema);
|
|
77
|
+
const datasourceKey = buildDatasourceName('COUNTERPARTY', 'REQ_REP');
|
|
78
|
+
const cleanedConfig = result.datasourceConfig[datasourceKey].TRANSFORMER_CONFIGURATION;
|
|
79
|
+
assert.equal(Object.keys(cleanedConfig.COLUMN_RENAMES || {}).length, 2);
|
|
80
|
+
assert.equal((_a = cleanedConfig.COLUMN_RENAMES) === null || _a === void 0 ? void 0 : _a['COUNTERPARTY_NAME'], 'Counterparty Name');
|
|
81
|
+
assert.equal((_b = cleanedConfig.COLUMN_RENAMES) === null || _b === void 0 ? void 0 : _b['AMOUNT'], 'Amount');
|
|
82
|
+
assert.ok(!((_c = cleanedConfig.COLUMN_RENAMES) === null || _c === void 0 ? void 0 : _c['NAME']));
|
|
83
|
+
}));
|
|
84
|
+
TransformFromServerPayload('cleans up orphaned fields from COLUMN_FORMATS', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
85
|
+
var _a, _b, _c;
|
|
86
|
+
const mockGetSchema = sinon.stub();
|
|
87
|
+
const validSchema = {
|
|
88
|
+
properties: {
|
|
89
|
+
COUNTERPARTY_NAME: { genesisType: 'STRING' },
|
|
90
|
+
AMOUNT: { genesisType: 'DOUBLE' },
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
mockGetSchema.resolves(validSchema);
|
|
94
|
+
const payload = {
|
|
95
|
+
ID: 'test-id',
|
|
96
|
+
NAME: 'Test Report',
|
|
97
|
+
SCHEDULES: [],
|
|
98
|
+
DATA_SOURCES: [
|
|
99
|
+
{
|
|
100
|
+
KEY: 'COUNTERPARTY',
|
|
101
|
+
INPUT_TYPE: 'REQ_REP',
|
|
102
|
+
NAME: 'COUNTERPARTY',
|
|
103
|
+
OUTPUT_TYPE: 'TABLE',
|
|
104
|
+
TRANSFORMER_CONFIGURATION: {
|
|
105
|
+
COLUMN_FORMATS: {
|
|
106
|
+
COUNTERPARTY_NAME: 'text',
|
|
107
|
+
AMOUNT: '#,##0.00',
|
|
108
|
+
NAME: 'text', // orphaned
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
DESTINATION_IDS: [],
|
|
114
|
+
OUTPUT_DIRECTORY: '/reports',
|
|
115
|
+
};
|
|
116
|
+
const result = yield transformFromServerPayload(payload, mockGetSchema);
|
|
117
|
+
const datasourceKey = buildDatasourceName('COUNTERPARTY', 'REQ_REP');
|
|
118
|
+
const cleanedConfig = result.datasourceConfig[datasourceKey].TRANSFORMER_CONFIGURATION;
|
|
119
|
+
assert.equal(Object.keys(cleanedConfig.COLUMN_FORMATS || {}).length, 2);
|
|
120
|
+
assert.equal((_a = cleanedConfig.COLUMN_FORMATS) === null || _a === void 0 ? void 0 : _a['COUNTERPARTY_NAME'], 'text');
|
|
121
|
+
assert.equal((_b = cleanedConfig.COLUMN_FORMATS) === null || _b === void 0 ? void 0 : _b['AMOUNT'], '#,##0.00');
|
|
122
|
+
assert.ok(!((_c = cleanedConfig.COLUMN_FORMATS) === null || _c === void 0 ? void 0 : _c['NAME']));
|
|
123
|
+
}));
|
|
124
|
+
TransformFromServerPayload('cleans up orphaned fields from COLUMN_TRANSFORMS', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
125
|
+
var _a, _b, _c;
|
|
126
|
+
const mockGetSchema = sinon.stub();
|
|
127
|
+
const validSchema = {
|
|
128
|
+
properties: {
|
|
129
|
+
COUNTERPARTY_NAME: { genesisType: 'STRING' },
|
|
130
|
+
AMOUNT: { genesisType: 'DOUBLE' },
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
mockGetSchema.resolves(validSchema);
|
|
134
|
+
const payload = {
|
|
135
|
+
ID: 'test-id',
|
|
136
|
+
NAME: 'Test Report',
|
|
137
|
+
SCHEDULES: [],
|
|
138
|
+
DATA_SOURCES: [
|
|
139
|
+
{
|
|
140
|
+
KEY: 'COUNTERPARTY',
|
|
141
|
+
INPUT_TYPE: 'REQ_REP',
|
|
142
|
+
NAME: 'COUNTERPARTY',
|
|
143
|
+
OUTPUT_TYPE: 'TABLE',
|
|
144
|
+
TRANSFORMER_CONFIGURATION: {
|
|
145
|
+
COLUMN_TRANSFORMS: {
|
|
146
|
+
COUNTERPARTY_NAME: { TYPE: 'BINARY_EXPRESSION', LEFT: {}, OPERATION: 'AND', RIGHT: {} },
|
|
147
|
+
AMOUNT: { TYPE: 'METHOD_EXPRESSION', METHOD: 'TRIM', PARAMETERS: [] },
|
|
148
|
+
NAME: { TYPE: 'BINARY_EXPRESSION', LEFT: {}, OPERATION: 'AND', RIGHT: {} }, // orphaned
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
DESTINATION_IDS: [],
|
|
154
|
+
OUTPUT_DIRECTORY: '/reports',
|
|
155
|
+
};
|
|
156
|
+
const result = yield transformFromServerPayload(payload, mockGetSchema);
|
|
157
|
+
const datasourceKey = buildDatasourceName('COUNTERPARTY', 'REQ_REP');
|
|
158
|
+
const cleanedConfig = result.datasourceConfig[datasourceKey].TRANSFORMER_CONFIGURATION;
|
|
159
|
+
assert.equal(Object.keys(cleanedConfig.COLUMN_TRANSFORMS || {}).length, 2);
|
|
160
|
+
assert.ok((_a = cleanedConfig.COLUMN_TRANSFORMS) === null || _a === void 0 ? void 0 : _a['COUNTERPARTY_NAME']);
|
|
161
|
+
assert.ok((_b = cleanedConfig.COLUMN_TRANSFORMS) === null || _b === void 0 ? void 0 : _b['AMOUNT']);
|
|
162
|
+
assert.ok(!((_c = cleanedConfig.COLUMN_TRANSFORMS) === null || _c === void 0 ? void 0 : _c['NAME']));
|
|
163
|
+
}));
|
|
164
|
+
TransformFromServerPayload('handles schema fetch failure gracefully', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
165
|
+
const mockGetSchema = sinon.stub();
|
|
166
|
+
const consoleWarnStub = sinon.stub(console, 'warn');
|
|
167
|
+
mockGetSchema.rejects(new Error('Schema fetch failed'));
|
|
168
|
+
const originalConfig = {
|
|
169
|
+
INCLUDE_COLUMNS: ['NAME', 'AMOUNT'],
|
|
170
|
+
COLUMN_RENAMES: { NAME: 'Name' },
|
|
171
|
+
};
|
|
172
|
+
const payload = {
|
|
173
|
+
ID: 'test-id',
|
|
174
|
+
NAME: 'Test Report',
|
|
175
|
+
SCHEDULES: [],
|
|
176
|
+
DATA_SOURCES: [
|
|
177
|
+
{
|
|
178
|
+
KEY: 'COUNTERPARTY',
|
|
179
|
+
INPUT_TYPE: 'REQ_REP',
|
|
180
|
+
NAME: 'COUNTERPARTY',
|
|
181
|
+
OUTPUT_TYPE: 'TABLE',
|
|
182
|
+
TRANSFORMER_CONFIGURATION: originalConfig,
|
|
183
|
+
},
|
|
184
|
+
],
|
|
185
|
+
DESTINATION_IDS: [],
|
|
186
|
+
OUTPUT_DIRECTORY: '/reports',
|
|
187
|
+
};
|
|
188
|
+
const result = yield transformFromServerPayload(payload, mockGetSchema);
|
|
189
|
+
const datasourceKey = buildDatasourceName('COUNTERPARTY', 'REQ_REP');
|
|
190
|
+
const cleanedConfig = result.datasourceConfig[datasourceKey].TRANSFORMER_CONFIGURATION;
|
|
191
|
+
// Should keep original config when schema fetch fails
|
|
192
|
+
assert.equal(JSON.stringify(cleanedConfig), JSON.stringify(originalConfig));
|
|
193
|
+
assert.ok(consoleWarnStub.calledOnce);
|
|
194
|
+
assert.ok(consoleWarnStub.calledWithMatch(sinon.match.string, sinon.match.instanceOf(Error)));
|
|
195
|
+
consoleWarnStub.restore();
|
|
196
|
+
}));
|
|
197
|
+
TransformFromServerPayload('handles multiple datasources independently', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
198
|
+
var _a, _b, _c, _d;
|
|
199
|
+
const mockGetSchema = sinon.stub();
|
|
200
|
+
mockGetSchema
|
|
201
|
+
.onFirstCall()
|
|
202
|
+
.resolves({
|
|
203
|
+
properties: {
|
|
204
|
+
COUNTERPARTY_NAME: { genesisType: 'STRING' },
|
|
205
|
+
},
|
|
206
|
+
})
|
|
207
|
+
.onSecondCall()
|
|
208
|
+
.resolves({
|
|
209
|
+
properties: {
|
|
210
|
+
TRADE_ID: { genesisType: 'STRING' },
|
|
211
|
+
},
|
|
212
|
+
});
|
|
213
|
+
const payload = {
|
|
214
|
+
ID: 'test-id',
|
|
215
|
+
NAME: 'Test Report',
|
|
216
|
+
SCHEDULES: [],
|
|
217
|
+
DATA_SOURCES: [
|
|
218
|
+
{
|
|
219
|
+
KEY: 'COUNTERPARTY',
|
|
220
|
+
INPUT_TYPE: 'REQ_REP',
|
|
221
|
+
NAME: 'COUNTERPARTY',
|
|
222
|
+
OUTPUT_TYPE: 'TABLE',
|
|
223
|
+
TRANSFORMER_CONFIGURATION: {
|
|
224
|
+
INCLUDE_COLUMNS: ['COUNTERPARTY_NAME', 'NAME'], // NAME is orphaned
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
KEY: 'TRADE',
|
|
229
|
+
INPUT_TYPE: 'REQ_REP',
|
|
230
|
+
NAME: 'TRADE',
|
|
231
|
+
OUTPUT_TYPE: 'TABLE',
|
|
232
|
+
TRANSFORMER_CONFIGURATION: {
|
|
233
|
+
INCLUDE_COLUMNS: ['TRADE_ID', 'OLD_FIELD'], // OLD_FIELD is orphaned
|
|
234
|
+
},
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
DESTINATION_IDS: [],
|
|
238
|
+
OUTPUT_DIRECTORY: '/reports',
|
|
239
|
+
};
|
|
240
|
+
const result = yield transformFromServerPayload(payload, mockGetSchema);
|
|
241
|
+
const counterpartyKey = buildDatasourceName('COUNTERPARTY', 'REQ_REP');
|
|
242
|
+
const tradeKey = buildDatasourceName('TRADE', 'REQ_REP');
|
|
243
|
+
assert.equal((_a = result.datasourceConfig[counterpartyKey].TRANSFORMER_CONFIGURATION.INCLUDE_COLUMNS) === null || _a === void 0 ? void 0 : _a.length, 1);
|
|
244
|
+
assert.ok((_b = result.datasourceConfig[counterpartyKey].TRANSFORMER_CONFIGURATION.INCLUDE_COLUMNS) === null || _b === void 0 ? void 0 : _b.includes('COUNTERPARTY_NAME'));
|
|
245
|
+
assert.equal((_c = result.datasourceConfig[tradeKey].TRANSFORMER_CONFIGURATION.INCLUDE_COLUMNS) === null || _c === void 0 ? void 0 : _c.length, 1);
|
|
246
|
+
assert.ok((_d = result.datasourceConfig[tradeKey].TRANSFORMER_CONFIGURATION.INCLUDE_COLUMNS) === null || _d === void 0 ? void 0 : _d.includes('TRADE_ID'));
|
|
247
|
+
}));
|
|
248
|
+
TransformFromServerPayload('handles empty transformer configuration', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
249
|
+
const mockGetSchema = sinon.stub();
|
|
250
|
+
const validSchema = {
|
|
251
|
+
properties: {
|
|
252
|
+
COUNTERPARTY_NAME: { genesisType: 'STRING' },
|
|
253
|
+
},
|
|
254
|
+
};
|
|
255
|
+
mockGetSchema.resolves(validSchema);
|
|
256
|
+
const payload = {
|
|
257
|
+
ID: 'test-id',
|
|
258
|
+
NAME: 'Test Report',
|
|
259
|
+
SCHEDULES: [],
|
|
260
|
+
DATA_SOURCES: [
|
|
261
|
+
{
|
|
262
|
+
KEY: 'COUNTERPARTY',
|
|
263
|
+
INPUT_TYPE: 'REQ_REP',
|
|
264
|
+
NAME: 'COUNTERPARTY',
|
|
265
|
+
OUTPUT_TYPE: 'TABLE',
|
|
266
|
+
TRANSFORMER_CONFIGURATION: {},
|
|
267
|
+
},
|
|
268
|
+
],
|
|
269
|
+
DESTINATION_IDS: [],
|
|
270
|
+
OUTPUT_DIRECTORY: '/reports',
|
|
271
|
+
};
|
|
272
|
+
const result = yield transformFromServerPayload(payload, mockGetSchema);
|
|
273
|
+
const datasourceKey = buildDatasourceName('COUNTERPARTY', 'REQ_REP');
|
|
274
|
+
const cleanedConfig = result.datasourceConfig[datasourceKey].TRANSFORMER_CONFIGURATION;
|
|
275
|
+
assert.equal(JSON.stringify(cleanedConfig), JSON.stringify({}));
|
|
276
|
+
}));
|
|
277
|
+
TransformFromServerPayload('handles missing schema properties', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
278
|
+
var _a;
|
|
279
|
+
const mockGetSchema = sinon.stub();
|
|
280
|
+
const schemaWithoutProperties = {};
|
|
281
|
+
mockGetSchema.resolves(schemaWithoutProperties);
|
|
282
|
+
const payload = {
|
|
283
|
+
ID: 'test-id',
|
|
284
|
+
NAME: 'Test Report',
|
|
285
|
+
SCHEDULES: [],
|
|
286
|
+
DATA_SOURCES: [
|
|
287
|
+
{
|
|
288
|
+
KEY: 'COUNTERPARTY',
|
|
289
|
+
INPUT_TYPE: 'REQ_REP',
|
|
290
|
+
NAME: 'COUNTERPARTY',
|
|
291
|
+
OUTPUT_TYPE: 'TABLE',
|
|
292
|
+
TRANSFORMER_CONFIGURATION: {
|
|
293
|
+
INCLUDE_COLUMNS: ['NAME', 'AMOUNT'],
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
],
|
|
297
|
+
DESTINATION_IDS: [],
|
|
298
|
+
OUTPUT_DIRECTORY: '/reports',
|
|
299
|
+
};
|
|
300
|
+
const result = yield transformFromServerPayload(payload, mockGetSchema);
|
|
301
|
+
const datasourceKey = buildDatasourceName('COUNTERPARTY', 'REQ_REP');
|
|
302
|
+
const cleanedConfig = result.datasourceConfig[datasourceKey].TRANSFORMER_CONFIGURATION;
|
|
303
|
+
// All fields should be removed when schema has no properties
|
|
304
|
+
assert.equal((_a = cleanedConfig.INCLUDE_COLUMNS) === null || _a === void 0 ? void 0 : _a.length, 0);
|
|
305
|
+
}));
|
|
306
|
+
TransformFromServerPayload('preserves base config correctly', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
307
|
+
var _a, _b;
|
|
308
|
+
const mockGetSchema = sinon.stub();
|
|
309
|
+
const validSchema = {
|
|
310
|
+
properties: {
|
|
311
|
+
COUNTERPARTY_NAME: { genesisType: 'STRING' },
|
|
312
|
+
},
|
|
313
|
+
};
|
|
314
|
+
mockGetSchema.resolves(validSchema);
|
|
315
|
+
const payload = {
|
|
316
|
+
ID: 'test-id',
|
|
317
|
+
NAME: 'Test Report',
|
|
318
|
+
DESCRIPTION: 'Test Description',
|
|
319
|
+
OUTPUT_FORMAT: 'CSV',
|
|
320
|
+
FILE_NAME: 'test.csv',
|
|
321
|
+
AUTO_DISPATCH: true,
|
|
322
|
+
DESTINATION_IDS: ['dest1', 'dest2'],
|
|
323
|
+
OUTPUT_DIRECTORY: '/reports',
|
|
324
|
+
DOCUMENT_TEMPLATE_ID: 'template-123',
|
|
325
|
+
SCHEDULES: [
|
|
326
|
+
{
|
|
327
|
+
CRON_EXPRESSION: '0 0 0 * * ?',
|
|
328
|
+
TIME_ZONE: 'UTC',
|
|
329
|
+
},
|
|
330
|
+
],
|
|
331
|
+
DATA_SOURCES: [
|
|
332
|
+
{
|
|
333
|
+
KEY: 'COUNTERPARTY',
|
|
334
|
+
INPUT_TYPE: 'REQ_REP',
|
|
335
|
+
NAME: 'COUNTERPARTY',
|
|
336
|
+
OUTPUT_TYPE: 'TABLE',
|
|
337
|
+
TRANSFORMER_CONFIGURATION: {},
|
|
338
|
+
},
|
|
339
|
+
],
|
|
340
|
+
};
|
|
341
|
+
const result = yield transformFromServerPayload(payload, mockGetSchema);
|
|
342
|
+
assert.equal(result.baseConfig.ID, 'test-id');
|
|
343
|
+
assert.equal(result.baseConfig.NAME, 'Test Report');
|
|
344
|
+
assert.equal(result.baseConfig.DESCRIPTION, 'Test Description');
|
|
345
|
+
assert.equal(result.baseConfig.OUTPUT_FORMAT, 'CSV');
|
|
346
|
+
assert.equal(result.baseConfig.FILE_NAME, 'test.csv');
|
|
347
|
+
assert.equal(result.baseConfig.AUTO_DISPATCH, true);
|
|
348
|
+
assert.equal(JSON.stringify(result.baseConfig.DESTINATION_IDS), JSON.stringify(['dest1', 'dest2']));
|
|
349
|
+
assert.equal(result.baseConfig.OUTPUT_DIRECTORY, '/reports');
|
|
350
|
+
assert.equal(result.baseConfig.DOCUMENT_TEMPLATE_ID, 'template-123');
|
|
351
|
+
assert.ok(result.baseConfig.SCHEDULE);
|
|
352
|
+
assert.equal((_a = result.baseConfig.SCHEDULE) === null || _a === void 0 ? void 0 : _a.CRON_EXPRESSION, '0 0 0 * * ?');
|
|
353
|
+
assert.equal((_b = result.baseConfig.SCHEDULE) === null || _b === void 0 ? void 0 : _b.TIME_ZONE, 'UTC');
|
|
354
|
+
}));
|
|
355
|
+
TransformFromServerPayload('handles all transformer config types together', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
356
|
+
var _a, _b, _c, _d, _e, _f;
|
|
357
|
+
const mockGetSchema = sinon.stub();
|
|
358
|
+
const validSchema = {
|
|
359
|
+
properties: {
|
|
360
|
+
COUNTERPARTY_NAME: { genesisType: 'STRING' },
|
|
361
|
+
AMOUNT: { genesisType: 'DOUBLE' },
|
|
362
|
+
},
|
|
363
|
+
};
|
|
364
|
+
mockGetSchema.resolves(validSchema);
|
|
365
|
+
const payload = {
|
|
366
|
+
ID: 'test-id',
|
|
367
|
+
NAME: 'Test Report',
|
|
368
|
+
SCHEDULES: [],
|
|
369
|
+
DATA_SOURCES: [
|
|
370
|
+
{
|
|
371
|
+
KEY: 'COUNTERPARTY',
|
|
372
|
+
INPUT_TYPE: 'REQ_REP',
|
|
373
|
+
NAME: 'COUNTERPARTY',
|
|
374
|
+
OUTPUT_TYPE: 'TABLE',
|
|
375
|
+
TRANSFORMER_CONFIGURATION: {
|
|
376
|
+
INCLUDE_COLUMNS: ['COUNTERPARTY_NAME', 'AMOUNT', 'NAME'], // NAME orphaned
|
|
377
|
+
COLUMN_RENAMES: {
|
|
378
|
+
COUNTERPARTY_NAME: 'Counterparty',
|
|
379
|
+
NAME: 'Old Name', // orphaned
|
|
380
|
+
},
|
|
381
|
+
COLUMN_FORMATS: {
|
|
382
|
+
AMOUNT: '#,##0.00',
|
|
383
|
+
NAME: 'text', // orphaned
|
|
384
|
+
},
|
|
385
|
+
COLUMN_TRANSFORMS: {
|
|
386
|
+
COUNTERPARTY_NAME: { TYPE: 'BINARY_EXPRESSION', LEFT: {}, OPERATION: 'AND', RIGHT: {} },
|
|
387
|
+
NAME: { TYPE: 'METHOD_EXPRESSION', METHOD: 'TRIM', PARAMETERS: [] }, // orphaned
|
|
388
|
+
},
|
|
389
|
+
ROW_FILTERS: {
|
|
390
|
+
TYPE: 'PREDICATE_EXPRESSION',
|
|
391
|
+
OPERATION: 'AND',
|
|
392
|
+
EXPRESSIONS: [],
|
|
393
|
+
},
|
|
394
|
+
},
|
|
395
|
+
},
|
|
396
|
+
],
|
|
397
|
+
DESTINATION_IDS: [],
|
|
398
|
+
OUTPUT_DIRECTORY: '/reports',
|
|
399
|
+
};
|
|
400
|
+
const result = yield transformFromServerPayload(payload, mockGetSchema);
|
|
401
|
+
const datasourceKey = buildDatasourceName('COUNTERPARTY', 'REQ_REP');
|
|
402
|
+
const cleanedConfig = result.datasourceConfig[datasourceKey].TRANSFORMER_CONFIGURATION;
|
|
403
|
+
// INCLUDE_COLUMNS should only have valid fields
|
|
404
|
+
assert.equal((_a = cleanedConfig.INCLUDE_COLUMNS) === null || _a === void 0 ? void 0 : _a.length, 2);
|
|
405
|
+
assert.ok((_b = cleanedConfig.INCLUDE_COLUMNS) === null || _b === void 0 ? void 0 : _b.includes('COUNTERPARTY_NAME'));
|
|
406
|
+
assert.ok((_c = cleanedConfig.INCLUDE_COLUMNS) === null || _c === void 0 ? void 0 : _c.includes('AMOUNT'));
|
|
407
|
+
// COLUMN_RENAMES should only have valid fields
|
|
408
|
+
assert.equal(Object.keys(cleanedConfig.COLUMN_RENAMES || {}).length, 1);
|
|
409
|
+
assert.equal((_d = cleanedConfig.COLUMN_RENAMES) === null || _d === void 0 ? void 0 : _d['COUNTERPARTY_NAME'], 'Counterparty');
|
|
410
|
+
// COLUMN_FORMATS should only have valid fields
|
|
411
|
+
assert.equal(Object.keys(cleanedConfig.COLUMN_FORMATS || {}).length, 1);
|
|
412
|
+
assert.equal((_e = cleanedConfig.COLUMN_FORMATS) === null || _e === void 0 ? void 0 : _e['AMOUNT'], '#,##0.00');
|
|
413
|
+
// COLUMN_TRANSFORMS should only have valid fields
|
|
414
|
+
assert.equal(Object.keys(cleanedConfig.COLUMN_TRANSFORMS || {}).length, 1);
|
|
415
|
+
assert.ok((_f = cleanedConfig.COLUMN_TRANSFORMS) === null || _f === void 0 ? void 0 : _f['COUNTERPARTY_NAME']);
|
|
416
|
+
// ROW_FILTERS should be preserved
|
|
417
|
+
assert.ok(cleanedConfig.ROW_FILTERS);
|
|
418
|
+
}));
|
|
419
|
+
TransformFromServerPayload.run();
|