@ -321,3 +321,154 @@ def test_clone_tag_on_quickwatchform_add(client, live_server):
res = client . get ( url_for ( " tags.delete_all " ) , follow_redirects = True )
res = client . get ( url_for ( " tags.delete_all " ) , follow_redirects = True )
assert b ' All tags deleted ' in res . data
assert b ' All tags deleted ' in res . data
def test_order_of_filters_tag_filter_and_watch_filter ( client , live_server ) :
# Add a tag with some config, import a tag and it should roughly work
res = client . post (
url_for ( " tags.form_tag_add " ) ,
data = { " name " : " test-tag-keep-order " } ,
follow_redirects = True
)
assert b " Tag added " in res . data
assert b " test-tag-keep-order " in res . data
tag_filters = [
' #only-this ' , # duplicated filters
' #only-this ' ,
' #only-this ' ,
' #only-this ' ,
]
res = client . post (
url_for ( " tags.form_tag_edit_submit " , uuid = " first " ) ,
data = { " name " : " test-tag-keep-order " ,
" include_filters " : ' \n ' . join ( tag_filters ) } ,
follow_redirects = True
)
assert b " Updated " in res . data
tag_uuid = get_UUID_for_tag_name ( client , name = " test-tag-keep-order " )
res = client . get (
url_for ( " tags.form_tag_edit " , uuid = " first " )
)
assert b " #only-this " in res . data
d = """ <html>
< body >
Some initial text < br >
< p id = " only-this " > And 1 this < / p >
< br >
< p id = " not-this " > And 2 this < / p >
< p id = " " > And 3 this < / p > < ! - - / html / body / p [ 3 ] / - - >
< p id = " " > And 4 this < / p > < ! - - / html / body / p [ 4 ] / - - >
< p id = " " > And 5 this < / p > < ! - - / html / body / p [ 5 ] / - - >
< p id = " " > And 6 this < / p > < ! - - / html / body / p [ 6 ] / - - >
< p id = " " > And 7 this < / p > < ! - - / html / body / p [ 7 ] / - - >
< p id = " " > And 8 this < / p > < ! - - / html / body / p [ 8 ] / - - >
< p id = " " > And 9 this < / p > < ! - - / html / body / p [ 9 ] / - - >
< p id = " " > And 10 this < / p > < ! - - / html / body / p [ 10 ] / - - >
< p id = " " > And 11 this < / p > < ! - - / html / body / p [ 11 ] / - - >
< p id = " " > And 12 this < / p > < ! - - / html / body / p [ 12 ] / - - >
< p id = " " > And 13 this < / p > < ! - - / html / body / p [ 13 ] / - - >
< p id = " " > And 14 this < / p > < ! - - / html / body / p [ 14 ] / - - >
< p id = " not-this " > And 15 this < / p > < ! - - / html / body / p [ 15 ] / - - >
< / body >
< / html >
"""
with open ( " test-datastore/endpoint-content.txt " , " w " ) as f :
f . write ( d )
test_url = url_for ( ' test_endpoint ' , _external = True )
res = client . post (
url_for ( " import_page " ) ,
data = { " urls " : test_url } ,
follow_redirects = True
)
assert b " 1 Imported " in res . data
wait_for_all_checks ( client )
filters = [
' /html/body/p[3] ' ,
' /html/body/p[4] ' ,
' /html/body/p[5] ' ,
' /html/body/p[6] ' ,
' /html/body/p[7] ' ,
' /html/body/p[8] ' ,
' /html/body/p[9] ' ,
' /html/body/p[10] ' ,
' /html/body/p[11] ' ,
' /html/body/p[12] ' ,
' /html/body/p[13] ' , # duplicated tags
' /html/body/p[13] ' ,
' /html/body/p[13] ' ,
' /html/body/p[13] ' ,
' /html/body/p[13] ' ,
' /html/body/p[14] ' ,
]
res = client . post (
url_for ( " edit_page " , uuid = " first " ) ,
data = { " include_filters " : ' \n ' . join ( filters ) ,
" url " : test_url ,
" tags " : " test-tag-keep-order " ,
" headers " : " " ,
' fetch_backend ' : " html_requests " } ,
follow_redirects = True
)
assert b " Updated watch. " in res . data
wait_for_all_checks ( client )
res = client . get (
url_for ( " preview_page " , uuid = " first " ) ,
follow_redirects = True
)
assert b " And 1 this " in res . data # test-tag-keep-order
a_tag_filter_check = b ' And 1 this ' #'#only-this' of tag_filters
# check there is no duplication of tag_filters
assert res . data . count ( a_tag_filter_check ) == 1 , f " duplicated filters didn ' t removed { res . data . count ( a_tag_filter_check ) } of { a_tag_filter_check } in { res . data =} "
a_filter_check = b " And 13 this " # '/html/body/p[13]'
# check there is no duplication of filters
assert res . data . count ( a_filter_check ) == 1 , f " duplicated filters didn ' t removed. { res . data . count ( a_filter_check ) } of { a_filter_check } in { res . data =} "
a_filter_check_not_include = b " And 2 this " # '/html/body/p[2]'
assert a_filter_check_not_include not in res . data
checklist = [
b " And 3 this " ,
b " And 4 this " ,
b " And 5 this " ,
b " And 6 this " ,
b " And 7 this " ,
b " And 8 this " ,
b " And 9 this " ,
b " And 10 this " ,
b " And 11 this " ,
b " And 12 this " ,
b " And 13 this " ,
b " And 14 this " ,
b " And 1 this " , # result of filter from tag.
]
# check whether everything a user requested is there
for test in checklist :
assert test in res . data
# check whether everything a user requested is in order of filters.
n = 0
for test in checklist :
t_index = res . data [ n : ] . find ( test )
# if the text is not searched, return -1.
assert t_index > = 0 , f """ failed because { test =} not in { res . data [ n : ] =}
#####################
Looks like some feature changed the order of result of filters .
#####################
the { test } appeared before . { test in res . data [ : n ] = }
{ res . data [ : n ] = }
"""
n + = t_index + len ( test )
res = client . get ( url_for ( " form_delete " , uuid = " all " ) , follow_redirects = True )
assert b ' Deleted ' in res . data