package consumers_test import ( "errors" "fmt" "testing" configkit "gitea.maximumdirect.net/eric/ConfigKit" "gitea.maximumdirect.net/eric/ConfigKit/examples/consumers" ) func Example_inputDestination() { mounted, err := configkit.LoadLayered[map[string]any](configkit.Input{ Source: configkit.Mapping("weather prompt", map[string]any{ "summarize.alerts": map[string]any{"version": "1"}, }), Destination: configkit.Keys("collections", "weather.reporter", "prompts"), }) if err != nil { fmt.Println(err) return } root, err := configkit.LoadLayered[map[string]any](configkit.Input{ Source: configkit.Bytes("standalone", []byte("name: standalone\n")), }) if err != nil { fmt.Println(err) return } _, found := mounted.Config["collections"] fmt.Println(found, root.Config["name"]) // Output: true standalone } func TestCollectionBundleAssemblesMountedPeersAndResources(t *testing.T) { result, err := consumers.LoadCollectionBundle() if err != nil { t.Fatalf("LoadCollectionBundle: %v", err) } collection := result.Config.Collections["weatherreporter"] if result.Config.Version != "1" || collection.Name != "Weather Reporter" || collection.Version != "2.4.0" { t.Fatalf("main and collection versions = %q, %#v", result.Config.Version, collection) } brief := collection.Prompts["brief"] custom := collection.Prompts["custom"] if brief.Version != "2" || brief.DefaultProfile != "compact" || brief.ContentFile != "welcome.txt" || len(brief.Messages) != 1 { t.Fatalf("version-only override replaced lower prompt fields: %#v", brief) } if custom.Version != "2" || custom.DefaultProfile != "weather" || custom.ContentFile != brief.ContentFile || len(custom.Messages) != 1 || custom.ResourceText != "Welcome to the weather collection.\n" { t.Fatalf("inherited prompt = %#v", custom) } weatherProfile := collection.Profiles["weather"] if weatherProfile.Format != "text" || weatherProfile.Temperature != 0.4 { t.Fatalf("inherited profile = %#v", weatherProfile) } resource, err := consumers.ReadCollectionPromptContent(result, "weatherreporter", "custom") if err != nil || resource != custom.ResourceText { t.Fatalf("inherited prompt resource = %q, %v", resource, err) } versionInfo, ok := result.Metadata().Lookup(configkit.Keys("version")) if !ok || !versionInfo.Explicit || versionInfo.Origin.Layer != configkit.LayerBase || len(versionInfo.Origin.Locations) != 1 { t.Fatalf("main-owned version metadata = %#v, %v", versionInfo, ok) } collectionVersionPath := configkit.Keys("collections", "weatherreporter", "version") collectionVersion, ok := result.Metadata().Lookup(collectionVersionPath) if !ok || !collectionVersion.Explicit || collectionVersion.Origin.Layer != configkit.LayerUnderlay || len(collectionVersion.Origin.Locations) != 1 { t.Fatalf("ordinary collection version metadata = %#v, %v", collectionVersion, ok) } var metadataSource configkit.SourceInfo var collectionEntrySource configkit.SourceInfo var versionSource configkit.SourceInfo var parentPromptSource configkit.SourceInfo var promptIndexSource configkit.SourceInfo var profileIndexSource configkit.SourceInfo var promptVersionSource configkit.SourceInfo for _, source := range result.Sources() { switch source.Path { case "collections/weather/collection.yml": collectionEntrySource = source case "collections/weather/metadata.yml": metadataSource = source case "collections/weather/version.yml": versionSource = source case "collections/weather/prompts/index.yml": promptIndexSource = source case "collections/weather/prompts/brief.yml": parentPromptSource = source case "collections/weather/profiles/index.yml": profileIndexSource = source case "operators/weather-prompt-version.yml": promptVersionSource = source } } collectionVersionLocation := collectionVersion.Origin.Locations[0] if collectionEntrySource.ID != "source-2" || collectionEntrySource.Destination.String() != "/collections/weatherreporter" || metadataSource.ID == "" || metadataSource.Destination.String() != "/collections/weatherreporter" || metadataSource.ImportedFrom == nil || metadataSource.ImportedFrom.SourceID != collectionEntrySource.ID || versionSource.ID == "" || collectionVersionLocation.SourceID != versionSource.ID || versionSource.Destination.String() != "/collections/weatherreporter" || versionSource.ImportedFrom == nil || versionSource.ImportedFrom.SourceID != metadataSource.ID || collectionVersionLocation.Line != 1 { t.Fatalf("nested collection version provenance = entry %#v, metadata %#v, version %#v, location %#v", collectionEntrySource, metadataSource, versionSource, collectionVersionLocation) } if promptIndexSource.ID == "" || promptIndexSource.Destination.String() != "/collections/weatherreporter/prompts" || promptIndexSource.ImportedFrom == nil || promptIndexSource.ImportedFrom.SourceID != collectionEntrySource.ID || profileIndexSource.ID == "" || profileIndexSource.Destination.String() != "/collections/weatherreporter/profiles" || profileIndexSource.ImportedFrom == nil || profileIndexSource.ImportedFrom.SourceID != collectionEntrySource.ID { t.Fatalf("nested prompt/profile placement = prompt %#v profile %#v", promptIndexSource, profileIndexSource) } if promptVersionSource.ID == "" || promptVersionSource.Destination.String() != "/collections/weatherreporter/prompts" || promptVersionSource.UnderlayIndex != 2 { t.Fatalf("prompt version source = %#v", promptVersionSource) } contentPath := configkit.Keys("collections", "weatherreporter", "prompts", "custom", "content_file") contentInfo, ok := result.Metadata().Lookup(contentPath) if !ok || !contentInfo.Explicit || len(contentInfo.Origin.Inheritance) != 1 || len(contentInfo.Origin.Locations) != 1 { t.Fatalf("inherited content field metadata = %#v, %v", contentInfo, ok) } contentLocation := contentInfo.Origin.Locations[0] if parentPromptSource.ID == "" || contentLocation.SourceID != parentPromptSource.ID || contentLocation.Line != 4 || parentPromptSource.Destination.String() != "/collections/weatherreporter/prompts" { t.Fatalf("inherited resource source coordinates = %#v, source %#v", contentLocation, parentPromptSource) } } func TestCollectionPeerPromptConflictsRemainStrict(t *testing.T) { destination := configkit.Keys("collections", "weatherreporter", "prompts") _, err := configkit.LoadLayered[map[string]any](configkit.Input{Source: configkit.NoSource()}, configkit.LayeredOptions[map[string]any]{ Underlays: []configkit.Underlay{{Inputs: []configkit.Input{ {Source: configkit.Bytes("peer-a", []byte("brief: {version: '1'}\n")), Destination: destination}, {Source: configkit.Bytes("peer-b", []byte("brief: {version: '1'}\n")), Destination: destination}, }}}, }) var loadError *configkit.LoadError if !errors.As(err, &loadError) || len(loadError.Diagnostics()) == 0 || loadError.Diagnostics()[0].Code != configkit.CodeComposeConflict { t.Fatalf("duplicate peer prompt error = %v", err) } }