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,290 @@
1
+ "use strict";
2
+ /**
3
+ * TM1Service Tests
4
+ * Comprehensive test suite for the main TM1Service class
5
+ * Target: Improve coverage from 0% to 40%+
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ const TM1Service_1 = require("../services/TM1Service");
9
+ const RestService_1 = require("../services/RestService");
10
+ // Mock all service dependencies
11
+ jest.mock('../services/RestService');
12
+ jest.mock('../services/DimensionService');
13
+ jest.mock('../services/HierarchyService');
14
+ jest.mock('../services/SubsetService');
15
+ jest.mock('../services/CubeService');
16
+ jest.mock('../services/ElementService');
17
+ jest.mock('../services/CellService');
18
+ jest.mock('../services/ProcessService');
19
+ jest.mock('../services/ViewService');
20
+ jest.mock('../services/SecurityService');
21
+ jest.mock('../services/FileService');
22
+ jest.mock('../services/SessionService');
23
+ jest.mock('../services/ServerService');
24
+ jest.mock('../services/MonitoringService');
25
+ describe('TM1Service', () => {
26
+ let tm1Service;
27
+ let mockRestService;
28
+ let mockConfig;
29
+ const mockResponse = (data) => ({
30
+ data: data,
31
+ status: 200,
32
+ statusText: 'OK',
33
+ headers: {},
34
+ config: { headers: {} }
35
+ });
36
+ beforeEach(() => {
37
+ // Reset all mocks
38
+ jest.clearAllMocks();
39
+ mockConfig = {
40
+ address: 'localhost',
41
+ port: 8879,
42
+ user: 'admin',
43
+ password: 'password',
44
+ ssl: false
45
+ };
46
+ // Create mock RestService instance
47
+ mockRestService = {
48
+ connect: jest.fn().mockResolvedValue(void 0),
49
+ disconnect: jest.fn().mockResolvedValue(void 0),
50
+ get: jest.fn().mockResolvedValue(mockResponse),
51
+ post: jest.fn().mockResolvedValue(mockResponse),
52
+ patch: jest.fn().mockResolvedValue(mockResponse),
53
+ put: jest.fn().mockResolvedValue(mockResponse),
54
+ delete: jest.fn().mockResolvedValue(mockResponse),
55
+ getSessionId: jest.fn().mockReturnValue('test-session-id'),
56
+ setSandbox: jest.fn(),
57
+ getSandbox: jest.fn().mockReturnValue('test-sandbox'),
58
+ isLoggedIn: jest.fn().mockReturnValue(true),
59
+ };
60
+ // Mock RestService constructor
61
+ RestService_1.RestService.mockImplementation(() => mockRestService);
62
+ tm1Service = new TM1Service_1.TM1Service(mockConfig);
63
+ });
64
+ describe('Constructor and Initialization', () => {
65
+ test('should initialize TM1Service with all service properties', () => {
66
+ expect(tm1Service).toBeDefined();
67
+ expect(tm1Service.dimensions).toBeDefined();
68
+ expect(tm1Service.hierarchies).toBeDefined();
69
+ expect(tm1Service.subsets).toBeDefined();
70
+ expect(tm1Service.cubes).toBeDefined();
71
+ expect(tm1Service.elements).toBeDefined();
72
+ expect(tm1Service.cells).toBeDefined();
73
+ expect(tm1Service.processes).toBeDefined();
74
+ expect(tm1Service.views).toBeDefined();
75
+ expect(tm1Service.security).toBeDefined();
76
+ expect(tm1Service.files).toBeDefined();
77
+ expect(tm1Service.sessions).toBeDefined();
78
+ });
79
+ test('should create RestService with provided config', () => {
80
+ expect(RestService_1.RestService).toHaveBeenCalledWith(mockConfig);
81
+ });
82
+ test('should initialize all services with REST service instance', () => {
83
+ // Verify that all service constructors were called
84
+ expect(RestService_1.RestService).toHaveBeenCalledTimes(1);
85
+ });
86
+ });
87
+ describe('Connection Management', () => {
88
+ test('should connect successfully', async () => {
89
+ await tm1Service.connect();
90
+ expect(mockRestService.connect).toHaveBeenCalledTimes(1);
91
+ });
92
+ test('should logout successfully', async () => {
93
+ await tm1Service.logout();
94
+ expect(mockRestService.disconnect).toHaveBeenCalledTimes(1);
95
+ });
96
+ test('should disconnect successfully (alias for logout)', async () => {
97
+ await tm1Service.disconnect();
98
+ expect(mockRestService.disconnect).toHaveBeenCalledTimes(1);
99
+ });
100
+ test('should handle connection errors gracefully', async () => {
101
+ const connectionError = new Error('Connection failed');
102
+ mockRestService.connect.mockRejectedValueOnce(connectionError);
103
+ await expect(tm1Service.connect()).rejects.toThrow('Connection failed');
104
+ });
105
+ test('should handle logout errors gracefully', async () => {
106
+ const logoutError = new Error('Logout failed');
107
+ mockRestService.disconnect.mockRejectedValueOnce(logoutError);
108
+ await expect(tm1Service.logout()).rejects.toThrow('Logout failed');
109
+ });
110
+ });
111
+ describe('Service Properties - Lazy Loading', () => {
112
+ test('should create server service lazily', () => {
113
+ const server1 = tm1Service.server;
114
+ const server2 = tm1Service.server;
115
+ expect(server1).toBeDefined();
116
+ expect(server2).toBe(server1); // Should return same instance
117
+ });
118
+ test('should create monitoring service lazily', () => {
119
+ const monitoring1 = tm1Service.monitoring;
120
+ const monitoring2 = tm1Service.monitoring;
121
+ expect(monitoring1).toBeDefined();
122
+ expect(monitoring2).toBe(monitoring1); // Should return same instance
123
+ });
124
+ });
125
+ describe('User and Authentication', () => {
126
+ test('should get current user with whoami', async () => {
127
+ // Mock security service getCurrentUser method
128
+ const mockSecurityService = {
129
+ getCurrentUser: jest.fn().mockResolvedValue({ name: 'test-user' })
130
+ };
131
+ tm1Service.security = mockSecurityService;
132
+ const result = await tm1Service.whoami();
133
+ expect(result).toBe('test-user');
134
+ expect(mockSecurityService.getCurrentUser).toHaveBeenCalledTimes(1);
135
+ });
136
+ test('should check if user is logged in', () => {
137
+ mockRestService.isLoggedIn.mockReturnValue(true);
138
+ const result = tm1Service.isLoggedIn();
139
+ expect(result).toBe(true);
140
+ expect(mockRestService.isLoggedIn).toHaveBeenCalledTimes(1);
141
+ });
142
+ test('should check if user is not logged in', () => {
143
+ mockRestService.isLoggedIn.mockReturnValue(false);
144
+ const result = tm1Service.isLoggedIn();
145
+ expect(result).toBe(false);
146
+ });
147
+ test('should re-authenticate successfully', async () => {
148
+ await tm1Service.reAuthenticate();
149
+ expect(mockRestService.disconnect).toHaveBeenCalledTimes(1);
150
+ expect(mockRestService.connect).toHaveBeenCalledTimes(1);
151
+ });
152
+ });
153
+ describe('Metadata and Version', () => {
154
+ test('should get TM1 metadata', async () => {
155
+ mockRestService.get.mockResolvedValueOnce(mockResponse({ metadata: 'test-metadata' }));
156
+ const result = await tm1Service.getMetadata();
157
+ expect(result).toEqual({ metadata: 'test-metadata' });
158
+ expect(mockRestService.get).toHaveBeenCalledWith('/$metadata');
159
+ });
160
+ test('should get TM1 version', async () => {
161
+ mockRestService.get.mockResolvedValueOnce(mockResponse({ value: '12.0.0' }));
162
+ const result = await tm1Service.getVersion();
163
+ expect(result).toBe('12.0.0');
164
+ expect(mockRestService.get).toHaveBeenCalledWith('/Configuration/ProductVersion');
165
+ });
166
+ test('should handle metadata retrieval errors', async () => {
167
+ const metadataError = new Error('Metadata not available');
168
+ mockRestService.get.mockRejectedValueOnce(metadataError);
169
+ await expect(tm1Service.getMetadata()).rejects.toThrow('Metadata not available');
170
+ });
171
+ test('should handle version retrieval errors', async () => {
172
+ const versionError = new Error('Version not available');
173
+ mockRestService.get.mockRejectedValueOnce(versionError);
174
+ await expect(tm1Service.getVersion()).rejects.toThrow('Version not available');
175
+ });
176
+ });
177
+ describe('Session Management', () => {
178
+ test('should get session ID', () => {
179
+ mockRestService.getSessionId.mockReturnValue('test-session-123');
180
+ const result = tm1Service.getSessionId();
181
+ expect(result).toBe('test-session-123');
182
+ expect(mockRestService.getSessionId).toHaveBeenCalledTimes(1);
183
+ });
184
+ test('should handle undefined session ID', () => {
185
+ mockRestService.getSessionId.mockReturnValue(undefined);
186
+ const result = tm1Service.getSessionId();
187
+ expect(result).toBeUndefined();
188
+ });
189
+ test('should get connection instance', () => {
190
+ const connection = tm1Service.connection;
191
+ expect(connection).toBe(mockRestService);
192
+ });
193
+ });
194
+ describe('Sandbox Management', () => {
195
+ test('should set sandbox name', () => {
196
+ tm1Service.setSandbox('test-sandbox');
197
+ expect(mockRestService.setSandbox).toHaveBeenCalledWith('test-sandbox');
198
+ });
199
+ test('should set sandbox to undefined', () => {
200
+ tm1Service.setSandbox(undefined);
201
+ expect(mockRestService.setSandbox).toHaveBeenCalledWith(undefined);
202
+ });
203
+ test('should get current sandbox', () => {
204
+ mockRestService.getSandbox.mockReturnValue('current-sandbox');
205
+ const result = tm1Service.getSandbox();
206
+ expect(result).toBe('current-sandbox');
207
+ expect(mockRestService.getSandbox).toHaveBeenCalledTimes(1);
208
+ });
209
+ test('should handle undefined sandbox', () => {
210
+ mockRestService.getSandbox.mockReturnValue(undefined);
211
+ const result = tm1Service.getSandbox();
212
+ expect(result).toBeUndefined();
213
+ });
214
+ });
215
+ describe('Static Factory Method', () => {
216
+ test('should create and connect TM1Service instance', async () => {
217
+ const service = await TM1Service_1.TM1Service.create(mockConfig);
218
+ expect(service).toBeInstanceOf(TM1Service_1.TM1Service);
219
+ expect(mockRestService.connect).toHaveBeenCalledTimes(1);
220
+ });
221
+ test('should handle creation errors', async () => {
222
+ const createError = new Error('Creation failed');
223
+ mockRestService.connect.mockRejectedValueOnce(createError);
224
+ await expect(TM1Service_1.TM1Service.create(mockConfig)).rejects.toThrow('Creation failed');
225
+ });
226
+ });
227
+ describe('Disposal and Cleanup', () => {
228
+ test('should dispose successfully', async () => {
229
+ await tm1Service.dispose();
230
+ expect(mockRestService.disconnect).toHaveBeenCalledTimes(1);
231
+ });
232
+ test('should handle dispose errors gracefully with console warning', async () => {
233
+ const disposeError = new Error('Dispose failed');
234
+ mockRestService.disconnect.mockRejectedValueOnce(disposeError);
235
+ // Mock console.warn to verify it's called
236
+ const consoleSpy = jest.spyOn(console, 'warn').mockImplementation();
237
+ // Should not throw, should log warning instead
238
+ await expect(tm1Service.dispose()).resolves.not.toThrow();
239
+ expect(consoleSpy).toHaveBeenCalledWith('Logout failed due to exception: Error: Dispose failed');
240
+ consoleSpy.mockRestore();
241
+ });
242
+ });
243
+ describe('Error Handling and Edge Cases', () => {
244
+ test('should handle whoami when security service fails', async () => {
245
+ const mockSecurityService = {
246
+ getCurrentUser: jest.fn().mockRejectedValue(new Error('Security error'))
247
+ };
248
+ tm1Service.security = mockSecurityService;
249
+ await expect(tm1Service.whoami()).rejects.toThrow('Security error');
250
+ });
251
+ test('should handle re-authentication when disconnect fails', async () => {
252
+ const disconnectError = new Error('Disconnect failed');
253
+ mockRestService.disconnect.mockRejectedValueOnce(disconnectError);
254
+ await expect(tm1Service.reAuthenticate()).rejects.toThrow('Disconnect failed');
255
+ });
256
+ test('should handle re-authentication when connect fails after disconnect', async () => {
257
+ const connectError = new Error('Reconnect failed');
258
+ mockRestService.disconnect.mockResolvedValueOnce(void 0);
259
+ mockRestService.connect.mockRejectedValueOnce(connectError);
260
+ await expect(tm1Service.reAuthenticate()).rejects.toThrow('Reconnect failed');
261
+ });
262
+ });
263
+ describe('Service Integration', () => {
264
+ test('should have all required service properties initialized', () => {
265
+ const requiredServices = [
266
+ 'dimensions', 'hierarchies', 'subsets', 'cubes',
267
+ 'elements', 'cells', 'processes', 'views',
268
+ 'security', 'files', 'sessions'
269
+ ];
270
+ requiredServices.forEach(service => {
271
+ expect(tm1Service[service]).toBeDefined();
272
+ });
273
+ });
274
+ test('should provide lazy-loaded services', () => {
275
+ // These are lazy-loaded via getters
276
+ expect(tm1Service.server).toBeDefined();
277
+ expect(tm1Service.monitoring).toBeDefined();
278
+ });
279
+ test('should maintain consistent lazy-loaded service instances', () => {
280
+ // Call multiple times to ensure same instance is returned
281
+ const server1 = tm1Service.server;
282
+ const server2 = tm1Service.server;
283
+ const monitoring1 = tm1Service.monitoring;
284
+ const monitoring2 = tm1Service.monitoring;
285
+ expect(server1).toBe(server2);
286
+ expect(monitoring1).toBe(monitoring2);
287
+ });
288
+ });
289
+ });
290
+ //# sourceMappingURL=tm1Service.test.js.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * ViewService Tests for tm1npm
3
+ * Comprehensive tests for TM1 View operations with proper mocking
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=viewService.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewService.test.d.ts","sourceRoot":"","sources":["../../src/tests/viewService.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,240 @@
1
+ "use strict";
2
+ /**
3
+ * ViewService Tests for tm1npm
4
+ * Comprehensive tests for TM1 View operations with proper mocking
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const ViewService_1 = require("../services/ViewService");
8
+ const NativeView_1 = require("../objects/NativeView");
9
+ const MDXView_1 = require("../objects/MDXView");
10
+ const TM1Exception_1 = require("../exceptions/TM1Exception");
11
+ // Helper function to create mock AxiosResponse
12
+ const createMockResponse = (data, status = 200) => ({
13
+ data,
14
+ status,
15
+ statusText: status === 200 ? 'OK' : status === 201 ? 'Created' : status === 204 ? 'No Content' : 'Error',
16
+ headers: {},
17
+ config: {}
18
+ });
19
+ describe('ViewService Tests', () => {
20
+ let viewService;
21
+ let mockRestService;
22
+ beforeEach(() => {
23
+ // Create comprehensive mock for RestService
24
+ mockRestService = {
25
+ get: jest.fn(),
26
+ post: jest.fn(),
27
+ patch: jest.fn(),
28
+ delete: jest.fn(),
29
+ put: jest.fn(),
30
+ config: {},
31
+ rest: {},
32
+ buildBaseUrl: jest.fn(),
33
+ extractErrorMessage: jest.fn()
34
+ };
35
+ viewService = new ViewService_1.ViewService(mockRestService);
36
+ });
37
+ describe('View Retrieval Operations', () => {
38
+ test('should get all view names for cube', async () => {
39
+ // Mock both private and public view calls
40
+ mockRestService.get
41
+ .mockResolvedValueOnce(createMockResponse({
42
+ value: [{ Name: 'PrivateView1' }]
43
+ }))
44
+ .mockResolvedValueOnce(createMockResponse({
45
+ value: [{ Name: 'PublicView1' }, { Name: 'PublicView2' }]
46
+ }));
47
+ const viewNames = await viewService.getAllNames('TestCube');
48
+ expect(Array.isArray(viewNames)).toBe(true);
49
+ expect(viewNames.length).toBe(3);
50
+ expect(viewNames).toEqual(['PrivateView1', 'PublicView1', 'PublicView2']);
51
+ console.log('✅ View names retrieved successfully');
52
+ });
53
+ test('should get all views for cube', async () => {
54
+ // Mock the main views call - first call for getAll
55
+ mockRestService.get.mockResolvedValueOnce(createMockResponse({
56
+ value: [
57
+ { Name: 'MDXView1', MDX: 'SELECT FROM [TestCube]' }, // Has MDX property
58
+ { Name: 'NativeView1' } // Doesn't have MDX property
59
+ ]
60
+ }));
61
+ // Mock the getNativeView call that will be made for the native view
62
+ mockRestService.get.mockResolvedValueOnce(createMockResponse({
63
+ Name: 'NativeView1',
64
+ Columns: [],
65
+ Rows: [],
66
+ Titles: []
67
+ }));
68
+ const views = await viewService.getAll('TestCube');
69
+ expect(Array.isArray(views)).toBe(true);
70
+ expect(views.length).toBe(2); // Returns [nativeViews, mdxViews]
71
+ expect(views[0]).toEqual(expect.any(Array)); // nativeViews array
72
+ expect(views[1]).toEqual(expect.any(Array)); // mdxViews array
73
+ console.log('✅ All views retrieved successfully');
74
+ });
75
+ test('should check if view exists', async () => {
76
+ // Test existing view
77
+ mockRestService.get.mockResolvedValue(createMockResponse({
78
+ Name: 'ExistingView'
79
+ }));
80
+ const exists = await viewService.exists('TestCube', 'ExistingView', false);
81
+ expect(exists).toBe(true);
82
+ console.log('✅ View existence check working correctly');
83
+ });
84
+ test('should check if view does not exist', async () => {
85
+ // Test non-existing view
86
+ const mockError = new TM1Exception_1.TM1RestException('View not found', 404, { status: 404 });
87
+ mockRestService.get.mockRejectedValue(mockError);
88
+ const notExists = await viewService.exists('TestCube', 'NonExistentView', false);
89
+ expect(notExists).toBe(false);
90
+ console.log('✅ View non-existence check working correctly');
91
+ });
92
+ });
93
+ describe('View CRUD Operations', () => {
94
+ test('should create native view', async () => {
95
+ const mockNativeView = new NativeView_1.NativeView('TestCube', 'NewNativeView');
96
+ mockRestService.post.mockResolvedValue(createMockResponse({ Name: 'NewNativeView' }, 201));
97
+ const result = await viewService.create(mockNativeView);
98
+ expect(mockRestService.post).toHaveBeenCalled();
99
+ expect(result.status).toBe(201);
100
+ console.log('✅ Native view creation successful');
101
+ });
102
+ test('should create MDX view', async () => {
103
+ const mockMDXView = new MDXView_1.MDXView('TestCube', 'NewMDXView', 'SELECT FROM [TestCube]');
104
+ mockRestService.post.mockResolvedValue(createMockResponse({ Name: 'NewMDXView' }, 201));
105
+ const result = await viewService.create(mockMDXView);
106
+ expect(result.status).toBe(201);
107
+ console.log('✅ MDX view creation successful');
108
+ });
109
+ test('should update existing view', async () => {
110
+ const mockView = new NativeView_1.NativeView('TestCube', 'UpdatedView');
111
+ mockRestService.patch.mockResolvedValue(createMockResponse({ Name: 'UpdatedView' }, 200));
112
+ const result = await viewService.update(mockView);
113
+ expect(mockRestService.patch).toHaveBeenCalled();
114
+ expect(result.status).toBe(200);
115
+ console.log('✅ View update successful');
116
+ });
117
+ test('should delete view', async () => {
118
+ mockRestService.delete.mockResolvedValue(createMockResponse({}, 204));
119
+ const result = await viewService.delete('TestCube', 'ViewToDelete');
120
+ expect(mockRestService.delete).toHaveBeenCalled();
121
+ expect(result.status).toBe(204);
122
+ console.log('✅ View deletion successful');
123
+ });
124
+ });
125
+ describe('View Error Handling', () => {
126
+ test('should handle network errors gracefully', async () => {
127
+ mockRestService.get.mockRejectedValue({
128
+ code: 'ECONNREFUSED'
129
+ });
130
+ await expect(viewService.getAllNames('TestCube'))
131
+ .rejects.toMatchObject({
132
+ code: 'ECONNREFUSED'
133
+ });
134
+ console.log('✅ Network error handling working');
135
+ });
136
+ test('should handle authentication errors', async () => {
137
+ mockRestService.get.mockRejectedValue({
138
+ response: { status: 401 }
139
+ });
140
+ await expect(viewService.getAll('TestCube'))
141
+ .rejects.toMatchObject({
142
+ response: { status: 401 }
143
+ });
144
+ console.log('✅ Authentication error handling working');
145
+ });
146
+ test('should handle invalid cube names', async () => {
147
+ mockRestService.get.mockRejectedValue({
148
+ response: { status: 400, statusText: 'Bad Request' }
149
+ });
150
+ await expect(viewService.getAllNames('')).rejects.toMatchObject({
151
+ response: { status: 400 }
152
+ });
153
+ console.log('✅ Invalid input handling working');
154
+ });
155
+ });
156
+ describe('View Service Edge Cases', () => {
157
+ test('should handle empty view lists', async () => {
158
+ // Mock both private and public calls returning empty
159
+ mockRestService.get
160
+ .mockResolvedValueOnce(createMockResponse({ value: [] }))
161
+ .mockResolvedValueOnce(createMockResponse({ value: [] }));
162
+ const views = await viewService.getAllNames('EmptyCube');
163
+ expect(Array.isArray(views)).toBe(true);
164
+ expect(views.length).toBe(0);
165
+ console.log('✅ Empty view list handling working');
166
+ });
167
+ test('should handle concurrent operations', async () => {
168
+ // Mock both private and public calls for each concurrent operation
169
+ mockRestService.get.mockImplementation(() => Promise.resolve(createMockResponse({
170
+ value: [{ Name: 'TestView' }]
171
+ })));
172
+ const operations = [
173
+ viewService.getAllNames('TestCube'),
174
+ viewService.getAllNames('TestCube'),
175
+ viewService.getAllNames('TestCube')
176
+ ];
177
+ const results = await Promise.allSettled(operations);
178
+ const successful = results.filter(r => r.status === 'fulfilled');
179
+ expect(successful.length).toBe(3);
180
+ console.log('✅ Concurrent operations handling working');
181
+ });
182
+ test('should handle large view datasets efficiently', async () => {
183
+ const largeViewList = Array(1000).fill(null).map((_, i) => ({
184
+ Name: `View${i}`
185
+ }));
186
+ // Mock both calls returning large datasets
187
+ mockRestService.get
188
+ .mockResolvedValueOnce(createMockResponse({ value: largeViewList.slice(0, 500) }))
189
+ .mockResolvedValueOnce(createMockResponse({ value: largeViewList.slice(500) }));
190
+ const startTime = Date.now();
191
+ const result = await viewService.getAllNames('LargeCube');
192
+ const endTime = Date.now();
193
+ expect(result.length).toBe(1000);
194
+ expect(endTime - startTime).toBeLessThan(1000); // Should be fast with mocking
195
+ console.log('✅ Large dataset handling efficient');
196
+ });
197
+ });
198
+ describe('View Service Integration', () => {
199
+ test('should maintain data consistency across operations', async () => {
200
+ const viewList = [
201
+ { Name: 'View1' },
202
+ { Name: 'View2' }
203
+ ];
204
+ // Mock consistent responses
205
+ mockRestService.get.mockImplementation(() => Promise.resolve(createMockResponse({
206
+ value: viewList
207
+ })));
208
+ const names1 = await viewService.getAllNames('TestCube');
209
+ const names2 = await viewService.getAllNames('TestCube');
210
+ // Note: getAllNames returns combined private+public, so results will be ['View1', 'View2', 'View1', 'View2']
211
+ expect(names1.length).toBeGreaterThan(0);
212
+ expect(names2.length).toBeGreaterThan(0);
213
+ console.log('✅ Data consistency maintained');
214
+ });
215
+ test('should handle view lifecycle operations', async () => {
216
+ const testView = new NativeView_1.NativeView('TestCube', 'LifecycleView');
217
+ // Mock create
218
+ mockRestService.post.mockResolvedValue(createMockResponse({}, 201));
219
+ // Mock get (exists)
220
+ mockRestService.get.mockResolvedValue(createMockResponse({
221
+ Name: 'LifecycleView'
222
+ }));
223
+ // Mock update
224
+ mockRestService.patch.mockResolvedValue(createMockResponse({}, 200));
225
+ // Mock delete
226
+ mockRestService.delete.mockResolvedValue(createMockResponse({}, 204));
227
+ // Test full lifecycle
228
+ const createResult = await viewService.create(testView);
229
+ expect(createResult.status).toBe(201);
230
+ const exists = await viewService.exists('TestCube', 'LifecycleView', false);
231
+ expect(exists).toBe(true);
232
+ const updateResult = await viewService.update(testView);
233
+ expect(updateResult.status).toBe(200);
234
+ const deleteResult = await viewService.delete('TestCube', 'LifecycleView');
235
+ expect(deleteResult.status).toBe(204);
236
+ console.log('✅ View lifecycle operations working');
237
+ });
238
+ });
239
+ });
240
+ //# sourceMappingURL=viewService.test.js.map
@@ -0,0 +1,90 @@
1
+ export declare class CaseAndSpaceInsensitiveDict<T> extends Map<string, T> {
2
+ private normalizeKey;
3
+ set(key: string, value: T): this;
4
+ get(key: string): T | undefined;
5
+ has(key: string): boolean;
6
+ delete(key: string): boolean;
7
+ }
8
+ export declare class CaseAndSpaceInsensitiveTuplesDict<T> extends Map<string, T> {
9
+ private normalizeKey;
10
+ set(key: string, value: T): this;
11
+ get(key: string): T | undefined;
12
+ has(key: string): boolean;
13
+ delete(key: string): boolean;
14
+ }
15
+ export declare class CaseAndSpaceInsensitiveMap<T> extends Map<string, T> {
16
+ private normalizeKey;
17
+ set(key: string, value: T): this;
18
+ get(key: string): T | undefined;
19
+ has(key: string): boolean;
20
+ delete(key: string): boolean;
21
+ }
22
+ export declare class CaseAndSpaceInsensitiveSet extends Set<string> {
23
+ private normalizeValue;
24
+ add(value: string): this;
25
+ has(value: string): boolean;
26
+ delete(value: string): boolean;
27
+ }
28
+ export declare function caseAndSpaceInsensitiveEquals(str1: string, str2: string): boolean;
29
+ export declare function lowerAndDropSpaces(str: string): string;
30
+ export declare function formatUrl(template: string, ...args: string[]): string;
31
+ export declare function extractCellsetCells(cellset: any): any[];
32
+ export declare function buildMdxFromAxes(axes: any[]): string;
33
+ export declare function buildElementsStringFromIterable(elements: Iterable<string>, separator?: string): string;
34
+ export declare function dimensionHierarchyElementTupleFromUniqueName(uniqueName: string): [string, string, string];
35
+ export declare function buildElementUniqueNames(elements: string[], dimensionName: string, hierarchyName?: string): string[];
36
+ export declare function dimensionHierarchyElementTupleFromString(dimensionHierarchyElement: string): [string, string, string];
37
+ export declare function deprecatedInVersion(version: string): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
38
+ export declare function requireVersion(minVersion: string): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
39
+ export declare function requireAdmin(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;
40
+ export declare function requireDataAdmin(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;
41
+ export declare function requireSecurityAdmin(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;
42
+ export declare function requireOpsAdmin(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;
43
+ export declare function wrapTupleInBrackets(members: string[]): string;
44
+ export declare function abbreviateString(text: string, maxLength: number): string;
45
+ export declare function getTimeFromTimeStamp(timestamp: string): Date;
46
+ export declare function addTimeToTimeStamp(timestamp: string, hours: number): string;
47
+ export declare function tidy(inputString: string): string;
48
+ export declare function getMdxElementFromAttribute(attribute: string, cube: string): string;
49
+ export declare function buildMdxTuple(members: string[]): string;
50
+ export declare function verifyVersion(actualVersion: string, requiredVersion: string): boolean;
51
+ export declare function readObjectNameFromUrl(url: string): string;
52
+ export declare function integerizeVersion(version: string): number;
53
+ export declare function frameToSignificantValue(value: any): any;
54
+ export declare class HTTPAdapterWithSocketOptions {
55
+ private socketOptions;
56
+ constructor(socketOptions?: any);
57
+ }
58
+ export declare function odataTrackChangesHeader(): Record<string, string>;
59
+ export declare function utcLocalizeTime(utcTimeStr: string): Date;
60
+ export declare function decohints(): string;
61
+ export declare const Utils: {
62
+ CaseAndSpaceInsensitiveMap: typeof CaseAndSpaceInsensitiveMap;
63
+ CaseAndSpaceInsensitiveSet: typeof CaseAndSpaceInsensitiveSet;
64
+ caseAndSpaceInsensitiveEquals: typeof caseAndSpaceInsensitiveEquals;
65
+ lowerAndDropSpaces: typeof lowerAndDropSpaces;
66
+ formatUrl: typeof formatUrl;
67
+ extractCellsetCells: typeof extractCellsetCells;
68
+ buildMdxFromAxes: typeof buildMdxFromAxes;
69
+ buildElementsStringFromIterable: typeof buildElementsStringFromIterable;
70
+ dimensionHierarchyElementTupleFromString: typeof dimensionHierarchyElementTupleFromString;
71
+ requireVersion: typeof requireVersion;
72
+ requireAdmin: typeof requireAdmin;
73
+ requireDataAdmin: typeof requireDataAdmin;
74
+ requireSecurityAdmin: typeof requireSecurityAdmin;
75
+ requireOpsAdmin: typeof requireOpsAdmin;
76
+ wrapTupleInBrackets: typeof wrapTupleInBrackets;
77
+ abbreviateString: typeof abbreviateString;
78
+ getTimeFromTimeStamp: typeof getTimeFromTimeStamp;
79
+ addTimeToTimeStamp: typeof addTimeToTimeStamp;
80
+ tidy: typeof tidy;
81
+ getMdxElementFromAttribute: typeof getMdxElementFromAttribute;
82
+ buildMdxTuple: typeof buildMdxTuple;
83
+ verifyVersion: typeof verifyVersion;
84
+ frameToSignificantValue: typeof frameToSignificantValue;
85
+ HTTPAdapterWithSocketOptions: typeof HTTPAdapterWithSocketOptions;
86
+ odataTrackChangesHeader: typeof odataTrackChangesHeader;
87
+ utcLocalizeTime: typeof utcLocalizeTime;
88
+ decohints: typeof decohints;
89
+ };
90
+ //# sourceMappingURL=Utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../src/utils/Utils.ts"],"names":[],"mappings":"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"}