From 1c5d1e24f769314102e579891fe3b39462839728 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 20 Jul 2024 13:58:53 +0200 Subject: [PATCH 01/44] Update test results --- test/Calibre-Web TestSummary_Linux.html | 124 ++++++------------------ 1 file changed, 32 insertions(+), 92 deletions(-) diff --git a/test/Calibre-Web TestSummary_Linux.html b/test/Calibre-Web TestSummary_Linux.html index 5b79eaf61..288c74437 100644 --- a/test/Calibre-Web TestSummary_Linux.html +++ b/test/Calibre-Web TestSummary_Linux.html @@ -37,20 +37,20 @@
-

Start Time: 2024-07-11 20:34:31

+

Start Time: 2024-07-18 20:53:44

-

Stop Time: 2024-07-12 03:34:37

+

Stop Time: 2024-07-19 03:48:09

-

Duration: 5h 47 min

+

Duration: 5h 43 min

@@ -2009,7 +2009,7 @@
Traceback (most recent call last):
   File "/home/ozzie/Development/calibre-web-test/test/test_edit_books_metadata.py", line 90, in test_load_metadata
-    elif 'https://amazon.com/' == results[20]['source']:
+    elif len(results)>19 and 'https://amazon.com/' == results[20]['source']:
 IndexError: list index out of range
@@ -2021,11 +2021,11 @@ IndexError: list index out of range - + TestEditBooksOnGdrive 18 - 16 - 2 + 18 + 0 0 0 @@ -2152,31 +2152,11 @@ IndexError: list index out of range - +
TestEditBooksOnGdrive - test_edit_rating
- -
- FAIL -
- - - - + PASS @@ -2208,31 +2188,11 @@ AssertionError: 1 != 0 - +
TestEditBooksOnGdrive - test_watch_metadata
- -
- FAIL -
- - - - + PASS @@ -3340,11 +3300,11 @@ AssertionError: False is not true - + TestLogin 19 - 18 - 1 + 19 + 0 0 0 @@ -3498,31 +3458,11 @@ AssertionError: False is not true - +
TestLogin - test_proxy_login_multi_user
- -
- FAIL -
- - - - + PASS @@ -5674,8 +5614,8 @@ ModuleNotFoundError: No module named 'build_release' Total 499 - 484 - 3 + 487 + 0 2 10   @@ -5705,7 +5645,7 @@ ModuleNotFoundError: No module named 'build_release' Platform - Linux 6.5.0-41-generic #41~22.04.2-Ubuntu SMP PREEMPT_DYNAMIC Mon Jun 3 11:32:55 UTC 2 x86_64 x86_64 + Linux 6.5.0-44-generic #44~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Jun 18 14:36:16 UTC 2 x86_64 x86_64 Basic @@ -5758,14 +5698,14 @@ ModuleNotFoundError: No module named 'build_release' - Flask-Limiter - 3.5.1 + Flask-HTTPAuth + 4.8.0 Basic - Flask-Login - 0.6.3 + Flask-Limiter + 3.5.1 Basic @@ -5891,7 +5831,7 @@ ModuleNotFoundError: No module named 'build_release' PyDrive2 - 1.19.0 + 1.20.0 TestBackupMetadataGdrive @@ -5921,7 +5861,7 @@ ModuleNotFoundError: No module named 'build_release' PyDrive2 - 1.19.0 + 1.20.0 TestCliGdrivedb @@ -5951,7 +5891,7 @@ ModuleNotFoundError: No module named 'build_release' PyDrive2 - 1.19.0 + 1.20.0 TestEbookConvertCalibreGDrive @@ -5981,7 +5921,7 @@ ModuleNotFoundError: No module named 'build_release' PyDrive2 - 1.19.0 + 1.20.0 TestEbookConvertGDriveKepubify @@ -6029,7 +5969,7 @@ ModuleNotFoundError: No module named 'build_release' PyDrive2 - 1.19.0 + 1.20.0 TestEditAuthorsGdrive @@ -6065,7 +6005,7 @@ ModuleNotFoundError: No module named 'build_release' PyDrive2 - 1.19.0 + 1.20.0 TestEditBooksOnGdrive @@ -6107,7 +6047,7 @@ ModuleNotFoundError: No module named 'build_release' PyDrive2 - 1.19.0 + 1.20.0 TestEmbedMetadataGdrive @@ -6137,7 +6077,7 @@ ModuleNotFoundError: No module named 'build_release' PyDrive2 - 1.19.0 + 1.20.0 TestSetupGdrive @@ -6209,7 +6149,7 @@ ModuleNotFoundError: No module named 'build_release' From 12d46d33d9ac861347cb191d3f057cea46aadc46 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Tue, 30 Jul 2024 19:20:13 +0200 Subject: [PATCH 02/44] Search custom integer, custom_float in range Search custom bool like read status (unfinished) --- cps/search.py | 32 ++++++++++++++++++++++++++------ cps/templates/search_form.html | 28 ++++++++++++++++++++++++---- 2 files changed, 50 insertions(+), 10 deletions(-) diff --git a/cps/search.py b/cps/search.py index 4ae8a5d72..30fcfd050 100644 --- a/cps/search.py +++ b/cps/search.py @@ -81,13 +81,24 @@ def adv_search_custom_columns(cc, term, q): if custom_end: q = q.filter(getattr(db.Books, 'custom_column_' + str(c.id)).any( func.datetime(db.cc_classes[c.id].value) <= func.datetime(custom_end))) + elif c.datatype in ["int", "float"]: + custom_low = term.get('custom_column_' + str(c.id) + '_low') + custom_high = term.get('custom_column_' + str(c.id) + '_high') + if custom_low: + q = q.filter(getattr(db.Books, 'custom_column_' + str(c.id)).any( + db.cc_classes[c.id].value >= custom_low)) + if custom_high: + q = q.filter(getattr(db.Books, 'custom_column_' + str(c.id)).any( + db.cc_classes[c.id].value <= custom_high)) else: custom_query = term.get('custom_column_' + str(c.id)) - if custom_query != '' and custom_query is not None: - if c.datatype == 'bool': - q = q.filter(getattr(db.Books, 'custom_column_' + str(c.id)).any( - db.cc_classes[c.id].value == (custom_query == "True"))) - elif c.datatype == 'int' or c.datatype == 'float': + if c.datatype == 'bool' and custom_query != "Any": + # ToDo: + q = q.filter(coalesce(db.cc_classes[config.config_read_column].value, False) != True) + q = q.filter(getattr(db.Books, 'custom_column_' + str(c.id)).any( + db.cc_classes[c.id].value == (custom_query == "True"))) + elif custom_query != '' and custom_query is not None: + if c.datatype == 'int' or c.datatype == 'float': q = q.filter(getattr(db.Books, 'custom_column_' + str(c.id)).any( db.cc_classes[c.id].value == custom_query)) elif c.datatype == 'rating': @@ -275,10 +286,19 @@ def render_adv_search_results(term, offset=None, order=None, limit=None): cc_present = True if column_end: search_term.extend(["{} <= {}".format(c.name, - format_date(datetime.strptime(column_end, "%Y-%m-%d").date(), + format_date(datetime.strptime(column_end, "%Y-%m-%d").date(), format='medium') )]) cc_present = True + if c.datatype in ["int", "float"]: + column_low = term.get('custom_column_' + str(c.id) + '_low') + column_high = term.get('custom_column_' + str(c.id) + '_high') + if column_low: + search_term.extend(["{} >= {}".format(c.name, column_low)]) + cc_present = True + if column_high: + search_term.extend(["{} <= {}".format(c.name,column_high)]) + cc_present = True elif term.get('custom_column_' + str(c.id)): search_term.extend([("{}: {}".format(c.name, term.get('custom_column_' + str(c.id))))]) cc_present = True diff --git a/cps/templates/search_form.html b/cps/templates/search_form.html index cf2fac04b..cdce85a5c 100644 --- a/cps/templates/search_form.html +++ b/cps/templates/search_form.html @@ -158,21 +158,41 @@ {% if cc|length > 0 %} {% for c in cc %}
+ {% if c.datatype == 'bool' %} {% endif %} {% if c.datatype == 'int' %} - +
+
+ + +
+
+ + +
+
{% endif %} - {% if c.datatype == 'float' %} - +
+
+ + +
+
+ + +
+
+ {% endif %} {% if c.datatype == 'datetime' %} From e6ccd42f89904c6a6600168bb4946054d1ed6918 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Wed, 31 Jul 2024 19:25:01 +0200 Subject: [PATCH 03/44] Fixed read statu search with linked column in advanced search --- cps/__init__.py | 0 cps/admin.py | 0 cps/redirect.py | 0 cps/search.py | 29 +++++++++++++++++------------ 4 files changed, 17 insertions(+), 12 deletions(-) mode change 100755 => 100644 cps/__init__.py mode change 100755 => 100644 cps/admin.py mode change 100755 => 100644 cps/redirect.py diff --git a/cps/__init__.py b/cps/__init__.py old mode 100755 new mode 100644 diff --git a/cps/admin.py b/cps/admin.py old mode 100755 new mode 100644 diff --git a/cps/redirect.py b/cps/redirect.py old mode 100755 new mode 100644 diff --git a/cps/search.py b/cps/search.py index 30fcfd050..6054ec9ec 100644 --- a/cps/search.py +++ b/cps/search.py @@ -24,6 +24,7 @@ from flask_babel import format_date from flask_babel import gettext as _ from sqlalchemy.sql.expression import func, not_, and_, or_, text, true from sqlalchemy.sql.functions import coalesce +from sqlalchemy import exists from . import logger, db, calibre_db, config, ub from .usermanagement import login_required_if_no_ano @@ -92,16 +93,16 @@ def adv_search_custom_columns(cc, term, q): db.cc_classes[c.id].value <= custom_high)) else: custom_query = term.get('custom_column_' + str(c.id)) - if c.datatype == 'bool' and custom_query != "Any": - # ToDo: - q = q.filter(coalesce(db.cc_classes[config.config_read_column].value, False) != True) - q = q.filter(getattr(db.Books, 'custom_column_' + str(c.id)).any( - db.cc_classes[c.id].value == (custom_query == "True"))) + if c.datatype == 'bool': + if custom_query != "Any": + if custom_query == "": + q = q.filter(~getattr(db.Books, 'custom_column_' + str(c.id)). + any(db.cc_classes[c.id].value >= 0)) + else: + q = q.filter(getattr(db.Books, 'custom_column_' + str(c.id)).any( + db.cc_classes[c.id].value == bool(custom_query == "True"))) elif custom_query != '' and custom_query is not None: - if c.datatype == 'int' or c.datatype == 'float': - q = q.filter(getattr(db.Books, 'custom_column_' + str(c.id)).any( - db.cc_classes[c.id].value == custom_query)) - elif c.datatype == 'rating': + if c.datatype == 'rating': q = q.filter(getattr(db.Books, 'custom_column_' + str(c.id)).any( db.cc_classes[c.id].value == int(float(custom_query) * 2))) else: @@ -140,10 +141,10 @@ def adv_search_read_status(read_status): db_filter = coalesce(ub.ReadBook.read_status, 0) != ub.ReadBook.STATUS_FINISHED else: try: - if read_status == "True": - db_filter = db.cc_classes[config.config_read_column].value == True + if read_status == "": + db_filter = coalesce(db.cc_classes[config.config_read_column].value, 2) == 2 else: - db_filter = coalesce(db.cc_classes[config.config_read_column].value, False) != True + db_filter = db.cc_classes[config.config_read_column].value == bool(read_status == "True") except (KeyError, AttributeError, IndexError): log.error("Custom Column No.{} does not exist in calibre database".format(config.config_read_column)) flash(_("Custom Column No.%(column)d does not exist in calibre database", @@ -299,6 +300,10 @@ def render_adv_search_results(term, offset=None, order=None, limit=None): if column_high: search_term.extend(["{} <= {}".format(c.name,column_high)]) cc_present = True + elif c.datatype == "bool": + if term.get('custom_column_' + str(c.id)) != "Any": + search_term.extend([("{}: {}".format(c.name, term.get('custom_column_' + str(c.id))))]) + cc_present = True elif term.get('custom_column_' + str(c.id)): search_term.extend([("{}: {}".format(c.name, term.get('custom_column_' + str(c.id))))]) cc_present = True From 249017a4fac72a622369ff0104eacedf20e16329 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Fri, 2 Aug 2024 18:08:18 +0200 Subject: [PATCH 04/44] Added error message to task list --- cps/tasks_status.py | 1 + cps/templates/tasks.html | 1 + 2 files changed, 2 insertions(+) diff --git a/cps/tasks_status.py b/cps/tasks_status.py index 49feb67c2..268200d4e 100644 --- a/cps/tasks_status.py +++ b/cps/tasks_status.py @@ -82,6 +82,7 @@ def render_task_status(tasklist): ret['task_id'] = task.id ret['stat'] = task.stat ret['is_cancellable'] = task.is_cancellable + ret['error'] = task.error rendered_tasklist.append(ret) diff --git a/cps/templates/tasks.html b/cps/templates/tasks.html index 4d645aa52..83d4e8045 100644 --- a/cps/templates/tasks.html +++ b/cps/templates/tasks.html @@ -16,6 +16,7 @@ {{_('Progress')}} {{_('Run Time')}} {{_('Start Time')}} + {{_('Message')}} {% if current_user.role_admin() %} {{_('Actions')}} {% endif %} From abc923ade42cee9975d68310ed1c1e444bb8d543 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 3 Aug 2024 12:57:55 +0200 Subject: [PATCH 05/44] Fix for back function on simple search --- cps/static/js/main.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cps/static/js/main.js b/cps/static/js/main.js index 6b183b07a..fc18890c5 100644 --- a/cps/static/js/main.js +++ b/cps/static/js/main.js @@ -160,15 +160,18 @@ $(document).ready(function() { $(".session").click(function() { window.sessionStorage.setItem("back", window.location.pathname); + window.sessionStorage.setItem("search", window.location.search); }); $("#back").click(function() { var loc = sessionStorage.getItem("back"); + var param = sessionStorage.getItem("search"); if (!loc) { loc = $(this).data("back"); } sessionStorage.removeItem("back"); - window.location.href = loc; + sessionStorage.removeItem("search"); + window.location.href = loc + param; }); From 9b520b194110e1b374099f8ed1792af3b71ab559 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sun, 4 Aug 2024 07:12:22 +0200 Subject: [PATCH 06/44] Fix archiving bookm for kobo sync Fix back function without search parameter Updated Testresults --- cps/static/js/main.js | 3 + cps/web.py | 6 +- setup.cfg | 7 +- test/Calibre-Web TestSummary_Linux.html | 1368 +++++++++-------------- 4 files changed, 530 insertions(+), 854 deletions(-) diff --git a/cps/static/js/main.js b/cps/static/js/main.js index fc18890c5..72f01867b 100644 --- a/cps/static/js/main.js +++ b/cps/static/js/main.js @@ -171,6 +171,9 @@ $("#back").click(function() { } sessionStorage.removeItem("back"); sessionStorage.removeItem("search"); + if (param === null) { + param = ""; + } window.location.href = loc + param; }); diff --git a/cps/web.py b/cps/web.py index 2519ebd5b..f43cdd875 100644 --- a/cps/web.py +++ b/cps/web.py @@ -183,9 +183,9 @@ def toggle_read(book_id): @web.route("/ajax/togglearchived/", methods=['POST']) @user_login_required def toggle_archived(book_id): - is_archived = change_archived_books(book_id, message="Book {} archive bit toggled".format(book_id)) - if is_archived: - remove_synced_book(book_id) + change_archived_books(book_id, message="Book {} archive bit toggled".format(book_id)) + # Remove book from syncd books list to force resync (?) + remove_synced_book(book_id) return "" diff --git a/setup.cfg b/setup.cfg index 5e0882e85..26eef25da 100644 --- a/setup.cfg +++ b/setup.cfg @@ -38,11 +38,9 @@ console_scripts = [options] include_package_data = True install_requires = - Werkzeug<3.0.0 APScheduler>=3.6.3,<3.11.0 Babel>=1.3,<3.0 Flask-Babel>=0.11.1,<4.1.0 - Flask-Login>=0.3.2,<0.6.4 Flask-Principal>=0.3.2,<0.5.1 Flask>=1.0.2,<3.1.0 iso-639>=0.4.5,<0.5.0 @@ -57,10 +55,11 @@ install_requires = flask-wtf>=0.14.2,<1.3.0 chardet>=3.0.0,<4.1.0 advocate>=1.0.0,<1.1.0 - Flask-Limiter>=2.3.0,<3.6.0 + Flask-Limiter>=2.3.0,<3.9.0 regex>=2022.3.2,<2024.6.25 bleach>=6.0.0,<6.2.0 python-magic>=0.4.27,<0.5.0 + flask-httpAuth>=4.4.0,<5.0.0 [options.packages.find] @@ -105,5 +104,5 @@ comics = natsort>=2.2.0,<8.5.0 comicapi>=2.2.0,<3.3.0 kobo = - jsonschema>=3.2.0,<4.23.0 + jsonschema>=3.2.0,<4.24.0 diff --git a/test/Calibre-Web TestSummary_Linux.html b/test/Calibre-Web TestSummary_Linux.html index 6f805974a..3bd3a93d7 100644 --- a/test/Calibre-Web TestSummary_Linux.html +++ b/test/Calibre-Web TestSummary_Linux.html @@ -37,20 +37,20 @@
-

Start Time: 2024-08-02 21:21:17

+

Start Time: 2024-08-03 20:30:20

-

Stop Time: 2024-08-03 04:29:18

+

Stop Time: 2024-08-04 04:01:30

-

Duration: 5h 53 min

+

Duration: 6h 17 min

@@ -702,12 +702,12 @@ - + TestEbookConvertCalibre 15 - 12 - 2 - 1 + 15 + 0 + 0 0 Detail @@ -716,33 +716,11 @@ - +
TestEbookConvertCalibre - test_calibre_log
- -
- FAIL -
- - - - + PASS @@ -774,31 +752,11 @@ AssertionError: 1 != 2 - +
TestEbookConvertCalibre - test_convert_only
- -
- ERROR -
- - - - + PASS @@ -848,33 +806,11 @@ IndexError: list index out of range - +
TestEbookConvertCalibre - test_email_only
- -
- FAIL -
- - - - + PASS @@ -916,12 +852,12 @@ AssertionError: 1 != 2 - + TestEbookConvertCalibreGDrive 7 - 3 - 3 - 1 + 7 + 0 + 0 0 Detail @@ -930,95 +866,29 @@ AssertionError: 1 != 2 - +
TestEbookConvertCalibreGDrive - test_convert_email
- -
- FAIL -
- - - - + PASS - +
TestEbookConvertCalibreGDrive - test_convert_failed_and_email
- -
- ERROR -
- - - - + PASS - +
TestEbookConvertCalibreGDrive - test_convert_only
- -
- FAIL -
- - - - + PASS @@ -1041,33 +911,11 @@ AssertionError: 1 != 0 - +
TestEbookConvertCalibreGDrive - test_email_only
- -
- FAIL -
- - - - + PASS @@ -1082,12 +930,12 @@ AssertionError: 1 != 2 - + TestEbookConvertKepubify 3 - 2 + 3 + 0 0 - 1 0 Detail @@ -1105,31 +953,11 @@ AssertionError: 1 != 2 - +
TestEbookConvertKepubify - test_convert_only
- -
- ERROR -
- - - - + PASS @@ -1184,11 +1012,11 @@ IndexError: list index out of range
Traceback (most recent call last):
-  File "/home/ozzie/Development/calibre-web-test/test/test_ebook_convert_kepubify_gdrive.py", line 212, in test_convert_only
+  File "/home/ozzie/Development/calibre-web-test/test/test_ebook_convert_kepubify_gdrive.py", line 239, in test_convert_only
     task_len, ret = self.wait_tasks(tasks, 1)
   File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 1636, in wait_tasks
     self.assertEqual(expected, task_len)
-AssertionError: 1 != 0
+AssertionError: 1 != 3
@@ -2378,8 +2206,8 @@ NameError: name 'SMB_LIB' is not defined
Traceback (most recent call last):
-  File "/home/ozzie/Development/calibre-web-test/test/test_edit_books_metadata.py", line 90, in test_load_metadata
-    elif len(results)>19 and 'https://amazon.com/' == results[20]['source']:
+  File "/home/ozzie/Development/calibre-web-test/test/test_edit_books_metadata.py", line 69, in test_load_metadata
+    if 'https://comicvine.gamespot.com/' == results[10]['source']:
 IndexError: list index out of range
@@ -2391,12 +2219,12 @@ IndexError: list index out of range - + TestEditBooksOnGdrive 18 - 16 + 18 + 0 0 - 2 0 Detail @@ -2459,86 +2287,20 @@ IndexError: list index out of range - +
TestEditBooksOnGdrive - test_edit_custom_float
- -
- ERROR -
- - - - + PASS - +
TestEditBooksOnGdrive - test_edit_custom_int
- -
- ERROR -
- - - - + PASS @@ -2634,11 +2396,11 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 - + TestLoadMetadataScholar 1 - 1 0 + 1 0 0 @@ -2648,21 +2410,41 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 - +
TestLoadMetadataScholar - test_load_metadata
- PASS + +
+ FAIL +
+ + + + - + TestSTARTTLS 3 - 3 - 0 + 2 + 1 0 0 @@ -2672,11 +2454,33 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 - +
TestSTARTTLS - test_STARTTLS
- PASS + +
+ FAIL +
+ + + + @@ -2700,12 +2504,12 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 - + TestSSL 7 - 3 - 1 - 3 + 7 + 0 + 0 0 Detail @@ -2741,201 +2545,38 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 - +
TestSSL - test_SSL_non_admin_user
- -
- FAIL -
- - - - + PASS - +
TestSSL - test_SSL_only
- -
- ERROR -
- - - - + PASS - +
TestSSL - test_email_limit
- -
- ERROR -
- - - - + PASS - +
TestSSL - test_filepicker_two_file
- -
- ERROR -
- - - - - - - - - - - _ErrorHolder - 1 - 0 - 0 - 1 - 0 - - Detail - - - - - - - -
tearDownClass (test_email_ssl)
- - -
- ERROR -
- - - - + PASS @@ -2949,13 +2590,13 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 0 0 - Detail + Detail - +
TestEmbedMetadata - test_convert_file_embed_metadata
@@ -2964,7 +2605,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 - +
TestEmbedMetadata - test_convert_kepub_embed_metadata
@@ -2973,7 +2614,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 - +
TestEmbedMetadata - test_download_check_metadata
@@ -2982,7 +2623,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 - +
TestEmbedMetadata - test_download_kepub_embed_metadata
@@ -2991,7 +2632,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 - +
TestEmbedMetadata - test_download_permissions_missing_file
@@ -3000,7 +2641,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 - +
TestEmbedMetadata - test_email_epub_embed_metadata
@@ -3018,13 +2659,13 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 0 0 - Detail + Detail - +
TestEmbedMetadataGdrive - test_convert_file_embed_metadata
@@ -3033,7 +2674,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 - +
TestEmbedMetadataGdrive - test_convert_kepub_embed_metadata
@@ -3042,7 +2683,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 - +
TestEmbedMetadataGdrive - test_download_check_metadata
@@ -3051,7 +2692,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 - +
TestEmbedMetadataGdrive - test_download_kepub_embed_metadata
@@ -3069,13 +2710,13 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 0 0 - Detail + Detail - +
TestBookDatabase - test_invalid_book_path
@@ -3093,13 +2734,13 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 0 0 - Detail + Detail - +
TestErrorReadColumn - test_invalid_custom_column
@@ -3108,7 +2749,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 - +
TestErrorReadColumn - test_invalid_custom_read_column
@@ -3126,13 +2767,13 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 0 1 - Detail + Detail - +
TestFilePicker - test_filepicker_limited_file
@@ -3141,19 +2782,19 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 - +
TestFilePicker - test_filepicker_new_file
- SKIP + SKIP
- @@ -930,43 +930,84 @@ - - TestEbookConvertKepubify - 3 - 3 + + _FailedTest + 2 0 0 + 2 0 - Detail + Detail - + -
TestEbookConvertKepubify - test_convert_deactivate
+
_FailedTest - test_ebook_convert_kepubify
+ + +
+ ERROR +
+ + + - PASS - + -
TestEbookConvertKepubify - test_convert_only
+
_FailedTest - test_pip_install
- PASS - - - - - - -
TestEbookConvertKepubify - test_convert_wrong_excecutable
+ +
+ ERROR +
+ + + - PASS @@ -1228,13 +1269,13 @@ TestEditBooks - 38 + 37 36 0 0 - 2 + 1 - Detail + Detail @@ -1437,33 +1478,7 @@ - - -
TestEditBooks - test_rename_uppercase_lowercase
- - -
- SKIP -
- - - - - - - - - +
TestEditBooks - test_typeahead_author
@@ -1472,7 +1487,7 @@ - +
TestEditBooks - test_typeahead_functions
@@ -1481,7 +1496,7 @@ - +
TestEditBooks - test_typeahead_language
@@ -1490,7 +1505,7 @@ - +
TestEditBooks - test_typeahead_publisher
@@ -1499,7 +1514,7 @@ - +
TestEditBooks - test_typeahead_series
@@ -1508,7 +1523,7 @@ - +
TestEditBooks - test_typeahead_tag
@@ -1517,7 +1532,7 @@ - +
TestEditBooks - test_upload_book_cb7
@@ -1526,7 +1541,7 @@ - +
TestEditBooks - test_upload_book_cbr
@@ -1535,7 +1550,7 @@ - +
TestEditBooks - test_upload_book_cbt
@@ -1544,7 +1559,7 @@ - +
TestEditBooks - test_upload_book_cbz
@@ -1553,7 +1568,7 @@ - +
TestEditBooks - test_upload_book_epub
@@ -1562,7 +1577,7 @@ - +
TestEditBooks - test_upload_book_fb2
@@ -1571,7 +1586,7 @@ - +
TestEditBooks - test_upload_book_lit
@@ -1580,7 +1595,7 @@ - +
TestEditBooks - test_upload_book_mobi
@@ -1589,7 +1604,7 @@ - +
TestEditBooks - test_upload_book_pdf
@@ -1598,7 +1613,7 @@ - +
TestEditBooks - test_upload_cbz_coverformats
@@ -1607,7 +1622,7 @@ - +
TestEditBooks - test_upload_cover_hdd
@@ -3921,48 +3936,6 @@ IndexError: list index out of range - - TestPipInstall - 3 - 3 - 0 - 0 - 0 - - Detail - - - - - - - -
TestPipInstall - test_command_start
- - PASS - - - - - - -
TestPipInstall - test_foldername_database_location
- - PASS - - - - - - -
TestPipInstall - test_module_start
- - PASS - - - - - TestReader 8 @@ -3971,13 +3944,13 @@ IndexError: list index out of range 0 1 - Detail + Detail - +
TestReader - test_cb7_reader
@@ -3986,7 +3959,7 @@ IndexError: list index out of range - +
TestReader - test_comic_MACOS_files
@@ -3995,7 +3968,7 @@ IndexError: list index out of range - +
TestReader - test_comic_reader
@@ -4004,7 +3977,7 @@ IndexError: list index out of range - +
TestReader - test_epub_reader
@@ -4013,7 +3986,7 @@ IndexError: list index out of range - +
TestReader - test_pdf_reader
@@ -4022,7 +3995,7 @@ IndexError: list index out of range - +
TestReader - test_single_file_comic
@@ -4031,7 +4004,7 @@ IndexError: list index out of range - +
TestReader - test_sound_listener
@@ -4040,7 +4013,7 @@ IndexError: list index out of range - +
TestReader - test_txt_reader
@@ -4058,13 +4031,13 @@ IndexError: list index out of range 0 0 - Detail + Detail - +
TestReadOnlyDatabase - test_readonly_path
@@ -4082,13 +4055,13 @@ IndexError: list index out of range 0 0 - Detail + Detail - +
TestRegister - test_forgot_password
@@ -4097,7 +4070,7 @@ IndexError: list index out of range - +
TestRegister - test_illegal_email
@@ -4106,7 +4079,7 @@ IndexError: list index out of range - +
TestRegister - test_limit_domain
@@ -4115,7 +4088,7 @@ IndexError: list index out of range - +
TestRegister - test_register_no_server
@@ -4124,7 +4097,7 @@ IndexError: list index out of range - +
TestRegister - test_registering_only_email
@@ -4133,7 +4106,7 @@ IndexError: list index out of range - +
TestRegister - test_registering_user
@@ -4142,7 +4115,7 @@ IndexError: list index out of range - +
TestRegister - test_registering_user_fail
@@ -4151,7 +4124,7 @@ IndexError: list index out of range - +
TestRegister - test_user_change_password
@@ -4169,13 +4142,13 @@ IndexError: list index out of range 0 0 - Detail + Detail - +
TestReverseProxy - test_logout
@@ -4184,7 +4157,7 @@ IndexError: list index out of range - +
TestReverseProxy - test_move_page
@@ -4193,7 +4166,7 @@ IndexError: list index out of range - +
TestReverseProxy - test_next
@@ -4202,7 +4175,7 @@ IndexError: list index out of range - +
TestReverseProxy - test_reverse_about
@@ -4220,13 +4193,13 @@ IndexError: list index out of range 0 1 - Detail + Detail - +
TestShelf - test_access_shelf
@@ -4235,7 +4208,7 @@ IndexError: list index out of range - +
TestShelf - test_add_shelf_from_search
@@ -4244,7 +4217,7 @@ IndexError: list index out of range - +
TestShelf - test_adv_search_shelf
@@ -4253,7 +4226,7 @@ IndexError: list index out of range - +
TestShelf - test_arrange_shelf
@@ -4262,7 +4235,7 @@ IndexError: list index out of range - +
TestShelf - test_create_public_shelf
@@ -4271,7 +4244,7 @@ IndexError: list index out of range - +
TestShelf - test_create_public_shelf_no_permission
@@ -4280,7 +4253,7 @@ IndexError: list index out of range - +
TestShelf - test_delete_book_of_shelf
@@ -4289,7 +4262,7 @@ IndexError: list index out of range - +
TestShelf - test_private_shelf
@@ -4298,7 +4271,7 @@ IndexError: list index out of range - +
TestShelf - test_public_private_shelf
@@ -4307,7 +4280,7 @@ IndexError: list index out of range - +
TestShelf - test_public_shelf
@@ -4316,7 +4289,7 @@ IndexError: list index out of range - +
TestShelf - test_rename_shelf
@@ -4325,7 +4298,7 @@ IndexError: list index out of range - +
TestShelf - test_shelf_action_non_shelf_edit_role
@@ -4334,7 +4307,7 @@ IndexError: list index out of range - +
TestShelf - test_shelf_anonymous
@@ -4343,19 +4316,19 @@ IndexError: list index out of range - +
TestShelf - test_shelf_database_change
- SKIP + SKIP
-