1// SPDX-License-Identifier: AGPL-3.0-or-later
2
3package usecase
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)
14
15func TestActivityTimestampsOverStore(t *testing.T) {
16 ctx := t.Context()
17 s, err := kvstore.Open(ctx, t.TempDir())
18 require.NoError(t, err)
19 t.Cleanup(func() { require.NoError(t, s.Close(ctx)) })
20 n, err := domain.ParseRepoName("proj")
21 require.NoError(t, err)
22 at := time.Date(2026, 10, 19, 12, 0, 0, 0, time.UTC)
23 require.NoError(t, s.Create(ctx, domain.Repo{Name: n, Visibility: domain.VisibilityPrivate, CreatedAt: at}))
24 got, err := touchPushedAt(ctx, s, n, at.Add(time.Hour))
25 require.NoError(t, err)
26 require.Equal(t, got.PushedAt, got.ActiveAt)
27 _, err = touchActiveAt(ctx, s, n, at.Add(3*time.Hour))
28 require.NoError(t, err)
29 _, err = touchPushedAt(ctx, s, n, at.Add(2*time.Hour))
30 require.NoError(t, err)
31 _, err = touchPushedAt(ctx, s, n, at)
32 require.NoError(t, err)
33 _, err = touchActiveAt(ctx, s, n, at)
34 require.NoError(t, err)
35 got, err = s.Get(ctx, n)
36 require.NoError(t, err)
37 require.Equal(t, at.Add(2*time.Hour), got.PushedAt)
38 require.Equal(t, at.Add(3*time.Hour), got.ActiveAt)
39 require.Equal(t, domain.VisibilityPrivate, got.Visibility)
40 require.NoError(t, s.Delete(ctx, n))
41 _, err = touchPushedAt(ctx, s, n, at)
42 require.NoError(t, err)
43 _, err = touchActiveAt(ctx, s, n, at)
44 require.NoError(t, err)
45}