You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

access_test.go 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. // Copyright 2017 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package models
  5. import (
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. var accessModes = []AccessMode{
  10. AccessModeRead,
  11. AccessModeWrite,
  12. AccessModeAdmin,
  13. AccessModeOwner,
  14. }
  15. func TestAccessLevel(t *testing.T) {
  16. assert.NoError(t, PrepareTestDatabase())
  17. user1 := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
  18. user2 := AssertExistsAndLoadBean(t, &User{ID: 5}).(*User)
  19. // A public repository owned by User 2
  20. repo1 := AssertExistsAndLoadBean(t, &Repository{ID: 1}).(*Repository)
  21. assert.False(t, repo1.IsPrivate)
  22. // A private repository owned by Org 3
  23. repo2 := AssertExistsAndLoadBean(t, &Repository{ID: 3}).(*Repository)
  24. assert.True(t, repo2.IsPrivate)
  25. level, err := AccessLevel(user1.ID, repo1)
  26. assert.NoError(t, err)
  27. assert.Equal(t, AccessModeOwner, level)
  28. level, err = AccessLevel(user1.ID, repo2)
  29. assert.NoError(t, err)
  30. assert.Equal(t, AccessModeWrite, level)
  31. level, err = AccessLevel(user2.ID, repo1)
  32. assert.NoError(t, err)
  33. assert.Equal(t, AccessModeRead, level)
  34. level, err = AccessLevel(user2.ID, repo2)
  35. assert.NoError(t, err)
  36. assert.Equal(t, AccessModeNone, level)
  37. }
  38. func TestHasAccess(t *testing.T) {
  39. assert.NoError(t, PrepareTestDatabase())
  40. user1 := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
  41. user2 := AssertExistsAndLoadBean(t, &User{ID: 5}).(*User)
  42. // A public repository owned by User 2
  43. repo1 := AssertExistsAndLoadBean(t, &Repository{ID: 1}).(*Repository)
  44. assert.False(t, repo1.IsPrivate)
  45. // A private repository owned by Org 3
  46. repo2 := AssertExistsAndLoadBean(t, &Repository{ID: 3}).(*Repository)
  47. assert.True(t, repo2.IsPrivate)
  48. for _, accessMode := range accessModes {
  49. has, err := HasAccess(user1.ID, repo1, accessMode)
  50. assert.NoError(t, err)
  51. assert.True(t, has)
  52. has, err = HasAccess(user1.ID, repo2, accessMode)
  53. assert.NoError(t, err)
  54. assert.Equal(t, accessMode <= AccessModeWrite, has)
  55. has, err = HasAccess(user2.ID, repo1, accessMode)
  56. assert.NoError(t, err)
  57. assert.Equal(t, accessMode <= AccessModeRead, has)
  58. has, err = HasAccess(user2.ID, repo2, accessMode)
  59. assert.NoError(t, err)
  60. assert.Equal(t, accessMode <= AccessModeNone, has)
  61. }
  62. }
  63. func TestUser_GetRepositoryAccesses(t *testing.T) {
  64. assert.NoError(t, PrepareTestDatabase())
  65. user1 := AssertExistsAndLoadBean(t, &User{ID: 1}).(*User)
  66. accesses, err := user1.GetRepositoryAccesses()
  67. assert.NoError(t, err)
  68. assert.Len(t, accesses, 0)
  69. }
  70. func TestUser_GetAccessibleRepositories(t *testing.T) {
  71. assert.NoError(t, PrepareTestDatabase())
  72. user1 := AssertExistsAndLoadBean(t, &User{ID: 1}).(*User)
  73. repos, err := user1.GetAccessibleRepositories(0)
  74. assert.NoError(t, err)
  75. assert.Len(t, repos, 0)
  76. user2 := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
  77. repos, err = user2.GetAccessibleRepositories(0)
  78. assert.NoError(t, err)
  79. assert.Len(t, repos, 1)
  80. }
  81. func TestRepository_RecalculateAccesses(t *testing.T) {
  82. // test with organization repo
  83. assert.NoError(t, PrepareTestDatabase())
  84. repo1 := AssertExistsAndLoadBean(t, &Repository{ID: 3}).(*Repository)
  85. assert.NoError(t, repo1.GetOwner())
  86. _, err := x.Delete(&Collaboration{UserID: 2, RepoID: 3})
  87. assert.NoError(t, err)
  88. assert.NoError(t, repo1.RecalculateAccesses())
  89. access := &Access{UserID: 2, RepoID: 3}
  90. has, err := x.Get(access)
  91. assert.NoError(t, err)
  92. assert.True(t, has)
  93. assert.Equal(t, AccessModeOwner, access.Mode)
  94. }
  95. func TestRepository_RecalculateAccesses2(t *testing.T) {
  96. // test with non-organization repo
  97. assert.NoError(t, PrepareTestDatabase())
  98. repo1 := AssertExistsAndLoadBean(t, &Repository{ID: 4}).(*Repository)
  99. assert.NoError(t, repo1.GetOwner())
  100. _, err := x.Delete(&Collaboration{UserID: 4, RepoID: 4})
  101. assert.NoError(t, err)
  102. assert.NoError(t, repo1.RecalculateAccesses())
  103. has, err := x.Get(&Access{UserID: 4, RepoID: 4})
  104. assert.NoError(t, err)
  105. assert.False(t, has)
  106. }