tm1npm 1.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/.env.example +16 -0
- package/.eslintrc.js +28 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +36 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- package/.github/ISSUE_TEMPLATE/question.md +24 -0
- package/.github/workflows/publish-npm.yml +53 -0
- package/.github/workflows/test-on-tag.yml +172 -0
- package/DEVELOPMENT_GUIDE.md +587 -0
- package/LICENSE +21 -0
- package/README.md +580 -0
- package/jest.ci.config.js +83 -0
- package/jest.config.js +68 -0
- package/lib/exceptions/TM1Exception.d.ts +17 -0
- package/lib/exceptions/TM1Exception.d.ts.map +1 -0
- package/lib/exceptions/TM1Exception.js +36 -0
- package/lib/exceptions/TM1RestException.d.ts +10 -0
- package/lib/exceptions/TM1RestException.d.ts.map +1 -0
- package/lib/exceptions/TM1RestException.js +17 -0
- package/lib/exceptions/TM1TimeoutException.d.ts +9 -0
- package/lib/exceptions/TM1TimeoutException.d.ts.map +1 -0
- package/lib/exceptions/TM1TimeoutException.js +16 -0
- package/lib/index.d.ts +41 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +132 -0
- package/lib/objects/Annotation.d.ts +36 -0
- package/lib/objects/Annotation.d.ts.map +1 -0
- package/lib/objects/Annotation.js +134 -0
- package/lib/objects/Application.d.ts +67 -0
- package/lib/objects/Application.d.ts.map +1 -0
- package/lib/objects/Application.js +125 -0
- package/lib/objects/Axis.d.ts +36 -0
- package/lib/objects/Axis.d.ts.map +1 -0
- package/lib/objects/Axis.js +103 -0
- package/lib/objects/Chore.d.ts +43 -0
- package/lib/objects/Chore.d.ts.map +1 -0
- package/lib/objects/Chore.js +129 -0
- package/lib/objects/ChoreFrequency.d.ts +23 -0
- package/lib/objects/ChoreFrequency.d.ts.map +1 -0
- package/lib/objects/ChoreFrequency.js +61 -0
- package/lib/objects/ChoreStartTime.d.ts +15 -0
- package/lib/objects/ChoreStartTime.d.ts.map +1 -0
- package/lib/objects/ChoreStartTime.js +85 -0
- package/lib/objects/ChoreTask.d.ts +28 -0
- package/lib/objects/ChoreTask.d.ts.map +1 -0
- package/lib/objects/ChoreTask.js +66 -0
- package/lib/objects/Cube.d.ts +26 -0
- package/lib/objects/Cube.d.ts.map +1 -0
- package/lib/objects/Cube.js +109 -0
- package/lib/objects/Dimension.d.ts +26 -0
- package/lib/objects/Dimension.d.ts.map +1 -0
- package/lib/objects/Dimension.js +86 -0
- package/lib/objects/Element.d.ts +35 -0
- package/lib/objects/Element.d.ts.map +1 -0
- package/lib/objects/Element.js +115 -0
- package/lib/objects/ElementAttribute.d.ts +28 -0
- package/lib/objects/ElementAttribute.d.ts.map +1 -0
- package/lib/objects/ElementAttribute.js +97 -0
- package/lib/objects/Git.d.ts +21 -0
- package/lib/objects/Git.d.ts.map +1 -0
- package/lib/objects/Git.js +49 -0
- package/lib/objects/GitCommit.d.ts +12 -0
- package/lib/objects/GitCommit.d.ts.map +1 -0
- package/lib/objects/GitCommit.js +26 -0
- package/lib/objects/GitPlan.d.ts +35 -0
- package/lib/objects/GitPlan.d.ts.map +1 -0
- package/lib/objects/GitPlan.js +78 -0
- package/lib/objects/GitRemote.d.ts +12 -0
- package/lib/objects/GitRemote.d.ts.map +1 -0
- package/lib/objects/GitRemote.js +26 -0
- package/lib/objects/Hierarchy.d.ts +47 -0
- package/lib/objects/Hierarchy.d.ts.map +1 -0
- package/lib/objects/Hierarchy.js +165 -0
- package/lib/objects/MDXView.d.ts +19 -0
- package/lib/objects/MDXView.d.ts.map +1 -0
- package/lib/objects/MDXView.js +67 -0
- package/lib/objects/NativeView.d.ts +39 -0
- package/lib/objects/NativeView.d.ts.map +1 -0
- package/lib/objects/NativeView.js +209 -0
- package/lib/objects/Process.d.ts +70 -0
- package/lib/objects/Process.d.ts.map +1 -0
- package/lib/objects/Process.js +210 -0
- package/lib/objects/ProcessDebugBreakpoint.d.ts +60 -0
- package/lib/objects/ProcessDebugBreakpoint.d.ts.map +1 -0
- package/lib/objects/ProcessDebugBreakpoint.js +168 -0
- package/lib/objects/ProcessParameter.d.ts +23 -0
- package/lib/objects/ProcessParameter.d.ts.map +1 -0
- package/lib/objects/ProcessParameter.js +55 -0
- package/lib/objects/ProcessVariable.d.ts +26 -0
- package/lib/objects/ProcessVariable.d.ts.map +1 -0
- package/lib/objects/ProcessVariable.js +63 -0
- package/lib/objects/Rules.d.ts +30 -0
- package/lib/objects/Rules.d.ts.map +1 -0
- package/lib/objects/Rules.js +103 -0
- package/lib/objects/Sandbox.d.ts +21 -0
- package/lib/objects/Sandbox.d.ts.map +1 -0
- package/lib/objects/Sandbox.js +64 -0
- package/lib/objects/Server.d.ts +27 -0
- package/lib/objects/Server.d.ts.map +1 -0
- package/lib/objects/Server.js +26 -0
- package/lib/objects/Subset.d.ts +44 -0
- package/lib/objects/Subset.d.ts.map +1 -0
- package/lib/objects/Subset.js +222 -0
- package/lib/objects/TM1Object.d.ts +8 -0
- package/lib/objects/TM1Object.d.ts.map +1 -0
- package/lib/objects/TM1Object.js +17 -0
- package/lib/objects/TM1Project.d.ts +74 -0
- package/lib/objects/TM1Project.d.ts.map +1 -0
- package/lib/objects/TM1Project.js +409 -0
- package/lib/objects/User.d.ts +42 -0
- package/lib/objects/User.d.ts.map +1 -0
- package/lib/objects/User.js +157 -0
- package/lib/objects/View.d.ts +19 -0
- package/lib/objects/View.d.ts.map +1 -0
- package/lib/objects/View.js +33 -0
- package/lib/objects/index.d.ts +30 -0
- package/lib/objects/index.d.ts.map +1 -0
- package/lib/objects/index.js +68 -0
- package/lib/services/AnnotationService.d.ts +17 -0
- package/lib/services/AnnotationService.d.ts.map +1 -0
- package/lib/services/AnnotationService.js +91 -0
- package/lib/services/ApplicationService.d.ts +21 -0
- package/lib/services/ApplicationService.d.ts.map +1 -0
- package/lib/services/ApplicationService.js +227 -0
- package/lib/services/AuditLogService.d.ts +15 -0
- package/lib/services/AuditLogService.d.ts.map +1 -0
- package/lib/services/AuditLogService.js +153 -0
- package/lib/services/CellService.d.ts +191 -0
- package/lib/services/CellService.d.ts.map +1 -0
- package/lib/services/CellService.js +597 -0
- package/lib/services/ChoreService.d.ts +24 -0
- package/lib/services/ChoreService.d.ts.map +1 -0
- package/lib/services/ChoreService.js +219 -0
- package/lib/services/ConfigurationService.d.ts +18 -0
- package/lib/services/ConfigurationService.d.ts.map +1 -0
- package/lib/services/ConfigurationService.js +60 -0
- package/lib/services/CubeService.d.ts +43 -0
- package/lib/services/CubeService.d.ts.map +1 -0
- package/lib/services/CubeService.js +296 -0
- package/lib/services/DimensionService.d.ts +21 -0
- package/lib/services/DimensionService.d.ts.map +1 -0
- package/lib/services/DimensionService.js +146 -0
- package/lib/services/ElementService.d.ts +132 -0
- package/lib/services/ElementService.d.ts.map +1 -0
- package/lib/services/ElementService.js +579 -0
- package/lib/services/FileService.d.ts +14 -0
- package/lib/services/FileService.d.ts.map +1 -0
- package/lib/services/FileService.js +65 -0
- package/lib/services/GitService.d.ts +23 -0
- package/lib/services/GitService.d.ts.map +1 -0
- package/lib/services/GitService.js +225 -0
- package/lib/services/HierarchyService.d.ts +32 -0
- package/lib/services/HierarchyService.d.ts.map +1 -0
- package/lib/services/HierarchyService.js +235 -0
- package/lib/services/JobService.d.ts +13 -0
- package/lib/services/JobService.d.ts.map +1 -0
- package/lib/services/JobService.js +83 -0
- package/lib/services/LoggerService.d.ts +16 -0
- package/lib/services/LoggerService.d.ts.map +1 -0
- package/lib/services/LoggerService.js +101 -0
- package/lib/services/ManageService.d.ts +47 -0
- package/lib/services/ManageService.d.ts.map +1 -0
- package/lib/services/ManageService.js +221 -0
- package/lib/services/MessageLogService.d.ts +13 -0
- package/lib/services/MessageLogService.d.ts.map +1 -0
- package/lib/services/MessageLogService.js +175 -0
- package/lib/services/MonitoringService.d.ts +29 -0
- package/lib/services/MonitoringService.d.ts.map +1 -0
- package/lib/services/MonitoringService.js +86 -0
- package/lib/services/ObjectService.d.ts +8 -0
- package/lib/services/ObjectService.d.ts.map +1 -0
- package/lib/services/ObjectService.js +20 -0
- package/lib/services/PowerBiService.d.ts +13 -0
- package/lib/services/PowerBiService.d.ts.map +1 -0
- package/lib/services/PowerBiService.js +52 -0
- package/lib/services/ProcessService.d.ts +57 -0
- package/lib/services/ProcessService.d.ts.map +1 -0
- package/lib/services/ProcessService.js +499 -0
- package/lib/services/RestService.d.ts +68 -0
- package/lib/services/RestService.d.ts.map +1 -0
- package/lib/services/RestService.js +166 -0
- package/lib/services/SandboxService.d.ts +28 -0
- package/lib/services/SandboxService.d.ts.map +1 -0
- package/lib/services/SandboxService.js +197 -0
- package/lib/services/SecurityService.d.ts +33 -0
- package/lib/services/SecurityService.d.ts.map +1 -0
- package/lib/services/SecurityService.js +249 -0
- package/lib/services/ServerService.d.ts +55 -0
- package/lib/services/ServerService.d.ts.map +1 -0
- package/lib/services/ServerService.js +247 -0
- package/lib/services/SessionService.d.ts +15 -0
- package/lib/services/SessionService.d.ts.map +1 -0
- package/lib/services/SessionService.js +68 -0
- package/lib/services/SubsetService.d.ts +13 -0
- package/lib/services/SubsetService.d.ts.map +1 -0
- package/lib/services/SubsetService.js +46 -0
- package/lib/services/TM1Service.d.ts +39 -0
- package/lib/services/TM1Service.d.ts.map +1 -0
- package/lib/services/TM1Service.js +94 -0
- package/lib/services/ThreadService.d.ts +15 -0
- package/lib/services/ThreadService.d.ts.map +1 -0
- package/lib/services/ThreadService.js +104 -0
- package/lib/services/TransactionLogService.d.ts +11 -0
- package/lib/services/TransactionLogService.d.ts.map +1 -0
- package/lib/services/TransactionLogService.js +124 -0
- package/lib/services/UserService.d.ts +14 -0
- package/lib/services/UserService.d.ts.map +1 -0
- package/lib/services/UserService.js +103 -0
- package/lib/services/ViewService.d.ts +30 -0
- package/lib/services/ViewService.d.ts.map +1 -0
- package/lib/services/ViewService.js +331 -0
- package/lib/services/index.d.ts +26 -0
- package/lib/services/index.d.ts.map +1 -0
- package/lib/services/index.js +56 -0
- package/lib/tests/100PercentParityCheck.test.d.ts +6 -0
- package/lib/tests/100PercentParityCheck.test.d.ts.map +1 -0
- package/lib/tests/100PercentParityCheck.test.js +143 -0
- package/lib/tests/basic.test.d.ts +6 -0
- package/lib/tests/basic.test.d.ts.map +1 -0
- package/lib/tests/basic.test.js +52 -0
- package/lib/tests/cellService.test.d.ts +6 -0
- package/lib/tests/cellService.test.d.ts.map +1 -0
- package/lib/tests/cellService.test.js +311 -0
- package/lib/tests/ciSetup.d.ts +6 -0
- package/lib/tests/ciSetup.d.ts.map +1 -0
- package/lib/tests/ciSetup.js +23 -0
- package/lib/tests/comprehensive.service.test.d.ts +6 -0
- package/lib/tests/comprehensive.service.test.d.ts.map +1 -0
- package/lib/tests/comprehensive.service.test.js +507 -0
- package/lib/tests/connection.test.d.ts +6 -0
- package/lib/tests/connection.test.d.ts.map +1 -0
- package/lib/tests/connection.test.js +89 -0
- package/lib/tests/cubeService.test.d.ts +6 -0
- package/lib/tests/cubeService.test.d.ts.map +1 -0
- package/lib/tests/cubeService.test.js +368 -0
- package/lib/tests/dimensionService.comprehensive.test.d.ts +7 -0
- package/lib/tests/dimensionService.comprehensive.test.d.ts.map +1 -0
- package/lib/tests/dimensionService.comprehensive.test.js +614 -0
- package/lib/tests/dimensionService.test.d.ts +6 -0
- package/lib/tests/dimensionService.test.d.ts.map +1 -0
- package/lib/tests/dimensionService.test.js +293 -0
- package/lib/tests/edgeCases.test.d.ts +6 -0
- package/lib/tests/edgeCases.test.d.ts.map +1 -0
- package/lib/tests/edgeCases.test.js +301 -0
- package/lib/tests/elementService.comprehensive.test.d.ts +7 -0
- package/lib/tests/elementService.comprehensive.test.d.ts.map +1 -0
- package/lib/tests/elementService.comprehensive.test.js +846 -0
- package/lib/tests/elementService.test.d.ts +6 -0
- package/lib/tests/elementService.test.d.ts.map +1 -0
- package/lib/tests/elementService.test.js +350 -0
- package/lib/tests/enhancedCellService.test.d.ts +2 -0
- package/lib/tests/enhancedCellService.test.d.ts.map +1 -0
- package/lib/tests/enhancedCellService.test.js +152 -0
- package/lib/tests/enhancedCubeService.test.d.ts +2 -0
- package/lib/tests/enhancedCubeService.test.d.ts.map +1 -0
- package/lib/tests/enhancedCubeService.test.js +246 -0
- package/lib/tests/enhancedElementService.test.d.ts +2 -0
- package/lib/tests/enhancedElementService.test.d.ts.map +1 -0
- package/lib/tests/enhancedElementService.test.js +199 -0
- package/lib/tests/enhancedViewService.test.d.ts +2 -0
- package/lib/tests/enhancedViewService.test.d.ts.map +1 -0
- package/lib/tests/enhancedViewService.test.js +260 -0
- package/lib/tests/errorHandling.test.d.ts +6 -0
- package/lib/tests/errorHandling.test.d.ts.map +1 -0
- package/lib/tests/errorHandling.test.js +227 -0
- package/lib/tests/exceptions.test.d.ts +7 -0
- package/lib/tests/exceptions.test.d.ts.map +1 -0
- package/lib/tests/exceptions.test.js +257 -0
- package/lib/tests/hierarchyService.test.d.ts +6 -0
- package/lib/tests/hierarchyService.test.d.ts.map +1 -0
- package/lib/tests/hierarchyService.test.js +294 -0
- package/lib/tests/index.test.d.ts +6 -0
- package/lib/tests/index.test.d.ts.map +1 -0
- package/lib/tests/index.test.js +346 -0
- package/lib/tests/integration.test.d.ts +6 -0
- package/lib/tests/integration.test.d.ts.map +1 -0
- package/lib/tests/integration.test.js +302 -0
- package/lib/tests/integrationTests.test.d.ts +2 -0
- package/lib/tests/integrationTests.test.d.ts.map +1 -0
- package/lib/tests/integrationTests.test.js +252 -0
- package/lib/tests/mdx.advanced.test.d.ts +6 -0
- package/lib/tests/mdx.advanced.test.d.ts.map +1 -0
- package/lib/tests/mdx.advanced.test.js +437 -0
- package/lib/tests/objects.improved.test.d.ts +7 -0
- package/lib/tests/objects.improved.test.d.ts.map +1 -0
- package/lib/tests/objects.improved.test.js +302 -0
- package/lib/tests/performance.test.d.ts +6 -0
- package/lib/tests/performance.test.d.ts.map +1 -0
- package/lib/tests/performance.test.js +264 -0
- package/lib/tests/processService.comprehensive.test.d.ts +7 -0
- package/lib/tests/processService.comprehensive.test.d.ts.map +1 -0
- package/lib/tests/processService.comprehensive.test.js +656 -0
- package/lib/tests/processService.test.d.ts +6 -0
- package/lib/tests/processService.test.d.ts.map +1 -0
- package/lib/tests/processService.test.js +322 -0
- package/lib/tests/restService.test.d.ts +6 -0
- package/lib/tests/restService.test.d.ts.map +1 -0
- package/lib/tests/restService.test.js +177 -0
- package/lib/tests/security.advanced.test.d.ts +6 -0
- package/lib/tests/security.advanced.test.d.ts.map +1 -0
- package/lib/tests/security.advanced.test.js +407 -0
- package/lib/tests/security.test.d.ts +6 -0
- package/lib/tests/security.test.d.ts.map +1 -0
- package/lib/tests/security.test.js +204 -0
- package/lib/tests/securityService.comprehensive.test.d.ts +7 -0
- package/lib/tests/securityService.comprehensive.test.d.ts.map +1 -0
- package/lib/tests/securityService.comprehensive.test.js +457 -0
- package/lib/tests/setup.d.ts +4 -0
- package/lib/tests/setup.d.ts.map +1 -0
- package/lib/tests/setup.js +40 -0
- package/lib/tests/simpleCoverage.test.d.ts +6 -0
- package/lib/tests/simpleCoverage.test.d.ts.map +1 -0
- package/lib/tests/simpleCoverage.test.js +236 -0
- package/lib/tests/stress.performance.test.d.ts +6 -0
- package/lib/tests/stress.performance.test.d.ts.map +1 -0
- package/lib/tests/stress.performance.test.js +423 -0
- package/lib/tests/subsetService.test.d.ts +6 -0
- package/lib/tests/subsetService.test.d.ts.map +1 -0
- package/lib/tests/subsetService.test.js +271 -0
- package/lib/tests/testConfig.d.ts +18 -0
- package/lib/tests/testConfig.d.ts.map +1 -0
- package/lib/tests/testConfig.js +38 -0
- package/lib/tests/testUtils.d.ts +9 -0
- package/lib/tests/testUtils.d.ts.map +1 -0
- package/lib/tests/testUtils.js +100 -0
- package/lib/tests/tm1Service.test.d.ts +7 -0
- package/lib/tests/tm1Service.test.d.ts.map +1 -0
- package/lib/tests/tm1Service.test.js +290 -0
- package/lib/tests/viewService.test.d.ts +6 -0
- package/lib/tests/viewService.test.d.ts.map +1 -0
- package/lib/tests/viewService.test.js +240 -0
- package/lib/utils/Utils.d.ts +90 -0
- package/lib/utils/Utils.d.ts.map +1 -0
- package/lib/utils/Utils.js +379 -0
- package/package.json +81 -0
- package/run-all-tests.js +296 -0
- package/src/exceptions/TM1Exception.ts +38 -0
- package/src/exceptions/TM1RestException.ts +17 -0
- package/src/exceptions/TM1TimeoutException.ts +15 -0
- package/src/index.ts +94 -0
- package/src/objects/Annotation.ts +194 -0
- package/src/objects/Application.ts +146 -0
- package/src/objects/Axis.ts +149 -0
- package/src/objects/Chore.ts +174 -0
- package/src/objects/ChoreFrequency.ts +83 -0
- package/src/objects/ChoreStartTime.ts +111 -0
- package/src/objects/ChoreTask.ts +92 -0
- package/src/objects/Cube.ts +125 -0
- package/src/objects/Dimension.ts +107 -0
- package/src/objects/Element.ts +153 -0
- package/src/objects/ElementAttribute.ts +115 -0
- package/src/objects/Git.ts +86 -0
- package/src/objects/GitCommit.ts +31 -0
- package/src/objects/GitPlan.ts +121 -0
- package/src/objects/GitRemote.ts +31 -0
- package/src/objects/Hierarchy.ts +229 -0
- package/src/objects/MDXView.ts +91 -0
- package/src/objects/NativeView.ts +268 -0
- package/src/objects/Process.ts +320 -0
- package/src/objects/ProcessDebugBreakpoint.ts +239 -0
- package/src/objects/ProcessParameter.ts +76 -0
- package/src/objects/ProcessVariable.ts +89 -0
- package/src/objects/Rules.ts +117 -0
- package/src/objects/Sandbox.ts +90 -0
- package/src/objects/Server.ts +45 -0
- package/src/objects/Subset.ts +323 -0
- package/src/objects/TM1Object.ts +17 -0
- package/src/objects/TM1Project.ts +587 -0
- package/src/objects/User.ts +198 -0
- package/src/objects/View.ts +43 -0
- package/src/objects/index.ts +36 -0
- package/src/services/AnnotationService.ts +107 -0
- package/src/services/ApplicationService.ts +279 -0
- package/src/services/AuditLogService.ts +172 -0
- package/src/services/CellService.ts +814 -0
- package/src/services/ChoreService.ts +219 -0
- package/src/services/ConfigurationService.ts +69 -0
- package/src/services/CubeService.ts +338 -0
- package/src/services/DimensionService.ts +168 -0
- package/src/services/ElementService.ts +966 -0
- package/src/services/FileService.ts +67 -0
- package/src/services/GitService.ts +324 -0
- package/src/services/HierarchyService.ts +284 -0
- package/src/services/JobService.ts +59 -0
- package/src/services/LoggerService.ts +118 -0
- package/src/services/ManageService.ts +322 -0
- package/src/services/MessageLogService.ts +211 -0
- package/src/services/MonitoringService.ts +105 -0
- package/src/services/ObjectService.ts +21 -0
- package/src/services/PowerBiService.ts +85 -0
- package/src/services/ProcessService.ts +589 -0
- package/src/services/RestService.ts +224 -0
- package/src/services/SandboxService.ts +217 -0
- package/src/services/SecurityService.ts +284 -0
- package/src/services/ServerService.ts +313 -0
- package/src/services/SessionService.ts +81 -0
- package/src/services/SubsetService.ts +52 -0
- package/src/services/TM1Service.ts +133 -0
- package/src/services/ThreadService.ts +83 -0
- package/src/services/TransactionLogService.ts +148 -0
- package/src/services/UserService.ts +77 -0
- package/src/services/ViewService.ts +398 -0
- package/src/services/index.ts +28 -0
- package/src/tests/100PercentParityCheck.test.ts +166 -0
- package/src/tests/basic.test.ts +59 -0
- package/src/tests/cellService.test.ts +405 -0
- package/src/tests/ciSetup.ts +26 -0
- package/src/tests/comprehensive.service.test.ts +653 -0
- package/src/tests/config.ini.template +23 -0
- package/src/tests/connection.test.ts +90 -0
- package/src/tests/cubeService.test.ts +458 -0
- package/src/tests/dimensionService.comprehensive.test.ts +786 -0
- package/src/tests/dimensionService.test.ts +373 -0
- package/src/tests/edgeCases.test.ts +358 -0
- package/src/tests/elementService.comprehensive.test.ts +1190 -0
- package/src/tests/elementService.test.ts +472 -0
- package/src/tests/enhancedCellService.test.ts +237 -0
- package/src/tests/enhancedCubeService.test.ts +384 -0
- package/src/tests/enhancedElementService.test.ts +301 -0
- package/src/tests/enhancedViewService.test.ts +373 -0
- package/src/tests/errorHandling.test.ts +264 -0
- package/src/tests/exceptions.test.ts +313 -0
- package/src/tests/hierarchyService.test.ts +386 -0
- package/src/tests/index.test.ts +376 -0
- package/src/tests/integration.test.ts +333 -0
- package/src/tests/integrationTests.test.ts +302 -0
- package/src/tests/mdx.advanced.test.ts +513 -0
- package/src/tests/objects.improved.test.ts +385 -0
- package/src/tests/performance.test.ts +314 -0
- package/src/tests/processService.comprehensive.test.ts +933 -0
- package/src/tests/processService.test.ts +409 -0
- package/src/tests/restService.test.ts +218 -0
- package/src/tests/security.advanced.test.ts +464 -0
- package/src/tests/security.test.ts +233 -0
- package/src/tests/securityService.comprehensive.test.ts +582 -0
- package/src/tests/setup.ts +42 -0
- package/src/tests/simpleCoverage.test.ts +287 -0
- package/src/tests/stress.performance.test.ts +531 -0
- package/src/tests/subsetService.test.ts +350 -0
- package/src/tests/testConfig.ts +53 -0
- package/src/tests/testUtils.ts +94 -0
- package/src/tests/tm1Service.test.ts +361 -0
- package/src/tests/viewService.test.ts +324 -0
- package/src/utils/Utils.ts +395 -0
- package/tests/README.md +57 -0
- package/tests/connection/test-connection.ts +86 -0
- package/tests/edge-cases/edge-cases-test.ts +244 -0
- package/tests/integration/working-test.ts +193 -0
- package/tests/performance/performance-test.ts +133 -0
- package/tests/run-all-tests.sh +106 -0
- package/tests/security/security-test.ts +103 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const CubeService_1 = require("../services/CubeService");
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
// Mock axios
|
|
9
|
+
jest.mock('axios');
|
|
10
|
+
const mockedAxios = axios_1.default;
|
|
11
|
+
describe('Enhanced CubeService Tests', () => {
|
|
12
|
+
let cubeService;
|
|
13
|
+
let mockRestService;
|
|
14
|
+
const createMockResponse = (data, status = 200) => ({
|
|
15
|
+
data,
|
|
16
|
+
status,
|
|
17
|
+
statusText: status === 200 ? 'OK' : status === 201 ? 'Created' : 'Error',
|
|
18
|
+
headers: {},
|
|
19
|
+
config: {}
|
|
20
|
+
});
|
|
21
|
+
const mockCube = {
|
|
22
|
+
name: 'TestCube',
|
|
23
|
+
dimensions: ['Year', 'Region', 'Product'],
|
|
24
|
+
rules: { text: 'RULE; C: = 1; FEEDERS;' }
|
|
25
|
+
};
|
|
26
|
+
beforeEach(() => {
|
|
27
|
+
mockRestService = {
|
|
28
|
+
get: jest.fn(),
|
|
29
|
+
post: jest.fn(),
|
|
30
|
+
patch: jest.fn(),
|
|
31
|
+
delete: jest.fn(),
|
|
32
|
+
put: jest.fn()
|
|
33
|
+
};
|
|
34
|
+
cubeService = new CubeService_1.CubeService(mockRestService);
|
|
35
|
+
});
|
|
36
|
+
describe('Cube Analysis Functions', () => {
|
|
37
|
+
test('searchForDimensionSubstring should find cubes with matching dimensions', async () => {
|
|
38
|
+
const mockCubes = [
|
|
39
|
+
{ name: 'SalesCube', dimensions: ['Year', 'Region', 'Product'] },
|
|
40
|
+
{ name: 'BudgetCube', dimensions: ['Year', 'Department', 'Account'] },
|
|
41
|
+
{ name: 'PlanningCube', dimensions: ['Month', 'Region', 'Scenario'] }
|
|
42
|
+
];
|
|
43
|
+
jest.spyOn(cubeService, 'getAll').mockResolvedValue(mockCubes);
|
|
44
|
+
const result = await cubeService.searchForDimensionSubstring('Reg');
|
|
45
|
+
expect(result).toEqual({
|
|
46
|
+
'SalesCube': ['Region'],
|
|
47
|
+
'PlanningCube': ['Region']
|
|
48
|
+
});
|
|
49
|
+
console.log('✅ searchForDimensionSubstring test passed');
|
|
50
|
+
});
|
|
51
|
+
test('searchForRuleSubstring should find cubes with matching rules', async () => {
|
|
52
|
+
const mockCubes = [
|
|
53
|
+
{
|
|
54
|
+
name: 'TestCube1',
|
|
55
|
+
dimensions: ['Year'],
|
|
56
|
+
rules: { text: 'RULE; N: C = 1; FEEDERS;' }
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'TestCube2',
|
|
60
|
+
dimensions: ['Month'],
|
|
61
|
+
rules: { text: 'RULE; S: C = "Test"; FEEDERS;' }
|
|
62
|
+
}
|
|
63
|
+
];
|
|
64
|
+
jest.spyOn(cubeService, 'getAll').mockResolvedValue(mockCubes);
|
|
65
|
+
const result = await cubeService.searchForRuleSubstring('RULE');
|
|
66
|
+
expect(result).toHaveLength(2);
|
|
67
|
+
expect(result[0].name).toBe('TestCube1');
|
|
68
|
+
expect(result[1].name).toBe('TestCube2');
|
|
69
|
+
console.log('✅ searchForRuleSubstring test passed');
|
|
70
|
+
});
|
|
71
|
+
test('getStorageDimensionOrder should return ordered dimension names', async () => {
|
|
72
|
+
mockRestService.get.mockResolvedValue(createMockResponse({
|
|
73
|
+
value: [
|
|
74
|
+
{ Name: 'Year' },
|
|
75
|
+
{ Name: 'Region' },
|
|
76
|
+
{ Name: 'Product' }
|
|
77
|
+
]
|
|
78
|
+
}));
|
|
79
|
+
const result = await cubeService.getStorageDimensionOrder('TestCube');
|
|
80
|
+
expect(result).toEqual(['Year', 'Region', 'Product']);
|
|
81
|
+
expect(mockRestService.get).toHaveBeenCalledWith("/Cubes('TestCube')/Dimensions?$select=Name");
|
|
82
|
+
console.log('✅ getStorageDimensionOrder test passed');
|
|
83
|
+
});
|
|
84
|
+
test('updateStorageDimensionOrder should reorder dimensions', async () => {
|
|
85
|
+
const newOrder = ['Product', 'Region', 'Year'];
|
|
86
|
+
mockRestService.post.mockResolvedValue(createMockResponse({}));
|
|
87
|
+
await cubeService.updateStorageDimensionOrder('TestCube', newOrder);
|
|
88
|
+
expect(mockRestService.post).toHaveBeenCalledWith("/Cubes('TestCube')/tm1.UpdateStorageOrder", { Dimensions: newOrder });
|
|
89
|
+
console.log('✅ updateStorageDimensionOrder test passed');
|
|
90
|
+
});
|
|
91
|
+
test('getRandomIntersection should return random intersection', async () => {
|
|
92
|
+
mockRestService.get.mockResolvedValue(createMockResponse({
|
|
93
|
+
value: ['2024', 'North', 'ProductA']
|
|
94
|
+
}));
|
|
95
|
+
const result = await cubeService.getRandomIntersection('TestCube');
|
|
96
|
+
expect(result).toEqual(['2024', 'North', 'ProductA']);
|
|
97
|
+
expect(mockRestService.get).toHaveBeenCalledWith("/Cubes('TestCube')/tm1.GetRandomIntersection");
|
|
98
|
+
console.log('✅ getRandomIntersection test passed');
|
|
99
|
+
});
|
|
100
|
+
test('getRandomIntersection with unique names should include uniqueNames parameter', async () => {
|
|
101
|
+
mockRestService.get.mockResolvedValue(createMockResponse({
|
|
102
|
+
value: ['[Year].[2024]', '[Region].[North]', '[Product].[ProductA]']
|
|
103
|
+
}));
|
|
104
|
+
const result = await cubeService.getRandomIntersection('TestCube', true);
|
|
105
|
+
expect(result).toEqual(['[Year].[2024]', '[Region].[North]', '[Product].[ProductA]']);
|
|
106
|
+
expect(mockRestService.get).toHaveBeenCalledWith("/Cubes('TestCube')/tm1.GetRandomIntersection?uniqueNames=true");
|
|
107
|
+
console.log('✅ getRandomIntersection with unique names test passed');
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
describe('Memory Management Functions', () => {
|
|
111
|
+
test('load should load cube into memory', async () => {
|
|
112
|
+
mockRestService.post.mockResolvedValue(createMockResponse({}));
|
|
113
|
+
await cubeService.load('TestCube');
|
|
114
|
+
expect(mockRestService.post).toHaveBeenCalledWith("/Cubes('TestCube')/tm1.Load");
|
|
115
|
+
console.log('✅ load test passed');
|
|
116
|
+
});
|
|
117
|
+
test('unload should unload cube from memory', async () => {
|
|
118
|
+
mockRestService.post.mockResolvedValue(createMockResponse({}));
|
|
119
|
+
await cubeService.unload('TestCube');
|
|
120
|
+
expect(mockRestService.post).toHaveBeenCalledWith("/Cubes('TestCube')/tm1.Unload");
|
|
121
|
+
console.log('✅ unload test passed');
|
|
122
|
+
});
|
|
123
|
+
test('lock should lock cube', async () => {
|
|
124
|
+
mockRestService.post.mockResolvedValue(createMockResponse({}));
|
|
125
|
+
await cubeService.lock('TestCube');
|
|
126
|
+
expect(mockRestService.post).toHaveBeenCalledWith("/Cubes('TestCube')/tm1.Lock");
|
|
127
|
+
console.log('✅ lock test passed');
|
|
128
|
+
});
|
|
129
|
+
test('unlock should unlock cube', async () => {
|
|
130
|
+
mockRestService.post.mockResolvedValue(createMockResponse({}));
|
|
131
|
+
await cubeService.unlock('TestCube');
|
|
132
|
+
expect(mockRestService.post).toHaveBeenCalledWith("/Cubes('TestCube')/tm1.Unlock");
|
|
133
|
+
console.log('✅ unlock test passed');
|
|
134
|
+
});
|
|
135
|
+
test('cubeSaveData should save cube data to disk', async () => {
|
|
136
|
+
mockRestService.post.mockResolvedValue(createMockResponse({}));
|
|
137
|
+
await cubeService.cubeSaveData('TestCube');
|
|
138
|
+
expect(mockRestService.post).toHaveBeenCalledWith("/Cubes('TestCube')/tm1.SaveData");
|
|
139
|
+
console.log('✅ cubeSaveData test passed');
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
describe('Memory Configuration Functions', () => {
|
|
143
|
+
test('getVmm should get view storage max memory', async () => {
|
|
144
|
+
mockRestService.get.mockResolvedValue(createMockResponse('256'));
|
|
145
|
+
const result = await cubeService.getVmm('TestCube');
|
|
146
|
+
expect(result).toBe(256);
|
|
147
|
+
expect(mockRestService.get).toHaveBeenCalledWith("/Cubes('TestCube')/ViewStorageMaxMemory/$value");
|
|
148
|
+
console.log('✅ getVmm test passed');
|
|
149
|
+
});
|
|
150
|
+
test('setVmm should set view storage max memory', async () => {
|
|
151
|
+
mockRestService.patch.mockResolvedValue(createMockResponse({}));
|
|
152
|
+
await cubeService.setVmm('TestCube', 512);
|
|
153
|
+
expect(mockRestService.patch).toHaveBeenCalledWith("/Cubes('TestCube')/ViewStorageMaxMemory", { Value: 512 });
|
|
154
|
+
console.log('✅ setVmm test passed');
|
|
155
|
+
});
|
|
156
|
+
test('getVmt should get view storage min time', async () => {
|
|
157
|
+
mockRestService.get.mockResolvedValue(createMockResponse('30'));
|
|
158
|
+
const result = await cubeService.getVmt('TestCube');
|
|
159
|
+
expect(result).toBe(30);
|
|
160
|
+
expect(mockRestService.get).toHaveBeenCalledWith("/Cubes('TestCube')/ViewStorageMinTime/$value");
|
|
161
|
+
console.log('✅ getVmt test passed');
|
|
162
|
+
});
|
|
163
|
+
test('setVmt should set view storage min time', async () => {
|
|
164
|
+
mockRestService.patch.mockResolvedValue(createMockResponse({}));
|
|
165
|
+
await cubeService.setVmt('TestCube', 60);
|
|
166
|
+
expect(mockRestService.patch).toHaveBeenCalledWith("/Cubes('TestCube')/ViewStorageMinTime", { Value: 60 });
|
|
167
|
+
console.log('✅ setVmt test passed');
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
describe('Rules Management Functions', () => {
|
|
171
|
+
test('checkRules should validate cube rules syntax', async () => {
|
|
172
|
+
mockRestService.post.mockResolvedValue(createMockResponse({
|
|
173
|
+
Errors: [],
|
|
174
|
+
Valid: true
|
|
175
|
+
}));
|
|
176
|
+
const result = await cubeService.checkRules('TestCube');
|
|
177
|
+
expect(result.data.Valid).toBe(true);
|
|
178
|
+
expect(mockRestService.post).toHaveBeenCalledWith("/Cubes('TestCube')/tm1.CheckRules");
|
|
179
|
+
console.log('✅ checkRules test passed');
|
|
180
|
+
});
|
|
181
|
+
test('updateOrCreateRules should update rules with string input', async () => {
|
|
182
|
+
const rulesText = 'RULE; N: = C * 1.1; FEEDERS;';
|
|
183
|
+
mockRestService.patch.mockResolvedValue(createMockResponse({}));
|
|
184
|
+
await cubeService.updateOrCreateRules('TestCube', rulesText);
|
|
185
|
+
expect(mockRestService.patch).toHaveBeenCalledWith("/Cubes('TestCube')/Rules", { Text: rulesText });
|
|
186
|
+
console.log('✅ updateOrCreateRules with string test passed');
|
|
187
|
+
});
|
|
188
|
+
test('updateOrCreateRules should create rules if update fails', async () => {
|
|
189
|
+
const rulesText = 'RULE; N: = C * 1.1; FEEDERS;';
|
|
190
|
+
mockRestService.patch.mockRejectedValue(new Error('Not Found'));
|
|
191
|
+
mockRestService.post.mockResolvedValue(createMockResponse({}));
|
|
192
|
+
await cubeService.updateOrCreateRules('TestCube', rulesText);
|
|
193
|
+
expect(mockRestService.patch).toHaveBeenCalled();
|
|
194
|
+
expect(mockRestService.post).toHaveBeenCalledWith("/Cubes('TestCube')/Rules", { Text: rulesText });
|
|
195
|
+
console.log('✅ updateOrCreateRules fallback to create test passed');
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
describe('Error Handling', () => {
|
|
199
|
+
test('should handle empty search results', async () => {
|
|
200
|
+
const mockCubes = [
|
|
201
|
+
{ name: 'TestCube', dimensions: ['Year', 'Month'], rules: null }
|
|
202
|
+
];
|
|
203
|
+
jest.spyOn(cubeService, 'getAll').mockResolvedValue(mockCubes);
|
|
204
|
+
const result = await cubeService.searchForDimensionSubstring('NonExistent');
|
|
205
|
+
expect(result).toEqual({});
|
|
206
|
+
console.log('✅ Empty search results handling test passed');
|
|
207
|
+
});
|
|
208
|
+
test('should handle cubes without rules in rule search', async () => {
|
|
209
|
+
const mockCubes = [
|
|
210
|
+
{ name: 'TestCube', dimensions: ['Year'], rules: null }
|
|
211
|
+
];
|
|
212
|
+
jest.spyOn(cubeService, 'getAll').mockResolvedValue(mockCubes);
|
|
213
|
+
const result = await cubeService.searchForRuleSubstring('RULE');
|
|
214
|
+
expect(result).toEqual([]);
|
|
215
|
+
console.log('✅ No rules handling test passed');
|
|
216
|
+
});
|
|
217
|
+
test('should handle invalid memory values gracefully', async () => {
|
|
218
|
+
mockRestService.get.mockResolvedValue(createMockResponse('invalid'));
|
|
219
|
+
const result = await cubeService.getVmm('TestCube');
|
|
220
|
+
expect(result).toBe(0);
|
|
221
|
+
console.log('✅ Invalid memory value handling test passed');
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
describe('Integration Tests', () => {
|
|
225
|
+
test('should perform complete cube memory management workflow', async () => {
|
|
226
|
+
mockRestService.post.mockResolvedValue(createMockResponse({}));
|
|
227
|
+
mockRestService.patch.mockResolvedValue(createMockResponse({}));
|
|
228
|
+
mockRestService.get.mockResolvedValue(createMockResponse('128'));
|
|
229
|
+
// Load cube
|
|
230
|
+
await cubeService.load('TestCube');
|
|
231
|
+
// Set memory configuration
|
|
232
|
+
await cubeService.setVmm('TestCube', 256);
|
|
233
|
+
await cubeService.setVmt('TestCube', 30);
|
|
234
|
+
// Verify settings
|
|
235
|
+
const vmm = await cubeService.getVmm('TestCube');
|
|
236
|
+
// Save and unload
|
|
237
|
+
await cubeService.cubeSaveData('TestCube');
|
|
238
|
+
await cubeService.unload('TestCube');
|
|
239
|
+
expect(mockRestService.post).toHaveBeenCalledTimes(3); // load, save, unload
|
|
240
|
+
expect(mockRestService.patch).toHaveBeenCalledTimes(2); // set vmm, set vmt
|
|
241
|
+
expect(vmm).toBe(128);
|
|
242
|
+
console.log('✅ Complete memory management workflow test passed');
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
//# sourceMappingURL=enhancedCubeService.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhancedElementService.test.d.ts","sourceRoot":"","sources":["../../src/tests/enhancedElementService.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const ElementService_1 = require("../services/ElementService");
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
// Mock axios
|
|
9
|
+
jest.mock('axios');
|
|
10
|
+
const mockedAxios = axios_1.default;
|
|
11
|
+
describe('Enhanced ElementService Tests', () => {
|
|
12
|
+
let elementService;
|
|
13
|
+
let mockRestService;
|
|
14
|
+
const createMockResponse = (data, status = 200) => ({
|
|
15
|
+
data,
|
|
16
|
+
status,
|
|
17
|
+
statusText: status === 200 ? 'OK' : status === 201 ? 'Created' : 'Error',
|
|
18
|
+
headers: {},
|
|
19
|
+
config: {}
|
|
20
|
+
});
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
mockRestService = {
|
|
23
|
+
get: jest.fn(),
|
|
24
|
+
post: jest.fn(),
|
|
25
|
+
patch: jest.fn(),
|
|
26
|
+
delete: jest.fn(),
|
|
27
|
+
put: jest.fn()
|
|
28
|
+
};
|
|
29
|
+
elementService = new ElementService_1.ElementService(mockRestService);
|
|
30
|
+
});
|
|
31
|
+
describe('Bulk Operations', () => {
|
|
32
|
+
test('deleteElements should delete multiple elements via REST', async () => {
|
|
33
|
+
const elementNames = ['Element1', 'Element2', 'Element3'];
|
|
34
|
+
mockRestService.delete.mockResolvedValue(createMockResponse({}));
|
|
35
|
+
await elementService.deleteElements('TestDim', 'TestHier', elementNames, false);
|
|
36
|
+
expect(mockRestService.delete).toHaveBeenCalledTimes(3);
|
|
37
|
+
expect(mockRestService.delete).toHaveBeenCalledWith("/Dimensions('TestDim')/Hierarchies('TestHier')/Elements('Element1')");
|
|
38
|
+
console.log('✅ deleteElements via REST test passed');
|
|
39
|
+
});
|
|
40
|
+
test('deleteElements should delete multiple elements via TI', async () => {
|
|
41
|
+
const elementNames = ['Element1', 'Element2'];
|
|
42
|
+
mockRestService.post.mockResolvedValue(createMockResponse({
|
|
43
|
+
ProcessExecuteStatusCode: 'CompletedSuccessfully'
|
|
44
|
+
}));
|
|
45
|
+
await elementService.deleteElements('TestDim', 'TestHier', elementNames, true);
|
|
46
|
+
expect(mockRestService.post).toHaveBeenCalledWith('/ExecuteProcessWithReturn', expect.objectContaining({
|
|
47
|
+
PrologProcedure: expect.stringContaining("HierarchyElementDelete('TestDim','TestHier','Element1')")
|
|
48
|
+
}));
|
|
49
|
+
console.log('✅ deleteElements via TI test passed');
|
|
50
|
+
});
|
|
51
|
+
test('addEdges should create parent-child relationships', async () => {
|
|
52
|
+
const edges = [
|
|
53
|
+
{ parent: 'Total', child: 'Region1', weight: 1 },
|
|
54
|
+
{ parent: 'Total', child: 'Region2', weight: 2 }
|
|
55
|
+
];
|
|
56
|
+
mockRestService.post.mockResolvedValue(createMockResponse({}));
|
|
57
|
+
await elementService.addEdges('TestDim', 'TestHier', edges);
|
|
58
|
+
expect(mockRestService.post).toHaveBeenCalledTimes(2);
|
|
59
|
+
expect(mockRestService.post).toHaveBeenCalledWith("/Dimensions('TestDim')/Hierarchies('TestHier')/Elements('Total')/Components", { Name: 'Region1', Weight: 1 });
|
|
60
|
+
console.log('✅ addEdges test passed');
|
|
61
|
+
});
|
|
62
|
+
test('deleteEdges should remove parent-child relationships via REST', async () => {
|
|
63
|
+
const edges = [
|
|
64
|
+
{ parent: 'Total', child: 'Region1' },
|
|
65
|
+
{ parent: 'Total', child: 'Region2' }
|
|
66
|
+
];
|
|
67
|
+
mockRestService.delete.mockResolvedValue(createMockResponse({}));
|
|
68
|
+
await elementService.deleteEdges('TestDim', 'TestHier', edges, false);
|
|
69
|
+
expect(mockRestService.delete).toHaveBeenCalledTimes(2);
|
|
70
|
+
expect(mockRestService.delete).toHaveBeenCalledWith("/Dimensions('TestDim')/Hierarchies('TestHier')/Elements('Total')/Components('Region1')");
|
|
71
|
+
console.log('✅ deleteEdges via REST test passed');
|
|
72
|
+
});
|
|
73
|
+
test('deleteEdges should remove parent-child relationships via TI', async () => {
|
|
74
|
+
const edges = [{ parent: 'Total', child: 'Region1' }];
|
|
75
|
+
mockRestService.post.mockResolvedValue(createMockResponse({}));
|
|
76
|
+
await elementService.deleteEdges('TestDim', 'TestHier', edges, true);
|
|
77
|
+
expect(mockRestService.post).toHaveBeenCalledWith('/ExecuteProcessWithReturn', expect.objectContaining({
|
|
78
|
+
PrologProcedure: expect.stringContaining("HierarchyElementComponentDelete('TestDim','TestHier','Total','Region1')")
|
|
79
|
+
}));
|
|
80
|
+
console.log('✅ deleteEdges via TI test passed');
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
describe('DataFrame Integration', () => {
|
|
84
|
+
test('getElementsDataframe should return tabular data', async () => {
|
|
85
|
+
mockRestService.get.mockResolvedValue(createMockResponse({
|
|
86
|
+
value: [
|
|
87
|
+
{ Name: 'Element1', Type: 'Numeric', Attributes: { Code: 'E1', Description: 'First' } },
|
|
88
|
+
{ Name: 'Element2', Type: 'String', Attributes: { Code: 'E2', Description: 'Second' } }
|
|
89
|
+
]
|
|
90
|
+
}));
|
|
91
|
+
const result = await elementService.getElementsDataframe('TestDim', 'TestHier', ['Code', 'Description']);
|
|
92
|
+
expect(result).toEqual([
|
|
93
|
+
['Name', 'Type', 'Code', 'Description'],
|
|
94
|
+
['Element1', 'Numeric', 'E1', 'First'],
|
|
95
|
+
['Element2', 'String', 'E2', 'Second']
|
|
96
|
+
]);
|
|
97
|
+
console.log('✅ getElementsDataframe test passed');
|
|
98
|
+
});
|
|
99
|
+
test('createHierarchyFromDataframe should create elements and relationships', async () => {
|
|
100
|
+
const dataFrame = [
|
|
101
|
+
['Name', 'Type', 'Parent1', 'Weight1'],
|
|
102
|
+
['Total', 'Consolidated', '', ''],
|
|
103
|
+
['Region1', 'Numeric', 'Total', '1'],
|
|
104
|
+
['Region2', 'Numeric', 'Total', '2']
|
|
105
|
+
];
|
|
106
|
+
mockRestService.post.mockResolvedValue(createMockResponse({}));
|
|
107
|
+
await elementService.createHierarchyFromDataframe('TestDim', 'TestHier', dataFrame);
|
|
108
|
+
// Should create 3 elements
|
|
109
|
+
expect(mockRestService.post).toHaveBeenCalledTimes(5); // 3 creates + 2 edges
|
|
110
|
+
// Check element creation calls
|
|
111
|
+
expect(mockRestService.post).toHaveBeenCalledWith("/Dimensions('TestDim')/Hierarchies('TestHier')/Elements", JSON.stringify({
|
|
112
|
+
Name: 'Total',
|
|
113
|
+
Type: 'Consolidated'
|
|
114
|
+
}));
|
|
115
|
+
console.log('✅ createHierarchyFromDataframe test passed');
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
describe('Enhanced Element Retrieval', () => {
|
|
119
|
+
test('getElementsCount should return element count', async () => {
|
|
120
|
+
mockRestService.get.mockResolvedValue(createMockResponse('25'));
|
|
121
|
+
const count = await elementService.getElementsCount('TestDim', 'TestHier');
|
|
122
|
+
expect(count).toBe(25);
|
|
123
|
+
expect(mockRestService.get).toHaveBeenCalledWith("/Dimensions('TestDim')/Hierarchies('TestHier')/Elements/$count");
|
|
124
|
+
console.log('✅ getElementsCount test passed');
|
|
125
|
+
});
|
|
126
|
+
test('getElementsCount should filter consolidated elements', async () => {
|
|
127
|
+
mockRestService.get.mockResolvedValue(createMockResponse('15'));
|
|
128
|
+
const count = await elementService.getElementsCount('TestDim', 'TestHier', true);
|
|
129
|
+
expect(count).toBe(15);
|
|
130
|
+
expect(mockRestService.get).toHaveBeenCalledWith("/Dimensions('TestDim')/Hierarchies('TestHier')/Elements/$count?$filter=Type ne 'Consolidated'");
|
|
131
|
+
console.log('✅ getElementsCount with filter test passed');
|
|
132
|
+
});
|
|
133
|
+
test('getLeafElements should return non-consolidated elements', async () => {
|
|
134
|
+
mockRestService.get.mockResolvedValue(createMockResponse({
|
|
135
|
+
value: [
|
|
136
|
+
{ Name: 'Element1', Type: 'Numeric' },
|
|
137
|
+
{ Name: 'Element2', Type: 'String' }
|
|
138
|
+
]
|
|
139
|
+
}));
|
|
140
|
+
const elements = await elementService.getLeafElements('TestDim', 'TestHier');
|
|
141
|
+
expect(elements).toHaveLength(2);
|
|
142
|
+
expect(mockRestService.get).toHaveBeenCalledWith("/Dimensions('TestDim')/Hierarchies('TestHier')/Elements?$expand=*&$filter=Type ne 'Consolidated'");
|
|
143
|
+
console.log('✅ getLeafElements test passed');
|
|
144
|
+
});
|
|
145
|
+
test('getConsolidatedElements should return consolidated elements only', async () => {
|
|
146
|
+
mockRestService.get.mockResolvedValue(createMockResponse({
|
|
147
|
+
value: [
|
|
148
|
+
{ Name: 'Total', Type: 'Consolidated' },
|
|
149
|
+
{ Name: 'Region', Type: 'Consolidated' }
|
|
150
|
+
]
|
|
151
|
+
}));
|
|
152
|
+
const elements = await elementService.getConsolidatedElements('TestDim', 'TestHier');
|
|
153
|
+
expect(elements).toHaveLength(2);
|
|
154
|
+
expect(mockRestService.get).toHaveBeenCalledWith("/Dimensions('TestDim')/Hierarchies('TestHier')/Elements?$expand=*&$filter=Type eq 'Consolidated'");
|
|
155
|
+
console.log('✅ getConsolidatedElements test passed');
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
describe('Element Attributes', () => {
|
|
159
|
+
test('updateElementAttribute should update attribute value', async () => {
|
|
160
|
+
mockRestService.patch.mockResolvedValue(createMockResponse({}));
|
|
161
|
+
await elementService.updateElementAttribute('TestDim', 'TestHier', 'Element1', 'Code', 'E1-NEW');
|
|
162
|
+
expect(mockRestService.patch).toHaveBeenCalledWith("/Dimensions('TestDim')/Hierarchies('TestHier')/Elements('Element1')/Attributes('Code')", { Value: 'E1-NEW' });
|
|
163
|
+
console.log('✅ updateElementAttribute test passed');
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
describe('MDX Operations', () => {
|
|
167
|
+
test('executeSetMdxElementNames should return element names from MDX set', async () => {
|
|
168
|
+
mockRestService.post.mockResolvedValue(createMockResponse({
|
|
169
|
+
value: ['Element1', 'Element2', 'Element3']
|
|
170
|
+
}));
|
|
171
|
+
const elements = await elementService.executeSetMdxElementNames('TestDim', 'TestHier', '{[TestDim].[TestHier].Members}');
|
|
172
|
+
expect(elements).toEqual(['Element1', 'Element2', 'Element3']);
|
|
173
|
+
expect(mockRestService.post).toHaveBeenCalledWith('/ExecuteMDXSetExpression', {
|
|
174
|
+
MDX: '{[TestDim].[TestHier].Members}',
|
|
175
|
+
Dimension: 'TestDim',
|
|
176
|
+
Hierarchy: 'TestHier'
|
|
177
|
+
});
|
|
178
|
+
console.log('✅ executeSetMdxElementNames test passed');
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
describe('Error Handling', () => {
|
|
182
|
+
test('should handle empty element list gracefully', async () => {
|
|
183
|
+
await elementService.deleteElements('TestDim', 'TestHier', [], true);
|
|
184
|
+
// Should not make any API calls
|
|
185
|
+
expect(mockRestService.post).not.toHaveBeenCalled();
|
|
186
|
+
expect(mockRestService.delete).not.toHaveBeenCalled();
|
|
187
|
+
console.log('✅ Empty element list handling test passed');
|
|
188
|
+
});
|
|
189
|
+
test('should handle invalid DataFrame format', async () => {
|
|
190
|
+
const invalidDataFrame = [
|
|
191
|
+
['InvalidColumn', 'AnotherColumn'],
|
|
192
|
+
['Data1', 'Data2']
|
|
193
|
+
];
|
|
194
|
+
await expect(elementService.createHierarchyFromDataframe('TestDim', 'TestHier', invalidDataFrame)).rejects.toThrow('DataFrame must contain Name and Type columns');
|
|
195
|
+
console.log('✅ Invalid DataFrame handling test passed');
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
//# sourceMappingURL=enhancedElementService.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhancedViewService.test.d.ts","sourceRoot":"","sources":["../../src/tests/enhancedViewService.test.ts"],"names":[],"mappings":""}
|