Tests for remove_books()

This commit is contained in:
Kovid Goyal 2013-07-07 10:32:20 +05:30
parent 75cf58d0f1
commit 535cff6f03
2 changed files with 45 additions and 1 deletions

View File

@ -1140,7 +1140,12 @@ class Cache(object):
path_map[book_id] = path
self.backend.remove_books(path_map, permanent=permanent)
for field in self.fields.itervalues():
field.table.remove_books(book_ids, self.backend)
try:
table = field.table
except AttributeError:
continue # Some fields like ondevice do not have tables
else:
table.remove_books(book_ids, self.backend)
# }}}

View File

@ -204,3 +204,42 @@ class AddRemoveTest(BaseTest):
self.assertEqual(cache.format(book_id, 'FMT2'), FMT2)
# }}}
def test_remove_books(self): # {{{
'Test removal of books'
cache = self.init_cache()
af, ae, at = self.assertFalse, self.assertEqual, self.assertTrue
authors = cache.fields['authors'].table
# Delete a single book, with no formats and check cleaning
self.assertIn(_('Unknown'), set(authors.id_map.itervalues()))
olen = len(authors.id_map)
item_id = {v:k for k, v in authors.id_map.iteritems()}[_('Unknown')]
cache.remove_books((3,))
for c in (cache, self.init_cache()):
table = c.fields['authors'].table
self.assertNotIn(3, c.all_book_ids())
self.assertNotIn(_('Unknown'), set(table.id_map.itervalues()))
self.assertNotIn(item_id, table.asort_map)
self.assertNotIn(item_id, table.alink_map)
ae(len(table.id_map), olen-1)
# Check that files are removed
fmtpath = cache.format_abspath(1, 'FMT1')
bookpath = os.path.dirname(fmtpath)
authorpath = os.path.dirname(bookpath)
item_id = {v:k for k, v in cache.fields['#series'].table.id_map.iteritems()}['My Series Two']
cache.remove_books((1,), permanent=True)
for x in (fmtpath, bookpath, authorpath):
af(os.path.exists(x))
for c in (cache, self.init_cache()):
table = c.fields['authors'].table
self.assertNotIn(1, c.all_book_ids())
self.assertNotIn('Author Two', set(table.id_map.itervalues()))
self.assertNotIn(6, set(c.fields['rating'].table.id_map.itervalues()))
self.assertIn('A Series One', set(c.fields['series'].table.id_map.itervalues()))
self.assertNotIn('My Series Two', set(c.fields['#series'].table.id_map.itervalues()))
self.assertNotIn(item_id, c.fields['#series'].table.col_book_map)
self.assertNotIn(1, c.fields['#series'].table.book_col_map)
# }}}