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.', ], ], ]); });