mirror of
				https://github.com/dgtlmoon/changedetection.io.git
				synced 2025-11-04 00:27:48 +00:00 
			
		
		
		
	Compare commits
	
		
			3 Commits
		
	
	
		
			0.50.17
			...
			notificato
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					daa5ccfc93 | ||
| 
						 | 
					a9e7a54066 | ||
| 
						 | 
					93a7df5462 | 
@@ -537,21 +537,27 @@ def changedetection_app(config=None, datastore_o=None):
 | 
			
		||||
        import random
 | 
			
		||||
        from .apprise_asset import asset
 | 
			
		||||
        apobj = apprise.Apprise(asset=asset)
 | 
			
		||||
 | 
			
		||||
        # so that the custom endpoints are registered
 | 
			
		||||
        from changedetectionio.apprise_plugin import apprise_custom_api_call_wrapper
 | 
			
		||||
        is_global_settings_form = request.args.get('mode', '') == 'global-settings'
 | 
			
		||||
        is_group_settings_form = request.args.get('mode', '') == 'group-settings'
 | 
			
		||||
 | 
			
		||||
        # 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) \
 | 
			
		||||
                and datastore.data.get('watching'):
 | 
			
		||||
 | 
			
		||||
            logger.debug(f"Send test notification - Choosing random Watch {watch_uuid}")
 | 
			
		||||
            watch_uuid = random.choice(list(datastore.data['watching'].keys()))
 | 
			
		||||
            watch = datastore.data['watching'].get(watch_uuid)
 | 
			
		||||
        else:
 | 
			
		||||
            watch = None
 | 
			
		||||
 | 
			
		||||
        notification_urls = request.form['notification_urls'].strip().splitlines()
 | 
			
		||||
        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()
 | 
			
		||||
 | 
			
		||||
        if not notification_urls:
 | 
			
		||||
            logger.debug("Test notification - Trying by group/tag in the edit form if available")
 | 
			
		||||
@@ -569,12 +575,12 @@ def changedetection_app(config=None, datastore_o=None):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        if not notification_urls:
 | 
			
		||||
            return 'No Notification URLs set/found'
 | 
			
		||||
            return 'Error: No Notification URLs set/found'
 | 
			
		||||
 | 
			
		||||
        for n_url in notification_urls:
 | 
			
		||||
            if len(n_url.strip()):
 | 
			
		||||
                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:
 | 
			
		||||
            # 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():
 | 
			
		||||
                n_object['notification_body'] = request.form.get('notification_body', '').strip()
 | 
			
		||||
 | 
			
		||||
            n_object.update(watch.extra_notification_token_values())
 | 
			
		||||
 | 
			
		||||
            from . import update_worker
 | 
			
		||||
            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)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            return make_response({'error': str(e)}, 400)
 | 
			
		||||
            return make_response(f"Error: str(e)", 400)
 | 
			
		||||
 | 
			
		||||
        return 'OK - Sent test notifications'
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,17 +28,14 @@ $(document).ready(function() {
 | 
			
		||||
      url: notification_base_url,
 | 
			
		||||
      data : data,
 | 
			
		||||
        statusCode: {
 | 
			
		||||
        400: function() {
 | 
			
		||||
            // More than likely the CSRF token was lost when the server restarted
 | 
			
		||||
          alert("There was a problem processing the request, please reload the page.");
 | 
			
		||||
        400: function(data) {
 | 
			
		||||
          // More than likely the CSRF token was lost when the server restarted
 | 
			
		||||
          alert(data.responseText);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }).done(function(data){
 | 
			
		||||
      console.log(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
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    #2727 - be sure a test notification when there are zero watches works ( should all be deleted now)
 | 
			
		||||
 | 
			
		||||
    os.unlink("test-datastore/notification.txt")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    ######### Test global/system settings
 | 
			
		||||
    ######### Test global/system settings - When everything is deleted it should give a helpful error
 | 
			
		||||
    # See #2727
 | 
			
		||||
    res = client.post(
 | 
			
		||||
        url_for("ajax_callback_send_notification_test")+"?mode=global-settings",
 | 
			
		||||
        data={"notification_urls": test_notification_url},
 | 
			
		||||
        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
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
instock_props = [
 | 
			
		||||
@@ -367,6 +367,12 @@ def test_change_with_notification_values(client, live_server):
 | 
			
		||||
        assert "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):
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user