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.
Files changed (451) hide show
  1. package/.env.example +16 -0
  2. package/.eslintrc.js +28 -0
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +36 -0
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  5. package/.github/ISSUE_TEMPLATE/question.md +24 -0
  6. package/.github/workflows/publish-npm.yml +53 -0
  7. package/.github/workflows/test-on-tag.yml +172 -0
  8. package/DEVELOPMENT_GUIDE.md +587 -0
  9. package/LICENSE +21 -0
  10. package/README.md +580 -0
  11. package/jest.ci.config.js +83 -0
  12. package/jest.config.js +68 -0
  13. package/lib/exceptions/TM1Exception.d.ts +17 -0
  14. package/lib/exceptions/TM1Exception.d.ts.map +1 -0
  15. package/lib/exceptions/TM1Exception.js +36 -0
  16. package/lib/exceptions/TM1RestException.d.ts +10 -0
  17. package/lib/exceptions/TM1RestException.d.ts.map +1 -0
  18. package/lib/exceptions/TM1RestException.js +17 -0
  19. package/lib/exceptions/TM1TimeoutException.d.ts +9 -0
  20. package/lib/exceptions/TM1TimeoutException.d.ts.map +1 -0
  21. package/lib/exceptions/TM1TimeoutException.js +16 -0
  22. package/lib/index.d.ts +41 -0
  23. package/lib/index.d.ts.map +1 -0
  24. package/lib/index.js +132 -0
  25. package/lib/objects/Annotation.d.ts +36 -0
  26. package/lib/objects/Annotation.d.ts.map +1 -0
  27. package/lib/objects/Annotation.js +134 -0
  28. package/lib/objects/Application.d.ts +67 -0
  29. package/lib/objects/Application.d.ts.map +1 -0
  30. package/lib/objects/Application.js +125 -0
  31. package/lib/objects/Axis.d.ts +36 -0
  32. package/lib/objects/Axis.d.ts.map +1 -0
  33. package/lib/objects/Axis.js +103 -0
  34. package/lib/objects/Chore.d.ts +43 -0
  35. package/lib/objects/Chore.d.ts.map +1 -0
  36. package/lib/objects/Chore.js +129 -0
  37. package/lib/objects/ChoreFrequency.d.ts +23 -0
  38. package/lib/objects/ChoreFrequency.d.ts.map +1 -0
  39. package/lib/objects/ChoreFrequency.js +61 -0
  40. package/lib/objects/ChoreStartTime.d.ts +15 -0
  41. package/lib/objects/ChoreStartTime.d.ts.map +1 -0
  42. package/lib/objects/ChoreStartTime.js +85 -0
  43. package/lib/objects/ChoreTask.d.ts +28 -0
  44. package/lib/objects/ChoreTask.d.ts.map +1 -0
  45. package/lib/objects/ChoreTask.js +66 -0
  46. package/lib/objects/Cube.d.ts +26 -0
  47. package/lib/objects/Cube.d.ts.map +1 -0
  48. package/lib/objects/Cube.js +109 -0
  49. package/lib/objects/Dimension.d.ts +26 -0
  50. package/lib/objects/Dimension.d.ts.map +1 -0
  51. package/lib/objects/Dimension.js +86 -0
  52. package/lib/objects/Element.d.ts +35 -0
  53. package/lib/objects/Element.d.ts.map +1 -0
  54. package/lib/objects/Element.js +115 -0
  55. package/lib/objects/ElementAttribute.d.ts +28 -0
  56. package/lib/objects/ElementAttribute.d.ts.map +1 -0
  57. package/lib/objects/ElementAttribute.js +97 -0
  58. package/lib/objects/Git.d.ts +21 -0
  59. package/lib/objects/Git.d.ts.map +1 -0
  60. package/lib/objects/Git.js +49 -0
  61. package/lib/objects/GitCommit.d.ts +12 -0
  62. package/lib/objects/GitCommit.d.ts.map +1 -0
  63. package/lib/objects/GitCommit.js +26 -0
  64. package/lib/objects/GitPlan.d.ts +35 -0
  65. package/lib/objects/GitPlan.d.ts.map +1 -0
  66. package/lib/objects/GitPlan.js +78 -0
  67. package/lib/objects/GitRemote.d.ts +12 -0
  68. package/lib/objects/GitRemote.d.ts.map +1 -0
  69. package/lib/objects/GitRemote.js +26 -0
  70. package/lib/objects/Hierarchy.d.ts +47 -0
  71. package/lib/objects/Hierarchy.d.ts.map +1 -0
  72. package/lib/objects/Hierarchy.js +165 -0
  73. package/lib/objects/MDXView.d.ts +19 -0
  74. package/lib/objects/MDXView.d.ts.map +1 -0
  75. package/lib/objects/MDXView.js +67 -0
  76. package/lib/objects/NativeView.d.ts +39 -0
  77. package/lib/objects/NativeView.d.ts.map +1 -0
  78. package/lib/objects/NativeView.js +209 -0
  79. package/lib/objects/Process.d.ts +70 -0
  80. package/lib/objects/Process.d.ts.map +1 -0
  81. package/lib/objects/Process.js +210 -0
  82. package/lib/objects/ProcessDebugBreakpoint.d.ts +60 -0
  83. package/lib/objects/ProcessDebugBreakpoint.d.ts.map +1 -0
  84. package/lib/objects/ProcessDebugBreakpoint.js +168 -0
  85. package/lib/objects/ProcessParameter.d.ts +23 -0
  86. package/lib/objects/ProcessParameter.d.ts.map +1 -0
  87. package/lib/objects/ProcessParameter.js +55 -0
  88. package/lib/objects/ProcessVariable.d.ts +26 -0
  89. package/lib/objects/ProcessVariable.d.ts.map +1 -0
  90. package/lib/objects/ProcessVariable.js +63 -0
  91. package/lib/objects/Rules.d.ts +30 -0
  92. package/lib/objects/Rules.d.ts.map +1 -0
  93. package/lib/objects/Rules.js +103 -0
  94. package/lib/objects/Sandbox.d.ts +21 -0
  95. package/lib/objects/Sandbox.d.ts.map +1 -0
  96. package/lib/objects/Sandbox.js +64 -0
  97. package/lib/objects/Server.d.ts +27 -0
  98. package/lib/objects/Server.d.ts.map +1 -0
  99. package/lib/objects/Server.js +26 -0
  100. package/lib/objects/Subset.d.ts +44 -0
  101. package/lib/objects/Subset.d.ts.map +1 -0
  102. package/lib/objects/Subset.js +222 -0
  103. package/lib/objects/TM1Object.d.ts +8 -0
  104. package/lib/objects/TM1Object.d.ts.map +1 -0
  105. package/lib/objects/TM1Object.js +17 -0
  106. package/lib/objects/TM1Project.d.ts +74 -0
  107. package/lib/objects/TM1Project.d.ts.map +1 -0
  108. package/lib/objects/TM1Project.js +409 -0
  109. package/lib/objects/User.d.ts +42 -0
  110. package/lib/objects/User.d.ts.map +1 -0
  111. package/lib/objects/User.js +157 -0
  112. package/lib/objects/View.d.ts +19 -0
  113. package/lib/objects/View.d.ts.map +1 -0
  114. package/lib/objects/View.js +33 -0
  115. package/lib/objects/index.d.ts +30 -0
  116. package/lib/objects/index.d.ts.map +1 -0
  117. package/lib/objects/index.js +68 -0
  118. package/lib/services/AnnotationService.d.ts +17 -0
  119. package/lib/services/AnnotationService.d.ts.map +1 -0
  120. package/lib/services/AnnotationService.js +91 -0
  121. package/lib/services/ApplicationService.d.ts +21 -0
  122. package/lib/services/ApplicationService.d.ts.map +1 -0
  123. package/lib/services/ApplicationService.js +227 -0
  124. package/lib/services/AuditLogService.d.ts +15 -0
  125. package/lib/services/AuditLogService.d.ts.map +1 -0
  126. package/lib/services/AuditLogService.js +153 -0
  127. package/lib/services/CellService.d.ts +191 -0
  128. package/lib/services/CellService.d.ts.map +1 -0
  129. package/lib/services/CellService.js +597 -0
  130. package/lib/services/ChoreService.d.ts +24 -0
  131. package/lib/services/ChoreService.d.ts.map +1 -0
  132. package/lib/services/ChoreService.js +219 -0
  133. package/lib/services/ConfigurationService.d.ts +18 -0
  134. package/lib/services/ConfigurationService.d.ts.map +1 -0
  135. package/lib/services/ConfigurationService.js +60 -0
  136. package/lib/services/CubeService.d.ts +43 -0
  137. package/lib/services/CubeService.d.ts.map +1 -0
  138. package/lib/services/CubeService.js +296 -0
  139. package/lib/services/DimensionService.d.ts +21 -0
  140. package/lib/services/DimensionService.d.ts.map +1 -0
  141. package/lib/services/DimensionService.js +146 -0
  142. package/lib/services/ElementService.d.ts +132 -0
  143. package/lib/services/ElementService.d.ts.map +1 -0
  144. package/lib/services/ElementService.js +579 -0
  145. package/lib/services/FileService.d.ts +14 -0
  146. package/lib/services/FileService.d.ts.map +1 -0
  147. package/lib/services/FileService.js +65 -0
  148. package/lib/services/GitService.d.ts +23 -0
  149. package/lib/services/GitService.d.ts.map +1 -0
  150. package/lib/services/GitService.js +225 -0
  151. package/lib/services/HierarchyService.d.ts +32 -0
  152. package/lib/services/HierarchyService.d.ts.map +1 -0
  153. package/lib/services/HierarchyService.js +235 -0
  154. package/lib/services/JobService.d.ts +13 -0
  155. package/lib/services/JobService.d.ts.map +1 -0
  156. package/lib/services/JobService.js +83 -0
  157. package/lib/services/LoggerService.d.ts +16 -0
  158. package/lib/services/LoggerService.d.ts.map +1 -0
  159. package/lib/services/LoggerService.js +101 -0
  160. package/lib/services/ManageService.d.ts +47 -0
  161. package/lib/services/ManageService.d.ts.map +1 -0
  162. package/lib/services/ManageService.js +221 -0
  163. package/lib/services/MessageLogService.d.ts +13 -0
  164. package/lib/services/MessageLogService.d.ts.map +1 -0
  165. package/lib/services/MessageLogService.js +175 -0
  166. package/lib/services/MonitoringService.d.ts +29 -0
  167. package/lib/services/MonitoringService.d.ts.map +1 -0
  168. package/lib/services/MonitoringService.js +86 -0
  169. package/lib/services/ObjectService.d.ts +8 -0
  170. package/lib/services/ObjectService.d.ts.map +1 -0
  171. package/lib/services/ObjectService.js +20 -0
  172. package/lib/services/PowerBiService.d.ts +13 -0
  173. package/lib/services/PowerBiService.d.ts.map +1 -0
  174. package/lib/services/PowerBiService.js +52 -0
  175. package/lib/services/ProcessService.d.ts +57 -0
  176. package/lib/services/ProcessService.d.ts.map +1 -0
  177. package/lib/services/ProcessService.js +499 -0
  178. package/lib/services/RestService.d.ts +68 -0
  179. package/lib/services/RestService.d.ts.map +1 -0
  180. package/lib/services/RestService.js +166 -0
  181. package/lib/services/SandboxService.d.ts +28 -0
  182. package/lib/services/SandboxService.d.ts.map +1 -0
  183. package/lib/services/SandboxService.js +197 -0
  184. package/lib/services/SecurityService.d.ts +33 -0
  185. package/lib/services/SecurityService.d.ts.map +1 -0
  186. package/lib/services/SecurityService.js +249 -0
  187. package/lib/services/ServerService.d.ts +55 -0
  188. package/lib/services/ServerService.d.ts.map +1 -0
  189. package/lib/services/ServerService.js +247 -0
  190. package/lib/services/SessionService.d.ts +15 -0
  191. package/lib/services/SessionService.d.ts.map +1 -0
  192. package/lib/services/SessionService.js +68 -0
  193. package/lib/services/SubsetService.d.ts +13 -0
  194. package/lib/services/SubsetService.d.ts.map +1 -0
  195. package/lib/services/SubsetService.js +46 -0
  196. package/lib/services/TM1Service.d.ts +39 -0
  197. package/lib/services/TM1Service.d.ts.map +1 -0
  198. package/lib/services/TM1Service.js +94 -0
  199. package/lib/services/ThreadService.d.ts +15 -0
  200. package/lib/services/ThreadService.d.ts.map +1 -0
  201. package/lib/services/ThreadService.js +104 -0
  202. package/lib/services/TransactionLogService.d.ts +11 -0
  203. package/lib/services/TransactionLogService.d.ts.map +1 -0
  204. package/lib/services/TransactionLogService.js +124 -0
  205. package/lib/services/UserService.d.ts +14 -0
  206. package/lib/services/UserService.d.ts.map +1 -0
  207. package/lib/services/UserService.js +103 -0
  208. package/lib/services/ViewService.d.ts +30 -0
  209. package/lib/services/ViewService.d.ts.map +1 -0
  210. package/lib/services/ViewService.js +331 -0
  211. package/lib/services/index.d.ts +26 -0
  212. package/lib/services/index.d.ts.map +1 -0
  213. package/lib/services/index.js +56 -0
  214. package/lib/tests/100PercentParityCheck.test.d.ts +6 -0
  215. package/lib/tests/100PercentParityCheck.test.d.ts.map +1 -0
  216. package/lib/tests/100PercentParityCheck.test.js +143 -0
  217. package/lib/tests/basic.test.d.ts +6 -0
  218. package/lib/tests/basic.test.d.ts.map +1 -0
  219. package/lib/tests/basic.test.js +52 -0
  220. package/lib/tests/cellService.test.d.ts +6 -0
  221. package/lib/tests/cellService.test.d.ts.map +1 -0
  222. package/lib/tests/cellService.test.js +311 -0
  223. package/lib/tests/ciSetup.d.ts +6 -0
  224. package/lib/tests/ciSetup.d.ts.map +1 -0
  225. package/lib/tests/ciSetup.js +23 -0
  226. package/lib/tests/comprehensive.service.test.d.ts +6 -0
  227. package/lib/tests/comprehensive.service.test.d.ts.map +1 -0
  228. package/lib/tests/comprehensive.service.test.js +507 -0
  229. package/lib/tests/connection.test.d.ts +6 -0
  230. package/lib/tests/connection.test.d.ts.map +1 -0
  231. package/lib/tests/connection.test.js +89 -0
  232. package/lib/tests/cubeService.test.d.ts +6 -0
  233. package/lib/tests/cubeService.test.d.ts.map +1 -0
  234. package/lib/tests/cubeService.test.js +368 -0
  235. package/lib/tests/dimensionService.comprehensive.test.d.ts +7 -0
  236. package/lib/tests/dimensionService.comprehensive.test.d.ts.map +1 -0
  237. package/lib/tests/dimensionService.comprehensive.test.js +614 -0
  238. package/lib/tests/dimensionService.test.d.ts +6 -0
  239. package/lib/tests/dimensionService.test.d.ts.map +1 -0
  240. package/lib/tests/dimensionService.test.js +293 -0
  241. package/lib/tests/edgeCases.test.d.ts +6 -0
  242. package/lib/tests/edgeCases.test.d.ts.map +1 -0
  243. package/lib/tests/edgeCases.test.js +301 -0
  244. package/lib/tests/elementService.comprehensive.test.d.ts +7 -0
  245. package/lib/tests/elementService.comprehensive.test.d.ts.map +1 -0
  246. package/lib/tests/elementService.comprehensive.test.js +846 -0
  247. package/lib/tests/elementService.test.d.ts +6 -0
  248. package/lib/tests/elementService.test.d.ts.map +1 -0
  249. package/lib/tests/elementService.test.js +350 -0
  250. package/lib/tests/enhancedCellService.test.d.ts +2 -0
  251. package/lib/tests/enhancedCellService.test.d.ts.map +1 -0
  252. package/lib/tests/enhancedCellService.test.js +152 -0
  253. package/lib/tests/enhancedCubeService.test.d.ts +2 -0
  254. package/lib/tests/enhancedCubeService.test.d.ts.map +1 -0
  255. package/lib/tests/enhancedCubeService.test.js +246 -0
  256. package/lib/tests/enhancedElementService.test.d.ts +2 -0
  257. package/lib/tests/enhancedElementService.test.d.ts.map +1 -0
  258. package/lib/tests/enhancedElementService.test.js +199 -0
  259. package/lib/tests/enhancedViewService.test.d.ts +2 -0
  260. package/lib/tests/enhancedViewService.test.d.ts.map +1 -0
  261. package/lib/tests/enhancedViewService.test.js +260 -0
  262. package/lib/tests/errorHandling.test.d.ts +6 -0
  263. package/lib/tests/errorHandling.test.d.ts.map +1 -0
  264. package/lib/tests/errorHandling.test.js +227 -0
  265. package/lib/tests/exceptions.test.d.ts +7 -0
  266. package/lib/tests/exceptions.test.d.ts.map +1 -0
  267. package/lib/tests/exceptions.test.js +257 -0
  268. package/lib/tests/hierarchyService.test.d.ts +6 -0
  269. package/lib/tests/hierarchyService.test.d.ts.map +1 -0
  270. package/lib/tests/hierarchyService.test.js +294 -0
  271. package/lib/tests/index.test.d.ts +6 -0
  272. package/lib/tests/index.test.d.ts.map +1 -0
  273. package/lib/tests/index.test.js +346 -0
  274. package/lib/tests/integration.test.d.ts +6 -0
  275. package/lib/tests/integration.test.d.ts.map +1 -0
  276. package/lib/tests/integration.test.js +302 -0
  277. package/lib/tests/integrationTests.test.d.ts +2 -0
  278. package/lib/tests/integrationTests.test.d.ts.map +1 -0
  279. package/lib/tests/integrationTests.test.js +252 -0
  280. package/lib/tests/mdx.advanced.test.d.ts +6 -0
  281. package/lib/tests/mdx.advanced.test.d.ts.map +1 -0
  282. package/lib/tests/mdx.advanced.test.js +437 -0
  283. package/lib/tests/objects.improved.test.d.ts +7 -0
  284. package/lib/tests/objects.improved.test.d.ts.map +1 -0
  285. package/lib/tests/objects.improved.test.js +302 -0
  286. package/lib/tests/performance.test.d.ts +6 -0
  287. package/lib/tests/performance.test.d.ts.map +1 -0
  288. package/lib/tests/performance.test.js +264 -0
  289. package/lib/tests/processService.comprehensive.test.d.ts +7 -0
  290. package/lib/tests/processService.comprehensive.test.d.ts.map +1 -0
  291. package/lib/tests/processService.comprehensive.test.js +656 -0
  292. package/lib/tests/processService.test.d.ts +6 -0
  293. package/lib/tests/processService.test.d.ts.map +1 -0
  294. package/lib/tests/processService.test.js +322 -0
  295. package/lib/tests/restService.test.d.ts +6 -0
  296. package/lib/tests/restService.test.d.ts.map +1 -0
  297. package/lib/tests/restService.test.js +177 -0
  298. package/lib/tests/security.advanced.test.d.ts +6 -0
  299. package/lib/tests/security.advanced.test.d.ts.map +1 -0
  300. package/lib/tests/security.advanced.test.js +407 -0
  301. package/lib/tests/security.test.d.ts +6 -0
  302. package/lib/tests/security.test.d.ts.map +1 -0
  303. package/lib/tests/security.test.js +204 -0
  304. package/lib/tests/securityService.comprehensive.test.d.ts +7 -0
  305. package/lib/tests/securityService.comprehensive.test.d.ts.map +1 -0
  306. package/lib/tests/securityService.comprehensive.test.js +457 -0
  307. package/lib/tests/setup.d.ts +4 -0
  308. package/lib/tests/setup.d.ts.map +1 -0
  309. package/lib/tests/setup.js +40 -0
  310. package/lib/tests/simpleCoverage.test.d.ts +6 -0
  311. package/lib/tests/simpleCoverage.test.d.ts.map +1 -0
  312. package/lib/tests/simpleCoverage.test.js +236 -0
  313. package/lib/tests/stress.performance.test.d.ts +6 -0
  314. package/lib/tests/stress.performance.test.d.ts.map +1 -0
  315. package/lib/tests/stress.performance.test.js +423 -0
  316. package/lib/tests/subsetService.test.d.ts +6 -0
  317. package/lib/tests/subsetService.test.d.ts.map +1 -0
  318. package/lib/tests/subsetService.test.js +271 -0
  319. package/lib/tests/testConfig.d.ts +18 -0
  320. package/lib/tests/testConfig.d.ts.map +1 -0
  321. package/lib/tests/testConfig.js +38 -0
  322. package/lib/tests/testUtils.d.ts +9 -0
  323. package/lib/tests/testUtils.d.ts.map +1 -0
  324. package/lib/tests/testUtils.js +100 -0
  325. package/lib/tests/tm1Service.test.d.ts +7 -0
  326. package/lib/tests/tm1Service.test.d.ts.map +1 -0
  327. package/lib/tests/tm1Service.test.js +290 -0
  328. package/lib/tests/viewService.test.d.ts +6 -0
  329. package/lib/tests/viewService.test.d.ts.map +1 -0
  330. package/lib/tests/viewService.test.js +240 -0
  331. package/lib/utils/Utils.d.ts +90 -0
  332. package/lib/utils/Utils.d.ts.map +1 -0
  333. package/lib/utils/Utils.js +379 -0
  334. package/package.json +81 -0
  335. package/run-all-tests.js +296 -0
  336. package/src/exceptions/TM1Exception.ts +38 -0
  337. package/src/exceptions/TM1RestException.ts +17 -0
  338. package/src/exceptions/TM1TimeoutException.ts +15 -0
  339. package/src/index.ts +94 -0
  340. package/src/objects/Annotation.ts +194 -0
  341. package/src/objects/Application.ts +146 -0
  342. package/src/objects/Axis.ts +149 -0
  343. package/src/objects/Chore.ts +174 -0
  344. package/src/objects/ChoreFrequency.ts +83 -0
  345. package/src/objects/ChoreStartTime.ts +111 -0
  346. package/src/objects/ChoreTask.ts +92 -0
  347. package/src/objects/Cube.ts +125 -0
  348. package/src/objects/Dimension.ts +107 -0
  349. package/src/objects/Element.ts +153 -0
  350. package/src/objects/ElementAttribute.ts +115 -0
  351. package/src/objects/Git.ts +86 -0
  352. package/src/objects/GitCommit.ts +31 -0
  353. package/src/objects/GitPlan.ts +121 -0
  354. package/src/objects/GitRemote.ts +31 -0
  355. package/src/objects/Hierarchy.ts +229 -0
  356. package/src/objects/MDXView.ts +91 -0
  357. package/src/objects/NativeView.ts +268 -0
  358. package/src/objects/Process.ts +320 -0
  359. package/src/objects/ProcessDebugBreakpoint.ts +239 -0
  360. package/src/objects/ProcessParameter.ts +76 -0
  361. package/src/objects/ProcessVariable.ts +89 -0
  362. package/src/objects/Rules.ts +117 -0
  363. package/src/objects/Sandbox.ts +90 -0
  364. package/src/objects/Server.ts +45 -0
  365. package/src/objects/Subset.ts +323 -0
  366. package/src/objects/TM1Object.ts +17 -0
  367. package/src/objects/TM1Project.ts +587 -0
  368. package/src/objects/User.ts +198 -0
  369. package/src/objects/View.ts +43 -0
  370. package/src/objects/index.ts +36 -0
  371. package/src/services/AnnotationService.ts +107 -0
  372. package/src/services/ApplicationService.ts +279 -0
  373. package/src/services/AuditLogService.ts +172 -0
  374. package/src/services/CellService.ts +814 -0
  375. package/src/services/ChoreService.ts +219 -0
  376. package/src/services/ConfigurationService.ts +69 -0
  377. package/src/services/CubeService.ts +338 -0
  378. package/src/services/DimensionService.ts +168 -0
  379. package/src/services/ElementService.ts +966 -0
  380. package/src/services/FileService.ts +67 -0
  381. package/src/services/GitService.ts +324 -0
  382. package/src/services/HierarchyService.ts +284 -0
  383. package/src/services/JobService.ts +59 -0
  384. package/src/services/LoggerService.ts +118 -0
  385. package/src/services/ManageService.ts +322 -0
  386. package/src/services/MessageLogService.ts +211 -0
  387. package/src/services/MonitoringService.ts +105 -0
  388. package/src/services/ObjectService.ts +21 -0
  389. package/src/services/PowerBiService.ts +85 -0
  390. package/src/services/ProcessService.ts +589 -0
  391. package/src/services/RestService.ts +224 -0
  392. package/src/services/SandboxService.ts +217 -0
  393. package/src/services/SecurityService.ts +284 -0
  394. package/src/services/ServerService.ts +313 -0
  395. package/src/services/SessionService.ts +81 -0
  396. package/src/services/SubsetService.ts +52 -0
  397. package/src/services/TM1Service.ts +133 -0
  398. package/src/services/ThreadService.ts +83 -0
  399. package/src/services/TransactionLogService.ts +148 -0
  400. package/src/services/UserService.ts +77 -0
  401. package/src/services/ViewService.ts +398 -0
  402. package/src/services/index.ts +28 -0
  403. package/src/tests/100PercentParityCheck.test.ts +166 -0
  404. package/src/tests/basic.test.ts +59 -0
  405. package/src/tests/cellService.test.ts +405 -0
  406. package/src/tests/ciSetup.ts +26 -0
  407. package/src/tests/comprehensive.service.test.ts +653 -0
  408. package/src/tests/config.ini.template +23 -0
  409. package/src/tests/connection.test.ts +90 -0
  410. package/src/tests/cubeService.test.ts +458 -0
  411. package/src/tests/dimensionService.comprehensive.test.ts +786 -0
  412. package/src/tests/dimensionService.test.ts +373 -0
  413. package/src/tests/edgeCases.test.ts +358 -0
  414. package/src/tests/elementService.comprehensive.test.ts +1190 -0
  415. package/src/tests/elementService.test.ts +472 -0
  416. package/src/tests/enhancedCellService.test.ts +237 -0
  417. package/src/tests/enhancedCubeService.test.ts +384 -0
  418. package/src/tests/enhancedElementService.test.ts +301 -0
  419. package/src/tests/enhancedViewService.test.ts +373 -0
  420. package/src/tests/errorHandling.test.ts +264 -0
  421. package/src/tests/exceptions.test.ts +313 -0
  422. package/src/tests/hierarchyService.test.ts +386 -0
  423. package/src/tests/index.test.ts +376 -0
  424. package/src/tests/integration.test.ts +333 -0
  425. package/src/tests/integrationTests.test.ts +302 -0
  426. package/src/tests/mdx.advanced.test.ts +513 -0
  427. package/src/tests/objects.improved.test.ts +385 -0
  428. package/src/tests/performance.test.ts +314 -0
  429. package/src/tests/processService.comprehensive.test.ts +933 -0
  430. package/src/tests/processService.test.ts +409 -0
  431. package/src/tests/restService.test.ts +218 -0
  432. package/src/tests/security.advanced.test.ts +464 -0
  433. package/src/tests/security.test.ts +233 -0
  434. package/src/tests/securityService.comprehensive.test.ts +582 -0
  435. package/src/tests/setup.ts +42 -0
  436. package/src/tests/simpleCoverage.test.ts +287 -0
  437. package/src/tests/stress.performance.test.ts +531 -0
  438. package/src/tests/subsetService.test.ts +350 -0
  439. package/src/tests/testConfig.ts +53 -0
  440. package/src/tests/testUtils.ts +94 -0
  441. package/src/tests/tm1Service.test.ts +361 -0
  442. package/src/tests/viewService.test.ts +324 -0
  443. package/src/utils/Utils.ts +395 -0
  444. package/tests/README.md +57 -0
  445. package/tests/connection/test-connection.ts +86 -0
  446. package/tests/edge-cases/edge-cases-test.ts +244 -0
  447. package/tests/integration/working-test.ts +193 -0
  448. package/tests/performance/performance-test.ts +133 -0
  449. package/tests/run-all-tests.sh +106 -0
  450. package/tests/security/security-test.ts +103 -0
  451. 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,6 @@
1
+ /**
2
+ * Edge Cases Tests for tm1npm
3
+ * Tests for boundary conditions, unusual inputs, and corner cases
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=edgeCases.test.d.ts.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"}