2017-01-30 17:21:49 +03:00
// Copyright 2017 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package models
import (
"testing"
2022-05-20 17:08:52 +03:00
"code.gitea.io/gitea/models/db"
2022-06-13 12:37:59 +03:00
issues_model "code.gitea.io/gitea/models/issues"
2021-11-12 17:36:47 +03:00
"code.gitea.io/gitea/models/unittest"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2021-11-17 15:34:35 +03:00
2017-01-30 17:21:49 +03:00
"github.com/stretchr/testify/assert"
)
func TestCreateOrUpdateIssueNotifications ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2022-06-13 12:37:59 +03:00
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 1 } ) . ( * issues_model . Issue )
2017-01-30 17:21:49 +03:00
2020-04-06 19:33:34 +03:00
assert . NoError ( t , CreateOrUpdateIssueNotifications ( issue . ID , 0 , 2 , 0 ) )
2017-01-30 17:21:49 +03:00
2017-10-24 20:36:19 +03:00
// User 9 is inactive, thus notifications for user 1 and 4 are created
2021-11-16 11:53:21 +03:00
notf := unittest . AssertExistsAndLoadBean ( t , & Notification { UserID : 1 , IssueID : issue . ID } ) . ( * Notification )
2017-01-30 17:21:49 +03:00
assert . Equal ( t , NotificationStatusUnread , notf . Status )
2022-06-13 12:37:59 +03:00
unittest . CheckConsistencyFor ( t , & issues_model . Issue { ID : issue . ID } )
2017-10-24 20:36:19 +03:00
2021-11-16 11:53:21 +03:00
notf = unittest . AssertExistsAndLoadBean ( t , & Notification { UserID : 4 , IssueID : issue . ID } ) . ( * Notification )
2017-10-24 20:36:19 +03:00
assert . Equal ( t , NotificationStatusUnread , notf . Status )
2017-01-30 17:21:49 +03:00
}
func TestNotificationsForUser ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2021-11-24 12:49:20 +03:00
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } ) . ( * user_model . User )
2017-01-30 17:21:49 +03:00
statuses := [ ] NotificationStatus { NotificationStatusRead , NotificationStatusUnread }
2022-05-20 17:08:52 +03:00
notfs , err := NotificationsForUser ( db . DefaultContext , user , statuses , 1 , 10 )
2017-01-30 17:21:49 +03:00
assert . NoError ( t , err )
2020-01-09 14:56:32 +03:00
if assert . Len ( t , notfs , 3 ) {
assert . EqualValues ( t , 5 , notfs [ 0 ] . ID )
2017-08-28 12:17:45 +03:00
assert . EqualValues ( t , user . ID , notfs [ 0 ] . UserID )
2017-12-07 08:52:57 +03:00
assert . EqualValues ( t , 4 , notfs [ 1 ] . ID )
assert . EqualValues ( t , user . ID , notfs [ 1 ] . UserID )
2020-01-09 14:56:32 +03:00
assert . EqualValues ( t , 2 , notfs [ 2 ] . ID )
assert . EqualValues ( t , user . ID , notfs [ 2 ] . UserID )
2017-08-28 12:17:45 +03:00
}
2017-01-30 17:21:49 +03:00
}
func TestNotification_GetRepo ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2021-11-16 11:53:21 +03:00
notf := unittest . AssertExistsAndLoadBean ( t , & Notification { RepoID : 1 } ) . ( * Notification )
2017-01-30 17:21:49 +03:00
repo , err := notf . GetRepo ( )
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 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2021-11-16 11:53:21 +03:00
notf := unittest . AssertExistsAndLoadBean ( t , & Notification { RepoID : 1 } ) . ( * Notification )
2017-01-30 17:21:49 +03:00
issue , err := notf . GetIssue ( )
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 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2021-11-24 12:49:20 +03:00
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 1 } ) . ( * user_model . User )
2022-05-20 17:08:52 +03:00
cnt , err := GetNotificationCount ( db . DefaultContext , user , NotificationStatusRead )
2017-01-30 17:21:49 +03:00
assert . NoError ( t , err )
assert . EqualValues ( t , 0 , cnt )
2022-05-20 17:08:52 +03:00
cnt , err = GetNotificationCount ( db . DefaultContext , user , NotificationStatusUnread )
2017-01-30 17:21:49 +03:00
assert . NoError ( t , err )
assert . EqualValues ( t , 1 , cnt )
}
func TestSetNotificationStatus ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2021-11-24 12:49:20 +03:00
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } ) . ( * user_model . User )
2021-11-16 11:53:21 +03:00
notf := unittest . AssertExistsAndLoadBean ( t ,
2017-01-30 17:21:49 +03:00
& Notification { UserID : user . ID , Status : NotificationStatusRead } ) . ( * Notification )
2021-09-18 02:40:50 +03:00
_ , err := SetNotificationStatus ( notf . ID , user , NotificationStatusPinned )
assert . NoError ( t , err )
2021-11-16 11:53:21 +03:00
unittest . AssertExistsAndLoadBean ( t ,
2017-01-30 17:21:49 +03:00
& Notification { ID : notf . ID , Status : NotificationStatusPinned } )
2021-09-18 02:40:50 +03:00
_ , err = SetNotificationStatus ( 1 , user , NotificationStatusRead )
assert . Error ( t , err )
2021-11-16 11:53:21 +03:00
_ , err = SetNotificationStatus ( unittest . NonexistentID , user , NotificationStatusRead )
2021-09-18 02:40:50 +03:00
assert . Error ( t , err )
2017-01-30 17:21:49 +03:00
}
2017-12-07 08:52:57 +03:00
func TestUpdateNotificationStatuses ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2021-11-24 12:49:20 +03:00
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } ) . ( * user_model . User )
2021-11-16 11:53:21 +03:00
notfUnread := unittest . AssertExistsAndLoadBean ( t ,
2017-12-07 08:52:57 +03:00
& Notification { UserID : user . ID , Status : NotificationStatusUnread } ) . ( * Notification )
2021-11-16 11:53:21 +03:00
notfRead := unittest . AssertExistsAndLoadBean ( t ,
2017-12-07 08:52:57 +03:00
& Notification { UserID : user . ID , Status : NotificationStatusRead } ) . ( * Notification )
2021-11-16 11:53:21 +03:00
notfPinned := unittest . AssertExistsAndLoadBean ( t ,
2017-12-07 08:52:57 +03:00
& Notification { UserID : user . ID , Status : NotificationStatusPinned } ) . ( * Notification )
assert . NoError ( t , UpdateNotificationStatuses ( user , NotificationStatusUnread , NotificationStatusRead ) )
2021-11-16 11:53:21 +03:00
unittest . AssertExistsAndLoadBean ( t ,
2017-12-07 08:52:57 +03:00
& Notification { ID : notfUnread . ID , Status : NotificationStatusRead } )
2021-11-16 11:53:21 +03:00
unittest . AssertExistsAndLoadBean ( t ,
2017-12-07 08:52:57 +03:00
& Notification { ID : notfRead . ID , Status : NotificationStatusRead } )
2021-11-16 11:53:21 +03:00
unittest . AssertExistsAndLoadBean ( t ,
2017-12-07 08:52:57 +03:00
& Notification { ID : notfPinned . ID , Status : NotificationStatusPinned } )
}