package confmgr import "testing" func TestEvaluateRule_Valid(t *testing.T) { src := ` current_limit: >=0 & <=max max: 100 ` res := EvaluateRule(src, map[string]any{"current_limit": 50.0}) if !res.OK { t.Fatalf("expected OK, got violations: %+v compile=%q", res.Violations, res.CompileError) } if res.CompileError != "" { t.Fatalf("unexpected compile error: %s", res.CompileError) } } func TestEvaluateRule_Violation(t *testing.T) { src := `current_limit: >=0 & <=100` res := EvaluateRule(src, map[string]any{"current_limit": 150.0}) if res.OK { t.Fatalf("expected violation, got OK") } if len(res.Violations) == 0 { t.Fatalf("expected at least one violation") } } func TestEvaluateRule_Transform(t *testing.T) { // power is derived from the supplied current & voltage. src := ` current: number voltage: number power: current * voltage ` res := EvaluateRule(src, map[string]any{"current": 2.0, "voltage": 3.0}) if !res.OK { t.Fatalf("expected OK, got %+v", res.Violations) } got, ok := res.Transformed["power"] if !ok { t.Fatalf("expected transformed power, got %+v", res.Transformed) } if f, _ := toFloat(got); f != 6 { t.Fatalf("expected power=6, got %v", got) } } func TestEvaluateRule_DefaultFillsMissing(t *testing.T) { src := `mode: *"auto" | "manual"` res := EvaluateRule(src, map[string]any{}) if !res.OK { t.Fatalf("expected OK, got %+v", res.Violations) } if res.Transformed["mode"] != "auto" { t.Fatalf("expected mode default auto, got %v", res.Transformed["mode"]) } } func TestEvaluateRule_CompileError(t *testing.T) { res := EvaluateRule(`this is : : not cue`, map[string]any{}) if res.OK || res.CompileError == "" { t.Fatalf("expected compile error, got %+v", res) } } func TestConfigRule_Validate(t *testing.T) { r := ConfigRule{Name: "r", SetID: "s", Source: `x: >=0`} if err := r.Validate(); err != nil { t.Fatalf("expected valid rule, got %v", err) } bad := ConfigRule{Name: "r", SetID: "s", Source: `x: : :`} if err := bad.Validate(); err == nil { t.Fatalf("expected compile error for bad source") } if err := (ConfigRule{Source: `x: 1`}).Validate(); err == nil { t.Fatalf("expected error for missing name/setID") } }