@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.
- package/dist/components/DataBrowserUI.d.ts +12 -0
- package/dist/components/DataBrowserUI.js +99 -0
- package/dist/components/Editor.d.ts +1 -1
- package/dist/components/Editor.js +3 -3
- package/dist/components/__tests__/BucketAccessor.test.js +214 -0
- package/dist/components/__tests__/BucketCorsPage.test.d.ts +1 -0
- package/dist/components/__tests__/BucketCorsPage.test.js +263 -0
- package/dist/components/__tests__/BucketCreate.test.js +271 -105
- package/dist/components/__tests__/BucketDetails.test.d.ts +1 -0
- package/dist/components/__tests__/BucketDetails.test.js +421 -0
- package/dist/components/__tests__/BucketLifecycleFormPage.test.d.ts +13 -0
- package/dist/components/__tests__/BucketLifecycleFormPage.test.js +178 -178
- package/dist/components/__tests__/BucketLifecycleList.test.js +85 -85
- package/dist/components/__tests__/BucketList.test.js +463 -239
- package/dist/components/__tests__/BucketNotificationFormPage.test.d.ts +1 -0
- package/dist/components/__tests__/BucketNotificationFormPage.test.js +348 -0
- package/dist/components/__tests__/BucketNotificationList.test.d.ts +1 -0
- package/dist/components/__tests__/BucketNotificationList.test.js +379 -0
- package/dist/components/__tests__/BucketOverview.test.js +281 -266
- package/dist/components/__tests__/BucketPolicyPage.test.js +151 -99
- package/dist/components/__tests__/BucketReplicationFormPage.test.d.ts +15 -0
- package/dist/components/__tests__/BucketReplicationFormPage.test.js +544 -544
- package/dist/components/__tests__/BucketReplicationList.test.js +106 -106
- package/dist/components/__tests__/CreateFolderButton.test.js +56 -56
- package/dist/components/__tests__/DeleteBucketButton.test.js +64 -64
- package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.js +47 -47
- package/dist/components/__tests__/DeleteObjectButton.test.js +64 -64
- package/dist/components/__tests__/EmptyBucketButton.test.js +59 -59
- package/dist/components/__tests__/MetadataSearch.test.js +65 -65
- package/dist/components/__tests__/ObjectList.test.js +741 -240
- package/dist/components/__tests__/UploadButton.test.js +45 -45
- package/dist/components/breadcrumb/Breadcrumb.d.ts +6 -0
- package/dist/components/breadcrumb/Breadcrumb.js +37 -0
- package/dist/components/breadcrumb/DataBrowserBreadcrumb.d.ts +1 -0
- package/dist/components/breadcrumb/DataBrowserBreadcrumb.js +10 -0
- package/dist/components/breadcrumb/__tests__/Breadcrumb.test.d.ts +1 -0
- package/dist/components/breadcrumb/__tests__/Breadcrumb.test.js +196 -0
- package/dist/components/breadcrumb/__tests__/DataBrowserBreadcrumb.test.d.ts +1 -0
- package/dist/components/breadcrumb/__tests__/DataBrowserBreadcrumb.test.js +153 -0
- package/dist/components/breadcrumb/__tests__/useBreadcrumbPaths.test.d.ts +1 -0
- package/dist/components/breadcrumb/__tests__/useBreadcrumbPaths.test.js +134 -0
- package/dist/components/breadcrumb/index.d.ts +8 -0
- package/dist/components/breadcrumb/index.js +4 -0
- package/dist/components/breadcrumb/useBreadcrumbPaths.d.ts +2 -0
- package/dist/components/breadcrumb/useBreadcrumbPaths.js +82 -0
- package/dist/components/buckets/BucketAccessor.d.ts +2 -0
- package/dist/components/buckets/BucketAccessor.js +125 -0
- package/dist/components/buckets/BucketConfigEditButton.d.ts +8 -0
- package/dist/components/buckets/{BucketPolicyButton.js → BucketConfigEditButton.js} +9 -5
- package/dist/components/buckets/BucketCorsPage.d.ts +1 -0
- package/dist/components/buckets/BucketCorsPage.js +234 -0
- package/dist/components/buckets/BucketCreate.d.ts +3 -2
- package/dist/components/buckets/BucketCreate.js +89 -47
- package/dist/components/buckets/BucketDetails.d.ts +42 -0
- package/dist/components/buckets/BucketDetails.js +249 -85
- package/dist/components/buckets/BucketLifecycleFormPage.js +206 -190
- package/dist/components/buckets/BucketLifecycleList.d.ts +2 -2
- package/dist/components/buckets/BucketLifecycleList.js +47 -47
- package/dist/components/buckets/BucketList.d.ts +7 -8
- package/dist/components/buckets/BucketList.js +158 -101
- package/dist/components/buckets/BucketLocation.js +4 -4
- package/dist/components/buckets/BucketOverview.d.ts +22 -2
- package/dist/components/buckets/BucketOverview.js +394 -187
- package/dist/components/buckets/BucketPage.js +43 -21
- package/dist/components/buckets/BucketPolicyPage.js +155 -127
- package/dist/components/buckets/BucketReplicationFormPage.js +134 -133
- package/dist/components/buckets/BucketReplicationList.d.ts +2 -2
- package/dist/components/buckets/BucketReplicationList.js +42 -42
- package/dist/components/buckets/BucketVersioning.d.ts +4 -0
- package/dist/components/buckets/BucketVersioning.js +76 -0
- package/dist/components/buckets/DeleteBucketButton.js +8 -8
- package/dist/components/buckets/DeleteBucketConfigRuleButton.d.ts +2 -2
- package/dist/components/buckets/DeleteBucketConfigRuleButton.js +2 -2
- package/dist/components/buckets/EmptyBucketButton.js +24 -24
- package/dist/components/buckets/EmptyBucketSummary.d.ts +2 -2
- package/dist/components/buckets/EmptyBucketSummary.js +1 -1
- package/dist/components/buckets/EmptyBucketSummaryList.d.ts +1 -1
- package/dist/components/buckets/EmptyBucketSummaryList.js +22 -22
- 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/BucketNotificationFormPage.d.ts +1 -0
- package/dist/components/buckets/notifications/BucketNotificationFormPage.js +316 -0
- package/dist/components/buckets/notifications/BucketNotificationList.d.ts +10 -0
- package/dist/components/buckets/notifications/BucketNotificationList.js +267 -0
- package/dist/components/buckets/notifications/EventsSection.js +145 -29
- package/dist/components/buckets/notifications/__tests__/events.test.d.ts +1 -0
- package/dist/components/buckets/notifications/__tests__/events.test.js +56 -0
- package/dist/components/buckets/notifications/events.d.ts +71 -7
- package/dist/components/buckets/notifications/events.js +98 -16
- package/dist/components/index.d.ts +27 -20
- package/dist/components/index.js +17 -10
- package/dist/components/layouts/ArrowNavigation.d.ts +3 -0
- package/dist/components/layouts/ArrowNavigation.js +28 -0
- package/dist/components/layouts/BrowserPageLayout.d.ts +5 -1
- package/dist/components/layouts/BrowserPageLayout.js +10 -5
- package/dist/components/objects/CreateFolderButton.d.ts +2 -2
- package/dist/components/objects/CreateFolderButton.js +12 -12
- package/dist/components/objects/DeleteObjectButton.d.ts +1 -1
- package/dist/components/objects/DeleteObjectButton.js +19 -21
- package/dist/components/objects/GetPresignedUrlButton.d.ts +7 -0
- package/dist/components/objects/GetPresignedUrlButton.js +255 -0
- package/dist/components/objects/ObjectDetails/ObjectMetadata.d.ts +2 -2
- package/dist/components/objects/ObjectDetails/ObjectMetadata.js +263 -230
- package/dist/components/objects/ObjectDetails/ObjectSummary.d.ts +2 -2
- package/dist/components/objects/ObjectDetails/ObjectSummary.js +540 -138
- package/dist/components/objects/ObjectDetails/ObjectTags.d.ts +2 -2
- package/dist/components/objects/ObjectDetails/ObjectTags.js +95 -123
- package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.d.ts +1 -0
- package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.js +516 -0
- package/dist/components/objects/ObjectDetails/__tests__/ObjectSummary.test.d.ts +1 -0
- package/dist/components/objects/ObjectDetails/__tests__/ObjectSummary.test.js +1064 -0
- package/dist/components/objects/ObjectDetails/index.d.ts +18 -2
- package/dist/components/objects/ObjectDetails/index.js +152 -40
- package/dist/components/objects/ObjectList.d.ts +12 -10
- package/dist/components/objects/ObjectList.js +590 -263
- package/dist/components/objects/ObjectLock/EditRetentionButton.js +4 -4
- package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.js +15 -15
- package/dist/components/objects/ObjectLock/ObjectLockSettings.d.ts +1 -1
- package/dist/components/objects/ObjectLock/ObjectLockSettings.js +32 -31
- package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.d.ts +1 -1
- package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.js +6 -6
- package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.js +51 -51
- package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.js +78 -78
- package/dist/components/objects/ObjectPage.js +12 -8
- package/dist/components/objects/UploadButton.d.ts +3 -3
- package/dist/components/objects/UploadButton.js +10 -10
- package/dist/components/objects/__tests__/GetPresignedUrlButton.test.d.ts +1 -0
- package/dist/components/objects/__tests__/GetPresignedUrlButton.test.js +531 -0
- package/dist/components/providers/DataBrowserProvider.d.ts +23 -12
- package/dist/components/providers/DataBrowserProvider.js +60 -38
- package/dist/components/providers/QueryProvider.d.ts +9 -0
- package/dist/components/providers/QueryProvider.js +21 -0
- package/dist/components/search/MetadataSearch.js +29 -28
- package/dist/components/search/SearchHints.js +1 -1
- package/dist/components/ui/ArrayFieldActions.js +12 -7
- package/dist/components/ui/ConfirmDeleteRuleModal.d.ts +2 -2
- package/dist/components/ui/ConfirmDeleteRuleModal.js +6 -1
- package/dist/components/ui/DeleteObjectModalContent.d.ts +1 -1
- package/dist/components/ui/DeleteObjectModalContent.js +12 -12
- package/dist/components/ui/FilterFormSection.d.ts +2 -2
- package/dist/components/ui/FilterFormSection.js +29 -29
- package/dist/components/ui/Search.elements.d.ts +2 -2
- package/dist/components/ui/Search.elements.js +7 -7
- package/dist/components/ui/Table.elements.d.ts +2 -1
- package/dist/components/ui/Table.elements.js +18 -12
- package/dist/config/__tests__/factory.test.d.ts +1 -0
- package/dist/config/__tests__/factory.test.js +311 -0
- package/dist/config/factory.d.ts +10 -56
- package/dist/config/factory.js +23 -71
- package/dist/config/types.d.ts +212 -34
- package/dist/contexts/DataBrowserUICustomizationContext.d.ts +27 -0
- package/dist/contexts/DataBrowserUICustomizationContext.js +13 -0
- package/dist/hooks/__tests__/useAccessibleBuckets.test.d.ts +1 -0
- package/dist/hooks/__tests__/useAccessibleBuckets.test.js +145 -0
- package/dist/hooks/__tests__/useISVBucketDetection.test.js +45 -45
- package/dist/hooks/__tests__/useIsBucketEmpty.test.js +27 -27
- package/dist/hooks/__tests__/useLoginMutation.test.d.ts +1 -0
- package/dist/hooks/__tests__/useLoginMutation.test.js +194 -0
- package/dist/hooks/bucketConfiguration.d.ts +8 -1
- package/dist/hooks/bucketConfiguration.js +52 -51
- package/dist/hooks/bucketOperations.d.ts +10 -1
- package/dist/hooks/bucketOperations.js +10 -9
- package/dist/hooks/factories/__tests__/useCreateS3FunctionMutationHook.test.js +80 -80
- package/dist/hooks/factories/__tests__/useCreateS3InfiniteQueryHook.test.js +80 -80
- package/dist/hooks/factories/__tests__/useCreateS3LoginHook.test.js +44 -44
- package/dist/hooks/factories/__tests__/useCreateS3MutationHook.test.js +63 -63
- package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.js +65 -65
- package/dist/hooks/factories/index.d.ts +4 -4
- package/dist/hooks/factories/index.js +2 -2
- package/dist/hooks/factories/useCreateS3InfiniteQueryHook.d.ts +2 -2
- package/dist/hooks/factories/useCreateS3InfiniteQueryHook.js +16 -13
- package/dist/hooks/factories/useCreateS3LoginHook.d.ts +2 -2
- package/dist/hooks/factories/useCreateS3LoginHook.js +1 -1
- package/dist/hooks/factories/useCreateS3MutationHook.d.ts +3 -3
- package/dist/hooks/factories/useCreateS3MutationHook.js +7 -2
- package/dist/hooks/factories/useCreateS3QueryHook.d.ts +2 -2
- package/dist/hooks/factories/useCreateS3QueryHook.js +11 -6
- package/dist/hooks/index.d.ts +19 -12
- package/dist/hooks/index.js +16 -9
- package/dist/hooks/loginOperations.d.ts +1 -1
- package/dist/hooks/loginOperations.js +1 -1
- package/dist/hooks/objectOperations.d.ts +2 -2
- package/dist/hooks/objectOperations.js +50 -49
- package/dist/hooks/presignedOperations.d.ts +4 -4
- package/dist/hooks/presignedOperations.js +5 -5
- package/dist/hooks/useAccessibleBuckets.d.ts +11 -0
- package/dist/hooks/useAccessibleBuckets.js +115 -0
- package/dist/hooks/useBatchObjectLegalHold.d.ts +11 -0
- package/dist/hooks/useBatchObjectLegalHold.js +48 -0
- package/dist/hooks/useBucketConfigEditor.d.ts +31 -0
- package/dist/hooks/useBucketConfigEditor.js +82 -0
- package/dist/hooks/useDataBrowserNavigate.d.ts +28 -0
- package/dist/hooks/useDataBrowserNavigate.js +24 -0
- package/dist/hooks/useDeleteBucketConfigRule.d.ts +2 -2
- package/dist/hooks/useDeleteBucketConfigRule.js +4 -4
- package/dist/hooks/useEmptyBucket.js +11 -11
- package/dist/hooks/useFeatures.d.ts +7 -0
- package/dist/hooks/useFeatures.js +8 -0
- package/dist/hooks/useISVBucketDetection.js +6 -6
- package/dist/hooks/useIsBucketEmpty.js +4 -4
- package/dist/hooks/useLimitedAccessFlow.d.ts +48 -0
- package/dist/hooks/useLimitedAccessFlow.js +23 -0
- package/dist/hooks/useS3Client.d.ts +6 -0
- package/dist/hooks/useS3Client.js +3 -2
- package/dist/hooks/useS3ConfigSwitch.d.ts +11 -0
- package/dist/hooks/useS3ConfigSwitch.js +37 -0
- package/dist/hooks/useSupportedNotificationEvents.d.ts +6 -0
- package/dist/hooks/useSupportedNotificationEvents.js +8 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.js +2 -2
- package/dist/schemas/bucketPolicySchema.json +3 -13
- package/dist/test/msw/handlers/deleteBucket.d.ts +1 -1
- package/dist/test/msw/handlers/deleteBucket.js +20 -10
- package/dist/test/msw/handlers/getBucketAcl.d.ts +1 -1
- package/dist/test/msw/handlers/getBucketAcl.js +29 -17
- package/dist/test/msw/handlers/getBucketLocation.d.ts +1 -1
- package/dist/test/msw/handlers/getBucketLocation.js +29 -15
- package/dist/test/msw/handlers/getBucketPolicy.d.ts +1 -1
- package/dist/test/msw/handlers/getBucketPolicy.js +52 -32
- package/dist/test/msw/handlers/headObject.d.ts +1 -1
- package/dist/test/msw/handlers/headObject.js +31 -13
- package/dist/test/msw/handlers/listBuckets.d.ts +1 -1
- package/dist/test/msw/handlers/listBuckets.js +5 -3
- package/dist/test/msw/handlers/listObjectVersions.d.ts +1 -1
- package/dist/test/msw/handlers/listObjectVersions.js +38 -26
- package/dist/test/msw/handlers/listObjects.d.ts +1 -1
- package/dist/test/msw/handlers/listObjects.js +35 -23
- package/dist/test/msw/handlers/objectLegalHold.d.ts +1 -1
- package/dist/test/msw/handlers/objectLegalHold.js +32 -17
- package/dist/test/msw/handlers/objectRetention.d.ts +1 -1
- package/dist/test/msw/handlers/objectRetention.js +31 -17
- package/dist/test/msw/handlers/putBucketAcl.d.ts +1 -1
- package/dist/test/msw/handlers/putBucketAcl.js +29 -14
- package/dist/test/msw/handlers/putObject.d.ts +1 -1
- package/dist/test/msw/handlers/putObject.js +27 -12
- package/dist/test/msw/handlers.d.ts +3 -3
- package/dist/test/msw/handlers.js +77 -54
- package/dist/test/msw/index.d.ts +2 -2
- package/dist/test/msw/index.js +1 -1
- package/dist/test/msw/server.d.ts +1 -1
- package/dist/test/msw/server.js +1 -1
- package/dist/test/msw/utils.js +2 -2
- package/dist/test/setup.d.ts +1 -1
- package/dist/test/setup.js +13 -30
- package/dist/test/testUtils.d.ts +85 -33
- package/dist/test/testUtils.js +176 -111
- package/dist/test/utils/errorHandling.test.js +119 -119
- package/dist/types/index.d.ts +49 -36
- package/dist/types/monaco.d.ts +13 -0
- package/dist/types/monaco.js +0 -0
- package/dist/utils/__tests__/proxyMiddleware.test.d.ts +1 -0
- package/dist/utils/__tests__/proxyMiddleware.test.js +579 -0
- package/dist/utils/__tests__/s3Client.test.d.ts +1 -0
- package/dist/utils/__tests__/s3Client.test.js +340 -0
- package/dist/utils/__tests__/s3ConfigIdentifier.test.d.ts +1 -0
- package/dist/utils/__tests__/s3ConfigIdentifier.test.js +437 -0
- package/dist/utils/constants.d.ts +10 -0
- package/dist/utils/constants.js +19 -9
- package/dist/utils/deletion/index.d.ts +2 -2
- package/dist/utils/deletion/index.js +1 -1
- package/dist/utils/deletion/messages.d.ts +1 -1
- package/dist/utils/deletion/messages.js +4 -4
- package/dist/utils/errorHandling.d.ts +3 -3
- package/dist/utils/errorHandling.js +6 -6
- package/dist/utils/hooks.js +8 -8
- package/dist/utils/index.d.ts +5 -4
- package/dist/utils/index.js +4 -2
- package/dist/utils/proxyMiddleware.d.ts +32 -13
- package/dist/utils/proxyMiddleware.js +90 -36
- package/dist/utils/s3Client.d.ts +14 -4
- package/dist/utils/s3Client.js +5 -26
- package/dist/utils/s3ConfigIdentifier.d.ts +79 -0
- package/dist/utils/s3ConfigIdentifier.js +57 -0
- package/dist/utils/s3RuleUtils.d.ts +5 -5
- package/dist/utils/s3RuleUtils.js +17 -17
- package/package.json +10 -8
- package/dist/components/__tests__/BucketNotificationCreatePage.test.js +0 -316
- package/dist/components/buckets/BucketPolicyButton.d.ts +0 -7
- package/dist/components/buckets/notifications/BucketNotificationCreatePage.d.ts +0 -1
- package/dist/components/buckets/notifications/BucketNotificationCreatePage.js +0 -234
- package/dist/hooks/useLoginMutation.d.ts +0 -21
- package/dist/hooks/useLoginMutation.js +0 -9
- package/dist/utils/useFeatures.d.ts +0 -1
- package/dist/utils/useFeatures.js +0 -7
- /package/dist/components/__tests__/{BucketNotificationCreatePage.test.d.ts → BucketAccessor.test.d.ts} +0 -0
|
@@ -1,32 +1,13 @@
|
|
|
1
|
-
import * as __WEBPACK_EXTERNAL_MODULE_react_router_dom_5358f3fe__ from "react-router-dom";
|
|
2
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
2
|
import { fireEvent, render, screen } from "@testing-library/react";
|
|
3
|
+
import { MemoryRouter } from "react-router";
|
|
4
4
|
import { useGetBucketAcl, useGetBucketCors, useGetBucketLocation, useGetBucketObjectLockConfiguration, useGetBucketPolicy, useGetBucketTagging, useGetBucketVersioning, useISVBucketStatus } from "../../hooks/index.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
var __webpack_module_cache__ = {};
|
|
14
|
-
function __webpack_require__(moduleId) {
|
|
15
|
-
var cachedModule = __webpack_module_cache__[moduleId];
|
|
16
|
-
if (void 0 !== cachedModule) return cachedModule.exports;
|
|
17
|
-
var module = __webpack_module_cache__[moduleId] = {
|
|
18
|
-
exports: {}
|
|
19
|
-
};
|
|
20
|
-
__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
21
|
-
return module.exports;
|
|
22
|
-
}
|
|
23
|
-
var external_react_router_dom_ = __webpack_require__("react-router-dom");
|
|
24
|
-
jest.mock("../../hooks");
|
|
25
|
-
jest.mock("../../utils/useFeatures");
|
|
26
|
-
jest.mock("react-router-dom", ()=>({
|
|
27
|
-
...jest.requireActual("react-router-dom"),
|
|
28
|
-
useNavigate: jest.fn()
|
|
29
|
-
}));
|
|
5
|
+
import { useFeatures } from "../../hooks/useFeatures.js";
|
|
6
|
+
import { applyBucketMocks, createTestWrapper } from "../../test/testUtils.js";
|
|
7
|
+
import { BucketOverview, useBucketOverviewContext } from "../buckets/BucketOverview.js";
|
|
8
|
+
import * as __rspack_external__contexts_DataBrowserUICustomizationContext_js_f267b01c from "../../contexts/DataBrowserUICustomizationContext.js";
|
|
9
|
+
jest.mock('../../hooks');
|
|
10
|
+
jest.mock('../../hooks/useFeatures');
|
|
30
11
|
const mockUseGetBucketVersioning = jest.mocked(useGetBucketVersioning);
|
|
31
12
|
const mockUseGetBucketAcl = jest.mocked(useGetBucketAcl);
|
|
32
13
|
const mockUseGetBucketLocation = jest.mocked(useGetBucketLocation);
|
|
@@ -36,12 +17,13 @@ const mockUseGetBucketPolicy = jest.mocked(useGetBucketPolicy);
|
|
|
36
17
|
const mockUseGetBucketTagging = jest.mocked(useGetBucketTagging);
|
|
37
18
|
const mockUseISVBucketStatus = jest.mocked(useISVBucketStatus);
|
|
38
19
|
const mockUseFeatures = jest.mocked(useFeatures);
|
|
20
|
+
const mockUseDataBrowserUICustomization = (config = {})=>{
|
|
21
|
+
jest.spyOn(__rspack_external__contexts_DataBrowserUICustomizationContext_js_f267b01c, 'useDataBrowserUICustomization').mockReturnValue(config);
|
|
22
|
+
};
|
|
39
23
|
const renderBucketOverview = (props = {})=>{
|
|
40
|
-
const { bucketName =
|
|
24
|
+
const { bucketName = 'test-bucket', onEmptyBucket, onDeleteBucket, onEditPolicy, renderEmptyButton, renderDeleteButton, isEmptyBucketDisabled, isDeleteBucketDisabled } = props;
|
|
41
25
|
const Wrapper = createTestWrapper();
|
|
42
|
-
|
|
43
|
-
__webpack_require__("react-router-dom").useNavigate.mockReturnValue(mockNavigate);
|
|
44
|
-
return render(/*#__PURE__*/ jsx(external_react_router_dom_.MemoryRouter, {
|
|
26
|
+
return render(/*#__PURE__*/ jsx(MemoryRouter, {
|
|
45
27
|
children: /*#__PURE__*/ jsx(Wrapper, {
|
|
46
28
|
children: /*#__PURE__*/ jsxs(BucketOverview, {
|
|
47
29
|
bucketName: bucketName,
|
|
@@ -68,622 +50,655 @@ const renderBucketOverview = (props = {})=>{
|
|
|
68
50
|
})
|
|
69
51
|
}));
|
|
70
52
|
};
|
|
71
|
-
const mockHookDefaults = ()=>{
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
Grants: [
|
|
84
|
-
{
|
|
85
|
-
Grantee: {
|
|
86
|
-
DisplayName: "test-grantee"
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
]
|
|
90
|
-
},
|
|
91
|
-
status: "success"
|
|
92
|
-
});
|
|
93
|
-
mockUseGetBucketLocation.mockReturnValue({
|
|
94
|
-
data: {
|
|
95
|
-
LocationConstraint: "us-west-2"
|
|
96
|
-
},
|
|
97
|
-
status: "success"
|
|
98
|
-
});
|
|
99
|
-
mockUseGetBucketCors.mockReturnValue({
|
|
100
|
-
data: {
|
|
101
|
-
CORSRules: []
|
|
102
|
-
},
|
|
103
|
-
status: "success"
|
|
104
|
-
});
|
|
105
|
-
mockUseGetBucketObjectLockConfiguration.mockReturnValue({
|
|
106
|
-
data: {
|
|
107
|
-
ObjectLockConfiguration: {
|
|
108
|
-
ObjectLockEnabled: "Disabled"
|
|
109
|
-
}
|
|
110
|
-
},
|
|
111
|
-
status: "success"
|
|
112
|
-
});
|
|
113
|
-
mockUseGetBucketPolicy.mockReturnValue({
|
|
114
|
-
data: void 0,
|
|
115
|
-
error: null,
|
|
116
|
-
status: "success"
|
|
117
|
-
});
|
|
118
|
-
mockUseGetBucketTagging.mockReturnValue({
|
|
119
|
-
data: {
|
|
120
|
-
TagSet: []
|
|
121
|
-
},
|
|
122
|
-
status: "success"
|
|
123
|
-
});
|
|
124
|
-
mockUseISVBucketStatus.mockReturnValue({
|
|
125
|
-
isVeeamBucket: false,
|
|
126
|
-
isCommvaultBucket: false,
|
|
127
|
-
isISVManaged: false,
|
|
128
|
-
isvApplication: void 0,
|
|
129
|
-
isLoading: false,
|
|
130
|
-
bucketTagsStatus: "success"
|
|
131
|
-
});
|
|
132
|
-
mockUseFeatures.mockReturnValue(false);
|
|
53
|
+
const mockHookDefaults = (overrides = {})=>{
|
|
54
|
+
applyBucketMocks({
|
|
55
|
+
useGetBucketVersioning: mockUseGetBucketVersioning,
|
|
56
|
+
useGetBucketAcl: mockUseGetBucketAcl,
|
|
57
|
+
useGetBucketLocation: mockUseGetBucketLocation,
|
|
58
|
+
useGetBucketCors: mockUseGetBucketCors,
|
|
59
|
+
useGetBucketObjectLockConfiguration: mockUseGetBucketObjectLockConfiguration,
|
|
60
|
+
useGetBucketPolicy: mockUseGetBucketPolicy,
|
|
61
|
+
useGetBucketTagging: mockUseGetBucketTagging,
|
|
62
|
+
useISVBucketStatus: mockUseISVBucketStatus,
|
|
63
|
+
useFeatures: mockUseFeatures
|
|
64
|
+
}, overrides);
|
|
133
65
|
};
|
|
134
|
-
describe(
|
|
66
|
+
describe('BucketOverview', ()=>{
|
|
135
67
|
beforeEach(()=>{
|
|
136
68
|
jest.clearAllMocks();
|
|
137
69
|
mockHookDefaults();
|
|
70
|
+
mockUseDataBrowserUICustomization({});
|
|
138
71
|
});
|
|
139
|
-
it(
|
|
72
|
+
it('renders bucket overview with all sections', ()=>{
|
|
140
73
|
renderBucketOverview();
|
|
141
|
-
expect(screen.getByText(
|
|
142
|
-
expect(screen.getByText(
|
|
143
|
-
expect(screen.getByText(
|
|
74
|
+
expect(screen.getByText('General')).toBeInTheDocument();
|
|
75
|
+
expect(screen.getByText('Data protection')).toBeInTheDocument();
|
|
76
|
+
expect(screen.getByText('Permissions')).toBeInTheDocument();
|
|
144
77
|
});
|
|
145
|
-
it(
|
|
78
|
+
it('displays bucket name correctly', ()=>{
|
|
146
79
|
renderBucketOverview({
|
|
147
|
-
bucketName:
|
|
80
|
+
bucketName: 'my-test-bucket'
|
|
148
81
|
});
|
|
149
|
-
expect(screen.getByText(
|
|
82
|
+
expect(screen.getByText('my-test-bucket')).toBeInTheDocument();
|
|
150
83
|
});
|
|
151
|
-
it(
|
|
84
|
+
it('shows versioning status when enabled', ()=>{
|
|
152
85
|
mockUseGetBucketVersioning.mockReturnValue({
|
|
153
86
|
data: {
|
|
154
|
-
Status:
|
|
87
|
+
Status: 'Enabled'
|
|
155
88
|
},
|
|
156
|
-
status:
|
|
89
|
+
status: 'success'
|
|
157
90
|
});
|
|
158
91
|
renderBucketOverview();
|
|
159
|
-
expect(screen.getByText(
|
|
92
|
+
expect(screen.getByText('Active')).toBeInTheDocument();
|
|
160
93
|
});
|
|
161
|
-
it(
|
|
94
|
+
it('shows versioning status when disabled', ()=>{
|
|
162
95
|
mockUseGetBucketVersioning.mockReturnValue({
|
|
163
96
|
data: {
|
|
164
|
-
Status:
|
|
97
|
+
Status: 'Suspended'
|
|
165
98
|
},
|
|
166
|
-
status:
|
|
99
|
+
status: 'success'
|
|
167
100
|
});
|
|
168
101
|
renderBucketOverview();
|
|
169
|
-
expect(screen.getByText(
|
|
102
|
+
expect(screen.getByText('Inactive')).toBeInTheDocument();
|
|
170
103
|
});
|
|
171
|
-
it(
|
|
104
|
+
it('displays bucket location', ()=>{
|
|
172
105
|
mockUseGetBucketLocation.mockReturnValue({
|
|
173
106
|
data: {
|
|
174
|
-
LocationConstraint:
|
|
107
|
+
LocationConstraint: 'eu-west-1'
|
|
175
108
|
},
|
|
176
|
-
status:
|
|
109
|
+
status: 'success'
|
|
177
110
|
});
|
|
178
111
|
renderBucketOverview();
|
|
179
|
-
expect(screen.getByText(
|
|
112
|
+
expect(screen.getByText('eu-west-1')).toBeInTheDocument();
|
|
180
113
|
});
|
|
181
|
-
it(
|
|
114
|
+
it('shows default location when LocationConstraint is null', ()=>{
|
|
182
115
|
mockUseGetBucketLocation.mockReturnValue({
|
|
183
116
|
data: {
|
|
184
117
|
LocationConstraint: null
|
|
185
118
|
},
|
|
186
|
-
status:
|
|
119
|
+
status: 'success'
|
|
187
120
|
});
|
|
188
121
|
renderBucketOverview();
|
|
189
|
-
expect(screen.getByText(
|
|
122
|
+
expect(screen.getByText('us-east-1')).toBeInTheDocument();
|
|
190
123
|
});
|
|
191
|
-
it(
|
|
124
|
+
it('shows object-lock enabled status', ()=>{
|
|
192
125
|
mockUseGetBucketObjectLockConfiguration.mockReturnValue({
|
|
193
126
|
data: {
|
|
194
127
|
ObjectLockConfiguration: {
|
|
195
|
-
ObjectLockEnabled:
|
|
128
|
+
ObjectLockEnabled: 'Enabled'
|
|
196
129
|
}
|
|
197
130
|
},
|
|
198
|
-
status:
|
|
131
|
+
status: 'success'
|
|
199
132
|
});
|
|
200
133
|
renderBucketOverview();
|
|
201
|
-
expect(screen.getByText(
|
|
134
|
+
expect(screen.getByText('Enabled')).toBeInTheDocument();
|
|
202
135
|
});
|
|
203
|
-
it(
|
|
136
|
+
it('shows object-lock disabled status', ()=>{
|
|
204
137
|
mockUseGetBucketObjectLockConfiguration.mockReturnValue({
|
|
205
138
|
data: {
|
|
206
139
|
ObjectLockConfiguration: {
|
|
207
|
-
ObjectLockEnabled:
|
|
140
|
+
ObjectLockEnabled: 'Disabled'
|
|
208
141
|
}
|
|
209
142
|
},
|
|
210
|
-
status:
|
|
143
|
+
status: 'success'
|
|
211
144
|
});
|
|
212
145
|
renderBucketOverview();
|
|
213
|
-
expect(screen.getByText(
|
|
146
|
+
expect(screen.getByText('Disabled')).toBeInTheDocument();
|
|
214
147
|
});
|
|
215
|
-
it(
|
|
148
|
+
it('shows default retention as Inactive when not configured', ()=>{
|
|
216
149
|
mockUseGetBucketObjectLockConfiguration.mockReturnValue({
|
|
217
150
|
data: {
|
|
218
151
|
ObjectLockConfiguration: {
|
|
219
|
-
ObjectLockEnabled:
|
|
152
|
+
ObjectLockEnabled: 'Enabled'
|
|
220
153
|
}
|
|
221
154
|
},
|
|
222
|
-
status:
|
|
155
|
+
status: 'success'
|
|
223
156
|
});
|
|
224
157
|
renderBucketOverview();
|
|
225
|
-
expect(screen.getByText(
|
|
158
|
+
expect(screen.getByText('Inactive')).toBeInTheDocument();
|
|
226
159
|
});
|
|
227
|
-
it(
|
|
160
|
+
it('shows default retention with days in Governance mode', ()=>{
|
|
228
161
|
mockUseGetBucketObjectLockConfiguration.mockReturnValue({
|
|
229
162
|
data: {
|
|
230
163
|
ObjectLockConfiguration: {
|
|
231
|
-
ObjectLockEnabled:
|
|
164
|
+
ObjectLockEnabled: 'Enabled',
|
|
232
165
|
Rule: {
|
|
233
166
|
DefaultRetention: {
|
|
234
|
-
Mode:
|
|
167
|
+
Mode: 'GOVERNANCE',
|
|
235
168
|
Days: 30
|
|
236
169
|
}
|
|
237
170
|
}
|
|
238
171
|
}
|
|
239
172
|
},
|
|
240
|
-
status:
|
|
173
|
+
status: 'success'
|
|
241
174
|
});
|
|
242
175
|
renderBucketOverview();
|
|
243
|
-
expect(screen.getByText(
|
|
176
|
+
expect(screen.getByText('Governance - 30 days')).toBeInTheDocument();
|
|
244
177
|
});
|
|
245
|
-
it(
|
|
178
|
+
it('shows default retention with single day', ()=>{
|
|
246
179
|
mockUseGetBucketObjectLockConfiguration.mockReturnValue({
|
|
247
180
|
data: {
|
|
248
181
|
ObjectLockConfiguration: {
|
|
249
|
-
ObjectLockEnabled:
|
|
182
|
+
ObjectLockEnabled: 'Enabled',
|
|
250
183
|
Rule: {
|
|
251
184
|
DefaultRetention: {
|
|
252
|
-
Mode:
|
|
185
|
+
Mode: 'COMPLIANCE',
|
|
253
186
|
Days: 1
|
|
254
187
|
}
|
|
255
188
|
}
|
|
256
189
|
}
|
|
257
190
|
},
|
|
258
|
-
status:
|
|
191
|
+
status: 'success'
|
|
259
192
|
});
|
|
260
193
|
renderBucketOverview();
|
|
261
|
-
expect(screen.getByText(
|
|
194
|
+
expect(screen.getByText('Compliance - 1 day')).toBeInTheDocument();
|
|
262
195
|
});
|
|
263
|
-
it(
|
|
196
|
+
it('shows default retention with years in Compliance mode', ()=>{
|
|
264
197
|
mockUseGetBucketObjectLockConfiguration.mockReturnValue({
|
|
265
198
|
data: {
|
|
266
199
|
ObjectLockConfiguration: {
|
|
267
|
-
ObjectLockEnabled:
|
|
200
|
+
ObjectLockEnabled: 'Enabled',
|
|
268
201
|
Rule: {
|
|
269
202
|
DefaultRetention: {
|
|
270
|
-
Mode:
|
|
203
|
+
Mode: 'COMPLIANCE',
|
|
271
204
|
Years: 7
|
|
272
205
|
}
|
|
273
206
|
}
|
|
274
207
|
}
|
|
275
208
|
},
|
|
276
|
-
status:
|
|
209
|
+
status: 'success'
|
|
277
210
|
});
|
|
278
211
|
renderBucketOverview();
|
|
279
|
-
expect(screen.getByText(
|
|
212
|
+
expect(screen.getByText('Compliance - 7 years')).toBeInTheDocument();
|
|
280
213
|
});
|
|
281
|
-
it(
|
|
214
|
+
it('shows default retention with single year', ()=>{
|
|
282
215
|
mockUseGetBucketObjectLockConfiguration.mockReturnValue({
|
|
283
216
|
data: {
|
|
284
217
|
ObjectLockConfiguration: {
|
|
285
|
-
ObjectLockEnabled:
|
|
218
|
+
ObjectLockEnabled: 'Enabled',
|
|
286
219
|
Rule: {
|
|
287
220
|
DefaultRetention: {
|
|
288
|
-
Mode:
|
|
221
|
+
Mode: 'GOVERNANCE',
|
|
289
222
|
Years: 1
|
|
290
223
|
}
|
|
291
224
|
}
|
|
292
225
|
}
|
|
293
226
|
},
|
|
294
|
-
status:
|
|
227
|
+
status: 'success'
|
|
295
228
|
});
|
|
296
229
|
renderBucketOverview();
|
|
297
|
-
expect(screen.getByText(
|
|
230
|
+
expect(screen.getByText('Governance - 1 year')).toBeInTheDocument();
|
|
298
231
|
});
|
|
299
|
-
it(
|
|
232
|
+
it('shows edit retention button when object lock is enabled', ()=>{
|
|
300
233
|
mockUseGetBucketObjectLockConfiguration.mockReturnValue({
|
|
301
234
|
data: {
|
|
302
235
|
ObjectLockConfiguration: {
|
|
303
|
-
ObjectLockEnabled:
|
|
236
|
+
ObjectLockEnabled: 'Enabled',
|
|
304
237
|
Rule: {
|
|
305
238
|
DefaultRetention: {
|
|
306
|
-
Mode:
|
|
239
|
+
Mode: 'GOVERNANCE',
|
|
307
240
|
Days: 30
|
|
308
241
|
}
|
|
309
242
|
}
|
|
310
243
|
}
|
|
311
244
|
},
|
|
312
|
-
status:
|
|
245
|
+
status: 'success'
|
|
313
246
|
});
|
|
314
247
|
renderBucketOverview();
|
|
315
|
-
const editButton = screen.getByRole(
|
|
248
|
+
const editButton = screen.getByRole('button', {
|
|
316
249
|
name: /edit default retention/i
|
|
317
250
|
});
|
|
318
251
|
expect(editButton).toBeInTheDocument();
|
|
319
252
|
});
|
|
320
|
-
it(
|
|
253
|
+
it('does not show edit retention button when object lock is disabled', ()=>{
|
|
321
254
|
mockUseGetBucketObjectLockConfiguration.mockReturnValue({
|
|
322
255
|
data: {
|
|
323
256
|
ObjectLockConfiguration: {
|
|
324
|
-
ObjectLockEnabled:
|
|
257
|
+
ObjectLockEnabled: 'Disabled'
|
|
325
258
|
}
|
|
326
259
|
},
|
|
327
|
-
status:
|
|
260
|
+
status: 'success'
|
|
328
261
|
});
|
|
329
262
|
renderBucketOverview();
|
|
330
|
-
const editButton = screen.queryByRole(
|
|
263
|
+
const editButton = screen.queryByRole('button', {
|
|
331
264
|
name: /edit default retention/i
|
|
332
265
|
});
|
|
333
266
|
expect(editButton).not.toBeInTheDocument();
|
|
334
267
|
});
|
|
335
|
-
it(
|
|
268
|
+
it('displays bucket owner from ACL', ()=>{
|
|
336
269
|
mockUseGetBucketAcl.mockReturnValue({
|
|
337
270
|
data: {
|
|
338
271
|
Owner: {
|
|
339
|
-
DisplayName:
|
|
272
|
+
DisplayName: 'bucket-owner'
|
|
340
273
|
},
|
|
341
274
|
Grants: []
|
|
342
275
|
},
|
|
343
|
-
status:
|
|
276
|
+
status: 'success'
|
|
344
277
|
});
|
|
345
278
|
renderBucketOverview();
|
|
346
|
-
expect(screen.getByText(
|
|
279
|
+
expect(screen.getByText('bucket-owner')).toBeInTheDocument();
|
|
347
280
|
});
|
|
348
|
-
it(
|
|
281
|
+
it('shows ACL grantees count', ()=>{
|
|
349
282
|
mockUseGetBucketAcl.mockReturnValue({
|
|
350
283
|
data: {
|
|
351
284
|
Owner: {
|
|
352
|
-
DisplayName:
|
|
285
|
+
DisplayName: 'owner'
|
|
353
286
|
},
|
|
354
287
|
Grants: [
|
|
355
288
|
{
|
|
356
289
|
Grantee: {
|
|
357
|
-
DisplayName:
|
|
290
|
+
DisplayName: 'user1'
|
|
358
291
|
}
|
|
359
292
|
},
|
|
360
293
|
{
|
|
361
294
|
Grantee: {
|
|
362
|
-
DisplayName:
|
|
295
|
+
DisplayName: 'user2'
|
|
363
296
|
}
|
|
364
297
|
},
|
|
365
298
|
{
|
|
366
299
|
Grantee: {
|
|
367
|
-
DisplayName:
|
|
300
|
+
DisplayName: 'user3'
|
|
368
301
|
}
|
|
369
302
|
}
|
|
370
303
|
]
|
|
371
304
|
},
|
|
372
|
-
status:
|
|
305
|
+
status: 'success'
|
|
373
306
|
});
|
|
374
307
|
renderBucketOverview();
|
|
375
|
-
expect(screen.getByText(
|
|
308
|
+
expect(screen.getByText('3 Grantees')).toBeInTheDocument();
|
|
376
309
|
});
|
|
377
|
-
it(
|
|
310
|
+
it('shows single grantee without plural', ()=>{
|
|
378
311
|
mockUseGetBucketAcl.mockReturnValue({
|
|
379
312
|
data: {
|
|
380
313
|
Owner: {
|
|
381
|
-
DisplayName:
|
|
314
|
+
DisplayName: 'owner'
|
|
382
315
|
},
|
|
383
316
|
Grants: [
|
|
384
317
|
{
|
|
385
318
|
Grantee: {
|
|
386
|
-
DisplayName:
|
|
319
|
+
DisplayName: 'user1'
|
|
387
320
|
}
|
|
388
321
|
}
|
|
389
322
|
]
|
|
390
323
|
},
|
|
391
|
-
status:
|
|
324
|
+
status: 'success'
|
|
392
325
|
});
|
|
393
326
|
renderBucketOverview();
|
|
394
|
-
expect(screen.getByText(
|
|
327
|
+
expect(screen.getByText('1 Grantee')).toBeInTheDocument();
|
|
395
328
|
});
|
|
396
|
-
it(
|
|
329
|
+
it('shows CORS enabled when rules exist', ()=>{
|
|
397
330
|
mockUseGetBucketCors.mockReturnValue({
|
|
398
331
|
data: {
|
|
399
332
|
CORSRules: [
|
|
400
333
|
{
|
|
401
334
|
AllowedMethods: [
|
|
402
|
-
|
|
335
|
+
'GET'
|
|
403
336
|
],
|
|
404
337
|
AllowedOrigins: [
|
|
405
|
-
|
|
338
|
+
'*'
|
|
406
339
|
]
|
|
407
340
|
}
|
|
408
341
|
]
|
|
409
342
|
},
|
|
410
|
-
status:
|
|
343
|
+
status: 'success',
|
|
344
|
+
error: null
|
|
411
345
|
});
|
|
412
346
|
renderBucketOverview();
|
|
413
|
-
|
|
347
|
+
const yesElements = screen.getAllByText('Yes');
|
|
348
|
+
expect(yesElements.length).toBeGreaterThanOrEqual(1);
|
|
414
349
|
});
|
|
415
|
-
it(
|
|
350
|
+
it('shows CORS disabled when no rules exist', ()=>{
|
|
416
351
|
mockUseGetBucketCors.mockReturnValue({
|
|
417
352
|
data: {
|
|
418
353
|
CORSRules: []
|
|
419
354
|
},
|
|
420
|
-
status:
|
|
355
|
+
status: 'success',
|
|
356
|
+
error: null
|
|
421
357
|
});
|
|
422
358
|
renderBucketOverview();
|
|
423
|
-
const
|
|
424
|
-
expect(
|
|
359
|
+
const noElements = screen.getAllByText('No');
|
|
360
|
+
expect(noElements.length).toBeGreaterThanOrEqual(1);
|
|
425
361
|
});
|
|
426
|
-
it(
|
|
362
|
+
it('detects public bucket from ACL grants', ()=>{
|
|
427
363
|
mockUseGetBucketAcl.mockReturnValue({
|
|
428
364
|
data: {
|
|
429
365
|
Owner: {
|
|
430
|
-
DisplayName:
|
|
366
|
+
DisplayName: 'owner'
|
|
431
367
|
},
|
|
432
368
|
Grants: [
|
|
433
369
|
{
|
|
434
370
|
Grantee: {
|
|
435
|
-
URI:
|
|
371
|
+
URI: 'http://acs.amazonaws.com/groups/global/AllUsers'
|
|
436
372
|
},
|
|
437
|
-
Permission:
|
|
373
|
+
Permission: 'READ'
|
|
438
374
|
}
|
|
439
375
|
]
|
|
440
376
|
},
|
|
441
|
-
status:
|
|
377
|
+
status: 'success'
|
|
442
378
|
});
|
|
443
379
|
renderBucketOverview();
|
|
444
|
-
expect(screen.getByText(
|
|
380
|
+
expect(screen.getByText('Yes')).toBeInTheDocument();
|
|
445
381
|
});
|
|
446
|
-
it(
|
|
382
|
+
it('shows non-public bucket when no public grants', ()=>{
|
|
447
383
|
mockUseGetBucketAcl.mockReturnValue({
|
|
448
384
|
data: {
|
|
449
385
|
Owner: {
|
|
450
|
-
DisplayName:
|
|
386
|
+
DisplayName: 'owner'
|
|
451
387
|
},
|
|
452
388
|
Grants: [
|
|
453
389
|
{
|
|
454
390
|
Grantee: {
|
|
455
|
-
DisplayName:
|
|
391
|
+
DisplayName: 'private-user'
|
|
456
392
|
},
|
|
457
|
-
Permission:
|
|
393
|
+
Permission: 'READ'
|
|
458
394
|
}
|
|
459
395
|
]
|
|
460
396
|
},
|
|
461
|
-
status:
|
|
397
|
+
status: 'success'
|
|
462
398
|
});
|
|
463
399
|
renderBucketOverview();
|
|
464
|
-
const publicValues = screen.getAllByText(
|
|
400
|
+
const publicValues = screen.getAllByText('No');
|
|
465
401
|
expect(publicValues.length).toBeGreaterThan(0);
|
|
466
402
|
});
|
|
467
|
-
it(
|
|
403
|
+
it('shows loading states while data is being fetched', ()=>{
|
|
468
404
|
mockUseGetBucketVersioning.mockReturnValue({
|
|
469
405
|
data: void 0,
|
|
470
|
-
status:
|
|
406
|
+
status: 'pending'
|
|
471
407
|
});
|
|
472
408
|
mockUseGetBucketAcl.mockReturnValue({
|
|
473
409
|
data: void 0,
|
|
474
|
-
status:
|
|
410
|
+
status: 'pending'
|
|
475
411
|
});
|
|
476
412
|
renderBucketOverview();
|
|
477
413
|
const loaders = document.querySelectorAll('[data-testid="loader"], .loader, [class*="loader"]');
|
|
478
414
|
expect(loaders.length).toBeGreaterThan(0);
|
|
479
415
|
});
|
|
480
|
-
it(
|
|
416
|
+
it('shows error states when API calls fail', ()=>{
|
|
481
417
|
mockUseGetBucketVersioning.mockReturnValue({
|
|
482
418
|
data: void 0,
|
|
483
|
-
status:
|
|
419
|
+
status: 'error'
|
|
484
420
|
});
|
|
485
421
|
mockUseGetBucketLocation.mockReturnValue({
|
|
486
422
|
data: void 0,
|
|
487
|
-
status:
|
|
423
|
+
status: 'error'
|
|
488
424
|
});
|
|
489
425
|
renderBucketOverview();
|
|
490
|
-
const errorElements = screen.getAllByText(
|
|
426
|
+
const errorElements = screen.getAllByText('Error');
|
|
491
427
|
expect(errorElements.length).toBeGreaterThan(0);
|
|
492
428
|
});
|
|
493
|
-
it(
|
|
429
|
+
it('handles empty bucket button click', ()=>{
|
|
494
430
|
const onEmptyBucket = jest.fn();
|
|
495
431
|
renderBucketOverview({
|
|
496
432
|
onEmptyBucket,
|
|
497
433
|
isEmptyBucketDisabled: false
|
|
498
434
|
});
|
|
499
|
-
const emptyButton = screen.getByRole(
|
|
435
|
+
const emptyButton = screen.getByRole('button', {
|
|
500
436
|
name: /empty bucket/i
|
|
501
437
|
});
|
|
502
438
|
fireEvent.click(emptyButton);
|
|
503
439
|
expect(onEmptyBucket).toHaveBeenCalled();
|
|
504
440
|
});
|
|
505
|
-
it(
|
|
441
|
+
it('handles delete bucket button click', ()=>{
|
|
506
442
|
const onDeleteBucket = jest.fn();
|
|
507
443
|
renderBucketOverview({
|
|
508
444
|
onDeleteBucket
|
|
509
445
|
});
|
|
510
|
-
const deleteButton = screen.getByRole(
|
|
446
|
+
const deleteButton = screen.getByRole('button', {
|
|
511
447
|
name: /delete bucket/i
|
|
512
448
|
});
|
|
513
449
|
fireEvent.click(deleteButton);
|
|
514
450
|
expect(onDeleteBucket).toHaveBeenCalled();
|
|
515
451
|
});
|
|
516
|
-
it(
|
|
452
|
+
it('disables empty button when specified', ()=>{
|
|
517
453
|
renderBucketOverview({
|
|
518
454
|
isEmptyBucketDisabled: true
|
|
519
455
|
});
|
|
520
|
-
const emptyButton = screen.getByRole(
|
|
456
|
+
const emptyButton = screen.getByRole('button', {
|
|
521
457
|
name: /empty bucket/i
|
|
522
458
|
});
|
|
523
459
|
expect(emptyButton).toBeDisabled();
|
|
524
460
|
});
|
|
525
|
-
it(
|
|
461
|
+
it('disables delete button when specified', ()=>{
|
|
526
462
|
renderBucketOverview({
|
|
527
463
|
isDeleteBucketDisabled: true
|
|
528
464
|
});
|
|
529
|
-
const deleteButton = screen.getByRole(
|
|
465
|
+
const deleteButton = screen.getByRole('button', {
|
|
530
466
|
name: /delete bucket/i
|
|
531
467
|
});
|
|
532
468
|
expect(deleteButton).toBeDisabled();
|
|
533
469
|
});
|
|
534
|
-
it(
|
|
470
|
+
it('renders custom empty button when provided', ()=>{
|
|
535
471
|
const renderEmptyButton = jest.fn(()=>/*#__PURE__*/ jsx("button", {
|
|
536
472
|
children: "Custom Empty Button"
|
|
537
473
|
}));
|
|
538
474
|
renderBucketOverview({
|
|
539
475
|
renderEmptyButton
|
|
540
476
|
});
|
|
541
|
-
expect(screen.getByText(
|
|
542
|
-
expect(renderEmptyButton).toHaveBeenCalledWith(
|
|
477
|
+
expect(screen.getByText('Custom Empty Button')).toBeInTheDocument();
|
|
478
|
+
expect(renderEmptyButton).toHaveBeenCalledWith('test-bucket');
|
|
543
479
|
});
|
|
544
|
-
it(
|
|
480
|
+
it('renders custom delete button when provided', ()=>{
|
|
545
481
|
const renderDeleteButton = jest.fn(()=>/*#__PURE__*/ jsx("button", {
|
|
546
482
|
children: "Custom Delete Button"
|
|
547
483
|
}));
|
|
548
484
|
renderBucketOverview({
|
|
549
485
|
renderDeleteButton
|
|
550
486
|
});
|
|
551
|
-
expect(screen.getByText(
|
|
552
|
-
expect(renderDeleteButton).toHaveBeenCalledWith(
|
|
487
|
+
expect(screen.getByText('Custom Delete Button')).toBeInTheDocument();
|
|
488
|
+
expect(renderDeleteButton).toHaveBeenCalledWith('test-bucket');
|
|
553
489
|
});
|
|
554
|
-
it(
|
|
490
|
+
it('works when no callbacks are provided', ()=>{
|
|
555
491
|
expect(()=>{
|
|
556
492
|
renderBucketOverview();
|
|
557
|
-
const emptyButton = screen.getByRole(
|
|
493
|
+
const emptyButton = screen.getByRole('button', {
|
|
558
494
|
name: /empty bucket/i
|
|
559
495
|
});
|
|
560
|
-
const deleteButton = screen.getByRole(
|
|
496
|
+
const deleteButton = screen.getByRole('button', {
|
|
561
497
|
name: /delete bucket/i
|
|
562
498
|
});
|
|
563
499
|
fireEvent.click(emptyButton);
|
|
564
500
|
fireEvent.click(deleteButton);
|
|
565
501
|
}).not.toThrow();
|
|
566
502
|
});
|
|
567
|
-
it(
|
|
503
|
+
it('handles missing ACL data gracefully', ()=>{
|
|
568
504
|
mockUseGetBucketAcl.mockReturnValue({
|
|
569
505
|
data: void 0,
|
|
570
|
-
status:
|
|
506
|
+
status: 'success'
|
|
571
507
|
});
|
|
572
508
|
renderBucketOverview();
|
|
573
|
-
const naElements = screen.getAllByText(
|
|
509
|
+
const naElements = screen.getAllByText('N/A');
|
|
574
510
|
expect(naElements.length).toBeGreaterThan(0);
|
|
575
511
|
});
|
|
576
|
-
it(
|
|
512
|
+
it('handles missing versioning data gracefully', ()=>{
|
|
577
513
|
mockUseGetBucketVersioning.mockReturnValue({
|
|
578
514
|
data: void 0,
|
|
579
|
-
status:
|
|
515
|
+
status: 'success'
|
|
580
516
|
});
|
|
581
517
|
renderBucketOverview();
|
|
582
|
-
expect(screen.getByText(
|
|
518
|
+
expect(screen.getByText('Inactive')).toBeInTheDocument();
|
|
583
519
|
});
|
|
584
|
-
it(
|
|
520
|
+
it('handles CORS error state', ()=>{
|
|
585
521
|
mockUseGetBucketCors.mockReturnValue({
|
|
586
522
|
data: void 0,
|
|
587
|
-
status:
|
|
523
|
+
status: 'error'
|
|
588
524
|
});
|
|
589
525
|
renderBucketOverview();
|
|
590
|
-
const corsValues = screen.getAllByText(
|
|
526
|
+
const corsValues = screen.getAllByText('No');
|
|
591
527
|
expect(corsValues.length).toBeGreaterThan(0);
|
|
592
528
|
});
|
|
593
|
-
it(
|
|
594
|
-
const notFoundError = new Error(
|
|
595
|
-
notFoundError.name =
|
|
529
|
+
it('handles object lock error state (404 - not configured)', ()=>{
|
|
530
|
+
const notFoundError = new Error('Object Lock configuration does not exist');
|
|
531
|
+
notFoundError.name = 'NoSuchBucketObjectLockConfiguration';
|
|
596
532
|
notFoundError.$metadata = {
|
|
597
533
|
httpStatusCode: 404
|
|
598
534
|
};
|
|
599
535
|
mockUseGetBucketObjectLockConfiguration.mockReturnValue({
|
|
600
536
|
data: void 0,
|
|
601
|
-
status:
|
|
537
|
+
status: 'error',
|
|
602
538
|
error: notFoundError
|
|
603
539
|
});
|
|
604
540
|
renderBucketOverview();
|
|
605
|
-
expect(screen.getByText(
|
|
541
|
+
expect(screen.getByText('Disabled')).toBeInTheDocument();
|
|
606
542
|
});
|
|
607
|
-
it(
|
|
608
|
-
const accessDeniedError = new Error(
|
|
609
|
-
accessDeniedError.name =
|
|
543
|
+
it('handles object lock real error state (non-404)', ()=>{
|
|
544
|
+
const accessDeniedError = new Error('Access Denied');
|
|
545
|
+
accessDeniedError.name = 'AccessDenied';
|
|
610
546
|
accessDeniedError.$metadata = {
|
|
611
547
|
httpStatusCode: 403
|
|
612
548
|
};
|
|
613
549
|
mockUseGetBucketObjectLockConfiguration.mockReturnValue({
|
|
614
550
|
data: void 0,
|
|
615
|
-
status:
|
|
551
|
+
status: 'error',
|
|
616
552
|
error: accessDeniedError
|
|
617
553
|
});
|
|
618
554
|
renderBucketOverview();
|
|
619
|
-
expect(screen.getByText(
|
|
555
|
+
expect(screen.getByText('Error')).toBeInTheDocument();
|
|
620
556
|
});
|
|
621
|
-
describe(
|
|
557
|
+
describe('Bucket Policy', ()=>{
|
|
622
558
|
it("shows 'Configured' when policy exists", ()=>{
|
|
623
559
|
mockUseGetBucketPolicy.mockReturnValue({
|
|
624
560
|
data: {
|
|
625
561
|
Policy: '{"Version":"2012-10-17","Statement":[]}'
|
|
626
562
|
},
|
|
627
563
|
error: null,
|
|
628
|
-
status:
|
|
564
|
+
status: 'success'
|
|
629
565
|
});
|
|
630
566
|
renderBucketOverview();
|
|
631
|
-
expect(screen.getByText(
|
|
567
|
+
expect(screen.getByText('Configured')).toBeInTheDocument();
|
|
632
568
|
});
|
|
633
569
|
it("shows 'Not configured' when no policy exists", ()=>{
|
|
634
570
|
mockUseGetBucketPolicy.mockReturnValue({
|
|
635
571
|
data: void 0,
|
|
636
572
|
error: null,
|
|
637
|
-
status:
|
|
573
|
+
status: 'success'
|
|
638
574
|
});
|
|
639
575
|
renderBucketOverview();
|
|
640
|
-
|
|
576
|
+
const notConfiguredElements = screen.getAllByText('Not configured');
|
|
577
|
+
expect(notConfiguredElements.length).toBeGreaterThanOrEqual(1);
|
|
641
578
|
});
|
|
642
579
|
it("shows 'Error' when policy fetch fails with non-NoSuchBucketPolicy error", ()=>{
|
|
643
|
-
const genericError = new Error(
|
|
580
|
+
const genericError = new Error('Network error');
|
|
644
581
|
mockUseGetBucketPolicy.mockReturnValue({
|
|
645
582
|
data: void 0,
|
|
646
583
|
error: genericError,
|
|
647
|
-
status:
|
|
584
|
+
status: 'error'
|
|
648
585
|
});
|
|
649
586
|
renderBucketOverview();
|
|
650
|
-
const errorElements = screen.getAllByText(
|
|
587
|
+
const errorElements = screen.getAllByText('Error');
|
|
651
588
|
expect(errorElements.length).toBeGreaterThan(0);
|
|
652
589
|
});
|
|
653
590
|
it("shows 'Not configured' when policy does not exist (NoSuchBucketPolicy)", ()=>{
|
|
654
|
-
const noSuchPolicyError = new Error(
|
|
655
|
-
noSuchPolicyError.name =
|
|
591
|
+
const noSuchPolicyError = new Error('Policy does not exist');
|
|
592
|
+
noSuchPolicyError.name = 'NoSuchBucketPolicy';
|
|
656
593
|
mockUseGetBucketPolicy.mockReturnValue({
|
|
657
594
|
data: void 0,
|
|
658
595
|
error: noSuchPolicyError,
|
|
659
|
-
status:
|
|
596
|
+
status: 'error'
|
|
660
597
|
});
|
|
661
598
|
renderBucketOverview();
|
|
662
|
-
|
|
599
|
+
const notConfiguredElements = screen.getAllByText('Not configured');
|
|
600
|
+
expect(notConfiguredElements.length).toBeGreaterThanOrEqual(1);
|
|
663
601
|
});
|
|
664
|
-
it(
|
|
602
|
+
it('calls onEditPolicy when edit button is clicked', ()=>{
|
|
665
603
|
const onEditPolicy = jest.fn();
|
|
666
604
|
mockUseGetBucketPolicy.mockReturnValue({
|
|
667
605
|
data: {
|
|
668
606
|
Policy: '{"Version":"2012-10-17","Statement":[]}'
|
|
669
607
|
},
|
|
670
608
|
error: null,
|
|
671
|
-
status:
|
|
609
|
+
status: 'success'
|
|
672
610
|
});
|
|
673
611
|
renderBucketOverview({
|
|
674
612
|
onEditPolicy
|
|
675
613
|
});
|
|
676
|
-
|
|
677
|
-
name:
|
|
678
|
-
});
|
|
679
|
-
|
|
680
|
-
|
|
614
|
+
fireEvent.click(screen.getByRole('button', {
|
|
615
|
+
name: 'Edit bucket policy'
|
|
616
|
+
}));
|
|
617
|
+
expect(onEditPolicy).toHaveBeenCalledWith('test-bucket');
|
|
618
|
+
});
|
|
619
|
+
});
|
|
620
|
+
describe('Extra Sections', ()=>{
|
|
621
|
+
it('renders extra sections between General and Data Protection', ()=>{
|
|
622
|
+
const Wrapper = createTestWrapper();
|
|
623
|
+
const extraSections = [
|
|
624
|
+
{
|
|
625
|
+
id: 'custom-section',
|
|
626
|
+
title: 'Custom Section',
|
|
627
|
+
render: ()=>/*#__PURE__*/ jsx("div", {
|
|
628
|
+
children: "Custom content"
|
|
629
|
+
})
|
|
630
|
+
}
|
|
631
|
+
];
|
|
632
|
+
render(/*#__PURE__*/ jsx(MemoryRouter, {
|
|
633
|
+
children: /*#__PURE__*/ jsx(Wrapper, {
|
|
634
|
+
children: /*#__PURE__*/ jsxs(BucketOverview, {
|
|
635
|
+
bucketName: "test-bucket",
|
|
636
|
+
children: [
|
|
637
|
+
/*#__PURE__*/ jsx(BucketOverview.Actions, {}),
|
|
638
|
+
/*#__PURE__*/ jsxs(BucketOverview.Sections, {
|
|
639
|
+
children: [
|
|
640
|
+
/*#__PURE__*/ jsx(BucketOverview.GeneralSection, {}),
|
|
641
|
+
extraSections.map((section)=>/*#__PURE__*/ jsx(BucketOverview.Section, {
|
|
642
|
+
title: section.title,
|
|
643
|
+
children: section.render()
|
|
644
|
+
}, section.id)),
|
|
645
|
+
/*#__PURE__*/ jsx(BucketOverview.DataProtectionSection, {}),
|
|
646
|
+
/*#__PURE__*/ jsx(BucketOverview.PermissionsSection, {})
|
|
647
|
+
]
|
|
648
|
+
})
|
|
649
|
+
]
|
|
650
|
+
})
|
|
651
|
+
})
|
|
652
|
+
}));
|
|
653
|
+
expect(screen.getByText('Custom Section')).toBeInTheDocument();
|
|
654
|
+
expect(screen.getByText('Custom content')).toBeInTheDocument();
|
|
655
|
+
});
|
|
656
|
+
it('extra sections have access to BucketOverview context', ()=>{
|
|
657
|
+
const CustomSectionContent = ()=>{
|
|
658
|
+
const { bucketName } = useBucketOverviewContext();
|
|
659
|
+
return /*#__PURE__*/ jsxs("div", {
|
|
660
|
+
children: [
|
|
661
|
+
"Bucket name from context: ",
|
|
662
|
+
bucketName
|
|
663
|
+
]
|
|
664
|
+
});
|
|
665
|
+
};
|
|
666
|
+
const Wrapper = createTestWrapper();
|
|
667
|
+
const extraSections = [
|
|
668
|
+
{
|
|
669
|
+
id: 'context-section',
|
|
670
|
+
title: 'Context Test',
|
|
671
|
+
render: ()=>/*#__PURE__*/ jsx(CustomSectionContent, {})
|
|
672
|
+
}
|
|
673
|
+
];
|
|
674
|
+
render(/*#__PURE__*/ jsx(MemoryRouter, {
|
|
675
|
+
children: /*#__PURE__*/ jsx(Wrapper, {
|
|
676
|
+
children: /*#__PURE__*/ jsxs(BucketOverview, {
|
|
677
|
+
bucketName: "my-custom-bucket",
|
|
678
|
+
children: [
|
|
679
|
+
/*#__PURE__*/ jsx(BucketOverview.Actions, {}),
|
|
680
|
+
/*#__PURE__*/ jsxs(BucketOverview.Sections, {
|
|
681
|
+
children: [
|
|
682
|
+
/*#__PURE__*/ jsx(BucketOverview.GeneralSection, {}),
|
|
683
|
+
extraSections.map((section)=>/*#__PURE__*/ jsx(BucketOverview.Section, {
|
|
684
|
+
title: section.title,
|
|
685
|
+
children: section.render()
|
|
686
|
+
}, section.id)),
|
|
687
|
+
/*#__PURE__*/ jsx(BucketOverview.DataProtectionSection, {}),
|
|
688
|
+
/*#__PURE__*/ jsx(BucketOverview.PermissionsSection, {})
|
|
689
|
+
]
|
|
690
|
+
})
|
|
691
|
+
]
|
|
692
|
+
})
|
|
693
|
+
})
|
|
694
|
+
}));
|
|
695
|
+
expect(screen.getByText('Bucket name from context: my-custom-bucket')).toBeInTheDocument();
|
|
681
696
|
});
|
|
682
697
|
});
|
|
683
|
-
describe(
|
|
684
|
-
it(
|
|
698
|
+
describe('Field Overrides', ()=>{
|
|
699
|
+
it('renders slot-based field override', ()=>{
|
|
685
700
|
const Wrapper = createTestWrapper();
|
|
686
|
-
render(/*#__PURE__*/ jsx(
|
|
701
|
+
render(/*#__PURE__*/ jsx(MemoryRouter, {
|
|
687
702
|
children: /*#__PURE__*/ jsx(Wrapper, {
|
|
688
703
|
children: /*#__PURE__*/ jsxs(BucketOverview, {
|
|
689
704
|
bucketName: "test-bucket",
|
|
@@ -704,12 +719,12 @@ describe("BucketOverview", ()=>{
|
|
|
704
719
|
})
|
|
705
720
|
})
|
|
706
721
|
}));
|
|
707
|
-
expect(screen.getByText(
|
|
708
|
-
expect(screen.getByText(
|
|
722
|
+
expect(screen.getByText('Custom Location Content')).toBeInTheDocument();
|
|
723
|
+
expect(screen.getByText('test-bucket')).toBeInTheDocument();
|
|
709
724
|
});
|
|
710
|
-
it(
|
|
725
|
+
it('renders render prop field override', ()=>{
|
|
711
726
|
const Wrapper = createTestWrapper();
|
|
712
|
-
render(/*#__PURE__*/ jsx(
|
|
727
|
+
render(/*#__PURE__*/ jsx(MemoryRouter, {
|
|
713
728
|
children: /*#__PURE__*/ jsx(Wrapper, {
|
|
714
729
|
children: /*#__PURE__*/ jsxs(BucketOverview, {
|
|
715
730
|
bucketName: "test-bucket",
|
|
@@ -733,14 +748,14 @@ describe("BucketOverview", ()=>{
|
|
|
733
748
|
})
|
|
734
749
|
})
|
|
735
750
|
}));
|
|
736
|
-
expect(screen.getByText(
|
|
751
|
+
expect(screen.getByText('Custom Versioning for test-bucket')).toBeInTheDocument();
|
|
737
752
|
});
|
|
738
|
-
it(
|
|
753
|
+
it('prioritizes slot prop over render prop over default', ()=>{
|
|
739
754
|
const Wrapper = createTestWrapper();
|
|
740
755
|
const renderName = jest.fn(()=>/*#__PURE__*/ jsx("span", {
|
|
741
756
|
children: "Render Prop Name"
|
|
742
757
|
}));
|
|
743
|
-
render(/*#__PURE__*/ jsx(
|
|
758
|
+
render(/*#__PURE__*/ jsx(MemoryRouter, {
|
|
744
759
|
children: /*#__PURE__*/ jsx(Wrapper, {
|
|
745
760
|
children: /*#__PURE__*/ jsxs(BucketOverview, {
|
|
746
761
|
bucketName: "test-bucket",
|
|
@@ -762,7 +777,7 @@ describe("BucketOverview", ()=>{
|
|
|
762
777
|
})
|
|
763
778
|
})
|
|
764
779
|
}));
|
|
765
|
-
expect(screen.getByText(
|
|
780
|
+
expect(screen.getByText('Slot Prop Name')).toBeInTheDocument();
|
|
766
781
|
expect(renderName).not.toHaveBeenCalled();
|
|
767
782
|
});
|
|
768
783
|
});
|