@@ -698,6 +698,85 @@ public function can_parse_rules_which_reference_other_fields()
698698
699699        $ this assertEquals ("Must be a valid date. Must be a date before <code>to_time</code>. " , $ results'from_time ' ]['description ' ]);
700700    }
701+ 
702+     /** @test */ 
703+     public  function  sometimes_rule_prevents_required_from_required_rule ()
704+     {
705+         $ ruleset
706+             'optional_field '  => 'sometimes|required ' ,
707+         ];
708+ 
709+         $ results$ this strategy ->parse ($ ruleset
710+ 
711+         $ this assertFalse ($ results'optional_field ' ]['required ' ], 'Field with "sometimes|required" should not be required ' );
712+         $ this assertTrue ($ results'optional_field ' ]['sometimes ' ], 'Field should have "sometimes" flag set ' );
713+     }
714+ 
715+     /** @test */ 
716+     public  function  sometimes_rule_prevents_required_from_accepted_rule ()
717+     {
718+         $ ruleset
719+             'consent_cgu '  => 'sometimes|accepted ' ,
720+         ];
721+ 
722+         $ results$ this strategy ->parse ($ ruleset
723+ 
724+         $ this assertTrue ($ results'consent_cgu ' ]['sometimes ' ], 'Field should have "sometimes" flag set ' );
725+         $ this assertFalse ($ results'consent_cgu ' ]['required ' ], 'Field with "sometimes|accepted" should not be required ' );
726+     }
727+ 
728+     /** @test */ 
729+     public  function  required_before_sometimes_remains_required ()
730+     {
731+         $ ruleset
732+             'should_be_required '  => 'required|sometimes ' ,
733+         ];
734+ 
735+         $ results$ this strategy ->parse ($ ruleset
736+ 
737+         $ this assertTrue ($ results'should_be_required ' ]['required ' ], 'Field with "required|sometimes" should remain required ' );
738+         $ this assertTrue ($ results'should_be_required ' ]['sometimes ' ], 'Field should have "sometimes" flag set ' );
739+     }
740+ 
741+     /** @test */ 
742+     public  function  accepted_before_sometimes_remains_required ()
743+     {
744+         $ ruleset
745+             'should_be_required '  => 'accepted|sometimes ' ,
746+         ];
747+ 
748+         $ results$ this strategy ->parse ($ ruleset
749+ 
750+         $ this assertTrue ($ results'should_be_required ' ]['required ' ], 'Field with "accepted|sometimes" should remain required ' );
751+         $ this assertTrue ($ results'should_be_required ' ]['sometimes ' ], 'Field should have "sometimes" flag set ' );
752+     }
753+ 
754+     /** @test */ 
755+     public  function  sometimes_with_other_validation_rules ()
756+     {
757+         $ ruleset
758+             'sometimes_email '  => 'sometimes|email ' ,
759+             'sometimes_numeric '  => 'sometimes|numeric|min:5 ' ,
760+             'sometimes_array '  => 'sometimes|array ' ,
761+         ];
762+ 
763+         $ results$ this strategy ->parse ($ ruleset
764+ 
765+         // All should not be required 
766+         $ this assertFalse ($ results'sometimes_email ' ]['required ' ]);
767+         $ this assertFalse ($ results'sometimes_numeric ' ]['required ' ]);
768+         $ this assertFalse ($ results'sometimes_array ' ]['required ' ]);
769+ 
770+         // All should have sometimes flag 
771+         $ this assertTrue ($ results'sometimes_email ' ]['sometimes ' ]);
772+         $ this assertTrue ($ results'sometimes_numeric ' ]['sometimes ' ]);
773+         $ this assertTrue ($ results'sometimes_array ' ]['sometimes ' ]);
774+ 
775+         // Types should be set correctly 
776+         $ this assertEquals ('string ' , $ results'sometimes_email ' ]['type ' ]);
777+         $ this assertEquals ('number ' , $ results'sometimes_numeric ' ]['type ' ]);
778+         $ this assertEquals ('object ' , $ results'sometimes_array ' ]['type ' ]);
779+     }
701780}
702781
703782class  DummyValidationRule implements  \Illuminate \Contracts \Validation \Rule
0 commit comments