Finish writing one-one fields

This commit is contained in:
Kovid Goyal 2013-02-22 18:48:33 +05:30
parent 7f63b4bc40
commit 2e8e0f6daf
2 changed files with 37 additions and 5 deletions

View File

@ -41,11 +41,11 @@ class WritingTest(BaseTest):
self.create_setter(name, setter)) self.create_setter(name, setter))
def run_tests(self, tests): def run_tests(self, tests):
cl = self.cloned_library
results = {} results = {}
for test in tests: for test in tests:
results[test] = [] results[test] = []
for val in test.vals: for val in test.vals:
cl = self.cloned_library
cache = self.init_cache(cl) cache = self.init_cache(cl)
cache.set_field(test.name, {1: val}) cache.set_field(test.name, {1: val})
cached_res = cache.field_for(test.name, 1) cached_res = cache.field_for(test.name, 1)
@ -65,11 +65,16 @@ class WritingTest(BaseTest):
test.name, old_sqlite_res, sqlite_res)) test.name, old_sqlite_res, sqlite_res))
del db del db
def test_one_one(self): def test_one_one(self):
'Test setting of values in one-one fields' 'Test setting of values in one-one fields'
tests = [] tests = [self.create_test('#yesno', (True, False, 'true', 'false', None))]
for name, getter, setter in (
('series_index', 'series_index', 'set_series_index'),
('#float', None, None),
):
vals = ['1.5', None, 0, 1.0]
tests.append(self.create_test(name, tuple(vals), getter, setter))
for name, getter, setter in ( for name, getter, setter in (
('pubdate', 'pubdate', 'set_pubdate'), ('pubdate', 'pubdate', 'set_pubdate'),
('timestamp', 'timestamp', 'set_timestamp'), ('timestamp', 'timestamp', 'set_timestamp'),
@ -78,6 +83,25 @@ class WritingTest(BaseTest):
tests.append(self.create_test( tests.append(self.create_test(
name, ('2011-1-12', UNDEFINED_DATE, None), getter, setter)) name, ('2011-1-12', UNDEFINED_DATE, None), getter, setter))
for name, getter, setter in (
('title', 'title', 'set_title'),
('uuid', 'uuid', 'set_uuid'),
('author_sort', 'author_sort', 'set_author_sort'),
('sort', 'title_sort', 'set_title_sort'),
('#comments', None, None),
('comments', 'comments', 'set_comment'),
):
vals = ['something', None]
if name not in {'comments', '#comments'}:
# Setting text column to '' returns None in the new backend
# and '' in the old. I think None is more correct.
vals.append('')
if name == 'comments':
# Again new behavior of deleting comment rather than setting
# empty string is more correct.
vals.remove(None)
tests.append(self.create_test(name, tuple(vals), getter, setter))
self.run_tests(tests) self.run_tests(tests)
def tests(): def tests():

View File

@ -98,10 +98,14 @@ def get_adapter(name, metadata):
if name == 'title': if name == 'title':
return lambda x: ans(x) or _('Unknown') return lambda x: ans(x) or _('Unknown')
if name == 'author_sort':
return lambda x: ans(x) or ''
if name == 'authors': if name == 'authors':
return lambda x: ans(x) or (_('Unknown'),) return lambda x: ans(x) or (_('Unknown'),)
if name in {'timestamp', 'last_modified'}: if name in {'timestamp', 'last_modified'}:
return lambda x: ans(x) or UNDEFINED_DATE return lambda x: ans(x) or UNDEFINED_DATE
if name == 'series_index':
return lambda x: 1.0 if ans(x) is None else ans(x)
return ans return ans
# }}} # }}}
@ -148,13 +152,17 @@ class Writer(object):
if dt == 'composite' or field.name in { if dt == 'composite' or field.name in {
'id', 'cover', 'size', 'path', 'formats', 'news'}: 'id', 'cover', 'size', 'path', 'formats', 'news'}:
self.set_books_func = dummy self.set_books_func = dummy
elif self.name[0] == '#' and self.name.endswith('_index'):
# TODO: Implement this
pass
elif field.is_many: elif field.is_many:
# TODO: Implement this # TODO: Implement this
pass pass
# TODO: Remember to change commas to | when writing authors to sqlite
else: else:
self.set_books_func = (one_one_in_books if field.metadata['table'] self.set_books_func = (one_one_in_books if field.metadata['table']
== 'books' else one_one_in_other) == 'books' else one_one_in_other)
if self.name in {'timestamp', 'uuid'}: if self.name in {'timestamp', 'uuid', 'sort'}:
self.accept_vals = bool self.accept_vals = bool
def set_books(self, book_id_val_map, db): def set_books(self, book_id_val_map, db):