aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2023-08-05 10:40:27 +0800
committerGitHub <noreply@github.com>2023-08-05 10:40:27 +0800
commit12c249c5ca3d719850831c113ec1998d2124b860 (patch)
treef45310cd40dcce930aafe77af99bed5044aab582
parente5011a0e6d74071adfa17fd806234fd9108cb867 (diff)
downloadgitea-12c249c5ca3d719850831c113ec1998d2124b860.tar.gz
gitea-12c249c5ca3d719850831c113ec1998d2124b860.zip
Fix bug with sqlite load read (#26305)
Possible fix #26280
-rw-r--r--models/activities/notification.go11
-rw-r--r--models/activities/notification_test.go14
-rw-r--r--models/issues/issue_user.go4
-rw-r--r--models/issues/issue_user_test.go6
4 files changed, 25 insertions, 10 deletions
diff --git a/models/activities/notification.go b/models/activities/notification.go
index e0af2ee8bb..ef263ef735 100644
--- a/models/activities/notification.go
+++ b/models/activities/notification.go
@@ -310,7 +310,7 @@ func createIssueNotification(ctx context.Context, userID int64, issue *issues_mo
}
func updateIssueNotification(ctx context.Context, userID, issueID, commentID, updatedByID int64) error {
- notification, err := getIssueNotification(ctx, userID, issueID)
+ notification, err := GetIssueNotification(ctx, userID, issueID)
if err != nil {
return err
}
@@ -331,7 +331,8 @@ func updateIssueNotification(ctx context.Context, userID, issueID, commentID, up
return err
}
-func getIssueNotification(ctx context.Context, userID, issueID int64) (*Notification, error) {
+// GetIssueNotification return the notification about an issue
+func GetIssueNotification(ctx context.Context, userID, issueID int64) (*Notification, error) {
notification := new(Notification)
_, err := db.GetEngine(ctx).
Where("user_id = ?", userID).
@@ -742,7 +743,7 @@ func GetUIDsAndNotificationCounts(since, until timeutil.TimeStamp) ([]UserIDCoun
// SetIssueReadBy sets issue to be read by given user.
func SetIssueReadBy(ctx context.Context, issueID, userID int64) error {
- if err := issues_model.UpdateIssueUserByRead(userID, issueID); err != nil {
+ if err := issues_model.UpdateIssueUserByRead(ctx, userID, issueID); err != nil {
return err
}
@@ -750,7 +751,7 @@ func SetIssueReadBy(ctx context.Context, issueID, userID int64) error {
}
func setIssueNotificationStatusReadIfUnread(ctx context.Context, userID, issueID int64) error {
- notification, err := getIssueNotification(ctx, userID, issueID)
+ notification, err := GetIssueNotification(ctx, userID, issueID)
// ignore if not exists
if err != nil {
return nil
@@ -762,7 +763,7 @@ func setIssueNotificationStatusReadIfUnread(ctx context.Context, userID, issueID
notification.Status = NotificationStatusRead
- _, err = db.GetEngine(ctx).ID(notification.ID).Update(notification)
+ _, err = db.GetEngine(ctx).ID(notification.ID).Cols("status").Update(notification)
return err
}
diff --git a/models/activities/notification_test.go b/models/activities/notification_test.go
index 36b63b266b..2d4c369a99 100644
--- a/models/activities/notification_test.go
+++ b/models/activities/notification_test.go
@@ -4,6 +4,7 @@
package activities_test
import (
+ "context"
"testing"
activities_model "code.gitea.io/gitea/models/activities"
@@ -109,3 +110,16 @@ func TestUpdateNotificationStatuses(t *testing.T) {
unittest.AssertExistsAndLoadBean(t,
&activities_model.Notification{ID: notfPinned.ID, Status: activities_model.NotificationStatusPinned})
}
+
+func TestSetIssueReadBy(t *testing.T) {
+ assert.NoError(t, unittest.PrepareTestDatabase())
+ user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
+ issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1})
+ assert.NoError(t, db.WithTx(db.DefaultContext, func(ctx context.Context) error {
+ return activities_model.SetIssueReadBy(ctx, issue.ID, user.ID)
+ }))
+
+ nt, err := activities_model.GetIssueNotification(db.DefaultContext, user.ID, issue.ID)
+ assert.NoError(t, err)
+ assert.EqualValues(t, activities_model.NotificationStatusRead, nt.Status)
+}
diff --git a/models/issues/issue_user.go b/models/issues/issue_user.go
index 47da5c62c4..d053b1d543 100644
--- a/models/issues/issue_user.go
+++ b/models/issues/issue_user.go
@@ -55,8 +55,8 @@ func NewIssueUsers(ctx context.Context, repo *repo_model.Repository, issue *Issu
}
// UpdateIssueUserByRead updates issue-user relation for reading.
-func UpdateIssueUserByRead(uid, issueID int64) error {
- _, err := db.GetEngine(db.DefaultContext).Exec("UPDATE `issue_user` SET is_read=? WHERE uid=? AND issue_id=?", true, uid, issueID)
+func UpdateIssueUserByRead(ctx context.Context, uid, issueID int64) error {
+ _, err := db.GetEngine(ctx).Exec("UPDATE `issue_user` SET is_read=? WHERE uid=? AND issue_id=?", true, uid, issueID)
return err
}
diff --git a/models/issues/issue_user_test.go b/models/issues/issue_user_test.go
index 0daace6c9b..ce47adb53a 100644
--- a/models/issues/issue_user_test.go
+++ b/models/issues/issue_user_test.go
@@ -40,13 +40,13 @@ func TestUpdateIssueUserByRead(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1})
- assert.NoError(t, issues_model.UpdateIssueUserByRead(4, issue.ID))
+ assert.NoError(t, issues_model.UpdateIssueUserByRead(db.DefaultContext, 4, issue.ID))
unittest.AssertExistsAndLoadBean(t, &issues_model.IssueUser{IssueID: issue.ID, UID: 4}, "is_read=1")
- assert.NoError(t, issues_model.UpdateIssueUserByRead(4, issue.ID))
+ assert.NoError(t, issues_model.UpdateIssueUserByRead(db.DefaultContext, 4, issue.ID))
unittest.AssertExistsAndLoadBean(t, &issues_model.IssueUser{IssueID: issue.ID, UID: 4}, "is_read=1")
- assert.NoError(t, issues_model.UpdateIssueUserByRead(unittest.NonexistentID, unittest.NonexistentID))
+ assert.NoError(t, issues_model.UpdateIssueUserByRead(db.DefaultContext, unittest.NonexistentID, unittest.NonexistentID))
}
func TestUpdateIssueUsersByMentions(t *testing.T) {