gogcli/internal/tracking/config_test.go
Peter Steinberger ade1214edc
refactor: split command test helpers
Co-authored-by: twilsher <273817+twilsher@users.noreply.github.com>
Co-authored-by: Alex <1514933+alexuser@users.noreply.github.com>
Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: pavelzak <2132599+pavelzak@users.noreply.github.com>
2026-04-20 15:11:55 +01:00

114 lines
2.7 KiB
Go

package tracking
import (
"os"
"strings"
"testing"
)
func TestConfigRoundTrip(t *testing.T) {
setupTrackingConfigEnv(t)
account := "test@example.com"
if err := SaveSecrets(account, "testkey123", "adminkey456"); err != nil {
t.Fatalf("SaveSecrets failed: %v", err)
}
cfg := &Config{
Enabled: true,
WorkerURL: "https://test.workers.dev",
WorkerName: "gog-email-tracker-test",
DatabaseName: "gog-email-tracker-test",
DatabaseID: "db-id-123",
SecretsInKeyring: true,
}
if err := SaveConfig(account, cfg); err != nil {
t.Fatalf("SaveConfig failed: %v", err)
}
loaded, err := LoadConfig(account)
if err != nil {
t.Fatalf("LoadConfig failed: %v", err)
}
if loaded.WorkerURL != cfg.WorkerURL {
t.Errorf("WorkerURL mismatch: got %q, want %q", loaded.WorkerURL, cfg.WorkerURL)
}
if loaded.WorkerName != cfg.WorkerName {
t.Errorf("WorkerName mismatch: got %q, want %q", loaded.WorkerName, cfg.WorkerName)
}
if loaded.DatabaseID != cfg.DatabaseID {
t.Errorf("DatabaseID mismatch: got %q, want %q", loaded.DatabaseID, cfg.DatabaseID)
}
if loaded.TrackingKey != "testkey123" {
t.Errorf("TrackingKey mismatch: got %q, want %q", loaded.TrackingKey, "testkey123")
}
if loaded.AdminKey != "adminkey456" {
t.Errorf("AdminKey mismatch: got %q, want %q", loaded.AdminKey, "adminkey456")
}
if !loaded.IsConfigured() {
t.Error("IsConfigured should return true")
}
path, pathErr := ConfigPath()
if pathErr != nil {
t.Fatalf("ConfigPath: %v", pathErr)
}
b, readErr := os.ReadFile(path)
if readErr != nil {
t.Fatalf("ReadFile: %v", readErr)
}
s := string(b)
if strings.Contains(s, "tracking_key") || strings.Contains(s, "admin_key") {
t.Fatalf("expected secrets omitted from config file, got:\n%s", s)
}
if !strings.Contains(s, "\"version\"") || !strings.Contains(s, "\"updated_at\"") {
t.Fatalf("expected version metadata in config file, got:\n%s", s)
}
}
func TestLoadConfigMissing(t *testing.T) {
setupTrackingConfigEnv(t)
cfg, err := LoadConfig("missing@example.com")
if err != nil {
t.Fatalf("LoadConfig failed: %v", err)
}
if cfg.Enabled {
t.Error("Expected Enabled to be false for missing config")
}
if cfg.IsConfigured() {
t.Error("IsConfigured should return false for missing config")
}
}
func TestLoadConfigDifferentAccount(t *testing.T) {
setupTrackingConfigEnv(t)
cfg := &Config{Enabled: true, WorkerURL: "https://test.workers.dev"}
if err := SaveConfig("a@example.com", cfg); err != nil {
t.Fatalf("SaveConfig failed: %v", err)
}
loaded, err := LoadConfig("b@example.com")
if err != nil {
t.Fatalf("LoadConfig failed: %v", err)
}
if loaded.Enabled {
t.Error("Expected Enabled to be false for missing account config")
}
}