|
2 | 2 | from __future__ import absolute_import, unicode_literals |
3 | 3 |
|
4 | 4 | import datetime |
| 5 | +import random |
5 | 6 | import unittest |
6 | 7 | from io import StringIO |
7 | 8 | from xml.etree import ElementTree |
@@ -704,7 +705,35 @@ def test_delete(self): |
704 | 705 | self.solr.delete(q='*:*') |
705 | 706 | self.assertEqual(len(self.solr.search('*:*')), 0) |
706 | 707 |
|
707 | | - # Need at least one. |
| 708 | + # Test delete() with `id' being a list. |
| 709 | + # Solr's ability to delete parent/children docs by id is simply assumed |
| 710 | + # and not what's under test here. |
| 711 | + def leaf_doc(doc): |
| 712 | + return 'price' in doc and NESTED_DOC_KEY not in doc |
| 713 | + |
| 714 | + to_delete_docs = list(filter(leaf_doc, self.docs)) |
| 715 | + to_delete_ids = [doc['id'] for doc in to_delete_docs] |
| 716 | + |
| 717 | + self.solr.add(to_delete_docs) |
| 718 | + self.solr.commit() |
| 719 | + |
| 720 | + leaf_q = 'price:[* TO *]' |
| 721 | + self.assertEqual(len(self.solr.search(leaf_q)), len(to_delete_docs)) |
| 722 | + # Extract a random doc from the list, to later check it wasn't deleted. |
| 723 | + graced_doc_id = to_delete_ids.pop(random.randint(0, len(to_delete_ids) - 1)) |
| 724 | + self.solr.delete(id=to_delete_ids) |
| 725 | + # There should be only one left, our graced id |
| 726 | + self.assertEqual(len(self.solr.search(leaf_q)), 1) |
| 727 | + self.assertEqual(len(self.solr.search('id:%s' % graced_doc_id)), 1) |
| 728 | + # Now we can wipe the graced document too. None should be left. |
| 729 | + self.solr.delete(id=graced_doc_id) |
| 730 | + self.assertEqual(len(self.solr.search(leaf_q)), 0) |
| 731 | + |
| 732 | + # Can't delete when the list of documents is empty |
| 733 | + self.assertRaises(ValueError, self.solr.delete, id=[None, None, None]) |
| 734 | + self.assertRaises(ValueError, self.solr.delete, id=[None]) |
| 735 | + |
| 736 | + # Need at least one of either `id' or `q' |
708 | 737 | self.assertRaises(ValueError, self.solr.delete) |
709 | 738 | # Can't have both. |
710 | 739 | self.assertRaises(ValueError, self.solr.delete, id='foo', q='bar') |
|
0 commit comments