@ -7,15 +7,19 @@ from ..util import live_server_setup, wait_for_all_checks, extract_UUID_from_cli
def test_setup ( client , live_server ) :
def test_setup ( client , live_server ) :
live_server_setup ( live_server )
live_server_setup ( live_server )
# Add a site in paused mode, add an invalid filter, we should still have visual selector data ready
# Add a site in paused mode, add an invalid filter, we should still have visual selector data ready
def test_visual_selector_content_ready ( client , live_server ) :
def test_visual_selector_content_ready ( client , live_server ) :
import os
import os
import json
import json
assert os . getenv ( ' PLAYWRIGHT_DRIVER_URL ' ) , " Needs PLAYWRIGHT_DRIVER_URL set for this test "
assert os . getenv ( ' PLAYWRIGHT_DRIVER_URL ' ) , " Needs PLAYWRIGHT_DRIVER_URL set for this test "
# Add our URL to the import page, because the docker container (playwright/selenium) wont be able to connect to our usual test url
# Add our URL to the import page, because the docker container (playwright/selenium) wont be able to connect to our usual test url
test_url = " https://changedetection.io/ci-test/test-runjs.html "
test_url = url_for ( ' test_interactive_html_endpoint ' , _external = True )
test_url = test_url . replace ( ' localhost.localdomain ' , ' cdio ' )
test_url = test_url . replace ( ' localhost ' , ' cdio ' )
res = client . post (
res = client . post (
url_for ( " form_quick_watch_add " ) ,
url_for ( " form_quick_watch_add " ) ,
@ -23,28 +27,31 @@ def test_visual_selector_content_ready(client, live_server):
follow_redirects = True
follow_redirects = True
)
)
assert b " Watch added in Paused state, saving will unpause " in res . data
assert b " Watch added in Paused state, saving will unpause " in res . data
uuid = extract_UUID_from_client ( client )
res = client . post (
res = client . post (
url_for ( " edit_page " , uuid = " first " , unpause_on_save = 1 ) ,
url_for ( " edit_page " , uuid = uuid , unpause_on_save = 1 ) ,
data = {
data = {
" url " : test_url ,
" url " : test_url ,
" tags " : " " ,
" tags " : " " ,
" headers " : " " ,
# For now, cookies doesnt work in headers because it must be a full cookiejar object
' fetch_backend ' : " html_webdriver " ,
' headers ' : " testheader: yes \b user-agent: MyCustomAgent " ,
' webdriver_js_execute_code ' : ' document.querySelector( " button[name=test-button] " ).click(); '
' fetch_backend ' : " html_webdriver " ,
} ,
} ,
follow_redirects = True
follow_redirects = True
)
)
assert b " unpaused " in res . data
assert b " unpaused " in res . data
wait_for_all_checks ( client )
wait_for_all_checks ( client )
uuid = extract_UUID_from_client ( client )
# Check the JS execute code before extract worked
assert live_server . app . config [ ' DATASTORE ' ] . data [ ' watching ' ] [ uuid ] . history_n > = 1 , " Watch history had atleast 1 (everything fetched OK) "
res = client . get (
res = client . get (
url_for ( " preview_page " , uuid = " first " ) ,
url_for ( " preview_page " , uuid = uuid ) ,
follow_redirects = True
follow_redirects = True
)
)
assert b ' I smell JavaScript ' in res . data
assert b " testheader: yes " in res . data
assert b " user-agent: mycustomagent " in res . data
assert os . path . isfile ( os . path . join ( ' test-datastore ' , uuid , ' last-screenshot.png ' ) ) , " last-screenshot.png should exist "
assert os . path . isfile ( os . path . join ( ' test-datastore ' , uuid , ' last-screenshot.png ' ) ) , " last-screenshot.png should exist "
assert os . path . isfile ( os . path . join ( ' test-datastore ' , uuid , ' elements.json ' ) ) , " xpath elements.json data should exist "
assert os . path . isfile ( os . path . join ( ' test-datastore ' , uuid , ' elements.json ' ) ) , " xpath elements.json data should exist "
@ -74,30 +81,33 @@ def test_visual_selector_content_ready(client, live_server):
def test_basic_browserstep ( client , live_server ) :
def test_basic_browserstep ( client , live_server ) :
assert os . getenv ( ' PLAYWRIGHT_DRIVER_URL ' ) , " Needs PLAYWRIGHT_DRIVER_URL set for this test "
#live_server_setup(live_server)
#live_server_setup(live_server)
assert os . getenv ( ' PLAYWRIGHT_DRIVER_URL ' ) , " Needs PLAYWRIGHT_DRIVER_URL set for this test "
# Add our URL to the import page, because the docker container (playwright/selenium) wont be able to connect to our usual test url
test_url = url_for ( ' test_interactive_html_endpoint ' , _external = True )
test_url = " https://changedetection.io/ci-test/test-runjs.html "
test_url = test_url . replace ( ' localhost.localdomain ' , ' cdio ' )
test_url = test_url . replace ( ' localhost ' , ' cdio ' )
res = client . post (
res = client . post (
url_for ( " form_quick_watch_add " ) ,
url_for ( " form_quick_watch_add " ) ,
data = { " url " : test_url , " tags " : ' ' , ' edit_and_watch_submit_button ' : ' Edit > Watch ' } ,
data = { " url " : test_url , " tags " : ' ' , ' edit_and_watch_submit_button ' : ' Edit > Watch ' } ,
follow_redirects = True
follow_redirects = True
)
)
assert b " Watch added in Paused state, saving will unpause " in res . data
assert b " Watch added in Paused state, saving will unpause " in res . data
res = client . post (
res = client . post (
url_for ( " edit_page " , uuid = " first " , unpause_on_save = 1 ) ,
url_for ( " edit_page " , uuid = " first " , unpause_on_save = 1 ) ,
data = {
data = {
" url " : test_url ,
" url " : test_url ,
" tags " : " " ,
" tags " : " " ,
" headers " : " " ,
' fetch_backend ' : " html_webdriver " ,
' fetch_backend ' : " html_webdriver " ,
' browser_steps-0-operation ' : ' Goto site ' ,
' browser_steps-0-operation ' : ' Goto site ' ,
' browser_steps-1-operation ' : ' Click element ' ,
' browser_steps-1-operation ' : ' Click element ' ,
' browser_steps-1-selector ' : ' button[name=test-button] ' ,
' browser_steps-1-selector ' : ' button[name=test-button] ' ,
' browser_steps-1-optional_value ' : ' ' ,
' browser_steps-1-optional_value ' : ' '
# For now, cookies doesnt work in headers because it must be a full cookiejar object
' headers ' : " testheader: yes \b user-agent: MyCustomAgent " ,
} ,
} ,
follow_redirects = True
follow_redirects = True
)
)
@ -105,6 +115,9 @@ def test_basic_browserstep(client, live_server):
wait_for_all_checks ( client )
wait_for_all_checks ( client )
uuid = extract_UUID_from_client ( client )
uuid = extract_UUID_from_client ( client )
assert live_server . app . config [ ' DATASTORE ' ] . data [ ' watching ' ] [ uuid ] . history_n > = 1 , " Watch history had atleast 1 (everything fetched OK) "
assert b " This text should be removed " not in res . data
# Check HTML conversion detected and workd
# Check HTML conversion detected and workd
res = client . get (
res = client . get (
@ -114,13 +127,19 @@ def test_basic_browserstep(client, live_server):
assert b " This text should be removed " not in res . data
assert b " This text should be removed " not in res . data
assert b " I smell JavaScript because the button was pressed " in res . data
assert b " I smell JavaScript because the button was pressed " in res . data
assert b " testheader: yes " in res . data
assert b " user-agent: mycustomagent " in res . data
four_o_four_url = url_for ( ' test_endpoint ' , status_code = 404 , _external = True )
four_o_four_url = four_o_four_url . replace ( ' localhost.localdomain ' , ' cdio ' )
four_o_four_url = four_o_four_url . replace ( ' localhost ' , ' cdio ' )
# now test for 404 errors
# now test for 404 errors
res = client . post (
res = client . post (
url_for ( " edit_page " , uuid = uuid , unpause_on_save = 1 ) ,
url_for ( " edit_page " , uuid = uuid , unpause_on_save = 1 ) ,
data = {
data = {
" url " : " https://changedetection.io/404 " ,
" url " : four_o_four_url ,
" tags " : " " ,
" tags " : " " ,
" headers " : " " ,
' fetch_backend ' : " html_webdriver " ,
' fetch_backend ' : " html_webdriver " ,
' browser_steps-0-operation ' : ' Goto site ' ,
' browser_steps-0-operation ' : ' Goto site ' ,
' browser_steps-1-operation ' : ' Click element ' ,
' browser_steps-1-operation ' : ' Click element ' ,