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) {
|
if (this.form == null) {
|
||||||
throw "No form";
|
throw "No form";
|
||||||
}
|
}
|
||||||
|
this.serializedData = null;
|
||||||
await this.form.submit();
|
await this.form.submit();
|
||||||
if (this.serializedData == null) {
|
if (this.serializedData == null) {
|
||||||
throw new ParamValidationError("validation_failed");
|
throw new ParamValidationError("validation_failed");
|
||||||
|
@ -293,7 +294,6 @@ export default class ParamInputForm extends Component {
|
||||||
|
|
||||||
@action
|
@action
|
||||||
onSubmit(data) {
|
onSubmit(data) {
|
||||||
this.serializedData = null;
|
|
||||||
const serializedData = {};
|
const serializedData = {};
|
||||||
for (const [id, val] of Object.entries(data)) {
|
for (const [id, val] of Object.entries(data)) {
|
||||||
serializedData[id] =
|
serializedData[id] =
|
||||||
|
|
|
@ -91,7 +91,7 @@ export default class GroupReportsShowController extends Controller {
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (error.jqXHR?.status === 422 && error.jqXHR.responseJSON) {
|
if (error.jqXHR?.status === 422 && error.jqXHR.responseJSON) {
|
||||||
this.results = error.jqXHR.responseJSON;
|
this.results = error.jqXHR.responseJSON;
|
||||||
} else if (error instanceof ParamValidationError) {
|
} else if (!(error instanceof ParamValidationError)) {
|
||||||
popupAjaxError(error);
|
popupAjaxError(error);
|
||||||
}
|
}
|
||||||
} finally {
|
} 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