mirror of
https://github.com/go-gitea/gitea.git
synced 2026-08-24 11:09:48 +00:00
66d6f74cb0
Speed up tests: `make test-backend` 103s to 37s, `make test-integration` 908s to 852s. Most of it is a detached system notice insert blocking on the SQLite write lock until the busy timeout expired, and `ExternalServiceHTTP` re-probing on every call with an untimed `http.Get`. - fixed one correctness bug with nested transactions: files were deleted while the outer transaction was open, so a later failure could roll the database back with the files gone - git push branch counts were far above the hook batch size - Fix makefile dependencies so running tests and lint work in fresh worktrees. --------- Co-authored-by: Giteabot <teabot@gitea.io> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
94 lines
3.4 KiB
Go
94 lines
3.4 KiB
Go
// Copyright 2017 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package repository_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
actions_model "gitea.dev/models/actions"
|
|
"gitea.dev/models/db"
|
|
git_model "gitea.dev/models/git"
|
|
"gitea.dev/models/organization"
|
|
repo_model "gitea.dev/models/repo"
|
|
"gitea.dev/models/unittest"
|
|
user_model "gitea.dev/models/user"
|
|
repo_service "gitea.dev/services/repository"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestTeam_HasRepository(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
test := func(teamID, repoID int64, expected bool) {
|
|
team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID})
|
|
assert.Equal(t, expected, repo_service.HasRepository(t.Context(), team, repoID))
|
|
}
|
|
test(1, 1, false)
|
|
test(1, 3, true)
|
|
test(1, 5, true)
|
|
test(1, unittest.NonexistentID, false)
|
|
|
|
test(2, 3, true)
|
|
test(2, 5, false)
|
|
}
|
|
|
|
func TestTeam_RemoveRepository(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
testSuccess := func(teamID, repoID int64) {
|
|
team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID})
|
|
assert.NoError(t, repo_service.RemoveRepositoryFromTeam(t.Context(), team, repoID))
|
|
unittest.AssertNotExistsBean(t, &organization.TeamRepo{TeamID: teamID, RepoID: repoID})
|
|
unittest.CheckConsistencyFor(t, &organization.Team{ID: teamID}, &repo_model.Repository{ID: repoID})
|
|
}
|
|
testSuccess(2, 3)
|
|
testSuccess(2, 5)
|
|
testSuccess(1, unittest.NonexistentID)
|
|
}
|
|
|
|
func TestDeleteOwnerRepositoriesDirectly(t *testing.T) {
|
|
unittest.PrepareTestEnv(t)
|
|
|
|
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
|
|
|
assert.NoError(t, repo_service.DeleteOwnerRepositoriesDirectly(t.Context(), user))
|
|
|
|
t.Run("RejectedInTransaction", func(t *testing.T) {
|
|
unittest.PrepareTestEnv(t)
|
|
|
|
err := db.WithTx(t.Context(), func(ctx context.Context) error {
|
|
return repo_service.DeleteRepositoryDirectly(ctx, 1)
|
|
})
|
|
assert.ErrorContains(t, err, "must not be called within a transaction")
|
|
unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
|
|
})
|
|
}
|
|
|
|
func TestDeleteRepositoryDirectlyPurgesRepoScopedRows(t *testing.T) {
|
|
unittest.PrepareTestEnv(t)
|
|
|
|
// One row per table that repository deletion used to leave behind (#38494).
|
|
assert.NoError(t, db.Insert(t.Context(),
|
|
&actions_model.ActionVariable{RepoID: 1, Name: "to_purge", Data: "value"},
|
|
&actions_model.ActionRunAttempt{RepoID: 1, RunID: unittest.NonexistentID, Attempt: 1},
|
|
&actions_model.ActionTasksVersion{RepoID: 1, Version: 1},
|
|
&git_model.RenamedBranch{RepoID: 1, From: "old-name", To: "new-name"},
|
|
&git_model.CommitStatusSummary{RepoID: 1, SHA: "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef", State: "success"},
|
|
&repo_model.RepoTransfer{RepoID: 1, DoerID: 2, RecipientID: 3},
|
|
))
|
|
unittest.AssertExistsAndLoadBean(t, &git_model.CommitStatusIndex{RepoID: 1})
|
|
|
|
assert.NoError(t, repo_service.DeleteRepositoryDirectly(t.Context(), 1))
|
|
|
|
unittest.AssertNotExistsBean(t, &actions_model.ActionVariable{RepoID: 1})
|
|
unittest.AssertNotExistsBean(t, &actions_model.ActionRunAttempt{RepoID: 1})
|
|
unittest.AssertNotExistsBean(t, &actions_model.ActionTasksVersion{RepoID: 1})
|
|
unittest.AssertNotExistsBean(t, &git_model.RenamedBranch{RepoID: 1})
|
|
unittest.AssertNotExistsBean(t, &git_model.CommitStatusSummary{RepoID: 1})
|
|
unittest.AssertNotExistsBean(t, &git_model.CommitStatusIndex{RepoID: 1})
|
|
unittest.AssertNotExistsBean(t, &repo_model.RepoTransfer{RepoID: 1})
|
|
}
|