code.gitea.io/gitea@v1.22.3/models/repo/watch_test.go (about) 1 // Copyright 2017 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package repo_test 5 6 import ( 7 "testing" 8 9 "code.gitea.io/gitea/models/db" 10 repo_model "code.gitea.io/gitea/models/repo" 11 "code.gitea.io/gitea/models/unittest" 12 user_model "code.gitea.io/gitea/models/user" 13 "code.gitea.io/gitea/modules/setting" 14 15 "github.com/stretchr/testify/assert" 16 ) 17 18 func TestIsWatching(t *testing.T) { 19 assert.NoError(t, unittest.PrepareTestDatabase()) 20 21 assert.True(t, repo_model.IsWatching(db.DefaultContext, 1, 1)) 22 assert.True(t, repo_model.IsWatching(db.DefaultContext, 4, 1)) 23 assert.True(t, repo_model.IsWatching(db.DefaultContext, 11, 1)) 24 25 assert.False(t, repo_model.IsWatching(db.DefaultContext, 1, 5)) 26 assert.False(t, repo_model.IsWatching(db.DefaultContext, 8, 1)) 27 assert.False(t, repo_model.IsWatching(db.DefaultContext, unittest.NonexistentID, unittest.NonexistentID)) 28 } 29 30 func TestGetWatchers(t *testing.T) { 31 assert.NoError(t, unittest.PrepareTestDatabase()) 32 33 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) 34 watches, err := repo_model.GetWatchers(db.DefaultContext, repo.ID) 35 assert.NoError(t, err) 36 // One watchers are inactive, thus minus 1 37 assert.Len(t, watches, repo.NumWatches-1) 38 for _, watch := range watches { 39 assert.EqualValues(t, repo.ID, watch.RepoID) 40 } 41 42 watches, err = repo_model.GetWatchers(db.DefaultContext, unittest.NonexistentID) 43 assert.NoError(t, err) 44 assert.Len(t, watches, 0) 45 } 46 47 func TestRepository_GetWatchers(t *testing.T) { 48 assert.NoError(t, unittest.PrepareTestDatabase()) 49 50 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) 51 watchers, err := repo_model.GetRepoWatchers(db.DefaultContext, repo.ID, db.ListOptions{Page: 1}) 52 assert.NoError(t, err) 53 assert.Len(t, watchers, repo.NumWatches) 54 for _, watcher := range watchers { 55 unittest.AssertExistsAndLoadBean(t, &repo_model.Watch{UserID: watcher.ID, RepoID: repo.ID}) 56 } 57 58 repo = unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 9}) 59 watchers, err = repo_model.GetRepoWatchers(db.DefaultContext, repo.ID, db.ListOptions{Page: 1}) 60 assert.NoError(t, err) 61 assert.Len(t, watchers, 0) 62 } 63 64 func TestWatchIfAuto(t *testing.T) { 65 assert.NoError(t, unittest.PrepareTestDatabase()) 66 67 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) 68 user12 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 12}) 69 70 watchers, err := repo_model.GetRepoWatchers(db.DefaultContext, repo.ID, db.ListOptions{Page: 1}) 71 assert.NoError(t, err) 72 assert.Len(t, watchers, repo.NumWatches) 73 74 setting.Service.AutoWatchOnChanges = false 75 76 prevCount := repo.NumWatches 77 78 // Must not add watch 79 assert.NoError(t, repo_model.WatchIfAuto(db.DefaultContext, 8, 1, true)) 80 watchers, err = repo_model.GetRepoWatchers(db.DefaultContext, repo.ID, db.ListOptions{Page: 1}) 81 assert.NoError(t, err) 82 assert.Len(t, watchers, prevCount) 83 84 // Should not add watch 85 assert.NoError(t, repo_model.WatchIfAuto(db.DefaultContext, 10, 1, true)) 86 watchers, err = repo_model.GetRepoWatchers(db.DefaultContext, repo.ID, db.ListOptions{Page: 1}) 87 assert.NoError(t, err) 88 assert.Len(t, watchers, prevCount) 89 90 setting.Service.AutoWatchOnChanges = true 91 92 // Must not add watch 93 assert.NoError(t, repo_model.WatchIfAuto(db.DefaultContext, 8, 1, true)) 94 watchers, err = repo_model.GetRepoWatchers(db.DefaultContext, repo.ID, db.ListOptions{Page: 1}) 95 assert.NoError(t, err) 96 assert.Len(t, watchers, prevCount) 97 98 // Should not add watch 99 assert.NoError(t, repo_model.WatchIfAuto(db.DefaultContext, 12, 1, false)) 100 watchers, err = repo_model.GetRepoWatchers(db.DefaultContext, repo.ID, db.ListOptions{Page: 1}) 101 assert.NoError(t, err) 102 assert.Len(t, watchers, prevCount) 103 104 // Should add watch 105 assert.NoError(t, repo_model.WatchIfAuto(db.DefaultContext, 12, 1, true)) 106 watchers, err = repo_model.GetRepoWatchers(db.DefaultContext, repo.ID, db.ListOptions{Page: 1}) 107 assert.NoError(t, err) 108 assert.Len(t, watchers, prevCount+1) 109 110 // Should remove watch, inhibit from adding auto 111 assert.NoError(t, repo_model.WatchRepo(db.DefaultContext, user12, repo, false)) 112 watchers, err = repo_model.GetRepoWatchers(db.DefaultContext, repo.ID, db.ListOptions{Page: 1}) 113 assert.NoError(t, err) 114 assert.Len(t, watchers, prevCount) 115 116 // Must not add watch 117 assert.NoError(t, repo_model.WatchIfAuto(db.DefaultContext, 12, 1, true)) 118 watchers, err = repo_model.GetRepoWatchers(db.DefaultContext, repo.ID, db.ListOptions{Page: 1}) 119 assert.NoError(t, err) 120 assert.Len(t, watchers, prevCount) 121 }