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,264 @@
1
+ /**
2
+ * Error Handling Tests for tm1npm
3
+ * Tests various error scenarios and edge cases
4
+ */
5
+
6
+ import axios, { AxiosError } from 'axios';
7
+ import { TM1Exception, TM1RestException, TM1TimeoutException } from '../exceptions/TM1Exception';
8
+ import { formatUrl, verifyVersion, CaseAndSpaceInsensitiveMap } from '../utils/Utils';
9
+ import { loadTestConfig } from './testConfig';
10
+
11
+ describe('Error Handling Tests', () => {
12
+ const config = loadTestConfig();
13
+ const baseUrl = `http://${config.address}:${config.port}/api/v1`;
14
+
15
+ describe('Network Error Handling', () => {
16
+ test('should handle connection refused errors', async () => {
17
+ const invalidConfig = {
18
+ baseURL: 'http://localhost:9999/api/v1', // Non-existent server
19
+
20
+ user: config.user,
21
+ password: config.password,
22
+
23
+ timeout: 5000
24
+ };
25
+
26
+ await expect(axios.get('/Configuration/ProductVersion', invalidConfig))
27
+ .rejects.toMatchObject({
28
+ code: 'ECONNREFUSED'
29
+ });
30
+ });
31
+
32
+ test('should handle DNS resolution errors', async () => {
33
+ const invalidConfig = {
34
+ baseURL: 'http://nonexistent-tm1-server-12345.com/api/v1',
35
+
36
+ user: config.user,
37
+ password: config.password,
38
+
39
+ timeout: 5000
40
+ };
41
+
42
+ await expect(axios.get('/Configuration/ProductVersion', invalidConfig))
43
+ .rejects.toMatchObject({
44
+ code: expect.stringMatching(/ENOTFOUND|ECONNREFUSED/)
45
+ });
46
+ });
47
+
48
+ test('should handle timeout errors gracefully', async () => {
49
+ const timeoutConfig = {
50
+ baseURL: baseUrl,
51
+
52
+ user: config.user,
53
+ password: config.password,
54
+
55
+ timeout: 1 // 1ms timeout - will definitely timeout
56
+ };
57
+
58
+ await expect(axios.get('/Configuration/ProductVersion', timeoutConfig))
59
+ .rejects.toMatchObject({
60
+ code: 'ECONNABORTED'
61
+ });
62
+ }, 15000);
63
+ });
64
+
65
+ describe('HTTP Error Handling', () => {
66
+ const validConfig = {
67
+ baseURL: baseUrl,
68
+
69
+ user: config.user,
70
+ password: config.password,
71
+
72
+ timeout: 30000
73
+ };
74
+
75
+ test('should handle 404 Not Found errors', async () => {
76
+ try {
77
+ await axios.get('/NonExistentEndpoint', validConfig);
78
+ } catch (error: any) {
79
+ // Should get some kind of error response (401 or 404 are both acceptable for non-existent endpoints)
80
+ expect(error.response?.status).toBeDefined();
81
+ expect(error.response?.status).toBeGreaterThanOrEqual(400);
82
+ expect([401, 404]).toContain(error.response?.status);
83
+ }
84
+ });
85
+
86
+ test('should handle 400 Bad Request errors', async () => {
87
+ // Invalid OData query
88
+ try {
89
+ await axios.get('/Dimensions?$invalid=query', validConfig);
90
+ // If it doesn't throw, that's also acceptable
91
+ } catch (error: any) {
92
+ // Should get some kind of error response
93
+ expect(error.response?.status).toBeDefined();
94
+ expect(error.response?.status).toBeGreaterThanOrEqual(400);
95
+ }
96
+ });
97
+
98
+ test('should handle 500 Internal Server Error gracefully', async () => {
99
+ try {
100
+ // Attempt to create invalid data that might cause server error
101
+ await axios.post('/Dimensions', { InvalidData: true }, validConfig);
102
+ } catch (error: any) {
103
+ if (error.response) {
104
+ expect(error.response.status).toBeGreaterThanOrEqual(400);
105
+ expect(error.response.status).toBeLessThan(600);
106
+ }
107
+ }
108
+ });
109
+ });
110
+
111
+ describe('Exception Class Testing', () => {
112
+ test('TM1Exception should be properly constructed', () => {
113
+ const error = new TM1Exception('Test error message');
114
+ expect(error.message).toBe('Test error message');
115
+ expect(error.name).toBe('TM1Exception');
116
+ expect(error).toBeInstanceOf(Error);
117
+ expect(error).toBeInstanceOf(TM1Exception);
118
+ });
119
+
120
+ test('TM1RestException should include status and response', () => {
121
+ const mockResponse = { error: 'Not found' };
122
+ const error = new TM1RestException('REST error', 404, mockResponse);
123
+
124
+ expect(error.message).toBe('REST error');
125
+ expect(error.name).toBe('TM1RestException');
126
+ expect(error.status).toBe(404);
127
+ expect(error.response).toEqual(mockResponse);
128
+ expect(error).toBeInstanceOf(TM1Exception);
129
+ });
130
+
131
+ test('TM1TimeoutException should include timeout info', () => {
132
+ const error = new TM1TimeoutException('Request timed out', 30000);
133
+
134
+ expect(error.message).toBe('Request timed out');
135
+ expect(error.name).toBe('TM1TimeoutException');
136
+ expect(error.timeout).toBe(30000);
137
+ expect(error).toBeInstanceOf(TM1Exception);
138
+ });
139
+ });
140
+
141
+ describe('Utility Function Error Handling', () => {
142
+ test('formatUrl should handle missing parameters', () => {
143
+ expect(() => formatUrl("/test/{}/{}", "param1")).not.toThrow();
144
+ expect(formatUrl("/test/{}/{}", "param1")).toContain("param1");
145
+ });
146
+
147
+ test('formatUrl should handle null/undefined parameters', () => {
148
+ expect(() => formatUrl("/test/{}", null as any)).not.toThrow();
149
+ expect(() => formatUrl("/test/{}", undefined as any)).not.toThrow();
150
+ });
151
+
152
+ test('verifyVersion should handle malformed version strings', () => {
153
+ expect(() => verifyVersion("invalid", "1.0.0")).not.toThrow();
154
+ expect(() => verifyVersion("1.0.0", "invalid")).not.toThrow();
155
+ expect(() => verifyVersion("", "")).not.toThrow();
156
+ expect(() => verifyVersion("1", "1.0.0.0.0")).not.toThrow();
157
+ });
158
+
159
+ test('CaseAndSpaceInsensitiveMap should handle edge cases', () => {
160
+ const map = new CaseAndSpaceInsensitiveMap<string>();
161
+
162
+ expect(() => map.set('', 'empty')).not.toThrow();
163
+ expect(() => map.set(' ', 'spaces')).not.toThrow();
164
+ expect(() => map.get('')).not.toThrow();
165
+ expect(() => map.has('')).not.toThrow();
166
+ expect(() => map.delete('')).not.toThrow();
167
+
168
+ // Test with null-like values
169
+ map.set('test', null as any);
170
+ expect(map.get('test')).toBeNull();
171
+ });
172
+ });
173
+
174
+ describe('Data Validation Error Handling', () => {
175
+ test('should handle extremely long strings', () => {
176
+ const longString = 'A'.repeat(10000);
177
+ expect(() => formatUrl("/test/{}", longString)).not.toThrow();
178
+
179
+ const map = new CaseAndSpaceInsensitiveMap<string>();
180
+ expect(() => map.set(longString, 'value')).not.toThrow();
181
+ });
182
+
183
+ test('should handle special characters in URLs', () => {
184
+ const specialChars = ['%', '&', '=', '+', ' ', '\n', '\t', '\r'];
185
+
186
+ for (const char of specialChars) {
187
+ expect(() => formatUrl("/test/{}", char)).not.toThrow();
188
+ }
189
+ });
190
+
191
+ test('should handle Unicode characters', () => {
192
+ const unicodeStrings = [
193
+ '测试', // Chinese
194
+ 'тест', // Cyrillic
195
+ 'テスト', // Japanese
196
+ '🚀🎉', // Emojis
197
+ 'café' // Accented characters
198
+ ];
199
+
200
+ for (const str of unicodeStrings) {
201
+ expect(() => formatUrl("/test/{}", str)).not.toThrow();
202
+ const result = formatUrl("/test/{}", str);
203
+ expect(result).toContain(encodeURIComponent(str));
204
+ }
205
+ });
206
+ });
207
+
208
+ describe('Memory and Resource Error Handling', () => {
209
+ test('should handle large data structures gracefully', () => {
210
+ const largeMap = new CaseAndSpaceInsensitiveMap<string>();
211
+
212
+ // Add many items
213
+ for (let i = 0; i < 1000; i++) {
214
+ largeMap.set(`key${i}`, `value${i}`);
215
+ }
216
+
217
+ expect(largeMap.size).toBe(1000);
218
+ expect(largeMap.get('key500')).toBe('value500');
219
+ expect(largeMap.has('KEY500')).toBe(true); // Case insensitive
220
+ });
221
+
222
+ test('should handle rapid successive operations', () => {
223
+ const map = new CaseAndSpaceInsensitiveMap<number>();
224
+
225
+ // Rapid add/remove cycles
226
+ for (let cycle = 0; cycle < 10; cycle++) {
227
+ for (let i = 0; i < 100; i++) {
228
+ map.set(`temp${i}`, i);
229
+ }
230
+ for (let i = 0; i < 100; i++) {
231
+ map.delete(`temp${i}`);
232
+ }
233
+ }
234
+
235
+ expect(map.size).toBe(0);
236
+ });
237
+ });
238
+
239
+ describe('Async Error Handling', () => {
240
+ test('should handle promise rejection in utility functions', async () => {
241
+ // Simulate async utility function errors
242
+ const asyncTest = async () => {
243
+ throw new TM1Exception('Async error');
244
+ };
245
+
246
+ await expect(asyncTest()).rejects.toThrow('Async error');
247
+ await expect(asyncTest()).rejects.toBeInstanceOf(TM1Exception);
248
+ });
249
+
250
+ test('should handle multiple concurrent errors', async () => {
251
+ const errorPromises = Array(5).fill(null).map(async (_, index) => {
252
+ throw new TM1Exception(`Error ${index}`);
253
+ });
254
+
255
+ const results = await Promise.allSettled(errorPromises);
256
+
257
+ expect(results).toHaveLength(5);
258
+ results.forEach((result, index) => {
259
+ expect(result.status).toBe('rejected');
260
+ expect((result as PromiseRejectedResult).reason.message).toBe(`Error ${index}`);
261
+ });
262
+ });
263
+ });
264
+ });
@@ -0,0 +1,313 @@
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
+
7
+ import { TM1Exception } from '../exceptions/TM1Exception';
8
+ import { TM1RestException } from '../exceptions/TM1RestException';
9
+ import { TM1TimeoutException } from '../exceptions/TM1TimeoutException';
10
+
11
+ describe('TM1 Exception Classes', () => {
12
+
13
+ describe('TM1RestException', () => {
14
+ test('should create TM1RestException with message only', () => {
15
+ const message = 'REST API error occurred';
16
+ const exception = new TM1RestException(message);
17
+
18
+ expect(exception).toBeInstanceOf(Error);
19
+ expect(exception).toBeInstanceOf(TM1Exception);
20
+ expect(exception).toBeInstanceOf(TM1RestException);
21
+ expect(exception.message).toBe(message);
22
+ expect(exception.name).toBe('TM1RestException');
23
+ expect(exception.status).toBeUndefined();
24
+ expect(exception.response).toBeUndefined();
25
+ });
26
+
27
+ test('should create TM1RestException with message and status', () => {
28
+ const message = 'Unauthorized access';
29
+ const status = 401;
30
+ const exception = new TM1RestException(message, status);
31
+
32
+ expect(exception.message).toBe(message);
33
+ expect(exception.name).toBe('TM1RestException');
34
+ expect(exception.status).toBe(status);
35
+ expect(exception.response).toBeUndefined();
36
+ });
37
+
38
+ test('should create TM1RestException with message, status, and response', () => {
39
+ const message = 'Bad Request';
40
+ const status = 400;
41
+ const response = {
42
+ error: 'Invalid parameter',
43
+ details: 'Parameter X is required'
44
+ };
45
+ const exception = new TM1RestException(message, status, response);
46
+
47
+ expect(exception.message).toBe(message);
48
+ expect(exception.name).toBe('TM1RestException');
49
+ expect(exception.status).toBe(status);
50
+ expect(exception.response).toEqual(response);
51
+ });
52
+
53
+ test('should handle status 0 (network error)', () => {
54
+ const message = 'Network connection failed';
55
+ const status = 0;
56
+ const exception = new TM1RestException(message, status);
57
+
58
+ expect(exception.status).toBe(0);
59
+ expect(exception.message).toBe(message);
60
+ });
61
+
62
+ test('should handle various HTTP status codes', () => {
63
+ const statusCodes = [200, 404, 500, 502, 503];
64
+
65
+ statusCodes.forEach(status => {
66
+ const exception = new TM1RestException(`HTTP ${status} error`, status);
67
+ expect(exception.status).toBe(status);
68
+ expect(exception.name).toBe('TM1RestException');
69
+ });
70
+ });
71
+
72
+ test('should handle complex response objects', () => {
73
+ const complexResponse = {
74
+ error: {
75
+ code: 'INVALID_OPERATION',
76
+ message: 'Operation not supported',
77
+ details: {
78
+ operation: 'deleteElement',
79
+ reason: 'Element is in use'
80
+ }
81
+ },
82
+ timestamp: '2025-01-15T10:30:00Z',
83
+ requestId: 'req-12345'
84
+ };
85
+
86
+ const exception = new TM1RestException('Complex error', 422, complexResponse);
87
+ expect(exception.response).toEqual(complexResponse);
88
+ expect(exception.response.error.code).toBe('INVALID_OPERATION');
89
+ });
90
+
91
+ test('should be throwable and catchable', () => {
92
+ const message = 'Test exception';
93
+ const status = 500;
94
+
95
+ expect(() => {
96
+ throw new TM1RestException(message, status);
97
+ }).toThrow(TM1RestException);
98
+
99
+ try {
100
+ throw new TM1RestException(message, status);
101
+ } catch (error) {
102
+ expect(error).toBeInstanceOf(TM1RestException);
103
+ expect((error as TM1RestException).status).toBe(status);
104
+ }
105
+ });
106
+
107
+ test('should inherit Error properties correctly', () => {
108
+ const exception = new TM1RestException('Test error', 500);
109
+
110
+ expect(exception.stack).toBeDefined();
111
+ expect(exception.toString()).toContain('TM1RestException');
112
+ expect(exception.toString()).toContain('Test error');
113
+ });
114
+ });
115
+
116
+ describe('TM1TimeoutException', () => {
117
+ test('should create TM1TimeoutException with message only', () => {
118
+ const message = 'Operation timed out';
119
+ const exception = new TM1TimeoutException(message);
120
+
121
+ expect(exception).toBeInstanceOf(Error);
122
+ expect(exception).toBeInstanceOf(TM1Exception);
123
+ expect(exception).toBeInstanceOf(TM1TimeoutException);
124
+ expect(exception.message).toBe(message);
125
+ expect(exception.name).toBe('TM1TimeoutException');
126
+ expect(exception.timeout).toBe(0); // Default timeout value
127
+ });
128
+
129
+ test('should create TM1TimeoutException with message and timeout', () => {
130
+ const message = 'Request timed out after 30 seconds';
131
+ const timeout = 30000; // 30 seconds in ms
132
+ const exception = new TM1TimeoutException(message, timeout);
133
+
134
+ expect(exception.message).toBe(message);
135
+ expect(exception.name).toBe('TM1TimeoutException');
136
+ expect(exception.timeout).toBe(timeout);
137
+ });
138
+
139
+ test('should handle zero timeout value', () => {
140
+ const message = 'Immediate timeout';
141
+ const timeout = 0;
142
+ const exception = new TM1TimeoutException(message, timeout);
143
+
144
+ expect(exception.timeout).toBe(0);
145
+ expect(exception.message).toBe(message);
146
+ });
147
+
148
+ test('should handle large timeout values', () => {
149
+ const message = 'Long operation timeout';
150
+ const timeout = 3600000; // 1 hour in ms
151
+ const exception = new TM1TimeoutException(message, timeout);
152
+
153
+ expect(exception.timeout).toBe(timeout);
154
+ expect(exception.message).toBe(message);
155
+ });
156
+
157
+ test('should handle negative timeout values', () => {
158
+ const message = 'Invalid timeout';
159
+ const timeout = -1000;
160
+ const exception = new TM1TimeoutException(message, timeout);
161
+
162
+ expect(exception.timeout).toBe(timeout); // Should accept negative values
163
+ expect(exception.message).toBe(message);
164
+ });
165
+
166
+ test('should default to 0 when no timeout provided', () => {
167
+ const exception = new TM1TimeoutException('Default timeout test');
168
+ expect(exception.timeout).toBe(0);
169
+ });
170
+
171
+ test('should be throwable and catchable', () => {
172
+ const message = 'Timeout test';
173
+ const timeout = 5000;
174
+
175
+ expect(() => {
176
+ throw new TM1TimeoutException(message, timeout);
177
+ }).toThrow(TM1TimeoutException);
178
+
179
+ try {
180
+ throw new TM1TimeoutException(message, timeout);
181
+ } catch (error) {
182
+ expect(error).toBeInstanceOf(TM1TimeoutException);
183
+ expect((error as TM1TimeoutException).timeout).toBe(timeout);
184
+ }
185
+ });
186
+
187
+ test('should inherit Error properties correctly', () => {
188
+ const exception = new TM1TimeoutException('Test timeout', 1000);
189
+
190
+ expect(exception.stack).toBeDefined();
191
+ expect(exception.toString()).toContain('TM1TimeoutException');
192
+ expect(exception.toString()).toContain('Test timeout');
193
+ });
194
+
195
+ test('should handle various timeout scenarios', () => {
196
+ const scenarios = [
197
+ { message: 'Connection timeout', timeout: 5000 },
198
+ { message: 'Read timeout', timeout: 30000 },
199
+ { message: 'Write timeout', timeout: 15000 },
200
+ { message: 'Process timeout', timeout: 300000 }
201
+ ];
202
+
203
+ scenarios.forEach(({ message, timeout }) => {
204
+ const exception = new TM1TimeoutException(message, timeout);
205
+ expect(exception.timeout).toBe(timeout);
206
+ expect(exception.message).toBe(message);
207
+ expect(exception.name).toBe('TM1TimeoutException');
208
+ });
209
+ });
210
+ });
211
+
212
+ describe('Exception Inheritance and Polymorphism', () => {
213
+ test('should properly inherit from TM1Exception', () => {
214
+ const restException = new TM1RestException('REST error', 500);
215
+ const timeoutException = new TM1TimeoutException('Timeout error', 5000);
216
+
217
+ expect(restException).toBeInstanceOf(TM1Exception);
218
+ expect(timeoutException).toBeInstanceOf(TM1Exception);
219
+ });
220
+
221
+ test('should properly inherit from Error', () => {
222
+ const restException = new TM1RestException('REST error', 500);
223
+ const timeoutException = new TM1TimeoutException('Timeout error', 5000);
224
+
225
+ expect(restException).toBeInstanceOf(Error);
226
+ expect(timeoutException).toBeInstanceOf(Error);
227
+ });
228
+
229
+ test('should be distinguishable in catch blocks', () => {
230
+ const testCatch = (exception: Error) => {
231
+ if (exception instanceof TM1RestException) {
232
+ return 'REST';
233
+ } else if (exception instanceof TM1TimeoutException) {
234
+ return 'TIMEOUT';
235
+ } else if (exception instanceof TM1Exception) {
236
+ return 'TM1';
237
+ } else {
238
+ return 'OTHER';
239
+ }
240
+ };
241
+
242
+ expect(testCatch(new TM1RestException('test', 500))).toBe('REST');
243
+ expect(testCatch(new TM1TimeoutException('test', 1000))).toBe('TIMEOUT');
244
+ });
245
+
246
+ test('should maintain proper prototype chain', () => {
247
+ const restException = new TM1RestException('test', 500);
248
+ const timeoutException = new TM1TimeoutException('test', 1000);
249
+
250
+ expect(Object.getPrototypeOf(restException)).toBe(TM1RestException.prototype);
251
+ expect(Object.getPrototypeOf(timeoutException)).toBe(TM1TimeoutException.prototype);
252
+ });
253
+ });
254
+
255
+ describe('Real-world Usage Scenarios', () => {
256
+ test('should handle typical REST API error scenarios', () => {
257
+ // 404 Not Found
258
+ const notFound = new TM1RestException('Cube not found', 404, {
259
+ error: 'CUBE_NOT_FOUND',
260
+ cubeName: 'Sales'
261
+ });
262
+ expect(notFound.status).toBe(404);
263
+ expect(notFound.response.cubeName).toBe('Sales');
264
+
265
+ // 401 Unauthorized
266
+ const unauthorized = new TM1RestException('Authentication failed', 401);
267
+ expect(unauthorized.status).toBe(401);
268
+
269
+ // 500 Internal Server Error
270
+ const serverError = new TM1RestException('Internal server error', 500, {
271
+ error: 'INTERNAL_ERROR',
272
+ details: 'Database connection failed'
273
+ });
274
+ expect(serverError.status).toBe(500);
275
+ expect(serverError.response.details).toBe('Database connection failed');
276
+ });
277
+
278
+ test('should handle typical timeout scenarios', () => {
279
+ // Connection timeout
280
+ const connectionTimeout = new TM1TimeoutException(
281
+ 'Connection timeout after 30 seconds',
282
+ 30000
283
+ );
284
+ expect(connectionTimeout.timeout).toBe(30000);
285
+
286
+ // Process execution timeout
287
+ const processTimeout = new TM1TimeoutException(
288
+ 'Process execution exceeded maximum time',
289
+ 600000 // 10 minutes
290
+ );
291
+ expect(processTimeout.timeout).toBe(600000);
292
+
293
+ // Query timeout
294
+ const queryTimeout = new TM1TimeoutException(
295
+ 'MDX query timeout',
296
+ 120000 // 2 minutes
297
+ );
298
+ expect(queryTimeout.timeout).toBe(120000);
299
+ });
300
+
301
+ test('should support error chaining and context', () => {
302
+ const originalError = new Error('Network failure');
303
+ const restException = new TM1RestException(
304
+ 'Failed to connect to TM1 server',
305
+ 0,
306
+ { originalError, timestamp: Date.now() }
307
+ );
308
+
309
+ expect(restException.response.originalError).toBe(originalError);
310
+ expect(restException.response.timestamp).toBeDefined();
311
+ });
312
+ });
313
+ });