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 a, b := strings.Repeat("a", 40), strings.Repeat("b", 40)
17
18 u, err := domain.NewRefUpdate(domain.ZeroOID, a, "refs/heads/main")
19 require.NoError(t, err)
20 assert.True(t, u.IsCreate())
21 assert.False(t, u.IsDelete())
22
23 u, err = domain.NewRefUpdate(a, domain.ZeroOID, "refs/tags/v1")
24 require.NoError(t, err)
25 assert.True(t, u.IsDelete())
26
27 u, err = domain.NewRefUpdate(a, b, "refs/heads/a b")
28 require.NoError(t, err)
29 assert.False(t, u.IsCreate() || u.IsDelete())
30 assert.Equal(t, domain.RefUpdate{Old: a, New: b, Ref: "refs/heads/a b"}, u)
31
32 for name, args := range map[string][3]string{
33 "short old": {"abc", b, "refs/heads/x"},
34 "upper case": {strings.ToUpper(a), b, "refs/heads/x"},
35 "non hex": {strings.Repeat("g", 40), b, "refs/heads/x"},
36 "long new": {a, b + "0", "refs/heads/x"},
37 "empty ref": {a, b, ""},
38 "huge ref": {a, b, strings.Repeat("r", 5000)},
39 "empty oid": {"", b, "refs/heads/x"},
40 "sha256 oid": {strings.Repeat("a", 64), b, "refs/heads/x"},
41 "newline oid": {a + "\n", b, "refs/heads/x"},
42 } {
43 _, err := domain.NewRefUpdate(args[0], args[1], args[2])
44 assert.Error(t, err, name)
45 }
46}
47
48func TestEventKinds(t *testing.T) {
49 assert.Equal(t, "repo.created", domain.RepoCreated{}.EventKind())
50 assert.Equal(t, "repo.pushed", domain.PushEvent{}.EventKind())
51 assert.Equal(t, "gap", domain.EventGap{}.EventKind())
52}