bluesky viewer in the terminal
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}