@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
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { renderHook, waitFor } from "@testing-library/react";
|
|
2
|
-
import {
|
|
3
|
-
import { useS3Client } from "../../useS3Client.js";
|
|
2
|
+
import { createTestWrapper, validateFactoryHook, validateHookResult } from "../../../test/testUtils.js";
|
|
4
3
|
import { createS3OperationError } from "../../../utils/errorHandling.js";
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
jest.mock(
|
|
4
|
+
import { useS3Client } from "../../useS3Client.js";
|
|
5
|
+
import { useCreateS3MutationHook } from "../useCreateS3MutationHook.js";
|
|
6
|
+
jest.mock('../../useS3Client');
|
|
7
|
+
jest.mock('../../../utils/errorHandling');
|
|
8
8
|
const mockUseS3Client = useS3Client;
|
|
9
9
|
const mockCreateS3OperationError = createS3OperationError;
|
|
10
10
|
class MockCommand {
|
|
@@ -16,44 +16,44 @@ class MockCommand {
|
|
|
16
16
|
const mockS3Client = {
|
|
17
17
|
send: jest.fn()
|
|
18
18
|
};
|
|
19
|
-
describe(
|
|
19
|
+
describe('useCreateS3MutationHook - Factory Specific', ()=>{
|
|
20
20
|
beforeEach(()=>{
|
|
21
21
|
jest.clearAllMocks();
|
|
22
22
|
mockUseS3Client.mockReturnValue(mockS3Client);
|
|
23
23
|
});
|
|
24
|
-
it(
|
|
25
|
-
const useMutation = useCreateS3MutationHook(MockCommand,
|
|
26
|
-
validateFactoryHook(useMutation,
|
|
24
|
+
it('should create a functioning mutation hook', ()=>{
|
|
25
|
+
const useMutation = useCreateS3MutationHook(MockCommand, 'testMutation');
|
|
26
|
+
validateFactoryHook(useMutation, 'testMutation');
|
|
27
27
|
const { result } = renderHook(()=>useMutation(), {
|
|
28
|
-
wrapper:
|
|
28
|
+
wrapper: createTestWrapper()
|
|
29
29
|
});
|
|
30
|
-
validateHookResult(result.current,
|
|
30
|
+
validateHookResult(result.current, 'mutation');
|
|
31
31
|
});
|
|
32
|
-
it(
|
|
33
|
-
const useMutation = useCreateS3MutationHook(MockCommand,
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
it('should accept invalidation keys parameter', ()=>{
|
|
33
|
+
const useMutation = useCreateS3MutationHook(MockCommand, 'testMutation', [
|
|
34
|
+
'ListObjects',
|
|
35
|
+
'TestQuery'
|
|
36
36
|
]);
|
|
37
|
-
validateFactoryHook(useMutation,
|
|
37
|
+
validateFactoryHook(useMutation, 'testMutation');
|
|
38
38
|
const { result } = renderHook(()=>useMutation(), {
|
|
39
|
-
wrapper:
|
|
39
|
+
wrapper: createTestWrapper()
|
|
40
40
|
});
|
|
41
|
-
validateHookResult(result.current,
|
|
41
|
+
validateHookResult(result.current, 'mutation');
|
|
42
42
|
});
|
|
43
|
-
it(
|
|
43
|
+
it('should execute mutation successfully', async ()=>{
|
|
44
44
|
const mockResponse = {
|
|
45
45
|
success: true,
|
|
46
|
-
key:
|
|
46
|
+
key: 'uploaded-file.txt'
|
|
47
47
|
};
|
|
48
48
|
mockS3Client.send.mockResolvedValue(mockResponse);
|
|
49
|
-
const useMutation = useCreateS3MutationHook(MockCommand,
|
|
49
|
+
const useMutation = useCreateS3MutationHook(MockCommand, 'PutObject');
|
|
50
50
|
const { result } = renderHook(()=>useMutation(), {
|
|
51
|
-
wrapper:
|
|
51
|
+
wrapper: createTestWrapper()
|
|
52
52
|
});
|
|
53
53
|
result.current.mutate({
|
|
54
|
-
Bucket:
|
|
55
|
-
Key:
|
|
56
|
-
Body:
|
|
54
|
+
Bucket: 'test-bucket',
|
|
55
|
+
Key: 'test-file.txt',
|
|
56
|
+
Body: 'content'
|
|
57
57
|
});
|
|
58
58
|
await waitFor(()=>{
|
|
59
59
|
expect(result.current.isSuccess).toBe(true);
|
|
@@ -61,32 +61,32 @@ describe("useCreateS3MutationHook - Factory Specific", ()=>{
|
|
|
61
61
|
expect(result.current.data).toEqual(mockResponse);
|
|
62
62
|
expect(mockS3Client.send).toHaveBeenCalledWith(expect.objectContaining({
|
|
63
63
|
input: {
|
|
64
|
-
Bucket:
|
|
65
|
-
Key:
|
|
66
|
-
Body:
|
|
64
|
+
Bucket: 'test-bucket',
|
|
65
|
+
Key: 'test-file.txt',
|
|
66
|
+
Body: 'content'
|
|
67
67
|
}
|
|
68
68
|
}));
|
|
69
69
|
});
|
|
70
|
-
it(
|
|
71
|
-
const mockError = new Error(
|
|
72
|
-
const enhancedError = new Error(
|
|
70
|
+
it('should handle mutation errors with proper context', async ()=>{
|
|
71
|
+
const mockError = new Error('Access Denied');
|
|
72
|
+
const enhancedError = new Error('Enhanced Access Denied');
|
|
73
73
|
mockS3Client.send.mockRejectedValue(mockError);
|
|
74
74
|
mockCreateS3OperationError.mockReturnValue(enhancedError);
|
|
75
|
-
const useMutation = useCreateS3MutationHook(MockCommand,
|
|
75
|
+
const useMutation = useCreateS3MutationHook(MockCommand, 'PutObject');
|
|
76
76
|
const { result } = renderHook(()=>useMutation(), {
|
|
77
|
-
wrapper:
|
|
77
|
+
wrapper: createTestWrapper()
|
|
78
78
|
});
|
|
79
79
|
result.current.mutate({
|
|
80
|
-
Bucket:
|
|
81
|
-
Key:
|
|
80
|
+
Bucket: 'test-bucket',
|
|
81
|
+
Key: 'test-file.txt'
|
|
82
82
|
});
|
|
83
83
|
await waitFor(()=>{
|
|
84
84
|
expect(result.current.isError).toBe(true);
|
|
85
85
|
});
|
|
86
86
|
expect(result.current.error).toBe(enhancedError);
|
|
87
|
-
expect(mockCreateS3OperationError).toHaveBeenCalledWith(mockError,
|
|
87
|
+
expect(mockCreateS3OperationError).toHaveBeenCalledWith(mockError, 'PutObject', 'test-bucket');
|
|
88
88
|
});
|
|
89
|
-
it(
|
|
89
|
+
it('should handle mutation callbacks correctly', async ()=>{
|
|
90
90
|
const mockResponse = {
|
|
91
91
|
success: true
|
|
92
92
|
};
|
|
@@ -94,17 +94,17 @@ describe("useCreateS3MutationHook - Factory Specific", ()=>{
|
|
|
94
94
|
const onError = jest.fn();
|
|
95
95
|
const onSettled = jest.fn();
|
|
96
96
|
mockS3Client.send.mockResolvedValue(mockResponse);
|
|
97
|
-
const useMutation = useCreateS3MutationHook(MockCommand,
|
|
97
|
+
const useMutation = useCreateS3MutationHook(MockCommand, 'PutObject');
|
|
98
98
|
const { result } = renderHook(()=>useMutation({
|
|
99
99
|
onSuccess,
|
|
100
100
|
onError,
|
|
101
101
|
onSettled
|
|
102
102
|
}), {
|
|
103
|
-
wrapper:
|
|
103
|
+
wrapper: createTestWrapper()
|
|
104
104
|
});
|
|
105
105
|
const variables = {
|
|
106
|
-
Bucket:
|
|
107
|
-
Key:
|
|
106
|
+
Bucket: 'test-bucket',
|
|
107
|
+
Key: 'test-file.txt'
|
|
108
108
|
};
|
|
109
109
|
result.current.mutate(variables);
|
|
110
110
|
await waitFor(()=>{
|
|
@@ -114,28 +114,28 @@ describe("useCreateS3MutationHook - Factory Specific", ()=>{
|
|
|
114
114
|
expect(onError).not.toHaveBeenCalled();
|
|
115
115
|
expect(onSettled).toHaveBeenCalledWith(mockResponse, null, variables, void 0, expect.any(Object));
|
|
116
116
|
});
|
|
117
|
-
it(
|
|
117
|
+
it('should handle mutation with invalidation keys', async ()=>{
|
|
118
118
|
const mockResponse = {
|
|
119
119
|
success: true
|
|
120
120
|
};
|
|
121
121
|
mockS3Client.send.mockResolvedValue(mockResponse);
|
|
122
|
-
const useMutation = useCreateS3MutationHook(MockCommand,
|
|
123
|
-
|
|
124
|
-
|
|
122
|
+
const useMutation = useCreateS3MutationHook(MockCommand, 'PutObject', [
|
|
123
|
+
'ListObjects',
|
|
124
|
+
'TestQuery'
|
|
125
125
|
]);
|
|
126
126
|
const { result } = renderHook(()=>useMutation(), {
|
|
127
|
-
wrapper:
|
|
127
|
+
wrapper: createTestWrapper()
|
|
128
128
|
});
|
|
129
129
|
result.current.mutate({
|
|
130
|
-
Bucket:
|
|
131
|
-
Key:
|
|
130
|
+
Bucket: 'test-bucket',
|
|
131
|
+
Key: 'test-file.txt'
|
|
132
132
|
});
|
|
133
133
|
await waitFor(()=>{
|
|
134
134
|
expect(result.current.isSuccess).toBe(true);
|
|
135
135
|
});
|
|
136
136
|
expect(result.current.data).toEqual(mockResponse);
|
|
137
137
|
});
|
|
138
|
-
it(
|
|
138
|
+
it('should handle concurrent mutations correctly', async ()=>{
|
|
139
139
|
const mockResponse1 = {
|
|
140
140
|
success: true,
|
|
141
141
|
id: 1
|
|
@@ -149,20 +149,20 @@ describe("useCreateS3MutationHook - Factory Specific", ()=>{
|
|
|
149
149
|
callCount++;
|
|
150
150
|
return Promise.resolve(1 === callCount ? mockResponse1 : mockResponse2);
|
|
151
151
|
});
|
|
152
|
-
const useMutation = useCreateS3MutationHook(MockCommand,
|
|
152
|
+
const useMutation = useCreateS3MutationHook(MockCommand, 'PutObject');
|
|
153
153
|
const { result: result1 } = renderHook(()=>useMutation(), {
|
|
154
|
-
wrapper:
|
|
154
|
+
wrapper: createTestWrapper()
|
|
155
155
|
});
|
|
156
156
|
const { result: result2 } = renderHook(()=>useMutation(), {
|
|
157
|
-
wrapper:
|
|
157
|
+
wrapper: createTestWrapper()
|
|
158
158
|
});
|
|
159
159
|
result1.current.mutate({
|
|
160
|
-
Bucket:
|
|
161
|
-
Key:
|
|
160
|
+
Bucket: 'test-bucket',
|
|
161
|
+
Key: 'file1.txt'
|
|
162
162
|
});
|
|
163
163
|
result2.current.mutate({
|
|
164
|
-
Bucket:
|
|
165
|
-
Key:
|
|
164
|
+
Bucket: 'test-bucket',
|
|
165
|
+
Key: 'file2.txt'
|
|
166
166
|
});
|
|
167
167
|
await waitFor(()=>{
|
|
168
168
|
expect(result1.current.isSuccess).toBe(true);
|
|
@@ -172,7 +172,7 @@ describe("useCreateS3MutationHook - Factory Specific", ()=>{
|
|
|
172
172
|
expect(result2.current.data).toEqual(mockResponse2);
|
|
173
173
|
expect(mockS3Client.send).toHaveBeenCalledTimes(2);
|
|
174
174
|
});
|
|
175
|
-
it(
|
|
175
|
+
it('should pass command correctly for mutations', async ()=>{
|
|
176
176
|
let capturedCommand;
|
|
177
177
|
mockS3Client.send.mockImplementation((command)=>{
|
|
178
178
|
capturedCommand = command;
|
|
@@ -180,21 +180,21 @@ describe("useCreateS3MutationHook - Factory Specific", ()=>{
|
|
|
180
180
|
success: true
|
|
181
181
|
});
|
|
182
182
|
});
|
|
183
|
-
const useMutation = useCreateS3MutationHook(MockCommand,
|
|
183
|
+
const useMutation = useCreateS3MutationHook(MockCommand, 'PutObject');
|
|
184
184
|
const { result } = renderHook(()=>useMutation(), {
|
|
185
|
-
wrapper:
|
|
185
|
+
wrapper: createTestWrapper()
|
|
186
186
|
});
|
|
187
187
|
result.current.mutate({
|
|
188
|
-
Bucket:
|
|
189
|
-
Key:
|
|
188
|
+
Bucket: 'test-bucket',
|
|
189
|
+
Key: 'test-file.txt'
|
|
190
190
|
});
|
|
191
191
|
await waitFor(()=>{
|
|
192
192
|
expect(result.current.isSuccess).toBe(true);
|
|
193
193
|
});
|
|
194
194
|
expect(capturedCommand).toBeInstanceOf(MockCommand);
|
|
195
195
|
expect(capturedCommand.input).toEqual({
|
|
196
|
-
Bucket:
|
|
197
|
-
Key:
|
|
196
|
+
Bucket: 'test-bucket',
|
|
197
|
+
Key: 'test-file.txt'
|
|
198
198
|
});
|
|
199
199
|
});
|
|
200
200
|
});
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { renderHook, waitFor } from "@testing-library/react";
|
|
2
|
-
import {
|
|
2
|
+
import { createTestWrapper, validateFactoryHook, validateHookResult } from "../../../test/testUtils.js";
|
|
3
|
+
import { createS3OperationError, isNotFoundError } from "../../../utils/errorHandling.js";
|
|
3
4
|
import { useS3Client } from "../../useS3Client.js";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
jest.mock(
|
|
7
|
-
jest.mock("../../../utils/errorHandling");
|
|
5
|
+
import { useCreateS3QueryHook } from "../useCreateS3QueryHook.js";
|
|
6
|
+
jest.mock('../../useS3Client');
|
|
7
|
+
jest.mock('../../../utils/errorHandling');
|
|
8
8
|
const mockUseS3Client = useS3Client;
|
|
9
9
|
const mockCreateS3OperationError = createS3OperationError;
|
|
10
|
+
const mockIsNotFoundError = isNotFoundError;
|
|
10
11
|
class MockCommand {
|
|
11
12
|
input;
|
|
12
13
|
constructor(input){
|
|
@@ -16,48 +17,48 @@ class MockCommand {
|
|
|
16
17
|
const mockS3Client = {
|
|
17
18
|
send: jest.fn()
|
|
18
19
|
};
|
|
19
|
-
describe(
|
|
20
|
+
describe('useCreateS3QueryHook - Factory Specific', ()=>{
|
|
20
21
|
beforeEach(()=>{
|
|
21
22
|
jest.clearAllMocks();
|
|
22
23
|
mockUseS3Client.mockReturnValue(mockS3Client);
|
|
23
24
|
});
|
|
24
|
-
it(
|
|
25
|
-
const useTestQuery = useCreateS3QueryHook(MockCommand,
|
|
26
|
-
validateFactoryHook(useTestQuery,
|
|
25
|
+
it('should create a functioning query hook', ()=>{
|
|
26
|
+
const useTestQuery = useCreateS3QueryHook(MockCommand, 'testOperation');
|
|
27
|
+
validateFactoryHook(useTestQuery, 'testOperation');
|
|
27
28
|
const { result } = renderHook(()=>useTestQuery({
|
|
28
|
-
testParam:
|
|
29
|
+
testParam: 'value'
|
|
29
30
|
}), {
|
|
30
|
-
wrapper:
|
|
31
|
+
wrapper: createTestWrapper()
|
|
31
32
|
});
|
|
32
|
-
validateHookResult(result.current,
|
|
33
|
+
validateHookResult(result.current, 'query');
|
|
33
34
|
});
|
|
34
|
-
it(
|
|
35
|
-
const useTestQuery = useCreateS3QueryHook(MockCommand,
|
|
35
|
+
it('should accept and forward query options correctly', ()=>{
|
|
36
|
+
const useTestQuery = useCreateS3QueryHook(MockCommand, 'testOperation');
|
|
36
37
|
const customOptions = {
|
|
37
38
|
enabled: false,
|
|
38
39
|
staleTime: 5000,
|
|
39
40
|
refetchOnWindowFocus: false
|
|
40
41
|
};
|
|
41
42
|
const { result } = renderHook(()=>useTestQuery({
|
|
42
|
-
testParam:
|
|
43
|
+
testParam: 'value'
|
|
43
44
|
}, customOptions), {
|
|
44
|
-
wrapper:
|
|
45
|
+
wrapper: createTestWrapper()
|
|
45
46
|
});
|
|
46
|
-
expect(result.current.fetchStatus).toBe(
|
|
47
|
+
expect(result.current.fetchStatus).toBe('idle');
|
|
47
48
|
expect(result.current.isLoading).toBe(false);
|
|
48
49
|
});
|
|
49
|
-
it(
|
|
50
|
+
it('should handle successful query execution', async ()=>{
|
|
50
51
|
const mockResponse = {
|
|
51
|
-
data:
|
|
52
|
-
status:
|
|
52
|
+
data: 'test-response',
|
|
53
|
+
status: 'success'
|
|
53
54
|
};
|
|
54
55
|
mockS3Client.send.mockResolvedValue(mockResponse);
|
|
55
|
-
const useTestQuery = useCreateS3QueryHook(MockCommand,
|
|
56
|
+
const useTestQuery = useCreateS3QueryHook(MockCommand, 'testOperation');
|
|
56
57
|
const { result } = renderHook(()=>useTestQuery({
|
|
57
|
-
Bucket:
|
|
58
|
-
Key:
|
|
58
|
+
Bucket: 'test-bucket',
|
|
59
|
+
Key: 'test-key'
|
|
59
60
|
}), {
|
|
60
|
-
wrapper:
|
|
61
|
+
wrapper: createTestWrapper()
|
|
61
62
|
});
|
|
62
63
|
await waitFor(()=>{
|
|
63
64
|
expect(result.current.isSuccess).toBe(true);
|
|
@@ -67,52 +68,52 @@ describe("useCreateS3QueryHook - Factory Specific", ()=>{
|
|
|
67
68
|
abortSignal: expect.any(AbortSignal)
|
|
68
69
|
}));
|
|
69
70
|
});
|
|
70
|
-
it(
|
|
71
|
-
const mockError = new Error(
|
|
72
|
-
const enhancedError = new Error(
|
|
71
|
+
it('should handle query errors with proper context', async ()=>{
|
|
72
|
+
const mockError = new Error('S3 Service Error');
|
|
73
|
+
const enhancedError = new Error('Enhanced S3 Service Error');
|
|
73
74
|
mockS3Client.send.mockRejectedValue(mockError);
|
|
74
75
|
mockCreateS3OperationError.mockReturnValue(enhancedError);
|
|
75
|
-
const useTestQuery = useCreateS3QueryHook(MockCommand,
|
|
76
|
+
const useTestQuery = useCreateS3QueryHook(MockCommand, 'testOperation');
|
|
76
77
|
const { result } = renderHook(()=>useTestQuery({
|
|
77
|
-
Bucket:
|
|
78
|
-
Key:
|
|
78
|
+
Bucket: 'test-bucket',
|
|
79
|
+
Key: 'test-key'
|
|
79
80
|
}), {
|
|
80
|
-
wrapper:
|
|
81
|
+
wrapper: createTestWrapper()
|
|
81
82
|
});
|
|
82
83
|
await waitFor(()=>{
|
|
83
84
|
expect(result.current.isError).toBe(true);
|
|
84
85
|
});
|
|
85
86
|
expect(result.current.error).toBe(enhancedError);
|
|
86
|
-
expect(mockCreateS3OperationError).toHaveBeenCalledWith(mockError,
|
|
87
|
+
expect(mockCreateS3OperationError).toHaveBeenCalledWith(mockError, 'testOperation', 'test-bucket');
|
|
87
88
|
});
|
|
88
|
-
it(
|
|
89
|
-
const useTestQuery = useCreateS3QueryHook(MockCommand,
|
|
89
|
+
it('should handle parameter validation correctly', ()=>{
|
|
90
|
+
const useTestQuery = useCreateS3QueryHook(MockCommand, 'testOperation');
|
|
90
91
|
const { result: invalidResult } = renderHook(()=>useTestQuery({
|
|
91
|
-
Bucket:
|
|
92
|
+
Bucket: 'test',
|
|
92
93
|
Key: void 0
|
|
93
94
|
}), {
|
|
94
|
-
wrapper:
|
|
95
|
+
wrapper: createTestWrapper()
|
|
95
96
|
});
|
|
96
|
-
expect(invalidResult.current.fetchStatus).toBe(
|
|
97
|
+
expect(invalidResult.current.fetchStatus).toBe('idle');
|
|
97
98
|
const { result: validResult } = renderHook(()=>useTestQuery({
|
|
98
|
-
Bucket:
|
|
99
|
-
Key:
|
|
99
|
+
Bucket: 'test',
|
|
100
|
+
Key: 'valid-key'
|
|
100
101
|
}), {
|
|
101
|
-
wrapper:
|
|
102
|
+
wrapper: createTestWrapper()
|
|
102
103
|
});
|
|
103
|
-
expect(validResult.current.fetchStatus).not.toBe(
|
|
104
|
+
expect(validResult.current.fetchStatus).not.toBe('idle');
|
|
104
105
|
});
|
|
105
|
-
it(
|
|
106
|
-
const useTestQuery = useCreateS3QueryHook(MockCommand,
|
|
106
|
+
it('should handle empty string parameters correctly', ()=>{
|
|
107
|
+
const useTestQuery = useCreateS3QueryHook(MockCommand, 'testOperation');
|
|
107
108
|
const { result: emptyResult } = renderHook(()=>useTestQuery({
|
|
108
|
-
Bucket:
|
|
109
|
-
Key:
|
|
109
|
+
Bucket: 'test',
|
|
110
|
+
Key: ''
|
|
110
111
|
}), {
|
|
111
|
-
wrapper:
|
|
112
|
+
wrapper: createTestWrapper()
|
|
112
113
|
});
|
|
113
|
-
expect(emptyResult.current.fetchStatus).not.toBe(
|
|
114
|
+
expect(emptyResult.current.fetchStatus).not.toBe('idle');
|
|
114
115
|
});
|
|
115
|
-
it(
|
|
116
|
+
it('should pass AbortSignal correctly to S3 client', async ()=>{
|
|
116
117
|
let capturedAbortSignal;
|
|
117
118
|
mockS3Client.send.mockImplementation((_command, options)=>{
|
|
118
119
|
capturedAbortSignal = options?.abortSignal;
|
|
@@ -120,12 +121,12 @@ describe("useCreateS3QueryHook - Factory Specific", ()=>{
|
|
|
120
121
|
success: true
|
|
121
122
|
});
|
|
122
123
|
});
|
|
123
|
-
const useTestQuery = useCreateS3QueryHook(MockCommand,
|
|
124
|
+
const useTestQuery = useCreateS3QueryHook(MockCommand, 'testOperation');
|
|
124
125
|
const { result } = renderHook(()=>useTestQuery({
|
|
125
|
-
Bucket:
|
|
126
|
-
Key:
|
|
126
|
+
Bucket: 'test',
|
|
127
|
+
Key: 'test'
|
|
127
128
|
}), {
|
|
128
|
-
wrapper:
|
|
129
|
+
wrapper: createTestWrapper()
|
|
129
130
|
});
|
|
130
131
|
await waitFor(()=>{
|
|
131
132
|
expect(result.current.isSuccess).toBe(true);
|
|
@@ -133,4 +134,46 @@ describe("useCreateS3QueryHook - Factory Specific", ()=>{
|
|
|
133
134
|
expect(capturedAbortSignal).toBeInstanceOf(AbortSignal);
|
|
134
135
|
expect(capturedAbortSignal?.aborted).toBe(false);
|
|
135
136
|
});
|
|
137
|
+
it('should return empty config for supported operations when NOT_FOUND error occurs', async ()=>{
|
|
138
|
+
const error = new Error('Configuration does not exist');
|
|
139
|
+
error.name = 'NoSuchConfiguration';
|
|
140
|
+
error.$metadata = {
|
|
141
|
+
httpStatusCode: 404
|
|
142
|
+
};
|
|
143
|
+
mockS3Client.send.mockRejectedValueOnce(error);
|
|
144
|
+
mockIsNotFoundError.mockReturnValueOnce(true);
|
|
145
|
+
const useTestQuery = useCreateS3QueryHook(MockCommand, 'GetBucketLifecycleConfiguration');
|
|
146
|
+
const { result } = renderHook(()=>useTestQuery({
|
|
147
|
+
Bucket: 'test-bucket'
|
|
148
|
+
}), {
|
|
149
|
+
wrapper: createTestWrapper()
|
|
150
|
+
});
|
|
151
|
+
await waitFor(()=>{
|
|
152
|
+
expect(result.current.isSuccess).toBe(true);
|
|
153
|
+
});
|
|
154
|
+
expect(result.current.data).toBeDefined();
|
|
155
|
+
expect(mockIsNotFoundError).toHaveBeenCalledWith(error);
|
|
156
|
+
});
|
|
157
|
+
it('should throw error when NOT_FOUND occurs for unsupported operations', async ()=>{
|
|
158
|
+
const error = new Error('Bucket not found');
|
|
159
|
+
error.name = 'NoSuchBucket';
|
|
160
|
+
error.$metadata = {
|
|
161
|
+
httpStatusCode: 404
|
|
162
|
+
};
|
|
163
|
+
const enhancedError = new Error('Enhanced error');
|
|
164
|
+
mockS3Client.send.mockRejectedValueOnce(error);
|
|
165
|
+
mockIsNotFoundError.mockReturnValueOnce(true);
|
|
166
|
+
mockCreateS3OperationError.mockReturnValueOnce(enhancedError);
|
|
167
|
+
const useTestQuery = useCreateS3QueryHook(MockCommand, 'GetBucketAcl');
|
|
168
|
+
const { result } = renderHook(()=>useTestQuery({
|
|
169
|
+
Bucket: 'test-bucket'
|
|
170
|
+
}), {
|
|
171
|
+
wrapper: createTestWrapper()
|
|
172
|
+
});
|
|
173
|
+
await waitFor(()=>{
|
|
174
|
+
expect(result.current.isError).toBe(true);
|
|
175
|
+
});
|
|
176
|
+
expect(result.current.error).toBe(enhancedError);
|
|
177
|
+
expect(mockIsNotFoundError).toHaveBeenCalledWith(error);
|
|
178
|
+
});
|
|
136
179
|
});
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* - AbortSignal support for cancellation
|
|
13
13
|
* - Bucket/object context extraction for errors
|
|
14
14
|
*/
|
|
15
|
-
export {
|
|
16
|
-
export {
|
|
17
|
-
export {
|
|
18
|
-
export {
|
|
15
|
+
export { useCreateS3InfiniteQueryHook } from './useCreateS3InfiniteQueryHook';
|
|
16
|
+
export { useCreateS3LoginHook } from './useCreateS3LoginHook';
|
|
17
|
+
export { useCreateS3FunctionMutationHook, useCreateS3MutationHook, } from './useCreateS3MutationHook';
|
|
18
|
+
export { useCreateS3QueryHook } from './useCreateS3QueryHook';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { useCreateS3QueryHook } from "./useCreateS3QueryHook.js";
|
|
2
|
-
import { useCreateS3FunctionMutationHook, useCreateS3MutationHook } from "./useCreateS3MutationHook.js";
|
|
3
1
|
import { useCreateS3InfiniteQueryHook } from "./useCreateS3InfiniteQueryHook.js";
|
|
4
2
|
import { useCreateS3LoginHook } from "./useCreateS3LoginHook.js";
|
|
3
|
+
import { useCreateS3FunctionMutationHook, useCreateS3MutationHook } from "./useCreateS3MutationHook.js";
|
|
4
|
+
import { useCreateS3QueryHook } from "./useCreateS3QueryHook.js";
|
|
5
5
|
export { useCreateS3FunctionMutationHook, useCreateS3InfiniteQueryHook, useCreateS3LoginHook, useCreateS3MutationHook, useCreateS3QueryHook };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { UseInfiniteQueryOptions, UseInfiniteQueryResult } from
|
|
2
|
-
import { EnhancedS3Error } from
|
|
1
|
+
import { type UseInfiniteQueryOptions, type UseInfiniteQueryResult } from '@tanstack/react-query';
|
|
2
|
+
import { type EnhancedS3Error } from '../../utils/errorHandling';
|
|
3
3
|
/**
|
|
4
4
|
* Factory function for creating S3 infinite query hooks
|
|
5
5
|
*
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { useInfiniteQuery } from "@tanstack/react-query";
|
|
2
|
-
import {
|
|
2
|
+
import { useDataBrowserContext } from "../../components/providers/DataBrowserProvider.js";
|
|
3
3
|
import { createS3OperationError, shouldRetryError } from "../../utils/errorHandling.js";
|
|
4
|
+
import { useS3Client } from "../useS3Client.js";
|
|
4
5
|
function useCreateS3InfiniteQueryHook(Command, operationName) {
|
|
5
6
|
return (params, options)=>{
|
|
7
|
+
const { s3ConfigIdentifier } = useDataBrowserContext();
|
|
6
8
|
const s3Client = useS3Client();
|
|
7
9
|
const queryOptions = {
|
|
8
10
|
queryKey: [
|
|
11
|
+
s3ConfigIdentifier,
|
|
9
12
|
operationName,
|
|
10
13
|
params
|
|
11
14
|
],
|
|
@@ -20,7 +23,7 @@ function useCreateS3InfiniteQueryHook(Command, operationName) {
|
|
|
20
23
|
});
|
|
21
24
|
return response;
|
|
22
25
|
} catch (error) {
|
|
23
|
-
const bucketName =
|
|
26
|
+
const bucketName = 'Bucket' in params ? params.Bucket : void 0;
|
|
24
27
|
throw createS3OperationError(error, operationName, bucketName);
|
|
25
28
|
}
|
|
26
29
|
},
|
|
@@ -28,8 +31,8 @@ function useCreateS3InfiniteQueryHook(Command, operationName) {
|
|
|
28
31
|
initialPageParam: void 0,
|
|
29
32
|
getNextPageParam: (lastPage)=>getNextPageToken(operationName, lastPage),
|
|
30
33
|
enabled: params ? Object.entries(params).every(([key, value])=>{
|
|
31
|
-
if (
|
|
32
|
-
return void 0 !== value &&
|
|
34
|
+
if ('Prefix' === key) return void 0 !== value;
|
|
35
|
+
return void 0 !== value && '' !== value;
|
|
33
36
|
}) : true,
|
|
34
37
|
...options
|
|
35
38
|
};
|
|
@@ -38,18 +41,18 @@ function useCreateS3InfiniteQueryHook(Command, operationName) {
|
|
|
38
41
|
}
|
|
39
42
|
function getPaginationParams(operationName, pageParam) {
|
|
40
43
|
switch(operationName){
|
|
41
|
-
case
|
|
44
|
+
case 'ListObjects':
|
|
42
45
|
return {
|
|
43
46
|
ContinuationToken: pageParam
|
|
44
47
|
};
|
|
45
|
-
case
|
|
46
|
-
if (pageParam.includes(
|
|
47
|
-
const [keyMarker, versionIdMarker] = pageParam.split(
|
|
48
|
+
case 'ListObjectVersions':
|
|
49
|
+
if (pageParam.includes('|')) {
|
|
50
|
+
const [keyMarker, versionIdMarker] = pageParam.split('|');
|
|
48
51
|
return {
|
|
49
|
-
...keyMarker &&
|
|
52
|
+
...keyMarker && '' !== keyMarker ? {
|
|
50
53
|
KeyMarker: keyMarker
|
|
51
54
|
} : {},
|
|
52
|
-
...versionIdMarker &&
|
|
55
|
+
...versionIdMarker && '' !== versionIdMarker ? {
|
|
53
56
|
VersionIdMarker: versionIdMarker
|
|
54
57
|
} : {}
|
|
55
58
|
};
|
|
@@ -65,10 +68,10 @@ function getPaginationParams(operationName, pageParam) {
|
|
|
65
68
|
}
|
|
66
69
|
function getNextPageToken(operationName, lastPage) {
|
|
67
70
|
switch(operationName){
|
|
68
|
-
case
|
|
71
|
+
case 'ListObjects':
|
|
69
72
|
return lastPage.IsTruncated ? lastPage.NextContinuationToken : void 0;
|
|
70
|
-
case
|
|
71
|
-
return lastPage.IsTruncated && (lastPage.NextKeyMarker || lastPage.NextVersionIdMarker) ? `${lastPage.NextKeyMarker ||
|
|
73
|
+
case 'ListObjectVersions':
|
|
74
|
+
return lastPage.IsTruncated && (lastPage.NextKeyMarker || lastPage.NextVersionIdMarker) ? `${lastPage.NextKeyMarker || ''}|${lastPage.NextVersionIdMarker || ''}` : void 0;
|
|
72
75
|
default:
|
|
73
76
|
return lastPage.IsTruncated ? lastPage.NextContinuationToken : void 0;
|
|
74
77
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { UseMutationOptions, UseMutationResult } from
|
|
2
|
-
import { EnhancedS3Error } from
|
|
1
|
+
import { type UseMutationOptions, type UseMutationResult } from '@tanstack/react-query';
|
|
2
|
+
import { type EnhancedS3Error } from '../../utils/errorHandling';
|
|
3
3
|
/**
|
|
4
4
|
* Factory function for creating S3 login mutation hooks
|
|
5
5
|
* This factory handles the special authentication case where we need
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { useMutation } from "@tanstack/react-query";
|
|
2
1
|
import { ListBucketsCommand } from "@aws-sdk/client-s3";
|
|
2
|
+
import { useMutation } from "@tanstack/react-query";
|
|
3
3
|
import { createS3OperationError } from "../../utils/errorHandling.js";
|
|
4
4
|
import { createS3Client } from "../../utils/s3Client.js";
|
|
5
5
|
function useCreateS3LoginHook(_Command, operationName) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import type { S3Client } from '@aws-sdk/client-s3';
|
|
2
|
+
import { type UseMutationOptions, type UseMutationResult } from '@tanstack/react-query';
|
|
3
|
+
import { type EnhancedS3Error } from '../../utils/errorHandling';
|
|
4
4
|
export declare function useCreateS3MutationHook<TInput extends object, TOutput>(Command: new (input: TInput) => any, operationName: string, invalidationKeys?: string[]): (options?: Omit<UseMutationOptions<TOutput, EnhancedS3Error, TInput>, "mutationFn">) => UseMutationResult<TOutput, EnhancedS3Error, TInput>;
|
|
5
5
|
export declare function useCreateS3FunctionMutationHook<TInput, TOutput>(operation: (s3Client: S3Client, input: TInput) => Promise<TOutput>, invalidationKeys?: string[]): (options?: Omit<UseMutationOptions<TOutput, EnhancedS3Error, TInput>, "mutationFn">) => UseMutationResult<TOutput, EnhancedS3Error, TInput>;
|