hide issues from org private repos w/o team assignment

This commit is contained in:
David Schneiderbauer 2018-05-24 11:32:26 +02:00
parent 46d19c4676
commit 6f46ee39a1
No known key found for this signature in database
GPG Key ID: 576113B2803B3EAB
9 changed files with 63 additions and 21 deletions

View File

@ -22,8 +22,8 @@ func TestAccessLevel(t *testing.T) {
user1 := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User) user1 := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
user2 := AssertExistsAndLoadBean(t, &User{ID: 5}).(*User) user2 := AssertExistsAndLoadBean(t, &User{ID: 5}).(*User)
repo1 := AssertExistsAndLoadBean(t, &Repository{OwnerID: 2, IsPrivate: false}).(*Repository) repo1 := AssertExistsAndLoadBean(t, &Repository{ID: 1}).(*Repository)
repo2 := AssertExistsAndLoadBean(t, &Repository{OwnerID: 3, IsPrivate: true}).(*Repository) repo2 := AssertExistsAndLoadBean(t, &Repository{ID: 3}).(*Repository)
level, err := AccessLevel(user1.ID, repo1) level, err := AccessLevel(user1.ID, repo1)
assert.NoError(t, err) assert.NoError(t, err)
@ -47,8 +47,8 @@ func TestHasAccess(t *testing.T) {
user1 := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User) user1 := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
user2 := AssertExistsAndLoadBean(t, &User{ID: 5}).(*User) user2 := AssertExistsAndLoadBean(t, &User{ID: 5}).(*User)
repo1 := AssertExistsAndLoadBean(t, &Repository{OwnerID: 2, IsPrivate: false}).(*Repository) repo1 := AssertExistsAndLoadBean(t, &Repository{ID: 1}).(*Repository)
repo2 := AssertExistsAndLoadBean(t, &Repository{OwnerID: 3, IsPrivate: true}).(*Repository) repo2 := AssertExistsAndLoadBean(t, &Repository{ID: 3}).(*Repository)
for _, accessMode := range accessModes { for _, accessMode := range accessModes {
has, err := HasAccess(user1.ID, repo1, accessMode) has, err := HasAccess(user1.ID, repo1, accessMode)

View File

@ -351,7 +351,7 @@
is_mirror: true is_mirror: true
num_forks: 1 num_forks: 1
is_fork: false is_fork: false
- -
id: 29 id: 29
fork_id: 27 fork_id: 27
@ -365,7 +365,7 @@
num_closed_pulls: 0 num_closed_pulls: 0
is_mirror: false is_mirror: false
is_fork: true is_fork: true
- -
id: 30 id: 30
fork_id: 28 fork_id: 28
@ -389,3 +389,14 @@
num_forks: 0 num_forks: 0
num_issues: 0 num_issues: 0
is_mirror: false is_mirror: false
-
id: 32
owner_id: 3
lower_name: repo21
name: repo21
is_private: false
num_stars: 0
num_forks: 0
num_issues: 0
is_mirror: false

View File

@ -4,7 +4,7 @@
lower_name: owners lower_name: owners
name: Owners name: Owners
authorize: 4 # owner authorize: 4 # owner
num_repos: 2 num_repos: 3
num_members: 1 num_members: 1
unit_types: '[1,2,3,4,5,6,7]' unit_types: '[1,2,3,4,5,6,7]'
@ -56,4 +56,4 @@
authorize: 4 # owner authorize: 4 # owner
num_repos: 2 num_repos: 2
num_members: 1 num_members: 1
unit_types: '[1,2,3,4,5,6,7]' unit_types: '[1,2,3,4,5,6,7]'

View File

@ -33,9 +33,15 @@
org_id: 19 org_id: 19
team_id: 6 team_id: 6
repo_id: 27 repo_id: 27
- -
id: 7 id: 7
org_id: 19 org_id: 19
team_id: 6 team_id: 6
repo_id: 28 repo_id: 28
-
id: 8
org_id: 3
team_id: 1
repo_id: 32

View File

@ -45,7 +45,7 @@
is_admin: false is_admin: false
avatar: avatar3 avatar: avatar3
avatar_email: user3@example.com avatar_email: user3@example.com
num_repos: 2 num_repos: 3
num_members: 2 num_members: 2
num_teams: 2 num_teams: 2

View File

@ -489,8 +489,8 @@ func TestAccessibleReposEnv_CountRepos(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, expectedCount, count) assert.EqualValues(t, expectedCount, count)
} }
testSuccess(2, 2) testSuccess(2, 3)
testSuccess(4, 1) testSuccess(4, 2)
} }
func TestAccessibleReposEnv_RepoIDs(t *testing.T) { func TestAccessibleReposEnv_RepoIDs(t *testing.T) {
@ -503,8 +503,8 @@ func TestAccessibleReposEnv_RepoIDs(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, expectedRepoIDs, repoIDs) assert.Equal(t, expectedRepoIDs, repoIDs)
} }
testSuccess(2, 1, 100, []int64{3, 5}) testSuccess(2, 1, 100, []int64{3, 5, 32})
testSuccess(4, 0, 100, []int64{3}) testSuccess(4, 0, 100, []int64{3, 32})
} }
func TestAccessibleReposEnv_Repos(t *testing.T) { func TestAccessibleReposEnv_Repos(t *testing.T) {
@ -522,8 +522,8 @@ func TestAccessibleReposEnv_Repos(t *testing.T) {
} }
assert.Equal(t, expectedRepos, repos) assert.Equal(t, expectedRepos, repos)
} }
testSuccess(2, []int64{3, 5}) testSuccess(2, []int64{3, 5, 32})
testSuccess(4, []int64{3}) testSuccess(4, []int64{3, 32})
} }
func TestAccessibleReposEnv_MirrorRepos(t *testing.T) { func TestAccessibleReposEnv_MirrorRepos(t *testing.T) {

View File

@ -147,10 +147,10 @@ func TestSearchRepositoryByName(t *testing.T) {
count: 14}, count: 14},
{name: "AllPublic/PublicRepositoriesOfUserIncludingCollaborative", {name: "AllPublic/PublicRepositoriesOfUserIncludingCollaborative",
opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 15, AllPublic: true}, opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 15, AllPublic: true},
count: 15}, count: 16},
{name: "AllPublic/PublicAndPrivateRepositoriesOfUserIncludingCollaborative", {name: "AllPublic/PublicAndPrivateRepositoriesOfUserIncludingCollaborative",
opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 15, Private: true, AllPublic: true}, opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 15, Private: true, AllPublic: true},
count: 19}, count: 20},
{name: "AllPublic/PublicAndPrivateRepositoriesOfUserIncludingCollaborativeByName", {name: "AllPublic/PublicAndPrivateRepositoriesOfUserIncludingCollaborativeByName",
opts: &SearchRepoOptions{Keyword: "test", Page: 1, PageSize: 10, OwnerID: 15, Private: true, AllPublic: true}, opts: &SearchRepoOptions{Keyword: "test", Page: 1, PageSize: 10, OwnerID: 15, Private: true, AllPublic: true},
count: 13}, count: 13},
@ -159,7 +159,7 @@ func TestSearchRepositoryByName(t *testing.T) {
count: 11}, count: 11},
{name: "AllPublic/PublicRepositoriesOfOrganization", {name: "AllPublic/PublicRepositoriesOfOrganization",
opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 17, AllPublic: true, Collaborate: util.OptionalBoolFalse}, opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 17, AllPublic: true, Collaborate: util.OptionalBoolFalse},
count: 15}, count: 16},
} }
for _, testCase := range testCases { for _, testCase := range testCases {

View File

@ -557,7 +557,9 @@ func (u *User) GetOrgRepositoryIDs() ([]int64, error) {
var ids []int64 var ids []int64
return ids, x.Table("repository"). return ids, x.Table("repository").
Cols("repository.id"). Cols("repository.id").
Join("INNER", "team_user", "repository.owner_id = team_user.org_id AND team_user.uid = ?", u.ID). Join("INNER", "team_user", "repository.owner_id = team_user.org_id").
Join("INNER", "team_repo", "(team_user.team_id = team_repo.team_id AND repository.id = team_repo.repo_id) OR repository.is_private = 0").
Where("team_user.uid = ?", u.ID).
GroupBy("repository.id").Find(&ids) GroupBy("repository.id").Find(&ids)
} }

View File

@ -159,3 +159,26 @@ func BenchmarkHashPassword(b *testing.B) {
u.HashPassword(pass) u.HashPassword(pass)
} }
} }
func TestGetOrgRepositoryIDs(t *testing.T) {
assert.NoError(t, PrepareTestDatabase())
user2 := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
user4 := AssertExistsAndLoadBean(t, &User{ID: 4}).(*User)
user5 := AssertExistsAndLoadBean(t, &User{ID: 5}).(*User)
accessibleRepos, err := user2.GetOrgRepositoryIDs()
assert.NoError(t, err)
// User 2's team has access to private repos 3, 5, repo 32 is a public repo of the organization
assert.Equal(t, accessibleRepos, []int64{3, 5, 32})
accessibleRepos, err = user4.GetOrgRepositoryIDs()
assert.NoError(t, err)
// User 4's team has access to private repo 3, repo 32 is a public repo of the organization
assert.Equal(t, accessibleRepos, []int64{3, 32})
accessibleRepos, err = user5.GetOrgRepositoryIDs()
assert.NoError(t, err)
// User 5's team has no access to any repo
var emptyRepos []int64
assert.Equal(t, accessibleRepos, emptyRepos)
}