bd sync: 2025-12-23 23:38:57

This commit is contained in:
Steve Yegge
2025-12-23 23:38:57 -08:00
parent 05e10b6759
commit e67f27c092
80 changed files with 7165 additions and 8490 deletions

View File

@@ -200,12 +200,12 @@ func TestUnset(t *testing.T) {
t.Run("removes config value", func(t *testing.T) {
store := newTestStore(t)
defer store.Close()
// Set a value first
if err := Set(ctx, store, "beads-metadata"); err != nil {
t.Fatalf("Set() error = %v", err)
}
// Verify it's set
value, err := store.GetConfig(ctx, ConfigKey)
if err != nil {
@@ -214,12 +214,12 @@ func TestUnset(t *testing.T) {
if value != "beads-metadata" {
t.Errorf("GetConfig() = %q, want %q", value, "beads-metadata")
}
// Unset it
if err := Unset(ctx, store); err != nil {
t.Fatalf("Unset() error = %v", err)
}
// Verify it's gone
value, err = store.GetConfig(ctx, ConfigKey)
if err != nil {
@@ -230,3 +230,152 @@ func TestUnset(t *testing.T) {
}
})
}
func TestGetFromYAML(t *testing.T) {
// Save and restore any existing env var
origEnv := os.Getenv(EnvVar)
defer os.Setenv(EnvVar, origEnv)
t.Run("returns empty when nothing configured", func(t *testing.T) {
os.Unsetenv(EnvVar)
branch := GetFromYAML()
// GetFromYAML checks env var first, then config.yaml
// Without env var set, it should return what's in config.yaml (or empty)
// We can't easily mock config.yaml here, so just verify no panic
_ = branch
})
t.Run("returns env var value when set", func(t *testing.T) {
os.Setenv(EnvVar, "env-sync-branch")
defer os.Unsetenv(EnvVar)
branch := GetFromYAML()
if branch != "env-sync-branch" {
t.Errorf("GetFromYAML() = %q, want %q", branch, "env-sync-branch")
}
})
}
func TestIsConfigured(t *testing.T) {
// Save and restore any existing env var
origEnv := os.Getenv(EnvVar)
defer os.Setenv(EnvVar, origEnv)
t.Run("returns true when env var is set", func(t *testing.T) {
os.Setenv(EnvVar, "test-branch")
defer os.Unsetenv(EnvVar)
if !IsConfigured() {
t.Error("IsConfigured() = false when env var is set, want true")
}
})
t.Run("behavior with no env var", func(t *testing.T) {
os.Unsetenv(EnvVar)
// Just verify no panic - actual value depends on config.yaml
_ = IsConfigured()
})
}
func TestIsConfiguredWithDB(t *testing.T) {
// Save and restore any existing env var
origEnv := os.Getenv(EnvVar)
defer os.Setenv(EnvVar, origEnv)
t.Run("returns true when env var is set", func(t *testing.T) {
os.Setenv(EnvVar, "test-branch")
defer os.Unsetenv(EnvVar)
if !IsConfiguredWithDB("") {
t.Error("IsConfiguredWithDB() = false when env var is set, want true")
}
})
t.Run("returns false for nonexistent database", func(t *testing.T) {
os.Unsetenv(EnvVar)
result := IsConfiguredWithDB("/nonexistent/path/beads.db")
// Should return false because db doesn't exist
if result {
t.Error("IsConfiguredWithDB() = true for nonexistent db, want false")
}
})
t.Run("returns false for empty path with no db found", func(t *testing.T) {
os.Unsetenv(EnvVar)
// When empty path is passed and beads.FindDatabasePath() returns empty,
// IsConfiguredWithDB should return false
// This tests the code path where dbPath is empty
tmpDir, _ := os.MkdirTemp("", "test-no-beads-*")
defer os.RemoveAll(tmpDir)
origWd, _ := os.Getwd()
os.Chdir(tmpDir)
defer os.Chdir(origWd)
result := IsConfiguredWithDB("")
// Should return false because no database exists
if result {
t.Error("IsConfiguredWithDB('') with no db = true, want false")
}
})
}
func TestGetConfigFromDB(t *testing.T) {
t.Run("returns empty for nonexistent database", func(t *testing.T) {
result := getConfigFromDB("/nonexistent/path/beads.db", ConfigKey)
if result != "" {
t.Errorf("getConfigFromDB() for nonexistent db = %q, want empty", result)
}
})
t.Run("returns empty when key not found", func(t *testing.T) {
// Create a temporary database
tmpDir, _ := os.MkdirTemp("", "test-beads-db-*")
defer os.RemoveAll(tmpDir)
dbPath := tmpDir + "/beads.db"
// Create a valid SQLite database with the config table
store, err := sqlite.New(context.Background(), "file:"+dbPath)
if err != nil {
t.Fatalf("Failed to create test database: %v", err)
}
store.Close()
result := getConfigFromDB(dbPath, "nonexistent.key")
if result != "" {
t.Errorf("getConfigFromDB() for missing key = %q, want empty", result)
}
})
t.Run("returns value when key exists", func(t *testing.T) {
// Create a temporary database
tmpDir, _ := os.MkdirTemp("", "test-beads-db-*")
defer os.RemoveAll(tmpDir)
dbPath := tmpDir + "/beads.db"
// Create a valid SQLite database with the config table
ctx := context.Background()
// Use the same connection string format as getConfigFromDB expects
store, err := sqlite.New(ctx, "file:"+dbPath+"?_journal_mode=DELETE")
if err != nil {
t.Fatalf("Failed to create test database: %v", err)
}
// Set issue_prefix first (required by storage)
if err := store.SetConfig(ctx, "issue_prefix", "bd"); err != nil {
store.Close()
t.Fatalf("Failed to set issue_prefix: %v", err)
}
// Set the config value we're testing
if err := store.SetConfig(ctx, ConfigKey, "test-sync-branch"); err != nil {
store.Close()
t.Fatalf("Failed to set config: %v", err)
}
store.Close()
result := getConfigFromDB(dbPath, ConfigKey)
if result != "test-sync-branch" {
t.Errorf("getConfigFromDB() = %q, want %q", result, "test-sync-branch")
}
})
}