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  }