diff --git a/vasl_templates/webapp/data/vehicles/italian.json b/vasl_templates/webapp/data/vehicles/italian.json
new file mode 100644
index 0000000..0fbc4b9
--- /dev/null
+++ b/vasl_templates/webapp/data/vehicles/italian.json
@@ -0,0 +1,229 @@
+[
+
+{ "name": "L5/21",
+ "no_radio": "\u00ae",
+ "CS#": 2,
+ "note_number": "1\u2020",
+ "notes": [ "A\u20201" ]
+},
+{ "name": "L5/30",
+ "no_radio": "\u00ae",
+ "CS#": 2,
+ "note_number": "1\u2020"
+},
+{ "name": "L3/35",
+ "no_radio": "\u00ae",
+ "CS#": 2,
+ "note_number": "2\u2020",
+ "notes": [ "A\u20201", "B\u20201", "E", "N", "R" ]
+},
+{ "name": "L3 aa",
+ "no_radio": "\u00ae",
+ "CS#": 2,
+ "note_number": "3\u2020",
+ "notes": [ "C", "E\u20202", "F\u20201", "N", "R" ]
+},
+{ "name": "L3 cc",
+ "no_radio": "\u00ae",
+ "CS#": 2,
+ "note_number": "4\u2020",
+ "notes": [ "E", "J\u20201", "N" ]
+},
+{ "name": "L3 Lf",
+ "no_radio": "\u00ae",
+ "CS#": 2,
+ "note_number": "5\u2020",
+ "notes": [ "E\u20201", "N" ]
+},
+{ "name": "L6/40",
+ "CS#": 2,
+ "note_number": "6\u2020",
+ "notes": [ "N", "R" ]
+},
+{ "name": "M11/39",
+ "no_radio": "\u00ae",
+ "CS#": 3,
+ "note_number": "7\u2020",
+ "notes": [ "A\u20201", "N" ]
+},
+{ "name": "M13/40",
+ "no_radio": "\u00ae\u2020",
+ "CS#": 4,
+ "note_number": "8\u2020",
+ "notes": [ "B\u20201", "C\u20202", "N" ]
+},
+{ "name": "M14/41",
+ "CS#": 4,
+ "note_number": "9\u2020",
+ "notes": [ "B\u20201", "C\u20202", "N" ]
+},
+{ "name": "M15/42",
+ "CS#": 4,
+ "note_number": "10\u2020",
+ "notes": [ "B\u20201", "C\u20202" ]
+},
+{ "name": "MR/35(f)",
+ "CS#": 2,
+ "note_number": "11\u2020",
+ "notes": [ "I\u20201" ]
+},
+{ "name": "SMV M40 75/18",
+ "CS#": 3,
+ "capabilities2": { "H": [ [7,"S2+"], "\u20202" ], "s": 8 },
+ "note_number": "12",
+ "notes": [ "C\u20201", "F\u2020", "H\u20202", "N" ]
+},
+{ "name": "SMV M41 75/18",
+ "CS#": 3,
+ "capabilities2": { "H": [ [7,"S2+"], "\u20202" ], "s": 8 },
+ "note_number": "12\u2020",
+ "notes": [ "C\u20201", "H\u20202", "N" ]
+},
+{ "name": "SMV M42 75/18",
+ "CS#": 3,
+ "capabilities2": { "H": 7, "s": 8 },
+ "note_number": "13",
+ "notes": [ "C\u2020" ]
+},
+{ "name": "SMV M42 75/32",
+ "CS#": 3,
+ "capabilities2": { "H": 7, "s": 8 },
+ "note_number": "13\u2020",
+ "notes": [ "C\u20201" ]
+},
+{ "name": "SMV M43 105/25",
+ "CS#": 4,
+ "no_if": true,
+ "capabilities2": { "H": 7, "s": 8 },
+ "note_number": "14",
+ "notes": [ "C\u2020" ]
+},
+{ "name": "SMV L40 47/32",
+ "CS#": 3,
+ "note_number": "15\u2020",
+ "notes": [ "N", "R" ]
+},
+{ "name": "SMV M41M 90/53",
+ "CS#": 5,
+ "capabilities2": { "HE": 7 },
+ "note_number": "16\u2020",
+ "notes": [ "D\u20201" ]
+},
+{ "name": "AS 42",
+ "CS#": 3,
+ "note_number": "17\u2020",
+ "notes": [ "L\u20201", "M", "N" ]
+},
+{ "name": "AS 42 aa",
+ "CS#": 4,
+ "note_number": "17\u2020",
+ "notes": [ "G\u20201", "L\u20202", "M", "N", "AA\u20201" ]
+},
+{ "name": "AS 42 cc",
+ "CS#": 4,
+ "note_number": "17\u2020",
+ "notes": [ "G\u20201", "J\u20201", "L\u20202", "M", "N" ]
+},
+{ "name": "Lince",
+ "CS#": 2,
+ "note_number": "18",
+ "notes": [ "E" ]
+},
+{ "name": "Lancia 1ZM",
+ "no_radio": "\u00ae",
+ "CS#": 6,
+ "note_number": "19\u2020",
+ "notes": [ "A\u20202", "F\u20203", "M\u20201" ]
+},
+{ "name": "Fiat 611A",
+ "no_radio": "\u00ae",
+ "CS#": 5,
+ "note_number": "20\u2020",
+ "notes": [ "A\u20202", "F\u20203", "M\u20201" ]
+},
+{ "name": "Fiat 611B",
+ "no_radio": "\u00ae",
+ "CS#": 5,
+ "capabilities2": { "HE": 7 },
+ "note_number": "20\u2020",
+ "notes": [ "F\u20202", "M\u20201" ]
+},
+{ "name": "AB 40",
+ "CS#": 4,
+ "note_number": "21",
+ "notes": [ "A\u2020", "I\u20201", "N" ]
+},
+{ "name": "AB 41",
+ "CS#": 4,
+ "note_number": "21\u2020",
+ "notes": [ "N", "R" ]
+},
+{ "name": "Autoprot S37",
+ "CS#": 4,
+ "note_number": "22\u2020",
+ "notes": [ "R" ]
+},
+{ "name": "Autocann 20/65(b)",
+ "CS#": 4,
+ "note_number": "23\u2020",
+ "notes": [ "G\u20201", "N", "R", "AA\u2020" ]
+},
+{ "name": "Autocann 65/17(b)",
+ "CS#": 4,
+ "capabilities2": { "H": [ [7,"S2+"], "\u20202" ] },
+ "note_number": "23\u2020",
+ "notes": [ "G\u20201", "H\u20202", "N" ]
+},
+{ "name": "Autocann 75/27",
+ "CS#": 4,
+ "capabilities2": { "AP": 7 },
+ "note_number": "24",
+ "notes": [ "D\u2020", "N", "AA\u20201" ]
+},
+{ "name": "Autocann 90/53",
+ "CS#": 4,
+ "note_number": "24",
+ "notes": [ "D\u2020", "N", "AA\u20201" ]
+},
+{ "name": "TL 37",
+ "cs#": 5,
+ "note_number": "25\u2020",
+ "notes": [ "L\u20201", "M", "N", "R" ]
+},
+{ "name": "TM 40",
+ "cs#": 5,
+ "note_number": "25\u2020",
+ "notes": [ "L\u20201", "M", "N", "R" ]
+},
+{ "name": "TP 32",
+ "cs#": 5,
+ "note_number": "25\u2020",
+ "notes": [ "L\u20201", "M", "N", "R" ]
+},
+{ "name": "Autocaretta",
+ "cs#": "5\u20201",
+ "note_number": "26\u2020",
+ "notes": [ "K\u20201", "N", "R" ]
+},
+{ "name": "Fiat 508 MC",
+ "cs#": "2\u20201",
+ "note_number": "27\u2020",
+ "notes": [ "A\u20202", "K\u20201", "N", "R" ]
+},
+{ "name": "Autocarro L",
+ "cs#": 6,
+ "note_number": "28\u2020",
+ "notes": [ "N", "R" ]
+},
+{ "name": "Autocarro M",
+ "cs#": 7,
+ "note_number": "28\u2020",
+ "notes": [ "N", "R" ]
+},
+{ "name": "Autocarro P",
+ "cs#": 7,
+ "note_number": "28\u2020",
+ "notes": [ "N", "R" ]
+}
+
+]
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/italian/1940.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/italian/1940.txt
new file mode 100644
index 0000000..cd17908
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/italian/1940.txt
@@ -0,0 +1,45 @@
+=== vehicles/italian/1940 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+----------------- ------- ---- ----------------- -------------- ------------- --- -------------------------------------------------
+L5/21 ® yes CS 2 n/a n/a 1† A†1
+L5/30 ® yes CS 2 n/a n/a 1† n/a
+L3/35 ® yes CS 2 n/a n/a 2† A†1 B†1 E N R
+L3 aa ® yes CS 2 n/a n/a 3† C E†2 F†1 N R
+L3 cc ® yes CS 2 n/a n/a 4† E J†1 N
+L3 Lf ® yes CS 2 n/a n/a 5† E†1 N
+L6/40 n/a yes CS 2 n/a n/a 6† N R
+M11/39 ® yes CS 3 n/a n/a 7† A†1 N
+M13/40 ®† yes CS 4 n/a n/a 8† B†1 C†2 N
+M14/41 n/a yes CS 4 n/a n/a 9† B†1 C†2 N
+M15/42 n/a yes CS 4 n/a n/a 10† B†1 C†2
+MR/35(f) n/a yes CS 2 n/a n/a 11† I†1
+SMV M40 75/18 n/a yes CS 3 H7[S2+]†[2] s8 s8 12 C†1 F† H†2 N
+SMV M41 75/18 n/a yes CS 3 H7[S2+]†[2] s8 s8 12† C†1 H†2 N
+SMV M42 75/18 n/a yes CS 3 H7 s8 H7 s8 13 C†
+SMV M42 75/32 n/a yes CS 3 H7 s8 H7 s8 13† C†1
+SMV M43 105/25 n/a n/a CS 4 H7 s8 H7 s8 14 C†
+SMV L40 47/32 n/a yes CS 3 n/a n/a 15† N R
+SMV M41M 90/53 n/a yes CS 5 HE7 HE7 16† D†1
+AS 42 n/a yes CS 3 n/a n/a 17† L†1 M N
+AS 42 aa n/a yes CS 4 n/a n/a 17† G†1 L†2 M N AA†1
+AS 42 cc n/a yes CS 4 n/a n/a 17† G†1 J†1 L†2 M N
+Lince n/a yes CS 2 n/a n/a 18 E
+Lancia 1ZM ® yes CS 6 n/a n/a 19† A†2 F†3 M†1
+Fiat 611A ® yes CS 5 n/a n/a 20† A†2 F†3 M†1
+Fiat 611B ® yes CS 5 HE7 HE7 20† F†2 M†1
+AB 40 n/a yes CS 4 n/a n/a 21 A† I†1 N
+AB 41 n/a yes CS 4 n/a n/a 21† N R
+Autoprot S37 n/a yes CS 4 n/a n/a 22† R
+Autocann 20/65(b) n/a yes CS 4 n/a n/a 23† G†1 N R AA†
+Autocann 65/17(b) n/a yes CS 4 H7[S2+]†[2] n/a 23† G†1 H†2 N
+Autocann 75/27 n/a yes CS 4 AP7 AP7 24 D† N AA†1
+Autocann 90/53 n/a yes CS 4 n/a n/a 24 D† N AA†1
+TL 37 n/a yes cs 5 n/a n/a 25† L†1 M N R
+TM 40 n/a yes cs 5 n/a n/a 25† L†1 M N R
+TP 32 n/a yes cs 5 n/a n/a 25† L†1 M N R
+Autocaretta n/a yes cs 5†1 n/a n/a 26† K†1 N R
+Fiat 508 MC n/a yes cs 2†1 n/a n/a 27† A†2 K†1 N R
+Autocarro L n/a yes cs 6 n/a n/a 28† N R
+Autocarro M n/a yes cs 7 n/a n/a 28† N R
+Autocarro P n/a yes cs 7 n/a n/a 28† N R
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/italian/1941.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/italian/1941.txt
new file mode 100644
index 0000000..8e0e68d
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/italian/1941.txt
@@ -0,0 +1,45 @@
+=== vehicles/italian/1941 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+----------------- ------- ---- ----------------- -------------- ------------- --- -------------------------------------------------
+L5/21 ® yes CS 2 n/a n/a 1† A†1
+L5/30 ® yes CS 2 n/a n/a 1† n/a
+L3/35 ® yes CS 2 n/a n/a 2† A†1 B†1 E N R
+L3 aa ® yes CS 2 n/a n/a 3† C E†2 F†1 N R
+L3 cc ® yes CS 2 n/a n/a 4† E J†1 N
+L3 Lf ® yes CS 2 n/a n/a 5† E†1 N
+L6/40 n/a yes CS 2 n/a n/a 6† N R
+M11/39 ® yes CS 3 n/a n/a 7† A†1 N
+M13/40 ®† yes CS 4 n/a n/a 8† B†1 C†2 N
+M14/41 n/a yes CS 4 n/a n/a 9† B†1 C†2 N
+M15/42 n/a yes CS 4 n/a n/a 10† B†1 C†2
+MR/35(f) n/a yes CS 2 n/a n/a 11† I†1
+SMV M40 75/18 n/a yes CS 3 H7[S2+]†[2] s8 s8 12 C†1 F† H†2 N
+SMV M41 75/18 n/a yes CS 3 H7[S2+]†[2] s8 s8 12† C†1 H†2 N
+SMV M42 75/18 n/a yes CS 3 H7 s8 H7 s8 13 C†
+SMV M42 75/32 n/a yes CS 3 H7 s8 H7 s8 13† C†1
+SMV M43 105/25 n/a n/a CS 4 H7 s8 H7 s8 14 C†
+SMV L40 47/32 n/a yes CS 3 n/a n/a 15† N R
+SMV M41M 90/53 n/a yes CS 5 HE7 HE7 16† D†1
+AS 42 n/a yes CS 3 n/a n/a 17† L†1 M N
+AS 42 aa n/a yes CS 4 n/a n/a 17† G†1 L†2 M N AA†1
+AS 42 cc n/a yes CS 4 n/a n/a 17† G†1 J†1 L†2 M N
+Lince n/a yes CS 2 n/a n/a 18 E
+Lancia 1ZM ® yes CS 6 n/a n/a 19† A†2 F†3 M†1
+Fiat 611A ® yes CS 5 n/a n/a 20† A†2 F†3 M†1
+Fiat 611B ® yes CS 5 HE7 HE7 20† F†2 M†1
+AB 40 n/a yes CS 4 n/a n/a 21 A† I†1 N
+AB 41 n/a yes CS 4 n/a n/a 21† N R
+Autoprot S37 n/a yes CS 4 n/a n/a 22† R
+Autocann 20/65(b) n/a yes CS 4 n/a n/a 23† G†1 N R AA†
+Autocann 65/17(b) n/a yes CS 4 H7[S2+]†[2] n/a 23† G†1 H†2 N
+Autocann 75/27 n/a yes CS 4 AP7 AP7 24 D† N AA†1
+Autocann 90/53 n/a yes CS 4 n/a n/a 24 D† N AA†1
+TL 37 n/a yes cs 5 n/a n/a 25† L†1 M N R
+TM 40 n/a yes cs 5 n/a n/a 25† L†1 M N R
+TP 32 n/a yes cs 5 n/a n/a 25† L†1 M N R
+Autocaretta n/a yes cs 5†1 n/a n/a 26† K†1 N R
+Fiat 508 MC n/a yes cs 2†1 n/a n/a 27† A†2 K†1 N R
+Autocarro L n/a yes cs 6 n/a n/a 28† N R
+Autocarro M n/a yes cs 7 n/a n/a 28† N R
+Autocarro P n/a yes cs 7 n/a n/a 28† N R
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/italian/1942.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/italian/1942.txt
new file mode 100644
index 0000000..47dfd8e
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/italian/1942.txt
@@ -0,0 +1,45 @@
+=== vehicles/italian/1942 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+----------------- ------- ---- ----------------- -------------- ------------- --- -------------------------------------------------
+L5/21 ® yes CS 2 n/a n/a 1† A†1
+L5/30 ® yes CS 2 n/a n/a 1† n/a
+L3/35 ® yes CS 2 n/a n/a 2† A†1 B†1 E N R
+L3 aa ® yes CS 2 n/a n/a 3† C E†2 F†1 N R
+L3 cc ® yes CS 2 n/a n/a 4† E J†1 N
+L3 Lf ® yes CS 2 n/a n/a 5† E†1 N
+L6/40 n/a yes CS 2 n/a n/a 6† N R
+M11/39 ® yes CS 3 n/a n/a 7† A†1 N
+M13/40 ®† yes CS 4 n/a n/a 8† B†1 C†2 N
+M14/41 n/a yes CS 4 n/a n/a 9† B†1 C†2 N
+M15/42 n/a yes CS 4 n/a n/a 10† B†1 C†2
+MR/35(f) n/a yes CS 2 n/a n/a 11† I†1
+SMV M40 75/18 n/a yes CS 3 H7[S2+]†[2] s8 s8 12 C†1 F† H†2 N
+SMV M41 75/18 n/a yes CS 3 H7[S2+]†[2] s8 s8 12† C†1 H†2 N
+SMV M42 75/18 n/a yes CS 3 H7 s8 H7 s8 13 C†
+SMV M42 75/32 n/a yes CS 3 H7 s8 H7 s8 13† C†1
+SMV M43 105/25 n/a n/a CS 4 H7 s8 H7 s8 14 C†
+SMV L40 47/32 n/a yes CS 3 n/a n/a 15† N R
+SMV M41M 90/53 n/a yes CS 5 HE7 HE7 16† D†1
+AS 42 n/a yes CS 3 n/a n/a 17† L†1 M N
+AS 42 aa n/a yes CS 4 n/a n/a 17† G†1 L†2 M N AA†1
+AS 42 cc n/a yes CS 4 n/a n/a 17† G†1 J†1 L†2 M N
+Lince n/a yes CS 2 n/a n/a 18 E
+Lancia 1ZM ® yes CS 6 n/a n/a 19† A†2 F†3 M†1
+Fiat 611A ® yes CS 5 n/a n/a 20† A†2 F†3 M†1
+Fiat 611B ® yes CS 5 HE7 HE7 20† F†2 M†1
+AB 40 n/a yes CS 4 n/a n/a 21 A† I†1 N
+AB 41 n/a yes CS 4 n/a n/a 21† N R
+Autoprot S37 n/a yes CS 4 n/a n/a 22† R
+Autocann 20/65(b) n/a yes CS 4 n/a n/a 23† G†1 N R AA†
+Autocann 65/17(b) n/a yes CS 4 H7[S2+]†[2] n/a 23† G†1 H†2 N
+Autocann 75/27 n/a yes CS 4 AP7 AP7 24 D† N AA†1
+Autocann 90/53 n/a yes CS 4 n/a n/a 24 D† N AA†1
+TL 37 n/a yes cs 5 n/a n/a 25† L†1 M N R
+TM 40 n/a yes cs 5 n/a n/a 25† L†1 M N R
+TP 32 n/a yes cs 5 n/a n/a 25† L†1 M N R
+Autocaretta n/a yes cs 5†1 n/a n/a 26† K†1 N R
+Fiat 508 MC n/a yes cs 2†1 n/a n/a 27† A†2 K†1 N R
+Autocarro L n/a yes cs 6 n/a n/a 28† N R
+Autocarro M n/a yes cs 7 n/a n/a 28† N R
+Autocarro P n/a yes cs 7 n/a n/a 28† N R
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/italian/1943.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/italian/1943.txt
new file mode 100644
index 0000000..94febbe
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/italian/1943.txt
@@ -0,0 +1,45 @@
+=== vehicles/italian/1943 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+----------------- ------- ---- ----------------- -------------- ------------- --- -------------------------------------------------
+L5/21 ® yes CS 2 n/a n/a 1† A†1
+L5/30 ® yes CS 2 n/a n/a 1† n/a
+L3/35 ® yes CS 2 n/a n/a 2† A†1 B†1 E N R
+L3 aa ® yes CS 2 n/a n/a 3† C E†2 F†1 N R
+L3 cc ® yes CS 2 n/a n/a 4† E J†1 N
+L3 Lf ® yes CS 2 n/a n/a 5† E†1 N
+L6/40 n/a yes CS 2 n/a n/a 6† N R
+M11/39 ® yes CS 3 n/a n/a 7† A†1 N
+M13/40 ®† yes CS 4 n/a n/a 8† B†1 C†2 N
+M14/41 n/a yes CS 4 n/a n/a 9† B†1 C†2 N
+M15/42 n/a yes CS 4 n/a n/a 10† B†1 C†2
+MR/35(f) n/a yes CS 2 n/a n/a 11† I†1
+SMV M40 75/18 n/a yes CS 3 H7[S2+]†[2] s8 H7†[2] s8 12 C†1 F† H†2 N
+SMV M41 75/18 n/a yes CS 3 H7[S2+]†[2] s8 H7†[2] s8 12† C†1 H†2 N
+SMV M42 75/18 n/a yes CS 3 H7 s8 H7 s8 13 C†
+SMV M42 75/32 n/a yes CS 3 H7 s8 H7 s8 13† C†1
+SMV M43 105/25 n/a n/a CS 4 H7 s8 H7 s8 14 C†
+SMV L40 47/32 n/a yes CS 3 n/a n/a 15† N R
+SMV M41M 90/53 n/a yes CS 5 HE7 HE7 16† D†1
+AS 42 n/a yes CS 3 n/a n/a 17† L†1 M N
+AS 42 aa n/a yes CS 4 n/a n/a 17† G†1 L†2 M N AA†1
+AS 42 cc n/a yes CS 4 n/a n/a 17† G†1 J†1 L†2 M N
+Lince n/a yes CS 2 n/a n/a 18 E
+Lancia 1ZM ® yes CS 6 n/a n/a 19† A†2 F†3 M†1
+Fiat 611A ® yes CS 5 n/a n/a 20† A†2 F†3 M†1
+Fiat 611B ® yes CS 5 HE7 HE7 20† F†2 M†1
+AB 40 n/a yes CS 4 n/a n/a 21 A† I†1 N
+AB 41 n/a yes CS 4 n/a n/a 21† N R
+Autoprot S37 n/a yes CS 4 n/a n/a 22† R
+Autocann 20/65(b) n/a yes CS 4 n/a n/a 23† G†1 N R AA†
+Autocann 65/17(b) n/a yes CS 4 H7[S2+]†[2] H7†[2] 23† G†1 H†2 N
+Autocann 75/27 n/a yes CS 4 AP7 AP7 24 D† N AA†1
+Autocann 90/53 n/a yes CS 4 n/a n/a 24 D† N AA†1
+TL 37 n/a yes cs 5 n/a n/a 25† L†1 M N R
+TM 40 n/a yes cs 5 n/a n/a 25† L†1 M N R
+TP 32 n/a yes cs 5 n/a n/a 25† L†1 M N R
+Autocaretta n/a yes cs 5†1 n/a n/a 26† K†1 N R
+Fiat 508 MC n/a yes cs 2†1 n/a n/a 27† A†2 K†1 N R
+Autocarro L n/a yes cs 6 n/a n/a 28† N R
+Autocarro M n/a yes cs 7 n/a n/a 28† N R
+Autocarro P n/a yes cs 7 n/a n/a 28† N R
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/italian/1944.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/italian/1944.txt
new file mode 100644
index 0000000..d3f529d
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/italian/1944.txt
@@ -0,0 +1,45 @@
+=== vehicles/italian/1944 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+----------------- ------- ---- ----------------- -------------- ------------- --- -------------------------------------------------
+L5/21 ® yes CS 2 n/a n/a 1† A†1
+L5/30 ® yes CS 2 n/a n/a 1† n/a
+L3/35 ® yes CS 2 n/a n/a 2† A†1 B†1 E N R
+L3 aa ® yes CS 2 n/a n/a 3† C E†2 F†1 N R
+L3 cc ® yes CS 2 n/a n/a 4† E J†1 N
+L3 Lf ® yes CS 2 n/a n/a 5† E†1 N
+L6/40 n/a yes CS 2 n/a n/a 6† N R
+M11/39 ® yes CS 3 n/a n/a 7† A†1 N
+M13/40 ®† yes CS 4 n/a n/a 8† B†1 C†2 N
+M14/41 n/a yes CS 4 n/a n/a 9† B†1 C†2 N
+M15/42 n/a yes CS 4 n/a n/a 10† B†1 C†2
+MR/35(f) n/a yes CS 2 n/a n/a 11† I†1
+SMV M40 75/18 n/a yes CS 3 H7[S2+]†[2] s8 H7†[2] s8 12 C†1 F† H†2 N
+SMV M41 75/18 n/a yes CS 3 H7[S2+]†[2] s8 H7†[2] s8 12† C†1 H†2 N
+SMV M42 75/18 n/a yes CS 3 H7 s8 H7 s8 13 C†
+SMV M42 75/32 n/a yes CS 3 H7 s8 H7 s8 13† C†1
+SMV M43 105/25 n/a n/a CS 4 H7 s8 H7 s8 14 C†
+SMV L40 47/32 n/a yes CS 3 n/a n/a 15† N R
+SMV M41M 90/53 n/a yes CS 5 HE7 HE7 16† D†1
+AS 42 n/a yes CS 3 n/a n/a 17† L†1 M N
+AS 42 aa n/a yes CS 4 n/a n/a 17† G†1 L†2 M N AA†1
+AS 42 cc n/a yes CS 4 n/a n/a 17† G†1 J†1 L†2 M N
+Lince n/a yes CS 2 n/a n/a 18 E
+Lancia 1ZM ® yes CS 6 n/a n/a 19† A†2 F†3 M†1
+Fiat 611A ® yes CS 5 n/a n/a 20† A†2 F†3 M†1
+Fiat 611B ® yes CS 5 HE7 HE7 20† F†2 M†1
+AB 40 n/a yes CS 4 n/a n/a 21 A† I†1 N
+AB 41 n/a yes CS 4 n/a n/a 21† N R
+Autoprot S37 n/a yes CS 4 n/a n/a 22† R
+Autocann 20/65(b) n/a yes CS 4 n/a n/a 23† G†1 N R AA†
+Autocann 65/17(b) n/a yes CS 4 H7[S2+]†[2] H7†[2] 23† G†1 H†2 N
+Autocann 75/27 n/a yes CS 4 AP7 AP7 24 D† N AA†1
+Autocann 90/53 n/a yes CS 4 n/a n/a 24 D† N AA†1
+TL 37 n/a yes cs 5 n/a n/a 25† L†1 M N R
+TM 40 n/a yes cs 5 n/a n/a 25† L†1 M N R
+TP 32 n/a yes cs 5 n/a n/a 25† L†1 M N R
+Autocaretta n/a yes cs 5†1 n/a n/a 26† K†1 N R
+Fiat 508 MC n/a yes cs 2†1 n/a n/a 27† A†2 K†1 N R
+Autocarro L n/a yes cs 6 n/a n/a 28† N R
+Autocarro M n/a yes cs 7 n/a n/a 28† N R
+Autocarro P n/a yes cs 7 n/a n/a 28† N R
diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/italian/1945.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/italian/1945.txt
new file mode 100644
index 0000000..6947251
--- /dev/null
+++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/italian/1945.txt
@@ -0,0 +1,45 @@
+=== vehicles/italian/1945 ===
+
+Name Radio IF Crew survival Capabilities (effective) # Notes
+----------------- ------- ---- ----------------- -------------- ------------- --- -------------------------------------------------
+L5/21 ® yes CS 2 n/a n/a 1† A†1
+L5/30 ® yes CS 2 n/a n/a 1† n/a
+L3/35 ® yes CS 2 n/a n/a 2† A†1 B†1 E N R
+L3 aa ® yes CS 2 n/a n/a 3† C E†2 F†1 N R
+L3 cc ® yes CS 2 n/a n/a 4† E J†1 N
+L3 Lf ® yes CS 2 n/a n/a 5† E†1 N
+L6/40 n/a yes CS 2 n/a n/a 6† N R
+M11/39 ® yes CS 3 n/a n/a 7† A†1 N
+M13/40 ®† yes CS 4 n/a n/a 8† B†1 C†2 N
+M14/41 n/a yes CS 4 n/a n/a 9† B†1 C†2 N
+M15/42 n/a yes CS 4 n/a n/a 10† B†1 C†2
+MR/35(f) n/a yes CS 2 n/a n/a 11† I†1
+SMV M40 75/18 n/a yes CS 3 H7[S2+]†[2] s8 H7†[2] s8 12 C†1 F† H†2 N
+SMV M41 75/18 n/a yes CS 3 H7[S2+]†[2] s8 H7†[2] s8 12† C†1 H†2 N
+SMV M42 75/18 n/a yes CS 3 H7 s8 H7 s8 13 C†
+SMV M42 75/32 n/a yes CS 3 H7 s8 H7 s8 13† C†1
+SMV M43 105/25 n/a n/a CS 4 H7 s8 H7 s8 14 C†
+SMV L40 47/32 n/a yes CS 3 n/a n/a 15† N R
+SMV M41M 90/53 n/a yes CS 5 HE7 HE7 16† D†1
+AS 42 n/a yes CS 3 n/a n/a 17† L†1 M N
+AS 42 aa n/a yes CS 4 n/a n/a 17† G†1 L†2 M N AA†1
+AS 42 cc n/a yes CS 4 n/a n/a 17† G†1 J†1 L†2 M N
+Lince n/a yes CS 2 n/a n/a 18 E
+Lancia 1ZM ® yes CS 6 n/a n/a 19† A†2 F†3 M†1
+Fiat 611A ® yes CS 5 n/a n/a 20† A†2 F†3 M†1
+Fiat 611B ® yes CS 5 HE7 HE7 20† F†2 M†1
+AB 40 n/a yes CS 4 n/a n/a 21 A† I†1 N
+AB 41 n/a yes CS 4 n/a n/a 21† N R
+Autoprot S37 n/a yes CS 4 n/a n/a 22† R
+Autocann 20/65(b) n/a yes CS 4 n/a n/a 23† G†1 N R AA†
+Autocann 65/17(b) n/a yes CS 4 H7[S2+]†[2] H7†[2] 23† G†1 H†2 N
+Autocann 75/27 n/a yes CS 4 AP7 AP7 24 D† N AA†1
+Autocann 90/53 n/a yes CS 4 n/a n/a 24 D† N AA†1
+TL 37 n/a yes cs 5 n/a n/a 25† L†1 M N R
+TM 40 n/a yes cs 5 n/a n/a 25† L†1 M N R
+TP 32 n/a yes cs 5 n/a n/a 25† L†1 M N R
+Autocaretta n/a yes cs 5†1 n/a n/a 26† K†1 N R
+Fiat 508 MC n/a yes cs 2†1 n/a n/a 27† A†2 K†1 N R
+Autocarro L n/a yes cs 6 n/a n/a 28† N R
+Autocarro M n/a yes cs 7 n/a n/a 28† N R
+Autocarro P n/a yes cs 7 n/a n/a 28† N R
diff --git a/vasl_templates/webapp/tests/test_capabilities.py b/vasl_templates/webapp/tests/test_capabilities.py
index cd5f6af..f79d197 100644
--- a/vasl_templates/webapp/tests/test_capabilities.py
+++ b/vasl_templates/webapp/tests/test_capabilities.py
@@ -245,6 +245,16 @@ def test_month_capabilities( webapp, webdriver ):
assert "H6\u20201" in val2
assert _get_capabilities( webdriver, webapp, *ordnance, "ETO", "01/1943" ) == val2
+ # SMV M40 75/18, SMV M41 75/18, Autocann 65/17(b): H7(S2+)†2
+ for vo_name in ("SMV M40 75/18", "SMV M41 75/18", "Autocann 65/17(b)"):
+ vehicle = [ "italian", "vehicles", vo_name ]
+ val = _get_capabilities( webdriver, webapp, *vehicle, "ETO", "12/1941" )
+ assert "H7" not in val
+ assert _get_capabilities( webdriver, webapp, *vehicle, "ETO", "08/1942" ) == val
+ val2 = _get_capabilities( webdriver, webapp, *vehicle, "ETO", "09/1942" )
+ assert "H7\u20202" in val2
+ assert _get_capabilities( webdriver, webapp, *vehicle, "ETO", "01/1943" ) == val2
+
# ---------------------------------------------------------------------
@pytest.mark.skipif(
@@ -354,8 +364,8 @@ def _get_capabilities( webdriver, webapp,
if vo_type == "vehicles":
assert "Capabilities" in results[0][4]
return results[row_no][5]
- elif vo_type == "ordnance":
+ if vo_type == "ordnance":
assert "Capabilities" in results[0][1]
return results[row_no][2]
- else:
- assert False
+ assert False
+ return None
diff --git a/vasl_templates/webapp/tests/test_vo_reports.py b/vasl_templates/webapp/tests/test_vo_reports.py
index a47cfbd..c369df7 100644
--- a/vasl_templates/webapp/tests/test_vo_reports.py
+++ b/vasl_templates/webapp/tests/test_vo_reports.py
@@ -36,7 +36,7 @@ def test_vo_reports( webapp, webdriver ):
)
# check each vehicle/ordnance report
- for nat in ["german","russian","american","british"]:
+ for nat in ["german","russian","american","british","italian"]:
for vo_type in ["vehicles","ordnance"]:
for year in range(1940,1945+1):