@scality/data-browser-library 1.0.0-preview.8 → 1.0.1

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 (303) hide show
  1. package/dist/components/DataBrowserUI.d.ts +12 -0
  2. package/dist/components/DataBrowserUI.js +99 -0
  3. package/dist/components/Editor.d.ts +1 -1
  4. package/dist/components/Editor.js +3 -3
  5. package/dist/components/__tests__/BucketAccessor.test.js +214 -0
  6. package/dist/components/__tests__/BucketCorsPage.test.d.ts +1 -0
  7. package/dist/components/__tests__/BucketCorsPage.test.js +263 -0
  8. package/dist/components/__tests__/BucketCreate.test.d.ts +1 -0
  9. package/dist/components/__tests__/BucketCreate.test.js +574 -0
  10. package/dist/components/__tests__/BucketDetails.test.d.ts +1 -0
  11. package/dist/components/__tests__/BucketDetails.test.js +421 -0
  12. package/dist/components/__tests__/BucketLifecycleFormPage.test.d.ts +14 -0
  13. package/dist/components/__tests__/BucketLifecycleFormPage.test.js +618 -0
  14. package/dist/components/__tests__/BucketLifecycleList.test.d.ts +1 -0
  15. package/dist/components/__tests__/BucketLifecycleList.test.js +325 -0
  16. package/dist/components/__tests__/BucketList.test.js +495 -81
  17. package/dist/components/__tests__/BucketNotificationFormPage.test.d.ts +1 -0
  18. package/dist/components/__tests__/BucketNotificationFormPage.test.js +348 -0
  19. package/dist/components/__tests__/BucketNotificationList.test.d.ts +1 -0
  20. package/dist/components/__tests__/BucketNotificationList.test.js +379 -0
  21. package/dist/components/__tests__/BucketOverview.test.js +484 -179
  22. package/dist/components/__tests__/BucketPolicyPage.test.js +151 -99
  23. package/dist/components/__tests__/BucketReplicationFormPage.test.d.ts +16 -0
  24. package/dist/components/__tests__/BucketReplicationFormPage.test.js +1757 -0
  25. package/dist/components/__tests__/BucketReplicationList.test.d.ts +1 -0
  26. package/dist/components/__tests__/BucketReplicationList.test.js +344 -0
  27. package/dist/components/__tests__/CreateFolderButton.test.js +56 -56
  28. package/dist/components/__tests__/DeleteBucketButton.test.js +64 -64
  29. package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.d.ts +1 -0
  30. package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.js +196 -0
  31. package/dist/components/__tests__/DeleteObjectButton.test.js +64 -64
  32. package/dist/components/__tests__/EmptyBucketButton.test.d.ts +1 -0
  33. package/dist/components/__tests__/EmptyBucketButton.test.js +302 -0
  34. package/dist/components/__tests__/MetadataSearch.test.js +65 -65
  35. package/dist/components/__tests__/ObjectList.test.js +741 -240
  36. package/dist/components/__tests__/UploadButton.test.js +45 -45
  37. package/dist/components/breadcrumb/Breadcrumb.d.ts +6 -0
  38. package/dist/components/breadcrumb/Breadcrumb.js +37 -0
  39. package/dist/components/breadcrumb/DataBrowserBreadcrumb.d.ts +1 -0
  40. package/dist/components/breadcrumb/DataBrowserBreadcrumb.js +10 -0
  41. package/dist/components/breadcrumb/__tests__/Breadcrumb.test.d.ts +1 -0
  42. package/dist/components/breadcrumb/__tests__/Breadcrumb.test.js +196 -0
  43. package/dist/components/breadcrumb/__tests__/DataBrowserBreadcrumb.test.d.ts +1 -0
  44. package/dist/components/breadcrumb/__tests__/DataBrowserBreadcrumb.test.js +153 -0
  45. package/dist/components/breadcrumb/__tests__/useBreadcrumbPaths.test.d.ts +1 -0
  46. package/dist/components/breadcrumb/__tests__/useBreadcrumbPaths.test.js +134 -0
  47. package/dist/components/breadcrumb/index.d.ts +8 -0
  48. package/dist/components/breadcrumb/index.js +4 -0
  49. package/dist/components/breadcrumb/useBreadcrumbPaths.d.ts +2 -0
  50. package/dist/components/breadcrumb/useBreadcrumbPaths.js +82 -0
  51. package/dist/components/buckets/BucketAccessor.d.ts +2 -0
  52. package/dist/components/buckets/BucketAccessor.js +125 -0
  53. package/dist/components/buckets/BucketConfigEditButton.d.ts +8 -0
  54. package/dist/components/buckets/{BucketPolicyButton.js → BucketConfigEditButton.js} +9 -5
  55. package/dist/components/buckets/BucketCorsPage.d.ts +1 -0
  56. package/dist/components/buckets/BucketCorsPage.js +234 -0
  57. package/dist/components/buckets/BucketCreate.d.ts +50 -0
  58. package/dist/components/buckets/BucketCreate.js +279 -0
  59. package/dist/components/buckets/BucketDetails.d.ts +42 -0
  60. package/dist/components/buckets/BucketDetails.js +256 -40
  61. package/dist/components/buckets/BucketLifecycleFormPage.d.ts +15 -0
  62. package/dist/components/buckets/BucketLifecycleFormPage.js +1086 -0
  63. package/dist/components/buckets/BucketLifecycleList.d.ts +10 -0
  64. package/dist/components/buckets/BucketLifecycleList.js +270 -0
  65. package/dist/components/buckets/BucketList.d.ts +6 -4
  66. package/dist/components/buckets/BucketList.js +161 -94
  67. package/dist/components/buckets/BucketLocation.js +4 -4
  68. package/dist/components/buckets/BucketOverview.d.ts +86 -5
  69. package/dist/components/buckets/BucketOverview.js +481 -192
  70. package/dist/components/buckets/BucketPage.js +44 -22
  71. package/dist/components/buckets/BucketPolicyPage.js +155 -127
  72. package/dist/components/buckets/BucketReplicationFormPage.d.ts +1 -0
  73. package/dist/components/buckets/BucketReplicationFormPage.js +835 -0
  74. package/dist/components/buckets/BucketReplicationList.d.ts +11 -0
  75. package/dist/components/buckets/BucketReplicationList.js +189 -0
  76. package/dist/components/buckets/BucketVersioning.d.ts +4 -0
  77. package/dist/components/buckets/BucketVersioning.js +76 -0
  78. package/dist/components/buckets/DeleteBucketButton.js +8 -8
  79. package/dist/components/buckets/DeleteBucketConfigRuleButton.d.ts +18 -0
  80. package/dist/components/buckets/DeleteBucketConfigRuleButton.js +53 -0
  81. package/dist/components/buckets/EmptyBucketButton.d.ts +5 -0
  82. package/dist/components/buckets/EmptyBucketButton.js +232 -0
  83. package/dist/components/buckets/EmptyBucketSummary.d.ts +9 -0
  84. package/dist/components/buckets/EmptyBucketSummary.js +60 -0
  85. package/dist/components/buckets/EmptyBucketSummaryList.d.ts +13 -0
  86. package/dist/components/buckets/EmptyBucketSummaryList.js +140 -0
  87. package/dist/components/buckets/__tests__/BucketVersioning.test.d.ts +1 -0
  88. package/dist/components/buckets/__tests__/BucketVersioning.test.js +163 -0
  89. package/dist/components/buckets/notifications/BucketNotificationFormPage.d.ts +1 -0
  90. package/dist/components/buckets/notifications/BucketNotificationFormPage.js +316 -0
  91. package/dist/components/buckets/notifications/BucketNotificationList.d.ts +10 -0
  92. package/dist/components/buckets/notifications/BucketNotificationList.js +267 -0
  93. package/dist/components/buckets/notifications/EventsSection.js +145 -29
  94. package/dist/components/buckets/notifications/__tests__/events.test.d.ts +1 -0
  95. package/dist/components/buckets/notifications/__tests__/events.test.js +56 -0
  96. package/dist/components/buckets/notifications/events.d.ts +71 -7
  97. package/dist/components/buckets/notifications/events.js +98 -16
  98. package/dist/components/index.d.ts +27 -13
  99. package/dist/components/index.js +20 -6
  100. package/dist/components/layouts/ArrowNavigation.d.ts +3 -0
  101. package/dist/components/layouts/ArrowNavigation.js +28 -0
  102. package/dist/components/layouts/BrowserPageLayout.d.ts +5 -1
  103. package/dist/components/layouts/BrowserPageLayout.js +10 -5
  104. package/dist/components/objects/CreateFolderButton.d.ts +2 -2
  105. package/dist/components/objects/CreateFolderButton.js +12 -12
  106. package/dist/components/objects/DeleteObjectButton.d.ts +1 -1
  107. package/dist/components/objects/DeleteObjectButton.js +19 -21
  108. package/dist/components/objects/GetPresignedUrlButton.d.ts +7 -0
  109. package/dist/components/objects/GetPresignedUrlButton.js +255 -0
  110. package/dist/components/objects/ObjectDetails/ObjectMetadata.d.ts +2 -2
  111. package/dist/components/objects/ObjectDetails/ObjectMetadata.js +263 -230
  112. package/dist/components/objects/ObjectDetails/ObjectSummary.d.ts +2 -2
  113. package/dist/components/objects/ObjectDetails/ObjectSummary.js +540 -138
  114. package/dist/components/objects/ObjectDetails/ObjectTags.d.ts +2 -2
  115. package/dist/components/objects/ObjectDetails/ObjectTags.js +95 -123
  116. package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.d.ts +1 -0
  117. package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.js +516 -0
  118. package/dist/components/objects/ObjectDetails/__tests__/ObjectSummary.test.d.ts +1 -0
  119. package/dist/components/objects/ObjectDetails/__tests__/ObjectSummary.test.js +1064 -0
  120. package/dist/components/objects/ObjectDetails/index.d.ts +18 -2
  121. package/dist/components/objects/ObjectDetails/index.js +152 -40
  122. package/dist/components/objects/ObjectList.d.ts +12 -10
  123. package/dist/components/objects/ObjectList.js +590 -263
  124. package/dist/components/objects/ObjectLock/EditRetentionButton.d.ts +4 -0
  125. package/dist/components/objects/ObjectLock/EditRetentionButton.js +32 -0
  126. package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.d.ts +3 -0
  127. package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.js +211 -0
  128. package/dist/components/objects/ObjectLock/ObjectLockSettings.d.ts +9 -0
  129. package/dist/components/objects/ObjectLock/ObjectLockSettings.js +159 -0
  130. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.d.ts +8 -0
  131. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.js +39 -0
  132. package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.d.ts +1 -0
  133. package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.js +204 -0
  134. package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.d.ts +1 -0
  135. package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.js +374 -0
  136. package/dist/components/objects/ObjectPage.js +12 -8
  137. package/dist/components/objects/UploadButton.d.ts +3 -3
  138. package/dist/components/objects/UploadButton.js +10 -10
  139. package/dist/components/objects/__tests__/GetPresignedUrlButton.test.d.ts +1 -0
  140. package/dist/components/objects/__tests__/GetPresignedUrlButton.test.js +531 -0
  141. package/dist/components/providers/DataBrowserProvider.d.ts +23 -12
  142. package/dist/components/providers/DataBrowserProvider.js +60 -38
  143. package/dist/components/providers/QueryProvider.d.ts +9 -0
  144. package/dist/components/providers/QueryProvider.js +21 -0
  145. package/dist/components/search/MetadataSearch.js +29 -28
  146. package/dist/components/search/SearchHints.js +1 -1
  147. package/dist/components/ui/ArrayFieldActions.d.ts +36 -0
  148. package/dist/components/ui/ArrayFieldActions.js +43 -0
  149. package/dist/components/ui/ConfirmDeleteRuleModal.d.ts +16 -0
  150. package/dist/components/ui/ConfirmDeleteRuleModal.js +48 -0
  151. package/dist/components/ui/DeleteObjectModalContent.d.ts +1 -1
  152. package/dist/components/ui/DeleteObjectModalContent.js +12 -12
  153. package/dist/components/ui/FilterFormSection.d.ts +44 -0
  154. package/dist/components/ui/FilterFormSection.js +159 -0
  155. package/dist/components/ui/Search.elements.d.ts +2 -2
  156. package/dist/components/ui/Search.elements.js +7 -7
  157. package/dist/components/ui/Table.elements.d.ts +2 -1
  158. package/dist/components/ui/Table.elements.js +18 -12
  159. package/dist/config/__tests__/factory.test.d.ts +1 -0
  160. package/dist/config/__tests__/factory.test.js +311 -0
  161. package/dist/config/factory.d.ts +14 -49
  162. package/dist/config/factory.js +23 -68
  163. package/dist/config/types.d.ts +212 -34
  164. package/dist/contexts/DataBrowserUICustomizationContext.d.ts +27 -0
  165. package/dist/contexts/DataBrowserUICustomizationContext.js +13 -0
  166. package/dist/hooks/__tests__/useAccessibleBuckets.test.d.ts +1 -0
  167. package/dist/hooks/__tests__/useAccessibleBuckets.test.js +145 -0
  168. package/dist/hooks/__tests__/useISVBucketDetection.test.d.ts +1 -0
  169. package/dist/hooks/__tests__/useISVBucketDetection.test.js +188 -0
  170. package/dist/hooks/__tests__/useIsBucketEmpty.test.js +27 -27
  171. package/dist/hooks/__tests__/useLoginMutation.test.d.ts +1 -0
  172. package/dist/hooks/__tests__/useLoginMutation.test.js +194 -0
  173. package/dist/hooks/bucketConfiguration.d.ts +8 -1
  174. package/dist/hooks/bucketConfiguration.js +52 -51
  175. package/dist/hooks/bucketOperations.d.ts +10 -1
  176. package/dist/hooks/bucketOperations.js +10 -9
  177. package/dist/hooks/factories/__tests__/useCreateS3FunctionMutationHook.test.js +80 -80
  178. package/dist/hooks/factories/__tests__/useCreateS3InfiniteQueryHook.test.js +80 -80
  179. package/dist/hooks/factories/__tests__/useCreateS3LoginHook.test.js +44 -44
  180. package/dist/hooks/factories/__tests__/useCreateS3MutationHook.test.js +63 -63
  181. package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.js +95 -52
  182. package/dist/hooks/factories/index.d.ts +4 -4
  183. package/dist/hooks/factories/index.js +2 -2
  184. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.d.ts +2 -2
  185. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.js +16 -13
  186. package/dist/hooks/factories/useCreateS3LoginHook.d.ts +2 -2
  187. package/dist/hooks/factories/useCreateS3LoginHook.js +1 -1
  188. package/dist/hooks/factories/useCreateS3MutationHook.d.ts +3 -3
  189. package/dist/hooks/factories/useCreateS3MutationHook.js +7 -2
  190. package/dist/hooks/factories/useCreateS3QueryHook.d.ts +2 -2
  191. package/dist/hooks/factories/useCreateS3QueryHook.js +29 -3
  192. package/dist/hooks/index.d.ts +19 -8
  193. package/dist/hooks/index.js +16 -5
  194. package/dist/hooks/loginOperations.d.ts +1 -1
  195. package/dist/hooks/loginOperations.js +1 -1
  196. package/dist/hooks/objectOperations.d.ts +2 -2
  197. package/dist/hooks/objectOperations.js +50 -49
  198. package/dist/hooks/presignedOperations.d.ts +4 -4
  199. package/dist/hooks/presignedOperations.js +5 -5
  200. package/dist/hooks/useAccessibleBuckets.d.ts +11 -0
  201. package/dist/hooks/useAccessibleBuckets.js +115 -0
  202. package/dist/hooks/useBatchObjectLegalHold.d.ts +11 -0
  203. package/dist/hooks/useBatchObjectLegalHold.js +48 -0
  204. package/dist/hooks/useBucketConfigEditor.d.ts +31 -0
  205. package/dist/hooks/useBucketConfigEditor.js +82 -0
  206. package/dist/hooks/useDataBrowserNavigate.d.ts +28 -0
  207. package/dist/hooks/useDataBrowserNavigate.js +24 -0
  208. package/dist/hooks/useDeleteBucketConfigRule.d.ts +26 -0
  209. package/dist/hooks/useDeleteBucketConfigRule.js +46 -0
  210. package/dist/hooks/useEmptyBucket.d.ts +27 -0
  211. package/dist/hooks/useEmptyBucket.js +116 -0
  212. package/dist/hooks/useFeatures.d.ts +7 -0
  213. package/dist/hooks/useFeatures.js +8 -0
  214. package/dist/hooks/useISVBucketDetection.d.ts +15 -0
  215. package/dist/hooks/useISVBucketDetection.js +27 -0
  216. package/dist/hooks/useIsBucketEmpty.js +4 -4
  217. package/dist/hooks/useLimitedAccessFlow.d.ts +48 -0
  218. package/dist/hooks/useLimitedAccessFlow.js +23 -0
  219. package/dist/hooks/useS3Client.d.ts +6 -0
  220. package/dist/hooks/useS3Client.js +3 -2
  221. package/dist/hooks/useS3ConfigSwitch.d.ts +11 -0
  222. package/dist/hooks/useS3ConfigSwitch.js +37 -0
  223. package/dist/hooks/useSupportedNotificationEvents.d.ts +6 -0
  224. package/dist/hooks/useSupportedNotificationEvents.js +8 -0
  225. package/dist/hooks/useTableRowSelection.d.ts +9 -0
  226. package/dist/hooks/useTableRowSelection.js +45 -0
  227. package/dist/index.d.ts +6 -6
  228. package/dist/index.js +2 -2
  229. package/dist/schemas/bucketPolicySchema.json +3 -13
  230. package/dist/test/msw/handlers/deleteBucket.d.ts +1 -1
  231. package/dist/test/msw/handlers/deleteBucket.js +20 -10
  232. package/dist/test/msw/handlers/getBucketAcl.d.ts +1 -1
  233. package/dist/test/msw/handlers/getBucketAcl.js +29 -17
  234. package/dist/test/msw/handlers/getBucketLocation.d.ts +1 -1
  235. package/dist/test/msw/handlers/getBucketLocation.js +29 -15
  236. package/dist/test/msw/handlers/getBucketPolicy.d.ts +1 -1
  237. package/dist/test/msw/handlers/getBucketPolicy.js +52 -32
  238. package/dist/test/msw/handlers/headObject.d.ts +1 -1
  239. package/dist/test/msw/handlers/headObject.js +31 -13
  240. package/dist/test/msw/handlers/listBuckets.d.ts +1 -1
  241. package/dist/test/msw/handlers/listBuckets.js +5 -3
  242. package/dist/test/msw/handlers/listObjectVersions.d.ts +1 -1
  243. package/dist/test/msw/handlers/listObjectVersions.js +38 -26
  244. package/dist/test/msw/handlers/listObjects.d.ts +1 -1
  245. package/dist/test/msw/handlers/listObjects.js +35 -23
  246. package/dist/test/msw/handlers/objectLegalHold.d.ts +1 -1
  247. package/dist/test/msw/handlers/objectLegalHold.js +32 -17
  248. package/dist/test/msw/handlers/objectRetention.d.ts +1 -1
  249. package/dist/test/msw/handlers/objectRetention.js +31 -17
  250. package/dist/test/msw/handlers/putBucketAcl.d.ts +1 -1
  251. package/dist/test/msw/handlers/putBucketAcl.js +29 -14
  252. package/dist/test/msw/handlers/putObject.d.ts +1 -1
  253. package/dist/test/msw/handlers/putObject.js +27 -12
  254. package/dist/test/msw/handlers.d.ts +3 -3
  255. package/dist/test/msw/handlers.js +77 -54
  256. package/dist/test/msw/index.d.ts +2 -2
  257. package/dist/test/msw/index.js +1 -1
  258. package/dist/test/msw/server.d.ts +1 -1
  259. package/dist/test/msw/server.js +1 -1
  260. package/dist/test/msw/utils.js +2 -2
  261. package/dist/test/setup.d.ts +1 -1
  262. package/dist/test/setup.js +13 -30
  263. package/dist/test/testUtils.d.ts +170 -36
  264. package/dist/test/testUtils.js +229 -116
  265. package/dist/test/utils/errorHandling.test.js +146 -108
  266. package/dist/types/index.d.ts +49 -36
  267. package/dist/types/monaco.d.ts +13 -0
  268. package/dist/types/monaco.js +0 -0
  269. package/dist/utils/__tests__/proxyMiddleware.test.d.ts +1 -0
  270. package/dist/utils/__tests__/proxyMiddleware.test.js +579 -0
  271. package/dist/utils/__tests__/s3Client.test.d.ts +1 -0
  272. package/dist/utils/__tests__/s3Client.test.js +340 -0
  273. package/dist/utils/__tests__/s3ConfigIdentifier.test.d.ts +1 -0
  274. package/dist/utils/__tests__/s3ConfigIdentifier.test.js +437 -0
  275. package/dist/utils/constants.d.ts +22 -0
  276. package/dist/utils/constants.js +19 -0
  277. package/dist/utils/deletion/index.d.ts +2 -2
  278. package/dist/utils/deletion/index.js +1 -1
  279. package/dist/utils/deletion/messages.d.ts +1 -1
  280. package/dist/utils/deletion/messages.js +4 -4
  281. package/dist/utils/errorHandling.d.ts +12 -3
  282. package/dist/utils/errorHandling.js +12 -7
  283. package/dist/utils/hooks.js +8 -8
  284. package/dist/utils/index.d.ts +5 -2
  285. package/dist/utils/index.js +5 -1
  286. package/dist/utils/proxyMiddleware.d.ts +32 -13
  287. package/dist/utils/proxyMiddleware.js +90 -36
  288. package/dist/utils/s3Client.d.ts +14 -4
  289. package/dist/utils/s3Client.js +5 -26
  290. package/dist/utils/s3ConfigIdentifier.d.ts +79 -0
  291. package/dist/utils/s3ConfigIdentifier.js +57 -0
  292. package/dist/utils/s3RuleUtils.d.ts +53 -0
  293. package/dist/utils/s3RuleUtils.js +101 -0
  294. package/package.json +10 -8
  295. package/dist/components/__tests__/BucketNotificationCreatePage.test.js +0 -316
  296. package/dist/components/buckets/BucketPolicyButton.d.ts +0 -7
  297. package/dist/components/buckets/notifications/BucketNotificationCreatePage.d.ts +0 -1
  298. package/dist/components/buckets/notifications/BucketNotificationCreatePage.js +0 -234
  299. package/dist/hooks/useLoginMutation.d.ts +0 -21
  300. package/dist/hooks/useLoginMutation.js +0 -9
  301. package/dist/utils/useFeatures.d.ts +0 -1
  302. package/dist/utils/useFeatures.js +0 -7
  303. /package/dist/components/__tests__/{BucketNotificationCreatePage.test.d.ts → BucketAccessor.test.d.ts} +0 -0
@@ -1,11 +1,11 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { fireEvent, render, screen, waitFor } from "@testing-library/react";
3
+ import { useDeleteBucket } from "../../hooks/bucketOperations.js";
4
+ import { useIsBucketEmpty } from "../../hooks/useIsBucketEmpty.js";
3
5
  import { createTestWrapper } from "../../test/testUtils.js";
4
6
  import { DeleteBucketButton } from "../buckets/DeleteBucketButton.js";
5
- import { useIsBucketEmpty } from "../../hooks/useIsBucketEmpty.js";
6
- import { useDeleteBucket } from "../../hooks/bucketOperations.js";
7
- jest.mock("../../hooks/useIsBucketEmpty");
8
- jest.mock("../../hooks/bucketOperations");
7
+ jest.mock('../../hooks/useIsBucketEmpty');
8
+ jest.mock('../../hooks/bucketOperations');
9
9
  const mockUseIsBucketEmpty = jest.mocked(useIsBucketEmpty);
10
10
  const mockUseDeleteBucket = jest.mocked(useDeleteBucket);
11
11
  const renderDeleteBucketButton = (props = {})=>{
@@ -26,166 +26,166 @@ const mockHookDefaults = ()=>{
26
26
  });
27
27
  mockUseDeleteBucket.mockReturnValue({
28
28
  mutate: mockDeleteBucket,
29
- status: "idle"
29
+ status: 'idle'
30
30
  });
31
31
  };
32
- describe("DeleteBucketButton", ()=>{
32
+ describe('DeleteBucketButton', ()=>{
33
33
  beforeEach(()=>{
34
34
  jest.clearAllMocks();
35
35
  mockHookDefaults();
36
36
  });
37
- it("renders delete button with correct label", ()=>{
37
+ it('renders delete button with correct label', ()=>{
38
38
  renderDeleteBucketButton();
39
- expect(screen.getByRole("button", {
39
+ expect(screen.getByRole('button', {
40
40
  name: /delete bucket/i
41
41
  })).toBeInTheDocument();
42
42
  });
43
- it("enables button when bucket is empty", ()=>{
43
+ it('enables button when bucket is empty', ()=>{
44
44
  mockUseIsBucketEmpty.mockReturnValue({
45
45
  isEmpty: true,
46
46
  isLoading: false,
47
47
  error: null
48
48
  });
49
49
  renderDeleteBucketButton();
50
- const button = screen.getByRole("button", {
50
+ const button = screen.getByRole('button', {
51
51
  name: /delete bucket/i
52
52
  });
53
53
  expect(button).not.toBeDisabled();
54
54
  });
55
- it("disables button when bucket is not empty", ()=>{
55
+ it('disables button when bucket is not empty', ()=>{
56
56
  mockUseIsBucketEmpty.mockReturnValue({
57
57
  isEmpty: false,
58
58
  isLoading: false,
59
59
  error: null
60
60
  });
61
61
  renderDeleteBucketButton();
62
- const button = screen.getByRole("button", {
62
+ const button = screen.getByRole('button', {
63
63
  name: /delete bucket/i
64
64
  });
65
65
  expect(button).toBeDisabled();
66
66
  });
67
- it("disables button when checking if bucket is empty", ()=>{
67
+ it('disables button when checking if bucket is empty', ()=>{
68
68
  mockUseIsBucketEmpty.mockReturnValue({
69
69
  isEmpty: null,
70
70
  isLoading: true,
71
71
  error: null
72
72
  });
73
73
  renderDeleteBucketButton();
74
- const button = screen.getByRole("button", {
74
+ const button = screen.getByRole('button', {
75
75
  name: /delete bucket/i
76
76
  });
77
77
  expect(button).toBeDisabled();
78
78
  });
79
- it("disables button when disabled prop is true", ()=>{
79
+ it('disables button when disabled prop is true', ()=>{
80
80
  renderDeleteBucketButton({
81
81
  disabled: true
82
82
  });
83
- const button = screen.getByRole("button", {
83
+ const button = screen.getByRole('button', {
84
84
  name: /delete bucket/i
85
85
  });
86
86
  expect(button).toBeDisabled();
87
87
  });
88
- it("shows tooltip when bucket is not empty", ()=>{
88
+ it('shows tooltip when bucket is not empty', ()=>{
89
89
  mockUseIsBucketEmpty.mockReturnValue({
90
90
  isEmpty: false,
91
91
  isLoading: false,
92
92
  error: null
93
93
  });
94
94
  renderDeleteBucketButton();
95
- expect(screen.getByRole("button", {
95
+ expect(screen.getByRole('button', {
96
96
  name: /delete bucket/i
97
97
  })).toBeInTheDocument();
98
98
  });
99
- it("shows checking tooltip when loading", ()=>{
99
+ it('shows checking tooltip when loading', ()=>{
100
100
  mockUseIsBucketEmpty.mockReturnValue({
101
101
  isEmpty: null,
102
102
  isLoading: true,
103
103
  error: null
104
104
  });
105
105
  renderDeleteBucketButton();
106
- expect(screen.getByRole("button", {
106
+ expect(screen.getByRole('button', {
107
107
  name: /delete bucket/i
108
108
  })).toBeInTheDocument();
109
109
  });
110
- it("opens confirmation modal when button is clicked", ()=>{
110
+ it('opens confirmation modal when button is clicked', ()=>{
111
111
  renderDeleteBucketButton();
112
- const button = screen.getByRole("button", {
112
+ const button = screen.getByRole('button', {
113
113
  name: /delete bucket/i
114
114
  });
115
115
  fireEvent.click(button);
116
- expect(screen.getByText("Confirmation")).toBeInTheDocument();
116
+ expect(screen.getByText('Confirmation')).toBeInTheDocument();
117
117
  expect(screen.getByText(/are you sure you want to delete bucket: test-bucket/i)).toBeInTheDocument();
118
118
  });
119
- it("shows cancel and delete buttons in modal", ()=>{
119
+ it('shows cancel and delete buttons in modal', ()=>{
120
120
  renderDeleteBucketButton();
121
- const button = screen.getByRole("button", {
121
+ const button = screen.getByRole('button', {
122
122
  name: /delete bucket/i
123
123
  });
124
124
  fireEvent.click(button);
125
- expect(screen.getByRole("button", {
125
+ expect(screen.getByRole('button', {
126
126
  name: /cancel/i
127
127
  })).toBeInTheDocument();
128
- expect(screen.getByRole("button", {
128
+ expect(screen.getByRole('button', {
129
129
  name: /^delete$/i
130
130
  })).toBeInTheDocument();
131
131
  });
132
- it("closes modal when cancel is clicked", ()=>{
132
+ it('closes modal when cancel is clicked', ()=>{
133
133
  renderDeleteBucketButton();
134
- const deleteButton = screen.getByRole("button", {
134
+ const deleteButton = screen.getByRole('button', {
135
135
  name: /delete bucket/i
136
136
  });
137
137
  fireEvent.click(deleteButton);
138
- const cancelButton = screen.getByRole("button", {
138
+ const cancelButton = screen.getByRole('button', {
139
139
  name: /cancel/i
140
140
  });
141
141
  fireEvent.click(cancelButton);
142
- expect(screen.queryByText("Confirmation")).not.toBeInTheDocument();
142
+ expect(screen.queryByText('Confirmation')).not.toBeInTheDocument();
143
143
  });
144
- it("calls delete mutation when delete is confirmed", ()=>{
144
+ it('calls delete mutation when delete is confirmed', ()=>{
145
145
  renderDeleteBucketButton();
146
- const deleteButton = screen.getByRole("button", {
146
+ const deleteButton = screen.getByRole('button', {
147
147
  name: /delete bucket/i
148
148
  });
149
149
  fireEvent.click(deleteButton);
150
- const confirmButton = screen.getByRole("button", {
150
+ const confirmButton = screen.getByRole('button', {
151
151
  name: /^delete$/i
152
152
  });
153
153
  fireEvent.click(confirmButton);
154
154
  expect(mockDeleteBucket).toHaveBeenCalledWith({
155
- Bucket: "test-bucket"
155
+ Bucket: 'test-bucket'
156
156
  }, expect.objectContaining({
157
157
  onSuccess: expect.any(Function),
158
158
  onError: expect.any(Function)
159
159
  }));
160
160
  });
161
- it("calls onDeleteSuccess callback when delete succeeds", ()=>{
161
+ it('calls onDeleteSuccess callback when delete succeeds', ()=>{
162
162
  const onDeleteSuccess = jest.fn();
163
163
  renderDeleteBucketButton({
164
164
  onDeleteSuccess
165
165
  });
166
- const deleteButton = screen.getByRole("button", {
166
+ const deleteButton = screen.getByRole('button', {
167
167
  name: /delete bucket/i
168
168
  });
169
169
  fireEvent.click(deleteButton);
170
- const confirmButton = screen.getByRole("button", {
170
+ const confirmButton = screen.getByRole('button', {
171
171
  name: /^delete$/i
172
172
  });
173
173
  fireEvent.click(confirmButton);
174
174
  const successCallback = mockDeleteBucket.mock.calls[0][1].onSuccess;
175
175
  successCallback();
176
- expect(onDeleteSuccess).toHaveBeenCalledWith("test-bucket");
176
+ expect(onDeleteSuccess).toHaveBeenCalledWith('test-bucket');
177
177
  });
178
- it("calls onDeleteError callback when delete fails", ()=>{
178
+ it('calls onDeleteError callback when delete fails', ()=>{
179
179
  const onDeleteError = jest.fn();
180
- const testError = new Error("Delete failed");
180
+ const testError = new Error('Delete failed');
181
181
  renderDeleteBucketButton({
182
182
  onDeleteError
183
183
  });
184
- const deleteButton = screen.getByRole("button", {
184
+ const deleteButton = screen.getByRole('button', {
185
185
  name: /delete bucket/i
186
186
  });
187
187
  fireEvent.click(deleteButton);
188
- const confirmButton = screen.getByRole("button", {
188
+ const confirmButton = screen.getByRole('button', {
189
189
  name: /^delete$/i
190
190
  });
191
191
  fireEvent.click(confirmButton);
@@ -193,77 +193,77 @@ describe("DeleteBucketButton", ()=>{
193
193
  errorCallback(testError);
194
194
  expect(onDeleteError).toHaveBeenCalledWith(testError);
195
195
  });
196
- it("handles non-Error objects in onError callback", ()=>{
196
+ it('handles non-Error objects in onError callback', ()=>{
197
197
  const onDeleteError = jest.fn();
198
198
  renderDeleteBucketButton({
199
199
  onDeleteError
200
200
  });
201
- const deleteButton = screen.getByRole("button", {
201
+ const deleteButton = screen.getByRole('button', {
202
202
  name: /delete bucket/i
203
203
  });
204
204
  fireEvent.click(deleteButton);
205
- const confirmButton = screen.getByRole("button", {
205
+ const confirmButton = screen.getByRole('button', {
206
206
  name: /^delete$/i
207
207
  });
208
208
  fireEvent.click(confirmButton);
209
209
  const errorCallback = mockDeleteBucket.mock.calls[0][1].onError;
210
- errorCallback("string error");
211
- expect(onDeleteError).toHaveBeenCalledWith(new Error("Delete failed"));
210
+ errorCallback('string error');
211
+ expect(onDeleteError).toHaveBeenCalledWith(new Error('Delete failed'));
212
212
  });
213
- it("closes modal when delete succeeds", async ()=>{
213
+ it('closes modal when delete succeeds', async ()=>{
214
214
  renderDeleteBucketButton();
215
- const deleteButton = screen.getByRole("button", {
215
+ const deleteButton = screen.getByRole('button', {
216
216
  name: /delete bucket/i
217
217
  });
218
218
  fireEvent.click(deleteButton);
219
- expect(screen.getByText("Confirmation")).toBeInTheDocument();
220
- const confirmButton = screen.getByRole("button", {
219
+ expect(screen.getByText('Confirmation')).toBeInTheDocument();
220
+ const confirmButton = screen.getByRole('button', {
221
221
  name: /^delete$/i
222
222
  });
223
223
  fireEvent.click(confirmButton);
224
224
  const successCallback = mockDeleteBucket.mock.calls[0][1].onSuccess;
225
225
  successCallback();
226
226
  await waitFor(()=>{
227
- expect(screen.queryByText("Confirmation")).not.toBeInTheDocument();
227
+ expect(screen.queryByText('Confirmation')).not.toBeInTheDocument();
228
228
  });
229
229
  });
230
- it("shows loading state in delete button when deletion is pending", ()=>{
230
+ it('shows loading state in delete button when deletion is pending', ()=>{
231
231
  mockUseDeleteBucket.mockReturnValue({
232
232
  mutate: mockDeleteBucket,
233
- status: "pending"
233
+ status: 'pending'
234
234
  });
235
235
  renderDeleteBucketButton();
236
- const deleteButton = screen.getByRole("button", {
236
+ const deleteButton = screen.getByRole('button', {
237
237
  name: /delete bucket/i
238
238
  });
239
239
  fireEvent.click(deleteButton);
240
- const confirmButton = screen.getByRole("button", {
240
+ const confirmButton = screen.getByRole('button', {
241
241
  name: /^delete$/i
242
242
  });
243
243
  expect(confirmButton).toBeDisabled();
244
244
  });
245
- it("works without optional callbacks", ()=>{
245
+ it('works without optional callbacks', ()=>{
246
246
  expect(()=>{
247
247
  renderDeleteBucketButton();
248
- const deleteButton = screen.getByRole("button", {
248
+ const deleteButton = screen.getByRole('button', {
249
249
  name: /delete bucket/i
250
250
  });
251
251
  fireEvent.click(deleteButton);
252
- const confirmButton = screen.getByRole("button", {
252
+ const confirmButton = screen.getByRole('button', {
253
253
  name: /^delete$/i
254
254
  });
255
255
  fireEvent.click(confirmButton);
256
256
  const successCallback = mockDeleteBucket.mock.calls[0][1].onSuccess;
257
257
  const errorCallback = mockDeleteBucket.mock.calls[0][1].onError;
258
258
  successCallback();
259
- errorCallback(new Error("test"));
259
+ errorCallback(new Error('test'));
260
260
  }).not.toThrow();
261
261
  });
262
- it("displays correct bucket name in confirmation message", ()=>{
262
+ it('displays correct bucket name in confirmation message', ()=>{
263
263
  renderDeleteBucketButton({
264
- bucketName: "my-special-bucket"
264
+ bucketName: 'my-special-bucket'
265
265
  });
266
- const deleteButton = screen.getByRole("button", {
266
+ const deleteButton = screen.getByRole('button', {
267
267
  name: /delete bucket/i
268
268
  });
269
269
  fireEvent.click(deleteButton);
@@ -0,0 +1,196 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { fireEvent, render, screen, waitFor } from "@testing-library/react";
3
+ import { MemoryRouter } from "react-router";
4
+ import { createTestWrapper } from "../../test/testUtils.js";
5
+ import { DeleteBucketConfigRuleButton } from "../buckets/DeleteBucketConfigRuleButton.js";
6
+ const mockLifecycleRules = [
7
+ {
8
+ ID: 'rule-1',
9
+ Status: 'Enabled',
10
+ Expiration: {
11
+ Days: 30
12
+ }
13
+ },
14
+ {
15
+ ID: 'rule-2',
16
+ Status: 'Disabled',
17
+ NoncurrentVersionExpiration: {
18
+ NoncurrentDays: 90
19
+ }
20
+ }
21
+ ];
22
+ describe('DeleteBucketConfigRuleButton', ()=>{
23
+ let mockUpdate;
24
+ let mockDelete;
25
+ const renderButton = (props = {})=>{
26
+ const defaultProps = {
27
+ bucketName: 'test-bucket',
28
+ ruleId: 'rule-1',
29
+ rules: mockLifecycleRules,
30
+ ruleType: 'lifecycle',
31
+ updateMutation: {
32
+ mutate: mockUpdate,
33
+ status: 'idle'
34
+ },
35
+ deleteMutation: {
36
+ mutate: mockDelete,
37
+ status: 'idle'
38
+ },
39
+ buildUpdateInput: (remainingRules)=>({
40
+ LifecycleConfiguration: {
41
+ Rules: remainingRules
42
+ }
43
+ }),
44
+ invalidationKeys: [
45
+ 'GetBucketLifecycle'
46
+ ],
47
+ successMessage: 'Rule deleted successfully',
48
+ errorMessage: 'Failed to delete rule'
49
+ };
50
+ const Wrapper = createTestWrapper();
51
+ return render(/*#__PURE__*/ jsx(MemoryRouter, {
52
+ children: /*#__PURE__*/ jsx(Wrapper, {
53
+ children: /*#__PURE__*/ jsx(DeleteBucketConfigRuleButton, {
54
+ ...defaultProps,
55
+ ...props
56
+ })
57
+ })
58
+ }));
59
+ };
60
+ beforeEach(()=>{
61
+ jest.clearAllMocks();
62
+ mockUpdate = jest.fn();
63
+ mockDelete = jest.fn();
64
+ });
65
+ it('renders delete button', ()=>{
66
+ renderButton();
67
+ const deleteButton = screen.getByRole('button', {
68
+ name: /delete rule/i
69
+ });
70
+ expect(deleteButton).toBeInTheDocument();
71
+ });
72
+ it('opens confirmation modal when clicked', ()=>{
73
+ renderButton();
74
+ const deleteButton = screen.getByRole('button', {
75
+ name: /delete rule/i
76
+ });
77
+ fireEvent.click(deleteButton);
78
+ expect(screen.getByText(/are you sure you want to delete the lifecycle rule/i)).toBeInTheDocument();
79
+ expect(screen.getByText(/rule-1/)).toBeInTheDocument();
80
+ });
81
+ it('closes modal when cancel is clicked', ()=>{
82
+ renderButton();
83
+ fireEvent.click(screen.getByRole('button', {
84
+ name: /delete rule/i
85
+ }));
86
+ expect(screen.getByText(/are you sure/i)).toBeInTheDocument();
87
+ fireEvent.click(screen.getByRole('button', {
88
+ name: /cancel/i
89
+ }));
90
+ expect(screen.queryByText(/are you sure/i)).not.toBeInTheDocument();
91
+ });
92
+ it('calls update when deleting a rule with remaining rules', async ()=>{
93
+ renderButton();
94
+ fireEvent.click(screen.getByRole('button', {
95
+ name: /delete rule/i
96
+ }));
97
+ fireEvent.click(screen.getByRole('button', {
98
+ name: /^delete$/i
99
+ }));
100
+ await waitFor(()=>{
101
+ expect(mockUpdate).toHaveBeenCalled();
102
+ const callArgs = mockUpdate.mock.calls[0][0];
103
+ expect(callArgs.Bucket).toBe('test-bucket');
104
+ expect(callArgs.LifecycleConfiguration.Rules).toHaveLength(1);
105
+ expect(callArgs.LifecycleConfiguration.Rules[0].ID).toBe('rule-2');
106
+ });
107
+ });
108
+ it('calls delete when deleting the last rule', async ()=>{
109
+ renderButton({
110
+ rules: [
111
+ mockLifecycleRules[0]
112
+ ]
113
+ });
114
+ fireEvent.click(screen.getByRole('button', {
115
+ name: /delete rule/i
116
+ }));
117
+ fireEvent.click(screen.getByRole('button', {
118
+ name: /^delete$/i
119
+ }));
120
+ await waitFor(()=>{
121
+ expect(mockDelete).toHaveBeenCalledWith({
122
+ Bucket: 'test-bucket'
123
+ }, expect.any(Object));
124
+ });
125
+ });
126
+ it('closes modal after successful deletion', async ()=>{
127
+ mockUpdate.mockImplementation((_, options)=>{
128
+ options.onSuccess();
129
+ });
130
+ renderButton();
131
+ fireEvent.click(screen.getByRole('button', {
132
+ name: /delete rule/i
133
+ }));
134
+ fireEvent.click(screen.getByRole('button', {
135
+ name: /^delete$/i
136
+ }));
137
+ await waitFor(()=>{
138
+ expect(screen.queryByText(/are you sure/i)).not.toBeInTheDocument();
139
+ });
140
+ });
141
+ it('closes modal after failed deletion', async ()=>{
142
+ const consoleError = jest.spyOn(console, 'error').mockImplementation(()=>{});
143
+ mockUpdate.mockImplementation((_, options)=>{
144
+ options.onError(new Error('Delete failed'));
145
+ });
146
+ renderButton();
147
+ fireEvent.click(screen.getByRole('button', {
148
+ name: /delete rule/i
149
+ }));
150
+ fireEvent.click(screen.getByRole('button', {
151
+ name: /^delete$/i
152
+ }));
153
+ await waitFor(()=>{
154
+ expect(mockUpdate).toHaveBeenCalled();
155
+ });
156
+ await waitFor(()=>{
157
+ expect(screen.queryByText(/are you sure/i)).not.toBeInTheDocument();
158
+ });
159
+ consoleError.mockRestore();
160
+ });
161
+ it('disables buttons while deletion is in progress', ()=>{
162
+ renderButton({
163
+ updateMutation: {
164
+ mutate: mockUpdate,
165
+ status: 'pending'
166
+ }
167
+ });
168
+ fireEvent.click(screen.getByRole('button', {
169
+ name: /delete rule/i
170
+ }));
171
+ const cancelButton = screen.getByRole('button', {
172
+ name: /cancel/i
173
+ });
174
+ const confirmButton = screen.getByRole('button', {
175
+ name: /^delete$/i
176
+ });
177
+ expect(cancelButton).toBeDisabled();
178
+ expect(confirmButton).toBeDisabled();
179
+ });
180
+ it('stops event propagation when delete button is clicked', ()=>{
181
+ renderButton();
182
+ const deleteButton = screen.getByRole('button', {
183
+ name: /delete rule/i
184
+ });
185
+ const mockStopPropagation = jest.fn();
186
+ const clickEvent = new MouseEvent('click', {
187
+ bubbles: true
188
+ });
189
+ Object.defineProperty(clickEvent, 'stopPropagation', {
190
+ value: mockStopPropagation,
191
+ writable: true
192
+ });
193
+ deleteButton.dispatchEvent(clickEvent);
194
+ expect(mockStopPropagation).toHaveBeenCalled();
195
+ });
196
+ });