github.com/safing/portbase@v0.19.5/database/query/condition_test.go (about)

     1  package query
     2  
     3  import "testing"
     4  
     5  func testSuccess(t *testing.T, c Condition) {
     6  	t.Helper()
     7  
     8  	err := c.check()
     9  	if err != nil {
    10  		t.Errorf("failed: %s", err)
    11  	}
    12  }
    13  
    14  func TestInterfaces(t *testing.T) {
    15  	t.Parallel()
    16  
    17  	testSuccess(t, newIntCondition("banana", Equals, uint(1)))
    18  	testSuccess(t, newIntCondition("banana", Equals, uint8(1)))
    19  	testSuccess(t, newIntCondition("banana", Equals, uint16(1)))
    20  	testSuccess(t, newIntCondition("banana", Equals, uint32(1)))
    21  	testSuccess(t, newIntCondition("banana", Equals, int(1)))
    22  	testSuccess(t, newIntCondition("banana", Equals, int8(1)))
    23  	testSuccess(t, newIntCondition("banana", Equals, int16(1)))
    24  	testSuccess(t, newIntCondition("banana", Equals, int32(1)))
    25  	testSuccess(t, newIntCondition("banana", Equals, int64(1)))
    26  	testSuccess(t, newIntCondition("banana", Equals, "1"))
    27  
    28  	testSuccess(t, newFloatCondition("banana", FloatEquals, uint(1)))
    29  	testSuccess(t, newFloatCondition("banana", FloatEquals, uint8(1)))
    30  	testSuccess(t, newFloatCondition("banana", FloatEquals, uint16(1)))
    31  	testSuccess(t, newFloatCondition("banana", FloatEquals, uint32(1)))
    32  	testSuccess(t, newFloatCondition("banana", FloatEquals, int(1)))
    33  	testSuccess(t, newFloatCondition("banana", FloatEquals, int8(1)))
    34  	testSuccess(t, newFloatCondition("banana", FloatEquals, int16(1)))
    35  	testSuccess(t, newFloatCondition("banana", FloatEquals, int32(1)))
    36  	testSuccess(t, newFloatCondition("banana", FloatEquals, int64(1)))
    37  	testSuccess(t, newFloatCondition("banana", FloatEquals, float32(1)))
    38  	testSuccess(t, newFloatCondition("banana", FloatEquals, float64(1)))
    39  	testSuccess(t, newFloatCondition("banana", FloatEquals, "1.1"))
    40  
    41  	testSuccess(t, newStringCondition("banana", SameAs, "coconut"))
    42  	testSuccess(t, newRegexCondition("banana", Matches, "coconut"))
    43  	testSuccess(t, newStringSliceCondition("banana", FloatEquals, []string{"banana", "coconut"}))
    44  	testSuccess(t, newStringSliceCondition("banana", FloatEquals, "banana,coconut"))
    45  }
    46  
    47  func testCondError(t *testing.T, c Condition) {
    48  	t.Helper()
    49  
    50  	err := c.check()
    51  	if err == nil {
    52  		t.Error("should fail")
    53  	}
    54  }
    55  
    56  func TestConditionErrors(t *testing.T) {
    57  	t.Parallel()
    58  
    59  	// test invalid value types
    60  	testCondError(t, newBoolCondition("banana", Is, 1))
    61  	testCondError(t, newFloatCondition("banana", FloatEquals, true))
    62  	testCondError(t, newIntCondition("banana", Equals, true))
    63  	testCondError(t, newStringCondition("banana", SameAs, 1))
    64  	testCondError(t, newRegexCondition("banana", Matches, 1))
    65  	testCondError(t, newStringSliceCondition("banana", Matches, 1))
    66  
    67  	// test error presence
    68  	testCondError(t, newBoolCondition("banana", errorPresent, true))
    69  	testCondError(t, And(newBoolCondition("banana", errorPresent, true)))
    70  	testCondError(t, Or(newBoolCondition("banana", errorPresent, true)))
    71  	testCondError(t, newExistsCondition("banana", errorPresent))
    72  	testCondError(t, newFloatCondition("banana", errorPresent, 1.1))
    73  	testCondError(t, newIntCondition("banana", errorPresent, 1))
    74  	testCondError(t, newStringCondition("banana", errorPresent, "coconut"))
    75  	testCondError(t, newRegexCondition("banana", errorPresent, "coconut"))
    76  }
    77  
    78  func TestWhere(t *testing.T) {
    79  	t.Parallel()
    80  
    81  	c := Where("", 254, nil)
    82  	err := c.check()
    83  	if err == nil {
    84  		t.Error("should fail")
    85  	}
    86  }