kopia lustrzana https://github.com/dgtlmoon/changedetection.io
"Send test notification" in "Restock" mode was not working correclty when restock tokens "{{restock.price}}" were in the notification body (#2737)
rodzic
82e0b99b07
commit
1543edca24
|
@ -537,20 +537,26 @@ def changedetection_app(config=None, datastore_o=None):
|
||||||
import random
|
import random
|
||||||
from .apprise_asset import asset
|
from .apprise_asset import asset
|
||||||
apobj = apprise.Apprise(asset=asset)
|
apobj = apprise.Apprise(asset=asset)
|
||||||
|
|
||||||
# so that the custom endpoints are registered
|
# so that the custom endpoints are registered
|
||||||
from changedetectionio.apprise_plugin import apprise_custom_api_call_wrapper
|
from changedetectionio.apprise_plugin import apprise_custom_api_call_wrapper
|
||||||
is_global_settings_form = request.args.get('mode', '') == 'global-settings'
|
is_global_settings_form = request.args.get('mode', '') == 'global-settings'
|
||||||
is_group_settings_form = request.args.get('mode', '') == 'group-settings'
|
is_group_settings_form = request.args.get('mode', '') == 'group-settings'
|
||||||
|
|
||||||
# Use an existing random one on the global/main settings form
|
# Use an existing random one on the global/main settings form
|
||||||
if not watch_uuid and (is_global_settings_form or is_group_settings_form) \
|
if not watch_uuid and (is_global_settings_form or is_group_settings_form) \
|
||||||
and datastore.data.get('watching'):
|
and datastore.data.get('watching'):
|
||||||
|
|
||||||
logger.debug(f"Send test notification - Choosing random Watch {watch_uuid}")
|
logger.debug(f"Send test notification - Choosing random Watch {watch_uuid}")
|
||||||
watch_uuid = random.choice(list(datastore.data['watching'].keys()))
|
watch_uuid = random.choice(list(datastore.data['watching'].keys()))
|
||||||
watch = datastore.data['watching'].get(watch_uuid)
|
|
||||||
else:
|
|
||||||
watch = None
|
|
||||||
|
|
||||||
|
if not watch_uuid:
|
||||||
|
return make_response("Error: You must have atleast one watch configured for 'test notification' to work", 400)
|
||||||
|
|
||||||
|
watch = datastore.data['watching'].get(watch_uuid)
|
||||||
|
|
||||||
|
notification_urls = None
|
||||||
|
|
||||||
|
if request.form.get('notification_urls'):
|
||||||
notification_urls = request.form['notification_urls'].strip().splitlines()
|
notification_urls = request.form['notification_urls'].strip().splitlines()
|
||||||
|
|
||||||
if not notification_urls:
|
if not notification_urls:
|
||||||
|
@ -569,12 +575,12 @@ def changedetection_app(config=None, datastore_o=None):
|
||||||
|
|
||||||
|
|
||||||
if not notification_urls:
|
if not notification_urls:
|
||||||
return 'No Notification URLs set/found'
|
return 'Error: No Notification URLs set/found'
|
||||||
|
|
||||||
for n_url in notification_urls:
|
for n_url in notification_urls:
|
||||||
if len(n_url.strip()):
|
if len(n_url.strip()):
|
||||||
if not apobj.add(n_url):
|
if not apobj.add(n_url):
|
||||||
return f'Error - {n_url} is not a valid AppRise URL.'
|
return f'Error: {n_url} is not a valid AppRise URL.'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# use the same as when it is triggered, but then override it with the form test values
|
# use the same as when it is triggered, but then override it with the form test values
|
||||||
|
@ -593,11 +599,13 @@ def changedetection_app(config=None, datastore_o=None):
|
||||||
if 'notification_body' in request.form and request.form['notification_body'].strip():
|
if 'notification_body' in request.form and request.form['notification_body'].strip():
|
||||||
n_object['notification_body'] = request.form.get('notification_body', '').strip()
|
n_object['notification_body'] = request.form.get('notification_body', '').strip()
|
||||||
|
|
||||||
|
n_object.update(watch.extra_notification_token_values())
|
||||||
|
|
||||||
from . import update_worker
|
from . import update_worker
|
||||||
new_worker = update_worker.update_worker(update_q, notification_q, app, datastore)
|
new_worker = update_worker.update_worker(update_q, notification_q, app, datastore)
|
||||||
new_worker.queue_notification_for_watch(notification_q=notification_q, n_object=n_object, watch=watch)
|
new_worker.queue_notification_for_watch(notification_q=notification_q, n_object=n_object, watch=watch)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return make_response({'error': str(e)}, 400)
|
return make_response(f"Error: str(e)", 400)
|
||||||
|
|
||||||
return 'OK - Sent test notifications'
|
return 'OK - Sent test notifications'
|
||||||
|
|
||||||
|
|
|
@ -28,17 +28,14 @@ $(document).ready(function() {
|
||||||
url: notification_base_url,
|
url: notification_base_url,
|
||||||
data : data,
|
data : data,
|
||||||
statusCode: {
|
statusCode: {
|
||||||
400: function() {
|
400: function(data) {
|
||||||
// More than likely the CSRF token was lost when the server restarted
|
// More than likely the CSRF token was lost when the server restarted
|
||||||
alert("There was a problem processing the request, please reload the page.");
|
alert(data.responseText);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).done(function(data){
|
}).done(function(data){
|
||||||
console.log(data);
|
console.log(data);
|
||||||
alert(data);
|
alert(data);
|
||||||
}).fail(function(data){
|
|
||||||
console.log(data);
|
|
||||||
alert('There was an error communicating with the server.');
|
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -429,24 +429,15 @@ def test_global_send_test_notification(client, live_server, measure_memory_usage
|
||||||
follow_redirects=True
|
follow_redirects=True
|
||||||
)
|
)
|
||||||
|
|
||||||
#2727 - be sure a test notification when there are zero watches works ( should all be deleted now)
|
######### Test global/system settings - When everything is deleted it should give a helpful error
|
||||||
|
# See #2727
|
||||||
os.unlink("test-datastore/notification.txt")
|
|
||||||
|
|
||||||
|
|
||||||
######### Test global/system settings
|
|
||||||
res = client.post(
|
res = client.post(
|
||||||
url_for("ajax_callback_send_notification_test")+"?mode=global-settings",
|
url_for("ajax_callback_send_notification_test")+"?mode=global-settings",
|
||||||
data={"notification_urls": test_notification_url},
|
data={"notification_urls": test_notification_url},
|
||||||
follow_redirects=True
|
follow_redirects=True
|
||||||
)
|
)
|
||||||
|
assert res.status_code == 400
|
||||||
|
assert b"Error: You must have atleast one watch configured for 'test notification' to work" in res.data
|
||||||
|
|
||||||
assert res.status_code != 400
|
|
||||||
assert res.status_code != 500
|
|
||||||
|
|
||||||
# Give apprise time to fire
|
|
||||||
time.sleep(4)
|
|
||||||
|
|
||||||
with open("test-datastore/notification.txt", 'r') as f:
|
|
||||||
x = f.read()
|
|
||||||
assert 'change detection is cool 网站监测 内容更新了' in x
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ import os
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from flask import url_for
|
from flask import url_for
|
||||||
from .util import live_server_setup, wait_for_all_checks, wait_for_notification_endpoint_output
|
from .util import live_server_setup, wait_for_all_checks, wait_for_notification_endpoint_output, extract_UUID_from_client
|
||||||
from ..notification import default_notification_format
|
from ..notification import default_notification_format
|
||||||
|
|
||||||
instock_props = [
|
instock_props = [
|
||||||
|
@ -367,6 +367,12 @@ def test_change_with_notification_values(client, live_server):
|
||||||
assert "new price 1950.45" in notification
|
assert "new price 1950.45" in notification
|
||||||
assert "title new price 1950.45" in notification
|
assert "title new price 1950.45" in notification
|
||||||
|
|
||||||
|
## Now test the "SEND TEST NOTIFICATION" is working
|
||||||
|
os.unlink("test-datastore/notification.txt")
|
||||||
|
uuid = extract_UUID_from_client(client)
|
||||||
|
res = client.post(url_for("ajax_callback_send_notification_test", watch_uuid=uuid), data={}, follow_redirects=True)
|
||||||
|
time.sleep(5)
|
||||||
|
assert os.path.isfile("test-datastore/notification.txt"), "Notification received"
|
||||||
|
|
||||||
|
|
||||||
def test_data_sanity(client, live_server):
|
def test_data_sanity(client, live_server):
|
||||||
|
|
Ładowanie…
Reference in New Issue