From d29ef88baa0a5759f8f1a4c1110650c309d7fbdc Mon Sep 17 00:00:00 2001 From: dmcintyr-akamai Date: Wed, 22 Jan 2025 14:21:24 -0500 Subject: [PATCH 1/7] M3-7511 refactoring, add tests for landing page --- .../bucket-create-gen2.spec.ts | 82 ++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts index 100cda5dbac..ea614441159 100644 --- a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts +++ b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts @@ -8,6 +8,7 @@ import { mockGetBucketAccess, mockCreateBucketError, } from 'support/intercepts/object-storage'; +import { mockGetProfile } from 'support/intercepts/profile'; import { mockGetRegions } from 'support/intercepts/regions'; import { ui } from 'support/ui'; import { checkRateLimitsTable } from 'support/util/object-storage-gen2'; @@ -18,10 +19,11 @@ import { objectStorageEndpointsFactory, regionFactory, } from 'src/factories'; +import { profileFactory } from 'src/factories/profile'; import { chooseRegion } from 'support/util/regions'; import type { ACLType, ObjectStorageEndpoint } from '@linode/api-v4'; -describe('Object Storage Gen2 create bucket tests', () => { +xdescribe('Object Storage Gen2 create bucket tests', () => { beforeEach(() => { mockAppendFeatureFlags({ objMultiCluster: true, @@ -716,3 +718,81 @@ describe('Object Storage Gen2 create bucket tests', () => { }); }); }); + +/** + * When a restricted user navigates to object-storage/create, an error is shown in the "Create Bucket" drawer noting that the user does not have bucket creation permissions + */ +describe('Object Storage Gen2 create bucket modal has disabled fields', () => { + beforeEach(() => { + mockAppendFeatureFlags({ + objMultiCluster: true, + objectStorageGen2: { enabled: true }, + }).as('getFeatureFlags'); + mockGetAccount( + accountFactory.build({ + capabilities: [ + 'Object Storage', + 'Object Storage Endpoint Types', + 'Object Storage Access Key Regions', + ], + }) + ).as('getAccount'); + // restricted user + mockGetProfile( + profileFactory.build({ + email: 'mock-user@linode.com', + restricted: true, + }) + ).as('getProfile'); + }); + + //TODO: this test fails rn but this is the desired behavior + it('bucket landing page should have Create button disabled', () => { + cy.visitWithLogin('/object-storage/buckets'); + cy.wait(['@getFeatureFlags', '@getAccount', '@getProfile']); + cy.findByTestId('button').should('be.visible').should('be.disabled'); + }); + + //TODO: this test fails rn but this is the desired behavior + it('access keys landing page should have Create button disabled', () => { + cy.visitWithLogin('/object-storage/access-keys'); + cy.wait(['@getFeatureFlags', '@getAccount', '@getProfile']); + cy.findByTestId('button').should('be.visible').should('be.disabled'); + }); + + // bucket creation + it('create bucket form', () => { + cy.visitWithLogin('/object-storage/buckets/create'); + cy.wait(['@getFeatureFlags', '@getAccount', '@getProfile']); + + // error message + cy.findByTestId('notice-error').should('be.visible'); + cy.get('#label').should('be.visible').should('be.disabled'); + cy.findByTestId('region-select').within(() => { + cy.get('input').should('be.visible').should('be.disabled'); + }); + // submit button + // TODO: label/region inputs disabled but create button is ENabled? + cy.findByTestId('create-bucket-button') + .should('be.visible') + .should('be.enabled'); + }); + + // access keys creation + it('create access keys form', () => { + cy.visitWithLogin('/object-storage/access-keys/create'); + + cy.wait(['@getFeatureFlags', '@getAccount', '@getProfile']); + // error message + cy.findByTestId('notice-error-important').should('be.visible'); + // label + cy.get('#label').should('be.visible').should('be.disabled'); + // region + cy.findByTestId('region-select').within(() => { + cy.get('input').should('be.visible').should('be.disabled'); + }); + // submit button + // TODO: create button is disabled? + cy.findByTestId('submit').should('be.visible').should('be.disabled'); + }); +}); From 17a9a0abb84cb97d736978e6579c457dfef8235a Mon Sep 17 00:00:00 2001 From: dmcintyr-akamai Date: Wed, 22 Jan 2025 14:22:27 -0500 Subject: [PATCH 2/7] M3-7511 restore disabled tests --- .../e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts index ea614441159..55bcb0f93b0 100644 --- a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts +++ b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts @@ -23,7 +23,7 @@ import { profileFactory } from 'src/factories/profile'; import { chooseRegion } from 'support/util/regions'; import type { ACLType, ObjectStorageEndpoint } from '@linode/api-v4'; -xdescribe('Object Storage Gen2 create bucket tests', () => { +describe('Object Storage Gen2 create bucket tests', () => { beforeEach(() => { mockAppendFeatureFlags({ objMultiCluster: true, From f12d77983503cf68f1f90217fce29a81b5bf9390 Mon Sep 17 00:00:00 2001 From: dmcintyr-akamai Date: Wed, 22 Jan 2025 15:56:08 -0500 Subject: [PATCH 3/7] M3-7511 corrections --- .../objectStorageGen2/bucket-create-gen2.spec.ts | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts index 55bcb0f93b0..e3360379df2 100644 --- a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts +++ b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts @@ -746,20 +746,13 @@ describe('Object Storage Gen2 create bucket modal has disabled fields', () => { ).as('getProfile'); }); - //TODO: this test fails rn but this is the desired behavior - it('bucket landing page should have Create button disabled', () => { + //TODO: this test fails rn. why should create button be enabled on landing page but not modal? + xit('bucket landing page should have Create button disabled', () => { cy.visitWithLogin('/object-storage/buckets'); cy.wait(['@getFeatureFlags', '@getAccount', '@getProfile']); cy.findByTestId('button').should('be.visible').should('be.disabled'); }); - //TODO: this test fails rn but this is the desired behavior - it('access keys landing page should have Create button disabled', () => { - cy.visitWithLogin('/object-storage/access-keys'); - cy.wait(['@getFeatureFlags', '@getAccount', '@getProfile']); - cy.findByTestId('button').should('be.visible').should('be.disabled'); - }); - // bucket creation it('create bucket form', () => { cy.visitWithLogin('/object-storage/buckets/create'); @@ -771,8 +764,7 @@ describe('Object Storage Gen2 create bucket modal has disabled fields', () => { cy.findByTestId('region-select').within(() => { cy.get('input').should('be.visible').should('be.disabled'); }); - // submit button - // TODO: label/region inputs disabled but create button is ENabled? + // submit button should be enabled cy.findByTestId('create-bucket-button') .should('be.visible') .should('be.enabled'); From 55682fbd1aef0b8095fe87f018a964a07afd5ec7 Mon Sep 17 00:00:00 2001 From: dmcintyr-akamai Date: Thu, 23 Jan 2025 13:46:58 -0500 Subject: [PATCH 4/7] Added changeset: tests of object storage creation form for restricted user --- packages/manager/.changeset/pr-11560-tests-1737658018185.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/manager/.changeset/pr-11560-tests-1737658018185.md diff --git a/packages/manager/.changeset/pr-11560-tests-1737658018185.md b/packages/manager/.changeset/pr-11560-tests-1737658018185.md new file mode 100644 index 00000000000..cb78f899c6a --- /dev/null +++ b/packages/manager/.changeset/pr-11560-tests-1737658018185.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Tests +--- + +tests of object storage creation form for restricted user ([#11560](https://github.com/linode/manager/pull/11560)) From 072ce47380230fd30fb5417d8f6d305426c4bdac Mon Sep 17 00:00:00 2001 From: dmcintyr-akamai Date: Tue, 28 Jan 2025 13:01:20 -0500 Subject: [PATCH 5/7] M3-7511 edits after pr feedback --- .../bucket-access-keys-gen2.spec.ts | 47 +++++++++++++++++++ .../bucket-create-gen2.spec.ts | 37 +++------------ 2 files changed, 53 insertions(+), 31 deletions(-) diff --git a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-access-keys-gen2.spec.ts b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-access-keys-gen2.spec.ts index 057130a1a5f..11eac2d3923 100644 --- a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-access-keys-gen2.spec.ts +++ b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-access-keys-gen2.spec.ts @@ -1,7 +1,9 @@ import { mockGetAccount } from 'support/intercepts/account'; import { mockAppendFeatureFlags } from 'support/intercepts/feature-flags'; +import { mockGetProfile } from 'support/intercepts/profile'; import { mockGetAccessKeys } from 'support/intercepts/object-storage'; import { accountFactory, objectStorageKeyFactory } from 'src/factories'; +import { profileFactory } from 'src/factories/profile'; import { ui } from 'support/ui'; describe('Object Storage gen2 access keys tests', () => { @@ -85,3 +87,48 @@ describe('Object Storage gen2 access keys tests', () => { }); }); }); + +/** + * When a restricted user navigates to object-storage/access-keys/create, an error is shown in the "Create Access Key" drawer noting that the user does not have access key creation permissions + */ +describe('Object Storage Gen2 create access key modal has disabled fields for restricted user', () => { + beforeEach(() => { + mockAppendFeatureFlags({ + objMultiCluster: true, + objectStorageGen2: { enabled: true }, + }).as('getFeatureFlags'); + mockGetAccount( + accountFactory.build({ + capabilities: [ + 'Object Storage', + 'Object Storage Endpoint Types', + 'Object Storage Access Key Regions', + ], + }) + ).as('getAccount'); + // restricted user + mockGetProfile( + profileFactory.build({ + email: 'mock-user@linode.com', + restricted: true, + }) + ).as('getProfile'); + }); + + // access keys creation + it('create access keys form', () => { + cy.visitWithLogin('/object-storage/access-keys/create'); + + cy.wait(['@getFeatureFlags', '@getAccount', '@getProfile']); + // error message + cy.findByTestId('notice-error-important').should('be.visible'); + // label + cy.findByLabelText(/Label.*/) + .should('be.visible') + .should('be.disabled'); + // region + ui.regionSelect.find().should('be.visible').should('be.disabled'); + // submit button is disabled + cy.findByTestId('submit').should('be.visible').should('be.disabled'); + }); +}); diff --git a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts index e3360379df2..84d881731cc 100644 --- a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts +++ b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts @@ -720,9 +720,9 @@ describe('Object Storage Gen2 create bucket tests', () => { }); /** - * When a restricted user navigates to object-storage/create, an error is shown in the "Create Bucket" drawer noting that the user does not have bucket creation permissions + * When a restricted user navigates to object-storage/buckets/create, an error is shown in the "Create Bucket" drawer noting that the user does not have bucket creation permissions */ -describe('Object Storage Gen2 create bucket modal has disabled fields', () => { +describe('Object Storage Gen2 create bucket modal has disabled fields for restricted user', () => { beforeEach(() => { mockAppendFeatureFlags({ objMultiCluster: true, @@ -746,13 +746,6 @@ describe('Object Storage Gen2 create bucket modal has disabled fields', () => { ).as('getProfile'); }); - //TODO: this test fails rn. why should create button be enabled on landing page but not modal? - xit('bucket landing page should have Create button disabled', () => { - cy.visitWithLogin('/object-storage/buckets'); - cy.wait(['@getFeatureFlags', '@getAccount', '@getProfile']); - cy.findByTestId('button').should('be.visible').should('be.disabled'); - }); - // bucket creation it('create bucket form', () => { cy.visitWithLogin('/object-storage/buckets/create'); @@ -760,31 +753,13 @@ describe('Object Storage Gen2 create bucket modal has disabled fields', () => { // error message cy.findByTestId('notice-error').should('be.visible'); - cy.get('#label').should('be.visible').should('be.disabled'); - cy.findByTestId('region-select').within(() => { - cy.get('input').should('be.visible').should('be.disabled'); - }); + cy.findByLabelText(/Label.*/) + .should('be.visible') + .should('be.disabled'); + ui.regionSelect.find().should('be.visible').should('be.disabled'); // submit button should be enabled cy.findByTestId('create-bucket-button') .should('be.visible') .should('be.enabled'); }); - - // access keys creation - it('create access keys form', () => { - cy.visitWithLogin('/object-storage/access-keys/create'); - - cy.wait(['@getFeatureFlags', '@getAccount', '@getProfile']); - // error message - cy.findByTestId('notice-error-important').should('be.visible'); - // label - cy.get('#label').should('be.visible').should('be.disabled'); - // region - cy.findByTestId('region-select').within(() => { - cy.get('input').should('be.visible').should('be.disabled'); - }); - // submit button - // TODO: create button is disabled? - cy.findByTestId('submit').should('be.visible').should('be.disabled'); - }); }); From 618b0e975d32e36f34b5bb8d27ad1a1c3739d9ae Mon Sep 17 00:00:00 2001 From: dmcintyr-akamai Date: Wed, 29 Jan 2025 09:47:51 -0500 Subject: [PATCH 6/7] M3-7511 edits after pr comments --- .../bucket-access-keys-gen2.spec.ts | 23 ++++++++++++------- .../bucket-create-gen2.spec.ts | 23 ++++++++++++------- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-access-keys-gen2.spec.ts b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-access-keys-gen2.spec.ts index 11eac2d3923..d7da620f401 100644 --- a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-access-keys-gen2.spec.ts +++ b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-access-keys-gen2.spec.ts @@ -121,14 +121,21 @@ describe('Object Storage Gen2 create access key modal has disabled fields for re cy.wait(['@getFeatureFlags', '@getAccount', '@getProfile']); // error message - cy.findByTestId('notice-error-important').should('be.visible'); - // label - cy.findByLabelText(/Label.*/) + ui.drawer + .findByTitle('Create Access Key') .should('be.visible') - .should('be.disabled'); - // region - ui.regionSelect.find().should('be.visible').should('be.disabled'); - // submit button is disabled - cy.findByTestId('submit').should('be.visible').should('be.disabled'); + .within(() => { + cy.findByText( + /You don't have bucket_access to create an Access Key./ + ).should('be.visible'); + // label + cy.findByLabelText(/Label.*/) + .should('be.visible') + .should('be.disabled'); + // region + ui.regionSelect.find().should('be.visible').should('be.disabled'); + // submit button is disabled + cy.findByTestId('submit').should('be.visible').should('be.disabled'); + }); }); }); diff --git a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts index 84d881731cc..69aca1c76c6 100644 --- a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts +++ b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts @@ -752,14 +752,21 @@ describe('Object Storage Gen2 create bucket modal has disabled fields for restri cy.wait(['@getFeatureFlags', '@getAccount', '@getProfile']); // error message - cy.findByTestId('notice-error').should('be.visible'); - cy.findByLabelText(/Label.*/) - .should('be.visible') - .should('be.disabled'); - ui.regionSelect.find().should('be.visible').should('be.disabled'); - // submit button should be enabled - cy.findByTestId('create-bucket-button') + ui.drawer + .findByTitle('Create Bucket') .should('be.visible') - .should('be.enabled'); + .within(() => { + cy.findByText(/You don't have permissions to create a Bucket./).should( + 'be.visible' + ); + cy.findByLabelText(/Label.*/) + .should('be.visible') + .should('be.disabled'); + ui.regionSelect.find().should('be.visible').should('be.disabled'); + // submit button should be enabled + cy.findByTestId('create-bucket-button') + .should('be.visible') + .should('be.enabled'); + }); }); }); From 266cb6cd221603afa020943c5b86f91c8be2be2a Mon Sep 17 00:00:00 2001 From: dmcintyr-akamai Date: Wed, 29 Jan 2025 12:43:19 -0500 Subject: [PATCH 7/7] Update packages/manager/.changeset/pr-11560-tests-1737658018185.md Co-authored-by: Mariah Jacobs <114685994+mjac0bs@users.noreply.github.com> --- packages/manager/.changeset/pr-11560-tests-1737658018185.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/manager/.changeset/pr-11560-tests-1737658018185.md b/packages/manager/.changeset/pr-11560-tests-1737658018185.md index cb78f899c6a..e483721a885 100644 --- a/packages/manager/.changeset/pr-11560-tests-1737658018185.md +++ b/packages/manager/.changeset/pr-11560-tests-1737658018185.md @@ -2,4 +2,4 @@ "@linode/manager": Tests --- -tests of object storage creation form for restricted user ([#11560](https://github.com/linode/manager/pull/11560)) +Add Cypress tests for object storage creation form for restricted user ([#11560](https://github.com/linode/manager/pull/11560))