mirror of
https://github.com/hashicorp/vault.git
synced 2026-01-06 09:11:10 +01:00
UI: fixes validation bug in sign certificate form (#19280)
* move validations to base certificate * add test
This commit is contained in:
parent
fe7eedafc3
commit
85e851900a
@ -1,6 +1,5 @@
|
||||
import { attr } from '@ember-data/model';
|
||||
import { withFormFields } from 'vault/decorators/model-form-fields';
|
||||
import { withModelValidations } from 'vault/decorators/model-validations';
|
||||
import PkiCertificateBaseModel from './base';
|
||||
|
||||
const generateFromRole = [
|
||||
@ -20,11 +19,6 @@ const generateFromRole = [
|
||||
'More Options': ['format', 'privateKeyFormat'],
|
||||
},
|
||||
];
|
||||
const validations = {
|
||||
commonName: [{ type: 'presence', message: 'Common name is required.' }],
|
||||
};
|
||||
|
||||
@withModelValidations(validations)
|
||||
@withFormFields(null, generateFromRole)
|
||||
export default class PkiCertificateGenerateModel extends PkiCertificateBaseModel {
|
||||
getHelpUrl(backend) {
|
||||
|
||||
@ -9,10 +9,11 @@ import errorMessage from 'vault/utils/error-message';
|
||||
import FlashMessageService from 'vault/services/flash-messages';
|
||||
import DownloadService from 'vault/services/download';
|
||||
import PkiCertificateGenerateModel from 'vault/models/pki/certificate/generate';
|
||||
import PkiCertificateSignModel from 'vault/models/pki/certificate/sign';
|
||||
|
||||
interface Args {
|
||||
onSuccess: CallableFunction;
|
||||
model: PkiCertificateGenerateModel;
|
||||
model: PkiCertificateGenerateModel | PkiCertificateSignModel;
|
||||
type: string;
|
||||
}
|
||||
|
||||
@ -24,7 +25,6 @@ export default class PkiRoleGenerate extends Component<Args> {
|
||||
|
||||
@tracked errorBanner = '';
|
||||
@tracked invalidFormAlert = '';
|
||||
@tracked modelValidations = null;
|
||||
|
||||
get verb() {
|
||||
return this.args.type === 'sign' ? 'sign' : 'generate';
|
||||
@ -35,18 +35,12 @@ export default class PkiRoleGenerate extends Component<Args> {
|
||||
evt.preventDefault();
|
||||
this.errorBanner = '';
|
||||
const { model, onSuccess } = this.args;
|
||||
const { isValid, state, invalidFormMessage } = model.validate();
|
||||
|
||||
this.modelValidations = isValid ? null : state;
|
||||
this.invalidFormAlert = invalidFormMessage;
|
||||
|
||||
if (!isValid) return;
|
||||
|
||||
try {
|
||||
yield model.save();
|
||||
onSuccess();
|
||||
} catch (err) {
|
||||
this.errorBanner = errorMessage(err, `Could not ${this.verb} certificate. See Vault logs for details.`);
|
||||
this.invalidFormAlert = 'There was an error submitting this form.';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { module, test } from 'qunit';
|
||||
import { setupRenderingTest } from 'ember-qunit';
|
||||
import { render, fillIn, click } from '@ember/test-helpers';
|
||||
import { render, fillIn } from '@ember/test-helpers';
|
||||
import { hbs } from 'ember-cli-htmlbars';
|
||||
import { setupMirage } from 'ember-cli-mirage/test-support';
|
||||
import { setupEngine } from 'ember-engines/test-support';
|
||||
@ -69,27 +69,4 @@ module('Integration | Component | pki-role-generate', function (hooks) {
|
||||
assert.dom(SELECTORS.certificate).exists({ count: 1 }, 'shows certificate info row');
|
||||
assert.dom(SELECTORS.serialNumber).hasText('abcd-efgh-ijkl', 'shows serial number info row');
|
||||
});
|
||||
|
||||
test('it should display validation errors', async function (assert) {
|
||||
assert.expect(3);
|
||||
|
||||
await render(
|
||||
hbs`
|
||||
<div class="has-top-margin-xxl">
|
||||
<PkiRoleGenerate
|
||||
@model={{this.model}}
|
||||
@onSuccess={{this.onSuccess}}
|
||||
/>
|
||||
</div>
|
||||
`,
|
||||
{ owner: this.engine }
|
||||
);
|
||||
await click(SELECTORS.generateButton);
|
||||
|
||||
assert
|
||||
.dom(SELECTORS.commonNameInlineError)
|
||||
.hasText('Common name is required.', 'Common name validation error renders');
|
||||
assert.dom(SELECTORS.inlineAlert).hasText('There is an error with this form.', 'Alert renders');
|
||||
assert.dom(SELECTORS.commonNameErrorBorder).hasClass('has-error-border');
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,14 +1,10 @@
|
||||
import Model from '@ember-data/model';
|
||||
import { FormField } from 'vault/app-types';
|
||||
import PkiCertificateBaseModel from './base';
|
||||
|
||||
export default class PkiCertificateGenerateModel extends Model {
|
||||
export default class PkiCertificateGenerateModel extends PkiCertificateBaseModel {
|
||||
name: string;
|
||||
backend: string;
|
||||
serialNumber: string;
|
||||
certificate: string;
|
||||
formFields: FormField[];
|
||||
formFieldsGroup: {
|
||||
[k: string]: FormField[];
|
||||
}[];
|
||||
validate(): ModelValidations;
|
||||
}
|
||||
|
||||
3
ui/types/vault/models/pki/certificate/sign.d.ts
vendored
Normal file
3
ui/types/vault/models/pki/certificate/sign.d.ts
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
import PkiCertificateBaseModel from './base';
|
||||
|
||||
export default class PkiCertificateGenerateModel extends PkiCertificateBaseModel {}
|
||||
Loading…
x
Reference in New Issue
Block a user