UI: Fix oidc auth method missing default_role field (#28539)

* add auth-config/oidc to openapi model helper

* alphabetize

* update maskedinput selector to be standard data-test-input

* add test

* add changelog

* fix maskedinput test and kv selector

* final textarea selector!
This commit is contained in:
claire bontempo
2024-10-01 09:21:16 -07:00
committed by GitHub
parent b195342e51
commit 71422d4cdd
21 changed files with 335 additions and 108 deletions

View File

@@ -6,13 +6,16 @@
import { module, test } from 'qunit';
import { setupRenderingTest } from 'ember-qunit';
import { render, focus, triggerKeyEvent, typeIn, fillIn, click } from '@ember/test-helpers';
import { create } from 'ember-cli-page-object';
import hbs from 'htmlbars-inline-precompile';
import sinon from 'sinon';
import maskedInput from 'vault/tests/pages/components/masked-input';
const component = create(maskedInput);
const SELECTORS = {
copyBtn: '[data-test-copy-button]',
downloadBtn: '[data-test-download-button]',
toggle: '[data-test-button="toggle-masked"]',
downloadIcon: '[data-test-download-icon]',
stringify: '[data-test-stringify-toggle]',
};
module('Integration | Component | masked input', function (hooks) {
setupRenderingTest(hooks);
@@ -26,14 +29,14 @@ module('Integration | Component | masked input', function (hooks) {
test('it renders', async function (assert) {
await render(hbs`<MaskedInput />`);
assert.dom('[data-test-masked-input]').exists('shows masked input');
assert.ok(component.textareaIsPresent);
assert.dom('[data-test-textarea]').hasClass('masked-font', 'it renders an input with obscure font');
assert.notOk(component.copyButtonIsPresent, 'does not render copy button by default');
assert.notOk(component.downloadButtonIsPresent, 'does not render download button by default');
assert.dom('textarea').exists();
assert.dom('textarea').hasClass('masked-font', 'it renders an input with obscure font');
assert.dom(SELECTORS.copyBtn).doesNotExist('does not render copy button by default');
assert.dom('[data-test-download-button]').doesNotExist('does not render download button by default');
await component.toggleMasked();
await click(SELECTORS.toggle);
assert.dom('.masked-value').doesNotHaveClass('masked-font', 'it unmasks when show button is clicked');
await component.toggleMasked();
await click(SELECTORS.toggle);
assert.dom('.masked-value').hasClass('masked-font', 'it remasks text when button is clicked');
});
@@ -42,21 +45,21 @@ module('Integration | Component | masked input', function (hooks) {
await render(hbs`<MaskedInput @displayOnly={{true}} @value={{this.value}} />`);
assert.dom('.masked-value').hasClass('masked-font', 'value has obscured font');
assert.notOk(component.textareaIsPresent, 'it does not render a textarea when displayOnly is true');
assert.dom('textarea').doesNotExist('it does not render a textarea when displayOnly is true');
});
test('it renders a copy button when allowCopy is true', async function (assert) {
this.set('value', { some: 'object' });
await render(hbs`<MaskedInput @allowCopy={{true}} @value={{this.value}} />`);
assert.ok(component.copyButtonIsPresent);
assert.dom(SELECTORS.copyBtn).exists();
});
test('it renders a download button when allowDownload is true', async function (assert) {
await render(hbs`<MaskedInput @allowDownload={{true}} /> `);
assert.ok(component.downloadIconIsPresent);
assert.dom(SELECTORS.downloadIcon).exists();
await click('[data-test-download-icon]');
assert.ok(component.downloadButtonIsPresent, 'clicking download icon opens modal with download button');
await click(SELECTORS.downloadIcon);
assert.dom(SELECTORS.downloadBtn).exists('clicking download icon opens modal with download button');
});
test('it shortens all outputs when displayOnly and masked', async function (assert) {
@@ -65,7 +68,7 @@ module('Integration | Component | masked input', function (hooks) {
const maskedValue = document.querySelector('.masked-value').innerText;
assert.strictEqual(maskedValue.length, 11);
await component.toggleMasked();
await click(SELECTORS.toggle);
const unMaskedValue = document.querySelector('.masked-value').innerText;
assert.strictEqual(unMaskedValue.length, this.value.length);
});
@@ -83,7 +86,7 @@ module('Integration | Component | masked input', function (hooks) {
this.set('value', 'before');
this.set('onChange', changeSpy);
await render(hbs`<MaskedInput @value={{this.value}} @onChange={{this.onChange}} />`);
await fillIn('[data-test-textarea]', 'after');
await fillIn('textarea', 'after');
assert.true(changeSpy.calledWith('after'));
});
@@ -92,7 +95,7 @@ module('Integration | Component | masked input', function (hooks) {
this.set('value', '');
this.set('onKeyUp', keyupSpy);
await render(hbs`<MaskedInput @name="foo" @value={{this.value}} @onKeyUp={{this.onKeyUp}} />`);
await typeIn('[data-test-textarea]', 'baz');
await typeIn('textarea', 'baz');
assert.true(keyupSpy.calledThrice, 'calls for each letter of typing');
assert.true(keyupSpy.firstCall.calledWithExactly('foo', 'b'));
assert.true(keyupSpy.secondCall.calledWithExactly('foo', 'ba'));
@@ -102,8 +105,8 @@ module('Integration | Component | masked input', function (hooks) {
test('it does not remove value on tab', async function (assert) {
this.set('value', 'hello');
await render(hbs`<MaskedInput @value={{this.value}} />`);
await triggerKeyEvent('[data-test-textarea]', 'keydown', 9);
await component.toggleMasked();
await triggerKeyEvent('textarea', 'keydown', 9);
await click(SELECTORS.toggle);
const unMaskedValue = document.querySelector('.masked-value').value;
assert.strictEqual(unMaskedValue, this.value);
});
@@ -119,11 +122,11 @@ module('Integration | Component | masked input', function (hooks) {
/>
`);
assert.dom('[data-test-masked-input]').exists('shows masked input');
assert.ok(component.copyButtonIsPresent);
assert.ok(component.downloadIconIsPresent);
assert.dom('[data-test-button="toggle-masked"]').exists('shows toggle mask button');
assert.dom(SELECTORS.copyBtn).exists();
assert.dom(SELECTORS.downloadIcon).exists();
assert.dom(SELECTORS.toggle).exists('shows toggle mask button');
await component.toggleMasked();
await click(SELECTORS.toggle);
assert.dom('.masked-value').doesNotHaveClass('masked-font', 'it unmasks when show button is clicked');
assert
.dom('[data-test-icon="minus"]')
@@ -154,12 +157,12 @@ module('Integration | Component | masked input', function (hooks) {
/>
`);
await click('[data-test-download-icon]');
assert.dom('[data-test-stringify-toggle]').isNotChecked('Stringify toggle off as default');
await click('[data-test-download-button]');
await click(SELECTORS.downloadIcon);
assert.dom(SELECTORS.stringify).isNotChecked('Stringify toggle off as default');
await click(SELECTORS.downloadBtn);
await click('[data-test-download-icon]');
await click('[data-test-stringify-toggle]');
await click('[data-test-download-button]');
await click(SELECTORS.downloadIcon);
await click(SELECTORS.stringify);
await click(SELECTORS.downloadBtn);
});
});