bluesky viewer in the terminal
at main 1.4 kB view raw
1package utils 2 3import ( 4 "bytes" 5 "database/sql" 6 "io" 7 "os" 8 "path/filepath" 9 "testing" 10 11 _ "github.com/mattn/go-sqlite3" 12) 13 14// CaptureOutput captures stdout during function execution 15func CaptureOutput(f func()) string { 16 old := os.Stdout 17 r, w, _ := os.Pipe() 18 os.Stdout = w 19 20 f() 21 22 w.Close() 23 os.Stdout = old 24 25 var buf bytes.Buffer 26 io.Copy(&buf, r) 27 return buf.String() 28} 29 30// NewTestDB creates an in-memory SQLite database for testing. 31// Returns the database connection and a cleanup function. 32// The cleanup function should be called with defer to ensure proper cleanup. 33func NewTestDB(t *testing.T) (*sql.DB, func()) { 34 t.Helper() 35 36 db, err := sql.Open("sqlite3", ":memory:") 37 if err != nil { 38 t.Fatalf("failed to open in-memory database: %v", err) 39 } 40 41 cleanup := func() { 42 if err := db.Close(); err != nil { 43 t.Errorf("failed to close test database: %v", err) 44 } 45 } 46 47 return db, cleanup 48} 49 50// setupTestConfig creates a test config directory and returns cleanup function 51func SetupTestConfig(t *testing.T) (string, func()) { 52 tmpDir := t.TempDir() 53 originalHome := os.Getenv("HOME") 54 55 os.Setenv("HOME", tmpDir) 56 57 configDir := filepath.Join(tmpDir, ".skycli") 58 if err := os.MkdirAll(configDir, 0755); err != nil { 59 t.Fatalf("failed to create test config dir: %v", err) 60 } 61 62 cleanup := func() { 63 os.Setenv("HOME", originalHome) 64 } 65 66 return configDir, cleanup 67}