@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
@@ -18,86 +18,86 @@ const renderBucketReplicationList = (props = {})=>{
18
18
  };
19
19
  const mockReplicationRules = [
20
20
  {
21
- ID: "rule-1",
22
- Status: "Enabled",
21
+ ID: 'rule-1',
22
+ Status: 'Enabled',
23
23
  Priority: 1,
24
24
  Destination: {
25
- Bucket: "arn:aws:s3:::destination-bucket-1",
26
- StorageClass: "STANDARD"
25
+ Bucket: 'arn:aws:s3:::destination-bucket-1',
26
+ StorageClass: 'STANDARD'
27
27
  }
28
28
  },
29
29
  {
30
- ID: "rule-2",
31
- Status: "Disabled",
30
+ ID: 'rule-2',
31
+ Status: 'Disabled',
32
32
  Priority: 2,
33
33
  Destination: {
34
- Bucket: "arn:aws:s3:::123456789012:backup-bucket",
35
- StorageClass: "GLACIER",
36
- Account: "123456789012"
34
+ Bucket: 'arn:aws:s3:::123456789012:backup-bucket',
35
+ StorageClass: 'GLACIER',
36
+ Account: '123456789012'
37
37
  }
38
38
  },
39
39
  {
40
- ID: "rule-3",
41
- Status: "Enabled",
40
+ ID: 'rule-3',
41
+ Status: 'Enabled',
42
42
  Priority: 100,
43
43
  Destination: {
44
- Bucket: "arn:aws:s3:::logs-backup",
45
- StorageClass: "ONEZONE_IA"
44
+ Bucket: 'arn:aws:s3:::logs-backup',
45
+ StorageClass: 'ONEZONE_IA'
46
46
  }
47
47
  }
48
48
  ];
49
49
  const mockRuleWithoutPriority = {
50
- ID: "no-priority-rule",
51
- Status: "Enabled",
50
+ ID: 'no-priority-rule',
51
+ Status: 'Enabled',
52
52
  Destination: {
53
- Bucket: "arn:aws:s3:::simple-backup"
53
+ Bucket: 'arn:aws:s3:::simple-backup'
54
54
  }
55
55
  };
56
56
  const mockRuleWithoutStorageClass = {
57
- ID: "no-storage-class-rule",
58
- Status: "Enabled",
57
+ ID: 'no-storage-class-rule',
58
+ Status: 'Enabled',
59
59
  Priority: 5,
60
60
  Destination: {
61
- Bucket: "arn:aws:s3:::mirror-bucket"
61
+ Bucket: 'arn:aws:s3:::mirror-bucket'
62
62
  }
63
63
  };
64
- describe("BucketReplicationList", ()=>{
64
+ describe('BucketReplicationList', ()=>{
65
65
  beforeEach(()=>{
66
66
  jest.clearAllMocks();
67
67
  mockOffsetSize(800, 600);
68
68
  });
69
- it("shows a table with proper headers", ()=>{
69
+ it('shows a table with proper headers', ()=>{
70
70
  renderBucketReplicationList({
71
71
  replicationRules: mockReplicationRules
72
72
  });
73
- expect(screen.getByRole("grid")).toBeInTheDocument();
74
- expect(screen.getByText("Rule ID")).toBeInTheDocument();
75
- expect(screen.getByText("Status")).toBeInTheDocument();
76
- expect(screen.getByText("Destination")).toBeInTheDocument();
77
- expect(screen.getByText("Priority")).toBeInTheDocument();
73
+ expect(screen.getByRole('grid')).toBeInTheDocument();
74
+ expect(screen.getByText('Rule ID')).toBeInTheDocument();
75
+ expect(screen.getByText('Status')).toBeInTheDocument();
76
+ expect(screen.getByText('Destination')).toBeInTheDocument();
77
+ expect(screen.getByText('Priority')).toBeInTheDocument();
78
78
  });
79
- it("displays replication rules with their IDs", ()=>{
79
+ it('displays replication rules with their IDs', ()=>{
80
80
  renderBucketReplicationList({
81
81
  replicationRules: mockReplicationRules
82
82
  });
83
- expect(screen.getByText("rule-1")).toBeInTheDocument();
84
- expect(screen.getByText("rule-2")).toBeInTheDocument();
85
- expect(screen.getByText("rule-3")).toBeInTheDocument();
83
+ expect(screen.getByText('rule-1')).toBeInTheDocument();
84
+ expect(screen.getByText('rule-2')).toBeInTheDocument();
85
+ expect(screen.getByText('rule-3')).toBeInTheDocument();
86
86
  });
87
- it("displays status as Active for Enabled rules", ()=>{
87
+ it('displays status as Active for Enabled rules', ()=>{
88
88
  renderBucketReplicationList({
89
89
  replicationRules: mockReplicationRules
90
90
  });
91
- const activeStatuses = screen.getAllByText("Active");
91
+ const activeStatuses = screen.getAllByText('Active');
92
92
  expect(activeStatuses.length).toBe(2);
93
93
  });
94
- it("displays status as Inactive for Disabled rules", ()=>{
94
+ it('displays status as Inactive for Disabled rules', ()=>{
95
95
  renderBucketReplicationList({
96
96
  replicationRules: mockReplicationRules
97
97
  });
98
- expect(screen.getByText("Inactive")).toBeInTheDocument();
98
+ expect(screen.getByText('Inactive')).toBeInTheDocument();
99
99
  });
100
- it("displays replication action with bucket name", ()=>{
100
+ it('displays replication action with bucket name', ()=>{
101
101
  renderBucketReplicationList({
102
102
  replicationRules: mockReplicationRules
103
103
  });
@@ -105,7 +105,7 @@ describe("BucketReplicationList", ()=>{
105
105
  expect(screen.getByText(/Replicate to backup-bucket/)).toBeInTheDocument();
106
106
  expect(screen.getByText(/Replicate to logs-backup/)).toBeInTheDocument();
107
107
  });
108
- it("displays storage class in actions column", ()=>{
108
+ it('displays storage class in actions column', ()=>{
109
109
  renderBucketReplicationList({
110
110
  replicationRules: mockReplicationRules
111
111
  });
@@ -121,19 +121,19 @@ describe("BucketReplicationList", ()=>{
121
121
  exact: false
122
122
  })).toBeInTheDocument();
123
123
  });
124
- it("displays shortened account ID for cross-account replication", ()=>{
124
+ it('displays shortened account ID for cross-account replication', ()=>{
125
125
  renderBucketReplicationList({
126
126
  replicationRules: mockReplicationRules
127
127
  });
128
128
  expect(screen.getByText(/account: 123\.\.\.012/)).toBeInTheDocument();
129
129
  });
130
- it("displays priority values correctly", ()=>{
130
+ it('displays priority values correctly', ()=>{
131
131
  renderBucketReplicationList({
132
132
  replicationRules: mockReplicationRules
133
133
  });
134
- expect(screen.getByText("1")).toBeInTheDocument();
135
- expect(screen.getByText("2")).toBeInTheDocument();
136
- expect(screen.getByText("100")).toBeInTheDocument();
134
+ expect(screen.getByText('1')).toBeInTheDocument();
135
+ expect(screen.getByText('2')).toBeInTheDocument();
136
+ expect(screen.getByText('100')).toBeInTheDocument();
137
137
  });
138
138
  it("displays 'None' for rules without priority", ()=>{
139
139
  renderBucketReplicationList({
@@ -141,9 +141,9 @@ describe("BucketReplicationList", ()=>{
141
141
  mockRuleWithoutPriority
142
142
  ]
143
143
  });
144
- expect(screen.getByText("None")).toBeInTheDocument();
144
+ expect(screen.getByText('None')).toBeInTheDocument();
145
145
  });
146
- it("displays action without storage class when not provided", ()=>{
146
+ it('displays action without storage class when not provided', ()=>{
147
147
  renderBucketReplicationList({
148
148
  replicationRules: [
149
149
  mockRuleWithoutStorageClass
@@ -151,66 +151,66 @@ describe("BucketReplicationList", ()=>{
151
151
  });
152
152
  const actionText = screen.getByText(/Replicate to mirror-bucket/);
153
153
  expect(actionText).toBeInTheDocument();
154
- expect(actionText.textContent).toBe("Replicate to mirror-bucket");
154
+ expect(actionText.textContent).toBe('Replicate to mirror-bucket');
155
155
  });
156
- it("renders create rule button as enabled", ()=>{
156
+ it('renders create rule button as enabled', ()=>{
157
157
  renderBucketReplicationList({
158
158
  replicationRules: mockReplicationRules
159
159
  });
160
- const createButton = screen.getByRole("button", {
160
+ const createButton = screen.getByRole('button', {
161
161
  name: /create rule/i
162
162
  });
163
163
  expect(createButton).toBeInTheDocument();
164
164
  expect(createButton).toBeEnabled();
165
165
  });
166
- it("calls create rule callback when button is clicked", ()=>{
166
+ it('calls create rule callback when button is clicked', ()=>{
167
167
  const onCreateRule = jest.fn();
168
168
  renderBucketReplicationList({
169
169
  replicationRules: mockReplicationRules,
170
170
  onCreateRule
171
171
  });
172
- const createButton = screen.getByRole("button", {
172
+ const createButton = screen.getByRole('button', {
173
173
  name: /create rule/i
174
174
  });
175
175
  expect(createButton).toBeEnabled();
176
176
  fireEvent.click(createButton);
177
177
  expect(onCreateRule).toHaveBeenCalled();
178
178
  });
179
- it("handles edit button click", ()=>{
179
+ it('handles edit button click', ()=>{
180
180
  const onEditRule = jest.fn();
181
181
  renderBucketReplicationList({
182
182
  replicationRules: mockReplicationRules,
183
183
  onEditRule
184
184
  });
185
- const editButtons = screen.getAllByRole("button", {
185
+ const editButtons = screen.getAllByRole('button', {
186
186
  name: /edit rule/i
187
187
  });
188
188
  expect(editButtons.length).toBeGreaterThanOrEqual(3);
189
189
  fireEvent.click(editButtons[0]);
190
190
  expect(onEditRule).toHaveBeenCalledWith(expect.any(String));
191
191
  });
192
- it("renders delete buttons for each rule", ()=>{
192
+ it('renders delete buttons for each rule', ()=>{
193
193
  renderBucketReplicationList({
194
194
  replicationRules: mockReplicationRules
195
195
  });
196
- const deleteButtons = screen.getAllByRole("button", {
196
+ const deleteButtons = screen.getAllByRole('button', {
197
197
  name: /delete rule/i
198
198
  });
199
199
  expect(deleteButtons.length).toBeGreaterThanOrEqual(3);
200
200
  });
201
- it("handles empty replication rules list", ()=>{
201
+ it('handles empty replication rules list', ()=>{
202
202
  renderBucketReplicationList({
203
203
  replicationRules: []
204
204
  });
205
- expect(screen.getByRole("grid")).toBeInTheDocument();
205
+ expect(screen.getByRole('grid')).toBeInTheDocument();
206
206
  expect(screen.getByText(/no replication rules found/i)).toBeInTheDocument();
207
207
  });
208
- it("handles replication rules without IDs", ()=>{
208
+ it('handles replication rules without IDs', ()=>{
209
209
  const ruleWithoutId = {
210
- Status: "Enabled",
210
+ Status: 'Enabled',
211
211
  Priority: 1,
212
212
  Destination: {
213
- Bucket: "arn:aws:s3:::test-bucket"
213
+ Bucket: 'arn:aws:s3:::test-bucket'
214
214
  }
215
215
  };
216
216
  renderBucketReplicationList({
@@ -218,60 +218,60 @@ describe("BucketReplicationList", ()=>{
218
218
  ruleWithoutId
219
219
  ]
220
220
  });
221
- expect(screen.getByText("-")).toBeInTheDocument();
221
+ expect(screen.getByText('-')).toBeInTheDocument();
222
222
  });
223
- it("shows loading state when replicationStatus is loading", ()=>{
223
+ it('shows loading state when replicationStatus is loading', ()=>{
224
224
  renderBucketReplicationList({
225
225
  replicationRules: [],
226
- replicationStatus: "loading"
226
+ replicationStatus: 'loading'
227
227
  });
228
- expect(screen.getByRole("grid")).toBeInTheDocument();
229
- expect(screen.queryByText("rule-1")).not.toBeInTheDocument();
228
+ expect(screen.getByRole('grid')).toBeInTheDocument();
229
+ expect(screen.queryByText('rule-1')).not.toBeInTheDocument();
230
230
  });
231
- it("shows error state when replicationStatus is error", ()=>{
231
+ it('shows error state when replicationStatus is error', ()=>{
232
232
  renderBucketReplicationList({
233
233
  replicationRules: [],
234
- replicationStatus: "error"
234
+ replicationStatus: 'error'
235
235
  });
236
- expect(screen.getByRole("grid")).toBeInTheDocument();
237
- expect(screen.queryByText("rule-1")).not.toBeInTheDocument();
236
+ expect(screen.getByRole('grid')).toBeInTheDocument();
237
+ expect(screen.queryByText('rule-1')).not.toBeInTheDocument();
238
238
  });
239
- it("shows data when replicationStatus is success", ()=>{
239
+ it('shows data when replicationStatus is success', ()=>{
240
240
  renderBucketReplicationList({
241
241
  replicationRules: mockReplicationRules,
242
- replicationStatus: "success"
242
+ replicationStatus: 'success'
243
243
  });
244
- expect(screen.getByRole("grid")).toBeInTheDocument();
245
- expect(screen.getByText("rule-1")).toBeInTheDocument();
246
- expect(screen.getByText("rule-2")).toBeInTheDocument();
244
+ expect(screen.getByRole('grid')).toBeInTheDocument();
245
+ expect(screen.getByText('rule-1')).toBeInTheDocument();
246
+ expect(screen.getByText('rule-2')).toBeInTheDocument();
247
247
  });
248
- it("works when no callbacks are provided", ()=>{
248
+ it('works when no callbacks are provided', ()=>{
249
249
  expect(()=>{
250
250
  renderBucketReplicationList({
251
251
  replicationRules: mockReplicationRules
252
252
  });
253
253
  }).not.toThrow();
254
254
  });
255
- it("renders rows that can be selected", ()=>{
255
+ it('renders rows that can be selected', ()=>{
256
256
  renderBucketReplicationList({
257
257
  replicationRules: mockReplicationRules
258
258
  });
259
- const rows = screen.getAllByRole("row");
259
+ const rows = screen.getAllByRole('row');
260
260
  expect(rows.length).toBeGreaterThan(3);
261
261
  const dataRows = rows.slice(1);
262
262
  dataRows.forEach((row)=>{
263
- expect(row).toHaveAttribute("aria-selected");
263
+ expect(row).toHaveAttribute('aria-selected');
264
264
  });
265
265
  });
266
- it("displays complex cross-account replication with all details", ()=>{
266
+ it('displays complex cross-account replication with all details', ()=>{
267
267
  const complexRule = {
268
- ID: "complex-rule",
269
- Status: "Enabled",
268
+ ID: 'complex-rule',
269
+ Status: 'Enabled',
270
270
  Priority: 25,
271
271
  Destination: {
272
- Bucket: "arn:aws:s3:::999888777666555:shared-bucket",
273
- Account: "999888777666555",
274
- StorageClass: "GLACIER_IR"
272
+ Bucket: 'arn:aws:s3:::999888777666555:shared-bucket',
273
+ Account: '999888777666555',
274
+ StorageClass: 'GLACIER_IR'
275
275
  }
276
276
  };
277
277
  renderBucketReplicationList({
@@ -283,62 +283,62 @@ describe("BucketReplicationList", ()=>{
283
283
  expect(screen.getByText(/GLACIER_IR/)).toBeInTheDocument();
284
284
  expect(screen.getByText(/Replicate to shared-bucket \(account: 999\.\.\.555, GLACIER_IR\)/)).toBeInTheDocument();
285
285
  });
286
- it("displays action text without account ID for same-account replication", ()=>{
286
+ it('displays action text without account ID for same-account replication', ()=>{
287
287
  renderBucketReplicationList({
288
288
  replicationRules: [
289
289
  mockReplicationRules[0]
290
290
  ]
291
291
  });
292
292
  const actionText = screen.getByText(/Replicate to destination-bucket-1/);
293
- expect(actionText.textContent).not.toContain("account:");
293
+ expect(actionText.textContent).not.toContain('account:');
294
294
  });
295
- it("renders with custom bucket name and replication role", ()=>{
295
+ it('renders with custom bucket name and replication role', ()=>{
296
296
  renderBucketReplicationList({
297
297
  replicationRules: mockReplicationRules,
298
- bucketName: "custom-bucket",
299
- replicationRole: "arn:aws:iam::999888777666:role/custom-role"
298
+ bucketName: 'custom-bucket',
299
+ replicationRole: 'arn:aws:iam::999888777666:role/custom-role'
300
300
  });
301
- expect(screen.getByText("rule-1")).toBeInTheDocument();
302
- expect(screen.getByText("rule-2")).toBeInTheDocument();
303
- expect(screen.getByText("rule-3")).toBeInTheDocument();
301
+ expect(screen.getByText('rule-1')).toBeInTheDocument();
302
+ expect(screen.getByText('rule-2')).toBeInTheDocument();
303
+ expect(screen.getByText('rule-3')).toBeInTheDocument();
304
304
  });
305
- it("sorts rules by priority from low to high by default", ()=>{
305
+ it('sorts rules by priority from low to high by default', ()=>{
306
306
  const unsortedRules = [
307
307
  {
308
- ID: "high-priority-rule",
309
- Status: "Enabled",
308
+ ID: 'high-priority-rule',
309
+ Status: 'Enabled',
310
310
  Priority: 100,
311
311
  Destination: {
312
- Bucket: "arn:aws:s3:::bucket-high"
312
+ Bucket: 'arn:aws:s3:::bucket-high'
313
313
  }
314
314
  },
315
315
  {
316
- ID: "low-priority-rule",
317
- Status: "Enabled",
316
+ ID: 'low-priority-rule',
317
+ Status: 'Enabled',
318
318
  Priority: 1,
319
319
  Destination: {
320
- Bucket: "arn:aws:s3:::bucket-low"
320
+ Bucket: 'arn:aws:s3:::bucket-low'
321
321
  }
322
322
  },
323
323
  {
324
- ID: "mid-priority-rule",
325
- Status: "Enabled",
324
+ ID: 'mid-priority-rule',
325
+ Status: 'Enabled',
326
326
  Priority: 50,
327
327
  Destination: {
328
- Bucket: "arn:aws:s3:::bucket-mid"
328
+ Bucket: 'arn:aws:s3:::bucket-mid'
329
329
  }
330
330
  }
331
331
  ];
332
332
  renderBucketReplicationList({
333
333
  replicationRules: unsortedRules
334
334
  });
335
- const rows = screen.getAllByRole("row");
335
+ const rows = screen.getAllByRole('row');
336
336
  const dataRows = rows.slice(1);
337
- expect(dataRows[0]).toHaveTextContent("low-priority-rule");
338
- expect(dataRows[0]).toHaveTextContent("1");
339
- expect(dataRows[1]).toHaveTextContent("mid-priority-rule");
340
- expect(dataRows[1]).toHaveTextContent("50");
341
- expect(dataRows[2]).toHaveTextContent("high-priority-rule");
342
- expect(dataRows[2]).toHaveTextContent("100");
337
+ expect(dataRows[0]).toHaveTextContent('low-priority-rule');
338
+ expect(dataRows[0]).toHaveTextContent('1');
339
+ expect(dataRows[1]).toHaveTextContent('mid-priority-rule');
340
+ expect(dataRows[1]).toHaveTextContent('50');
341
+ expect(dataRows[2]).toHaveTextContent('high-priority-rule');
342
+ expect(dataRows[2]).toHaveTextContent('100');
343
343
  });
344
344
  });
@@ -3,10 +3,10 @@ import { fireEvent, render, screen, waitFor } from "@testing-library/react";
3
3
  import user_event from "@testing-library/user-event";
4
4
  import { createTestWrapper } from "../../test/testUtils.js";
5
5
  import { CreateFolderButton } from "../objects/CreateFolderButton.js";
6
- describe("CreateFolderButton", ()=>{
6
+ describe('CreateFolderButton', ()=>{
7
7
  const defaultProps = {
8
- bucket: "test-bucket",
9
- prefix: "test-prefix"
8
+ bucket: 'test-bucket',
9
+ prefix: 'test-prefix'
10
10
  };
11
11
  const renderCreateFolderButton = (props = {})=>{
12
12
  const Wrapper = createTestWrapper();
@@ -17,131 +17,131 @@ describe("CreateFolderButton", ()=>{
17
17
  })
18
18
  }));
19
19
  };
20
- it("renders button with default label", ()=>{
20
+ it('renders button with default label', ()=>{
21
21
  renderCreateFolderButton();
22
- expect(screen.getByRole("button", {
22
+ expect(screen.getByRole('button', {
23
23
  name: /folder/i
24
24
  })).toBeInTheDocument();
25
25
  });
26
- it("renders button with custom label", ()=>{
26
+ it('renders button with custom label', ()=>{
27
27
  renderCreateFolderButton({
28
- label: "Add New Folder"
28
+ label: 'Add New Folder'
29
29
  });
30
- expect(screen.getByRole("button", {
30
+ expect(screen.getByRole('button', {
31
31
  name: /add new folder/i
32
32
  })).toBeInTheDocument();
33
33
  });
34
- it("opens modal when button is clicked", async ()=>{
34
+ it('opens modal when button is clicked', async ()=>{
35
35
  renderCreateFolderButton();
36
- fireEvent.click(screen.getByRole("button", {
36
+ fireEvent.click(screen.getByRole('button', {
37
37
  name: /folder/i
38
38
  }));
39
39
  await waitFor(()=>{
40
- expect(screen.getByText("Create a folder")).toBeInTheDocument();
40
+ expect(screen.getByText('Create a folder')).toBeInTheDocument();
41
41
  });
42
42
  });
43
- it("closes modal when cancel button is clicked", async ()=>{
43
+ it('closes modal when cancel button is clicked', async ()=>{
44
44
  renderCreateFolderButton();
45
- fireEvent.click(screen.getByRole("button", {
45
+ fireEvent.click(screen.getByRole('button', {
46
46
  name: /folder/i
47
47
  }));
48
- await waitFor(()=>screen.getByText("Create a folder"));
49
- fireEvent.click(screen.getByRole("button", {
48
+ await waitFor(()=>screen.getByText('Create a folder'));
49
+ fireEvent.click(screen.getByRole('button', {
50
50
  name: /cancel/i
51
51
  }));
52
52
  await waitFor(()=>{
53
- expect(screen.queryByText("Create a folder")).not.toBeInTheDocument();
53
+ expect(screen.queryByText('Create a folder')).not.toBeInTheDocument();
54
54
  });
55
55
  });
56
- it("disables save button when folder name is empty", async ()=>{
56
+ it('disables save button when folder name is empty', async ()=>{
57
57
  renderCreateFolderButton();
58
- fireEvent.click(screen.getByRole("button", {
58
+ fireEvent.click(screen.getByRole('button', {
59
59
  name: /folder/i
60
60
  }));
61
- await waitFor(()=>screen.getByText("Create a folder"));
62
- expect(screen.getByRole("button", {
61
+ await waitFor(()=>screen.getByText('Create a folder'));
62
+ expect(screen.getByRole('button', {
63
63
  name: /save/i
64
64
  })).toBeDisabled();
65
65
  });
66
- it("enables save button when valid folder name is entered", async ()=>{
66
+ it('enables save button when valid folder name is entered', async ()=>{
67
67
  renderCreateFolderButton();
68
- fireEvent.click(screen.getByRole("button", {
68
+ fireEvent.click(screen.getByRole('button', {
69
69
  name: /folder/i
70
70
  }));
71
- await waitFor(()=>screen.getByText("Create a folder"));
72
- await user_event.type(screen.getByRole("textbox"), "valid-folder");
73
- expect(screen.getByRole("button", {
71
+ await waitFor(()=>screen.getByText('Create a folder'));
72
+ await user_event.type(screen.getByRole('textbox'), 'valid-folder');
73
+ expect(screen.getByRole('button', {
74
74
  name: /save/i
75
75
  })).toBeEnabled();
76
76
  });
77
- it("disables save button and shows error when folder name starts with slash", async ()=>{
77
+ it('disables save button and shows error when folder name starts with slash', async ()=>{
78
78
  renderCreateFolderButton();
79
- fireEvent.click(screen.getByRole("button", {
79
+ fireEvent.click(screen.getByRole('button', {
80
80
  name: /folder/i
81
81
  }));
82
- await waitFor(()=>screen.getByText("Create a folder"));
83
- await user_event.type(screen.getByRole("textbox"), "/invalid-folder");
84
- expect(screen.getByRole("button", {
82
+ await waitFor(()=>screen.getByText('Create a folder'));
83
+ await user_event.type(screen.getByRole('textbox'), '/invalid-folder');
84
+ expect(screen.getByRole('button', {
85
85
  name: /save/i
86
86
  })).toBeDisabled();
87
87
  });
88
- it("triggers mutation when save is clicked with valid folder name", async ()=>{
88
+ it('triggers mutation when save is clicked with valid folder name', async ()=>{
89
89
  renderCreateFolderButton();
90
- fireEvent.click(screen.getByRole("button", {
90
+ fireEvent.click(screen.getByRole('button', {
91
91
  name: /folder/i
92
92
  }));
93
- await waitFor(()=>screen.getByText("Create a folder"));
94
- await user_event.type(screen.getByRole("textbox"), "test-folder");
95
- const saveButton = screen.getByRole("button", {
93
+ await waitFor(()=>screen.getByText('Create a folder'));
94
+ await user_event.type(screen.getByRole('textbox'), 'test-folder');
95
+ const saveButton = screen.getByRole('button', {
96
96
  name: /save/i
97
97
  });
98
98
  expect(saveButton).toBeEnabled();
99
99
  fireEvent.click(saveButton);
100
- expect(screen.getByText("Create a folder")).toBeInTheDocument();
100
+ expect(screen.getByText('Create a folder')).toBeInTheDocument();
101
101
  });
102
- it("clears folder name when modal is closed", async ()=>{
102
+ it('clears folder name when modal is closed', async ()=>{
103
103
  renderCreateFolderButton();
104
- fireEvent.click(screen.getByRole("button", {
104
+ fireEvent.click(screen.getByRole('button', {
105
105
  name: /folder/i
106
106
  }));
107
- await waitFor(()=>screen.getByText("Create a folder"));
108
- await user_event.type(screen.getByRole("textbox"), "test-folder");
109
- fireEvent.click(screen.getByRole("button", {
107
+ await waitFor(()=>screen.getByText('Create a folder'));
108
+ await user_event.type(screen.getByRole('textbox'), 'test-folder');
109
+ fireEvent.click(screen.getByRole('button', {
110
110
  name: /cancel/i
111
111
  }));
112
112
  await waitFor(()=>{
113
- expect(screen.queryByText("Create a folder")).not.toBeInTheDocument();
113
+ expect(screen.queryByText('Create a folder')).not.toBeInTheDocument();
114
114
  });
115
- fireEvent.click(screen.getByRole("button", {
115
+ fireEvent.click(screen.getByRole('button', {
116
116
  name: /folder/i
117
117
  }));
118
- await waitFor(()=>screen.getByText("Create a folder"));
119
- expect(screen.getByRole("textbox")).toHaveValue("");
118
+ await waitFor(()=>screen.getByText('Create a folder'));
119
+ expect(screen.getByRole('textbox')).toHaveValue('');
120
120
  });
121
- it("shows info message about folder creation", async ()=>{
121
+ it('shows info message about folder creation', async ()=>{
122
122
  renderCreateFolderButton();
123
- fireEvent.click(screen.getByRole("button", {
123
+ fireEvent.click(screen.getByRole('button', {
124
124
  name: /folder/i
125
125
  }));
126
- await waitFor(()=>screen.getByText("Create a folder"));
127
- expect(screen.getByText("Creating a folder")).toBeInTheDocument();
126
+ await waitFor(()=>screen.getByText('Create a folder'));
127
+ expect(screen.getByText('Creating a folder')).toBeInTheDocument();
128
128
  expect(screen.getByText(/ensure the folder name does not begin with a slash/i)).toBeInTheDocument();
129
129
  });
130
- it("handles folder name validation correctly", async ()=>{
130
+ it('handles folder name validation correctly', async ()=>{
131
131
  renderCreateFolderButton();
132
- fireEvent.click(screen.getByRole("button", {
132
+ fireEvent.click(screen.getByRole('button', {
133
133
  name: /folder/i
134
134
  }));
135
- await waitFor(()=>screen.getByText("Create a folder"));
136
- const input = screen.getByRole("textbox");
137
- const saveButton = screen.getByRole("button", {
135
+ await waitFor(()=>screen.getByText('Create a folder'));
136
+ const input = screen.getByRole('textbox');
137
+ const saveButton = screen.getByRole('button', {
138
138
  name: /save/i
139
139
  });
140
140
  expect(saveButton).toBeDisabled();
141
- await user_event.type(input, "valid-folder");
141
+ await user_event.type(input, 'valid-folder');
142
142
  expect(saveButton).toBeEnabled();
143
143
  await user_event.clear(input);
144
- await user_event.type(input, "/invalid");
144
+ await user_event.type(input, '/invalid');
145
145
  expect(saveButton).toBeDisabled();
146
146
  });
147
147
  });