diff --git a/changedetectionio/tests/test_live_preview.py b/changedetectionio/tests/test_live_preview.py new file mode 100644 index 00000000..dd6c3d95 --- /dev/null +++ b/changedetectionio/tests/test_live_preview.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 + +from flask import url_for +from changedetectionio.tests.util import live_server_setup, wait_for_all_checks, extract_UUID_from_client + + +def set_response(): + + data = f""" + Awesome, you made it
+yeah the socks request worked
+something to ignore
+something to trigger
+ + + """ + + with open("test-datastore/endpoint-content.txt", "w") as f: + f.write(data) + +def test_content_filter_live_preview(client, live_server, measure_memory_usage): + live_server_setup(live_server) + set_response() + + test_url = url_for('test_endpoint', _external=True) + + res = client.post( + url_for("form_quick_watch_add"), + data={"url": test_url, "tags": ''}, + follow_redirects=True + ) + uuid = extract_UUID_from_client(client) + res = client.post( + url_for("edit_page", uuid=uuid), + data={ + "include_filters": "", + "fetch_backend": 'html_requests', + "ignore_text": "something to ignore", + "trigger_text": "something to trigger", + "url": test_url, + }, + follow_redirects=True + ) + assert b"Updated watch." in res.data + wait_for_all_checks(client) + + # The endpoint is a POST and accepts the form values to override the watch preview + import json + + # DEFAULT OUTPUT WITHOUT ANYTHING UPDATED/CHANGED - SHOULD SEE THE WATCH DEFAULTS + res = client.post( + url_for("watch_get_preview_rendered", uuid=uuid) + ) + default_return = json.loads(res.data.decode('utf-8')) + assert default_return.get('after_filter') + assert default_return.get('before_filter') + assert default_return.get('ignore_line_numbers') == [3] # "something to ignore" line 3 + assert default_return.get('trigger_line_numbers') == [4] # "something to trigger" line 4 + + # SEND AN UPDATE AND WE SHOULD SEE THE OUTPUT CHANGE SO WE KNOW TO HIGHLIGHT NEW STUFF + res = client.post( + url_for("watch_get_preview_rendered", uuid=uuid), + data={ + "include_filters": "", + "fetch_backend": 'html_requests', + "ignore_text": "sOckS", # Also be sure case insensitive works + "trigger_text": "AweSOme", + "url": test_url, + }, + ) + reply = json.loads(res.data.decode('utf-8')) + assert reply.get('after_filter') + assert reply.get('before_filter') + assert reply.get('ignore_line_numbers') == [2] # Ignored - "socks" on line 2 + assert reply.get('trigger_line_numbers') == [1] # Triggers "Awesome" in line 1 + + res = client.get(url_for("form_delete", uuid="all"), follow_redirects=True) + assert b'Deleted' in res.data