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(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, 8, 0, 0, 0, time.UTC)
32 s := &entity.Session{ID: "20251222_080000_abcd", 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.Equal(t, s.ID, got.ID)
39 assert.Equal(t, s.Type, got.Type)
40 assert.True(t, got.StartedAt.Equal(startedAt))
41 assert.Nil(t, got.EndedAt)
42
43 active, err := repo.GetActive(ctx)
44 require.NoError(t, err)
45 require.NotNil(t, active)
46 assert.Equal(t, s.ID, active.ID)
47
48 endedAt := time.Date(2025, 12, 22, 9, 0, 0, 0, time.UTC)
49 require.NoError(t, repo.MarkEnded(ctx, s.ID, endedAt))
50
51 active2, err := repo.GetActive(ctx)
52 require.NoError(t, err)
53 assert.Nil(t, active2)
54
55 got2, err := repo.FindByID(ctx, s.ID)
56 require.NoError(t, err)
57 require.NotNil(t, got2.EndedAt)
58 assert.True(t, got2.EndedAt.Equal(endedAt))
59
60 recent, err := repo.GetRecent(ctx, 10)
61 require.NoError(t, err)
62 require.Len(t, recent, 1)
63 assert.Equal(t, s.ID, recent[0].ID)
64}