mirror of
https://github.com/hashicorp/vault.git
synced 2025-08-15 19:17:02 +02:00
* Adding explicit MPL license for sub-package. This directory and its subdirectories (packages) contain files licensed with the MPLv2 `LICENSE` file in this directory and are intentionally licensed separately from the BSL `LICENSE` file at the root of this repository. * Adding explicit MPL license for sub-package. This directory and its subdirectories (packages) contain files licensed with the MPLv2 `LICENSE` file in this directory and are intentionally licensed separately from the BSL `LICENSE` file at the root of this repository. * Updating the license from MPL to Business Source License. Going forward, this project will be licensed under the Business Source License v1.1. Please see our blog post for more details at https://hashi.co/bsl-blog, FAQ at www.hashicorp.com/licensing-faq, and details of the license at www.hashicorp.com/bsl. * add missing license headers * Update copyright file headers to BUS-1.1 * Fix test that expected exact offset on hcl file --------- Co-authored-by: hashicorp-copywrite[bot] <110428419+hashicorp-copywrite[bot]@users.noreply.github.com> Co-authored-by: Sarah Thompson <sthompson@hashicorp.com> Co-authored-by: Brian Kassouf <bkassouf@hashicorp.com>
202 lines
7.1 KiB
JavaScript
202 lines
7.1 KiB
JavaScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: BUSL-1.1
|
|
*/
|
|
|
|
import { module, test } from 'qunit';
|
|
import { setupRenderingTest } from 'ember-qunit';
|
|
import { render, fillIn, click, findAll } from '@ember/test-helpers';
|
|
import { hbs } from 'ember-cli-htmlbars';
|
|
import { setupMirage } from 'ember-cli-mirage/test-support';
|
|
import { SELECTORS, OIDC_BASE_URL, overrideCapabilities } from 'vault/tests/helpers/oidc-config';
|
|
|
|
module('Integration | Component | oidc/scope-form', function (hooks) {
|
|
setupRenderingTest(hooks);
|
|
setupMirage(hooks);
|
|
|
|
hooks.beforeEach(function () {
|
|
this.store = this.owner.lookup('service:store');
|
|
});
|
|
|
|
test('it should save new scope', async function (assert) {
|
|
assert.expect(9);
|
|
|
|
this.server.post('/identity/oidc/scope/test', (schema, req) => {
|
|
assert.ok(true, 'Request made to save scope');
|
|
return JSON.parse(req.requestBody);
|
|
});
|
|
|
|
this.model = this.store.createRecord('oidc/scope');
|
|
this.onSave = () => assert.ok(true, 'onSave callback fires on save success');
|
|
|
|
await render(hbs`
|
|
<Oidc::ScopeForm
|
|
@model={{this.model}}
|
|
@onCancel={{this.onCancel}}
|
|
@onSave={{this.onSave}}
|
|
/>
|
|
<div id="modal-wormhole"></div>
|
|
`);
|
|
|
|
assert.dom('[data-test-oidc-scope-title]').hasText('Create Scope', 'Form title renders');
|
|
assert.dom(SELECTORS.scopeSaveButton).hasText('Create', 'Save button has correct label');
|
|
await click(SELECTORS.scopeSaveButton);
|
|
|
|
// check validation errors
|
|
await click(SELECTORS.scopeSaveButton);
|
|
|
|
const validationErrors = findAll(SELECTORS.inlineAlert);
|
|
assert.dom(validationErrors[0]).hasText('Name is required.', 'Validation messages are shown for name');
|
|
assert.dom(validationErrors[1]).hasText('There is an error with this form.', 'Renders form error count');
|
|
|
|
assert
|
|
.dom('[data-test-inline-error-message]')
|
|
.hasText('Name is required.', 'Validation message is shown for name');
|
|
// json editor has test coverage so let's just confirm that it renders
|
|
assert
|
|
.dom('[data-test-input="template"] [data-test-component="json-editor-toolbar"]')
|
|
.exists('JsonEditor toolbar renders');
|
|
assert
|
|
.dom('[data-test-input="template"] [data-test-component="code-mirror-modifier"]')
|
|
.exists('Code mirror renders');
|
|
|
|
await fillIn('[data-test-input="name"]', 'test');
|
|
await fillIn('[data-test-input="description"]', 'this is a test');
|
|
await click(SELECTORS.scopeSaveButton);
|
|
});
|
|
|
|
test('it should update scope', async function (assert) {
|
|
assert.expect(9);
|
|
|
|
this.server.post('/identity/oidc/scope/test', (schema, req) => {
|
|
assert.ok(true, 'Request made to save scope');
|
|
return JSON.parse(req.requestBody);
|
|
});
|
|
|
|
this.store.pushPayload('oidc/scope', {
|
|
modelName: 'oidc/scope',
|
|
name: 'test',
|
|
description: 'this is a test',
|
|
});
|
|
this.model = this.store.peekRecord('oidc/scope', 'test');
|
|
this.onSave = () => assert.ok(true, 'onSave callback fires on save success');
|
|
|
|
await render(hbs`
|
|
<Oidc::ScopeForm
|
|
@model={{this.model}}
|
|
@onCancel={{this.onCancel}}
|
|
@onSave={{this.onSave}}
|
|
/>
|
|
<div id="modal-wormhole"></div>
|
|
`);
|
|
|
|
assert.dom('[data-test-oidc-scope-title]').hasText('Edit Scope', 'Form title renders');
|
|
assert.dom(SELECTORS.scopeSaveButton).hasText('Update', 'Save button has correct label');
|
|
assert.dom('[data-test-input="name"]').isDisabled('Name input is disabled when editing');
|
|
assert.dom('[data-test-input="name"]').hasValue('test', 'Name input is populated with model value');
|
|
assert
|
|
.dom('[data-test-input="description"]')
|
|
.hasValue('this is a test', 'Description input is populated with model value');
|
|
// json editor has test coverage so let's just confirm that it renders
|
|
assert
|
|
.dom('[data-test-input="template"] [data-test-component="json-editor-toolbar"]')
|
|
.exists('JsonEditor toolbar renders');
|
|
assert
|
|
.dom('[data-test-input="template"] [data-test-component="code-mirror-modifier"]')
|
|
.exists('Code mirror renders');
|
|
|
|
await fillIn('[data-test-input="description"]', 'this is an edit test');
|
|
await click(SELECTORS.scopeSaveButton);
|
|
});
|
|
|
|
test('it should rollback attributes or unload record on cancel', async function (assert) {
|
|
assert.expect(4);
|
|
|
|
this.onCancel = () => assert.ok(true, 'onCancel callback fires');
|
|
|
|
this.model = this.store.createRecord('oidc/scope');
|
|
|
|
await render(hbs`
|
|
<Oidc::ScopeForm
|
|
@model={{this.model}}
|
|
@onCancel={{this.onCancel}}
|
|
@onSave={{this.onSave}}
|
|
/>
|
|
<div id="modal-wormhole"></div>
|
|
`);
|
|
|
|
await click(SELECTORS.scopeCancelButton);
|
|
assert.true(this.model.isDestroyed, 'New model is unloaded on cancel');
|
|
|
|
this.store.pushPayload('oidc/scope', {
|
|
modelName: 'oidc/scope',
|
|
name: 'test',
|
|
description: 'this is a test',
|
|
});
|
|
this.model = this.store.peekRecord('oidc/scope', 'test');
|
|
|
|
await render(hbs`
|
|
<Oidc::ScopeForm
|
|
@model={{this.model}}
|
|
@onCancel={{this.onCancel}}
|
|
@onSave={{this.onSave}}
|
|
/>
|
|
<div id="modal-wormhole"></div>
|
|
`);
|
|
|
|
await fillIn('[data-test-input="description"]', 'changed description attribute');
|
|
await click(SELECTORS.scopeCancelButton);
|
|
assert.strictEqual(
|
|
this.model.description,
|
|
'this is a test',
|
|
'Model attributes are rolled back on cancel'
|
|
);
|
|
});
|
|
|
|
test('it should show example template modal', async function (assert) {
|
|
assert.expect(6);
|
|
|
|
this.model = this.store.createRecord('oidc/scope');
|
|
|
|
await render(hbs`
|
|
<Oidc::ScopeForm
|
|
@model={{this.model}}
|
|
@onCancel={{this.onCancel}}
|
|
@onSave={{this.onSave}}
|
|
/>
|
|
<div id="modal-wormhole"></div>
|
|
`);
|
|
|
|
assert.dom('[data-test-modal-div]').doesNotHaveClass('is-active', 'Modal is hidden');
|
|
await click('[data-test-oidc-scope-example]');
|
|
assert.dom('[data-test-modal-div]').hasClass('is-active', 'Modal is shown');
|
|
assert.dom('[data-test-modal-title]').hasText('Scope template', 'Modal title renders');
|
|
assert
|
|
.dom('[data-test-modal-copy]')
|
|
.hasText('Example of a JSON template for scopes:', 'Modal copy renders');
|
|
assert.dom('.cm-string').hasText('"username"', 'Example template json renders');
|
|
await click('[data-test-close-modal]');
|
|
assert.dom('[data-test-modal-div]').doesNotHaveClass('is-active', 'Modal is hidden');
|
|
});
|
|
|
|
test('it should render error alerts when API returns an error', async function (assert) {
|
|
assert.expect(2);
|
|
this.model = this.store.createRecord('oidc/scope');
|
|
this.server.post('/sys/capabilities-self', () => overrideCapabilities(OIDC_BASE_URL + '/scopes'));
|
|
await render(hbs`
|
|
<Oidc::ScopeForm
|
|
@model={{this.model}}
|
|
@onCancel={{this.onCancel}}
|
|
@onSave={{this.onSave}}
|
|
/>
|
|
<div id="modal-wormhole"></div>
|
|
`);
|
|
await fillIn('[data-test-input="name"]', 'test-scope');
|
|
await click(SELECTORS.scopeSaveButton);
|
|
assert
|
|
.dom(SELECTORS.inlineAlert)
|
|
.hasText('There was an error submitting this form.', 'form error alert renders ');
|
|
assert.dom('[data-test-message-error]').exists('alert banner renders');
|
|
});
|
|
});
|