diff --git a/changelog/27019.txt b/changelog/27019.txt new file mode 100644 index 0000000000..722e0d46c9 --- /dev/null +++ b/changelog/27019.txt @@ -0,0 +1,3 @@ +```release-note:bug +ui: Fix link to v2 generic secrets engine from secrets list page. +``` \ No newline at end of file diff --git a/ui/app/models/secret-engine.js b/ui/app/models/secret-engine.js index 694beba449..ba43567567 100644 --- a/ui/app/models/secret-engine.js +++ b/ui/app/models/secret-engine.js @@ -148,6 +148,10 @@ export default class SecretEngineModel extends Model { const { engineRoute } = allEngines().find((engine) => engine.type === this.engineType); return `vault.cluster.secrets.backend.${engineRoute}`; } + if (this.isV2KV) { + // if it's KV v2 but not registered as an addon, it's type generic + return 'vault.cluster.secrets.backend.kv.list'; + } return `vault.cluster.secrets.backend.list-root`; } diff --git a/ui/app/routes/vault/cluster/secrets/backend/list.js b/ui/app/routes/vault/cluster/secrets/backend/list.js index 16dec5e90e..fe744044c3 100644 --- a/ui/app/routes/vault/cluster/secrets/backend/list.js +++ b/ui/app/routes/vault/cluster/secrets/backend/list.js @@ -96,6 +96,9 @@ export default Route.extend({ return this.router.transitionTo('vault.cluster.secrets.backend.kv.list-directory', backend, secret); } return this.router.transitionTo(`vault.cluster.secrets.backend.${engineRoute}`, backend); + } else if (secretEngine.isV2KV) { + // if it's KV v2 but not registered as an addon, it's type generic + return this.router.transitionTo('vault.cluster.secrets.backend.kv.list', backend); } const modelType = this.getModelType(backend, tab); return this.pathHelp.getNewModel(modelType, backend).then(() => { diff --git a/ui/tests/acceptance/secrets/backend/generic/secret-test.js b/ui/tests/acceptance/secrets/backend/generic/secret-test.js index 70f3b19d39..12def4d329 100644 --- a/ui/tests/acceptance/secrets/backend/generic/secret-test.js +++ b/ui/tests/acceptance/secrets/backend/generic/secret-test.js @@ -3,7 +3,8 @@ * SPDX-License-Identifier: BUSL-1.1 */ -import { currentRouteName, visit } from '@ember/test-helpers'; +import { click, currentRouteName, settled, visit } from '@ember/test-helpers'; +import { selectChoose } from 'ember-power-select/test-support'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; import { v4 as uuidv4 } from 'uuid'; @@ -63,7 +64,15 @@ module('Acceptance | secrets/generic/create', function (hooks) { // upgrade to version 2 generic mount `write sys/mounts/${path}/tune options=version=2`, ]); - await visit(`/vault/secrets/${path}/kv/list`); + await visit('/vault/secrets'); + await selectChoose('[data-test-component="search-select"]#filter-by-engine-name', path); + await settled(); + await click(`[data-test-secrets-backend-link="${path}"]`); + assert.strictEqual( + currentRouteName(), + 'vault.cluster.secrets.backend.kv.list', + 'navigates to the KV engine list page' + ); assert .dom(PAGE.list.item('foo')) @@ -77,6 +86,13 @@ module('Acceptance | secrets/generic/create', function (hooks) { }); assert.dom(PAGE.list.item()).exists({ count: 2 }, 'lists only the two secrets'); + await visit(`/vault/secrets/${path}/list`); + assert.strictEqual( + currentRouteName(), + 'vault.cluster.secrets.backend.kv.list', + 'redirects to the KV engine list page from generic list' + ); + // Clean up await runCmd(deleteEngineCmd(path)); });