Add overlay migration regression coverage
This commit is contained in:
@@ -49,6 +49,12 @@ func TestExplainShowsDefaultBaseAndEffectiveOverlayValue(t *testing.T) {
|
||||
explanation.Origin.Locations[0].Line != 2 {
|
||||
t.Fatalf("effective explanation = %#v", explanation)
|
||||
}
|
||||
var rendered bytes.Buffer
|
||||
if err := result.WriteExplanation(&rendered, Keys("transcription", "concurrency")); err != nil ||
|
||||
!strings.Contains(rendered.String(), `layer="overlay"`) ||
|
||||
!strings.Contains(rendered.String(), `label="overlays/testing.yml"`) {
|
||||
t.Fatalf("rendered explanation = %v\n%s", err, rendered.String())
|
||||
}
|
||||
}
|
||||
|
||||
type explanationConfig struct {
|
||||
|
||||
@@ -89,6 +89,18 @@ settings:
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadImportsFromProfilesDirectoryAsBaseInput(t *testing.T) {
|
||||
directory := t.TempDir()
|
||||
mainPath := writeImportFile(t, directory, "main.yml", "configkit: {imports: [{path: profiles/shared.yml}]}\n")
|
||||
writeImportFile(t, directory, "profiles/shared.yml", "settings: {root: imported}\n")
|
||||
|
||||
result, err := testLoad[importTestConfig](File(mainPath), Options[importTestConfig]{Imports: true})
|
||||
if err != nil || result.Config.Settings.Root != "imported" || len(result.Sources()) != 2 ||
|
||||
result.Sources()[1].Layer != LayerBase {
|
||||
t.Fatalf("profiles import = %#v, %v", result, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadRejectsImportConflictsAndFragmentVersions(t *testing.T) {
|
||||
t.Run("all duplicate claimants", func(t *testing.T) {
|
||||
directory := t.TempDir()
|
||||
|
||||
@@ -21,7 +21,7 @@ func overlayDocuments(base *composedDocument, overlay *document.Node) (*composed
|
||||
if base == nil || base.root == nil || base.root.Kind != document.Mapping || overlay == nil || overlay.Kind != document.Mapping {
|
||||
return nil, []Diagnostic{{
|
||||
Code: CodeOverlayInvalid, Severity: SeverityError,
|
||||
Message: "overlay overlay requires mapping document roots",
|
||||
Message: "overlay requires mapping document roots",
|
||||
}}
|
||||
}
|
||||
result := cloneComposedDocument(base)
|
||||
|
||||
@@ -98,6 +98,7 @@ func TestLoadOverlaySelectionUsesOneFixedYAMLFile(t *testing.T) {
|
||||
directory := t.TempDir()
|
||||
mainPath := writeImportFile(t, directory, "main.yml", "settings: {kept: base}\n")
|
||||
writeImportFile(t, directory, "overlays/testing.yml", "settings: {changed: selected}\n")
|
||||
writeImportFile(t, directory, "profiles/testing.yml", "settings: {changed: legacy}\n")
|
||||
writeImportFile(t, directory, "overlays/default.yml", "settings: {changed: forbidden}\n")
|
||||
|
||||
for _, name := range []string{"", "default"} {
|
||||
@@ -107,10 +108,18 @@ func TestLoadOverlaySelectionUsesOneFixedYAMLFile(t *testing.T) {
|
||||
}
|
||||
}
|
||||
selected, err := testLoad[overlayTestConfig](File(mainPath), Options[overlayTestConfig]{Overlay: "testing"})
|
||||
if err != nil || selected.Config.Settings.Changed != "selected" || len(selected.Sources()) != 2 {
|
||||
if err != nil || selected.Config.Settings.Changed != "selected" || len(selected.Sources()) != 2 ||
|
||||
selected.Sources()[1].Label != "overlays/testing.yml" || selected.Sources()[1].Layer != LayerOverlay {
|
||||
t.Fatalf("selected overlay = %#v, %v", selected, err)
|
||||
}
|
||||
|
||||
t.Run("legacy directory is not selected", func(t *testing.T) {
|
||||
legacyDirectory := t.TempDir()
|
||||
legacyMain := writeImportFile(t, legacyDirectory, "main.yml", "settings: {kept: base}\n")
|
||||
writeImportFile(t, legacyDirectory, "profiles/testing.yml", "settings: {changed: legacy}\n")
|
||||
requireOverlayLoadCode(t, File(legacyMain), Options[overlayTestConfig]{Overlay: "testing"}, CodeOverlayMissing)
|
||||
})
|
||||
|
||||
for _, name := range []string{"../testing", "testing.yml", "one,two", "with space", "é", "bad\x00name"} {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
requireOverlayLoadCode(t, File(mainPath), Options[overlayTestConfig]{Overlay: name}, CodeOptionsInvalid)
|
||||
|
||||
Reference in New Issue
Block a user