@@ -993,6 +993,36 @@ def leaf_doc(doc):
993993 args , _kwargs = self .solr ._send_request .call_args
994994 self .assertTrue (args [1 ].startswith ("fakehandler" ))
995995
996+ def test_delete__accepts_string_and_integer_values (self ):
997+ """
998+ Ensure self.solr.delete() accepts both string and integer values for `id`
999+ and `q` parameters without raising XML serialization errors.
1000+
1001+ Previously, passing an integer value caused a TypeError because
1002+ `xml.etree.ElementTree` requires element.text to be a string. This test
1003+ verifies that integer inputs are correctly cast to strings before
1004+ building the delete XML payload.
1005+
1006+ Regression test for:
1007+ https://github.com/django-haystack/pysolr/issues/489
1008+ """
1009+ self .solr .add ([{"id" : "101" , "title" : "Sample doc 101" }], commit = True )
1010+ self .solr .add ([{"id" : "102" , "title" : "Sample doc 102" }], commit = True )
1011+ self .solr .add ([{"id" : "103" , "title" : "Sample doc 103" }], commit = True )
1012+ self .solr .add ([{"id" : "104" , "title" : "Sample doc 104" }], commit = True )
1013+
1014+ # Delete using string ID
1015+ self .solr .delete (id = "101" , commit = True )
1016+
1017+ # Delete using integer ID (should not raise TypeError)
1018+ self .solr .delete (id = 102 , commit = True )
1019+
1020+ # Delete using string value with `q`
1021+ self .solr .delete (q = "103" , commit = True )
1022+
1023+ # Delete using integer value with `q` (should not raise TypeError)
1024+ self .solr .delete (q = 104 , commit = True )
1025+
9961026 def test_commit (self ):
9971027 self .assertEqual (len (self .solr .search ("doc" )), 3 )
9981028 self .solr .add ([{"id" : "doc_6" , "title" : "Newly added doc" }])
0 commit comments