@ -4,7 +4,13 @@ import re
from flask import url_for
from . util import set_original_response , set_modified_response , set_more_modified_response , live_server_setup
import logging
from changedetectionio . notification import default_notification_body , default_notification_title
from changedetectionio . notification import (
default_notification_body ,
default_notification_format ,
default_notification_title ,
valid_notification_formats ,
)
def test_setup ( live_server ) :
live_server_setup ( live_server )
@ -20,9 +26,26 @@ def test_check_notification(client, live_server):
# Re 360 - new install should have defaults set
res = client . get ( url_for ( " settings_page " ) )
notification_url = url_for ( ' test_notification_endpoint ' , _external = True ) . replace ( ' http ' , ' json ' )
assert default_notification_body . encode ( ) in res . data
assert default_notification_title . encode ( ) in res . data
#####################
# Set this up for when we remove the notification from the watch, it should fallback with these details
res = client . post (
url_for ( " settings_page " ) ,
data = { " application-notification_urls " : notification_url ,
" application-notification_title " : " fallback-title " + default_notification_title ,
" application-notification_body " : " fallback-body " + default_notification_body ,
" application-notification_format " : default_notification_format ,
" requests-time_between_check-minutes " : 180 ,
' application-fetch_backend ' : " html_requests " } ,
follow_redirects = True
)
assert b " Settings updated. " in res . data
# When test mode is in BASE_URL env mode, we should see this already configured
env_base_url = os . getenv ( ' BASE_URL ' , ' ' ) . strip ( )
if len ( env_base_url ) :
@ -47,8 +70,6 @@ def test_check_notification(client, live_server):
# Goto the edit page, add our ignore text
# Add our URL to the import page
url = url_for ( ' test_notification_endpoint ' , _external = True )
notification_url = url . replace ( ' http ' , ' json ' )
print ( " >>>> Notification URL: " + notification_url )
@ -71,7 +92,6 @@ def test_check_notification(client, live_server):
" url " : test_url ,
" tag " : " my tag " ,
" title " : " my title " ,
# No 'notification_use_default' here, so it's effectively False/off
" headers " : " " ,
" fetch_backend " : " html_requests " } )
@ -159,6 +179,30 @@ def test_check_notification(client, live_server):
# be sure we see it in the output log
assert b ' New ChangeDetection.io Notification - ' + test_url . encode ( ' utf-8 ' ) in res . data
set_original_response ( )
res = client . post (
url_for ( " edit_page " , uuid = " first " ) ,
data = {
" url " : test_url ,
" tag " : " my tag " ,
" title " : " my title " ,
" notification_urls " : ' ' ,
" notification_title " : ' ' ,
" notification_body " : ' ' ,
" notification_format " : default_notification_format ,
" fetch_backend " : " html_requests " } ,
follow_redirects = True
)
assert b " Updated watch. " in res . data
time . sleep ( 2 )
# Verify what was sent as a notification, this file should exist
with open ( " test-datastore/notification.txt " , " r " ) as f :
notification_submission = f . read ( )
assert " fallback-title " in notification_submission
assert " fallback-body " in notification_submission
# cleanup for the next
client . get (
url_for ( " form_delete " , uuid = " all " ) ,
@ -181,20 +225,20 @@ def test_notification_validation(client, live_server):
assert b " Watch added " in res . data
# Re #360 some validation
res = client . post (
url_for ( " edit_page " , uuid = " first " ) ,
data = { " notification_urls " : ' json://localhost/foobar ' ,
" notification_title " : " " ,
" notification_body " : " " ,
" notification_format " : " Text " ,
" url " : test_url ,
" tag " : " my tag " ,
" title " : " my title " ,
" headers " : " " ,
" fetch_backend " : " html_requests " } ,
follow_redirects = True
)
assert b " Notification Body and Title is required when a Notification URL is used " in res . data
# res = client.post(
# url_for("edit_page", uuid="first"),
# data={"notification_urls": 'json://localhost/foobar',
# "notification_title": "",
# "notification_body": "",
# "notification_format": "Text",
# "url": test_url,
# "tag": "my tag",
# "title": "my title",
# "headers": "",
# "fetch_backend": "html_requests"},
# follow_redirects=True
# )
# assert b"Notification Body and Title is required when a Notification URL is used" in res.data
# Now adding a wrong token should give us an error
res = client . post (
@ -217,81 +261,4 @@ def test_notification_validation(client, live_server):
follow_redirects = True
)
# Check that the default VS watch specific notification is hit
def test_check_notification_use_default ( client , live_server ) :
set_original_response ( )
notification_url = url_for ( ' test_notification_endpoint ' , _external = True ) . replace ( ' http ' , ' json ' )
test_url = url_for ( ' test_endpoint ' , _external = True )
res = client . post (
url_for ( " form_quick_watch_add " ) ,
data = { " url " : test_url , " tag " : ' ' } ,
follow_redirects = True
)
assert b " Watch added " in res . data
## Setup the local one and enable it
res = client . post (
url_for ( " edit_page " , uuid = " first " ) ,
data = { " notification_urls " : notification_url ,
" notification_title " : " watch-notification " ,
" notification_body " : " watch-body " ,
' notification_use_default ' : " True " ,
" notification_format " : " Text " ,
" url " : test_url ,
" tag " : " my tag " ,
" title " : " my title " ,
" headers " : " " ,
" fetch_backend " : " html_requests " } ,
follow_redirects = True
)
res = client . post (
url_for ( " settings_page " ) ,
data = { " application-notification_title " : " global-notifications-title " ,
" application-notification_body " : " global-notifications-body \n " ,
" application-notification_format " : " Text " ,
" application-notification_urls " : notification_url ,
" requests-time_between_check-minutes " : 180 ,
" fetch_backend " : " html_requests "
} ,
follow_redirects = True
)
# A change should by default trigger a notification of the global-notifications
time . sleep ( 1 )
set_modified_response ( )
client . get ( url_for ( " form_watch_checknow " ) , follow_redirects = True )
time . sleep ( 2 )
with open ( " test-datastore/notification.txt " , " r " ) as f :
assert ' global-notifications-title ' in f . read ( )
## Setup the local one and enable it
res = client . post (
url_for ( " edit_page " , uuid = " first " ) ,
data = { " notification_urls " : notification_url ,
" notification_title " : " watch-notification " ,
" notification_body " : " watch-body " ,
# No 'notification_use_default' here, so it's effectively False/off = "dont use default, use this one"
" notification_format " : " Text " ,
" url " : test_url ,
" tag " : " my tag " ,
" title " : " my title " ,
" headers " : " " ,
" fetch_backend " : " html_requests " } ,
follow_redirects = True
)
set_original_response ( )
client . get ( url_for ( " form_watch_checknow " ) , follow_redirects = True )
time . sleep ( 2 )
assert os . path . isfile ( " test-datastore/notification.txt " )
with open ( " test-datastore/notification.txt " , " r " ) as f :
assert ' watch-notification ' in f . read ( )
# cleanup for the next
client . get (
url_for ( " form_delete " , uuid = " all " ) ,
follow_redirects = True
)