diff --git a/ui/admin/app/abilities/storage-bucket.js b/ui/admin/app/abilities/storage-bucket.js index 692824422..e7cdf6fff 100644 --- a/ui/admin/app/abilities/storage-bucket.js +++ b/ui/admin/app/abilities/storage-bucket.js @@ -31,14 +31,12 @@ export default class OverrideStorageBucketAbility extends StorageBucketAbility { } /** - * TODO: Ensure that storage buckets may be deleted only if the + * This override ensures that storage buckets may be deleted only if the * session-recording feature flag is enabled. - * For now a storage bucket cannot be deleted. */ get canDelete() { - return false; - // return this.features.isEnabled('ssh-session-recording') - // ? super.canDelete - // : false; + return this.features.isEnabled('ssh-session-recording') + ? super.canDelete + : false; } } diff --git a/ui/admin/app/controllers/scopes/scope/storage-buckets/index.js b/ui/admin/app/controllers/scopes/scope/storage-buckets/index.js index 9357f11aa..d35475c25 100644 --- a/ui/admin/app/controllers/scopes/scope/storage-buckets/index.js +++ b/ui/admin/app/controllers/scopes/scope/storage-buckets/index.js @@ -47,6 +47,8 @@ export default class ScopesScopeStorageBucketsIndexController extends Controller @notifySuccess('notifications.delete-success') async delete(storageBucket) { await storageBucket.destroyRecord(); + await this.router.replaceWith('scopes.scope.storage-buckets'); + await this.router.refresh(); } /** diff --git a/ui/admin/app/templates/scopes/scope/storage-buckets/storage-bucket/index.hbs b/ui/admin/app/templates/scopes/scope/storage-buckets/storage-bucket/index.hbs index 742a227e2..b80fd22aa 100644 --- a/ui/admin/app/templates/scopes/scope/storage-buckets/storage-bucket/index.hbs +++ b/ui/admin/app/templates/scopes/scope/storage-buckets/storage-bucket/index.hbs @@ -16,6 +16,19 @@ + {{#if (can 'delete storage-bucket' @model)}} + + + + + + + {{/if}} + diff --git a/ui/admin/tests/acceptance/storage-buckets/delete-test.js b/ui/admin/tests/acceptance/storage-buckets/delete-test.js index 7fccc21a2..fffa6f727 100644 --- a/ui/admin/tests/acceptance/storage-buckets/delete-test.js +++ b/ui/admin/tests/acceptance/storage-buckets/delete-test.js @@ -2,19 +2,18 @@ * Copyright (c) HashiCorp, Inc. * SPDX-License-Identifier: BUSL-1.1 */ - -// TODO: Un-skip tests once delete storage bucket action is enabled. - -import { module, skip } from 'qunit'; +import { module, test } from 'qunit'; import { visit, click, currentURL } from '@ember/test-helpers'; import { setupApplicationTest } from 'ember-qunit'; import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; import { Response } from 'miragejs'; import { authenticateSession } from 'ember-simple-auth/test-support'; +import { setupIndexedDb } from 'api/test-support/helpers/indexed-db'; module('Acceptance | storage-buckets | delete', function (hooks) { setupApplicationTest(hooks); setupMirage(hooks); + setupIndexedDb(hooks); let intl; let features; @@ -62,10 +61,10 @@ module('Acceptance | storage-buckets | delete', function (hooks) { features.enable('ssh-session-recording'); }); - skip('user can delete a storage bucket', async function (assert) { + test('user can delete a storage bucket', async function (assert) { const storageBucketCount = getStorageBucketCount(); await visit(urls.globalScope); - + assert.true(instances.storageBucket.authorized_actions.includes('delete')); await click(`[href="${urls.storageBuckets}"]`); await click(DROPDOWN_BUTTON_SELECTOR); await click(DELETE_DROPDOWN_SELECTOR); @@ -74,7 +73,7 @@ module('Acceptance | storage-buckets | delete', function (hooks) { assert.strictEqual(getStorageBucketCount(), storageBucketCount - 1); }); - skip('user can accept delete storage bucket via dialog', async function (assert) { + test('user can accept delete storage bucket via dialog', async function (assert) { const confirmService = this.owner.lookup('service:confirm'); confirmService.enabled = true; const storageBucketCount = getStorageBucketCount(); @@ -95,7 +94,7 @@ module('Acceptance | storage-buckets | delete', function (hooks) { assert.strictEqual(getStorageBucketCount(), storageBucketCount - 1); }); - skip('user can cancel delete storage bucket via dialog', async function (assert) { + test('user can cancel delete storage bucket via dialog', async function (assert) { const confirmService = this.owner.lookup('service:confirm'); confirmService.enabled = true; const storageBucketCount = getStorageBucketCount(); @@ -126,7 +125,7 @@ module('Acceptance | storage-buckets | delete', function (hooks) { assert.strictEqual(getStorageBucketCount(), storageBucketCount); }); - skip('user cannot delete storage bucket without proper authorization', async function (assert) { + test('user cannot delete storage bucket without proper authorization', async function (assert) { await visit(urls.globalScope); instances.storageBucket.authorized_actions = instances.storageBucket.authorized_actions.filter( @@ -139,7 +138,7 @@ module('Acceptance | storage-buckets | delete', function (hooks) { assert.dom(DELETE_DROPDOWN_SELECTOR).doesNotExist(); }); - skip('deleting a storage bucket which errors displays error messages', async function (assert) { + test('deleting a storage bucket which errors displays error messages', async function (assert) { await visit(urls.globalScope); this.server.del('/storage-buckets/:id', () => { return new Response(