116 lines
4.0 KiB
PHP
116 lines
4.0 KiB
PHP
<?php
|
|
|
|
use Illuminate\Testing\Fluent\AssertableJson;
|
|
|
|
it('create form with logic', function () {
|
|
$user = $this->actingAsUser();
|
|
$workspace = $this->createUserWorkspace($user);
|
|
$form = $this->createForm($user, $workspace, [
|
|
'properties' => [
|
|
[
|
|
'id' => 'title',
|
|
'name' => 'Name',
|
|
'type' => 'title',
|
|
'hidden' => false,
|
|
'required' => true,
|
|
'logic' => [
|
|
'conditions' => [
|
|
'operatorIdentifier' => 'and',
|
|
'children' => [
|
|
[
|
|
'identifier' => 'email',
|
|
'value' => [
|
|
'operator' => 'is_empty',
|
|
'property_meta' => [
|
|
'id' => '93ea3198-353f-440b-8dc9-2ac9a7bee124',
|
|
'type' => 'email',
|
|
],
|
|
'value' => true,
|
|
],
|
|
],
|
|
],
|
|
],
|
|
'actions' => ['make-it-optional'],
|
|
],
|
|
],
|
|
],
|
|
]);
|
|
|
|
$this->getJson(route('forms.show', $form->slug))
|
|
->assertSuccessful()
|
|
->assertJson(function (AssertableJson $json) use ($form) {
|
|
return $json->where('id', $form->id)
|
|
->where('properties', function ($values) {
|
|
return count($values[0]['logic']) > 0;
|
|
})
|
|
->etc();
|
|
});
|
|
|
|
// Should submit form
|
|
$forData = ['93ea3198-353f-440b-8dc9-2ac9a7bee124' => ''];
|
|
$this->postJson(route('forms.answer', $form->slug), $forData)
|
|
->assertSuccessful()
|
|
->assertJson([
|
|
'type' => 'success',
|
|
'message' => 'Form submission saved.',
|
|
]);
|
|
});
|
|
|
|
it('create form with multi select logic', function () {
|
|
$user = $this->actingAsUser();
|
|
$workspace = $this->createUserWorkspace($user);
|
|
$form = $this->createForm($user, $workspace, [
|
|
'properties' => [
|
|
[
|
|
'id' => 'title',
|
|
'name' => 'Name',
|
|
'type' => 'title',
|
|
'hidden' => false,
|
|
'required' => false,
|
|
'logic' => [
|
|
'conditions' => [
|
|
'operatorIdentifier' => 'and',
|
|
'children' => [
|
|
[
|
|
'identifier' => 'multi_select',
|
|
'value' => [
|
|
'operator' => 'contains',
|
|
'property_meta' => [
|
|
'id' => '93ea3198-353f-440b-8dc9-2ac9a7bee124',
|
|
'type' => 'multi_select',
|
|
],
|
|
'value' => 'One',
|
|
],
|
|
],
|
|
],
|
|
],
|
|
'actions' => ['require-answer'],
|
|
],
|
|
],
|
|
],
|
|
]);
|
|
|
|
$this->getJson(route('forms.show', $form->slug))
|
|
->assertSuccessful()
|
|
->assertJson(function (AssertableJson $json) use ($form) {
|
|
return $json->where('id', $form->id)
|
|
->where('properties', function ($values) {
|
|
return count($values[0]['logic']) > 0;
|
|
})
|
|
->etc();
|
|
});
|
|
|
|
// Should submit form
|
|
$forData = ['93ea3198-353f-440b-8dc9-2ac9a7bee124' => ['One']];
|
|
$this->postJson(route('forms.answer', $form->slug), $forData)
|
|
->assertStatus(422)
|
|
->assertJson([
|
|
'message' => 'The Name field is required.',
|
|
'errors' => [
|
|
'title' => [
|
|
'The Name field is required.',
|
|
],
|
|
],
|
|
]);
|
|
});
|