@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,13 +1,13 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import { fireEvent, render, screen, waitFor } from "@testing-library/react";
|
|
3
|
+
import { useGetBucketObjectLockConfiguration } from "../../hooks/bucketConfiguration.js";
|
|
4
|
+
import { useEmptyBucket } from "../../hooks/useEmptyBucket.js";
|
|
5
|
+
import { useIsBucketEmpty } from "../../hooks/useIsBucketEmpty.js";
|
|
3
6
|
import { createTestWrapper } from "../../test/testUtils.js";
|
|
4
7
|
import { EmptyBucketButton } from "../buckets/EmptyBucketButton.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
jest.mock("../../hooks/useIsBucketEmpty");
|
|
9
|
-
jest.mock("../../hooks/useEmptyBucket");
|
|
10
|
-
jest.mock("../../hooks/bucketConfiguration");
|
|
8
|
+
jest.mock('../../hooks/useIsBucketEmpty');
|
|
9
|
+
jest.mock('../../hooks/useEmptyBucket');
|
|
10
|
+
jest.mock('../../hooks/bucketConfiguration');
|
|
11
11
|
const mockUseIsBucketEmpty = jest.mocked(useIsBucketEmpty);
|
|
12
12
|
const mockUseEmptyBucket = jest.mocked(useEmptyBucket);
|
|
13
13
|
const mockUseGetBucketObjectLockConfiguration = jest.mocked(useGetBucketObjectLockConfiguration);
|
|
@@ -39,130 +39,130 @@ const mockHookDefaults = ()=>{
|
|
|
39
39
|
error: null
|
|
40
40
|
});
|
|
41
41
|
};
|
|
42
|
-
describe(
|
|
42
|
+
describe('EmptyBucketButton', ()=>{
|
|
43
43
|
beforeEach(()=>{
|
|
44
44
|
jest.clearAllMocks();
|
|
45
45
|
mockHookDefaults();
|
|
46
46
|
});
|
|
47
|
-
it(
|
|
47
|
+
it('renders empty button with correct label', ()=>{
|
|
48
48
|
renderEmptyBucketButton();
|
|
49
|
-
expect(screen.getByRole(
|
|
49
|
+
expect(screen.getByRole('button', {
|
|
50
50
|
name: /empty bucket/i
|
|
51
51
|
})).toBeInTheDocument();
|
|
52
52
|
});
|
|
53
|
-
it(
|
|
53
|
+
it('disables button when bucket is empty', ()=>{
|
|
54
54
|
mockUseIsBucketEmpty.mockReturnValue({
|
|
55
55
|
isEmpty: true,
|
|
56
56
|
isLoading: false,
|
|
57
57
|
error: null
|
|
58
58
|
});
|
|
59
59
|
renderEmptyBucketButton();
|
|
60
|
-
const button = screen.getByRole(
|
|
60
|
+
const button = screen.getByRole('button', {
|
|
61
61
|
name: /empty bucket/i
|
|
62
62
|
});
|
|
63
63
|
expect(button).toBeDisabled();
|
|
64
64
|
});
|
|
65
|
-
it(
|
|
65
|
+
it('enables button when bucket is not empty', ()=>{
|
|
66
66
|
mockUseIsBucketEmpty.mockReturnValue({
|
|
67
67
|
isEmpty: false,
|
|
68
68
|
isLoading: false,
|
|
69
69
|
error: null
|
|
70
70
|
});
|
|
71
71
|
renderEmptyBucketButton();
|
|
72
|
-
const button = screen.getByRole(
|
|
72
|
+
const button = screen.getByRole('button', {
|
|
73
73
|
name: /empty bucket/i
|
|
74
74
|
});
|
|
75
75
|
expect(button).not.toBeDisabled();
|
|
76
76
|
});
|
|
77
|
-
it(
|
|
77
|
+
it('opens confirmation modal when button is clicked', ()=>{
|
|
78
78
|
renderEmptyBucketButton();
|
|
79
|
-
const button = screen.getByRole(
|
|
79
|
+
const button = screen.getByRole('button', {
|
|
80
80
|
name: /empty bucket/i
|
|
81
81
|
});
|
|
82
82
|
fireEvent.click(button);
|
|
83
83
|
expect(screen.getByText(/Empty Bucket 'test-bucket'\?/i)).toBeInTheDocument();
|
|
84
84
|
expect(screen.getByText(/Emptying a bucket removes all contents and cannot be reversed/i)).toBeInTheDocument();
|
|
85
85
|
});
|
|
86
|
-
it(
|
|
86
|
+
it('shows information list in modal', ()=>{
|
|
87
87
|
renderEmptyBucketButton();
|
|
88
|
-
const button = screen.getByRole(
|
|
88
|
+
const button = screen.getByRole('button', {
|
|
89
89
|
name: /empty bucket/i
|
|
90
90
|
});
|
|
91
91
|
fireEvent.click(button);
|
|
92
92
|
expect(screen.getByText(/Emptying a bucket removes all contents and cannot be reversed/i)).toBeInTheDocument();
|
|
93
93
|
expect(screen.getByText(/New objects added during the empty action may also be removed/i)).toBeInTheDocument();
|
|
94
94
|
});
|
|
95
|
-
it(
|
|
95
|
+
it('shows confirmation input field', ()=>{
|
|
96
96
|
renderEmptyBucketButton();
|
|
97
|
-
const button = screen.getByRole(
|
|
97
|
+
const button = screen.getByRole('button', {
|
|
98
98
|
name: /empty bucket/i
|
|
99
99
|
});
|
|
100
100
|
fireEvent.click(button);
|
|
101
101
|
const input = screen.getByPlaceholderText(/test-bucket/i);
|
|
102
102
|
expect(input).toBeInTheDocument();
|
|
103
103
|
});
|
|
104
|
-
it(
|
|
104
|
+
it('disables empty button until bucket name is typed', ()=>{
|
|
105
105
|
renderEmptyBucketButton();
|
|
106
|
-
const button = screen.getByRole(
|
|
106
|
+
const button = screen.getByRole('button', {
|
|
107
107
|
name: /empty bucket/i
|
|
108
108
|
});
|
|
109
109
|
fireEvent.click(button);
|
|
110
|
-
const emptyButton = screen.getByRole(
|
|
110
|
+
const emptyButton = screen.getByRole('button', {
|
|
111
111
|
name: /^empty$/i
|
|
112
112
|
});
|
|
113
113
|
expect(emptyButton).toBeDisabled();
|
|
114
114
|
const input = screen.getByPlaceholderText(/test-bucket/i);
|
|
115
115
|
fireEvent.change(input, {
|
|
116
116
|
target: {
|
|
117
|
-
value:
|
|
117
|
+
value: 'test-bucket'
|
|
118
118
|
}
|
|
119
119
|
});
|
|
120
120
|
expect(emptyButton).not.toBeDisabled();
|
|
121
121
|
});
|
|
122
|
-
it(
|
|
122
|
+
it('closes modal when cancel is clicked', ()=>{
|
|
123
123
|
renderEmptyBucketButton();
|
|
124
|
-
const deleteButton = screen.getByRole(
|
|
124
|
+
const deleteButton = screen.getByRole('button', {
|
|
125
125
|
name: /empty bucket/i
|
|
126
126
|
});
|
|
127
127
|
fireEvent.click(deleteButton);
|
|
128
|
-
const cancelButton = screen.getByRole(
|
|
128
|
+
const cancelButton = screen.getByRole('button', {
|
|
129
129
|
name: /cancel/i
|
|
130
130
|
});
|
|
131
131
|
fireEvent.click(cancelButton);
|
|
132
132
|
expect(screen.queryByText(/Empty Bucket 'test-bucket'\?/i)).not.toBeInTheDocument();
|
|
133
133
|
});
|
|
134
|
-
it(
|
|
134
|
+
it('resets state when modal is cancelled', ()=>{
|
|
135
135
|
renderEmptyBucketButton();
|
|
136
|
-
const button = screen.getByRole(
|
|
136
|
+
const button = screen.getByRole('button', {
|
|
137
137
|
name: /empty bucket/i
|
|
138
138
|
});
|
|
139
139
|
fireEvent.click(button);
|
|
140
140
|
const input = screen.getByPlaceholderText(/test-bucket/i);
|
|
141
141
|
fireEvent.change(input, {
|
|
142
142
|
target: {
|
|
143
|
-
value:
|
|
143
|
+
value: 'test-bucket'
|
|
144
144
|
}
|
|
145
145
|
});
|
|
146
|
-
expect(input).toHaveValue(
|
|
147
|
-
const cancelButton = screen.getByRole(
|
|
146
|
+
expect(input).toHaveValue('test-bucket');
|
|
147
|
+
const cancelButton = screen.getByRole('button', {
|
|
148
148
|
name: /cancel/i
|
|
149
149
|
});
|
|
150
150
|
fireEvent.click(cancelButton);
|
|
151
151
|
fireEvent.click(button);
|
|
152
152
|
const inputAfterReopen = screen.getByPlaceholderText(/test-bucket/i);
|
|
153
|
-
expect(inputAfterReopen).toHaveValue(
|
|
153
|
+
expect(inputAfterReopen).toHaveValue('');
|
|
154
154
|
});
|
|
155
|
-
it(
|
|
155
|
+
it('displays correct bucket name in modal title', ()=>{
|
|
156
156
|
renderEmptyBucketButton({
|
|
157
|
-
bucketName:
|
|
157
|
+
bucketName: 'my-special-bucket'
|
|
158
158
|
});
|
|
159
|
-
const button = screen.getByRole(
|
|
159
|
+
const button = screen.getByRole('button', {
|
|
160
160
|
name: /empty bucket/i
|
|
161
161
|
});
|
|
162
162
|
fireEvent.click(button);
|
|
163
163
|
expect(screen.getByText(/Empty Bucket 'my-special-bucket'\?/i)).toBeInTheDocument();
|
|
164
164
|
});
|
|
165
|
-
it(
|
|
165
|
+
it('shows loading state during deletion', async ()=>{
|
|
166
166
|
const mockEmptyBucket = jest.fn();
|
|
167
167
|
mockUseEmptyBucket.mockReturnValue({
|
|
168
168
|
emptyBucket: mockEmptyBucket,
|
|
@@ -172,13 +172,13 @@ describe("EmptyBucketButton", ()=>{
|
|
|
172
172
|
reset: jest.fn()
|
|
173
173
|
});
|
|
174
174
|
renderEmptyBucketButton();
|
|
175
|
-
const button = screen.getByRole(
|
|
175
|
+
const button = screen.getByRole('button', {
|
|
176
176
|
name: /empty bucket/i
|
|
177
177
|
});
|
|
178
178
|
fireEvent.click(button);
|
|
179
179
|
expect(screen.getByText(/Deletion in progress.../i)).toBeInTheDocument();
|
|
180
180
|
});
|
|
181
|
-
it(
|
|
181
|
+
it('completes empty bucket operation successfully and shows summary', async ()=>{
|
|
182
182
|
const mockEmptyBucket = jest.fn().mockResolvedValue({
|
|
183
183
|
success: true,
|
|
184
184
|
deletedCount: 100,
|
|
@@ -193,48 +193,48 @@ describe("EmptyBucketButton", ()=>{
|
|
|
193
193
|
reset: jest.fn()
|
|
194
194
|
});
|
|
195
195
|
renderEmptyBucketButton();
|
|
196
|
-
const button = screen.getByRole(
|
|
196
|
+
const button = screen.getByRole('button', {
|
|
197
197
|
name: /empty bucket/i
|
|
198
198
|
});
|
|
199
199
|
fireEvent.click(button);
|
|
200
200
|
const input = screen.getByPlaceholderText(/test-bucket/i);
|
|
201
201
|
fireEvent.change(input, {
|
|
202
202
|
target: {
|
|
203
|
-
value:
|
|
203
|
+
value: 'test-bucket'
|
|
204
204
|
}
|
|
205
205
|
});
|
|
206
|
-
const emptyButton = screen.getByRole(
|
|
206
|
+
const emptyButton = screen.getByRole('button', {
|
|
207
207
|
name: /^empty$/i
|
|
208
208
|
});
|
|
209
209
|
fireEvent.click(emptyButton);
|
|
210
210
|
await waitFor(()=>{
|
|
211
|
-
expect(mockEmptyBucket).toHaveBeenCalledWith(
|
|
211
|
+
expect(mockEmptyBucket).toHaveBeenCalledWith('test-bucket');
|
|
212
212
|
});
|
|
213
213
|
});
|
|
214
|
-
it(
|
|
214
|
+
it('displays error when deletion fails', ()=>{
|
|
215
215
|
mockUseEmptyBucket.mockReturnValue({
|
|
216
216
|
emptyBucket: jest.fn(),
|
|
217
217
|
isEmptying: false,
|
|
218
|
-
error: new Error(
|
|
218
|
+
error: new Error('Network error'),
|
|
219
219
|
result: null,
|
|
220
220
|
reset: jest.fn()
|
|
221
221
|
});
|
|
222
222
|
renderEmptyBucketButton();
|
|
223
|
-
const button = screen.getByRole(
|
|
223
|
+
const button = screen.getByRole('button', {
|
|
224
224
|
name: /empty bucket/i
|
|
225
225
|
});
|
|
226
226
|
fireEvent.click(button);
|
|
227
227
|
expect(screen.getByText(/Network error/i)).toBeInTheDocument();
|
|
228
228
|
});
|
|
229
|
-
it(
|
|
229
|
+
it('calls emptyBucket when user confirms', async ()=>{
|
|
230
230
|
const mockEmptyBucket = jest.fn().mockResolvedValue({
|
|
231
231
|
success: false,
|
|
232
232
|
deletedCount: 50,
|
|
233
233
|
errors: [
|
|
234
234
|
{
|
|
235
|
-
key:
|
|
236
|
-
code:
|
|
237
|
-
message:
|
|
235
|
+
key: 'file1.txt',
|
|
236
|
+
code: 'AccessDenied',
|
|
237
|
+
message: 'Access denied'
|
|
238
238
|
}
|
|
239
239
|
],
|
|
240
240
|
limitReached: false
|
|
@@ -247,53 +247,53 @@ describe("EmptyBucketButton", ()=>{
|
|
|
247
247
|
reset: jest.fn()
|
|
248
248
|
});
|
|
249
249
|
renderEmptyBucketButton();
|
|
250
|
-
const button = screen.getByRole(
|
|
250
|
+
const button = screen.getByRole('button', {
|
|
251
251
|
name: /empty bucket/i
|
|
252
252
|
});
|
|
253
253
|
fireEvent.click(button);
|
|
254
254
|
const input = screen.getByPlaceholderText(/test-bucket/i);
|
|
255
255
|
fireEvent.change(input, {
|
|
256
256
|
target: {
|
|
257
|
-
value:
|
|
257
|
+
value: 'test-bucket'
|
|
258
258
|
}
|
|
259
259
|
});
|
|
260
|
-
const emptyButton = screen.getByRole(
|
|
260
|
+
const emptyButton = screen.getByRole('button', {
|
|
261
261
|
name: /^empty$/i
|
|
262
262
|
});
|
|
263
263
|
fireEvent.click(emptyButton);
|
|
264
264
|
await waitFor(()=>{
|
|
265
|
-
expect(mockEmptyBucket).toHaveBeenCalledWith(
|
|
265
|
+
expect(mockEmptyBucket).toHaveBeenCalledWith('test-bucket');
|
|
266
266
|
});
|
|
267
267
|
});
|
|
268
|
-
it(
|
|
268
|
+
it('displays Object Lock warning when enabled', ()=>{
|
|
269
269
|
mockUseGetBucketObjectLockConfiguration.mockReturnValue({
|
|
270
270
|
data: {
|
|
271
271
|
ObjectLockConfiguration: {
|
|
272
|
-
ObjectLockEnabled:
|
|
272
|
+
ObjectLockEnabled: 'Enabled'
|
|
273
273
|
}
|
|
274
274
|
},
|
|
275
275
|
isLoading: false,
|
|
276
276
|
error: null
|
|
277
277
|
});
|
|
278
278
|
renderEmptyBucketButton();
|
|
279
|
-
const button = screen.getByRole(
|
|
279
|
+
const button = screen.getByRole('button', {
|
|
280
280
|
name: /empty bucket/i
|
|
281
281
|
});
|
|
282
282
|
fireEvent.click(button);
|
|
283
283
|
expect(screen.getByText(/locked in governance mode/i)).toBeInTheDocument();
|
|
284
284
|
});
|
|
285
|
-
it(
|
|
285
|
+
it('does not show Object Lock warning when disabled', ()=>{
|
|
286
286
|
mockUseGetBucketObjectLockConfiguration.mockReturnValue({
|
|
287
287
|
data: {
|
|
288
288
|
ObjectLockConfiguration: {
|
|
289
|
-
ObjectLockEnabled:
|
|
289
|
+
ObjectLockEnabled: 'Disabled'
|
|
290
290
|
}
|
|
291
291
|
},
|
|
292
292
|
isLoading: false,
|
|
293
293
|
error: null
|
|
294
294
|
});
|
|
295
295
|
renderEmptyBucketButton();
|
|
296
|
-
const button = screen.getByRole(
|
|
296
|
+
const button = screen.getByRole('button', {
|
|
297
297
|
name: /empty bucket/i
|
|
298
298
|
});
|
|
299
299
|
fireEvent.click(button);
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import { fireEvent, render, screen, waitFor } from "@testing-library/react";
|
|
3
3
|
import user_event from "@testing-library/user-event";
|
|
4
|
-
import { MemoryRouter } from "react-router
|
|
5
|
-
import {
|
|
4
|
+
import { MemoryRouter } from "react-router";
|
|
5
|
+
import { createTestWrapper } from "../../test/testUtils.js";
|
|
6
6
|
import { MetadataSearch } from "../search/MetadataSearch.js";
|
|
7
7
|
const renderMetadataSearch = (props = {}, initialEntries = [
|
|
8
|
-
|
|
8
|
+
'/bucket/test-bucket'
|
|
9
9
|
])=>{
|
|
10
|
-
const
|
|
11
|
-
return render(/*#__PURE__*/ jsx(
|
|
10
|
+
const TestWrapper = createTestWrapper();
|
|
11
|
+
return render(/*#__PURE__*/ jsx(TestWrapper, {
|
|
12
12
|
children: /*#__PURE__*/ jsx(MemoryRouter, {
|
|
13
13
|
initialEntries: initialEntries,
|
|
14
14
|
children: /*#__PURE__*/ jsx(MetadataSearch, {
|
|
@@ -18,50 +18,50 @@ const renderMetadataSearch = (props = {}, initialEntries = [
|
|
|
18
18
|
})
|
|
19
19
|
}));
|
|
20
20
|
};
|
|
21
|
-
describe(
|
|
21
|
+
describe('MetadataSearch', ()=>{
|
|
22
22
|
const getInput = ()=>screen.getByPlaceholderText(/Metadata Search/i);
|
|
23
|
-
it(
|
|
23
|
+
it('renders search input with placeholder', ()=>{
|
|
24
24
|
renderMetadataSearch();
|
|
25
25
|
expect(getInput()).toBeInTheDocument();
|
|
26
26
|
expect(screen.getByPlaceholderText(/Metadata Search/i)).toBeInTheDocument();
|
|
27
27
|
});
|
|
28
|
-
it(
|
|
28
|
+
it('renders search button', ()=>{
|
|
29
29
|
renderMetadataSearch();
|
|
30
|
-
expect(screen.getByRole(
|
|
30
|
+
expect(screen.getByRole('button', {
|
|
31
31
|
name: /execute metadata search/i
|
|
32
32
|
})).toBeInTheDocument();
|
|
33
33
|
});
|
|
34
|
-
it(
|
|
34
|
+
it('search button is disabled when input is empty', ()=>{
|
|
35
35
|
renderMetadataSearch();
|
|
36
|
-
const searchButton = screen.getByRole(
|
|
36
|
+
const searchButton = screen.getByRole('button', {
|
|
37
37
|
name: /execute metadata search/i
|
|
38
38
|
});
|
|
39
39
|
expect(searchButton).toBeDisabled();
|
|
40
40
|
});
|
|
41
|
-
it(
|
|
41
|
+
it('search button is enabled when input has text', async ()=>{
|
|
42
42
|
renderMetadataSearch();
|
|
43
43
|
const input = getInput();
|
|
44
|
-
const searchButton = screen.getByRole(
|
|
44
|
+
const searchButton = screen.getByRole('button', {
|
|
45
45
|
name: /execute metadata search/i
|
|
46
46
|
});
|
|
47
|
-
await user_event.type(input,
|
|
47
|
+
await user_event.type(input, 'test query');
|
|
48
48
|
expect(searchButton).toBeEnabled();
|
|
49
49
|
});
|
|
50
|
-
it(
|
|
50
|
+
it('shows search icon by default', ()=>{
|
|
51
51
|
renderMetadataSearch();
|
|
52
52
|
const input = getInput();
|
|
53
53
|
const searchIcon = input.parentElement?.querySelector('[aria-label*="Search"]');
|
|
54
54
|
expect(searchIcon).toBeInTheDocument();
|
|
55
55
|
});
|
|
56
|
-
it(
|
|
56
|
+
it('shows check icon when metadata search is active', ()=>{
|
|
57
57
|
renderMetadataSearch({}, [
|
|
58
|
-
|
|
58
|
+
'/bucket/test-bucket?metadatasearch=test'
|
|
59
59
|
]);
|
|
60
60
|
const input = getInput();
|
|
61
61
|
const checkIcon = input.parentElement?.querySelector('[aria-label*="Check"]');
|
|
62
62
|
expect(checkIcon).toBeInTheDocument();
|
|
63
63
|
});
|
|
64
|
-
it(
|
|
64
|
+
it('shows error icon when error prop is true', ()=>{
|
|
65
65
|
renderMetadataSearch({
|
|
66
66
|
isError: true
|
|
67
67
|
});
|
|
@@ -69,133 +69,133 @@ describe("MetadataSearch", ()=>{
|
|
|
69
69
|
const errorIcon = input.parentElement?.querySelector('[aria-label*="Close"]');
|
|
70
70
|
expect(errorIcon).toBeInTheDocument();
|
|
71
71
|
});
|
|
72
|
-
it(
|
|
72
|
+
it('populates input with existing search query from URL', ()=>{
|
|
73
73
|
renderMetadataSearch({}, [
|
|
74
|
-
|
|
74
|
+
'/bucket/test-bucket?metadatasearch=existing+query'
|
|
75
75
|
]);
|
|
76
76
|
const input = getInput();
|
|
77
|
-
expect(input).toHaveValue(
|
|
77
|
+
expect(input).toHaveValue('existing query');
|
|
78
78
|
});
|
|
79
|
-
it(
|
|
79
|
+
it('shows reset button when input has text', async ()=>{
|
|
80
80
|
renderMetadataSearch();
|
|
81
81
|
const input = getInput();
|
|
82
|
-
await user_event.type(input,
|
|
83
|
-
expect(screen.getByRole(
|
|
82
|
+
await user_event.type(input, 'test query');
|
|
83
|
+
expect(screen.getByRole('button', {
|
|
84
84
|
name: /clear search input/i
|
|
85
85
|
})).toBeInTheDocument();
|
|
86
86
|
});
|
|
87
|
-
it(
|
|
87
|
+
it('clears input when reset button is clicked', async ()=>{
|
|
88
88
|
renderMetadataSearch();
|
|
89
89
|
const input = getInput();
|
|
90
|
-
await user_event.type(input,
|
|
91
|
-
const resetButton = screen.getByRole(
|
|
90
|
+
await user_event.type(input, 'test query');
|
|
91
|
+
const resetButton = screen.getByRole('button', {
|
|
92
92
|
name: /clear search input/i
|
|
93
93
|
});
|
|
94
94
|
fireEvent.click(resetButton);
|
|
95
|
-
expect(input).toHaveValue(
|
|
95
|
+
expect(input).toHaveValue('');
|
|
96
96
|
});
|
|
97
|
-
it(
|
|
97
|
+
it('shows hints when input is clicked and empty', async ()=>{
|
|
98
98
|
renderMetadataSearch();
|
|
99
99
|
const input = getInput();
|
|
100
100
|
fireEvent.click(input);
|
|
101
101
|
await waitFor(()=>{
|
|
102
|
-
expect(screen.getByText(
|
|
102
|
+
expect(screen.getByText('Suggestions')).toBeInTheDocument();
|
|
103
103
|
});
|
|
104
104
|
});
|
|
105
|
-
it(
|
|
105
|
+
it('does not show hints when input has text', async ()=>{
|
|
106
106
|
renderMetadataSearch();
|
|
107
107
|
const input = getInput();
|
|
108
|
-
await user_event.type(input,
|
|
108
|
+
await user_event.type(input, 'test');
|
|
109
109
|
fireEvent.click(input);
|
|
110
|
-
expect(screen.queryByText(
|
|
110
|
+
expect(screen.queryByText('Suggestions')).not.toBeInTheDocument();
|
|
111
111
|
});
|
|
112
|
-
it(
|
|
112
|
+
it('hides hints when clicking outside', async ()=>{
|
|
113
113
|
renderMetadataSearch();
|
|
114
114
|
const input = getInput();
|
|
115
115
|
fireEvent.click(input);
|
|
116
116
|
await waitFor(()=>{
|
|
117
|
-
expect(screen.getByText(
|
|
117
|
+
expect(screen.getByText('Suggestions')).toBeInTheDocument();
|
|
118
118
|
});
|
|
119
119
|
fireEvent.mouseDown(document.body);
|
|
120
120
|
await waitFor(()=>{
|
|
121
|
-
expect(screen.queryByText(
|
|
121
|
+
expect(screen.queryByText('Suggestions')).not.toBeInTheDocument();
|
|
122
122
|
});
|
|
123
123
|
});
|
|
124
|
-
it(
|
|
124
|
+
it('displays search hint examples', async ()=>{
|
|
125
125
|
renderMetadataSearch();
|
|
126
126
|
const input = getInput();
|
|
127
127
|
fireEvent.click(input);
|
|
128
128
|
await waitFor(()=>{
|
|
129
129
|
expect(screen.getByText('files with extension ".pdf"')).toBeInTheDocument();
|
|
130
|
-
expect(screen.getByText(
|
|
131
|
-
expect(screen.getByText(
|
|
130
|
+
expect(screen.getByText('files bigger than 1MB')).toBeInTheDocument();
|
|
131
|
+
expect(screen.getByText('files tagged with color blue')).toBeInTheDocument();
|
|
132
132
|
});
|
|
133
133
|
});
|
|
134
|
-
it(
|
|
134
|
+
it('applies hint to input when hint is clicked', async ()=>{
|
|
135
135
|
renderMetadataSearch();
|
|
136
136
|
const input = getInput();
|
|
137
137
|
fireEvent.click(input);
|
|
138
138
|
await waitFor(()=>{
|
|
139
|
-
expect(screen.getByText(
|
|
139
|
+
expect(screen.getByText('Suggestions')).toBeInTheDocument();
|
|
140
140
|
});
|
|
141
141
|
const pdfHint = screen.getByText('files with extension ".pdf"');
|
|
142
142
|
fireEvent.click(pdfHint);
|
|
143
|
-
expect(input).toHaveValue(
|
|
144
|
-
expect(screen.queryByText(
|
|
143
|
+
expect(input).toHaveValue('key like /pdf$/');
|
|
144
|
+
expect(screen.queryByText('Suggestions')).not.toBeInTheDocument();
|
|
145
145
|
});
|
|
146
|
-
it(
|
|
146
|
+
it('focuses input after hint is selected', async ()=>{
|
|
147
147
|
renderMetadataSearch();
|
|
148
148
|
const input = getInput();
|
|
149
149
|
fireEvent.click(input);
|
|
150
150
|
await waitFor(()=>{
|
|
151
|
-
expect(screen.getByText(
|
|
151
|
+
expect(screen.getByText('Suggestions')).toBeInTheDocument();
|
|
152
152
|
});
|
|
153
|
-
const hint = screen.getByText(
|
|
153
|
+
const hint = screen.getByText('files bigger than 1MB');
|
|
154
154
|
fireEvent.click(hint);
|
|
155
155
|
expect(input).toHaveFocus();
|
|
156
156
|
});
|
|
157
|
-
it(
|
|
157
|
+
it('submits search when form is submitted', async ()=>{
|
|
158
158
|
renderMetadataSearch();
|
|
159
159
|
const input = getInput();
|
|
160
|
-
const searchButton = screen.getByRole(
|
|
160
|
+
const searchButton = screen.getByRole('button', {
|
|
161
161
|
name: /execute metadata search/i
|
|
162
162
|
});
|
|
163
|
-
await user_event.type(input,
|
|
163
|
+
await user_event.type(input, 'content-type=application/pdf');
|
|
164
164
|
fireEvent.click(searchButton);
|
|
165
|
-
expect(input).toHaveValue(
|
|
165
|
+
expect(input).toHaveValue('content-type=application/pdf');
|
|
166
166
|
});
|
|
167
|
-
it(
|
|
167
|
+
it('submits search when Enter key is pressed', async ()=>{
|
|
168
168
|
renderMetadataSearch();
|
|
169
169
|
const input = getInput();
|
|
170
|
-
await user_event.type(input,
|
|
171
|
-
fireEvent.submit(input.closest(
|
|
172
|
-
expect(input).toHaveValue(
|
|
170
|
+
await user_event.type(input, 'key like /test$/');
|
|
171
|
+
fireEvent.submit(input.closest('form'));
|
|
172
|
+
expect(input).toHaveValue('key like /test$/');
|
|
173
173
|
});
|
|
174
|
-
it(
|
|
174
|
+
it('is hidden when prefix points to a file', ()=>{
|
|
175
175
|
const { container } = renderMetadataSearch({}, [
|
|
176
|
-
|
|
176
|
+
'/bucket/test-bucket?prefix=folder/file.txt'
|
|
177
177
|
]);
|
|
178
|
-
const form = container.querySelector(
|
|
178
|
+
const form = container.querySelector('form');
|
|
179
179
|
expect(form).toHaveStyle({
|
|
180
|
-
visibility:
|
|
180
|
+
visibility: 'hidden'
|
|
181
181
|
});
|
|
182
182
|
});
|
|
183
|
-
it(
|
|
183
|
+
it('is hidden when prefix is a folder', ()=>{
|
|
184
184
|
const { container } = renderMetadataSearch({}, [
|
|
185
|
-
|
|
185
|
+
'/bucket/test-bucket?prefix=folder/'
|
|
186
186
|
]);
|
|
187
|
-
const form = container.querySelector(
|
|
187
|
+
const form = container.querySelector('form');
|
|
188
188
|
expect(form).toHaveStyle({
|
|
189
|
-
visibility:
|
|
189
|
+
visibility: 'hidden'
|
|
190
190
|
});
|
|
191
191
|
});
|
|
192
|
-
it(
|
|
192
|
+
it('prevents search submission when prefix points to a file', async ()=>{
|
|
193
193
|
const { container } = renderMetadataSearch({}, [
|
|
194
|
-
|
|
194
|
+
'/bucket/test-bucket?prefix=folder/file.txt'
|
|
195
195
|
]);
|
|
196
196
|
const input = getInput();
|
|
197
197
|
const searchButton = container.querySelector('button[type="submit"]');
|
|
198
|
-
await user_event.type(input,
|
|
198
|
+
await user_event.type(input, 'test query');
|
|
199
199
|
expect(searchButton).toBeDisabled();
|
|
200
200
|
});
|
|
201
201
|
});
|