1package sqlite_test
2
3import (
4 "context"
5 "path/filepath"
6 "testing"
7 "time"
8
9 "github.com/bnema/dumber/internal/domain/entity"
10 "github.com/bnema/dumber/internal/infrastructure/persistence/sqlite"
11 "github.com/bnema/dumber/internal/logging"
12 "github.com/stretchr/testify/assert"
13 "github.com/stretchr/testify/require"
14)
15
16func testCtx() context.Context {
17 logger := logging.NewFromConfigValues("debug", "console")
18 return logging.WithContext(context.Background(), logger)
19}
20
21func TestSessionRepository_CRUD_NilProcessID(t *testing.T) {
22 ctx := testCtx()
23 dbPath := filepath.Join(t.TempDir(), "dumber.db")
24
25 db, err := sqlite.NewConnection(ctx, dbPath)
26 require.NoError(t, err)
27 t.Cleanup(func() { _ = db.Close() })
28
29 repo := sqlite.NewSessionRepository(db)
30
31 startedAt := time.Date(2025, 12, 22, 7, 0, 0, 0, time.UTC)
32 s := &entity.Session{ID: "20251222_070000_nilp", Type: entity.SessionTypeBrowser, StartedAt: startedAt}
33 require.NoError(t, repo.Save(ctx, s))
34
35 got, err := repo.FindByID(ctx, s.ID)
36 require.NoError(t, err)
37 require.NotNil(t, got)
38 assert.Nil(t, got.ProcessID)
39
40 active, err := repo.GetActive(ctx)
41 require.NoError(t, err)
42 require.NotNil(t, active)
43 assert.Equal(t, s.ID, active.ID)
44 assert.Nil(t, active.ProcessID)
45}
46
47func TestSessionRepository_CRUD(t *testing.T) {
48 ctx := testCtx()
49 dbPath := filepath.Join(t.TempDir(), "dumber.db")
50
51 db, err := sqlite.NewConnection(ctx, dbPath)
52 require.NoError(t, err)
53 t.Cleanup(func() { _ = db.Close() })
54
55 repo := sqlite.NewSessionRepository(db)
56
57 startedAt := time.Date(2025, 12, 22, 8, 0, 0, 0, time.UTC)
58 pid := 4321
59 s := &entity.Session{ID: "20251222_080000_abcd", Type: entity.SessionTypeBrowser, StartedAt: startedAt, ProcessID: &pid}
60 require.NoError(t, repo.Save(ctx, s))
61
62 got, err := repo.FindByID(ctx, s.ID)
63 require.NoError(t, err)
64 require.NotNil(t, got)
65 assert.Equal(t, s.ID, got.ID)
66 assert.Equal(t, s.Type, got.Type)
67 assert.True(t, got.StartedAt.Equal(startedAt))
68 require.NotNil(t, got.ProcessID)
69 assert.Equal(t, pid, *got.ProcessID)
70 assert.Nil(t, got.EndedAt)
71
72 active, err := repo.GetActive(ctx)
73 require.NoError(t, err)
74 require.NotNil(t, active)
75 assert.Equal(t, s.ID, active.ID)
76 require.NotNil(t, active.ProcessID)
77 assert.Equal(t, pid, *active.ProcessID)
78
79 endedAt := time.Date(2025, 12, 22, 9, 0, 0, 0, time.UTC)
80 require.NoError(t, repo.MarkEnded(ctx, s.ID, endedAt))
81
82 active2, err := repo.GetActive(ctx)
83 require.NoError(t, err)
84 assert.Nil(t, active2)
85
86 got2, err := repo.FindByID(ctx, s.ID)
87 require.NoError(t, err)
88 require.NotNil(t, got2.EndedAt)
89 assert.True(t, got2.EndedAt.Equal(endedAt))
90
91 recent, err := repo.GetRecent(ctx, 10)
92 require.NoError(t, err)
93 require.Len(t, recent, 1)
94 assert.Equal(t, s.ID, recent[0].ID)
95 require.NotNil(t, recent[0].ProcessID)
96 assert.Equal(t, pid, *recent[0].ProcessID)
97}