setup_test.go
1 package config 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "net/http" 7 "net/http/httptest" 8 "strings" 9 "testing" 10 ) 11 12 func TestRunSetup_OllamaProvider(t *testing.T) { 13 ollama := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 14 switch r.URL.Path { 15 case "/": 16 w.Write([]byte("Ollama is running")) 17 case "/api/tags": 18 json.NewEncoder(w).Encode(map[string]any{ 19 "models": []map[string]any{ 20 {"name": "qwen3:4b", "size": 2500000000, "details": map[string]string{"parameter_size": "4B"}}, 21 {"name": "llama3.1:8b", "size": 5200000000, "details": map[string]string{"parameter_size": "8B"}}, 22 }, 23 }) 24 default: 25 w.WriteHeader(404) 26 } 27 })) 28 defer ollama.Close() 29 30 cfg := &Config{} 31 // Simulate: choose "2" (Ollama) → enter endpoint → choose model "1" 32 input := strings.NewReader("2\n" + ollama.URL + "\n1\n") 33 var output bytes.Buffer 34 35 err := RunSetup(cfg, input, &output) 36 if err != nil { 37 t.Fatalf("setup failed: %v", err) 38 } 39 if cfg.Provider != "ollama" { 40 t.Errorf("expected provider=ollama, got %q", cfg.Provider) 41 } 42 if cfg.Ollama.Model != "qwen3:4b" { 43 t.Errorf("expected model=qwen3:4b, got %q", cfg.Ollama.Model) 44 } 45 if cfg.Ollama.Endpoint != ollama.URL { 46 t.Errorf("expected endpoint=%s, got %q", ollama.URL, cfg.Ollama.Endpoint) 47 } 48 } 49 50 func TestRunSetup_GatewayProvider(t *testing.T) { 51 gw := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 52 w.WriteHeader(200) 53 })) 54 defer gw.Close() 55 56 cfg := &Config{} 57 // Simulate: choose "1" (Cloud) → enter endpoint → enter API key 58 input := strings.NewReader("1\n" + gw.URL + "\ntest-key\n") 59 var output bytes.Buffer 60 61 err := RunSetup(cfg, input, &output) 62 if err != nil { 63 t.Fatalf("setup failed: %v", err) 64 } 65 if cfg.Provider != "" && cfg.Provider != "gateway" { 66 t.Errorf("expected provider=gateway or empty, got %q", cfg.Provider) 67 } 68 if cfg.APIKey != "test-key" { 69 t.Errorf("expected api_key=test-key, got %q", cfg.APIKey) 70 } 71 }