UI: Ember deprecations - transition methods part 1 (#25560)

This commit is contained in:
Chelsea Shaw
2024-02-22 13:18:06 -06:00
committed by GitHub
parent 60fb3c14d5
commit 6a17f2bace
44 changed files with 192 additions and 124 deletions

View File

@@ -4,25 +4,29 @@
*/
import Controller from '@ember/controller';
import { task } from 'ember-concurrency';
import { service } from '@ember/service';
export default Controller.extend({
router: service(),
showRoute: 'vault.cluster.access.identity.show',
showTab: 'details',
navAfterSave: task(function* ({ saveType, model }) {
const isDelete = saveType === 'delete';
const type = model.get('identityType');
const listRoutes = {
'entity-alias': 'vault.cluster.access.identity.aliases.index',
'group-alias': 'vault.cluster.access.identity.aliases.index',
group: 'vault.cluster.access.identity.index',
entity: 'vault.cluster.access.identity.index',
};
const routeName = listRoutes[type];
if (!isDelete) {
yield this.transitionToRoute(this.showRoute, model.id, this.showTab);
return;
}
yield this.transitionToRoute(routeName);
}),
actions: {
navAfterSave({ saveType, model }) {
const isDelete = saveType === 'delete';
const type = model.identityType;
const listRoutes = {
'entity-alias': 'vault.cluster.access.identity.aliases.index',
'group-alias': 'vault.cluster.access.identity.aliases.index',
group: 'vault.cluster.access.identity.index',
entity: 'vault.cluster.access.identity.index',
};
if (!isDelete) {
this.router.transitionTo(this.showRoute, model.id, this.showTab);
} else {
const routeName = listRoutes[type];
this.router.transitionTo(routeName);
}
},
},
});

View File

@@ -4,11 +4,13 @@
*/
import Controller from '@ember/controller';
import { service } from '@ember/service';
export default Controller.extend({
router: service(),
actions: {
lookupLease(id) {
this.transitionToRoute('vault.cluster.access.leases.show', id);
this.router.transitionTo('vault.cluster.access.leases.show', id);
},
},
});

View File

@@ -11,6 +11,7 @@ import { keyIsFolder } from 'core/utils/key-utils';
export default Controller.extend(ListController, {
flashMessages: service(),
router: service(),
store: service(),
clusterController: controller('vault.cluster'),
@@ -61,7 +62,7 @@ export default Controller.extend(ListController, {
const fn = adapter[method];
fn.call(adapter, prefix)
.then(() => {
return this.transitionToRoute('vault.cluster.access.leases.list-root').then(() => {
return this.router.transitionTo('vault.cluster.access.leases.list-root').then(() => {
this.flashMessages.success(`All of the leases under ${prefix} will be revoked.`);
});
})

View File

@@ -21,11 +21,12 @@ export default Controller.extend({
}),
flashMessages: service(),
router: service(),
actions: {
revokeLease(model) {
return model.destroyRecord().then(() => {
return this.transitionToRoute('vault.cluster.access.leases.list-root');
return this.router.transitionTo('vault.cluster.access.leases.list-root');
});
},

View File

@@ -7,12 +7,13 @@ import { service } from '@ember/service';
import Controller from '@ember/controller';
export default Controller.extend({
namespaceService: service('namespace'),
router: service(),
actions: {
onSave({ saveType }) {
if (saveType === 'save') {
// fetch new namespaces for the namespace picker
this.namespaceService.findNamespacesForUser.perform();
return this.transitionToRoute('vault.cluster.access.namespaces.index');
return this.router.transitionTo('vault.cluster.access.namespaces.index');
}
},
},

View File

@@ -4,13 +4,15 @@
*/
import Controller from '@ember/controller';
import { service } from '@ember/service';
export default Controller.extend({
router: service(),
queryParams: ['action'],
action: '',
actions: {
onPromote() {
this.transitionToRoute('vault.cluster.replication.mode.index', 'dr');
this.router.transitionTo('vault.cluster.replication.mode.index', 'dr');
},
},
});

View File

@@ -4,11 +4,14 @@
*/
import Controller from '@ember/controller';
import { service } from '@ember/service';
export default Controller.extend({
router: service(),
actions: {
onMountSuccess: function (type, path) {
const transition = this.transitionToRoute('vault.cluster.settings.auth.configure', path);
const transition = this.router.transitionTo('vault.cluster.settings.auth.configure', path);
return transition.followRedirects();
},
},

View File

@@ -42,9 +42,11 @@ export default Mixin.create({
transition.targetName !== CLUSTER_INDEX &&
!isExcluded
) {
return this.transitionTo(targetRoute, { queryParams: { redirect_to: this.router.currentURL } });
return this.router.transitionTo(targetRoute, {
queryParams: { redirect_to: this.router.currentURL },
});
}
return this.transitionTo(targetRoute);
return this.router.transitionTo(targetRoute);
}
return RSVP.resolve();

View File

@@ -28,14 +28,15 @@ export const getManagedNamespace = (nsParam, root) => {
};
export default Route.extend(ModelBoundaryRoute, ClusterRoute, {
namespaceService: service('namespace'),
version: service(),
permissions: service(),
store: service(),
auth: service(),
currentCluster: service(),
customMessages: service(),
featureFlagService: service('featureFlag'),
currentCluster: service(),
namespaceService: service('namespace'),
permissions: service(),
router: service(),
store: service(),
version: service(),
modelTypes: computed(function () {
return ['node', 'secret', 'secret-engine'];
}),
@@ -69,12 +70,12 @@ export default Route.extend(ModelBoundaryRoute, ClusterRoute, {
namespace = storage?.userRootNamespace;
// only redirect if something other than nothing
if (namespace) {
this.transitionTo({ queryParams: { namespace } });
this.router.transitionTo({ queryParams: { namespace } });
}
} else if (managedRoot !== null) {
const managed = getManagedNamespace(namespace, managedRoot);
if (managed !== namespace) {
this.transitionTo({ queryParams: { namespace: managed } });
this.router.transitionTo({ queryParams: { namespace: managed } });
}
}
this.namespaceService.setNamespace(namespace);
@@ -126,7 +127,7 @@ export default Route.extend(ModelBoundaryRoute, ClusterRoute, {
// Check that namespaces is enabled and if not,
// clear the namespace by transition to this route w/o it
if (this.namespaceService.path && !this.version.hasNamespaces) {
return this.transitionTo(this.routeName, { queryParams: { namespace: '' } });
return this.router.transitionTo(this.routeName, { queryParams: { namespace: '' } });
}
return this.transitionToTargetRoute(transition);
},

View File

@@ -9,11 +9,12 @@ import { service } from '@ember/service';
export default Route.extend(UnloadModelRoute, {
store: service(),
router: service(),
beforeModel() {
const itemType = this.modelFor('vault.cluster.access.identity');
if (itemType !== 'entity') {
return this.transitionTo('vault.cluster.access.identity');
return this.router.transitionTo('vault.cluster.access.identity');
}
},

View File

@@ -12,6 +12,7 @@ import { TABS } from 'vault/helpers/tabs-for-identity-show';
import { service } from '@ember/service';
export default Route.extend({
router: service(),
store: service(),
model(params) {
@@ -58,7 +59,7 @@ export default Route.extend({
afterModel(resolvedModel) {
const { section, model } = resolvedModel;
if (model.get('identityType') === 'group' && model.get('type') === 'internal' && section === 'aliases') {
return this.transitionTo('vault.cluster.access.identity.show', model.id, 'details');
return this.router.transitionTo('vault.cluster.access.identity.show', model.id, 'details');
}
},

View File

@@ -4,16 +4,19 @@
*/
import Route from '@ember/routing/route';
import { service } from '@ember/service';
export default class LeasesIndexRoute extends Route {
@service router;
export default Route.extend({
beforeModel(transition) {
if (
this.modelFor('vault.cluster.access.leases').get('canList') &&
transition.targetName === this.routeName
) {
return this.replaceWith('vault.cluster.access.leases.list-root');
return this.router.replaceWith('vault.cluster.access.leases.list-root');
} else {
return;
}
},
});
}
}

View File

@@ -12,15 +12,16 @@ import UnloadModelRoute from 'vault/mixins/unload-model-route';
export default Route.extend(UnloadModelRoute, {
store: service(),
router: service(),
beforeModel() {
const { lease_id: leaseId } = this.paramsFor(this.routeName);
const parentKey = parentKeyForKey(leaseId);
if (keyIsFolder(leaseId)) {
if (parentKey) {
return this.transitionTo('vault.cluster.access.leases.list', parentKey);
return this.router.transitionTo('vault.cluster.access.leases.list', parentKey);
} else {
return this.transitionTo('vault.cluster.access.leases.list-root');
return this.router.transitionTo('vault.cluster.access.leases.list-root');
}
}
},

View File

@@ -4,12 +4,16 @@
*/
import Route from '@ember/routing/route';
import { service } from '@ember/service';
import { tabsForAuthSection } from 'vault/helpers/tabs-for-auth-section';
export default Route.extend({
export default class AccessMethodIndexRoute extends Route {
@service router;
beforeModel() {
let { methodType, paths } = this.modelFor('vault.cluster.access.method');
paths = paths ? paths.paths.filter((path) => path.navigation === true) : null;
const activeTab = tabsForAuthSection([methodType, 'authConfig', paths])[0].routeParams;
return this.transitionTo(...activeTab);
},
});
return this.router.transitionTo(...activeTab);
}
}

View File

@@ -7,6 +7,7 @@ import Route from '@ember/routing/route';
import { service } from '@ember/service';
export default class MfaConfigureRoute extends Route {
@service router;
@service store;
beforeModel() {
@@ -14,7 +15,7 @@ export default class MfaConfigureRoute extends Route {
.query('mfa-method', {})
.then(() => {
// if response then they should transition to the methods page instead of staying on the configure page.
this.transitionTo('vault.cluster.access.mfa.methods.index');
this.router.transitionTo('vault.cluster.access.mfa.methods.index');
})
.catch(() => {
// stay on the landing page

View File

@@ -4,9 +4,11 @@
*/
import Route from '@ember/routing/route';
import { service } from '@ember/service';
export default Route.extend({
export default class ClusterIndexRoute extends Route {
@service router;
beforeModel() {
return this.transitionTo('vault.cluster.dashboard');
},
});
return this.router.transitionTo('vault.cluster.dashboard');
}
}

View File

@@ -42,6 +42,7 @@ export default Route.extend(ModelBoundaryRoute, {
queryParams.namespace = ns;
}
if (Ember.testing) {
// TODO: cleanup this replaceWith instance. Using router.replaceWith causes test failures
// Don't redirect on the test
this.replaceWith('vault.cluster.auth', { queryParams });
} else {

View File

@@ -73,7 +73,7 @@ export default class VaultClusterOidcProviderRoute extends Route {
if (namespace) {
queryParams.namespace = namespace;
}
return this.transitionTo(AUTH, cluster_name, { queryParams });
return this.router.transitionTo(AUTH, cluster_name, { queryParams });
}
_buildUrl(urlString, params) {

View File

@@ -21,7 +21,7 @@ export default Route.extend(ClusterRoute, {
model(params) {
const policyType = params.type;
if (!ALLOWED_TYPES.includes(policyType)) {
return this.transitionTo(this.routeName, ALLOWED_TYPES[0]);
return this.router.transitionTo(this.routeName, ALLOWED_TYPES[0]);
}
return {};
},

View File

@@ -8,13 +8,14 @@ import Route from '@ember/routing/route';
import UnsavedModelRoute from 'vault/mixins/unsaved-model-route';
export default Route.extend(UnsavedModelRoute, {
router: service(),
store: service(),
version: service(),
model() {
const policyType = this.policyType();
if (!this.version.hasSentinel && policyType !== 'acl') {
return this.transitionTo('vault.cluster.policies', policyType);
return this.router.transitionTo('vault.cluster.policies', policyType);
}
return this.store.createRecord(`policy/${policyType}`, {});
},

View File

@@ -19,10 +19,10 @@ export default Route.extend(ClusterRoute, {
model(params) {
const policyType = params.type;
if (!ALLOWED_TYPES.includes(policyType)) {
return this.transitionTo('vault.cluster.policies', ALLOWED_TYPES[0]);
return this.router.transitionTo('vault.cluster.policies', ALLOWED_TYPES[0]);
}
if (!this.version.hasSentinel && policyType !== 'acl') {
return this.transitionTo('vault.cluster.policies', policyType);
return this.router.transitionTo('vault.cluster.policies', policyType);
}
return {};
},

View File

@@ -4,9 +4,12 @@
*/
import Route from '@ember/routing/route';
import { service } from '@ember/service';
export default class PolicyIndexRouter extends Route {
@service router;
export default Route.extend({
beforeModel() {
return this.transitionTo('vault.cluster.policies', 'acl');
},
});
return this.router.transitionTo('vault.cluster.policies', 'acl');
}
}

View File

@@ -9,13 +9,14 @@ import UnloadModelRoute from 'vault/mixins/unload-model-route';
import { service } from '@ember/service';
export default Route.extend(UnloadModelRoute, {
router: service(),
store: service(),
beforeModel() {
const params = this.paramsFor(this.routeName);
const policyType = this.policyType();
if (policyType === 'acl' && params.policy_name === 'root') {
return this.transitionTo('vault.cluster.policies', 'acl');
return this.router.transitionTo('vault.cluster.policies', 'acl');
}
},

View File

@@ -6,9 +6,10 @@
import { service } from '@ember/service';
import Route from '@ember/routing/route';
export default Route.extend({
store: service(),
flashMessages: service(),
router: service(),
secretMountPath: service(),
store: service(),
oldModel: null,
model(params) {
@@ -28,7 +29,7 @@ export default Route.extend({
afterModel(model, transition) {
const path = model && model.get('path');
if (transition.targetName === this.routeName) {
return this.replaceWith('vault.cluster.secrets.backend.list-root', path);
return this.router.replaceWith('vault.cluster.secrets.backend.list-root', path);
}
},
});

View File

@@ -21,9 +21,9 @@ export default EditBase.extend({
const { backend } = this.paramsFor('vault.cluster.secrets.backend');
if (this.backendType(backend) !== 'transit') {
if (parentKey) {
return this.transitionTo('vault.cluster.secrets.backend.show', parentKey);
return this.router.transitionTo('vault.cluster.secrets.backend.show', parentKey);
} else {
return this.transitionTo('vault.cluster.secrets.backend.show-root');
return this.router.transitionTo('vault.cluster.secrets.backend.show-root');
}
}
},

View File

@@ -4,13 +4,16 @@
*/
import Route from '@ember/routing/route';
import { service } from '@ember/service';
export default class SecretsBackendCreateRoute extends Route {
@service router;
export default Route.extend({
beforeModel() {
const { secret, initialKey } = this.paramsFor(this.routeName);
const qp = initialKey || secret;
return this.transitionTo('vault.cluster.secrets.backend.create-root', {
return this.router.transitionTo('vault.cluster.secrets.backend.create-root', {
queryParams: { initialKey: qp },
});
},
});
}
}

View File

@@ -13,6 +13,7 @@ const SUPPORTED_DYNAMIC_BACKENDS = ['database', 'ssh', 'aws'];
export default Route.extend({
templateName: 'vault/cluster/secrets/backend/credentials',
pathHelp: service('path-help'),
router: service(),
store: service(),
backendModel() {
@@ -65,7 +66,7 @@ export default Route.extend({
dbCred = await this.getDatabaseCredential(backendPath, role, roleType);
}
if (!SUPPORTED_DYNAMIC_BACKENDS.includes(backendModel.get('type'))) {
return this.transitionTo('vault.cluster.secrets.backend.list-root', backendPath);
return this.router.transitionTo('vault.cluster.secrets.backend.list-root', backendPath);
}
return resolve({
backendPath,

View File

@@ -4,9 +4,12 @@
*/
import Route from '@ember/routing/route';
import { service } from '@ember/service';
export default class BackendIndexRoute extends Route {
@service router;
export default Route.extend({
beforeModel() {
return this.replaceWith('vault.cluster.secrets.backend.list-root');
},
});
return this.router.replaceWith('vault.cluster.secrets.backend.list-root');
}
}

View File

@@ -83,20 +83,24 @@ export default Route.extend({
if (secretEngine.type === 'kv' && secretEngine.version === 2) {
// if no secret param redirect to the create route
// if secret param they are either viewing or editing secret so navigate to the details route
return !secret
? this.router.transitionTo('vault.cluster.secrets.backend.kv.create', secretEngine.id)
: this.router.transitionTo(
'vault.cluster.secrets.backend.kv.secret.details',
secretEngine.id,
secret
);
if (!secret) {
this.router.transitionTo('vault.cluster.secrets.backend.kv.create', secretEngine.id);
} else {
this.router.transitionTo(
'vault.cluster.secrets.backend.kv.secret.details',
secretEngine.id,
secret
);
}
return;
}
if (mode === 'edit' && keyIsFolder(secret)) {
if (parentKey) {
return this.router.transitionTo('vault.cluster.secrets.backend.list', encodePath(parentKey));
this.router.transitionTo('vault.cluster.secrets.backend.list', encodePath(parentKey));
} else {
return this.router.transitionTo('vault.cluster.secrets.backend.list-root');
this.router.transitionTo('vault.cluster.secrets.backend.list-root');
}
return;
}
});
},

View File

@@ -8,6 +8,7 @@ import UnloadModel from 'vault/mixins/unload-model-route';
import { service } from '@ember/service';
export default Route.extend(UnloadModel, {
router: service(),
store: service(),
templateName: 'vault/cluster/secrets/backend/sign',
@@ -31,11 +32,11 @@ export default Route.extend(UnloadModel, {
const backend = backendModel.get('id');
if (backendModel.get('type') !== 'ssh') {
return this.transitionTo('vault.cluster.secrets.backend.list-root', backend);
return this.router.transitionTo('vault.cluster.secrets.backend.list-root', backend);
}
return this.store.queryRecord('capabilities', this.pathQuery(role, backend)).then((capabilities) => {
if (!capabilities.get('canUpdate')) {
return this.transitionTo('vault.cluster.secrets.backend.list-root', backend);
return this.router.transitionTo('vault.cluster.secrets.backend.list-root', backend);
}
return this.store.createRecord('ssh-sign', {
role: {

View File

@@ -4,12 +4,15 @@
*/
import Route from '@ember/routing/route';
import { service } from '@ember/service';
import { tabsForAuthSection } from 'vault/helpers/tabs-for-auth-section';
export default Route.extend({
export default class SettingsAuthConfigureRoute extends Route {
@service router;
beforeModel() {
const model = this.modelFor('vault.cluster.settings.auth.configure');
const section = tabsForAuthSection([model]).firstObject.routeParams.lastObject;
return this.transitionTo('vault.cluster.settings.auth.configure.section', section);
},
});
return this.router.transitionTo('vault.cluster.settings.auth.configure.section', section);
}
}

View File

@@ -4,9 +4,12 @@
*/
import Route from '@ember/routing/route';
import { service } from '@ember/service';
export default class SettingsAuthIndexRouter extends Route {
@service router;
export default Route.extend({
beforeModel() {
return this.replaceWith('vault.cluster.settings.auth.enable');
},
});
return this.router.replaceWith('vault.cluster.settings.auth.enable');
}
}

View File

@@ -4,12 +4,15 @@
*/
import Route from '@ember/routing/route';
import { service } from '@ember/service';
export default Route.extend({
beforeModel: function (transition) {
export default class SettingsIndexRouter extends Route {
@service router;
beforeModel(transition) {
if (transition.targetName === this.routeName) {
transition.abort();
return this.replaceWith('vault.cluster.settings.mount-secret-backend');
return this.router.replaceWith('vault.cluster.settings.mount-secret-backend');
}
},
});
}
}

View File

@@ -7,14 +7,16 @@ import { service } from '@ember/service';
import Route from '@ember/routing/route';
import { toolsActions } from 'vault/helpers/tools-actions';
export default Route.extend({
currentCluster: service(),
export default class ToolsIndexRouter extends Route {
@service currentCluster;
@service router;
beforeModel(transition) {
const currentCluster = this.currentCluster.cluster.name;
const supportedActions = toolsActions();
if (transition.targetName === this.routeName) {
transition.abort();
return this.replaceWith('vault.cluster.tools.tool', currentCluster, supportedActions[0]);
return this.router.replaceWith('vault.cluster.tools.tool', currentCluster, supportedActions[0]);
}
},
});
}
}

View File

@@ -29,7 +29,12 @@
/>
{{/if}}
{{#if @item.canDelete}}
<dd.Interactive @text="Remove" @color="critical" {{on "click" (fn (mut this.showConfirmModal) true)}} />
<dd.Interactive
@text="Remove"
@color="critical"
{{on "click" (fn (mut this.showConfirmModal) true)}}
data-test-popup-menu="delete"
/>
{{/if}}
{{/if}}
</Hds::Dropdown>

View File

@@ -14,4 +14,4 @@
</p.levelLeft>
</PageHeader>
<Identity::EditForm @model={{this.model}} @onSave={{perform this.navAfterSave}} />
<Identity::EditForm @model={{this.model}} @onSave={{action "navAfterSave"}} />

View File

@@ -12,4 +12,4 @@
</p.levelLeft>
</PageHeader>
<Identity::EditForm @mode="edit" @model={{this.model}} @onSave={{perform this.navAfterSave}} />
<Identity::EditForm @mode="edit" @model={{this.model}} @onSave={{action "navAfterSave"}} />

View File

@@ -11,4 +11,4 @@
</h1>
</p.levelLeft>
</PageHeader>
<Identity::EditForm @model={{this.model}} @onSave={{perform this.navAfterSave}} />
<Identity::EditForm @model={{this.model}} @onSave={{action "navAfterSave"}} />

View File

@@ -12,4 +12,4 @@
</p.levelLeft>
</PageHeader>
<Identity::EditForm @mode="edit" @model={{this.model}} @onSave={{perform this.navAfterSave}} />
<Identity::EditForm @mode="edit" @model={{this.model}} @onSave={{action "navAfterSave"}} />

View File

@@ -11,4 +11,4 @@
</p.levelLeft>
</PageHeader>
<Identity::EditForm @mode="merge" @model={{this.model}} @onSave={{perform this.navAfterSave}} />
<Identity::EditForm @mode="merge" @model={{this.model}} @onSave={{action "navAfterSave"}} />

View File

@@ -3,12 +3,11 @@
* SPDX-License-Identifier: BUSL-1.1
*/
import { currentRouteName, settled } from '@ember/test-helpers';
import { currentRouteName, find, settled } from '@ember/test-helpers';
import page from 'vault/tests/pages/access/identity/aliases/add';
import aliasIndexPage from 'vault/tests/pages/access/identity/aliases/index';
import aliasShowPage from 'vault/tests/pages/access/identity/aliases/show';
import createItemPage from 'vault/tests/pages/access/identity/create';
import showItemPage from 'vault/tests/pages/access/identity/show';
export const testAliasCRUD = async function (name, itemType, assert) {
if (itemType === 'groups') {
@@ -18,8 +17,8 @@ export const testAliasCRUD = async function (name, itemType, assert) {
await createItemPage.createItem(itemType);
await settled();
}
let idRow = showItemPage.rows.filterBy('hasLabel').filterBy('rowLabel', 'ID')[0];
const itemID = idRow.rowValue;
const itemID = find('[data-test-row-value="ID"]').textContent.trim();
await page.visit({ item_type: itemType, id: itemID });
await settled();
await page.editForm.name(name).submit();
@@ -29,8 +28,7 @@ export const testAliasCRUD = async function (name, itemType, assert) {
`${itemType}: shows a flash message`
);
idRow = aliasShowPage.rows.filterBy('hasLabel').filterBy('rowLabel', 'ID')[0];
const aliasID = idRow.rowValue;
const aliasID = find('[data-test-row-value="ID"]').textContent.trim();
assert.strictEqual(
currentRouteName(),
'vault.cluster.access.identity.aliases.show',
@@ -73,14 +71,13 @@ export const testAliasDeleteFromForm = async function (name, itemType, assert) {
await createItemPage.createItem(itemType);
await settled();
}
let idRow = showItemPage.rows.filterBy('hasLabel').filterBy('rowLabel', 'ID')[0];
const itemID = idRow.rowValue;
const itemID = find('[data-test-row-value="ID"]').textContent.trim();
await page.visit({ item_type: itemType, id: itemID });
await settled();
await page.editForm.name(name).submit();
await settled();
idRow = aliasShowPage.rows.filterBy('hasLabel').filterBy('rowLabel', 'ID')[0];
const aliasID = idRow.rowValue;
const aliasID = find('[data-test-row-value="ID"]').textContent.trim();
await aliasShowPage.edit();
await settled();
assert.strictEqual(

View File

@@ -3,14 +3,13 @@
* SPDX-License-Identifier: BUSL-1.1
*/
import { module, skip, test } from 'qunit';
import { module, test } from 'qunit';
import { settled } from '@ember/test-helpers';
import { setupApplicationTest } from 'ember-qunit';
import { testAliasCRUD, testAliasDeleteFromForm } from '../../_shared-alias-tests';
import authPage from 'vault/tests/pages/auth';
module('Acceptance | /access/identity/entities/aliases/add', function (hooks) {
// TODO come back and figure out why this is failing. Seems to be a race condition
setupApplicationTest(hooks);
hooks.beforeEach(async function () {
@@ -18,7 +17,7 @@ module('Acceptance | /access/identity/entities/aliases/add', function (hooks) {
return;
});
skip('it allows create, list, delete of an entity alias', async function (assert) {
test('it allows create, list, delete of an entity alias', async function (assert) {
assert.expect(6);
const name = `alias-${Date.now()}`;
await testAliasCRUD(name, 'entities', assert);

View File

@@ -183,6 +183,8 @@ module('Acceptance | oidc provider', function (hooks) {
test('OIDC Provider redirects to auth if current token and prompt = login', async function (assert) {
const { providerName, callback, clientId, authMethodPath } = this.oidcSetupInformation;
await settled();
await visit('/vault/dashboard');
assert.strictEqual(currentURL(), '/vault/dashboard', 'User is logged in before oidc login attempt');
const url = getAuthzUrl(providerName, callback, clientId, { prompt: 'login' });
await visit(url);

View File

@@ -20,7 +20,12 @@ import sinon from 'sinon';
module('Unit | Mixin | cluster route', function () {
function createClusterRoute(
clusterModel = {},
methods = { router: {}, hasKeyData: () => false, authToken: () => null, transitionTo: () => {} }
methods = {
router: { transitionTo: () => {} },
hasKeyData: () => false,
authToken: () => null,
transitionTo: () => {},
}
) {
const ClusterRouteObject = EmberObject.extend(
ClusterRouteMixin,
@@ -132,7 +137,7 @@ module('Unit | Mixin | cluster route', function () {
const redirectRouteURL = '/vault/secrets/secret/create';
const subject = createClusterRoute({ needsInit: false, sealed: false });
subject.router.currentURL = redirectRouteURL;
const spy = sinon.spy(subject, 'transitionTo');
const spy = sinon.spy(subject.router, 'transitionTo');
subject.transitionToTargetRoute();
assert.ok(
spy.calledWithExactly(AUTH, { queryParams: { redirect_to: redirectRouteURL } }),
@@ -153,7 +158,7 @@ module('Unit | Mixin | cluster route', function () {
test('#transitionToTargetRoute with auth target, coming from cluster route', function (assert) {
const subject = createClusterRoute({ needsInit: false, sealed: false });
const spy = sinon.spy(subject, 'transitionTo');
const spy = sinon.spy(subject.router, 'transitionTo');
subject.transitionToTargetRoute({ targetName: CLUSTER_INDEX });
assert.ok(spy.calledWithExactly(AUTH), 'calls transitionTo without redirect_to');
spy.restore();