1// SPDX-License-Identifier: AGPL-3.0-or-later
2
3package usecase_test
4
5import (
6 "testing"
7 "time"
8
9 "github.com/stretchr/testify/require"
10
11 "bnema.dev/ermite/internal/adapters/kvstore"
12 "bnema.dev/ermite/internal/domain"
13 "bnema.dev/ermite/internal/usecase"
14)
15
16func TestActivityTimestampsOverStore(t *testing.T) {
17 ctx := t.Context()
18 s, err := kvstore.Open(ctx, t.TempDir())
19 require.NoError(t, err)
20 t.Cleanup(func() { require.NoError(t, s.Close(ctx)) })
21 n, err := domain.ParseRepoName("proj")
22 require.NoError(t, err)
23 at := time.Date(2026, 10, 19, 12, 0, 0, 0, time.UTC)
24 require.NoError(t, s.Create(ctx, domain.Repo{Name: n, Visibility: domain.VisibilityPrivate, CreatedAt: at}))
25 got, err := usecase.TouchPushedAt(ctx, s, n, at.Add(time.Hour))
26 require.NoError(t, err)
27 require.Equal(t, got.PushedAt, got.ActiveAt)
28 _, err = usecase.TouchActiveAt(ctx, s, n, at.Add(3*time.Hour))
29 require.NoError(t, err)
30 _, err = usecase.TouchPushedAt(ctx, s, n, at.Add(2*time.Hour))
31 require.NoError(t, err)
32 _, err = usecase.TouchPushedAt(ctx, s, n, at)
33 require.NoError(t, err)
34 _, err = usecase.TouchActiveAt(ctx, s, n, at)
35 require.NoError(t, err)
36 got, err = s.Get(ctx, n)
37 require.NoError(t, err)
38 require.Equal(t, at.Add(2*time.Hour), got.PushedAt)
39 require.Equal(t, at.Add(3*time.Hour), got.ActiveAt)
40 require.Equal(t, domain.VisibilityPrivate, got.Visibility)
41 require.NoError(t, s.Delete(ctx, n))
42 _, err = usecase.TouchPushedAt(ctx, s, n, at)
43 require.NoError(t, err)
44 _, err = usecase.TouchActiveAt(ctx, s, n, at)
45 require.NoError(t, err)
46}