diff --git a/vasl_templates/webapp/tests/fixtures/new-default-scenario.json b/vasl_templates/webapp/tests/fixtures/new-default-scenario.json
index e52bf61..f37d67b 100644
--- a/vasl_templates/webapp/tests/fixtures/new-default-scenario.json
+++ b/vasl_templates/webapp/tests/fixtures/new-default-scenario.json
@@ -1,15 +1,18 @@
{
-"SCENARIO_NAME": "default scenario name",
-"SCENARIO_LOCATION": "default location",
+"SCENARIO_NAME": "default
scenario name",
+"SCENARIO_LOCATION": "default
location",
+"SCENARIO_ID": "sc
id",
"SCENARIO_DATE": "2000-12-25",
"SCENARIO_WIDTH": "1px",
"PLAYER_1": "american",
+"PLAYER_1_DESCRIPTION": "player 1
description",
"PLAYER_1_ELR": "1",
"PLAYER_1_SAN": "2",
"PLAYER_2": "japanese",
+"PLAYER_2_DESCRIPTION": "player 2
description",
"PLAYER_2_ELR": "3",
"PLAYER_2_SAN": "4",
diff --git a/vasl_templates/webapp/tests/test_capabilities.py b/vasl_templates/webapp/tests/test_capabilities.py
index f28ff5b..7b4c60b 100644
--- a/vasl_templates/webapp/tests/test_capabilities.py
+++ b/vasl_templates/webapp/tests/test_capabilities.py
@@ -4,12 +4,11 @@ import re
import pytest
from selenium.webdriver.common.action_chains import ActionChains
-from selenium.webdriver.common.keys import Keys
from vasl_templates.webapp.tests.utils import \
- init_webapp, select_menu_option, select_tab, click_dialog_button, \
+ init_webapp, select_menu_option, select_tab, click_dialog_button, drag_sortable_entry_to_trash, \
find_child, find_children, wait_for_clipboard, \
- set_scenario_date
+ set_scenario_date, load_html_textbox
from vasl_templates.webapp.tests import pytest_options
from vasl_templates.webapp.tests.test_vo_reports import get_vo_report
from vasl_templates.webapp.tests.test_vehicles_ordnance import add_vo
@@ -509,8 +508,8 @@ def test_custom_capabilities( webapp, webdriver ): #pylint: disable=too-many-sta
def check_capabilities_in_dialog( expected ):
"""Check the vehicle's capabilities."""
elems = find_children( "#vo_capabilities-sortable li" )
- elems2 = [ find_child("input[type='text']",c) for c in elems ]
- assert [ e.get_attribute("value") for e in elems2 ] == expected
+ elems2 = [ find_child( "div.html-textbox", c ) for c in elems ]
+ assert [ e.get_attribute( "innerHTML" ) for e in elems2 ] == expected
return elems
# check the vehicle's snippet
@@ -521,23 +520,24 @@ def test_custom_capabilities( webapp, webdriver ): #pylint: disable=too-many-sta
elems = find_children( "li", vehicles_sortable )
assert len(elems) == 1
ActionChains( webdriver ).double_click( elems[0] ).perform()
- elems = check_capabilities_in_dialog( [ "XYZ", "
cs 4" ] )
+ elems = check_capabilities_in_dialog( [ "XYZ", "
cs 4" ] )
# edit one of the capabilities
- elem = find_child( "input[type='text']", elems[0] )
+ elem = find_child( "div.html-textbox", elems[0] )
elem.clear()
elem.send_keys( "XYZ (modified)" )
# delete a capability
- ActionChains( webdriver ).key_down( Keys.CONTROL ).click( elems[1] ).perform()
- ActionChains( webdriver ).key_up( Keys.CONTROL ).perform()
+ sortable = find_child( "#vo_capabilities-sortable" )
+ drag_sortable_entry_to_trash( sortable, 1, ".dragger" )
# add a new capability
elem = find_child( "#vo_capabilities-add" )
elem.click()
- elems = find_children( "#vo_capabilities-sortable input[type='text']" )
+ elems = find_children( "#vo_capabilities-sortable div.html-textbox" )
assert len(elems) == 2
- elems[1].send_keys( "a
new capability" )
+ htb = find_children( "div.html-textbox", sortable )[1]
+ load_html_textbox( htb, "a
new capability" )
# save the changes and check the vehicle's snippet
click_dialog_button( "OK" )
@@ -561,9 +561,9 @@ def test_custom_capabilities( webapp, webdriver ): #pylint: disable=too-many-sta
elems = check_capabilities_in_dialog( [ "XYZ (modified)", "a
new capability" ] )
# delete all capabilities
- for elem in elems:
- ActionChains( webdriver ).key_down( Keys.CONTROL ).click( elem ).perform()
- ActionChains( webdriver ).key_up( Keys.CONTROL ).perform()
+ sortable = find_child( "#vo_capabilities-sortable" )
+ for _ in range( len(elems) ):
+ drag_sortable_entry_to_trash( sortable, 0, ".dragger" )
click_dialog_button( "OK" )
check_snippet( "" )
@@ -594,12 +594,11 @@ def test_custom_capabilities( webapp, webdriver ): #pylint: disable=too-many-sta
elems = find_children( "li", vehicles_sortable )
assert len(elems) == 1
ActionChains( webdriver ).double_click( elems[0] ).perform()
- elems = find_children( "#vo_capabilities-sortable input[type='text']" )
+ elems = find_children( "#vo_capabilities-sortable div.html-textbox" )
assert len(elems) == 2
elems[0].clear()
elems[0].send_keys( "XYZ" )
- elems[1].clear()
- elems[1].send_keys( "
cs 4" )
+ load_html_textbox( elems[1], "
cs 4" )
click_dialog_button( "OK" )
# make sure the custom capabilities are no longer saved in the scenario
@@ -633,8 +632,8 @@ def test_custom_comments( webapp, webdriver ): #pylint: disable=too-many-stateme
def check_comments_in_dialog( expected ):
"""Check the vehicle's comments."""
elems = find_children( "#vo_comments-sortable li" )
- elems2 = [ find_child("input[type='text']",c) for c in elems ]
- assert [ e.get_attribute("value") for e in elems2 ] == expected
+ elems2 = [ find_child( "div.html-textbox", c ) for c in elems ]
+ assert [ e.get_attribute( "innerHTML" ) for e in elems2 ] == expected
return elems
# check the vehicle's snippet
@@ -648,20 +647,21 @@ def test_custom_comments( webapp, webdriver ): #pylint: disable=too-many-stateme
elems = check_comments_in_dialog( [ "a comment", "another comment" ] )
# edit one of the comments
- elem = find_child( "input[type='text']", elems[0] )
+ elem = find_child( "div.html-textbox", elems[0] )
elem.clear()
elem.send_keys( "a comment (modified)" )
# delete a comment
- ActionChains( webdriver ).key_down( Keys.CONTROL ).click( elems[1] ).perform()
- ActionChains( webdriver ).key_up( Keys.CONTROL ).perform()
+ sortable = find_child( "#vo_comments-sortable" )
+ drag_sortable_entry_to_trash( sortable, 1, ".dragger" )
# add a new comment
elem = find_child( "#vo_comments-add" )
elem.click()
- elems = find_children( "#vo_comments-sortable input[type='text']" )
+ elems = find_children( "#vo_comments-sortable div.html-textbox" )
assert len(elems) == 2
- elems[1].send_keys( "a
new comment" )
+ htb = find_children( "div.html-textbox", sortable )[1]
+ load_html_textbox( htb, "a
new comment" )
# save the changes and check the vehicle's snippet
click_dialog_button( "OK" )
@@ -685,9 +685,9 @@ def test_custom_comments( webapp, webdriver ): #pylint: disable=too-many-stateme
elems = check_comments_in_dialog( [ "a comment (modified)", "a
new comment" ] )
# delete all comments
- for elem in elems:
- ActionChains( webdriver ).key_down( Keys.CONTROL ).click( elem ).perform()
- ActionChains( webdriver ).key_up( Keys.CONTROL ).perform()
+ sortable = find_child( "#vo_comments-sortable" )
+ for _ in range( len(elems) ):
+ drag_sortable_entry_to_trash( sortable, 0, ".dragger" )
click_dialog_button( "OK" )
check_snippet( "" )
@@ -718,7 +718,7 @@ def test_custom_comments( webapp, webdriver ): #pylint: disable=too-many-stateme
elems = find_children( "li", vehicles_sortable )
assert len(elems) == 1
ActionChains( webdriver ).double_click( elems[0] ).perform()
- elems = find_children( "#vo_comments-sortable input[type='text']" )
+ elems = find_children( "#vo_comments-sortable div.html-textbox" )
assert len(elems) == 2
elems[0].clear()
elems[0].send_keys( "a comment" )
@@ -795,7 +795,7 @@ def test_capability_updates_in_ui( webapp, webdriver ):
ActionChains( webdriver ).double_click( elems[1] ).perform()
elem = find_child( "#vo_capabilities-add" )
elem.click()
- elems = find_children( "#vo_capabilities-sortable input[type='text']" )
+ elems = find_children( "#vo_capabilities-sortable div.html-textbox" )
assert len(elems) == 4
elems[3].send_keys( "foo!" )
click_dialog_button( "OK" )
@@ -890,7 +890,10 @@ def test_elite( webapp, webdriver ): #pylint: disable=too-many-statements
def check_elite2( expected, custom ):
"""Check the elite status of the vehicle in the edit dialog."""
vo_name = find_child( "#edit-vo .header .vo-name" ).text
- caps = [ c.get_attribute("value") for c in find_children("#vo_capabilities-sortable input[type='text']") ]
+ caps = [
+ c.get_attribute( "innerHTML" )
+ for c in find_children( "#vo_capabilities-sortable div.html-textbox" )
+ ]
if expected:
assert vo_name.endswith( "\u24ba" )
expected = [ "H9", "s10", "sD7", "CS 5" ]
@@ -919,7 +922,7 @@ def test_elite( webapp, webdriver ): #pylint: disable=too-many-statements
ActionChains( webdriver ).double_click( get_sortable_elem() ).perform()
elem = find_child( "#vo_capabilities-add" )
elem.click()
- elems = find_children( "#vo_capabilities-sortable input[type='text']" )
+ elems = find_children( "#vo_capabilities-sortable div.html-textbox" )
assert len(elems) == 5
elems[4].send_keys( "HE10" )
click_dialog_button( "OK" )
@@ -966,10 +969,10 @@ def test_elite( webapp, webdriver ): #pylint: disable=too-many-statements
elem = find_child( "#edit-vo .capabilities .elite" )
elem.click()
check_elite2( True, True )
- elems = find_children( "#vo_capabilities-sortable li" )
+ sortable = find_child( "#vo_capabilities-sortable" )
+ elems = find_children( "li", sortable )
webdriver.execute_script( "arguments[0].scrollIntoView(true);", elems[4] )
- ActionChains( webdriver ).key_down( Keys.CONTROL ).click( elems[4] ).perform()
- ActionChains( webdriver ).key_up( Keys.CONTROL ).perform()
+ drag_sortable_entry_to_trash( sortable, 4, ".dragger" )
click_dialog_button( "OK" )
check_elite( True, False )
diff --git a/vasl_templates/webapp/tests/test_default_scenario.py b/vasl_templates/webapp/tests/test_default_scenario.py
index 3b280c7..59f0690 100644
--- a/vasl_templates/webapp/tests/test_default_scenario.py
+++ b/vasl_templates/webapp/tests/test_default_scenario.py
@@ -16,13 +16,17 @@ def test_default_scenario( webapp, webdriver ):
init_webapp( webapp, webdriver )
# wait for the scenario to load
- elem = find_child( "input[name='SCENARIO_NAME']" )
- wait_for( 5, lambda: elem.get_attribute("value") != "" )
+ elem = find_child( "div.html-textbox[name='SCENARIO_NAME']" )
+ wait_for( 5, lambda: elem.get_attribute( "innerHTML" ) != "" )
def check_textbox( field_name, expected ):
"""Check that a field has been loaded correctly."""
elem = find_child( "input[name='{}']".format( field_name ) )
assert elem.get_attribute( "value" ) == expected
+ def check_html_textbox( field_name, expected ):
+ """Check that a field has been loaded correctly."""
+ elem = find_child( "div.html-textbox[name='{}']".format( field_name ) )
+ assert elem.get_attribute( "innerHTML" ) == expected
def check_trumbowyg( field_name, expected ):
"""Check that a field has been loaded correctly."""
assert unload_trumbowyg( field_name ) == expected
@@ -34,16 +38,19 @@ def test_default_scenario( webapp, webdriver ):
select_tab( "scenario" )
# check the scenario fields
- check_textbox( "SCENARIO_NAME", "default scenario name" )
- check_textbox( "SCENARIO_LOCATION", "default location" )
+ check_html_textbox( "SCENARIO_NAME", "default
scenario name" )
+ check_html_textbox( "SCENARIO_LOCATION", "default
location" )
+ check_html_textbox( "SCENARIO_ID", "sc
id" )
check_textbox( "SCENARIO_DATE", "12/25/2000" )
check_textbox( "SCENARIO_WIDTH", "1px" )
# check the player fields
check_droplist( "PLAYER_1", "american" )
+ check_html_textbox( "PLAYER_1_DESCRIPTION", "player 1
description" )
check_droplist( "PLAYER_1_ELR", "1" )
check_droplist( "PLAYER_1_SAN", "2" )
check_droplist( "PLAYER_2", "japanese" )
+ check_html_textbox( "PLAYER_2_DESCRIPTION", "player 2
description" )
check_droplist( "PLAYER_2_ELR", "3" )
check_droplist( "PLAYER_2_SAN", "4" )
check_textbox( "PLAYERS_WIDTH", "" )
diff --git a/vasl_templates/webapp/tests/test_dirty_scenario_checks.py b/vasl_templates/webapp/tests/test_dirty_scenario_checks.py
index 567737f..c1d441d 100644
--- a/vasl_templates/webapp/tests/test_dirty_scenario_checks.py
+++ b/vasl_templates/webapp/tests/test_dirty_scenario_checks.py
@@ -60,18 +60,25 @@ def test_dirty_scenario_checks( webapp, webdriver ): #pylint: disable=too-many-s
else:
webdriver.execute_script( "arguments[0].value = arguments[1]", target, new_val )
return target, prev_val, new_val
- elif target.tag_name == "div":
- assert "trumbowyg-editor" in get_css_classes( target )
- prev_val = unload_trumbowyg( target )
- new_val = "changed value"
- load_trumbowyg( target, new_val )
- return target, prev_val, new_val
elif target.tag_name == "select":
sel = Select( target )
prev_val = sel.first_selected_option.get_attribute( "value" )
select_droplist_index( sel, 2 )
new_val = sel.first_selected_option.get_attribute( "value" )
return target, prev_val, new_val
+ else:
+ css_classes = get_css_classes( target )
+ if "trumbowyg-editor" in css_classes:
+ prev_val = unload_trumbowyg( target )
+ new_val = "changed value"
+ load_trumbowyg( target, new_val )
+ return target, prev_val, new_val
+ elif "html-textbox" in css_classes:
+ prev_val = target.get_attribute( "innerHTML" )
+ new_val = "changed value"
+ target.clear()
+ target.send_keys( new_val )
+ return target, prev_val, new_val
assert False
return None
@@ -83,13 +90,19 @@ def test_dirty_scenario_checks( webapp, webdriver ): #pylint: disable=too-many-s
assert get_sortable_entry_count( state ) == 1
elif state[0].tag_name == "input":
assert state[0].get_attribute("value") == state[2]
- elif state[0].tag_name == "div":
- assert "trumbowyg-editor" in get_css_classes( state[0] )
- assert unload_trumbowyg( state[0] ) == state[2]
elif state[0].tag_name == "select":
assert Select(state[0]).first_selected_option.get_attribute("value") == state[2]
else:
- assert False
+ css_classes = get_css_classes( state[0] )
+ if "trumbowyg-editor" in css_classes:
+ assert unload_trumbowyg( state[0] ) == state[2]
+ elif "html-textbox" in css_classes:
+ val = state[0].get_attribute( "innerHTML" )
+ if val.endswith( "
" ):
+ val = val[:-4] # nb: for Firefox
+ assert val == state[2]
+ else:
+ assert False
def revert_field( param, state ):
"""Revert a change we made to a field."""
@@ -103,13 +116,17 @@ def test_dirty_scenario_checks( webapp, webdriver ): #pylint: disable=too-many-s
state[0].send_keys( state[1] )
else:
webdriver.execute_script( "arguments[0].value = arguments[1]", state[0], state[1] )
- elif state[0].tag_name == "div":
- assert "trumbowyg-editor" in get_css_classes( state[0] )
- load_trumbowyg( state[0], state[1] )
elif state[0].tag_name == "select":
select_droplist_val( Select(state[0]), state[1] )
else:
- assert False
+ css_classes = get_css_classes( state[0] )
+ if "trumbowyg-editor" in css_classes:
+ load_trumbowyg( state[0], state[1] )
+ elif "html-textbox" in css_classes:
+ state[0].clear()
+ state[0].send_keys( state[1] )
+ else:
+ assert False
def check_is_dirty( expected ):
"""Check if the scenario is being flagged as dirty."""
diff --git a/vasl_templates/webapp/tests/test_sanitize.py b/vasl_templates/webapp/tests/test_html.py
similarity index 87%
rename from vasl_templates/webapp/tests/test_sanitize.py
rename to vasl_templates/webapp/tests/test_html.py
index 34cf47f..458d95c 100644
--- a/vasl_templates/webapp/tests/test_sanitize.py
+++ b/vasl_templates/webapp/tests/test_html.py
@@ -1,9 +1,10 @@
-""" Test sanitizing HTML. """
+""" Test HTML-related functionality. """
import os
import re
from selenium.webdriver.common.action_chains import ActionChains
+from selenium.webdriver.common.keys import Keys
from vasl_templates.webapp.tests.utils import \
init_webapp, select_tab, click_dialog_button, load_trumbowyg, unload_trumbowyg, \
@@ -29,6 +30,9 @@ def test_sanitize_load_scenario( webapp, webdriver ):
def check_val( name, expected ):
elem = find_child( ".param[name='{}']".format( name ) )
assert elem.get_attribute( "value" ) == expected
+ def check_html_textbox( name, expected ):
+ elem = find_child( "div.html-textbox[name='{}']".format( name ) )
+ assert elem.get_attribute( "innerHTML" ) == expected
def check_trumbowyg( name, expected ):
assert unload_trumbowyg( name ) == expected
def check_sortable( sortable_sel, expected, expected_width ):
@@ -43,18 +47,18 @@ def test_sanitize_load_scenario( webapp, webdriver ):
def check_custom_cap( sortable_sel, expected ):
elem = find_child( "{} li".format( sortable_sel ) ) # nb: we assume there's only 1 entry
ActionChains( webdriver ).double_click( elem ).perform()
- elem = find_child( ".ui-dialog.edit-vo .sortable input" )
- assert elem.get_attribute( "value" ) == expected
+ elem = find_child( ".ui-dialog.edit-vo .sortable div.html-textbox" )
+ assert elem.get_attribute( "innerHTML" ) == expected
click_dialog_button( "Cancel" )
# check what was loaded into the UI
# NOTE: We can't use save_scenario), since that also sanitizes HTML.
- check_val( "SCENARIO_NAME", "!scenario_name:#" )
- check_val( "SCENARIO_ID", "!scenario_id:@@@#" )
- check_val( "SCENARIO_LOCATION", "!scenario_location:
@@@
#" )
+ check_html_textbox( "SCENARIO_NAME", "!scenario_name:#" )
+ check_html_textbox( "SCENARIO_ID", "!scenario_id:@@@#" )
+ check_html_textbox( "SCENARIO_LOCATION", "!scenario_location:
@@@
#" )
check_val( "SCENARIO_WIDTH", "!scenario_width:@@@#" )
- check_val( "PLAYER_1_DESCRIPTION", "!player1_description:#" )
- check_val( "PLAYER_2_DESCRIPTION", "!player2_description:#" )
+ check_html_textbox( "PLAYER_1_DESCRIPTION", "!player1_description:#" )
+ check_html_textbox( "PLAYER_2_DESCRIPTION", "!player2_description:#" )
check_val( "PLAYERS_WIDTH", "!players_width:@@@#" )
check_trumbowyg( "VICTORY_CONDITIONS", "!victory_conditions:@@@#" )
check_val( "VICTORY_CONDITIONS_WIDTH", "!victory_conditions_width:@@@#" )
@@ -286,6 +290,44 @@ def test_sanitize_input( webapp, webdriver ):
# ---------------------------------------------------------------------
+def test_html_textbox( webapp, webdriver ):
+ """Test HTML textbox's."""
+
+ # initialize
+ init_webapp( webapp, webdriver )
+
+ def transform( clipboard ):
+ mo = re.search( r"\[(.*?)\]", clipboard )
+ return mo.group(1)
+
+ # enter some plain text into an HTML textbox, then check its contents
+ ctrl = find_child( "div.html-textbox[name='SCENARIO_NAME']" )
+ ctrl.send_keys( "abc" )
+ snippet_btn = find_child( "button.generate[data-id='scenario']" )
+ snippet_btn.click()
+ wait_for_clipboard( 2, "abc", transform=transform )
+
+ # open the dialog to add some HTML content, then check its contents
+ ActionChains( webdriver ).key_down( Keys.ALT ).click( ctrl ).perform()
+ ActionChains( webdriver ).key_up( Keys.ALT ).perform()
+ dlg = wait_for_elem( 2, ".ui-dialog.edit-html_textbox" )
+ elem = find_child( ".trumbowyg-editor", dlg )
+ elem.send_keys( Keys.END )
+ elem.send_keys( " " )
+ find_child( "button.trumbowyg-strong-button", dlg ).click()
+ elem.send_keys( "bold" )
+ click_dialog_button( "OK" )
+ snippet_btn.click()
+ wait_for_clipboard( 2, "abc
bold", transform=transform )
+
+ # modify the HTML textbox directly, then check its contents
+ ctrl.send_keys( Keys.END )
+ ctrl.send_keys( "!!!" )
+ snippet_btn.click()
+ wait_for_clipboard( 2, "abc
bold!!!", transform=transform )
+
+# ---------------------------------------------------------------------
+
def _make_scenario_params( real_vo ):
"""Generate scenario parameters that contain unsafe HTML."""
diff --git a/vasl_templates/webapp/tests/test_scenario_persistence.py b/vasl_templates/webapp/tests/test_scenario_persistence.py
index 609fb22..ec6f336 100644
--- a/vasl_templates/webapp/tests/test_scenario_persistence.py
+++ b/vasl_templates/webapp/tests/test_scenario_persistence.py
@@ -195,11 +195,14 @@ def test_scenario_persistence( webapp, webdriver ): #pylint: disable=too-many-st
elem = find_child( ".param[name='{}']".format( field ) )
if elem.tag_name == "select":
assert Select(elem).first_selected_option.get_attribute("value") == val
- elif elem.tag_name == "div":
- assert "trumbowyg-editor" in get_css_classes( elem )
- assert unload_trumbowyg( elem ) == val
else:
- assert elem.get_attribute("value") == val
+ css_classes = get_css_classes( elem )
+ if "trumbowyg-editor" in css_classes:
+ assert unload_trumbowyg( elem ) == val
+ elif "html-textbox" in css_classes:
+ assert elem.get_attribute( "innerHTML" ) == val
+ else:
+ assert elem.get_attribute("value") == val
select_tab( "scenario" )
scenario_notes = [ c.text for c in find_children("#scenario_notes-sortable li") ]
assert scenario_notes == [ sn["caption"] for sn in SCENARIO_PARAMS["scenario"]["SCENARIO_NOTES"] ]
diff --git a/vasl_templates/webapp/tests/test_scenario_search.py b/vasl_templates/webapp/tests/test_scenario_search.py
index 4c3fd46..e039598 100644
--- a/vasl_templates/webapp/tests/test_scenario_search.py
+++ b/vasl_templates/webapp/tests/test_scenario_search.py
@@ -111,8 +111,8 @@ def test_import_scenario( webapp, webdriver ):
def _check_scenario( **kwargs ):
"""Check the scenario import."""
for key in ["SCENARIO_NAME","SCENARIO_ID","SCENARIO_LOCATION","PLAYER_1_DESCRIPTION","PLAYER_2_DESCRIPTION"]:
- elem = find_child( "input[name='{}']".format( key ) )
- if elem.get_attribute( "value" ) != kwargs[ key ]:
+ elem = find_child( "div.html-textbox[name='{}']".format( key ) )
+ if elem.get_attribute( "innerHTML" ) != kwargs[ key ]:
return False
if get_player_nat( 1 ) != kwargs["PLAYER_1"] or get_player_nat( 2 ) != kwargs["PLAYER_2"]:
return False
@@ -161,7 +161,10 @@ def test_import_warnings( webapp, webdriver ): #pylint: disable=too-many-stateme
wait_for( 2, lambda: not find_child( ".warnings", dlg ).is_displayed() )
# do the import again, and accept it
_import_scenario_and_confirm( dlg )
- assert elem.get_attribute( "value" ) == expected_val
+ if "html-textbox" in get_css_classes( elem ):
+ assert elem.get_attribute( "innerHTML" ) == expected_val
+ else:
+ assert elem.get_attribute( "value" ) == expected_val
else:
# nope - check that the import was done
wait_for( 2, lambda: not dlg.is_displayed() )
diff --git a/vasl_templates/webapp/tests/test_snippets.py b/vasl_templates/webapp/tests/test_snippets.py
index 1da2686..818166e 100644
--- a/vasl_templates/webapp/tests/test_snippets.py
+++ b/vasl_templates/webapp/tests/test_snippets.py
@@ -87,7 +87,10 @@ def test_scenario_snippets( webapp, webdriver ):
"SCENARIO_LOCATION": "right
here",
"SCENARIO_DATE": "01/02/1942",
},
- 'name = [my
cool scenario] | loc = [right
here] | date = [01/02/1942] aka "2 January, 1942"',
+ # NOTE: Since we load the UI using send_keys(), content is interpreted as plain-text.
+ 'name = [my <i>cool</i> scenario]'
+ ' | loc = [right <u>here</u>]'
+ ' | date = [01/02/1942] aka "2 January, 1942"',
None
)
diff --git a/vasl_templates/webapp/tests/utils.py b/vasl_templates/webapp/tests/utils.py
index 3fc70fd..f06729f 100644
--- a/vasl_templates/webapp/tests/utils.py
+++ b/vasl_templates/webapp/tests/utils.py
@@ -271,8 +271,7 @@ def set_template_params( params ): #pylint: disable=too-many-branches
elem = find_child( ".param[name='{}']".format( key ) )
if elem.tag_name == "select":
select_droplist_val( Select(elem), val )
- elif elem.tag_name == "div":
- assert "trumbowyg-editor" in get_css_classes( elem )
+ elif "trumbowyg-editor" in get_css_classes( elem ):
load_trumbowyg( elem, val )
else:
if elem.is_displayed():
@@ -404,11 +403,14 @@ def generate_sortable_entry_snippet( sortable, entry_no ):
elems[entry_no].click()
return _get_clipboard()
-def drag_sortable_entry_to_trash( sortable, entry_no ):
+def drag_sortable_entry_to_trash( sortable, entry_no, sel=None ):
"""Draw a sortable entry to the trash."""
trash = find_sortable_helper( sortable, "trash" )
elems = find_children( "li", sortable )
- ActionChains(_webdriver).drag_and_drop( elems[entry_no], trash ).perform()
+ elem = elems[ entry_no ]
+ if sel:
+ elem = find_child( sel, elem )
+ ActionChains(_webdriver).drag_and_drop( elem, trash ).perform()
def find_sortable_helper( sortable, tag ):
"""Find a sortable's helper element."""
@@ -570,6 +572,15 @@ def get_trumbowyg_editor( ctrl ):
assert False
return None
+def load_html_textbox( ctrl, val ):
+ """Load an HTML textbox."""
+ htb_id = ctrl.get_attribute( "data-htb-id" )
+ find_child( ".edit-html-textbox[data-htb-id='{}']".format( htb_id ) ).click()
+ dlg = wait_for_elem( 2, ".ui-dialog.edit-html_textbox" )
+ load_trumbowyg( find_child( ".content", dlg ), val )
+ click_dialog_button( "OK", "edit-html_textbox" )
+ wait_for( 2, lambda: ctrl.get_attribute( "innerHTML" ) == val )
+
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
def dismiss_notifications():