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,260 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const ViewService_1 = require("../services/ViewService");
7
+ const axios_1 = __importDefault(require("axios"));
8
+ // Mock axios
9
+ jest.mock('axios');
10
+ const mockedAxios = axios_1.default;
11
+ describe('Enhanced ViewService Tests', () => {
12
+ let viewService;
13
+ let mockRestService;
14
+ const createMockResponse = (data, status = 200) => ({
15
+ data,
16
+ status,
17
+ statusText: status === 200 ? 'OK' : status === 201 ? 'Created' : 'Error',
18
+ headers: {},
19
+ config: {}
20
+ });
21
+ beforeEach(() => {
22
+ mockRestService = {
23
+ get: jest.fn(),
24
+ post: jest.fn(),
25
+ patch: jest.fn(),
26
+ delete: jest.fn(),
27
+ put: jest.fn()
28
+ };
29
+ viewService = new ViewService_1.ViewService(mockRestService);
30
+ });
31
+ describe('View Search Functions', () => {
32
+ test('searchStringInName should find views by name substring', async () => {
33
+ mockRestService.get.mockResolvedValue(createMockResponse({
34
+ value: [
35
+ { Name: 'Sales_View_Q1' },
36
+ { Name: 'Sales_View_Q2' },
37
+ { Name: 'Budget_View_2024' }
38
+ ]
39
+ }));
40
+ const result = await viewService.searchStringInName('TestCube', 'Sales');
41
+ expect(result).toEqual(['Sales_View_Q1', 'Sales_View_Q2', 'Budget_View_2024']);
42
+ expect(mockRestService.get).toHaveBeenCalledWith("/Cubes('TestCube')/Views?$select=Name&$filter=indexof(tolower(Name), 'sales') ge 0");
43
+ console.log('✅ searchStringInName test passed');
44
+ });
45
+ test('searchStringInName should search private views', async () => {
46
+ mockRestService.get.mockResolvedValue(createMockResponse({
47
+ value: [
48
+ { Name: 'Private_Sales_View' }
49
+ ]
50
+ }));
51
+ const result = await viewService.searchStringInName('TestCube', 'Sales', true);
52
+ expect(result).toEqual(['Private_Sales_View']);
53
+ expect(mockRestService.get).toHaveBeenCalledWith("/Cubes('TestCube')/PrivateViews?$select=Name&$filter=indexof(tolower(Name), 'sales') ge 0");
54
+ console.log('✅ searchStringInName private views test passed');
55
+ });
56
+ test('searchStringInMdx should find views by MDX content', async () => {
57
+ mockRestService.get.mockResolvedValue(createMockResponse({
58
+ value: [
59
+ { Name: 'MDXView1', MDX: 'SELECT {[Year].Members} ON 0 FROM [SalesCube]' },
60
+ { Name: 'MDXView2', MDX: 'SELECT {[Product].Members} ON 0 FROM [BudgetCube]' },
61
+ { Name: 'NativeView1', MDX: null }
62
+ ]
63
+ }));
64
+ const result = await viewService.searchStringInMdx('TestCube', 'SalesCube');
65
+ expect(result).toEqual(['MDXView1']);
66
+ expect(mockRestService.get).toHaveBeenCalledWith("/Cubes('TestCube')/Views?$select=Name,MDX");
67
+ console.log('✅ searchStringInMdx test passed');
68
+ });
69
+ test('searchStringInMdx should be case insensitive by default', async () => {
70
+ mockRestService.get.mockResolvedValue(createMockResponse({
71
+ value: [
72
+ { Name: 'MDXView1', MDX: 'SELECT {[YEAR].Members} ON 0 FROM [SalesCube]' }
73
+ ]
74
+ }));
75
+ const result = await viewService.searchStringInMdx('TestCube', 'year');
76
+ expect(result).toEqual(['MDXView1']);
77
+ console.log('✅ searchStringInMdx case insensitive test passed');
78
+ });
79
+ test('searchStringInMdx should respect case sensitivity when disabled', async () => {
80
+ mockRestService.get.mockResolvedValue(createMockResponse({
81
+ value: [
82
+ { Name: 'MDXView1', MDX: 'SELECT {[YEAR].Members} ON 0 FROM [SalesCube]' }
83
+ ]
84
+ }));
85
+ const result = await viewService.searchStringInMdx('TestCube', 'year', false, false);
86
+ expect(result).toEqual([]);
87
+ console.log('✅ searchStringInMdx case sensitive test passed');
88
+ });
89
+ });
90
+ describe('View Type Detection', () => {
91
+ test('isMdxView should return true for MDX views', async () => {
92
+ mockRestService.get.mockResolvedValue(createMockResponse({
93
+ MDX: 'SELECT {[Year].Members} ON 0 FROM [TestCube]'
94
+ }));
95
+ const result = await viewService.isMdxView('TestCube', 'TestView');
96
+ expect(result).toBe(true);
97
+ expect(mockRestService.get).toHaveBeenCalledWith("/Cubes('TestCube')/Views('TestView')/?$select=MDX");
98
+ console.log('✅ isMdxView positive test passed');
99
+ });
100
+ test('isMdxView should return false for native views', async () => {
101
+ mockRestService.get.mockResolvedValue(createMockResponse({
102
+ MDX: null
103
+ }));
104
+ const result = await viewService.isMdxView('TestCube', 'TestView');
105
+ expect(result).toBe(false);
106
+ console.log('✅ isMdxView negative test passed');
107
+ });
108
+ test('isNativeView should return opposite of isMdxView', async () => {
109
+ mockRestService.get.mockResolvedValue(createMockResponse({
110
+ MDX: null
111
+ }));
112
+ const result = await viewService.isNativeView('TestCube', 'TestView');
113
+ expect(result).toBe(true);
114
+ console.log('✅ isNativeView test passed');
115
+ });
116
+ test('isMdxView should check private views', async () => {
117
+ mockRestService.get.mockResolvedValue(createMockResponse({
118
+ MDX: 'SELECT {[Product].Members} ON 0 FROM [TestCube]'
119
+ }));
120
+ const result = await viewService.isMdxView('TestCube', 'PrivateView', true);
121
+ expect(result).toBe(true);
122
+ expect(mockRestService.get).toHaveBeenCalledWith("/Cubes('TestCube')/PrivateViews('PrivateView')/?$select=MDX");
123
+ console.log('✅ isMdxView private view test passed');
124
+ });
125
+ });
126
+ describe('View Count Functions', () => {
127
+ test('getViewCount should return total count for both view types', async () => {
128
+ mockRestService.get
129
+ .mockResolvedValueOnce(createMockResponse('5')) // private count
130
+ .mockResolvedValueOnce(createMockResponse('10')); // public count
131
+ const result = await viewService.getViewCount('TestCube');
132
+ expect(result).toBe(15);
133
+ expect(mockRestService.get).toHaveBeenCalledTimes(2);
134
+ expect(mockRestService.get).toHaveBeenCalledWith("/Cubes('TestCube')/PrivateViews/$count");
135
+ expect(mockRestService.get).toHaveBeenCalledWith("/Cubes('TestCube')/Views/$count");
136
+ console.log('✅ getViewCount total test passed');
137
+ });
138
+ test('getViewCount should return private view count only', async () => {
139
+ mockRestService.get.mockResolvedValue(createMockResponse('3'));
140
+ const result = await viewService.getViewCount('TestCube', true);
141
+ expect(result).toBe(3);
142
+ expect(mockRestService.get).toHaveBeenCalledWith("/Cubes('TestCube')/PrivateViews/$count");
143
+ console.log('✅ getViewCount private test passed');
144
+ });
145
+ test('getViewCount should return public view count only', async () => {
146
+ mockRestService.get.mockResolvedValue(createMockResponse('7'));
147
+ const result = await viewService.getViewCount('TestCube', false);
148
+ expect(result).toBe(7);
149
+ expect(mockRestService.get).toHaveBeenCalledWith("/Cubes('TestCube')/Views/$count");
150
+ console.log('✅ getViewCount public test passed');
151
+ });
152
+ });
153
+ describe('View Name Retrieval by Type', () => {
154
+ test('getMdxViewNames should return only MDX view names', async () => {
155
+ mockRestService.get.mockResolvedValue(createMockResponse({
156
+ value: [
157
+ { Name: 'MDXView1', MDX: 'SELECT {[Year].Members} ON 0 FROM [TestCube]' },
158
+ { Name: 'NativeView1', MDX: null },
159
+ { Name: 'MDXView2', MDX: 'SELECT {[Product].Members} ON 0 FROM [TestCube]' }
160
+ ]
161
+ }));
162
+ const result = await viewService.getMdxViewNames('TestCube');
163
+ expect(result).toEqual(['MDXView1', 'MDXView2']);
164
+ expect(mockRestService.get).toHaveBeenCalledWith("/Cubes('TestCube')/Views?$select=Name,MDX");
165
+ console.log('✅ getMdxViewNames test passed');
166
+ });
167
+ test('getNativeViewNames should return only native view names', async () => {
168
+ mockRestService.get.mockResolvedValue(createMockResponse({
169
+ value: [
170
+ { Name: 'MDXView1', MDX: 'SELECT {[Year].Members} ON 0 FROM [TestCube]' },
171
+ { Name: 'NativeView1', MDX: null },
172
+ { Name: 'NativeView2', MDX: null }
173
+ ]
174
+ }));
175
+ const result = await viewService.getNativeViewNames('TestCube');
176
+ expect(result).toEqual(['NativeView1', 'NativeView2']);
177
+ expect(mockRestService.get).toHaveBeenCalledWith("/Cubes('TestCube')/Views?$select=Name,MDX");
178
+ console.log('✅ getNativeViewNames test passed');
179
+ });
180
+ test('getMdxViewNames should work with private views', async () => {
181
+ mockRestService.get.mockResolvedValue(createMockResponse({
182
+ value: [
183
+ { Name: 'PrivateMDXView', MDX: 'SELECT {[Month].Members} ON 0 FROM [TestCube]' }
184
+ ]
185
+ }));
186
+ const result = await viewService.getMdxViewNames('TestCube', true);
187
+ expect(result).toEqual(['PrivateMDXView']);
188
+ expect(mockRestService.get).toHaveBeenCalledWith("/Cubes('TestCube')/PrivateViews?$select=Name,MDX");
189
+ console.log('✅ getMdxViewNames private test passed');
190
+ });
191
+ });
192
+ describe('Update or Create Functionality', () => {
193
+ test('updateOrCreate should update existing view', async () => {
194
+ const mockView = {
195
+ cube: 'TestCube',
196
+ name: 'TestView',
197
+ mdx: 'SELECT {[Year].Members} ON 0 FROM [TestCube]'
198
+ };
199
+ // Mock exists to return true
200
+ jest.spyOn(viewService, 'exists').mockResolvedValue(true);
201
+ jest.spyOn(viewService, 'update').mockResolvedValue(createMockResponse({}));
202
+ await viewService.updateOrCreate(mockView, false);
203
+ expect(viewService.update).toHaveBeenCalledWith(mockView, false);
204
+ console.log('✅ updateOrCreate update test passed');
205
+ });
206
+ test('updateOrCreate should create non-existing view', async () => {
207
+ const mockView = {
208
+ cube: 'TestCube',
209
+ name: 'NewView',
210
+ mdx: 'SELECT {[Product].Members} ON 0 FROM [TestCube]'
211
+ };
212
+ // Mock exists to return false
213
+ jest.spyOn(viewService, 'exists').mockResolvedValue(false);
214
+ jest.spyOn(viewService, 'create').mockResolvedValue(createMockResponse({}));
215
+ await viewService.updateOrCreate(mockView, false);
216
+ expect(viewService.create).toHaveBeenCalledWith(mockView, false);
217
+ console.log('✅ updateOrCreate create test passed');
218
+ });
219
+ test('updateOrCreate should handle complex exists response for private views', async () => {
220
+ const mockView = {
221
+ cube: 'TestCube',
222
+ name: 'TestView'
223
+ };
224
+ // Mock exists to return [true, false] (private exists, public doesn't)
225
+ jest.spyOn(viewService, 'exists').mockResolvedValue([true, false]);
226
+ jest.spyOn(viewService, 'update').mockResolvedValue(createMockResponse({}));
227
+ await viewService.updateOrCreate(mockView, true);
228
+ expect(viewService.update).toHaveBeenCalledWith(mockView, true);
229
+ console.log('✅ updateOrCreate complex exists test passed');
230
+ });
231
+ });
232
+ describe('Error Handling', () => {
233
+ test('should handle empty search results gracefully', async () => {
234
+ mockRestService.get.mockResolvedValue(createMockResponse({
235
+ value: []
236
+ }));
237
+ const result = await viewService.searchStringInName('TestCube', 'NonExistent');
238
+ expect(result).toEqual([]);
239
+ console.log('✅ Empty search results handling test passed');
240
+ });
241
+ test('should handle invalid count responses', async () => {
242
+ mockRestService.get.mockResolvedValue(createMockResponse('invalid'));
243
+ const result = await viewService.getViewCount('TestCube', false);
244
+ expect(result).toBe(0);
245
+ console.log('✅ Invalid count handling test passed');
246
+ });
247
+ test('should handle views without MDX in search', async () => {
248
+ mockRestService.get.mockResolvedValue(createMockResponse({
249
+ value: [
250
+ { Name: 'NativeView1', MDX: null },
251
+ { Name: 'NativeView2', MDX: undefined }
252
+ ]
253
+ }));
254
+ const result = await viewService.searchStringInMdx('TestCube', 'SELECT');
255
+ expect(result).toEqual([]);
256
+ console.log('✅ Views without MDX handling test passed');
257
+ });
258
+ });
259
+ });
260
+ //# sourceMappingURL=enhancedViewService.test.js.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Error Handling Tests for tm1npm
3
+ * Tests various error scenarios and edge cases
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=errorHandling.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHandling.test.d.ts","sourceRoot":"","sources":["../../src/tests/errorHandling.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ /**
3
+ * Error Handling Tests for tm1npm
4
+ * Tests various error scenarios and edge cases
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const axios_1 = __importDefault(require("axios"));
11
+ const TM1Exception_1 = require("../exceptions/TM1Exception");
12
+ const Utils_1 = require("../utils/Utils");
13
+ const testConfig_1 = require("./testConfig");
14
+ describe('Error Handling Tests', () => {
15
+ const config = (0, testConfig_1.loadTestConfig)();
16
+ const baseUrl = `http://${config.address}:${config.port}/api/v1`;
17
+ describe('Network Error Handling', () => {
18
+ test('should handle connection refused errors', async () => {
19
+ const invalidConfig = {
20
+ baseURL: 'http://localhost:9999/api/v1', // Non-existent server
21
+ user: config.user,
22
+ password: config.password,
23
+ timeout: 5000
24
+ };
25
+ await expect(axios_1.default.get('/Configuration/ProductVersion', invalidConfig))
26
+ .rejects.toMatchObject({
27
+ code: 'ECONNREFUSED'
28
+ });
29
+ });
30
+ test('should handle DNS resolution errors', async () => {
31
+ const invalidConfig = {
32
+ baseURL: 'http://nonexistent-tm1-server-12345.com/api/v1',
33
+ user: config.user,
34
+ password: config.password,
35
+ timeout: 5000
36
+ };
37
+ await expect(axios_1.default.get('/Configuration/ProductVersion', invalidConfig))
38
+ .rejects.toMatchObject({
39
+ code: expect.stringMatching(/ENOTFOUND|ECONNREFUSED/)
40
+ });
41
+ });
42
+ test('should handle timeout errors gracefully', async () => {
43
+ const timeoutConfig = {
44
+ baseURL: baseUrl,
45
+ user: config.user,
46
+ password: config.password,
47
+ timeout: 1 // 1ms timeout - will definitely timeout
48
+ };
49
+ await expect(axios_1.default.get('/Configuration/ProductVersion', timeoutConfig))
50
+ .rejects.toMatchObject({
51
+ code: 'ECONNABORTED'
52
+ });
53
+ }, 15000);
54
+ });
55
+ describe('HTTP Error Handling', () => {
56
+ const validConfig = {
57
+ baseURL: baseUrl,
58
+ user: config.user,
59
+ password: config.password,
60
+ timeout: 30000
61
+ };
62
+ test('should handle 404 Not Found errors', async () => {
63
+ var _a, _b, _c;
64
+ try {
65
+ await axios_1.default.get('/NonExistentEndpoint', validConfig);
66
+ }
67
+ catch (error) {
68
+ // Should get some kind of error response (401 or 404 are both acceptable for non-existent endpoints)
69
+ expect((_a = error.response) === null || _a === void 0 ? void 0 : _a.status).toBeDefined();
70
+ expect((_b = error.response) === null || _b === void 0 ? void 0 : _b.status).toBeGreaterThanOrEqual(400);
71
+ expect([401, 404]).toContain((_c = error.response) === null || _c === void 0 ? void 0 : _c.status);
72
+ }
73
+ });
74
+ test('should handle 400 Bad Request errors', async () => {
75
+ var _a, _b;
76
+ // Invalid OData query
77
+ try {
78
+ await axios_1.default.get('/Dimensions?$invalid=query', validConfig);
79
+ // If it doesn't throw, that's also acceptable
80
+ }
81
+ catch (error) {
82
+ // Should get some kind of error response
83
+ expect((_a = error.response) === null || _a === void 0 ? void 0 : _a.status).toBeDefined();
84
+ expect((_b = error.response) === null || _b === void 0 ? void 0 : _b.status).toBeGreaterThanOrEqual(400);
85
+ }
86
+ });
87
+ test('should handle 500 Internal Server Error gracefully', async () => {
88
+ try {
89
+ // Attempt to create invalid data that might cause server error
90
+ await axios_1.default.post('/Dimensions', { InvalidData: true }, validConfig);
91
+ }
92
+ catch (error) {
93
+ if (error.response) {
94
+ expect(error.response.status).toBeGreaterThanOrEqual(400);
95
+ expect(error.response.status).toBeLessThan(600);
96
+ }
97
+ }
98
+ });
99
+ });
100
+ describe('Exception Class Testing', () => {
101
+ test('TM1Exception should be properly constructed', () => {
102
+ const error = new TM1Exception_1.TM1Exception('Test error message');
103
+ expect(error.message).toBe('Test error message');
104
+ expect(error.name).toBe('TM1Exception');
105
+ expect(error).toBeInstanceOf(Error);
106
+ expect(error).toBeInstanceOf(TM1Exception_1.TM1Exception);
107
+ });
108
+ test('TM1RestException should include status and response', () => {
109
+ const mockResponse = { error: 'Not found' };
110
+ const error = new TM1Exception_1.TM1RestException('REST error', 404, mockResponse);
111
+ expect(error.message).toBe('REST error');
112
+ expect(error.name).toBe('TM1RestException');
113
+ expect(error.status).toBe(404);
114
+ expect(error.response).toEqual(mockResponse);
115
+ expect(error).toBeInstanceOf(TM1Exception_1.TM1Exception);
116
+ });
117
+ test('TM1TimeoutException should include timeout info', () => {
118
+ const error = new TM1Exception_1.TM1TimeoutException('Request timed out', 30000);
119
+ expect(error.message).toBe('Request timed out');
120
+ expect(error.name).toBe('TM1TimeoutException');
121
+ expect(error.timeout).toBe(30000);
122
+ expect(error).toBeInstanceOf(TM1Exception_1.TM1Exception);
123
+ });
124
+ });
125
+ describe('Utility Function Error Handling', () => {
126
+ test('formatUrl should handle missing parameters', () => {
127
+ expect(() => (0, Utils_1.formatUrl)("/test/{}/{}", "param1")).not.toThrow();
128
+ expect((0, Utils_1.formatUrl)("/test/{}/{}", "param1")).toContain("param1");
129
+ });
130
+ test('formatUrl should handle null/undefined parameters', () => {
131
+ expect(() => (0, Utils_1.formatUrl)("/test/{}", null)).not.toThrow();
132
+ expect(() => (0, Utils_1.formatUrl)("/test/{}", undefined)).not.toThrow();
133
+ });
134
+ test('verifyVersion should handle malformed version strings', () => {
135
+ expect(() => (0, Utils_1.verifyVersion)("invalid", "1.0.0")).not.toThrow();
136
+ expect(() => (0, Utils_1.verifyVersion)("1.0.0", "invalid")).not.toThrow();
137
+ expect(() => (0, Utils_1.verifyVersion)("", "")).not.toThrow();
138
+ expect(() => (0, Utils_1.verifyVersion)("1", "1.0.0.0.0")).not.toThrow();
139
+ });
140
+ test('CaseAndSpaceInsensitiveMap should handle edge cases', () => {
141
+ const map = new Utils_1.CaseAndSpaceInsensitiveMap();
142
+ expect(() => map.set('', 'empty')).not.toThrow();
143
+ expect(() => map.set(' ', 'spaces')).not.toThrow();
144
+ expect(() => map.get('')).not.toThrow();
145
+ expect(() => map.has('')).not.toThrow();
146
+ expect(() => map.delete('')).not.toThrow();
147
+ // Test with null-like values
148
+ map.set('test', null);
149
+ expect(map.get('test')).toBeNull();
150
+ });
151
+ });
152
+ describe('Data Validation Error Handling', () => {
153
+ test('should handle extremely long strings', () => {
154
+ const longString = 'A'.repeat(10000);
155
+ expect(() => (0, Utils_1.formatUrl)("/test/{}", longString)).not.toThrow();
156
+ const map = new Utils_1.CaseAndSpaceInsensitiveMap();
157
+ expect(() => map.set(longString, 'value')).not.toThrow();
158
+ });
159
+ test('should handle special characters in URLs', () => {
160
+ const specialChars = ['%', '&', '=', '+', ' ', '\n', '\t', '\r'];
161
+ for (const char of specialChars) {
162
+ expect(() => (0, Utils_1.formatUrl)("/test/{}", char)).not.toThrow();
163
+ }
164
+ });
165
+ test('should handle Unicode characters', () => {
166
+ const unicodeStrings = [
167
+ '测试', // Chinese
168
+ 'тест', // Cyrillic
169
+ 'テスト', // Japanese
170
+ '🚀🎉', // Emojis
171
+ 'café' // Accented characters
172
+ ];
173
+ for (const str of unicodeStrings) {
174
+ expect(() => (0, Utils_1.formatUrl)("/test/{}", str)).not.toThrow();
175
+ const result = (0, Utils_1.formatUrl)("/test/{}", str);
176
+ expect(result).toContain(encodeURIComponent(str));
177
+ }
178
+ });
179
+ });
180
+ describe('Memory and Resource Error Handling', () => {
181
+ test('should handle large data structures gracefully', () => {
182
+ const largeMap = new Utils_1.CaseAndSpaceInsensitiveMap();
183
+ // Add many items
184
+ for (let i = 0; i < 1000; i++) {
185
+ largeMap.set(`key${i}`, `value${i}`);
186
+ }
187
+ expect(largeMap.size).toBe(1000);
188
+ expect(largeMap.get('key500')).toBe('value500');
189
+ expect(largeMap.has('KEY500')).toBe(true); // Case insensitive
190
+ });
191
+ test('should handle rapid successive operations', () => {
192
+ const map = new Utils_1.CaseAndSpaceInsensitiveMap();
193
+ // Rapid add/remove cycles
194
+ for (let cycle = 0; cycle < 10; cycle++) {
195
+ for (let i = 0; i < 100; i++) {
196
+ map.set(`temp${i}`, i);
197
+ }
198
+ for (let i = 0; i < 100; i++) {
199
+ map.delete(`temp${i}`);
200
+ }
201
+ }
202
+ expect(map.size).toBe(0);
203
+ });
204
+ });
205
+ describe('Async Error Handling', () => {
206
+ test('should handle promise rejection in utility functions', async () => {
207
+ // Simulate async utility function errors
208
+ const asyncTest = async () => {
209
+ throw new TM1Exception_1.TM1Exception('Async error');
210
+ };
211
+ await expect(asyncTest()).rejects.toThrow('Async error');
212
+ await expect(asyncTest()).rejects.toBeInstanceOf(TM1Exception_1.TM1Exception);
213
+ });
214
+ test('should handle multiple concurrent errors', async () => {
215
+ const errorPromises = Array(5).fill(null).map(async (_, index) => {
216
+ throw new TM1Exception_1.TM1Exception(`Error ${index}`);
217
+ });
218
+ const results = await Promise.allSettled(errorPromises);
219
+ expect(results).toHaveLength(5);
220
+ results.forEach((result, index) => {
221
+ expect(result.status).toBe('rejected');
222
+ expect(result.reason.message).toBe(`Error ${index}`);
223
+ });
224
+ });
225
+ });
226
+ });
227
+ //# sourceMappingURL=errorHandling.test.js.map
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Exception Classes Tests
3
+ * Comprehensive test suite for TM1 exception classes
4
+ * Target: Improve coverage from 0% to 100% for TM1RestException and TM1TimeoutException
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=exceptions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exceptions.test.d.ts","sourceRoot":"","sources":["../../src/tests/exceptions.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}