Ctrl K
ComunidadGuías…

internal/config/model_catalogs_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package config

import (
	"fmt"
	"os"
	"path/filepath"
	"testing"

	"gopkg.in/yaml.v3"
)

func TestModelCatalogConfigRoundTrip(t *testing.T) {
	for _, migrate := range []bool{false, true} {
		t.Run(fmt.Sprint(migrate), func(t *testing.T) {
			path := filepath.Join(t.TempDir(), "config.yaml")
			sources := ModelCatalogs{Catalog: filepath.Join(t.TempDir(), "models.json"), CodexCatalog: "https://example.com/codex.json", DevinCatalog: "http://localhost/devin.json"}
			data, errMarshal := yaml.Marshal(map[string]any{"config-version": 8, "models": sources})
			if errMarshal != nil {
				t.Fatal(errMarshal)
			}
			if errValidate := ValidateV8Config(data); errValidate != nil {
				t.Fatal(errValidate)
			}
			if errWrite := os.WriteFile(path, data, 0600); errWrite != nil {
				t.Fatal(errWrite)
			}
			cfg, errLoad := LoadConfig(path)
			if errLoad != nil {
				t.Fatal(errLoad)
			}
			if cfg.Models != sources {
				t.Fatalf("loaded sources: %+v", cfg.Models)
			}
			if errSave := SaveConfigPreserveComments(path, cfg, migrate); errSave != nil {
				t.Fatal(errSave)
			}
			saved, errRead := os.ReadFile(path)
			if errRead != nil {
				t.Fatal(errRead)
			}
			if errValidate := ValidateV8Config(saved); errValidate != nil {
				t.Fatal(errValidate)
			}
			reloaded, errReload := LoadConfig(path)
			if errReload != nil {
				t.Fatal(errReload)
			}
			if reloaded.Models != sources {
				t.Fatalf("saved sources: %+v", reloaded.Models)
			}
			cfg.Models = ModelCatalogs{}
			if errSave := SaveConfigPreserveComments(path, cfg, migrate); errSave != nil {
				t.Fatal(errSave)
			}
			cleared, errClear := LoadConfig(path)
			if errClear != nil {
				t.Fatal(errClear)
			}
			if cleared.Models != (ModelCatalogs{}) {
				t.Fatalf("cleared sources retained: %+v", cleared.Models)
			}

		})
	}
}

func TestModelCatalogConfigValidation(t *testing.T) {
	for _, field := range []string{"catalog", "codex-catalog", "devin-catalog"} {
		for _, source := range []string{"relative.json", "./models.json", "~/models.json", "ftp://example.com/models", "file:///tmp/models.json", "https:///models"} {
			data := []byte(fmt.Sprintf("models:\n  %s: %q\n", field, source))
			var cfg Config
			if errUnmarshal := yaml.Unmarshal(data, &cfg); errUnmarshal == nil {
				t.Fatalf("accepted %s: %s", field, source)
			}
			if errValidate := ValidateV8Config(data); errValidate == nil {
				t.Fatalf("v8 accepted %s: %s", field, source)
			}
		}
	}
	for _, raw := range []string{"models: {}", "models: {catalog: ''}", "models: {codex-catalog: 'https://example.com/models.json'}"} {
		if errValidate := ValidateV8Config([]byte(raw)); errValidate != nil {
			t.Fatal(errValidate)
		}
	}
}