2017-01-30 09:21:49 -05:00
// Copyright 2017 The Gitea Authors. All rights reserved.
2022-11-27 13:20:29 -05:00
// SPDX-License-Identifier: MIT
2017-01-30 09:21:49 -05:00
2022-08-25 10:31:57 +08:00
package activities_test
2017-01-30 09:21:49 -05:00
import (
2023-08-05 10:40:27 +08:00
"context"
2017-01-30 09:21:49 -05:00
"testing"
2022-08-25 10:31:57 +08:00
activities_model "code.gitea.io/gitea/models/activities"
2022-05-20 22:08:52 +08:00
"code.gitea.io/gitea/models/db"
2022-06-13 17:37:59 +08:00
issues_model "code.gitea.io/gitea/models/issues"
2021-11-12 22:36:47 +08:00
"code.gitea.io/gitea/models/unittest"
2021-11-24 17:49:20 +08:00
user_model "code.gitea.io/gitea/models/user"
2021-11-17 20:34:35 +08:00
2017-01-30 09:21:49 -05:00
"github.com/stretchr/testify/assert"
)
func TestCreateOrUpdateIssueNotifications ( t * testing . T ) {
2021-11-12 22:36:47 +08:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2022-08-16 10:22:25 +08:00
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 1 } )
2017-01-30 09:21:49 -05:00
2023-09-29 14:12:54 +02:00
assert . NoError ( t , activities_model . CreateOrUpdateIssueNotifications ( db . DefaultContext , issue . ID , 0 , 2 , 0 ) )
2017-01-30 09:21:49 -05:00
2017-10-25 01:36:19 +08:00
// User 9 is inactive, thus notifications for user 1 and 4 are created
2022-08-25 10:31:57 +08:00
notf := unittest . AssertExistsAndLoadBean ( t , & activities_model . Notification { UserID : 1 , IssueID : issue . ID } )
assert . Equal ( t , activities_model . NotificationStatusUnread , notf . Status )
2022-06-13 17:37:59 +08:00
unittest . CheckConsistencyFor ( t , & issues_model . Issue { ID : issue . ID } )
2017-10-25 01:36:19 +08:00
2022-08-25 10:31:57 +08:00
notf = unittest . AssertExistsAndLoadBean ( t , & activities_model . Notification { UserID : 4 , IssueID : issue . ID } )
assert . Equal ( t , activities_model . NotificationStatusUnread , notf . Status )
2017-01-30 09:21:49 -05:00
}
func TestNotificationsForUser ( t * testing . T ) {
2021-11-12 22:36:47 +08:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2022-08-16 10:22:25 +08:00
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } )
2023-11-24 11:49:41 +08:00
notfs , err := db . Find [ activities_model . Notification ] ( db . DefaultContext , activities_model . FindNotificationOptions {
UserID : user . ID ,
Status : [ ] activities_model . NotificationStatus {
activities_model . NotificationStatusRead ,
activities_model . NotificationStatusUnread ,
} ,
} )
2017-01-30 09:21:49 -05:00
assert . NoError ( t , err )
2020-01-09 12:56:32 +01:00
if assert . Len ( t , notfs , 3 ) {
assert . EqualValues ( t , 5 , notfs [ 0 ] . ID )
2017-08-28 11:17:45 +02:00
assert . EqualValues ( t , user . ID , notfs [ 0 ] . UserID )
2017-12-07 12:52:57 +07:00
assert . EqualValues ( t , 4 , notfs [ 1 ] . ID )
assert . EqualValues ( t , user . ID , notfs [ 1 ] . UserID )
2020-01-09 12:56:32 +01:00
assert . EqualValues ( t , 2 , notfs [ 2 ] . ID )
assert . EqualValues ( t , user . ID , notfs [ 2 ] . UserID )
2017-08-28 11:17:45 +02:00
}
2017-01-30 09:21:49 -05:00
}
func TestNotification_GetRepo ( t * testing . T ) {
2021-11-12 22:36:47 +08:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2022-08-25 10:31:57 +08:00
notf := unittest . AssertExistsAndLoadBean ( t , & activities_model . Notification { RepoID : 1 } )
2023-09-29 14:12:54 +02:00
repo , err := notf . GetRepo ( db . DefaultContext )
2017-01-30 09:21:49 -05:00
assert . NoError ( t , err )
assert . Equal ( t , repo , notf . Repository )
assert . EqualValues ( t , notf . RepoID , repo . ID )
}
func TestNotification_GetIssue ( t * testing . T ) {
2021-11-12 22:36:47 +08:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2022-08-25 10:31:57 +08:00
notf := unittest . AssertExistsAndLoadBean ( t , & activities_model . Notification { RepoID : 1 } )
2023-09-29 14:12:54 +02:00
issue , err := notf . GetIssue ( db . DefaultContext )
2017-01-30 09:21:49 -05:00
assert . NoError ( t , err )
assert . Equal ( t , issue , notf . Issue )
assert . EqualValues ( t , notf . IssueID , issue . ID )
}
func TestGetNotificationCount ( t * testing . T ) {
2021-11-12 22:36:47 +08:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2022-08-16 10:22:25 +08:00
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 1 } )
2023-11-24 11:49:41 +08:00
cnt , err := db . Count [ activities_model . Notification ] ( db . DefaultContext , activities_model . FindNotificationOptions {
UserID : user . ID ,
Status : [ ] activities_model . NotificationStatus {
activities_model . NotificationStatusRead ,
} ,
} )
2017-01-30 09:21:49 -05:00
assert . NoError ( t , err )
assert . EqualValues ( t , 0 , cnt )
2023-11-24 11:49:41 +08:00
cnt , err = db . Count [ activities_model . Notification ] ( db . DefaultContext , activities_model . FindNotificationOptions {
UserID : user . ID ,
Status : [ ] activities_model . NotificationStatus {
activities_model . NotificationStatusUnread ,
} ,
} )
2017-01-30 09:21:49 -05:00
assert . NoError ( t , err )
assert . EqualValues ( t , 1 , cnt )
}
func TestSetNotificationStatus ( t * testing . T ) {
2021-11-12 22:36:47 +08:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2022-08-16 10:22:25 +08:00
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } )
2021-11-16 16:53:21 +08:00
notf := unittest . AssertExistsAndLoadBean ( t ,
2022-08-25 10:31:57 +08:00
& activities_model . Notification { UserID : user . ID , Status : activities_model . NotificationStatusRead } )
2022-11-19 09:12:33 +01:00
_ , err := activities_model . SetNotificationStatus ( db . DefaultContext , notf . ID , user , activities_model . NotificationStatusPinned )
2021-09-18 01:40:50 +02:00
assert . NoError ( t , err )
2021-11-16 16:53:21 +08:00
unittest . AssertExistsAndLoadBean ( t ,
2022-08-25 10:31:57 +08:00
& activities_model . Notification { ID : notf . ID , Status : activities_model . NotificationStatusPinned } )
2017-01-30 09:21:49 -05:00
2022-11-19 09:12:33 +01:00
_ , err = activities_model . SetNotificationStatus ( db . DefaultContext , 1 , user , activities_model . NotificationStatusRead )
2021-09-18 01:40:50 +02:00
assert . Error ( t , err )
2022-11-19 09:12:33 +01:00
_ , err = activities_model . SetNotificationStatus ( db . DefaultContext , unittest . NonexistentID , user , activities_model . NotificationStatusRead )
2021-09-18 01:40:50 +02:00
assert . Error ( t , err )
2017-01-30 09:21:49 -05:00
}
2017-12-07 12:52:57 +07:00
func TestUpdateNotificationStatuses ( t * testing . T ) {
2021-11-12 22:36:47 +08:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2022-08-16 10:22:25 +08:00
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } )
2021-11-16 16:53:21 +08:00
notfUnread := unittest . AssertExistsAndLoadBean ( t ,
2022-08-25 10:31:57 +08:00
& activities_model . Notification { UserID : user . ID , Status : activities_model . NotificationStatusUnread } )
2021-11-16 16:53:21 +08:00
notfRead := unittest . AssertExistsAndLoadBean ( t ,
2022-08-25 10:31:57 +08:00
& activities_model . Notification { UserID : user . ID , Status : activities_model . NotificationStatusRead } )
2021-11-16 16:53:21 +08:00
notfPinned := unittest . AssertExistsAndLoadBean ( t ,
2022-08-25 10:31:57 +08:00
& activities_model . Notification { UserID : user . ID , Status : activities_model . NotificationStatusPinned } )
2022-11-19 09:12:33 +01:00
assert . NoError ( t , activities_model . UpdateNotificationStatuses ( db . DefaultContext , user , activities_model . NotificationStatusUnread , activities_model . NotificationStatusRead ) )
2021-11-16 16:53:21 +08:00
unittest . AssertExistsAndLoadBean ( t ,
2022-08-25 10:31:57 +08:00
& activities_model . Notification { ID : notfUnread . ID , Status : activities_model . NotificationStatusRead } )
2021-11-16 16:53:21 +08:00
unittest . AssertExistsAndLoadBean ( t ,
2022-08-25 10:31:57 +08:00
& activities_model . Notification { ID : notfRead . ID , Status : activities_model . NotificationStatusRead } )
2021-11-16 16:53:21 +08:00
unittest . AssertExistsAndLoadBean ( t ,
2022-08-25 10:31:57 +08:00
& activities_model . Notification { ID : notfPinned . ID , Status : activities_model . NotificationStatusPinned } )
2017-12-07 12:52:57 +07:00
}
2023-08-05 10:40:27 +08:00
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 )
}