bitbucket-datacenter-mcp 0.2.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 (1573) hide show
  1. package/CHANGELOG.md +307 -0
  2. package/README.md +236 -0
  3. package/bin/run.js +7 -0
  4. package/build/__tests__/bitbucket-service.test.d.ts +2 -0
  5. package/build/__tests__/bitbucket-service.test.d.ts.map +1 -0
  6. package/build/__tests__/bitbucket-service.test.js +2824 -0
  7. package/build/__tests__/bitbucket-service.test.js.map +1 -0
  8. package/build/__tests__/bitbucket-token-optimization.test.d.ts +2 -0
  9. package/build/__tests__/bitbucket-token-optimization.test.d.ts.map +1 -0
  10. package/build/__tests__/bitbucket-token-optimization.test.js +391 -0
  11. package/build/__tests__/bitbucket-token-optimization.test.js.map +1 -0
  12. package/build/__tests__/config.test.d.ts +2 -0
  13. package/build/__tests__/config.test.d.ts.map +1 -0
  14. package/build/__tests__/config.test.js +49 -0
  15. package/build/__tests__/config.test.js.map +1 -0
  16. package/build/__tests__/inbox-pr-mapper.test.d.ts +2 -0
  17. package/build/__tests__/inbox-pr-mapper.test.d.ts.map +1 -0
  18. package/build/__tests__/inbox-pr-mapper.test.js +304 -0
  19. package/build/__tests__/inbox-pr-mapper.test.js.map +1 -0
  20. package/build/__tests__/pr-changes-mapper.test.d.ts +2 -0
  21. package/build/__tests__/pr-changes-mapper.test.d.ts.map +1 -0
  22. package/build/__tests__/pr-changes-mapper.test.js +396 -0
  23. package/build/__tests__/pr-changes-mapper.test.js.map +1 -0
  24. package/build/__tests__/pr-comment-mapper.test.d.ts +2 -0
  25. package/build/__tests__/pr-comment-mapper.test.d.ts.map +1 -0
  26. package/build/__tests__/pr-comment-mapper.test.js +490 -0
  27. package/build/__tests__/pr-comment-mapper.test.js.map +1 -0
  28. package/build/bitbucket-client/core/ApiError.d.ts +11 -0
  29. package/build/bitbucket-client/core/ApiError.d.ts.map +1 -0
  30. package/build/bitbucket-client/core/ApiError.js +17 -0
  31. package/build/bitbucket-client/core/ApiError.js.map +1 -0
  32. package/build/bitbucket-client/core/ApiRequestOptions.d.ts +14 -0
  33. package/build/bitbucket-client/core/ApiRequestOptions.d.ts.map +1 -0
  34. package/build/bitbucket-client/core/ApiRequestOptions.js +2 -0
  35. package/build/bitbucket-client/core/ApiRequestOptions.js.map +1 -0
  36. package/build/bitbucket-client/core/ApiResult.d.ts +8 -0
  37. package/build/bitbucket-client/core/ApiResult.d.ts.map +1 -0
  38. package/build/bitbucket-client/core/ApiResult.js +2 -0
  39. package/build/bitbucket-client/core/ApiResult.js.map +1 -0
  40. package/build/bitbucket-client/core/CancelablePromise.d.ts +21 -0
  41. package/build/bitbucket-client/core/CancelablePromise.d.ts.map +1 -0
  42. package/build/bitbucket-client/core/CancelablePromise.js +100 -0
  43. package/build/bitbucket-client/core/CancelablePromise.js.map +1 -0
  44. package/build/bitbucket-client/core/OpenAPI.d.ts +17 -0
  45. package/build/bitbucket-client/core/OpenAPI.d.ts.map +1 -0
  46. package/build/bitbucket-client/core/OpenAPI.js +12 -0
  47. package/build/bitbucket-client/core/OpenAPI.js.map +1 -0
  48. package/build/bitbucket-client/core/request.d.ts +31 -0
  49. package/build/bitbucket-client/core/request.d.ts.map +1 -0
  50. package/build/bitbucket-client/core/request.js +292 -0
  51. package/build/bitbucket-client/core/request.js.map +1 -0
  52. package/build/bitbucket-client/index.d.ts +297 -0
  53. package/build/bitbucket-client/index.d.ts.map +1 -0
  54. package/build/bitbucket-client/index.js +44 -0
  55. package/build/bitbucket-client/index.js.map +1 -0
  56. package/build/bitbucket-client/models/AdminPasswordUpdate.d.ts +6 -0
  57. package/build/bitbucket-client/models/AdminPasswordUpdate.d.ts.map +1 -0
  58. package/build/bitbucket-client/models/AdminPasswordUpdate.js +2 -0
  59. package/build/bitbucket-client/models/AdminPasswordUpdate.js.map +1 -0
  60. package/build/bitbucket-client/models/ApplicationId.d.ts +2 -0
  61. package/build/bitbucket-client/models/ApplicationId.d.ts.map +1 -0
  62. package/build/bitbucket-client/models/ApplicationId.js +2 -0
  63. package/build/bitbucket-client/models/ApplicationId.js.map +1 -0
  64. package/build/bitbucket-client/models/ApplicationUser.d.ts +2 -0
  65. package/build/bitbucket-client/models/ApplicationUser.d.ts.map +1 -0
  66. package/build/bitbucket-client/models/ApplicationUser.js +2 -0
  67. package/build/bitbucket-client/models/ApplicationUser.js.map +1 -0
  68. package/build/bitbucket-client/models/AuthenticationEntity.d.ts +9 -0
  69. package/build/bitbucket-client/models/AuthenticationEntity.d.ts.map +1 -0
  70. package/build/bitbucket-client/models/AuthenticationEntity.js +2 -0
  71. package/build/bitbucket-client/models/AuthenticationEntity.js.map +1 -0
  72. package/build/bitbucket-client/models/AuthenticationResponse.d.ts +2 -0
  73. package/build/bitbucket-client/models/AuthenticationResponse.d.ts.map +1 -0
  74. package/build/bitbucket-client/models/AuthenticationResponse.js +2 -0
  75. package/build/bitbucket-client/models/AuthenticationResponse.js.map +1 -0
  76. package/build/bitbucket-client/models/BasicAuthConfigEntity.d.ts +2 -0
  77. package/build/bitbucket-client/models/BasicAuthConfigEntity.d.ts.map +1 -0
  78. package/build/bitbucket-client/models/BasicAuthConfigEntity.js +2 -0
  79. package/build/bitbucket-client/models/BasicAuthConfigEntity.js.map +1 -0
  80. package/build/bitbucket-client/models/CaptchaDataEntity.d.ts +2 -0
  81. package/build/bitbucket-client/models/CaptchaDataEntity.d.ts.map +1 -0
  82. package/build/bitbucket-client/models/CaptchaDataEntity.js +2 -0
  83. package/build/bitbucket-client/models/CaptchaDataEntity.js.map +1 -0
  84. package/build/bitbucket-client/models/Comment.d.ts +33 -0
  85. package/build/bitbucket-client/models/Comment.d.ts.map +1 -0
  86. package/build/bitbucket-client/models/Comment.js +15 -0
  87. package/build/bitbucket-client/models/Comment.js.map +1 -0
  88. package/build/bitbucket-client/models/CommentOperations.d.ts +6 -0
  89. package/build/bitbucket-client/models/CommentOperations.d.ts.map +1 -0
  90. package/build/bitbucket-client/models/CommentOperations.js +2 -0
  91. package/build/bitbucket-client/models/CommentOperations.js.map +1 -0
  92. package/build/bitbucket-client/models/CommentThread.d.ts +17 -0
  93. package/build/bitbucket-client/models/CommentThread.d.ts.map +1 -0
  94. package/build/bitbucket-client/models/CommentThread.js +2 -0
  95. package/build/bitbucket-client/models/CommentThread.js.map +1 -0
  96. package/build/bitbucket-client/models/CommentThreadDiffAnchor.d.ts +41 -0
  97. package/build/bitbucket-client/models/CommentThreadDiffAnchor.d.ts.map +1 -0
  98. package/build/bitbucket-client/models/CommentThreadDiffAnchor.js +27 -0
  99. package/build/bitbucket-client/models/CommentThreadDiffAnchor.js.map +1 -0
  100. package/build/bitbucket-client/models/Commentable.d.ts +2 -0
  101. package/build/bitbucket-client/models/Commentable.d.ts.map +1 -0
  102. package/build/bitbucket-client/models/Commentable.js +2 -0
  103. package/build/bitbucket-client/models/Commentable.js.map +1 -0
  104. package/build/bitbucket-client/models/Context.d.ts +4 -0
  105. package/build/bitbucket-client/models/Context.d.ts.map +1 -0
  106. package/build/bitbucket-client/models/Context.js +2 -0
  107. package/build/bitbucket-client/models/Context.js.map +1 -0
  108. package/build/bitbucket-client/models/ConversationDTO.d.ts +4 -0
  109. package/build/bitbucket-client/models/ConversationDTO.d.ts.map +1 -0
  110. package/build/bitbucket-client/models/ConversationDTO.js +2 -0
  111. package/build/bitbucket-client/models/ConversationDTO.js.map +1 -0
  112. package/build/bitbucket-client/models/Credentials.d.ts +5 -0
  113. package/build/bitbucket-client/models/Credentials.d.ts.map +1 -0
  114. package/build/bitbucket-client/models/Credentials.js +2 -0
  115. package/build/bitbucket-client/models/Credentials.js.map +1 -0
  116. package/build/bitbucket-client/models/CredentialsCheckFailedDTO.d.ts +2 -0
  117. package/build/bitbucket-client/models/CredentialsCheckFailedDTO.d.ts.map +1 -0
  118. package/build/bitbucket-client/models/CredentialsCheckFailedDTO.js +2 -0
  119. package/build/bitbucket-client/models/CredentialsCheckFailedDTO.js.map +1 -0
  120. package/build/bitbucket-client/models/DiffContentFilter.d.ts +2 -0
  121. package/build/bitbucket-client/models/DiffContentFilter.d.ts.map +1 -0
  122. package/build/bitbucket-client/models/DiffContentFilter.js +2 -0
  123. package/build/bitbucket-client/models/DiffContentFilter.js.map +1 -0
  124. package/build/bitbucket-client/models/ElevationMethodRestDTO.d.ts +2 -0
  125. package/build/bitbucket-client/models/ElevationMethodRestDTO.d.ts.map +1 -0
  126. package/build/bitbucket-client/models/ElevationMethodRestDTO.js +2 -0
  127. package/build/bitbucket-client/models/ElevationMethodRestDTO.js.map +1 -0
  128. package/build/bitbucket-client/models/EnrichedRepository.d.ts +2 -0
  129. package/build/bitbucket-client/models/EnrichedRepository.d.ts.map +1 -0
  130. package/build/bitbucket-client/models/EnrichedRepository.js +2 -0
  131. package/build/bitbucket-client/models/EnrichedRepository.js.map +1 -0
  132. package/build/bitbucket-client/models/ErrorEntity.d.ts +2 -0
  133. package/build/bitbucket-client/models/ErrorEntity.d.ts.map +1 -0
  134. package/build/bitbucket-client/models/ErrorEntity.js +2 -0
  135. package/build/bitbucket-client/models/ErrorEntity.js.map +1 -0
  136. package/build/bitbucket-client/models/ExampleAvatarMultipartFormData.d.ts +7 -0
  137. package/build/bitbucket-client/models/ExampleAvatarMultipartFormData.d.ts.map +1 -0
  138. package/build/bitbucket-client/models/ExampleAvatarMultipartFormData.js +2 -0
  139. package/build/bitbucket-client/models/ExampleAvatarMultipartFormData.js.map +1 -0
  140. package/build/bitbucket-client/models/ExampleCertificateMultipartFormData.d.ts +7 -0
  141. package/build/bitbucket-client/models/ExampleCertificateMultipartFormData.d.ts.map +1 -0
  142. package/build/bitbucket-client/models/ExampleCertificateMultipartFormData.js +2 -0
  143. package/build/bitbucket-client/models/ExampleCertificateMultipartFormData.js.map +1 -0
  144. package/build/bitbucket-client/models/ExampleFiles.d.ts +2 -0
  145. package/build/bitbucket-client/models/ExampleFiles.d.ts.map +1 -0
  146. package/build/bitbucket-client/models/ExampleFiles.js +2 -0
  147. package/build/bitbucket-client/models/ExampleFiles.js.map +1 -0
  148. package/build/bitbucket-client/models/ExampleJsonLastModifiedCallback.d.ts +2 -0
  149. package/build/bitbucket-client/models/ExampleJsonLastModifiedCallback.d.ts.map +1 -0
  150. package/build/bitbucket-client/models/ExampleJsonLastModifiedCallback.js +2 -0
  151. package/build/bitbucket-client/models/ExampleJsonLastModifiedCallback.js.map +1 -0
  152. package/build/bitbucket-client/models/ExampleMultipartFormData.d.ts +23 -0
  153. package/build/bitbucket-client/models/ExampleMultipartFormData.d.ts.map +1 -0
  154. package/build/bitbucket-client/models/ExampleMultipartFormData.js +2 -0
  155. package/build/bitbucket-client/models/ExampleMultipartFormData.js.map +1 -0
  156. package/build/bitbucket-client/models/ExamplePostMultipartFormData.d.ts +19 -0
  157. package/build/bitbucket-client/models/ExamplePostMultipartFormData.d.ts.map +1 -0
  158. package/build/bitbucket-client/models/ExamplePostMultipartFormData.js +2 -0
  159. package/build/bitbucket-client/models/ExamplePostMultipartFormData.js.map +1 -0
  160. package/build/bitbucket-client/models/ExamplePreviewMigration.d.ts +2 -0
  161. package/build/bitbucket-client/models/ExamplePreviewMigration.d.ts.map +1 -0
  162. package/build/bitbucket-client/models/ExamplePreviewMigration.js +2 -0
  163. package/build/bitbucket-client/models/ExamplePreviewMigration.js.map +1 -0
  164. package/build/bitbucket-client/models/ExamplePutMultipartFormData.d.ts +15 -0
  165. package/build/bitbucket-client/models/ExamplePutMultipartFormData.d.ts.map +1 -0
  166. package/build/bitbucket-client/models/ExamplePutMultipartFormData.js +2 -0
  167. package/build/bitbucket-client/models/ExamplePutMultipartFormData.js.map +1 -0
  168. package/build/bitbucket-client/models/ExampleRequirements.d.ts +2 -0
  169. package/build/bitbucket-client/models/ExampleRequirements.d.ts.map +1 -0
  170. package/build/bitbucket-client/models/ExampleRequirements.js +2 -0
  171. package/build/bitbucket-client/models/ExampleRequirements.js.map +1 -0
  172. package/build/bitbucket-client/models/ExampleSettings.d.ts +2 -0
  173. package/build/bitbucket-client/models/ExampleSettings.d.ts.map +1 -0
  174. package/build/bitbucket-client/models/ExampleSettings.js +2 -0
  175. package/build/bitbucket-client/models/ExampleSettings.js.map +1 -0
  176. package/build/bitbucket-client/models/ExampleSettingsMap.d.ts +2 -0
  177. package/build/bitbucket-client/models/ExampleSettingsMap.d.ts.map +1 -0
  178. package/build/bitbucket-client/models/ExampleSettingsMap.js +2 -0
  179. package/build/bitbucket-client/models/ExampleSettingsMap.js.map +1 -0
  180. package/build/bitbucket-client/models/ExampleSocketAddress.d.ts +2 -0
  181. package/build/bitbucket-client/models/ExampleSocketAddress.d.ts.map +1 -0
  182. package/build/bitbucket-client/models/ExampleSocketAddress.js +2 -0
  183. package/build/bitbucket-client/models/ExampleSocketAddress.js.map +1 -0
  184. package/build/bitbucket-client/models/ExampleStatus.d.ts +2 -0
  185. package/build/bitbucket-client/models/ExampleStatus.d.ts.map +1 -0
  186. package/build/bitbucket-client/models/ExampleStatus.js +2 -0
  187. package/build/bitbucket-client/models/ExampleStatus.js.map +1 -0
  188. package/build/bitbucket-client/models/FileListResource.d.ts +2 -0
  189. package/build/bitbucket-client/models/FileListResource.d.ts.map +1 -0
  190. package/build/bitbucket-client/models/FileListResource.js +2 -0
  191. package/build/bitbucket-client/models/FileListResource.js.map +1 -0
  192. package/build/bitbucket-client/models/FilePart.d.ts +9 -0
  193. package/build/bitbucket-client/models/FilePart.d.ts.map +1 -0
  194. package/build/bitbucket-client/models/FilePart.js +2 -0
  195. package/build/bitbucket-client/models/FilePart.js.map +1 -0
  196. package/build/bitbucket-client/models/Group.d.ts +2 -0
  197. package/build/bitbucket-client/models/Group.d.ts.map +1 -0
  198. package/build/bitbucket-client/models/Group.js +2 -0
  199. package/build/bitbucket-client/models/Group.js.map +1 -0
  200. package/build/bitbucket-client/models/GroupAndUsers.d.ts +5 -0
  201. package/build/bitbucket-client/models/GroupAndUsers.d.ts.map +1 -0
  202. package/build/bitbucket-client/models/GroupAndUsers.js +2 -0
  203. package/build/bitbucket-client/models/GroupAndUsers.js.map +1 -0
  204. package/build/bitbucket-client/models/GroupPickerContext.d.ts +5 -0
  205. package/build/bitbucket-client/models/GroupPickerContext.d.ts.map +1 -0
  206. package/build/bitbucket-client/models/GroupPickerContext.js +2 -0
  207. package/build/bitbucket-client/models/GroupPickerContext.js.map +1 -0
  208. package/build/bitbucket-client/models/IdpConfigEntity.d.ts +2 -0
  209. package/build/bitbucket-client/models/IdpConfigEntity.d.ts.map +1 -0
  210. package/build/bitbucket-client/models/IdpConfigEntity.js +2 -0
  211. package/build/bitbucket-client/models/IdpConfigEntity.js.map +1 -0
  212. package/build/bitbucket-client/models/JitConfigEntity.d.ts +2 -0
  213. package/build/bitbucket-client/models/JitConfigEntity.d.ts.map +1 -0
  214. package/build/bitbucket-client/models/JitConfigEntity.js +2 -0
  215. package/build/bitbucket-client/models/JitConfigEntity.js.map +1 -0
  216. package/build/bitbucket-client/models/JitUserEntity.d.ts +2 -0
  217. package/build/bitbucket-client/models/JitUserEntity.d.ts.map +1 -0
  218. package/build/bitbucket-client/models/JitUserEntity.js +2 -0
  219. package/build/bitbucket-client/models/JitUserEntity.js.map +1 -0
  220. package/build/bitbucket-client/models/LineNumberRange.d.ts +6 -0
  221. package/build/bitbucket-client/models/LineNumberRange.d.ts.map +1 -0
  222. package/build/bitbucket-client/models/LineNumberRange.js +2 -0
  223. package/build/bitbucket-client/models/LineNumberRange.js.map +1 -0
  224. package/build/bitbucket-client/models/LoginOptionEntity.d.ts +2 -0
  225. package/build/bitbucket-client/models/LoginOptionEntity.d.ts.map +1 -0
  226. package/build/bitbucket-client/models/LoginOptionEntity.js +2 -0
  227. package/build/bitbucket-client/models/LoginOptionEntity.js.map +1 -0
  228. package/build/bitbucket-client/models/MethodStateDTO.d.ts +2 -0
  229. package/build/bitbucket-client/models/MethodStateDTO.d.ts.map +1 -0
  230. package/build/bitbucket-client/models/MethodStateDTO.js +2 -0
  231. package/build/bitbucket-client/models/MethodStateDTO.js.map +1 -0
  232. package/build/bitbucket-client/models/NextLoginStepDTO.d.ts +2 -0
  233. package/build/bitbucket-client/models/NextLoginStepDTO.d.ts.map +1 -0
  234. package/build/bitbucket-client/models/NextLoginStepDTO.js +2 -0
  235. package/build/bitbucket-client/models/NextLoginStepDTO.js.map +1 -0
  236. package/build/bitbucket-client/models/OptionalBodyBeanParam.d.ts +2 -0
  237. package/build/bitbucket-client/models/OptionalBodyBeanParam.d.ts.map +1 -0
  238. package/build/bitbucket-client/models/OptionalBodyBeanParam.js +2 -0
  239. package/build/bitbucket-client/models/OptionalBodyBeanParam.js.map +1 -0
  240. package/build/bitbucket-client/models/PageRequestImpl.d.ts +5 -0
  241. package/build/bitbucket-client/models/PageRequestImpl.d.ts.map +1 -0
  242. package/build/bitbucket-client/models/PageRequestImpl.js +2 -0
  243. package/build/bitbucket-client/models/PageRequestImpl.js.map +1 -0
  244. package/build/bitbucket-client/models/PasswordElevationRestDTO.d.ts +4 -0
  245. package/build/bitbucket-client/models/PasswordElevationRestDTO.d.ts.map +1 -0
  246. package/build/bitbucket-client/models/PasswordElevationRestDTO.js +2 -0
  247. package/build/bitbucket-client/models/PasswordElevationRestDTO.js.map +1 -0
  248. package/build/bitbucket-client/models/Project.d.ts +15 -0
  249. package/build/bitbucket-client/models/Project.d.ts.map +1 -0
  250. package/build/bitbucket-client/models/Project.js +9 -0
  251. package/build/bitbucket-client/models/Project.js.map +1 -0
  252. package/build/bitbucket-client/models/PropertyMap.d.ts +2 -0
  253. package/build/bitbucket-client/models/PropertyMap.d.ts.map +1 -0
  254. package/build/bitbucket-client/models/PropertyMap.js +2 -0
  255. package/build/bitbucket-client/models/PropertyMap.js.map +1 -0
  256. package/build/bitbucket-client/models/PullRequest.d.ts +31 -0
  257. package/build/bitbucket-client/models/PullRequest.d.ts.map +1 -0
  258. package/build/bitbucket-client/models/PullRequest.js +10 -0
  259. package/build/bitbucket-client/models/PullRequest.js.map +1 -0
  260. package/build/bitbucket-client/models/PullRequestParticipant.d.ts +23 -0
  261. package/build/bitbucket-client/models/PullRequestParticipant.d.ts.map +1 -0
  262. package/build/bitbucket-client/models/PullRequestParticipant.js +16 -0
  263. package/build/bitbucket-client/models/PullRequestParticipant.js.map +1 -0
  264. package/build/bitbucket-client/models/PullRequestRef.d.ts +10 -0
  265. package/build/bitbucket-client/models/PullRequestRef.d.ts.map +1 -0
  266. package/build/bitbucket-client/models/PullRequestRef.js +2 -0
  267. package/build/bitbucket-client/models/PullRequestRef.js.map +1 -0
  268. package/build/bitbucket-client/models/RefType.d.ts +2 -0
  269. package/build/bitbucket-client/models/RefType.d.ts.map +1 -0
  270. package/build/bitbucket-client/models/RefType.js +2 -0
  271. package/build/bitbucket-client/models/RefType.js.map +1 -0
  272. package/build/bitbucket-client/models/Repository.d.ts +31 -0
  273. package/build/bitbucket-client/models/Repository.d.ts.map +1 -0
  274. package/build/bitbucket-client/models/Repository.js +11 -0
  275. package/build/bitbucket-client/models/Repository.js.map +1 -0
  276. package/build/bitbucket-client/models/RepositoryHookDetails.d.ts +2 -0
  277. package/build/bitbucket-client/models/RepositoryHookDetails.d.ts.map +1 -0
  278. package/build/bitbucket-client/models/RepositoryHookDetails.js +2 -0
  279. package/build/bitbucket-client/models/RepositoryHookDetails.js.map +1 -0
  280. package/build/bitbucket-client/models/RestAccessToken.d.ts +2 -0
  281. package/build/bitbucket-client/models/RestAccessToken.d.ts.map +1 -0
  282. package/build/bitbucket-client/models/RestAccessToken.js +2 -0
  283. package/build/bitbucket-client/models/RestAccessToken.js.map +1 -0
  284. package/build/bitbucket-client/models/RestAccessTokenRequest.d.ts +6 -0
  285. package/build/bitbucket-client/models/RestAccessTokenRequest.d.ts.map +1 -0
  286. package/build/bitbucket-client/models/RestAccessTokenRequest.js +2 -0
  287. package/build/bitbucket-client/models/RestAccessTokenRequest.js.map +1 -0
  288. package/build/bitbucket-client/models/RestAggregateRejectCounter.d.ts +2 -0
  289. package/build/bitbucket-client/models/RestAggregateRejectCounter.d.ts.map +1 -0
  290. package/build/bitbucket-client/models/RestAggregateRejectCounter.js +2 -0
  291. package/build/bitbucket-client/models/RestAggregateRejectCounter.js.map +1 -0
  292. package/build/bitbucket-client/models/RestAnalyticsSettings.d.ts +2 -0
  293. package/build/bitbucket-client/models/RestAnalyticsSettings.d.ts.map +1 -0
  294. package/build/bitbucket-client/models/RestAnalyticsSettings.js +2 -0
  295. package/build/bitbucket-client/models/RestAnalyticsSettings.js.map +1 -0
  296. package/build/bitbucket-client/models/RestAnnouncementBanner.d.ts +2 -0
  297. package/build/bitbucket-client/models/RestAnnouncementBanner.d.ts.map +1 -0
  298. package/build/bitbucket-client/models/RestAnnouncementBanner.js +2 -0
  299. package/build/bitbucket-client/models/RestAnnouncementBanner.js.map +1 -0
  300. package/build/bitbucket-client/models/RestApplicationProperties.d.ts +2 -0
  301. package/build/bitbucket-client/models/RestApplicationProperties.d.ts.map +1 -0
  302. package/build/bitbucket-client/models/RestApplicationProperties.js +2 -0
  303. package/build/bitbucket-client/models/RestApplicationProperties.js.map +1 -0
  304. package/build/bitbucket-client/models/RestApplicationUser.d.ts +2 -0
  305. package/build/bitbucket-client/models/RestApplicationUser.d.ts.map +1 -0
  306. package/build/bitbucket-client/models/RestApplicationUser.js +2 -0
  307. package/build/bitbucket-client/models/RestApplicationUser.js.map +1 -0
  308. package/build/bitbucket-client/models/RestApplicationUserWithPermissions.d.ts +2 -0
  309. package/build/bitbucket-client/models/RestApplicationUserWithPermissions.d.ts.map +1 -0
  310. package/build/bitbucket-client/models/RestApplicationUserWithPermissions.js +2 -0
  311. package/build/bitbucket-client/models/RestApplicationUserWithPermissions.js.map +1 -0
  312. package/build/bitbucket-client/models/RestApplySuggestionRequest.d.ts +7 -0
  313. package/build/bitbucket-client/models/RestApplySuggestionRequest.d.ts.map +1 -0
  314. package/build/bitbucket-client/models/RestApplySuggestionRequest.js +2 -0
  315. package/build/bitbucket-client/models/RestApplySuggestionRequest.js.map +1 -0
  316. package/build/bitbucket-client/models/RestAttachmentMetadata.d.ts +2 -0
  317. package/build/bitbucket-client/models/RestAttachmentMetadata.d.ts.map +1 -0
  318. package/build/bitbucket-client/models/RestAttachmentMetadata.js +2 -0
  319. package/build/bitbucket-client/models/RestAttachmentMetadata.js.map +1 -0
  320. package/build/bitbucket-client/models/RestAuthenticationRequest.d.ts +6 -0
  321. package/build/bitbucket-client/models/RestAuthenticationRequest.d.ts.map +1 -0
  322. package/build/bitbucket-client/models/RestAuthenticationRequest.js +2 -0
  323. package/build/bitbucket-client/models/RestAuthenticationRequest.js.map +1 -0
  324. package/build/bitbucket-client/models/RestAutoDeclineSettings.d.ts +2 -0
  325. package/build/bitbucket-client/models/RestAutoDeclineSettings.d.ts.map +1 -0
  326. package/build/bitbucket-client/models/RestAutoDeclineSettings.js +2 -0
  327. package/build/bitbucket-client/models/RestAutoDeclineSettings.js.map +1 -0
  328. package/build/bitbucket-client/models/RestAutoDeclineSettingsRequest.d.ts +5 -0
  329. package/build/bitbucket-client/models/RestAutoDeclineSettingsRequest.d.ts.map +1 -0
  330. package/build/bitbucket-client/models/RestAutoDeclineSettingsRequest.js +2 -0
  331. package/build/bitbucket-client/models/RestAutoDeclineSettingsRequest.js.map +1 -0
  332. package/build/bitbucket-client/models/RestAutoMergeProcessingResult.d.ts +2 -0
  333. package/build/bitbucket-client/models/RestAutoMergeProcessingResult.d.ts.map +1 -0
  334. package/build/bitbucket-client/models/RestAutoMergeProcessingResult.js +2 -0
  335. package/build/bitbucket-client/models/RestAutoMergeProcessingResult.js.map +1 -0
  336. package/build/bitbucket-client/models/RestAutoMergeProjectSettingsRequest.d.ts +12 -0
  337. package/build/bitbucket-client/models/RestAutoMergeProjectSettingsRequest.d.ts.map +1 -0
  338. package/build/bitbucket-client/models/RestAutoMergeProjectSettingsRequest.js +10 -0
  339. package/build/bitbucket-client/models/RestAutoMergeProjectSettingsRequest.js.map +1 -0
  340. package/build/bitbucket-client/models/RestAutoMergeRequest.d.ts +2 -0
  341. package/build/bitbucket-client/models/RestAutoMergeRequest.d.ts.map +1 -0
  342. package/build/bitbucket-client/models/RestAutoMergeRequest.js +2 -0
  343. package/build/bitbucket-client/models/RestAutoMergeRequest.js.map +1 -0
  344. package/build/bitbucket-client/models/RestAutoMergeRestrictedSettings.d.ts +2 -0
  345. package/build/bitbucket-client/models/RestAutoMergeRestrictedSettings.d.ts.map +1 -0
  346. package/build/bitbucket-client/models/RestAutoMergeRestrictedSettings.js +2 -0
  347. package/build/bitbucket-client/models/RestAutoMergeRestrictedSettings.js.map +1 -0
  348. package/build/bitbucket-client/models/RestAutoMergeSettingsRequest.d.ts +4 -0
  349. package/build/bitbucket-client/models/RestAutoMergeSettingsRequest.d.ts.map +1 -0
  350. package/build/bitbucket-client/models/RestAutoMergeSettingsRequest.js +2 -0
  351. package/build/bitbucket-client/models/RestAutoMergeSettingsRequest.js.map +1 -0
  352. package/build/bitbucket-client/models/RestBearerTokenCredentials.d.ts +4 -0
  353. package/build/bitbucket-client/models/RestBearerTokenCredentials.d.ts.map +1 -0
  354. package/build/bitbucket-client/models/RestBearerTokenCredentials.js +2 -0
  355. package/build/bitbucket-client/models/RestBearerTokenCredentials.js.map +1 -0
  356. package/build/bitbucket-client/models/RestBitbucketLicense.d.ts +2 -0
  357. package/build/bitbucket-client/models/RestBitbucketLicense.d.ts.map +1 -0
  358. package/build/bitbucket-client/models/RestBitbucketLicense.js +2 -0
  359. package/build/bitbucket-client/models/RestBitbucketLicense.js.map +1 -0
  360. package/build/bitbucket-client/models/RestBranch.d.ts +2 -0
  361. package/build/bitbucket-client/models/RestBranch.d.ts.map +1 -0
  362. package/build/bitbucket-client/models/RestBranch.js +2 -0
  363. package/build/bitbucket-client/models/RestBranch.js.map +1 -0
  364. package/build/bitbucket-client/models/RestBranchCreateRequest.d.ts +11 -0
  365. package/build/bitbucket-client/models/RestBranchCreateRequest.d.ts.map +1 -0
  366. package/build/bitbucket-client/models/RestBranchCreateRequest.js +2 -0
  367. package/build/bitbucket-client/models/RestBranchCreateRequest.js.map +1 -0
  368. package/build/bitbucket-client/models/RestBranchDeleteRequest.d.ts +15 -0
  369. package/build/bitbucket-client/models/RestBranchDeleteRequest.d.ts.map +1 -0
  370. package/build/bitbucket-client/models/RestBranchDeleteRequest.js +2 -0
  371. package/build/bitbucket-client/models/RestBranchDeleteRequest.js.map +1 -0
  372. package/build/bitbucket-client/models/RestBuildCapabilities.d.ts +2 -0
  373. package/build/bitbucket-client/models/RestBuildCapabilities.d.ts.map +1 -0
  374. package/build/bitbucket-client/models/RestBuildCapabilities.js +2 -0
  375. package/build/bitbucket-client/models/RestBuildCapabilities.js.map +1 -0
  376. package/build/bitbucket-client/models/RestBuildStats.d.ts +2 -0
  377. package/build/bitbucket-client/models/RestBuildStats.d.ts.map +1 -0
  378. package/build/bitbucket-client/models/RestBuildStats.js +2 -0
  379. package/build/bitbucket-client/models/RestBuildStats.js.map +1 -0
  380. package/build/bitbucket-client/models/RestBuildStatus.d.ts +2 -0
  381. package/build/bitbucket-client/models/RestBuildStatus.d.ts.map +1 -0
  382. package/build/bitbucket-client/models/RestBuildStatus.js +2 -0
  383. package/build/bitbucket-client/models/RestBuildStatus.js.map +1 -0
  384. package/build/bitbucket-client/models/RestBuildStatusSetRequest.d.ts +27 -0
  385. package/build/bitbucket-client/models/RestBuildStatusSetRequest.d.ts.map +1 -0
  386. package/build/bitbucket-client/models/RestBuildStatusSetRequest.js +12 -0
  387. package/build/bitbucket-client/models/RestBuildStatusSetRequest.js.map +1 -0
  388. package/build/bitbucket-client/models/RestBulkAddInsightAnnotationRequest.d.ts +5 -0
  389. package/build/bitbucket-client/models/RestBulkAddInsightAnnotationRequest.d.ts.map +1 -0
  390. package/build/bitbucket-client/models/RestBulkAddInsightAnnotationRequest.js +2 -0
  391. package/build/bitbucket-client/models/RestBulkAddInsightAnnotationRequest.js.map +1 -0
  392. package/build/bitbucket-client/models/RestBulkUserRateLimitSettingsUpdateRequest.d.ts +9 -0
  393. package/build/bitbucket-client/models/RestBulkUserRateLimitSettingsUpdateRequest.d.ts.map +1 -0
  394. package/build/bitbucket-client/models/RestBulkUserRateLimitSettingsUpdateRequest.js +2 -0
  395. package/build/bitbucket-client/models/RestBulkUserRateLimitSettingsUpdateRequest.js.map +1 -0
  396. package/build/bitbucket-client/models/RestChange.d.ts +2 -0
  397. package/build/bitbucket-client/models/RestChange.d.ts.map +1 -0
  398. package/build/bitbucket-client/models/RestChange.js +2 -0
  399. package/build/bitbucket-client/models/RestChange.js.map +1 -0
  400. package/build/bitbucket-client/models/RestChangeset.d.ts +2 -0
  401. package/build/bitbucket-client/models/RestChangeset.d.ts.map +1 -0
  402. package/build/bitbucket-client/models/RestChangeset.js +2 -0
  403. package/build/bitbucket-client/models/RestChangeset.js.map +1 -0
  404. package/build/bitbucket-client/models/RestClusterInformation.d.ts +2 -0
  405. package/build/bitbucket-client/models/RestClusterInformation.d.ts.map +1 -0
  406. package/build/bitbucket-client/models/RestClusterInformation.js +2 -0
  407. package/build/bitbucket-client/models/RestClusterInformation.js.map +1 -0
  408. package/build/bitbucket-client/models/RestClusterNode.d.ts +2 -0
  409. package/build/bitbucket-client/models/RestClusterNode.d.ts.map +1 -0
  410. package/build/bitbucket-client/models/RestClusterNode.js +2 -0
  411. package/build/bitbucket-client/models/RestClusterNode.js.map +1 -0
  412. package/build/bitbucket-client/models/RestComment.d.ts +2 -0
  413. package/build/bitbucket-client/models/RestComment.d.ts.map +1 -0
  414. package/build/bitbucket-client/models/RestComment.js +2 -0
  415. package/build/bitbucket-client/models/RestComment.js.map +1 -0
  416. package/build/bitbucket-client/models/RestCommentJiraIssue.d.ts +2 -0
  417. package/build/bitbucket-client/models/RestCommentJiraIssue.d.ts.map +1 -0
  418. package/build/bitbucket-client/models/RestCommentJiraIssue.js +2 -0
  419. package/build/bitbucket-client/models/RestCommentJiraIssue.js.map +1 -0
  420. package/build/bitbucket-client/models/RestCommentThreadDiffAnchor.d.ts +2 -0
  421. package/build/bitbucket-client/models/RestCommentThreadDiffAnchor.d.ts.map +1 -0
  422. package/build/bitbucket-client/models/RestCommentThreadDiffAnchor.js +2 -0
  423. package/build/bitbucket-client/models/RestCommentThreadDiffAnchor.js.map +1 -0
  424. package/build/bitbucket-client/models/RestCommit.d.ts +2 -0
  425. package/build/bitbucket-client/models/RestCommit.d.ts.map +1 -0
  426. package/build/bitbucket-client/models/RestCommit.js +2 -0
  427. package/build/bitbucket-client/models/RestCommit.js.map +1 -0
  428. package/build/bitbucket-client/models/RestCommitMessageSuggestion.d.ts +2 -0
  429. package/build/bitbucket-client/models/RestCommitMessageSuggestion.d.ts.map +1 -0
  430. package/build/bitbucket-client/models/RestCommitMessageSuggestion.js +2 -0
  431. package/build/bitbucket-client/models/RestCommitMessageSuggestion.js.map +1 -0
  432. package/build/bitbucket-client/models/RestConflict.d.ts +2 -0
  433. package/build/bitbucket-client/models/RestConflict.d.ts.map +1 -0
  434. package/build/bitbucket-client/models/RestConflict.js +2 -0
  435. package/build/bitbucket-client/models/RestConflict.js.map +1 -0
  436. package/build/bitbucket-client/models/RestConflictChange.d.ts +2 -0
  437. package/build/bitbucket-client/models/RestConflictChange.d.ts.map +1 -0
  438. package/build/bitbucket-client/models/RestConflictChange.js +2 -0
  439. package/build/bitbucket-client/models/RestConflictChange.js.map +1 -0
  440. package/build/bitbucket-client/models/RestConnectivitySummary.d.ts +2 -0
  441. package/build/bitbucket-client/models/RestConnectivitySummary.d.ts.map +1 -0
  442. package/build/bitbucket-client/models/RestConnectivitySummary.js +2 -0
  443. package/build/bitbucket-client/models/RestConnectivitySummary.js.map +1 -0
  444. package/build/bitbucket-client/models/RestCreateBranchRequest.d.ts +6 -0
  445. package/build/bitbucket-client/models/RestCreateBranchRequest.d.ts.map +1 -0
  446. package/build/bitbucket-client/models/RestCreateBranchRequest.js +2 -0
  447. package/build/bitbucket-client/models/RestCreateBranchRequest.js.map +1 -0
  448. package/build/bitbucket-client/models/RestCreateTagRequest.d.ts +6 -0
  449. package/build/bitbucket-client/models/RestCreateTagRequest.d.ts.map +1 -0
  450. package/build/bitbucket-client/models/RestCreateTagRequest.js +2 -0
  451. package/build/bitbucket-client/models/RestCreateTagRequest.js.map +1 -0
  452. package/build/bitbucket-client/models/RestDefaultBranch.d.ts +4 -0
  453. package/build/bitbucket-client/models/RestDefaultBranch.d.ts.map +1 -0
  454. package/build/bitbucket-client/models/RestDefaultBranch.js +2 -0
  455. package/build/bitbucket-client/models/RestDefaultBranch.js.map +1 -0
  456. package/build/bitbucket-client/models/RestDefaultReviewersRequest.d.ts +33 -0
  457. package/build/bitbucket-client/models/RestDefaultReviewersRequest.d.ts.map +1 -0
  458. package/build/bitbucket-client/models/RestDefaultReviewersRequest.js +12 -0
  459. package/build/bitbucket-client/models/RestDefaultReviewersRequest.js.map +1 -0
  460. package/build/bitbucket-client/models/RestDefaultTask.d.ts +2 -0
  461. package/build/bitbucket-client/models/RestDefaultTask.d.ts.map +1 -0
  462. package/build/bitbucket-client/models/RestDefaultTask.js +2 -0
  463. package/build/bitbucket-client/models/RestDefaultTask.js.map +1 -0
  464. package/build/bitbucket-client/models/RestDefaultTaskRequest.d.ts +29 -0
  465. package/build/bitbucket-client/models/RestDefaultTaskRequest.d.ts.map +1 -0
  466. package/build/bitbucket-client/models/RestDefaultTaskRequest.js +12 -0
  467. package/build/bitbucket-client/models/RestDefaultTaskRequest.js.map +1 -0
  468. package/build/bitbucket-client/models/RestDelayedSyncRepository.d.ts +6 -0
  469. package/build/bitbucket-client/models/RestDelayedSyncRepository.d.ts.map +1 -0
  470. package/build/bitbucket-client/models/RestDelayedSyncRepository.js +2 -0
  471. package/build/bitbucket-client/models/RestDelayedSyncRepository.js.map +1 -0
  472. package/build/bitbucket-client/models/RestDeployment.d.ts +2 -0
  473. package/build/bitbucket-client/models/RestDeployment.d.ts.map +1 -0
  474. package/build/bitbucket-client/models/RestDeployment.js +2 -0
  475. package/build/bitbucket-client/models/RestDeployment.js.map +1 -0
  476. package/build/bitbucket-client/models/RestDeploymentEnvironment.d.ts +2 -0
  477. package/build/bitbucket-client/models/RestDeploymentEnvironment.d.ts.map +1 -0
  478. package/build/bitbucket-client/models/RestDeploymentEnvironment.js +2 -0
  479. package/build/bitbucket-client/models/RestDeploymentEnvironment.js.map +1 -0
  480. package/build/bitbucket-client/models/RestDeploymentSetRequest.d.ts +23 -0
  481. package/build/bitbucket-client/models/RestDeploymentSetRequest.d.ts.map +1 -0
  482. package/build/bitbucket-client/models/RestDeploymentSetRequest.js +14 -0
  483. package/build/bitbucket-client/models/RestDeploymentSetRequest.js.map +1 -0
  484. package/build/bitbucket-client/models/RestDetailedGroup.d.ts +2 -0
  485. package/build/bitbucket-client/models/RestDetailedGroup.d.ts.map +1 -0
  486. package/build/bitbucket-client/models/RestDetailedGroup.js +2 -0
  487. package/build/bitbucket-client/models/RestDetailedGroup.js.map +1 -0
  488. package/build/bitbucket-client/models/RestDetailedInvocation.d.ts +2 -0
  489. package/build/bitbucket-client/models/RestDetailedInvocation.d.ts.map +1 -0
  490. package/build/bitbucket-client/models/RestDetailedInvocation.js +2 -0
  491. package/build/bitbucket-client/models/RestDetailedInvocation.js.map +1 -0
  492. package/build/bitbucket-client/models/RestDetailedUser.d.ts +2 -0
  493. package/build/bitbucket-client/models/RestDetailedUser.d.ts.map +1 -0
  494. package/build/bitbucket-client/models/RestDetailedUser.js +2 -0
  495. package/build/bitbucket-client/models/RestDetailedUser.js.map +1 -0
  496. package/build/bitbucket-client/models/RestDiff.d.ts +2 -0
  497. package/build/bitbucket-client/models/RestDiff.d.ts.map +1 -0
  498. package/build/bitbucket-client/models/RestDiff.js +2 -0
  499. package/build/bitbucket-client/models/RestDiff.js.map +1 -0
  500. package/build/bitbucket-client/models/RestDiffHunk.d.ts +2 -0
  501. package/build/bitbucket-client/models/RestDiffHunk.d.ts.map +1 -0
  502. package/build/bitbucket-client/models/RestDiffHunk.js +2 -0
  503. package/build/bitbucket-client/models/RestDiffHunk.js.map +1 -0
  504. package/build/bitbucket-client/models/RestDiffLine.d.ts +2 -0
  505. package/build/bitbucket-client/models/RestDiffLine.d.ts.map +1 -0
  506. package/build/bitbucket-client/models/RestDiffLine.js +2 -0
  507. package/build/bitbucket-client/models/RestDiffLine.js.map +1 -0
  508. package/build/bitbucket-client/models/RestDiffSegment.d.ts +2 -0
  509. package/build/bitbucket-client/models/RestDiffSegment.d.ts.map +1 -0
  510. package/build/bitbucket-client/models/RestDiffSegment.js +2 -0
  511. package/build/bitbucket-client/models/RestDiffSegment.js.map +1 -0
  512. package/build/bitbucket-client/models/RestDiffStatsSummary.d.ts +2 -0
  513. package/build/bitbucket-client/models/RestDiffStatsSummary.d.ts.map +1 -0
  514. package/build/bitbucket-client/models/RestDiffStatsSummary.js +2 -0
  515. package/build/bitbucket-client/models/RestDiffStatsSummary.js.map +1 -0
  516. package/build/bitbucket-client/models/RestEmoticon.d.ts +2 -0
  517. package/build/bitbucket-client/models/RestEmoticon.d.ts.map +1 -0
  518. package/build/bitbucket-client/models/RestEmoticon.js +2 -0
  519. package/build/bitbucket-client/models/RestEmoticon.js.map +1 -0
  520. package/build/bitbucket-client/models/RestEnhancedEntityLink.d.ts +2 -0
  521. package/build/bitbucket-client/models/RestEnhancedEntityLink.d.ts.map +1 -0
  522. package/build/bitbucket-client/models/RestEnhancedEntityLink.js +2 -0
  523. package/build/bitbucket-client/models/RestEnhancedEntityLink.js.map +1 -0
  524. package/build/bitbucket-client/models/RestErasedUser.d.ts +2 -0
  525. package/build/bitbucket-client/models/RestErasedUser.d.ts.map +1 -0
  526. package/build/bitbucket-client/models/RestErasedUser.js +2 -0
  527. package/build/bitbucket-client/models/RestErasedUser.js.map +1 -0
  528. package/build/bitbucket-client/models/RestErrorMessage.d.ts +2 -0
  529. package/build/bitbucket-client/models/RestErrorMessage.d.ts.map +1 -0
  530. package/build/bitbucket-client/models/RestErrorMessage.js +2 -0
  531. package/build/bitbucket-client/models/RestErrorMessage.js.map +1 -0
  532. package/build/bitbucket-client/models/RestErrors.d.ts +2 -0
  533. package/build/bitbucket-client/models/RestErrors.d.ts.map +1 -0
  534. package/build/bitbucket-client/models/RestErrors.js +2 -0
  535. package/build/bitbucket-client/models/RestErrors.js.map +1 -0
  536. package/build/bitbucket-client/models/RestExportRequest.d.ts +8 -0
  537. package/build/bitbucket-client/models/RestExportRequest.d.ts.map +1 -0
  538. package/build/bitbucket-client/models/RestExportRequest.js +2 -0
  539. package/build/bitbucket-client/models/RestExportRequest.js.map +1 -0
  540. package/build/bitbucket-client/models/RestFarmSynchronizationRequest.d.ts +13 -0
  541. package/build/bitbucket-client/models/RestFarmSynchronizationRequest.d.ts.map +1 -0
  542. package/build/bitbucket-client/models/RestFarmSynchronizationRequest.js +9 -0
  543. package/build/bitbucket-client/models/RestFarmSynchronizationRequest.js.map +1 -0
  544. package/build/bitbucket-client/models/RestGitTagCreateRequest.d.ts +14 -0
  545. package/build/bitbucket-client/models/RestGitTagCreateRequest.d.ts.map +1 -0
  546. package/build/bitbucket-client/models/RestGitTagCreateRequest.js +9 -0
  547. package/build/bitbucket-client/models/RestGitTagCreateRequest.js.map +1 -0
  548. package/build/bitbucket-client/models/RestGpgKey.d.ts +2 -0
  549. package/build/bitbucket-client/models/RestGpgKey.d.ts.map +1 -0
  550. package/build/bitbucket-client/models/RestGpgKey.js +2 -0
  551. package/build/bitbucket-client/models/RestGpgKey.js.map +1 -0
  552. package/build/bitbucket-client/models/RestGpgSubKey.d.ts +2 -0
  553. package/build/bitbucket-client/models/RestGpgSubKey.d.ts.map +1 -0
  554. package/build/bitbucket-client/models/RestGpgSubKey.js +2 -0
  555. package/build/bitbucket-client/models/RestGpgSubKey.js.map +1 -0
  556. package/build/bitbucket-client/models/RestHookScript.d.ts +2 -0
  557. package/build/bitbucket-client/models/RestHookScript.d.ts.map +1 -0
  558. package/build/bitbucket-client/models/RestHookScript.js +2 -0
  559. package/build/bitbucket-client/models/RestHookScript.js.map +1 -0
  560. package/build/bitbucket-client/models/RestHookScriptConfig.d.ts +2 -0
  561. package/build/bitbucket-client/models/RestHookScriptConfig.d.ts.map +1 -0
  562. package/build/bitbucket-client/models/RestHookScriptConfig.js +2 -0
  563. package/build/bitbucket-client/models/RestHookScriptConfig.js.map +1 -0
  564. package/build/bitbucket-client/models/RestHookScriptTriggers.d.ts +4 -0
  565. package/build/bitbucket-client/models/RestHookScriptTriggers.d.ts.map +1 -0
  566. package/build/bitbucket-client/models/RestHookScriptTriggers.js +2 -0
  567. package/build/bitbucket-client/models/RestHookScriptTriggers.js.map +1 -0
  568. package/build/bitbucket-client/models/RestImportRequest.d.ts +4 -0
  569. package/build/bitbucket-client/models/RestImportRequest.d.ts.map +1 -0
  570. package/build/bitbucket-client/models/RestImportRequest.js +2 -0
  571. package/build/bitbucket-client/models/RestImportRequest.js.map +1 -0
  572. package/build/bitbucket-client/models/RestInsightAnnotation.d.ts +2 -0
  573. package/build/bitbucket-client/models/RestInsightAnnotation.d.ts.map +1 -0
  574. package/build/bitbucket-client/models/RestInsightAnnotation.js +2 -0
  575. package/build/bitbucket-client/models/RestInsightAnnotation.js.map +1 -0
  576. package/build/bitbucket-client/models/RestInsightAnnotationsResponse.d.ts +2 -0
  577. package/build/bitbucket-client/models/RestInsightAnnotationsResponse.d.ts.map +1 -0
  578. package/build/bitbucket-client/models/RestInsightAnnotationsResponse.js +2 -0
  579. package/build/bitbucket-client/models/RestInsightAnnotationsResponse.js.map +1 -0
  580. package/build/bitbucket-client/models/RestInsightReport.d.ts +2 -0
  581. package/build/bitbucket-client/models/RestInsightReport.d.ts.map +1 -0
  582. package/build/bitbucket-client/models/RestInsightReport.js +2 -0
  583. package/build/bitbucket-client/models/RestInsightReport.js.map +1 -0
  584. package/build/bitbucket-client/models/RestInsightReportData.d.ts +2 -0
  585. package/build/bitbucket-client/models/RestInsightReportData.d.ts.map +1 -0
  586. package/build/bitbucket-client/models/RestInsightReportData.js +2 -0
  587. package/build/bitbucket-client/models/RestInsightReportData.js.map +1 -0
  588. package/build/bitbucket-client/models/RestInvocationHistory.d.ts +2 -0
  589. package/build/bitbucket-client/models/RestInvocationHistory.d.ts.map +1 -0
  590. package/build/bitbucket-client/models/RestInvocationHistory.js +2 -0
  591. package/build/bitbucket-client/models/RestInvocationHistory.js.map +1 -0
  592. package/build/bitbucket-client/models/RestInvocationRequest.d.ts +2 -0
  593. package/build/bitbucket-client/models/RestInvocationRequest.d.ts.map +1 -0
  594. package/build/bitbucket-client/models/RestInvocationRequest.js +2 -0
  595. package/build/bitbucket-client/models/RestInvocationRequest.js.map +1 -0
  596. package/build/bitbucket-client/models/RestInvocationResult.d.ts +2 -0
  597. package/build/bitbucket-client/models/RestInvocationResult.d.ts.map +1 -0
  598. package/build/bitbucket-client/models/RestInvocationResult.js +2 -0
  599. package/build/bitbucket-client/models/RestInvocationResult.js.map +1 -0
  600. package/build/bitbucket-client/models/RestJiraIssue.d.ts +5 -0
  601. package/build/bitbucket-client/models/RestJiraIssue.d.ts.map +1 -0
  602. package/build/bitbucket-client/models/RestJiraIssue.js +2 -0
  603. package/build/bitbucket-client/models/RestJiraIssue.js.map +1 -0
  604. package/build/bitbucket-client/models/RestJob.d.ts +2 -0
  605. package/build/bitbucket-client/models/RestJob.d.ts.map +1 -0
  606. package/build/bitbucket-client/models/RestJob.js +2 -0
  607. package/build/bitbucket-client/models/RestJob.js.map +1 -0
  608. package/build/bitbucket-client/models/RestJobMessage.d.ts +2 -0
  609. package/build/bitbucket-client/models/RestJobMessage.d.ts.map +1 -0
  610. package/build/bitbucket-client/models/RestJobMessage.js +2 -0
  611. package/build/bitbucket-client/models/RestJobMessage.js.map +1 -0
  612. package/build/bitbucket-client/models/RestLabel.d.ts +2 -0
  613. package/build/bitbucket-client/models/RestLabel.d.ts.map +1 -0
  614. package/build/bitbucket-client/models/RestLabel.js +2 -0
  615. package/build/bitbucket-client/models/RestLabel.js.map +1 -0
  616. package/build/bitbucket-client/models/RestLabelable.d.ts +2 -0
  617. package/build/bitbucket-client/models/RestLabelable.d.ts.map +1 -0
  618. package/build/bitbucket-client/models/RestLabelable.js +2 -0
  619. package/build/bitbucket-client/models/RestLabelable.js.map +1 -0
  620. package/build/bitbucket-client/models/RestLogLevel.d.ts +2 -0
  621. package/build/bitbucket-client/models/RestLogLevel.d.ts.map +1 -0
  622. package/build/bitbucket-client/models/RestLogLevel.js +2 -0
  623. package/build/bitbucket-client/models/RestLogLevel.js.map +1 -0
  624. package/build/bitbucket-client/models/RestLoggingSettings.d.ts +2 -0
  625. package/build/bitbucket-client/models/RestLoggingSettings.d.ts.map +1 -0
  626. package/build/bitbucket-client/models/RestLoggingSettings.js +2 -0
  627. package/build/bitbucket-client/models/RestLoggingSettings.js.map +1 -0
  628. package/build/bitbucket-client/models/RestMailConfiguration.d.ts +2 -0
  629. package/build/bitbucket-client/models/RestMailConfiguration.d.ts.map +1 -0
  630. package/build/bitbucket-client/models/RestMailConfiguration.js +2 -0
  631. package/build/bitbucket-client/models/RestMailConfiguration.js.map +1 -0
  632. package/build/bitbucket-client/models/RestMarkup.d.ts +2 -0
  633. package/build/bitbucket-client/models/RestMarkup.d.ts.map +1 -0
  634. package/build/bitbucket-client/models/RestMarkup.js +2 -0
  635. package/build/bitbucket-client/models/RestMarkup.js.map +1 -0
  636. package/build/bitbucket-client/models/RestMeshConnectivityReport.d.ts +2 -0
  637. package/build/bitbucket-client/models/RestMeshConnectivityReport.d.ts.map +1 -0
  638. package/build/bitbucket-client/models/RestMeshConnectivityReport.js +2 -0
  639. package/build/bitbucket-client/models/RestMeshConnectivityReport.js.map +1 -0
  640. package/build/bitbucket-client/models/RestMeshMigrationQueueStateCounts.d.ts +2 -0
  641. package/build/bitbucket-client/models/RestMeshMigrationQueueStateCounts.d.ts.map +1 -0
  642. package/build/bitbucket-client/models/RestMeshMigrationQueueStateCounts.js +2 -0
  643. package/build/bitbucket-client/models/RestMeshMigrationQueueStateCounts.js.map +1 -0
  644. package/build/bitbucket-client/models/RestMeshMigrationRequest.d.ts +10 -0
  645. package/build/bitbucket-client/models/RestMeshMigrationRequest.d.ts.map +1 -0
  646. package/build/bitbucket-client/models/RestMeshMigrationRequest.js +2 -0
  647. package/build/bitbucket-client/models/RestMeshMigrationRequest.js.map +1 -0
  648. package/build/bitbucket-client/models/RestMeshMigrationSummary.d.ts +2 -0
  649. package/build/bitbucket-client/models/RestMeshMigrationSummary.d.ts.map +1 -0
  650. package/build/bitbucket-client/models/RestMeshMigrationSummary.js +2 -0
  651. package/build/bitbucket-client/models/RestMeshMigrationSummary.js.map +1 -0
  652. package/build/bitbucket-client/models/RestMeshNode.d.ts +2 -0
  653. package/build/bitbucket-client/models/RestMeshNode.d.ts.map +1 -0
  654. package/build/bitbucket-client/models/RestMeshNode.js +2 -0
  655. package/build/bitbucket-client/models/RestMeshNode.js.map +1 -0
  656. package/build/bitbucket-client/models/RestMigrationRepository.d.ts +2 -0
  657. package/build/bitbucket-client/models/RestMigrationRepository.d.ts.map +1 -0
  658. package/build/bitbucket-client/models/RestMigrationRepository.js +2 -0
  659. package/build/bitbucket-client/models/RestMigrationRepository.js.map +1 -0
  660. package/build/bitbucket-client/models/RestMinimalCommit.d.ts +2 -0
  661. package/build/bitbucket-client/models/RestMinimalCommit.d.ts.map +1 -0
  662. package/build/bitbucket-client/models/RestMinimalCommit.js +2 -0
  663. package/build/bitbucket-client/models/RestMinimalCommit.js.map +1 -0
  664. package/build/bitbucket-client/models/RestMinimalRef.d.ts +2 -0
  665. package/build/bitbucket-client/models/RestMinimalRef.d.ts.map +1 -0
  666. package/build/bitbucket-client/models/RestMinimalRef.js +2 -0
  667. package/build/bitbucket-client/models/RestMinimalRef.js.map +1 -0
  668. package/build/bitbucket-client/models/RestMirrorHashes.d.ts +2 -0
  669. package/build/bitbucket-client/models/RestMirrorHashes.d.ts.map +1 -0
  670. package/build/bitbucket-client/models/RestMirrorHashes.js +2 -0
  671. package/build/bitbucket-client/models/RestMirrorHashes.js.map +1 -0
  672. package/build/bitbucket-client/models/RestMirrorRepositorySynchronizationStatus.d.ts +2 -0
  673. package/build/bitbucket-client/models/RestMirrorRepositorySynchronizationStatus.d.ts.map +1 -0
  674. package/build/bitbucket-client/models/RestMirrorRepositorySynchronizationStatus.js +2 -0
  675. package/build/bitbucket-client/models/RestMirrorRepositorySynchronizationStatus.js.map +1 -0
  676. package/build/bitbucket-client/models/RestMirrorServer.d.ts +2 -0
  677. package/build/bitbucket-client/models/RestMirrorServer.d.ts.map +1 -0
  678. package/build/bitbucket-client/models/RestMirrorServer.js +2 -0
  679. package/build/bitbucket-client/models/RestMirrorServer.js.map +1 -0
  680. package/build/bitbucket-client/models/RestMirrorUpgradeRequest.d.ts +5 -0
  681. package/build/bitbucket-client/models/RestMirrorUpgradeRequest.d.ts.map +1 -0
  682. package/build/bitbucket-client/models/RestMirrorUpgradeRequest.js +2 -0
  683. package/build/bitbucket-client/models/RestMirrorUpgradeRequest.js.map +1 -0
  684. package/build/bitbucket-client/models/RestMirroredRepository.d.ts +2 -0
  685. package/build/bitbucket-client/models/RestMirroredRepository.d.ts.map +1 -0
  686. package/build/bitbucket-client/models/RestMirroredRepository.js +2 -0
  687. package/build/bitbucket-client/models/RestMirroredRepository.js.map +1 -0
  688. package/build/bitbucket-client/models/RestMirroredRepositoryDescriptor.d.ts +2 -0
  689. package/build/bitbucket-client/models/RestMirroredRepositoryDescriptor.d.ts.map +1 -0
  690. package/build/bitbucket-client/models/RestMirroredRepositoryDescriptor.js +2 -0
  691. package/build/bitbucket-client/models/RestMirroredRepositoryDescriptor.js.map +1 -0
  692. package/build/bitbucket-client/models/RestMirroringRequest.d.ts +2 -0
  693. package/build/bitbucket-client/models/RestMirroringRequest.d.ts.map +1 -0
  694. package/build/bitbucket-client/models/RestMirroringRequest.js +2 -0
  695. package/build/bitbucket-client/models/RestMirroringRequest.js.map +1 -0
  696. package/build/bitbucket-client/models/RestMultilineCommentMarker.d.ts +2 -0
  697. package/build/bitbucket-client/models/RestMultilineCommentMarker.d.ts.map +1 -0
  698. package/build/bitbucket-client/models/RestMultilineCommentMarker.js +2 -0
  699. package/build/bitbucket-client/models/RestMultilineCommentMarker.js.map +1 -0
  700. package/build/bitbucket-client/models/RestMultilineCommentSpan.d.ts +2 -0
  701. package/build/bitbucket-client/models/RestMultilineCommentSpan.d.ts.map +1 -0
  702. package/build/bitbucket-client/models/RestMultilineCommentSpan.js +2 -0
  703. package/build/bitbucket-client/models/RestMultilineCommentSpan.js.map +1 -0
  704. package/build/bitbucket-client/models/RestMultipleBuildStats.d.ts +2 -0
  705. package/build/bitbucket-client/models/RestMultipleBuildStats.d.ts.map +1 -0
  706. package/build/bitbucket-client/models/RestMultipleBuildStats.js +2 -0
  707. package/build/bitbucket-client/models/RestMultipleBuildStats.js.map +1 -0
  708. package/build/bitbucket-client/models/RestNamedLink.d.ts +2 -0
  709. package/build/bitbucket-client/models/RestNamedLink.d.ts.map +1 -0
  710. package/build/bitbucket-client/models/RestNamedLink.js +2 -0
  711. package/build/bitbucket-client/models/RestNamedLink.js.map +1 -0
  712. package/build/bitbucket-client/models/RestNode.d.ts +2 -0
  713. package/build/bitbucket-client/models/RestNode.d.ts.map +1 -0
  714. package/build/bitbucket-client/models/RestNode.js +2 -0
  715. package/build/bitbucket-client/models/RestNode.js.map +1 -0
  716. package/build/bitbucket-client/models/RestNodeConnectivityReport.d.ts +2 -0
  717. package/build/bitbucket-client/models/RestNodeConnectivityReport.d.ts.map +1 -0
  718. package/build/bitbucket-client/models/RestNodeConnectivityReport.js +2 -0
  719. package/build/bitbucket-client/models/RestNodeConnectivityReport.js.map +1 -0
  720. package/build/bitbucket-client/models/RestNodeConnectivitySummary.d.ts +2 -0
  721. package/build/bitbucket-client/models/RestNodeConnectivitySummary.d.ts.map +1 -0
  722. package/build/bitbucket-client/models/RestNodeConnectivitySummary.js +2 -0
  723. package/build/bitbucket-client/models/RestNodeConnectivitySummary.js.map +1 -0
  724. package/build/bitbucket-client/models/RestPageIdpConfigEntity.d.ts +9 -0
  725. package/build/bitbucket-client/models/RestPageIdpConfigEntity.d.ts.map +1 -0
  726. package/build/bitbucket-client/models/RestPageIdpConfigEntity.js +2 -0
  727. package/build/bitbucket-client/models/RestPageIdpConfigEntity.js.map +1 -0
  728. package/build/bitbucket-client/models/RestPageLoginOptionEntity.d.ts +9 -0
  729. package/build/bitbucket-client/models/RestPageLoginOptionEntity.d.ts.map +1 -0
  730. package/build/bitbucket-client/models/RestPageLoginOptionEntity.js +2 -0
  731. package/build/bitbucket-client/models/RestPageLoginOptionEntity.js.map +1 -0
  732. package/build/bitbucket-client/models/RestPageRestChange.d.ts +2 -0
  733. package/build/bitbucket-client/models/RestPageRestChange.d.ts.map +1 -0
  734. package/build/bitbucket-client/models/RestPageRestChange.js +2 -0
  735. package/build/bitbucket-client/models/RestPageRestChange.js.map +1 -0
  736. package/build/bitbucket-client/models/RestPath.d.ts +2 -0
  737. package/build/bitbucket-client/models/RestPath.d.ts.map +1 -0
  738. package/build/bitbucket-client/models/RestPath.js +2 -0
  739. package/build/bitbucket-client/models/RestPath.js.map +1 -0
  740. package/build/bitbucket-client/models/RestPermitted.d.ts +2 -0
  741. package/build/bitbucket-client/models/RestPermitted.d.ts.map +1 -0
  742. package/build/bitbucket-client/models/RestPermitted.js +2 -0
  743. package/build/bitbucket-client/models/RestPermitted.js.map +1 -0
  744. package/build/bitbucket-client/models/RestPermittedGroup.d.ts +2 -0
  745. package/build/bitbucket-client/models/RestPermittedGroup.d.ts.map +1 -0
  746. package/build/bitbucket-client/models/RestPermittedGroup.js +2 -0
  747. package/build/bitbucket-client/models/RestPermittedGroup.js.map +1 -0
  748. package/build/bitbucket-client/models/RestPermittedUser.d.ts +2 -0
  749. package/build/bitbucket-client/models/RestPermittedUser.d.ts.map +1 -0
  750. package/build/bitbucket-client/models/RestPermittedUser.js +2 -0
  751. package/build/bitbucket-client/models/RestPermittedUser.js.map +1 -0
  752. package/build/bitbucket-client/models/RestPerson.d.ts +2 -0
  753. package/build/bitbucket-client/models/RestPerson.d.ts.map +1 -0
  754. package/build/bitbucket-client/models/RestPerson.js +2 -0
  755. package/build/bitbucket-client/models/RestPerson.js.map +1 -0
  756. package/build/bitbucket-client/models/RestProgress.d.ts +2 -0
  757. package/build/bitbucket-client/models/RestProgress.d.ts.map +1 -0
  758. package/build/bitbucket-client/models/RestProgress.js +2 -0
  759. package/build/bitbucket-client/models/RestProgress.js.map +1 -0
  760. package/build/bitbucket-client/models/RestProject.d.ts +2 -0
  761. package/build/bitbucket-client/models/RestProject.d.ts.map +1 -0
  762. package/build/bitbucket-client/models/RestProject.js +2 -0
  763. package/build/bitbucket-client/models/RestProject.js.map +1 -0
  764. package/build/bitbucket-client/models/RestProjectSettingsRestriction.d.ts +2 -0
  765. package/build/bitbucket-client/models/RestProjectSettingsRestriction.d.ts.map +1 -0
  766. package/build/bitbucket-client/models/RestProjectSettingsRestriction.js +2 -0
  767. package/build/bitbucket-client/models/RestProjectSettingsRestriction.js.map +1 -0
  768. package/build/bitbucket-client/models/RestProjectSettingsRestrictionRequest.d.ts +6 -0
  769. package/build/bitbucket-client/models/RestProjectSettingsRestrictionRequest.d.ts.map +1 -0
  770. package/build/bitbucket-client/models/RestProjectSettingsRestrictionRequest.js +2 -0
  771. package/build/bitbucket-client/models/RestProjectSettingsRestrictionRequest.js.map +1 -0
  772. package/build/bitbucket-client/models/RestProperties.d.ts +2 -0
  773. package/build/bitbucket-client/models/RestProperties.d.ts.map +1 -0
  774. package/build/bitbucket-client/models/RestProperties.js +2 -0
  775. package/build/bitbucket-client/models/RestProperties.js.map +1 -0
  776. package/build/bitbucket-client/models/RestPullRequest.d.ts +2 -0
  777. package/build/bitbucket-client/models/RestPullRequest.d.ts.map +1 -0
  778. package/build/bitbucket-client/models/RestPullRequest.js +2 -0
  779. package/build/bitbucket-client/models/RestPullRequest.js.map +1 -0
  780. package/build/bitbucket-client/models/RestPullRequestActivity.d.ts +2 -0
  781. package/build/bitbucket-client/models/RestPullRequestActivity.d.ts.map +1 -0
  782. package/build/bitbucket-client/models/RestPullRequestActivity.js +2 -0
  783. package/build/bitbucket-client/models/RestPullRequestActivity.js.map +1 -0
  784. package/build/bitbucket-client/models/RestPullRequestAssignParticipantRoleRequest.d.ts +26 -0
  785. package/build/bitbucket-client/models/RestPullRequestAssignParticipantRoleRequest.d.ts.map +1 -0
  786. package/build/bitbucket-client/models/RestPullRequestAssignParticipantRoleRequest.js +15 -0
  787. package/build/bitbucket-client/models/RestPullRequestAssignParticipantRoleRequest.js.map +1 -0
  788. package/build/bitbucket-client/models/RestPullRequestAssignStatusRequest.d.ts +12 -0
  789. package/build/bitbucket-client/models/RestPullRequestAssignStatusRequest.d.ts.map +1 -0
  790. package/build/bitbucket-client/models/RestPullRequestAssignStatusRequest.js +10 -0
  791. package/build/bitbucket-client/models/RestPullRequestAssignStatusRequest.js.map +1 -0
  792. package/build/bitbucket-client/models/RestPullRequestCommitMessageTemplate.d.ts +2 -0
  793. package/build/bitbucket-client/models/RestPullRequestCommitMessageTemplate.d.ts.map +1 -0
  794. package/build/bitbucket-client/models/RestPullRequestCommitMessageTemplate.js +2 -0
  795. package/build/bitbucket-client/models/RestPullRequestCommitMessageTemplate.js.map +1 -0
  796. package/build/bitbucket-client/models/RestPullRequestCondition.d.ts +2 -0
  797. package/build/bitbucket-client/models/RestPullRequestCondition.d.ts.map +1 -0
  798. package/build/bitbucket-client/models/RestPullRequestCondition.js +2 -0
  799. package/build/bitbucket-client/models/RestPullRequestCondition.js.map +1 -0
  800. package/build/bitbucket-client/models/RestPullRequestDeclineRequest.d.ts +5 -0
  801. package/build/bitbucket-client/models/RestPullRequestDeclineRequest.d.ts.map +1 -0
  802. package/build/bitbucket-client/models/RestPullRequestDeclineRequest.js +2 -0
  803. package/build/bitbucket-client/models/RestPullRequestDeclineRequest.js.map +1 -0
  804. package/build/bitbucket-client/models/RestPullRequestDeleteRequest.d.ts +4 -0
  805. package/build/bitbucket-client/models/RestPullRequestDeleteRequest.d.ts.map +1 -0
  806. package/build/bitbucket-client/models/RestPullRequestDeleteRequest.js +2 -0
  807. package/build/bitbucket-client/models/RestPullRequestDeleteRequest.js.map +1 -0
  808. package/build/bitbucket-client/models/RestPullRequestFinishReviewRequest.d.ts +6 -0
  809. package/build/bitbucket-client/models/RestPullRequestFinishReviewRequest.d.ts.map +1 -0
  810. package/build/bitbucket-client/models/RestPullRequestFinishReviewRequest.js +2 -0
  811. package/build/bitbucket-client/models/RestPullRequestFinishReviewRequest.js.map +1 -0
  812. package/build/bitbucket-client/models/RestPullRequestMergeConfig.d.ts +2 -0
  813. package/build/bitbucket-client/models/RestPullRequestMergeConfig.d.ts.map +1 -0
  814. package/build/bitbucket-client/models/RestPullRequestMergeConfig.js +2 -0
  815. package/build/bitbucket-client/models/RestPullRequestMergeConfig.js.map +1 -0
  816. package/build/bitbucket-client/models/RestPullRequestMergeRequest.d.ts +8 -0
  817. package/build/bitbucket-client/models/RestPullRequestMergeRequest.d.ts.map +1 -0
  818. package/build/bitbucket-client/models/RestPullRequestMergeRequest.js +2 -0
  819. package/build/bitbucket-client/models/RestPullRequestMergeRequest.js.map +1 -0
  820. package/build/bitbucket-client/models/RestPullRequestMergeStrategy.d.ts +2 -0
  821. package/build/bitbucket-client/models/RestPullRequestMergeStrategy.d.ts.map +1 -0
  822. package/build/bitbucket-client/models/RestPullRequestMergeStrategy.js +2 -0
  823. package/build/bitbucket-client/models/RestPullRequestMergeStrategy.js.map +1 -0
  824. package/build/bitbucket-client/models/RestPullRequestMergeability.d.ts +2 -0
  825. package/build/bitbucket-client/models/RestPullRequestMergeability.d.ts.map +1 -0
  826. package/build/bitbucket-client/models/RestPullRequestMergeability.js +2 -0
  827. package/build/bitbucket-client/models/RestPullRequestMergeability.js.map +1 -0
  828. package/build/bitbucket-client/models/RestPullRequestParticipant.d.ts +2 -0
  829. package/build/bitbucket-client/models/RestPullRequestParticipant.d.ts.map +1 -0
  830. package/build/bitbucket-client/models/RestPullRequestParticipant.js +2 -0
  831. package/build/bitbucket-client/models/RestPullRequestParticipant.js.map +1 -0
  832. package/build/bitbucket-client/models/RestPullRequestRebaseRequest.d.ts +4 -0
  833. package/build/bitbucket-client/models/RestPullRequestRebaseRequest.d.ts.map +1 -0
  834. package/build/bitbucket-client/models/RestPullRequestRebaseRequest.js +2 -0
  835. package/build/bitbucket-client/models/RestPullRequestRebaseRequest.js.map +1 -0
  836. package/build/bitbucket-client/models/RestPullRequestRebaseResult.d.ts +2 -0
  837. package/build/bitbucket-client/models/RestPullRequestRebaseResult.d.ts.map +1 -0
  838. package/build/bitbucket-client/models/RestPullRequestRebaseResult.js +2 -0
  839. package/build/bitbucket-client/models/RestPullRequestRebaseResult.js.map +1 -0
  840. package/build/bitbucket-client/models/RestPullRequestRebaseability.d.ts +2 -0
  841. package/build/bitbucket-client/models/RestPullRequestRebaseability.d.ts.map +1 -0
  842. package/build/bitbucket-client/models/RestPullRequestRebaseability.js +2 -0
  843. package/build/bitbucket-client/models/RestPullRequestRebaseability.js.map +1 -0
  844. package/build/bitbucket-client/models/RestPullRequestRef.d.ts +2 -0
  845. package/build/bitbucket-client/models/RestPullRequestRef.d.ts.map +1 -0
  846. package/build/bitbucket-client/models/RestPullRequestRef.js +2 -0
  847. package/build/bitbucket-client/models/RestPullRequestRef.js.map +1 -0
  848. package/build/bitbucket-client/models/RestPullRequestReopenRequest.d.ts +4 -0
  849. package/build/bitbucket-client/models/RestPullRequestReopenRequest.d.ts.map +1 -0
  850. package/build/bitbucket-client/models/RestPullRequestReopenRequest.js +2 -0
  851. package/build/bitbucket-client/models/RestPullRequestReopenRequest.js.map +1 -0
  852. package/build/bitbucket-client/models/RestPullRequestSettings.d.ts +2 -0
  853. package/build/bitbucket-client/models/RestPullRequestSettings.d.ts.map +1 -0
  854. package/build/bitbucket-client/models/RestPullRequestSettings.js +2 -0
  855. package/build/bitbucket-client/models/RestPullRequestSettings.js.map +1 -0
  856. package/build/bitbucket-client/models/RestPullRequestSuggestion.d.ts +2 -0
  857. package/build/bitbucket-client/models/RestPullRequestSuggestion.d.ts.map +1 -0
  858. package/build/bitbucket-client/models/RestPullRequestSuggestion.js +2 -0
  859. package/build/bitbucket-client/models/RestPullRequestSuggestion.js.map +1 -0
  860. package/build/bitbucket-client/models/RestPushRefChange.d.ts +2 -0
  861. package/build/bitbucket-client/models/RestPushRefChange.d.ts.map +1 -0
  862. package/build/bitbucket-client/models/RestPushRefChange.js +2 -0
  863. package/build/bitbucket-client/models/RestPushRefChange.js.map +1 -0
  864. package/build/bitbucket-client/models/RestRateLimitSettings.d.ts +2 -0
  865. package/build/bitbucket-client/models/RestRateLimitSettings.d.ts.map +1 -0
  866. package/build/bitbucket-client/models/RestRateLimitSettings.js +2 -0
  867. package/build/bitbucket-client/models/RestRateLimitSettings.js.map +1 -0
  868. package/build/bitbucket-client/models/RestRawAccessToken.d.ts +2 -0
  869. package/build/bitbucket-client/models/RestRawAccessToken.d.ts.map +1 -0
  870. package/build/bitbucket-client/models/RestRawAccessToken.js +2 -0
  871. package/build/bitbucket-client/models/RestRawAccessToken.js.map +1 -0
  872. package/build/bitbucket-client/models/RestRefChange.d.ts +2 -0
  873. package/build/bitbucket-client/models/RestRefChange.d.ts.map +1 -0
  874. package/build/bitbucket-client/models/RestRefChange.js +2 -0
  875. package/build/bitbucket-client/models/RestRefChange.js.map +1 -0
  876. package/build/bitbucket-client/models/RestRefMatcher.d.ts +2 -0
  877. package/build/bitbucket-client/models/RestRefMatcher.d.ts.map +1 -0
  878. package/build/bitbucket-client/models/RestRefMatcher.js +2 -0
  879. package/build/bitbucket-client/models/RestRefMatcher.js.map +1 -0
  880. package/build/bitbucket-client/models/RestRefMatcherType.d.ts +2 -0
  881. package/build/bitbucket-client/models/RestRefMatcherType.d.ts.map +1 -0
  882. package/build/bitbucket-client/models/RestRefMatcherType.js +2 -0
  883. package/build/bitbucket-client/models/RestRefMatcherType.js.map +1 -0
  884. package/build/bitbucket-client/models/RestRefRestriction.d.ts +2 -0
  885. package/build/bitbucket-client/models/RestRefRestriction.d.ts.map +1 -0
  886. package/build/bitbucket-client/models/RestRefRestriction.js +2 -0
  887. package/build/bitbucket-client/models/RestRefRestriction.js.map +1 -0
  888. package/build/bitbucket-client/models/RestRefSyncQueue.d.ts +5 -0
  889. package/build/bitbucket-client/models/RestRefSyncQueue.d.ts.map +1 -0
  890. package/build/bitbucket-client/models/RestRefSyncQueue.js +2 -0
  891. package/build/bitbucket-client/models/RestRefSyncQueue.js.map +1 -0
  892. package/build/bitbucket-client/models/RestRefSyncRequest.d.ts +14 -0
  893. package/build/bitbucket-client/models/RestRefSyncRequest.d.ts.map +1 -0
  894. package/build/bitbucket-client/models/RestRefSyncRequest.js +10 -0
  895. package/build/bitbucket-client/models/RestRefSyncRequest.js.map +1 -0
  896. package/build/bitbucket-client/models/RestRefSyncStatus.d.ts +2 -0
  897. package/build/bitbucket-client/models/RestRefSyncStatus.d.ts.map +1 -0
  898. package/build/bitbucket-client/models/RestRefSyncStatus.js +2 -0
  899. package/build/bitbucket-client/models/RestRefSyncStatus.js.map +1 -0
  900. package/build/bitbucket-client/models/RestRejectedRef.d.ts +2 -0
  901. package/build/bitbucket-client/models/RestRejectedRef.d.ts.map +1 -0
  902. package/build/bitbucket-client/models/RestRejectedRef.js +2 -0
  903. package/build/bitbucket-client/models/RestRejectedRef.js.map +1 -0
  904. package/build/bitbucket-client/models/RestRelatedLinks.d.ts +2 -0
  905. package/build/bitbucket-client/models/RestRelatedLinks.d.ts.map +1 -0
  906. package/build/bitbucket-client/models/RestRelatedLinks.js +2 -0
  907. package/build/bitbucket-client/models/RestRelatedLinks.js.map +1 -0
  908. package/build/bitbucket-client/models/RestRepositoriesExportRequest.d.ts +5 -0
  909. package/build/bitbucket-client/models/RestRepositoriesExportRequest.d.ts.map +1 -0
  910. package/build/bitbucket-client/models/RestRepositoriesExportRequest.js +2 -0
  911. package/build/bitbucket-client/models/RestRepositoriesExportRequest.js.map +1 -0
  912. package/build/bitbucket-client/models/RestRepository.d.ts +2 -0
  913. package/build/bitbucket-client/models/RestRepository.d.ts.map +1 -0
  914. package/build/bitbucket-client/models/RestRepository.js +2 -0
  915. package/build/bitbucket-client/models/RestRepository.js.map +1 -0
  916. package/build/bitbucket-client/models/RestRepositoryHook.d.ts +2 -0
  917. package/build/bitbucket-client/models/RestRepositoryHook.d.ts.map +1 -0
  918. package/build/bitbucket-client/models/RestRepositoryHook.js +2 -0
  919. package/build/bitbucket-client/models/RestRepositoryHook.js.map +1 -0
  920. package/build/bitbucket-client/models/RestRepositoryHookVeto.d.ts +2 -0
  921. package/build/bitbucket-client/models/RestRepositoryHookVeto.d.ts.map +1 -0
  922. package/build/bitbucket-client/models/RestRepositoryHookVeto.js +2 -0
  923. package/build/bitbucket-client/models/RestRepositoryHookVeto.js.map +1 -0
  924. package/build/bitbucket-client/models/RestRepositoryLockOwner.d.ts +2 -0
  925. package/build/bitbucket-client/models/RestRepositoryLockOwner.d.ts.map +1 -0
  926. package/build/bitbucket-client/models/RestRepositoryLockOwner.js +2 -0
  927. package/build/bitbucket-client/models/RestRepositoryLockOwner.js.map +1 -0
  928. package/build/bitbucket-client/models/RestRepositoryMirrorEvent.d.ts +12 -0
  929. package/build/bitbucket-client/models/RestRepositoryMirrorEvent.d.ts.map +1 -0
  930. package/build/bitbucket-client/models/RestRepositoryMirrorEvent.js +9 -0
  931. package/build/bitbucket-client/models/RestRepositoryMirrorEvent.js.map +1 -0
  932. package/build/bitbucket-client/models/RestRepositoryPolicy.d.ts +2 -0
  933. package/build/bitbucket-client/models/RestRepositoryPolicy.d.ts.map +1 -0
  934. package/build/bitbucket-client/models/RestRepositoryPolicy.js +2 -0
  935. package/build/bitbucket-client/models/RestRepositoryPolicy.js.map +1 -0
  936. package/build/bitbucket-client/models/RestRepositoryPullRequestSettings.d.ts +2 -0
  937. package/build/bitbucket-client/models/RestRepositoryPullRequestSettings.d.ts.map +1 -0
  938. package/build/bitbucket-client/models/RestRepositoryPullRequestSettings.js +2 -0
  939. package/build/bitbucket-client/models/RestRepositoryPullRequestSettings.js.map +1 -0
  940. package/build/bitbucket-client/models/RestRepositoryRefChangeActivity.d.ts +2 -0
  941. package/build/bitbucket-client/models/RestRepositoryRefChangeActivity.d.ts.map +1 -0
  942. package/build/bitbucket-client/models/RestRepositoryRefChangeActivity.js +2 -0
  943. package/build/bitbucket-client/models/RestRepositoryRefChangeActivity.js.map +1 -0
  944. package/build/bitbucket-client/models/RestRepositorySelector.d.ts +5 -0
  945. package/build/bitbucket-client/models/RestRepositorySelector.d.ts.map +1 -0
  946. package/build/bitbucket-client/models/RestRepositorySelector.js +2 -0
  947. package/build/bitbucket-client/models/RestRepositorySelector.js.map +1 -0
  948. package/build/bitbucket-client/models/RestRequiredBuildCondition.d.ts +2 -0
  949. package/build/bitbucket-client/models/RestRequiredBuildCondition.d.ts.map +1 -0
  950. package/build/bitbucket-client/models/RestRequiredBuildCondition.js +2 -0
  951. package/build/bitbucket-client/models/RestRequiredBuildCondition.js.map +1 -0
  952. package/build/bitbucket-client/models/RestRequiredBuildConditionSetRequest.d.ts +26 -0
  953. package/build/bitbucket-client/models/RestRequiredBuildConditionSetRequest.d.ts.map +1 -0
  954. package/build/bitbucket-client/models/RestRequiredBuildConditionSetRequest.js +12 -0
  955. package/build/bitbucket-client/models/RestRequiredBuildConditionSetRequest.js.map +1 -0
  956. package/build/bitbucket-client/models/RestRestrictionRequest.d.ts +39 -0
  957. package/build/bitbucket-client/models/RestRestrictionRequest.d.ts.map +1 -0
  958. package/build/bitbucket-client/models/RestRestrictionRequest.js +18 -0
  959. package/build/bitbucket-client/models/RestRestrictionRequest.js.map +1 -0
  960. package/build/bitbucket-client/models/RestReviewerGroup.d.ts +2 -0
  961. package/build/bitbucket-client/models/RestReviewerGroup.d.ts.map +1 -0
  962. package/build/bitbucket-client/models/RestReviewerGroup.js +2 -0
  963. package/build/bitbucket-client/models/RestReviewerGroup.js.map +1 -0
  964. package/build/bitbucket-client/models/RestRollingUpgradeState.d.ts +2 -0
  965. package/build/bitbucket-client/models/RestRollingUpgradeState.d.ts.map +1 -0
  966. package/build/bitbucket-client/models/RestRollingUpgradeState.js +2 -0
  967. package/build/bitbucket-client/models/RestRollingUpgradeState.js.map +1 -0
  968. package/build/bitbucket-client/models/RestScope.d.ts +2 -0
  969. package/build/bitbucket-client/models/RestScope.d.ts.map +1 -0
  970. package/build/bitbucket-client/models/RestScope.js +2 -0
  971. package/build/bitbucket-client/models/RestScope.js.map +1 -0
  972. package/build/bitbucket-client/models/RestScopesExample.d.ts +2 -0
  973. package/build/bitbucket-client/models/RestScopesExample.d.ts.map +1 -0
  974. package/build/bitbucket-client/models/RestScopesExample.js +2 -0
  975. package/build/bitbucket-client/models/RestScopesExample.js.map +1 -0
  976. package/build/bitbucket-client/models/RestSecretScanningAllowlistRule.d.ts +2 -0
  977. package/build/bitbucket-client/models/RestSecretScanningAllowlistRule.d.ts.map +1 -0
  978. package/build/bitbucket-client/models/RestSecretScanningAllowlistRule.js +2 -0
  979. package/build/bitbucket-client/models/RestSecretScanningAllowlistRule.js.map +1 -0
  980. package/build/bitbucket-client/models/RestSecretScanningAllowlistRuleSetRequest.d.ts +15 -0
  981. package/build/bitbucket-client/models/RestSecretScanningAllowlistRuleSetRequest.d.ts.map +1 -0
  982. package/build/bitbucket-client/models/RestSecretScanningAllowlistRuleSetRequest.js +2 -0
  983. package/build/bitbucket-client/models/RestSecretScanningAllowlistRuleSetRequest.js.map +1 -0
  984. package/build/bitbucket-client/models/RestSecretScanningRule.d.ts +2 -0
  985. package/build/bitbucket-client/models/RestSecretScanningRule.d.ts.map +1 -0
  986. package/build/bitbucket-client/models/RestSecretScanningRule.js +2 -0
  987. package/build/bitbucket-client/models/RestSecretScanningRule.js.map +1 -0
  988. package/build/bitbucket-client/models/RestSecretScanningRuleSetRequest.d.ts +15 -0
  989. package/build/bitbucket-client/models/RestSecretScanningRuleSetRequest.d.ts.map +1 -0
  990. package/build/bitbucket-client/models/RestSecretScanningRuleSetRequest.js +2 -0
  991. package/build/bitbucket-client/models/RestSecretScanningRuleSetRequest.js.map +1 -0
  992. package/build/bitbucket-client/models/RestSetInsightReportRequest.d.ts +13 -0
  993. package/build/bitbucket-client/models/RestSetInsightReportRequest.d.ts.map +1 -0
  994. package/build/bitbucket-client/models/RestSetInsightReportRequest.js +2 -0
  995. package/build/bitbucket-client/models/RestSetInsightReportRequest.js.map +1 -0
  996. package/build/bitbucket-client/models/RestSingleAddInsightAnnotationRequest.d.ts +10 -0
  997. package/build/bitbucket-client/models/RestSingleAddInsightAnnotationRequest.d.ts.map +1 -0
  998. package/build/bitbucket-client/models/RestSingleAddInsightAnnotationRequest.js +2 -0
  999. package/build/bitbucket-client/models/RestSingleAddInsightAnnotationRequest.js.map +1 -0
  1000. package/build/bitbucket-client/models/RestSshAccessKey.d.ts +2 -0
  1001. package/build/bitbucket-client/models/RestSshAccessKey.d.ts.map +1 -0
  1002. package/build/bitbucket-client/models/RestSshAccessKey.js +2 -0
  1003. package/build/bitbucket-client/models/RestSshAccessKey.js.map +1 -0
  1004. package/build/bitbucket-client/models/RestSshAccessKeyLocations.d.ts +7 -0
  1005. package/build/bitbucket-client/models/RestSshAccessKeyLocations.d.ts.map +1 -0
  1006. package/build/bitbucket-client/models/RestSshAccessKeyLocations.js +2 -0
  1007. package/build/bitbucket-client/models/RestSshAccessKeyLocations.js.map +1 -0
  1008. package/build/bitbucket-client/models/RestSshCredentials.d.ts +12 -0
  1009. package/build/bitbucket-client/models/RestSshCredentials.d.ts.map +1 -0
  1010. package/build/bitbucket-client/models/RestSshCredentials.js +2 -0
  1011. package/build/bitbucket-client/models/RestSshCredentials.js.map +1 -0
  1012. package/build/bitbucket-client/models/RestSshKey.d.ts +2 -0
  1013. package/build/bitbucket-client/models/RestSshKey.d.ts.map +1 -0
  1014. package/build/bitbucket-client/models/RestSshKey.js +2 -0
  1015. package/build/bitbucket-client/models/RestSshKey.js.map +1 -0
  1016. package/build/bitbucket-client/models/RestSshKeySettings.d.ts +2 -0
  1017. package/build/bitbucket-client/models/RestSshKeySettings.d.ts.map +1 -0
  1018. package/build/bitbucket-client/models/RestSshKeySettings.js +2 -0
  1019. package/build/bitbucket-client/models/RestSshKeySettings.js.map +1 -0
  1020. package/build/bitbucket-client/models/RestSshKeyTypeRestriction.d.ts +2 -0
  1021. package/build/bitbucket-client/models/RestSshKeyTypeRestriction.d.ts.map +1 -0
  1022. package/build/bitbucket-client/models/RestSshKeyTypeRestriction.js +2 -0
  1023. package/build/bitbucket-client/models/RestSshKeyTypeRestriction.js.map +1 -0
  1024. package/build/bitbucket-client/models/RestSshSettings.d.ts +2 -0
  1025. package/build/bitbucket-client/models/RestSshSettings.d.ts.map +1 -0
  1026. package/build/bitbucket-client/models/RestSshSettings.js +2 -0
  1027. package/build/bitbucket-client/models/RestSshSettings.js.map +1 -0
  1028. package/build/bitbucket-client/models/RestSyncProgress.d.ts +2 -0
  1029. package/build/bitbucket-client/models/RestSyncProgress.d.ts.map +1 -0
  1030. package/build/bitbucket-client/models/RestSyncProgress.js +2 -0
  1031. package/build/bitbucket-client/models/RestSyncProgress.js.map +1 -0
  1032. package/build/bitbucket-client/models/RestSystemSigningConfiguration.d.ts +2 -0
  1033. package/build/bitbucket-client/models/RestSystemSigningConfiguration.d.ts.map +1 -0
  1034. package/build/bitbucket-client/models/RestSystemSigningConfiguration.js +2 -0
  1035. package/build/bitbucket-client/models/RestSystemSigningConfiguration.js.map +1 -0
  1036. package/build/bitbucket-client/models/RestTag.d.ts +2 -0
  1037. package/build/bitbucket-client/models/RestTag.d.ts.map +1 -0
  1038. package/build/bitbucket-client/models/RestTag.js +2 -0
  1039. package/build/bitbucket-client/models/RestTag.js.map +1 -0
  1040. package/build/bitbucket-client/models/RestTestResults.d.ts +2 -0
  1041. package/build/bitbucket-client/models/RestTestResults.d.ts.map +1 -0
  1042. package/build/bitbucket-client/models/RestTestResults.js +2 -0
  1043. package/build/bitbucket-client/models/RestTestResults.js.map +1 -0
  1044. package/build/bitbucket-client/models/RestTokenBucketSettings.d.ts +2 -0
  1045. package/build/bitbucket-client/models/RestTokenBucketSettings.d.ts.map +1 -0
  1046. package/build/bitbucket-client/models/RestTokenBucketSettings.js +2 -0
  1047. package/build/bitbucket-client/models/RestTokenBucketSettings.js.map +1 -0
  1048. package/build/bitbucket-client/models/RestUpstreamServer.d.ts +2 -0
  1049. package/build/bitbucket-client/models/RestUpstreamServer.d.ts.map +1 -0
  1050. package/build/bitbucket-client/models/RestUpstreamServer.js +2 -0
  1051. package/build/bitbucket-client/models/RestUpstreamServer.js.map +1 -0
  1052. package/build/bitbucket-client/models/RestUpstreamSettings.d.ts +2 -0
  1053. package/build/bitbucket-client/models/RestUpstreamSettings.d.ts.map +1 -0
  1054. package/build/bitbucket-client/models/RestUpstreamSettings.js +2 -0
  1055. package/build/bitbucket-client/models/RestUpstreamSettings.js.map +1 -0
  1056. package/build/bitbucket-client/models/RestUserDirectory.d.ts +2 -0
  1057. package/build/bitbucket-client/models/RestUserDirectory.d.ts.map +1 -0
  1058. package/build/bitbucket-client/models/RestUserDirectory.js +2 -0
  1059. package/build/bitbucket-client/models/RestUserDirectory.js.map +1 -0
  1060. package/build/bitbucket-client/models/RestUserRateLimitSettings.d.ts +2 -0
  1061. package/build/bitbucket-client/models/RestUserRateLimitSettings.d.ts.map +1 -0
  1062. package/build/bitbucket-client/models/RestUserRateLimitSettings.js +2 -0
  1063. package/build/bitbucket-client/models/RestUserRateLimitSettings.js.map +1 -0
  1064. package/build/bitbucket-client/models/RestUserRateLimitSettingsUpdateRequest.d.ts +8 -0
  1065. package/build/bitbucket-client/models/RestUserRateLimitSettingsUpdateRequest.d.ts.map +1 -0
  1066. package/build/bitbucket-client/models/RestUserRateLimitSettingsUpdateRequest.js +2 -0
  1067. package/build/bitbucket-client/models/RestUserRateLimitSettingsUpdateRequest.js.map +1 -0
  1068. package/build/bitbucket-client/models/RestUserReaction.d.ts +2 -0
  1069. package/build/bitbucket-client/models/RestUserReaction.d.ts.map +1 -0
  1070. package/build/bitbucket-client/models/RestUserReaction.js +2 -0
  1071. package/build/bitbucket-client/models/RestUserReaction.js.map +1 -0
  1072. package/build/bitbucket-client/models/RestUsernamePasswordCredentials.d.ts +5 -0
  1073. package/build/bitbucket-client/models/RestUsernamePasswordCredentials.d.ts.map +1 -0
  1074. package/build/bitbucket-client/models/RestUsernamePasswordCredentials.js +2 -0
  1075. package/build/bitbucket-client/models/RestUsernamePasswordCredentials.js.map +1 -0
  1076. package/build/bitbucket-client/models/RestWebhook.d.ts +2 -0
  1077. package/build/bitbucket-client/models/RestWebhook.d.ts.map +1 -0
  1078. package/build/bitbucket-client/models/RestWebhook.js +2 -0
  1079. package/build/bitbucket-client/models/RestWebhook.js.map +1 -0
  1080. package/build/bitbucket-client/models/RestWebhookCredentials.d.ts +2 -0
  1081. package/build/bitbucket-client/models/RestWebhookCredentials.d.ts.map +1 -0
  1082. package/build/bitbucket-client/models/RestWebhookCredentials.js +2 -0
  1083. package/build/bitbucket-client/models/RestWebhookCredentials.js.map +1 -0
  1084. package/build/bitbucket-client/models/RestWebhookRequestResponse.d.ts +2 -0
  1085. package/build/bitbucket-client/models/RestWebhookRequestResponse.d.ts.map +1 -0
  1086. package/build/bitbucket-client/models/RestWebhookRequestResponse.js +2 -0
  1087. package/build/bitbucket-client/models/RestWebhookRequestResponse.js.map +1 -0
  1088. package/build/bitbucket-client/models/RestWebhookScope.d.ts +2 -0
  1089. package/build/bitbucket-client/models/RestWebhookScope.d.ts.map +1 -0
  1090. package/build/bitbucket-client/models/RestWebhookScope.js +2 -0
  1091. package/build/bitbucket-client/models/RestWebhookScope.js.map +1 -0
  1092. package/build/bitbucket-client/models/RestX509Certificate.d.ts +2 -0
  1093. package/build/bitbucket-client/models/RestX509Certificate.d.ts.map +1 -0
  1094. package/build/bitbucket-client/models/RestX509Certificate.js +2 -0
  1095. package/build/bitbucket-client/models/RestX509Certificate.js.map +1 -0
  1096. package/build/bitbucket-client/models/Scope.d.ts +12 -0
  1097. package/build/bitbucket-client/models/Scope.d.ts.map +1 -0
  1098. package/build/bitbucket-client/models/Scope.js +10 -0
  1099. package/build/bitbucket-client/models/Scope.js.map +1 -0
  1100. package/build/bitbucket-client/models/SimpleSshKeyFingerprint.d.ts +2 -0
  1101. package/build/bitbucket-client/models/SimpleSshKeyFingerprint.d.ts.map +1 -0
  1102. package/build/bitbucket-client/models/SimpleSshKeyFingerprint.js +2 -0
  1103. package/build/bitbucket-client/models/SimpleSshKeyFingerprint.js.map +1 -0
  1104. package/build/bitbucket-client/models/SsoConfigEntity.d.ts +2 -0
  1105. package/build/bitbucket-client/models/SsoConfigEntity.d.ts.map +1 -0
  1106. package/build/bitbucket-client/models/SsoConfigEntity.js +2 -0
  1107. package/build/bitbucket-client/models/SsoConfigEntity.js.map +1 -0
  1108. package/build/bitbucket-client/models/SsoManagementStatusDTO.d.ts +2 -0
  1109. package/build/bitbucket-client/models/SsoManagementStatusDTO.d.ts.map +1 -0
  1110. package/build/bitbucket-client/models/SsoManagementStatusDTO.js +2 -0
  1111. package/build/bitbucket-client/models/SsoManagementStatusDTO.js.map +1 -0
  1112. package/build/bitbucket-client/models/StatusDTO.d.ts +2 -0
  1113. package/build/bitbucket-client/models/StatusDTO.d.ts.map +1 -0
  1114. package/build/bitbucket-client/models/StatusDTO.js +2 -0
  1115. package/build/bitbucket-client/models/StatusDTO.js.map +1 -0
  1116. package/build/bitbucket-client/models/TotpCodeVerificationDTO.d.ts +5 -0
  1117. package/build/bitbucket-client/models/TotpCodeVerificationDTO.d.ts.map +1 -0
  1118. package/build/bitbucket-client/models/TotpCodeVerificationDTO.js +2 -0
  1119. package/build/bitbucket-client/models/TotpCodeVerificationDTO.js.map +1 -0
  1120. package/build/bitbucket-client/models/TotpElevationRestDTO.d.ts +4 -0
  1121. package/build/bitbucket-client/models/TotpElevationRestDTO.d.ts.map +1 -0
  1122. package/build/bitbucket-client/models/TotpElevationRestDTO.js +2 -0
  1123. package/build/bitbucket-client/models/TotpElevationRestDTO.js.map +1 -0
  1124. package/build/bitbucket-client/models/TotpRecoveryCodeAuthenticationDTO.d.ts +5 -0
  1125. package/build/bitbucket-client/models/TotpRecoveryCodeAuthenticationDTO.d.ts.map +1 -0
  1126. package/build/bitbucket-client/models/TotpRecoveryCodeAuthenticationDTO.js +2 -0
  1127. package/build/bitbucket-client/models/TotpRecoveryCodeAuthenticationDTO.js.map +1 -0
  1128. package/build/bitbucket-client/models/TotpRecoveryCodeDTO.d.ts +2 -0
  1129. package/build/bitbucket-client/models/TotpRecoveryCodeDTO.d.ts.map +1 -0
  1130. package/build/bitbucket-client/models/TotpRecoveryCodeDTO.js +2 -0
  1131. package/build/bitbucket-client/models/TotpRecoveryCodeDTO.js.map +1 -0
  1132. package/build/bitbucket-client/models/TotpUserEnrollmentDTO.d.ts +2 -0
  1133. package/build/bitbucket-client/models/TotpUserEnrollmentDTO.d.ts.map +1 -0
  1134. package/build/bitbucket-client/models/TotpUserEnrollmentDTO.js +2 -0
  1135. package/build/bitbucket-client/models/TotpUserEnrollmentDTO.js.map +1 -0
  1136. package/build/bitbucket-client/models/UserAndGroups.d.ts +5 -0
  1137. package/build/bitbucket-client/models/UserAndGroups.d.ts.map +1 -0
  1138. package/build/bitbucket-client/models/UserAndGroups.js +2 -0
  1139. package/build/bitbucket-client/models/UserAndGroups.js.map +1 -0
  1140. package/build/bitbucket-client/models/UserPasswordUpdate.d.ts +6 -0
  1141. package/build/bitbucket-client/models/UserPasswordUpdate.d.ts.map +1 -0
  1142. package/build/bitbucket-client/models/UserPasswordUpdate.js +2 -0
  1143. package/build/bitbucket-client/models/UserPasswordUpdate.js.map +1 -0
  1144. package/build/bitbucket-client/models/UserPickerContext.d.ts +5 -0
  1145. package/build/bitbucket-client/models/UserPickerContext.d.ts.map +1 -0
  1146. package/build/bitbucket-client/models/UserPickerContext.js +2 -0
  1147. package/build/bitbucket-client/models/UserPickerContext.js.map +1 -0
  1148. package/build/bitbucket-client/models/UserRename.d.ts +5 -0
  1149. package/build/bitbucket-client/models/UserRename.d.ts.map +1 -0
  1150. package/build/bitbucket-client/models/UserRename.js +2 -0
  1151. package/build/bitbucket-client/models/UserRename.js.map +1 -0
  1152. package/build/bitbucket-client/models/UserUpdate.d.ts +6 -0
  1153. package/build/bitbucket-client/models/UserUpdate.d.ts.map +1 -0
  1154. package/build/bitbucket-client/models/UserUpdate.js +2 -0
  1155. package/build/bitbucket-client/models/UserUpdate.js.map +1 -0
  1156. package/build/bitbucket-client/models/UserUpdateWithCredentials.d.ts +10 -0
  1157. package/build/bitbucket-client/models/UserUpdateWithCredentials.d.ts.map +1 -0
  1158. package/build/bitbucket-client/models/UserUpdateWithCredentials.js +2 -0
  1159. package/build/bitbucket-client/models/UserUpdateWithCredentials.js.map +1 -0
  1160. package/build/bitbucket-client/services/AuthenticationService.d.ts +684 -0
  1161. package/build/bitbucket-client/services/AuthenticationService.d.ts.map +1 -0
  1162. package/build/bitbucket-client/services/AuthenticationService.js +1381 -0
  1163. package/build/bitbucket-client/services/AuthenticationService.js.map +1 -0
  1164. package/build/bitbucket-client/services/BuildsAndDeploymentsService.d.ts +364 -0
  1165. package/build/bitbucket-client/services/BuildsAndDeploymentsService.d.ts.map +1 -0
  1166. package/build/bitbucket-client/services/BuildsAndDeploymentsService.js +705 -0
  1167. package/build/bitbucket-client/services/BuildsAndDeploymentsService.js.map +1 -0
  1168. package/build/bitbucket-client/services/CapabilitiesService.d.ts +19 -0
  1169. package/build/bitbucket-client/services/CapabilitiesService.d.ts.map +1 -0
  1170. package/build/bitbucket-client/services/CapabilitiesService.js +32 -0
  1171. package/build/bitbucket-client/services/CapabilitiesService.js.map +1 -0
  1172. package/build/bitbucket-client/services/DashboardService.d.ts +46 -0
  1173. package/build/bitbucket-client/services/DashboardService.d.ts.map +1 -0
  1174. package/build/bitbucket-client/services/DashboardService.js +63 -0
  1175. package/build/bitbucket-client/services/DashboardService.js.map +1 -0
  1176. package/build/bitbucket-client/services/DefaultService.d.ts +21 -0
  1177. package/build/bitbucket-client/services/DefaultService.d.ts.map +1 -0
  1178. package/build/bitbucket-client/services/DefaultService.js +37 -0
  1179. package/build/bitbucket-client/services/DefaultService.js.map +1 -0
  1180. package/build/bitbucket-client/services/DeprecatedService.d.ts +185 -0
  1181. package/build/bitbucket-client/services/DeprecatedService.d.ts.map +1 -0
  1182. package/build/bitbucket-client/services/DeprecatedService.js +338 -0
  1183. package/build/bitbucket-client/services/DeprecatedService.js.map +1 -0
  1184. package/build/bitbucket-client/services/JiraIntegrationService.d.ts +64 -0
  1185. package/build/bitbucket-client/services/JiraIntegrationService.d.ts.map +1 -0
  1186. package/build/bitbucket-client/services/JiraIntegrationService.js +102 -0
  1187. package/build/bitbucket-client/services/JiraIntegrationService.js.map +1 -0
  1188. package/build/bitbucket-client/services/MarkupService.d.ts +19 -0
  1189. package/build/bitbucket-client/services/MarkupService.d.ts.map +1 -0
  1190. package/build/bitbucket-client/services/MarkupService.js +36 -0
  1191. package/build/bitbucket-client/services/MarkupService.js.map +1 -0
  1192. package/build/bitbucket-client/services/MirroringMirrorService.d.ts +182 -0
  1193. package/build/bitbucket-client/services/MirroringMirrorService.d.ts.map +1 -0
  1194. package/build/bitbucket-client/services/MirroringMirrorService.js +375 -0
  1195. package/build/bitbucket-client/services/MirroringMirrorService.js.map +1 -0
  1196. package/build/bitbucket-client/services/MirroringUpstreamService.d.ts +215 -0
  1197. package/build/bitbucket-client/services/MirroringUpstreamService.d.ts.map +1 -0
  1198. package/build/bitbucket-client/services/MirroringUpstreamService.js +405 -0
  1199. package/build/bitbucket-client/services/MirroringUpstreamService.js.map +1 -0
  1200. package/build/bitbucket-client/services/PermissionManagementService.d.ts +713 -0
  1201. package/build/bitbucket-client/services/PermissionManagementService.d.ts.map +1 -0
  1202. package/build/bitbucket-client/services/PermissionManagementService.js +1210 -0
  1203. package/build/bitbucket-client/services/PermissionManagementService.js.map +1 -0
  1204. package/build/bitbucket-client/services/ProjectService.d.ts +1082 -0
  1205. package/build/bitbucket-client/services/ProjectService.d.ts.map +1 -0
  1206. package/build/bitbucket-client/services/ProjectService.js +2096 -0
  1207. package/build/bitbucket-client/services/ProjectService.js.map +1 -0
  1208. package/build/bitbucket-client/services/PullRequestsService.d.ts +1370 -0
  1209. package/build/bitbucket-client/services/PullRequestsService.d.ts.map +1 -0
  1210. package/build/bitbucket-client/services/PullRequestsService.js +2481 -0
  1211. package/build/bitbucket-client/services/PullRequestsService.js.map +1 -0
  1212. package/build/bitbucket-client/services/RepositoryService.d.ts +1734 -0
  1213. package/build/bitbucket-client/services/RepositoryService.d.ts.map +1 -0
  1214. package/build/bitbucket-client/services/RepositoryService.js +3228 -0
  1215. package/build/bitbucket-client/services/RepositoryService.js.map +1 -0
  1216. package/build/bitbucket-client/services/SecurityService.d.ts +542 -0
  1217. package/build/bitbucket-client/services/SecurityService.d.ts.map +1 -0
  1218. package/build/bitbucket-client/services/SecurityService.js +1049 -0
  1219. package/build/bitbucket-client/services/SecurityService.js.map +1 -0
  1220. package/build/bitbucket-client/services/SystemMaintenanceService.d.ts +1174 -0
  1221. package/build/bitbucket-client/services/SystemMaintenanceService.d.ts.map +1 -0
  1222. package/build/bitbucket-client/services/SystemMaintenanceService.js +1996 -0
  1223. package/build/bitbucket-client/services/SystemMaintenanceService.js.map +1 -0
  1224. package/build/bitbucket-response-mapper.d.ts +8 -0
  1225. package/build/bitbucket-response-mapper.d.ts.map +1 -0
  1226. package/build/bitbucket-response-mapper.js +102 -0
  1227. package/build/bitbucket-response-mapper.js.map +1 -0
  1228. package/build/bitbucket-service.d.ts +1655 -0
  1229. package/build/bitbucket-service.d.ts.map +1 -0
  1230. package/build/bitbucket-service.js +2186 -0
  1231. package/build/bitbucket-service.js.map +1 -0
  1232. package/build/config.d.ts +6 -0
  1233. package/build/config.d.ts.map +1 -0
  1234. package/build/config.js +22 -0
  1235. package/build/config.js.map +1 -0
  1236. package/build/inbox-pr-mapper.d.ts +39 -0
  1237. package/build/inbox-pr-mapper.d.ts.map +1 -0
  1238. package/build/inbox-pr-mapper.js +76 -0
  1239. package/build/inbox-pr-mapper.js.map +1 -0
  1240. package/build/index.d.ts +2 -0
  1241. package/build/index.d.ts.map +1 -0
  1242. package/build/index.js +332 -0
  1243. package/build/index.js.map +1 -0
  1244. package/build/pr-changes-mapper.d.ts +32 -0
  1245. package/build/pr-changes-mapper.d.ts.map +1 -0
  1246. package/build/pr-changes-mapper.js +111 -0
  1247. package/build/pr-changes-mapper.js.map +1 -0
  1248. package/build/pr-comment-mapper.d.ts +55 -0
  1249. package/build/pr-comment-mapper.d.ts.map +1 -0
  1250. package/build/pr-comment-mapper.js +182 -0
  1251. package/build/pr-comment-mapper.js.map +1 -0
  1252. package/build/setup.d.ts +2 -0
  1253. package/build/setup.d.ts.map +1 -0
  1254. package/build/setup.js +16 -0
  1255. package/build/setup.js.map +1 -0
  1256. package/jest.config.js +24 -0
  1257. package/package.json +53 -0
  1258. package/server.json +51 -0
  1259. package/src/__tests__/bitbucket-service.test.ts +4626 -0
  1260. package/src/__tests__/bitbucket-token-optimization.test.ts +429 -0
  1261. package/src/__tests__/config.test.ts +64 -0
  1262. package/src/__tests__/inbox-pr-mapper.test.ts +347 -0
  1263. package/src/__tests__/pr-changes-mapper.test.ts +420 -0
  1264. package/src/__tests__/pr-comment-mapper.test.ts +559 -0
  1265. package/src/bitbucket-client/core/ApiError.ts +26 -0
  1266. package/src/bitbucket-client/core/ApiRequestOptions.ts +17 -0
  1267. package/src/bitbucket-client/core/ApiResult.ts +11 -0
  1268. package/src/bitbucket-client/core/CancelablePromise.ts +131 -0
  1269. package/src/bitbucket-client/core/OpenAPI.ts +33 -0
  1270. package/src/bitbucket-client/core/request.ts +337 -0
  1271. package/src/bitbucket-client/index.ts +303 -0
  1272. package/src/bitbucket-client/models/AdminPasswordUpdate.ts +10 -0
  1273. package/src/bitbucket-client/models/ApplicationId.ts +5 -0
  1274. package/src/bitbucket-client/models/ApplicationUser.ts +7 -0
  1275. package/src/bitbucket-client/models/AuthenticationEntity.ts +13 -0
  1276. package/src/bitbucket-client/models/AuthenticationResponse.ts +7 -0
  1277. package/src/bitbucket-client/models/BasicAuthConfigEntity.ts +7 -0
  1278. package/src/bitbucket-client/models/CaptchaDataEntity.ts +7 -0
  1279. package/src/bitbucket-client/models/Comment.ts +38 -0
  1280. package/src/bitbucket-client/models/CommentOperations.ts +10 -0
  1281. package/src/bitbucket-client/models/CommentThread.ts +22 -0
  1282. package/src/bitbucket-client/models/CommentThreadDiffAnchor.ts +46 -0
  1283. package/src/bitbucket-client/models/Commentable.ts +5 -0
  1284. package/src/bitbucket-client/models/Context.ts +8 -0
  1285. package/src/bitbucket-client/models/ConversationDTO.ts +8 -0
  1286. package/src/bitbucket-client/models/Credentials.ts +10 -0
  1287. package/src/bitbucket-client/models/CredentialsCheckFailedDTO.ts +7 -0
  1288. package/src/bitbucket-client/models/DiffContentFilter.ts +5 -0
  1289. package/src/bitbucket-client/models/ElevationMethodRestDTO.ts +7 -0
  1290. package/src/bitbucket-client/models/EnrichedRepository.ts +7 -0
  1291. package/src/bitbucket-client/models/ErrorEntity.ts +7 -0
  1292. package/src/bitbucket-client/models/ExampleAvatarMultipartFormData.ts +11 -0
  1293. package/src/bitbucket-client/models/ExampleCertificateMultipartFormData.ts +11 -0
  1294. package/src/bitbucket-client/models/ExampleFiles.ts +7 -0
  1295. package/src/bitbucket-client/models/ExampleJsonLastModifiedCallback.ts +7 -0
  1296. package/src/bitbucket-client/models/ExampleMultipartFormData.ts +27 -0
  1297. package/src/bitbucket-client/models/ExamplePostMultipartFormData.ts +23 -0
  1298. package/src/bitbucket-client/models/ExamplePreviewMigration.ts +7 -0
  1299. package/src/bitbucket-client/models/ExamplePutMultipartFormData.ts +19 -0
  1300. package/src/bitbucket-client/models/ExampleRequirements.ts +7 -0
  1301. package/src/bitbucket-client/models/ExampleSettings.ts +7 -0
  1302. package/src/bitbucket-client/models/ExampleSettingsMap.ts +7 -0
  1303. package/src/bitbucket-client/models/ExampleSocketAddress.ts +7 -0
  1304. package/src/bitbucket-client/models/ExampleStatus.ts +7 -0
  1305. package/src/bitbucket-client/models/FileListResource.ts +7 -0
  1306. package/src/bitbucket-client/models/FilePart.ts +13 -0
  1307. package/src/bitbucket-client/models/Group.ts +7 -0
  1308. package/src/bitbucket-client/models/GroupAndUsers.ts +9 -0
  1309. package/src/bitbucket-client/models/GroupPickerContext.ts +9 -0
  1310. package/src/bitbucket-client/models/IdpConfigEntity.ts +7 -0
  1311. package/src/bitbucket-client/models/JitConfigEntity.ts +7 -0
  1312. package/src/bitbucket-client/models/JitUserEntity.ts +7 -0
  1313. package/src/bitbucket-client/models/LineNumberRange.ts +10 -0
  1314. package/src/bitbucket-client/models/LoginOptionEntity.ts +7 -0
  1315. package/src/bitbucket-client/models/MethodStateDTO.ts +7 -0
  1316. package/src/bitbucket-client/models/NextLoginStepDTO.ts +7 -0
  1317. package/src/bitbucket-client/models/OptionalBodyBeanParam.ts +5 -0
  1318. package/src/bitbucket-client/models/PageRequestImpl.ts +9 -0
  1319. package/src/bitbucket-client/models/PasswordElevationRestDTO.ts +8 -0
  1320. package/src/bitbucket-client/models/Project.ts +19 -0
  1321. package/src/bitbucket-client/models/PropertyMap.ts +7 -0
  1322. package/src/bitbucket-client/models/PullRequest.ts +36 -0
  1323. package/src/bitbucket-client/models/PullRequestParticipant.ts +28 -0
  1324. package/src/bitbucket-client/models/PullRequestRef.ts +15 -0
  1325. package/src/bitbucket-client/models/RefType.ts +7 -0
  1326. package/src/bitbucket-client/models/Repository.ts +36 -0
  1327. package/src/bitbucket-client/models/RepositoryHookDetails.ts +7 -0
  1328. package/src/bitbucket-client/models/RestAccessToken.ts +7 -0
  1329. package/src/bitbucket-client/models/RestAccessTokenRequest.ts +10 -0
  1330. package/src/bitbucket-client/models/RestAggregateRejectCounter.ts +7 -0
  1331. package/src/bitbucket-client/models/RestAnalyticsSettings.ts +7 -0
  1332. package/src/bitbucket-client/models/RestAnnouncementBanner.ts +7 -0
  1333. package/src/bitbucket-client/models/RestApplicationProperties.ts +7 -0
  1334. package/src/bitbucket-client/models/RestApplicationUser.ts +7 -0
  1335. package/src/bitbucket-client/models/RestApplicationUserWithPermissions.ts +7 -0
  1336. package/src/bitbucket-client/models/RestApplySuggestionRequest.ts +11 -0
  1337. package/src/bitbucket-client/models/RestAttachmentMetadata.ts +7 -0
  1338. package/src/bitbucket-client/models/RestAuthenticationRequest.ts +11 -0
  1339. package/src/bitbucket-client/models/RestAutoDeclineSettings.ts +7 -0
  1340. package/src/bitbucket-client/models/RestAutoDeclineSettingsRequest.ts +9 -0
  1341. package/src/bitbucket-client/models/RestAutoMergeProcessingResult.ts +7 -0
  1342. package/src/bitbucket-client/models/RestAutoMergeProjectSettingsRequest.ts +16 -0
  1343. package/src/bitbucket-client/models/RestAutoMergeRequest.ts +7 -0
  1344. package/src/bitbucket-client/models/RestAutoMergeRestrictedSettings.ts +7 -0
  1345. package/src/bitbucket-client/models/RestAutoMergeSettingsRequest.ts +8 -0
  1346. package/src/bitbucket-client/models/RestBearerTokenCredentials.ts +8 -0
  1347. package/src/bitbucket-client/models/RestBitbucketLicense.ts +7 -0
  1348. package/src/bitbucket-client/models/RestBranch.ts +7 -0
  1349. package/src/bitbucket-client/models/RestBranchCreateRequest.ts +15 -0
  1350. package/src/bitbucket-client/models/RestBranchDeleteRequest.ts +19 -0
  1351. package/src/bitbucket-client/models/RestBuildCapabilities.ts +7 -0
  1352. package/src/bitbucket-client/models/RestBuildStats.ts +7 -0
  1353. package/src/bitbucket-client/models/RestBuildStatus.ts +7 -0
  1354. package/src/bitbucket-client/models/RestBuildStatusSetRequest.ts +31 -0
  1355. package/src/bitbucket-client/models/RestBulkAddInsightAnnotationRequest.ts +10 -0
  1356. package/src/bitbucket-client/models/RestBulkUserRateLimitSettingsUpdateRequest.ts +13 -0
  1357. package/src/bitbucket-client/models/RestChange.ts +7 -0
  1358. package/src/bitbucket-client/models/RestChangeset.ts +7 -0
  1359. package/src/bitbucket-client/models/RestClusterInformation.ts +7 -0
  1360. package/src/bitbucket-client/models/RestClusterNode.ts +7 -0
  1361. package/src/bitbucket-client/models/RestComment.ts +7 -0
  1362. package/src/bitbucket-client/models/RestCommentJiraIssue.ts +7 -0
  1363. package/src/bitbucket-client/models/RestCommentThreadDiffAnchor.ts +7 -0
  1364. package/src/bitbucket-client/models/RestCommit.ts +7 -0
  1365. package/src/bitbucket-client/models/RestCommitMessageSuggestion.ts +7 -0
  1366. package/src/bitbucket-client/models/RestConflict.ts +7 -0
  1367. package/src/bitbucket-client/models/RestConflictChange.ts +7 -0
  1368. package/src/bitbucket-client/models/RestConnectivitySummary.ts +7 -0
  1369. package/src/bitbucket-client/models/RestCreateBranchRequest.ts +10 -0
  1370. package/src/bitbucket-client/models/RestCreateTagRequest.ts +10 -0
  1371. package/src/bitbucket-client/models/RestDefaultBranch.ts +8 -0
  1372. package/src/bitbucket-client/models/RestDefaultReviewersRequest.ts +38 -0
  1373. package/src/bitbucket-client/models/RestDefaultTask.ts +7 -0
  1374. package/src/bitbucket-client/models/RestDefaultTaskRequest.ts +33 -0
  1375. package/src/bitbucket-client/models/RestDelayedSyncRepository.ts +10 -0
  1376. package/src/bitbucket-client/models/RestDeployment.ts +7 -0
  1377. package/src/bitbucket-client/models/RestDeploymentEnvironment.ts +7 -0
  1378. package/src/bitbucket-client/models/RestDeploymentSetRequest.ts +28 -0
  1379. package/src/bitbucket-client/models/RestDetailedGroup.ts +7 -0
  1380. package/src/bitbucket-client/models/RestDetailedInvocation.ts +7 -0
  1381. package/src/bitbucket-client/models/RestDetailedUser.ts +7 -0
  1382. package/src/bitbucket-client/models/RestDiff.ts +7 -0
  1383. package/src/bitbucket-client/models/RestDiffHunk.ts +7 -0
  1384. package/src/bitbucket-client/models/RestDiffLine.ts +7 -0
  1385. package/src/bitbucket-client/models/RestDiffSegment.ts +7 -0
  1386. package/src/bitbucket-client/models/RestDiffStatsSummary.ts +7 -0
  1387. package/src/bitbucket-client/models/RestEmoticon.ts +7 -0
  1388. package/src/bitbucket-client/models/RestEnhancedEntityLink.ts +7 -0
  1389. package/src/bitbucket-client/models/RestErasedUser.ts +7 -0
  1390. package/src/bitbucket-client/models/RestErrorMessage.ts +7 -0
  1391. package/src/bitbucket-client/models/RestErrors.ts +7 -0
  1392. package/src/bitbucket-client/models/RestExportRequest.ts +13 -0
  1393. package/src/bitbucket-client/models/RestFarmSynchronizationRequest.ts +17 -0
  1394. package/src/bitbucket-client/models/RestGitTagCreateRequest.ts +18 -0
  1395. package/src/bitbucket-client/models/RestGpgKey.ts +7 -0
  1396. package/src/bitbucket-client/models/RestGpgSubKey.ts +7 -0
  1397. package/src/bitbucket-client/models/RestHookScript.ts +7 -0
  1398. package/src/bitbucket-client/models/RestHookScriptConfig.ts +7 -0
  1399. package/src/bitbucket-client/models/RestHookScriptTriggers.ts +8 -0
  1400. package/src/bitbucket-client/models/RestImportRequest.ts +8 -0
  1401. package/src/bitbucket-client/models/RestInsightAnnotation.ts +7 -0
  1402. package/src/bitbucket-client/models/RestInsightAnnotationsResponse.ts +7 -0
  1403. package/src/bitbucket-client/models/RestInsightReport.ts +7 -0
  1404. package/src/bitbucket-client/models/RestInsightReportData.ts +7 -0
  1405. package/src/bitbucket-client/models/RestInvocationHistory.ts +7 -0
  1406. package/src/bitbucket-client/models/RestInvocationRequest.ts +7 -0
  1407. package/src/bitbucket-client/models/RestInvocationResult.ts +7 -0
  1408. package/src/bitbucket-client/models/RestJiraIssue.ts +9 -0
  1409. package/src/bitbucket-client/models/RestJob.ts +7 -0
  1410. package/src/bitbucket-client/models/RestJobMessage.ts +7 -0
  1411. package/src/bitbucket-client/models/RestLabel.ts +7 -0
  1412. package/src/bitbucket-client/models/RestLabelable.ts +7 -0
  1413. package/src/bitbucket-client/models/RestLogLevel.ts +7 -0
  1414. package/src/bitbucket-client/models/RestLoggingSettings.ts +7 -0
  1415. package/src/bitbucket-client/models/RestMailConfiguration.ts +7 -0
  1416. package/src/bitbucket-client/models/RestMarkup.ts +7 -0
  1417. package/src/bitbucket-client/models/RestMeshConnectivityReport.ts +7 -0
  1418. package/src/bitbucket-client/models/RestMeshMigrationQueueStateCounts.ts +7 -0
  1419. package/src/bitbucket-client/models/RestMeshMigrationRequest.ts +14 -0
  1420. package/src/bitbucket-client/models/RestMeshMigrationSummary.ts +7 -0
  1421. package/src/bitbucket-client/models/RestMeshNode.ts +7 -0
  1422. package/src/bitbucket-client/models/RestMigrationRepository.ts +7 -0
  1423. package/src/bitbucket-client/models/RestMinimalCommit.ts +7 -0
  1424. package/src/bitbucket-client/models/RestMinimalRef.ts +7 -0
  1425. package/src/bitbucket-client/models/RestMirrorHashes.ts +7 -0
  1426. package/src/bitbucket-client/models/RestMirrorRepositorySynchronizationStatus.ts +7 -0
  1427. package/src/bitbucket-client/models/RestMirrorServer.ts +7 -0
  1428. package/src/bitbucket-client/models/RestMirrorUpgradeRequest.ts +9 -0
  1429. package/src/bitbucket-client/models/RestMirroredRepository.ts +7 -0
  1430. package/src/bitbucket-client/models/RestMirroredRepositoryDescriptor.ts +7 -0
  1431. package/src/bitbucket-client/models/RestMirroringRequest.ts +7 -0
  1432. package/src/bitbucket-client/models/RestMultilineCommentMarker.ts +7 -0
  1433. package/src/bitbucket-client/models/RestMultilineCommentSpan.ts +7 -0
  1434. package/src/bitbucket-client/models/RestMultipleBuildStats.ts +7 -0
  1435. package/src/bitbucket-client/models/RestNamedLink.ts +7 -0
  1436. package/src/bitbucket-client/models/RestNode.ts +7 -0
  1437. package/src/bitbucket-client/models/RestNodeConnectivityReport.ts +7 -0
  1438. package/src/bitbucket-client/models/RestNodeConnectivitySummary.ts +7 -0
  1439. package/src/bitbucket-client/models/RestPageIdpConfigEntity.ts +14 -0
  1440. package/src/bitbucket-client/models/RestPageLoginOptionEntity.ts +14 -0
  1441. package/src/bitbucket-client/models/RestPageRestChange.ts +7 -0
  1442. package/src/bitbucket-client/models/RestPath.ts +7 -0
  1443. package/src/bitbucket-client/models/RestPermitted.ts +7 -0
  1444. package/src/bitbucket-client/models/RestPermittedGroup.ts +7 -0
  1445. package/src/bitbucket-client/models/RestPermittedUser.ts +7 -0
  1446. package/src/bitbucket-client/models/RestPerson.ts +7 -0
  1447. package/src/bitbucket-client/models/RestProgress.ts +7 -0
  1448. package/src/bitbucket-client/models/RestProject.ts +7 -0
  1449. package/src/bitbucket-client/models/RestProjectSettingsRestriction.ts +7 -0
  1450. package/src/bitbucket-client/models/RestProjectSettingsRestrictionRequest.ts +10 -0
  1451. package/src/bitbucket-client/models/RestProperties.ts +7 -0
  1452. package/src/bitbucket-client/models/RestPullRequest.ts +7 -0
  1453. package/src/bitbucket-client/models/RestPullRequestActivity.ts +7 -0
  1454. package/src/bitbucket-client/models/RestPullRequestAssignParticipantRoleRequest.ts +30 -0
  1455. package/src/bitbucket-client/models/RestPullRequestAssignStatusRequest.ts +16 -0
  1456. package/src/bitbucket-client/models/RestPullRequestCommitMessageTemplate.ts +7 -0
  1457. package/src/bitbucket-client/models/RestPullRequestCondition.ts +7 -0
  1458. package/src/bitbucket-client/models/RestPullRequestDeclineRequest.ts +9 -0
  1459. package/src/bitbucket-client/models/RestPullRequestDeleteRequest.ts +8 -0
  1460. package/src/bitbucket-client/models/RestPullRequestFinishReviewRequest.ts +10 -0
  1461. package/src/bitbucket-client/models/RestPullRequestMergeConfig.ts +7 -0
  1462. package/src/bitbucket-client/models/RestPullRequestMergeRequest.ts +12 -0
  1463. package/src/bitbucket-client/models/RestPullRequestMergeStrategy.ts +7 -0
  1464. package/src/bitbucket-client/models/RestPullRequestMergeability.ts +7 -0
  1465. package/src/bitbucket-client/models/RestPullRequestParticipant.ts +7 -0
  1466. package/src/bitbucket-client/models/RestPullRequestRebaseRequest.ts +8 -0
  1467. package/src/bitbucket-client/models/RestPullRequestRebaseResult.ts +7 -0
  1468. package/src/bitbucket-client/models/RestPullRequestRebaseability.ts +7 -0
  1469. package/src/bitbucket-client/models/RestPullRequestRef.ts +7 -0
  1470. package/src/bitbucket-client/models/RestPullRequestReopenRequest.ts +8 -0
  1471. package/src/bitbucket-client/models/RestPullRequestSettings.ts +7 -0
  1472. package/src/bitbucket-client/models/RestPullRequestSuggestion.ts +7 -0
  1473. package/src/bitbucket-client/models/RestPushRefChange.ts +7 -0
  1474. package/src/bitbucket-client/models/RestRateLimitSettings.ts +7 -0
  1475. package/src/bitbucket-client/models/RestRawAccessToken.ts +7 -0
  1476. package/src/bitbucket-client/models/RestRefChange.ts +7 -0
  1477. package/src/bitbucket-client/models/RestRefMatcher.ts +7 -0
  1478. package/src/bitbucket-client/models/RestRefMatcherType.ts +7 -0
  1479. package/src/bitbucket-client/models/RestRefRestriction.ts +7 -0
  1480. package/src/bitbucket-client/models/RestRefSyncQueue.ts +10 -0
  1481. package/src/bitbucket-client/models/RestRefSyncRequest.ts +19 -0
  1482. package/src/bitbucket-client/models/RestRefSyncStatus.ts +7 -0
  1483. package/src/bitbucket-client/models/RestRejectedRef.ts +7 -0
  1484. package/src/bitbucket-client/models/RestRelatedLinks.ts +7 -0
  1485. package/src/bitbucket-client/models/RestRepositoriesExportRequest.ts +10 -0
  1486. package/src/bitbucket-client/models/RestRepository.ts +7 -0
  1487. package/src/bitbucket-client/models/RestRepositoryHook.ts +7 -0
  1488. package/src/bitbucket-client/models/RestRepositoryHookVeto.ts +7 -0
  1489. package/src/bitbucket-client/models/RestRepositoryLockOwner.ts +7 -0
  1490. package/src/bitbucket-client/models/RestRepositoryMirrorEvent.ts +16 -0
  1491. package/src/bitbucket-client/models/RestRepositoryPolicy.ts +7 -0
  1492. package/src/bitbucket-client/models/RestRepositoryPullRequestSettings.ts +7 -0
  1493. package/src/bitbucket-client/models/RestRepositoryRefChangeActivity.ts +7 -0
  1494. package/src/bitbucket-client/models/RestRepositorySelector.ts +9 -0
  1495. package/src/bitbucket-client/models/RestRequiredBuildCondition.ts +7 -0
  1496. package/src/bitbucket-client/models/RestRequiredBuildConditionSetRequest.ts +31 -0
  1497. package/src/bitbucket-client/models/RestRestrictionRequest.ts +44 -0
  1498. package/src/bitbucket-client/models/RestReviewerGroup.ts +7 -0
  1499. package/src/bitbucket-client/models/RestRollingUpgradeState.ts +7 -0
  1500. package/src/bitbucket-client/models/RestScope.ts +7 -0
  1501. package/src/bitbucket-client/models/RestScopesExample.ts +7 -0
  1502. package/src/bitbucket-client/models/RestSecretScanningAllowlistRule.ts +7 -0
  1503. package/src/bitbucket-client/models/RestSecretScanningAllowlistRuleSetRequest.ts +19 -0
  1504. package/src/bitbucket-client/models/RestSecretScanningRule.ts +7 -0
  1505. package/src/bitbucket-client/models/RestSecretScanningRuleSetRequest.ts +19 -0
  1506. package/src/bitbucket-client/models/RestSetInsightReportRequest.ts +18 -0
  1507. package/src/bitbucket-client/models/RestSingleAddInsightAnnotationRequest.ts +14 -0
  1508. package/src/bitbucket-client/models/RestSshAccessKey.ts +7 -0
  1509. package/src/bitbucket-client/models/RestSshAccessKeyLocations.ts +12 -0
  1510. package/src/bitbucket-client/models/RestSshCredentials.ts +16 -0
  1511. package/src/bitbucket-client/models/RestSshKey.ts +7 -0
  1512. package/src/bitbucket-client/models/RestSshKeySettings.ts +7 -0
  1513. package/src/bitbucket-client/models/RestSshKeyTypeRestriction.ts +7 -0
  1514. package/src/bitbucket-client/models/RestSshSettings.ts +7 -0
  1515. package/src/bitbucket-client/models/RestSyncProgress.ts +7 -0
  1516. package/src/bitbucket-client/models/RestSystemSigningConfiguration.ts +7 -0
  1517. package/src/bitbucket-client/models/RestTag.ts +7 -0
  1518. package/src/bitbucket-client/models/RestTestResults.ts +7 -0
  1519. package/src/bitbucket-client/models/RestTokenBucketSettings.ts +7 -0
  1520. package/src/bitbucket-client/models/RestUpstreamServer.ts +7 -0
  1521. package/src/bitbucket-client/models/RestUpstreamSettings.ts +7 -0
  1522. package/src/bitbucket-client/models/RestUserDirectory.ts +7 -0
  1523. package/src/bitbucket-client/models/RestUserRateLimitSettings.ts +7 -0
  1524. package/src/bitbucket-client/models/RestUserRateLimitSettingsUpdateRequest.ts +12 -0
  1525. package/src/bitbucket-client/models/RestUserReaction.ts +7 -0
  1526. package/src/bitbucket-client/models/RestUsernamePasswordCredentials.ts +9 -0
  1527. package/src/bitbucket-client/models/RestWebhook.ts +7 -0
  1528. package/src/bitbucket-client/models/RestWebhookCredentials.ts +7 -0
  1529. package/src/bitbucket-client/models/RestWebhookRequestResponse.ts +7 -0
  1530. package/src/bitbucket-client/models/RestWebhookScope.ts +7 -0
  1531. package/src/bitbucket-client/models/RestX509Certificate.ts +7 -0
  1532. package/src/bitbucket-client/models/Scope.ts +16 -0
  1533. package/src/bitbucket-client/models/SimpleSshKeyFingerprint.ts +7 -0
  1534. package/src/bitbucket-client/models/SsoConfigEntity.ts +7 -0
  1535. package/src/bitbucket-client/models/SsoManagementStatusDTO.ts +7 -0
  1536. package/src/bitbucket-client/models/StatusDTO.ts +7 -0
  1537. package/src/bitbucket-client/models/TotpCodeVerificationDTO.ts +9 -0
  1538. package/src/bitbucket-client/models/TotpElevationRestDTO.ts +8 -0
  1539. package/src/bitbucket-client/models/TotpRecoveryCodeAuthenticationDTO.ts +9 -0
  1540. package/src/bitbucket-client/models/TotpRecoveryCodeDTO.ts +7 -0
  1541. package/src/bitbucket-client/models/TotpUserEnrollmentDTO.ts +7 -0
  1542. package/src/bitbucket-client/models/UserAndGroups.ts +9 -0
  1543. package/src/bitbucket-client/models/UserPasswordUpdate.ts +10 -0
  1544. package/src/bitbucket-client/models/UserPickerContext.ts +9 -0
  1545. package/src/bitbucket-client/models/UserRename.ts +9 -0
  1546. package/src/bitbucket-client/models/UserUpdate.ts +10 -0
  1547. package/src/bitbucket-client/models/UserUpdateWithCredentials.ts +14 -0
  1548. package/src/bitbucket-client/services/AuthenticationService.ts +1652 -0
  1549. package/src/bitbucket-client/services/BuildsAndDeploymentsService.ts +849 -0
  1550. package/src/bitbucket-client/services/CapabilitiesService.ts +38 -0
  1551. package/src/bitbucket-client/services/DashboardService.ts +96 -0
  1552. package/src/bitbucket-client/services/DefaultService.ts +46 -0
  1553. package/src/bitbucket-client/services/DeprecatedService.ts +396 -0
  1554. package/src/bitbucket-client/services/JiraIntegrationService.ts +133 -0
  1555. package/src/bitbucket-client/services/MarkupService.ts +48 -0
  1556. package/src/bitbucket-client/services/MirroringMirrorService.ts +421 -0
  1557. package/src/bitbucket-client/services/MirroringUpstreamService.ts +487 -0
  1558. package/src/bitbucket-client/services/PermissionManagementService.ts +1484 -0
  1559. package/src/bitbucket-client/services/ProjectService.ts +2502 -0
  1560. package/src/bitbucket-client/services/PullRequestsService.ts +2997 -0
  1561. package/src/bitbucket-client/services/RepositoryService.ts +3944 -0
  1562. package/src/bitbucket-client/services/SecurityService.ts +1253 -0
  1563. package/src/bitbucket-client/services/SystemMaintenanceService.ts +2279 -0
  1564. package/src/bitbucket-response-mapper.ts +127 -0
  1565. package/src/bitbucket-service.ts +3069 -0
  1566. package/src/config.ts +29 -0
  1567. package/src/inbox-pr-mapper.ts +183 -0
  1568. package/src/index.ts +811 -0
  1569. package/src/pr-changes-mapper.ts +216 -0
  1570. package/src/pr-comment-mapper.ts +399 -0
  1571. package/src/setup.ts +15 -0
  1572. package/tsconfig.json +12 -0
  1573. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,2824 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { initializeRuntimeConfig } from 'datacenter-mcp-core';
5
+ import { BitbucketService } from '../bitbucket-service.js';
6
+ import { BuildsAndDeploymentsService, DeprecatedService, ProjectService, PullRequestsService, RepositoryService } from '../bitbucket-client/index.js';
7
+ import { request as mockRequest } from '../bitbucket-client/core/request.js';
8
+ // Mock the request function
9
+ jest.mock('../bitbucket-client/core/request.js', () => ({
10
+ request: jest.fn()
11
+ }));
12
+ // Mock the PullRequestsService
13
+ jest.mock('../bitbucket-client/index.js', () => ({
14
+ PullRequestsService: {
15
+ streamRawDiff2: jest.fn(),
16
+ createComment2: jest.fn(),
17
+ updateComment2: jest.fn(),
18
+ streamChanges1: jest.fn(),
19
+ create: jest.fn(),
20
+ update: jest.fn(),
21
+ updateStatus: jest.fn(),
22
+ getPage: jest.fn(),
23
+ getReviewers: jest.fn(),
24
+ get3: jest.fn(),
25
+ getPullRequestConditions1: jest.fn(),
26
+ createPullRequestCondition1: jest.fn(),
27
+ updatePullRequestCondition1: jest.fn(),
28
+ deletePullRequestCondition1: jest.fn(),
29
+ canMerge: jest.fn(),
30
+ merge: jest.fn(),
31
+ decline: jest.fn(),
32
+ reopen: jest.fn(),
33
+ deleteComment2: jest.fn(),
34
+ applySuggestion: jest.fn(),
35
+ watch1: jest.fn(),
36
+ unwatch1: jest.fn(),
37
+ assignParticipantRole: jest.fn(),
38
+ unassignParticipantRole: jest.fn()
39
+ },
40
+ RepositoryService: {
41
+ getRestrictions1: jest.fn(),
42
+ createRestrictions1: jest.fn(),
43
+ getRestriction1: jest.fn(),
44
+ deleteRestriction1: jest.fn(),
45
+ createBranch: jest.fn(),
46
+ deleteBranch: jest.fn(),
47
+ getBranches: jest.fn(),
48
+ getDefaultBranch1: jest.fn(),
49
+ getComments: jest.fn(),
50
+ createComment: jest.fn(),
51
+ getCommit: jest.fn(),
52
+ streamDiff: jest.fn(),
53
+ streamCommits: jest.fn(),
54
+ streamChanges: jest.fn(),
55
+ streamRaw: jest.fn(),
56
+ getContent1: jest.fn(),
57
+ editFile: jest.fn(),
58
+ getTags: jest.fn(),
59
+ getTag: jest.fn(),
60
+ createTagForRepository: jest.fn(),
61
+ findWebhooks1: jest.fn(),
62
+ getWebhook1: jest.fn(),
63
+ createWebhook1: jest.fn(),
64
+ updateWebhook1: jest.fn(),
65
+ deleteWebhook1: jest.fn()
66
+ },
67
+ DeprecatedService: {
68
+ getBuildStatus: jest.fn()
69
+ },
70
+ BuildsAndDeploymentsService: {
71
+ add: jest.fn(),
72
+ get: jest.fn(),
73
+ setACodeInsightsReport: jest.fn(),
74
+ getACodeInsightsReport: jest.fn(),
75
+ deleteACodeInsightsReport: jest.fn(),
76
+ addAnnotations: jest.fn(),
77
+ getAnnotations: jest.fn(),
78
+ deleteAnnotations: jest.fn(),
79
+ getPageOfRequiredBuildsMergeChecks: jest.fn(),
80
+ createRequiredBuildsMergeCheck: jest.fn(),
81
+ updateRequiredBuildsMergeCheck: jest.fn(),
82
+ deleteRequiredBuildsMergeCheck: jest.fn()
83
+ },
84
+ ProjectService: {
85
+ createProject: jest.fn(),
86
+ updateProject: jest.fn(),
87
+ deleteProject: jest.fn(),
88
+ createRepository: jest.fn(),
89
+ updateRepository: jest.fn(),
90
+ forkRepository: jest.fn(),
91
+ deleteRepository: jest.fn()
92
+ },
93
+ OpenAPI: {
94
+ BASE: '',
95
+ TOKEN: '',
96
+ VERSION: ''
97
+ }
98
+ }));
99
+ describe('BitbucketService', () => {
100
+ let bitbucketService;
101
+ const mockProjectKey = 'TEST';
102
+ const mockRepositorySlug = 'test-repo';
103
+ const mockPullRequestId = '123';
104
+ let tempHome;
105
+ let homedirSpy;
106
+ const originalPlatform = process.platform;
107
+ beforeEach(() => {
108
+ tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'bitbucket-service-home-'));
109
+ homedirSpy = jest.spyOn(os, 'homedir').mockReturnValue(tempHome);
110
+ Object.defineProperty(process, 'platform', { value: 'linux', configurable: true });
111
+ initializeRuntimeConfig();
112
+ bitbucketService = new BitbucketService('test-host', 'test-token');
113
+ jest.clearAllMocks();
114
+ });
115
+ afterEach(() => {
116
+ homedirSpy.mockRestore();
117
+ Object.defineProperty(process, 'platform', { value: originalPlatform, configurable: true });
118
+ fs.rmSync(tempHome, { recursive: true, force: true });
119
+ });
120
+ describe('getPullRequestChanges', () => {
121
+ it('should successfully get PR changes', async () => {
122
+ const mockChangesData = {
123
+ values: [
124
+ { path: { toString: 'file.txt' }, type: 'MODIFY' }
125
+ ],
126
+ size: 1,
127
+ isLastPage: true
128
+ };
129
+ PullRequestsService.streamChanges1.mockResolvedValue(mockChangesData);
130
+ const result = await bitbucketService.getPullRequestChanges(mockProjectKey, mockRepositorySlug, mockPullRequestId);
131
+ expect(result.success).toBe(true);
132
+ expect(result.data).toBe(mockChangesData);
133
+ expect(PullRequestsService.streamChanges1).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, undefined, undefined, undefined, undefined, undefined, 25);
134
+ });
135
+ it('should successfully get PR changes with all parameters', async () => {
136
+ const mockChangesData = {
137
+ values: [
138
+ { path: { toString: 'file.txt' }, type: 'MODIFY' }
139
+ ],
140
+ size: 1,
141
+ isLastPage: true
142
+ };
143
+ PullRequestsService.streamChanges1.mockResolvedValue(mockChangesData);
144
+ const result = await bitbucketService.getPullRequestChanges(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'abc123', 'RANGE', 'def456', 'true', 0, 50);
145
+ expect(result.success).toBe(true);
146
+ expect(result.data).toBe(mockChangesData);
147
+ expect(PullRequestsService.streamChanges1).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, 'abc123', 'RANGE', 'def456', 'true', 0, 50);
148
+ });
149
+ it('should handle API errors gracefully', async () => {
150
+ const mockError = new Error('API Error');
151
+ PullRequestsService.streamChanges1.mockRejectedValue(mockError);
152
+ const result = await bitbucketService.getPullRequestChanges(mockProjectKey, mockRepositorySlug, mockPullRequestId);
153
+ expect(result.success).toBe(false);
154
+ expect(result.error).toBe('API Error');
155
+ });
156
+ });
157
+ describe('createBranch', () => {
158
+ it('should successfully create a branch', async () => {
159
+ const mockBranch = { id: 'refs/heads/feature/login', displayId: 'feature/login' };
160
+ RepositoryService.createBranch.mockResolvedValue(mockBranch);
161
+ const result = await bitbucketService.createBranch(mockProjectKey, mockRepositorySlug, 'feature/login', 'refs/heads/master');
162
+ expect(result.success).toBe(true);
163
+ expect(result.data).toBe(mockBranch);
164
+ expect(RepositoryService.createBranch).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, { name: 'feature/login', startPoint: 'refs/heads/master' });
165
+ });
166
+ it('should handle API errors gracefully', async () => {
167
+ RepositoryService.createBranch.mockRejectedValue(new Error('API Error'));
168
+ const result = await bitbucketService.createBranch(mockProjectKey, mockRepositorySlug, 'feature/login', 'refs/heads/master');
169
+ expect(result.success).toBe(false);
170
+ expect(result.error).toBe('API Error');
171
+ });
172
+ });
173
+ describe('addPullRequestReviewer', () => {
174
+ it('should add a reviewer to a pull request', async () => {
175
+ const mockParticipant = { user: { name: 'reviewer1' }, role: 'REVIEWER' };
176
+ PullRequestsService.assignParticipantRole.mockResolvedValue(mockParticipant);
177
+ const result = await bitbucketService.addPullRequestReviewer(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'reviewer1');
178
+ expect(result.success).toBe(true);
179
+ expect(result.data).toBe(mockParticipant);
180
+ expect(PullRequestsService.assignParticipantRole).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, { user: { name: 'reviewer1' }, role: 'REVIEWER' });
181
+ });
182
+ it('should handle API errors gracefully', async () => {
183
+ PullRequestsService.assignParticipantRole.mockRejectedValue(new Error('API Error'));
184
+ const result = await bitbucketService.addPullRequestReviewer(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'reviewer1');
185
+ expect(result.success).toBe(false);
186
+ expect(result.error).toBe('API Error');
187
+ });
188
+ });
189
+ describe('removePullRequestReviewer', () => {
190
+ it('should remove a reviewer from a pull request', async () => {
191
+ PullRequestsService.unassignParticipantRole.mockResolvedValue(undefined);
192
+ const result = await bitbucketService.removePullRequestReviewer(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'reviewer1');
193
+ expect(result.success).toBe(true);
194
+ expect(result.data).toEqual({ removed: true, userSlug: 'reviewer1' });
195
+ expect(PullRequestsService.unassignParticipantRole).toHaveBeenCalledWith(mockProjectKey, 'reviewer1', mockPullRequestId, mockRepositorySlug);
196
+ });
197
+ it('should handle API errors gracefully', async () => {
198
+ PullRequestsService.unassignParticipantRole.mockRejectedValue(new Error('API Error'));
199
+ const result = await bitbucketService.removePullRequestReviewer(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'reviewer1');
200
+ expect(result.success).toBe(false);
201
+ expect(result.error).toBe('API Error');
202
+ });
203
+ });
204
+ describe('getFileContent', () => {
205
+ it('should successfully get raw file content', async () => {
206
+ const mockContent = 'const x = 1;\nconst y = 2;\n';
207
+ RepositoryService.streamRaw.mockResolvedValue(mockContent);
208
+ const result = await bitbucketService.getFileContent(mockProjectKey, mockRepositorySlug, 'src/index.ts');
209
+ expect(result.success).toBe(true);
210
+ expect(result.data).toBe(mockContent);
211
+ expect(RepositoryService.streamRaw).toHaveBeenCalledWith('src/index.ts', mockProjectKey, mockRepositorySlug, undefined);
212
+ });
213
+ it('should pass the at ref through', async () => {
214
+ const mockContent = 'file content';
215
+ RepositoryService.streamRaw.mockResolvedValue(mockContent);
216
+ await bitbucketService.getFileContent(mockProjectKey, mockRepositorySlug, 'README.md', 'refs/heads/main');
217
+ expect(RepositoryService.streamRaw).toHaveBeenCalledWith('README.md', mockProjectKey, mockRepositorySlug, 'refs/heads/main');
218
+ });
219
+ it('should handle API errors gracefully', async () => {
220
+ const mockError = new Error('The repository does not exist.');
221
+ RepositoryService.streamRaw.mockRejectedValue(mockError);
222
+ const result = await bitbucketService.getFileContent(mockProjectKey, mockRepositorySlug, 'missing.txt');
223
+ expect(result.success).toBe(false);
224
+ expect(result.error).toBe('The repository does not exist.');
225
+ });
226
+ });
227
+ describe('browseRepository', () => {
228
+ it('should browse the repository root by default', async () => {
229
+ const mockBrowse = { children: { values: [{ path: { toString: 'src' }, type: 'DIRECTORY' }] } };
230
+ RepositoryService.getContent1.mockResolvedValue(mockBrowse);
231
+ const result = await bitbucketService.browseRepository(mockProjectKey, mockRepositorySlug);
232
+ expect(result.success).toBe(true);
233
+ expect(result.data).toBe(mockBrowse);
234
+ expect(RepositoryService.getContent1).toHaveBeenCalledWith('', mockProjectKey, mockRepositorySlug, undefined, // noContent
235
+ undefined, // at
236
+ undefined, // size
237
+ undefined, // blame
238
+ undefined // type
239
+ );
240
+ });
241
+ it('should map path, at, type and blame to the generated client', async () => {
242
+ const mockBrowse = { type: 'FILE' };
243
+ RepositoryService.getContent1.mockResolvedValue(mockBrowse);
244
+ await bitbucketService.browseRepository(mockProjectKey, mockRepositorySlug, 'src/index.ts', 'refs/heads/main', true, true);
245
+ expect(RepositoryService.getContent1).toHaveBeenCalledWith('src/index.ts', mockProjectKey, mockRepositorySlug, undefined, 'refs/heads/main', undefined, 'true', // blame
246
+ 'true' // type
247
+ );
248
+ });
249
+ it('should handle API errors gracefully', async () => {
250
+ const mockError = new Error('API Error');
251
+ RepositoryService.getContent1.mockRejectedValue(mockError);
252
+ const result = await bitbucketService.browseRepository(mockProjectKey, mockRepositorySlug, 'src');
253
+ expect(result.success).toBe(false);
254
+ expect(result.error).toBe('API Error');
255
+ });
256
+ });
257
+ describe('Code Insights', () => {
258
+ const commitId = 'abc123';
259
+ const key = 'mycompany.eslint';
260
+ it('setInsightReport should PUT the report', async () => {
261
+ const mockReport = { key, title: 'ESLint' };
262
+ BuildsAndDeploymentsService.setACodeInsightsReport.mockResolvedValue(mockReport);
263
+ const report = { title: 'ESLint', result: 'PASS' };
264
+ const result = await bitbucketService.setInsightReport(mockProjectKey, mockRepositorySlug, commitId, key, report);
265
+ expect(result.success).toBe(true);
266
+ expect(result.data).toBe(mockReport);
267
+ expect(BuildsAndDeploymentsService.setACodeInsightsReport).toHaveBeenCalledWith(mockProjectKey, commitId, mockRepositorySlug, key, report);
268
+ });
269
+ it('getInsightReport should GET the report', async () => {
270
+ BuildsAndDeploymentsService.getACodeInsightsReport.mockResolvedValue({ key });
271
+ const result = await bitbucketService.getInsightReport(mockProjectKey, mockRepositorySlug, commitId, key);
272
+ expect(result.success).toBe(true);
273
+ expect(BuildsAndDeploymentsService.getACodeInsightsReport).toHaveBeenCalledWith(mockProjectKey, commitId, mockRepositorySlug, key);
274
+ });
275
+ it('deleteInsightReport should DELETE and ack', async () => {
276
+ BuildsAndDeploymentsService.deleteACodeInsightsReport.mockResolvedValue(undefined);
277
+ const result = await bitbucketService.deleteInsightReport(mockProjectKey, mockRepositorySlug, commitId, key);
278
+ expect(result.success).toBe(true);
279
+ expect(result.data).toEqual({ deleted: true, key });
280
+ });
281
+ it('addInsightAnnotations should POST {annotations} and ack with count', async () => {
282
+ BuildsAndDeploymentsService.addAnnotations.mockResolvedValue(undefined);
283
+ const annotations = [
284
+ { externalId: 'a1', path: 'app.js', line: 3, message: 'x', severity: 'HIGH' },
285
+ { externalId: 'a2', path: 'app.js', line: 9, message: 'y', severity: 'LOW' }
286
+ ];
287
+ const result = await bitbucketService.addInsightAnnotations(mockProjectKey, mockRepositorySlug, commitId, key, annotations);
288
+ expect(result.success).toBe(true);
289
+ expect(result.data).toEqual({ added: 2, key });
290
+ expect(BuildsAndDeploymentsService.addAnnotations).toHaveBeenCalledWith(mockProjectKey, commitId, mockRepositorySlug, key, { annotations });
291
+ });
292
+ it('getInsightAnnotations should GET annotations', async () => {
293
+ BuildsAndDeploymentsService.getAnnotations.mockResolvedValue({ annotations: [] });
294
+ const result = await bitbucketService.getInsightAnnotations(mockProjectKey, mockRepositorySlug, commitId, key);
295
+ expect(result.success).toBe(true);
296
+ expect(BuildsAndDeploymentsService.getAnnotations).toHaveBeenCalledWith(mockProjectKey, commitId, mockRepositorySlug, key);
297
+ });
298
+ it('deleteInsightAnnotations should pass externalId and ack', async () => {
299
+ BuildsAndDeploymentsService.deleteAnnotations.mockResolvedValue(undefined);
300
+ const result = await bitbucketService.deleteInsightAnnotations(mockProjectKey, mockRepositorySlug, commitId, key, 'a1');
301
+ expect(result.success).toBe(true);
302
+ expect(result.data).toEqual({ deleted: true, key, externalId: 'a1' });
303
+ expect(BuildsAndDeploymentsService.deleteAnnotations).toHaveBeenCalledWith(mockProjectKey, commitId, mockRepositorySlug, key, 'a1');
304
+ });
305
+ it('should handle API errors gracefully', async () => {
306
+ BuildsAndDeploymentsService.getACodeInsightsReport.mockRejectedValue(new Error('API Error'));
307
+ const result = await bitbucketService.getInsightReport(mockProjectKey, mockRepositorySlug, commitId, key);
308
+ expect(result.success).toBe(false);
309
+ expect(result.error).toBe('API Error');
310
+ });
311
+ });
312
+ describe('deleteBranch', () => {
313
+ it('should successfully delete a branch', async () => {
314
+ RepositoryService.deleteBranch.mockResolvedValue(undefined);
315
+ const result = await bitbucketService.deleteBranch(mockProjectKey, mockRepositorySlug, 'refs/heads/feature/login');
316
+ expect(result.success).toBe(true);
317
+ expect(result.data).toEqual({ deleted: true, name: 'refs/heads/feature/login' });
318
+ expect(RepositoryService.deleteBranch).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, { name: 'refs/heads/feature/login' });
319
+ });
320
+ it('should pass dryRun through and report not-deleted', async () => {
321
+ RepositoryService.deleteBranch.mockResolvedValue(undefined);
322
+ const result = await bitbucketService.deleteBranch(mockProjectKey, mockRepositorySlug, 'refs/heads/feature/login', true);
323
+ expect(result.success).toBe(true);
324
+ expect(result.data).toEqual({ deleted: false, name: 'refs/heads/feature/login' });
325
+ expect(RepositoryService.deleteBranch).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, { name: 'refs/heads/feature/login', dryRun: true });
326
+ });
327
+ it('should handle API errors gracefully', async () => {
328
+ RepositoryService.deleteBranch.mockRejectedValue(new Error('API Error'));
329
+ const result = await bitbucketService.deleteBranch(mockProjectKey, mockRepositorySlug, 'refs/heads/feature/login');
330
+ expect(result.success).toBe(false);
331
+ expect(result.error).toBe('API Error');
332
+ });
333
+ });
334
+ describe('getBranches', () => {
335
+ it('should successfully get branches with default parameters', async () => {
336
+ const mockBranchesData = {
337
+ values: [
338
+ { id: 'refs/heads/main', displayId: 'main', isDefault: true },
339
+ { id: 'refs/heads/feature', displayId: 'feature', isDefault: false }
340
+ ],
341
+ size: 2,
342
+ isLastPage: true
343
+ };
344
+ RepositoryService.getBranches.mockResolvedValue(mockBranchesData);
345
+ const result = await bitbucketService.getBranches(mockProjectKey, mockRepositorySlug);
346
+ expect(result.success).toBe(true);
347
+ expect(result.data).toBe(mockBranchesData);
348
+ expect(RepositoryService.getBranches).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, undefined, // boostMatches
349
+ undefined, // context
350
+ undefined, // orderBy
351
+ undefined, // details
352
+ undefined, // filterText
353
+ undefined, // base
354
+ undefined, // start
355
+ 25);
356
+ });
357
+ it('should pass filterText, orderBy and pagination through', async () => {
358
+ const mockBranchesData = { values: [], size: 0, isLastPage: true };
359
+ RepositoryService.getBranches.mockResolvedValue(mockBranchesData);
360
+ await bitbucketService.getBranches(mockProjectKey, mockRepositorySlug, 'feat', 'MODIFICATION', 10, 50);
361
+ expect(RepositoryService.getBranches).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, undefined, undefined, 'MODIFICATION', undefined, 'feat', undefined, 10, 50);
362
+ });
363
+ it('should handle API errors gracefully', async () => {
364
+ const mockError = new Error('API Error');
365
+ RepositoryService.getBranches.mockRejectedValue(mockError);
366
+ const result = await bitbucketService.getBranches(mockProjectKey, mockRepositorySlug);
367
+ expect(result.success).toBe(false);
368
+ expect(result.error).toBe('API Error');
369
+ });
370
+ });
371
+ describe('getTags', () => {
372
+ it('should get tags with default parameters', async () => {
373
+ const mockTags = { values: [{ id: 'refs/tags/v1', displayId: 'v1' }], isLastPage: true };
374
+ RepositoryService.getTags.mockResolvedValue(mockTags);
375
+ const result = await bitbucketService.getTags(mockProjectKey, mockRepositorySlug);
376
+ expect(result.success).toBe(true);
377
+ expect(result.data).toBe(mockTags);
378
+ expect(RepositoryService.getTags).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, undefined, // orderBy
379
+ undefined, // filterText
380
+ undefined, // start
381
+ 25);
382
+ });
383
+ it('should pass filterText, orderBy and pagination through', async () => {
384
+ RepositoryService.getTags.mockResolvedValue({ values: [] });
385
+ await bitbucketService.getTags(mockProjectKey, mockRepositorySlug, 'rel', 'MODIFICATION', 5, 50);
386
+ expect(RepositoryService.getTags).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, 'MODIFICATION', 'rel', 5, 50);
387
+ });
388
+ it('should handle API errors gracefully', async () => {
389
+ RepositoryService.getTags.mockRejectedValue(new Error('API Error'));
390
+ const result = await bitbucketService.getTags(mockProjectKey, mockRepositorySlug);
391
+ expect(result.success).toBe(false);
392
+ expect(result.error).toBe('API Error');
393
+ });
394
+ });
395
+ describe('getCommitComments', () => {
396
+ it('should get commit comments for a path', async () => {
397
+ const mockComments = { values: [{ id: 1, text: 'looks good' }], isLastPage: true };
398
+ RepositoryService.getComments.mockResolvedValue(mockComments);
399
+ const result = await bitbucketService.getCommitComments(mockProjectKey, mockRepositorySlug, 'abc123', 'src/app.js');
400
+ expect(result.success).toBe(true);
401
+ expect(result.data).toBe(mockComments);
402
+ expect(RepositoryService.getComments).toHaveBeenCalledWith(mockProjectKey, 'abc123', mockRepositorySlug, 'src/app.js', undefined, // since
403
+ undefined, // start
404
+ 25);
405
+ });
406
+ it('should pass since and pagination through', async () => {
407
+ RepositoryService.getComments.mockResolvedValue({ values: [] });
408
+ await bitbucketService.getCommitComments(mockProjectKey, mockRepositorySlug, 'abc123', 'src/app.js', 'def456', 5, 50);
409
+ expect(RepositoryService.getComments).toHaveBeenCalledWith(mockProjectKey, 'abc123', mockRepositorySlug, 'src/app.js', 'def456', 5, 50);
410
+ });
411
+ it('should handle API errors gracefully', async () => {
412
+ RepositoryService.getComments.mockRejectedValue(new Error('API Error'));
413
+ const result = await bitbucketService.getCommitComments(mockProjectKey, mockRepositorySlug, 'abc123', 'src/app.js');
414
+ expect(result.success).toBe(false);
415
+ expect(result.error).toBe('API Error');
416
+ });
417
+ });
418
+ describe('getTag', () => {
419
+ it('should get a single tag by name', async () => {
420
+ const mockTag = { id: 'refs/tags/v1', displayId: 'v1' };
421
+ RepositoryService.getTag.mockResolvedValue(mockTag);
422
+ const result = await bitbucketService.getTag(mockProjectKey, mockRepositorySlug, 'v1');
423
+ expect(result.success).toBe(true);
424
+ expect(result.data).toBe(mockTag);
425
+ expect(RepositoryService.getTag).toHaveBeenCalledWith(mockProjectKey, 'v1', mockRepositorySlug);
426
+ });
427
+ it('should handle API errors gracefully', async () => {
428
+ RepositoryService.getTag.mockRejectedValue(new Error('API Error'));
429
+ const result = await bitbucketService.getTag(mockProjectKey, mockRepositorySlug, 'v1');
430
+ expect(result.success).toBe(false);
431
+ expect(result.error).toBe('API Error');
432
+ });
433
+ });
434
+ describe('getDefaultBranch', () => {
435
+ it('should successfully get the default branch', async () => {
436
+ const mockBranch = { id: 'refs/heads/main', displayId: 'main', isDefault: true };
437
+ RepositoryService.getDefaultBranch1.mockResolvedValue(mockBranch);
438
+ const result = await bitbucketService.getDefaultBranch(mockProjectKey, mockRepositorySlug);
439
+ expect(result.success).toBe(true);
440
+ expect(result.data).toBe(mockBranch);
441
+ expect(RepositoryService.getDefaultBranch1).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug);
442
+ });
443
+ it('should handle API errors gracefully', async () => {
444
+ const mockError = new Error('API Error');
445
+ RepositoryService.getDefaultBranch1.mockRejectedValue(mockError);
446
+ const result = await bitbucketService.getDefaultBranch(mockProjectKey, mockRepositorySlug);
447
+ expect(result.success).toBe(false);
448
+ expect(result.error).toBe('API Error');
449
+ });
450
+ });
451
+ describe('addCommitComment', () => {
452
+ it('should add a general commit comment', async () => {
453
+ const mockComment = { id: 99, text: 'nice' };
454
+ RepositoryService.createComment.mockResolvedValue(mockComment);
455
+ const result = await bitbucketService.addCommitComment(mockProjectKey, mockRepositorySlug, 'abc123', 'nice');
456
+ expect(result.success).toBe(true);
457
+ expect(result.data).toBe(mockComment);
458
+ expect(RepositoryService.createComment).toHaveBeenCalledWith(mockProjectKey, 'abc123', mockRepositorySlug, undefined, { text: 'nice' });
459
+ });
460
+ it('should anchor the comment to a file and line', async () => {
461
+ RepositoryService.createComment.mockResolvedValue({ id: 100 });
462
+ await bitbucketService.addCommitComment(mockProjectKey, mockRepositorySlug, 'abc123', 'fix this', 'src/app.js', 12, 'ADDED');
463
+ expect(RepositoryService.createComment).toHaveBeenCalledWith(mockProjectKey, 'abc123', mockRepositorySlug, undefined, { text: 'fix this', anchor: { path: 'src/app.js', line: 12, lineType: 'ADDED', fileType: 'TO' } });
464
+ });
465
+ it('should default lineType to CONTEXT when a line is given without one', async () => {
466
+ RepositoryService.createComment.mockResolvedValue({ id: 101 });
467
+ await bitbucketService.addCommitComment(mockProjectKey, mockRepositorySlug, 'abc123', 'note', 'src/app.js', 3);
468
+ expect(RepositoryService.createComment).toHaveBeenCalledWith(mockProjectKey, 'abc123', mockRepositorySlug, undefined, { text: 'note', anchor: { path: 'src/app.js', line: 3, lineType: 'CONTEXT', fileType: 'TO' } });
469
+ });
470
+ it('should handle API errors gracefully', async () => {
471
+ RepositoryService.createComment.mockRejectedValue(new Error('API Error'));
472
+ const result = await bitbucketService.addCommitComment(mockProjectKey, mockRepositorySlug, 'abc123', 'x');
473
+ expect(result.success).toBe(false);
474
+ expect(result.error).toBe('API Error');
475
+ });
476
+ });
477
+ describe('listBuildStatuses', () => {
478
+ it('should list build statuses for a commit', async () => {
479
+ const mockStatuses = { values: [{ key: 'build-1', state: 'SUCCESSFUL' }], isLastPage: true };
480
+ DeprecatedService.getBuildStatus.mockResolvedValue(mockStatuses);
481
+ const result = await bitbucketService.listBuildStatuses('abc123');
482
+ expect(result.success).toBe(true);
483
+ expect(result.data).toBe(mockStatuses);
484
+ expect(DeprecatedService.getBuildStatus).toHaveBeenCalledWith('abc123', undefined, undefined, 25);
485
+ });
486
+ it('should pass orderBy and pagination through', async () => {
487
+ DeprecatedService.getBuildStatus.mockResolvedValue({ values: [] });
488
+ await bitbucketService.listBuildStatuses('abc123', 'newest', 5, 50);
489
+ expect(DeprecatedService.getBuildStatus).toHaveBeenCalledWith('abc123', 'newest', 5, 50);
490
+ });
491
+ it('should handle API errors gracefully', async () => {
492
+ DeprecatedService.getBuildStatus.mockRejectedValue(new Error('API Error'));
493
+ const result = await bitbucketService.listBuildStatuses('abc123');
494
+ expect(result.success).toBe(false);
495
+ expect(result.error).toBe('API Error');
496
+ });
497
+ });
498
+ describe('addBuildStatus', () => {
499
+ it('should add a build status with minimal fields', async () => {
500
+ BuildsAndDeploymentsService.add.mockResolvedValue(undefined);
501
+ const result = await bitbucketService.addBuildStatus(mockProjectKey, mockRepositorySlug, 'abc123', 'SUCCESSFUL', 'build-1', 'http://ci/build/1');
502
+ expect(result.success).toBe(true);
503
+ expect(result.data).toEqual({ added: true, commitId: 'abc123', key: 'build-1' });
504
+ expect(BuildsAndDeploymentsService.add).toHaveBeenCalledWith(mockProjectKey, 'abc123', mockRepositorySlug, { state: 'SUCCESSFUL', key: 'build-1', url: 'http://ci/build/1' });
505
+ });
506
+ it('should include optional name and description', async () => {
507
+ BuildsAndDeploymentsService.add.mockResolvedValue(undefined);
508
+ await bitbucketService.addBuildStatus(mockProjectKey, mockRepositorySlug, 'abc123', 'FAILED', 'build-2', 'http://ci/build/2', 'Unit tests', 'Failed on step 3');
509
+ expect(BuildsAndDeploymentsService.add).toHaveBeenCalledWith(mockProjectKey, 'abc123', mockRepositorySlug, { state: 'FAILED', key: 'build-2', url: 'http://ci/build/2', name: 'Unit tests', description: 'Failed on step 3' });
510
+ });
511
+ it('should handle API errors gracefully', async () => {
512
+ BuildsAndDeploymentsService.add.mockRejectedValue(new Error('API Error'));
513
+ const result = await bitbucketService.addBuildStatus(mockProjectKey, mockRepositorySlug, 'abc123', 'SUCCESSFUL', 'build-1', 'http://ci/build/1');
514
+ expect(result.success).toBe(false);
515
+ expect(result.error).toBe('API Error');
516
+ });
517
+ });
518
+ describe('getBuildStatus', () => {
519
+ it('should get a single build status by key', async () => {
520
+ const mockStatus = { key: 'build-1', state: 'SUCCESSFUL' };
521
+ BuildsAndDeploymentsService.get.mockResolvedValue(mockStatus);
522
+ const result = await bitbucketService.getBuildStatus(mockProjectKey, mockRepositorySlug, 'abc123', 'build-1');
523
+ expect(result.success).toBe(true);
524
+ expect(result.data).toBe(mockStatus);
525
+ expect(BuildsAndDeploymentsService.get).toHaveBeenCalledWith(mockProjectKey, 'abc123', mockRepositorySlug, 'build-1');
526
+ });
527
+ it('should handle API errors gracefully', async () => {
528
+ BuildsAndDeploymentsService.get.mockRejectedValue(new Error('API Error'));
529
+ const result = await bitbucketService.getBuildStatus(mockProjectKey, mockRepositorySlug, 'abc123', 'build-1');
530
+ expect(result.success).toBe(false);
531
+ expect(result.error).toBe('API Error');
532
+ });
533
+ });
534
+ describe('getCommit', () => {
535
+ it('should successfully get a single commit', async () => {
536
+ const mockCommit = { id: 'abc123', message: 'Initial commit', author: { name: 'dev' } };
537
+ RepositoryService.getCommit.mockResolvedValue(mockCommit);
538
+ const result = await bitbucketService.getCommit(mockProjectKey, mockRepositorySlug, 'abc123');
539
+ expect(result.success).toBe(true);
540
+ expect(result.data).toBe(mockCommit);
541
+ expect(RepositoryService.getCommit).toHaveBeenCalledWith(mockProjectKey, 'abc123', mockRepositorySlug, undefined);
542
+ });
543
+ it('should pass the path through', async () => {
544
+ RepositoryService.getCommit.mockResolvedValue({});
545
+ await bitbucketService.getCommit(mockProjectKey, mockRepositorySlug, 'abc123', 'src/app.js');
546
+ expect(RepositoryService.getCommit).toHaveBeenCalledWith(mockProjectKey, 'abc123', mockRepositorySlug, 'src/app.js');
547
+ });
548
+ it('should handle API errors gracefully', async () => {
549
+ RepositoryService.getCommit.mockRejectedValue(new Error('API Error'));
550
+ const result = await bitbucketService.getCommit(mockProjectKey, mockRepositorySlug, 'abc123');
551
+ expect(result.success).toBe(false);
552
+ expect(result.error).toBe('API Error');
553
+ });
554
+ });
555
+ describe('editFile', () => {
556
+ it('should create a new file (no sourceCommitId)', async () => {
557
+ const mockCommit = { id: 'newsha', message: 'add file' };
558
+ RepositoryService.editFile.mockResolvedValue(mockCommit);
559
+ const result = await bitbucketService.editFile(mockProjectKey, mockRepositorySlug, 'docs/new.md', '# Hello', 'add file', 'master');
560
+ expect(result.success).toBe(true);
561
+ expect(result.data).toBe(mockCommit);
562
+ expect(RepositoryService.editFile).toHaveBeenCalledWith('docs/new.md', mockProjectKey, mockRepositorySlug, { content: '# Hello', message: 'add file', branch: 'master' });
563
+ });
564
+ it('should pass sourceCommitId and sourceBranch when editing', async () => {
565
+ RepositoryService.editFile.mockResolvedValue({ id: 'sha2' });
566
+ await bitbucketService.editFile(mockProjectKey, mockRepositorySlug, 'README.md', 'updated', 'edit readme', 'feature/x', 'oldsha', 'master');
567
+ expect(RepositoryService.editFile).toHaveBeenCalledWith('README.md', mockProjectKey, mockRepositorySlug, { content: 'updated', message: 'edit readme', branch: 'feature/x', sourceCommitId: 'oldsha', sourceBranch: 'master' });
568
+ });
569
+ it('should handle API errors gracefully', async () => {
570
+ RepositoryService.editFile.mockRejectedValue(new Error('API Error'));
571
+ const result = await bitbucketService.editFile(mockProjectKey, mockRepositorySlug, 'README.md', 'x', 'msg', 'master');
572
+ expect(result.success).toBe(false);
573
+ expect(result.error).toBe('API Error');
574
+ });
575
+ });
576
+ describe('getCommitDiff', () => {
577
+ it('should get a whole-commit diff by default (empty path)', async () => {
578
+ const mockDiff = { diffs: [] };
579
+ RepositoryService.streamDiff.mockResolvedValue(mockDiff);
580
+ const result = await bitbucketService.getCommitDiff(mockProjectKey, mockRepositorySlug, 'abc123');
581
+ expect(result.success).toBe(true);
582
+ expect(result.data).toBe(mockDiff);
583
+ expect(RepositoryService.streamDiff).toHaveBeenCalledWith('abc123', mockRepositorySlug, '', mockProjectKey, undefined, // srcPath
584
+ undefined, // avatarSize
585
+ undefined, // filter
586
+ undefined, // avatarScheme
587
+ undefined, // contextLines
588
+ undefined, // autoSrcPath
589
+ undefined, // whitespace
590
+ undefined, // withComments
591
+ undefined // since
592
+ );
593
+ });
594
+ it('should pass path, contextLines, whitespace and srcPath through', async () => {
595
+ RepositoryService.streamDiff.mockResolvedValue({});
596
+ await bitbucketService.getCommitDiff(mockProjectKey, mockRepositorySlug, 'abc123', 'src/app.js', '5', 'ignore-all', 'src/old.js');
597
+ expect(RepositoryService.streamDiff).toHaveBeenCalledWith('abc123', mockRepositorySlug, 'src/app.js', mockProjectKey, 'src/old.js', undefined, undefined, undefined, '5', undefined, 'ignore-all', undefined, undefined);
598
+ });
599
+ it('should handle API errors gracefully', async () => {
600
+ RepositoryService.streamDiff.mockRejectedValue(new Error('API Error'));
601
+ const result = await bitbucketService.getCommitDiff(mockProjectKey, mockRepositorySlug, 'abc123');
602
+ expect(result.success).toBe(false);
603
+ expect(result.error).toBe('API Error');
604
+ });
605
+ });
606
+ describe('compareRefs', () => {
607
+ it('should compare commits by default', async () => {
608
+ const mockCompare = { values: [{ id: 'c1' }], isLastPage: true };
609
+ RepositoryService.streamCommits.mockResolvedValue(mockCompare);
610
+ const result = await bitbucketService.compareRefs(mockProjectKey, mockRepositorySlug, 'refs/heads/feature', 'refs/heads/master');
611
+ expect(result.success).toBe(true);
612
+ expect(result.data).toBe(mockCompare);
613
+ expect(RepositoryService.streamCommits).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, undefined, // fromRepo
614
+ 'refs/heads/feature', 'refs/heads/master', undefined, // start
615
+ 25);
616
+ expect(RepositoryService.streamChanges).not.toHaveBeenCalled();
617
+ });
618
+ it('should compare changes when compareType is changes', async () => {
619
+ const mockCompare = { values: [], isLastPage: true };
620
+ RepositoryService.streamChanges.mockResolvedValue(mockCompare);
621
+ await bitbucketService.compareRefs(mockProjectKey, mockRepositorySlug, 'refs/heads/feature', 'refs/heads/master', 'OTHER/repo', 'changes', 10, 50);
622
+ expect(RepositoryService.streamChanges).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, 'OTHER/repo', 'refs/heads/feature', 'refs/heads/master', 10, 50);
623
+ });
624
+ it('should handle API errors gracefully', async () => {
625
+ RepositoryService.streamCommits.mockRejectedValue(new Error('API Error'));
626
+ const result = await bitbucketService.compareRefs(mockProjectKey, mockRepositorySlug, 'a', 'b');
627
+ expect(result.success).toBe(false);
628
+ expect(result.error).toBe('API Error');
629
+ });
630
+ });
631
+ describe('createTag', () => {
632
+ it('should create a lightweight tag', async () => {
633
+ const mockTag = { id: 'refs/tags/v2', displayId: 'v2' };
634
+ RepositoryService.createTagForRepository.mockResolvedValue(mockTag);
635
+ const result = await bitbucketService.createTag(mockProjectKey, mockRepositorySlug, 'v2', 'refs/heads/master');
636
+ expect(result.success).toBe(true);
637
+ expect(result.data).toBe(mockTag);
638
+ expect(RepositoryService.createTagForRepository).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, { name: 'v2', startPoint: 'refs/heads/master' });
639
+ });
640
+ it('should include message for an annotated tag', async () => {
641
+ RepositoryService.createTagForRepository.mockResolvedValue({});
642
+ await bitbucketService.createTag(mockProjectKey, mockRepositorySlug, 'v2', 'abc123', 'Release 2');
643
+ expect(RepositoryService.createTagForRepository).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, { name: 'v2', startPoint: 'abc123', message: 'Release 2' });
644
+ });
645
+ it('should handle API errors gracefully', async () => {
646
+ RepositoryService.createTagForRepository.mockRejectedValue(new Error('API Error'));
647
+ const result = await bitbucketService.createTag(mockProjectKey, mockRepositorySlug, 'v2', 'refs/heads/master');
648
+ expect(result.success).toBe(false);
649
+ expect(result.error).toBe('API Error');
650
+ });
651
+ });
652
+ describe('getPullRequests', () => {
653
+ it('should successfully get pull requests with default parameters', async () => {
654
+ const mockPullRequestsData = {
655
+ values: [
656
+ {
657
+ id: 1,
658
+ title: 'Test PR 1',
659
+ state: 'OPEN',
660
+ author: { user: { name: 'user1' } }
661
+ },
662
+ {
663
+ id: 2,
664
+ title: 'Test PR 2',
665
+ state: 'OPEN',
666
+ author: { user: { name: 'user2' } }
667
+ }
668
+ ],
669
+ size: 2,
670
+ isLastPage: true,
671
+ start: 0,
672
+ limit: 25
673
+ };
674
+ PullRequestsService.getPage.mockResolvedValue(mockPullRequestsData);
675
+ const result = await bitbucketService.getPullRequests(mockProjectKey, mockRepositorySlug);
676
+ expect(result.success).toBe(true);
677
+ expect(result.data).toBe(mockPullRequestsData);
678
+ expect(PullRequestsService.getPage).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, undefined, // withAttributes
679
+ undefined, // at
680
+ undefined, // withProperties
681
+ undefined, // draft
682
+ undefined, // filterText
683
+ undefined, // state
684
+ undefined, // order
685
+ undefined, // direction
686
+ undefined, // start
687
+ 25 // limit
688
+ );
689
+ });
690
+ it('should successfully get pull requests with state filter', async () => {
691
+ const mockPullRequestsData = {
692
+ values: [
693
+ {
694
+ id: 1,
695
+ title: 'Merged PR',
696
+ state: 'MERGED',
697
+ author: { user: { name: 'user1' } }
698
+ }
699
+ ],
700
+ size: 1,
701
+ isLastPage: true,
702
+ start: 0,
703
+ limit: 25
704
+ };
705
+ PullRequestsService.getPage.mockResolvedValue(mockPullRequestsData);
706
+ const result = await bitbucketService.getPullRequests(mockProjectKey, mockRepositorySlug, undefined, // withAttributes
707
+ undefined, // at
708
+ undefined, // withProperties
709
+ undefined, // draft
710
+ undefined, // filterText
711
+ 'MERGED' // state
712
+ );
713
+ expect(result.success).toBe(true);
714
+ expect(result.data).toBe(mockPullRequestsData);
715
+ expect(PullRequestsService.getPage).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, undefined, undefined, undefined, undefined, undefined, 'MERGED', undefined, undefined, undefined, 25);
716
+ });
717
+ it('should successfully get pull requests with text filter', async () => {
718
+ const mockPullRequestsData = {
719
+ values: [
720
+ {
721
+ id: 1,
722
+ title: 'Fix bug in authentication',
723
+ state: 'OPEN',
724
+ author: { user: { name: 'user1' } }
725
+ }
726
+ ],
727
+ size: 1,
728
+ isLastPage: true,
729
+ start: 0,
730
+ limit: 25
731
+ };
732
+ PullRequestsService.getPage.mockResolvedValue(mockPullRequestsData);
733
+ const result = await bitbucketService.getPullRequests(mockProjectKey, mockRepositorySlug, undefined, // withAttributes
734
+ undefined, // at
735
+ undefined, // withProperties
736
+ undefined, // draft
737
+ 'authentication' // filterText
738
+ );
739
+ expect(result.success).toBe(true);
740
+ expect(result.data).toBe(mockPullRequestsData);
741
+ expect(PullRequestsService.getPage).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, undefined, undefined, undefined, undefined, 'authentication', undefined, undefined, undefined, undefined, 25);
742
+ });
743
+ it('should successfully get pull requests with branch filter', async () => {
744
+ const mockPullRequestsData = {
745
+ values: [
746
+ {
747
+ id: 1,
748
+ title: 'PR to master',
749
+ state: 'OPEN',
750
+ toRef: { id: 'refs/heads/master' }
751
+ }
752
+ ],
753
+ size: 1,
754
+ isLastPage: true,
755
+ start: 0,
756
+ limit: 25
757
+ };
758
+ PullRequestsService.getPage.mockResolvedValue(mockPullRequestsData);
759
+ const result = await bitbucketService.getPullRequests(mockProjectKey, mockRepositorySlug, undefined, // withAttributes
760
+ 'refs/heads/master' // at
761
+ );
762
+ expect(result.success).toBe(true);
763
+ expect(result.data).toBe(mockPullRequestsData);
764
+ expect(PullRequestsService.getPage).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, undefined, 'refs/heads/master', undefined, undefined, undefined, undefined, undefined, undefined, undefined, 25);
765
+ });
766
+ it('should successfully get pull requests with direction filter', async () => {
767
+ const mockPullRequestsData = {
768
+ values: [
769
+ {
770
+ id: 1,
771
+ title: 'Outgoing PR',
772
+ state: 'OPEN'
773
+ }
774
+ ],
775
+ size: 1,
776
+ isLastPage: true,
777
+ start: 0,
778
+ limit: 25
779
+ };
780
+ PullRequestsService.getPage.mockResolvedValue(mockPullRequestsData);
781
+ const result = await bitbucketService.getPullRequests(mockProjectKey, mockRepositorySlug, undefined, // withAttributes
782
+ undefined, // at
783
+ undefined, // withProperties
784
+ undefined, // draft
785
+ undefined, // filterText
786
+ undefined, // state
787
+ undefined, // order
788
+ 'OUTGOING' // direction
789
+ );
790
+ expect(result.success).toBe(true);
791
+ expect(result.data).toBe(mockPullRequestsData);
792
+ expect(PullRequestsService.getPage).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, undefined, undefined, undefined, undefined, undefined, undefined, undefined, 'OUTGOING', undefined, 25);
793
+ });
794
+ it('should successfully get pull requests with order filter', async () => {
795
+ const mockPullRequestsData = {
796
+ values: [
797
+ {
798
+ id: 1,
799
+ title: 'Oldest PR',
800
+ state: 'OPEN',
801
+ createdDate: 1234567890
802
+ },
803
+ {
804
+ id: 2,
805
+ title: 'Newer PR',
806
+ state: 'OPEN',
807
+ createdDate: 1234567900
808
+ }
809
+ ],
810
+ size: 2,
811
+ isLastPage: true,
812
+ start: 0,
813
+ limit: 25
814
+ };
815
+ PullRequestsService.getPage.mockResolvedValue(mockPullRequestsData);
816
+ const result = await bitbucketService.getPullRequests(mockProjectKey, mockRepositorySlug, undefined, // withAttributes
817
+ undefined, // at
818
+ undefined, // withProperties
819
+ undefined, // draft
820
+ undefined, // filterText
821
+ undefined, // state
822
+ 'OLDEST' // order
823
+ );
824
+ expect(result.success).toBe(true);
825
+ expect(result.data).toBe(mockPullRequestsData);
826
+ expect(PullRequestsService.getPage).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, undefined, undefined, undefined, undefined, undefined, undefined, 'OLDEST', undefined, undefined, 25);
827
+ });
828
+ it('should successfully get pull requests with draft filter', async () => {
829
+ const mockPullRequestsData = {
830
+ values: [
831
+ {
832
+ id: 1,
833
+ title: 'Draft PR',
834
+ state: 'OPEN',
835
+ draft: true
836
+ }
837
+ ],
838
+ size: 1,
839
+ isLastPage: true,
840
+ start: 0,
841
+ limit: 25
842
+ };
843
+ PullRequestsService.getPage.mockResolvedValue(mockPullRequestsData);
844
+ const result = await bitbucketService.getPullRequests(mockProjectKey, mockRepositorySlug, undefined, // withAttributes
845
+ undefined, // at
846
+ undefined, // withProperties
847
+ 'true' // draft
848
+ );
849
+ expect(result.success).toBe(true);
850
+ expect(result.data).toBe(mockPullRequestsData);
851
+ expect(PullRequestsService.getPage).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, undefined, undefined, undefined, 'true', undefined, undefined, undefined, undefined, undefined, 25);
852
+ });
853
+ it('should successfully get pull requests with pagination', async () => {
854
+ const mockPullRequestsData = {
855
+ values: [
856
+ {
857
+ id: 51,
858
+ title: 'PR 51',
859
+ state: 'OPEN'
860
+ }
861
+ ],
862
+ size: 1,
863
+ isLastPage: false,
864
+ start: 50,
865
+ limit: 10,
866
+ nextPageStart: 60
867
+ };
868
+ PullRequestsService.getPage.mockResolvedValue(mockPullRequestsData);
869
+ const result = await bitbucketService.getPullRequests(mockProjectKey, mockRepositorySlug, undefined, // withAttributes
870
+ undefined, // at
871
+ undefined, // withProperties
872
+ undefined, // draft
873
+ undefined, // filterText
874
+ undefined, // state
875
+ undefined, // order
876
+ undefined, // direction
877
+ 50, // start
878
+ 10 // limit
879
+ );
880
+ expect(result.success).toBe(true);
881
+ expect(result.data).toBe(mockPullRequestsData);
882
+ expect(PullRequestsService.getPage).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, 50, 10);
883
+ });
884
+ it('should successfully get pull requests with all parameters', async () => {
885
+ const mockPullRequestsData = {
886
+ values: [
887
+ {
888
+ id: 1,
889
+ title: 'Complete PR test',
890
+ state: 'OPEN',
891
+ draft: false
892
+ }
893
+ ],
894
+ size: 1,
895
+ isLastPage: true,
896
+ start: 0,
897
+ limit: 50
898
+ };
899
+ PullRequestsService.getPage.mockResolvedValue(mockPullRequestsData);
900
+ const result = await bitbucketService.getPullRequests(mockProjectKey, mockRepositorySlug, 'true', // withAttributes
901
+ 'refs/heads/develop', // at
902
+ 'true', // withProperties
903
+ 'false', // draft
904
+ 'test', // filterText
905
+ 'ALL', // state
906
+ 'NEWEST', // order
907
+ 'INCOMING', // direction
908
+ 0, // start
909
+ 50 // limit
910
+ );
911
+ expect(result.success).toBe(true);
912
+ expect(result.data).toBe(mockPullRequestsData);
913
+ expect(PullRequestsService.getPage).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, 'true', 'refs/heads/develop', 'true', 'false', 'test', 'ALL', 'NEWEST', 'INCOMING', 0, 50);
914
+ });
915
+ it('should handle empty results', async () => {
916
+ const mockPullRequestsData = {
917
+ values: [],
918
+ size: 0,
919
+ isLastPage: true,
920
+ start: 0,
921
+ limit: 25
922
+ };
923
+ PullRequestsService.getPage.mockResolvedValue(mockPullRequestsData);
924
+ const result = await bitbucketService.getPullRequests(mockProjectKey, mockRepositorySlug);
925
+ expect(result.success).toBe(true);
926
+ expect(result.data).toBe(mockPullRequestsData);
927
+ if (result.data) {
928
+ expect(result.data.values).toHaveLength(0);
929
+ }
930
+ });
931
+ it('should handle API errors gracefully', async () => {
932
+ const mockError = new Error('Failed to fetch pull requests');
933
+ PullRequestsService.getPage.mockRejectedValue(mockError);
934
+ const result = await bitbucketService.getPullRequests(mockProjectKey, mockRepositorySlug);
935
+ expect(result.success).toBe(false);
936
+ expect(result.error).toBe('Failed to fetch pull requests');
937
+ });
938
+ it('should handle permission errors', async () => {
939
+ const mockError = new Error('Insufficient permissions');
940
+ PullRequestsService.getPage.mockRejectedValue(mockError);
941
+ const result = await bitbucketService.getPullRequests(mockProjectKey, mockRepositorySlug, undefined, undefined, undefined, undefined, undefined, 'OPEN');
942
+ expect(result.success).toBe(false);
943
+ expect(result.error).toBe('Insufficient permissions');
944
+ });
945
+ });
946
+ describe('getPullRequest', () => {
947
+ it('should successfully get a specific pull request by ID', async () => {
948
+ const mockPullRequestData = {
949
+ id: 123,
950
+ version: 1,
951
+ title: 'Feature: Add new functionality',
952
+ description: 'This PR adds new functionality',
953
+ state: 'OPEN',
954
+ open: true,
955
+ closed: false,
956
+ createdDate: 1234567890,
957
+ updatedDate: 1234567900,
958
+ fromRef: {
959
+ id: 'refs/heads/feature-branch',
960
+ displayId: 'feature-branch',
961
+ latestCommit: 'abc123',
962
+ repository: {
963
+ slug: 'test-repo',
964
+ project: { key: 'TEST' }
965
+ }
966
+ },
967
+ toRef: {
968
+ id: 'refs/heads/main',
969
+ displayId: 'main',
970
+ latestCommit: 'def456',
971
+ repository: {
972
+ slug: 'test-repo',
973
+ project: { key: 'TEST' }
974
+ }
975
+ },
976
+ author: {
977
+ user: {
978
+ name: 'testuser',
979
+ emailAddress: 'test@example.com',
980
+ displayName: 'Test User'
981
+ }
982
+ },
983
+ reviewers: [
984
+ {
985
+ user: { name: 'reviewer1', displayName: 'Reviewer One' },
986
+ approved: true
987
+ }
988
+ ],
989
+ participants: []
990
+ };
991
+ PullRequestsService.get3.mockResolvedValue(mockPullRequestData);
992
+ const result = await bitbucketService.getPullRequest(mockProjectKey, mockRepositorySlug, '123');
993
+ expect(result.success).toBe(true);
994
+ expect(result.data).toBe(mockPullRequestData);
995
+ expect(PullRequestsService.get3).toHaveBeenCalledWith(mockProjectKey, '123', mockRepositorySlug);
996
+ });
997
+ it('should handle errors when pull request does not exist', async () => {
998
+ const mockError = new Error('Not found');
999
+ PullRequestsService.get3.mockRejectedValue(mockError);
1000
+ const result = await bitbucketService.getPullRequest(mockProjectKey, mockRepositorySlug, '999');
1001
+ expect(result.success).toBe(false);
1002
+ expect(result.error).toBe('Not found');
1003
+ });
1004
+ it('should handle permission errors', async () => {
1005
+ const mockError = new Error('Insufficient permissions');
1006
+ PullRequestsService.get3.mockRejectedValue(mockError);
1007
+ const result = await bitbucketService.getPullRequest(mockProjectKey, mockRepositorySlug, '123');
1008
+ expect(result.success).toBe(false);
1009
+ expect(result.error).toBe('Insufficient permissions');
1010
+ });
1011
+ });
1012
+ describe('postPullRequestComment', () => {
1013
+ it('should successfully post a general PR comment', async () => {
1014
+ const mockComment = {
1015
+ id: 12345,
1016
+ text: 'Test comment',
1017
+ author: { displayName: 'Test User' }
1018
+ };
1019
+ PullRequestsService.createComment2.mockResolvedValue(mockComment);
1020
+ const result = await bitbucketService.postPullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'Test comment');
1021
+ expect(result.success).toBe(true);
1022
+ expect(result.data).toEqual({
1023
+ id: 12345,
1024
+ pending: false,
1025
+ });
1026
+ expect(PullRequestsService.createComment2).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, { text: 'Test comment' });
1027
+ });
1028
+ it('should successfully post a reply comment', async () => {
1029
+ const mockComment = {
1030
+ id: 12346,
1031
+ text: 'Reply comment',
1032
+ author: { displayName: 'Test User' }
1033
+ };
1034
+ PullRequestsService.createComment2.mockResolvedValue(mockComment);
1035
+ const result = await bitbucketService.postPullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'Reply comment', 123 // parentId
1036
+ );
1037
+ expect(result.success).toBe(true);
1038
+ expect(result.data).toEqual({
1039
+ id: 12346,
1040
+ pending: false,
1041
+ });
1042
+ expect(PullRequestsService.createComment2).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, {
1043
+ text: 'Reply comment',
1044
+ parent: { id: 123 }
1045
+ });
1046
+ });
1047
+ it('should successfully post a file comment', async () => {
1048
+ const mockComment = {
1049
+ id: 12347,
1050
+ text: 'File comment',
1051
+ author: { displayName: 'Test User' }
1052
+ };
1053
+ PullRequestsService.createComment2.mockResolvedValue(mockComment);
1054
+ const result = await bitbucketService.postPullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'File comment', undefined, // parentId
1055
+ 'src/test.js' // filePath
1056
+ );
1057
+ expect(result.success).toBe(true);
1058
+ expect(result.data).toEqual({
1059
+ id: 12347,
1060
+ pending: false,
1061
+ });
1062
+ expect(PullRequestsService.createComment2).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, {
1063
+ text: 'File comment',
1064
+ anchor: {
1065
+ path: 'src/test.js',
1066
+ diffType: 'EFFECTIVE'
1067
+ }
1068
+ });
1069
+ });
1070
+ it('should successfully post a line comment', async () => {
1071
+ const mockComment = {
1072
+ id: 12348,
1073
+ text: 'Line comment',
1074
+ author: { displayName: 'Test User' }
1075
+ };
1076
+ PullRequestsService.createComment2.mockResolvedValue(mockComment);
1077
+ const result = await bitbucketService.postPullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'Line comment', undefined, // parentId
1078
+ 'src/test.js', // filePath
1079
+ undefined, // startLine
1080
+ undefined, // startLineType
1081
+ 42, // line
1082
+ 'ADDED' // lineType
1083
+ );
1084
+ expect(result.success).toBe(true);
1085
+ expect(result.data).toEqual({
1086
+ id: 12348,
1087
+ pending: false,
1088
+ });
1089
+ expect(PullRequestsService.createComment2).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, {
1090
+ text: 'Line comment',
1091
+ anchor: {
1092
+ path: 'src/test.js',
1093
+ diffType: 'EFFECTIVE',
1094
+ line: 42,
1095
+ lineType: 'ADDED',
1096
+ fileType: 'TO'
1097
+ }
1098
+ });
1099
+ });
1100
+ it('should successfully post a multiline comment', async () => {
1101
+ const mockComment = {
1102
+ id: 12349,
1103
+ text: 'Multiline comment',
1104
+ author: { displayName: 'Test User' },
1105
+ anchor: {
1106
+ path: 'src/test.js',
1107
+ diffType: 'EFFECTIVE',
1108
+ line: 15,
1109
+ lineType: 'ADDED',
1110
+ fileType: 'TO',
1111
+ multilineMarker: { startLine: 10, startLineType: 'ADDED' },
1112
+ multilineSpan: { dstSpanStart: 10, dstSpanEnd: 15 }
1113
+ }
1114
+ };
1115
+ PullRequestsService.createComment2.mockResolvedValue(mockComment);
1116
+ const result = await bitbucketService.postPullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'Multiline comment', undefined, // parentId
1117
+ 'src/test.js', // filePath
1118
+ 10, // startLine
1119
+ undefined, // startLineType (should default to lineType)
1120
+ 15, // line (end line)
1121
+ 'ADDED' // lineType
1122
+ );
1123
+ expect(result.success).toBe(true);
1124
+ expect(result.data).toEqual({
1125
+ id: 12349,
1126
+ pending: false,
1127
+ anchor: {
1128
+ path: 'src/test.js',
1129
+ line: 15,
1130
+ lineType: 'ADDED',
1131
+ startLine: 10,
1132
+ startLineType: 'ADDED',
1133
+ }
1134
+ });
1135
+ expect(PullRequestsService.createComment2).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, {
1136
+ text: 'Multiline comment',
1137
+ anchor: {
1138
+ path: 'src/test.js',
1139
+ diffType: 'EFFECTIVE',
1140
+ line: 15,
1141
+ lineType: 'ADDED',
1142
+ fileType: 'TO',
1143
+ multilineMarker: { startLine: 10, startLineType: 'ADDED' },
1144
+ multilineSpan: { dstSpanStart: 10, dstSpanEnd: 15 }
1145
+ }
1146
+ });
1147
+ });
1148
+ it('should post a multiline comment with explicit startLineType', async () => {
1149
+ const mockComment = {
1150
+ id: 12350,
1151
+ text: 'Mixed multiline comment',
1152
+ author: { displayName: 'Test User' },
1153
+ anchor: {
1154
+ path: 'src/test.js',
1155
+ diffType: 'EFFECTIVE',
1156
+ line: 8,
1157
+ lineType: 'ADDED',
1158
+ fileType: 'TO',
1159
+ multilineMarker: { startLine: 5, startLineType: 'CONTEXT' },
1160
+ multilineSpan: { dstSpanStart: 5, dstSpanEnd: 8 }
1161
+ }
1162
+ };
1163
+ PullRequestsService.createComment2.mockResolvedValue(mockComment);
1164
+ await bitbucketService.postPullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'Mixed multiline comment', undefined, // parentId
1165
+ 'src/test.js', // filePath
1166
+ 5, // startLine
1167
+ 'CONTEXT', // startLineType
1168
+ 8, // line (end line)
1169
+ 'ADDED' // lineType
1170
+ );
1171
+ expect(PullRequestsService.createComment2).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, {
1172
+ text: 'Mixed multiline comment',
1173
+ anchor: {
1174
+ path: 'src/test.js',
1175
+ diffType: 'EFFECTIVE',
1176
+ line: 8,
1177
+ lineType: 'ADDED',
1178
+ fileType: 'TO',
1179
+ multilineMarker: { startLine: 5, startLineType: 'CONTEXT' },
1180
+ multilineSpan: { dstSpanStart: 5, dstSpanEnd: 8 }
1181
+ }
1182
+ });
1183
+ });
1184
+ it('should normalize a reversed multiline range (startLine > line)', async () => {
1185
+ PullRequestsService.createComment2.mockResolvedValue({ id: 1, anchor: { path: 'src/test.js' } });
1186
+ await bitbucketService.postPullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'Reversed range', undefined, // parentId
1187
+ 'src/test.js', // filePath
1188
+ 15, // startLine (greater than line)
1189
+ 'ADDED', // startLineType
1190
+ 10, // line (end line, smaller)
1191
+ 'ADDED' // lineType
1192
+ );
1193
+ expect(PullRequestsService.createComment2).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, {
1194
+ text: 'Reversed range',
1195
+ anchor: {
1196
+ path: 'src/test.js',
1197
+ diffType: 'EFFECTIVE',
1198
+ line: 15,
1199
+ lineType: 'ADDED',
1200
+ fileType: 'TO',
1201
+ multilineMarker: { startLine: 10, startLineType: 'ADDED' },
1202
+ multilineSpan: { dstSpanStart: 10, dstSpanEnd: 15 }
1203
+ }
1204
+ });
1205
+ });
1206
+ it('should anchor a REMOVED multiline range to the source file', async () => {
1207
+ PullRequestsService.createComment2.mockResolvedValue({ id: 1, anchor: { path: 'src/test.js' } });
1208
+ await bitbucketService.postPullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'Removed range', undefined, // parentId
1209
+ 'src/test.js', // filePath
1210
+ 2, // startLine
1211
+ 'REMOVED', // startLineType
1212
+ 5, // line (end line)
1213
+ 'REMOVED' // lineType
1214
+ );
1215
+ expect(PullRequestsService.createComment2).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, {
1216
+ text: 'Removed range',
1217
+ anchor: {
1218
+ path: 'src/test.js',
1219
+ diffType: 'EFFECTIVE',
1220
+ line: 5,
1221
+ lineType: 'REMOVED',
1222
+ fileType: 'FROM',
1223
+ multilineMarker: { startLine: 2, startLineType: 'REMOVED' },
1224
+ multilineSpan: { srcSpanStart: 2, srcSpanEnd: 5 }
1225
+ }
1226
+ });
1227
+ });
1228
+ it('should warn when a multi-line suggestion is anchored to a single line', async () => {
1229
+ PullRequestsService.createComment2.mockResolvedValue({
1230
+ id: 99,
1231
+ anchor: { path: 'src/test.js', line: 5, lineType: 'ADDED' }
1232
+ });
1233
+ const result = await bitbucketService.postPullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, '```suggestion\nconst a = 1;\nconst b = 2;\n```', undefined, // parentId
1234
+ 'src/test.js', // filePath
1235
+ undefined, // startLine (single-line anchor — the bug shape)
1236
+ undefined, // startLineType
1237
+ 5, // line
1238
+ 'ADDED' // lineType
1239
+ );
1240
+ expect(result.success).toBe(true);
1241
+ expect(result.data.warning).toMatch(/multi-line ```suggestion/);
1242
+ // single-line anchor: no multiline fields sent
1243
+ const sentAnchor = PullRequestsService.createComment2.mock.calls[0][3].anchor;
1244
+ expect(sentAnchor.multilineMarker).toBeUndefined();
1245
+ expect(sentAnchor.multilineSpan).toBeUndefined();
1246
+ });
1247
+ it('should not warn when a multi-line suggestion has a proper multiline range', async () => {
1248
+ PullRequestsService.createComment2.mockResolvedValue({
1249
+ id: 100,
1250
+ anchor: { path: 'src/test.js', line: 5, lineType: 'ADDED', multilineMarker: { startLine: 4, startLineType: 'ADDED' } }
1251
+ });
1252
+ const result = await bitbucketService.postPullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, '```suggestion\nconst a = 1;\nconst b = 2;\n```', undefined, // parentId
1253
+ 'src/test.js', // filePath
1254
+ 4, // startLine
1255
+ 'ADDED', // startLineType
1256
+ 5, // line
1257
+ 'ADDED' // lineType
1258
+ );
1259
+ expect(result.success).toBe(true);
1260
+ expect(result.data.warning).toBeUndefined();
1261
+ });
1262
+ it('should handle API errors gracefully', async () => {
1263
+ const mockError = new Error('API Error');
1264
+ PullRequestsService.createComment2.mockRejectedValue(mockError);
1265
+ const result = await bitbucketService.postPullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'Test comment');
1266
+ expect(result.success).toBe(false);
1267
+ expect(result.error).toBe('API Error');
1268
+ });
1269
+ });
1270
+ describe('getPullRequestDiff', () => {
1271
+ const { request: mockRequest } = require('../bitbucket-client/core/request.js');
1272
+ it('should successfully get raw diff with minimal parameters', async () => {
1273
+ const mockRawDiff = 'diff --git a/file.txt b/file.txt\nindex 1234567..abcdefg 100644\n--- a/file.txt\n+++ b/file.txt\n@@ -1,3 +1,4 @@\n line1\n line2\n+new line\n line3';
1274
+ mockRequest.mockResolvedValue(mockRawDiff);
1275
+ const result = await bitbucketService.getPullRequestDiff(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'src/file.txt');
1276
+ expect(result.success).toBe(true);
1277
+ expect(result.data).toBe(mockRawDiff);
1278
+ expect(mockRequest).toHaveBeenCalledWith(expect.any(Object), // OpenAPI config
1279
+ {
1280
+ method: 'GET',
1281
+ url: '/api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/diff/{path}',
1282
+ path: {
1283
+ 'path': 'src/file.txt',
1284
+ 'projectKey': mockProjectKey,
1285
+ 'pullRequestId': mockPullRequestId,
1286
+ 'repositorySlug': mockRepositorySlug,
1287
+ },
1288
+ query: {
1289
+ 'contextLines': undefined,
1290
+ 'sinceId': undefined,
1291
+ 'srcPath': undefined,
1292
+ 'diffType': undefined,
1293
+ 'untilId': undefined,
1294
+ 'whitespace': undefined,
1295
+ },
1296
+ headers: {
1297
+ 'Accept': 'text/plain'
1298
+ },
1299
+ errors: {
1300
+ 400: `If the request was malformed.`,
1301
+ 401: `The currently authenticated user has insufficient permissions to view the repository or pull request.`,
1302
+ 404: `The repository or pull request does not exist.`,
1303
+ },
1304
+ });
1305
+ });
1306
+ it('should successfully get raw diff with all parameters', async () => {
1307
+ const mockRawDiff = 'diff --git a/old/file.txt b/new/file.txt\nindex 1234567..abcdefg 100644\n--- a/old/file.txt\n+++ b/new/file.txt\n@@ -1,5 +1,6 @@\n line1\n line2\n+new line\n line3\n line4\n line5';
1308
+ mockRequest.mockResolvedValue(mockRawDiff);
1309
+ const result = await bitbucketService.getPullRequestDiff(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'src/file.txt', '5', // contextLines
1310
+ 'abc123', // sinceId
1311
+ 'old/file.txt', // srcPath
1312
+ 'EFFECTIVE', // diffType
1313
+ 'def456', // untilId
1314
+ 'ignore-all' // whitespace
1315
+ );
1316
+ expect(result.success).toBe(true);
1317
+ expect(result.data).toBe(mockRawDiff);
1318
+ expect(mockRequest).toHaveBeenCalledWith(expect.any(Object), // OpenAPI config
1319
+ {
1320
+ method: 'GET',
1321
+ url: '/api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/diff/{path}',
1322
+ path: {
1323
+ 'path': 'src/file.txt',
1324
+ 'projectKey': mockProjectKey,
1325
+ 'pullRequestId': mockPullRequestId,
1326
+ 'repositorySlug': mockRepositorySlug,
1327
+ },
1328
+ query: {
1329
+ 'contextLines': '5',
1330
+ 'sinceId': 'abc123',
1331
+ 'srcPath': 'old/file.txt',
1332
+ 'diffType': 'EFFECTIVE',
1333
+ 'untilId': 'def456',
1334
+ 'whitespace': 'ignore-all',
1335
+ },
1336
+ headers: {
1337
+ 'Accept': 'text/plain'
1338
+ },
1339
+ errors: {
1340
+ 400: `If the request was malformed.`,
1341
+ 401: `The currently authenticated user has insufficient permissions to view the repository or pull request.`,
1342
+ 404: `The repository or pull request does not exist.`,
1343
+ },
1344
+ });
1345
+ });
1346
+ it('should handle API errors gracefully', async () => {
1347
+ const mockError = new Error('API Error');
1348
+ mockRequest.mockRejectedValue(mockError);
1349
+ const result = await bitbucketService.getPullRequestDiff(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'src/file.txt');
1350
+ expect(result.success).toBe(false);
1351
+ expect(result.error).toBe('API Error');
1352
+ });
1353
+ });
1354
+ describe('createPullRequest', () => {
1355
+ it('should successfully create a PR with minimal parameters', async () => {
1356
+ const mockPullRequest = {
1357
+ id: 1,
1358
+ version: 0,
1359
+ title: 'Test PR',
1360
+ description: 'Test description',
1361
+ state: 'OPEN',
1362
+ fromRef: {
1363
+ id: 'refs/heads/feature-branch',
1364
+ repository: {
1365
+ slug: mockRepositorySlug,
1366
+ project: { key: mockProjectKey }
1367
+ }
1368
+ },
1369
+ toRef: {
1370
+ id: 'refs/heads/main',
1371
+ repository: {
1372
+ slug: mockRepositorySlug,
1373
+ project: { key: mockProjectKey }
1374
+ }
1375
+ }
1376
+ };
1377
+ PullRequestsService.create.mockResolvedValue(mockPullRequest);
1378
+ const result = await bitbucketService.createPullRequest(mockProjectKey, mockRepositorySlug, 'Test PR', 'Test description', 'refs/heads/feature-branch', 'refs/heads/main');
1379
+ expect(result.success).toBe(true);
1380
+ expect(result.data).toEqual({
1381
+ id: 1,
1382
+ version: 0,
1383
+ title: 'Test PR',
1384
+ state: 'OPEN',
1385
+ fromRefId: 'refs/heads/feature-branch',
1386
+ toRefId: 'refs/heads/main',
1387
+ reviewerCount: 0,
1388
+ });
1389
+ expect(PullRequestsService.create).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, {
1390
+ title: 'Test PR',
1391
+ description: 'Test description',
1392
+ fromRef: {
1393
+ id: 'refs/heads/feature-branch',
1394
+ repository: {
1395
+ slug: mockRepositorySlug,
1396
+ project: { key: mockProjectKey }
1397
+ }
1398
+ },
1399
+ toRef: {
1400
+ id: 'refs/heads/main',
1401
+ repository: {
1402
+ slug: mockRepositorySlug,
1403
+ project: { key: mockProjectKey }
1404
+ }
1405
+ }
1406
+ });
1407
+ });
1408
+ it('should successfully create a PR without description', async () => {
1409
+ const mockPullRequest = {
1410
+ id: 2,
1411
+ version: 0,
1412
+ title: 'Test PR without description',
1413
+ state: 'OPEN',
1414
+ fromRef: {
1415
+ id: 'refs/heads/feature-branch',
1416
+ repository: {
1417
+ slug: mockRepositorySlug,
1418
+ project: { key: mockProjectKey }
1419
+ }
1420
+ },
1421
+ toRef: {
1422
+ id: 'refs/heads/main',
1423
+ repository: {
1424
+ slug: mockRepositorySlug,
1425
+ project: { key: mockProjectKey }
1426
+ }
1427
+ }
1428
+ };
1429
+ PullRequestsService.create.mockResolvedValue(mockPullRequest);
1430
+ const result = await bitbucketService.createPullRequest(mockProjectKey, mockRepositorySlug, 'Test PR without description', undefined, 'refs/heads/feature-branch', 'refs/heads/main');
1431
+ expect(result.success).toBe(true);
1432
+ expect(result.data).toEqual({
1433
+ id: 2,
1434
+ version: 0,
1435
+ title: 'Test PR without description',
1436
+ state: 'OPEN',
1437
+ fromRefId: 'refs/heads/feature-branch',
1438
+ toRefId: 'refs/heads/main',
1439
+ reviewerCount: 0,
1440
+ });
1441
+ expect(PullRequestsService.create).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, expect.objectContaining({
1442
+ title: 'Test PR without description',
1443
+ description: undefined
1444
+ }));
1445
+ });
1446
+ it('should successfully create a PR with reviewers', async () => {
1447
+ const mockPullRequest = {
1448
+ id: 3,
1449
+ version: 0,
1450
+ title: 'Test PR with reviewers',
1451
+ description: 'PR with reviewers',
1452
+ state: 'OPEN',
1453
+ fromRef: {
1454
+ id: 'refs/heads/feature-branch',
1455
+ repository: {
1456
+ slug: mockRepositorySlug,
1457
+ project: { key: mockProjectKey }
1458
+ }
1459
+ },
1460
+ toRef: {
1461
+ id: 'refs/heads/main',
1462
+ repository: {
1463
+ slug: mockRepositorySlug,
1464
+ project: { key: mockProjectKey }
1465
+ }
1466
+ },
1467
+ reviewers: [
1468
+ { user: { name: 'reviewer1' } },
1469
+ { user: { name: 'reviewer2' } }
1470
+ ]
1471
+ };
1472
+ PullRequestsService.create.mockResolvedValue(mockPullRequest);
1473
+ const result = await bitbucketService.createPullRequest(mockProjectKey, mockRepositorySlug, 'Test PR with reviewers', 'PR with reviewers', 'refs/heads/feature-branch', 'refs/heads/main', ['reviewer1', 'reviewer2']);
1474
+ expect(result.success).toBe(true);
1475
+ expect(result.data).toEqual({
1476
+ id: 3,
1477
+ version: 0,
1478
+ title: 'Test PR with reviewers',
1479
+ state: 'OPEN',
1480
+ fromRefId: 'refs/heads/feature-branch',
1481
+ toRefId: 'refs/heads/main',
1482
+ reviewerCount: 2,
1483
+ });
1484
+ expect(PullRequestsService.create).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, expect.objectContaining({
1485
+ title: 'Test PR with reviewers',
1486
+ reviewers: [
1487
+ { user: { name: 'reviewer1' } },
1488
+ { user: { name: 'reviewer2' } }
1489
+ ]
1490
+ }));
1491
+ });
1492
+ it('should successfully create a PR with empty reviewers array', async () => {
1493
+ const mockPullRequest = {
1494
+ id: 4,
1495
+ version: 0,
1496
+ title: 'Test PR',
1497
+ description: 'Test',
1498
+ state: 'OPEN'
1499
+ };
1500
+ PullRequestsService.create.mockResolvedValue(mockPullRequest);
1501
+ const result = await bitbucketService.createPullRequest(mockProjectKey, mockRepositorySlug, 'Test PR', 'Test', 'refs/heads/feature-branch', 'refs/heads/main', []);
1502
+ expect(result.success).toBe(true);
1503
+ expect(PullRequestsService.create).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, expect.not.objectContaining({
1504
+ reviewers: expect.anything()
1505
+ }));
1506
+ });
1507
+ it('should handle API errors gracefully', async () => {
1508
+ const mockError = new Error('Failed to create PR');
1509
+ PullRequestsService.create.mockRejectedValue(mockError);
1510
+ const result = await bitbucketService.createPullRequest(mockProjectKey, mockRepositorySlug, 'Test PR', 'Test description', 'refs/heads/feature-branch', 'refs/heads/main');
1511
+ expect(result.success).toBe(false);
1512
+ expect(result.error).toBe('Failed to create PR');
1513
+ });
1514
+ });
1515
+ describe('updatePullRequest', () => {
1516
+ it('should successfully update PR with only title', async () => {
1517
+ const mockUpdatedPR = {
1518
+ id: 1,
1519
+ version: 1,
1520
+ title: 'Updated Title',
1521
+ description: 'Original description',
1522
+ state: 'OPEN'
1523
+ };
1524
+ PullRequestsService.update.mockResolvedValue(mockUpdatedPR);
1525
+ const result = await bitbucketService.updatePullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId, 0, 'Updated Title');
1526
+ expect(result.success).toBe(true);
1527
+ expect(result.data).toEqual({
1528
+ id: 1,
1529
+ version: 1,
1530
+ title: 'Updated Title',
1531
+ state: 'OPEN',
1532
+ reviewerCount: 0,
1533
+ });
1534
+ expect(PullRequestsService.update).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, {
1535
+ version: 0,
1536
+ title: 'Updated Title'
1537
+ });
1538
+ });
1539
+ it('should successfully update PR with only description', async () => {
1540
+ const mockUpdatedPR = {
1541
+ id: 1,
1542
+ version: 1,
1543
+ title: 'Original Title',
1544
+ description: 'Updated description',
1545
+ state: 'OPEN'
1546
+ };
1547
+ PullRequestsService.update.mockResolvedValue(mockUpdatedPR);
1548
+ const result = await bitbucketService.updatePullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId, 0, undefined, 'Updated description');
1549
+ expect(result.success).toBe(true);
1550
+ expect(result.data).toEqual({
1551
+ id: 1,
1552
+ version: 1,
1553
+ title: 'Original Title',
1554
+ state: 'OPEN',
1555
+ reviewerCount: 0,
1556
+ });
1557
+ expect(PullRequestsService.update).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, {
1558
+ version: 0,
1559
+ description: 'Updated description'
1560
+ });
1561
+ });
1562
+ it('should successfully update PR with title and description', async () => {
1563
+ const mockUpdatedPR = {
1564
+ id: 1,
1565
+ version: 1,
1566
+ title: 'Updated Title',
1567
+ description: 'Updated description',
1568
+ state: 'OPEN'
1569
+ };
1570
+ PullRequestsService.update.mockResolvedValue(mockUpdatedPR);
1571
+ const result = await bitbucketService.updatePullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId, 0, 'Updated Title', 'Updated description');
1572
+ expect(result.success).toBe(true);
1573
+ expect(result.data).toEqual({
1574
+ id: 1,
1575
+ version: 1,
1576
+ title: 'Updated Title',
1577
+ state: 'OPEN',
1578
+ reviewerCount: 0,
1579
+ });
1580
+ expect(PullRequestsService.update).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, {
1581
+ version: 0,
1582
+ title: 'Updated Title',
1583
+ description: 'Updated description'
1584
+ });
1585
+ });
1586
+ it('should successfully update PR with reviewers', async () => {
1587
+ const mockUpdatedPR = {
1588
+ id: 1,
1589
+ version: 1,
1590
+ title: 'Test PR',
1591
+ description: 'Test',
1592
+ state: 'OPEN',
1593
+ reviewers: [
1594
+ { user: { name: 'reviewer1' } },
1595
+ { user: { name: 'reviewer2' } },
1596
+ { user: { name: 'reviewer3' } }
1597
+ ]
1598
+ };
1599
+ PullRequestsService.update.mockResolvedValue(mockUpdatedPR);
1600
+ const result = await bitbucketService.updatePullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId, 0, undefined, undefined, ['reviewer1', 'reviewer2', 'reviewer3']);
1601
+ expect(result.success).toBe(true);
1602
+ expect(result.data).toEqual({
1603
+ id: 1,
1604
+ version: 1,
1605
+ title: 'Test PR',
1606
+ state: 'OPEN',
1607
+ reviewerCount: 3,
1608
+ });
1609
+ expect(PullRequestsService.update).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, {
1610
+ version: 0,
1611
+ reviewers: [
1612
+ { user: { name: 'reviewer1' } },
1613
+ { user: { name: 'reviewer2' } },
1614
+ { user: { name: 'reviewer3' } }
1615
+ ]
1616
+ });
1617
+ });
1618
+ it('should successfully update PR with all parameters', async () => {
1619
+ const mockUpdatedPR = {
1620
+ id: 1,
1621
+ version: 2,
1622
+ title: 'Updated Title',
1623
+ description: 'Updated description',
1624
+ state: 'OPEN',
1625
+ reviewers: [
1626
+ { user: { name: 'newreviewer1' } },
1627
+ { user: { name: 'newreviewer2' } }
1628
+ ]
1629
+ };
1630
+ PullRequestsService.update.mockResolvedValue(mockUpdatedPR);
1631
+ const result = await bitbucketService.updatePullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId, 1, 'Updated Title', 'Updated description', ['newreviewer1', 'newreviewer2']);
1632
+ expect(result.success).toBe(true);
1633
+ expect(result.data).toEqual({
1634
+ id: 1,
1635
+ version: 2,
1636
+ title: 'Updated Title',
1637
+ state: 'OPEN',
1638
+ reviewerCount: 2,
1639
+ });
1640
+ expect(PullRequestsService.update).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, {
1641
+ version: 1,
1642
+ title: 'Updated Title',
1643
+ description: 'Updated description',
1644
+ reviewers: [
1645
+ { user: { name: 'newreviewer1' } },
1646
+ { user: { name: 'newreviewer2' } }
1647
+ ]
1648
+ });
1649
+ });
1650
+ it('should successfully update PR with only version (no changes)', async () => {
1651
+ const mockUpdatedPR = {
1652
+ id: 1,
1653
+ version: 1,
1654
+ title: 'Original Title',
1655
+ description: 'Original description',
1656
+ state: 'OPEN'
1657
+ };
1658
+ PullRequestsService.update.mockResolvedValue(mockUpdatedPR);
1659
+ const result = await bitbucketService.updatePullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId, 0);
1660
+ expect(result.success).toBe(true);
1661
+ expect(result.data).toEqual({
1662
+ id: 1,
1663
+ version: 1,
1664
+ title: 'Original Title',
1665
+ state: 'OPEN',
1666
+ reviewerCount: 0,
1667
+ });
1668
+ expect(PullRequestsService.update).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, {
1669
+ version: 0
1670
+ });
1671
+ });
1672
+ it('should successfully update PR with empty reviewers array', async () => {
1673
+ const mockUpdatedPR = {
1674
+ id: 1,
1675
+ version: 1,
1676
+ title: 'Test PR',
1677
+ description: 'Test',
1678
+ state: 'OPEN',
1679
+ reviewers: []
1680
+ };
1681
+ PullRequestsService.update.mockResolvedValue(mockUpdatedPR);
1682
+ const result = await bitbucketService.updatePullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId, 0, undefined, undefined, []);
1683
+ expect(result.success).toBe(true);
1684
+ expect(PullRequestsService.update).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, expect.not.objectContaining({
1685
+ reviewers: expect.anything()
1686
+ }));
1687
+ });
1688
+ it('should handle API errors gracefully', async () => {
1689
+ const mockError = new Error('Failed to update PR');
1690
+ PullRequestsService.update.mockRejectedValue(mockError);
1691
+ const result = await bitbucketService.updatePullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId, 0, 'Updated Title');
1692
+ expect(result.success).toBe(false);
1693
+ expect(result.error).toBe('Failed to update PR');
1694
+ });
1695
+ it('should handle version conflict errors', async () => {
1696
+ const mockError = new Error('Version conflict - PR has been modified');
1697
+ PullRequestsService.update.mockRejectedValue(mockError);
1698
+ const result = await bitbucketService.updatePullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId, 5, 'Updated Title');
1699
+ expect(result.success).toBe(false);
1700
+ expect(result.error).toBe('Version conflict - PR has been modified');
1701
+ });
1702
+ });
1703
+ describe('canMergePullRequest', () => {
1704
+ it('should successfully check mergeability', async () => {
1705
+ const mockMergeability = { canMerge: true, conflicted: false, vetoes: [] };
1706
+ PullRequestsService.canMerge.mockResolvedValue(mockMergeability);
1707
+ const result = await bitbucketService.canMergePullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId);
1708
+ expect(result.success).toBe(true);
1709
+ expect(result.data).toBe(mockMergeability);
1710
+ expect(PullRequestsService.canMerge).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug);
1711
+ });
1712
+ it('should handle API errors gracefully', async () => {
1713
+ const mockError = new Error('API Error');
1714
+ PullRequestsService.canMerge.mockRejectedValue(mockError);
1715
+ const result = await bitbucketService.canMergePullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId);
1716
+ expect(result.success).toBe(false);
1717
+ expect(result.error).toBe('API Error');
1718
+ });
1719
+ });
1720
+ describe('mergePullRequest', () => {
1721
+ it('should successfully merge a PR with minimal parameters', async () => {
1722
+ const mockMergedPR = {
1723
+ id: 1,
1724
+ version: 2,
1725
+ title: 'Test PR',
1726
+ state: 'MERGED',
1727
+ fromRef: { id: 'refs/heads/feature-branch' },
1728
+ toRef: { id: 'refs/heads/main' }
1729
+ };
1730
+ PullRequestsService.merge.mockResolvedValue(mockMergedPR);
1731
+ const result = await bitbucketService.mergePullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId, 1);
1732
+ expect(result.success).toBe(true);
1733
+ expect(result.data).toEqual({
1734
+ id: 1,
1735
+ version: 2,
1736
+ title: 'Test PR',
1737
+ state: 'MERGED',
1738
+ fromRefId: 'refs/heads/feature-branch',
1739
+ toRefId: 'refs/heads/main',
1740
+ reviewerCount: 0,
1741
+ });
1742
+ expect(PullRequestsService.merge).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, '1', {});
1743
+ });
1744
+ it('should pass message and strategyId in the request body', async () => {
1745
+ const mockMergedPR = { id: 1, version: 2, state: 'MERGED' };
1746
+ PullRequestsService.merge.mockResolvedValue(mockMergedPR);
1747
+ await bitbucketService.mergePullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId, 1, 'Custom merge message', 'squash');
1748
+ expect(PullRequestsService.merge).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, '1', { message: 'Custom merge message', strategyId: 'squash' });
1749
+ });
1750
+ it('should return the full response when output is full', async () => {
1751
+ const mockMergedPR = { id: 1, version: 2, state: 'MERGED' };
1752
+ PullRequestsService.merge.mockResolvedValue(mockMergedPR);
1753
+ const result = await bitbucketService.mergePullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId, 1, undefined, undefined, 'full');
1754
+ expect(result.success).toBe(true);
1755
+ expect(result.data).toBe(mockMergedPR);
1756
+ });
1757
+ it('should handle merge veto errors gracefully', async () => {
1758
+ const mockError = new Error('The pull request has unresolved tasks');
1759
+ PullRequestsService.merge.mockRejectedValue(mockError);
1760
+ const result = await bitbucketService.mergePullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId, 1);
1761
+ expect(result.success).toBe(false);
1762
+ expect(result.error).toBe('The pull request has unresolved tasks');
1763
+ });
1764
+ });
1765
+ describe('declinePullRequest', () => {
1766
+ it('should successfully decline a PR', async () => {
1767
+ const mockDeclinedPR = {
1768
+ id: 1,
1769
+ version: 2,
1770
+ title: 'Test PR',
1771
+ state: 'DECLINED'
1772
+ };
1773
+ PullRequestsService.decline.mockResolvedValue(mockDeclinedPR);
1774
+ const result = await bitbucketService.declinePullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId, 1);
1775
+ expect(result.success).toBe(true);
1776
+ expect(result.data).toEqual({
1777
+ id: 1,
1778
+ version: 2,
1779
+ title: 'Test PR',
1780
+ state: 'DECLINED',
1781
+ reviewerCount: 0,
1782
+ });
1783
+ expect(PullRequestsService.decline).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, '1', {});
1784
+ });
1785
+ it('should pass an optional comment in the request body', async () => {
1786
+ const mockDeclinedPR = { id: 1, version: 2, state: 'DECLINED' };
1787
+ PullRequestsService.decline.mockResolvedValue(mockDeclinedPR);
1788
+ await bitbucketService.declinePullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId, 1, 'Superseded by another PR');
1789
+ expect(PullRequestsService.decline).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, '1', { comment: 'Superseded by another PR' });
1790
+ });
1791
+ it('should handle API errors gracefully', async () => {
1792
+ const mockError = new Error('API Error');
1793
+ PullRequestsService.decline.mockRejectedValue(mockError);
1794
+ const result = await bitbucketService.declinePullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId, 1);
1795
+ expect(result.success).toBe(false);
1796
+ expect(result.error).toBe('API Error');
1797
+ });
1798
+ });
1799
+ describe('reopenPullRequest', () => {
1800
+ it('should successfully reopen a declined PR', async () => {
1801
+ const mockReopenedPR = {
1802
+ id: 1,
1803
+ version: 3,
1804
+ title: 'Test PR',
1805
+ state: 'OPEN'
1806
+ };
1807
+ PullRequestsService.reopen.mockResolvedValue(mockReopenedPR);
1808
+ const result = await bitbucketService.reopenPullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId, 2);
1809
+ expect(result.success).toBe(true);
1810
+ expect(result.data).toEqual({
1811
+ id: 1,
1812
+ version: 3,
1813
+ title: 'Test PR',
1814
+ state: 'OPEN',
1815
+ reviewerCount: 0,
1816
+ });
1817
+ expect(PullRequestsService.reopen).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, '2', {});
1818
+ });
1819
+ it('should handle API errors gracefully', async () => {
1820
+ const mockError = new Error('Pull request is not declined');
1821
+ PullRequestsService.reopen.mockRejectedValue(mockError);
1822
+ const result = await bitbucketService.reopenPullRequest(mockProjectKey, mockRepositorySlug, mockPullRequestId, 2);
1823
+ expect(result.success).toBe(false);
1824
+ expect(result.error).toBe('Pull request is not declined');
1825
+ });
1826
+ });
1827
+ describe('getRequiredReviewers', () => {
1828
+ it('should successfully get required reviewers', async () => {
1829
+ const mockReviewersData = [
1830
+ {
1831
+ id: 1,
1832
+ reviewers: [
1833
+ { name: 'reviewer1', emailAddress: 'reviewer1@example.com' },
1834
+ { name: 'reviewer2', emailAddress: 'reviewer2@example.com' }
1835
+ ]
1836
+ }
1837
+ ];
1838
+ PullRequestsService.getReviewers.mockResolvedValue(mockReviewersData);
1839
+ const result = await bitbucketService.getRequiredReviewers(mockProjectKey, mockRepositorySlug, 'refs/heads/feature', 'refs/heads/main');
1840
+ expect(result.success).toBe(true);
1841
+ expect(result.data).toBe(mockReviewersData);
1842
+ expect(PullRequestsService.getReviewers).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, undefined, // targetRepoId
1843
+ undefined, // sourceRepoId
1844
+ 'refs/heads/feature', 'refs/heads/main');
1845
+ });
1846
+ it('should successfully get required reviewers with all parameters', async () => {
1847
+ const mockReviewersData = [
1848
+ {
1849
+ id: 1,
1850
+ reviewers: [
1851
+ { name: 'reviewer1', emailAddress: 'reviewer1@example.com' }
1852
+ ]
1853
+ }
1854
+ ];
1855
+ PullRequestsService.getReviewers.mockResolvedValue(mockReviewersData);
1856
+ const result = await bitbucketService.getRequiredReviewers(mockProjectKey, mockRepositorySlug, 'refs/heads/feature', 'refs/heads/main', '123', // sourceRepoId
1857
+ '456' // targetRepoId
1858
+ );
1859
+ expect(result.success).toBe(true);
1860
+ expect(result.data).toBe(mockReviewersData);
1861
+ expect(PullRequestsService.getReviewers).toHaveBeenCalledWith(mockProjectKey, mockRepositorySlug, '456', // targetRepoId
1862
+ '123', // sourceRepoId
1863
+ 'refs/heads/feature', 'refs/heads/main');
1864
+ });
1865
+ it('should handle errors when getting required reviewers', async () => {
1866
+ const mockError = new Error('API Error');
1867
+ PullRequestsService.getReviewers.mockRejectedValue(mockError);
1868
+ const result = await bitbucketService.getRequiredReviewers(mockProjectKey, mockRepositorySlug, 'refs/heads/feature', 'refs/heads/main');
1869
+ expect(result.success).toBe(false);
1870
+ expect(result.error).toBe('API Error');
1871
+ });
1872
+ });
1873
+ describe('getDashboardPullRequests', () => {
1874
+ const { request: mockRequest } = require('../bitbucket-client/core/request.js');
1875
+ it('should default to AUTHOR role and the package page size', async () => {
1876
+ const mockData = {
1877
+ values: [
1878
+ { id: 1, title: 'PR 1', state: 'OPEN' },
1879
+ { id: 2, title: 'PR 2', state: 'OPEN' }
1880
+ ],
1881
+ size: 2,
1882
+ isLastPage: true
1883
+ };
1884
+ mockRequest.mockResolvedValue(mockData);
1885
+ const result = await bitbucketService.getDashboardPullRequests();
1886
+ expect(result.success).toBe(true);
1887
+ expect(result.data).toBe(mockData);
1888
+ expect(mockRequest).toHaveBeenCalledWith(expect.any(Object), {
1889
+ method: 'GET',
1890
+ url: '/api/1.0/dashboard/pull-requests',
1891
+ query: {
1892
+ 'role': 'AUTHOR',
1893
+ 'state': 'OPEN',
1894
+ 'closedSince': undefined,
1895
+ 'order': 'NEWEST',
1896
+ 'start': undefined,
1897
+ 'limit': 25,
1898
+ },
1899
+ errors: {
1900
+ 401: 'The currently authenticated user is not permitted to access the dashboard.',
1901
+ },
1902
+ });
1903
+ });
1904
+ it('should get dashboard PRs filtered by role and state', async () => {
1905
+ const mockData = {
1906
+ values: [{ id: 1, title: 'My PR', state: 'OPEN' }],
1907
+ size: 1,
1908
+ isLastPage: true
1909
+ };
1910
+ mockRequest.mockResolvedValue(mockData);
1911
+ const result = await bitbucketService.getDashboardPullRequests('REVIEWER', 'OPEN', undefined, 'NEWEST', 0, 5);
1912
+ expect(result.success).toBe(true);
1913
+ expect(result.data).toBe(mockData);
1914
+ expect(mockRequest).toHaveBeenCalledWith(expect.any(Object), {
1915
+ method: 'GET',
1916
+ url: '/api/1.0/dashboard/pull-requests',
1917
+ query: {
1918
+ 'role': 'REVIEWER',
1919
+ 'state': 'OPEN',
1920
+ 'closedSince': undefined,
1921
+ 'order': 'NEWEST',
1922
+ 'start': 0,
1923
+ 'limit': 5,
1924
+ },
1925
+ errors: {
1926
+ 401: 'The currently authenticated user is not permitted to access the dashboard.',
1927
+ },
1928
+ });
1929
+ });
1930
+ it('should get dashboard PRs with closedSince filter', async () => {
1931
+ const mockData = {
1932
+ values: [{ id: 3, title: 'Merged PR', state: 'MERGED' }],
1933
+ size: 1,
1934
+ isLastPage: true
1935
+ };
1936
+ mockRequest.mockResolvedValue(mockData);
1937
+ const closedSince = 1700000000000;
1938
+ const result = await bitbucketService.getDashboardPullRequests('PARTICIPANT', 'MERGED', closedSince);
1939
+ expect(result.success).toBe(true);
1940
+ expect(result.data).toBe(mockData);
1941
+ expect(mockRequest).toHaveBeenCalledWith(expect.any(Object), {
1942
+ method: 'GET',
1943
+ url: '/api/1.0/dashboard/pull-requests',
1944
+ query: {
1945
+ 'role': 'PARTICIPANT',
1946
+ 'state': 'MERGED',
1947
+ 'closedSince': closedSince,
1948
+ 'order': 'NEWEST',
1949
+ 'start': undefined,
1950
+ 'limit': 25,
1951
+ },
1952
+ errors: {
1953
+ 401: 'The currently authenticated user is not permitted to access the dashboard.',
1954
+ },
1955
+ });
1956
+ });
1957
+ it('should handle API errors', async () => {
1958
+ const mockError = new Error('Unauthorized');
1959
+ mockRequest.mockRejectedValue(mockError);
1960
+ const result = await bitbucketService.getDashboardPullRequests();
1961
+ expect(result.success).toBe(false);
1962
+ expect(result.error).toBe('Unauthorized');
1963
+ });
1964
+ });
1965
+ describe('getInboxPullRequests', () => {
1966
+ const { request: mockRequest } = require('../bitbucket-client/core/request.js');
1967
+ it('should successfully get inbox pull requests with default parameters', async () => {
1968
+ const mockInboxData = {
1969
+ values: [
1970
+ {
1971
+ id: 1,
1972
+ title: 'Fix bug',
1973
+ state: 'OPEN',
1974
+ createdDate: 1700000000000,
1975
+ updatedDate: 1700001000000,
1976
+ author: { user: { name: 'user1', displayName: 'User One' } },
1977
+ fromRef: { id: 'refs/heads/feature', displayId: 'feature', repository: { slug: 'repo1', project: { key: 'PROJ' } } },
1978
+ toRef: { id: 'refs/heads/main', displayId: 'main', repository: { slug: 'repo1', project: { key: 'PROJ' } } },
1979
+ reviewers: [{ user: { name: 'reviewer1' }, approved: false, status: 'UNAPPROVED' }],
1980
+ },
1981
+ ],
1982
+ size: 1,
1983
+ isLastPage: true,
1984
+ start: 0,
1985
+ limit: 25,
1986
+ };
1987
+ mockRequest.mockResolvedValue(mockInboxData);
1988
+ const result = await bitbucketService.getInboxPullRequests();
1989
+ expect(result.success).toBe(true);
1990
+ expect(result.data).toBeDefined();
1991
+ expect(mockRequest).toHaveBeenCalledWith(expect.any(Object), expect.objectContaining({
1992
+ method: 'GET',
1993
+ url: '/api/latest/inbox/pull-requests',
1994
+ query: { start: undefined, limit: 25 },
1995
+ }));
1996
+ });
1997
+ it('should successfully get inbox pull requests with pagination parameters', async () => {
1998
+ const mockInboxData = {
1999
+ values: [
2000
+ {
2001
+ id: 2,
2002
+ title: 'Add feature',
2003
+ state: 'OPEN',
2004
+ createdDate: 1700000000000,
2005
+ updatedDate: 1700001000000,
2006
+ fromRef: { id: 'refs/heads/feat', displayId: 'feat', repository: { slug: 'repo1', project: { key: 'PROJ' } } },
2007
+ toRef: { id: 'refs/heads/main', displayId: 'main', repository: { slug: 'repo1', project: { key: 'PROJ' } } },
2008
+ },
2009
+ ],
2010
+ size: 1,
2011
+ isLastPage: false,
2012
+ start: 25,
2013
+ limit: 10,
2014
+ nextPageStart: 35,
2015
+ };
2016
+ mockRequest.mockResolvedValue(mockInboxData);
2017
+ const result = await bitbucketService.getInboxPullRequests(25, 10);
2018
+ expect(result.success).toBe(true);
2019
+ expect(mockRequest).toHaveBeenCalledWith(expect.any(Object), expect.objectContaining({
2020
+ query: { start: 25, limit: 10 },
2021
+ }));
2022
+ });
2023
+ it('should handle empty inbox', async () => {
2024
+ const mockInboxData = {
2025
+ values: [],
2026
+ size: 0,
2027
+ isLastPage: true,
2028
+ start: 0,
2029
+ limit: 25,
2030
+ };
2031
+ mockRequest.mockResolvedValue(mockInboxData);
2032
+ const result = await bitbucketService.getInboxPullRequests();
2033
+ expect(result.success).toBe(true);
2034
+ expect(result.data).toBeDefined();
2035
+ });
2036
+ it('should handle API errors gracefully', async () => {
2037
+ const mockError = new Error('Unauthorized');
2038
+ mockRequest.mockRejectedValue(mockError);
2039
+ const result = await bitbucketService.getInboxPullRequests();
2040
+ expect(result.success).toBe(false);
2041
+ expect(result.error).toBe('Unauthorized');
2042
+ });
2043
+ });
2044
+ describe('validateConfig', () => {
2045
+ const originalEnv = process.env;
2046
+ let tempDir;
2047
+ beforeEach(() => {
2048
+ process.env = { ...originalEnv };
2049
+ delete process.env.ATLASSIAN_DC_MCP_CONFIG_FILE;
2050
+ tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'bitbucket-validate-config-'));
2051
+ initializeRuntimeConfig({ cwd: tempDir });
2052
+ });
2053
+ afterEach(() => {
2054
+ fs.rmSync(tempDir, { recursive: true, force: true });
2055
+ });
2056
+ afterAll(() => {
2057
+ process.env = originalEnv;
2058
+ });
2059
+ it('should return empty array when all required env vars are present', () => {
2060
+ process.env.BITBUCKET_API_TOKEN = 'test-token';
2061
+ process.env.BITBUCKET_HOST = 'test-host';
2062
+ const missingVars = BitbucketService.validateConfig();
2063
+ expect(missingVars).toEqual([]);
2064
+ });
2065
+ it('should allow anonymous access when BITBUCKET_API_TOKEN is missing', () => {
2066
+ delete process.env.BITBUCKET_API_TOKEN;
2067
+ process.env.BITBUCKET_HOST = 'test-host';
2068
+ const missingVars = BitbucketService.validateConfig();
2069
+ expect(missingVars).toEqual([]);
2070
+ });
2071
+ it('should return missing vars when both host options are missing', () => {
2072
+ process.env.BITBUCKET_API_TOKEN = 'test-token';
2073
+ delete process.env.BITBUCKET_HOST;
2074
+ delete process.env.BITBUCKET_API_BASE_PATH;
2075
+ const missingVars = BitbucketService.validateConfig();
2076
+ expect(missingVars).toContain('BITBUCKET_HOST or BITBUCKET_API_BASE_PATH');
2077
+ });
2078
+ it('should accept BITBUCKET_API_BASE_PATH as alternative to BITBUCKET_HOST', () => {
2079
+ process.env.BITBUCKET_API_TOKEN = 'test-token';
2080
+ delete process.env.BITBUCKET_HOST;
2081
+ process.env.BITBUCKET_API_BASE_PATH = 'https://test-host/rest';
2082
+ const missingVars = BitbucketService.validateConfig();
2083
+ expect(missingVars).toEqual([]);
2084
+ });
2085
+ it('should accept required config from the shared config file', () => {
2086
+ const sharedConfigPath = path.join(tempDir, 'shared.env');
2087
+ fs.writeFileSync(sharedConfigPath, 'BITBUCKET_HOST=file-host\nBITBUCKET_API_TOKEN=file-token\n');
2088
+ process.env.ATLASSIAN_DC_MCP_CONFIG_FILE = sharedConfigPath;
2089
+ const missingVars = BitbucketService.validateConfig();
2090
+ expect(missingVars).toEqual([]);
2091
+ });
2092
+ });
2093
+ describe('updatePullRequestComment', () => {
2094
+ it('should resolve a task by sending state RESOLVED with the version', async () => {
2095
+ const mockComment = { id: 500, version: 2, state: 'RESOLVED', text: 'Task body' };
2096
+ PullRequestsService.updateComment2.mockResolvedValue(mockComment);
2097
+ const result = await bitbucketService.updatePullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, '500', // commentId
2098
+ 1, // version
2099
+ undefined, // text
2100
+ 'RESOLVED' // state
2101
+ );
2102
+ expect(result.success).toBe(true);
2103
+ expect(PullRequestsService.updateComment2).toHaveBeenCalledWith(mockProjectKey, '500', mockPullRequestId, mockRepositorySlug, { version: 1, state: 'RESOLVED' });
2104
+ });
2105
+ it('should edit the comment text without changing state or severity', async () => {
2106
+ const mockComment = { id: 501, version: 3, text: 'Edited text' };
2107
+ PullRequestsService.updateComment2.mockResolvedValue(mockComment);
2108
+ await bitbucketService.updatePullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, '501', 2, 'Edited text');
2109
+ expect(PullRequestsService.updateComment2).toHaveBeenCalledWith(mockProjectKey, '501', mockPullRequestId, mockRepositorySlug, { version: 2, text: 'Edited text' });
2110
+ });
2111
+ it('should support combining text, state, and severity in a single update', async () => {
2112
+ const mockComment = { id: 502, version: 4, text: 'New body', state: 'RESOLVED', severity: 'BLOCKER' };
2113
+ PullRequestsService.updateComment2.mockResolvedValue(mockComment);
2114
+ await bitbucketService.updatePullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, '502', 3, 'New body', 'RESOLVED', 'BLOCKER');
2115
+ expect(PullRequestsService.updateComment2).toHaveBeenCalledWith(mockProjectKey, '502', mockPullRequestId, mockRepositorySlug, { version: 3, text: 'New body', state: 'RESOLVED', severity: 'BLOCKER' });
2116
+ });
2117
+ it('should propagate API errors', async () => {
2118
+ PullRequestsService.updateComment2.mockRejectedValue(new Error('Conflict'));
2119
+ const result = await bitbucketService.updatePullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, '503', 1, undefined, 'RESOLVED');
2120
+ expect(result.success).toBe(false);
2121
+ expect(result.error).toBe('Conflict');
2122
+ });
2123
+ });
2124
+ describe('postPullRequestComment - severity flag', () => {
2125
+ it('should include severity: BLOCKER in the request body when severity is BLOCKER', async () => {
2126
+ const mockComment = { id: 200, text: 'Task comment', author: { displayName: 'Test User' } };
2127
+ PullRequestsService.createComment2.mockResolvedValue(mockComment);
2128
+ const result = await bitbucketService.postPullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'Task comment', undefined, // parentId
2129
+ undefined, // filePath
2130
+ undefined, // startLine
2131
+ undefined, // startLineType
2132
+ undefined, // line
2133
+ undefined, // lineType
2134
+ undefined, // pending
2135
+ 'BLOCKER' // severity
2136
+ );
2137
+ expect(result.success).toBe(true);
2138
+ expect(PullRequestsService.createComment2).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, { text: 'Task comment', severity: 'BLOCKER' });
2139
+ });
2140
+ it('should NOT include severity in the request body when severity is omitted', async () => {
2141
+ const mockComment = { id: 201, text: 'Normal comment', author: { displayName: 'Test User' } };
2142
+ PullRequestsService.createComment2.mockResolvedValue(mockComment);
2143
+ await bitbucketService.postPullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'Normal comment');
2144
+ expect(PullRequestsService.createComment2).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, { text: 'Normal comment' } // no severity field
2145
+ );
2146
+ });
2147
+ it('should support severity BLOCKER combined with a file/line anchor', async () => {
2148
+ const mockComment = { id: 202, text: 'Inline task', author: { displayName: 'Test User' } };
2149
+ PullRequestsService.createComment2.mockResolvedValue(mockComment);
2150
+ await bitbucketService.postPullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'Inline task', undefined, // parentId
2151
+ 'src/index.ts', // filePath
2152
+ undefined, // startLine
2153
+ undefined, // startLineType
2154
+ 10, // line
2155
+ 'ADDED', // lineType
2156
+ undefined, // pending
2157
+ 'BLOCKER' // severity
2158
+ );
2159
+ expect(PullRequestsService.createComment2).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, {
2160
+ text: 'Inline task',
2161
+ severity: 'BLOCKER',
2162
+ anchor: {
2163
+ path: 'src/index.ts',
2164
+ diffType: 'EFFECTIVE',
2165
+ line: 10,
2166
+ lineType: 'ADDED',
2167
+ fileType: 'TO'
2168
+ }
2169
+ });
2170
+ });
2171
+ });
2172
+ describe('postPullRequestComment - pending flag', () => {
2173
+ it('should include state: PENDING in the request body when pending is true', async () => {
2174
+ const mockComment = { id: 99, text: 'Draft comment', author: { displayName: 'Test User' } };
2175
+ PullRequestsService.createComment2.mockResolvedValue(mockComment);
2176
+ const result = await bitbucketService.postPullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'Draft comment', undefined, // parentId
2177
+ undefined, // filePath
2178
+ undefined, // startLine
2179
+ undefined, // startLineType
2180
+ undefined, // line
2181
+ undefined, // lineType
2182
+ true // pending
2183
+ );
2184
+ expect(result.success).toBe(true);
2185
+ expect(PullRequestsService.createComment2).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, { text: 'Draft comment', state: 'PENDING' });
2186
+ });
2187
+ it('should NOT include pending in the request body when pending is false or omitted', async () => {
2188
+ const mockComment = { id: 100, text: 'Normal comment', author: { displayName: 'Test User' } };
2189
+ PullRequestsService.createComment2.mockResolvedValue(mockComment);
2190
+ await bitbucketService.postPullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'Normal comment');
2191
+ expect(PullRequestsService.createComment2).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, { text: 'Normal comment' } // no pending field
2192
+ );
2193
+ });
2194
+ it('should support state: PENDING combined with a file anchor', async () => {
2195
+ const mockComment = { id: 101, text: 'Pending file comment', author: { displayName: 'Test User' } };
2196
+ PullRequestsService.createComment2.mockResolvedValue(mockComment);
2197
+ await bitbucketService.postPullRequestComment(mockProjectKey, mockRepositorySlug, mockPullRequestId, 'Pending file comment', undefined, // parentId
2198
+ 'src/index.ts', // filePath
2199
+ undefined, // startLine
2200
+ undefined, // startLineType
2201
+ 10, // line
2202
+ 'ADDED', // lineType
2203
+ true // pending
2204
+ );
2205
+ expect(PullRequestsService.createComment2).toHaveBeenCalledWith(mockProjectKey, mockPullRequestId, mockRepositorySlug, {
2206
+ text: 'Pending file comment',
2207
+ state: 'PENDING',
2208
+ anchor: {
2209
+ path: 'src/index.ts',
2210
+ diffType: 'EFFECTIVE',
2211
+ line: 10,
2212
+ lineType: 'ADDED',
2213
+ fileType: 'TO'
2214
+ }
2215
+ });
2216
+ });
2217
+ });
2218
+ describe('submitPullRequestReview', () => {
2219
+ const mockUserSlug = 'test-user';
2220
+ it('should submit a NEEDS_WORK review and call updateStatus with correct args', async () => {
2221
+ const mockParticipant = {
2222
+ user: { name: mockUserSlug },
2223
+ role: 'REVIEWER',
2224
+ status: 'NEEDS_WORK'
2225
+ };
2226
+ PullRequestsService.updateStatus.mockResolvedValue(mockParticipant);
2227
+ const result = await bitbucketService.submitPullRequestReview(mockProjectKey, mockRepositorySlug, mockPullRequestId, mockUserSlug, 'NEEDS_WORK');
2228
+ expect(result.success).toBe(true);
2229
+ expect(result.data).toBe(mockParticipant);
2230
+ expect(PullRequestsService.updateStatus).toHaveBeenCalledWith(mockProjectKey, mockUserSlug, mockPullRequestId, mockRepositorySlug, { status: 'NEEDS_WORK' });
2231
+ });
2232
+ it('should submit an APPROVED review', async () => {
2233
+ const mockParticipant = { user: { name: mockUserSlug }, status: 'APPROVED' };
2234
+ PullRequestsService.updateStatus.mockResolvedValue(mockParticipant);
2235
+ const result = await bitbucketService.submitPullRequestReview(mockProjectKey, mockRepositorySlug, mockPullRequestId, mockUserSlug, 'APPROVED');
2236
+ expect(result.success).toBe(true);
2237
+ expect(PullRequestsService.updateStatus).toHaveBeenCalledWith(mockProjectKey, mockUserSlug, mockPullRequestId, mockRepositorySlug, { status: 'APPROVED' });
2238
+ });
2239
+ it('should include lastReviewedCommit when provided', async () => {
2240
+ const mockParticipant = { user: { name: mockUserSlug }, status: 'NEEDS_WORK' };
2241
+ PullRequestsService.updateStatus.mockResolvedValue(mockParticipant);
2242
+ await bitbucketService.submitPullRequestReview(mockProjectKey, mockRepositorySlug, mockPullRequestId, mockUserSlug, 'NEEDS_WORK', 'abc123def456');
2243
+ expect(PullRequestsService.updateStatus).toHaveBeenCalledWith(mockProjectKey, mockUserSlug, mockPullRequestId, mockRepositorySlug, { status: 'NEEDS_WORK', lastReviewedCommit: 'abc123def456' });
2244
+ });
2245
+ it('should handle API errors gracefully', async () => {
2246
+ const mockError = new Error('Forbidden');
2247
+ PullRequestsService.updateStatus.mockRejectedValue(mockError);
2248
+ const result = await bitbucketService.submitPullRequestReview(mockProjectKey, mockRepositorySlug, mockPullRequestId, mockUserSlug, 'APPROVED');
2249
+ expect(result.success).toBe(false);
2250
+ expect(result.error).toBe('Forbidden');
2251
+ });
2252
+ });
2253
+ describe('getUser', () => {
2254
+ it('should fetch a user by exact slug', async () => {
2255
+ const mockUser = { slug: 'jsmith', displayName: 'John Smith', emailAddress: 'jsmith@example.com' };
2256
+ mockRequest.mockResolvedValue(mockUser);
2257
+ const result = await bitbucketService.getUser('jsmith', undefined);
2258
+ expect(result.success).toBe(true);
2259
+ expect(result.data).toEqual(mockUser);
2260
+ expect(mockRequest).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({
2261
+ method: 'GET',
2262
+ url: '/api/latest/users/{userSlug}',
2263
+ path: { userSlug: 'jsmith' }
2264
+ }));
2265
+ });
2266
+ it('should search for users by filter string', async () => {
2267
+ const mockUsers = { values: [{ slug: 'jsmith', displayName: 'John Smith' }], size: 1, isLastPage: true };
2268
+ mockRequest.mockResolvedValue(mockUsers);
2269
+ const result = await bitbucketService.getUser(undefined, 'John');
2270
+ expect(result.success).toBe(true);
2271
+ expect(result.data).toEqual(mockUsers);
2272
+ expect(mockRequest).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({
2273
+ method: 'GET',
2274
+ url: '/api/latest/users',
2275
+ query: { filter: 'John' }
2276
+ }));
2277
+ });
2278
+ it('should handle API errors gracefully', async () => {
2279
+ mockRequest.mockRejectedValue(new Error('Not Found'));
2280
+ const result = await bitbucketService.getUser('nonexistent', undefined);
2281
+ expect(result.success).toBe(false);
2282
+ expect(result.error).toBe('Not Found');
2283
+ });
2284
+ });
2285
+ describe('case-insensitive project keys and repository slugs', () => {
2286
+ it('should uppercase projectKey and lowercase repositorySlug for getPullRequests', async () => {
2287
+ const mockData = { values: [], size: 0, isLastPage: true };
2288
+ PullRequestsService.getPage.mockResolvedValue(mockData);
2289
+ await bitbucketService.getPullRequests('test', 'Test-Repo');
2290
+ expect(PullRequestsService.getPage).toHaveBeenCalledWith('TEST', 'test-repo', undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, 25);
2291
+ });
2292
+ it('should uppercase projectKey and lowercase repositorySlug for getPullRequest', async () => {
2293
+ const mockData = { id: 1, title: 'Test PR' };
2294
+ PullRequestsService.get3.mockResolvedValue(mockData);
2295
+ await bitbucketService.getPullRequest('test', 'Test-Repo', '1');
2296
+ expect(PullRequestsService.get3).toHaveBeenCalledWith('TEST', '1', 'test-repo');
2297
+ });
2298
+ it('should uppercase projectKey and lowercase repositorySlug for getPullRequestChanges', async () => {
2299
+ const mockData = { values: [], size: 0, isLastPage: true };
2300
+ PullRequestsService.streamChanges1.mockResolvedValue(mockData);
2301
+ await bitbucketService.getPullRequestChanges('test', 'Test-Repo', '1');
2302
+ expect(PullRequestsService.streamChanges1).toHaveBeenCalledWith('TEST', '1', 'test-repo', undefined, undefined, undefined, undefined, undefined, 25);
2303
+ });
2304
+ it('should uppercase projectKey and lowercase repositorySlug for createPullRequest', async () => {
2305
+ const mockData = { id: 1, title: 'New PR' };
2306
+ PullRequestsService.create.mockResolvedValue(mockData);
2307
+ await bitbucketService.createPullRequest('test', 'Test-Repo', 'title', 'desc', 'refs/heads/feature', 'refs/heads/main');
2308
+ expect(PullRequestsService.create).toHaveBeenCalledWith('TEST', 'test-repo', expect.objectContaining({
2309
+ title: 'title',
2310
+ fromRef: expect.objectContaining({
2311
+ repository: expect.objectContaining({
2312
+ slug: 'test-repo',
2313
+ project: { key: 'TEST' }
2314
+ })
2315
+ })
2316
+ }));
2317
+ });
2318
+ it('should uppercase projectKey and lowercase repositorySlug for getRequiredReviewers', async () => {
2319
+ const mockData = [];
2320
+ PullRequestsService.getReviewers.mockResolvedValue(mockData);
2321
+ await bitbucketService.getRequiredReviewers('test', 'Test-Repo', 'refs/heads/feature', 'refs/heads/main');
2322
+ expect(PullRequestsService.getReviewers).toHaveBeenCalledWith('TEST', 'test-repo', undefined, undefined, 'refs/heads/feature', 'refs/heads/main');
2323
+ });
2324
+ });
2325
+ describe('pull request operations', () => {
2326
+ it('should delete a pull request comment and return an ack', async () => {
2327
+ PullRequestsService.deleteComment2.mockResolvedValue(undefined);
2328
+ const result = await bitbucketService.deletePullRequestComment('test', 'Test-Repo', '123', '99', 4);
2329
+ expect(result.success).toBe(true);
2330
+ expect(result.data).toEqual({ deleted: true, commentId: '99' });
2331
+ expect(PullRequestsService.deleteComment2).toHaveBeenCalledWith('TEST', '99', '123', 'test-repo', '4');
2332
+ });
2333
+ it('should preserve the error field when comment delete fails', async () => {
2334
+ PullRequestsService.deleteComment2.mockRejectedValue(new Error('API Error'));
2335
+ const result = await bitbucketService.deletePullRequestComment('TEST', 'test-repo', '123', '99', 4);
2336
+ expect(result.success).toBe(false);
2337
+ expect(result.error).toBeDefined();
2338
+ });
2339
+ it('should apply a suggestion with a full body', async () => {
2340
+ PullRequestsService.applySuggestion.mockResolvedValue(undefined);
2341
+ const result = await bitbucketService.applyPullRequestSuggestion('test', 'Test-Repo', '123', '99', 2, 5, 'apply fix', 1);
2342
+ expect(result.success).toBe(true);
2343
+ expect(result.data).toEqual({ applied: true, commentId: '99' });
2344
+ expect(PullRequestsService.applySuggestion).toHaveBeenCalledWith('TEST', '99', '123', 'test-repo', {
2345
+ commentVersion: 2,
2346
+ pullRequestVersion: 5,
2347
+ message: 'apply fix',
2348
+ suggestionIndex: 1
2349
+ });
2350
+ });
2351
+ it('should apply a suggestion omitting the optional suggestion index', async () => {
2352
+ PullRequestsService.applySuggestion.mockResolvedValue(undefined);
2353
+ await bitbucketService.applyPullRequestSuggestion('TEST', 'test-repo', '123', '99', 2, 5, 'apply fix');
2354
+ expect(PullRequestsService.applySuggestion).toHaveBeenCalledWith('TEST', '99', '123', 'test-repo', {
2355
+ commentVersion: 2,
2356
+ pullRequestVersion: 5,
2357
+ message: 'apply fix'
2358
+ });
2359
+ });
2360
+ it('should watch a pull request and return an ack', async () => {
2361
+ PullRequestsService.watch1.mockResolvedValue(undefined);
2362
+ const result = await bitbucketService.watchPullRequest('test', 'Test-Repo', '123');
2363
+ expect(result.success).toBe(true);
2364
+ expect(result.data).toEqual({ watching: true, pullRequestId: '123' });
2365
+ expect(PullRequestsService.watch1).toHaveBeenCalledWith('TEST', '123', 'test-repo');
2366
+ });
2367
+ it('should unwatch a pull request and return an ack', async () => {
2368
+ PullRequestsService.unwatch1.mockResolvedValue(undefined);
2369
+ const result = await bitbucketService.unwatchPullRequest('test', 'Test-Repo', '123');
2370
+ expect(result.success).toBe(true);
2371
+ expect(result.data).toEqual({ watching: false, pullRequestId: '123' });
2372
+ expect(PullRequestsService.unwatch1).toHaveBeenCalledWith('TEST', '123', 'test-repo');
2373
+ });
2374
+ it('should preserve the error field when watch fails', async () => {
2375
+ PullRequestsService.watch1.mockRejectedValue(new Error('API Error'));
2376
+ const result = await bitbucketService.watchPullRequest('TEST', 'test-repo', '123');
2377
+ expect(result.success).toBe(false);
2378
+ expect(result.error).toBeDefined();
2379
+ });
2380
+ });
2381
+ describe('repository CRUD', () => {
2382
+ it('should create a repository with default scm', async () => {
2383
+ const mockData = { slug: 'new-repo' };
2384
+ ProjectService.createRepository.mockResolvedValue(mockData);
2385
+ const result = await bitbucketService.createRepository('test', 'New Repo');
2386
+ expect(result.success).toBe(true);
2387
+ expect(result.data).toBe(mockData);
2388
+ expect(ProjectService.createRepository).toHaveBeenCalledWith('TEST', {
2389
+ name: 'New Repo',
2390
+ scmId: 'git'
2391
+ });
2392
+ });
2393
+ it('should create a repository with a custom scm and default branch', async () => {
2394
+ ProjectService.createRepository.mockResolvedValue({});
2395
+ await bitbucketService.createRepository('TEST', 'Repo', 'hg', 'main');
2396
+ expect(ProjectService.createRepository).toHaveBeenCalledWith('TEST', {
2397
+ name: 'Repo',
2398
+ scmId: 'hg',
2399
+ defaultBranch: 'main'
2400
+ });
2401
+ });
2402
+ it('should handle errors when creating a repository', async () => {
2403
+ ProjectService.createRepository.mockRejectedValue(new Error('API Error'));
2404
+ const result = await bitbucketService.createRepository('TEST', 'Repo');
2405
+ expect(result.success).toBe(false);
2406
+ expect(result.error).toBeDefined();
2407
+ });
2408
+ it('should update a repository with only the provided fields', async () => {
2409
+ const mockData = { slug: 'renamed' };
2410
+ ProjectService.updateRepository.mockResolvedValue(mockData);
2411
+ const result = await bitbucketService.updateRepository('test', 'Test-Repo', 'Renamed', 'desc', 'main', 'dest');
2412
+ expect(result.success).toBe(true);
2413
+ expect(result.data).toBe(mockData);
2414
+ expect(ProjectService.updateRepository).toHaveBeenCalledWith('TEST', 'test-repo', {
2415
+ name: 'Renamed',
2416
+ description: 'desc',
2417
+ defaultBranch: 'main',
2418
+ project: { key: 'DEST' }
2419
+ });
2420
+ });
2421
+ it('should send an empty body when no update fields are provided', async () => {
2422
+ ProjectService.updateRepository.mockResolvedValue({});
2423
+ await bitbucketService.updateRepository('TEST', 'test-repo');
2424
+ expect(ProjectService.updateRepository).toHaveBeenCalledWith('TEST', 'test-repo', {});
2425
+ });
2426
+ it('should fork a repository into a target project', async () => {
2427
+ const mockData = { slug: 'fork' };
2428
+ ProjectService.forkRepository.mockResolvedValue(mockData);
2429
+ const result = await bitbucketService.forkRepository('test', 'Test-Repo', 'my-fork', 'dest');
2430
+ expect(result.success).toBe(true);
2431
+ expect(result.data).toBe(mockData);
2432
+ expect(ProjectService.forkRepository).toHaveBeenCalledWith('TEST', 'test-repo', {
2433
+ name: 'my-fork',
2434
+ project: { key: 'DEST' }
2435
+ });
2436
+ });
2437
+ it('should fork a repository with an empty body when no options provided', async () => {
2438
+ ProjectService.forkRepository.mockResolvedValue({});
2439
+ await bitbucketService.forkRepository('TEST', 'test-repo');
2440
+ expect(ProjectService.forkRepository).toHaveBeenCalledWith('TEST', 'test-repo', {});
2441
+ });
2442
+ it('should delete a repository and return an ack', async () => {
2443
+ ProjectService.deleteRepository.mockResolvedValue(undefined);
2444
+ const result = await bitbucketService.deleteRepository('test', 'Test-Repo');
2445
+ expect(result.success).toBe(true);
2446
+ expect(result.data).toEqual({
2447
+ scheduledForDeletion: true,
2448
+ projectKey: 'TEST',
2449
+ repositorySlug: 'test-repo'
2450
+ });
2451
+ expect(ProjectService.deleteRepository).toHaveBeenCalledWith('TEST', 'test-repo');
2452
+ });
2453
+ it('should preserve the error field when delete fails', async () => {
2454
+ ProjectService.deleteRepository.mockRejectedValue(new Error('API Error'));
2455
+ const result = await bitbucketService.deleteRepository('TEST', 'test-repo');
2456
+ expect(result.success).toBe(false);
2457
+ expect(result.error).toBeDefined();
2458
+ });
2459
+ });
2460
+ describe('webhooks', () => {
2461
+ it('should get webhooks with normalized keys', async () => {
2462
+ const mockData = { values: [{ id: 1 }], isLastPage: true };
2463
+ RepositoryService.findWebhooks1.mockResolvedValue(mockData);
2464
+ const result = await bitbucketService.getWebhooks('test', 'Test-Repo', 'repo:refs_changed', true);
2465
+ expect(result.success).toBe(true);
2466
+ expect(result.data).toBe(mockData);
2467
+ expect(RepositoryService.findWebhooks1).toHaveBeenCalledWith('TEST', 'test-repo', 'repo:refs_changed', true);
2468
+ });
2469
+ it('should handle errors when getting webhooks', async () => {
2470
+ RepositoryService.findWebhooks1.mockRejectedValue(new Error('API Error'));
2471
+ const result = await bitbucketService.getWebhooks('TEST', 'test-repo');
2472
+ expect(result.success).toBe(false);
2473
+ expect(result.error).toBeDefined();
2474
+ });
2475
+ it('should get a single webhook and stringify the statistics flag', async () => {
2476
+ const mockData = { id: 7, name: 'hook' };
2477
+ RepositoryService.getWebhook1.mockResolvedValue(mockData);
2478
+ const result = await bitbucketService.getWebhook('test', 'Test-Repo', '7', true);
2479
+ expect(result.success).toBe(true);
2480
+ expect(result.data).toBe(mockData);
2481
+ expect(RepositoryService.getWebhook1).toHaveBeenCalledWith('TEST', '7', 'test-repo', 'true');
2482
+ });
2483
+ it('should pass undefined statistics when omitted on getWebhook', async () => {
2484
+ RepositoryService.getWebhook1.mockResolvedValue({});
2485
+ await bitbucketService.getWebhook('TEST', 'test-repo', '7');
2486
+ expect(RepositoryService.getWebhook1).toHaveBeenCalledWith('TEST', '7', 'test-repo', undefined);
2487
+ });
2488
+ it('should create a webhook with a built request body', async () => {
2489
+ const mockData = { id: 9 };
2490
+ RepositoryService.createWebhook1.mockResolvedValue(mockData);
2491
+ const result = await bitbucketService.createWebhook('test', 'Test-Repo', 'my hook', 'https://example.com/hook', ['repo:refs_changed', 'pr:opened'], true, 's3cret', false);
2492
+ expect(result.success).toBe(true);
2493
+ expect(result.data).toBe(mockData);
2494
+ expect(RepositoryService.createWebhook1).toHaveBeenCalledWith('TEST', 'test-repo', {
2495
+ name: 'my hook',
2496
+ url: 'https://example.com/hook',
2497
+ events: ['repo:refs_changed', 'pr:opened'],
2498
+ active: true,
2499
+ configuration: { secret: 's3cret' },
2500
+ sslVerificationRequired: false
2501
+ });
2502
+ });
2503
+ it('should omit optional fields from the webhook body when not provided', async () => {
2504
+ RepositoryService.createWebhook1.mockResolvedValue({ id: 1 });
2505
+ await bitbucketService.createWebhook('TEST', 'test-repo', 'minimal', 'https://example.com/h', ['pr:merged']);
2506
+ expect(RepositoryService.createWebhook1).toHaveBeenCalledWith('TEST', 'test-repo', {
2507
+ name: 'minimal',
2508
+ url: 'https://example.com/h',
2509
+ events: ['pr:merged']
2510
+ });
2511
+ });
2512
+ it('should update a webhook', async () => {
2513
+ const mockData = { id: 5 };
2514
+ RepositoryService.updateWebhook1.mockResolvedValue(mockData);
2515
+ const result = await bitbucketService.updateWebhook('test', 'Test-Repo', '5', 'renamed', 'https://example.com/new', ['pr:declined'], false);
2516
+ expect(result.success).toBe(true);
2517
+ expect(result.data).toBe(mockData);
2518
+ expect(RepositoryService.updateWebhook1).toHaveBeenCalledWith('TEST', '5', 'test-repo', {
2519
+ name: 'renamed',
2520
+ url: 'https://example.com/new',
2521
+ events: ['pr:declined'],
2522
+ active: false
2523
+ });
2524
+ });
2525
+ it('should delete a webhook and return an ack', async () => {
2526
+ RepositoryService.deleteWebhook1.mockResolvedValue(undefined);
2527
+ const result = await bitbucketService.deleteWebhook('test', 'Test-Repo', '5');
2528
+ expect(result.success).toBe(true);
2529
+ expect(result.data).toEqual({ deleted: true, webhookId: '5' });
2530
+ expect(RepositoryService.deleteWebhook1).toHaveBeenCalledWith('TEST', '5', 'test-repo');
2531
+ });
2532
+ it('should preserve the error field when delete fails', async () => {
2533
+ RepositoryService.deleteWebhook1.mockRejectedValue(new Error('API Error'));
2534
+ const result = await bitbucketService.deleteWebhook('TEST', 'test-repo', '5');
2535
+ expect(result.success).toBe(false);
2536
+ expect(result.error).toBeDefined();
2537
+ });
2538
+ });
2539
+ describe('branch restrictions', () => {
2540
+ it('should get branch restrictions with filters and default limit', async () => {
2541
+ const mockData = { values: [{ id: 1 }], isLastPage: true };
2542
+ RepositoryService.getRestrictions1.mockResolvedValue(mockData);
2543
+ const result = await bitbucketService.getBranchRestrictions('test', 'Test-Repo', 'BRANCH', 'refs/heads/master', 'no-deletes');
2544
+ expect(result.success).toBe(true);
2545
+ expect(result.data).toBe(mockData);
2546
+ expect(RepositoryService.getRestrictions1).toHaveBeenCalledWith('TEST', 'test-repo', 'BRANCH', 'refs/heads/master', 'no-deletes', undefined, 25);
2547
+ });
2548
+ it('should create a branch restriction wrapped in a bulk array', async () => {
2549
+ const mockData = { id: 1, type: 'no-deletes' };
2550
+ RepositoryService.createRestrictions1.mockResolvedValue(mockData);
2551
+ const result = await bitbucketService.createBranchRestriction('test', 'Test-Repo', 'no-deletes', 'BRANCH', 'refs/heads/master', 'master', ['admin'], ['devs'], [7]);
2552
+ expect(result.success).toBe(true);
2553
+ expect(result.data).toBe(mockData);
2554
+ expect(RepositoryService.createRestrictions1).toHaveBeenCalledWith('TEST', 'test-repo', [{
2555
+ type: 'no-deletes',
2556
+ matcher: { id: 'refs/heads/master', displayId: 'master', type: { id: 'BRANCH' } },
2557
+ userSlugs: ['admin'],
2558
+ groupNames: ['devs'],
2559
+ accessKeyIds: [7]
2560
+ }]);
2561
+ });
2562
+ it('should omit exemption fields when not provided', async () => {
2563
+ RepositoryService.createRestrictions1.mockResolvedValue({});
2564
+ await bitbucketService.createBranchRestriction('TEST', 'test-repo', 'read-only', 'ANY_REF', 'ANY_REF');
2565
+ expect(RepositoryService.createRestrictions1).toHaveBeenCalledWith('TEST', 'test-repo', [{
2566
+ type: 'read-only',
2567
+ matcher: { id: 'ANY_REF', displayId: 'ANY_REF', type: { id: 'ANY_REF' } }
2568
+ }]);
2569
+ });
2570
+ it('should handle errors when creating a restriction', async () => {
2571
+ RepositoryService.createRestrictions1.mockRejectedValue(new Error('API Error'));
2572
+ const result = await bitbucketService.createBranchRestriction('TEST', 'test-repo', 'read-only', 'ANY_REF', 'ANY_REF');
2573
+ expect(result.success).toBe(false);
2574
+ expect(result.error).toBeDefined();
2575
+ });
2576
+ it('should get a single restriction by id', async () => {
2577
+ const mockData = { id: 5 };
2578
+ RepositoryService.getRestriction1.mockResolvedValue(mockData);
2579
+ const result = await bitbucketService.getBranchRestriction('test', 'Test-Repo', '5');
2580
+ expect(result.success).toBe(true);
2581
+ expect(result.data).toBe(mockData);
2582
+ expect(RepositoryService.getRestriction1).toHaveBeenCalledWith('TEST', '5', 'test-repo');
2583
+ });
2584
+ it('should delete a restriction and return an ack', async () => {
2585
+ RepositoryService.deleteRestriction1.mockResolvedValue(undefined);
2586
+ const result = await bitbucketService.deleteBranchRestriction('test', 'Test-Repo', '5');
2587
+ expect(result.success).toBe(true);
2588
+ expect(result.data).toEqual({ deleted: true, id: '5' });
2589
+ expect(RepositoryService.deleteRestriction1).toHaveBeenCalledWith('TEST', '5', 'test-repo');
2590
+ });
2591
+ it('should preserve the error field when delete fails', async () => {
2592
+ RepositoryService.deleteRestriction1.mockRejectedValue(new Error('API Error'));
2593
+ const result = await bitbucketService.deleteBranchRestriction('TEST', 'test-repo', '5');
2594
+ expect(result.success).toBe(false);
2595
+ expect(result.error).toBeDefined();
2596
+ });
2597
+ });
2598
+ describe('searchCode', () => {
2599
+ const { request: mockRequest } = require('../bitbucket-client/core/request.js');
2600
+ it('should search code with the default page size', async () => {
2601
+ const mockData = { code: { count: 1, values: [{ repository: { slug: 'demo' } }] } };
2602
+ mockRequest.mockResolvedValue(mockData);
2603
+ const result = await bitbucketService.searchCode('app');
2604
+ expect(result.success).toBe(true);
2605
+ expect(result.data).toBe(mockData);
2606
+ expect(mockRequest).toHaveBeenCalledWith(expect.any(Object), {
2607
+ method: 'POST',
2608
+ url: '/search/latest/search',
2609
+ body: {
2610
+ query: 'app',
2611
+ entities: { code: {} },
2612
+ limits: { primary: 25 }
2613
+ },
2614
+ mediaType: 'application/json',
2615
+ errors: {
2616
+ 400: 'The search query was malformed.',
2617
+ 401: 'The currently authenticated user is not permitted to search.',
2618
+ },
2619
+ });
2620
+ });
2621
+ it('should pass explicit primary and secondary limits', async () => {
2622
+ mockRequest.mockResolvedValue({ code: { count: 0, values: [] } });
2623
+ await bitbucketService.searchCode('repo:demo TODO', 10, 5);
2624
+ expect(mockRequest).toHaveBeenCalledWith(expect.any(Object), expect.objectContaining({
2625
+ method: 'POST',
2626
+ url: '/search/latest/search',
2627
+ body: {
2628
+ query: 'repo:demo TODO',
2629
+ entities: { code: {} },
2630
+ limits: { primary: 10, secondary: 5 }
2631
+ },
2632
+ }));
2633
+ });
2634
+ it('should handle errors when searching', async () => {
2635
+ mockRequest.mockRejectedValue(new Error('API Error'));
2636
+ const result = await bitbucketService.searchCode('app');
2637
+ expect(result.success).toBe(false);
2638
+ expect(result.error).toBeDefined();
2639
+ });
2640
+ });
2641
+ describe('default reviewer conditions', () => {
2642
+ it('should get default reviewer conditions with normalized keys', async () => {
2643
+ const mockData = [{ id: 1 }];
2644
+ PullRequestsService.getPullRequestConditions1.mockResolvedValue(mockData);
2645
+ const result = await bitbucketService.getDefaultReviewerConditions('test', 'Test-Repo');
2646
+ expect(result.success).toBe(true);
2647
+ expect(result.data).toBe(mockData);
2648
+ expect(PullRequestsService.getPullRequestConditions1).toHaveBeenCalledWith('TEST', 'test-repo');
2649
+ });
2650
+ it('should create a condition mapping reviewer ids and matchers', async () => {
2651
+ const mockData = { id: 1 };
2652
+ PullRequestsService.createPullRequestCondition1.mockResolvedValue(mockData);
2653
+ const result = await bitbucketService.createDefaultReviewerCondition('test', 'Test-Repo', 'ANY_REF', 'ANY_REF', 'BRANCH', 'refs/heads/main', [52], 1, undefined, 'main');
2654
+ expect(result.success).toBe(true);
2655
+ expect(result.data).toBe(mockData);
2656
+ expect(PullRequestsService.createPullRequestCondition1).toHaveBeenCalledWith('TEST', 'test-repo', {
2657
+ reviewers: [{ id: 52 }],
2658
+ sourceMatcher: { id: 'ANY_REF', displayId: 'ANY_REF', type: { id: 'ANY_REF' } },
2659
+ targetMatcher: { id: 'refs/heads/main', displayId: 'main', type: { id: 'BRANCH' } },
2660
+ requiredApprovals: 1
2661
+ });
2662
+ });
2663
+ it('should omit requiredApprovals when not provided', async () => {
2664
+ PullRequestsService.createPullRequestCondition1.mockResolvedValue({});
2665
+ await bitbucketService.createDefaultReviewerCondition('TEST', 'test-repo', 'ANY_REF', 'ANY_REF', 'ANY_REF', 'ANY_REF', [52]);
2666
+ expect(PullRequestsService.createPullRequestCondition1).toHaveBeenCalledWith('TEST', 'test-repo', {
2667
+ reviewers: [{ id: 52 }],
2668
+ sourceMatcher: { id: 'ANY_REF', displayId: 'ANY_REF', type: { id: 'ANY_REF' } },
2669
+ targetMatcher: { id: 'ANY_REF', displayId: 'ANY_REF', type: { id: 'ANY_REF' } }
2670
+ });
2671
+ });
2672
+ it('should handle errors when creating a condition', async () => {
2673
+ PullRequestsService.createPullRequestCondition1.mockRejectedValue(new Error('API Error'));
2674
+ const result = await bitbucketService.createDefaultReviewerCondition('TEST', 'test-repo', 'ANY_REF', 'ANY_REF', 'ANY_REF', 'ANY_REF', [52]);
2675
+ expect(result.success).toBe(false);
2676
+ expect(result.error).toBeDefined();
2677
+ });
2678
+ it('should update a condition passing the id as a string', async () => {
2679
+ const mockData = { id: 1, requiredApprovals: 2 };
2680
+ PullRequestsService.updatePullRequestCondition1.mockResolvedValue(mockData);
2681
+ const result = await bitbucketService.updateDefaultReviewerCondition('test', 'Test-Repo', '1', 'ANY_REF', 'ANY_REF', 'BRANCH', 'refs/heads/main', [52], 2, undefined, 'main');
2682
+ expect(result.success).toBe(true);
2683
+ expect(result.data).toBe(mockData);
2684
+ expect(PullRequestsService.updatePullRequestCondition1).toHaveBeenCalledWith('TEST', '1', 'test-repo', {
2685
+ reviewers: [{ id: 52 }],
2686
+ sourceMatcher: { id: 'ANY_REF', displayId: 'ANY_REF', type: { id: 'ANY_REF' } },
2687
+ targetMatcher: { id: 'refs/heads/main', displayId: 'main', type: { id: 'BRANCH' } },
2688
+ requiredApprovals: 2
2689
+ });
2690
+ });
2691
+ it('should delete a condition coercing the id to a number and return an ack', async () => {
2692
+ PullRequestsService.deletePullRequestCondition1.mockResolvedValue(undefined);
2693
+ const result = await bitbucketService.deleteDefaultReviewerCondition('test', 'Test-Repo', '1');
2694
+ expect(result.success).toBe(true);
2695
+ expect(result.data).toEqual({ deleted: true, id: '1' });
2696
+ expect(PullRequestsService.deletePullRequestCondition1).toHaveBeenCalledWith('TEST', 1, 'test-repo');
2697
+ });
2698
+ it('should preserve the error field when delete fails', async () => {
2699
+ PullRequestsService.deletePullRequestCondition1.mockRejectedValue(new Error('API Error'));
2700
+ const result = await bitbucketService.deleteDefaultReviewerCondition('TEST', 'test-repo', '1');
2701
+ expect(result.success).toBe(false);
2702
+ expect(result.error).toBeDefined();
2703
+ });
2704
+ });
2705
+ describe('required builds merge checks', () => {
2706
+ it('should get merge checks with the default page size', async () => {
2707
+ const mockData = { values: [{ id: 1 }], isLastPage: true };
2708
+ BuildsAndDeploymentsService.getPageOfRequiredBuildsMergeChecks.mockResolvedValue(mockData);
2709
+ const result = await bitbucketService.getRequiredBuildsMergeChecks('test', 'Test-Repo');
2710
+ expect(result.success).toBe(true);
2711
+ expect(result.data).toBe(mockData);
2712
+ expect(BuildsAndDeploymentsService.getPageOfRequiredBuildsMergeChecks).toHaveBeenCalledWith('TEST', 'test-repo', undefined, 25);
2713
+ });
2714
+ it('should create a merge check with a built body', async () => {
2715
+ const mockData = { id: 1 };
2716
+ BuildsAndDeploymentsService.createRequiredBuildsMergeCheck.mockResolvedValue(mockData);
2717
+ const result = await bitbucketService.createRequiredBuildsMergeCheck('test', 'Test-Repo', ['build-foo'], 'BRANCH', 'refs/heads/master', 'master', 'BRANCH', 'refs/heads/dev', 'dev');
2718
+ expect(result.success).toBe(true);
2719
+ expect(result.data).toBe(mockData);
2720
+ expect(BuildsAndDeploymentsService.createRequiredBuildsMergeCheck).toHaveBeenCalledWith('TEST', 'test-repo', {
2721
+ buildParentKeys: ['build-foo'],
2722
+ refMatcher: { id: 'refs/heads/master', displayId: 'master', type: { id: 'BRANCH' } },
2723
+ exemptRefMatcher: { id: 'refs/heads/dev', displayId: 'dev', type: { id: 'BRANCH' } }
2724
+ });
2725
+ });
2726
+ it('should omit the exempt matcher when not fully provided', async () => {
2727
+ BuildsAndDeploymentsService.createRequiredBuildsMergeCheck.mockResolvedValue({});
2728
+ await bitbucketService.createRequiredBuildsMergeCheck('TEST', 'test-repo', ['build-foo'], 'ANY_REF', 'ANY_REF');
2729
+ expect(BuildsAndDeploymentsService.createRequiredBuildsMergeCheck).toHaveBeenCalledWith('TEST', 'test-repo', {
2730
+ buildParentKeys: ['build-foo'],
2731
+ refMatcher: { id: 'ANY_REF', displayId: 'ANY_REF', type: { id: 'ANY_REF' } }
2732
+ });
2733
+ });
2734
+ it('should handle errors when creating a merge check', async () => {
2735
+ BuildsAndDeploymentsService.createRequiredBuildsMergeCheck.mockRejectedValue(new Error('API Error'));
2736
+ const result = await bitbucketService.createRequiredBuildsMergeCheck('TEST', 'test-repo', ['build-foo'], 'ANY_REF', 'ANY_REF');
2737
+ expect(result.success).toBe(false);
2738
+ expect(result.error).toBeDefined();
2739
+ });
2740
+ it('should update a merge check coercing the id to a number', async () => {
2741
+ const mockData = { id: 1 };
2742
+ BuildsAndDeploymentsService.updateRequiredBuildsMergeCheck.mockResolvedValue(mockData);
2743
+ const result = await bitbucketService.updateRequiredBuildsMergeCheck('test', 'Test-Repo', '1', ['build-foo', 'build-bar'], 'BRANCH', 'refs/heads/master', 'master');
2744
+ expect(result.success).toBe(true);
2745
+ expect(result.data).toBe(mockData);
2746
+ expect(BuildsAndDeploymentsService.updateRequiredBuildsMergeCheck).toHaveBeenCalledWith('TEST', 1, 'test-repo', {
2747
+ buildParentKeys: ['build-foo', 'build-bar'],
2748
+ refMatcher: { id: 'refs/heads/master', displayId: 'master', type: { id: 'BRANCH' } }
2749
+ });
2750
+ });
2751
+ it('should delete a merge check coercing the id and return an ack', async () => {
2752
+ BuildsAndDeploymentsService.deleteRequiredBuildsMergeCheck.mockResolvedValue(undefined);
2753
+ const result = await bitbucketService.deleteRequiredBuildsMergeCheck('test', 'Test-Repo', '1');
2754
+ expect(result.success).toBe(true);
2755
+ expect(result.data).toEqual({ deleted: true, id: '1' });
2756
+ expect(BuildsAndDeploymentsService.deleteRequiredBuildsMergeCheck).toHaveBeenCalledWith('TEST', 1, 'test-repo');
2757
+ });
2758
+ it('should preserve the error field when delete fails', async () => {
2759
+ BuildsAndDeploymentsService.deleteRequiredBuildsMergeCheck.mockRejectedValue(new Error('API Error'));
2760
+ const result = await bitbucketService.deleteRequiredBuildsMergeCheck('TEST', 'test-repo', '1');
2761
+ expect(result.success).toBe(false);
2762
+ expect(result.error).toBeDefined();
2763
+ });
2764
+ });
2765
+ describe('project CRUD', () => {
2766
+ it('should create a project', async () => {
2767
+ const mockData = { key: 'PROJ' };
2768
+ ProjectService.createProject.mockResolvedValue(mockData);
2769
+ const result = await bitbucketService.createProject('proj', 'My Project', 'desc');
2770
+ expect(result.success).toBe(true);
2771
+ expect(result.data).toBe(mockData);
2772
+ expect(ProjectService.createProject).toHaveBeenCalledWith({
2773
+ key: 'PROJ',
2774
+ name: 'My Project',
2775
+ description: 'desc'
2776
+ });
2777
+ });
2778
+ it('should omit description when not provided on create', async () => {
2779
+ ProjectService.createProject.mockResolvedValue({});
2780
+ await bitbucketService.createProject('PROJ', 'My Project');
2781
+ expect(ProjectService.createProject).toHaveBeenCalledWith({
2782
+ key: 'PROJ',
2783
+ name: 'My Project'
2784
+ });
2785
+ });
2786
+ it('should handle errors when creating a project', async () => {
2787
+ ProjectService.createProject.mockRejectedValue(new Error('API Error'));
2788
+ const result = await bitbucketService.createProject('PROJ', 'My Project');
2789
+ expect(result.success).toBe(false);
2790
+ expect(result.error).toBeDefined();
2791
+ });
2792
+ it('should update a project with only the provided fields', async () => {
2793
+ const mockData = { key: 'PROJ' };
2794
+ ProjectService.updateProject.mockResolvedValue(mockData);
2795
+ const result = await bitbucketService.updateProject('proj', 'Renamed', 'new desc');
2796
+ expect(result.success).toBe(true);
2797
+ expect(result.data).toBe(mockData);
2798
+ expect(ProjectService.updateProject).toHaveBeenCalledWith('PROJ', {
2799
+ key: 'PROJ',
2800
+ name: 'Renamed',
2801
+ description: 'new desc'
2802
+ });
2803
+ });
2804
+ it('should update a project sending only the key when nothing else provided', async () => {
2805
+ ProjectService.updateProject.mockResolvedValue({});
2806
+ await bitbucketService.updateProject('PROJ');
2807
+ expect(ProjectService.updateProject).toHaveBeenCalledWith('PROJ', { key: 'PROJ' });
2808
+ });
2809
+ it('should delete a project and return an ack', async () => {
2810
+ ProjectService.deleteProject.mockResolvedValue(undefined);
2811
+ const result = await bitbucketService.deleteProject('proj');
2812
+ expect(result.success).toBe(true);
2813
+ expect(result.data).toEqual({ deleted: true, key: 'PROJ' });
2814
+ expect(ProjectService.deleteProject).toHaveBeenCalledWith('PROJ');
2815
+ });
2816
+ it('should preserve the error field when delete fails', async () => {
2817
+ ProjectService.deleteProject.mockRejectedValue(new Error('API Error'));
2818
+ const result = await bitbucketService.deleteProject('PROJ');
2819
+ expect(result.success).toBe(false);
2820
+ expect(result.error).toBeDefined();
2821
+ });
2822
+ });
2823
+ });
2824
+ //# sourceMappingURL=bitbucket-service.test.js.map