@@ -20,10 +20,9 @@ class FlagdOpsTest : public ::testing::Test {
2020 JsonLogic json_logic_;
2121};
2222
23- TEST_F (FlagdOpsTest, StartsWith ) {
23+ TEST_F (FlagdOpsTest, StartsWithBasic ) {
2424 json data = json::object ();
2525
26- // Basic success
2726 EXPECT_TRUE (
2827 json_logic_
2928 .Apply (json::parse (R"( {"starts_with": ["hello world", "hello"]})" ),
@@ -34,17 +33,23 @@ TEST_F(FlagdOpsTest, StartsWith) {
3433 .Apply (json::parse (R"( {"starts_with": ["hello world", "world"]})" ),
3534 data)
3635 .value ());
36+ }
37+
38+ TEST_F (FlagdOpsTest, StartsWithArgEvaluation) {
39+ json data = json::object ();
3740
38- // Evaluation of arguments
3941 data[" prefix" ] = " hello" ;
4042 EXPECT_TRUE (
4143 json_logic_
4244 .Apply (json::parse (
4345 R"( {"starts_with": ["hello world", {"var": "prefix"}]})" ),
4446 data)
4547 .value ());
48+ }
49+
50+ TEST_F (FlagdOpsTest, StartsWithNegative) {
51+ json data = json::object ();
4652
47- // Error cases
4853 EXPECT_FALSE (
4954 json_logic_.Apply (json::parse (R"( {"starts_with": ["a", "abc"]})" ), data)
5055 .value ());
@@ -53,10 +58,9 @@ TEST_F(FlagdOpsTest, StartsWith) {
5358 .value ());
5459}
5560
56- TEST_F (FlagdOpsTest, EndsWith ) {
61+ TEST_F (FlagdOpsTest, EndsWithBasic ) {
5762 json data = json::object ();
5863
59- // Basic success
6064 EXPECT_TRUE (
6165 json_logic_
6266 .Apply (json::parse (R"( {"ends_with": ["hello world", "world"]})" ),
@@ -67,17 +71,23 @@ TEST_F(FlagdOpsTest, EndsWith) {
6771 .Apply (json::parse (R"( {"ends_with": ["hello world", "hello"]})" ),
6872 data)
6973 .value ());
74+ }
75+
76+ TEST_F (FlagdOpsTest, EndsWithArgEvaluation) {
77+ json data = json::object ();
7078
71- // Evaluation of arguments
7279 data[" suffix" ] = " world" ;
7380 EXPECT_TRUE (
7481 json_logic_
7582 .Apply (json::parse (
7683 R"( {"ends_with": ["hello world", {"var": "suffix"}]})" ),
7784 data)
7885 .value ());
86+ }
87+
88+ TEST_F (FlagdOpsTest, EndsWithNegative) {
89+ json data = json::object ();
7990
80- // Error cases
8191 EXPECT_FALSE (
8292 json_logic_.Apply (json::parse (R"( {"ends_with": ["a", "abc"]})" ), data)
8393 .value ());
@@ -86,10 +96,9 @@ TEST_F(FlagdOpsTest, EndsWith) {
8696 .value ());
8797}
8898
89- TEST_F (FlagdOpsTest, SemVer ) {
99+ TEST_F (FlagdOpsTest, SemVerBasic ) {
90100 json data = json::object ();
91101
92- // Basic comparison
93102 EXPECT_TRUE (
94103 json_logic_
95104 .Apply (json::parse (R"( {"sem_ver": ["1.2.3", "=", "1.2.3"]})" ), data)
@@ -114,8 +123,11 @@ TEST_F(FlagdOpsTest, SemVer) {
114123 json_logic_
115124 .Apply (json::parse (R"( {"sem_ver": ["1.2.3", "<=", "1.2.3"]})" ), data)
116125 .value ());
126+ }
127+
128+ TEST_F (FlagdOpsTest, SemVerPreRelease) {
129+ json data = json::object ();
117130
118- // Pre-release precedence
119131 EXPECT_TRUE (
120132 json_logic_
121133 .Apply (json::parse (R"( {"sem_ver": ["1.0.0-alpha", "<", "1.0.0"]})" ),
@@ -127,16 +139,22 @@ TEST_F(FlagdOpsTest, SemVer) {
127139 R"( {"sem_ver": ["1.0.0-alpha", "<", "1.0.0-alpha.1"]})" ),
128140 data)
129141 .value ());
142+ }
143+
144+ TEST_F (FlagdOpsTest, SemVerBuildMetadata) {
145+ json data = json::object ();
130146
131- // Build metadata ignored
132147 EXPECT_TRUE (
133148 json_logic_
134149 .Apply (json::parse (
135150 R"( {"sem_ver": ["1.0.0+build.1", "=", "1.0.0+build.2"]})" ),
136151 data)
137152 .value ());
153+ }
154+
155+ TEST_F (FlagdOpsTest, SemVerPrefix) {
156+ json data = json::object ();
138157
139- // v/V prefix
140158 EXPECT_TRUE (
141159 json_logic_
142160 .Apply (json::parse (R"( {"sem_ver": ["v1.2.3", "=", "1.2.3"]})" ), data)
@@ -145,8 +163,11 @@ TEST_F(FlagdOpsTest, SemVer) {
145163 json_logic_
146164 .Apply (json::parse (R"( {"sem_ver": ["1.2.3", "=", "V1.2.3"]})" ), data)
147165 .value ());
166+ }
167+
168+ TEST_F (FlagdOpsTest, SemVerCompatibleOperators) {
169+ json data = json::object ();
148170
149- // Compatible operators (^ and ~)
150171 EXPECT_TRUE (
151172 json_logic_
152173 .Apply (json::parse (R"( {"sem_ver": ["1.2.3", "^", "1.0.0"]})" ), data)
@@ -163,7 +184,11 @@ TEST_F(FlagdOpsTest, SemVer) {
163184 json_logic_
164185 .Apply (json::parse (R"( {"sem_ver": ["1.3.0", "~", "1.2.0"]})" ), data)
165186 .value ());
166- // Partial version support (v1.2 -> 1.2.0, v1 -> 1.0.0)
187+ }
188+
189+ TEST_F (FlagdOpsTest, SemVerPartialVersion) {
190+ json data = json::object ();
191+
167192 EXPECT_TRUE (
168193 json_logic_
169194 .Apply (json::parse (R"( {"sem_ver": ["v1.2", "=", "1.2.0"]})" ), data)
0 commit comments