// Copyright 2025 The Forgejo Authors. All rights reserved.// SPDX-License-Identifier: GPL-3.0-or-later package pull import ( "fmt" "testing" issues_model "forgejo.org/models/issues" "forgejo.org/models/unittest" "forgejo.org/modules/setting" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require") func TestLoadHeadRevision(t *testing.T) { require.NoError(t, unittest.PrepareTestDatabase()) t.Run("AGit", func(t *testing.T) { t.Run("New", func(t *testing.T) { ctx := &testPatchContext{} require.NoError(t, ctx.LoadHeadRevision(t.Context(), &issues_model.PullRequest{Flow: issues_model.PullRequestFlowAGit, HeadCommitID: "Commit!"})) assert.Empty(t, ctx.env) assert.Equal(t, "Commit!", ctx.headRev) assert.True(t, ctx.headIsCommitID) }) t.Run("Existing", func(t *testing.T) { ctx := &testPatchContext{} require.NoError(t, ctx.LoadHeadRevision(t.Context(), &issues_model.PullRequest{Flow: issues_model.PullRequestFlowAGit, Index: 371})) assert.Empty(t, ctx.env) assert.Equal(t, "refs/pull/371/head", ctx.headRev) assert.False(t, ctx.headIsCommitID) }) }) t.Run("Same repository", func(t *testing.T) { ctx := &testPatchContext{} require.NoError(t, ctx.LoadHeadRevision(t.Context(), unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 1}))) assert.Empty(t, ctx.env) assert.Equal(t, "refs/heads/branch1", ctx.headRev) assert.False(t, ctx.headIsCommitID) }) t.Run("Across repository", func(t *testing.T) { pr := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 3}) require.NoError(t, pr.LoadHeadRepo(t.Context())) ctx := &testPatchContext{} require.NoError(t, ctx.LoadHeadRevision(t.Context(), pr)) if assert.NotEmpty(t, ctx.env) { assert.Equal(t, fmt.Sprintf("GIT_ALTERNATE_OBJECT_DIRECTORIES=%s/user13/repo11.git/objects", setting.RepoRootPath), ctx.env[len(ctx.env)-1]) } assert.Equal(t, "0abcb056019adb8336cf9db3ad9d9cf80cd4b141", ctx.headRev) assert.True(t, ctx.headIsCommitID) })}
// Copyright 2025 The Forgejo Authors. All rights reserved.
// SPDX-License-Identifier: GPL-3.0-or-later
package pull
import (
"fmt"
"testing"
issues_model "forgejo.org/models/issues"
"forgejo.org/models/unittest"
"forgejo.org/modules/setting"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestLoadHeadRevision(t *testing.T) {
require.NoError(t, unittest.PrepareTestDatabase())
t.Run("AGit", func(t *testing.T) {
t.Run("New", func(t *testing.T) {
ctx := &testPatchContext{}
require.NoError(t, ctx.LoadHeadRevision(t.Context(), &issues_model.PullRequest{Flow: issues_model.PullRequestFlowAGit, HeadCommitID: "Commit!"}))
assert.Empty(t, ctx.env)
assert.Equal(t, "Commit!", ctx.headRev)
assert.True(t, ctx.headIsCommitID)
})
t.Run("Existing", func(t *testing.T) {
ctx := &testPatchContext{}
require.NoError(t, ctx.LoadHeadRevision(t.Context(), &issues_model.PullRequest{Flow: issues_model.PullRequestFlowAGit, Index: 371}))
assert.Empty(t, ctx.env)
assert.Equal(t, "refs/pull/371/head", ctx.headRev)
assert.False(t, ctx.headIsCommitID)
})
})
t.Run("Same repository", func(t *testing.T) {
ctx := &testPatchContext{}
require.NoError(t, ctx.LoadHeadRevision(t.Context(), unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 1})))
assert.Empty(t, ctx.env)
assert.Equal(t, "refs/heads/branch1", ctx.headRev)
assert.False(t, ctx.headIsCommitID)
})
t.Run("Across repository", func(t *testing.T) {
pr := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 3})
require.NoError(t, pr.LoadHeadRepo(t.Context()))
ctx := &testPatchContext{}
require.NoError(t, ctx.LoadHeadRevision(t.Context(), pr))
if assert.NotEmpty(t, ctx.env) {
assert.Equal(t, fmt.Sprintf("GIT_ALTERNATE_OBJECT_DIRECTORIES=%s/user13/repo11.git/objects", setting.RepoRootPath), ctx.env[len(ctx.env)-1])
}
assert.Equal(t, "0abcb056019adb8336cf9db3ad9d9cf80cd4b141", ctx.headRev)
assert.True(t, ctx.headIsCommitID)
})
}