///|
test "compose includes and a group with explicit later roots" {
let metrics = @config.ProfileName::parse("metrics")
let production = @config.ProfileName::parse("production")
let postgres = @config.ProfileName::parse("postgres")
let policy = @profiles.Policy::new()
|> @profiles.includes(@config.ProfileNames::new([metrics]))
|> @profiles.group(production, @config.ProfileNames::new([postgres, metrics]))
let resolution = @profiles.resolve(
policy,
Selected(@config.ProfileNames::new([production, postgres])),
)
assert_eq(
resolution.active().names().map(name => name.to_string()),
["production", "metrics", "postgres"],
)
assert_true(resolution.contains(postgres))
assert_eq(resolution.selector(), Discovery)
}///|
test "explicit empty selection differs from disabled processing" {
let common = @config.ProfileName::parse("common")
let development = @config.ProfileName::parse("development")
let policy = @profiles.Policy::new()
|> @profiles.includes(@config.ProfileNames::new([common]))
|> @profiles.fallback(@config.ProfileNames::new([development]))
let empty = @profiles.resolve(policy, Selected(@config.ProfileNames::new([])))
assert_eq(empty.active().names(), [common])
assert_false(empty.disabled())
let disabled = @profiles.resolve(policy, Disabled)
assert_eq(disabled.active().names(), [])
assert_true(disabled.disabled())
let variable = @profiles.resolve(
policy,
Unspecified,
variable=("ACME_PROFILES", " \t"),
)
assert_true(variable.disabled())
assert_eq(variable.selector(), Variable("ACME_PROFILES"))
}[profiles]
default = ["development"]
include = ["common"]
[profiles.groups]
production = ["postgres", "metrics"]///|
test "base controls retain selection and reason origins" {
let source : @config.Origin = {
kind: File(Workspace),
source: "acme",
priority: 300,
location: Some("/work/acme.toml"),
}
let root = @config.ConfigValue::from_json({
"profiles": {
"default": ["development"],
"include": ["common"],
"groups": { "development": ["metrics"] },
},
})
let resolution = @profiles.resolve(
@profiles.Policy::new(),
Unspecified,
controls=(root, source),
)
assert_eq(resolution.selector(), BaseDefault(source))
assert_eq(
resolution.active().names().map(name => name.to_string()),
["common", "development", "metrics"],
)
assert_true(resolution.controls().contains(
Control(source, @config.KeyPath::parse("profiles.groups.development")),
))
}///|
test "layered controls preserve each supplying origin" {
let json : @config.Origin = {
kind: File(Workspace), source: "acme", priority: 300,
location: Some("/work/acme.json"),
}
let toml = { ..json, location: Some("/work/acme.toml") }
let layers = @profiles.ControlLayers::new([
@profiles.ControlLayer::new(@config.ConfigValue::from_json({
"profiles": { "default": ["development"] },
}), json),
@profiles.ControlLayer::new(@config.ConfigValue::from_json({
"profiles": { "groups": { "development": ["metrics"] } },
}), toml),
])
let input = @profiles.SelectionInput::new(Unspecified)
let resolution = @profiles.resolve_layers(@profiles.Policy::new(), input, layers)
assert_eq(resolution.selector(), BaseDefault(json))
assert_true(resolution.controls().contains(
Control(toml, @config.KeyPath::parse("profiles.groups.development")),
))
assert_true(resolution.permits_controls(json))
}pub struct ControlLayer {
// private fields
}pub struct ControlLayers {
// private fields
}pub struct Policy {
// private fields
}pub struct SelectionInput {
// private fields
}fn SelectionInput::new(selection : ProfileSelection, variable? : (String, String)) -> SelectionInput raise ConfigErrorfn resolve(policy : Policy, selection : ProfileSelection, variable? : (String, String), controls? : (ConfigValue, Origin)) -> ProfileResolution raise ConfigErrorfn resolve_input(policy : Policy, input : SelectionInput, controls? : (ConfigValue, Origin)) -> ProfileResolution raise ConfigErrorfn resolve_layers(policy : Policy, input : SelectionInput, layers : ControlLayers) -> ProfileResolution raise ConfigError