mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-10-26 12:01:08 +00:00
- Resolves #476 - Follow up for: #540 - Ensure that the doer and blocked person cannot follow each other. - Ensure that the block person cannot watch doer's repositories. - Add unblock button to the blocked user list. - Add blocked since information to the blocked user list. - Add extra testing to moderation code. - Blocked user will unwatch doer's owned repository upon blocking. - Add flash messages to let the user know the block/unblock action was successful. - Add "You haven't blocked any users" message. - Add organization blocking a user. Co-authored-by: Gusted <postmaster@gusted.xyz> Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/802 (cherry picked from commit0505a10421) (cherry picked from commit37b4e6ef9b) (cherry picked from commit217475385a) (cherry picked from commitf2c38ce5c2) (cherry picked from commit1edfb68137) (cherry picked from commit2cbc12dc74) (cherry picked from commit79ff020f18)
170 lines
6.1 KiB
Go
170 lines
6.1 KiB
Go
// Copyright 2017 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package repo_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"code.gitea.io/gitea/models/db"
|
|
repo_model "code.gitea.io/gitea/models/repo"
|
|
"code.gitea.io/gitea/models/unittest"
|
|
"code.gitea.io/gitea/modules/setting"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestIsWatching(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
assert.True(t, repo_model.IsWatching(1, 1))
|
|
assert.True(t, repo_model.IsWatching(4, 1))
|
|
assert.True(t, repo_model.IsWatching(11, 1))
|
|
|
|
assert.False(t, repo_model.IsWatching(1, 5))
|
|
assert.False(t, repo_model.IsWatching(8, 1))
|
|
assert.False(t, repo_model.IsWatching(unittest.NonexistentID, unittest.NonexistentID))
|
|
}
|
|
|
|
func TestGetWatchers(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
|
|
watches, err := repo_model.GetWatchers(db.DefaultContext, repo.ID)
|
|
assert.NoError(t, err)
|
|
// One watchers are inactive, thus minus 1
|
|
assert.Len(t, watches, repo.NumWatches-1)
|
|
for _, watch := range watches {
|
|
assert.EqualValues(t, repo.ID, watch.RepoID)
|
|
}
|
|
|
|
watches, err = repo_model.GetWatchers(db.DefaultContext, unittest.NonexistentID)
|
|
assert.NoError(t, err)
|
|
assert.Len(t, watches, 0)
|
|
}
|
|
|
|
func TestGetWatchersExcludeBlocked(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
|
|
watches, err := repo_model.GetWatchersExcludeBlocked(db.DefaultContext, repo.ID, 1)
|
|
assert.NoError(t, err)
|
|
|
|
// One watchers are inactive and one watcher is blocked, thus minus 2
|
|
assert.Len(t, watches, repo.NumWatches-2)
|
|
for _, watch := range watches {
|
|
assert.EqualValues(t, repo.ID, watch.RepoID)
|
|
}
|
|
|
|
watches, err = repo_model.GetWatchersExcludeBlocked(db.DefaultContext, unittest.NonexistentID, 1)
|
|
assert.NoError(t, err)
|
|
assert.Len(t, watches, 0)
|
|
}
|
|
|
|
func TestRepository_GetWatchers(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
|
|
watchers, err := repo_model.GetRepoWatchers(repo.ID, db.ListOptions{Page: 1})
|
|
assert.NoError(t, err)
|
|
assert.Len(t, watchers, repo.NumWatches)
|
|
for _, watcher := range watchers {
|
|
unittest.AssertExistsAndLoadBean(t, &repo_model.Watch{UserID: watcher.ID, RepoID: repo.ID})
|
|
}
|
|
|
|
repo = unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 9})
|
|
watchers, err = repo_model.GetRepoWatchers(repo.ID, db.ListOptions{Page: 1})
|
|
assert.NoError(t, err)
|
|
assert.Len(t, watchers, 0)
|
|
}
|
|
|
|
func TestWatchIfAuto(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
|
|
watchers, err := repo_model.GetRepoWatchers(repo.ID, db.ListOptions{Page: 1})
|
|
assert.NoError(t, err)
|
|
assert.Len(t, watchers, repo.NumWatches)
|
|
|
|
setting.Service.AutoWatchOnChanges = false
|
|
|
|
prevCount := repo.NumWatches
|
|
|
|
// Must not add watch
|
|
assert.NoError(t, repo_model.WatchIfAuto(db.DefaultContext, 8, 1, true))
|
|
watchers, err = repo_model.GetRepoWatchers(repo.ID, db.ListOptions{Page: 1})
|
|
assert.NoError(t, err)
|
|
assert.Len(t, watchers, prevCount)
|
|
|
|
// Should not add watch
|
|
assert.NoError(t, repo_model.WatchIfAuto(db.DefaultContext, 10, 1, true))
|
|
watchers, err = repo_model.GetRepoWatchers(repo.ID, db.ListOptions{Page: 1})
|
|
assert.NoError(t, err)
|
|
assert.Len(t, watchers, prevCount)
|
|
|
|
setting.Service.AutoWatchOnChanges = true
|
|
|
|
// Must not add watch
|
|
assert.NoError(t, repo_model.WatchIfAuto(db.DefaultContext, 8, 1, true))
|
|
watchers, err = repo_model.GetRepoWatchers(repo.ID, db.ListOptions{Page: 1})
|
|
assert.NoError(t, err)
|
|
assert.Len(t, watchers, prevCount)
|
|
|
|
// Should not add watch
|
|
assert.NoError(t, repo_model.WatchIfAuto(db.DefaultContext, 12, 1, false))
|
|
watchers, err = repo_model.GetRepoWatchers(repo.ID, db.ListOptions{Page: 1})
|
|
assert.NoError(t, err)
|
|
assert.Len(t, watchers, prevCount)
|
|
|
|
// Should add watch
|
|
assert.NoError(t, repo_model.WatchIfAuto(db.DefaultContext, 12, 1, true))
|
|
watchers, err = repo_model.GetRepoWatchers(repo.ID, db.ListOptions{Page: 1})
|
|
assert.NoError(t, err)
|
|
assert.Len(t, watchers, prevCount+1)
|
|
|
|
// Should remove watch, inhibit from adding auto
|
|
assert.NoError(t, repo_model.WatchRepo(db.DefaultContext, 12, 1, false))
|
|
watchers, err = repo_model.GetRepoWatchers(repo.ID, db.ListOptions{Page: 1})
|
|
assert.NoError(t, err)
|
|
assert.Len(t, watchers, prevCount)
|
|
|
|
// Must not add watch
|
|
assert.NoError(t, repo_model.WatchIfAuto(db.DefaultContext, 12, 1, true))
|
|
watchers, err = repo_model.GetRepoWatchers(repo.ID, db.ListOptions{Page: 1})
|
|
assert.NoError(t, err)
|
|
assert.Len(t, watchers, prevCount)
|
|
}
|
|
|
|
func TestWatchRepoMode(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
unittest.AssertCount(t, &repo_model.Watch{UserID: 12, RepoID: 1}, 0)
|
|
|
|
assert.NoError(t, repo_model.WatchRepoMode(12, 1, repo_model.WatchModeAuto))
|
|
unittest.AssertCount(t, &repo_model.Watch{UserID: 12, RepoID: 1}, 1)
|
|
unittest.AssertCount(t, &repo_model.Watch{UserID: 12, RepoID: 1, Mode: repo_model.WatchModeAuto}, 1)
|
|
|
|
assert.NoError(t, repo_model.WatchRepoMode(12, 1, repo_model.WatchModeNormal))
|
|
unittest.AssertCount(t, &repo_model.Watch{UserID: 12, RepoID: 1}, 1)
|
|
unittest.AssertCount(t, &repo_model.Watch{UserID: 12, RepoID: 1, Mode: repo_model.WatchModeNormal}, 1)
|
|
|
|
assert.NoError(t, repo_model.WatchRepoMode(12, 1, repo_model.WatchModeDont))
|
|
unittest.AssertCount(t, &repo_model.Watch{UserID: 12, RepoID: 1}, 1)
|
|
unittest.AssertCount(t, &repo_model.Watch{UserID: 12, RepoID: 1, Mode: repo_model.WatchModeDont}, 1)
|
|
|
|
assert.NoError(t, repo_model.WatchRepoMode(12, 1, repo_model.WatchModeNone))
|
|
unittest.AssertCount(t, &repo_model.Watch{UserID: 12, RepoID: 1}, 0)
|
|
}
|
|
|
|
func TestUnwatchRepos(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
unittest.AssertExistsAndLoadBean(t, &repo_model.Watch{UserID: 4, RepoID: 1})
|
|
unittest.AssertExistsAndLoadBean(t, &repo_model.Watch{UserID: 4, RepoID: 2})
|
|
|
|
err := repo_model.UnwatchRepos(db.DefaultContext, 4, []int64{1, 2})
|
|
assert.NoError(t, err)
|
|
|
|
unittest.AssertNotExistsBean(t, &repo_model.Watch{UserID: 4, RepoID: 1})
|
|
unittest.AssertNotExistsBean(t, &repo_model.Watch{UserID: 4, RepoID: 2})
|
|
}
|