diff --git a/vasl_templates/webapp/static/snippets.js b/vasl_templates/webapp/static/snippets.js
index de8c1d1..e0e1d43 100644
--- a/vasl_templates/webapp/static/snippets.js
+++ b/vasl_templates/webapp/static/snippets.js
@@ -362,8 +362,11 @@ function select_capability_by_date( capabilities, scenario_theater, scenario_yea
{
var MONTH_NAMES = { F:2, J:6, A:8 } ;
- var val = null ;
+ // initialize
+ capabilities = capabilities.slice() ;
var ref = has_ref( capabilities ) ;
+
+ var val = null ;
for ( var i=0 ; i < capabilities.length ; ++i ) {
// check for a ETO/PTO-only flag
diff --git a/vasl_templates/webapp/tests/fixtures/data/ordnance/american.json b/vasl_templates/webapp/tests/fixtures/data/ordnance/american.json
index a76fc12..b5190d0 100644
--- a/vasl_templates/webapp/tests/fixtures/data/ordnance/american.json
+++ b/vasl_templates/webapp/tests/fixtures/data/ordnance/american.json
@@ -12,6 +12,19 @@
"capabilities2": { "H": 7, "s": 7, "WP": 8, "C": [ [7,"P"], "\u20201" ] },
"note_number": "15\u2020",
"notes": [ "C\u20201" ]
+},
+
+{ "name": "M3A1 37mm AT Gun",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities2": { "C": [ [7,"A2+"], "\u20201" ] },
+ "note_number": "6\u2020",
+ "notes": [ "C\u20201", "N" ]
+},
+
+{ "name": "M1 57mm AT Gun",
+ "capabilities": [ "NT", "QSU" ],
+ "capabilities2": { "HE": [ [7,"J4E"], [7,5], "\u2020" ], "D": [ [4,"J4+E"], "\u2020" ] },
+ "note_number": "7\u2020"
}
]
diff --git a/vasl_templates/webapp/tests/fixtures/data/vehicles/russian.json b/vasl_templates/webapp/tests/fixtures/data/vehicles/russian.json
index 21c3884..7ce190a 100644
--- a/vasl_templates/webapp/tests/fixtures/data/vehicles/russian.json
+++ b/vasl_templates/webapp/tests/fixtures/data/vehicles/russian.json
@@ -21,6 +21,12 @@
"capabilities2": { "D": [ [6,"J4"], [7,5], "\u2020" ], "HE": [ [7,"F3"], [8,"4+"], "\u2020" ], "sD": [ [6,"4+"] ], "sM": "8\u2020" },
"note_number": "53\u2020",
"notes": [ "N", "LL" ]
+},
+{ "name": "Sherman III(a)",
+ "CS#": "5:brewup",
+ "capabilities2": { "s": 8, "WP": [ [6,"J4+"], "\u2020" ] },
+ "note_number": "50\u2020",
+ "notes": [ "N", "O", "R\u20201", "LL" ]
}
]
diff --git a/vasl_templates/webapp/tests/test_capabilities.py b/vasl_templates/webapp/tests/test_capabilities.py
index 1dfdb65..be144c4 100644
--- a/vasl_templates/webapp/tests/test_capabilities.py
+++ b/vasl_templates/webapp/tests/test_capabilities.py
@@ -6,25 +6,82 @@ from vasl_templates.webapp.tests.utils import \
# ---------------------------------------------------------------------
+def test_month_capabilities( webapp, webdriver ):
+ """Test date-based capabilities that change in the middle of a year."""
+
+ # initialize
+ init_webapp( webapp, webdriver )
+
+ # Sherman III(a): WP6(J4+)† s8
+ load_scenario_params( {
+ "scenario": {
+ "PLAYER_1": "russian",
+ },
+ "ob1": {
+ "OB_VEHICLES_1": [ "Sherman III(a)" ],
+ }
+ } )
+ _check_snippet( None, "01/01/1943", "vehicles", '"s8"' )
+ _check_snippet( None, "05/31/1944", "vehicles", '"s8"' )
+ _check_snippet( None, "06/01/1944", "vehicles", '"WP6\u2020" "s8"' )
+ _check_snippet( None, "01/01/1945", "vehicles", '"WP6\u2020" "s8"' )
+
+ # Churchill III(b): D6(J4)/7(5)† ; HE7(F3)/8(4+)† ; sD6(4+) ; sM8†
+ new_scenario()
+ load_scenario_params( {
+ "scenario": {
+ "PLAYER_1": "russian",
+ },
+ "ob1": {
+ "OB_VEHICLES_1": [ "Churchill III(b)" ],
+ }
+ } )
+ _check_snippet( None, "01/01/1942", "vehicles", '"sM8\u2020"' )
+ _check_snippet( None, "01/31/1943", "vehicles", '"sM8\u2020"' )
+ _check_snippet( None, "02/01/1943", "vehicles", '"HE7\u2020" "sM8\u2020"' )
+ _check_snippet( None, "05/31/1944", "vehicles", '"HE8\u2020" "sD6" "sM8\u2020"' )
+ _check_snippet( None, "06/01/1944", "vehicles", '"D6\u2020" "HE8\u2020" "sD6" "sM8\u2020"' )
+ _check_snippet( None, "01/01/1945", "vehicles", '"D7\u2020" "HE8\u2020" "sD6" "sM8\u2020"' )
+
+ # M3A1 37mm AT Gun: NT, QSU, C7(A2+)†1
+ new_scenario()
+ load_scenario_params( {
+ "scenario": {
+ "PLAYER_1": "american",
+ },
+ "ob1": {
+ "OB_ORDNANCE_1": [ "M3A1 37mm AT Gun" ],
+ }
+ } )
+ _check_snippet( None, "01/01/1941", "ordnance", '"NT" "QSU"' )
+ _check_snippet( None, "07/31/1942", "ordnance", '"NT" "QSU"' )
+ _check_snippet( None, "08/01/1942", "ordnance", '"NT" "QSU" "C7\u20201"' )
+
+ # M1 57mm AT Gun: NT, QSU, HE7(J4E)/7(5)†, D4(J4+E)†
+ new_scenario()
+ load_scenario_params( {
+ "scenario": {
+ "SCENARIO_THEATER": "ETO",
+ "PLAYER_1": "american",
+ },
+ "ob1": {
+ "OB_ORDNANCE_1": [ "M1 57mm AT Gun" ],
+ }
+ } )
+ _check_snippet( None, "01/01/1943", "ordnance", '"NT" "QSU"' )
+ _check_snippet( None, "05/31/1944", "ordnance", '"NT" "QSU"' )
+ _check_snippet( None, "06/01/1944", "ordnance", '"NT" "QSU" "D4\u2020" "HE7\u2020"' )
+ _check_snippet( None, "01/01/1945", "ordnance", '"NT" "QSU" "D4\u2020" "HE7\u2020"' )
+ _check_snippet( "PTO", "01/01/1945", "ordnance", '"NT" "QSU"' )
+
+# ---------------------------------------------------------------------
+
def test_scenario_theater( webapp, webdriver ):
"""Test ETO/PTO-only capabilities."""
# initialize
init_webapp( webapp, webdriver )
- def do_test( scenario_theater, scenario_date, expected ):
- """Test snippet generation."""
- load_scenario_params( {
- "scenario": {
- "SCENARIO_THEATER": scenario_theater,
- "SCENARIO_DATE": scenario_date,
- }
- } )
- select_tab( "ob1" )
- btn = find_child( "button.generate[data-id='ob_ordnance_1']" )
- btn.click()
- wait_for_clipboard( 2, "capabilities: {}".format(expected), contains=True )
-
# M2A1 105mm Howitzer: C7(4+P)†1
load_scenario_params( {
"scenario": {
@@ -34,12 +91,12 @@ def test_scenario_theater( webapp, webdriver ):
"OB_ORDNANCE_1": [ "M2A1 105mm Howitzer" ],
}
} )
- do_test( "ETO", "01/01/1940", '"NT" "H6" "WP8" "s7"')
- do_test( "ETO", "01/01/1944", '"NT" "H6" "WP8" "s7"')
- do_test( "ETO", "01/01/1945", '"NT" "H6" "WP8" "s7"')
- do_test( "PTO", "01/01/1940", '"NT" "H6" "WP8" "s7"')
- do_test( "PTO", "01/01/1944", '"NT" "C7" "H6" "WP8" "s7"')
- do_test( "PTO", "01/01/1945", '"NT" "C7" "H6" "WP8" "s7"')
+ _check_snippet( "ETO", "01/01/1940", "ordnance", '"NT" "H6" "WP8" "s7"' )
+ _check_snippet( "ETO", "01/01/1944", "ordnance", '"NT" "H6" "WP8" "s7"' )
+ _check_snippet( "ETO", "01/01/1945", "ordnance", '"NT" "H6" "WP8" "s7"' )
+ _check_snippet( "PTO", "01/01/1940", "ordnance", '"NT" "H6" "WP8" "s7"' )
+ _check_snippet( "PTO", "01/01/1944", "ordnance", '"NT" "C7\u20201" "H6" "WP8" "s7"' )
+ _check_snippet( "PTO", "01/01/1945", "ordnance", '"NT" "C7\u20201" "H6" "WP8" "s7"' )
# M3 105mm Howitzer: C7(P)†1
new_scenario()
@@ -51,5 +108,26 @@ def test_scenario_theater( webapp, webdriver ):
"OB_ORDNANCE_1": [ "M3 105mm Howitzer" ],
}
} )
- do_test( "ETO", "01/01/1940", '"NT" "H7" "WP8" "s7"')
- do_test( "PTO", "01/01/1940", '"NT" "C7" "H7" "WP8" "s7"')
+ _check_snippet( "ETO", "01/01/1940", "ordnance", '"NT" "H7" "WP8" "s7"' )
+ _check_snippet( "PTO", "01/01/1940", "ordnance", '"NT" "C7\u20201" "H7" "WP8" "s7"' )
+
+# ---------------------------------------------------------------------
+
+def _check_snippet( scenario_theater, scenario_date, vo_type, expected ):
+ """Test snippet generation."""
+
+ # update the scenario parameters
+ params = {
+ "scenario": {
+ "SCENARIO_DATE": scenario_date,
+ }
+ }
+ if scenario_theater:
+ params["scenario"]["SCENARIO_THEATER"] = scenario_theater
+ load_scenario_params( params )
+
+ # generate and check the snippet
+ select_tab( "ob1" )
+ btn = find_child( "button.generate[data-id='ob_{}_1']".format( vo_type ) )
+ btn.click()
+ wait_for_clipboard( 2, "capabilities: {}".format(expected), contains=True )
diff --git a/vasl_templates/webapp/tests/test_vehicles_ordnance.py b/vasl_templates/webapp/tests/test_vehicles_ordnance.py
index 73b7294..47d7b6a 100644
--- a/vasl_templates/webapp/tests/test_vehicles_ordnance.py
+++ b/vasl_templates/webapp/tests/test_vehicles_ordnance.py
@@ -200,15 +200,15 @@ def test_variable_capabilities( webapp, webdriver ):
wait_for_clipboard( 2, expected, transform=reformat )
do_test( 1, 1940, '"sM8\u2020"' )
do_test( 1, 1943, '"sM8\u2020"' )
- do_test( 2, 1943, '"HE7" "sM8\u2020"' )
- do_test( 12, 1943, '"HE7" "sM8\u2020"' )
- do_test( 1, 1944, '"HE8" "sD6" "sM8\u2020"' )
- do_test( 5, 1944, '"HE8" "sD6" "sM8\u2020"' )
- do_test( 6, 1944, '"D6" "HE8" "sD6" "sM8\u2020"' )
- do_test( 12, 1944, '"D6" "HE8" "sD6" "sM8\u2020"' )
- do_test( 1, 1945, '"D7" "HE8" "sD6" "sM8\u2020"' )
- do_test( 12, 1945, '"D7" "HE8" "sD6" "sM8\u2020"' )
- do_test( 1, 1946, '"D7" "HE8" "sD6" "sM8\u2020"' )
+ do_test( 2, 1943, '"HE7\u2020" "sM8\u2020"' )
+ do_test( 12, 1943, '"HE7\u2020" "sM8\u2020"' )
+ do_test( 1, 1944, '"HE8\u2020" "sD6" "sM8\u2020"' )
+ do_test( 5, 1944, '"HE8\u2020" "sD6" "sM8\u2020"' )
+ do_test( 6, 1944, '"D6\u2020" "HE8\u2020" "sD6" "sM8\u2020"' )
+ do_test( 12, 1944, '"D6\u2020" "HE8\u2020" "sD6" "sM8\u2020"' )
+ do_test( 1, 1945, '"D7\u2020" "HE8\u2020" "sD6" "sM8\u2020"' )
+ do_test( 12, 1945, '"D7\u2020" "HE8\u2020" "sD6" "sM8\u2020"' )
+ do_test( 1, 1946, '"D7\u2020" "HE8\u2020" "sD6" "sM8\u2020"' )
# ---------------------------------------------------------------------
diff --git a/vasl_templates/webapp/tests/utils.py b/vasl_templates/webapp/tests/utils.py
index 96e7d11..e843f12 100644
--- a/vasl_templates/webapp/tests/utils.py
+++ b/vasl_templates/webapp/tests/utils.py
@@ -114,7 +114,7 @@ def new_scenario():
"""Reset the scenario."""
select_menu_option( "new_scenario" )
# check if the webapp is asking for confirmation
- if find_child( "#ask" ):
+ if find_child( "#ask" ).is_displayed():
# yup - make it so
click_dialog_button( "OK" )