module Spec.Operators (allTests) where import Test.HUnit import Data.Aeson.Types (Value(..)) import LaunchDarkly.Server.Operators dateStr1 :: Value dateStr1 = String "2017-12-06T00:00:00.000-07:00" dateStr2 :: Value dateStr2 = String "2017-12-06T00:01:01.000-07:00" invalidDate :: Value invalidDate = String "hey what's this?" dateMs1 :: Value dateMs1 = Number $ fromInteger 10000000 dateMs2 :: Value dateMs2 = Number $ fromInteger 10000001 makeTest :: (Op, Value, Value, Bool) -> Test makeTest f@(o, x, y, e) = TestCase $ assertEqual (show f) e $ (getOperation o) x y allTests :: Test allTests = TestList $ map makeTest -- numeric operators [ (OpIn, Number $ fromInteger 50, Number $ fromInteger 50, True) , (OpIn, Number $ fromRational 99.0001, Number $ fromRational 99.0001, True) , (OpLessThan, Number $ fromInteger 1, Number $ fromRational 1.99999, True) , (OpLessThan, Number $ fromRational 1.99999, Number $ fromInteger 1, False) , (OpLessThan, Number $ fromInteger 1, Number $ fromInteger 2, True) , (OpLessThanOrEqual, Number $ fromInteger 1, Number $ fromInteger 1, True) , (OpGreaterThan, Number $ fromInteger 2, Number $ fromRational 1.99999, True) , (OpGreaterThan, Number $ fromRational 1.99999, Number $ fromInteger 2, False) , (OpGreaterThan, Number $ fromInteger 2, Number $ fromInteger 1, True) , (OpGreaterThanOrEqual, Number $ fromInteger 1, Number $ fromInteger 1, True) -- string operators , (OpIn, String "x", String "x", True) , (OpIn, String "x", String "xyz", False) , (OpStartsWith, String "xyz", String "x", True) , (OpStartsWith, String "x", String "xyz", False) , (OpEndsWith, String "xyz", String "z", True) , (OpEndsWith, String "z", String "xyz", False) , (OpContains, String "xyz", String "y", True) , (OpContains, String "y", String "yz", False) -- mixed strings and numbers , (OpIn, String "99", Number $ fromInteger 99, False) , (OpIn, Number $ fromInteger 99, String "99", False) , (OpContains, String "99", Number $ fromInteger 99, False) , (OpStartsWith, String "99", Number $ fromInteger 99, False) , (OpEndsWith, String "99", Number $ fromInteger 99, False) , (OpLessThanOrEqual, String "99", Number $ fromInteger 99, False) , (OpLessThanOrEqual, Number $ fromInteger 99, String "99", False) , (OpGreaterThanOrEqual, String "99", Number $ fromInteger 99, False) , (OpGreaterThanOrEqual, Number $ fromInteger 99, String "99", False) -- date operators , (OpBefore, dateStr1, dateStr2, True) , (OpBefore, dateMs1, dateMs2, True) , (OpBefore, dateStr2, dateStr1, False) , (OpBefore, dateMs2, dateMs1, False) , (OpBefore, dateStr1, dateStr1, False) , (OpBefore, dateMs1, dateMs1, False) , (OpBefore, String "", dateStr1, False) , (OpBefore, dateStr1, invalidDate, False) , (OpAfter, dateStr2, dateStr1, True) , (OpAfter, dateMs2, dateMs1, True) , (OpAfter, dateStr1, dateStr2, False) , (OpAfter, dateMs1, dateMs2, False) , (OpAfter, dateStr1, dateStr1, False) , (OpAfter, dateMs1, dateMs1, False) , (OpAfter, String "", dateStr1, False) , (OpAfter, dateStr1, invalidDate, False) -- regex , (OpMatches, String "hello world", String "hello.*rld", True) , (OpMatches, String "hello world", String "hello.*orl", True) , (OpMatches, String "hello world", String "l+", True) , (OpMatches, String "hello world", String "(world|planet)", True) , (OpMatches, String "hello world", String "aloha", False) , (OpMatches, String "hello world", String "***bad rg", False) -- semver operators , (OpSemVerEqual, String "2.0.0", String "2.0.0", True) , (OpSemVerEqual, String "2.0", String "2.0.0", True) , (OpSemVerEqual, String "2.0-rc1", String "2.0.0-rc1", True) , (OpSemVerEqual, String "2+build2", String "2.0.0+build2", True) , (OpSemVerEqual, String "2.0.0", String "2.0.1", False) , (OpSemVerEqual, String "02.0.0", String "2.0.0", False) , (OpSemVerLessThan, String "2.0.0", String "2.0.1", True) , (OpSemVerLessThan, String "2.0", String "2.0.1", True) , (OpSemVerLessThan, String "2.0.1", String "2.0.0", False) , (OpSemVerLessThan, String "2.0.1", String "2.0", False) , (OpSemVerLessThan, String "2.0.1", String "xbad%ver", False) , (OpSemVerLessThan, String "2.0.0-rc", String "2.0.0-rc.beta", True) , (OpSemVerGreaterThan, String "2.0.1", String "2.0", True) , (OpSemVerGreaterThan, String "2.0.0", String "2.0.1", False) , (OpSemVerGreaterThan, String "2.0", String "2.0.1", False) , (OpSemVerGreaterThan, String "2.0.1", String "xbad%ver", False) , (OpSemVerGreaterThan, String "2.0.0-rc.1", String "2.0.0-rc.0", True) ]