/****************************************************************************** __ ____ __ / / ___ ____ _/ __/_____________ _/ /__ / / / _ \/ __ `/ /_/ ___/ ___/ __ `/ / _ \ / /___/ __/ /_/ / __(__ ) /__/ /_/ / / __/ /_____/\___/\__,_/_/ /____/\___/\__,_/_/\___/ (C)opyright 2026, Leafscale, LLC - https://www.leafscale.com Project: repoman Filename: tests/test_config_parse.reef Authors: Chris Tusa License: Description: Tests: registry TOML parsing ******************************************************************************/ import config import test.framework import core.result_generic as rg proc main() let runner = new framework.TestRunner() let toml_input: string = "[repoman]\nschema = 1\noutput = \"verbose\"\n\n[defaults]\nrepos_root = \"/home/u/repos\"\nbackup_root = \"/nfs/repos\"\nlogdir = \"/var/log/repoman\"\nincus_project = \"repoman\"\ndefault_image = \"images:ubuntu/26.04/cloud\"\nprofiles = [\"default\", \"claude-share\"]\n\n[[project]]\nname = \"isurus\"\nrepo = \"isurus-project\"\nimage = \"images:ubuntu/26.04/cloud\"\nprofiles = [\"default\"]\ncreated = \"2026-04-28T15:00:00Z\"\nlast_sync = \"\"\nbackup = true\n" let r = config.parse_registry(toml_input) runner.assert_eq_bool(rg.is_ok(r), true, "parse succeeds") if rg.is_ok(r) let reg = rg.unwrap_ok(r) runner.assert_eq_int(reg.schema, 3, "schema after parse = 3 (migrated)") runner.assert_eq_string(reg.output, "verbose", "output preserved") runner.assert_eq_string(reg.defaults.repos_root, "/home/u/repos", "repos_root") runner.assert_eq_string(reg.defaults.backup_root, "/nfs/repos", "backup_root") runner.assert_eq_string(reg.defaults.logdir, "/var/log/repoman", "logdir preserved") runner.assert_eq_string(reg.defaults.incus_project, "repoman", "incus_project") runner.assert_eq_string(reg.defaults.default_image, "images:ubuntu/26.04/cloud", "default_image") runner.assert_eq_int(reg.defaults.profiles.length(), 2, "defaults.profiles count") runner.assert_eq_string(reg.defaults.profiles[0], "default", "defaults.profiles[0]") runner.assert_eq_string(reg.defaults.profiles[1], "claude-share", "defaults.profiles[1]") runner.assert_eq_int(reg.projects.length(), 1, "1 project") let p = reg.projects[0] runner.assert_eq_string(p.name, "isurus", "project.name") runner.assert_eq_string(p.repo, "isurus-project", "project.repo") runner.assert_eq_string(p.image, "images:ubuntu/26.04/cloud", "project.image") runner.assert_eq_int(p.profiles.length(), 1, "project.profiles count") runner.assert_eq_string(p.profiles[0], "default", "project.profiles[0]") runner.assert_eq_string(p.last_sync, "", "project.last_sync") runner.assert_eq_bool(p.backup, true, "project.backup") end if // schema rejection let bad_schema: string = "[repoman]\nschema = 99\n[defaults]\nrepos_root = \"/r\"\nbackup_root = \"/b\"\nincus_project = \"x\"\ndefault_image = \"y\"\nprofiles = []\n" let r2 = config.parse_registry(bad_schema) runner.assert_eq_bool(rg.is_err(r2), true, "schema 99 rejected") // Forward-compatibility: registry without output/logdir loads with defaults let legacy: string = "[repoman]\nschema = 1\n\n[defaults]\nrepos_root = \"/r\"\nbackup_root = \"/b\"\nincus_project = \"p\"\ndefault_image = \"img\"\nprofiles = []\n" let r3 = config.parse_registry(legacy) runner.assert_eq_bool(rg.is_ok(r3), true, "legacy registry parses") if rg.is_ok(r3) let reg3 = rg.unwrap_ok(r3) runner.assert_eq_string(reg3.output, "quiet", "output defaults to quiet when missing") runner.assert_eq_string(reg3.defaults.logdir, "~/.local/state/repoman", "logdir defaults when missing") end if // Invalid output value rejected let bad_output: string = "[repoman]\nschema = 1\noutput = \"loud\"\n[defaults]\nrepos_root = \"/r\"\nbackup_root = \"/b\"\nincus_project = \"p\"\ndefault_image = \"img\"\nprofiles = []\n" let r4 = config.parse_registry(bad_output) runner.assert_eq_bool(rg.is_err(r4), true, "invalid output value rejected") runner.report() end main