mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
5.8 KiB
202 lines
5.8 KiB
// Copyright 2024 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package feed |
|
|
|
import ( |
|
"testing" |
|
|
|
activities_model "code.gitea.io/gitea/models/activities" |
|
"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" |
|
) |
|
|
|
func TestGetFeeds(t *testing.T) { |
|
// test with an individual user |
|
assert.NoError(t, unittest.PrepareTestDatabase()) |
|
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) |
|
|
|
actions, count, err := GetFeeds(t.Context(), activities_model.GetFeedsOptions{ |
|
RequestedUser: user, |
|
Actor: user, |
|
IncludePrivate: true, |
|
OnlyPerformedBy: false, |
|
IncludeDeleted: true, |
|
}) |
|
assert.NoError(t, err) |
|
if assert.Len(t, actions, 1) { |
|
assert.EqualValues(t, 1, actions[0].ID) |
|
assert.Equal(t, user.ID, actions[0].UserID) |
|
} |
|
assert.Equal(t, int64(1), count) |
|
|
|
actions, count, err = GetFeeds(t.Context(), activities_model.GetFeedsOptions{ |
|
RequestedUser: user, |
|
Actor: user, |
|
IncludePrivate: false, |
|
OnlyPerformedBy: false, |
|
}) |
|
assert.NoError(t, err) |
|
assert.Empty(t, actions) |
|
assert.Equal(t, int64(0), count) |
|
} |
|
|
|
func TestGetFeedsForRepos(t *testing.T) { |
|
assert.NoError(t, unittest.PrepareTestDatabase()) |
|
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) |
|
privRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2}) |
|
pubRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 8}) |
|
|
|
// private repo & no login |
|
actions, count, err := GetFeeds(t.Context(), activities_model.GetFeedsOptions{ |
|
RequestedRepo: privRepo, |
|
IncludePrivate: true, |
|
}) |
|
assert.NoError(t, err) |
|
assert.Empty(t, actions) |
|
assert.Equal(t, int64(0), count) |
|
|
|
// public repo & no login |
|
actions, count, err = GetFeeds(t.Context(), activities_model.GetFeedsOptions{ |
|
RequestedRepo: pubRepo, |
|
IncludePrivate: true, |
|
}) |
|
assert.NoError(t, err) |
|
assert.Len(t, actions, 1) |
|
assert.Equal(t, int64(1), count) |
|
|
|
// private repo and login |
|
actions, count, err = GetFeeds(t.Context(), activities_model.GetFeedsOptions{ |
|
RequestedRepo: privRepo, |
|
IncludePrivate: true, |
|
Actor: user, |
|
}) |
|
assert.NoError(t, err) |
|
assert.Len(t, actions, 1) |
|
assert.Equal(t, int64(1), count) |
|
|
|
// public repo & login |
|
actions, count, err = GetFeeds(t.Context(), activities_model.GetFeedsOptions{ |
|
RequestedRepo: pubRepo, |
|
IncludePrivate: true, |
|
Actor: user, |
|
}) |
|
assert.NoError(t, err) |
|
assert.Len(t, actions, 1) |
|
assert.Equal(t, int64(1), count) |
|
} |
|
|
|
func TestGetFeeds2(t *testing.T) { |
|
// test with an organization user |
|
assert.NoError(t, unittest.PrepareTestDatabase()) |
|
org := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3}) |
|
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) |
|
|
|
actions, count, err := GetFeeds(t.Context(), activities_model.GetFeedsOptions{ |
|
RequestedUser: org, |
|
Actor: user, |
|
IncludePrivate: true, |
|
OnlyPerformedBy: false, |
|
IncludeDeleted: true, |
|
}) |
|
assert.NoError(t, err) |
|
assert.Len(t, actions, 1) |
|
if assert.Len(t, actions, 1) { |
|
assert.EqualValues(t, 2, actions[0].ID) |
|
assert.Equal(t, org.ID, actions[0].UserID) |
|
} |
|
assert.Equal(t, int64(1), count) |
|
|
|
actions, count, err = GetFeeds(t.Context(), activities_model.GetFeedsOptions{ |
|
RequestedUser: org, |
|
Actor: user, |
|
IncludePrivate: false, |
|
OnlyPerformedBy: false, |
|
IncludeDeleted: true, |
|
}) |
|
assert.NoError(t, err) |
|
assert.Empty(t, actions) |
|
assert.Equal(t, int64(0), count) |
|
} |
|
|
|
func TestGetFeedsCorrupted(t *testing.T) { |
|
// Now we will not check for corrupted data in the feeds |
|
// users should run doctor to fix their data |
|
assert.NoError(t, unittest.PrepareTestDatabase()) |
|
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}) |
|
unittest.AssertExistsAndLoadBean(t, &activities_model.Action{ |
|
ID: 8, |
|
RepoID: 1700, |
|
}) |
|
|
|
actions, count, err := GetFeeds(t.Context(), activities_model.GetFeedsOptions{ |
|
RequestedUser: user, |
|
Actor: user, |
|
IncludePrivate: true, |
|
}) |
|
assert.NoError(t, err) |
|
assert.Len(t, actions, 1) |
|
assert.Equal(t, int64(1), count) |
|
} |
|
|
|
func TestRepoActions(t *testing.T) { |
|
assert.NoError(t, unittest.PrepareTestDatabase()) |
|
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) |
|
_ = db.TruncateBeans(t.Context(), &activities_model.Action{}) |
|
for i := range 3 { |
|
_ = db.Insert(t.Context(), &activities_model.Action{ |
|
UserID: 2 + int64(i), |
|
ActUserID: 2, |
|
RepoID: repo.ID, |
|
OpType: activities_model.ActionCommentIssue, |
|
}) |
|
} |
|
count, _ := db.Count[activities_model.Action](t.Context(), &db.ListOptions{}) |
|
assert.EqualValues(t, 3, count) |
|
actions, _, err := GetFeeds(t.Context(), activities_model.GetFeedsOptions{ |
|
RequestedRepo: repo, |
|
}) |
|
assert.NoError(t, err) |
|
assert.Len(t, actions, 1) |
|
} |
|
|
|
func TestNotifyWatchers(t *testing.T) { |
|
assert.NoError(t, unittest.PrepareTestDatabase()) |
|
|
|
action := &activities_model.Action{ |
|
ActUserID: 8, |
|
RepoID: 1, |
|
OpType: activities_model.ActionStarRepo, |
|
} |
|
assert.NoError(t, NotifyWatchers(t.Context(), action)) |
|
|
|
// One watchers are inactive, thus action is only created for user 8, 1, 4, 11 |
|
unittest.AssertExistsAndLoadBean(t, &activities_model.Action{ |
|
ActUserID: action.ActUserID, |
|
UserID: 8, |
|
RepoID: action.RepoID, |
|
OpType: action.OpType, |
|
}) |
|
unittest.AssertExistsAndLoadBean(t, &activities_model.Action{ |
|
ActUserID: action.ActUserID, |
|
UserID: 1, |
|
RepoID: action.RepoID, |
|
OpType: action.OpType, |
|
}) |
|
unittest.AssertExistsAndLoadBean(t, &activities_model.Action{ |
|
ActUserID: action.ActUserID, |
|
UserID: 4, |
|
RepoID: action.RepoID, |
|
OpType: action.OpType, |
|
}) |
|
unittest.AssertExistsAndLoadBean(t, &activities_model.Action{ |
|
ActUserID: action.ActUserID, |
|
UserID: 11, |
|
RepoID: action.RepoID, |
|
OpType: action.OpType, |
|
}) |
|
}
|
|
|