2017-02-17 11:02:11 +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"
2021-09-19 14:49:59 +03:00
"code.gitea.io/gitea/models/db"
2019-11-10 12:22:19 +03:00
"code.gitea.io/gitea/modules/setting"
2017-02-17 11:02:11 +03:00
"github.com/stretchr/testify/assert"
)
func TestIsWatching ( t * testing . T ) {
2021-09-19 14:49:59 +03:00
assert . NoError ( t , db . PrepareTestDatabase ( ) )
2017-02-17 11:02:11 +03:00
assert . True ( t , IsWatching ( 1 , 1 ) )
assert . True ( t , IsWatching ( 4 , 1 ) )
2019-11-10 12:22:19 +03:00
assert . True ( t , IsWatching ( 11 , 1 ) )
2017-02-17 11:02:11 +03:00
assert . False ( t , IsWatching ( 1 , 5 ) )
2019-11-10 12:22:19 +03:00
assert . False ( t , IsWatching ( 8 , 1 ) )
2021-09-19 14:49:59 +03:00
assert . False ( t , IsWatching ( db . NonexistentID , db . NonexistentID ) )
2017-02-17 11:02:11 +03:00
}
func TestWatchRepo ( t * testing . T ) {
2021-09-19 14:49:59 +03:00
assert . NoError ( t , db . PrepareTestDatabase ( ) )
2017-02-17 11:02:11 +03:00
const repoID = 3
const userID = 2
assert . NoError ( t , WatchRepo ( userID , repoID , true ) )
2021-09-19 14:49:59 +03:00
db . AssertExistsAndLoadBean ( t , & Watch { RepoID : repoID , UserID : userID } )
2017-02-17 11:02:11 +03:00
CheckConsistencyFor ( t , & Repository { ID : repoID } )
assert . NoError ( t , WatchRepo ( userID , repoID , false ) )
2021-09-19 14:49:59 +03:00
db . AssertNotExistsBean ( t , & Watch { RepoID : repoID , UserID : userID } )
2017-02-17 11:02:11 +03:00
CheckConsistencyFor ( t , & Repository { ID : repoID } )
}
func TestGetWatchers ( t * testing . T ) {
2021-09-19 14:49:59 +03:00
assert . NoError ( t , db . PrepareTestDatabase ( ) )
2017-02-17 11:02:11 +03:00
2021-09-19 14:49:59 +03:00
repo := db . AssertExistsAndLoadBean ( t , & Repository { ID : 1 } ) . ( * Repository )
2017-02-17 11:02:11 +03:00
watches , err := GetWatchers ( repo . ID )
assert . NoError ( t , err )
2017-10-24 20:36:19 +03:00
// One watchers are inactive, thus minus 1
assert . Len ( t , watches , repo . NumWatches - 1 )
2017-02-17 11:02:11 +03:00
for _ , watch := range watches {
assert . EqualValues ( t , repo . ID , watch . RepoID )
}
2021-09-19 14:49:59 +03:00
watches , err = GetWatchers ( db . NonexistentID )
2017-02-17 11:02:11 +03:00
assert . NoError ( t , err )
assert . Len ( t , watches , 0 )
}
func TestRepository_GetWatchers ( t * testing . T ) {
2021-09-19 14:49:59 +03:00
assert . NoError ( t , db . PrepareTestDatabase ( ) )
2017-02-17 11:02:11 +03:00
2021-09-19 14:49:59 +03:00
repo := db . AssertExistsAndLoadBean ( t , & Repository { ID : 1 } ) . ( * Repository )
2021-09-24 14:32:56 +03:00
watchers , err := repo . GetWatchers ( db . ListOptions { Page : 1 } )
2017-02-17 11:02:11 +03:00
assert . NoError ( t , err )
assert . Len ( t , watchers , repo . NumWatches )
for _ , watcher := range watchers {
2021-09-19 14:49:59 +03:00
db . AssertExistsAndLoadBean ( t , & Watch { UserID : watcher . ID , RepoID : repo . ID } )
2017-02-17 11:02:11 +03:00
}
2021-09-19 14:49:59 +03:00
repo = db . AssertExistsAndLoadBean ( t , & Repository { ID : 9 } ) . ( * Repository )
2021-09-24 14:32:56 +03:00
watchers , err = repo . GetWatchers ( db . ListOptions { Page : 1 } )
2017-02-17 11:02:11 +03:00
assert . NoError ( t , err )
assert . Len ( t , watchers , 0 )
}
func TestNotifyWatchers ( t * testing . T ) {
2021-09-19 14:49:59 +03:00
assert . NoError ( t , db . PrepareTestDatabase ( ) )
2017-02-17 11:02:11 +03:00
action := & Action {
ActUserID : 8 ,
RepoID : 1 ,
OpType : ActionStarRepo ,
}
assert . NoError ( t , NotifyWatchers ( action ) )
2019-11-10 12:22:19 +03:00
// One watchers are inactive, thus action is only created for user 8, 1, 4, 11
2021-09-19 14:49:59 +03:00
db . AssertExistsAndLoadBean ( t , & Action {
2017-02-17 11:02:11 +03:00
ActUserID : action . ActUserID ,
2017-09-16 03:18:25 +03:00
UserID : 8 ,
2017-02-17 11:02:11 +03:00
RepoID : action . RepoID ,
OpType : action . OpType ,
} )
2021-09-19 14:49:59 +03:00
db . AssertExistsAndLoadBean ( t , & Action {
2017-02-17 11:02:11 +03:00
ActUserID : action . ActUserID ,
2017-10-24 20:36:19 +03:00
UserID : 1 ,
RepoID : action . RepoID ,
OpType : action . OpType ,
} )
2021-09-19 14:49:59 +03:00
db . AssertExistsAndLoadBean ( t , & Action {
2017-10-24 20:36:19 +03:00
ActUserID : action . ActUserID ,
UserID : 4 ,
2017-02-17 11:02:11 +03:00
RepoID : action . RepoID ,
OpType : action . OpType ,
} )
2021-09-19 14:49:59 +03:00
db . AssertExistsAndLoadBean ( t , & Action {
2019-11-10 12:22:19 +03:00
ActUserID : action . ActUserID ,
UserID : 11 ,
RepoID : action . RepoID ,
OpType : action . OpType ,
} )
}
func TestWatchIfAuto ( t * testing . T ) {
2021-09-19 14:49:59 +03:00
assert . NoError ( t , db . PrepareTestDatabase ( ) )
2019-11-10 12:22:19 +03:00
2021-09-19 14:49:59 +03:00
repo := db . AssertExistsAndLoadBean ( t , & Repository { ID : 1 } ) . ( * Repository )
2021-09-24 14:32:56 +03:00
watchers , err := repo . GetWatchers ( db . ListOptions { Page : 1 } )
2019-11-10 12:22:19 +03:00
assert . NoError ( t , err )
assert . Len ( t , watchers , repo . NumWatches )
setting . Service . AutoWatchOnChanges = false
prevCount := repo . NumWatches
// Must not add watch
assert . NoError ( t , WatchIfAuto ( 8 , 1 , true ) )
2021-09-24 14:32:56 +03:00
watchers , err = repo . GetWatchers ( db . ListOptions { Page : 1 } )
2019-11-10 12:22:19 +03:00
assert . NoError ( t , err )
assert . Len ( t , watchers , prevCount )
// Should not add watch
assert . NoError ( t , WatchIfAuto ( 10 , 1 , true ) )
2021-09-24 14:32:56 +03:00
watchers , err = repo . GetWatchers ( db . ListOptions { Page : 1 } )
2019-11-10 12:22:19 +03:00
assert . NoError ( t , err )
assert . Len ( t , watchers , prevCount )
setting . Service . AutoWatchOnChanges = true
// Must not add watch
assert . NoError ( t , WatchIfAuto ( 8 , 1 , true ) )
2021-09-24 14:32:56 +03:00
watchers , err = repo . GetWatchers ( db . ListOptions { Page : 1 } )
2019-11-10 12:22:19 +03:00
assert . NoError ( t , err )
assert . Len ( t , watchers , prevCount )
// Should not add watch
assert . NoError ( t , WatchIfAuto ( 12 , 1 , false ) )
2021-09-24 14:32:56 +03:00
watchers , err = repo . GetWatchers ( db . ListOptions { Page : 1 } )
2019-11-10 12:22:19 +03:00
assert . NoError ( t , err )
assert . Len ( t , watchers , prevCount )
// Should add watch
assert . NoError ( t , WatchIfAuto ( 12 , 1 , true ) )
2021-09-24 14:32:56 +03:00
watchers , err = repo . GetWatchers ( db . ListOptions { Page : 1 } )
2019-11-10 12:22:19 +03:00
assert . NoError ( t , err )
assert . Len ( t , watchers , prevCount + 1 )
// Should remove watch, inhibit from adding auto
assert . NoError ( t , WatchRepo ( 12 , 1 , false ) )
2021-09-24 14:32:56 +03:00
watchers , err = repo . GetWatchers ( db . ListOptions { Page : 1 } )
2019-11-10 12:22:19 +03:00
assert . NoError ( t , err )
assert . Len ( t , watchers , prevCount )
// Must not add watch
assert . NoError ( t , WatchIfAuto ( 12 , 1 , true ) )
2021-09-24 14:32:56 +03:00
watchers , err = repo . GetWatchers ( db . ListOptions { Page : 1 } )
2019-11-10 12:22:19 +03:00
assert . NoError ( t , err )
assert . Len ( t , watchers , prevCount )
}
func TestWatchRepoMode ( t * testing . T ) {
2021-09-19 14:49:59 +03:00
assert . NoError ( t , db . PrepareTestDatabase ( ) )
2019-11-10 12:22:19 +03:00
2021-09-19 14:49:59 +03:00
db . AssertCount ( t , & Watch { UserID : 12 , RepoID : 1 } , 0 )
2019-11-10 12:22:19 +03:00
assert . NoError ( t , WatchRepoMode ( 12 , 1 , RepoWatchModeAuto ) )
2021-09-19 14:49:59 +03:00
db . AssertCount ( t , & Watch { UserID : 12 , RepoID : 1 } , 1 )
db . AssertCount ( t , & Watch { UserID : 12 , RepoID : 1 , Mode : RepoWatchModeAuto } , 1 )
2019-11-10 12:22:19 +03:00
assert . NoError ( t , WatchRepoMode ( 12 , 1 , RepoWatchModeNormal ) )
2021-09-19 14:49:59 +03:00
db . AssertCount ( t , & Watch { UserID : 12 , RepoID : 1 } , 1 )
db . AssertCount ( t , & Watch { UserID : 12 , RepoID : 1 , Mode : RepoWatchModeNormal } , 1 )
2019-11-10 12:22:19 +03:00
assert . NoError ( t , WatchRepoMode ( 12 , 1 , RepoWatchModeDont ) )
2021-09-19 14:49:59 +03:00
db . AssertCount ( t , & Watch { UserID : 12 , RepoID : 1 } , 1 )
db . AssertCount ( t , & Watch { UserID : 12 , RepoID : 1 , Mode : RepoWatchModeDont } , 1 )
2019-11-10 12:22:19 +03:00
assert . NoError ( t , WatchRepoMode ( 12 , 1 , RepoWatchModeNone ) )
2021-09-19 14:49:59 +03:00
db . AssertCount ( t , & Watch { UserID : 12 , RepoID : 1 } , 0 )
2017-02-17 11:02:11 +03:00
}