mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2026-06-22 10:02:15 +00:00
refactor(tests): use forgery.CreateRepository in more places (#12555)
Followup of #11356 to convert `tests.CreateDeclarativeRepo` to `forgery.CreateRepository` (34 occurrences remaining after this PR - 39 occurrences replaced here). Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12555 Reviewed-by: limiting-factor <limiting-factor@noreply.codeberg.org> Reviewed-by: Gusted <gusted@noreply.codeberg.org>
This commit is contained in:
parent
dcccb8baee
commit
216ff5c8fd
27 changed files with 403 additions and 596 deletions
|
|
@ -187,8 +187,10 @@ func newRepo(t *testing.T, userID int64, repoName string, enabledUnits map[unit_
|
|||
Files: forgery.FilesInit{},
|
||||
})
|
||||
if len(enabledUnits) == 0 {
|
||||
forgery.EnableRepoUnit(t, somerepo, unit_model.TypeCode, nil)
|
||||
forgery.EnableRepoUnit(t, somerepo, unit_model.TypeIssues, nil)
|
||||
forgery.EnableRepoUnits(t, somerepo,
|
||||
unit_model.TypeCode,
|
||||
unit_model.TypeIssues,
|
||||
)
|
||||
}
|
||||
for unit, config := range enabledUnits {
|
||||
forgery.EnableRepoUnit(t, somerepo, unit, config)
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ func CreateRepository(t testing.TB, owner *user_model.User, opts *CreateReposito
|
|||
|
||||
if !createOptions.AutoInit && opts.Files != nil {
|
||||
sha, err := initRepo(owner, repo, gitFormat, opts.Files, "init")
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, err, "Make sure the Forgejo HTTP server is running (or use %T instead of %T for the Files field)", FilesInit{}, opts.Files)
|
||||
if opts.LatestSha != nil {
|
||||
*opts.LatestSha = sha
|
||||
}
|
||||
|
|
@ -118,7 +118,6 @@ func InitWiki(t testing.TB, repo *repo_model.Repository, branch string) {
|
|||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
// config may be nil
|
||||
func EnableRepoUnit(t testing.TB, repo *repo_model.Repository, unit unit_model.Type, config convert.Conversion) {
|
||||
t.Helper()
|
||||
|
||||
|
|
@ -130,6 +129,36 @@ func EnableRepoUnit(t testing.TB, repo *repo_model.Repository, unit unit_model.T
|
|||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
// to specify a non-default config, call [EnableRepoUnit] instead
|
||||
func EnableRepoUnits(t testing.TB, repo *repo_model.Repository, units ...unit_model.Type) {
|
||||
t.Helper()
|
||||
|
||||
ru := make([]repo_model.RepoUnit, 0, len(units))
|
||||
for _, u := range units {
|
||||
var config convert.Conversion
|
||||
if u == unit_model.TypePullRequests { // pull request config is needed (otherwise no merge allowed by default)
|
||||
config = &repo_model.PullRequestsConfig{
|
||||
AllowMerge: true,
|
||||
AllowRebase: true,
|
||||
AllowRebaseMerge: true,
|
||||
AllowSquash: true,
|
||||
AllowFastForwardOnly: true,
|
||||
AllowManualMerge: true,
|
||||
AllowRebaseUpdate: true,
|
||||
DefaultMergeStyle: repo_model.MergeStyleMerge,
|
||||
DefaultUpdateStyle: repo_model.UpdateStyleMerge,
|
||||
}
|
||||
}
|
||||
ru = append(ru, repo_model.RepoUnit{
|
||||
RepoID: repo.ID,
|
||||
Type: u,
|
||||
Config: config,
|
||||
})
|
||||
}
|
||||
err := repo_service.UpdateRepositoryUnits(t.Context(), repo, ru, nil)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func DisableRepoUnits(t testing.TB, repo *repo_model.Repository, units ...unit_model.Type) {
|
||||
t.Helper()
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import (
|
|||
"math/rand/v2"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
org_model "forgejo.org/models/organization"
|
||||
|
|
@ -19,7 +20,7 @@ var nameCleaner = regexp.MustCompile(`[^a-zA-Z0-9-]+`) // exclude "_", to preven
|
|||
|
||||
// uniqueSafeName replaces specials chars with _ and appends a random hex suffix
|
||||
func uniqueSafeName(testName string) string {
|
||||
return nameCleaner.ReplaceAllLiteralString(testName, "_") + "-" + strconv.FormatUint(uint64(rand.Uint32()), 16)
|
||||
return strings.Trim(nameCleaner.ReplaceAllLiteralString(testName, "_"), "-_") + "-" + strconv.FormatUint(uint64(rand.Uint32()), 16)
|
||||
}
|
||||
|
||||
type CreateUserOptions struct {
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ func TestActionGetTokenMetadata(t *testing.T) {
|
|||
),
|
||||
},
|
||||
})
|
||||
forgery.EnableRepoUnit(t, repo, unit_model.TypeActions, nil)
|
||||
forgery.EnableRepoUnits(t, repo, unit_model.TypeActions)
|
||||
|
||||
gitRepo, err := gitrepo.OpenRepository(db.DefaultContext, repo)
|
||||
require.NoError(t, err)
|
||||
|
|
|
|||
|
|
@ -9,17 +9,14 @@ import (
|
|||
"net/url"
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
unit_model "forgejo.org/models/unit"
|
||||
"forgejo.org/models/unittest"
|
||||
user_model "forgejo.org/models/user"
|
||||
"forgejo.org/modules/git"
|
||||
app_context "forgejo.org/services/context"
|
||||
files_service "forgejo.org/services/repository/files"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
|
@ -27,26 +24,17 @@ import (
|
|||
|
||||
func TestPullRemoveAutomerge(t *testing.T) {
|
||||
onApplicationRun(t, func(t *testing.T, u *url.URL) {
|
||||
user5 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 5})
|
||||
user5Session := loginUser(t, user5.Name)
|
||||
user2Session := loginUser(t, "user2")
|
||||
repo := forgery.CreateRepository(t, nil, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.FilesInit{},
|
||||
})
|
||||
forgery.EnableRepoUnits(t, repo, unit_model.TypeCode, unit_model.TypePullRequests)
|
||||
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user5, "",
|
||||
[]unit_model.Type{unit_model.TypeCode, unit_model.TypePullRequests}, nil,
|
||||
[]*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "FUNFACT",
|
||||
ContentReader: strings.NewReader(
|
||||
"The Netherlands got its first openly gay prime minister today."),
|
||||
},
|
||||
},
|
||||
)
|
||||
defer f()
|
||||
owner := repo.Owner
|
||||
ownerSession := loginUser(t, owner.Name)
|
||||
|
||||
dstPath := t.TempDir()
|
||||
cloneURL, _ := url.Parse(fmt.Sprintf("%suser5/%s.git", u.String(), repo.Name))
|
||||
cloneURL.User = url.UserPassword("user5", userPassword)
|
||||
cloneURL, _ := url.Parse(fmt.Sprintf("%s%s.git", u.String(), repo.FullName()))
|
||||
cloneURL.User = url.UserPassword(owner.Name, userPassword)
|
||||
require.NoError(t, git.CloneWithArgs(t.Context(), nil, cloneURL.String(), dstPath, git.CloneRepoOptions{}))
|
||||
doGitSetRemoteURL(dstPath, "origin", cloneURL)(t)
|
||||
|
||||
|
|
@ -71,13 +59,13 @@ func TestPullRemoveAutomerge(t *testing.T) {
|
|||
require.NoError(t, git.NewCommand(t.Context(), "push", "origin", "HEAD:refs/for/main", "-o", "topic=new-fun-fact").Run(&git.RunOpts{Dir: dstPath}))
|
||||
|
||||
// Create a protected branch rule for automerge.
|
||||
user5Session.MakeRequest(t, NewRequestWithValues(t, "POST", fmt.Sprintf("/%s/settings/branches/edit", repo.FullName()), map[string]string{
|
||||
ownerSession.MakeRequest(t, NewRequestWithValues(t, "POST", fmt.Sprintf("/%s/settings/branches/edit", repo.FullName()), map[string]string{
|
||||
"rule_name": "main",
|
||||
"required_approvals": "1",
|
||||
}), http.StatusSeeOther)
|
||||
|
||||
// Start a automerge for new pull request.
|
||||
user5Session.MakeRequest(t, NewRequestWithValues(t, "POST", fmt.Sprintf("/%s/pulls/1/merge", repo.FullName()), map[string]string{
|
||||
ownerSession.MakeRequest(t, NewRequestWithValues(t, "POST", fmt.Sprintf("/%s/pulls/1/merge", repo.FullName()), map[string]string{
|
||||
"merge_message_field": "I love automation when it works",
|
||||
"do": "merge",
|
||||
"merge_when_checks_succeed": "true",
|
||||
|
|
@ -86,9 +74,12 @@ func TestPullRemoveAutomerge(t *testing.T) {
|
|||
t.Run("No permission", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
user2Session.MakeRequest(t, NewRequestWithValues(t, "POST", fmt.Sprintf("/%s/pulls/1/cancel_auto_merge", repo.FullName()), nil), http.StatusSeeOther)
|
||||
otherUser := forgery.CreateUser(t, nil)
|
||||
otherSession := loginUser(t, otherUser.Name)
|
||||
|
||||
flashCookie := user2Session.GetCookie(app_context.CookieNameFlash)
|
||||
otherSession.MakeRequest(t, NewRequestWithValues(t, "POST", fmt.Sprintf("/%s/pulls/1/cancel_auto_merge", repo.FullName()), nil), http.StatusSeeOther)
|
||||
|
||||
flashCookie := otherSession.GetCookie(app_context.CookieNameFlash)
|
||||
assert.NotNil(t, flashCookie)
|
||||
assert.Equal(t, "error%3DYou%2Bdo%2Bnot%2Bhave%2Bpermission%2Bto%2Bcancel%2Bthis%2Bpull%2Brequest%2527s%2Bauto%2Bmerge.", flashCookie.Value)
|
||||
})
|
||||
|
|
@ -96,9 +87,9 @@ func TestPullRemoveAutomerge(t *testing.T) {
|
|||
t.Run("Normal", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
user5Session.MakeRequest(t, NewRequestWithValues(t, "POST", fmt.Sprintf("/%s/pulls/1/cancel_auto_merge", repo.FullName()), nil), http.StatusSeeOther)
|
||||
ownerSession.MakeRequest(t, NewRequestWithValues(t, "POST", fmt.Sprintf("/%s/pulls/1/cancel_auto_merge", repo.FullName()), nil), http.StatusSeeOther)
|
||||
|
||||
flashCookie := user5Session.GetCookie(app_context.CookieNameFlash)
|
||||
flashCookie := ownerSession.GetCookie(app_context.CookieNameFlash)
|
||||
assert.NotNil(t, flashCookie)
|
||||
assert.Equal(t, "success%3DThe%2Bauto%2Bmerge%2Bwas%2Bcanceled%2Bfor%2Bthis%2Bpull%2Brequest.", flashCookie.Value)
|
||||
})
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import (
|
|||
repo_service "forgejo.org/services/repository"
|
||||
files_service "forgejo.org/services/repository/files"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
|
@ -146,21 +147,17 @@ func TestPullCreateWithPullTemplate(t *testing.T) {
|
|||
"docs/PULL_REQUEST_TEMPLATE.md",
|
||||
}
|
||||
|
||||
createBaseRepo := func(t *testing.T, templateFiles []string, message string) (*repo_model.Repository, func()) {
|
||||
createBaseRepo := func(t *testing.T, templateFiles []string, message string) *repo_model.Repository {
|
||||
t.Helper()
|
||||
|
||||
changeOps := make([]*files_service.ChangeRepoFile, len(templateFiles))
|
||||
for i, template := range templateFiles {
|
||||
changeOps[i] = &files_service.ChangeRepoFile{
|
||||
Operation: "create",
|
||||
TreePath: template,
|
||||
ContentReader: strings.NewReader(message + " " + template),
|
||||
}
|
||||
files := make(forgery.MapFS, len(templateFiles))
|
||||
for _, template := range templateFiles {
|
||||
files[template] = forgery.MapFile(message + " " + template)
|
||||
}
|
||||
|
||||
repo, _, deferrer := tests.CreateDeclarativeRepo(t, baseUser, "", nil, nil, changeOps)
|
||||
|
||||
return repo, deferrer
|
||||
return forgery.CreateRepository(t, baseUser, &forgery.CreateRepositoryOptions{
|
||||
Files: files,
|
||||
})
|
||||
}
|
||||
|
||||
testPullPreview := func(t *testing.T, session *TestSession, user, repo, message string) {
|
||||
|
|
@ -190,8 +187,7 @@ func TestPullCreateWithPullTemplate(t *testing.T) {
|
|||
|
||||
// Create the base repository, with the pull request template added.
|
||||
message := fmt.Sprintf("TestPullCreateWithPullTemplate/%s", template)
|
||||
baseRepo, deferrer := createBaseRepo(t, []string{template}, message)
|
||||
defer deferrer()
|
||||
baseRepo := createBaseRepo(t, []string{template}, message)
|
||||
|
||||
// Fork the repository
|
||||
session := loginUser(t, forkUser.Name)
|
||||
|
|
@ -211,8 +207,7 @@ func TestPullCreateWithPullTemplate(t *testing.T) {
|
|||
|
||||
// Create the base repository, with the pull request template added.
|
||||
message := "TestPullCreateWithPullTemplate/multiple"
|
||||
baseRepo, deferrer := createBaseRepo(t, templateCandidates, message)
|
||||
defer deferrer()
|
||||
baseRepo := createBaseRepo(t, templateCandidates, message)
|
||||
|
||||
// Fork the repository
|
||||
session := loginUser(t, forkUser.Name)
|
||||
|
|
|
|||
|
|
@ -9,17 +9,15 @@ import (
|
|||
"net/url"
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
issues_model "forgejo.org/models/issues"
|
||||
unit_model "forgejo.org/models/unit"
|
||||
"forgejo.org/models/unittest"
|
||||
user_model "forgejo.org/models/user"
|
||||
"forgejo.org/modules/git"
|
||||
files_service "forgejo.org/services/repository/files"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/PuerkitoBio/goquery"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
|
@ -70,28 +68,21 @@ func doTestPRDiff(t *testing.T, prDiffURL string, expectedFilenames []string, ed
|
|||
|
||||
func TestPullDiff_AGitNotEditable(t *testing.T) {
|
||||
onApplicationRun(t, func(t *testing.T, u *url.URL) {
|
||||
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
session := loginUser(t, user2.Name)
|
||||
|
||||
// Create temporary repository.
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user2, "myrepo",
|
||||
[]unit_model.Type{unit_model.TypePullRequests}, nil,
|
||||
[]*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "FUNFACT",
|
||||
ContentReader: strings.NewReader("Smithy was the runner up to be Forgejo's name"),
|
||||
},
|
||||
},
|
||||
)
|
||||
defer f()
|
||||
repo := forgery.CreateRepository(t, nil, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.FilesInit{},
|
||||
})
|
||||
forgery.EnableRepoUnits(t, repo, unit_model.TypePullRequests)
|
||||
|
||||
user := repo.Owner
|
||||
session := loginUser(t, user.Name)
|
||||
|
||||
clone := func(t *testing.T, clone string) string {
|
||||
t.Helper()
|
||||
|
||||
dstPath := t.TempDir()
|
||||
cloneURL, _ := url.Parse(clone)
|
||||
cloneURL.User = url.UserPassword("user2", userPassword)
|
||||
cloneURL.User = url.UserPassword(user.Name, userPassword)
|
||||
require.NoError(t, git.CloneWithArgs(t.Context(), nil, cloneURL.String(), dstPath, git.CloneRepoOptions{}))
|
||||
doGitSetRemoteURL(dstPath, "origin", cloneURL)(t)
|
||||
|
||||
|
|
@ -117,7 +108,7 @@ func TestPullDiff_AGitNotEditable(t *testing.T) {
|
|||
Message: "Add README.",
|
||||
}))
|
||||
}
|
||||
dstPath := clone(t, fmt.Sprintf("%suser2/%s.git", u.String(), repo.Name))
|
||||
dstPath := clone(t, fmt.Sprintf("%s%s.git", u.String(), repo.FullName()))
|
||||
|
||||
// Create first commit.
|
||||
firstCommit(t, dstPath)
|
||||
|
|
|
|||
|
|
@ -16,13 +16,13 @@ import (
|
|||
issues_model "forgejo.org/models/issues"
|
||||
repo_model "forgejo.org/models/repo"
|
||||
unit_model "forgejo.org/models/unit"
|
||||
"forgejo.org/models/unittest"
|
||||
user_model "forgejo.org/models/user"
|
||||
"forgejo.org/modules/git"
|
||||
issue_service "forgejo.org/services/issue"
|
||||
pull_service "forgejo.org/services/pull"
|
||||
files_service "forgejo.org/services/repository/files"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/PuerkitoBio/goquery"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
|
@ -31,11 +31,13 @@ import (
|
|||
|
||||
func TestPullRequestIcons(t *testing.T) {
|
||||
onApplicationRun(t, func(t *testing.T, u *url.URL) {
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user, "pr-icons", []unit_model.Type{unit_model.TypeCode, unit_model.TypePullRequests}, nil, nil)
|
||||
defer f()
|
||||
repo := forgery.CreateRepository(t, nil, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.FilesInit{},
|
||||
})
|
||||
forgery.EnableRepoUnits(t, repo, unit_model.TypeCode, unit_model.TypePullRequests)
|
||||
|
||||
session := loginUser(t, user.LoginName)
|
||||
user := repo.Owner
|
||||
session := loginUser(t, user.Name)
|
||||
|
||||
// Individual PRs
|
||||
t.Run("Open", func(t *testing.T) {
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ import (
|
|||
commitstatus_service "forgejo.org/services/repository/commitstatus"
|
||||
webhook_service "forgejo.org/services/webhook"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/hashicorp/go-version"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
|
@ -1269,8 +1270,9 @@ func TestMergeConcurrency(t *testing.T) {
|
|||
// been run up to 50 without errors.
|
||||
concurrentCount := 5
|
||||
|
||||
repo, _, deferrer := tests.CreateDeclarativeRepo(t, user2, "concurrency-test", nil, nil, nil)
|
||||
defer deferrer()
|
||||
repo := forgery.CreateRepository(t, user2, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.FilesInit{},
|
||||
})
|
||||
|
||||
// Create labels for the PRs...
|
||||
labelNames := []string{"bug", "super-important", "tricky", "deadlock"}
|
||||
|
|
@ -1395,8 +1397,9 @@ func TestMergeHTTPRequestCancellation(t *testing.T) {
|
|||
measuredMergeTime := 283 * time.Millisecond // time measured on a test system for one POST /%s/%s/pulls/%d/merge
|
||||
cancellationDuration := measuredMergeTime / time.Duration(cancellationChecks) // cancel after (i+1) * cancellationDuration for each PR
|
||||
|
||||
repo, _, deferrer := tests.CreateDeclarativeRepo(t, user2, "concurrency-test", nil, nil, nil)
|
||||
defer deferrer()
|
||||
repo := forgery.CreateRepository(t, user2, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.FilesInit{},
|
||||
})
|
||||
|
||||
bulkCreatePRs(t, cancellationChecks, repo, token, nil, 0)
|
||||
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import (
|
|||
repo_service "forgejo.org/services/repository"
|
||||
files_service "forgejo.org/services/repository/files"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
|
@ -36,11 +37,11 @@ func TestPullrequestReopen(t *testing.T) {
|
|||
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
org26 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 26})
|
||||
|
||||
// Create an base repository.
|
||||
baseRepo, _, f := tests.CreateDeclarativeRepo(t, user2, "reopen-base",
|
||||
[]unit_model.Type{unit_model.TypePullRequests}, nil, nil,
|
||||
)
|
||||
defer f()
|
||||
// Create an base repository with an initial commit.
|
||||
baseRepo := forgery.CreateRepository(t, user2, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.FilesInit{},
|
||||
})
|
||||
forgery.EnableRepoUnits(t, baseRepo, unit_model.TypePullRequests)
|
||||
|
||||
// Create a new branch on the base branch, so it can be deleted later.
|
||||
_, err := files_service.ChangeRepoFiles(git.DefaultContext, baseRepo, user2, &files_service.ChangeRepoFilesOptions{
|
||||
|
|
|
|||
|
|
@ -105,14 +105,12 @@ func TestPullView_SelfReviewNotification(t *testing.T) {
|
|||
user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
||||
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user2, "test_reviewer", nil, nil, []*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "CODEOWNERS",
|
||||
ContentReader: strings.NewReader("README.md @user5\n"),
|
||||
repo := forgery.CreateRepository(t, user2, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.MapFS{
|
||||
"README.md": forgery.MapFile("# Hello Reviewer\n"),
|
||||
"CODEOWNERS": forgery.MapFile("README.md @user5\n"),
|
||||
},
|
||||
})
|
||||
defer f()
|
||||
|
||||
// we need to add user1 as collaborator so it can be added as reviewer
|
||||
err := repo_module.AddCollaborator(db.DefaultContext, repo, user1)
|
||||
|
|
@ -125,7 +123,7 @@ func TestPullView_SelfReviewNotification(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
|
||||
// Create a pull request.
|
||||
resp := testPullCreate(t, user2Session, "user2", "test_reviewer", false, repo.DefaultBranch, "codeowner-basebranch", "Test Pull Request")
|
||||
resp := testPullCreate(t, user2Session, "user2", repo.Name, false, repo.DefaultBranch, "codeowner-basebranch", "Test Pull Request")
|
||||
prURL := test.RedirectURL(resp)
|
||||
elem := strings.Split(prURL, "/")
|
||||
assert.Equal(t, "pulls", elem[3])
|
||||
|
|
@ -361,14 +359,12 @@ func TestPullView_CodeOwner(t *testing.T) {
|
|||
onApplicationRun(t, func(t *testing.T, u *url.URL) {
|
||||
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user2, "test_codeowner", nil, nil, []*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "CODEOWNERS",
|
||||
ContentReader: strings.NewReader("README.md @user5\n"),
|
||||
repo := forgery.CreateRepository(t, user2, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.MapFS{
|
||||
"README.md": forgery.MapFile("# Hello CodeOwner\n"),
|
||||
"CODEOWNERS": forgery.MapFile("README.md @user5\n"),
|
||||
},
|
||||
})
|
||||
defer f()
|
||||
|
||||
t.Run("First Pull Request", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
|
@ -381,7 +377,7 @@ func TestPullView_CodeOwner(t *testing.T) {
|
|||
|
||||
// Create a pull request.
|
||||
session := loginUser(t, "user2")
|
||||
testPullCreate(t, session, "user2", "test_codeowner", false, repo.DefaultBranch, "codeowner-basebranch", "Test Pull Request")
|
||||
testPullCreate(t, session, "user2", repo.Name, false, repo.DefaultBranch, "codeowner-basebranch", "Test Pull Request")
|
||||
|
||||
pr := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{BaseRepoID: repo.ID, HeadRepoID: repo.ID, HeadBranch: "codeowner-basebranch"})
|
||||
unittest.AssertExistsIf(t, true, &issues_model.Review{IssueID: pr.IssueID, Type: issues_model.ReviewTypeRequest, ReviewerID: 5})
|
||||
|
|
@ -417,7 +413,7 @@ func TestPullView_CodeOwner(t *testing.T) {
|
|||
|
||||
// Create a pull request.
|
||||
session := loginUser(t, "user2")
|
||||
testPullCreate(t, session, "user2", "test_codeowner", false, repo.DefaultBranch, "codeowner-basebranch2", "Test Pull Request2")
|
||||
testPullCreate(t, session, "user2", repo.Name, false, repo.DefaultBranch, "codeowner-basebranch2", "Test Pull Request2")
|
||||
|
||||
pr := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{BaseRepoID: repo.ID, HeadBranch: "codeowner-basebranch2"})
|
||||
unittest.AssertExistsIf(t, true, &issues_model.Review{IssueID: pr.IssueID, Type: issues_model.ReviewTypeRequest, ReviewerID: 8})
|
||||
|
|
@ -819,17 +815,12 @@ func TestPullRequestStaleReview(t *testing.T) {
|
|||
session := loginUser(t, user2.Name)
|
||||
|
||||
// Create temporary repository.
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user2, "",
|
||||
[]unit_model.Type{unit_model.TypePullRequests}, nil,
|
||||
[]*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "FUNFACT",
|
||||
ContentReader: strings.NewReader("Smithy was the runner up to be Forgejo's name"),
|
||||
},
|
||||
repo := forgery.CreateRepository(t, user2, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.MapFS{
|
||||
"FUNFACT": forgery.MapFile("Smithy was the runner up to be Forgejo's name"),
|
||||
},
|
||||
)
|
||||
defer f()
|
||||
})
|
||||
forgery.EnableRepoUnits(t, repo, unit_model.TypePullRequests)
|
||||
|
||||
clone := func(t *testing.T, clone string) string {
|
||||
t.Helper()
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import (
|
|||
pull_service "forgejo.org/services/pull"
|
||||
repo_service "forgejo.org/services/repository"
|
||||
files_service "forgejo.org/services/repository/files"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
|
@ -133,10 +133,9 @@ func TestAPIPullUpdateBranchProtection(t *testing.T) {
|
|||
|
||||
func TestAPIPullAllowMaintainerEditRestrictedHead(t *testing.T) {
|
||||
onApplicationRun(t, func(t *testing.T, giteaURL *url.URL) {
|
||||
baseRepoOwner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
|
||||
|
||||
realBaseRepo, _, cleanup := tests.CreateDeclarativeRepo(t, baseRepoOwner, "base-repo", nil, nil, nil)
|
||||
defer cleanup()
|
||||
realBaseRepo := forgery.CreateRepository(t, nil, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.FilesInit{}, // ensure an initial commit is present
|
||||
})
|
||||
|
||||
forkUser := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
forkRepo, err := repo_service.ForkRepositoryAndUpdates(t.Context(), forkUser, forkUser, repo_service.ForkRepoOptions{
|
||||
|
|
@ -332,7 +331,9 @@ func createOutdatedPR(t *testing.T, actor, forkOrg *user_model.User, baseRepoOwn
|
|||
baseRepoOwner = baseRepoOwnerOption[0]
|
||||
}
|
||||
|
||||
baseRepo, _, _ := tests.CreateDeclarativeRepo(t, baseRepoOwner, "repo-pr-update", nil, nil, nil)
|
||||
baseRepo := forgery.CreateRepository(t, baseRepoOwner, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.FilesInit{}, // ensure an initial commit is present
|
||||
})
|
||||
|
||||
headRepo, err := repo_service.ForkRepositoryAndUpdates(git.DefaultContext, actor, forkOrg, repo_service.ForkRepoOptions{
|
||||
BaseRepo: baseRepo,
|
||||
|
|
|
|||
|
|
@ -16,11 +16,10 @@ import (
|
|||
"forgejo.org/models/db"
|
||||
repo_model "forgejo.org/models/repo"
|
||||
unit_model "forgejo.org/models/unit"
|
||||
"forgejo.org/models/unittest"
|
||||
user_model "forgejo.org/models/user"
|
||||
"forgejo.org/modules/test"
|
||||
repo_service "forgejo.org/services/repository"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/PuerkitoBio/goquery"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
|
@ -105,7 +104,7 @@ func TestRepoActivity(t *testing.T) {
|
|||
|
||||
func TestRepoActivityAllUnitsDisabled(t *testing.T) {
|
||||
defer tests.PrepareTestEnv(t)()
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user1"})
|
||||
user := forgery.CreateUser(t, nil)
|
||||
session := loginUser(t, user.Name)
|
||||
|
||||
unit_model.LoadUnitConfig()
|
||||
|
|
@ -135,7 +134,7 @@ func TestRepoActivityAllUnitsDisabled(t *testing.T) {
|
|||
|
||||
func TestRepoActivityOnlyCodeUnitWithEmptyRepo(t *testing.T) {
|
||||
defer tests.PrepareTestEnv(t)()
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user1"})
|
||||
user := forgery.CreateUser(t, nil)
|
||||
session := loginUser(t, user.Name)
|
||||
|
||||
unit_model.LoadUnitConfig()
|
||||
|
|
@ -168,14 +167,17 @@ func TestRepoActivityOnlyCodeUnitWithEmptyRepo(t *testing.T) {
|
|||
|
||||
func TestRepoActivityOnlyCodeUnitWithNonEmptyRepo(t *testing.T) {
|
||||
defer tests.PrepareTestEnv(t)()
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user1"})
|
||||
user := forgery.CreateUser(t, nil)
|
||||
session := loginUser(t, user.Name)
|
||||
|
||||
unit_model.LoadUnitConfig()
|
||||
|
||||
// Create a repo, with only code unit enabled.
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user, "", []unit_model.Type{unit_model.TypeCode}, nil, nil)
|
||||
defer f()
|
||||
repo := forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.FilesInit{},
|
||||
})
|
||||
forgery.DisableRepoUnits(t, repo, unit_model.AllRepoUnitTypes...)
|
||||
forgery.EnableRepoUnits(t, repo, unit_model.TypeCode)
|
||||
|
||||
req := NewRequest(t, "GET", fmt.Sprintf("%s/activity", repo.Link()))
|
||||
session.MakeRequest(t, req, http.StatusOK)
|
||||
|
|
@ -191,7 +193,7 @@ func TestRepoActivityOnlyCodeUnitWithNonEmptyRepo(t *testing.T) {
|
|||
|
||||
func TestRepoActivityOnlyIssuesUnit(t *testing.T) {
|
||||
defer tests.PrepareTestEnv(t)()
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user1"})
|
||||
user := forgery.CreateUser(t, nil)
|
||||
session := loginUser(t, user.Name)
|
||||
|
||||
unit_model.LoadUnitConfig()
|
||||
|
|
|
|||
|
|
@ -6,14 +6,11 @@ package integration
|
|||
import (
|
||||
"net/http"
|
||||
"net/url"
|
||||
"path"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"forgejo.org/models/unittest"
|
||||
user_model "forgejo.org/models/user"
|
||||
"forgejo.org/modules/translation"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/PuerkitoBio/goquery"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
|
@ -21,16 +18,11 @@ import (
|
|||
|
||||
func TestArchiveText(t *testing.T) {
|
||||
onApplicationRun(t, func(t *testing.T, giteaURL *url.URL) {
|
||||
testUser := "user2"
|
||||
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: testUser})
|
||||
session := loginUser(t, testUser)
|
||||
testRepoName := "archived_repo"
|
||||
tr := translation.NewLocale("en-US")
|
||||
link := path.Join(testUser, testRepoName, "settings")
|
||||
|
||||
// Create test repo
|
||||
_, _, f := tests.CreateDeclarativeRepo(t, user2, testRepoName, nil, nil, nil)
|
||||
defer f()
|
||||
repo := forgery.CreateRepository(t, nil, nil)
|
||||
session := loginUser(t, repo.Owner.Name)
|
||||
link := repo.HTMLURL() + "/settings"
|
||||
|
||||
// Test settings page
|
||||
req := NewRequest(t, "GET", link)
|
||||
|
|
|
|||
|
|
@ -9,22 +9,17 @@ import (
|
|||
"net/http"
|
||||
"net/http/httptest"
|
||||
"net/url"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
actions_model "forgejo.org/models/actions"
|
||||
auth_model "forgejo.org/models/auth"
|
||||
repo_model "forgejo.org/models/repo"
|
||||
unit_model "forgejo.org/models/unit"
|
||||
"forgejo.org/models/unittest"
|
||||
user_model "forgejo.org/models/user"
|
||||
"forgejo.org/modules/git"
|
||||
"forgejo.org/modules/setting"
|
||||
"forgejo.org/modules/test"
|
||||
"forgejo.org/routers"
|
||||
"forgejo.org/services/release"
|
||||
files_service "forgejo.org/services/repository/files"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
|
@ -32,34 +27,7 @@ import (
|
|||
|
||||
func TestBadges(t *testing.T) {
|
||||
onApplicationRun(t, func(t *testing.T, u *url.URL) {
|
||||
prep := func(t *testing.T) (*repo_model.Repository, func()) {
|
||||
owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, owner, "",
|
||||
[]unit_model.Type{unit_model.TypeActions, unit_model.TypeReleases},
|
||||
[]unit_model.Type{unit_model.TypeIssues, unit_model.TypePullRequests},
|
||||
[]*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: ".gitea/workflows/pr.yml",
|
||||
ContentReader: strings.NewReader("name: pr\non:\n push:\njobs:\n test:\n runs-on: ubuntu-latest\n steps:\n - run: echo helloworld\n"),
|
||||
},
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: ".gitea/workflows/self-test.yaml",
|
||||
ContentReader: strings.NewReader("name: self-test\non:\n push:\njobs:\n test:\n runs-on: ubuntu-latest\n steps:\n - run: echo helloworld\n"),
|
||||
},
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: ".gitea/workflows/tag-test.yaml",
|
||||
ContentReader: strings.NewReader("name: tags\non:\n push:\n tags: '*'\njobs:\n test:\n runs-on: ubuntu-latest\n steps:\n - run: echo helloworld\n"),
|
||||
},
|
||||
},
|
||||
)
|
||||
assert.Equal(t, 2, unittest.GetCount(t, &actions_model.ActionRun{RepoID: repo.ID}))
|
||||
|
||||
return repo, f
|
||||
}
|
||||
user := forgery.CreateUser(t, nil)
|
||||
|
||||
assertBadge := func(t *testing.T, resp *httptest.ResponseRecorder, badge string) {
|
||||
t.Helper()
|
||||
|
|
@ -69,8 +37,6 @@ func TestBadges(t *testing.T) {
|
|||
|
||||
t.Run("Workflows", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
repo, f := prep(t)
|
||||
defer f()
|
||||
|
||||
// Actions disabled
|
||||
req := NewRequest(t, "GET", "/user2/repo1/badges/workflows/test.yaml/badge.svg")
|
||||
|
|
@ -82,41 +48,49 @@ func TestBadges(t *testing.T) {
|
|||
assertBadge(t, resp, "test.yaml-Not%20found-crimson")
|
||||
|
||||
// Actions enabled
|
||||
req = NewRequestf(t, "GET", "/user2/%s/badges/workflows/pr.yml/badge.svg", repo.Name)
|
||||
repo := forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.MapFS{
|
||||
".gitea/workflows/pr.yml": forgery.MapFile("name: pr\non:\n push:\njobs:\n test:\n runs-on: ubuntu-latest\n steps:\n - run: echo helloworld\n"),
|
||||
".gitea/workflows/self-test.yaml": forgery.MapFile("name: self-test\non:\n push:\njobs:\n test:\n runs-on: ubuntu-latest\n steps:\n - run: echo helloworld\n"),
|
||||
".gitea/workflows/tag-test.yaml": forgery.MapFile("name: tags\non:\n push:\n tags: '*'\njobs:\n test:\n runs-on: ubuntu-latest\n steps:\n - run: echo helloworld\n"),
|
||||
},
|
||||
})
|
||||
forgery.EnableRepoUnits(t, repo, unit_model.TypeActions)
|
||||
req = NewRequest(t, "GET", repo.HTMLURL()+"/badges/workflows/pr.yml/badge.svg")
|
||||
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "pr.yml-waiting-lightgrey")
|
||||
|
||||
req = NewRequestf(t, "GET", "/user2/%s/badges/workflows/pr.yml/badge.svg?branch=main", repo.Name)
|
||||
req = NewRequest(t, "GET", repo.HTMLURL()+"/badges/workflows/pr.yml/badge.svg?branch=main")
|
||||
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "pr.yml-waiting-lightgrey")
|
||||
|
||||
req = NewRequestf(t, "GET", "/user2/%s/badges/workflows/pr.yml/badge.svg?branch=no-such-branch", repo.Name)
|
||||
req = NewRequest(t, "GET", repo.HTMLURL()+"/badges/workflows/pr.yml/badge.svg?branch=no-such-branch")
|
||||
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "pr.yml-Not%20found-crimson")
|
||||
|
||||
req = NewRequestf(t, "GET", "/user2/%s/badges/workflows/pr.yml/badge.svg?event=cron", repo.Name)
|
||||
req = NewRequest(t, "GET", repo.HTMLURL()+"/badges/workflows/pr.yml/badge.svg?event=cron")
|
||||
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "pr.yml-Not%20found-crimson")
|
||||
|
||||
// Workflow with a dash in its name
|
||||
req = NewRequestf(t, "GET", "/user2/%s/badges/workflows/self-test.yaml/badge.svg", repo.Name)
|
||||
req = NewRequest(t, "GET", repo.HTMLURL()+"/badges/workflows/self-test.yaml/badge.svg")
|
||||
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "self--test.yaml-waiting-lightgrey")
|
||||
|
||||
// GitHub compatibility
|
||||
req = NewRequestf(t, "GET", "/user2/%s/actions/workflows/pr.yml/badge.svg", repo.Name)
|
||||
req = NewRequest(t, "GET", repo.HTMLURL()+"/actions/workflows/pr.yml/badge.svg")
|
||||
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "pr.yml-waiting-lightgrey")
|
||||
|
||||
req = NewRequestf(t, "GET", "/user2/%s/actions/workflows/pr.yml/badge.svg?branch=main", repo.Name)
|
||||
req = NewRequest(t, "GET", repo.HTMLURL()+"/actions/workflows/pr.yml/badge.svg?branch=main")
|
||||
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "pr.yml-waiting-lightgrey")
|
||||
|
||||
req = NewRequestf(t, "GET", "/user2/%s/actions/workflows/pr.yml/badge.svg?branch=no-such-branch", repo.Name)
|
||||
req = NewRequest(t, "GET", repo.HTMLURL()+"/actions/workflows/pr.yml/badge.svg?branch=no-such-branch")
|
||||
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "pr.yml-Not%20found-crimson")
|
||||
|
||||
req = NewRequestf(t, "GET", "/user2/%s/actions/workflows/pr.yml/badge.svg?event=cron", repo.Name)
|
||||
req = NewRequest(t, "GET", repo.HTMLURL()+"/actions/workflows/pr.yml/badge.svg?event=cron")
|
||||
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "pr.yml-Not%20found-crimson")
|
||||
|
||||
|
|
@ -124,17 +98,16 @@ func TestBadges(t *testing.T) {
|
|||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
// With no tags, the workflow has no runs, and isn't found
|
||||
req := NewRequestf(t, "GET", "/user2/%s/actions/workflows/tag-test.yaml/badge.svg", repo.Name)
|
||||
req := NewRequest(t, "GET", repo.HTMLURL()+"/actions/workflows/tag-test.yaml/badge.svg")
|
||||
resp := MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "tag--test.yaml-Not%20found-crimson")
|
||||
|
||||
// Lets create a tag!
|
||||
owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
err := release.CreateNewTag(git.DefaultContext, owner, repo, "main", "v1", "message")
|
||||
err := release.CreateNewTag(git.DefaultContext, repo.Owner, repo, "main", "v1", "message")
|
||||
require.NoError(t, err)
|
||||
|
||||
// Now the workflow is waiting
|
||||
req = NewRequestf(t, "GET", "/user2/%s/actions/workflows/tag-test.yaml/badge.svg", repo.Name)
|
||||
req = NewRequest(t, "GET", repo.HTMLURL()+"/actions/workflows/tag-test.yaml/badge.svg")
|
||||
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "tag--test.yaml-waiting-lightgrey")
|
||||
})
|
||||
|
|
@ -143,7 +116,8 @@ func TestBadges(t *testing.T) {
|
|||
t.Run("Stars", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
req := NewRequest(t, "GET", "/user2/repo1/badges/stars.svg")
|
||||
repo := forgery.CreateRepository(t, user, nil)
|
||||
req := NewRequest(t, "GET", repo.HTMLURL()+"/badges/stars.svg")
|
||||
resp := MakeRequest(t, req, http.StatusSeeOther)
|
||||
|
||||
assertBadge(t, resp, "stars-0-blue")
|
||||
|
|
@ -159,8 +133,6 @@ func TestBadges(t *testing.T) {
|
|||
|
||||
t.Run("Issues", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
repo, f := prep(t)
|
||||
defer f()
|
||||
|
||||
// Issues enabled
|
||||
req := NewRequest(t, "GET", "/user2/repo1/badges/issues.svg")
|
||||
|
|
@ -176,23 +148,23 @@ func TestBadges(t *testing.T) {
|
|||
assertBadge(t, resp, "issues-1%20closed-blue")
|
||||
|
||||
// Issues disabled
|
||||
req = NewRequestf(t, "GET", "/user2/%s/badges/issues.svg", repo.Name)
|
||||
repo := forgery.CreateRepository(t, user, nil)
|
||||
forgery.DisableRepoUnits(t, repo, unit_model.TypeIssues)
|
||||
req = NewRequest(t, "GET", repo.HTMLURL()+"/badges/issues.svg")
|
||||
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "issues-Not%20found-crimson")
|
||||
|
||||
req = NewRequestf(t, "GET", "/user2/%s/badges/issues/open.svg", repo.Name)
|
||||
req = NewRequest(t, "GET", repo.HTMLURL()+"/badges/issues/open.svg")
|
||||
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "issues-Not%20found-crimson")
|
||||
|
||||
req = NewRequestf(t, "GET", "/user2/%s/badges/issues/closed.svg", repo.Name)
|
||||
req = NewRequest(t, "GET", repo.HTMLURL()+"/badges/issues/closed.svg")
|
||||
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "issues-Not%20found-crimson")
|
||||
})
|
||||
|
||||
t.Run("Pulls", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
repo, f := prep(t)
|
||||
defer f()
|
||||
|
||||
// Pull requests enabled
|
||||
req := NewRequest(t, "GET", "/user2/repo1/badges/pulls.svg")
|
||||
|
|
@ -208,29 +180,32 @@ func TestBadges(t *testing.T) {
|
|||
assertBadge(t, resp, "pulls-0%20closed-blue")
|
||||
|
||||
// Pull requests disabled
|
||||
req = NewRequestf(t, "GET", "/user2/%s/badges/pulls.svg", repo.Name)
|
||||
repo := forgery.CreateRepository(t, user, nil)
|
||||
forgery.DisableRepoUnits(t, repo, unit_model.TypePullRequests)
|
||||
req = NewRequest(t, "GET", repo.HTMLURL()+"/badges/pulls.svg")
|
||||
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "pulls-Not%20found-crimson")
|
||||
|
||||
req = NewRequestf(t, "GET", "/user2/%s/badges/pulls/open.svg", repo.Name)
|
||||
req = NewRequest(t, "GET", repo.HTMLURL()+"/badges/pulls/open.svg")
|
||||
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "pulls-Not%20found-crimson")
|
||||
|
||||
req = NewRequestf(t, "GET", "/user2/%s/badges/pulls/closed.svg", repo.Name)
|
||||
req = NewRequest(t, "GET", repo.HTMLURL()+"/badges/pulls/closed.svg")
|
||||
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "pulls-Not%20found-crimson")
|
||||
})
|
||||
|
||||
t.Run("Release", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
repo, f := prep(t)
|
||||
defer f()
|
||||
|
||||
req := NewRequest(t, "GET", "/user2/repo1/badges/release.svg")
|
||||
resp := MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "release-v1.1-blue")
|
||||
|
||||
req = NewRequestf(t, "GET", "/user2/%s/badges/release.svg", repo.Name)
|
||||
repo := forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.FilesInit{}, // a tag will be made later
|
||||
})
|
||||
req = NewRequest(t, "GET", repo.HTMLURL()+"/badges/release.svg")
|
||||
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "release-Not%20found-crimson")
|
||||
|
||||
|
|
@ -243,7 +218,7 @@ func TestBadges(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
createNewReleaseUsingAPI(t, token, repo.Owner, repo, "repo-name-2.0", "main", "dashed release", "dashed release")
|
||||
|
||||
req := NewRequestf(t, "GET", "/user2/%s/badges/release.svg", repo.Name)
|
||||
req := NewRequest(t, "GET", repo.HTMLURL()+"/badges/release.svg")
|
||||
resp := MakeRequest(t, req, http.StatusSeeOther)
|
||||
assertBadge(t, resp, "release-repo--name--2.0-blue")
|
||||
})
|
||||
|
|
|
|||
|
|
@ -10,53 +10,57 @@ import (
|
|||
"testing"
|
||||
|
||||
repo_model "forgejo.org/models/repo"
|
||||
unit_model "forgejo.org/models/unit"
|
||||
"forgejo.org/models/unittest"
|
||||
user_model "forgejo.org/models/user"
|
||||
files_service "forgejo.org/services/repository/files"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestCitation(t *testing.T) {
|
||||
onApplicationRun(t, func(t *testing.T, u *url.URL) {
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
||||
|
||||
session := loginUser(t, user.LoginName)
|
||||
user := forgery.CreateUser(t, nil)
|
||||
|
||||
t.Run("No citation", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user, "citation-no-citation", []unit_model.Type{unit_model.TypeCode}, nil, nil)
|
||||
defer f()
|
||||
repo := forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.MapFS{
|
||||
"README": forgery.MapFile("no citation file"),
|
||||
},
|
||||
})
|
||||
|
||||
testCitationButtonExists(t, session, repo, "")
|
||||
testCitationButtonExists(t, repo, "")
|
||||
})
|
||||
|
||||
t.Run("cff citation", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
repo, f := createRepoWithDummyFile(t, user, "citation-cff", "CITATION.cff")
|
||||
defer f()
|
||||
repo := forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.MapFS{
|
||||
"CITATION.cff": forgery.MapFile("some content"),
|
||||
},
|
||||
})
|
||||
|
||||
testCitationButtonExists(t, session, repo, "CITATION.cff")
|
||||
testCitationButtonExists(t, repo, "CITATION.cff")
|
||||
})
|
||||
|
||||
t.Run("bib citation", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
repo, f := createRepoWithDummyFile(t, user, "citation-bib", "CITATION.bib")
|
||||
defer f()
|
||||
repo := forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.MapFS{
|
||||
"CITATION.bib": forgery.MapFile("some content"),
|
||||
},
|
||||
})
|
||||
|
||||
testCitationButtonExists(t, session, repo, "CITATION.bib")
|
||||
testCitationButtonExists(t, repo, "CITATION.bib")
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func testCitationButtonExists(t *testing.T, session *TestSession, repo *repo_model.Repository, file string) {
|
||||
func testCitationButtonExists(t *testing.T, repo *repo_model.Repository, file string) {
|
||||
req := NewRequest(t, "GET", repo.HTMLURL())
|
||||
resp := session.MakeRequest(t, req, http.StatusOK)
|
||||
resp := MakeRequest(t, req, http.StatusOK)
|
||||
doc := NewHTMLParser(t, resp.Body)
|
||||
|
||||
links := doc.Find("a.citation-link")
|
||||
|
|
@ -72,19 +76,7 @@ func testCitationButtonExists(t *testing.T, session *TestSession, repo *repo_mod
|
|||
|
||||
// request the citation file to check for webcomponent presence
|
||||
req = NewRequest(t, "GET", href)
|
||||
resp = session.MakeRequest(t, req, http.StatusOK)
|
||||
resp = MakeRequest(t, req, http.StatusOK)
|
||||
doc = NewHTMLParser(t, resp.Body)
|
||||
doc.AssertElement(t, `lazy-webc[tag="citation-information"]`, true)
|
||||
}
|
||||
|
||||
func createRepoWithDummyFile(t *testing.T, user *user_model.User, repoName, fileName string) (*repo_model.Repository, func()) {
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user, repoName, []unit_model.Type{unit_model.TypeCode}, nil, []*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: fileName,
|
||||
ContentReader: strings.NewReader("citation-content"), // viewer requires some content
|
||||
},
|
||||
})
|
||||
|
||||
return repo, f
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,13 +13,13 @@ import (
|
|||
"forgejo.org/models/db"
|
||||
issues_model "forgejo.org/models/issues"
|
||||
repo_model "forgejo.org/models/repo"
|
||||
"forgejo.org/models/unittest"
|
||||
user_model "forgejo.org/models/user"
|
||||
"forgejo.org/modules/git"
|
||||
issue_service "forgejo.org/services/issue"
|
||||
pull_service "forgejo.org/services/pull"
|
||||
files_service "forgejo.org/services/repository/files"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
|
@ -27,11 +27,12 @@ import (
|
|||
|
||||
func TestIssueTitles(t *testing.T) {
|
||||
onApplicationRun(t, func(t *testing.T, u *url.URL) {
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user, "issue-titles", nil, nil, nil)
|
||||
defer f()
|
||||
user := forgery.CreateUser(t, nil)
|
||||
repo := forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.FilesInit{},
|
||||
})
|
||||
|
||||
session := loginUser(t, user.LoginName)
|
||||
session := loginUser(t, user.Name)
|
||||
|
||||
title := "Title :+1: `code :+1:`"
|
||||
issue1 := createIssue(t, user, repo, title, "Test issue")
|
||||
|
|
|
|||
|
|
@ -14,13 +14,13 @@ import (
|
|||
unit_model "forgejo.org/models/unit"
|
||||
unit_tests "forgejo.org/models/unit/tests"
|
||||
"forgejo.org/models/unittest"
|
||||
user_model "forgejo.org/models/user"
|
||||
"forgejo.org/modules/optional"
|
||||
"forgejo.org/modules/setting"
|
||||
app_context "forgejo.org/services/context"
|
||||
repo_service "forgejo.org/services/repository"
|
||||
user_service "forgejo.org/services/user"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/PuerkitoBio/goquery"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
|
@ -29,9 +29,8 @@ import (
|
|||
|
||||
func TestRepoSettingsUnits(t *testing.T) {
|
||||
defer tests.PrepareTestEnv(t)()
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user2"})
|
||||
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerID: user.ID, Name: "repo1"})
|
||||
session := loginUser(t, user.Name)
|
||||
repo := forgery.CreateRepository(t, nil, nil)
|
||||
session := loginUser(t, repo.Owner.Name)
|
||||
|
||||
req := NewRequest(t, "GET", fmt.Sprintf("%s/settings/units", repo.Link()))
|
||||
session.MakeRequest(t, req, http.StatusOK)
|
||||
|
|
@ -40,11 +39,14 @@ func TestRepoSettingsUnits(t *testing.T) {
|
|||
func TestRepoSettingsAdminOptions(t *testing.T) {
|
||||
defer tests.PrepareTestEnv(t)()
|
||||
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user2"})
|
||||
admin := unittest.AssertExistsAndLoadBean(t, &user_model.User{IsAdmin: true})
|
||||
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerID: user.ID, Name: "repo1"})
|
||||
user := forgery.CreateUser(t, nil)
|
||||
repo := forgery.CreateRepository(t, user, nil)
|
||||
link := repo.Link()
|
||||
|
||||
admin := forgery.CreateUser(t, &forgery.CreateUserOptions{
|
||||
IsAdmin: true,
|
||||
})
|
||||
|
||||
hasAdminOpts := func(t *testing.T, doer string, admin bool) {
|
||||
session := loginUser(t, doer)
|
||||
|
||||
|
|
@ -80,7 +82,7 @@ func TestRepoSettingsAdminOptions(t *testing.T) {
|
|||
|
||||
func TestRepoAddMoreUnitsHighlighting(t *testing.T) {
|
||||
defer tests.PrepareTestEnv(t)()
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user2"})
|
||||
user := forgery.CreateUser(t, nil)
|
||||
session := loginUser(t, user.Name)
|
||||
|
||||
// Make sure there are no disabled repos in the settings!
|
||||
|
|
@ -88,15 +90,16 @@ func TestRepoAddMoreUnitsHighlighting(t *testing.T) {
|
|||
unit_model.LoadUnitConfig()
|
||||
|
||||
// Create a known-good repo, with some units disabled.
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user, "", []unit_model.Type{
|
||||
repo := forgery.CreateRepository(t, user, nil)
|
||||
forgery.EnableRepoUnits(t, repo,
|
||||
unit_model.TypeCode,
|
||||
unit_model.TypePullRequests,
|
||||
unit_model.TypeProjects,
|
||||
unit_model.TypeActions,
|
||||
unit_model.TypeIssues,
|
||||
unit_model.TypeWiki,
|
||||
}, []unit_model.Type{unit_model.TypePackages}, nil)
|
||||
defer f()
|
||||
)
|
||||
forgery.DisableRepoUnits(t, repo, unit_model.TypePackages)
|
||||
|
||||
setUserHints := func(t *testing.T, hints bool) func() {
|
||||
saved := user.EnableRepoUnitHints
|
||||
|
|
@ -171,7 +174,7 @@ func TestRepoAddMoreUnitsHighlighting(t *testing.T) {
|
|||
|
||||
func TestRepoAddMoreUnits(t *testing.T) {
|
||||
defer tests.PrepareTestEnv(t)()
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user2"})
|
||||
user := forgery.CreateUser(t, nil)
|
||||
session := loginUser(t, user.Name)
|
||||
|
||||
// Make sure there are no disabled repos in the settings!
|
||||
|
|
@ -179,7 +182,8 @@ func TestRepoAddMoreUnits(t *testing.T) {
|
|||
unit_model.LoadUnitConfig()
|
||||
|
||||
// Create a known-good repo, with all units enabled.
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user, "", []unit_model.Type{
|
||||
repo := forgery.CreateRepository(t, user, nil)
|
||||
forgery.EnableRepoUnits(t, repo,
|
||||
unit_model.TypeCode,
|
||||
unit_model.TypePullRequests,
|
||||
unit_model.TypeProjects,
|
||||
|
|
@ -187,8 +191,7 @@ func TestRepoAddMoreUnits(t *testing.T) {
|
|||
unit_model.TypeActions,
|
||||
unit_model.TypeIssues,
|
||||
unit_model.TypeWiki,
|
||||
}, nil, nil)
|
||||
defer f()
|
||||
)
|
||||
|
||||
assertAddMore := func(t *testing.T, present bool) {
|
||||
t.Helper()
|
||||
|
|
@ -268,8 +271,10 @@ func TestRepoAddMoreUnits(t *testing.T) {
|
|||
|
||||
func TestProtectedBranch(t *testing.T) {
|
||||
defer tests.PrepareTestEnv(t)()
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1, OwnerID: user.ID})
|
||||
user := forgery.CreateUser(t, nil)
|
||||
repo := forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.FilesInit{},
|
||||
})
|
||||
session := loginUser(t, user.Name)
|
||||
|
||||
t.Run("Add", func(t *testing.T) {
|
||||
|
|
|
|||
|
|
@ -12,14 +12,13 @@ import (
|
|||
|
||||
auth_model "forgejo.org/models/auth"
|
||||
"forgejo.org/models/db"
|
||||
"forgejo.org/models/unittest"
|
||||
user_model "forgejo.org/models/user"
|
||||
"forgejo.org/modules/git"
|
||||
"forgejo.org/modules/gitrepo"
|
||||
"forgejo.org/modules/graceful"
|
||||
repo_module "forgejo.org/modules/repository"
|
||||
api "forgejo.org/modules/structs"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
|
@ -28,9 +27,10 @@ func TestRepoSSHSignedTags(t *testing.T) {
|
|||
defer tests.PrepareTestEnv(t)()
|
||||
|
||||
// Preparations
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user, "", nil, nil, nil)
|
||||
defer f()
|
||||
user := forgery.CreateUser(t, nil)
|
||||
repo := forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.FilesInit{}, // ensure that an initial commit is present (even though the git server is not listening)
|
||||
})
|
||||
|
||||
// Set up an SSH key for the tagger
|
||||
tmpDir := t.TempDir()
|
||||
|
|
|
|||
|
|
@ -617,19 +617,15 @@ func TestRenamedFileHistory(t *testing.T) {
|
|||
|
||||
t.Run("Renamed file (with escaped name)", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
user2 := forgery.CreateUser(t, nil)
|
||||
|
||||
repo, commitID, f := tests.CreateDeclarativeRepo(t, user2, "",
|
||||
[]unit_model.Type{unit_model.TypeCode}, nil,
|
||||
[]*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "#beep",
|
||||
ContentReader: strings.NewReader("ping pong"),
|
||||
},
|
||||
var commitID string
|
||||
repo := forgery.CreateRepository(t, user2, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.MapFS{
|
||||
"#beep": forgery.MapFile("ping pong"),
|
||||
},
|
||||
)
|
||||
defer f()
|
||||
LatestSha: &commitID,
|
||||
})
|
||||
|
||||
files, err := files_service.ChangeRepoFiles(git.DefaultContext, repo, user2, &files_service.ChangeRepoFilesOptions{
|
||||
Files: []*files_service.ChangeRepoFile{
|
||||
|
|
@ -794,7 +790,7 @@ func TestViewCommitSignature(t *testing.T) {
|
|||
// Ensure the git config is updated with the new signing format.
|
||||
require.NoError(t, git.InitFull(t.Context()))
|
||||
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
user := forgery.CreateUser(t, nil)
|
||||
testCtx := NewAPITestContext(t, user.Name, "commit-header-signed", auth_model.AccessTokenScopeWriteRepository, auth_model.AccessTokenScopeWriteUser)
|
||||
u.Path = testCtx.GitPath()
|
||||
|
||||
|
|
@ -993,47 +989,19 @@ func TestRepoFilesList(t *testing.T) {
|
|||
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
|
||||
// create the repo
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user2, "",
|
||||
[]unit_model.Type{unit_model.TypeCode}, nil,
|
||||
[]*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "zEta",
|
||||
ContentReader: strings.NewReader("zeta"),
|
||||
},
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "licensa",
|
||||
ContentReader: strings.NewReader("licensa"),
|
||||
},
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "licensz",
|
||||
ContentReader: strings.NewReader("licensz"),
|
||||
},
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "delta",
|
||||
ContentReader: strings.NewReader("delta"),
|
||||
},
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "Charlie/aa.txt",
|
||||
ContentReader: strings.NewReader("charlie"),
|
||||
},
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "Beta",
|
||||
ContentReader: strings.NewReader("beta"),
|
||||
},
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "alpha",
|
||||
ContentReader: strings.NewReader("alpha"),
|
||||
},
|
||||
repo := forgery.CreateRepository(t, user2, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.MapFS{
|
||||
"zEta": forgery.MapFile("zeta"),
|
||||
"licensa": forgery.MapFile("licensa"),
|
||||
"LICENSE": forgery.MapFile("LICENSE"),
|
||||
"licensz": forgery.MapFile("licensz"),
|
||||
"delta": forgery.MapFile("delta"),
|
||||
"Charlie/aa.txt": forgery.MapFile("charlie"),
|
||||
"Beta": forgery.MapFile("beta"),
|
||||
"alpha": forgery.MapFile("alpha"),
|
||||
"README.md": forgery.MapFile("README.md"),
|
||||
},
|
||||
)
|
||||
defer f()
|
||||
})
|
||||
|
||||
req := NewRequest(t, "GET", "/"+repo.FullName())
|
||||
resp := MakeRequest(t, req, http.StatusOK)
|
||||
|
|
@ -1223,8 +1191,11 @@ func TestRepoSubmoduleView(t *testing.T) {
|
|||
onApplicationRun(t, func(t *testing.T, u *url.URL) {
|
||||
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
t.Run("FromGit", func(t *testing.T) {
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user2, "", []unit_model.Type{unit_model.TypeCode}, nil, nil)
|
||||
defer f()
|
||||
repo := forgery.CreateRepository(t, user2, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.MapFS{
|
||||
"README.md": forgery.MapFile("some explanation"), // file is expected in doGitClone
|
||||
},
|
||||
})
|
||||
|
||||
// Clone the repository, add a submodule and push it.
|
||||
dstPath := t.TempDir()
|
||||
|
|
@ -1262,24 +1233,15 @@ func TestRepoSubmoduleView(t *testing.T) {
|
|||
})
|
||||
|
||||
t.Run("Declarative", func(t *testing.T) {
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user2, "", []unit_model.Type{unit_model.TypeCode}, nil, []*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: ".gitmodules",
|
||||
ContentReader: strings.NewReader(`[submodule "relative-module"]
|
||||
repo := forgery.CreateRepository(t, user2, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.MapFS{
|
||||
".gitmodules": forgery.MapFile(`[submodule "relative-module"]
|
||||
path = relative-module
|
||||
url = https://git.example.org/submodule.git
|
||||
`),
|
||||
}, {
|
||||
Operation: "create",
|
||||
TreePath: "relative-module",
|
||||
FromTreePath: "",
|
||||
ContentReader: nil,
|
||||
SHA: "95601d16476a",
|
||||
Options: files_service.RepoFileOptionMode(git.EntryModeCommit),
|
||||
"relative-module": forgery.MapSubmodule("95601d16476a"),
|
||||
},
|
||||
})
|
||||
defer f()
|
||||
|
||||
// Check that the submodule entry exist and the link is correct.
|
||||
req := NewRequest(t, "GET", "/"+repo.FullName())
|
||||
|
|
@ -1300,26 +1262,17 @@ func TestRepoSubmoduleView(t *testing.T) {
|
|||
})
|
||||
|
||||
t.Run("SubmodulesFileTooBig", func(t *testing.T) {
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user2, "", []unit_model.Type{unit_model.TypeCode}, nil, []*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: ".gitmodules",
|
||||
ContentReader: strings.NewReader(strings.Repeat("#", git.MaxGitmodulesFileSize-5) + // ensure that the partial read is invalid
|
||||
repo := forgery.CreateRepository(t, user2, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.MapFS{
|
||||
".gitmodules": forgery.MapFile(strings.Repeat("#", git.MaxGitmodulesFileSize-5) + // ensure that the partial read is invalid
|
||||
`
|
||||
[submodule "relative-module"]
|
||||
path = relative-module
|
||||
url = https://git.example.org/submodule.git
|
||||
`),
|
||||
}, {
|
||||
Operation: "create",
|
||||
TreePath: "relative-module",
|
||||
FromTreePath: "",
|
||||
ContentReader: nil,
|
||||
SHA: "95601d16476a",
|
||||
Options: files_service.RepoFileOptionMode(git.EntryModeCommit),
|
||||
"relative-module": forgery.MapSubmodule("95601d16476a"),
|
||||
},
|
||||
})
|
||||
defer f()
|
||||
|
||||
// Check that the submodule entry exist and the link is correct.
|
||||
req := NewRequest(t, "GET", "/"+repo.FullName())
|
||||
|
|
|
|||
|
|
@ -7,66 +7,49 @@ import (
|
|||
"fmt"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
unit_model "forgejo.org/models/unit"
|
||||
"forgejo.org/models/unittest"
|
||||
user_model "forgejo.org/models/user"
|
||||
"forgejo.org/routers/web/repo"
|
||||
"forgejo.org/services/context"
|
||||
"forgejo.org/services/contexttest"
|
||||
files_service "forgejo.org/services/repository/files"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func createRepoAndGetContext(t *testing.T, files []string, deleteMdReadme bool) (*context.Context, func()) {
|
||||
func createRepoAndGetContext(t *testing.T, user *user_model.User, filenames ...string) *context.Context {
|
||||
t.Helper()
|
||||
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user1"})
|
||||
|
||||
size := len(files)
|
||||
if deleteMdReadme {
|
||||
size++
|
||||
}
|
||||
changeFiles := make([]*files_service.ChangeRepoFile, size)
|
||||
for i, e := range files {
|
||||
changeFiles[i] = &files_service.ChangeRepoFile{
|
||||
Operation: "create",
|
||||
TreePath: e,
|
||||
ContentReader: strings.NewReader("test"),
|
||||
files := make(forgery.MapFS, len(filenames))
|
||||
for _, e := range filenames {
|
||||
if _, ok := files[e]; ok {
|
||||
t.Errorf("duplicated filename %q", e)
|
||||
}
|
||||
files[e] = forgery.MapFile("some readme content")
|
||||
}
|
||||
if deleteMdReadme {
|
||||
changeFiles[len(files)] = &files_service.ChangeRepoFile{
|
||||
Operation: "delete",
|
||||
TreePath: "README.md",
|
||||
}
|
||||
}
|
||||
|
||||
// README.md is already added by auto init
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user, "readmetest", []unit_model.Type{unit_model.TypeCode}, nil, changeFiles)
|
||||
|
||||
ctx, _ := contexttest.MockContext(t, "user1/readmetest")
|
||||
repo := forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Files: files,
|
||||
})
|
||||
ctx, _ := contexttest.MockContext(t, repo.FullName())
|
||||
ctx.SetParams(":id", fmt.Sprint(repo.ID))
|
||||
contexttest.LoadRepo(t, ctx, repo.ID)
|
||||
contexttest.LoadGitRepo(t, ctx)
|
||||
contexttest.LoadRepoCommit(t, ctx)
|
||||
|
||||
return ctx, func() {
|
||||
f()
|
||||
t.Cleanup(func() {
|
||||
ctx.Repo.GitRepo.Close()
|
||||
}
|
||||
})
|
||||
|
||||
return ctx
|
||||
}
|
||||
|
||||
func TestRepoView_FindReadme(t *testing.T) {
|
||||
onApplicationRun(t, func(t *testing.T, u *url.URL) {
|
||||
user := forgery.CreateUser(t, nil)
|
||||
t.Run("PrioOneLocalizedMdReadme", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
ctx, f := createRepoAndGetContext(t, []string{"README.en.md", "README.en.org", "README.org", "README.txt", "README.tex"}, false)
|
||||
defer f()
|
||||
ctx := createRepoAndGetContext(t, user, "README.en.md", "README.en.org", "README.org", "README.txt", "README.tex", "README.md")
|
||||
|
||||
tree, _ := ctx.Repo.Commit.SubTree(ctx.Repo.TreePath)
|
||||
entries, _ := tree.ListEntries()
|
||||
|
|
@ -76,8 +59,7 @@ func TestRepoView_FindReadme(t *testing.T) {
|
|||
})
|
||||
t.Run("PrioTwoMdReadme", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
ctx, f := createRepoAndGetContext(t, []string{"README.en.org", "README.org", "README.txt", "README.tex"}, false)
|
||||
defer f()
|
||||
ctx := createRepoAndGetContext(t, user, "README.en.org", "README.org", "README.txt", "README.tex", "README.md")
|
||||
|
||||
tree, _ := ctx.Repo.Commit.SubTree(ctx.Repo.TreePath)
|
||||
entries, _ := tree.ListEntries()
|
||||
|
|
@ -87,8 +69,7 @@ func TestRepoView_FindReadme(t *testing.T) {
|
|||
})
|
||||
t.Run("PrioThreeLocalizedOrgReadme", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
ctx, f := createRepoAndGetContext(t, []string{"README.en.org", "README.org", "README.txt", "README.tex"}, true)
|
||||
defer f()
|
||||
ctx := createRepoAndGetContext(t, user, "README.en.org", "README.org", "README.txt", "README.tex")
|
||||
|
||||
tree, _ := ctx.Repo.Commit.SubTree(ctx.Repo.TreePath)
|
||||
entries, _ := tree.ListEntries()
|
||||
|
|
@ -98,8 +79,7 @@ func TestRepoView_FindReadme(t *testing.T) {
|
|||
})
|
||||
t.Run("PrioFourOrgReadme", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
ctx, f := createRepoAndGetContext(t, []string{"README.org", "README.txt", "README.tex"}, true)
|
||||
defer f()
|
||||
ctx := createRepoAndGetContext(t, user, "README.org", "README.txt", "README.tex")
|
||||
|
||||
tree, _ := ctx.Repo.Commit.SubTree(ctx.Repo.TreePath)
|
||||
entries, _ := tree.ListEntries()
|
||||
|
|
@ -109,8 +89,7 @@ func TestRepoView_FindReadme(t *testing.T) {
|
|||
})
|
||||
t.Run("PrioFiveTxtReadme", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
ctx, f := createRepoAndGetContext(t, []string{"README.txt", "README", "README.tex"}, true)
|
||||
defer f()
|
||||
ctx := createRepoAndGetContext(t, user, "README.txt", "README", "README.tex")
|
||||
|
||||
tree, _ := ctx.Repo.Commit.SubTree(ctx.Repo.TreePath)
|
||||
entries, _ := tree.ListEntries()
|
||||
|
|
@ -120,8 +99,7 @@ func TestRepoView_FindReadme(t *testing.T) {
|
|||
})
|
||||
t.Run("PrioSixWithoutExtensionReadme", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
ctx, f := createRepoAndGetContext(t, []string{"README", "README.tex"}, true)
|
||||
defer f()
|
||||
ctx := createRepoAndGetContext(t, user, "README", "README.tex")
|
||||
|
||||
tree, _ := ctx.Repo.Commit.SubTree(ctx.Repo.TreePath)
|
||||
entries, _ := tree.ListEntries()
|
||||
|
|
@ -131,8 +109,7 @@ func TestRepoView_FindReadme(t *testing.T) {
|
|||
})
|
||||
t.Run("PrioSevenAnyReadme", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
ctx, f := createRepoAndGetContext(t, []string{"README.tex"}, true)
|
||||
defer f()
|
||||
ctx := createRepoAndGetContext(t, user, "README.tex")
|
||||
|
||||
tree, _ := ctx.Repo.Commit.SubTree(ctx.Repo.TreePath)
|
||||
entries, _ := tree.ListEntries()
|
||||
|
|
@ -142,8 +119,7 @@ func TestRepoView_FindReadme(t *testing.T) {
|
|||
})
|
||||
t.Run("DoNotPickReadmeIfNonPresent", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
ctx, f := createRepoAndGetContext(t, []string{}, true)
|
||||
defer f()
|
||||
ctx := createRepoAndGetContext(t, user)
|
||||
|
||||
tree, _ := ctx.Repo.Commit.SubTree(ctx.Repo.TreePath)
|
||||
entries, _ := tree.ListEntries()
|
||||
|
|
@ -156,45 +132,17 @@ func TestRepoView_FindReadme(t *testing.T) {
|
|||
|
||||
func TestRepoViewFileLines(t *testing.T) {
|
||||
onApplicationRun(t, func(t *testing.T, _ *url.URL) {
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user, "file-lines", []unit_model.Type{unit_model.TypeCode}, nil, []*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "test-1",
|
||||
ContentReader: strings.NewReader("No newline"),
|
||||
},
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "test-2",
|
||||
ContentReader: strings.NewReader("No newline\n"),
|
||||
},
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "test-3",
|
||||
ContentReader: strings.NewReader("Two\nlines"),
|
||||
},
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "test-4",
|
||||
ContentReader: strings.NewReader("Really two\nlines\n"),
|
||||
},
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "empty",
|
||||
ContentReader: strings.NewReader(""),
|
||||
},
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "seemingly-empty",
|
||||
ContentReader: strings.NewReader("\n"),
|
||||
},
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "CITATION.cff",
|
||||
ContentReader: strings.NewReader(""),
|
||||
repo := forgery.CreateRepository(t, nil, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.MapFS{
|
||||
"test-1": forgery.MapFile("No newline"),
|
||||
"test-2": forgery.MapFile("No newline\n"),
|
||||
"test-3": forgery.MapFile("Two\nlines"),
|
||||
"test-4": forgery.MapFile("Really two\nlines\n"),
|
||||
"empty": forgery.MapFile(""),
|
||||
"seemingly-empty": forgery.MapFile("\n"),
|
||||
"CITATION.cff": forgery.MapFile(""),
|
||||
},
|
||||
})
|
||||
defer f()
|
||||
|
||||
testEOL := func(t *testing.T, filename string, hasEOL bool) {
|
||||
t.Helper()
|
||||
|
|
|
|||
|
|
@ -10,10 +10,7 @@ import (
|
|||
"strings"
|
||||
"testing"
|
||||
|
||||
"forgejo.org/models/unittest"
|
||||
user_model "forgejo.org/models/user"
|
||||
files_service "forgejo.org/services/repository/files"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/PuerkitoBio/goquery"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
|
@ -22,35 +19,21 @@ import (
|
|||
// TestDataSizeTranslation is a test for usage of TrSize in file size display
|
||||
func TestDataSizeTranslation(t *testing.T) {
|
||||
onApplicationRun(t, func(t *testing.T, giteaURL *url.URL) {
|
||||
testUser := "user2"
|
||||
testRepoName := "data_size_test"
|
||||
noDigits := regexp.MustCompile("[0-9]+")
|
||||
longString100 := `testRepoMigrate(t, session, "https://code.forgejo.org/forgejo/test_repo.git", testRepoName, struct)` + "\n"
|
||||
|
||||
// Login user
|
||||
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: testUser})
|
||||
session := loginUser(t, testUser)
|
||||
user := forgery.CreateUser(t, nil)
|
||||
session := loginUser(t, user.Name)
|
||||
|
||||
// Create test repo
|
||||
testRepo, _, f := tests.CreateDeclarativeRepo(t, user2, testRepoName, nil, nil,
|
||||
[]*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "137byteFile.txt",
|
||||
ContentReader: strings.NewReader(longString100 + strings.Repeat("1", 36) + "\n"),
|
||||
},
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "1.5kibFile.txt",
|
||||
ContentReader: strings.NewReader(strings.Repeat(longString100, 15) + strings.Repeat("1", 35) + "\n"),
|
||||
},
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "1.25mibFile.txt",
|
||||
ContentReader: strings.NewReader(strings.Repeat(longString100, 13107) + strings.Repeat("1", 19) + "\n"),
|
||||
},
|
||||
})
|
||||
defer f()
|
||||
testRepo := forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.MapFS{
|
||||
"137byteFile.txt": forgery.MapFile(longString100 + strings.Repeat("1", 36) + "\n"),
|
||||
"1.5kibFile.txt": forgery.MapFile(strings.Repeat(longString100, 15) + strings.Repeat("1", 35) + "\n"),
|
||||
"1.25mibFile.txt": forgery.MapFile(strings.Repeat(longString100, 13107) + strings.Repeat("1", 19) + "\n"),
|
||||
},
|
||||
})
|
||||
|
||||
// Change language from English to catch regressions that make translated sizes fall back to
|
||||
// not translated, like to raw output of FileSize() or humanize.IBytes()
|
||||
|
|
@ -67,7 +50,7 @@ func TestDataSizeTranslation(t *testing.T) {
|
|||
assert.Positive(t, repos.Length())
|
||||
repos.Each(func(i int, repo *goquery.Selection) {
|
||||
repoName := repo.Find("a.name").Text()
|
||||
if repoName == path.Join(testUser, testRepo.Name) {
|
||||
if repoName == path.Join(user.Name, testRepo.Name) {
|
||||
repoSize := repo.Find("span").Text()
|
||||
repoSize = noDigits.ReplaceAllString(repoSize, "")
|
||||
assert.Equal(t, " КиБ", repoSize)
|
||||
|
|
@ -75,7 +58,7 @@ func TestDataSizeTranslation(t *testing.T) {
|
|||
})
|
||||
|
||||
// Go to /user2/repo1
|
||||
req = NewRequest(t, "GET", path.Join(testUser, testRepoName))
|
||||
req = NewRequest(t, "GET", path.Join(user.Name, testRepo.Name))
|
||||
resp = session.MakeRequest(t, req, http.StatusOK)
|
||||
|
||||
// Check if repo size in repo summary is translated
|
||||
|
|
@ -91,9 +74,9 @@ func TestDataSizeTranslation(t *testing.T) {
|
|||
assert.Equal(t, "git: КиБ; lfs: Б", fullSize)
|
||||
|
||||
// Check if file sizes are correctly translated
|
||||
testFileSizeTranslated(t, session, path.Join(testUser, testRepoName, "src/branch/main/137byteFile.txt"), "137 Б")
|
||||
testFileSizeTranslated(t, session, path.Join(testUser, testRepoName, "src/branch/main/1.5kibFile.txt"), "1,5 КиБ")
|
||||
testFileSizeTranslated(t, session, path.Join(testUser, testRepoName, "src/branch/main/1.25mibFile.txt"), "1,3 МиБ")
|
||||
testFileSizeTranslated(t, session, path.Join(user.Name, testRepo.Name, "src/branch/main/137byteFile.txt"), "137 Б")
|
||||
testFileSizeTranslated(t, session, path.Join(user.Name, testRepo.Name, "src/branch/main/1.5kibFile.txt"), "1,5 КиБ")
|
||||
testFileSizeTranslated(t, session, path.Join(user.Name, testRepo.Name, "src/branch/main/1.25mibFile.txt"), "1,3 МиБ")
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,18 +7,14 @@ import (
|
|||
"net/http"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"forgejo.org/models/issues"
|
||||
unit_model "forgejo.org/models/unit"
|
||||
"forgejo.org/models/unittest"
|
||||
user_model "forgejo.org/models/user"
|
||||
"forgejo.org/modules/gitrepo"
|
||||
issue_service "forgejo.org/services/issue"
|
||||
pull_service "forgejo.org/services/pull"
|
||||
files_service "forgejo.org/services/repository/files"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/PuerkitoBio/goquery"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
|
@ -46,28 +42,23 @@ func testUserDashboardFeedType(t *testing.T, page *HTMLDoc, isEmpty bool) {
|
|||
|
||||
func TestDashboardTitleRendering(t *testing.T) {
|
||||
onApplicationRun(t, func(t *testing.T, u *url.URL) {
|
||||
user4 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
|
||||
sess := loginUser(t, user4.Name)
|
||||
user := forgery.CreateUser(t, nil)
|
||||
sess := loginUser(t, user.Name)
|
||||
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user4, "",
|
||||
[]unit_model.Type{unit_model.TypePullRequests, unit_model.TypeIssues}, nil,
|
||||
[]*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "test.txt",
|
||||
ContentReader: strings.NewReader("Just some text here"),
|
||||
},
|
||||
repo := forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.MapFS{
|
||||
"README.md": forgery.MapFile("some readme to update via the pull request"),
|
||||
"test.txt": forgery.MapFile("Just some text here"),
|
||||
},
|
||||
)
|
||||
defer f()
|
||||
})
|
||||
|
||||
issue := createIssue(t, user4, repo, "`:exclamation:` not rendered #1", "Hi there!")
|
||||
pr := createPullRequest(t, user4, repo, "testing", "`:exclamation:` not rendered #1")
|
||||
issue := createIssue(t, user, repo, "`:exclamation:` not rendered #1", "Hi there!")
|
||||
pr := createPullRequest(t, user, repo, "testing", "`:exclamation:` not rendered #1")
|
||||
|
||||
_, err := issue_service.CreateIssueComment(t.Context(), user4, repo, issue, "hi", nil)
|
||||
_, err := issue_service.CreateIssueComment(t.Context(), user, repo, issue, "hi", nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = issue_service.CreateIssueComment(t.Context(), user4, repo, pr.Issue, "hi", nil)
|
||||
_, err = issue_service.CreateIssueComment(t.Context(), user, repo, pr.Issue, "hi", nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
testIssueClose(t, sess, repo.OwnerName, repo.Name, strconv.Itoa(int(issue.Index)), false)
|
||||
|
|
@ -94,18 +85,16 @@ func TestDashboardTitleRendering(t *testing.T) {
|
|||
|
||||
func TestDashboardActionEscaping(t *testing.T) {
|
||||
onApplicationRun(t, func(t *testing.T, u *url.URL) {
|
||||
user4 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
|
||||
sess := loginUser(t, user4.Name)
|
||||
user := forgery.CreateUser(t, nil)
|
||||
sess := loginUser(t, user.Name)
|
||||
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user4, "",
|
||||
[]unit_model.Type{unit_model.TypePullRequests, unit_model.TypeIssues}, nil,
|
||||
[]*files_service.ChangeRepoFile{},
|
||||
)
|
||||
defer f()
|
||||
repo := forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.FilesInit{},
|
||||
})
|
||||
|
||||
issue := createIssue(t, user4, repo, "Issue with | in title", "Hey here's a | for you")
|
||||
issue := createIssue(t, user, repo, "Issue with | in title", "Hey here's a | for you")
|
||||
|
||||
_, err := issue_service.CreateIssueComment(t.Context(), user4, repo, issue, "Comment with a | in it", nil)
|
||||
_, err := issue_service.CreateIssueComment(t.Context(), user, repo, issue, "Comment with a | in it", nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
testIssueClose(t, sess, repo.OwnerName, repo.Name, strconv.Itoa(int(issue.Index)), false)
|
||||
|
|
@ -129,23 +118,22 @@ func TestDashboardActionEscaping(t *testing.T) {
|
|||
|
||||
func TestDashboardReviewWorkflows(t *testing.T) {
|
||||
onApplicationRun(t, func(t *testing.T, u *url.URL) {
|
||||
user4 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
|
||||
sess := loginUser(t, user4.Name)
|
||||
user := forgery.CreateUser(t, nil)
|
||||
sess := loginUser(t, user.Name)
|
||||
|
||||
repo := forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.FilesInit{},
|
||||
})
|
||||
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user4, "",
|
||||
[]unit_model.Type{unit_model.TypePullRequests, unit_model.TypeIssues}, nil,
|
||||
[]*files_service.ChangeRepoFile{},
|
||||
)
|
||||
defer f()
|
||||
gitRepo, err := gitrepo.OpenRepository(t.Context(), repo)
|
||||
require.NoError(t, err)
|
||||
|
||||
pr := createPullRequest(t, user4, repo, "testing", "My very first PR!")
|
||||
pr := createPullRequest(t, user, repo, "testing", "My very first PR!")
|
||||
|
||||
review, _, err := pull_service.SubmitReview(t.Context(), user4, gitRepo, pr.Issue, issues.ReviewTypeReject, "This isn't good enough!", "HEAD", []string{})
|
||||
review, _, err := pull_service.SubmitReview(t.Context(), user, gitRepo, pr.Issue, issues.ReviewTypeReject, "This isn't good enough!", "HEAD", []string{})
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = pull_service.DismissReview(t.Context(), review.ID, repo.ID, "Come on, give the newbie a break!", user4, true, true)
|
||||
_, err = pull_service.DismissReview(t.Context(), review.ID, repo.ID, "Come on, give the newbie a break!", user, true, true)
|
||||
require.NoError(t, err)
|
||||
|
||||
response := sess.MakeRequest(t, NewRequest(t, "GET", "/"), http.StatusOK)
|
||||
|
|
|
|||
|
|
@ -9,14 +9,12 @@ import (
|
|||
"strings"
|
||||
"testing"
|
||||
|
||||
"forgejo.org/models/unittest"
|
||||
user_model "forgejo.org/models/user"
|
||||
"forgejo.org/modules/git"
|
||||
"forgejo.org/modules/setting"
|
||||
"forgejo.org/modules/test"
|
||||
repo_service "forgejo.org/services/repository"
|
||||
files_service "forgejo.org/services/repository/files"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
|
@ -24,36 +22,23 @@ import (
|
|||
|
||||
func TestUserProfile(t *testing.T) {
|
||||
onApplicationRun(t, func(t *testing.T, u *url.URL) {
|
||||
user := forgery.CreateUser(t, nil)
|
||||
checkReadme := func(t *testing.T, title, readmeFilename string, expectedCount int) {
|
||||
t.Run(title, func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
// Prepare the test repository
|
||||
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
|
||||
var ops []*files_service.ChangeRepoFile
|
||||
op := "create"
|
||||
if readmeFilename != "README.md" {
|
||||
ops = append(ops, &files_service.ChangeRepoFile{
|
||||
Operation: "delete",
|
||||
TreePath: "README.md",
|
||||
})
|
||||
} else {
|
||||
op = "update"
|
||||
}
|
||||
files := forgery.MapFS{}
|
||||
if readmeFilename != "" {
|
||||
ops = append(ops, &files_service.ChangeRepoFile{
|
||||
Operation: op,
|
||||
TreePath: readmeFilename,
|
||||
ContentReader: strings.NewReader("# Hi!\n"),
|
||||
})
|
||||
files[readmeFilename] = forgery.MapFile("# Hi!\n")
|
||||
}
|
||||
|
||||
_, _, f := tests.CreateDeclarativeRepo(t, user2, ".profile", nil, nil, ops)
|
||||
defer f()
|
||||
_ = forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Name: ".profile",
|
||||
Files: files,
|
||||
})
|
||||
|
||||
// Perform the test
|
||||
req := NewRequest(t, "GET", "/user2")
|
||||
req := NewRequest(t, "GET", "/"+user.Name)
|
||||
resp := MakeRequest(t, req, http.StatusOK)
|
||||
|
||||
doc := NewHTMLParser(t, resp.Body)
|
||||
|
|
@ -80,26 +65,21 @@ func TestUserProfile(t *testing.T) {
|
|||
t.Run("readme-size", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
// Prepare the test repository
|
||||
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
|
||||
_, _, f := tests.CreateDeclarativeRepo(t, user2, ".profile", nil, nil, []*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "update",
|
||||
TreePath: "README.md",
|
||||
ContentReader: strings.NewReader(`## Lorem ipsum
|
||||
_ = forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Name: ".profile",
|
||||
Files: forgery.MapFS{
|
||||
"README.md": forgery.MapFile(`## Lorem ipsum
|
||||
dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|
||||
## Ut enim ad minim veniam
|
||||
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum`),
|
||||
},
|
||||
})
|
||||
defer f()
|
||||
|
||||
t.Run("full", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
defer test.MockVariableValue(&setting.UI.MaxDisplayFileSize, 500)()
|
||||
|
||||
req := NewRequest(t, "GET", "/user2")
|
||||
req := NewRequest(t, "GET", "/"+user.Name)
|
||||
resp := MakeRequest(t, req, http.StatusOK)
|
||||
assert.Contains(t, resp.Body.String(), "Ut enim ad minim veniam")
|
||||
assert.Contains(t, resp.Body.String(), "mollit anim id est laborum")
|
||||
|
|
@ -109,7 +89,7 @@ quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequa
|
|||
defer tests.PrintCurrentTest(t)()
|
||||
defer test.MockVariableValue(&setting.UI.MaxDisplayFileSize, 146)()
|
||||
|
||||
req := NewRequest(t, "GET", "/user2")
|
||||
req := NewRequest(t, "GET", "/"+user.Name)
|
||||
resp := MakeRequest(t, req, http.StatusOK)
|
||||
assert.Contains(t, resp.Body.String(), "Ut enim ad minim")
|
||||
assert.NotContains(t, resp.Body.String(), "veniam")
|
||||
|
|
@ -119,49 +99,46 @@ quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequa
|
|||
t.Run("forked-profile-repo", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
// Create users
|
||||
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
user4 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
|
||||
// Create forking user
|
||||
forkingUser := forgery.CreateUser(t, nil)
|
||||
|
||||
// Create original .profile repository for user2
|
||||
originalRepo, _, f1 := tests.CreateDeclarativeRepo(t, user2, ".profile", nil, nil, []*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "update",
|
||||
TreePath: "README.md",
|
||||
ContentReader: strings.NewReader("# Original Profile Content\nThis should show up on user2 profile."),
|
||||
// Create original .profile repository
|
||||
originalRepo := forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Name: ".profile",
|
||||
Files: forgery.MapFS{
|
||||
"README.md": forgery.MapFile("# Original Profile Content\nThis should show up on user profile."),
|
||||
},
|
||||
})
|
||||
defer f1()
|
||||
|
||||
// Fork the .profile repository to user4
|
||||
forkedRepo, err := repo_service.ForkRepositoryAndUpdates(git.DefaultContext, user2, user4, repo_service.ForkRepoOptions{
|
||||
// Fork the .profile repository to forking user
|
||||
forkedRepo, err := repo_service.ForkRepositoryAndUpdates(git.DefaultContext, user, forkingUser, repo_service.ForkRepoOptions{
|
||||
BaseRepo: originalRepo,
|
||||
Name: ".profile",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
// Verify that user2's profile shows the original content
|
||||
req := NewRequest(t, "GET", "/user2")
|
||||
// Verify that the original user's profile shows the original content
|
||||
req := NewRequest(t, "GET", "/"+user.Name)
|
||||
resp := MakeRequest(t, req, http.StatusOK)
|
||||
// Check if the content appears in the response body
|
||||
bodyStr := resp.Body.String()
|
||||
if strings.Contains(bodyStr, "Original Profile Content") {
|
||||
// Original profile is working correctly
|
||||
assert.Contains(t, bodyStr, "This should show up on user2 profile", "Original profile should render content")
|
||||
assert.Contains(t, bodyStr, "This should show up on user profile", "Original profile should render content")
|
||||
}
|
||||
|
||||
// Verify that user4's profile does NOT show the forked content
|
||||
// Verify that forking user's profile does NOT show the forked content
|
||||
// Since it's a fork, it should not render as a profile page (this is the main test)
|
||||
req = NewRequest(t, "GET", "/user4")
|
||||
req = NewRequest(t, "GET", "/"+forkingUser.Name)
|
||||
resp = MakeRequest(t, req, http.StatusOK)
|
||||
bodyStr = resp.Body.String()
|
||||
|
||||
// The main assertion: forked .profile content should NOT appear on user profile
|
||||
assert.NotContains(t, bodyStr, "Original Profile Content", "Forked .profile repo should NOT render profile content")
|
||||
assert.NotContains(t, bodyStr, "This should show up on user2 profile", "Forked .profile repo should NOT render profile content")
|
||||
assert.NotContains(t, bodyStr, "This should show up on user profile", "Forked .profile repo should NOT render profile content")
|
||||
|
||||
// Ensure the forked repository still exists and is accessible directly
|
||||
req = NewRequest(t, "GET", "/user4/.profile")
|
||||
req = NewRequest(t, "GET", "/"+forkingUser.Name+"/.profile")
|
||||
resp = MakeRequest(t, req, http.StatusOK)
|
||||
// The repository page should show the content (since it's the same as original)
|
||||
assert.Contains(t, resp.Body.String(), "Original Profile Content", "Forked repo should still be accessible")
|
||||
|
|
@ -174,25 +151,17 @@ quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequa
|
|||
t.Run("private-profile-repo", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
|
||||
// Create a private .profile repository
|
||||
profileRepo, _, f := tests.CreateDeclarativeRepo(t, user2, ".profile", nil, nil, []*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "update",
|
||||
TreePath: "README.md",
|
||||
ContentReader: strings.NewReader("# Private Profile Content\nThis should NOT show up on user profile."),
|
||||
profileRepo := forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Name: ".profile",
|
||||
IsPrivate: true,
|
||||
Files: forgery.MapFS{
|
||||
"README.md": forgery.MapFile("# Private Profile Content\nThis should NOT show up on user profile."),
|
||||
},
|
||||
})
|
||||
defer f()
|
||||
|
||||
// Make the repository private
|
||||
profileRepo.IsPrivate = true
|
||||
err := repo_service.UpdateRepository(git.DefaultContext, profileRepo, true)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Verify that user2's profile does NOT show the private content
|
||||
req := NewRequest(t, "GET", "/user2")
|
||||
// Verify that user's profile does NOT show the private content
|
||||
req := NewRequest(t, "GET", "/"+user.Name)
|
||||
resp := MakeRequest(t, req, http.StatusOK)
|
||||
bodyStr := resp.Body.String()
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ import (
|
|||
app_context "forgejo.org/services/context"
|
||||
"forgejo.org/services/mailer"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/PuerkitoBio/goquery"
|
||||
"github.com/pquerna/otp/totp"
|
||||
|
|
@ -411,17 +412,16 @@ func TestUserHints(t *testing.T) {
|
|||
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteUser)
|
||||
|
||||
// Create a known-good repo, with only one unit enabled
|
||||
repo, _, f := tests.CreateDeclarativeRepo(t, user, "", []unit_model.Type{
|
||||
unit_model.TypeCode,
|
||||
}, []unit_model.Type{
|
||||
repo := forgery.CreateRepository(t, user, nil)
|
||||
forgery.EnableRepoUnits(t, repo, unit_model.TypeCode)
|
||||
forgery.DisableRepoUnits(t, repo,
|
||||
unit_model.TypePullRequests,
|
||||
unit_model.TypeProjects,
|
||||
unit_model.TypePackages,
|
||||
unit_model.TypeActions,
|
||||
unit_model.TypeIssues,
|
||||
unit_model.TypeWiki,
|
||||
}, nil)
|
||||
defer f()
|
||||
)
|
||||
|
||||
ensureRepoUnitHints := func(t *testing.T, hints bool) {
|
||||
t.Helper()
|
||||
|
|
|
|||
|
|
@ -11,12 +11,10 @@ import (
|
|||
"testing"
|
||||
|
||||
unit_model "forgejo.org/models/unit"
|
||||
"forgejo.org/models/unittest"
|
||||
user_model "forgejo.org/models/user"
|
||||
"forgejo.org/modules/setting"
|
||||
"forgejo.org/modules/test"
|
||||
files_service "forgejo.org/services/repository/files"
|
||||
"forgejo.org/tests"
|
||||
"forgejo.org/tests/forgery"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
|
@ -37,21 +35,18 @@ func TestRenderFileSVGIsInImgTag(t *testing.T) {
|
|||
|
||||
func TestAmbiguousCharacterDetection(t *testing.T) {
|
||||
onApplicationRun(t, func(t *testing.T, u *url.URL) {
|
||||
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
session := loginUser(t, user2.Name)
|
||||
user := forgery.CreateUser(t, nil)
|
||||
session := loginUser(t, user.Name)
|
||||
|
||||
// Prepare the environments. File view, commit view (diff), wiki page.
|
||||
repo, commitID, f := tests.CreateDeclarativeRepo(t, user2, "",
|
||||
[]unit_model.Type{unit_model.TypeCode, unit_model.TypeWiki}, nil,
|
||||
[]*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "test.sh",
|
||||
ContentReader: strings.NewReader("Hello there!\nline western"),
|
||||
},
|
||||
var commitID string
|
||||
repo := forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.MapFS{
|
||||
"test.sh": forgery.MapFile("Hello there!\nline western"),
|
||||
},
|
||||
)
|
||||
defer f()
|
||||
LatestSha: &commitID,
|
||||
})
|
||||
forgery.EnableRepoUnits(t, repo, unit_model.TypeWiki)
|
||||
|
||||
req := NewRequestWithValues(t, "POST", repo.Link()+"/wiki?action=new", map[string]string{
|
||||
"title": "Normal",
|
||||
|
|
@ -132,19 +127,16 @@ func TestAmbiguousCharacterDetection(t *testing.T) {
|
|||
|
||||
func TestCommitListActions(t *testing.T) {
|
||||
onApplicationRun(t, func(t *testing.T, u *url.URL) {
|
||||
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
session := loginUser(t, user2.Name)
|
||||
repo, commitID, f := tests.CreateDeclarativeRepo(t, user2, "",
|
||||
[]unit_model.Type{unit_model.TypeCode, unit_model.TypeWiki}, nil,
|
||||
[]*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "test/test.sh",
|
||||
ContentReader: strings.NewReader("Hello there!"),
|
||||
},
|
||||
user := forgery.CreateUser(t, nil)
|
||||
session := loginUser(t, user.Name)
|
||||
var commitID string
|
||||
repo := forgery.CreateRepository(t, user, &forgery.CreateRepositoryOptions{
|
||||
Files: forgery.MapFS{
|
||||
"test/test.sh": forgery.MapFile("Hello there!"),
|
||||
},
|
||||
)
|
||||
defer f()
|
||||
LatestSha: &commitID,
|
||||
})
|
||||
forgery.EnableRepoUnits(t, repo, unit_model.TypeWiki)
|
||||
|
||||
req := NewRequestWithValues(t, "POST", repo.Link()+"/wiki?action=new", map[string]string{
|
||||
"title": "Normal",
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ func doRepoWikiGitOperation(t *testing.T, serverURL *url.URL, method RepoWikiMet
|
|||
privateRepo := forgery.CreateRepository(t, user2, &forgery.CreateRepositoryOptions{
|
||||
IsPrivate: true,
|
||||
})
|
||||
forgery.EnableRepoUnit(t, privateRepo, unit_model.TypeWiki, nil)
|
||||
forgery.EnableRepoUnits(t, privateRepo, unit_model.TypeWiki)
|
||||
|
||||
session := loginUser(t, user2.LoginName)
|
||||
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue