mirror of
https://github.com/hashicorp/vault.git
synced 2026-05-05 04:16:31 +02:00
* dismisses wizards in ember tests * clears localStorage for tests that require intro pages * fixes version assertions in reduced disclosure tests * adds a wait for file upload in snapshots recovery test Co-authored-by: Jordan Reimer <zofskeez@gmail.com>
132 lines
4.1 KiB
JavaScript
132 lines
4.1 KiB
JavaScript
/**
|
|
* Copyright IBM Corp. 2016, 2025
|
|
* SPDX-License-Identifier: BUSL-1.1
|
|
*/
|
|
|
|
import { module, test } from 'qunit';
|
|
import { setupRenderingTest } from 'vault/tests/helpers';
|
|
import { click, render } from '@ember/test-helpers';
|
|
import { hbs } from 'ember-cli-htmlbars';
|
|
import { setupMirage } from 'ember-cli-mirage/test-support';
|
|
import sinon from 'sinon';
|
|
import { GENERAL } from 'vault/tests/helpers/general-selectors';
|
|
|
|
const SELECTORS = {
|
|
intro: '[data-test-intro]',
|
|
};
|
|
|
|
const defaultMethodModel = {
|
|
methods: [
|
|
{
|
|
id: 'token/',
|
|
type: 'token',
|
|
path: 'token/',
|
|
methodType: 'token',
|
|
icon: 'token',
|
|
accessor: 'auth_token_12345',
|
|
},
|
|
],
|
|
capabilities: {},
|
|
};
|
|
|
|
const multipleMethodsModel = {
|
|
methods: [
|
|
{
|
|
id: 'token/',
|
|
type: 'token',
|
|
path: 'token/',
|
|
methodType: 'token',
|
|
icon: 'token',
|
|
accessor: 'auth_token_12345',
|
|
},
|
|
{
|
|
id: 'userpass/',
|
|
type: 'userpass',
|
|
path: 'userpass/',
|
|
methodType: 'userpass',
|
|
icon: 'user',
|
|
accessor: 'auth_userpass_67890',
|
|
},
|
|
],
|
|
capabilities: {},
|
|
};
|
|
|
|
module('Integration | Component | page/methods', function (hooks) {
|
|
setupRenderingTest(hooks);
|
|
setupMirage(hooks);
|
|
|
|
hooks.beforeEach(function () {
|
|
// clear local storage to reset dismissed wizard state
|
|
localStorage.clear();
|
|
|
|
this.breadcrumbs = [
|
|
{ label: 'Vault', route: 'vault.cluster.dashboard', icon: 'vault' },
|
|
{ label: 'Auth Methods' },
|
|
];
|
|
this.model = defaultMethodModel;
|
|
this.router = this.owner.lookup('service:router');
|
|
this.refreshSpy = sinon.stub(this.router, 'refresh');
|
|
this.wizardService = this.owner.lookup('service:wizard');
|
|
|
|
this.renderComponent = () => {
|
|
return render(hbs`
|
|
<Page::Methods
|
|
@model={{this.model}}
|
|
@breadcrumbs={{this.breadcrumbs}}
|
|
/>
|
|
`);
|
|
};
|
|
});
|
|
|
|
test('it shows wizard intro page initially when only default method exists', async function (assert) {
|
|
await this.renderComponent();
|
|
assert.false(this.wizardService.isDismissed('auth-methods'), 'Wizard is not dismissed initially');
|
|
assert.dom(SELECTORS.intro).exists('Auth Methods intro page is rendered');
|
|
});
|
|
|
|
test('it does not show intro page when dismissed', async function (assert) {
|
|
// Dismiss the wizard before rendering
|
|
this.wizardService.dismiss('auth-methods');
|
|
await this.renderComponent();
|
|
|
|
assert.true(this.wizardService.isDismissed('auth-methods'), 'Wizard is marked as dismissed');
|
|
assert.dom(SELECTORS.intro).doesNotExist('Auth Methods intro page is not rendered');
|
|
});
|
|
|
|
test('it does not show intro page when more than default method exists', async function (assert) {
|
|
this.model = multipleMethodsModel;
|
|
await this.renderComponent();
|
|
|
|
assert.dom(SELECTORS.intro).doesNotExist('Intro page is not rendered when custom methods exist');
|
|
assert.dom(GENERAL.button('intro')).doesNotExist('"New to Auth Methods?" button is not rendered');
|
|
});
|
|
|
|
test('it dismisses the intro page when clicking skip', async function (assert) {
|
|
await this.renderComponent();
|
|
|
|
assert.false(this.wizardService.isDismissed('auth-methods'), 'Intro page is not dismissed initially');
|
|
assert.dom(SELECTORS.intro).exists('intro page is rendered');
|
|
|
|
await click(GENERAL.button('Skip'));
|
|
|
|
assert.true(
|
|
this.wizardService.isDismissed('auth-methods'),
|
|
'Wizard was marked as dismissed after clicking Skip'
|
|
);
|
|
assert.true(this.refreshSpy.calledOnce, 'onRefresh callback was called');
|
|
assert.dom(SELECTORS.introButton).exists('"New to ACL Policies?" button is visible');
|
|
});
|
|
|
|
test('it re-renders the intro page as modal when clicking "New to Auth Methods?" button', async function (assert) {
|
|
// Dismiss the wizard first
|
|
this.wizardService.dismiss('auth-methods');
|
|
await this.renderComponent();
|
|
|
|
assert.dom(SELECTORS.intro).doesNotExist('Auth Methods intro page is not initially rendered');
|
|
await click(GENERAL.button('intro'));
|
|
|
|
assert.false(this.wizardService.isDismissed('auth-methods'), 'Wizard dismissal state was reset');
|
|
assert.dom(SELECTORS.intro).exists('Auth Methods intro page is now rendered as modal');
|
|
});
|
|
});
|