Evaluate custom validation rules first (#655)
This commit is contained in:
parent
1bddafbb3e
commit
3d9bc60ca1
|
|
@ -63,8 +63,14 @@ class AnswerFormRequest extends FormRequest
|
||||||
$property['logic'] = false;
|
$property['logic'] = false;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
// For get values instead of Id for select/multi select options
|
|
||||||
$data = $this->toArray();
|
$data = $this->toArray();
|
||||||
|
|
||||||
|
// User custom validation
|
||||||
|
if (!(Str::of($property['type'])->startsWith('nf-')) && isset($property['validation'])) {
|
||||||
|
$rules[] = (new CustomFieldValidationRule($property['validation'], $data));
|
||||||
|
}
|
||||||
|
|
||||||
|
// For get values instead of Id for select/multi select options
|
||||||
foreach ($selectionFields as $field) {
|
foreach ($selectionFields as $field) {
|
||||||
if (isset($data[$field['id']]) && is_array($data[$field['id']])) {
|
if (isset($data[$field['id']]) && is_array($data[$field['id']])) {
|
||||||
$data[$field['id']] = array_map(function ($val) use ($field) {
|
$data[$field['id']] = array_map(function ($val) use ($field) {
|
||||||
|
|
@ -109,11 +115,6 @@ class AnswerFormRequest extends FormRequest
|
||||||
$rules = array_merge($rules, $this->getPropertyRules($property));
|
$rules = array_merge($rules, $this->getPropertyRules($property));
|
||||||
}
|
}
|
||||||
|
|
||||||
// User custom validation
|
|
||||||
if (!(Str::of($property['type'])->startsWith('nf-')) && isset($property['validation'])) {
|
|
||||||
$rules[] = (new CustomFieldValidationRule($property['validation'], $data));
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->requestRules[$propertyId] = $rules;
|
$this->requestRules[$propertyId] = $rules;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -303,3 +303,51 @@ it('can validate form answer with precognition', function () {
|
||||||
$this->assertEquals(sizeof($errors), 1);
|
$this->assertEquals(sizeof($errors), 1);
|
||||||
$response->assertStatus(422);
|
$response->assertStatus(422);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
it('executes custom validation before required field validation', function () {
|
||||||
|
$user = $this->actingAsUser();
|
||||||
|
$workspace = $this->createUserWorkspace($user);
|
||||||
|
$form = $this->createForm($user, $workspace);
|
||||||
|
|
||||||
|
$emailField = collect($form->properties)->where('name', 'Email')->first();
|
||||||
|
$condition = [
|
||||||
|
'actions' => [],
|
||||||
|
'conditions' => [
|
||||||
|
'operatorIdentifier' => 'and',
|
||||||
|
'children' => [
|
||||||
|
[
|
||||||
|
'identifier' => $emailField['id'],
|
||||||
|
'value' => [
|
||||||
|
'operator' => 'contains',
|
||||||
|
'property_meta' => [
|
||||||
|
'id' => $emailField['id'],
|
||||||
|
'type' => 'email',
|
||||||
|
],
|
||||||
|
'value' => '@company.com',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$submissionData = [];
|
||||||
|
$validationMessage = 'Must use company email';
|
||||||
|
$form->properties = collect($form->properties)->map(function ($property) use (&$submissionData, &$condition, &$validationMessage, $emailField) {
|
||||||
|
if (in_array($property['name'], ['Name'])) {
|
||||||
|
$property['required'] = true;
|
||||||
|
$property['validation'] = ['error_conditions' => $condition, 'error_message' => $validationMessage];
|
||||||
|
$submissionData[$emailField['id']] = 'test@other.com';
|
||||||
|
}
|
||||||
|
return $property;
|
||||||
|
})->toArray();
|
||||||
|
$form->update();
|
||||||
|
|
||||||
|
$formData = FormSubmissionDataFactory::generateSubmissionData($form, $submissionData);
|
||||||
|
|
||||||
|
$this->postJson(route('forms.answer', $form->slug), $formData)
|
||||||
|
->assertStatus(422)
|
||||||
|
->assertJson([
|
||||||
|
'message' => $validationMessage,
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue