@@ -118,10 +118,58 @@ def test_invalid_labels(file_repository_factory):
118118 assert e_info .value .status == 400
119119
120120 with pytest .raises (ApiException ) as e_info :
121- file_repository_factory (name = str (uuid4 ()), pulp_labels = {"arda" : "eru, illuvata" })
121+ file_repository_factory (name = str (uuid4 ()), pulp_labels = {"arda" : "eru( illuvata) " })
122122 assert e_info .value .status == 400
123123
124124
125+ @pytest .mark .parallel
126+ def test_labels_with_commas (file_repository_factory , file_bindings , monitor_task ):
127+ """Test that label values can contain commas."""
128+ labels = {"signed_by" : "release4,release2" }
129+ file_repo = file_repository_factory (name = str (uuid4 ()), pulp_labels = labels )
130+ assert file_repo .pulp_labels == labels
131+
132+ labels ["signed_by" ] = "a,b,c"
133+ monitor_task (
134+ file_bindings .RepositoriesFileApi .partial_update (
135+ file_repo .pulp_href , {"pulp_labels" : labels }
136+ ).task
137+ )
138+ file_repo = file_bindings .RepositoriesFileApi .read (file_repo .pulp_href )
139+ assert file_repo .pulp_labels == labels
140+
141+
142+ @pytest .mark .parallel
143+ def test_label_select_with_commas (file_repository_factory , file_bindings ):
144+ """Test filtering labels whose values contain commas using backslash-escaped commas."""
145+ key = str (uuid4 ()).replace ("-" , "" )
146+
147+ file_repository_factory (name = str (uuid4 ()), pulp_labels = {key : "release4,release2" })
148+ file_repository_factory (name = str (uuid4 ()), pulp_labels = {key : "release4" })
149+
150+ # Escaped comma in value matches the label with a comma
151+ results = file_bindings .RepositoriesFileApi .list (
152+ pulp_label_select = f"{ key } =release4\\ ,release2"
153+ ).results
154+ assert len (results ) == 1
155+ assert results [0 ].pulp_labels [key ] == "release4,release2"
156+
157+ # Unescaped comma is still treated as a filter term separator
158+ results = file_bindings .RepositoriesFileApi .list (pulp_label_select = f"{ key } =release4" ).results
159+ assert len (results ) == 1
160+ assert results [0 ].pulp_labels [key ] == "release4"
161+
162+ # Escaped comma value combined with a second filter term
163+ key2 = str (uuid4 ()).replace ("-" , "" )
164+ file_repository_factory (name = str (uuid4 ()), pulp_labels = {key : "release4,release2" , key2 : "true" })
165+ results = file_bindings .RepositoriesFileApi .list (
166+ pulp_label_select = f"{ key } =release4\\ ,release2,{ key2 } =true"
167+ ).results
168+ assert len (results ) == 1
169+ assert results [0 ].pulp_labels [key ] == "release4,release2"
170+ assert results [0 ].pulp_labels [key2 ] == "true"
171+
172+
125173# Label Filtering
126174
127175
0 commit comments