@scality/data-browser-library 1.0.0-preview.8 → 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.d.ts +1 -0
- package/dist/components/__tests__/BucketCreate.test.js +574 -0
- 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 +14 -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.js +495 -81
- 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 +484 -179
- package/dist/components/__tests__/BucketPolicyPage.test.js +151 -99
- package/dist/components/__tests__/BucketReplicationFormPage.test.d.ts +16 -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.js +56 -56
- package/dist/components/__tests__/DeleteBucketButton.test.js +64 -64
- 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.js +64 -64
- 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.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 +50 -0
- package/dist/components/buckets/BucketCreate.js +279 -0
- package/dist/components/buckets/BucketDetails.d.ts +42 -0
- package/dist/components/buckets/BucketDetails.js +256 -40
- package/dist/components/buckets/BucketLifecycleFormPage.d.ts +15 -0
- package/dist/components/buckets/BucketLifecycleFormPage.js +1086 -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 +6 -4
- package/dist/components/buckets/BucketList.js +161 -94
- package/dist/components/buckets/BucketLocation.js +4 -4
- package/dist/components/buckets/BucketOverview.d.ts +86 -5
- package/dist/components/buckets/BucketOverview.js +481 -192
- package/dist/components/buckets/BucketPage.js +44 -22
- package/dist/components/buckets/BucketPolicyPage.js +155 -127
- package/dist/components/buckets/BucketReplicationFormPage.d.ts +1 -0
- package/dist/components/buckets/BucketReplicationFormPage.js +835 -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 +76 -0
- package/dist/components/buckets/DeleteBucketButton.js +8 -8
- 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/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 -13
- package/dist/components/index.js +20 -6
- 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.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 +159 -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.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.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 +48 -0
- package/dist/components/ui/DeleteObjectModalContent.d.ts +1 -1
- package/dist/components/ui/DeleteObjectModalContent.js +12 -12
- 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 +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 +14 -49
- package/dist/config/factory.js +23 -68
- 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.d.ts +1 -0
- package/dist/hooks/__tests__/useISVBucketDetection.test.js +188 -0
- 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 +95 -52
- 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 +29 -3
- package/dist/hooks/index.d.ts +19 -8
- package/dist/hooks/index.js +16 -5
- 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 +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/useFeatures.d.ts +7 -0
- package/dist/hooks/useFeatures.js +8 -0
- package/dist/hooks/useISVBucketDetection.d.ts +15 -0
- package/dist/hooks/useISVBucketDetection.js +27 -0
- 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/hooks/useTableRowSelection.d.ts +9 -0
- package/dist/hooks/useTableRowSelection.js +45 -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 +170 -36
- package/dist/test/testUtils.js +229 -116
- package/dist/test/utils/errorHandling.test.js +146 -108
- 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 +22 -0
- package/dist/utils/constants.js +19 -0
- 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 +12 -3
- package/dist/utils/errorHandling.js +12 -7
- package/dist/utils/hooks.js +8 -8
- package/dist/utils/index.d.ts +5 -2
- package/dist/utils/index.js +5 -1
- 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 +53 -0
- package/dist/utils/s3RuleUtils.js +101 -0
- 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
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { renderHook } from "@testing-library/react";
|
|
2
|
+
import { createTestWrapper } from "../../test/testUtils.js";
|
|
3
|
+
import { BUCKET_TAG_APPLICATION, BUCKET_TAG_VEEAM_APPLICATION, COMMVAULT_APPLICATION, VEEAM_BACKUP_REPLICATION, VEEAM_OFFICE_365, VEEAM_OFFICE_365_V8, VEEAM_VBO_APPLICATION } from "../../utils/constants.js";
|
|
4
|
+
import { useGetBucketTagging } from "../bucketConfiguration.js";
|
|
5
|
+
import { useFeatures } from "../useFeatures.js";
|
|
6
|
+
import { useISVBucketStatus } from "../useISVBucketDetection.js";
|
|
7
|
+
jest.mock('../bucketConfiguration');
|
|
8
|
+
jest.mock('../useFeatures');
|
|
9
|
+
const mockUseGetBucketTagging = useGetBucketTagging;
|
|
10
|
+
const mockUseFeatures = useFeatures;
|
|
11
|
+
describe('useISVBucketStatus', ()=>{
|
|
12
|
+
beforeEach(()=>{
|
|
13
|
+
jest.clearAllMocks();
|
|
14
|
+
mockUseFeatures.mockReturnValue(true);
|
|
15
|
+
});
|
|
16
|
+
it('should return false for all flags when ISV feature is disabled', ()=>{
|
|
17
|
+
mockUseFeatures.mockReturnValue(false);
|
|
18
|
+
mockUseGetBucketTagging.mockReturnValue({
|
|
19
|
+
data: void 0,
|
|
20
|
+
status: 'success'
|
|
21
|
+
});
|
|
22
|
+
const { result } = renderHook(()=>useISVBucketStatus('test-bucket'), {
|
|
23
|
+
wrapper: createTestWrapper()
|
|
24
|
+
});
|
|
25
|
+
expect(result.current.isVeeamBucket).toBe(false);
|
|
26
|
+
expect(result.current.isCommvaultBucket).toBe(false);
|
|
27
|
+
expect(result.current.isISVManaged).toBe(false);
|
|
28
|
+
expect(result.current.isvApplication).toBeUndefined();
|
|
29
|
+
expect(result.current.isLoading).toBe(false);
|
|
30
|
+
});
|
|
31
|
+
it('should detect Veeam Backup & Replication bucket', ()=>{
|
|
32
|
+
mockUseGetBucketTagging.mockReturnValue({
|
|
33
|
+
data: {
|
|
34
|
+
TagSet: [
|
|
35
|
+
{
|
|
36
|
+
Key: BUCKET_TAG_VEEAM_APPLICATION,
|
|
37
|
+
Value: VEEAM_BACKUP_REPLICATION
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
status: 'success'
|
|
42
|
+
});
|
|
43
|
+
const { result } = renderHook(()=>useISVBucketStatus('test-bucket'), {
|
|
44
|
+
wrapper: createTestWrapper()
|
|
45
|
+
});
|
|
46
|
+
expect(result.current.isVeeamBucket).toBe(true);
|
|
47
|
+
expect(result.current.isCommvaultBucket).toBe(false);
|
|
48
|
+
expect(result.current.isISVManaged).toBe(true);
|
|
49
|
+
expect(result.current.isvApplication).toBe('Veeam');
|
|
50
|
+
});
|
|
51
|
+
it('should detect Veeam Office 365 v6/v7 bucket', ()=>{
|
|
52
|
+
mockUseGetBucketTagging.mockReturnValue({
|
|
53
|
+
data: {
|
|
54
|
+
TagSet: [
|
|
55
|
+
{
|
|
56
|
+
Key: BUCKET_TAG_VEEAM_APPLICATION,
|
|
57
|
+
Value: VEEAM_OFFICE_365
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
status: 'success'
|
|
62
|
+
});
|
|
63
|
+
const { result } = renderHook(()=>useISVBucketStatus('test-bucket'), {
|
|
64
|
+
wrapper: createTestWrapper()
|
|
65
|
+
});
|
|
66
|
+
expect(result.current.isVeeamBucket).toBe(true);
|
|
67
|
+
expect(result.current.isISVManaged).toBe(true);
|
|
68
|
+
expect(result.current.isvApplication).toBe('Veeam');
|
|
69
|
+
});
|
|
70
|
+
it('should detect Veeam Office 365 v8+ bucket', ()=>{
|
|
71
|
+
mockUseGetBucketTagging.mockReturnValue({
|
|
72
|
+
data: {
|
|
73
|
+
TagSet: [
|
|
74
|
+
{
|
|
75
|
+
Key: BUCKET_TAG_VEEAM_APPLICATION,
|
|
76
|
+
Value: VEEAM_OFFICE_365_V8
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
},
|
|
80
|
+
status: 'success'
|
|
81
|
+
});
|
|
82
|
+
const { result } = renderHook(()=>useISVBucketStatus('test-bucket'), {
|
|
83
|
+
wrapper: createTestWrapper()
|
|
84
|
+
});
|
|
85
|
+
expect(result.current.isVeeamBucket).toBe(true);
|
|
86
|
+
expect(result.current.isISVManaged).toBe(true);
|
|
87
|
+
expect(result.current.isvApplication).toBe('Veeam');
|
|
88
|
+
});
|
|
89
|
+
it('should detect ISV bucket tagged as Veeam Backup & Replication', ()=>{
|
|
90
|
+
mockUseGetBucketTagging.mockReturnValue({
|
|
91
|
+
data: {
|
|
92
|
+
TagSet: [
|
|
93
|
+
{
|
|
94
|
+
Key: BUCKET_TAG_APPLICATION,
|
|
95
|
+
Value: VEEAM_BACKUP_REPLICATION
|
|
96
|
+
}
|
|
97
|
+
]
|
|
98
|
+
},
|
|
99
|
+
status: 'success'
|
|
100
|
+
});
|
|
101
|
+
const { result } = renderHook(()=>useISVBucketStatus('test-bucket'), {
|
|
102
|
+
wrapper: createTestWrapper()
|
|
103
|
+
});
|
|
104
|
+
expect(result.current.isVeeamBucket).toBe(true);
|
|
105
|
+
expect(result.current.isISVManaged).toBe(true);
|
|
106
|
+
expect(result.current.isvApplication).toBe('Veeam');
|
|
107
|
+
});
|
|
108
|
+
it('should detect ISV bucket tagged as Veeam VBO', ()=>{
|
|
109
|
+
mockUseGetBucketTagging.mockReturnValue({
|
|
110
|
+
data: {
|
|
111
|
+
TagSet: [
|
|
112
|
+
{
|
|
113
|
+
Key: BUCKET_TAG_APPLICATION,
|
|
114
|
+
Value: VEEAM_VBO_APPLICATION
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
status: 'success'
|
|
119
|
+
});
|
|
120
|
+
const { result } = renderHook(()=>useISVBucketStatus('test-bucket'), {
|
|
121
|
+
wrapper: createTestWrapper()
|
|
122
|
+
});
|
|
123
|
+
expect(result.current.isVeeamBucket).toBe(true);
|
|
124
|
+
expect(result.current.isISVManaged).toBe(true);
|
|
125
|
+
expect(result.current.isvApplication).toBe('Veeam');
|
|
126
|
+
});
|
|
127
|
+
it('should detect Commvault bucket', ()=>{
|
|
128
|
+
mockUseGetBucketTagging.mockReturnValue({
|
|
129
|
+
data: {
|
|
130
|
+
TagSet: [
|
|
131
|
+
{
|
|
132
|
+
Key: BUCKET_TAG_APPLICATION,
|
|
133
|
+
Value: COMMVAULT_APPLICATION
|
|
134
|
+
}
|
|
135
|
+
]
|
|
136
|
+
},
|
|
137
|
+
status: 'success'
|
|
138
|
+
});
|
|
139
|
+
const { result } = renderHook(()=>useISVBucketStatus('test-bucket'), {
|
|
140
|
+
wrapper: createTestWrapper()
|
|
141
|
+
});
|
|
142
|
+
expect(result.current.isVeeamBucket).toBe(false);
|
|
143
|
+
expect(result.current.isCommvaultBucket).toBe(true);
|
|
144
|
+
expect(result.current.isISVManaged).toBe(true);
|
|
145
|
+
expect(result.current.isvApplication).toBe('Commvault');
|
|
146
|
+
});
|
|
147
|
+
it('should return false for non-ISV bucket', ()=>{
|
|
148
|
+
mockUseGetBucketTagging.mockReturnValue({
|
|
149
|
+
data: {
|
|
150
|
+
TagSet: [
|
|
151
|
+
{
|
|
152
|
+
Key: 'SomeOtherTag',
|
|
153
|
+
Value: 'SomeValue'
|
|
154
|
+
}
|
|
155
|
+
]
|
|
156
|
+
},
|
|
157
|
+
status: 'success'
|
|
158
|
+
});
|
|
159
|
+
const { result } = renderHook(()=>useISVBucketStatus('test-bucket'), {
|
|
160
|
+
wrapper: createTestWrapper()
|
|
161
|
+
});
|
|
162
|
+
expect(result.current.isVeeamBucket).toBe(false);
|
|
163
|
+
expect(result.current.isCommvaultBucket).toBe(false);
|
|
164
|
+
expect(result.current.isISVManaged).toBe(false);
|
|
165
|
+
expect(result.current.isvApplication).toBeUndefined();
|
|
166
|
+
});
|
|
167
|
+
it('should return loading state when fetching bucket tags', ()=>{
|
|
168
|
+
mockUseGetBucketTagging.mockReturnValue({
|
|
169
|
+
data: void 0,
|
|
170
|
+
status: 'pending'
|
|
171
|
+
});
|
|
172
|
+
const { result } = renderHook(()=>useISVBucketStatus('test-bucket'), {
|
|
173
|
+
wrapper: createTestWrapper()
|
|
174
|
+
});
|
|
175
|
+
expect(result.current.isLoading).toBe(true);
|
|
176
|
+
});
|
|
177
|
+
it('should not be loading when ISV feature is disabled', ()=>{
|
|
178
|
+
mockUseFeatures.mockReturnValue(false);
|
|
179
|
+
mockUseGetBucketTagging.mockReturnValue({
|
|
180
|
+
data: void 0,
|
|
181
|
+
status: 'pending'
|
|
182
|
+
});
|
|
183
|
+
const { result } = renderHook(()=>useISVBucketStatus('test-bucket'), {
|
|
184
|
+
wrapper: createTestWrapper()
|
|
185
|
+
});
|
|
186
|
+
expect(result.current.isLoading).toBe(false);
|
|
187
|
+
});
|
|
188
|
+
});
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { useIsBucketEmpty } from "../useIsBucketEmpty.js";
|
|
2
|
-
import { useListObjects } from "../objectOperations.js";
|
|
3
1
|
import { renderHookWithWrapper } from "../../test/testUtils.js";
|
|
4
|
-
|
|
2
|
+
import { useListObjects } from "../objectOperations.js";
|
|
3
|
+
import { useIsBucketEmpty } from "../useIsBucketEmpty.js";
|
|
4
|
+
jest.mock('../objectOperations');
|
|
5
5
|
const mockUseListObjects = jest.mocked(useListObjects);
|
|
6
|
-
describe(
|
|
6
|
+
describe('useIsBucketEmpty', ()=>{
|
|
7
7
|
beforeEach(()=>{
|
|
8
8
|
jest.clearAllMocks();
|
|
9
9
|
});
|
|
10
|
-
it(
|
|
10
|
+
it('returns loading state when checking bucket', ()=>{
|
|
11
11
|
mockUseListObjects.mockReturnValue({
|
|
12
12
|
data: void 0,
|
|
13
|
-
status:
|
|
13
|
+
status: 'pending',
|
|
14
14
|
error: null
|
|
15
15
|
});
|
|
16
|
-
const { result } = renderHookWithWrapper(()=>useIsBucketEmpty(
|
|
16
|
+
const { result } = renderHookWithWrapper(()=>useIsBucketEmpty('test-bucket'));
|
|
17
17
|
expect(result.current.isEmpty).toBe(null);
|
|
18
18
|
expect(result.current.isLoading).toBe(true);
|
|
19
19
|
expect(result.current.error).toBe(null);
|
|
20
20
|
});
|
|
21
|
-
it(
|
|
21
|
+
it('returns true when bucket is empty', ()=>{
|
|
22
22
|
mockUseListObjects.mockReturnValue({
|
|
23
23
|
data: {
|
|
24
24
|
pages: [
|
|
@@ -28,35 +28,35 @@ describe("useIsBucketEmpty", ()=>{
|
|
|
28
28
|
}
|
|
29
29
|
]
|
|
30
30
|
},
|
|
31
|
-
status:
|
|
31
|
+
status: 'success',
|
|
32
32
|
error: null
|
|
33
33
|
});
|
|
34
|
-
const { result } = renderHookWithWrapper(()=>useIsBucketEmpty(
|
|
34
|
+
const { result } = renderHookWithWrapper(()=>useIsBucketEmpty('test-bucket'));
|
|
35
35
|
expect(result.current.isEmpty).toBe(true);
|
|
36
36
|
expect(result.current.isLoading).toBe(false);
|
|
37
37
|
});
|
|
38
|
-
it(
|
|
38
|
+
it('returns false when bucket has objects', ()=>{
|
|
39
39
|
mockUseListObjects.mockReturnValue({
|
|
40
40
|
data: {
|
|
41
41
|
pages: [
|
|
42
42
|
{
|
|
43
43
|
Contents: [
|
|
44
44
|
{
|
|
45
|
-
Key:
|
|
45
|
+
Key: 'file.txt'
|
|
46
46
|
}
|
|
47
47
|
],
|
|
48
48
|
CommonPrefixes: []
|
|
49
49
|
}
|
|
50
50
|
]
|
|
51
51
|
},
|
|
52
|
-
status:
|
|
52
|
+
status: 'success',
|
|
53
53
|
error: null
|
|
54
54
|
});
|
|
55
|
-
const { result } = renderHookWithWrapper(()=>useIsBucketEmpty(
|
|
55
|
+
const { result } = renderHookWithWrapper(()=>useIsBucketEmpty('test-bucket'));
|
|
56
56
|
expect(result.current.isEmpty).toBe(false);
|
|
57
57
|
expect(result.current.isLoading).toBe(false);
|
|
58
58
|
});
|
|
59
|
-
it(
|
|
59
|
+
it('returns false when bucket has folders', ()=>{
|
|
60
60
|
mockUseListObjects.mockReturnValue({
|
|
61
61
|
data: {
|
|
62
62
|
pages: [
|
|
@@ -64,32 +64,32 @@ describe("useIsBucketEmpty", ()=>{
|
|
|
64
64
|
Contents: [],
|
|
65
65
|
CommonPrefixes: [
|
|
66
66
|
{
|
|
67
|
-
Prefix:
|
|
67
|
+
Prefix: 'folder/'
|
|
68
68
|
}
|
|
69
69
|
]
|
|
70
70
|
}
|
|
71
71
|
]
|
|
72
72
|
},
|
|
73
|
-
status:
|
|
73
|
+
status: 'success',
|
|
74
74
|
error: null
|
|
75
75
|
});
|
|
76
|
-
const { result } = renderHookWithWrapper(()=>useIsBucketEmpty(
|
|
76
|
+
const { result } = renderHookWithWrapper(()=>useIsBucketEmpty('test-bucket'));
|
|
77
77
|
expect(result.current.isEmpty).toBe(false);
|
|
78
78
|
expect(result.current.isLoading).toBe(false);
|
|
79
79
|
});
|
|
80
|
-
it(
|
|
81
|
-
const testError = new Error(
|
|
80
|
+
it('handles error state', ()=>{
|
|
81
|
+
const testError = new Error('Access denied');
|
|
82
82
|
mockUseListObjects.mockReturnValue({
|
|
83
83
|
data: void 0,
|
|
84
|
-
status:
|
|
84
|
+
status: 'error',
|
|
85
85
|
error: testError
|
|
86
86
|
});
|
|
87
|
-
const { result } = renderHookWithWrapper(()=>useIsBucketEmpty(
|
|
87
|
+
const { result } = renderHookWithWrapper(()=>useIsBucketEmpty('test-bucket'));
|
|
88
88
|
expect(result.current.isEmpty).toBe(null);
|
|
89
89
|
expect(result.current.isLoading).toBe(false);
|
|
90
90
|
expect(result.current.error).toBe(testError);
|
|
91
91
|
});
|
|
92
|
-
it(
|
|
92
|
+
it('ignores invalid objects and prefixes', ()=>{
|
|
93
93
|
mockUseListObjects.mockReturnValue({
|
|
94
94
|
data: {
|
|
95
95
|
pages: [
|
|
@@ -99,7 +99,7 @@ describe("useIsBucketEmpty", ()=>{
|
|
|
99
99
|
Key: void 0
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
|
-
Key:
|
|
102
|
+
Key: ''
|
|
103
103
|
}
|
|
104
104
|
],
|
|
105
105
|
CommonPrefixes: [
|
|
@@ -107,16 +107,16 @@ describe("useIsBucketEmpty", ()=>{
|
|
|
107
107
|
Prefix: null
|
|
108
108
|
},
|
|
109
109
|
{
|
|
110
|
-
Prefix:
|
|
110
|
+
Prefix: ''
|
|
111
111
|
}
|
|
112
112
|
]
|
|
113
113
|
}
|
|
114
114
|
]
|
|
115
115
|
},
|
|
116
|
-
status:
|
|
116
|
+
status: 'success',
|
|
117
117
|
error: null
|
|
118
118
|
});
|
|
119
|
-
const { result } = renderHookWithWrapper(()=>useIsBucketEmpty(
|
|
119
|
+
const { result } = renderHookWithWrapper(()=>useIsBucketEmpty('test-bucket'));
|
|
120
120
|
expect(result.current.isEmpty).toBe(true);
|
|
121
121
|
});
|
|
122
122
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { waitFor } from "@testing-library/react";
|
|
2
|
+
import { mockS3Client, renderHookWithWrapper, setupCommonMocks } from "../../test/testUtils.js";
|
|
3
|
+
import { useLoginMutation } from "../loginOperations.js";
|
|
4
|
+
jest.mock('@aws-sdk/client-s3');
|
|
5
|
+
describe('useLoginMutation', ()=>{
|
|
6
|
+
beforeEach(()=>{
|
|
7
|
+
setupCommonMocks();
|
|
8
|
+
jest.clearAllMocks();
|
|
9
|
+
});
|
|
10
|
+
it('calls onSuccess when login is successful', async ()=>{
|
|
11
|
+
const onSuccess = jest.fn();
|
|
12
|
+
mockS3Client.send.mockResolvedValue({
|
|
13
|
+
Buckets: []
|
|
14
|
+
});
|
|
15
|
+
const { result } = renderHookWithWrapper(()=>useLoginMutation({
|
|
16
|
+
onSuccess
|
|
17
|
+
}));
|
|
18
|
+
const config = {
|
|
19
|
+
endpoint: 'https://s3.amazonaws.com',
|
|
20
|
+
region: 'us-east-1',
|
|
21
|
+
forcePathStyle: true,
|
|
22
|
+
credentials: {
|
|
23
|
+
accessKeyId: 'test-key',
|
|
24
|
+
secretAccessKey: 'test-secret'
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
result.current.mutate(config);
|
|
28
|
+
await waitFor(()=>{
|
|
29
|
+
expect(result.current.isSuccess).toBe(true);
|
|
30
|
+
});
|
|
31
|
+
expect(onSuccess).toHaveBeenCalled();
|
|
32
|
+
expect(result.current.data).toEqual({
|
|
33
|
+
authenticated: true,
|
|
34
|
+
config
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
it('calls onError when user lacks ListBuckets permission', async ()=>{
|
|
38
|
+
const onError = jest.fn();
|
|
39
|
+
class AccessDeniedError extends Error {
|
|
40
|
+
constructor(message){
|
|
41
|
+
super(message);
|
|
42
|
+
this.name = 'AccessDenied';
|
|
43
|
+
}
|
|
44
|
+
$metadata = {
|
|
45
|
+
httpStatusCode: 403
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const accessDeniedError = new AccessDeniedError('Access Denied');
|
|
49
|
+
mockS3Client.send.mockRejectedValue(accessDeniedError);
|
|
50
|
+
const { result } = renderHookWithWrapper(()=>useLoginMutation({
|
|
51
|
+
onError
|
|
52
|
+
}));
|
|
53
|
+
const config = {
|
|
54
|
+
endpoint: 'https://s3.amazonaws.com',
|
|
55
|
+
region: 'us-east-1',
|
|
56
|
+
forcePathStyle: true,
|
|
57
|
+
credentials: {
|
|
58
|
+
accessKeyId: 'test-key',
|
|
59
|
+
secretAccessKey: 'test-secret'
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
result.current.mutate(config);
|
|
63
|
+
await waitFor(()=>{
|
|
64
|
+
expect(result.current.isError).toBe(true);
|
|
65
|
+
});
|
|
66
|
+
expect(onError).toHaveBeenCalled();
|
|
67
|
+
expect(result.current.error?.name).toBe('AccessDenied');
|
|
68
|
+
});
|
|
69
|
+
it('calls onError for other errors', async ()=>{
|
|
70
|
+
const onError = jest.fn();
|
|
71
|
+
class InvalidAccessKeyIdError extends Error {
|
|
72
|
+
constructor(message){
|
|
73
|
+
super(message);
|
|
74
|
+
this.name = 'InvalidAccessKeyId';
|
|
75
|
+
}
|
|
76
|
+
$metadata = {
|
|
77
|
+
httpStatusCode: 403
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
const invalidCredentialsError = new InvalidAccessKeyIdError('The access key ID you provided does not exist');
|
|
81
|
+
mockS3Client.send.mockRejectedValue(invalidCredentialsError);
|
|
82
|
+
const { result } = renderHookWithWrapper(()=>useLoginMutation({
|
|
83
|
+
onError
|
|
84
|
+
}));
|
|
85
|
+
const config = {
|
|
86
|
+
endpoint: 'https://s3.amazonaws.com',
|
|
87
|
+
region: 'us-east-1',
|
|
88
|
+
forcePathStyle: true,
|
|
89
|
+
credentials: {
|
|
90
|
+
accessKeyId: 'invalid-key',
|
|
91
|
+
secretAccessKey: 'invalid-secret'
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
result.current.mutate(config);
|
|
95
|
+
await waitFor(()=>{
|
|
96
|
+
expect(result.current.isError).toBe(true);
|
|
97
|
+
});
|
|
98
|
+
expect(onError).toHaveBeenCalled();
|
|
99
|
+
expect(result.current.error?.name).toBe('InvalidAccessKeyId');
|
|
100
|
+
});
|
|
101
|
+
it('works without onError callback', async ()=>{
|
|
102
|
+
class AccessDeniedError extends Error {
|
|
103
|
+
constructor(message){
|
|
104
|
+
super(message);
|
|
105
|
+
this.name = 'AccessDenied';
|
|
106
|
+
}
|
|
107
|
+
$metadata = {
|
|
108
|
+
httpStatusCode: 403
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
const accessDeniedError = new AccessDeniedError('Access Denied');
|
|
112
|
+
mockS3Client.send.mockRejectedValue(accessDeniedError);
|
|
113
|
+
const { result } = renderHookWithWrapper(()=>useLoginMutation());
|
|
114
|
+
const config = {
|
|
115
|
+
endpoint: 'https://s3.amazonaws.com',
|
|
116
|
+
region: 'us-east-1',
|
|
117
|
+
forcePathStyle: true,
|
|
118
|
+
credentials: {
|
|
119
|
+
accessKeyId: 'test-key',
|
|
120
|
+
secretAccessKey: 'test-secret'
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
result.current.mutate(config);
|
|
124
|
+
await waitFor(()=>{
|
|
125
|
+
expect(result.current.isError).toBe(true);
|
|
126
|
+
});
|
|
127
|
+
expect(result.current.error?.name).toBe('AccessDenied');
|
|
128
|
+
});
|
|
129
|
+
it('returns authenticated config on successful login', async ()=>{
|
|
130
|
+
mockS3Client.send.mockResolvedValue({
|
|
131
|
+
Buckets: []
|
|
132
|
+
});
|
|
133
|
+
const { result } = renderHookWithWrapper(()=>useLoginMutation());
|
|
134
|
+
const config = {
|
|
135
|
+
endpoint: 'https://s3.amazonaws.com',
|
|
136
|
+
region: 'us-east-1',
|
|
137
|
+
forcePathStyle: true,
|
|
138
|
+
credentials: {
|
|
139
|
+
accessKeyId: 'test-key',
|
|
140
|
+
secretAccessKey: 'test-secret'
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
result.current.mutate(config);
|
|
144
|
+
await waitFor(()=>{
|
|
145
|
+
expect(result.current.isSuccess).toBe(true);
|
|
146
|
+
});
|
|
147
|
+
expect(result.current.data).toEqual({
|
|
148
|
+
authenticated: true,
|
|
149
|
+
config
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
it('handles network errors appropriately', async ()=>{
|
|
153
|
+
const onError = jest.fn();
|
|
154
|
+
const networkError = new Error('Network request failed');
|
|
155
|
+
mockS3Client.send.mockRejectedValue(networkError);
|
|
156
|
+
const { result } = renderHookWithWrapper(()=>useLoginMutation({
|
|
157
|
+
onError
|
|
158
|
+
}));
|
|
159
|
+
const config = {
|
|
160
|
+
endpoint: 'https://s3.amazonaws.com',
|
|
161
|
+
region: 'us-east-1',
|
|
162
|
+
forcePathStyle: true,
|
|
163
|
+
credentials: {
|
|
164
|
+
accessKeyId: 'test-key',
|
|
165
|
+
secretAccessKey: 'test-secret'
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
result.current.mutate(config);
|
|
169
|
+
await waitFor(()=>{
|
|
170
|
+
expect(result.current.isError).toBe(true);
|
|
171
|
+
});
|
|
172
|
+
expect(onError).toHaveBeenCalled();
|
|
173
|
+
});
|
|
174
|
+
it('validates credentials by calling ListBuckets command', async ()=>{
|
|
175
|
+
mockS3Client.send.mockResolvedValue({
|
|
176
|
+
Buckets: []
|
|
177
|
+
});
|
|
178
|
+
const { result } = renderHookWithWrapper(()=>useLoginMutation());
|
|
179
|
+
const config = {
|
|
180
|
+
endpoint: 'https://s3.amazonaws.com',
|
|
181
|
+
region: 'us-east-1',
|
|
182
|
+
forcePathStyle: true,
|
|
183
|
+
credentials: {
|
|
184
|
+
accessKeyId: 'test-key',
|
|
185
|
+
secretAccessKey: 'test-secret'
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
result.current.mutate(config);
|
|
189
|
+
await waitFor(()=>{
|
|
190
|
+
expect(result.current.isSuccess).toBe(true);
|
|
191
|
+
});
|
|
192
|
+
expect(mockS3Client.send).toHaveBeenCalled();
|
|
193
|
+
});
|
|
194
|
+
});
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This file contains hooks for managing bucket configuration settings
|
|
5
5
|
* like ACL, policies, versioning, CORS, lifecycle, etc.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import { type DeleteBucketCorsCommandInput, type DeleteBucketCorsCommandOutput, type DeleteBucketLifecycleCommandInput, type DeleteBucketLifecycleCommandOutput, type DeleteBucketPolicyCommandInput, type DeleteBucketPolicyCommandOutput, type DeleteBucketReplicationCommandInput, type DeleteBucketReplicationCommandOutput, type DeleteBucketTaggingCommandInput, type DeleteBucketTaggingCommandOutput, type GetBucketAclCommandInput, type GetBucketAclCommandOutput, type GetBucketCorsCommandInput, type GetBucketCorsCommandOutput, type GetBucketEncryptionCommandInput, type GetBucketEncryptionCommandOutput, type GetBucketLifecycleConfigurationCommandInput, type GetBucketLifecycleConfigurationCommandOutput, type GetBucketNotificationConfigurationCommandInput, type GetBucketNotificationConfigurationCommandOutput, type GetBucketPolicyCommandInput, type GetBucketPolicyCommandOutput, type GetBucketReplicationCommandInput, type GetBucketReplicationCommandOutput, type GetBucketTaggingCommandInput, type GetBucketTaggingCommandOutput, type GetBucketVersioningCommandInput, type GetBucketVersioningCommandOutput, type GetObjectLockConfigurationCommandInput, type GetObjectLockConfigurationCommandOutput, type GetPublicAccessBlockCommandInput, type GetPublicAccessBlockCommandOutput, type PutBucketAclCommandInput, type PutBucketAclCommandOutput, type PutBucketCorsCommandInput, type PutBucketCorsCommandOutput, type PutBucketEncryptionCommandInput, type PutBucketEncryptionCommandOutput, type PutBucketLifecycleConfigurationCommandInput, type PutBucketLifecycleConfigurationCommandOutput, type PutBucketNotificationConfigurationCommandInput, type PutBucketNotificationConfigurationCommandOutput, type PutBucketPolicyCommandInput, type PutBucketPolicyCommandOutput, type PutBucketReplicationCommandInput, type PutBucketReplicationCommandOutput, type PutBucketTaggingCommandInput, type PutBucketTaggingCommandOutput, type PutBucketVersioningCommandInput, type PutBucketVersioningCommandOutput, type PutObjectLockConfigurationCommandInput, type PutObjectLockConfigurationCommandOutput } from '@aws-sdk/client-s3';
|
|
8
8
|
/**
|
|
9
9
|
* Hook for retrieving S3 bucket access control list (ACL) settings
|
|
10
10
|
*
|
|
@@ -166,3 +166,10 @@ export declare const useSetBucketReplication: (options?: Omit<import("@tanstack/
|
|
|
166
166
|
* been replicated remain in the destination bucket.
|
|
167
167
|
*/
|
|
168
168
|
export declare const useDeleteBucketReplication: (options?: Omit<import("@tanstack/react-query").UseMutationOptions<DeleteBucketReplicationCommandOutput, import("..").EnhancedS3Error, DeleteBucketReplicationCommandInput, unknown>, "mutationFn"> | undefined) => import("@tanstack/react-query").UseMutationResult<DeleteBucketReplicationCommandOutput, import("..").EnhancedS3Error, DeleteBucketReplicationCommandInput>;
|
|
169
|
+
/**
|
|
170
|
+
* Hook for retrieving S3 bucket public access block configuration
|
|
171
|
+
*
|
|
172
|
+
* Fetches the public access block configuration for an S3 bucket.
|
|
173
|
+
* This configuration determines whether public access is blocked at the bucket level.
|
|
174
|
+
*/
|
|
175
|
+
export declare const useGetPublicAccessBlock: (params?: GetPublicAccessBlockCommandInput | undefined, options?: Omit<import("@tanstack/react-query").UseQueryOptions<GetPublicAccessBlockCommandOutput, import("..").EnhancedS3Error, GetPublicAccessBlockCommandOutput, readonly unknown[]>, "queryKey" | "queryFn"> | undefined) => import("@tanstack/react-query").UseQueryResult<GetPublicAccessBlockCommandOutput, import("..").EnhancedS3Error>;
|