diff --git a/changedetectionio/tests/restock/test_restock.py b/changedetectionio/tests/restock/test_restock.py index 38cbc98e..5a29cc28 100644 --- a/changedetectionio/tests/restock/test_restock.py +++ b/changedetectionio/tests/restock/test_restock.py @@ -2,7 +2,7 @@ import os import time from flask import url_for -from ..util import live_server_setup, wait_for_all_checks, extract_UUID_from_client +from ..util import live_server_setup, wait_for_all_checks, extract_UUID_from_client, wait_for_notification_endpoint_output from changedetectionio.notification import ( default_notification_body, default_notification_format, @@ -94,7 +94,7 @@ def test_restock_detection(client, live_server, measure_memory_usage): assert b'not-in-stock' not in res.data # We should have a notification - time.sleep(2) + wait_for_notification_endpoint_output() assert os.path.isfile("test-datastore/notification.txt"), "Notification received" os.unlink("test-datastore/notification.txt") @@ -103,6 +103,7 @@ def test_restock_detection(client, live_server, measure_memory_usage): set_original_response() client.get(url_for("form_watch_checknow"), follow_redirects=True) wait_for_all_checks(client) + time.sleep(5) assert not os.path.isfile("test-datastore/notification.txt"), "No notification should have fired when it went OUT OF STOCK by default" # BUT we should see that it correctly shows "not in stock" diff --git a/changedetectionio/tests/test_add_replace_remove_filter.py b/changedetectionio/tests/test_add_replace_remove_filter.py index 72c19c37..86c67c05 100644 --- a/changedetectionio/tests/test_add_replace_remove_filter.py +++ b/changedetectionio/tests/test_add_replace_remove_filter.py @@ -2,7 +2,7 @@ import os.path import time from flask import url_for -from .util import live_server_setup, wait_for_all_checks +from .util import live_server_setup, wait_for_all_checks, wait_for_notification_endpoint_output from changedetectionio import html_tools @@ -165,7 +165,7 @@ def test_check_add_line_contains_trigger(client, live_server, measure_memory_usa assert b'unviewed' in res.data # Takes a moment for apprise to fire - time.sleep(3) + wait_for_notification_endpoint_output() assert os.path.isfile("test-datastore/notification.txt"), "Notification fired because I can see the output file" with open("test-datastore/notification.txt", 'rb') as f: response = f.read() diff --git a/changedetectionio/tests/test_filter_exist_changes.py b/changedetectionio/tests/test_filter_exist_changes.py index dabb58af..49d9ff9b 100644 --- a/changedetectionio/tests/test_filter_exist_changes.py +++ b/changedetectionio/tests/test_filter_exist_changes.py @@ -4,7 +4,7 @@ import os import time from flask import url_for -from .util import set_original_response, live_server_setup +from .util import set_original_response, live_server_setup, wait_for_notification_endpoint_output from changedetectionio.model import App @@ -102,14 +102,15 @@ def test_filter_doesnt_exist_then_exists_should_get_notification(client, live_se follow_redirects=True ) assert b"Updated watch." in res.data - time.sleep(3) + wait_for_notification_endpoint_output() # Shouldn't exist, shouldn't have fired assert not os.path.isfile("test-datastore/notification.txt") # Now the filter should exist set_response_with_filter() client.get(url_for("form_watch_checknow"), follow_redirects=True) - time.sleep(3) + + wait_for_notification_endpoint_output() assert os.path.isfile("test-datastore/notification.txt") diff --git a/changedetectionio/tests/test_filter_failure_notification.py b/changedetectionio/tests/test_filter_failure_notification.py index 0cc8711d..24ae405f 100644 --- a/changedetectionio/tests/test_filter_failure_notification.py +++ b/changedetectionio/tests/test_filter_failure_notification.py @@ -1,7 +1,8 @@ import os import time from flask import url_for -from .util import set_original_response, live_server_setup, extract_UUID_from_client, wait_for_all_checks +from .util import set_original_response, live_server_setup, extract_UUID_from_client, wait_for_all_checks, \ + wait_for_notification_endpoint_output from changedetectionio.model import App @@ -107,7 +108,8 @@ def run_filter_test(client, live_server, content_filter): # One more check should trigger the _FILTER_FAILURE_THRESHOLD_ATTEMPTS_DEFAULT threshold client.get(url_for("form_watch_checknow"), follow_redirects=True) wait_for_all_checks(client) - time.sleep(2) # delay for apprise to fire + + wait_for_notification_endpoint_output() # Now it should exist and contain our "filter not found" alert assert os.path.isfile("test-datastore/notification.txt") @@ -127,6 +129,7 @@ def run_filter_test(client, live_server, content_filter): client.get(url_for("form_watch_checknow"), follow_redirects=True) wait_for_all_checks(client) + wait_for_notification_endpoint_output() # It should have sent a notification, but.. assert os.path.isfile("test-datastore/notification.txt") # but it should not contain the info about a failed filter (because there was none in this case) diff --git a/changedetectionio/tests/test_restock_itemprop.py b/changedetectionio/tests/test_restock_itemprop.py index 16560aa6..e9fd6a39 100644 --- a/changedetectionio/tests/test_restock_itemprop.py +++ b/changedetectionio/tests/test_restock_itemprop.py @@ -3,7 +3,7 @@ import os import time from flask import url_for -from .util import live_server_setup, wait_for_all_checks, extract_UUID_from_client +from .util import live_server_setup, wait_for_all_checks, extract_UUID_from_client, wait_for_notification_endpoint_output from ..notification import default_notification_format instock_props = [ @@ -182,7 +182,8 @@ def _run_test_minmax_limit(client, extra_watch_edit_form): # price changed to something LESS than min (900), SHOULD be a change set_original_response(props_markup=instock_props[0], price='890.45') # let previous runs wait - time.sleep(1) + time.sleep(2) + res = client.get(url_for("form_watch_checknow"), follow_redirects=True) assert b'1 watches queued for rechecking.' in res.data wait_for_all_checks(client) @@ -362,7 +363,7 @@ def test_change_with_notification_values(client, live_server): set_original_response(props_markup=instock_props[0], price='1950.45') client.get(url_for("form_watch_checknow")) wait_for_all_checks(client) - time.sleep(3) + wait_for_notification_endpoint_output() assert os.path.isfile("test-datastore/notification.txt"), "Notification received" with open("test-datastore/notification.txt", 'r') as f: notification = f.read() diff --git a/changedetectionio/tests/util.py b/changedetectionio/tests/util.py index 1b0b3e5b..2e8ab014 100644 --- a/changedetectionio/tests/util.py +++ b/changedetectionio/tests/util.py @@ -76,6 +76,17 @@ def set_more_modified_response(): return None +def wait_for_notification_endpoint_output(): + '''Apprise can take a few seconds to fire''' + from os.path import isfile + for i in range(1, 20): + time.sleep(1) + if isfile("test-datastore/notification.txt"): + return True + + return False + + # kinda funky, but works for now def extract_api_key_from_UI(client): import re