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