@@ -14633,3 +14633,123 @@ func TestMapEmptyPointerStructValueNoError(t *testing.T) {
14633
14633
errs = validate .Struct (obj2 )
14634
14634
Equal (t , errs , nil )
14635
14635
}
14636
+ func TestOmitZeroWithSlices (t * testing.T ) {
14637
+ // Tests the behavior of omitempty and omitzero with slices
14638
+ type OmitEmptyExample struct {
14639
+ Data []string `validate:"omitempty,min=2"`
14640
+ }
14641
+
14642
+ type OmitZeroExample struct {
14643
+ Data []string `validate:"omitzero,min=2"`
14644
+ }
14645
+
14646
+ validate := New ()
14647
+
14648
+ t .Run ("nil slices" , func (t * testing.T ) {
14649
+ // Test 1: nil slices
14650
+ test1Empty := OmitEmptyExample {Data : nil }
14651
+ test1Zero := OmitZeroExample {Data : nil }
14652
+
14653
+ err1 := validate .Struct (test1Empty )
14654
+ err2 := validate .Struct (test1Zero )
14655
+
14656
+ Equal (t , err1 , nil ) // No error (skipped)
14657
+ Equal (t , err2 , nil ) // No error (skipped)
14658
+ })
14659
+
14660
+ t .Run ("empty but non-nil slices" , func (t * testing.T ) {
14661
+ // Test 2: empty but non-nil slices
14662
+ test2Empty := OmitEmptyExample {Data : []string {}}
14663
+ test2Zero := OmitZeroExample {Data : []string {}}
14664
+
14665
+ err1 := validate .Struct (test2Empty )
14666
+ err2 := validate .Struct (test2Zero )
14667
+
14668
+ NotEqual (t , err1 , nil ) // Error (min=2)
14669
+ Equal (t , err2 , nil ) // No error (should be skipped)
14670
+ })
14671
+
14672
+ t .Run ("single item slices" , func (t * testing.T ) {
14673
+ // Test 3: single item slices (still not meeting min=2)
14674
+ test3Empty := OmitEmptyExample {Data : []string {"one" }}
14675
+ test3Zero := OmitZeroExample {Data : []string {"one" }}
14676
+
14677
+ err1 := validate .Struct (test3Empty )
14678
+ err2 := validate .Struct (test3Zero )
14679
+
14680
+ NotEqual (t , err1 , nil ) // Error (min=2)
14681
+ NotEqual (t , err2 , nil ) // Error (min=2)
14682
+ })
14683
+
14684
+ t .Run ("valid slices" , func (t * testing.T ) {
14685
+ // Test 4: valid slices (min=2 satisfied)
14686
+ test4Empty := OmitEmptyExample {Data : []string {"one" , "two" }}
14687
+ test4Zero := OmitZeroExample {Data : []string {"one" , "two" }}
14688
+
14689
+ err1 := validate .Struct (test4Empty )
14690
+ err2 := validate .Struct (test4Zero )
14691
+
14692
+ Equal (t , err1 , nil ) // No error
14693
+ Equal (t , err2 , nil ) // No error
14694
+ })
14695
+ }
14696
+ func TestOmitZeroWithMaps (t * testing.T ) {
14697
+ // Tests the behavior of omitempty and omitzero with maps
14698
+ type OmitEmptyExample struct {
14699
+ Data map [string ]string `validate:"omitempty,min=2"`
14700
+ }
14701
+
14702
+ type OmitZeroExample struct {
14703
+ Data map [string ]string `validate:"omitzero,min=2"`
14704
+ }
14705
+
14706
+ validate := New ()
14707
+
14708
+ t .Run ("nil maps" , func (t * testing.T ) {
14709
+ // Test 1: nil maps
14710
+ test1Empty := OmitEmptyExample {Data : nil }
14711
+ test1Zero := OmitZeroExample {Data : nil }
14712
+
14713
+ err1 := validate .Struct (test1Empty )
14714
+ err2 := validate .Struct (test1Zero )
14715
+
14716
+ Equal (t , err1 , nil ) // No error (skipped)
14717
+ Equal (t , err2 , nil ) // No error (skipped)
14718
+ })
14719
+
14720
+ t .Run ("empty but non-nil maps" , func (t * testing.T ) {
14721
+ // Test 2: empty but non-nil maps
14722
+ test2Empty := OmitEmptyExample {Data : map [string ]string {}}
14723
+ test2Zero := OmitZeroExample {Data : map [string ]string {}}
14724
+
14725
+ err1 := validate .Struct (test2Empty )
14726
+ err2 := validate .Struct (test2Zero )
14727
+
14728
+ NotEqual (t , err1 , nil ) // Error (min=2)
14729
+ Equal (t , err2 , nil ) // No error (should be skipped)
14730
+ })
14731
+
14732
+ t .Run ("single item maps" , func (t * testing.T ) {
14733
+ // Test 3: single item maps (still not meeting min=2)
14734
+ test3Empty := OmitEmptyExample {Data : map [string ]string {"key1" : "value1" }}
14735
+ test3Zero := OmitZeroExample {Data : map [string ]string {"key1" : "value1" }}
14736
+
14737
+ err1 := validate .Struct (test3Empty )
14738
+ err2 := validate .Struct (test3Zero )
14739
+
14740
+ NotEqual (t , err1 , nil ) // Error (min=2)
14741
+ NotEqual (t , err2 , nil ) // Error (min=2)
14742
+ })
14743
+
14744
+ t .Run ("valid maps" , func (t * testing.T ) {
14745
+ // Test 4: valid maps (min=2 satisfied)
14746
+ test4Empty := OmitEmptyExample {Data : map [string ]string {"key1" : "value1" , "key2" : "value2" }}
14747
+ test4Zero := OmitZeroExample {Data : map [string ]string {"key1" : "value1" , "key2" : "value2" }}
14748
+
14749
+ err1 := validate .Struct (test4Empty )
14750
+ err2 := validate .Struct (test4Zero )
14751
+
14752
+ Equal (t , err1 , nil ) // No error
14753
+ Equal (t , err2 , nil ) // No error
14754
+ })
14755
+ }
0 commit comments