summaryrefslogtreecommitdiffstats
path: root/models/org_team_test.go
diff options
context:
space:
mode:
authorDaniel Baumann <daniel@debian.org>2024-10-18 20:33:49 +0200
committerDaniel Baumann <daniel@debian.org>2024-10-18 20:33:49 +0200
commitdd136858f1ea40ad3c94191d647487fa4f31926c (patch)
tree58fec94a7b2a12510c9664b21793f1ed560c6518 /models/org_team_test.go
parentInitial commit. (diff)
downloadforgejo-dd136858f1ea40ad3c94191d647487fa4f31926c.tar.xz
forgejo-dd136858f1ea40ad3c94191d647487fa4f31926c.zip
Adding upstream version 9.0.0.upstream/9.0.0upstreamdebian
Signed-off-by: Daniel Baumann <daniel@debian.org>
Diffstat (limited to 'models/org_team_test.go')
-rw-r--r--models/org_team_test.go170
1 files changed, 170 insertions, 0 deletions
diff --git a/models/org_team_test.go b/models/org_team_test.go
new file mode 100644
index 0000000..2819607
--- /dev/null
+++ b/models/org_team_test.go
@@ -0,0 +1,170 @@
+// Copyright 2017 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package models
+
+import (
+ "strings"
+ "testing"
+
+ "code.gitea.io/gitea/models/db"
+ "code.gitea.io/gitea/models/organization"
+ "code.gitea.io/gitea/models/perm"
+ access_model "code.gitea.io/gitea/models/perm/access"
+ repo_model "code.gitea.io/gitea/models/repo"
+ "code.gitea.io/gitea/models/unittest"
+ user_model "code.gitea.io/gitea/models/user"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+func TestTeam_AddMember(t *testing.T) {
+ require.NoError(t, unittest.PrepareTestDatabase())
+
+ test := func(teamID, userID int64) {
+ team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID})
+ require.NoError(t, AddTeamMember(db.DefaultContext, team, userID))
+ unittest.AssertExistsAndLoadBean(t, &organization.TeamUser{UID: userID, TeamID: teamID})
+ unittest.CheckConsistencyFor(t, &organization.Team{ID: teamID}, &user_model.User{ID: team.OrgID})
+ }
+ test(1, 2)
+ test(1, 4)
+ test(3, 2)
+}
+
+func TestTeam_RemoveMember(t *testing.T) {
+ require.NoError(t, unittest.PrepareTestDatabase())
+
+ testSuccess := func(teamID, userID int64) {
+ team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID})
+ require.NoError(t, RemoveTeamMember(db.DefaultContext, team, userID))
+ unittest.AssertNotExistsBean(t, &organization.TeamUser{UID: userID, TeamID: teamID})
+ unittest.CheckConsistencyFor(t, &organization.Team{ID: teamID})
+ }
+ testSuccess(1, 4)
+ testSuccess(2, 2)
+ testSuccess(3, 2)
+ testSuccess(3, unittest.NonexistentID)
+
+ team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 1})
+ err := RemoveTeamMember(db.DefaultContext, team, 2)
+ assert.True(t, organization.IsErrLastOrgOwner(err))
+}
+
+func TestIsUsableTeamName(t *testing.T) {
+ require.NoError(t, organization.IsUsableTeamName("usable"))
+ assert.True(t, db.IsErrNameReserved(organization.IsUsableTeamName("new")))
+}
+
+func TestNewTeam(t *testing.T) {
+ require.NoError(t, unittest.PrepareTestDatabase())
+
+ const teamName = "newTeamName"
+ team := &organization.Team{Name: teamName, OrgID: 3}
+ require.NoError(t, NewTeam(db.DefaultContext, team))
+ unittest.AssertExistsAndLoadBean(t, &organization.Team{Name: teamName})
+ unittest.CheckConsistencyFor(t, &organization.Team{}, &user_model.User{ID: team.OrgID})
+}
+
+func TestUpdateTeam(t *testing.T) {
+ // successful update
+ require.NoError(t, unittest.PrepareTestDatabase())
+
+ team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 2})
+ team.LowerName = "newname"
+ team.Name = "newName"
+ team.Description = strings.Repeat("A long description!", 100)
+ team.AccessMode = perm.AccessModeAdmin
+ require.NoError(t, UpdateTeam(db.DefaultContext, team, true, false))
+
+ team = unittest.AssertExistsAndLoadBean(t, &organization.Team{Name: "newName"})
+ assert.True(t, strings.HasPrefix(team.Description, "A long description!"))
+
+ access := unittest.AssertExistsAndLoadBean(t, &access_model.Access{UserID: 4, RepoID: 3})
+ assert.EqualValues(t, perm.AccessModeAdmin, access.Mode)
+
+ unittest.CheckConsistencyFor(t, &organization.Team{ID: team.ID})
+}
+
+func TestUpdateTeam2(t *testing.T) {
+ // update to already-existing team
+ require.NoError(t, unittest.PrepareTestDatabase())
+
+ team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 2})
+ team.LowerName = "owners"
+ team.Name = "Owners"
+ team.Description = strings.Repeat("A long description!", 100)
+ err := UpdateTeam(db.DefaultContext, team, true, false)
+ assert.True(t, organization.IsErrTeamAlreadyExist(err))
+
+ unittest.CheckConsistencyFor(t, &organization.Team{ID: team.ID})
+}
+
+func TestDeleteTeam(t *testing.T) {
+ require.NoError(t, unittest.PrepareTestDatabase())
+
+ team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 2})
+ require.NoError(t, DeleteTeam(db.DefaultContext, team))
+ unittest.AssertNotExistsBean(t, &organization.Team{ID: team.ID})
+ unittest.AssertNotExistsBean(t, &organization.TeamRepo{TeamID: team.ID})
+ unittest.AssertNotExistsBean(t, &organization.TeamUser{TeamID: team.ID})
+
+ // check that team members don't have "leftover" access to repos
+ user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
+ repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3})
+ accessMode, err := access_model.AccessLevel(db.DefaultContext, user, repo)
+ require.NoError(t, err)
+ assert.Less(t, accessMode, perm.AccessModeWrite)
+}
+
+func TestAddTeamMember(t *testing.T) {
+ require.NoError(t, unittest.PrepareTestDatabase())
+
+ test := func(teamID, userID int64) {
+ team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID})
+ require.NoError(t, AddTeamMember(db.DefaultContext, team, userID))
+ unittest.AssertExistsAndLoadBean(t, &organization.TeamUser{UID: userID, TeamID: teamID})
+ unittest.CheckConsistencyFor(t, &organization.Team{ID: teamID}, &user_model.User{ID: team.OrgID})
+ }
+ test(1, 2)
+ test(1, 4)
+ test(3, 2)
+}
+
+func TestRemoveTeamMember(t *testing.T) {
+ require.NoError(t, unittest.PrepareTestDatabase())
+
+ testSuccess := func(teamID, userID int64) {
+ team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID})
+ require.NoError(t, RemoveTeamMember(db.DefaultContext, team, userID))
+ unittest.AssertNotExistsBean(t, &organization.TeamUser{UID: userID, TeamID: teamID})
+ unittest.CheckConsistencyFor(t, &organization.Team{ID: teamID})
+ }
+ testSuccess(1, 4)
+ testSuccess(2, 2)
+ testSuccess(3, 2)
+ testSuccess(3, unittest.NonexistentID)
+
+ team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 1})
+ err := RemoveTeamMember(db.DefaultContext, team, 2)
+ assert.True(t, organization.IsErrLastOrgOwner(err))
+}
+
+func TestRepository_RecalculateAccesses3(t *testing.T) {
+ require.NoError(t, unittest.PrepareTestDatabase())
+ team5 := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 5})
+ user29 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 29})
+
+ has, err := db.GetEngine(db.DefaultContext).Get(&access_model.Access{UserID: 29, RepoID: 23})
+ require.NoError(t, err)
+ assert.False(t, has)
+
+ // adding user29 to team5 should add an explicit access row for repo 23
+ // even though repo 23 is public
+ require.NoError(t, AddTeamMember(db.DefaultContext, team5, user29.ID))
+
+ has, err = db.GetEngine(db.DefaultContext).Get(&access_model.Access{UserID: 29, RepoID: 23})
+ require.NoError(t, err)
+ assert.True(t, has)
+}