mirror of
https://codeberg.org/forgejo/forgejo
synced 2025-10-19 14:50:52 +02:00
Fixes #6185. ## Checklist ### Tests - I added test coverage for Go changes... - [x] in their respective `*_test.go` for unit tests. - [x] in the `tests/integration` directory if it involves interactions with a live Forgejo server. I also tested the changes manually. ### Documentation - [ ] I created a pull request [to the documentation](https://codeberg.org/forgejo/docs) to explain to Forgejo users how to use this change. - [x] I did not document these changes and I do not expect someone else to do it. ### Release notes - [ ] I do not want this change to show in the release notes. - [x] I want the title to show in the release notes with a link to this pull request. - [ ] I want the content of the `release-notes/<pull request number>.md` to be be used for the release notes instead of the title. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9045 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org> Co-authored-by: Antonin Delpeuch <antonin@delpeuch.eu> Co-committed-by: Antonin Delpeuch <antonin@delpeuch.eu>
111 lines
3.8 KiB
Go
111 lines
3.8 KiB
Go
// Copyright 2021 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package repo_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"forgejo.org/models/db"
|
|
repo_model "forgejo.org/models/repo"
|
|
"forgejo.org/models/unittest"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestGetUserFork(t *testing.T) {
|
|
require.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
// User13 has repo 11 forked from repo10
|
|
repo, err := repo_model.GetRepositoryByID(db.DefaultContext, 10)
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, repo)
|
|
repo, err = repo_model.GetUserFork(db.DefaultContext, repo.ID, 13)
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, repo)
|
|
|
|
repo, err = repo_model.GetRepositoryByID(db.DefaultContext, 9)
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, repo)
|
|
repo, err = repo_model.GetUserFork(db.DefaultContext, repo.ID, 13)
|
|
require.NoError(t, err)
|
|
assert.Nil(t, repo)
|
|
}
|
|
|
|
func TestGetUserForkLax(t *testing.T) {
|
|
defer unittest.OverrideFixtures("models/repo/TestGetUserForkLax")()
|
|
require.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
// User13 has repo 11 forked from repo10
|
|
repo10, err := repo_model.GetRepositoryByID(db.DefaultContext, 10)
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, repo10)
|
|
require.True(t, repo_model.HasForkedRepoLax(db.DefaultContext, 13, repo10))
|
|
repo11, err := repo_model.GetUserForkLax(db.DefaultContext, repo10, 13)
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, repo11)
|
|
assert.Equal(t, int64(11), repo11.ID)
|
|
assert.Equal(t, int64(10), repo11.ForkID)
|
|
|
|
// user13 does not have a fork of repo9
|
|
repo9, err := repo_model.GetRepositoryByID(db.DefaultContext, 9)
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, repo9)
|
|
require.False(t, repo_model.HasForkedRepoLax(db.DefaultContext, 13, repo9))
|
|
fork, err := repo_model.GetUserForkLax(db.DefaultContext, repo9, 13)
|
|
require.NoError(t, err)
|
|
assert.Nil(t, fork)
|
|
|
|
// User15 has repo id 64 forked from repo10, which counts as a fork of repo11 since they have a common base
|
|
require.False(t, repo_model.HasForkedRepo(db.DefaultContext, 15, repo11.ID))
|
|
require.True(t, repo_model.HasForkedRepoLax(db.DefaultContext, 15, repo11))
|
|
fork, err = repo_model.GetUserForkLax(db.DefaultContext, repo11, 15)
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, fork)
|
|
assert.Equal(t, int64(64), fork.ID)
|
|
assert.Equal(t, int64(10), fork.ForkID)
|
|
}
|
|
|
|
func TestGetUserForkLaxWithTwoChoices(t *testing.T) {
|
|
defer unittest.OverrideFixtures("models/repo/TestGetUserForkLaxWithTwoChoices")()
|
|
require.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
// Test scenario:
|
|
//
|
|
// - repo10
|
|
// - forked by user15 as repo64
|
|
// - forked by user13 as repo11
|
|
// - forked by user15 as repo65
|
|
//
|
|
// In this scenario, both repo64 and repo65 can be used as forks of repo11 for user15,
|
|
// but we prefer to use repo65 because it's specifically marked as a fork of repo11
|
|
|
|
repo10, err := repo_model.GetRepositoryByID(db.DefaultContext, 10)
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, repo10)
|
|
|
|
// User15 has repo64 forked from repo10
|
|
require.True(t, repo_model.HasForkedRepoLax(db.DefaultContext, 15, repo10))
|
|
repo64, err := repo_model.GetUserForkLax(db.DefaultContext, repo10, 15)
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, repo64)
|
|
assert.Equal(t, int64(64), repo64.ID)
|
|
assert.Equal(t, int64(10), repo64.ForkID)
|
|
|
|
// User13 has repo11 forked from repo10
|
|
require.True(t, repo_model.HasForkedRepoLax(db.DefaultContext, 13, repo10))
|
|
repo11, err := repo_model.GetUserForkLax(db.DefaultContext, repo10, 13)
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, repo11)
|
|
assert.Equal(t, int64(11), repo11.ID)
|
|
assert.Equal(t, int64(10), repo11.ForkID)
|
|
|
|
// User15 has repo65 forked from repo11
|
|
require.True(t, repo_model.HasForkedRepoLax(db.DefaultContext, 15, repo11))
|
|
repo65, err := repo_model.GetUserForkLax(db.DefaultContext, repo11, 15)
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, repo65)
|
|
assert.Equal(t, int64(65), repo65.ID)
|
|
assert.Equal(t, int64(11), repo65.ForkID)
|
|
}
|