FIX: Empty param-inout form should reject submit (#309)
The `onSubmit` hook will only be triggered when the form is valid, so we need to clear the contents of `serializedData` in advance in `submit`. Otherwise, it may not throw a validation error.
This commit is contained in:
parent
5080ce9b1f
commit
6d179745ec
|
@ -278,6 +278,7 @@ export default class ParamInputForm extends Component {
|
|||
if (this.form == null) {
|
||||
throw "No form";
|
||||
}
|
||||
this.serializedData = null;
|
||||
await this.form.submit();
|
||||
if (this.serializedData == null) {
|
||||
throw new ParamValidationError("validation_failed");
|
||||
|
@ -293,7 +294,6 @@ export default class ParamInputForm extends Component {
|
|||
|
||||
@action
|
||||
onSubmit(data) {
|
||||
this.serializedData = null;
|
||||
const serializedData = {};
|
||||
for (const [id, val] of Object.entries(data)) {
|
||||
serializedData[id] =
|
||||
|
|
|
@ -91,7 +91,7 @@ export default class GroupReportsShowController extends Controller {
|
|||
} catch (error) {
|
||||
if (error.jqXHR?.status === 422 && error.jqXHR.responseJSON) {
|
||||
this.results = error.jqXHR.responseJSON;
|
||||
} else if (error instanceof ParamValidationError) {
|
||||
} else if (!(error instanceof ParamValidationError)) {
|
||||
popupAjaxError(error);
|
||||
}
|
||||
} finally {
|
||||
|
|
|
@ -169,4 +169,36 @@ module("Data Explorer Plugin | Component | param-input", function (hooks) {
|
|||
});
|
||||
}
|
||||
}
|
||||
|
||||
test("empty form will reject submit", async function (assert) {
|
||||
this.setProperties({
|
||||
param_info: [
|
||||
{
|
||||
identifier: "string",
|
||||
type: "string",
|
||||
default: null,
|
||||
nullable: false,
|
||||
},
|
||||
],
|
||||
initialValues: {},
|
||||
onRegisterApi: ({ submit }) => {
|
||||
this.submit = submit;
|
||||
},
|
||||
});
|
||||
|
||||
await render(hbs`
|
||||
<ParamInputForm
|
||||
@initialValues={{this.initialValues}}
|
||||
@paramInfo={{this.param_info}}
|
||||
@onRegisterApi={{this.onRegisterApi}}
|
||||
/>`);
|
||||
|
||||
assert.rejects(this.submit());
|
||||
|
||||
// After successfully submitting the test once, edit and submit again.
|
||||
await fillIn(`[name="string"]`, "foo");
|
||||
await this.submit();
|
||||
await fillIn(`[name="string"]`, "");
|
||||
assert.rejects(this.submit());
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue