@scality/data-browser-library 1.0.0-preview.13 → 1.0.0-preview.15

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 (206) hide show
  1. package/dist/components/DataBrowserUI.d.ts +15 -8
  2. package/dist/components/DataBrowserUI.js +79 -55
  3. package/dist/components/Editor.d.ts +1 -1
  4. package/dist/components/Editor.js +3 -3
  5. package/dist/components/__tests__/BucketCreate.test.js +102 -102
  6. package/dist/components/__tests__/BucketDetails.test.js +121 -122
  7. package/dist/components/__tests__/BucketLifecycleFormPage.test.js +177 -177
  8. package/dist/components/__tests__/BucketLifecycleList.test.js +85 -85
  9. package/dist/components/__tests__/BucketList.test.js +175 -176
  10. package/dist/components/__tests__/BucketNotificationCreatePage.test.js +84 -84
  11. package/dist/components/__tests__/BucketOverview.test.js +256 -200
  12. package/dist/components/__tests__/BucketPolicyPage.test.js +62 -62
  13. package/dist/components/__tests__/BucketReplicationFormPage.test.js +542 -542
  14. package/dist/components/__tests__/BucketReplicationList.test.js +106 -106
  15. package/dist/components/__tests__/CreateFolderButton.test.js +56 -56
  16. package/dist/components/__tests__/DeleteBucketButton.test.js +62 -62
  17. package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.js +47 -47
  18. package/dist/components/__tests__/DeleteObjectButton.test.js +63 -63
  19. package/dist/components/__tests__/EmptyBucketButton.test.js +56 -56
  20. package/dist/components/__tests__/MetadataSearch.test.js +65 -65
  21. package/dist/components/__tests__/ObjectList.test.js +251 -250
  22. package/dist/components/__tests__/UploadButton.test.js +45 -45
  23. package/dist/components/buckets/BucketCreate.d.ts +2 -2
  24. package/dist/components/buckets/BucketCreate.js +41 -41
  25. package/dist/components/buckets/BucketDetails.d.ts +2 -2
  26. package/dist/components/buckets/BucketDetails.js +48 -36
  27. package/dist/components/buckets/BucketLifecycleFormPage.js +161 -160
  28. package/dist/components/buckets/BucketLifecycleList.d.ts +2 -2
  29. package/dist/components/buckets/BucketLifecycleList.js +46 -46
  30. package/dist/components/buckets/BucketList.d.ts +2 -2
  31. package/dist/components/buckets/BucketList.js +28 -27
  32. package/dist/components/buckets/BucketLocation.js +3 -3
  33. package/dist/components/buckets/BucketOverview.d.ts +1 -1
  34. package/dist/components/buckets/BucketOverview.js +62 -62
  35. package/dist/components/buckets/BucketPage.js +19 -11
  36. package/dist/components/buckets/BucketPolicyButton.js +2 -2
  37. package/dist/components/buckets/BucketPolicyPage.js +27 -25
  38. package/dist/components/buckets/BucketReplicationFormPage.js +133 -132
  39. package/dist/components/buckets/BucketReplicationList.d.ts +2 -2
  40. package/dist/components/buckets/BucketReplicationList.js +41 -41
  41. package/dist/components/buckets/BucketVersioning.js +11 -11
  42. package/dist/components/buckets/DeleteBucketButton.js +5 -5
  43. package/dist/components/buckets/DeleteBucketConfigRuleButton.d.ts +2 -2
  44. package/dist/components/buckets/DeleteBucketConfigRuleButton.js +1 -1
  45. package/dist/components/buckets/EmptyBucketButton.js +19 -19
  46. package/dist/components/buckets/EmptyBucketSummary.d.ts +1 -1
  47. package/dist/components/buckets/EmptyBucketSummary.js +1 -1
  48. package/dist/components/buckets/EmptyBucketSummaryList.js +22 -22
  49. package/dist/components/buckets/__tests__/BucketVersioning.test.js +45 -45
  50. package/dist/components/buckets/notifications/BucketNotificationCreatePage.js +34 -33
  51. package/dist/components/buckets/notifications/EventsSection.js +144 -28
  52. package/dist/components/buckets/notifications/__tests__/events.test.d.ts +1 -0
  53. package/dist/components/buckets/notifications/__tests__/events.test.js +56 -0
  54. package/dist/components/buckets/notifications/events.d.ts +71 -7
  55. package/dist/components/buckets/notifications/events.js +98 -16
  56. package/dist/components/index.d.ts +23 -22
  57. package/dist/components/index.js +3 -2
  58. package/dist/components/layouts/ArrowNavigation.d.ts +1 -2
  59. package/dist/components/layouts/ArrowNavigation.js +3 -3
  60. package/dist/components/layouts/BrowserPageLayout.d.ts +2 -3
  61. package/dist/components/layouts/BrowserPageLayout.js +1 -1
  62. package/dist/components/objects/CreateFolderButton.d.ts +2 -2
  63. package/dist/components/objects/CreateFolderButton.js +9 -9
  64. package/dist/components/objects/DeleteObjectButton.d.ts +1 -1
  65. package/dist/components/objects/DeleteObjectButton.js +20 -20
  66. package/dist/components/objects/ObjectDetails/ObjectMetadata.d.ts +1 -1
  67. package/dist/components/objects/ObjectDetails/ObjectMetadata.js +56 -56
  68. package/dist/components/objects/ObjectDetails/ObjectSummary.d.ts +1 -1
  69. package/dist/components/objects/ObjectDetails/ObjectSummary.js +39 -39
  70. package/dist/components/objects/ObjectDetails/ObjectTags.d.ts +1 -1
  71. package/dist/components/objects/ObjectDetails/ObjectTags.js +25 -25
  72. package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.js +119 -119
  73. package/dist/components/objects/ObjectDetails/__tests__/ObjectSummary.test.js +211 -211
  74. package/dist/components/objects/ObjectDetails/index.d.ts +1 -1
  75. package/dist/components/objects/ObjectDetails/index.js +30 -30
  76. package/dist/components/objects/ObjectList.d.ts +5 -5
  77. package/dist/components/objects/ObjectList.js +112 -111
  78. package/dist/components/objects/ObjectLock/EditRetentionButton.js +3 -3
  79. package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.js +14 -14
  80. package/dist/components/objects/ObjectLock/ObjectLockSettings.d.ts +1 -1
  81. package/dist/components/objects/ObjectLock/ObjectLockSettings.js +29 -28
  82. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.d.ts +1 -1
  83. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.js +6 -6
  84. package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.js +50 -50
  85. package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.js +77 -77
  86. package/dist/components/objects/ObjectPage.js +5 -4
  87. package/dist/components/objects/UploadButton.d.ts +3 -3
  88. package/dist/components/objects/UploadButton.js +5 -5
  89. package/dist/components/providers/DataBrowserProvider.d.ts +15 -4
  90. package/dist/components/providers/DataBrowserProvider.js +33 -11
  91. package/dist/components/search/MetadataSearch.js +26 -25
  92. package/dist/components/search/SearchHints.js +1 -1
  93. package/dist/components/ui/ArrayFieldActions.js +4 -4
  94. package/dist/components/ui/ConfirmDeleteRuleModal.d.ts +1 -1
  95. package/dist/components/ui/ConfirmDeleteRuleModal.js +1 -1
  96. package/dist/components/ui/DeleteObjectModalContent.d.ts +1 -1
  97. package/dist/components/ui/DeleteObjectModalContent.js +12 -12
  98. package/dist/components/ui/FilterFormSection.d.ts +2 -2
  99. package/dist/components/ui/FilterFormSection.js +29 -29
  100. package/dist/components/ui/Search.elements.d.ts +1 -1
  101. package/dist/components/ui/Search.elements.js +7 -7
  102. package/dist/components/ui/Table.elements.js +5 -5
  103. package/dist/config/factory.d.ts +23 -10
  104. package/dist/config/factory.js +22 -7
  105. package/dist/config/types.d.ts +20 -3
  106. package/dist/contexts/DataBrowserUICustomizationContext.d.ts +2 -2
  107. package/dist/hooks/__tests__/useISVBucketDetection.test.js +41 -41
  108. package/dist/hooks/__tests__/useIsBucketEmpty.test.js +25 -25
  109. package/dist/hooks/bucketConfiguration.d.ts +1 -1
  110. package/dist/hooks/bucketConfiguration.js +48 -48
  111. package/dist/hooks/bucketOperations.d.ts +1 -1
  112. package/dist/hooks/bucketOperations.js +6 -6
  113. package/dist/hooks/factories/__tests__/useCreateS3FunctionMutationHook.test.js +78 -78
  114. package/dist/hooks/factories/__tests__/useCreateS3InfiniteQueryHook.test.js +78 -78
  115. package/dist/hooks/factories/__tests__/useCreateS3LoginHook.test.js +42 -42
  116. package/dist/hooks/factories/__tests__/useCreateS3MutationHook.test.js +61 -61
  117. package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.js +63 -63
  118. package/dist/hooks/factories/index.d.ts +4 -4
  119. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.d.ts +2 -2
  120. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.js +15 -12
  121. package/dist/hooks/factories/useCreateS3LoginHook.d.ts +2 -2
  122. package/dist/hooks/factories/useCreateS3MutationHook.d.ts +3 -3
  123. package/dist/hooks/factories/useCreateS3MutationHook.js +6 -1
  124. package/dist/hooks/factories/useCreateS3QueryHook.d.ts +2 -2
  125. package/dist/hooks/factories/useCreateS3QueryHook.js +8 -5
  126. package/dist/hooks/index.d.ts +14 -13
  127. package/dist/hooks/index.js +2 -1
  128. package/dist/hooks/loginOperations.d.ts +1 -1
  129. package/dist/hooks/loginOperations.js +1 -1
  130. package/dist/hooks/objectOperations.d.ts +2 -2
  131. package/dist/hooks/objectOperations.js +49 -49
  132. package/dist/hooks/presignedOperations.d.ts +2 -2
  133. package/dist/hooks/presignedOperations.js +3 -3
  134. package/dist/hooks/useBatchObjectLegalHold.js +7 -4
  135. package/dist/hooks/useDataBrowserNavigate.d.ts +14 -0
  136. package/dist/hooks/useDataBrowserNavigate.js +24 -0
  137. package/dist/hooks/useDeleteBucketConfigRule.d.ts +2 -2
  138. package/dist/hooks/useDeleteBucketConfigRule.js +4 -4
  139. package/dist/hooks/useEmptyBucket.js +10 -10
  140. package/dist/hooks/useISVBucketDetection.js +3 -3
  141. package/dist/hooks/useIsBucketEmpty.js +4 -4
  142. package/dist/hooks/useLoginMutation.d.ts +1 -1
  143. package/dist/hooks/useLoginMutation.js +1 -1
  144. package/dist/hooks/useS3Client.d.ts +5 -0
  145. package/dist/hooks/useS3Client.js +3 -2
  146. package/dist/hooks/useS3ConfigSwitch.d.ts +11 -0
  147. package/dist/hooks/useS3ConfigSwitch.js +37 -0
  148. package/dist/index.d.ts +6 -6
  149. package/dist/test/msw/handlers/deleteBucket.d.ts +1 -1
  150. package/dist/test/msw/handlers/deleteBucket.js +20 -10
  151. package/dist/test/msw/handlers/getBucketAcl.d.ts +1 -1
  152. package/dist/test/msw/handlers/getBucketAcl.js +29 -17
  153. package/dist/test/msw/handlers/getBucketLocation.d.ts +1 -1
  154. package/dist/test/msw/handlers/getBucketLocation.js +29 -15
  155. package/dist/test/msw/handlers/getBucketPolicy.d.ts +1 -1
  156. package/dist/test/msw/handlers/getBucketPolicy.js +52 -32
  157. package/dist/test/msw/handlers/headObject.d.ts +1 -1
  158. package/dist/test/msw/handlers/headObject.js +31 -13
  159. package/dist/test/msw/handlers/listBuckets.d.ts +1 -1
  160. package/dist/test/msw/handlers/listBuckets.js +5 -3
  161. package/dist/test/msw/handlers/listObjectVersions.d.ts +1 -1
  162. package/dist/test/msw/handlers/listObjectVersions.js +38 -26
  163. package/dist/test/msw/handlers/listObjects.d.ts +1 -1
  164. package/dist/test/msw/handlers/listObjects.js +35 -23
  165. package/dist/test/msw/handlers/objectLegalHold.d.ts +1 -1
  166. package/dist/test/msw/handlers/objectLegalHold.js +31 -16
  167. package/dist/test/msw/handlers/objectRetention.d.ts +1 -1
  168. package/dist/test/msw/handlers/objectRetention.js +31 -17
  169. package/dist/test/msw/handlers/putBucketAcl.d.ts +1 -1
  170. package/dist/test/msw/handlers/putBucketAcl.js +29 -14
  171. package/dist/test/msw/handlers/putObject.d.ts +1 -1
  172. package/dist/test/msw/handlers/putObject.js +27 -12
  173. package/dist/test/msw/handlers.d.ts +3 -3
  174. package/dist/test/msw/handlers.js +72 -49
  175. package/dist/test/msw/index.d.ts +2 -2
  176. package/dist/test/msw/server.d.ts +1 -1
  177. package/dist/test/msw/server.js +1 -1
  178. package/dist/test/msw/utils.js +2 -2
  179. package/dist/test/setup.d.ts +1 -1
  180. package/dist/test/setup.js +19 -19
  181. package/dist/test/testUtils.d.ts +9 -15
  182. package/dist/test/testUtils.js +78 -92
  183. package/dist/test/utils/errorHandling.test.js +119 -119
  184. package/dist/types/index.d.ts +6 -31
  185. package/dist/utils/__tests__/s3ConfigIdentifier.test.d.ts +1 -0
  186. package/dist/utils/__tests__/s3ConfigIdentifier.test.js +429 -0
  187. package/dist/utils/constants.js +8 -8
  188. package/dist/utils/deletion/index.d.ts +2 -2
  189. package/dist/utils/deletion/messages.d.ts +1 -1
  190. package/dist/utils/deletion/messages.js +4 -4
  191. package/dist/utils/errorHandling.d.ts +3 -3
  192. package/dist/utils/errorHandling.js +6 -6
  193. package/dist/utils/hooks.js +8 -8
  194. package/dist/utils/index.d.ts +5 -4
  195. package/dist/utils/index.js +2 -0
  196. package/dist/utils/proxyMiddleware.d.ts +1 -1
  197. package/dist/utils/proxyMiddleware.js +6 -11
  198. package/dist/utils/s3Client.d.ts +2 -2
  199. package/dist/utils/s3Client.js +1 -1
  200. package/dist/utils/s3ConfigIdentifier.d.ts +68 -0
  201. package/dist/utils/s3ConfigIdentifier.js +55 -0
  202. package/dist/utils/s3RuleUtils.d.ts +5 -5
  203. package/dist/utils/s3RuleUtils.js +17 -17
  204. package/dist/utils/useSupportedNotificationEvents.d.ts +6 -0
  205. package/dist/utils/useSupportedNotificationEvents.js +7 -0
  206. package/package.json +2 -2
@@ -1,22 +1,22 @@
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, Route, Routes } from "react-router-dom";
4
+ import { MemoryRouter, Route, Routes } from "react-router";
5
5
  import { createTestWrapper } from "../../test/testUtils.js";
6
6
  import { BucketNotificationCreatePage } from "../buckets/notifications/BucketNotificationCreatePage.js";
7
7
  import { useGetBucketNotification, useSetBucketNotification } from "../../hooks/index.js";
8
- jest.mock("../../hooks", ()=>({
8
+ jest.mock('../../hooks', ()=>({
9
9
  useGetBucketNotification: jest.fn(),
10
10
  useSetBucketNotification: jest.fn()
11
11
  }));
12
12
  const mockUseGetBucketNotification = jest.mocked(useGetBucketNotification);
13
13
  const mockUseSetBucketNotification = jest.mocked(useSetBucketNotification);
14
14
  const mockNavigate = jest.fn();
15
- jest.mock("react-router-dom", ()=>({
16
- ...jest.requireActual("react-router-dom"),
15
+ jest.mock('react-router', ()=>({
16
+ ...jest.requireActual('react-router'),
17
17
  useNavigate: ()=>mockNavigate
18
18
  }));
19
- const renderBucketNotificationCreatePage = (bucketName = "test-bucket")=>{
19
+ const renderBucketNotificationCreatePage = (bucketName = 'test-bucket')=>{
20
20
  const Wrapper = createTestWrapper();
21
21
  return render(/*#__PURE__*/ jsx(MemoryRouter, {
22
22
  initialEntries: [
@@ -32,7 +32,7 @@ const renderBucketNotificationCreatePage = (bucketName = "test-bucket")=>{
32
32
  })
33
33
  }));
34
34
  };
35
- describe("BucketNotificationCreatePage", ()=>{
35
+ describe('BucketNotificationCreatePage', ()=>{
36
36
  const mockMutate = jest.fn();
37
37
  beforeEach(()=>{
38
38
  jest.clearAllMocks();
@@ -45,38 +45,38 @@ describe("BucketNotificationCreatePage", ()=>{
45
45
  isPending: false
46
46
  });
47
47
  });
48
- it("renders create notification form with all fields", ()=>{
48
+ it('renders create notification form with all fields', ()=>{
49
49
  renderBucketNotificationCreatePage();
50
- expect(screen.getByText("Create Bucket Notification")).toBeInTheDocument();
50
+ expect(screen.getByText('Create Bucket Notification')).toBeInTheDocument();
51
51
  expect(screen.getByLabelText(/rule name/i)).toBeInTheDocument();
52
- expect(screen.getByText("Events")).toBeInTheDocument();
52
+ expect(screen.getByText('Events')).toBeInTheDocument();
53
53
  expect(screen.getByLabelText(/destination queue/i)).toBeInTheDocument();
54
54
  expect(screen.getByLabelText(/prefix/i)).toBeInTheDocument();
55
55
  expect(screen.getByLabelText(/suffix/i)).toBeInTheDocument();
56
56
  });
57
- it("disables create button when form is pristine", ()=>{
57
+ it('disables create button when form is pristine', ()=>{
58
58
  renderBucketNotificationCreatePage();
59
- expect(screen.getByRole("button", {
59
+ expect(screen.getByRole('button', {
60
60
  name: /create/i
61
61
  })).toBeDisabled();
62
62
  });
63
- it("shows validation error when rule name is empty", async ()=>{
63
+ it('shows validation error when rule name is empty', async ()=>{
64
64
  renderBucketNotificationCreatePage();
65
65
  const ruleNameInput = screen.getByLabelText(/rule name/i);
66
- await user_event.type(ruleNameInput, "a");
66
+ await user_event.type(ruleNameInput, 'a');
67
67
  await user_event.clear(ruleNameInput);
68
68
  await waitFor(()=>{
69
69
  expect(screen.getByText(/this field is required/i)).toBeInTheDocument();
70
70
  });
71
71
  });
72
- it("shows validation error when rule name already exists", async ()=>{
72
+ it('shows validation error when rule name already exists', async ()=>{
73
73
  const existingConfig = {
74
74
  QueueConfigurations: [
75
75
  {
76
- Id: "existing-rule",
77
- QueueArn: "arn:aws:sqs:us-east-1:123:queue",
76
+ Id: 'existing-rule',
77
+ QueueArn: 'arn:aws:sqs:us-east-1:123:queue',
78
78
  Events: [
79
- "s3:ObjectCreated:*"
79
+ 's3:ObjectCreated:*'
80
80
  ]
81
81
  }
82
82
  ]
@@ -86,83 +86,83 @@ describe("BucketNotificationCreatePage", ()=>{
86
86
  });
87
87
  renderBucketNotificationCreatePage();
88
88
  const ruleNameInput = screen.getByLabelText(/rule name/i);
89
- await user_event.type(ruleNameInput, "existing-rule");
89
+ await user_event.type(ruleNameInput, 'existing-rule');
90
90
  await waitFor(()=>{
91
91
  expect(screen.getByText(/a rule with this name already exists/i)).toBeInTheDocument();
92
92
  });
93
93
  });
94
- it("shows validation error when queue ARN is invalid", async ()=>{
94
+ it('shows validation error when queue ARN is invalid', async ()=>{
95
95
  renderBucketNotificationCreatePage();
96
96
  const queueArnInput = screen.getByLabelText(/destination queue/i);
97
- await user_event.type(queueArnInput, "invalid-arn");
97
+ await user_event.type(queueArnInput, 'invalid-arn');
98
98
  await waitFor(()=>{
99
99
  expect(screen.getByText(/must be a valid arn/i)).toBeInTheDocument();
100
100
  });
101
101
  });
102
- it("shows validation error when no event is selected", async ()=>{
102
+ it('shows validation error when no event is selected', async ()=>{
103
103
  renderBucketNotificationCreatePage();
104
104
  const ruleNameInput = screen.getByLabelText(/rule name/i);
105
- await user_event.type(ruleNameInput, "test-rule");
105
+ await user_event.type(ruleNameInput, 'test-rule');
106
106
  const queueArnInput = screen.getByLabelText(/destination queue/i);
107
- await user_event.type(queueArnInput, "arn:aws:sqs:us-east-1:123:queue");
107
+ await user_event.type(queueArnInput, 'arn:aws:sqs:us-east-1:123:queue');
108
108
  await waitFor(()=>{
109
- expect(screen.getByRole("button", {
109
+ expect(screen.getByRole('button', {
110
110
  name: /create/i
111
111
  })).toBeDisabled();
112
112
  });
113
113
  });
114
- it("enables create button when form is valid", async ()=>{
114
+ it('enables create button when form is valid', async ()=>{
115
115
  renderBucketNotificationCreatePage();
116
- await user_event.type(screen.getByLabelText(/rule name/i), "test-rule");
117
- await user_event.type(screen.getByLabelText(/destination queue/i), "arn:aws:sqs:us-east-1:123:queue");
118
- const checkbox = screen.getByRole("checkbox", {
116
+ await user_event.type(screen.getByLabelText(/rule name/i), 'test-rule');
117
+ await user_event.type(screen.getByLabelText(/destination queue/i), 'arn:aws:sqs:us-east-1:123:queue');
118
+ const checkbox = screen.getByRole('checkbox', {
119
119
  name: /s3:ObjectCreated:\*/i
120
120
  });
121
121
  fireEvent.click(checkbox);
122
122
  await waitFor(()=>{
123
- expect(screen.getByRole("button", {
123
+ expect(screen.getByRole('button', {
124
124
  name: /create/i
125
125
  })).toBeEnabled();
126
126
  });
127
127
  });
128
- it("creates notification with all fields and navigates on success", async ()=>{
128
+ it('creates notification with all fields and navigates on success', async ()=>{
129
129
  renderBucketNotificationCreatePage();
130
- await user_event.type(screen.getByLabelText(/rule name/i), "test-rule");
131
- await user_event.type(screen.getByLabelText(/destination queue/i), "arn:aws:sqs:us-east-1:123:my-queue");
132
- fireEvent.click(screen.getByRole("checkbox", {
130
+ await user_event.type(screen.getByLabelText(/rule name/i), 'test-rule');
131
+ await user_event.type(screen.getByLabelText(/destination queue/i), 'arn:aws:sqs:us-east-1:123:my-queue');
132
+ fireEvent.click(screen.getByRole('checkbox', {
133
133
  name: /s3:ObjectCreated:Put/i
134
134
  }));
135
- await user_event.type(screen.getByLabelText(/prefix/i), "uploads/");
136
- await user_event.type(screen.getByLabelText(/suffix/i), ".jpg");
135
+ await user_event.type(screen.getByLabelText(/prefix/i), 'uploads/');
136
+ await user_event.type(screen.getByLabelText(/suffix/i), '.jpg');
137
137
  mockMutate.mockImplementation((_, options)=>{
138
138
  options?.onSuccess?.();
139
139
  });
140
- const createButton = screen.getByRole("button", {
140
+ const createButton = screen.getByRole('button', {
141
141
  name: /create/i
142
142
  });
143
143
  await waitFor(()=>expect(createButton).toBeEnabled());
144
144
  fireEvent.click(createButton);
145
145
  await waitFor(()=>{
146
146
  expect(mockMutate).toHaveBeenCalledWith({
147
- Bucket: "test-bucket",
147
+ Bucket: 'test-bucket',
148
148
  NotificationConfiguration: {
149
149
  QueueConfigurations: [
150
150
  {
151
- Id: "test-rule",
152
- QueueArn: "arn:aws:sqs:us-east-1:123:my-queue",
151
+ Id: 'test-rule',
152
+ QueueArn: 'arn:aws:sqs:us-east-1:123:my-queue',
153
153
  Events: [
154
- "s3:ObjectCreated:Put"
154
+ 's3:ObjectCreated:Put'
155
155
  ],
156
156
  Filter: {
157
157
  Key: {
158
158
  FilterRules: [
159
159
  {
160
- Name: "prefix",
161
- Value: "uploads/"
160
+ Name: 'prefix',
161
+ Value: 'uploads/'
162
162
  },
163
163
  {
164
- Name: "suffix",
165
- Value: ".jpg"
164
+ Name: 'suffix',
165
+ Value: '.jpg'
166
166
  }
167
167
  ]
168
168
  }
@@ -171,34 +171,34 @@ describe("BucketNotificationCreatePage", ()=>{
171
171
  ]
172
172
  }
173
173
  }, expect.any(Object));
174
- expect(mockNavigate).toHaveBeenCalledWith("/buckets/test-bucket");
174
+ expect(mockNavigate).toHaveBeenCalledWith('/buckets/test-bucket');
175
175
  });
176
176
  });
177
- it("creates notification without filters when not provided", async ()=>{
177
+ it('creates notification without filters when not provided', async ()=>{
178
178
  renderBucketNotificationCreatePage();
179
- await user_event.type(screen.getByLabelText(/rule name/i), "test-rule");
180
- await user_event.type(screen.getByLabelText(/destination queue/i), "arn:aws:sqs:us-east-1:123:my-queue");
181
- fireEvent.click(screen.getByRole("checkbox", {
179
+ await user_event.type(screen.getByLabelText(/rule name/i), 'test-rule');
180
+ await user_event.type(screen.getByLabelText(/destination queue/i), 'arn:aws:sqs:us-east-1:123:my-queue');
181
+ fireEvent.click(screen.getByRole('checkbox', {
182
182
  name: /s3:ObjectRemoved:\*/i
183
183
  }));
184
184
  mockMutate.mockImplementation((_, options)=>{
185
185
  options?.onSuccess?.();
186
186
  });
187
- const createButton = screen.getByRole("button", {
187
+ const createButton = screen.getByRole('button', {
188
188
  name: /create/i
189
189
  });
190
190
  await waitFor(()=>expect(createButton).toBeEnabled());
191
191
  fireEvent.click(createButton);
192
192
  await waitFor(()=>{
193
193
  expect(mockMutate).toHaveBeenCalledWith({
194
- Bucket: "test-bucket",
194
+ Bucket: 'test-bucket',
195
195
  NotificationConfiguration: {
196
196
  QueueConfigurations: [
197
197
  {
198
- Id: "test-rule",
199
- QueueArn: "arn:aws:sqs:us-east-1:123:my-queue",
198
+ Id: 'test-rule',
199
+ QueueArn: 'arn:aws:sqs:us-east-1:123:my-queue',
200
200
  Events: [
201
- "s3:ObjectRemoved:*"
201
+ 's3:ObjectRemoved:*'
202
202
  ]
203
203
  }
204
204
  ]
@@ -206,14 +206,14 @@ describe("BucketNotificationCreatePage", ()=>{
206
206
  }, expect.any(Object));
207
207
  });
208
208
  });
209
- it("preserves existing queue configurations when creating new notification", async ()=>{
209
+ it('preserves existing queue configurations when creating new notification', async ()=>{
210
210
  const existingConfig = {
211
211
  QueueConfigurations: [
212
212
  {
213
- Id: "existing-rule",
214
- QueueArn: "arn:aws:sqs:us-east-1:123:existing-queue",
213
+ Id: 'existing-rule',
214
+ QueueArn: 'arn:aws:sqs:us-east-1:123:existing-queue',
215
215
  Events: [
216
- "s3:ObjectCreated:*"
216
+ 's3:ObjectCreated:*'
217
217
  ]
218
218
  }
219
219
  ]
@@ -222,15 +222,15 @@ describe("BucketNotificationCreatePage", ()=>{
222
222
  data: existingConfig
223
223
  });
224
224
  renderBucketNotificationCreatePage();
225
- await user_event.type(screen.getByLabelText(/rule name/i), "new-rule");
226
- await user_event.type(screen.getByLabelText(/destination queue/i), "arn:aws:sqs:us-east-1:123:new-queue");
227
- fireEvent.click(screen.getByRole("checkbox", {
225
+ await user_event.type(screen.getByLabelText(/rule name/i), 'new-rule');
226
+ await user_event.type(screen.getByLabelText(/destination queue/i), 'arn:aws:sqs:us-east-1:123:new-queue');
227
+ fireEvent.click(screen.getByRole('checkbox', {
228
228
  name: /^s3:ObjectRemoved:Delete$/i
229
229
  }));
230
230
  mockMutate.mockImplementation((_, options)=>{
231
231
  options?.onSuccess?.();
232
232
  });
233
- const createButton = screen.getByRole("button", {
233
+ const createButton = screen.getByRole('button', {
234
234
  name: /create/i
235
235
  });
236
236
  await waitFor(()=>expect(createButton).toBeEnabled());
@@ -240,26 +240,26 @@ describe("BucketNotificationCreatePage", ()=>{
240
240
  expect(call.NotificationConfiguration.QueueConfigurations).toHaveLength(2);
241
241
  expect(call.NotificationConfiguration.QueueConfigurations[0]).toEqual(existingConfig.QueueConfigurations[0]);
242
242
  expect(call.NotificationConfiguration.QueueConfigurations[1]).toMatchObject({
243
- Id: "new-rule",
244
- QueueArn: "arn:aws:sqs:us-east-1:123:new-queue",
243
+ Id: 'new-rule',
244
+ QueueArn: 'arn:aws:sqs:us-east-1:123:new-queue',
245
245
  Events: [
246
- "s3:ObjectRemoved:Delete"
246
+ 's3:ObjectRemoved:Delete'
247
247
  ]
248
248
  });
249
249
  });
250
250
  });
251
- it("displays error message when creation fails", async ()=>{
251
+ it('displays error message when creation fails', async ()=>{
252
252
  renderBucketNotificationCreatePage();
253
- await user_event.type(screen.getByLabelText(/rule name/i), "test-rule");
254
- await user_event.type(screen.getByLabelText(/destination queue/i), "arn:aws:sqs:us-east-1:123:my-queue");
255
- fireEvent.click(screen.getByRole("checkbox", {
253
+ await user_event.type(screen.getByLabelText(/rule name/i), 'test-rule');
254
+ await user_event.type(screen.getByLabelText(/destination queue/i), 'arn:aws:sqs:us-east-1:123:my-queue');
255
+ fireEvent.click(screen.getByRole('checkbox', {
256
256
  name: /s3:ObjectCreated:\*/i
257
257
  }));
258
- const error = new Error("Access Denied");
258
+ const error = new Error('Access Denied');
259
259
  mockMutate.mockImplementation((_, options)=>{
260
260
  options?.onError?.(error);
261
261
  });
262
- const createButton = screen.getByRole("button", {
262
+ const createButton = screen.getByRole('button', {
263
263
  name: /create/i
264
264
  });
265
265
  await waitFor(()=>expect(createButton).toBeEnabled());
@@ -268,31 +268,31 @@ describe("BucketNotificationCreatePage", ()=>{
268
268
  expect(mockNavigate).not.toHaveBeenCalled();
269
269
  });
270
270
  });
271
- it("handles cancel button click and navigates back", ()=>{
271
+ it('handles cancel button click and navigates back', ()=>{
272
272
  renderBucketNotificationCreatePage();
273
- const cancelButton = screen.getByRole("button", {
273
+ const cancelButton = screen.getByRole('button', {
274
274
  name: /cancel/i
275
275
  });
276
276
  fireEvent.click(cancelButton);
277
- expect(mockNavigate).toHaveBeenCalledWith("/buckets/test-bucket");
277
+ expect(mockNavigate).toHaveBeenCalledWith('/buckets/test-bucket');
278
278
  });
279
- it("allows selecting multiple events", async ()=>{
279
+ it('allows selecting multiple events', async ()=>{
280
280
  renderBucketNotificationCreatePage();
281
- await user_event.type(screen.getByLabelText(/rule name/i), "multi-event");
282
- await user_event.type(screen.getByLabelText(/destination queue/i), "arn:aws:sqs:us-east-1:123:queue");
283
- fireEvent.click(screen.getByRole("checkbox", {
281
+ await user_event.type(screen.getByLabelText(/rule name/i), 'multi-event');
282
+ await user_event.type(screen.getByLabelText(/destination queue/i), 'arn:aws:sqs:us-east-1:123:queue');
283
+ fireEvent.click(screen.getByRole('checkbox', {
284
284
  name: /^s3:ObjectCreated:Put$/i
285
285
  }));
286
- fireEvent.click(screen.getByRole("checkbox", {
286
+ fireEvent.click(screen.getByRole('checkbox', {
287
287
  name: /^s3:ObjectCreated:Copy$/i
288
288
  }));
289
- fireEvent.click(screen.getByRole("checkbox", {
289
+ fireEvent.click(screen.getByRole('checkbox', {
290
290
  name: /^s3:ObjectRemoved:Delete$/i
291
291
  }));
292
292
  mockMutate.mockImplementation((_, options)=>{
293
293
  options?.onSuccess?.();
294
294
  });
295
- const createButton = screen.getByRole("button", {
295
+ const createButton = screen.getByRole('button', {
296
296
  name: /create/i
297
297
  });
298
298
  await waitFor(()=>expect(createButton).toBeEnabled());
@@ -303,9 +303,9 @@ describe("BucketNotificationCreatePage", ()=>{
303
303
  QueueConfigurations: [
304
304
  expect.objectContaining({
305
305
  Events: expect.arrayContaining([
306
- "s3:ObjectCreated:Put",
307
- "s3:ObjectCreated:Copy",
308
- "s3:ObjectRemoved:Delete"
306
+ 's3:ObjectCreated:Put',
307
+ 's3:ObjectCreated:Copy',
308
+ 's3:ObjectRemoved:Delete'
309
309
  ])
310
310
  })
311
311
  ]