mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-10-30 05:51:16 +00:00
- When someone gets blocked, remove all pending repository transfers from the blocked user to the doer. - Do not allow to start transferring repositories to the doer as blocked user. - Added unit testing. - Added integration testing. (cherry picked from commit8a3caac330) (cherry picked from commita92b4cfeb6) (cherry picked from commitacaaaf07d9) (cherry picked from commit735818863c) (cherry picked from commitf50fa43b32) (cherry picked from commite166836433) (cherry picked from commite0187b21fe) (cherry picked from commit697a492686)
91 lines
3.8 KiB
Go
91 lines
3.8 KiB
Go
// Copyright 2023 The Forgejo Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package user
|
|
|
|
import (
|
|
"testing"
|
|
|
|
model "code.gitea.io/gitea/models"
|
|
"code.gitea.io/gitea/models/db"
|
|
repo_model "code.gitea.io/gitea/models/repo"
|
|
"code.gitea.io/gitea/models/unittest"
|
|
user_model "code.gitea.io/gitea/models/user"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
// TestBlockUser will ensure that when you block a user, certain actions have
|
|
// been taken, like unfollowing each other etc.
|
|
func TestBlockUser(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 5})
|
|
blockedUser := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
|
|
|
t.Run("Follow", func(t *testing.T) {
|
|
defer user_model.UnblockUser(db.DefaultContext, doer.ID, blockedUser.ID)
|
|
|
|
// Follow each other.
|
|
assert.NoError(t, user_model.FollowUser(db.DefaultContext, doer.ID, blockedUser.ID))
|
|
assert.NoError(t, user_model.FollowUser(db.DefaultContext, blockedUser.ID, doer.ID))
|
|
|
|
assert.NoError(t, BlockUser(db.DefaultContext, doer.ID, blockedUser.ID))
|
|
|
|
// Ensure they aren't following each other anymore.
|
|
assert.False(t, user_model.IsFollowing(db.DefaultContext, doer.ID, blockedUser.ID))
|
|
assert.False(t, user_model.IsFollowing(db.DefaultContext, blockedUser.ID, doer.ID))
|
|
})
|
|
|
|
t.Run("Watch", func(t *testing.T) {
|
|
defer user_model.UnblockUser(db.DefaultContext, doer.ID, blockedUser.ID)
|
|
|
|
// Blocked user watch repository of doer.
|
|
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerID: doer.ID})
|
|
assert.NoError(t, repo_model.WatchRepo(db.DefaultContext, blockedUser.ID, repo.ID, true))
|
|
|
|
assert.NoError(t, BlockUser(db.DefaultContext, doer.ID, blockedUser.ID))
|
|
|
|
// Ensure blocked user isn't following doer's repository.
|
|
assert.False(t, repo_model.IsWatching(db.DefaultContext, blockedUser.ID, repo.ID))
|
|
})
|
|
|
|
t.Run("Collaboration", func(t *testing.T) {
|
|
doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 16})
|
|
blockedUser := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 18})
|
|
repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 22, OwnerID: doer.ID})
|
|
repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 21, OwnerID: doer.ID})
|
|
defer user_model.UnblockUser(db.DefaultContext, doer.ID, blockedUser.ID)
|
|
|
|
isBlockedUserCollab := func(repo *repo_model.Repository) bool {
|
|
isCollaborator, err := repo_model.IsCollaborator(db.DefaultContext, repo.ID, blockedUser.ID)
|
|
assert.NoError(t, err)
|
|
return isCollaborator
|
|
}
|
|
|
|
assert.True(t, isBlockedUserCollab(repo1))
|
|
assert.True(t, isBlockedUserCollab(repo2))
|
|
|
|
assert.NoError(t, BlockUser(db.DefaultContext, doer.ID, blockedUser.ID))
|
|
|
|
assert.False(t, isBlockedUserCollab(repo1))
|
|
assert.False(t, isBlockedUserCollab(repo2))
|
|
})
|
|
|
|
t.Run("Pending transfers", func(t *testing.T) {
|
|
doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
|
blockedUser := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3})
|
|
defer user_model.UnblockUser(db.DefaultContext, doer.ID, blockedUser.ID)
|
|
|
|
unittest.AssertExistsIf(t, true, &repo_model.Repository{ID: 3, OwnerID: blockedUser.ID, Status: repo_model.RepositoryPendingTransfer})
|
|
unittest.AssertExistsIf(t, true, &model.RepoTransfer{ID: 1, RecipientID: doer.ID, DoerID: blockedUser.ID})
|
|
|
|
assert.NoError(t, BlockUser(db.DefaultContext, doer.ID, blockedUser.ID))
|
|
|
|
unittest.AssertExistsIf(t, false, &model.RepoTransfer{ID: 1, RecipientID: doer.ID, DoerID: blockedUser.ID})
|
|
|
|
// Don't use AssertExistsIf, as it doesn't include the zero values in the condition such as `repo_model.RepositoryReady`.
|
|
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3, OwnerID: blockedUser.ID})
|
|
assert.Equal(t, repo_model.RepositoryReady, repo.Status)
|
|
})
|
|
}
|