@scality/data-browser-library 1.0.0-preview.11
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.
- package/dist/components/Editor.d.ts +12 -0
- package/dist/components/Editor.js +28 -0
- package/dist/components/__tests__/BucketCreate.test.d.ts +1 -0
- package/dist/components/__tests__/BucketCreate.test.js +408 -0
- package/dist/components/__tests__/BucketLifecycleFormPage.test.d.ts +1 -0
- package/dist/components/__tests__/BucketLifecycleFormPage.test.js +618 -0
- package/dist/components/__tests__/BucketLifecycleList.test.d.ts +1 -0
- package/dist/components/__tests__/BucketLifecycleList.test.js +325 -0
- package/dist/components/__tests__/BucketList.test.d.ts +1 -0
- package/dist/components/__tests__/BucketList.test.js +415 -0
- package/dist/components/__tests__/BucketNotificationCreatePage.test.d.ts +1 -0
- package/dist/components/__tests__/BucketNotificationCreatePage.test.js +316 -0
- package/dist/components/__tests__/BucketOverview.test.d.ts +1 -0
- package/dist/components/__tests__/BucketOverview.test.js +769 -0
- package/dist/components/__tests__/BucketPolicyPage.test.d.ts +1 -0
- package/dist/components/__tests__/BucketPolicyPage.test.js +268 -0
- package/dist/components/__tests__/BucketReplicationFormPage.test.d.ts +1 -0
- package/dist/components/__tests__/BucketReplicationFormPage.test.js +1757 -0
- package/dist/components/__tests__/BucketReplicationList.test.d.ts +1 -0
- package/dist/components/__tests__/BucketReplicationList.test.js +344 -0
- package/dist/components/__tests__/CreateFolderButton.test.d.ts +1 -0
- package/dist/components/__tests__/CreateFolderButton.test.js +147 -0
- package/dist/components/__tests__/DeleteBucketButton.test.d.ts +1 -0
- package/dist/components/__tests__/DeleteBucketButton.test.js +272 -0
- package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.d.ts +1 -0
- package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.js +196 -0
- package/dist/components/__tests__/DeleteObjectButton.test.d.ts +1 -0
- package/dist/components/__tests__/DeleteObjectButton.test.js +302 -0
- package/dist/components/__tests__/EmptyBucketButton.test.d.ts +1 -0
- package/dist/components/__tests__/EmptyBucketButton.test.js +302 -0
- package/dist/components/__tests__/MetadataSearch.test.d.ts +1 -0
- package/dist/components/__tests__/MetadataSearch.test.js +201 -0
- package/dist/components/__tests__/ObjectList.test.d.ts +1 -0
- package/dist/components/__tests__/ObjectList.test.js +283 -0
- package/dist/components/__tests__/UploadButton.test.d.ts +1 -0
- package/dist/components/__tests__/UploadButton.test.js +144 -0
- package/dist/components/buckets/BucketCreate.d.ts +49 -0
- package/dist/components/buckets/BucketCreate.js +237 -0
- package/dist/components/buckets/BucketDetails.d.ts +1 -0
- package/dist/components/buckets/BucketDetails.js +106 -0
- package/dist/components/buckets/BucketLifecycleFormPage.d.ts +15 -0
- package/dist/components/buckets/BucketLifecycleFormPage.js +1085 -0
- package/dist/components/buckets/BucketLifecycleList.d.ts +10 -0
- package/dist/components/buckets/BucketLifecycleList.js +270 -0
- package/dist/components/buckets/BucketList.d.ts +15 -0
- package/dist/components/buckets/BucketList.js +146 -0
- package/dist/components/buckets/BucketLocation.d.ts +3 -0
- package/dist/components/buckets/BucketLocation.js +16 -0
- package/dist/components/buckets/BucketOverview.d.ts +88 -0
- package/dist/components/buckets/BucketOverview.js +291 -0
- package/dist/components/buckets/BucketPage.d.ts +2 -0
- package/dist/components/buckets/BucketPage.js +47 -0
- package/dist/components/buckets/BucketPolicyButton.d.ts +7 -0
- package/dist/components/buckets/BucketPolicyButton.js +18 -0
- package/dist/components/buckets/BucketPolicyPage.d.ts +1 -0
- package/dist/components/buckets/BucketPolicyPage.js +236 -0
- package/dist/components/buckets/BucketReplicationFormPage.d.ts +1 -0
- package/dist/components/buckets/BucketReplicationFormPage.js +834 -0
- package/dist/components/buckets/BucketReplicationList.d.ts +11 -0
- package/dist/components/buckets/BucketReplicationList.js +189 -0
- package/dist/components/buckets/BucketVersioning.d.ts +4 -0
- package/dist/components/buckets/BucketVersioning.js +73 -0
- package/dist/components/buckets/DeleteBucketButton.d.ts +8 -0
- package/dist/components/buckets/DeleteBucketButton.js +78 -0
- package/dist/components/buckets/DeleteBucketConfigRuleButton.d.ts +18 -0
- package/dist/components/buckets/DeleteBucketConfigRuleButton.js +53 -0
- package/dist/components/buckets/EmptyBucketButton.d.ts +5 -0
- package/dist/components/buckets/EmptyBucketButton.js +232 -0
- package/dist/components/buckets/EmptyBucketSummary.d.ts +9 -0
- package/dist/components/buckets/EmptyBucketSummary.js +60 -0
- package/dist/components/buckets/EmptyBucketSummaryList.d.ts +13 -0
- package/dist/components/buckets/EmptyBucketSummaryList.js +140 -0
- package/dist/components/buckets/__tests__/BucketVersioning.test.d.ts +1 -0
- package/dist/components/buckets/__tests__/BucketVersioning.test.js +163 -0
- package/dist/components/buckets/notifications/BucketNotificationCreatePage.d.ts +1 -0
- package/dist/components/buckets/notifications/BucketNotificationCreatePage.js +234 -0
- package/dist/components/buckets/notifications/EventsSection.d.ts +1 -0
- package/dist/components/buckets/notifications/EventsSection.js +123 -0
- package/dist/components/buckets/notifications/events.d.ts +12 -0
- package/dist/components/buckets/notifications/events.js +27 -0
- package/dist/components/index.d.ts +21 -0
- package/dist/components/index.js +22 -0
- package/dist/components/layouts/ArrowNavigation.d.ts +4 -0
- package/dist/components/layouts/ArrowNavigation.js +16 -0
- package/dist/components/layouts/BrowserPageLayout.d.ts +12 -0
- package/dist/components/layouts/BrowserPageLayout.js +51 -0
- package/dist/components/objects/CreateFolderButton.d.ts +29 -0
- package/dist/components/objects/CreateFolderButton.js +118 -0
- package/dist/components/objects/DeleteObjectButton.d.ts +8 -0
- package/dist/components/objects/DeleteObjectButton.js +191 -0
- package/dist/components/objects/ObjectDetails/ObjectMetadata.d.ts +2 -0
- package/dist/components/objects/ObjectDetails/ObjectMetadata.js +356 -0
- package/dist/components/objects/ObjectDetails/ObjectSummary.d.ts +3 -0
- package/dist/components/objects/ObjectDetails/ObjectSummary.js +241 -0
- package/dist/components/objects/ObjectDetails/ObjectTags.d.ts +3 -0
- package/dist/components/objects/ObjectDetails/ObjectTags.js +272 -0
- package/dist/components/objects/ObjectDetails/index.d.ts +9 -0
- package/dist/components/objects/ObjectDetails/index.js +75 -0
- package/dist/components/objects/ObjectList.d.ts +40 -0
- package/dist/components/objects/ObjectList.js +453 -0
- package/dist/components/objects/ObjectLock/EditRetentionButton.d.ts +4 -0
- package/dist/components/objects/ObjectLock/EditRetentionButton.js +32 -0
- package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.d.ts +3 -0
- package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.js +211 -0
- package/dist/components/objects/ObjectLock/ObjectLockSettings.d.ts +9 -0
- package/dist/components/objects/ObjectLock/ObjectLockSettings.js +158 -0
- package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.d.ts +8 -0
- package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.js +39 -0
- package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.d.ts +1 -0
- package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.js +204 -0
- package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.d.ts +1 -0
- package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.js +374 -0
- package/dist/components/objects/ObjectPage.d.ts +1 -0
- package/dist/components/objects/ObjectPage.js +45 -0
- package/dist/components/objects/UploadButton.d.ts +34 -0
- package/dist/components/objects/UploadButton.js +229 -0
- package/dist/components/providers/DataBrowserProvider.d.ts +20 -0
- package/dist/components/providers/DataBrowserProvider.js +42 -0
- package/dist/components/search/MetadataSearch.d.ts +5 -0
- package/dist/components/search/MetadataSearch.js +162 -0
- package/dist/components/search/SearchHints.d.ts +8 -0
- package/dist/components/search/SearchHints.js +21 -0
- package/dist/components/ui/ArrayFieldActions.d.ts +36 -0
- package/dist/components/ui/ArrayFieldActions.js +43 -0
- package/dist/components/ui/ConfirmDeleteRuleModal.d.ts +16 -0
- package/dist/components/ui/ConfirmDeleteRuleModal.js +43 -0
- package/dist/components/ui/DeleteObjectModalContent.d.ts +5 -0
- package/dist/components/ui/DeleteObjectModalContent.js +71 -0
- package/dist/components/ui/FilterFormSection.d.ts +44 -0
- package/dist/components/ui/FilterFormSection.js +159 -0
- package/dist/components/ui/Search.elements.d.ts +17 -0
- package/dist/components/ui/Search.elements.js +59 -0
- package/dist/components/ui/Table.elements.d.ts +36 -0
- package/dist/components/ui/Table.elements.js +87 -0
- package/dist/config/factory.d.ts +63 -0
- package/dist/config/factory.js +74 -0
- package/dist/config/types.d.ts +46 -0
- package/dist/config/types.js +0 -0
- package/dist/hooks/__tests__/useISVBucketDetection.test.d.ts +1 -0
- package/dist/hooks/__tests__/useISVBucketDetection.test.js +188 -0
- package/dist/hooks/__tests__/useIsBucketEmpty.test.d.ts +1 -0
- package/dist/hooks/__tests__/useIsBucketEmpty.test.js +122 -0
- package/dist/hooks/bucketConfiguration.d.ts +168 -0
- package/dist/hooks/bucketConfiguration.js +67 -0
- package/dist/hooks/bucketOperations.d.ts +36 -0
- package/dist/hooks/bucketOperations.js +12 -0
- package/dist/hooks/factories/__tests__/useCreateS3FunctionMutationHook.test.d.ts +1 -0
- package/dist/hooks/factories/__tests__/useCreateS3FunctionMutationHook.test.js +276 -0
- package/dist/hooks/factories/__tests__/useCreateS3InfiniteQueryHook.test.d.ts +1 -0
- package/dist/hooks/factories/__tests__/useCreateS3InfiniteQueryHook.test.js +259 -0
- package/dist/hooks/factories/__tests__/useCreateS3LoginHook.test.d.ts +1 -0
- package/dist/hooks/factories/__tests__/useCreateS3LoginHook.test.js +166 -0
- package/dist/hooks/factories/__tests__/useCreateS3MutationHook.test.d.ts +1 -0
- package/dist/hooks/factories/__tests__/useCreateS3MutationHook.test.js +200 -0
- package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.d.ts +1 -0
- package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.js +179 -0
- package/dist/hooks/factories/index.d.ts +18 -0
- package/dist/hooks/factories/index.js +5 -0
- package/dist/hooks/factories/useCreateS3InfiniteQueryHook.d.ts +13 -0
- package/dist/hooks/factories/useCreateS3InfiniteQueryHook.js +76 -0
- package/dist/hooks/factories/useCreateS3LoginHook.d.ts +8 -0
- package/dist/hooks/factories/useCreateS3LoginHook.js +22 -0
- package/dist/hooks/factories/useCreateS3MutationHook.d.ts +5 -0
- package/dist/hooks/factories/useCreateS3MutationHook.js +50 -0
- package/dist/hooks/factories/useCreateS3QueryHook.d.ts +3 -0
- package/dist/hooks/factories/useCreateS3QueryHook.js +51 -0
- package/dist/hooks/index.d.ts +13 -0
- package/dist/hooks/index.js +13 -0
- package/dist/hooks/loginOperations.d.ts +21 -0
- package/dist/hooks/loginOperations.js +9 -0
- package/dist/hooks/objectOperations.d.ts +190 -0
- package/dist/hooks/objectOperations.js +67 -0
- package/dist/hooks/presignedOperations.d.ts +73 -0
- package/dist/hooks/presignedOperations.js +72 -0
- package/dist/hooks/useBatchObjectLegalHold.d.ts +11 -0
- package/dist/hooks/useBatchObjectLegalHold.js +45 -0
- package/dist/hooks/useDeleteBucketConfigRule.d.ts +26 -0
- package/dist/hooks/useDeleteBucketConfigRule.js +46 -0
- package/dist/hooks/useEmptyBucket.d.ts +27 -0
- package/dist/hooks/useEmptyBucket.js +116 -0
- package/dist/hooks/useISVBucketDetection.d.ts +15 -0
- package/dist/hooks/useISVBucketDetection.js +27 -0
- package/dist/hooks/useIsBucketEmpty.d.ts +7 -0
- package/dist/hooks/useIsBucketEmpty.js +36 -0
- package/dist/hooks/useLoginMutation.d.ts +21 -0
- package/dist/hooks/useLoginMutation.js +9 -0
- package/dist/hooks/useS3Client.d.ts +1 -0
- package/dist/hooks/useS3Client.js +13 -0
- package/dist/hooks/useTableRowSelection.d.ts +9 -0
- package/dist/hooks/useTableRowSelection.js +45 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +6 -0
- package/dist/schemas/bucketPolicySchema.json +321 -0
- package/dist/test/msw/handlers/deleteBucket.d.ts +1 -0
- package/dist/test/msw/handlers/deleteBucket.js +14 -0
- package/dist/test/msw/handlers/getBucketAcl.d.ts +1 -0
- package/dist/test/msw/handlers/getBucketAcl.js +96 -0
- package/dist/test/msw/handlers/getBucketLocation.d.ts +1 -0
- package/dist/test/msw/handlers/getBucketLocation.js +23 -0
- package/dist/test/msw/handlers/getBucketPolicy.d.ts +11 -0
- package/dist/test/msw/handlers/getBucketPolicy.js +72 -0
- package/dist/test/msw/handlers/headObject.d.ts +1 -0
- package/dist/test/msw/handlers/headObject.js +17 -0
- package/dist/test/msw/handlers/listBuckets.d.ts +1 -0
- package/dist/test/msw/handlers/listBuckets.js +24 -0
- package/dist/test/msw/handlers/listObjectVersions.d.ts +1 -0
- package/dist/test/msw/handlers/listObjectVersions.js +83 -0
- package/dist/test/msw/handlers/listObjects.d.ts +1 -0
- package/dist/test/msw/handlers/listObjects.js +66 -0
- package/dist/test/msw/handlers/objectLegalHold.d.ts +1 -0
- package/dist/test/msw/handlers/objectLegalHold.js +24 -0
- package/dist/test/msw/handlers/objectRetention.d.ts +1 -0
- package/dist/test/msw/handlers/objectRetention.js +27 -0
- package/dist/test/msw/handlers/putBucketAcl.d.ts +1 -0
- package/dist/test/msw/handlers/putBucketAcl.js +18 -0
- package/dist/test/msw/handlers/putObject.d.ts +1 -0
- package/dist/test/msw/handlers/putObject.js +16 -0
- package/dist/test/msw/handlers.d.ts +4 -0
- package/dist/test/msw/handlers.js +109 -0
- package/dist/test/msw/index.d.ts +2 -0
- package/dist/test/msw/index.js +3 -0
- package/dist/test/msw/server.d.ts +4 -0
- package/dist/test/msw/server.js +20 -0
- package/dist/test/msw/utils.d.ts +2 -0
- package/dist/test/msw/utils.js +13 -0
- package/dist/test/setup.d.ts +1 -0
- package/dist/test/setup.js +90 -0
- package/dist/test/testUtils.d.ts +181 -0
- package/dist/test/testUtils.js +310 -0
- package/dist/test/utils/errorHandling.test.d.ts +1 -0
- package/dist/test/utils/errorHandling.test.js +423 -0
- package/dist/types/index.d.ts +51 -0
- package/dist/types/index.js +0 -0
- package/dist/utils/constants.d.ts +12 -0
- package/dist/utils/constants.js +9 -0
- package/dist/utils/deletion/index.d.ts +2 -0
- package/dist/utils/deletion/index.js +2 -0
- package/dist/utils/deletion/messages.d.ts +5 -0
- package/dist/utils/deletion/messages.js +29 -0
- package/dist/utils/deletion/types.d.ts +11 -0
- package/dist/utils/deletion/types.js +0 -0
- package/dist/utils/errorHandling.d.ts +63 -0
- package/dist/utils/errorHandling.js +84 -0
- package/dist/utils/hooks.d.ts +2 -0
- package/dist/utils/hooks.js +26 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/proxyMiddleware.d.ts +18 -0
- package/dist/utils/proxyMiddleware.js +56 -0
- package/dist/utils/s3Client.d.ts +5 -0
- package/dist/utils/s3Client.js +36 -0
- package/dist/utils/s3RuleUtils.d.ts +53 -0
- package/dist/utils/s3RuleUtils.js +101 -0
- package/dist/utils/useFeatures.d.ts +1 -0
- package/dist/utils/useFeatures.js +7 -0
- package/package.json +84 -0
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { act, fireEvent, render, screen, waitFor } from "@testing-library/react";
|
|
3
|
+
import { createTestWrapper } from "../../test/testUtils.js";
|
|
4
|
+
import { DeleteObjectButton } from "../objects/DeleteObjectButton.js";
|
|
5
|
+
import { useDeleteObjects, useGetBucketVersioning } from "../../hooks/index.js";
|
|
6
|
+
jest.mock("../../hooks");
|
|
7
|
+
const mockUseDeleteObjects = jest.mocked(useDeleteObjects);
|
|
8
|
+
const mockUseGetBucketVersioning = jest.mocked(useGetBucketVersioning);
|
|
9
|
+
const mockDeleteObjects = jest.fn();
|
|
10
|
+
const createMockObjects = (count, withVersions = false)=>Array.from({
|
|
11
|
+
length: count
|
|
12
|
+
}, (_, i)=>({
|
|
13
|
+
Key: `file${i + 1}.txt`,
|
|
14
|
+
displayName: `file${i + 1}.txt`,
|
|
15
|
+
Size: 1024 * (i + 1),
|
|
16
|
+
LastModified: new Date(`2023-01-${i + 1}T10:00:00Z`),
|
|
17
|
+
type: "object",
|
|
18
|
+
...withVersions && {
|
|
19
|
+
VersionId: `version-${i + 1}`
|
|
20
|
+
}
|
|
21
|
+
}));
|
|
22
|
+
const createMockFolders = (count)=>Array.from({
|
|
23
|
+
length: count
|
|
24
|
+
}, (_, i)=>({
|
|
25
|
+
Key: `folder${i + 1}/`,
|
|
26
|
+
displayName: `folder${i + 1}/`,
|
|
27
|
+
type: "folder",
|
|
28
|
+
LastModified: void 0
|
|
29
|
+
}));
|
|
30
|
+
const renderDeleteObjectButton = (props = {})=>{
|
|
31
|
+
const defaultProps = {
|
|
32
|
+
objects: createMockObjects(2),
|
|
33
|
+
bucketName: "test-bucket",
|
|
34
|
+
...props
|
|
35
|
+
};
|
|
36
|
+
const Wrapper = createTestWrapper();
|
|
37
|
+
return render(/*#__PURE__*/ jsx(Wrapper, {
|
|
38
|
+
children: /*#__PURE__*/ jsx(DeleteObjectButton, {
|
|
39
|
+
...defaultProps
|
|
40
|
+
})
|
|
41
|
+
}));
|
|
42
|
+
};
|
|
43
|
+
const mockHookDefaults = (versioningEnabled = false)=>{
|
|
44
|
+
mockUseGetBucketVersioning.mockReturnValue({
|
|
45
|
+
data: {
|
|
46
|
+
Status: versioningEnabled ? "Enabled" : "Suspended"
|
|
47
|
+
},
|
|
48
|
+
isLoading: false,
|
|
49
|
+
error: null
|
|
50
|
+
});
|
|
51
|
+
mockUseDeleteObjects.mockReturnValue({
|
|
52
|
+
mutate: mockDeleteObjects,
|
|
53
|
+
isPending: false
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
describe("DeleteObjectButton", ()=>{
|
|
57
|
+
beforeEach(()=>{
|
|
58
|
+
jest.clearAllMocks();
|
|
59
|
+
mockHookDefaults();
|
|
60
|
+
});
|
|
61
|
+
it("renders delete button with correct label and icon", ()=>{
|
|
62
|
+
renderDeleteObjectButton();
|
|
63
|
+
const button = screen.getByRole("button", {
|
|
64
|
+
name: /delete/i
|
|
65
|
+
});
|
|
66
|
+
expect(button).toBeInTheDocument();
|
|
67
|
+
expect(button).toHaveAttribute("id", "object-list-delete-button");
|
|
68
|
+
});
|
|
69
|
+
it("disables button when no objects are selected", ()=>{
|
|
70
|
+
renderDeleteObjectButton({
|
|
71
|
+
objects: []
|
|
72
|
+
});
|
|
73
|
+
const button = screen.getByRole("button", {
|
|
74
|
+
name: /delete/i
|
|
75
|
+
});
|
|
76
|
+
expect(button).toBeDisabled();
|
|
77
|
+
});
|
|
78
|
+
it("enables button when objects are selected", ()=>{
|
|
79
|
+
renderDeleteObjectButton();
|
|
80
|
+
const button = screen.getByRole("button", {
|
|
81
|
+
name: /delete/i
|
|
82
|
+
});
|
|
83
|
+
expect(button).not.toBeDisabled();
|
|
84
|
+
});
|
|
85
|
+
it("opens confirmation modal when delete button is clicked", ()=>{
|
|
86
|
+
renderDeleteObjectButton();
|
|
87
|
+
const button = screen.getByRole("button", {
|
|
88
|
+
name: /delete/i
|
|
89
|
+
});
|
|
90
|
+
fireEvent.click(button);
|
|
91
|
+
expect(screen.getByText("Confirmation")).toBeInTheDocument();
|
|
92
|
+
expect(screen.getByText(/do you want to.*delete/i)).toBeInTheDocument();
|
|
93
|
+
});
|
|
94
|
+
it("shows correct confirmation message for objects without versioning", ()=>{
|
|
95
|
+
renderDeleteObjectButton({
|
|
96
|
+
objects: createMockObjects(2)
|
|
97
|
+
});
|
|
98
|
+
const button = screen.getByRole("button", {
|
|
99
|
+
name: /delete/i
|
|
100
|
+
});
|
|
101
|
+
fireEvent.click(button);
|
|
102
|
+
expect(screen.getByText((content, _)=>content.includes("2") && content.includes("object"))).toBeInTheDocument();
|
|
103
|
+
});
|
|
104
|
+
it("shows correct confirmation message for mixed objects and folders", ()=>{
|
|
105
|
+
const mixedObjects = [
|
|
106
|
+
...createMockObjects(1),
|
|
107
|
+
...createMockFolders(1)
|
|
108
|
+
];
|
|
109
|
+
renderDeleteObjectButton({
|
|
110
|
+
objects: mixedObjects
|
|
111
|
+
});
|
|
112
|
+
const button = screen.getByRole("button", {
|
|
113
|
+
name: /delete/i
|
|
114
|
+
});
|
|
115
|
+
fireEvent.click(button);
|
|
116
|
+
expect(screen.getByText(/do you want to/i)).toBeInTheDocument();
|
|
117
|
+
expect(screen.getByText(/delete the selected/i)).toBeInTheDocument();
|
|
118
|
+
});
|
|
119
|
+
it("shows permanently delete message for versioned objects with specific versions", ()=>{
|
|
120
|
+
mockHookDefaults(true);
|
|
121
|
+
renderDeleteObjectButton({
|
|
122
|
+
objects: createMockObjects(2, true)
|
|
123
|
+
});
|
|
124
|
+
const button = screen.getByRole("button", {
|
|
125
|
+
name: /delete/i
|
|
126
|
+
});
|
|
127
|
+
fireEvent.click(button);
|
|
128
|
+
expect(screen.getByText("The selected versions will be permanently deleted.")).toBeInTheDocument();
|
|
129
|
+
expect(screen.getByText(/do you want to/i)).toBeInTheDocument();
|
|
130
|
+
expect(screen.getByText(/object versions/i)).toBeInTheDocument();
|
|
131
|
+
});
|
|
132
|
+
it("displays total size of selected objects", ()=>{
|
|
133
|
+
const objects = createMockObjects(2);
|
|
134
|
+
renderDeleteObjectButton({
|
|
135
|
+
objects
|
|
136
|
+
});
|
|
137
|
+
const button = screen.getByRole("button", {
|
|
138
|
+
name: /delete/i
|
|
139
|
+
});
|
|
140
|
+
fireEvent.click(button);
|
|
141
|
+
expect(screen.getByText(/total.*3.*kb/i)).toBeInTheDocument();
|
|
142
|
+
});
|
|
143
|
+
it("shows info banner with deletion message", ()=>{
|
|
144
|
+
renderDeleteObjectButton();
|
|
145
|
+
const button = screen.getByRole("button", {
|
|
146
|
+
name: /delete/i
|
|
147
|
+
});
|
|
148
|
+
fireEvent.click(button);
|
|
149
|
+
expect(screen.getByText(/the selected objects will be permanently deleted/i)).toBeInTheDocument();
|
|
150
|
+
});
|
|
151
|
+
it("shows different info message for versioned buckets without specific versions", ()=>{
|
|
152
|
+
mockHookDefaults(true);
|
|
153
|
+
renderDeleteObjectButton({
|
|
154
|
+
objects: createMockObjects(2, false)
|
|
155
|
+
});
|
|
156
|
+
const button = screen.getByRole("button", {
|
|
157
|
+
name: /delete/i
|
|
158
|
+
});
|
|
159
|
+
fireEvent.click(button);
|
|
160
|
+
expect(screen.getByText(/delete markers will be added to the objects/i)).toBeInTheDocument();
|
|
161
|
+
});
|
|
162
|
+
it("closes modal when cancel button is clicked", ()=>{
|
|
163
|
+
renderDeleteObjectButton();
|
|
164
|
+
const deleteButton = screen.getByRole("button", {
|
|
165
|
+
name: /delete/i
|
|
166
|
+
});
|
|
167
|
+
fireEvent.click(deleteButton);
|
|
168
|
+
const cancelButton = screen.getByRole("button", {
|
|
169
|
+
name: /cancel/i
|
|
170
|
+
});
|
|
171
|
+
fireEvent.click(cancelButton);
|
|
172
|
+
expect(screen.queryByText("Confirmation")).not.toBeInTheDocument();
|
|
173
|
+
});
|
|
174
|
+
it("calls delete mutation with correct parameters when deletion is confirmed", ()=>{
|
|
175
|
+
const objects = createMockObjects(2);
|
|
176
|
+
renderDeleteObjectButton({
|
|
177
|
+
objects,
|
|
178
|
+
bucketName: "my-bucket"
|
|
179
|
+
});
|
|
180
|
+
const deleteButton = screen.getByRole("button", {
|
|
181
|
+
name: /delete/i
|
|
182
|
+
});
|
|
183
|
+
fireEvent.click(deleteButton);
|
|
184
|
+
const confirmButton = document.getElementById("object-delete-delete-button");
|
|
185
|
+
expect(confirmButton).toBeInTheDocument();
|
|
186
|
+
fireEvent.click(confirmButton);
|
|
187
|
+
expect(mockDeleteObjects).toHaveBeenCalledWith({
|
|
188
|
+
Bucket: "my-bucket",
|
|
189
|
+
Delete: {
|
|
190
|
+
Objects: [
|
|
191
|
+
{
|
|
192
|
+
Key: "file1.txt"
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
Key: "file2.txt"
|
|
196
|
+
}
|
|
197
|
+
]
|
|
198
|
+
}
|
|
199
|
+
}, expect.objectContaining({
|
|
200
|
+
onSuccess: expect.any(Function),
|
|
201
|
+
onError: expect.any(Function)
|
|
202
|
+
}));
|
|
203
|
+
});
|
|
204
|
+
it("includes version IDs in delete request when objects have versions", ()=>{
|
|
205
|
+
const objects = createMockObjects(1, true);
|
|
206
|
+
renderDeleteObjectButton({
|
|
207
|
+
objects
|
|
208
|
+
});
|
|
209
|
+
const deleteButton = screen.getByRole("button", {
|
|
210
|
+
name: /delete/i
|
|
211
|
+
});
|
|
212
|
+
fireEvent.click(deleteButton);
|
|
213
|
+
const confirmButton = document.getElementById("object-delete-delete-button");
|
|
214
|
+
fireEvent.click(confirmButton);
|
|
215
|
+
expect(mockDeleteObjects).toHaveBeenCalledWith(expect.objectContaining({
|
|
216
|
+
Delete: {
|
|
217
|
+
Objects: [
|
|
218
|
+
{
|
|
219
|
+
Key: "file1.txt",
|
|
220
|
+
VersionId: "version-1"
|
|
221
|
+
}
|
|
222
|
+
]
|
|
223
|
+
}
|
|
224
|
+
}), expect.any(Object));
|
|
225
|
+
});
|
|
226
|
+
it("handles mixed objects and folders in delete request", ()=>{
|
|
227
|
+
const mixedObjects = [
|
|
228
|
+
...createMockObjects(1),
|
|
229
|
+
...createMockFolders(1)
|
|
230
|
+
];
|
|
231
|
+
renderDeleteObjectButton({
|
|
232
|
+
objects: mixedObjects
|
|
233
|
+
});
|
|
234
|
+
const deleteButton = screen.getByRole("button", {
|
|
235
|
+
name: /delete/i
|
|
236
|
+
});
|
|
237
|
+
fireEvent.click(deleteButton);
|
|
238
|
+
const confirmButton = document.getElementById("object-delete-delete-button");
|
|
239
|
+
fireEvent.click(confirmButton);
|
|
240
|
+
expect(mockDeleteObjects).toHaveBeenCalledWith(expect.objectContaining({
|
|
241
|
+
Delete: {
|
|
242
|
+
Objects: [
|
|
243
|
+
{
|
|
244
|
+
Key: "file1.txt"
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
Key: "folder1/"
|
|
248
|
+
}
|
|
249
|
+
]
|
|
250
|
+
}
|
|
251
|
+
}), expect.any(Object));
|
|
252
|
+
});
|
|
253
|
+
it("shows success toast and closes modal when deletion succeeds", async ()=>{
|
|
254
|
+
renderDeleteObjectButton();
|
|
255
|
+
const deleteButton = screen.getByRole("button", {
|
|
256
|
+
name: /delete/i
|
|
257
|
+
});
|
|
258
|
+
fireEvent.click(deleteButton);
|
|
259
|
+
expect(screen.getByText("Confirmation")).toBeInTheDocument();
|
|
260
|
+
const confirmButton = document.getElementById("object-delete-delete-button");
|
|
261
|
+
fireEvent.click(confirmButton);
|
|
262
|
+
await act(async ()=>{
|
|
263
|
+
const successCallback = mockDeleteObjects.mock.calls[0][1].onSuccess;
|
|
264
|
+
successCallback();
|
|
265
|
+
});
|
|
266
|
+
await waitFor(()=>{
|
|
267
|
+
expect(screen.queryByText("Confirmation")).not.toBeInTheDocument();
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
it("handles non-Error objects in error callback", async ()=>{
|
|
271
|
+
renderDeleteObjectButton();
|
|
272
|
+
const deleteButton = screen.getByRole("button", {
|
|
273
|
+
name: /delete/i
|
|
274
|
+
});
|
|
275
|
+
fireEvent.click(deleteButton);
|
|
276
|
+
const confirmButton = document.getElementById("object-delete-delete-button");
|
|
277
|
+
fireEvent.click(confirmButton);
|
|
278
|
+
await act(async ()=>{
|
|
279
|
+
const errorCallback = mockDeleteObjects.mock.calls[0][1].onError;
|
|
280
|
+
errorCallback("string error");
|
|
281
|
+
});
|
|
282
|
+
expect(mockDeleteObjects.mock.calls[0][1].onError).toBeDefined();
|
|
283
|
+
});
|
|
284
|
+
it("updates objects when props change", ()=>{
|
|
285
|
+
const { rerender } = renderDeleteObjectButton({
|
|
286
|
+
objects: createMockObjects(1)
|
|
287
|
+
});
|
|
288
|
+
expect(screen.getByRole("button", {
|
|
289
|
+
name: /delete/i
|
|
290
|
+
})).not.toBeDisabled();
|
|
291
|
+
const Wrapper = createTestWrapper();
|
|
292
|
+
rerender(/*#__PURE__*/ jsx(Wrapper, {
|
|
293
|
+
children: /*#__PURE__*/ jsx(DeleteObjectButton, {
|
|
294
|
+
objects: [],
|
|
295
|
+
bucketName: "test-bucket"
|
|
296
|
+
})
|
|
297
|
+
}));
|
|
298
|
+
expect(screen.getByRole("button", {
|
|
299
|
+
name: /delete/i
|
|
300
|
+
})).toBeDisabled();
|
|
301
|
+
});
|
|
302
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { fireEvent, render, screen, waitFor } from "@testing-library/react";
|
|
3
|
+
import { createTestWrapper } from "../../test/testUtils.js";
|
|
4
|
+
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");
|
|
11
|
+
const mockUseIsBucketEmpty = jest.mocked(useIsBucketEmpty);
|
|
12
|
+
const mockUseEmptyBucket = jest.mocked(useEmptyBucket);
|
|
13
|
+
const mockUseGetBucketObjectLockConfiguration = jest.mocked(useGetBucketObjectLockConfiguration);
|
|
14
|
+
const renderEmptyBucketButton = (props = {})=>{
|
|
15
|
+
const Wrapper = createTestWrapper();
|
|
16
|
+
return render(/*#__PURE__*/ jsx(Wrapper, {
|
|
17
|
+
children: /*#__PURE__*/ jsx(EmptyBucketButton, {
|
|
18
|
+
bucketName: "test-bucket",
|
|
19
|
+
...props
|
|
20
|
+
})
|
|
21
|
+
}));
|
|
22
|
+
};
|
|
23
|
+
const mockHookDefaults = ()=>{
|
|
24
|
+
mockUseIsBucketEmpty.mockReturnValue({
|
|
25
|
+
isEmpty: false,
|
|
26
|
+
isLoading: false,
|
|
27
|
+
error: null
|
|
28
|
+
});
|
|
29
|
+
mockUseEmptyBucket.mockReturnValue({
|
|
30
|
+
emptyBucket: jest.fn(),
|
|
31
|
+
isEmptying: false,
|
|
32
|
+
error: null,
|
|
33
|
+
result: null,
|
|
34
|
+
reset: jest.fn()
|
|
35
|
+
});
|
|
36
|
+
mockUseGetBucketObjectLockConfiguration.mockReturnValue({
|
|
37
|
+
data: void 0,
|
|
38
|
+
isLoading: false,
|
|
39
|
+
error: null
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
describe("EmptyBucketButton", ()=>{
|
|
43
|
+
beforeEach(()=>{
|
|
44
|
+
jest.clearAllMocks();
|
|
45
|
+
mockHookDefaults();
|
|
46
|
+
});
|
|
47
|
+
it("renders empty button with correct label", ()=>{
|
|
48
|
+
renderEmptyBucketButton();
|
|
49
|
+
expect(screen.getByRole("button", {
|
|
50
|
+
name: /empty bucket/i
|
|
51
|
+
})).toBeInTheDocument();
|
|
52
|
+
});
|
|
53
|
+
it("disables button when bucket is empty", ()=>{
|
|
54
|
+
mockUseIsBucketEmpty.mockReturnValue({
|
|
55
|
+
isEmpty: true,
|
|
56
|
+
isLoading: false,
|
|
57
|
+
error: null
|
|
58
|
+
});
|
|
59
|
+
renderEmptyBucketButton();
|
|
60
|
+
const button = screen.getByRole("button", {
|
|
61
|
+
name: /empty bucket/i
|
|
62
|
+
});
|
|
63
|
+
expect(button).toBeDisabled();
|
|
64
|
+
});
|
|
65
|
+
it("enables button when bucket is not empty", ()=>{
|
|
66
|
+
mockUseIsBucketEmpty.mockReturnValue({
|
|
67
|
+
isEmpty: false,
|
|
68
|
+
isLoading: false,
|
|
69
|
+
error: null
|
|
70
|
+
});
|
|
71
|
+
renderEmptyBucketButton();
|
|
72
|
+
const button = screen.getByRole("button", {
|
|
73
|
+
name: /empty bucket/i
|
|
74
|
+
});
|
|
75
|
+
expect(button).not.toBeDisabled();
|
|
76
|
+
});
|
|
77
|
+
it("opens confirmation modal when button is clicked", ()=>{
|
|
78
|
+
renderEmptyBucketButton();
|
|
79
|
+
const button = screen.getByRole("button", {
|
|
80
|
+
name: /empty bucket/i
|
|
81
|
+
});
|
|
82
|
+
fireEvent.click(button);
|
|
83
|
+
expect(screen.getByText(/Empty Bucket 'test-bucket'\?/i)).toBeInTheDocument();
|
|
84
|
+
expect(screen.getByText(/Emptying a bucket removes all contents and cannot be reversed/i)).toBeInTheDocument();
|
|
85
|
+
});
|
|
86
|
+
it("shows information list in modal", ()=>{
|
|
87
|
+
renderEmptyBucketButton();
|
|
88
|
+
const button = screen.getByRole("button", {
|
|
89
|
+
name: /empty bucket/i
|
|
90
|
+
});
|
|
91
|
+
fireEvent.click(button);
|
|
92
|
+
expect(screen.getByText(/Emptying a bucket removes all contents and cannot be reversed/i)).toBeInTheDocument();
|
|
93
|
+
expect(screen.getByText(/New objects added during the empty action may also be removed/i)).toBeInTheDocument();
|
|
94
|
+
});
|
|
95
|
+
it("shows confirmation input field", ()=>{
|
|
96
|
+
renderEmptyBucketButton();
|
|
97
|
+
const button = screen.getByRole("button", {
|
|
98
|
+
name: /empty bucket/i
|
|
99
|
+
});
|
|
100
|
+
fireEvent.click(button);
|
|
101
|
+
const input = screen.getByPlaceholderText(/test-bucket/i);
|
|
102
|
+
expect(input).toBeInTheDocument();
|
|
103
|
+
});
|
|
104
|
+
it("disables empty button until bucket name is typed", ()=>{
|
|
105
|
+
renderEmptyBucketButton();
|
|
106
|
+
const button = screen.getByRole("button", {
|
|
107
|
+
name: /empty bucket/i
|
|
108
|
+
});
|
|
109
|
+
fireEvent.click(button);
|
|
110
|
+
const emptyButton = screen.getByRole("button", {
|
|
111
|
+
name: /^empty$/i
|
|
112
|
+
});
|
|
113
|
+
expect(emptyButton).toBeDisabled();
|
|
114
|
+
const input = screen.getByPlaceholderText(/test-bucket/i);
|
|
115
|
+
fireEvent.change(input, {
|
|
116
|
+
target: {
|
|
117
|
+
value: "test-bucket"
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
expect(emptyButton).not.toBeDisabled();
|
|
121
|
+
});
|
|
122
|
+
it("closes modal when cancel is clicked", ()=>{
|
|
123
|
+
renderEmptyBucketButton();
|
|
124
|
+
const deleteButton = screen.getByRole("button", {
|
|
125
|
+
name: /empty bucket/i
|
|
126
|
+
});
|
|
127
|
+
fireEvent.click(deleteButton);
|
|
128
|
+
const cancelButton = screen.getByRole("button", {
|
|
129
|
+
name: /cancel/i
|
|
130
|
+
});
|
|
131
|
+
fireEvent.click(cancelButton);
|
|
132
|
+
expect(screen.queryByText(/Empty Bucket 'test-bucket'\?/i)).not.toBeInTheDocument();
|
|
133
|
+
});
|
|
134
|
+
it("resets state when modal is cancelled", ()=>{
|
|
135
|
+
renderEmptyBucketButton();
|
|
136
|
+
const button = screen.getByRole("button", {
|
|
137
|
+
name: /empty bucket/i
|
|
138
|
+
});
|
|
139
|
+
fireEvent.click(button);
|
|
140
|
+
const input = screen.getByPlaceholderText(/test-bucket/i);
|
|
141
|
+
fireEvent.change(input, {
|
|
142
|
+
target: {
|
|
143
|
+
value: "test-bucket"
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
expect(input).toHaveValue("test-bucket");
|
|
147
|
+
const cancelButton = screen.getByRole("button", {
|
|
148
|
+
name: /cancel/i
|
|
149
|
+
});
|
|
150
|
+
fireEvent.click(cancelButton);
|
|
151
|
+
fireEvent.click(button);
|
|
152
|
+
const inputAfterReopen = screen.getByPlaceholderText(/test-bucket/i);
|
|
153
|
+
expect(inputAfterReopen).toHaveValue("");
|
|
154
|
+
});
|
|
155
|
+
it("displays correct bucket name in modal title", ()=>{
|
|
156
|
+
renderEmptyBucketButton({
|
|
157
|
+
bucketName: "my-special-bucket"
|
|
158
|
+
});
|
|
159
|
+
const button = screen.getByRole("button", {
|
|
160
|
+
name: /empty bucket/i
|
|
161
|
+
});
|
|
162
|
+
fireEvent.click(button);
|
|
163
|
+
expect(screen.getByText(/Empty Bucket 'my-special-bucket'\?/i)).toBeInTheDocument();
|
|
164
|
+
});
|
|
165
|
+
it("shows loading state during deletion", async ()=>{
|
|
166
|
+
const mockEmptyBucket = jest.fn();
|
|
167
|
+
mockUseEmptyBucket.mockReturnValue({
|
|
168
|
+
emptyBucket: mockEmptyBucket,
|
|
169
|
+
isEmptying: true,
|
|
170
|
+
error: null,
|
|
171
|
+
result: null,
|
|
172
|
+
reset: jest.fn()
|
|
173
|
+
});
|
|
174
|
+
renderEmptyBucketButton();
|
|
175
|
+
const button = screen.getByRole("button", {
|
|
176
|
+
name: /empty bucket/i
|
|
177
|
+
});
|
|
178
|
+
fireEvent.click(button);
|
|
179
|
+
expect(screen.getByText(/Deletion in progress.../i)).toBeInTheDocument();
|
|
180
|
+
});
|
|
181
|
+
it("completes empty bucket operation successfully and shows summary", async ()=>{
|
|
182
|
+
const mockEmptyBucket = jest.fn().mockResolvedValue({
|
|
183
|
+
success: true,
|
|
184
|
+
deletedCount: 100,
|
|
185
|
+
errors: [],
|
|
186
|
+
limitReached: false
|
|
187
|
+
});
|
|
188
|
+
mockUseEmptyBucket.mockReturnValue({
|
|
189
|
+
emptyBucket: mockEmptyBucket,
|
|
190
|
+
isEmptying: false,
|
|
191
|
+
error: null,
|
|
192
|
+
result: null,
|
|
193
|
+
reset: jest.fn()
|
|
194
|
+
});
|
|
195
|
+
renderEmptyBucketButton();
|
|
196
|
+
const button = screen.getByRole("button", {
|
|
197
|
+
name: /empty bucket/i
|
|
198
|
+
});
|
|
199
|
+
fireEvent.click(button);
|
|
200
|
+
const input = screen.getByPlaceholderText(/test-bucket/i);
|
|
201
|
+
fireEvent.change(input, {
|
|
202
|
+
target: {
|
|
203
|
+
value: "test-bucket"
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
const emptyButton = screen.getByRole("button", {
|
|
207
|
+
name: /^empty$/i
|
|
208
|
+
});
|
|
209
|
+
fireEvent.click(emptyButton);
|
|
210
|
+
await waitFor(()=>{
|
|
211
|
+
expect(mockEmptyBucket).toHaveBeenCalledWith("test-bucket");
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
it("displays error when deletion fails", ()=>{
|
|
215
|
+
mockUseEmptyBucket.mockReturnValue({
|
|
216
|
+
emptyBucket: jest.fn(),
|
|
217
|
+
isEmptying: false,
|
|
218
|
+
error: new Error("Network error"),
|
|
219
|
+
result: null,
|
|
220
|
+
reset: jest.fn()
|
|
221
|
+
});
|
|
222
|
+
renderEmptyBucketButton();
|
|
223
|
+
const button = screen.getByRole("button", {
|
|
224
|
+
name: /empty bucket/i
|
|
225
|
+
});
|
|
226
|
+
fireEvent.click(button);
|
|
227
|
+
expect(screen.getByText(/Network error/i)).toBeInTheDocument();
|
|
228
|
+
});
|
|
229
|
+
it("calls emptyBucket when user confirms", async ()=>{
|
|
230
|
+
const mockEmptyBucket = jest.fn().mockResolvedValue({
|
|
231
|
+
success: false,
|
|
232
|
+
deletedCount: 50,
|
|
233
|
+
errors: [
|
|
234
|
+
{
|
|
235
|
+
key: "file1.txt",
|
|
236
|
+
code: "AccessDenied",
|
|
237
|
+
message: "Access denied"
|
|
238
|
+
}
|
|
239
|
+
],
|
|
240
|
+
limitReached: false
|
|
241
|
+
});
|
|
242
|
+
mockUseEmptyBucket.mockReturnValue({
|
|
243
|
+
emptyBucket: mockEmptyBucket,
|
|
244
|
+
isEmptying: false,
|
|
245
|
+
error: null,
|
|
246
|
+
result: null,
|
|
247
|
+
reset: jest.fn()
|
|
248
|
+
});
|
|
249
|
+
renderEmptyBucketButton();
|
|
250
|
+
const button = screen.getByRole("button", {
|
|
251
|
+
name: /empty bucket/i
|
|
252
|
+
});
|
|
253
|
+
fireEvent.click(button);
|
|
254
|
+
const input = screen.getByPlaceholderText(/test-bucket/i);
|
|
255
|
+
fireEvent.change(input, {
|
|
256
|
+
target: {
|
|
257
|
+
value: "test-bucket"
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
const emptyButton = screen.getByRole("button", {
|
|
261
|
+
name: /^empty$/i
|
|
262
|
+
});
|
|
263
|
+
fireEvent.click(emptyButton);
|
|
264
|
+
await waitFor(()=>{
|
|
265
|
+
expect(mockEmptyBucket).toHaveBeenCalledWith("test-bucket");
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
it("displays Object Lock warning when enabled", ()=>{
|
|
269
|
+
mockUseGetBucketObjectLockConfiguration.mockReturnValue({
|
|
270
|
+
data: {
|
|
271
|
+
ObjectLockConfiguration: {
|
|
272
|
+
ObjectLockEnabled: "Enabled"
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
isLoading: false,
|
|
276
|
+
error: null
|
|
277
|
+
});
|
|
278
|
+
renderEmptyBucketButton();
|
|
279
|
+
const button = screen.getByRole("button", {
|
|
280
|
+
name: /empty bucket/i
|
|
281
|
+
});
|
|
282
|
+
fireEvent.click(button);
|
|
283
|
+
expect(screen.getByText(/locked in governance mode/i)).toBeInTheDocument();
|
|
284
|
+
});
|
|
285
|
+
it("does not show Object Lock warning when disabled", ()=>{
|
|
286
|
+
mockUseGetBucketObjectLockConfiguration.mockReturnValue({
|
|
287
|
+
data: {
|
|
288
|
+
ObjectLockConfiguration: {
|
|
289
|
+
ObjectLockEnabled: "Disabled"
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
isLoading: false,
|
|
293
|
+
error: null
|
|
294
|
+
});
|
|
295
|
+
renderEmptyBucketButton();
|
|
296
|
+
const button = screen.getByRole("button", {
|
|
297
|
+
name: /empty bucket/i
|
|
298
|
+
});
|
|
299
|
+
fireEvent.click(button);
|
|
300
|
+
expect(screen.queryByText(/locked in governance mode/i)).not.toBeInTheDocument();
|
|
301
|
+
});
|
|
302
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|