UI: fixes validation bug in sign certificate form (#19280)

* move validations to base certificate

* add test
This commit is contained in:
claire bontempo 2023-02-22 07:07:29 -08:00 committed by GitHub
parent fe7eedafc3
commit 85e851900a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 9 additions and 45 deletions

View File

@ -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) {

View File

@ -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.';
}
}

View File

@ -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');
});
});

View File

@ -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;
}

View File

@ -0,0 +1,3 @@
import PkiCertificateBaseModel from './base';
export default class PkiCertificateGenerateModel extends PkiCertificateBaseModel {}