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,6 @@
1
+ /**
2
+ * ElementService Tests for tm1npm
3
+ * Comprehensive tests for TM1 Element operations with proper mocking
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=elementService.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elementService.test.d.ts","sourceRoot":"","sources":["../../src/tests/elementService.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,350 @@
1
+ "use strict";
2
+ /**
3
+ * ElementService Tests for tm1npm
4
+ * Comprehensive tests for TM1 Element operations with proper mocking
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const ElementService_1 = require("../services/ElementService");
8
+ const Element_1 = require("../objects/Element");
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('ElementService Tests', () => {
19
+ let elementService;
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
+ elementService = new ElementService_1.ElementService(mockRestService);
35
+ });
36
+ describe('Element Retrieval Operations', () => {
37
+ test('should get element names for dimension hierarchy', async () => {
38
+ mockRestService.get.mockResolvedValue(createMockResponse({
39
+ value: [
40
+ { Name: 'Element1' },
41
+ { Name: 'Element2' },
42
+ { Name: 'Element3' }
43
+ ]
44
+ }));
45
+ const elementNames = await elementService.getNames('TestDimension', 'TestHierarchy');
46
+ expect(Array.isArray(elementNames)).toBe(true);
47
+ expect(elementNames.length).toBe(3);
48
+ expect(elementNames).toEqual(['Element1', 'Element2', 'Element3']);
49
+ console.log('✅ Element names retrieved successfully');
50
+ });
51
+ test('should get elements for dimension hierarchy', async () => {
52
+ mockRestService.get.mockResolvedValue(createMockResponse({
53
+ value: [
54
+ {
55
+ Name: 'Element1',
56
+ Type: 'Numeric',
57
+ Level: 0,
58
+ Index: 1,
59
+ Attributes: {}
60
+ },
61
+ {
62
+ Name: 'Element2',
63
+ Type: 'Consolidated',
64
+ Level: 1,
65
+ Index: 2,
66
+ Attributes: {}
67
+ }
68
+ ]
69
+ }));
70
+ const elements = await elementService.getElements('TestDimension', 'TestHierarchy');
71
+ expect(Array.isArray(elements)).toBe(true);
72
+ expect(elements.length).toBe(2);
73
+ expect(elements[0].name).toBe('Element1');
74
+ expect(elements[1].name).toBe('Element2');
75
+ console.log('✅ Elements retrieved successfully');
76
+ });
77
+ test('should get a specific element if it exists', async () => {
78
+ mockRestService.get.mockResolvedValue(createMockResponse({
79
+ Name: 'TestElement',
80
+ Type: 'Numeric',
81
+ Level: 0,
82
+ Index: 1,
83
+ Attributes: {}
84
+ }));
85
+ const element = await elementService.get('TestDimension', 'TestHierarchy', 'TestElement');
86
+ expect(element).toBeDefined();
87
+ expect(element.name).toBe('TestElement');
88
+ console.log('✅ Specific element retrieved successfully');
89
+ });
90
+ test('should check if an element exists', async () => {
91
+ // Test existing element
92
+ mockRestService.get.mockResolvedValue(createMockResponse({
93
+ Name: 'ExistingElement'
94
+ }));
95
+ const exists = await elementService.exists('TestDimension', 'TestHierarchy', 'ExistingElement');
96
+ expect(exists).toBe(true);
97
+ console.log('✅ Element existence check working');
98
+ });
99
+ test('should check if an element does not exist', async () => {
100
+ // Test non-existing element
101
+ const mockError = new TM1Exception_1.TM1RestException('Element not found', 404, { status: 404 });
102
+ mockRestService.get.mockRejectedValue(mockError);
103
+ const notExists = await elementService.exists('TestDimension', 'TestHierarchy', 'NonExistentElement');
104
+ expect(notExists).toBe(false);
105
+ console.log('✅ Element non-existence check working');
106
+ });
107
+ });
108
+ describe('Element CRUD Operations', () => {
109
+ test('should create element', async () => {
110
+ const testElement = new Element_1.Element('NewElement', 'Numeric');
111
+ mockRestService.post.mockResolvedValue(createMockResponse({ Name: 'NewElement' }, 201));
112
+ const result = await elementService.create('TestDimension', 'TestHierarchy', testElement);
113
+ expect(mockRestService.post).toHaveBeenCalled();
114
+ expect(result.status).toBe(201);
115
+ console.log('✅ Element creation successful');
116
+ });
117
+ test('should update existing element', async () => {
118
+ const testElement = new Element_1.Element('UpdatedElement', 'Numeric');
119
+ mockRestService.patch.mockResolvedValue(createMockResponse({ Name: 'UpdatedElement' }, 200));
120
+ const result = await elementService.update('TestDimension', 'TestHierarchy', testElement);
121
+ expect(mockRestService.patch).toHaveBeenCalled();
122
+ expect(result.status).toBe(200);
123
+ console.log('✅ Element update successful');
124
+ });
125
+ test('should delete element', async () => {
126
+ mockRestService.delete.mockResolvedValue(createMockResponse({}, 204));
127
+ const result = await elementService.delete('TestDimension', 'TestHierarchy', 'ElementToDelete');
128
+ expect(mockRestService.delete).toHaveBeenCalled();
129
+ expect(result.status).toBe(204);
130
+ console.log('✅ Element deletion successful');
131
+ });
132
+ test('should update or create element', async () => {
133
+ const testElement = new Element_1.Element('TestElement', 'Numeric');
134
+ // Mock exists method to return true (element exists)
135
+ jest.spyOn(elementService, 'exists').mockResolvedValue(true);
136
+ mockRestService.patch.mockResolvedValue(createMockResponse({ Name: 'TestElement' }, 200));
137
+ const result = await elementService.updateOrCreate('TestDimension', 'TestHierarchy', testElement);
138
+ expect(mockRestService.patch).toHaveBeenCalled();
139
+ expect(result.status).toBe(200);
140
+ console.log('✅ Element update or create successful');
141
+ });
142
+ });
143
+ describe('Element Hierarchy Operations', () => {
144
+ test('should get element parents', async () => {
145
+ mockRestService.get.mockResolvedValue(createMockResponse({
146
+ value: [{ Name: 'Parent1' }]
147
+ }));
148
+ const parents = await elementService.getParents('TestDimension', 'TestHierarchy', 'ChildElement');
149
+ expect(Array.isArray(parents)).toBe(true);
150
+ expect(parents.length).toBe(1);
151
+ expect(parents[0]).toBe('Parent1');
152
+ console.log('✅ Element parents retrieved successfully');
153
+ });
154
+ test('should get element children', async () => {
155
+ mockRestService.get.mockResolvedValue(createMockResponse({
156
+ value: [{ Name: 'Child1' }, { Name: 'Child2' }]
157
+ }));
158
+ const children = await elementService.getChildren('TestDimension', 'TestHierarchy', 'ParentElement');
159
+ expect(Array.isArray(children)).toBe(true);
160
+ expect(children.length).toBe(2);
161
+ expect(children[0]).toBe('Child1');
162
+ expect(children[1]).toBe('Child2');
163
+ console.log('✅ Element children retrieved successfully');
164
+ });
165
+ test('should get leaf elements', async () => {
166
+ mockRestService.get.mockResolvedValue(createMockResponse({
167
+ value: [
168
+ { Name: 'Leaf1', Type: 'String' },
169
+ { Name: 'Leaf2', Type: 'Numeric' }
170
+ ]
171
+ }));
172
+ const leafElements = await elementService.getLeafElements('TestDimension', 'TestHierarchy');
173
+ expect(Array.isArray(leafElements)).toBe(true);
174
+ expect(leafElements.length).toBe(2);
175
+ expect(leafElements[0].name).toBe('Leaf1');
176
+ expect(leafElements[1].name).toBe('Leaf2');
177
+ console.log('✅ Leaf elements retrieved successfully');
178
+ });
179
+ test('should get consolidated elements', async () => {
180
+ mockRestService.get.mockResolvedValue(createMockResponse({
181
+ value: [
182
+ { Name: 'Consol1', Type: 'Consolidated' },
183
+ { Name: 'Consol2', Type: 'Consolidated' }
184
+ ]
185
+ }));
186
+ const consolElements = await elementService.getConsolidatedElements('TestDimension', 'TestHierarchy');
187
+ expect(Array.isArray(consolElements)).toBe(true);
188
+ expect(consolElements.length).toBe(2);
189
+ expect(consolElements[0].name).toBe('Consol1');
190
+ expect(consolElements[1].name).toBe('Consol2');
191
+ console.log('✅ Consolidated elements retrieved successfully');
192
+ });
193
+ });
194
+ describe('Element Count Operations', () => {
195
+ test('should get elements count', async () => {
196
+ mockRestService.get.mockResolvedValue(createMockResponse('150'));
197
+ const count = await elementService.getElementsCount('TestDimension', 'TestHierarchy');
198
+ expect(typeof count).toBe('number');
199
+ expect(count).toBe(150);
200
+ console.log('✅ Elements count retrieved successfully');
201
+ });
202
+ });
203
+ describe('Element Attributes Operations', () => {
204
+ test('should get element attributes', async () => {
205
+ mockRestService.get.mockResolvedValue(createMockResponse({
206
+ value: [
207
+ { Name: 'Attribute1', Type: 'String' },
208
+ { Name: 'Attribute2', Type: 'Numeric' }
209
+ ]
210
+ }));
211
+ const attributes = await elementService.getElementAttributes('TestDimension', 'TestHierarchy');
212
+ expect(Array.isArray(attributes)).toBe(true);
213
+ expect(attributes.length).toBe(2);
214
+ expect(attributes[0].name).toBe('Attribute1');
215
+ expect(attributes[1].name).toBe('Attribute2');
216
+ console.log('✅ Element attributes retrieved successfully');
217
+ });
218
+ test('should update element attribute', async () => {
219
+ mockRestService.patch.mockResolvedValue(createMockResponse({}, 200));
220
+ const result = await elementService.updateElementAttribute('TestDimension', 'TestHierarchy', 'TestElement', 'TestAttribute', 'TestValue');
221
+ expect(mockRestService.patch).toHaveBeenCalled();
222
+ expect(result.status).toBe(200);
223
+ console.log('✅ Element attribute updated successfully');
224
+ });
225
+ });
226
+ describe('Element Error Handling', () => {
227
+ test('should handle invalid element names gracefully', async () => {
228
+ mockRestService.get.mockRejectedValue({
229
+ response: { status: 400, statusText: 'Bad Request' }
230
+ });
231
+ await expect(elementService.get('TestDimension', 'TestHierarchy', ''))
232
+ .rejects.toMatchObject({
233
+ response: { status: 400 }
234
+ });
235
+ console.log('✅ Invalid element names handled gracefully');
236
+ });
237
+ test('should handle network errors gracefully', async () => {
238
+ mockRestService.get.mockRejectedValue({
239
+ code: 'ECONNREFUSED'
240
+ });
241
+ await expect(elementService.getNames('TestDimension', 'TestHierarchy'))
242
+ .rejects.toMatchObject({
243
+ code: 'ECONNREFUSED'
244
+ });
245
+ console.log('✅ Network errors handled gracefully');
246
+ });
247
+ test('should handle authentication errors', async () => {
248
+ mockRestService.get.mockRejectedValue({
249
+ response: { status: 401, statusText: 'Unauthorized' }
250
+ });
251
+ await expect(elementService.getElements('TestDimension', 'TestHierarchy'))
252
+ .rejects.toMatchObject({
253
+ response: { status: 401 }
254
+ });
255
+ console.log('✅ Authentication errors handled gracefully');
256
+ });
257
+ });
258
+ describe('Element Service Edge Cases', () => {
259
+ test('should handle empty element lists', async () => {
260
+ mockRestService.get.mockResolvedValue(createMockResponse({
261
+ value: []
262
+ }));
263
+ const elementNames = await elementService.getNames('EmptyDimension', 'EmptyHierarchy');
264
+ expect(Array.isArray(elementNames)).toBe(true);
265
+ expect(elementNames.length).toBe(0);
266
+ console.log('✅ Empty element lists handled correctly');
267
+ });
268
+ test('should handle concurrent element operations', async () => {
269
+ mockRestService.get.mockResolvedValue(createMockResponse({
270
+ value: [{ Name: 'TestElement' }]
271
+ }));
272
+ const operations = [
273
+ elementService.getNames('TestDimension', 'TestHierarchy'),
274
+ elementService.getNames('TestDimension', 'TestHierarchy'),
275
+ elementService.getNames('TestDimension', 'TestHierarchy')
276
+ ];
277
+ const results = await Promise.allSettled(operations);
278
+ const successful = results.filter(r => r.status === 'fulfilled');
279
+ expect(successful.length).toBe(3);
280
+ console.log('✅ Concurrent operations handled successfully');
281
+ });
282
+ test('should handle large element lists efficiently', async () => {
283
+ const largeElementList = Array(1000).fill(null).map((_, i) => ({
284
+ Name: `Element${i}`,
285
+ Type: 'Numeric',
286
+ Level: 0,
287
+ Index: i
288
+ }));
289
+ mockRestService.get.mockResolvedValue(createMockResponse({
290
+ value: largeElementList
291
+ }));
292
+ const startTime = Date.now();
293
+ const elementNames = await elementService.getNames('LargeDimension', 'LargeHierarchy');
294
+ const endTime = Date.now();
295
+ expect(elementNames.length).toBe(1000);
296
+ expect(endTime - startTime).toBeLessThan(1000); // Should be fast with mocking
297
+ console.log('✅ Large element lists handled efficiently');
298
+ });
299
+ });
300
+ describe('Element Service Integration', () => {
301
+ test('should maintain consistent data across operations', async () => {
302
+ const elementData = {
303
+ value: [
304
+ { Name: 'Element1' },
305
+ { Name: 'Element2' }
306
+ ]
307
+ };
308
+ mockRestService.get.mockResolvedValue(createMockResponse(elementData));
309
+ const names1 = await elementService.getNames('TestDimension', 'TestHierarchy');
310
+ const names2 = await elementService.getNames('TestDimension', 'TestHierarchy');
311
+ expect(names1).toEqual(names2);
312
+ expect(names1).toEqual(['Element1', 'Element2']);
313
+ console.log('✅ Data consistency maintained across operations');
314
+ });
315
+ test('should handle element lifecycle operations', async () => {
316
+ const testElement = new Element_1.Element('LifecycleElement', 'Numeric');
317
+ // Mock element creation
318
+ mockRestService.post.mockResolvedValue(createMockResponse({}, 201));
319
+ await elementService.create('TestDimension', 'TestHierarchy', testElement);
320
+ // Mock element existence check (true after creation)
321
+ mockRestService.get.mockResolvedValue(createMockResponse({
322
+ Name: 'LifecycleElement'
323
+ }));
324
+ const afterCreationExists = await elementService.exists('TestDimension', 'TestHierarchy', 'LifecycleElement');
325
+ expect(afterCreationExists).toBe(true);
326
+ // Mock element update
327
+ mockRestService.patch.mockResolvedValue(createMockResponse({}, 200));
328
+ const updateResult = await elementService.update('TestDimension', 'TestHierarchy', testElement);
329
+ expect(updateResult.status).toBe(200);
330
+ // Mock element deletion
331
+ mockRestService.delete.mockResolvedValue(createMockResponse({}, 204));
332
+ await elementService.delete('TestDimension', 'TestHierarchy', 'LifecycleElement');
333
+ console.log('✅ Element lifecycle operations handled successfully');
334
+ });
335
+ });
336
+ describe('Element Bulk Operations', () => {
337
+ test('should handle bulk element deletion', async () => {
338
+ const elementsToDelete = ['Element1', 'Element2', 'Element3'];
339
+ // For the useTI=true path, we need to mock ProcessService operations
340
+ // The method creates a TI process, executes it, and then deletes it
341
+ // Mock process creation, execution, and deletion
342
+ mockRestService.post.mockResolvedValue(createMockResponse({}, 201)); // create process
343
+ mockRestService.post.mockResolvedValue(createMockResponse({}, 200)); // execute process
344
+ mockRestService.delete.mockResolvedValue(createMockResponse({}, 204)); // delete process
345
+ await elementService.deleteElements('TestDimension', 'TestHierarchy', elementsToDelete, true);
346
+ console.log('✅ Bulk element deletion handled successfully');
347
+ });
348
+ });
349
+ });
350
+ //# sourceMappingURL=elementService.test.js.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=enhancedCellService.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhancedCellService.test.d.ts","sourceRoot":"","sources":["../../src/tests/enhancedCellService.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,152 @@
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 CellService_1 = require("../services/CellService");
7
+ const axios_1 = __importDefault(require("axios"));
8
+ // Mock axios
9
+ jest.mock('axios');
10
+ const mockedAxios = axios_1.default;
11
+ describe('Enhanced CellService Tests', () => {
12
+ let cellService;
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
+ cellService = new CellService_1.CellService(mockRestService);
30
+ });
31
+ describe('Enhanced Data Writing Functions', () => {
32
+ test('writeDataframe should write tabular data to cube', async () => {
33
+ const dataFrame = [
34
+ ['2024', 'Actual', 'London', 100],
35
+ ['2024', 'Forecast', 'Paris', 200]
36
+ ];
37
+ const dimensions = ['Year', 'Version', 'Region'];
38
+ mockRestService.patch.mockResolvedValue(createMockResponse({}));
39
+ await cellService.writeDataframe('SalesCube', dataFrame, dimensions);
40
+ expect(mockRestService.patch).toHaveBeenCalledWith("/Cubes('SalesCube')/tm1.Update", expect.objectContaining({
41
+ Cells: expect.arrayContaining([
42
+ expect.objectContaining({
43
+ Coordinates: [
44
+ { Name: '2024' },
45
+ { Name: 'Actual' },
46
+ { Name: 'London' }
47
+ ],
48
+ Value: 100
49
+ })
50
+ ])
51
+ }));
52
+ console.log('✅ writeDataframe test passed');
53
+ });
54
+ test('writeAsync should return async operation ID', async () => {
55
+ const cellset = { '2024,Actual,London': 100 };
56
+ mockRestService.patch.mockResolvedValue(createMockResponse({ ID: 'async-123' }));
57
+ const asyncId = await cellService.writeAsync('SalesCube', cellset);
58
+ expect(asyncId).toBe('async-123');
59
+ expect(mockRestService.patch).toHaveBeenCalledWith("/Cubes('SalesCube')/tm1.UpdateAsync", expect.objectContaining({
60
+ Cells: expect.any(Array)
61
+ }));
62
+ console.log('✅ writeAsync test passed');
63
+ });
64
+ test('writeThroughUnboundProcess should execute TI statements', async () => {
65
+ const cellset = { '2024,Actual,London': 100 };
66
+ mockRestService.post.mockResolvedValue(createMockResponse({
67
+ ProcessExecuteStatusCode: 'CompletedSuccessfully'
68
+ }));
69
+ const result = await cellService.writeThroughUnboundProcess('SalesCube', cellset);
70
+ expect(mockRestService.post).toHaveBeenCalledWith('/ExecuteProcessWithReturn', expect.objectContaining({
71
+ PrologProcedure: expect.stringContaining("CubeDataSet('SalesCube'")
72
+ }));
73
+ console.log('✅ writeThroughUnboundProcess test passed');
74
+ });
75
+ test('writeThroughBlob should upload CSV and load from blob', async () => {
76
+ const csvData = "Year,Version,Region,Value\\n2024,Actual,London,100";
77
+ mockRestService.post
78
+ .mockResolvedValueOnce(createMockResponse({ ID: 'blob-123' })) // Blob upload
79
+ .mockResolvedValueOnce(createMockResponse({})); // Cube load
80
+ await cellService.writeThroughBlob('SalesCube', csvData);
81
+ expect(mockRestService.post).toHaveBeenCalledTimes(2);
82
+ expect(mockRestService.post).toHaveBeenNthCalledWith(1, '/Blobs', csvData, {
83
+ headers: { 'Content-Type': 'text/csv' }
84
+ });
85
+ expect(mockRestService.post).toHaveBeenNthCalledWith(2, "/Cubes('SalesCube')/tm1.LoadFromBlob", { BlobId: 'blob-123' });
86
+ console.log('✅ writeThroughBlob test passed');
87
+ });
88
+ });
89
+ describe('Enhanced Data Reading Functions', () => {
90
+ test('executeMdxElementsValueDict should return element-value dictionary', async () => {
91
+ const mockData = { 'London': 100, 'Paris': 200, 'Berlin': 150 };
92
+ mockRestService.post.mockResolvedValue(createMockResponse(mockData));
93
+ const result = await cellService.executeMdxElementsValueDict('SELECT NON EMPTY {[Region].Members} ON 0 FROM [SalesCube]');
94
+ expect(result).toEqual(mockData);
95
+ expect(mockRestService.post).toHaveBeenCalledWith('/ExecuteMDXElementsValue', { MDX: 'SELECT NON EMPTY {[Region].Members} ON 0 FROM [SalesCube]' });
96
+ console.log('✅ executeMdxElementsValueDict test passed');
97
+ });
98
+ });
99
+ describe('Advanced Operations', () => {
100
+ test('clearWithDataframe should clear based on DataFrame coordinates', async () => {
101
+ const dataFrame = [
102
+ ['2024', 'Actual', 'London'],
103
+ ['2024', 'Forecast', 'Paris']
104
+ ];
105
+ const dimensions = ['Year', 'Version', 'Region'];
106
+ mockRestService.post.mockResolvedValue(createMockResponse({}));
107
+ await cellService.clearWithDataframe('SalesCube', dataFrame, dimensions);
108
+ expect(mockRestService.post).toHaveBeenCalledWith("/Cubes('SalesCube')/tm1.Clear", expect.objectContaining({
109
+ MDX: expect.stringContaining("('2024','Actual','London')")
110
+ }));
111
+ console.log('✅ clearWithDataframe test passed');
112
+ });
113
+ test('relativeProportionalSpread should execute proportional spread', async () => {
114
+ const coordinates = ['2024', 'Actual', 'Total'];
115
+ mockRestService.post.mockResolvedValue(createMockResponse({}));
116
+ await cellService.relativeProportionalSpread('SalesCube', coordinates, 1000);
117
+ expect(mockRestService.post).toHaveBeenCalledWith("/Cubes('SalesCube')/tm1.ProportionalSpread(coordinates=['2024','Actual','Total'],value=1000)");
118
+ console.log('✅ relativeProportionalSpread test passed');
119
+ });
120
+ test('clearSpread should execute clear spread', async () => {
121
+ const coordinates = ['2024', 'Actual', 'Total'];
122
+ mockRestService.post.mockResolvedValue(createMockResponse({}));
123
+ await cellService.clearSpread('SalesCube', coordinates);
124
+ expect(mockRestService.post).toHaveBeenCalledWith("/Cubes('SalesCube')/tm1.ClearSpread(coordinates=['2024','Actual','Total'])");
125
+ console.log('✅ clearSpread test passed');
126
+ });
127
+ test('checkCellFeeders should return feeder status', async () => {
128
+ const coordinates = ['2024', 'Actual', 'London'];
129
+ mockRestService.get.mockResolvedValue(createMockResponse({ value: true }));
130
+ const hasFeeders = await cellService.checkCellFeeders('SalesCube', coordinates);
131
+ expect(hasFeeders).toBe(true);
132
+ expect(mockRestService.get).toHaveBeenCalledWith("/Cubes('SalesCube')/tm1.CheckCellFeeders(coordinates=['2024','Actual','London'])");
133
+ console.log('✅ checkCellFeeders test passed');
134
+ });
135
+ });
136
+ describe('Error Handling', () => {
137
+ test('should handle write errors gracefully', async () => {
138
+ const cellset = { '2024,Actual,London': 100 };
139
+ mockRestService.patch.mockRejectedValue(new Error('Server Error'));
140
+ await expect(cellService.write('SalesCube', cellset)).rejects.toThrow('Server Error');
141
+ console.log('✅ Error handling test passed');
142
+ });
143
+ test('should handle sandbox operations', async () => {
144
+ const cellset = { '2024,Actual,London': 100 };
145
+ mockRestService.patch.mockResolvedValue(createMockResponse({}));
146
+ await cellService.write('SalesCube', cellset, undefined, { sandbox_name: 'TestSandbox' });
147
+ expect(mockRestService.patch).toHaveBeenCalledWith("/Cubes('SalesCube')/tm1.Update?$sandbox=TestSandbox", expect.any(Object));
148
+ console.log('✅ Sandbox operations test passed');
149
+ });
150
+ });
151
+ });
152
+ //# sourceMappingURL=enhancedCellService.test.js.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=enhancedCubeService.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhancedCubeService.test.d.ts","sourceRoot":"","sources":["../../src/tests/enhancedCubeService.test.ts"],"names":[],"mappings":""}