|
6 | 6 | convert_to_assigned_datatypes_in_column_table, |
7 | 7 | ColumnTable, |
8 | 8 | concat_table_chunks, |
| 9 | + serialize_query_tags, |
9 | 10 | ) |
10 | 11 |
|
11 | 12 | try: |
@@ -161,3 +162,65 @@ def test_concat_table_chunks__incorrect_column_names_error(self): |
161 | 162 |
|
162 | 163 | with pytest.raises(ValueError): |
163 | 164 | concat_table_chunks([column_table1, column_table2]) |
| 165 | + |
| 166 | + def test_serialize_query_tags_basic(self): |
| 167 | + """Test basic query tags serialization""" |
| 168 | + query_tags = {"team": "data-eng", "application": "etl"} |
| 169 | + result = serialize_query_tags(query_tags) |
| 170 | + assert result == "team:data-eng,application:etl" |
| 171 | + |
| 172 | + def test_serialize_query_tags_with_none_value(self): |
| 173 | + """Test query tags with None value (should omit colon and value)""" |
| 174 | + query_tags = {"key1": "value1", "key2": None, "key3": "value3"} |
| 175 | + result = serialize_query_tags(query_tags) |
| 176 | + assert result == "key1:value1,key2,key3:value3" |
| 177 | + |
| 178 | + def test_serialize_query_tags_with_special_chars(self): |
| 179 | + """Test query tags with special characters (colon, comma, backslash)""" |
| 180 | + query_tags = { |
| 181 | + "key1": "value:with:colons", |
| 182 | + "key2": "value,with,commas", |
| 183 | + "key3": "value\\with\\backslashes", |
| 184 | + } |
| 185 | + result = serialize_query_tags(query_tags) |
| 186 | + assert ( |
| 187 | + result |
| 188 | + == "key1:value\\:with\\:colons,key2:value\\,with\\,commas,key3:value\\\\with\\\\backslashes" |
| 189 | + ) |
| 190 | + |
| 191 | + def test_serialize_query_tags_with_mixed_special_chars(self): |
| 192 | + """Test query tags with mixed special characters""" |
| 193 | + query_tags = {"key1": "a:b,c\\d"} |
| 194 | + result = serialize_query_tags(query_tags) |
| 195 | + assert result == "key1:a\\:b\\,c\\\\d" |
| 196 | + |
| 197 | + def test_serialize_query_tags_empty_dict(self): |
| 198 | + """Test serialization with empty dictionary""" |
| 199 | + query_tags = {} |
| 200 | + result = serialize_query_tags(query_tags) |
| 201 | + assert result is None |
| 202 | + |
| 203 | + def test_serialize_query_tags_none(self): |
| 204 | + """Test serialization with None input""" |
| 205 | + result = serialize_query_tags(None) |
| 206 | + assert result is None |
| 207 | + |
| 208 | + def test_serialize_query_tags_with_special_chars_in_key(self): |
| 209 | + """Test query tags with special characters in keys (keys are not escaped)""" |
| 210 | + query_tags = { |
| 211 | + "key:with:colons": "value1", |
| 212 | + "key,with,commas": "value2", |
| 213 | + "key\\with\\backslashes": "value3", |
| 214 | + } |
| 215 | + result = serialize_query_tags(query_tags) |
| 216 | + # Keys are not escaped, only values are |
| 217 | + assert ( |
| 218 | + result |
| 219 | + == "key:with:colons:value1,key,with,commas:value2,key\\with\\backslashes:value3" |
| 220 | + ) |
| 221 | + |
| 222 | + def test_serialize_query_tags_all_none_values(self): |
| 223 | + """Test query tags where all values are None""" |
| 224 | + query_tags = {"key1": None, "key2": None, "key3": None} |
| 225 | + result = serialize_query_tags(query_tags) |
| 226 | + assert result == "key1,key2,key3" |
0 commit comments