/ internal / config / setup_test.go
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  }