From 35c2bab68e4892514d6634d998301c1f77db5887 Mon Sep 17 00:00:00 2001 From: hrao Date: Thu, 29 Aug 2024 21:53:04 +0530 Subject: [PATCH 1/5] upcoming:[M3-8485] - Browsing Buckets & Objects - Unit Tests --- .../BucketDetail/ObjectDetailsDrawer.test.tsx | 13 ++- .../BucketDetailsDrawer.test.tsx | 98 +++++++++++++++++++ .../BucketLanding/BucketDetailsDrawer.tsx | 7 +- 3 files changed, 114 insertions(+), 4 deletions(-) diff --git a/packages/manager/src/features/ObjectStorage/BucketDetail/ObjectDetailsDrawer.test.tsx b/packages/manager/src/features/ObjectStorage/BucketDetail/ObjectDetailsDrawer.test.tsx index 59b43fb96de..44d9d7418a9 100644 --- a/packages/manager/src/features/ObjectStorage/BucketDetail/ObjectDetailsDrawer.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketDetail/ObjectDetailsDrawer.test.tsx @@ -2,7 +2,7 @@ import { act, waitFor } from '@testing-library/react'; import * as React from 'react'; import { profileFactory } from 'src/factories'; -import { http, HttpResponse, server } from 'src/mocks/testServer'; +import { HttpResponse, http, server } from 'src/mocks/testServer'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { ObjectDetailsDrawer } from './ObjectDetailsDrawer'; @@ -64,4 +64,15 @@ describe('ObjectDetailsDrawer', () => { expect(queryByTestId('lastModified')).not.toBeInTheDocument(); }); }); + + it("doesn't show the ACL Switch for E2 and E3 buckets", async () => { + const { queryByLabelText } = renderWithTheme( + + ); + await waitFor(() => { + expect( + queryByLabelText('Access Control List (ACL)') + ).not.toBeInTheDocument(); + }); + }); }); diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx index 12fa33d91f1..d563c0e771c 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx @@ -4,6 +4,7 @@ import { vi } from 'vitest'; import { objectStorageBucketFactory, + objectStorageBucketFactoryGen2, profileFactory, regionFactory, } from 'src/factories'; @@ -200,3 +201,100 @@ describe('BucketDetailsDrawer: Legacy UI', () => { }); }); }); + +describe('BucketDetailDrawer: Gen2 UI', () => { + const e3Bucket = objectStorageBucketFactoryGen2.build(); + const e1Bucket = objectStorageBucketFactoryGen2.build({ + endpoint_type: 'E1', + }); + + const region = regionFactory.build({ + id: e3Bucket.region, + }); + + it('renders correctly when open', () => { + renderWithThemeAndHookFormContext({ + component: ( + + ), + options: { + flags: { objMultiCluster: false, objectStorageGen2: { enabled: true } }, + }, + }); + + expect(screen.getByText(e3Bucket.label)).toBeInTheDocument(); + expect(screen.getByTestId('createdTime')).toHaveTextContent( + 'Created: 2019-12-12' + ); + expect(screen.getByTestId('endpointType')).toHaveTextContent( + `Endpoint Type: E3` + ); + expect(screen.getByTestId('cluster')).toHaveTextContent(region.id); + expect(screen.getByText(e3Bucket.hostname)).toBeInTheDocument(); + expect(screen.getByText('1 MB')).toBeInTheDocument(); + expect(screen.getByText('103 objects')).toBeInTheDocument(); + }); + + it('doesnt show the CORS switch for E2 and E3 buckets', async () => { + const { getByText } = renderWithThemeAndHookFormContext({ + component: ( + + ), + options: { + flags: { objMultiCluster: false, objectStorageGen2: { enabled: true } }, + }, + }); + + expect( + getByText( + /CORS \(Cross Origin Sharing\) is not available for endpoint types E2 and E3./ + ) + ).toBeInTheDocument(); + }); + + it('renders the Bucket Rate Limit Table for E2 and E3 buckets', async () => { + const { getAllByRole } = renderWithThemeAndHookFormContext({ + component: ( + + ), + options: { + flags: { objMultiCluster: false, objectStorageGen2: { enabled: true } }, + }, + }); + + const rows = getAllByRole('row'); + expect(rows).toHaveLength(3); + }); + + it('renders the Bucket Rate Limit Text for E0 and E1 buckets', async () => { + const { getByText } = renderWithThemeAndHookFormContext({ + component: ( + + ), + options: { + flags: { objMultiCluster: false, objectStorageGen2: { enabled: true } }, + }, + }); + expect( + getByText( + /This endpoint type supports up to 750 Requests Per Second\(RPS\)./ + ) + ).toBeInTheDocument(); + }); +}); diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.tsx index 7b774484f9e..b925515d243 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.tsx @@ -141,7 +141,7 @@ export const BucketDetailsDrawer = React.memo( )} {/* @TODO OBJ Multicluster: use region instead of cluster if isObjMultiClusterEnabled to getBucketAccess and updateBucketAccess. */} - { + {Boolean(endpoint_type) && ( <> Bucket Rate Limits @@ -154,9 +154,9 @@ export const BucketDetailsDrawer = React.memo( Understand bucket rate limits. )} + - } - {} + )} {cluster && label && ( @@ -181,6 +181,7 @@ export const BucketDetailsDrawer = React.memo( payload ); }} + endpointType={endpoint_type} name={label} variant="bucket" /> From 57411a5d9346094865adfb7d61ae5170e19bdbee Mon Sep 17 00:00:00 2001 From: hrao Date: Fri, 30 Aug 2024 12:08:51 +0530 Subject: [PATCH 2/5] test: Unit test for 'Endpoint Type' column in the Bucket Landing Table --- .../BucketLanding/BucketTable.test.tsx | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketTable.test.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketTable.test.tsx index bbce7fa8900..39daeafe200 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketTable.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketTable.test.tsx @@ -1,7 +1,10 @@ import * as React from 'react'; -import { objectStorageBucketFactory } from 'src/factories'; -import { renderWithTheme, mockMatchMedia } from 'src/utilities/testHelpers'; +import { + objectStorageBucketFactory, + objectStorageBucketFactoryGen2, +} from 'src/factories'; +import { mockMatchMedia, renderWithTheme } from 'src/utilities/testHelpers'; import { BucketTable } from './BucketTable'; @@ -43,4 +46,19 @@ describe('BucketTable', () => { expect(getByText(bucket.label)).toBeVisible(); } }); + + it('renders "Endpoint Type" column when Gen 2 is enabled', () => { + const bucket = objectStorageBucketFactoryGen2.buildList(1); + const { getByText } = renderWithTheme( + + ); + expect(getByText('Endpoint Type')).toBeVisible(); + }); }); From 25d4b262680db38f0ecaf3c17eafbda7a4f93342 Mon Sep 17 00:00:00 2001 From: hrao Date: Mon, 2 Sep 2024 10:37:57 +0530 Subject: [PATCH 3/5] test: [M3-8485] - updated tests for object storage bucket feature --- .../BucketLanding/BucketDetailsDrawer.test.tsx | 8 ++++---- .../ObjectStorage/BucketLanding/BucketTable.test.tsx | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx index d563c0e771c..415919f4dca 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx @@ -239,7 +239,7 @@ describe('BucketDetailDrawer: Gen2 UI', () => { expect(screen.getByText('103 objects')).toBeInTheDocument(); }); - it('doesnt show the CORS switch for E2 and E3 buckets', async () => { + it("doesn't show the CORS switch for E2 and E3 buckets", async () => { const { getByText } = renderWithThemeAndHookFormContext({ component: ( { }); it('renders the Bucket Rate Limit Table for E2 and E3 buckets', async () => { - const { getAllByRole } = renderWithThemeAndHookFormContext({ + const { getByTestId } = renderWithThemeAndHookFormContext({ component: ( { }, }); - const rows = getAllByRole('row'); - expect(rows).toHaveLength(3); + const rateLimitTable = getByTestId('bucket-rate-limit-table'); + expect(rateLimitTable).toBeVisible(); }); it('renders the Bucket Rate Limit Text for E0 and E1 buckets', async () => { diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketTable.test.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketTable.test.tsx index 39daeafe200..c1f86d77f06 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketTable.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketTable.test.tsx @@ -60,5 +60,6 @@ describe('BucketTable', () => { /> ); expect(getByText('Endpoint Type')).toBeVisible(); + expect(getByText('Standard (E3)')).toBeVisible(); }); }); From da4b474bb7e6d27eeed6f2c15057b12a814d64c7 Mon Sep 17 00:00:00 2001 From: hrao Date: Tue, 10 Sep 2024 11:29:11 +0530 Subject: [PATCH 4/5] test: [M3-8485] fixed failing unit test --- .../ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx index 415919f4dca..cb7e45157c5 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx @@ -293,7 +293,7 @@ describe('BucketDetailDrawer: Gen2 UI', () => { }); expect( getByText( - /This endpoint type supports up to 750 Requests Per Second\(RPS\)./ + /This endpoint type supports up to 750 Requests Per Second \(RPS\)./ ) ).toBeInTheDocument(); }); From 8974ea41a7d26f46fdb12d9f33c0e56cec2513c0 Mon Sep 17 00:00:00 2001 From: hrao Date: Wed, 11 Sep 2024 13:34:04 +0530 Subject: [PATCH 5/5] test: [M3-8485] - udpated tests that need to wait for OBJGen2 flag --- .../BucketLanding/BucketDetailsDrawer.test.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx index cb7e45157c5..63b2a7929b3 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx @@ -261,7 +261,7 @@ describe('BucketDetailDrawer: Gen2 UI', () => { }); it('renders the Bucket Rate Limit Table for E2 and E3 buckets', async () => { - const { getByTestId } = renderWithThemeAndHookFormContext({ + const { findByTestId } = renderWithThemeAndHookFormContext({ component: ( { }, }); - const rateLimitTable = getByTestId('bucket-rate-limit-table'); + const rateLimitTable = await findByTestId('bucket-rate-limit-table'); expect(rateLimitTable).toBeVisible(); }); it('renders the Bucket Rate Limit Text for E0 and E1 buckets', async () => { - const { getByText } = renderWithThemeAndHookFormContext({ + const { findByText } = renderWithThemeAndHookFormContext({ component: ( { }, }); expect( - getByText( + await findByText( /This endpoint type supports up to 750 Requests Per Second \(RPS\)./ ) ).toBeInTheDocument();