1// SPDX-License-Identifier: AGPL-3.0-or-later
2
3package domain_test
4
5import (
6 "strings"
7 "testing"
8
9 "github.com/stretchr/testify/assert"
10 "github.com/stretchr/testify/require"
11
12 "bnema.dev/ermite/internal/domain"
13)
14
15func TestNewRefUpdate(t *testing.T) {
16 t.Parallel()
17 a, b := strings.Repeat("a", 40), strings.Repeat("b", 40)
18
19 u, err := domain.NewRefUpdate(domain.ZeroOID, a, "refs/heads/main")
20 require.NoError(t, err)
21 assert.True(t, u.IsCreate())
22 assert.False(t, u.IsDelete())
23
24 u, err = domain.NewRefUpdate(a, domain.ZeroOID, "refs/tags/v1")
25 require.NoError(t, err)
26 assert.True(t, u.IsDelete())
27
28 u, err = domain.NewRefUpdate(a, b, "refs/heads/a b")
29 require.NoError(t, err)
30 assert.False(t, u.IsCreate() || u.IsDelete())
31 assert.Equal(t, domain.RefUpdate{Old: a, New: b, Ref: "refs/heads/a b"}, u)
32
33 for name, args := range map[string][3]string{
34 "short old": {"abc", b, "refs/heads/x"},
35 "upper case": {strings.ToUpper(a), b, "refs/heads/x"},
36 "non hex": {strings.Repeat("g", 40), b, "refs/heads/x"},
37 "long new": {a, b + "0", "refs/heads/x"},
38 "empty ref": {a, b, ""},
39 "huge ref": {a, b, strings.Repeat("r", 5000)},
40 "empty oid": {"", b, "refs/heads/x"},
41 "sha256 oid": {strings.Repeat("a", 64), b, "refs/heads/x"},
42 "newline oid": {a + "\n", b, "refs/heads/x"},
43 } {
44 _, err := domain.NewRefUpdate(args[0], args[1], args[2])
45 assert.Error(t, err, name)
46 }
47}
48
49func TestEventKinds(t *testing.T) {
50 t.Parallel()
51 assert.Equal(t, "repo.created", domain.RepoCreated{}.EventKind())
52 assert.Equal(t, "repo.pushed", domain.PushEvent{}.EventKind())
53 assert.Equal(t, "gap", domain.EventGap{}.EventKind())
54}