mirror of https://gitlab.com/bashrc2/epicyon
Unit test for storing book events
parent
ae83d7f4fc
commit
eb205f9222
43
reading.py
43
reading.py
|
@ -40,12 +40,16 @@ def get_book_link_from_content(content: str) -> str:
|
|||
return book_url
|
||||
|
||||
|
||||
def get_book_from_post(post_json_object: {}) -> {}:
|
||||
def get_book_from_post(post_json_object: {}, debug: bool) -> {}:
|
||||
""" Returns a book details from the given post
|
||||
"""
|
||||
if 'tag' not in post_json_object:
|
||||
if debug:
|
||||
print('DEBUG: get_book_from_post no tag in post')
|
||||
return {}
|
||||
if not isinstance(post_json_object['tag'], list):
|
||||
if debug:
|
||||
print('DEBUG: get_book_from_post tag is not a list')
|
||||
return {}
|
||||
for tag_dict in post_json_object['tag']:
|
||||
if 'type' not in tag_dict:
|
||||
|
@ -63,7 +67,7 @@ def get_book_from_post(post_json_object: {}) -> {}:
|
|||
if not isinstance(tag_dict['name'], str):
|
||||
continue
|
||||
tag_dict['name'] = tag_dict['name'].replace('@', '')
|
||||
return tag_dict
|
||||
return tag_dict.copy()
|
||||
return {}
|
||||
|
||||
|
||||
|
@ -91,7 +95,8 @@ def _get_book_image_from_post(post_json_object: {}) -> str:
|
|||
def get_reading_status(post_json_object: {},
|
||||
system_language: str,
|
||||
languages_understood: [],
|
||||
translate: {}) -> {}:
|
||||
translate: {},
|
||||
debug: bool) -> {}:
|
||||
"""Returns any reading status from the content of a post
|
||||
"""
|
||||
post_obj = post_json_object
|
||||
|
@ -102,20 +107,32 @@ def get_reading_status(post_json_object: {},
|
|||
languages_understood,
|
||||
"content")
|
||||
if not content:
|
||||
if debug:
|
||||
print('DEBUG: get_reading_status no content')
|
||||
return {}
|
||||
book_url = get_book_link_from_content(content)
|
||||
if not book_url:
|
||||
if debug:
|
||||
print('DEBUG: get_reading_status no book url')
|
||||
return {}
|
||||
|
||||
if not post_obj.get('id'):
|
||||
if debug:
|
||||
print('DEBUG: get_reading_status no id')
|
||||
return {}
|
||||
if not isinstance(post_obj['id'], str):
|
||||
if debug:
|
||||
print('DEBUG: get_reading_status id is not a string')
|
||||
return {}
|
||||
|
||||
# get the published date
|
||||
if not post_obj.get('published'):
|
||||
if debug:
|
||||
print('DEBUG: get_reading_status no published')
|
||||
return {}
|
||||
if not isinstance(post_obj['published'], str):
|
||||
if debug:
|
||||
print('DEBUG: get_reading_status published is not a string')
|
||||
return {}
|
||||
published = post_obj['published']
|
||||
if post_obj.get('updated'):
|
||||
|
@ -123,9 +140,13 @@ def get_reading_status(post_json_object: {},
|
|||
published = post_obj['updated']
|
||||
|
||||
if not post_obj.get('attributedTo'):
|
||||
if debug:
|
||||
print('DEBUG: get_reading_status no attributedTo')
|
||||
return {}
|
||||
actor = get_attributed_to(post_obj['attributedTo'])
|
||||
if not actor:
|
||||
if debug:
|
||||
print('DEBUG: get_reading_status no actor')
|
||||
return {}
|
||||
|
||||
book_image_url = _get_book_image_from_post(post_obj)
|
||||
|
@ -152,8 +173,11 @@ def get_reading_status(post_json_object: {},
|
|||
return book_dict
|
||||
|
||||
# get the book details from a post tag
|
||||
book_dict = get_book_from_post(post_json_object)
|
||||
book_dict = get_book_from_post(post_json_object, debug)
|
||||
if not book_dict:
|
||||
if debug:
|
||||
print('DEBUG: get_reading_status no book_dict ' +
|
||||
str(post_json_object))
|
||||
return {}
|
||||
|
||||
# want to read a book
|
||||
|
@ -225,6 +249,7 @@ def _add_book_to_reader(reader_books_json: {}, book_dict: {}) -> bool:
|
|||
post_days_since_epoch = days_diff.days
|
||||
reader_books_json['timeline'][post_days_since_epoch] = book_url
|
||||
return True
|
||||
print('test8')
|
||||
return False
|
||||
|
||||
|
||||
|
@ -338,8 +363,10 @@ def store_book_events(base_dir: str,
|
|||
book_dict = get_reading_status(post_json_object,
|
||||
system_language,
|
||||
languages_understood,
|
||||
translate)
|
||||
translate, debug)
|
||||
if not book_dict:
|
||||
if debug:
|
||||
print('DEBUG: no book event')
|
||||
return False
|
||||
reading_path = base_dir + '/accounts/reading'
|
||||
if not os.path.isdir(reading_path):
|
||||
|
@ -356,6 +383,8 @@ def store_book_events(base_dir: str,
|
|||
|
||||
reader_books_filename = \
|
||||
readers_path + '/' + actor.replace('/', '#') + '.json'
|
||||
if debug:
|
||||
print('reader_books_filename: ' + reader_books_filename)
|
||||
reader_books_json = {}
|
||||
|
||||
# get the reader from cache if possible
|
||||
|
@ -368,6 +397,8 @@ def store_book_events(base_dir: str,
|
|||
reader_books_json = load_json(reader_books_filename)
|
||||
if _add_book_to_reader(reader_books_json, book_dict):
|
||||
if not save_json(reader_books_json, reader_books_filename):
|
||||
if debug:
|
||||
print('DEBUG: unable to save reader book event')
|
||||
return False
|
||||
|
||||
# update the cache for this reader
|
||||
|
@ -390,6 +421,8 @@ def store_book_events(base_dir: str,
|
|||
book_json = load_json(book_filename)
|
||||
_add_reader_to_book(book_json, book_dict)
|
||||
if not save_json(book_json, book_filename):
|
||||
if debug:
|
||||
print('DEBUG: unable to save book reader')
|
||||
return False
|
||||
|
||||
_update_recent_books_list(base_dir, book_id, debug)
|
||||
|
|
68
tests.py
68
tests.py
|
@ -217,6 +217,7 @@ from followerSync import get_followers_sync_hash
|
|||
from reading import get_book_link_from_content
|
||||
from reading import get_book_from_post
|
||||
from reading import get_reading_status
|
||||
from reading import store_book_events
|
||||
|
||||
|
||||
TEST_SERVER_GROUP_RUNNING = False
|
||||
|
@ -8229,8 +8230,17 @@ def _test_dateformat():
|
|||
assert dtime.tzinfo
|
||||
|
||||
|
||||
def _test_book_link():
|
||||
def _test_book_link(base_dir: str):
|
||||
print('book_link')
|
||||
system_language = 'en'
|
||||
books_cache = {}
|
||||
max_recent_books = 1000
|
||||
max_cached_readers = 10
|
||||
|
||||
reading_dir = base_dir + '/accounts/reading'
|
||||
if os.path.isdir(reading_dir):
|
||||
shutil.rmtree(reading_dir, ignore_errors=False, onerror=None)
|
||||
|
||||
content = 'Not a link'
|
||||
result = get_book_link_from_content(content)
|
||||
assert result is None
|
||||
|
@ -8281,14 +8291,14 @@ def _test_book_link():
|
|||
languages_understood = []
|
||||
translate = {}
|
||||
|
||||
book_dict = get_book_from_post(post_json_object)
|
||||
book_dict = get_book_from_post(post_json_object, True)
|
||||
assert book_dict
|
||||
assert book_dict['name'] == title
|
||||
assert book_dict['href'] == book_url
|
||||
|
||||
result = get_reading_status(post_json_object, 'en',
|
||||
result = get_reading_status(post_json_object, system_language,
|
||||
languages_understood,
|
||||
translate)
|
||||
translate, True)
|
||||
assert result.get('type')
|
||||
assert result['actor'] == actor
|
||||
assert result['published'] == published
|
||||
|
@ -8297,6 +8307,15 @@ def _test_book_link():
|
|||
assert result['name'] == title
|
||||
assert result['id'] == id_str
|
||||
|
||||
assert store_book_events(base_dir,
|
||||
post_json_object,
|
||||
system_language,
|
||||
languages_understood,
|
||||
translate, True,
|
||||
max_recent_books,
|
||||
books_cache,
|
||||
max_cached_readers)
|
||||
|
||||
title = 'The Rise of the Meritocracy'
|
||||
image_url = 'https://bookwyrm.instance/images/previews/covers/6735.jpg'
|
||||
book_url = 'https://bookwyrm.instance/book/7235'
|
||||
|
@ -8322,14 +8341,14 @@ def _test_book_link():
|
|||
'type': 'Edition'}],
|
||||
'to': ['https://www.w3.org/ns/activitystreams#Public'],
|
||||
'type': 'Note'}
|
||||
book_dict = get_book_from_post(post_json_object)
|
||||
book_dict = get_book_from_post(post_json_object, True)
|
||||
assert book_dict
|
||||
assert book_dict['name'] == title
|
||||
assert book_dict['href'] == book_url
|
||||
|
||||
result = get_reading_status(post_json_object, 'en',
|
||||
result = get_reading_status(post_json_object, system_language,
|
||||
languages_understood,
|
||||
translate)
|
||||
translate, True)
|
||||
assert result.get('type')
|
||||
assert result['actor'] == actor
|
||||
assert result['published'] == published
|
||||
|
@ -8338,6 +8357,15 @@ def _test_book_link():
|
|||
assert result['name'] == title
|
||||
assert result['id'] == id_str
|
||||
|
||||
assert store_book_events(base_dir,
|
||||
post_json_object,
|
||||
system_language,
|
||||
languages_understood,
|
||||
translate, True,
|
||||
max_recent_books,
|
||||
books_cache,
|
||||
max_cached_readers)
|
||||
|
||||
title = 'Pirate Enlightenment, or the Real Libertalia'
|
||||
image_url = 'https://bookwyrm.instance/images/previews/covers/5283.jpg'
|
||||
book_url = 'https://bookwyrm.instance/book/78252'
|
||||
|
@ -8362,12 +8390,12 @@ def _test_book_link():
|
|||
'sensitive': False,
|
||||
'to': ['https://www.w3.org/ns/activitystreams#Public'],
|
||||
'type': 'Note'}
|
||||
book_dict = get_book_from_post(post_json_object)
|
||||
book_dict = get_book_from_post(post_json_object, True)
|
||||
assert not book_dict
|
||||
|
||||
result = get_reading_status(post_json_object, 'en',
|
||||
result = get_reading_status(post_json_object, system_language,
|
||||
languages_understood,
|
||||
translate)
|
||||
translate, True)
|
||||
assert result.get('type')
|
||||
assert result['actor'] == actor
|
||||
assert result['published'] == published
|
||||
|
@ -8376,6 +8404,24 @@ def _test_book_link():
|
|||
assert result['rating'] == rating
|
||||
assert result['id'] == id_str
|
||||
|
||||
assert store_book_events(base_dir,
|
||||
post_json_object,
|
||||
system_language,
|
||||
languages_understood,
|
||||
translate, True,
|
||||
max_recent_books,
|
||||
books_cache,
|
||||
max_cached_readers)
|
||||
|
||||
assert books_cache
|
||||
assert 'reader_list' in books_cache
|
||||
if len(books_cache['reader_list']) != 3:
|
||||
pprint(books_cache)
|
||||
print('reader_list: ' + str(books_cache['reader_list']))
|
||||
assert len(books_cache['reader_list']) == 3
|
||||
assert books_cache['reader_list'][2] == actor
|
||||
assert books_cache['readers'].get(actor)
|
||||
|
||||
|
||||
def run_all_tests():
|
||||
base_dir = os.getcwd()
|
||||
|
@ -8394,7 +8440,7 @@ def run_all_tests():
|
|||
_test_checkbox_names()
|
||||
_test_thread_functions()
|
||||
_test_functions()
|
||||
_test_book_link()
|
||||
_test_book_link(base_dir)
|
||||
_test_dateformat()
|
||||
_test_is_right_to_left()
|
||||
_test_format_mixed_rtl()
|
||||
|
|
Loading…
Reference in New Issue