1// SPDX-License-Identifier: AGPL-3.0-or-later
2
3package ermitegit_test
4
5import (
6 "context"
7 "os"
8 "path/filepath"
9 "strings"
10 "testing"
11
12 "github.com/stretchr/testify/assert"
13 "github.com/stretchr/testify/require"
14
15 "bnema.dev/ermite/internal/adapters/ermitegit"
16 "bnema.dev/ermite/internal/domain"
17 "bnema.dev/ermite/internal/readertest"
18)
19
20// A repository ermite-git cannot read (alternates) is served by the wrapped
21// reader, with the same bytes.
22func TestReadCommitObjectsUnsupportedRepositoryFallsBack(t *testing.T) {
23 ctx := context.Background()
24 a, g, data := newAdapter(t, ermitegit.DefaultRoutes(), nil)
25 h := readertest.NewHistory(t, data)
26
27 tip := readertest.ObjectID(t, h.Git("rev-parse", "HEAD"))
28 ids := []domain.ObjectID{tip, readertest.ObjectID(t, h.Git("rev-parse", "HEAD^{tree}"))}
29 require.NoError(t, os.WriteFile(filepath.Join(h.Bare, "objects", "info", "alternates"), []byte(filepath.Join(t.TempDir(), "objects")+"\n"), 0o644))
30 want, err := g.ReadCommitObjects(ctx, h.Name, ids)
31 require.NoError(t, err)
32 require.Len(t, want, 1)
33 got, err := a.ReadCommitObjects(ctx, h.Name, ids)
34 require.NoError(t, err)
35 assert.Equal(t, want, got)
36}
37
38// The library and git read the same bytes for every commit of a history.
39func TestReadCommitObjectsMatchesCLI(t *testing.T) {
40 ctx := context.Background()
41 a, g, data := newAdapter(t, ermitegit.DefaultRoutes(), nil)
42 h := readertest.NewHistory(t, data)
43 var ids []domain.ObjectID
44 for _, line := range strings.Fields(h.Git("rev-list", "--all")) {
45 ids = append(ids, readertest.ObjectID(t, line))
46 }
47 require.NotEmpty(t, ids)
48 want, err := g.ReadCommitObjects(ctx, h.Name, ids)
49 require.NoError(t, err)
50 got, err := a.ReadCommitObjects(ctx, h.Name, ids)
51 require.NoError(t, err)
52 assert.Len(t, got, len(ids))
53 assert.Equal(t, want, got)
54}