@scality/data-browser-library 1.0.0-preview.9 → 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 (285) 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.js +271 -105
  9. package/dist/components/__tests__/BucketDetails.test.d.ts +1 -0
  10. package/dist/components/__tests__/BucketDetails.test.js +421 -0
  11. package/dist/components/__tests__/BucketLifecycleFormPage.test.d.ts +13 -0
  12. package/dist/components/__tests__/BucketLifecycleFormPage.test.js +178 -178
  13. package/dist/components/__tests__/BucketLifecycleList.test.js +85 -85
  14. package/dist/components/__tests__/BucketList.test.js +463 -239
  15. package/dist/components/__tests__/BucketNotificationFormPage.test.d.ts +1 -0
  16. package/dist/components/__tests__/BucketNotificationFormPage.test.js +348 -0
  17. package/dist/components/__tests__/BucketNotificationList.test.d.ts +1 -0
  18. package/dist/components/__tests__/BucketNotificationList.test.js +379 -0
  19. package/dist/components/__tests__/BucketOverview.test.js +281 -266
  20. package/dist/components/__tests__/BucketPolicyPage.test.js +151 -99
  21. package/dist/components/__tests__/BucketReplicationFormPage.test.d.ts +15 -0
  22. package/dist/components/__tests__/BucketReplicationFormPage.test.js +544 -544
  23. package/dist/components/__tests__/BucketReplicationList.test.js +106 -106
  24. package/dist/components/__tests__/CreateFolderButton.test.js +56 -56
  25. package/dist/components/__tests__/DeleteBucketButton.test.js +64 -64
  26. package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.js +47 -47
  27. package/dist/components/__tests__/DeleteObjectButton.test.js +64 -64
  28. package/dist/components/__tests__/EmptyBucketButton.test.js +59 -59
  29. package/dist/components/__tests__/MetadataSearch.test.js +65 -65
  30. package/dist/components/__tests__/ObjectList.test.js +741 -240
  31. package/dist/components/__tests__/UploadButton.test.js +45 -45
  32. package/dist/components/breadcrumb/Breadcrumb.d.ts +6 -0
  33. package/dist/components/breadcrumb/Breadcrumb.js +37 -0
  34. package/dist/components/breadcrumb/DataBrowserBreadcrumb.d.ts +1 -0
  35. package/dist/components/breadcrumb/DataBrowserBreadcrumb.js +10 -0
  36. package/dist/components/breadcrumb/__tests__/Breadcrumb.test.d.ts +1 -0
  37. package/dist/components/breadcrumb/__tests__/Breadcrumb.test.js +196 -0
  38. package/dist/components/breadcrumb/__tests__/DataBrowserBreadcrumb.test.d.ts +1 -0
  39. package/dist/components/breadcrumb/__tests__/DataBrowserBreadcrumb.test.js +153 -0
  40. package/dist/components/breadcrumb/__tests__/useBreadcrumbPaths.test.d.ts +1 -0
  41. package/dist/components/breadcrumb/__tests__/useBreadcrumbPaths.test.js +134 -0
  42. package/dist/components/breadcrumb/index.d.ts +8 -0
  43. package/dist/components/breadcrumb/index.js +4 -0
  44. package/dist/components/breadcrumb/useBreadcrumbPaths.d.ts +2 -0
  45. package/dist/components/breadcrumb/useBreadcrumbPaths.js +82 -0
  46. package/dist/components/buckets/BucketAccessor.d.ts +2 -0
  47. package/dist/components/buckets/BucketAccessor.js +125 -0
  48. package/dist/components/buckets/BucketConfigEditButton.d.ts +8 -0
  49. package/dist/components/buckets/{BucketPolicyButton.js → BucketConfigEditButton.js} +9 -5
  50. package/dist/components/buckets/BucketCorsPage.d.ts +1 -0
  51. package/dist/components/buckets/BucketCorsPage.js +234 -0
  52. package/dist/components/buckets/BucketCreate.d.ts +3 -2
  53. package/dist/components/buckets/BucketCreate.js +89 -47
  54. package/dist/components/buckets/BucketDetails.d.ts +42 -0
  55. package/dist/components/buckets/BucketDetails.js +249 -85
  56. package/dist/components/buckets/BucketLifecycleFormPage.js +206 -190
  57. package/dist/components/buckets/BucketLifecycleList.d.ts +2 -2
  58. package/dist/components/buckets/BucketLifecycleList.js +47 -47
  59. package/dist/components/buckets/BucketList.d.ts +7 -8
  60. package/dist/components/buckets/BucketList.js +158 -101
  61. package/dist/components/buckets/BucketLocation.js +4 -4
  62. package/dist/components/buckets/BucketOverview.d.ts +22 -2
  63. package/dist/components/buckets/BucketOverview.js +394 -187
  64. package/dist/components/buckets/BucketPage.js +43 -21
  65. package/dist/components/buckets/BucketPolicyPage.js +155 -127
  66. package/dist/components/buckets/BucketReplicationFormPage.js +134 -133
  67. package/dist/components/buckets/BucketReplicationList.d.ts +2 -2
  68. package/dist/components/buckets/BucketReplicationList.js +42 -42
  69. package/dist/components/buckets/BucketVersioning.d.ts +4 -0
  70. package/dist/components/buckets/BucketVersioning.js +76 -0
  71. package/dist/components/buckets/DeleteBucketButton.js +8 -8
  72. package/dist/components/buckets/DeleteBucketConfigRuleButton.d.ts +2 -2
  73. package/dist/components/buckets/DeleteBucketConfigRuleButton.js +2 -2
  74. package/dist/components/buckets/EmptyBucketButton.js +24 -24
  75. package/dist/components/buckets/EmptyBucketSummary.d.ts +2 -2
  76. package/dist/components/buckets/EmptyBucketSummary.js +1 -1
  77. package/dist/components/buckets/EmptyBucketSummaryList.d.ts +1 -1
  78. package/dist/components/buckets/EmptyBucketSummaryList.js +22 -22
  79. package/dist/components/buckets/__tests__/BucketVersioning.test.d.ts +1 -0
  80. package/dist/components/buckets/__tests__/BucketVersioning.test.js +163 -0
  81. package/dist/components/buckets/notifications/BucketNotificationFormPage.d.ts +1 -0
  82. package/dist/components/buckets/notifications/BucketNotificationFormPage.js +316 -0
  83. package/dist/components/buckets/notifications/BucketNotificationList.d.ts +10 -0
  84. package/dist/components/buckets/notifications/BucketNotificationList.js +267 -0
  85. package/dist/components/buckets/notifications/EventsSection.js +145 -29
  86. package/dist/components/buckets/notifications/__tests__/events.test.d.ts +1 -0
  87. package/dist/components/buckets/notifications/__tests__/events.test.js +56 -0
  88. package/dist/components/buckets/notifications/events.d.ts +71 -7
  89. package/dist/components/buckets/notifications/events.js +98 -16
  90. package/dist/components/index.d.ts +27 -20
  91. package/dist/components/index.js +17 -10
  92. package/dist/components/layouts/ArrowNavigation.d.ts +3 -0
  93. package/dist/components/layouts/ArrowNavigation.js +28 -0
  94. package/dist/components/layouts/BrowserPageLayout.d.ts +5 -1
  95. package/dist/components/layouts/BrowserPageLayout.js +10 -5
  96. package/dist/components/objects/CreateFolderButton.d.ts +2 -2
  97. package/dist/components/objects/CreateFolderButton.js +12 -12
  98. package/dist/components/objects/DeleteObjectButton.d.ts +1 -1
  99. package/dist/components/objects/DeleteObjectButton.js +19 -21
  100. package/dist/components/objects/GetPresignedUrlButton.d.ts +7 -0
  101. package/dist/components/objects/GetPresignedUrlButton.js +255 -0
  102. package/dist/components/objects/ObjectDetails/ObjectMetadata.d.ts +2 -2
  103. package/dist/components/objects/ObjectDetails/ObjectMetadata.js +263 -230
  104. package/dist/components/objects/ObjectDetails/ObjectSummary.d.ts +2 -2
  105. package/dist/components/objects/ObjectDetails/ObjectSummary.js +540 -138
  106. package/dist/components/objects/ObjectDetails/ObjectTags.d.ts +2 -2
  107. package/dist/components/objects/ObjectDetails/ObjectTags.js +95 -123
  108. package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.d.ts +1 -0
  109. package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.js +516 -0
  110. package/dist/components/objects/ObjectDetails/__tests__/ObjectSummary.test.d.ts +1 -0
  111. package/dist/components/objects/ObjectDetails/__tests__/ObjectSummary.test.js +1064 -0
  112. package/dist/components/objects/ObjectDetails/index.d.ts +18 -2
  113. package/dist/components/objects/ObjectDetails/index.js +152 -40
  114. package/dist/components/objects/ObjectList.d.ts +12 -10
  115. package/dist/components/objects/ObjectList.js +590 -263
  116. package/dist/components/objects/ObjectLock/EditRetentionButton.js +4 -4
  117. package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.js +15 -15
  118. package/dist/components/objects/ObjectLock/ObjectLockSettings.d.ts +1 -1
  119. package/dist/components/objects/ObjectLock/ObjectLockSettings.js +32 -31
  120. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.d.ts +1 -1
  121. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.js +6 -6
  122. package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.js +51 -51
  123. package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.js +78 -78
  124. package/dist/components/objects/ObjectPage.js +12 -8
  125. package/dist/components/objects/UploadButton.d.ts +3 -3
  126. package/dist/components/objects/UploadButton.js +10 -10
  127. package/dist/components/objects/__tests__/GetPresignedUrlButton.test.d.ts +1 -0
  128. package/dist/components/objects/__tests__/GetPresignedUrlButton.test.js +531 -0
  129. package/dist/components/providers/DataBrowserProvider.d.ts +23 -12
  130. package/dist/components/providers/DataBrowserProvider.js +60 -38
  131. package/dist/components/providers/QueryProvider.d.ts +9 -0
  132. package/dist/components/providers/QueryProvider.js +21 -0
  133. package/dist/components/search/MetadataSearch.js +29 -28
  134. package/dist/components/search/SearchHints.js +1 -1
  135. package/dist/components/ui/ArrayFieldActions.js +12 -7
  136. package/dist/components/ui/ConfirmDeleteRuleModal.d.ts +2 -2
  137. package/dist/components/ui/ConfirmDeleteRuleModal.js +6 -1
  138. package/dist/components/ui/DeleteObjectModalContent.d.ts +1 -1
  139. package/dist/components/ui/DeleteObjectModalContent.js +12 -12
  140. package/dist/components/ui/FilterFormSection.d.ts +2 -2
  141. package/dist/components/ui/FilterFormSection.js +29 -29
  142. package/dist/components/ui/Search.elements.d.ts +2 -2
  143. package/dist/components/ui/Search.elements.js +7 -7
  144. package/dist/components/ui/Table.elements.d.ts +2 -1
  145. package/dist/components/ui/Table.elements.js +18 -12
  146. package/dist/config/__tests__/factory.test.d.ts +1 -0
  147. package/dist/config/__tests__/factory.test.js +311 -0
  148. package/dist/config/factory.d.ts +10 -56
  149. package/dist/config/factory.js +23 -71
  150. package/dist/config/types.d.ts +212 -34
  151. package/dist/contexts/DataBrowserUICustomizationContext.d.ts +27 -0
  152. package/dist/contexts/DataBrowserUICustomizationContext.js +13 -0
  153. package/dist/hooks/__tests__/useAccessibleBuckets.test.d.ts +1 -0
  154. package/dist/hooks/__tests__/useAccessibleBuckets.test.js +145 -0
  155. package/dist/hooks/__tests__/useISVBucketDetection.test.js +45 -45
  156. package/dist/hooks/__tests__/useIsBucketEmpty.test.js +27 -27
  157. package/dist/hooks/__tests__/useLoginMutation.test.d.ts +1 -0
  158. package/dist/hooks/__tests__/useLoginMutation.test.js +194 -0
  159. package/dist/hooks/bucketConfiguration.d.ts +8 -1
  160. package/dist/hooks/bucketConfiguration.js +52 -51
  161. package/dist/hooks/bucketOperations.d.ts +10 -1
  162. package/dist/hooks/bucketOperations.js +10 -9
  163. package/dist/hooks/factories/__tests__/useCreateS3FunctionMutationHook.test.js +80 -80
  164. package/dist/hooks/factories/__tests__/useCreateS3InfiniteQueryHook.test.js +80 -80
  165. package/dist/hooks/factories/__tests__/useCreateS3LoginHook.test.js +44 -44
  166. package/dist/hooks/factories/__tests__/useCreateS3MutationHook.test.js +63 -63
  167. package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.js +65 -65
  168. package/dist/hooks/factories/index.d.ts +4 -4
  169. package/dist/hooks/factories/index.js +2 -2
  170. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.d.ts +2 -2
  171. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.js +16 -13
  172. package/dist/hooks/factories/useCreateS3LoginHook.d.ts +2 -2
  173. package/dist/hooks/factories/useCreateS3LoginHook.js +1 -1
  174. package/dist/hooks/factories/useCreateS3MutationHook.d.ts +3 -3
  175. package/dist/hooks/factories/useCreateS3MutationHook.js +7 -2
  176. package/dist/hooks/factories/useCreateS3QueryHook.d.ts +2 -2
  177. package/dist/hooks/factories/useCreateS3QueryHook.js +11 -6
  178. package/dist/hooks/index.d.ts +19 -12
  179. package/dist/hooks/index.js +16 -9
  180. package/dist/hooks/loginOperations.d.ts +1 -1
  181. package/dist/hooks/loginOperations.js +1 -1
  182. package/dist/hooks/objectOperations.d.ts +2 -2
  183. package/dist/hooks/objectOperations.js +50 -49
  184. package/dist/hooks/presignedOperations.d.ts +4 -4
  185. package/dist/hooks/presignedOperations.js +5 -5
  186. package/dist/hooks/useAccessibleBuckets.d.ts +11 -0
  187. package/dist/hooks/useAccessibleBuckets.js +115 -0
  188. package/dist/hooks/useBatchObjectLegalHold.d.ts +11 -0
  189. package/dist/hooks/useBatchObjectLegalHold.js +48 -0
  190. package/dist/hooks/useBucketConfigEditor.d.ts +31 -0
  191. package/dist/hooks/useBucketConfigEditor.js +82 -0
  192. package/dist/hooks/useDataBrowserNavigate.d.ts +28 -0
  193. package/dist/hooks/useDataBrowserNavigate.js +24 -0
  194. package/dist/hooks/useDeleteBucketConfigRule.d.ts +2 -2
  195. package/dist/hooks/useDeleteBucketConfigRule.js +4 -4
  196. package/dist/hooks/useEmptyBucket.js +11 -11
  197. package/dist/hooks/useFeatures.d.ts +7 -0
  198. package/dist/hooks/useFeatures.js +8 -0
  199. package/dist/hooks/useISVBucketDetection.js +6 -6
  200. package/dist/hooks/useIsBucketEmpty.js +4 -4
  201. package/dist/hooks/useLimitedAccessFlow.d.ts +48 -0
  202. package/dist/hooks/useLimitedAccessFlow.js +23 -0
  203. package/dist/hooks/useS3Client.d.ts +6 -0
  204. package/dist/hooks/useS3Client.js +3 -2
  205. package/dist/hooks/useS3ConfigSwitch.d.ts +11 -0
  206. package/dist/hooks/useS3ConfigSwitch.js +37 -0
  207. package/dist/hooks/useSupportedNotificationEvents.d.ts +6 -0
  208. package/dist/hooks/useSupportedNotificationEvents.js +8 -0
  209. package/dist/index.d.ts +6 -6
  210. package/dist/index.js +2 -2
  211. package/dist/schemas/bucketPolicySchema.json +3 -13
  212. package/dist/test/msw/handlers/deleteBucket.d.ts +1 -1
  213. package/dist/test/msw/handlers/deleteBucket.js +20 -10
  214. package/dist/test/msw/handlers/getBucketAcl.d.ts +1 -1
  215. package/dist/test/msw/handlers/getBucketAcl.js +29 -17
  216. package/dist/test/msw/handlers/getBucketLocation.d.ts +1 -1
  217. package/dist/test/msw/handlers/getBucketLocation.js +29 -15
  218. package/dist/test/msw/handlers/getBucketPolicy.d.ts +1 -1
  219. package/dist/test/msw/handlers/getBucketPolicy.js +52 -32
  220. package/dist/test/msw/handlers/headObject.d.ts +1 -1
  221. package/dist/test/msw/handlers/headObject.js +31 -13
  222. package/dist/test/msw/handlers/listBuckets.d.ts +1 -1
  223. package/dist/test/msw/handlers/listBuckets.js +5 -3
  224. package/dist/test/msw/handlers/listObjectVersions.d.ts +1 -1
  225. package/dist/test/msw/handlers/listObjectVersions.js +38 -26
  226. package/dist/test/msw/handlers/listObjects.d.ts +1 -1
  227. package/dist/test/msw/handlers/listObjects.js +35 -23
  228. package/dist/test/msw/handlers/objectLegalHold.d.ts +1 -1
  229. package/dist/test/msw/handlers/objectLegalHold.js +32 -17
  230. package/dist/test/msw/handlers/objectRetention.d.ts +1 -1
  231. package/dist/test/msw/handlers/objectRetention.js +31 -17
  232. package/dist/test/msw/handlers/putBucketAcl.d.ts +1 -1
  233. package/dist/test/msw/handlers/putBucketAcl.js +29 -14
  234. package/dist/test/msw/handlers/putObject.d.ts +1 -1
  235. package/dist/test/msw/handlers/putObject.js +27 -12
  236. package/dist/test/msw/handlers.d.ts +3 -3
  237. package/dist/test/msw/handlers.js +77 -54
  238. package/dist/test/msw/index.d.ts +2 -2
  239. package/dist/test/msw/index.js +1 -1
  240. package/dist/test/msw/server.d.ts +1 -1
  241. package/dist/test/msw/server.js +1 -1
  242. package/dist/test/msw/utils.js +2 -2
  243. package/dist/test/setup.d.ts +1 -1
  244. package/dist/test/setup.js +13 -30
  245. package/dist/test/testUtils.d.ts +85 -33
  246. package/dist/test/testUtils.js +176 -111
  247. package/dist/test/utils/errorHandling.test.js +119 -119
  248. package/dist/types/index.d.ts +49 -36
  249. package/dist/types/monaco.d.ts +13 -0
  250. package/dist/types/monaco.js +0 -0
  251. package/dist/utils/__tests__/proxyMiddleware.test.d.ts +1 -0
  252. package/dist/utils/__tests__/proxyMiddleware.test.js +579 -0
  253. package/dist/utils/__tests__/s3Client.test.d.ts +1 -0
  254. package/dist/utils/__tests__/s3Client.test.js +340 -0
  255. package/dist/utils/__tests__/s3ConfigIdentifier.test.d.ts +1 -0
  256. package/dist/utils/__tests__/s3ConfigIdentifier.test.js +437 -0
  257. package/dist/utils/constants.d.ts +10 -0
  258. package/dist/utils/constants.js +19 -9
  259. package/dist/utils/deletion/index.d.ts +2 -2
  260. package/dist/utils/deletion/index.js +1 -1
  261. package/dist/utils/deletion/messages.d.ts +1 -1
  262. package/dist/utils/deletion/messages.js +4 -4
  263. package/dist/utils/errorHandling.d.ts +3 -3
  264. package/dist/utils/errorHandling.js +6 -6
  265. package/dist/utils/hooks.js +8 -8
  266. package/dist/utils/index.d.ts +5 -4
  267. package/dist/utils/index.js +4 -2
  268. package/dist/utils/proxyMiddleware.d.ts +32 -13
  269. package/dist/utils/proxyMiddleware.js +90 -36
  270. package/dist/utils/s3Client.d.ts +14 -4
  271. package/dist/utils/s3Client.js +5 -26
  272. package/dist/utils/s3ConfigIdentifier.d.ts +79 -0
  273. package/dist/utils/s3ConfigIdentifier.js +57 -0
  274. package/dist/utils/s3RuleUtils.d.ts +5 -5
  275. package/dist/utils/s3RuleUtils.js +17 -17
  276. package/package.json +10 -8
  277. package/dist/components/__tests__/BucketNotificationCreatePage.test.js +0 -316
  278. package/dist/components/buckets/BucketPolicyButton.d.ts +0 -7
  279. package/dist/components/buckets/notifications/BucketNotificationCreatePage.d.ts +0 -1
  280. package/dist/components/buckets/notifications/BucketNotificationCreatePage.js +0 -234
  281. package/dist/hooks/useLoginMutation.d.ts +0 -21
  282. package/dist/hooks/useLoginMutation.js +0 -9
  283. package/dist/utils/useFeatures.d.ts +0 -1
  284. package/dist/utils/useFeatures.js +0 -7
  285. /package/dist/components/__tests__/{BucketNotificationCreatePage.test.d.ts → BucketAccessor.test.d.ts} +0 -0
@@ -1,11 +1,11 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { fireEvent, render, screen, waitFor } from "@testing-library/react";
3
3
  import user_event from "@testing-library/user-event";
4
- import { MemoryRouter, Route, Routes } from "react-router-dom";
4
+ import { MemoryRouter, Route, Routes } from "react-router";
5
+ import { useGetBucketLifecycle, useSetBucketLifecycle } from "../../hooks/bucketConfiguration.js";
5
6
  import { createTestWrapper, findToggleByLabel, mockErrorSubmit, mockOffsetSize, mockSuccessSubmit, submitForm } from "../../test/testUtils.js";
6
7
  import { BucketLifecycleFormPage } from "../buckets/BucketLifecycleFormPage.js";
7
- import { useGetBucketLifecycle, useSetBucketLifecycle } from "../../hooks/bucketConfiguration.js";
8
- jest.mock("../../hooks/bucketConfiguration", ()=>({
8
+ jest.mock('../../hooks/bucketConfiguration', ()=>({
9
9
  useGetBucketLifecycle: jest.fn(),
10
10
  useSetBucketLifecycle: jest.fn()
11
11
  }));
@@ -13,17 +13,17 @@ const mockUseGetBucketLifecycle = jest.mocked(useGetBucketLifecycle);
13
13
  const mockUseSetBucketLifecycle = jest.mocked(useSetBucketLifecycle);
14
14
  const mockNavigate = jest.fn();
15
15
  const mockShowToast = jest.fn();
16
- jest.mock("react-router-dom", ()=>({
17
- ...jest.requireActual("react-router-dom"),
16
+ jest.mock('react-router', ()=>({
17
+ ...jest.requireActual('react-router'),
18
18
  useNavigate: ()=>mockNavigate
19
19
  }));
20
- jest.mock("@scality/core-ui", ()=>({
21
- ...jest.requireActual("@scality/core-ui"),
20
+ jest.mock('@scality/core-ui', ()=>({
21
+ ...jest.requireActual('@scality/core-ui'),
22
22
  useToast: ()=>({
23
23
  showToast: mockShowToast
24
24
  })
25
25
  }));
26
- const renderBucketLifecycleFormPage = (bucketName = "test-bucket", ruleId)=>{
26
+ const renderBucketLifecycleFormPage = (bucketName = 'test-bucket', ruleId)=>{
27
27
  const Wrapper = createTestWrapper();
28
28
  const path = ruleId ? `/buckets/${bucketName}/lifecycle/${ruleId}/edit` : `/buckets/${bucketName}/lifecycle/create`;
29
29
  return render(/*#__PURE__*/ jsx(MemoryRouter, {
@@ -46,10 +46,10 @@ const renderBucketLifecycleFormPage = (bucketName = "test-bucket", ruleId)=>{
46
46
  })
47
47
  }));
48
48
  };
49
- describe("BucketLifecycleFormPage", ()=>{
49
+ describe('BucketLifecycleFormPage', ()=>{
50
50
  const mockMutate = jest.fn();
51
51
  const enableExpirationAction = async ()=>{
52
- const expirationToggle = findToggleByLabel("Expiration current version");
52
+ const expirationToggle = findToggleByLabel('Expiration current version');
53
53
  await user_event.click(expirationToggle);
54
54
  };
55
55
  const fillRequiredFields = async (ruleId)=>{
@@ -63,22 +63,22 @@ describe("BucketLifecycleFormPage", ()=>{
63
63
  mockOffsetSize(800, 600);
64
64
  mockUseGetBucketLifecycle.mockReturnValue({
65
65
  data: void 0,
66
- status: "success"
66
+ status: 'success'
67
67
  });
68
68
  mockUseSetBucketLifecycle.mockReturnValue({
69
69
  mutate: mockMutate,
70
70
  isPending: false
71
71
  });
72
72
  });
73
- describe("Page Rendering", ()=>{
74
- it("renders create mode with correct title", ()=>{
73
+ describe('Page Rendering', ()=>{
74
+ it('renders create mode with correct title', ()=>{
75
75
  renderBucketLifecycleFormPage();
76
- expect(screen.getByText("Create Lifecycle Rule")).toBeInTheDocument();
76
+ expect(screen.getByText('Create Lifecycle Rule')).toBeInTheDocument();
77
77
  });
78
- it("renders edit mode with correct title when rule exists", async ()=>{
78
+ it('renders edit mode with correct title when rule exists', async ()=>{
79
79
  const existingRule = {
80
- ID: "test-rule",
81
- Status: "Enabled",
80
+ ID: 'test-rule',
81
+ Status: 'Enabled',
82
82
  Filter: {},
83
83
  Expiration: {
84
84
  Days: 30
@@ -90,68 +90,68 @@ describe("BucketLifecycleFormPage", ()=>{
90
90
  existingRule
91
91
  ]
92
92
  },
93
- status: "success"
93
+ status: 'success'
94
94
  });
95
- renderBucketLifecycleFormPage("test-bucket", "test-rule");
95
+ renderBucketLifecycleFormPage('test-bucket', 'test-rule');
96
96
  await waitFor(()=>{
97
- expect(screen.getByText("Edit Lifecycle Rule")).toBeInTheDocument();
97
+ expect(screen.getByText('Edit Lifecycle Rule')).toBeInTheDocument();
98
98
  });
99
99
  });
100
- it("shows loading state when fetching lifecycle data", ()=>{
100
+ it('shows loading state when fetching lifecycle data', ()=>{
101
101
  mockUseGetBucketLifecycle.mockReturnValue({
102
102
  data: void 0,
103
- status: "pending"
103
+ status: 'pending'
104
104
  });
105
105
  renderBucketLifecycleFormPage();
106
- expect(screen.getByText("Loading...")).toBeInTheDocument();
106
+ expect(screen.getByText('Loading...')).toBeInTheDocument();
107
107
  });
108
- it("shows error when rule not found in edit mode", ()=>{
108
+ it('shows error when rule not found in edit mode', ()=>{
109
109
  mockUseGetBucketLifecycle.mockReturnValue({
110
110
  data: {
111
111
  Rules: []
112
112
  },
113
- status: "success"
113
+ status: 'success'
114
114
  });
115
- renderBucketLifecycleFormPage("test-bucket", "non-existent");
116
- expect(screen.getByText("Rule not found")).toBeInTheDocument();
115
+ renderBucketLifecycleFormPage('test-bucket', 'non-existent');
116
+ expect(screen.getByText('Rule not found')).toBeInTheDocument();
117
117
  });
118
118
  });
119
- describe("Form Fields - Initial State", ()=>{
120
- it("renders required form fields in create mode", ()=>{
119
+ describe('Form Fields - Initial State', ()=>{
120
+ it('renders required form fields in create mode', ()=>{
121
121
  renderBucketLifecycleFormPage();
122
122
  expect(screen.getByLabelText(/rule id/i)).toBeInTheDocument();
123
123
  expect(screen.getByLabelText(/status/i)).toBeInTheDocument();
124
124
  expect(screen.getByLabelText(/filter/i)).toBeInTheDocument();
125
125
  });
126
- it("renders all lifecycle action toggles", ()=>{
126
+ it('renders all lifecycle action toggles', ()=>{
127
127
  renderBucketLifecycleFormPage();
128
- expect(screen.getByText("Transition current version")).toBeInTheDocument();
129
- expect(screen.getByText("Expiration current version")).toBeInTheDocument();
130
- expect(screen.getByText("Transition noncurrent version")).toBeInTheDocument();
131
- expect(screen.getByText("Expiration noncurrent version")).toBeInTheDocument();
132
- expect(screen.getByText("Expire incomplete multipart upload")).toBeInTheDocument();
128
+ expect(screen.getByText('Transition current version')).toBeInTheDocument();
129
+ expect(screen.getByText('Expiration current version')).toBeInTheDocument();
130
+ expect(screen.getByText('Transition noncurrent version')).toBeInTheDocument();
131
+ expect(screen.getByText('Expiration noncurrent version')).toBeInTheDocument();
132
+ expect(screen.getByText('Expire incomplete multipart upload')).toBeInTheDocument();
133
133
  });
134
- it("shows all filter type options when filter select is opened", async ()=>{
134
+ it('shows all filter type options when filter select is opened', async ()=>{
135
135
  renderBucketLifecycleFormPage();
136
136
  const filterSelect = screen.getByLabelText(/filter/i);
137
137
  await user_event.click(filterSelect);
138
- expect(screen.getByRole("option", {
139
- name: "All objects"
138
+ expect(screen.getByRole('option', {
139
+ name: 'All objects'
140
140
  })).toBeInTheDocument();
141
- expect(screen.getByRole("option", {
142
- name: "Prefix filter"
141
+ expect(screen.getByRole('option', {
142
+ name: 'Prefix filter'
143
143
  })).toBeInTheDocument();
144
- expect(screen.getByRole("option", {
145
- name: "Tags filter"
144
+ expect(screen.getByRole('option', {
145
+ name: 'Tags filter'
146
146
  })).toBeInTheDocument();
147
- expect(screen.getByRole("option", {
148
- name: "Prefix and tags filter"
147
+ expect(screen.getByRole('option', {
148
+ name: 'Prefix and tags filter'
149
149
  })).toBeInTheDocument();
150
150
  });
151
- it("disables rule ID input in edit mode", async ()=>{
151
+ it('disables rule ID input in edit mode', async ()=>{
152
152
  const existingRule = {
153
- ID: "test-rule",
154
- Status: "Enabled",
153
+ ID: 'test-rule',
154
+ Status: 'Enabled',
155
155
  Filter: {},
156
156
  Expiration: {
157
157
  Days: 30
@@ -163,91 +163,91 @@ describe("BucketLifecycleFormPage", ()=>{
163
163
  existingRule
164
164
  ]
165
165
  },
166
- status: "success"
166
+ status: 'success'
167
167
  });
168
- renderBucketLifecycleFormPage("test-bucket", "test-rule");
168
+ renderBucketLifecycleFormPage('test-bucket', 'test-rule');
169
169
  await waitFor(()=>{
170
- expect(screen.getByText("test-rule")).toBeInTheDocument();
170
+ expect(screen.getByText('test-rule')).toBeInTheDocument();
171
171
  });
172
- expect(screen.queryByRole("textbox", {
172
+ expect(screen.queryByRole('textbox', {
173
173
  name: /rule id/i
174
174
  })).not.toBeInTheDocument();
175
175
  });
176
176
  });
177
- describe("Form Validation", ()=>{
178
- it("validates rule ID is required", async ()=>{
177
+ describe('Form Validation', ()=>{
178
+ it('validates rule ID is required', async ()=>{
179
179
  renderBucketLifecycleFormPage();
180
180
  const ruleIdInput = screen.getByLabelText(/rule id/i);
181
- await user_event.type(ruleIdInput, "test");
181
+ await user_event.type(ruleIdInput, 'test');
182
182
  await user_event.clear(ruleIdInput);
183
183
  await user_event.tab();
184
184
  await waitFor(()=>{
185
185
  expect(screen.getByText(/rule id is required/i)).toBeInTheDocument();
186
186
  });
187
187
  });
188
- it("validates rule ID uniqueness against existing rules", async ()=>{
188
+ it('validates rule ID uniqueness against existing rules', async ()=>{
189
189
  mockUseGetBucketLifecycle.mockReturnValue({
190
190
  data: {
191
191
  Rules: [
192
192
  {
193
- ID: "existing-rule",
194
- Status: "Enabled",
193
+ ID: 'existing-rule',
194
+ Status: 'Enabled',
195
195
  Expiration: {
196
196
  Days: 30
197
197
  }
198
198
  }
199
199
  ]
200
200
  },
201
- status: "success"
201
+ status: 'success'
202
202
  });
203
203
  renderBucketLifecycleFormPage();
204
204
  const ruleIdInput = screen.getByLabelText(/rule id/i);
205
- await user_event.type(ruleIdInput, "existing-rule");
205
+ await user_event.type(ruleIdInput, 'existing-rule');
206
206
  await user_event.tab();
207
207
  await waitFor(()=>{
208
208
  expect(screen.getByText(/a rule with this id already exists/i)).toBeInTheDocument();
209
209
  });
210
210
  });
211
- it("disables create button when form is pristine", ()=>{
211
+ it('disables create button when form is pristine', ()=>{
212
212
  renderBucketLifecycleFormPage();
213
- const createButton = screen.getByRole("button", {
213
+ const createButton = screen.getByRole('button', {
214
214
  name: /create/i
215
215
  });
216
216
  expect(createButton).toBeDisabled();
217
217
  });
218
- it("disables create button when no lifecycle action is enabled", async ()=>{
218
+ it('disables create button when no lifecycle action is enabled', async ()=>{
219
219
  renderBucketLifecycleFormPage();
220
- await user_event.type(screen.getByLabelText(/rule id/i), "test-rule");
221
- const createButton = screen.getByRole("button", {
220
+ await user_event.type(screen.getByLabelText(/rule id/i), 'test-rule');
221
+ const createButton = screen.getByRole('button', {
222
222
  name: /create/i
223
223
  });
224
224
  expect(createButton).toBeDisabled();
225
225
  });
226
- it("enables create button when form is valid and has at least one action", async ()=>{
226
+ it('enables create button when form is valid and has at least one action', async ()=>{
227
227
  renderBucketLifecycleFormPage();
228
- await fillRequiredFields("valid-rule");
228
+ await fillRequiredFields('valid-rule');
229
229
  await waitFor(()=>{
230
- const createButton = screen.getByRole("button", {
230
+ const createButton = screen.getByRole('button', {
231
231
  name: /create/i
232
232
  });
233
233
  expect(createButton).toBeEnabled();
234
234
  });
235
235
  });
236
236
  });
237
- describe("Form Submission - Create Mode", ()=>{
238
- it("submits minimal lifecycle rule with expiration action", async ()=>{
237
+ describe('Form Submission - Create Mode', ()=>{
238
+ it('submits minimal lifecycle rule with expiration action', async ()=>{
239
239
  renderBucketLifecycleFormPage();
240
- await fillRequiredFields("minimal-rule");
240
+ await fillRequiredFields('minimal-rule');
241
241
  mockSuccessSubmit(mockMutate);
242
- await submitForm("create");
242
+ await submitForm('create');
243
243
  await waitFor(()=>{
244
244
  expect(mockMutate).toHaveBeenCalledWith(expect.objectContaining({
245
- Bucket: "test-bucket",
245
+ Bucket: 'test-bucket',
246
246
  LifecycleConfiguration: {
247
247
  Rules: expect.arrayContaining([
248
248
  expect.objectContaining({
249
- ID: "minimal-rule",
250
- Status: "Enabled",
249
+ ID: 'minimal-rule',
250
+ Status: 'Enabled',
251
251
  Filter: {},
252
252
  Expiration: {
253
253
  Days: 30
@@ -258,49 +258,49 @@ describe("BucketLifecycleFormPage", ()=>{
258
258
  }), expect.any(Object));
259
259
  });
260
260
  });
261
- it("navigates to bucket lifecycle tab on successful creation", async ()=>{
261
+ it('navigates to bucket lifecycle tab on successful creation', async ()=>{
262
262
  renderBucketLifecycleFormPage();
263
- await fillRequiredFields("success-rule");
263
+ await fillRequiredFields('success-rule');
264
264
  mockSuccessSubmit(mockMutate);
265
- await submitForm("create");
265
+ await submitForm('create');
266
266
  await waitFor(()=>{
267
- expect(mockNavigate).toHaveBeenCalledWith("/buckets/test-bucket?tab=lifecycle");
267
+ expect(mockNavigate).toHaveBeenCalledWith('/buckets/test-bucket?tab=lifecycle');
268
268
  });
269
269
  });
270
- it("displays success toast after rule creation", async ()=>{
270
+ it('displays success toast after rule creation', async ()=>{
271
271
  renderBucketLifecycleFormPage();
272
- await fillRequiredFields("toast-rule");
272
+ await fillRequiredFields('toast-rule');
273
273
  mockSuccessSubmit(mockMutate);
274
- await submitForm("create");
274
+ await submitForm('create');
275
275
  await waitFor(()=>{
276
276
  expect(mockShowToast).toHaveBeenCalledWith({
277
277
  open: true,
278
- message: "Lifecycle rule created successfully",
279
- status: "success"
278
+ message: 'Lifecycle rule created successfully',
279
+ status: 'success'
280
280
  });
281
281
  });
282
282
  });
283
- it("displays error toast when creation fails", async ()=>{
283
+ it('displays error toast when creation fails', async ()=>{
284
284
  renderBucketLifecycleFormPage();
285
- await fillRequiredFields("error-rule");
286
- mockErrorSubmit(mockMutate, "Access Denied");
287
- await submitForm("create");
285
+ await fillRequiredFields('error-rule');
286
+ mockErrorSubmit(mockMutate, 'Access Denied');
287
+ await submitForm('create');
288
288
  await waitFor(()=>{
289
289
  expect(mockShowToast).toHaveBeenCalledWith({
290
290
  open: true,
291
- message: "Access Denied",
292
- status: "error"
291
+ message: 'Access Denied',
292
+ status: 'error'
293
293
  });
294
294
  expect(mockNavigate).not.toHaveBeenCalled();
295
295
  });
296
296
  });
297
- it("appends new rule to existing rules on creation", async ()=>{
297
+ it('appends new rule to existing rules on creation', async ()=>{
298
298
  mockUseGetBucketLifecycle.mockReturnValue({
299
299
  data: {
300
300
  Rules: [
301
301
  {
302
- ID: "existing-rule",
303
- Status: "Enabled",
302
+ ID: 'existing-rule',
303
+ Status: 'Enabled',
304
304
  Filter: {},
305
305
  Expiration: {
306
306
  Days: 90
@@ -308,25 +308,25 @@ describe("BucketLifecycleFormPage", ()=>{
308
308
  }
309
309
  ]
310
310
  },
311
- status: "success"
311
+ status: 'success'
312
312
  });
313
313
  renderBucketLifecycleFormPage();
314
- await fillRequiredFields("new-rule");
314
+ await fillRequiredFields('new-rule');
315
315
  mockSuccessSubmit(mockMutate);
316
- await submitForm("create");
316
+ await submitForm('create');
317
317
  await waitFor(()=>{
318
318
  const call = mockMutate.mock.calls[0][0];
319
319
  expect(call.LifecycleConfiguration.Rules).toHaveLength(2);
320
- expect(call.LifecycleConfiguration.Rules[0].ID).toBe("existing-rule");
321
- expect(call.LifecycleConfiguration.Rules[1].ID).toBe("new-rule");
320
+ expect(call.LifecycleConfiguration.Rules[0].ID).toBe('existing-rule');
321
+ expect(call.LifecycleConfiguration.Rules[1].ID).toBe('new-rule');
322
322
  });
323
323
  });
324
324
  });
325
- describe("Form Submission - Edit Mode", ()=>{
326
- it("updates existing rule in edit mode", async ()=>{
325
+ describe('Form Submission - Edit Mode', ()=>{
326
+ it('updates existing rule in edit mode', async ()=>{
327
327
  const existingRule = {
328
- ID: "update-rule",
329
- Status: "Enabled",
328
+ ID: 'update-rule',
329
+ Status: 'Enabled',
330
330
  Filter: {},
331
331
  Expiration: {
332
332
  Days: 30
@@ -338,30 +338,30 @@ describe("BucketLifecycleFormPage", ()=>{
338
338
  existingRule
339
339
  ]
340
340
  },
341
- status: "success"
341
+ status: 'success'
342
342
  });
343
- renderBucketLifecycleFormPage("test-bucket", "update-rule");
343
+ renderBucketLifecycleFormPage('test-bucket', 'update-rule');
344
344
  await waitFor(()=>{
345
- expect(screen.getByText("Edit Lifecycle Rule")).toBeInTheDocument();
345
+ expect(screen.getByText('Edit Lifecycle Rule')).toBeInTheDocument();
346
346
  });
347
347
  const statusSelect = screen.getByLabelText(/status/i);
348
348
  await user_event.click(statusSelect);
349
- await user_event.click(screen.getByRole("option", {
350
- name: "Disabled"
349
+ await user_event.click(screen.getByRole('option', {
350
+ name: 'Disabled'
351
351
  }));
352
352
  mockSuccessSubmit(mockMutate);
353
- await submitForm("save");
353
+ await submitForm('save');
354
354
  await waitFor(()=>{
355
355
  const call = mockMutate.mock.calls[0][0];
356
356
  expect(call.LifecycleConfiguration.Rules).toHaveLength(1);
357
- expect(call.LifecycleConfiguration.Rules[0].ID).toBe("update-rule");
358
- expect(call.LifecycleConfiguration.Rules[0].Status).toBe("Disabled");
357
+ expect(call.LifecycleConfiguration.Rules[0].ID).toBe('update-rule');
358
+ expect(call.LifecycleConfiguration.Rules[0].Status).toBe('Disabled');
359
359
  });
360
360
  });
361
- it("displays update success toast in edit mode", async ()=>{
361
+ it('displays update success toast in edit mode', async ()=>{
362
362
  const existingRule = {
363
- ID: "edit-rule",
364
- Status: "Enabled",
363
+ ID: 'edit-rule',
364
+ Status: 'Enabled',
365
365
  Filter: {},
366
366
  Expiration: {
367
367
  Days: 30
@@ -373,31 +373,31 @@ describe("BucketLifecycleFormPage", ()=>{
373
373
  existingRule
374
374
  ]
375
375
  },
376
- status: "success"
376
+ status: 'success'
377
377
  });
378
- renderBucketLifecycleFormPage("test-bucket", "edit-rule");
378
+ renderBucketLifecycleFormPage('test-bucket', 'edit-rule');
379
379
  await waitFor(()=>{
380
- expect(screen.getByText("Edit Lifecycle Rule")).toBeInTheDocument();
380
+ expect(screen.getByText('Edit Lifecycle Rule')).toBeInTheDocument();
381
381
  });
382
382
  const statusSelect = screen.getByLabelText(/status/i);
383
383
  await user_event.click(statusSelect);
384
- await user_event.click(screen.getByRole("option", {
385
- name: "Disabled"
384
+ await user_event.click(screen.getByRole('option', {
385
+ name: 'Disabled'
386
386
  }));
387
387
  mockSuccessSubmit(mockMutate);
388
- await submitForm("save");
388
+ await submitForm('save');
389
389
  await waitFor(()=>{
390
390
  expect(mockShowToast).toHaveBeenCalledWith({
391
391
  open: true,
392
- message: "Lifecycle rule updated successfully",
393
- status: "success"
392
+ message: 'Lifecycle rule updated successfully',
393
+ status: 'success'
394
394
  });
395
395
  });
396
396
  });
397
- it("disables save button when form is not dirty", async ()=>{
397
+ it('disables save button when form is not dirty', async ()=>{
398
398
  const existingRule = {
399
- ID: "unchanged-rule",
400
- Status: "Enabled",
399
+ ID: 'unchanged-rule',
400
+ Status: 'Enabled',
401
401
  Filter: {},
402
402
  Expiration: {
403
403
  Days: 30
@@ -409,25 +409,25 @@ describe("BucketLifecycleFormPage", ()=>{
409
409
  existingRule
410
410
  ]
411
411
  },
412
- status: "success"
412
+ status: 'success'
413
413
  });
414
- renderBucketLifecycleFormPage("test-bucket", "unchanged-rule");
414
+ renderBucketLifecycleFormPage('test-bucket', 'unchanged-rule');
415
415
  await waitFor(()=>{
416
- expect(screen.getByText("Edit Lifecycle Rule")).toBeInTheDocument();
416
+ expect(screen.getByText('Edit Lifecycle Rule')).toBeInTheDocument();
417
417
  });
418
- const saveButton = screen.getByRole("button", {
418
+ const saveButton = screen.getByRole('button', {
419
419
  name: /save/i
420
420
  });
421
421
  expect(saveButton).toBeDisabled();
422
422
  });
423
423
  });
424
- describe("Rule Data Loading", ()=>{
425
- it("loads rule with prefix filter correctly", async ()=>{
424
+ describe('Rule Data Loading', ()=>{
425
+ it('loads rule with prefix filter correctly', async ()=>{
426
426
  const rule = {
427
- ID: "prefix-rule",
428
- Status: "Enabled",
427
+ ID: 'prefix-rule',
428
+ Status: 'Enabled',
429
429
  Filter: {
430
- Prefix: "documents/"
430
+ Prefix: 'documents/'
431
431
  },
432
432
  Expiration: {
433
433
  Days: 90
@@ -439,22 +439,22 @@ describe("BucketLifecycleFormPage", ()=>{
439
439
  rule
440
440
  ]
441
441
  },
442
- status: "success"
442
+ status: 'success'
443
443
  });
444
- renderBucketLifecycleFormPage("test-bucket", "prefix-rule");
444
+ renderBucketLifecycleFormPage('test-bucket', 'prefix-rule');
445
445
  await waitFor(()=>{
446
446
  const prefixInput = screen.getByLabelText(/prefix/i);
447
- expect(prefixInput).toHaveValue("documents/");
447
+ expect(prefixInput).toHaveValue('documents/');
448
448
  });
449
449
  });
450
- it("loads rule with single tag filter correctly", async ()=>{
450
+ it('loads rule with single tag filter correctly', async ()=>{
451
451
  const rule = {
452
- ID: "tag-rule",
453
- Status: "Enabled",
452
+ ID: 'tag-rule',
453
+ Status: 'Enabled',
454
454
  Filter: {
455
455
  Tag: {
456
- Key: "env",
457
- Value: "prod"
456
+ Key: 'env',
457
+ Value: 'prod'
458
458
  }
459
459
  },
460
460
  Expiration: {
@@ -467,18 +467,18 @@ describe("BucketLifecycleFormPage", ()=>{
467
467
  rule
468
468
  ]
469
469
  },
470
- status: "success"
470
+ status: 'success'
471
471
  });
472
- renderBucketLifecycleFormPage("test-bucket", "tag-rule");
472
+ renderBucketLifecycleFormPage('test-bucket', 'tag-rule');
473
473
  await waitFor(()=>{
474
- expect(screen.getByDisplayValue("env")).toBeInTheDocument();
475
- expect(screen.getByDisplayValue("prod")).toBeInTheDocument();
474
+ expect(screen.getByDisplayValue('env')).toBeInTheDocument();
475
+ expect(screen.getByDisplayValue('prod')).toBeInTheDocument();
476
476
  });
477
477
  });
478
- it("loads rule with expiration days correctly", async ()=>{
478
+ it('loads rule with expiration days correctly', async ()=>{
479
479
  const rule = {
480
- ID: "expiration-rule",
481
- Status: "Enabled",
480
+ ID: 'expiration-rule',
481
+ Status: 'Enabled',
482
482
  Filter: {},
483
483
  Expiration: {
484
484
  Days: 365
@@ -490,20 +490,20 @@ describe("BucketLifecycleFormPage", ()=>{
490
490
  rule
491
491
  ]
492
492
  },
493
- status: "success"
493
+ status: 'success'
494
494
  });
495
- renderBucketLifecycleFormPage("test-bucket", "expiration-rule");
495
+ renderBucketLifecycleFormPage('test-bucket', 'expiration-rule');
496
496
  await waitFor(()=>{
497
- const expirationToggle = findToggleByLabel("Expiration current version");
497
+ const expirationToggle = findToggleByLabel('Expiration current version');
498
498
  expect(expirationToggle).toBeChecked();
499
499
  const daysInput = screen.getByLabelText(/^days$/i);
500
500
  expect(daysInput).toHaveValue(365);
501
501
  });
502
502
  });
503
- it("loads rule with noncurrent version expiration correctly", async ()=>{
503
+ it('loads rule with noncurrent version expiration correctly', async ()=>{
504
504
  const rule = {
505
- ID: "noncurrent-rule",
506
- Status: "Enabled",
505
+ ID: 'noncurrent-rule',
506
+ Status: 'Enabled',
507
507
  Filter: {},
508
508
  NoncurrentVersionExpiration: {
509
509
  NoncurrentDays: 90,
@@ -516,11 +516,11 @@ describe("BucketLifecycleFormPage", ()=>{
516
516
  rule
517
517
  ]
518
518
  },
519
- status: "success"
519
+ status: 'success'
520
520
  });
521
- renderBucketLifecycleFormPage("test-bucket", "noncurrent-rule");
521
+ renderBucketLifecycleFormPage('test-bucket', 'noncurrent-rule');
522
522
  await waitFor(()=>{
523
- const noncurrentExpirationToggle = findToggleByLabel("Expiration noncurrent version");
523
+ const noncurrentExpirationToggle = findToggleByLabel('Expiration noncurrent version');
524
524
  expect(noncurrentExpirationToggle).toBeChecked();
525
525
  const noncurrentDaysInput = screen.getByLabelText(/noncurrent days/i);
526
526
  expect(noncurrentDaysInput).toHaveValue(90);
@@ -528,10 +528,10 @@ describe("BucketLifecycleFormPage", ()=>{
528
528
  expect(keepVersionsInput).toHaveValue(3);
529
529
  });
530
530
  });
531
- it("loads rule with abort incomplete multipart upload correctly", async ()=>{
531
+ it('loads rule with abort incomplete multipart upload correctly', async ()=>{
532
532
  const rule = {
533
- ID: "mpu-rule",
534
- Status: "Enabled",
533
+ ID: 'mpu-rule',
534
+ Status: 'Enabled',
535
535
  Filter: {},
536
536
  AbortIncompleteMultipartUpload: {
537
537
  DaysAfterInitiation: 7
@@ -543,25 +543,25 @@ describe("BucketLifecycleFormPage", ()=>{
543
543
  rule
544
544
  ]
545
545
  },
546
- status: "success"
546
+ status: 'success'
547
547
  });
548
- renderBucketLifecycleFormPage("test-bucket", "mpu-rule");
548
+ renderBucketLifecycleFormPage('test-bucket', 'mpu-rule');
549
549
  await waitFor(()=>{
550
- const mpuToggle = findToggleByLabel("Expire incomplete multipart upload");
550
+ const mpuToggle = findToggleByLabel('Expire incomplete multipart upload');
551
551
  expect(mpuToggle).toBeChecked();
552
552
  const mpuDaysInput = screen.getByLabelText(/days after initiation/i);
553
553
  expect(mpuDaysInput).toHaveValue(7);
554
554
  });
555
555
  });
556
- it("loads rule with transition correctly", async ()=>{
556
+ it('loads rule with transition correctly', async ()=>{
557
557
  const rule = {
558
- ID: "transition-rule",
559
- Status: "Enabled",
558
+ ID: 'transition-rule',
559
+ Status: 'Enabled',
560
560
  Filter: {},
561
561
  Transitions: [
562
562
  {
563
563
  Days: 30,
564
- StorageClass: "GLACIER"
564
+ StorageClass: 'GLACIER'
565
565
  }
566
566
  ]
567
567
  };
@@ -571,44 +571,44 @@ describe("BucketLifecycleFormPage", ()=>{
571
571
  rule
572
572
  ]
573
573
  },
574
- status: "success"
574
+ status: 'success'
575
575
  });
576
- renderBucketLifecycleFormPage("test-bucket", "transition-rule");
576
+ renderBucketLifecycleFormPage('test-bucket', 'transition-rule');
577
577
  await waitFor(()=>{
578
- const transitionToggle = findToggleByLabel("Transition current version");
578
+ const transitionToggle = findToggleByLabel('Transition current version');
579
579
  expect(transitionToggle).toBeChecked();
580
580
  });
581
581
  });
582
582
  });
583
- describe("Navigation", ()=>{
584
- it("navigates back to bucket lifecycle tab when cancel is clicked", ()=>{
583
+ describe('Navigation', ()=>{
584
+ it('navigates back to bucket lifecycle tab when cancel is clicked', ()=>{
585
585
  renderBucketLifecycleFormPage();
586
- const cancelButton = screen.getByRole("button", {
586
+ const cancelButton = screen.getByRole('button', {
587
587
  name: /cancel/i
588
588
  });
589
589
  fireEvent.click(cancelButton);
590
- expect(mockNavigate).toHaveBeenCalledWith("/buckets/test-bucket?tab=lifecycle");
590
+ expect(mockNavigate).toHaveBeenCalledWith('/buckets/test-bucket?tab=lifecycle');
591
591
  });
592
- it("disables cancel button when mutation is pending", ()=>{
592
+ it('disables cancel button when mutation is pending', ()=>{
593
593
  mockUseSetBucketLifecycle.mockReturnValue({
594
594
  mutate: mockMutate,
595
595
  isPending: true
596
596
  });
597
597
  renderBucketLifecycleFormPage();
598
- const cancelButton = screen.getByRole("button", {
598
+ const cancelButton = screen.getByRole('button', {
599
599
  name: /cancel/i
600
600
  });
601
601
  expect(cancelButton).toBeDisabled();
602
602
  });
603
- it("disables submit button when mutation is pending", async ()=>{
603
+ it('disables submit button when mutation is pending', async ()=>{
604
604
  mockUseSetBucketLifecycle.mockReturnValue({
605
605
  mutate: mockMutate,
606
606
  isPending: true
607
607
  });
608
608
  renderBucketLifecycleFormPage();
609
- await fillRequiredFields("test-rule");
609
+ await fillRequiredFields('test-rule');
610
610
  await waitFor(()=>{
611
- const createButton = screen.getByRole("button", {
611
+ const createButton = screen.getByRole('button', {
612
612
  name: /create/i
613
613
  });
614
614
  expect(createButton).toBeDisabled();