2022-05-11 13:09:36 +03:00
// Copyright 2022 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2022-05-11 13:09:36 +03:00
2022-06-06 11:01:49 +03:00
package repo_test
2022-05-11 13:09:36 +03:00
import (
"testing"
"code.gitea.io/gitea/models/db"
2022-06-15 10:02:00 +03:00
"code.gitea.io/gitea/models/perm"
access_model "code.gitea.io/gitea/models/perm/access"
2022-06-06 11:01:49 +03:00
repo_model "code.gitea.io/gitea/models/repo"
2022-05-11 13:09:36 +03:00
"code.gitea.io/gitea/models/unittest"
"github.com/stretchr/testify/assert"
)
func TestRepository_GetCollaborators ( t * testing . T ) {
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
test := func ( repoID int64 ) {
2022-08-16 05:22:25 +03:00
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : repoID } )
2024-03-04 11:16:03 +03:00
collaborators , _ , err := repo_model . GetCollaborators ( db . DefaultContext , & repo_model . FindCollaborationOptions { RepoID : repo . ID } )
2022-05-11 13:09:36 +03:00
assert . NoError ( t , err )
2022-06-06 11:01:49 +03:00
expectedLen , err := db . GetEngine ( db . DefaultContext ) . Count ( & repo_model . Collaboration { RepoID : repoID } )
2022-05-11 13:09:36 +03:00
assert . NoError ( t , err )
assert . Len ( t , collaborators , int ( expectedLen ) )
for _ , collaborator := range collaborators {
assert . EqualValues ( t , collaborator . User . ID , collaborator . Collaboration . UserID )
assert . EqualValues ( t , repoID , collaborator . Collaboration . RepoID )
}
}
test ( 1 )
test ( 2 )
test ( 3 )
test ( 4 )
2023-07-04 00:41:14 +03:00
// Test db.ListOptions
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 22 } )
2024-03-04 11:16:03 +03:00
collaborators1 , _ , err := repo_model . GetCollaborators ( db . DefaultContext , & repo_model . FindCollaborationOptions {
ListOptions : db . ListOptions { PageSize : 1 , Page : 1 } ,
RepoID : repo . ID ,
} )
2023-07-04 00:41:14 +03:00
assert . NoError ( t , err )
assert . Len ( t , collaborators1 , 1 )
2024-03-04 11:16:03 +03:00
collaborators2 , _ , err := repo_model . GetCollaborators ( db . DefaultContext , & repo_model . FindCollaborationOptions {
ListOptions : db . ListOptions { PageSize : 1 , Page : 2 } ,
RepoID : repo . ID ,
} )
2023-07-04 00:41:14 +03:00
assert . NoError ( t , err )
assert . Len ( t , collaborators2 , 1 )
assert . NotEqualValues ( t , collaborators1 [ 0 ] . ID , collaborators2 [ 0 ] . ID )
2022-05-11 13:09:36 +03:00
}
func TestRepository_IsCollaborator ( t * testing . T ) {
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
test := func ( repoID , userID int64 , expected bool ) {
2022-08-16 05:22:25 +03:00
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : repoID } )
2022-06-06 11:01:49 +03:00
actual , err := repo_model . IsCollaborator ( db . DefaultContext , repo . ID , userID )
2022-05-11 13:09:36 +03:00
assert . NoError ( t , err )
assert . Equal ( t , expected , actual )
}
test ( 3 , 2 , true )
test ( 3 , unittest . NonexistentID , false )
test ( 4 , 2 , false )
test ( 4 , 4 , true )
}
2022-06-15 10:02:00 +03:00
func TestRepository_ChangeCollaborationAccessMode ( t * testing . T ) {
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2022-08-16 05:22:25 +03:00
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 4 } )
2022-12-10 05:46:31 +03:00
assert . NoError ( t , repo_model . ChangeCollaborationAccessMode ( db . DefaultContext , repo , 4 , perm . AccessModeAdmin ) )
2022-06-15 10:02:00 +03:00
2022-08-16 05:22:25 +03:00
collaboration := unittest . AssertExistsAndLoadBean ( t , & repo_model . Collaboration { RepoID : repo . ID , UserID : 4 } )
2022-06-15 10:02:00 +03:00
assert . EqualValues ( t , perm . AccessModeAdmin , collaboration . Mode )
2022-08-16 05:22:25 +03:00
access := unittest . AssertExistsAndLoadBean ( t , & access_model . Access { UserID : 4 , RepoID : repo . ID } )
2022-06-15 10:02:00 +03:00
assert . EqualValues ( t , perm . AccessModeAdmin , access . Mode )
2022-12-10 05:46:31 +03:00
assert . NoError ( t , repo_model . ChangeCollaborationAccessMode ( db . DefaultContext , repo , 4 , perm . AccessModeAdmin ) )
2022-06-15 10:02:00 +03:00
2022-12-10 05:46:31 +03:00
assert . NoError ( t , repo_model . ChangeCollaborationAccessMode ( db . DefaultContext , repo , unittest . NonexistentID , perm . AccessModeAdmin ) )
2022-06-15 10:02:00 +03:00
2023-07-04 00:41:14 +03:00
// Disvard invalid input.
assert . NoError ( t , repo_model . ChangeCollaborationAccessMode ( db . DefaultContext , repo , 4 , perm . AccessMode ( unittest . NonexistentID ) ) )
2022-06-15 10:02:00 +03:00
unittest . CheckConsistencyFor ( t , & repo_model . Repository { ID : repo . ID } )
}
2023-07-04 00:41:14 +03:00
func TestRepository_IsOwnerMemberCollaborator ( t * testing . T ) {
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
repo1 := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 3 } )
// Organisation owner.
2023-09-29 15:12:54 +03:00
actual , err := repo_model . IsOwnerMemberCollaborator ( db . DefaultContext , repo1 , 2 )
2023-07-04 00:41:14 +03:00
assert . NoError ( t , err )
assert . True ( t , actual )
// Team member.
2023-09-29 15:12:54 +03:00
actual , err = repo_model . IsOwnerMemberCollaborator ( db . DefaultContext , repo1 , 4 )
2023-07-04 00:41:14 +03:00
assert . NoError ( t , err )
assert . True ( t , actual )
// Normal user.
2023-09-29 15:12:54 +03:00
actual , err = repo_model . IsOwnerMemberCollaborator ( db . DefaultContext , repo1 , 1 )
2023-07-04 00:41:14 +03:00
assert . NoError ( t , err )
assert . False ( t , actual )
repo2 := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 4 } )
// Collaborator.
2023-09-29 15:12:54 +03:00
actual , err = repo_model . IsOwnerMemberCollaborator ( db . DefaultContext , repo2 , 4 )
2023-07-04 00:41:14 +03:00
assert . NoError ( t , err )
assert . True ( t , actual )
repo3 := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 15 } )
// Repository owner.
2023-09-29 15:12:54 +03:00
actual , err = repo_model . IsOwnerMemberCollaborator ( db . DefaultContext , repo3 , 2 )
2023-07-04 00:41:14 +03:00
assert . NoError ( t , err )
assert . True ( t , actual )
}
func TestRepo_GetCollaboration ( t * testing . T ) {
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 4 } )
// Existing collaboration.
collab , err := repo_model . GetCollaboration ( db . DefaultContext , repo . ID , 4 )
assert . NoError ( t , err )
assert . NotNil ( t , collab )
assert . EqualValues ( t , 4 , collab . UserID )
assert . EqualValues ( t , 4 , collab . RepoID )
// Non-existing collaboration.
collab , err = repo_model . GetCollaboration ( db . DefaultContext , repo . ID , 1 )
assert . NoError ( t , err )
assert . Nil ( t , collab )
}