@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,13 +1,13 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { fireEvent, render, screen, waitFor } from "@testing-library/react";
3
+ import { useGetBucketObjectLockConfiguration } from "../../hooks/bucketConfiguration.js";
4
+ import { useEmptyBucket } from "../../hooks/useEmptyBucket.js";
5
+ import { useIsBucketEmpty } from "../../hooks/useIsBucketEmpty.js";
3
6
  import { createTestWrapper } from "../../test/testUtils.js";
4
7
  import { EmptyBucketButton } from "../buckets/EmptyBucketButton.js";
5
- import { useIsBucketEmpty } from "../../hooks/useIsBucketEmpty.js";
6
- import { useEmptyBucket } from "../../hooks/useEmptyBucket.js";
7
- import { useGetBucketObjectLockConfiguration } from "../../hooks/bucketConfiguration.js";
8
- jest.mock("../../hooks/useIsBucketEmpty");
9
- jest.mock("../../hooks/useEmptyBucket");
10
- jest.mock("../../hooks/bucketConfiguration");
8
+ jest.mock('../../hooks/useIsBucketEmpty');
9
+ jest.mock('../../hooks/useEmptyBucket');
10
+ jest.mock('../../hooks/bucketConfiguration');
11
11
  const mockUseIsBucketEmpty = jest.mocked(useIsBucketEmpty);
12
12
  const mockUseEmptyBucket = jest.mocked(useEmptyBucket);
13
13
  const mockUseGetBucketObjectLockConfiguration = jest.mocked(useGetBucketObjectLockConfiguration);
@@ -39,130 +39,130 @@ const mockHookDefaults = ()=>{
39
39
  error: null
40
40
  });
41
41
  };
42
- describe("EmptyBucketButton", ()=>{
42
+ describe('EmptyBucketButton', ()=>{
43
43
  beforeEach(()=>{
44
44
  jest.clearAllMocks();
45
45
  mockHookDefaults();
46
46
  });
47
- it("renders empty button with correct label", ()=>{
47
+ it('renders empty button with correct label', ()=>{
48
48
  renderEmptyBucketButton();
49
- expect(screen.getByRole("button", {
49
+ expect(screen.getByRole('button', {
50
50
  name: /empty bucket/i
51
51
  })).toBeInTheDocument();
52
52
  });
53
- it("disables button when bucket is empty", ()=>{
53
+ it('disables button when bucket is empty', ()=>{
54
54
  mockUseIsBucketEmpty.mockReturnValue({
55
55
  isEmpty: true,
56
56
  isLoading: false,
57
57
  error: null
58
58
  });
59
59
  renderEmptyBucketButton();
60
- const button = screen.getByRole("button", {
60
+ const button = screen.getByRole('button', {
61
61
  name: /empty bucket/i
62
62
  });
63
63
  expect(button).toBeDisabled();
64
64
  });
65
- it("enables button when bucket is not empty", ()=>{
65
+ it('enables button when bucket is not empty', ()=>{
66
66
  mockUseIsBucketEmpty.mockReturnValue({
67
67
  isEmpty: false,
68
68
  isLoading: false,
69
69
  error: null
70
70
  });
71
71
  renderEmptyBucketButton();
72
- const button = screen.getByRole("button", {
72
+ const button = screen.getByRole('button', {
73
73
  name: /empty bucket/i
74
74
  });
75
75
  expect(button).not.toBeDisabled();
76
76
  });
77
- it("opens confirmation modal when button is clicked", ()=>{
77
+ it('opens confirmation modal when button is clicked', ()=>{
78
78
  renderEmptyBucketButton();
79
- const button = screen.getByRole("button", {
79
+ const button = screen.getByRole('button', {
80
80
  name: /empty bucket/i
81
81
  });
82
82
  fireEvent.click(button);
83
83
  expect(screen.getByText(/Empty Bucket 'test-bucket'\?/i)).toBeInTheDocument();
84
84
  expect(screen.getByText(/Emptying a bucket removes all contents and cannot be reversed/i)).toBeInTheDocument();
85
85
  });
86
- it("shows information list in modal", ()=>{
86
+ it('shows information list in modal', ()=>{
87
87
  renderEmptyBucketButton();
88
- const button = screen.getByRole("button", {
88
+ const button = screen.getByRole('button', {
89
89
  name: /empty bucket/i
90
90
  });
91
91
  fireEvent.click(button);
92
92
  expect(screen.getByText(/Emptying a bucket removes all contents and cannot be reversed/i)).toBeInTheDocument();
93
93
  expect(screen.getByText(/New objects added during the empty action may also be removed/i)).toBeInTheDocument();
94
94
  });
95
- it("shows confirmation input field", ()=>{
95
+ it('shows confirmation input field', ()=>{
96
96
  renderEmptyBucketButton();
97
- const button = screen.getByRole("button", {
97
+ const button = screen.getByRole('button', {
98
98
  name: /empty bucket/i
99
99
  });
100
100
  fireEvent.click(button);
101
101
  const input = screen.getByPlaceholderText(/test-bucket/i);
102
102
  expect(input).toBeInTheDocument();
103
103
  });
104
- it("disables empty button until bucket name is typed", ()=>{
104
+ it('disables empty button until bucket name is typed', ()=>{
105
105
  renderEmptyBucketButton();
106
- const button = screen.getByRole("button", {
106
+ const button = screen.getByRole('button', {
107
107
  name: /empty bucket/i
108
108
  });
109
109
  fireEvent.click(button);
110
- const emptyButton = screen.getByRole("button", {
110
+ const emptyButton = screen.getByRole('button', {
111
111
  name: /^empty$/i
112
112
  });
113
113
  expect(emptyButton).toBeDisabled();
114
114
  const input = screen.getByPlaceholderText(/test-bucket/i);
115
115
  fireEvent.change(input, {
116
116
  target: {
117
- value: "test-bucket"
117
+ value: 'test-bucket'
118
118
  }
119
119
  });
120
120
  expect(emptyButton).not.toBeDisabled();
121
121
  });
122
- it("closes modal when cancel is clicked", ()=>{
122
+ it('closes modal when cancel is clicked', ()=>{
123
123
  renderEmptyBucketButton();
124
- const deleteButton = screen.getByRole("button", {
124
+ const deleteButton = screen.getByRole('button', {
125
125
  name: /empty bucket/i
126
126
  });
127
127
  fireEvent.click(deleteButton);
128
- const cancelButton = screen.getByRole("button", {
128
+ const cancelButton = screen.getByRole('button', {
129
129
  name: /cancel/i
130
130
  });
131
131
  fireEvent.click(cancelButton);
132
132
  expect(screen.queryByText(/Empty Bucket 'test-bucket'\?/i)).not.toBeInTheDocument();
133
133
  });
134
- it("resets state when modal is cancelled", ()=>{
134
+ it('resets state when modal is cancelled', ()=>{
135
135
  renderEmptyBucketButton();
136
- const button = screen.getByRole("button", {
136
+ const button = screen.getByRole('button', {
137
137
  name: /empty bucket/i
138
138
  });
139
139
  fireEvent.click(button);
140
140
  const input = screen.getByPlaceholderText(/test-bucket/i);
141
141
  fireEvent.change(input, {
142
142
  target: {
143
- value: "test-bucket"
143
+ value: 'test-bucket'
144
144
  }
145
145
  });
146
- expect(input).toHaveValue("test-bucket");
147
- const cancelButton = screen.getByRole("button", {
146
+ expect(input).toHaveValue('test-bucket');
147
+ const cancelButton = screen.getByRole('button', {
148
148
  name: /cancel/i
149
149
  });
150
150
  fireEvent.click(cancelButton);
151
151
  fireEvent.click(button);
152
152
  const inputAfterReopen = screen.getByPlaceholderText(/test-bucket/i);
153
- expect(inputAfterReopen).toHaveValue("");
153
+ expect(inputAfterReopen).toHaveValue('');
154
154
  });
155
- it("displays correct bucket name in modal title", ()=>{
155
+ it('displays correct bucket name in modal title', ()=>{
156
156
  renderEmptyBucketButton({
157
- bucketName: "my-special-bucket"
157
+ bucketName: 'my-special-bucket'
158
158
  });
159
- const button = screen.getByRole("button", {
159
+ const button = screen.getByRole('button', {
160
160
  name: /empty bucket/i
161
161
  });
162
162
  fireEvent.click(button);
163
163
  expect(screen.getByText(/Empty Bucket 'my-special-bucket'\?/i)).toBeInTheDocument();
164
164
  });
165
- it("shows loading state during deletion", async ()=>{
165
+ it('shows loading state during deletion', async ()=>{
166
166
  const mockEmptyBucket = jest.fn();
167
167
  mockUseEmptyBucket.mockReturnValue({
168
168
  emptyBucket: mockEmptyBucket,
@@ -172,13 +172,13 @@ describe("EmptyBucketButton", ()=>{
172
172
  reset: jest.fn()
173
173
  });
174
174
  renderEmptyBucketButton();
175
- const button = screen.getByRole("button", {
175
+ const button = screen.getByRole('button', {
176
176
  name: /empty bucket/i
177
177
  });
178
178
  fireEvent.click(button);
179
179
  expect(screen.getByText(/Deletion in progress.../i)).toBeInTheDocument();
180
180
  });
181
- it("completes empty bucket operation successfully and shows summary", async ()=>{
181
+ it('completes empty bucket operation successfully and shows summary', async ()=>{
182
182
  const mockEmptyBucket = jest.fn().mockResolvedValue({
183
183
  success: true,
184
184
  deletedCount: 100,
@@ -193,48 +193,48 @@ describe("EmptyBucketButton", ()=>{
193
193
  reset: jest.fn()
194
194
  });
195
195
  renderEmptyBucketButton();
196
- const button = screen.getByRole("button", {
196
+ const button = screen.getByRole('button', {
197
197
  name: /empty bucket/i
198
198
  });
199
199
  fireEvent.click(button);
200
200
  const input = screen.getByPlaceholderText(/test-bucket/i);
201
201
  fireEvent.change(input, {
202
202
  target: {
203
- value: "test-bucket"
203
+ value: 'test-bucket'
204
204
  }
205
205
  });
206
- const emptyButton = screen.getByRole("button", {
206
+ const emptyButton = screen.getByRole('button', {
207
207
  name: /^empty$/i
208
208
  });
209
209
  fireEvent.click(emptyButton);
210
210
  await waitFor(()=>{
211
- expect(mockEmptyBucket).toHaveBeenCalledWith("test-bucket");
211
+ expect(mockEmptyBucket).toHaveBeenCalledWith('test-bucket');
212
212
  });
213
213
  });
214
- it("displays error when deletion fails", ()=>{
214
+ it('displays error when deletion fails', ()=>{
215
215
  mockUseEmptyBucket.mockReturnValue({
216
216
  emptyBucket: jest.fn(),
217
217
  isEmptying: false,
218
- error: new Error("Network error"),
218
+ error: new Error('Network error'),
219
219
  result: null,
220
220
  reset: jest.fn()
221
221
  });
222
222
  renderEmptyBucketButton();
223
- const button = screen.getByRole("button", {
223
+ const button = screen.getByRole('button', {
224
224
  name: /empty bucket/i
225
225
  });
226
226
  fireEvent.click(button);
227
227
  expect(screen.getByText(/Network error/i)).toBeInTheDocument();
228
228
  });
229
- it("calls emptyBucket when user confirms", async ()=>{
229
+ it('calls emptyBucket when user confirms', async ()=>{
230
230
  const mockEmptyBucket = jest.fn().mockResolvedValue({
231
231
  success: false,
232
232
  deletedCount: 50,
233
233
  errors: [
234
234
  {
235
- key: "file1.txt",
236
- code: "AccessDenied",
237
- message: "Access denied"
235
+ key: 'file1.txt',
236
+ code: 'AccessDenied',
237
+ message: 'Access denied'
238
238
  }
239
239
  ],
240
240
  limitReached: false
@@ -247,53 +247,53 @@ describe("EmptyBucketButton", ()=>{
247
247
  reset: jest.fn()
248
248
  });
249
249
  renderEmptyBucketButton();
250
- const button = screen.getByRole("button", {
250
+ const button = screen.getByRole('button', {
251
251
  name: /empty bucket/i
252
252
  });
253
253
  fireEvent.click(button);
254
254
  const input = screen.getByPlaceholderText(/test-bucket/i);
255
255
  fireEvent.change(input, {
256
256
  target: {
257
- value: "test-bucket"
257
+ value: 'test-bucket'
258
258
  }
259
259
  });
260
- const emptyButton = screen.getByRole("button", {
260
+ const emptyButton = screen.getByRole('button', {
261
261
  name: /^empty$/i
262
262
  });
263
263
  fireEvent.click(emptyButton);
264
264
  await waitFor(()=>{
265
- expect(mockEmptyBucket).toHaveBeenCalledWith("test-bucket");
265
+ expect(mockEmptyBucket).toHaveBeenCalledWith('test-bucket');
266
266
  });
267
267
  });
268
- it("displays Object Lock warning when enabled", ()=>{
268
+ it('displays Object Lock warning when enabled', ()=>{
269
269
  mockUseGetBucketObjectLockConfiguration.mockReturnValue({
270
270
  data: {
271
271
  ObjectLockConfiguration: {
272
- ObjectLockEnabled: "Enabled"
272
+ ObjectLockEnabled: 'Enabled'
273
273
  }
274
274
  },
275
275
  isLoading: false,
276
276
  error: null
277
277
  });
278
278
  renderEmptyBucketButton();
279
- const button = screen.getByRole("button", {
279
+ const button = screen.getByRole('button', {
280
280
  name: /empty bucket/i
281
281
  });
282
282
  fireEvent.click(button);
283
283
  expect(screen.getByText(/locked in governance mode/i)).toBeInTheDocument();
284
284
  });
285
- it("does not show Object Lock warning when disabled", ()=>{
285
+ it('does not show Object Lock warning when disabled', ()=>{
286
286
  mockUseGetBucketObjectLockConfiguration.mockReturnValue({
287
287
  data: {
288
288
  ObjectLockConfiguration: {
289
- ObjectLockEnabled: "Disabled"
289
+ ObjectLockEnabled: 'Disabled'
290
290
  }
291
291
  },
292
292
  isLoading: false,
293
293
  error: null
294
294
  });
295
295
  renderEmptyBucketButton();
296
- const button = screen.getByRole("button", {
296
+ const button = screen.getByRole('button', {
297
297
  name: /empty bucket/i
298
298
  });
299
299
  fireEvent.click(button);
@@ -1,14 +1,14 @@
1
1
  import { jsx } 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 } from "react-router-dom";
5
- import { createQueryWrapper } from "../../test/testUtils.js";
4
+ import { MemoryRouter } from "react-router";
5
+ import { createTestWrapper } from "../../test/testUtils.js";
6
6
  import { MetadataSearch } from "../search/MetadataSearch.js";
7
7
  const renderMetadataSearch = (props = {}, initialEntries = [
8
- "/bucket/test-bucket"
8
+ '/bucket/test-bucket'
9
9
  ])=>{
10
- const QueryWrapper = createQueryWrapper();
11
- return render(/*#__PURE__*/ jsx(QueryWrapper, {
10
+ const TestWrapper = createTestWrapper();
11
+ return render(/*#__PURE__*/ jsx(TestWrapper, {
12
12
  children: /*#__PURE__*/ jsx(MemoryRouter, {
13
13
  initialEntries: initialEntries,
14
14
  children: /*#__PURE__*/ jsx(MetadataSearch, {
@@ -18,50 +18,50 @@ const renderMetadataSearch = (props = {}, initialEntries = [
18
18
  })
19
19
  }));
20
20
  };
21
- describe("MetadataSearch", ()=>{
21
+ describe('MetadataSearch', ()=>{
22
22
  const getInput = ()=>screen.getByPlaceholderText(/Metadata Search/i);
23
- it("renders search input with placeholder", ()=>{
23
+ it('renders search input with placeholder', ()=>{
24
24
  renderMetadataSearch();
25
25
  expect(getInput()).toBeInTheDocument();
26
26
  expect(screen.getByPlaceholderText(/Metadata Search/i)).toBeInTheDocument();
27
27
  });
28
- it("renders search button", ()=>{
28
+ it('renders search button', ()=>{
29
29
  renderMetadataSearch();
30
- expect(screen.getByRole("button", {
30
+ expect(screen.getByRole('button', {
31
31
  name: /execute metadata search/i
32
32
  })).toBeInTheDocument();
33
33
  });
34
- it("search button is disabled when input is empty", ()=>{
34
+ it('search button is disabled when input is empty', ()=>{
35
35
  renderMetadataSearch();
36
- const searchButton = screen.getByRole("button", {
36
+ const searchButton = screen.getByRole('button', {
37
37
  name: /execute metadata search/i
38
38
  });
39
39
  expect(searchButton).toBeDisabled();
40
40
  });
41
- it("search button is enabled when input has text", async ()=>{
41
+ it('search button is enabled when input has text', async ()=>{
42
42
  renderMetadataSearch();
43
43
  const input = getInput();
44
- const searchButton = screen.getByRole("button", {
44
+ const searchButton = screen.getByRole('button', {
45
45
  name: /execute metadata search/i
46
46
  });
47
- await user_event.type(input, "test query");
47
+ await user_event.type(input, 'test query');
48
48
  expect(searchButton).toBeEnabled();
49
49
  });
50
- it("shows search icon by default", ()=>{
50
+ it('shows search icon by default', ()=>{
51
51
  renderMetadataSearch();
52
52
  const input = getInput();
53
53
  const searchIcon = input.parentElement?.querySelector('[aria-label*="Search"]');
54
54
  expect(searchIcon).toBeInTheDocument();
55
55
  });
56
- it("shows check icon when metadata search is active", ()=>{
56
+ it('shows check icon when metadata search is active', ()=>{
57
57
  renderMetadataSearch({}, [
58
- "/bucket/test-bucket?metadatasearch=test"
58
+ '/bucket/test-bucket?metadatasearch=test'
59
59
  ]);
60
60
  const input = getInput();
61
61
  const checkIcon = input.parentElement?.querySelector('[aria-label*="Check"]');
62
62
  expect(checkIcon).toBeInTheDocument();
63
63
  });
64
- it("shows error icon when error prop is true", ()=>{
64
+ it('shows error icon when error prop is true', ()=>{
65
65
  renderMetadataSearch({
66
66
  isError: true
67
67
  });
@@ -69,133 +69,133 @@ describe("MetadataSearch", ()=>{
69
69
  const errorIcon = input.parentElement?.querySelector('[aria-label*="Close"]');
70
70
  expect(errorIcon).toBeInTheDocument();
71
71
  });
72
- it("populates input with existing search query from URL", ()=>{
72
+ it('populates input with existing search query from URL', ()=>{
73
73
  renderMetadataSearch({}, [
74
- "/bucket/test-bucket?metadatasearch=existing+query"
74
+ '/bucket/test-bucket?metadatasearch=existing+query'
75
75
  ]);
76
76
  const input = getInput();
77
- expect(input).toHaveValue("existing query");
77
+ expect(input).toHaveValue('existing query');
78
78
  });
79
- it("shows reset button when input has text", async ()=>{
79
+ it('shows reset button when input has text', async ()=>{
80
80
  renderMetadataSearch();
81
81
  const input = getInput();
82
- await user_event.type(input, "test query");
83
- expect(screen.getByRole("button", {
82
+ await user_event.type(input, 'test query');
83
+ expect(screen.getByRole('button', {
84
84
  name: /clear search input/i
85
85
  })).toBeInTheDocument();
86
86
  });
87
- it("clears input when reset button is clicked", async ()=>{
87
+ it('clears input when reset button is clicked', async ()=>{
88
88
  renderMetadataSearch();
89
89
  const input = getInput();
90
- await user_event.type(input, "test query");
91
- const resetButton = screen.getByRole("button", {
90
+ await user_event.type(input, 'test query');
91
+ const resetButton = screen.getByRole('button', {
92
92
  name: /clear search input/i
93
93
  });
94
94
  fireEvent.click(resetButton);
95
- expect(input).toHaveValue("");
95
+ expect(input).toHaveValue('');
96
96
  });
97
- it("shows hints when input is clicked and empty", async ()=>{
97
+ it('shows hints when input is clicked and empty', async ()=>{
98
98
  renderMetadataSearch();
99
99
  const input = getInput();
100
100
  fireEvent.click(input);
101
101
  await waitFor(()=>{
102
- expect(screen.getByText("Suggestions")).toBeInTheDocument();
102
+ expect(screen.getByText('Suggestions')).toBeInTheDocument();
103
103
  });
104
104
  });
105
- it("does not show hints when input has text", async ()=>{
105
+ it('does not show hints when input has text', async ()=>{
106
106
  renderMetadataSearch();
107
107
  const input = getInput();
108
- await user_event.type(input, "test");
108
+ await user_event.type(input, 'test');
109
109
  fireEvent.click(input);
110
- expect(screen.queryByText("Suggestions")).not.toBeInTheDocument();
110
+ expect(screen.queryByText('Suggestions')).not.toBeInTheDocument();
111
111
  });
112
- it("hides hints when clicking outside", async ()=>{
112
+ it('hides hints when clicking outside', async ()=>{
113
113
  renderMetadataSearch();
114
114
  const input = getInput();
115
115
  fireEvent.click(input);
116
116
  await waitFor(()=>{
117
- expect(screen.getByText("Suggestions")).toBeInTheDocument();
117
+ expect(screen.getByText('Suggestions')).toBeInTheDocument();
118
118
  });
119
119
  fireEvent.mouseDown(document.body);
120
120
  await waitFor(()=>{
121
- expect(screen.queryByText("Suggestions")).not.toBeInTheDocument();
121
+ expect(screen.queryByText('Suggestions')).not.toBeInTheDocument();
122
122
  });
123
123
  });
124
- it("displays search hint examples", async ()=>{
124
+ it('displays search hint examples', async ()=>{
125
125
  renderMetadataSearch();
126
126
  const input = getInput();
127
127
  fireEvent.click(input);
128
128
  await waitFor(()=>{
129
129
  expect(screen.getByText('files with extension ".pdf"')).toBeInTheDocument();
130
- expect(screen.getByText("files bigger than 1MB")).toBeInTheDocument();
131
- expect(screen.getByText("files tagged with color blue")).toBeInTheDocument();
130
+ expect(screen.getByText('files bigger than 1MB')).toBeInTheDocument();
131
+ expect(screen.getByText('files tagged with color blue')).toBeInTheDocument();
132
132
  });
133
133
  });
134
- it("applies hint to input when hint is clicked", async ()=>{
134
+ it('applies hint to input when hint is clicked', async ()=>{
135
135
  renderMetadataSearch();
136
136
  const input = getInput();
137
137
  fireEvent.click(input);
138
138
  await waitFor(()=>{
139
- expect(screen.getByText("Suggestions")).toBeInTheDocument();
139
+ expect(screen.getByText('Suggestions')).toBeInTheDocument();
140
140
  });
141
141
  const pdfHint = screen.getByText('files with extension ".pdf"');
142
142
  fireEvent.click(pdfHint);
143
- expect(input).toHaveValue("key like /pdf$/");
144
- expect(screen.queryByText("Suggestions")).not.toBeInTheDocument();
143
+ expect(input).toHaveValue('key like /pdf$/');
144
+ expect(screen.queryByText('Suggestions')).not.toBeInTheDocument();
145
145
  });
146
- it("focuses input after hint is selected", async ()=>{
146
+ it('focuses input after hint is selected', async ()=>{
147
147
  renderMetadataSearch();
148
148
  const input = getInput();
149
149
  fireEvent.click(input);
150
150
  await waitFor(()=>{
151
- expect(screen.getByText("Suggestions")).toBeInTheDocument();
151
+ expect(screen.getByText('Suggestions')).toBeInTheDocument();
152
152
  });
153
- const hint = screen.getByText("files bigger than 1MB");
153
+ const hint = screen.getByText('files bigger than 1MB');
154
154
  fireEvent.click(hint);
155
155
  expect(input).toHaveFocus();
156
156
  });
157
- it("submits search when form is submitted", async ()=>{
157
+ it('submits search when form is submitted', async ()=>{
158
158
  renderMetadataSearch();
159
159
  const input = getInput();
160
- const searchButton = screen.getByRole("button", {
160
+ const searchButton = screen.getByRole('button', {
161
161
  name: /execute metadata search/i
162
162
  });
163
- await user_event.type(input, "content-type=application/pdf");
163
+ await user_event.type(input, 'content-type=application/pdf');
164
164
  fireEvent.click(searchButton);
165
- expect(input).toHaveValue("content-type=application/pdf");
165
+ expect(input).toHaveValue('content-type=application/pdf');
166
166
  });
167
- it("submits search when Enter key is pressed", async ()=>{
167
+ it('submits search when Enter key is pressed', async ()=>{
168
168
  renderMetadataSearch();
169
169
  const input = getInput();
170
- await user_event.type(input, "key like /test$/");
171
- fireEvent.submit(input.closest("form"));
172
- expect(input).toHaveValue("key like /test$/");
170
+ await user_event.type(input, 'key like /test$/');
171
+ fireEvent.submit(input.closest('form'));
172
+ expect(input).toHaveValue('key like /test$/');
173
173
  });
174
- it("is hidden when prefix points to a file", ()=>{
174
+ it('is hidden when prefix points to a file', ()=>{
175
175
  const { container } = renderMetadataSearch({}, [
176
- "/bucket/test-bucket?prefix=folder/file.txt"
176
+ '/bucket/test-bucket?prefix=folder/file.txt'
177
177
  ]);
178
- const form = container.querySelector("form");
178
+ const form = container.querySelector('form');
179
179
  expect(form).toHaveStyle({
180
- visibility: "hidden"
180
+ visibility: 'hidden'
181
181
  });
182
182
  });
183
- it("is hidden when prefix is a folder", ()=>{
183
+ it('is hidden when prefix is a folder', ()=>{
184
184
  const { container } = renderMetadataSearch({}, [
185
- "/bucket/test-bucket?prefix=folder/"
185
+ '/bucket/test-bucket?prefix=folder/'
186
186
  ]);
187
- const form = container.querySelector("form");
187
+ const form = container.querySelector('form');
188
188
  expect(form).toHaveStyle({
189
- visibility: "hidden"
189
+ visibility: 'hidden'
190
190
  });
191
191
  });
192
- it("prevents search submission when prefix points to a file", async ()=>{
192
+ it('prevents search submission when prefix points to a file', async ()=>{
193
193
  const { container } = renderMetadataSearch({}, [
194
- "/bucket/test-bucket?prefix=folder/file.txt"
194
+ '/bucket/test-bucket?prefix=folder/file.txt'
195
195
  ]);
196
196
  const input = getInput();
197
197
  const searchButton = container.querySelector('button[type="submit"]');
198
- await user_event.type(input, "test query");
198
+ await user_event.type(input, 'test query');
199
199
  expect(searchButton).toBeDisabled();
200
200
  });
201
201
  });