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,293 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DimensionService Tests for tm1npm
|
|
4
|
+
* Comprehensive tests for TM1 Dimension operations with proper mocking
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const DimensionService_1 = require("../services/DimensionService");
|
|
8
|
+
const Dimension_1 = require("../objects/Dimension");
|
|
9
|
+
const TM1Exception_1 = require("../exceptions/TM1Exception");
|
|
10
|
+
// Helper function to create mock AxiosResponse
|
|
11
|
+
const createMockResponse = (data, status = 200) => ({
|
|
12
|
+
data,
|
|
13
|
+
status,
|
|
14
|
+
statusText: status === 200 ? 'OK' : status === 201 ? 'Created' : status === 204 ? 'No Content' : 'Error',
|
|
15
|
+
headers: {},
|
|
16
|
+
config: {}
|
|
17
|
+
});
|
|
18
|
+
describe('DimensionService Tests', () => {
|
|
19
|
+
let dimensionService;
|
|
20
|
+
let mockRestService;
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
// Create comprehensive mock for RestService
|
|
23
|
+
mockRestService = {
|
|
24
|
+
get: jest.fn(),
|
|
25
|
+
post: jest.fn(),
|
|
26
|
+
patch: jest.fn(),
|
|
27
|
+
delete: jest.fn(),
|
|
28
|
+
put: jest.fn(),
|
|
29
|
+
config: {},
|
|
30
|
+
rest: {},
|
|
31
|
+
buildBaseUrl: jest.fn(),
|
|
32
|
+
extractErrorMessage: jest.fn()
|
|
33
|
+
};
|
|
34
|
+
dimensionService = new DimensionService_1.DimensionService(mockRestService);
|
|
35
|
+
});
|
|
36
|
+
describe('Dimension Retrieval Operations', () => {
|
|
37
|
+
test('should get all dimension names', async () => {
|
|
38
|
+
mockRestService.get.mockResolvedValue(createMockResponse({
|
|
39
|
+
value: [
|
|
40
|
+
{ Name: 'Time' },
|
|
41
|
+
{ Name: 'Account' },
|
|
42
|
+
{ Name: 'Version' }
|
|
43
|
+
]
|
|
44
|
+
}));
|
|
45
|
+
const dimensionNames = await dimensionService.getAllNames();
|
|
46
|
+
expect(Array.isArray(dimensionNames)).toBe(true);
|
|
47
|
+
expect(dimensionNames.length).toBe(3);
|
|
48
|
+
expect(dimensionNames).toEqual(['Time', 'Account', 'Version']);
|
|
49
|
+
expect(mockRestService.get).toHaveBeenCalledWith("/Dimensions?$select=Name");
|
|
50
|
+
console.log('✅ Dimension names retrieved successfully');
|
|
51
|
+
});
|
|
52
|
+
test('should get all dimensions with skip control dimensions', async () => {
|
|
53
|
+
mockRestService.get.mockResolvedValue(createMockResponse({
|
|
54
|
+
value: [
|
|
55
|
+
{ Name: 'Time', Hierarchies: [{ Name: 'Time' }] },
|
|
56
|
+
{ Name: 'Account', Hierarchies: [{ Name: 'Account' }] }
|
|
57
|
+
]
|
|
58
|
+
}));
|
|
59
|
+
const dimensions = await dimensionService.getAll(true); // skip control dimensions
|
|
60
|
+
expect(Array.isArray(dimensions)).toBe(true);
|
|
61
|
+
expect(dimensions.length).toBe(2);
|
|
62
|
+
expect(dimensions[0].name).toBe('Time');
|
|
63
|
+
expect(dimensions[1].name).toBe('Account');
|
|
64
|
+
console.log('✅ All dimensions retrieved with control dimension filtering');
|
|
65
|
+
});
|
|
66
|
+
test('should get a specific dimension if it exists', async () => {
|
|
67
|
+
mockRestService.get.mockResolvedValueOnce(createMockResponse({
|
|
68
|
+
value: [{ Name: 'Time' }]
|
|
69
|
+
}));
|
|
70
|
+
mockRestService.get.mockResolvedValueOnce(createMockResponse({
|
|
71
|
+
Name: 'Time',
|
|
72
|
+
Hierarchies: [{ Name: 'Time', Elements: [] }]
|
|
73
|
+
}));
|
|
74
|
+
const dimensionNames = await dimensionService.getAllNames();
|
|
75
|
+
expect(dimensionNames).toContain('Time');
|
|
76
|
+
const dimension = await dimensionService.get('Time');
|
|
77
|
+
expect(dimension).toBeDefined();
|
|
78
|
+
expect(dimension.name).toBe('Time');
|
|
79
|
+
console.log('✅ Specific dimension retrieved successfully');
|
|
80
|
+
});
|
|
81
|
+
test('should check if a dimension exists', async () => {
|
|
82
|
+
// Test existing dimension
|
|
83
|
+
mockRestService.get.mockResolvedValue(createMockResponse({
|
|
84
|
+
Name: 'Time',
|
|
85
|
+
Hierarchies: []
|
|
86
|
+
}));
|
|
87
|
+
const exists = await dimensionService.exists('Time');
|
|
88
|
+
expect(exists).toBe(true);
|
|
89
|
+
console.log('✅ Dimension existence check working');
|
|
90
|
+
});
|
|
91
|
+
test('should check if a dimension does not exist', async () => {
|
|
92
|
+
// Test non-existing dimension
|
|
93
|
+
const mockError = new TM1Exception_1.TM1RestException('Dimension not found', 404, { status: 404 });
|
|
94
|
+
mockRestService.get.mockRejectedValue(mockError);
|
|
95
|
+
const notExists = await dimensionService.exists('NonExistentDimension');
|
|
96
|
+
expect(notExists).toBe(false);
|
|
97
|
+
console.log('✅ Dimension non-existence check working');
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
describe('Hierarchy Operations', () => {
|
|
101
|
+
test('should get hierarchies count for existing dimensions', async () => {
|
|
102
|
+
mockRestService.get.mockResolvedValue(createMockResponse({
|
|
103
|
+
Name: 'Time',
|
|
104
|
+
Hierarchies: [
|
|
105
|
+
{ Name: 'Time' },
|
|
106
|
+
{ Name: 'TimeAlternate' }
|
|
107
|
+
]
|
|
108
|
+
}));
|
|
109
|
+
const dimension = await dimensionService.get('Time');
|
|
110
|
+
expect(dimension.hierarchies).toBeDefined();
|
|
111
|
+
expect(dimension.hierarchies.length).toBe(2);
|
|
112
|
+
expect(dimension.hierarchies[0].name).toBe('Time');
|
|
113
|
+
console.log('✅ Hierarchy operations working');
|
|
114
|
+
});
|
|
115
|
+
test('should get elements count for dimension', async () => {
|
|
116
|
+
mockRestService.get.mockResolvedValue(createMockResponse({
|
|
117
|
+
Name: 'Account',
|
|
118
|
+
Hierarchies: [{
|
|
119
|
+
Name: 'Account',
|
|
120
|
+
Elements: [
|
|
121
|
+
{ Name: 'Revenue' },
|
|
122
|
+
{ Name: 'Expenses' },
|
|
123
|
+
{ Name: 'NetIncome' }
|
|
124
|
+
]
|
|
125
|
+
}]
|
|
126
|
+
}));
|
|
127
|
+
const dimension = await dimensionService.get('Account');
|
|
128
|
+
const elements = dimension.hierarchies[0].elements;
|
|
129
|
+
expect(elements).toBeDefined();
|
|
130
|
+
expect(elements.length).toBe(3);
|
|
131
|
+
expect(elements[0].name).toBe('Revenue');
|
|
132
|
+
console.log('✅ Elements count operations working');
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
describe('Element Operations', () => {
|
|
136
|
+
test('should get dimension names for cube', async () => {
|
|
137
|
+
// This would typically be handled by CubeService, but can test dimension context
|
|
138
|
+
mockRestService.get.mockResolvedValue(createMockResponse({
|
|
139
|
+
value: [
|
|
140
|
+
{ Name: 'Time' },
|
|
141
|
+
{ Name: 'Account' },
|
|
142
|
+
{ Name: 'Version' }
|
|
143
|
+
]
|
|
144
|
+
}));
|
|
145
|
+
const dimensionNames = await dimensionService.getAllNames();
|
|
146
|
+
expect(dimensionNames.includes('Time')).toBe(true);
|
|
147
|
+
expect(dimensionNames.includes('Account')).toBe(true);
|
|
148
|
+
expect(dimensionNames.includes('Version')).toBe(true);
|
|
149
|
+
console.log('✅ Dimension names for cube context working');
|
|
150
|
+
});
|
|
151
|
+
test('should handle elements count operation', async () => {
|
|
152
|
+
mockRestService.get.mockResolvedValue(createMockResponse({
|
|
153
|
+
Name: 'Time',
|
|
154
|
+
Hierarchies: [{
|
|
155
|
+
Name: 'Time',
|
|
156
|
+
Elements: Array(12).fill(null).map((_, i) => ({
|
|
157
|
+
Name: `Month${i + 1}`,
|
|
158
|
+
Type: 'Numeric'
|
|
159
|
+
}))
|
|
160
|
+
}]
|
|
161
|
+
}));
|
|
162
|
+
const dimension = await dimensionService.get('Time');
|
|
163
|
+
const elementCount = dimension.hierarchies[0].elements.length;
|
|
164
|
+
expect(elementCount).toBe(12);
|
|
165
|
+
console.log('✅ Elements count operation working');
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
describe('Dimension Error Handling', () => {
|
|
169
|
+
test('should handle invalid dimension names gracefully', async () => {
|
|
170
|
+
mockRestService.get.mockRejectedValue({
|
|
171
|
+
response: { status: 400, statusText: 'Bad Request' }
|
|
172
|
+
});
|
|
173
|
+
await expect(dimensionService.get('')).rejects.toMatchObject({
|
|
174
|
+
response: { status: 400 }
|
|
175
|
+
});
|
|
176
|
+
console.log('✅ Invalid dimension names handled gracefully');
|
|
177
|
+
});
|
|
178
|
+
test('should handle network errors gracefully', async () => {
|
|
179
|
+
mockRestService.get.mockRejectedValue({
|
|
180
|
+
code: 'ECONNREFUSED'
|
|
181
|
+
});
|
|
182
|
+
await expect(dimensionService.getAllNames()).rejects.toMatchObject({
|
|
183
|
+
code: 'ECONNREFUSED'
|
|
184
|
+
});
|
|
185
|
+
console.log('✅ Network errors handled gracefully');
|
|
186
|
+
});
|
|
187
|
+
test('should handle authentication errors', async () => {
|
|
188
|
+
mockRestService.get.mockRejectedValue({
|
|
189
|
+
response: { status: 401, statusText: 'Unauthorized' }
|
|
190
|
+
});
|
|
191
|
+
await expect(dimensionService.getAllNames()).rejects.toMatchObject({
|
|
192
|
+
response: { status: 401 }
|
|
193
|
+
});
|
|
194
|
+
console.log('✅ Authentication errors handled gracefully');
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
describe('Dimension Service Edge Cases', () => {
|
|
198
|
+
test('should handle empty dimension lists', async () => {
|
|
199
|
+
mockRestService.get.mockResolvedValue(createMockResponse({
|
|
200
|
+
value: []
|
|
201
|
+
}));
|
|
202
|
+
const dimensionNames = await dimensionService.getAllNames();
|
|
203
|
+
expect(Array.isArray(dimensionNames)).toBe(true);
|
|
204
|
+
expect(dimensionNames.length).toBe(0);
|
|
205
|
+
console.log('✅ Empty dimension lists handled correctly');
|
|
206
|
+
});
|
|
207
|
+
test('should handle concurrent dimension operations', async () => {
|
|
208
|
+
mockRestService.get.mockResolvedValue(createMockResponse({
|
|
209
|
+
value: [{ Name: 'TestDimension' }]
|
|
210
|
+
}));
|
|
211
|
+
const operations = [
|
|
212
|
+
dimensionService.getAllNames(),
|
|
213
|
+
dimensionService.getAllNames(),
|
|
214
|
+
dimensionService.getAllNames()
|
|
215
|
+
];
|
|
216
|
+
const results = await Promise.allSettled(operations);
|
|
217
|
+
const successful = results.filter(r => r.status === 'fulfilled');
|
|
218
|
+
expect(successful.length).toBe(3);
|
|
219
|
+
console.log('✅ Concurrent operations handled successfully');
|
|
220
|
+
});
|
|
221
|
+
test('should handle large dimension lists efficiently', async () => {
|
|
222
|
+
const largeDimensionList = Array(1000).fill(null).map((_, i) => ({
|
|
223
|
+
Name: `Dimension${i}`,
|
|
224
|
+
Hierarchies: [{ Name: `Dimension${i}` }]
|
|
225
|
+
}));
|
|
226
|
+
mockRestService.get.mockResolvedValue(createMockResponse({
|
|
227
|
+
value: largeDimensionList
|
|
228
|
+
}));
|
|
229
|
+
const startTime = Date.now();
|
|
230
|
+
const dimensionNames = await dimensionService.getAllNames();
|
|
231
|
+
const endTime = Date.now();
|
|
232
|
+
expect(dimensionNames.length).toBe(1000);
|
|
233
|
+
expect(endTime - startTime).toBeLessThan(1000); // Should be fast with mocking
|
|
234
|
+
console.log('✅ Large dimension lists handled efficiently');
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
describe('Dimension Service Integration', () => {
|
|
238
|
+
test('should maintain consistent data across operations', async () => {
|
|
239
|
+
const dimensionData = {
|
|
240
|
+
value: [
|
|
241
|
+
{ Name: 'Time' },
|
|
242
|
+
{ Name: 'Account' }
|
|
243
|
+
]
|
|
244
|
+
};
|
|
245
|
+
mockRestService.get.mockResolvedValue(createMockResponse(dimensionData));
|
|
246
|
+
const names1 = await dimensionService.getAllNames();
|
|
247
|
+
const names2 = await dimensionService.getAllNames();
|
|
248
|
+
expect(names1).toEqual(names2);
|
|
249
|
+
expect(names1).toEqual(['Time', 'Account']);
|
|
250
|
+
console.log('✅ Data consistency maintained across operations');
|
|
251
|
+
});
|
|
252
|
+
test('should handle dimension hierarchy consistency', async () => {
|
|
253
|
+
const timeDimension = {
|
|
254
|
+
Name: 'Time',
|
|
255
|
+
Hierarchies: [
|
|
256
|
+
{ Name: 'Time', Elements: [{ Name: 'Jan' }, { Name: 'Feb' }] }
|
|
257
|
+
]
|
|
258
|
+
};
|
|
259
|
+
mockRestService.get.mockResolvedValueOnce(createMockResponse({
|
|
260
|
+
value: [{ Name: 'Time' }]
|
|
261
|
+
}));
|
|
262
|
+
mockRestService.get.mockResolvedValueOnce(createMockResponse(timeDimension));
|
|
263
|
+
const dimensionNames = await dimensionService.getAllNames();
|
|
264
|
+
expect(dimensionNames).toContain('Time');
|
|
265
|
+
const dimension = await dimensionService.get('Time');
|
|
266
|
+
expect(dimension.hierarchies[0].elements.length).toBe(2);
|
|
267
|
+
console.log('✅ Dimension hierarchy consistency maintained');
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
describe('Dimension CRUD Operations', () => {
|
|
271
|
+
test('should handle dimension creation and deletion lifecycle', async () => {
|
|
272
|
+
const testDimension = new Dimension_1.Dimension('TestDimension');
|
|
273
|
+
// Mock dimension existence check (false) for create method's internal check
|
|
274
|
+
const mockError = new TM1Exception_1.TM1RestException('Dimension not found', 404, { status: 404 });
|
|
275
|
+
mockRestService.get.mockRejectedValueOnce(mockError);
|
|
276
|
+
// Mock dimension creation
|
|
277
|
+
mockRestService.post.mockResolvedValue(createMockResponse({}, 201));
|
|
278
|
+
await dimensionService.create(testDimension);
|
|
279
|
+
// Mock dimension existence check (true after creation)
|
|
280
|
+
mockRestService.get.mockResolvedValueOnce(createMockResponse({
|
|
281
|
+
Name: 'TestDimension',
|
|
282
|
+
Hierarchies: []
|
|
283
|
+
}));
|
|
284
|
+
const afterCreationExists = await dimensionService.exists('TestDimension');
|
|
285
|
+
expect(afterCreationExists).toBe(true);
|
|
286
|
+
// Mock dimension deletion
|
|
287
|
+
mockRestService.delete.mockResolvedValue(createMockResponse({}, 204));
|
|
288
|
+
await dimensionService.delete('TestDimension');
|
|
289
|
+
console.log('✅ Dimension lifecycle operations handled successfully');
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
//# sourceMappingURL=dimensionService.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edgeCases.test.d.ts","sourceRoot":"","sources":["../../src/tests/edgeCases.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Edge Cases Tests for tm1npm
|
|
4
|
+
* Tests for boundary conditions, unusual inputs, and corner cases
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const Utils_1 = require("../utils/Utils");
|
|
8
|
+
describe('Edge Cases Tests', () => {
|
|
9
|
+
describe('String Edge Cases', () => {
|
|
10
|
+
test('should handle empty strings', () => {
|
|
11
|
+
expect((0, Utils_1.formatUrl)('', '')).toBe('');
|
|
12
|
+
expect((0, Utils_1.formatUrl)('/test/{}', '')).toBe('/test/');
|
|
13
|
+
expect((0, Utils_1.verifyVersion)('', '')).toBeFalsy(); // Changed to toBeFalsy since empty strings return false
|
|
14
|
+
expect((0, Utils_1.abbreviateString)('', 10)).toBe('');
|
|
15
|
+
expect((0, Utils_1.tidy)('')).toBe('');
|
|
16
|
+
expect((0, Utils_1.readObjectNameFromUrl)('')).toBe('');
|
|
17
|
+
});
|
|
18
|
+
test('should handle whitespace-only strings', () => {
|
|
19
|
+
const whitespaces = [' ', '\t', '\n', '\r', ' ', '\t\n\r'];
|
|
20
|
+
whitespaces.forEach(ws => {
|
|
21
|
+
expect(() => (0, Utils_1.formatUrl)('/test/{}', ws)).not.toThrow();
|
|
22
|
+
expect(() => (0, Utils_1.verifyVersion)(ws, '1.0')).not.toThrow();
|
|
23
|
+
expect((0, Utils_1.tidy)(ws)).toBe('');
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
test('should handle extremely long strings', () => {
|
|
27
|
+
const longString = 'A'.repeat(100000); // 100KB string
|
|
28
|
+
expect(() => (0, Utils_1.formatUrl)('/test/{}', longString)).not.toThrow();
|
|
29
|
+
expect(() => (0, Utils_1.abbreviateString)(longString, 50)).not.toThrow();
|
|
30
|
+
const abbreviated = (0, Utils_1.abbreviateString)(longString, 50);
|
|
31
|
+
expect(abbreviated.length).toBeLessThanOrEqual(50);
|
|
32
|
+
expect(abbreviated.endsWith('...')).toBe(true);
|
|
33
|
+
});
|
|
34
|
+
test('should handle special Unicode characters', () => {
|
|
35
|
+
const unicodeTests = [
|
|
36
|
+
'🚀🎉💯', // Emojis
|
|
37
|
+
'测试数据', // Chinese
|
|
38
|
+
'тестовые данные', // Cyrillic
|
|
39
|
+
'テストデータ', // Japanese
|
|
40
|
+
'🇺🇸🇯🇵🇨🇳', // Flag emojis
|
|
41
|
+
'café naïve résumé', // Accented characters
|
|
42
|
+
'\\u0000\\u001f\\u007f', // Control characters
|
|
43
|
+
'𝕋𝔼𝕊𝕋', // Mathematical symbols
|
|
44
|
+
];
|
|
45
|
+
unicodeTests.forEach(test => {
|
|
46
|
+
expect(() => (0, Utils_1.formatUrl)('/test/{}', test)).not.toThrow();
|
|
47
|
+
expect(() => (0, Utils_1.abbreviateString)(test, 10)).not.toThrow();
|
|
48
|
+
expect(() => (0, Utils_1.tidy)(test)).not.toThrow();
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
describe('Number Edge Cases', () => {
|
|
53
|
+
test('should handle extreme version numbers', () => {
|
|
54
|
+
const extremeVersions = [
|
|
55
|
+
['0', '0'],
|
|
56
|
+
['999.999.999', '1.0.0'],
|
|
57
|
+
['1.0.0', '999.999.999'],
|
|
58
|
+
['10000.50000.90000', '1.2.3'],
|
|
59
|
+
['1', '1.0.0.0.0.0'],
|
|
60
|
+
['1.2.3.4.5.6.7.8.9', '1.2.3']
|
|
61
|
+
];
|
|
62
|
+
extremeVersions.forEach(([v1, v2]) => {
|
|
63
|
+
expect(() => (0, Utils_1.verifyVersion)(v1, v2)).not.toThrow();
|
|
64
|
+
expect(() => (0, Utils_1.integerizeVersion)(v1)).not.toThrow();
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
test('should handle malformed version strings', () => {
|
|
68
|
+
const malformedVersions = [
|
|
69
|
+
'abc.def.ghi',
|
|
70
|
+
'1.2.3-alpha',
|
|
71
|
+
'1.2.3+build',
|
|
72
|
+
'v1.2.3',
|
|
73
|
+
'1..2..3',
|
|
74
|
+
'.1.2.3',
|
|
75
|
+
'1.2.3.',
|
|
76
|
+
'1,2,3',
|
|
77
|
+
'1-2-3'
|
|
78
|
+
];
|
|
79
|
+
malformedVersions.forEach(version => {
|
|
80
|
+
expect(() => (0, Utils_1.verifyVersion)(version, '1.0.0')).not.toThrow();
|
|
81
|
+
expect(() => (0, Utils_1.integerizeVersion)(version)).not.toThrow();
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
test('should handle extreme abbreviation lengths', () => {
|
|
85
|
+
const text = 'This is a test string for abbreviation';
|
|
86
|
+
expect((0, Utils_1.abbreviateString)(text, 0)).toBe('...');
|
|
87
|
+
expect((0, Utils_1.abbreviateString)(text, 1)).toBe('...');
|
|
88
|
+
expect((0, Utils_1.abbreviateString)(text, 2)).toBe('...');
|
|
89
|
+
expect((0, Utils_1.abbreviateString)(text, 3)).toBe('...');
|
|
90
|
+
expect((0, Utils_1.abbreviateString)(text, 4)).toBe('T...');
|
|
91
|
+
expect((0, Utils_1.abbreviateString)(text, -1)).toBe('...');
|
|
92
|
+
expect((0, Utils_1.abbreviateString)(text, 1000)).toBe(text);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
describe('Array and Iterable Edge Cases', () => {
|
|
96
|
+
test('should handle empty arrays', () => {
|
|
97
|
+
expect((0, Utils_1.buildMdxFromAxes)([])).toBe('');
|
|
98
|
+
expect((0, Utils_1.buildElementsStringFromIterable)([])).toBe('');
|
|
99
|
+
expect((0, Utils_1.wrapTupleInBrackets)([])).toBe('()');
|
|
100
|
+
});
|
|
101
|
+
test('should handle single-element arrays', () => {
|
|
102
|
+
expect((0, Utils_1.wrapTupleInBrackets)(['Element1'])).toBe('[Element1]');
|
|
103
|
+
expect((0, Utils_1.buildElementsStringFromIterable)(['Element1'])).toBe('Element1');
|
|
104
|
+
});
|
|
105
|
+
test('should handle large arrays', () => {
|
|
106
|
+
const largeArray = Array(10000).fill(null).map((_, i) => `Element${i}`);
|
|
107
|
+
expect(() => (0, Utils_1.buildElementsStringFromIterable)(largeArray)).not.toThrow();
|
|
108
|
+
expect(() => (0, Utils_1.wrapTupleInBrackets)(largeArray)).not.toThrow();
|
|
109
|
+
const result = (0, Utils_1.buildElementsStringFromIterable)(largeArray);
|
|
110
|
+
expect(result.split(',').length).toBe(10000);
|
|
111
|
+
});
|
|
112
|
+
test('should handle arrays with special characters', () => {
|
|
113
|
+
const specialElements = [
|
|
114
|
+
'Element with spaces',
|
|
115
|
+
'Element,with,commas',
|
|
116
|
+
'Element[with]brackets',
|
|
117
|
+
'Element{with}braces',
|
|
118
|
+
'Element(with)parens',
|
|
119
|
+
'Element"with"quotes',
|
|
120
|
+
"Element'with'apostrophes",
|
|
121
|
+
'Element\nwith\nnewlines',
|
|
122
|
+
'Element\twith\ttabs'
|
|
123
|
+
];
|
|
124
|
+
expect(() => (0, Utils_1.buildElementsStringFromIterable)(specialElements)).not.toThrow();
|
|
125
|
+
expect(() => (0, Utils_1.wrapTupleInBrackets)(specialElements)).not.toThrow();
|
|
126
|
+
});
|
|
127
|
+
test('should handle different iterable types', () => {
|
|
128
|
+
const set = new Set(['a', 'b', 'c']);
|
|
129
|
+
const map = new Map([['key1', 'value1'], ['key2', 'value2']]);
|
|
130
|
+
expect(() => (0, Utils_1.buildElementsStringFromIterable)(set)).not.toThrow();
|
|
131
|
+
expect(() => (0, Utils_1.buildElementsStringFromIterable)(map.keys())).not.toThrow();
|
|
132
|
+
const setResult = (0, Utils_1.buildElementsStringFromIterable)(set);
|
|
133
|
+
expect(setResult.split(',').length).toBe(3);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
describe('Object Edge Cases', () => {
|
|
137
|
+
test('should handle null and undefined in various contexts', () => {
|
|
138
|
+
expect(() => (0, Utils_1.formatUrl)('/test/{}', null)).not.toThrow();
|
|
139
|
+
expect(() => (0, Utils_1.formatUrl)('/test/{}', undefined)).not.toThrow();
|
|
140
|
+
expect(() => (0, Utils_1.verifyVersion)(null, '1.0')).not.toThrow();
|
|
141
|
+
expect(() => (0, Utils_1.verifyVersion)('1.0', null)).not.toThrow();
|
|
142
|
+
expect(() => (0, Utils_1.abbreviateString)(null, 10)).not.toThrow();
|
|
143
|
+
expect(() => (0, Utils_1.tidy)(null)).not.toThrow();
|
|
144
|
+
});
|
|
145
|
+
test('should handle complex nested objects', () => {
|
|
146
|
+
const complexAxes = [
|
|
147
|
+
{
|
|
148
|
+
Tuples: [
|
|
149
|
+
{
|
|
150
|
+
Members: [
|
|
151
|
+
{ UniqueName: '[Dimension1].[Hierarchy1].[Element1]' },
|
|
152
|
+
{ UniqueName: '[Dimension2].[Hierarchy2].[Element2]' }
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
]
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
Tuples: []
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
Tuples: null
|
|
162
|
+
}
|
|
163
|
+
];
|
|
164
|
+
expect(() => (0, Utils_1.buildMdxFromAxes)(complexAxes)).not.toThrow();
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
describe('CaseAndSpaceInsensitiveMap Edge Cases', () => {
|
|
168
|
+
test('should handle edge cases in keys', () => {
|
|
169
|
+
const map = new Utils_1.CaseAndSpaceInsensitiveMap();
|
|
170
|
+
const edgeKeys = [
|
|
171
|
+
'',
|
|
172
|
+
' ',
|
|
173
|
+
' ',
|
|
174
|
+
'\t',
|
|
175
|
+
'\n',
|
|
176
|
+
'\r\n',
|
|
177
|
+
'a',
|
|
178
|
+
'A',
|
|
179
|
+
' a ',
|
|
180
|
+
' A ',
|
|
181
|
+
'TEST KEY',
|
|
182
|
+
'test key',
|
|
183
|
+
'Test Key',
|
|
184
|
+
'TESTKEY',
|
|
185
|
+
'testkey',
|
|
186
|
+
'TestKey'
|
|
187
|
+
];
|
|
188
|
+
edgeKeys.forEach((key, index) => {
|
|
189
|
+
expect(() => map.set(key, `value${index}`)).not.toThrow();
|
|
190
|
+
});
|
|
191
|
+
// All variations should be treated as the same key for case-insensitive ones
|
|
192
|
+
expect(map.has('test key')).toBe(true);
|
|
193
|
+
expect(map.has('TEST KEY')).toBe(true);
|
|
194
|
+
expect(map.has('testkey')).toBe(true);
|
|
195
|
+
expect(map.has('TESTKEY')).toBe(true);
|
|
196
|
+
});
|
|
197
|
+
test('should handle rapid operations', () => {
|
|
198
|
+
const map = new Utils_1.CaseAndSpaceInsensitiveMap();
|
|
199
|
+
// Rapid set/get/delete cycles
|
|
200
|
+
for (let i = 0; i < 1000; i++) {
|
|
201
|
+
map.set(`key ${i}`, i);
|
|
202
|
+
expect(map.get(`KEY ${i}`)).toBe(i);
|
|
203
|
+
if (i % 2 === 0) {
|
|
204
|
+
map.delete(`key ${i}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
expect(map.size).toBe(500);
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
describe('CaseAndSpaceInsensitiveSet Edge Cases', () => {
|
|
211
|
+
test('should handle duplicate-like values', () => {
|
|
212
|
+
const set = new Utils_1.CaseAndSpaceInsensitiveSet();
|
|
213
|
+
const duplicateLikeValues = [
|
|
214
|
+
'test',
|
|
215
|
+
'TEST',
|
|
216
|
+
'Test',
|
|
217
|
+
'TeSt',
|
|
218
|
+
' test ',
|
|
219
|
+
' TEST ',
|
|
220
|
+
'test ',
|
|
221
|
+
' test',
|
|
222
|
+
'\ttest\t',
|
|
223
|
+
'\ntest\n'
|
|
224
|
+
];
|
|
225
|
+
duplicateLikeValues.forEach(value => {
|
|
226
|
+
set.add(value);
|
|
227
|
+
});
|
|
228
|
+
// Should only have one item (all are equivalent)
|
|
229
|
+
expect(set.size).toBe(1);
|
|
230
|
+
expect(set.has('test')).toBe(true);
|
|
231
|
+
expect(set.has('TEST')).toBe(true);
|
|
232
|
+
expect(set.has(' test ')).toBe(true);
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
describe('URL Parsing Edge Cases', () => {
|
|
236
|
+
test('should handle malformed URLs', () => {
|
|
237
|
+
const malformedUrls = [
|
|
238
|
+
'',
|
|
239
|
+
'/',
|
|
240
|
+
'//',
|
|
241
|
+
'///',
|
|
242
|
+
"Dimensions('')",
|
|
243
|
+
"Dimensions(')",
|
|
244
|
+
"Dimensions('')",
|
|
245
|
+
"Dimensions('test'',)",
|
|
246
|
+
"Dimensions(test)",
|
|
247
|
+
"/Dimensions('/test/')",
|
|
248
|
+
"/Dimensions('test with spaces')",
|
|
249
|
+
"/Dimensions('test\"with\"quotes')"
|
|
250
|
+
];
|
|
251
|
+
malformedUrls.forEach(url => {
|
|
252
|
+
expect(() => (0, Utils_1.readObjectNameFromUrl)(url)).not.toThrow();
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
test('should handle complex dimension hierarchy element tuples', () => {
|
|
256
|
+
const complexTuples = [
|
|
257
|
+
'',
|
|
258
|
+
'SingleElement',
|
|
259
|
+
'Dimension.Element',
|
|
260
|
+
'Dimension.Hierarchy.Element',
|
|
261
|
+
'Dimension.Hierarchy.Element.Extra',
|
|
262
|
+
'[Dimension].[Hierarchy].[Element]',
|
|
263
|
+
'[Dimension with spaces].[Hierarchy].[Element]',
|
|
264
|
+
'[Dimension].[Hierarchy].[Element with spaces]',
|
|
265
|
+
'Dimension..Element', // Double dot
|
|
266
|
+
'.Dimension.Element', // Leading dot
|
|
267
|
+
'Dimension.Element.', // Trailing dot
|
|
268
|
+
'[Malformed].[Tuple',
|
|
269
|
+
'Malformed].[Tuple]'
|
|
270
|
+
];
|
|
271
|
+
complexTuples.forEach(tuple => {
|
|
272
|
+
expect(() => (0, Utils_1.dimensionHierarchyElementTupleFromString)(tuple)).not.toThrow();
|
|
273
|
+
const result = (0, Utils_1.dimensionHierarchyElementTupleFromString)(tuple);
|
|
274
|
+
expect(Array.isArray(result)).toBe(true);
|
|
275
|
+
expect(result.length).toBe(3);
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
});
|
|
279
|
+
describe('Boundary Value Testing', () => {
|
|
280
|
+
test('should handle minimum and maximum safe integers', () => {
|
|
281
|
+
const minSafe = Number.MIN_SAFE_INTEGER;
|
|
282
|
+
const maxSafe = Number.MAX_SAFE_INTEGER;
|
|
283
|
+
expect(() => (0, Utils_1.formatUrl)('/test/{}', minSafe.toString())).not.toThrow();
|
|
284
|
+
expect(() => (0, Utils_1.formatUrl)('/test/{}', maxSafe.toString())).not.toThrow();
|
|
285
|
+
expect(() => (0, Utils_1.verifyVersion)(minSafe.toString(), maxSafe.toString())).not.toThrow();
|
|
286
|
+
});
|
|
287
|
+
test('should handle very small and very large version numbers', () => {
|
|
288
|
+
const versionTests = [
|
|
289
|
+
['0.0.0', '0.0.1'],
|
|
290
|
+
['999999.999999.999999', '1.0.0'],
|
|
291
|
+
['0', '999999999'],
|
|
292
|
+
['1.0', '1.0.0.0.0.0.0.0.1']
|
|
293
|
+
];
|
|
294
|
+
versionTests.forEach(([v1, v2]) => {
|
|
295
|
+
expect(() => (0, Utils_1.verifyVersion)(v1, v2)).not.toThrow();
|
|
296
|
+
expect(typeof (0, Utils_1.verifyVersion)(v1, v2)).toBe('boolean');
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
});
|
|
301
|
+
//# sourceMappingURL=edgeCases.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comprehensive ElementService Tests
|
|
3
|
+
* Target: Achieve 80%+ coverage for ElementService (currently 48%)
|
|
4
|
+
* Testing all element operations including CRUD, hierarchy management, attributes, and advanced features
|
|
5
|
+
*/
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=elementService.comprehensive.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elementService.comprehensive.test.d.ts","sourceRoot":"","sources":["../../src/tests/elementService.comprehensive.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|