1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
/******************************************************************************
__ ____ __
/ / ___ ____ _/ __/_____________ _/ /__
/ / / _ \/ __ `/ /_/ ___/ ___/ __ `/ / _ \
/ /___/ __/ /_/ / __(__ ) /__/ /_/ / / __/
/_____/\___/\__,_/_/ /____/\___/\__,_/_/\___/
(C)opyright 2026, Leafscale, LLC - https://www.leafscale.com
Project: repoman
Filename: tests/test_config_rename.reef
Authors: Chris Tusa <chris.tusa@leafscale.com>
License: <see LICENSE file included with this source code>
Description: Tests: rename_project registry mutation
******************************************************************************/
import config
import test.framework
import core.result as rg
fn empty_defaults(): config.Defaults
return config.Defaults {
repos_root: "/r", backup_root: "/b", logdir: "/l", incus_project: "p",
default_image: "img", profiles: new [string](0)
}
end empty_defaults
fn mk_project(name: string, repo: string): config.Project
return config.Project {
name: name, repo: repo, image: "img",
profiles: new [string](0), created: "t", last_sync: "", backup: true
}
end mk_project
proc main()
let runner = new framework.TestRunner()
// Two projects: a coupled one (name==repo) and a decoupled one (name!=repo).
mut projs: [config.Project] = new [config.Project](2)
projs[0] = mk_project("driftohm", "driftohm")
projs[1] = mk_project("portal", "leafscale-infrastructure/portal.leafscale.com")
let reg0: config.Registry = config.Registry {
schema: 3, host: config.Host { lan_ip: "" }, output: "quiet",
defaults: empty_defaults(), projects: projs
}
// Coupled rename: both name and repo move.
let r1 = config.rename_project(reg0, "driftohm", "mist")
runner.assert_eq_bool(rg.is_ok(r1), true, "coupled rename ok")
if rg.is_ok(r1)
let reg1 = rg.unwrap_ok(r1)
runner.assert_eq_string(reg1.projects[0].name, "mist", "coupled: name moved")
runner.assert_eq_string(reg1.projects[0].repo, "mist", "coupled: repo moved in lockstep")
runner.assert_eq_string(reg1.output, "quiet", "output preserved through rename_project")
end if
// Decoupled rename: only name moves, repo (nested path) preserved.
let r2 = config.rename_project(reg0, "portal", "gateway")
runner.assert_eq_bool(rg.is_ok(r2), true, "decoupled rename ok")
if rg.is_ok(r2)
let reg2 = rg.unwrap_ok(r2)
runner.assert_eq_string(reg2.projects[1].name, "gateway", "decoupled: name moved")
runner.assert_eq_string(reg2.projects[1].repo, "leafscale-infrastructure/portal.leafscale.com", "decoupled: repo dirname preserved")
end if
// Collision: rename onto an existing project name fails.
let r3 = config.rename_project(reg0, "driftohm", "portal")
runner.assert_eq_bool(rg.is_err(r3), true, "rename onto existing name rejected")
// Unknown source name fails.
let r4 = config.rename_project(reg0, "ghost", "whatever")
runner.assert_eq_bool(rg.is_err(r4), true, "unknown source name rejected")
runner.report()
end main
|