aboutsummaryrefslogtreecommitdiff
path: root/scripts/tui-golden.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/tui-golden.py')
-rwxr-xr-xscripts/tui-golden.py202
1 files changed, 200 insertions, 2 deletions
diff --git a/scripts/tui-golden.py b/scripts/tui-golden.py
index 25cfdc3..f5d5b7f 100755
--- a/scripts/tui-golden.py
+++ b/scripts/tui-golden.py
@@ -56,6 +56,9 @@ KEYS = {
"ctrlc": "\x03",
"ctrln": "\x0e",
"ctrlenter": "\x1b[27;5;13~",
+ "ctrlenter-kitty": "\x1b[13;5u",
+ "f5": "\x1b[15~",
+ "f9": "\x1b[20~",
}
# {org_name} {org_nr} {fy_label} {fy_start} {fy_end} are substituted at run
@@ -64,7 +67,8 @@ SCENARIOS = [
{
"name": "dashboard",
"screen": "dashboard",
- "expect": ["{org_name}", "{fy_label}", "{fy_start}", "{fy_end}"],
+ "expect": ["{org_name}", "{fy_label}", "{fy_start}", "{fy_end}",
+ "Bolaget", "System", "Räkenskapsår"],
},
{
"name": "audit-ok",
@@ -118,6 +122,21 @@ SCENARIOS = [
],
},
{
+ "name": "inbox-file-browser",
+ "screen": "inbox",
+ "expect": ["Underlag (inkorg)"],
+ "steps": [
+ {
+ "keys": ["a"],
+ "expect": ["Välj fil — /"],
+ },
+ {
+ "keys": ["esc"],
+ "expect": ["Underlag (inkorg)"],
+ },
+ ],
+ },
+ {
"name": "bank-new-voucher",
"screen": "bank",
"expect": ["Bankavstämning", "GOLDEN INSÄTTNING", "CDON"],
@@ -211,6 +230,156 @@ SCENARIOS = [
},
],
},
+ {
+ "name": "employees",
+ "screen": "employees",
+ "expect": ["Anställda", "Testanställd", "Ny anställd"],
+ },
+ {
+ "name": "employee-new-f9",
+ "screen": "employees",
+ "steps": [
+ {
+ "keys": ["ctrln"],
+ "expect": ["Ny anställd", "Personnummer"],
+ },
+ {
+ "keys": ["enter", "Testperson", "enter"],
+ "expect": ["Ny anställd", "Testperson"],
+ },
+ {
+ "keys": ["down", "enter", "19900101-1234", "enter"],
+ "expect": ["19900101-1234"],
+ },
+ {
+ "keys": ["f9"],
+ "expect": ["Anställd skapad."],
+ },
+ {
+ "keys": ["enter"],
+ "expect": ["Anställda", "Testperson"],
+ },
+ ],
+ },
+ {
+ "name": "employee-new-kitty",
+ "screen": "employees",
+ "steps": [
+ {
+ "keys": ["ctrln"],
+ "expect": ["Ny anställd", "Personnummer"],
+ },
+ {
+ "keys": ["enter", "Kitty Person", "enter"],
+ "expect": ["Kitty Person"],
+ },
+ {
+ "keys": ["down", "enter", "19900202-5678", "enter"],
+ "expect": ["19900202-5678"],
+ },
+ {
+ "keys": ["ctrlenter-kitty"],
+ "expect": ["Anställd skapad."],
+ },
+ {
+ "keys": ["enter"],
+ "expect": ["Anställda", "Kitty Person"],
+ },
+ ],
+ },
+ {
+ "name": "company",
+ "screen": "company",
+ "expect": ["Bolaget", "Företagsuppgifter", "Fakturauppgifter",
+ "E-post (SMTP)", "Anställda", "Kunder", "Momsregler"],
+ "steps": [
+ {
+ "keys": ["3"],
+ "expect": ["E-post (SMTP)", "SMTP-server",
+ "lämna tomt för oförändrat"],
+ },
+ {
+ "keys": ["esc"],
+ "expect": ["Bolaget", "Företagsuppgifter"],
+ },
+ {
+ "keys": ["5"],
+ "expect": ["Anställda", "Testanställd"],
+ },
+ {
+ "keys": ["esc"],
+ "expect": ["Bolaget", "Kunder"],
+ },
+ ],
+ },
+ {
+ "name": "system",
+ "screen": "system",
+ "expect": ["System", "Skattetabeller", "Revision"],
+ "steps": [
+ {
+ "keys": ["1"],
+ "expect": ["Skattetabeller", "Status: skattetabeller för"],
+ },
+ {
+ "keys": ["esc"],
+ "expect": ["System", "Revision"],
+ },
+ {
+ "keys": ["2"],
+ "expect": ["Revision", "Verifiera hashkedjan"],
+ },
+ {
+ "keys": ["esc"],
+ "expect": ["System", "Skattetabeller"],
+ },
+ ],
+ },
+ {
+ "name": "tax-tables",
+ "screen": "tax_tables",
+ "expect": ["Skattetabeller", "Status: skattetabeller för",
+ "Hämta från Skatteverket"],
+ },
+ {
+ "name": "payroll",
+ "screen": "payroll",
+ "expect": ["Lönekörningar", "Ny lönekörning"],
+ },
+ {
+ "name": "payroll-run",
+ "screen": "payroll",
+ "steps": [
+ {
+ "keys": ["ctrln"],
+ "expect": ["Ny lönekörning", "Period", "Bokför körning"],
+ },
+ {
+ "keys": ["f5"],
+ "expect": ["Testanställd", "30 000,00", "Avgifter"],
+ },
+ {
+ "keys": ["esc"],
+ "expect": ["Ny lönekörning", "Bokför körning"],
+ },
+ {
+ "keys": ["ctrlenter"],
+ "expect": ["Bokför lönekörningen"],
+ },
+ {
+ "keys": ["j"],
+ "expect": ["Lönekörningen är bokförd"],
+ },
+ {
+ "keys": ["enter"],
+ "expect": ["Status: bokförd", "Lönebesked (PDF)"],
+ },
+ {
+ "keys": ["down", "down", "down", "down", "enter"],
+ "expect": ["Sparad", "Lönebesked"],
+ },
+ ],
+ },
]
# --------------------------------------------------------------------------
@@ -739,6 +908,24 @@ def setup_rig(repo, tmp, env):
"unit_price_ore": 100000,
"vat_code": "25"}],
})], env)
+ # Payroll rig: one B record covering the employee's salary, and one
+ # employee, so the Lön screens have data to show.
+ table_line = "30B30 1 80000 7000 7000 7000 7000 7000 7000\n"
+ run_checked([str(bind / "bokfctl"), "--socket", str(sock),
+ "--user", "admin", "--password", env["BOKFD_PASSWORD"],
+ "--org", str(org_id), "payroll.tax_tables_import",
+ json.dumps({"year": start.year,
+ "content_base64": base64.b64encode(
+ table_line.encode("utf-8")).decode()})], env)
+ run_checked([str(bind / "bokfctl"), "--socket", str(sock),
+ "--user", "admin", "--password", env["BOKFD_PASSWORD"],
+ "--org", str(org_id), "employee.create",
+ json.dumps({"name": "Testanställd",
+ "personal_no": "19800101-1234",
+ "monthly_salary_ore": 3000000,
+ "tax_table": 30,
+ "tax_column": 1,
+ "email": "test@example.com"})], env)
return daemon, sock, org_id, fy
@@ -763,9 +950,14 @@ def main(argv):
tmp = Path(tempfile.mkdtemp(prefix="bokf-golden-", dir="/tmp"))
password = "golden-" + os.urandom(6).hex()
env = dict(os.environ)
- env.update({"BOKFD_PASSWORD": password})
+ env.update({"BOKFD_PASSWORD": password,
+ "BOKFD_SECRET_KEY": os.urandom(32).hex()})
env.pop("BOKFD_SESSION", None)
env.pop("BOKFD_TOKEN", None)
+ # keep generated PDFs from opening a window: the TUI then reports where
+ # it saved the file, which is what the scenarios assert on
+ env.pop("DISPLAY", None)
+ env.pop("WAYLAND_DISPLAY", None)
daemon = None
failures = 0
@@ -809,6 +1001,12 @@ def main(argv):
report_failure(name, missing, "", before)
failures += 1
continue
+ if (b"\x1b[>4;2m" not in app.raw or
+ b"\x1b[>1u" not in app.raw):
+ report_failure(name, ["keyboard protocol enable "
+ "sequence"], "", before)
+ failures += 1
+ continue
current = before
for step in sc.get("steps", []):
keys = resolve_keys(step["keys"])