mirror of
https://github.com/go-gitea/gitea.git
synced 2026-10-31 21:05:16 +00:00
Backport #40025 by @somaz94 With `[repository] ALLOW_FORK_INTO_SAME_OWNER = true` a user can fork their own repository, but an organization still cannot fork a repository it owns. The fork button check and the owner list on the fork page compared the organization with the repository owner directly instead of asking `CanUserForkBetweenOwners`, and the walk over parent repositories dropped the owning organization whenever the setting was on. Organizations now follow the setting the same way users already do, and nothing changes when it is off. Fixes https://github.com/go-gitea/gitea/issues/40021 Assisted-by: Claude Code:claude-opus-5-5 Co-authored-by: somaz <112675579+somaz94@users.noreply.github.com>
53 lines
1.6 KiB
Go
53 lines
1.6 KiB
Go
// Copyright 2024 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package repository
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"gitea.dev/models/db"
|
|
repo_model "gitea.dev/models/repo"
|
|
"gitea.dev/models/unittest"
|
|
user_model "gitea.dev/models/user"
|
|
"gitea.dev/modules/setting"
|
|
"gitea.dev/modules/test"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestCanUserForkBetweenOwners(t *testing.T) {
|
|
defer test.MockVariableValue(&setting.Repository.AllowForkIntoSameOwner)()
|
|
|
|
setting.Repository.AllowForkIntoSameOwner = true
|
|
assert.True(t, CanUserForkBetweenOwners(1, 1))
|
|
assert.True(t, CanUserForkBetweenOwners(1, 2))
|
|
|
|
setting.Repository.AllowForkIntoSameOwner = false
|
|
assert.False(t, CanUserForkBetweenOwners(1, 1))
|
|
assert.True(t, CanUserForkBetweenOwners(1, 2))
|
|
}
|
|
|
|
func TestCanUserForkRepoIntoOwningOrg(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
defer test.MockVariableValue(&setting.Repository.AllowForkIntoSameOwner)()
|
|
|
|
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
|
repo3 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3})
|
|
// user2's own fork leaves org3, the owner, as the only target
|
|
assert.NoError(t, db.Insert(t.Context(), &repo_model.Repository{
|
|
OwnerID: 2, Name: "repo3-fork", LowerName: "repo3-fork",
|
|
IsFork: true, ForkID: 3,
|
|
}))
|
|
|
|
setting.Repository.AllowForkIntoSameOwner = true
|
|
ok, err := CanUserForkRepo(t.Context(), user2, repo3)
|
|
assert.NoError(t, err)
|
|
assert.True(t, ok)
|
|
|
|
setting.Repository.AllowForkIntoSameOwner = false
|
|
ok, err = CanUserForkRepo(t.Context(), user2, repo3)
|
|
assert.NoError(t, err)
|
|
assert.False(t, ok)
|
|
}
|