123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410 |
- // Copyright 2017 The Gitea Authors. All rights reserved.
- // Use of this source code is governed by a MIT-style
- // license that can be found in the LICENSE file.
-
- package repo
-
- import (
- "io/ioutil"
- "net/http"
- "os"
- "testing"
-
- "code.gitea.io/gitea/models"
- "code.gitea.io/gitea/modules/auth"
- "code.gitea.io/gitea/modules/context"
- "code.gitea.io/gitea/modules/setting"
- "code.gitea.io/gitea/modules/test"
-
- "github.com/stretchr/testify/assert"
- )
-
- func createSSHAuthorizedKeysTmpPath(t *testing.T) func() {
- tmpDir, err := ioutil.TempDir("", "tmp-ssh")
- if err != nil {
- assert.Fail(t, "Unable to create temporary directory: %v", err)
- return nil
- }
-
- oldPath := setting.SSH.RootPath
- setting.SSH.RootPath = tmpDir
-
- return func() {
- setting.SSH.RootPath = oldPath
- os.RemoveAll(tmpDir)
- }
- }
-
- func TestAddReadOnlyDeployKey(t *testing.T) {
- if deferable := createSSHAuthorizedKeysTmpPath(t); deferable != nil {
- defer deferable()
- } else {
- return
- }
- models.PrepareTestEnv(t)
-
- ctx := test.MockContext(t, "user2/repo1/settings/keys")
-
- test.LoadUser(t, ctx, 2)
- test.LoadRepo(t, ctx, 2)
-
- addKeyForm := auth.AddKeyForm{
- Title: "read-only",
- Content: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDAu7tvIvX6ZHrRXuZNfkR3XLHSsuCK9Zn3X58lxBcQzuo5xZgB6vRwwm/QtJuF+zZPtY5hsQILBLmF+BZ5WpKZp1jBeSjH2G7lxet9kbcH+kIVj0tPFEoyKI9wvWqIwC4prx/WVk2wLTJjzBAhyNxfEq7C9CeiX9pQEbEqJfkKCQ== nocomment\n",
- }
- DeployKeysPost(ctx, addKeyForm)
- assert.EqualValues(t, http.StatusFound, ctx.Resp.Status())
-
- models.AssertExistsAndLoadBean(t, &models.DeployKey{
- Name: addKeyForm.Title,
- Content: addKeyForm.Content,
- Mode: models.AccessModeRead,
- })
- }
-
- func TestAddReadWriteOnlyDeployKey(t *testing.T) {
- if deferable := createSSHAuthorizedKeysTmpPath(t); deferable != nil {
- defer deferable()
- } else {
- return
- }
-
- models.PrepareTestEnv(t)
-
- ctx := test.MockContext(t, "user2/repo1/settings/keys")
-
- test.LoadUser(t, ctx, 2)
- test.LoadRepo(t, ctx, 2)
-
- addKeyForm := auth.AddKeyForm{
- Title: "read-write",
- Content: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDAu7tvIvX6ZHrRXuZNfkR3XLHSsuCK9Zn3X58lxBcQzuo5xZgB6vRwwm/QtJuF+zZPtY5hsQILBLmF+BZ5WpKZp1jBeSjH2G7lxet9kbcH+kIVj0tPFEoyKI9wvWqIwC4prx/WVk2wLTJjzBAhyNxfEq7C9CeiX9pQEbEqJfkKCQ== nocomment\n",
- IsWritable: true,
- }
- DeployKeysPost(ctx, addKeyForm)
- assert.EqualValues(t, http.StatusFound, ctx.Resp.Status())
-
- models.AssertExistsAndLoadBean(t, &models.DeployKey{
- Name: addKeyForm.Title,
- Content: addKeyForm.Content,
- Mode: models.AccessModeWrite,
- })
- }
-
- func TestCollaborationPost(t *testing.T) {
-
- models.PrepareTestEnv(t)
- ctx := test.MockContext(t, "user2/repo1/issues/labels")
- test.LoadUser(t, ctx, 2)
- test.LoadUser(t, ctx, 4)
- test.LoadRepo(t, ctx, 1)
-
- ctx.Req.Form.Set("collaborator", "user4")
-
- u := &models.User{
- LowerName: "user2",
- Type: models.UserTypeIndividual,
- }
-
- re := &models.Repository{
- ID: 2,
- Owner: u,
- }
-
- repo := &context.Repository{
- Owner: u,
- Repository: re,
- }
-
- ctx.Repo = repo
-
- CollaborationPost(ctx)
-
- assert.EqualValues(t, http.StatusFound, ctx.Resp.Status())
-
- exists, err := re.IsCollaborator(4)
- assert.NoError(t, err)
- assert.True(t, exists)
- }
-
- func TestCollaborationPost_InactiveUser(t *testing.T) {
-
- models.PrepareTestEnv(t)
- ctx := test.MockContext(t, "user2/repo1/issues/labels")
- test.LoadUser(t, ctx, 2)
- test.LoadUser(t, ctx, 9)
- test.LoadRepo(t, ctx, 1)
-
- ctx.Req.Form.Set("collaborator", "user9")
-
- repo := &context.Repository{
- Owner: &models.User{
- LowerName: "user2",
- },
- }
-
- ctx.Repo = repo
-
- CollaborationPost(ctx)
-
- assert.EqualValues(t, http.StatusFound, ctx.Resp.Status())
- assert.NotEmpty(t, ctx.Flash.ErrorMsg)
- }
-
- func TestCollaborationPost_AddCollaboratorTwice(t *testing.T) {
-
- models.PrepareTestEnv(t)
- ctx := test.MockContext(t, "user2/repo1/issues/labels")
- test.LoadUser(t, ctx, 2)
- test.LoadUser(t, ctx, 4)
- test.LoadRepo(t, ctx, 1)
-
- ctx.Req.Form.Set("collaborator", "user4")
-
- u := &models.User{
- LowerName: "user2",
- Type: models.UserTypeIndividual,
- }
-
- re := &models.Repository{
- ID: 2,
- Owner: u,
- }
-
- repo := &context.Repository{
- Owner: u,
- Repository: re,
- }
-
- ctx.Repo = repo
-
- CollaborationPost(ctx)
-
- assert.EqualValues(t, http.StatusFound, ctx.Resp.Status())
-
- exists, err := re.IsCollaborator(4)
- assert.NoError(t, err)
- assert.True(t, exists)
-
- // Try adding the same collaborator again
- CollaborationPost(ctx)
-
- assert.EqualValues(t, http.StatusFound, ctx.Resp.Status())
- assert.NotEmpty(t, ctx.Flash.ErrorMsg)
- }
-
- func TestCollaborationPost_NonExistentUser(t *testing.T) {
-
- models.PrepareTestEnv(t)
- ctx := test.MockContext(t, "user2/repo1/issues/labels")
- test.LoadUser(t, ctx, 2)
- test.LoadRepo(t, ctx, 1)
-
- ctx.Req.Form.Set("collaborator", "user34")
-
- repo := &context.Repository{
- Owner: &models.User{
- LowerName: "user2",
- },
- }
-
- ctx.Repo = repo
-
- CollaborationPost(ctx)
-
- assert.EqualValues(t, http.StatusFound, ctx.Resp.Status())
- assert.NotEmpty(t, ctx.Flash.ErrorMsg)
- }
-
- func TestAddTeamPost(t *testing.T) {
- models.PrepareTestEnv(t)
- ctx := test.MockContext(t, "org26/repo43")
-
- ctx.Req.Form.Set("team", "team11")
-
- org := &models.User{
- LowerName: "org26",
- Type: models.UserTypeOrganization,
- }
-
- team := &models.Team{
- ID: 11,
- OrgID: 26,
- }
-
- re := &models.Repository{
- ID: 43,
- Owner: org,
- OwnerID: 26,
- }
-
- repo := &context.Repository{
- Owner: &models.User{
- ID: 26,
- LowerName: "org26",
- RepoAdminChangeTeamAccess: true,
- },
- Repository: re,
- }
-
- ctx.Repo = repo
-
- AddTeamPost(ctx)
-
- assert.True(t, team.HasRepository(re.ID))
- assert.EqualValues(t, http.StatusFound, ctx.Resp.Status())
- assert.Empty(t, ctx.Flash.ErrorMsg)
- }
-
- func TestAddTeamPost_NotAllowed(t *testing.T) {
- models.PrepareTestEnv(t)
- ctx := test.MockContext(t, "org26/repo43")
-
- ctx.Req.Form.Set("team", "team11")
-
- org := &models.User{
- LowerName: "org26",
- Type: models.UserTypeOrganization,
- }
-
- team := &models.Team{
- ID: 11,
- OrgID: 26,
- }
-
- re := &models.Repository{
- ID: 43,
- Owner: org,
- OwnerID: 26,
- }
-
- repo := &context.Repository{
- Owner: &models.User{
- ID: 26,
- LowerName: "org26",
- RepoAdminChangeTeamAccess: false,
- },
- Repository: re,
- }
-
- ctx.Repo = repo
-
- AddTeamPost(ctx)
-
- assert.False(t, team.HasRepository(re.ID))
- assert.EqualValues(t, http.StatusFound, ctx.Resp.Status())
- assert.NotEmpty(t, ctx.Flash.ErrorMsg)
-
- }
-
- func TestAddTeamPost_AddTeamTwice(t *testing.T) {
- models.PrepareTestEnv(t)
- ctx := test.MockContext(t, "org26/repo43")
-
- ctx.Req.Form.Set("team", "team11")
-
- org := &models.User{
- LowerName: "org26",
- Type: models.UserTypeOrganization,
- }
-
- team := &models.Team{
- ID: 11,
- OrgID: 26,
- }
-
- re := &models.Repository{
- ID: 43,
- Owner: org,
- OwnerID: 26,
- }
-
- repo := &context.Repository{
- Owner: &models.User{
- ID: 26,
- LowerName: "org26",
- RepoAdminChangeTeamAccess: true,
- },
- Repository: re,
- }
-
- ctx.Repo = repo
-
- AddTeamPost(ctx)
-
- AddTeamPost(ctx)
- assert.True(t, team.HasRepository(re.ID))
- assert.EqualValues(t, http.StatusFound, ctx.Resp.Status())
- assert.NotEmpty(t, ctx.Flash.ErrorMsg)
- }
-
- func TestAddTeamPost_NonExistentTeam(t *testing.T) {
- models.PrepareTestEnv(t)
- ctx := test.MockContext(t, "org26/repo43")
-
- ctx.Req.Form.Set("team", "team-non-existent")
-
- org := &models.User{
- LowerName: "org26",
- Type: models.UserTypeOrganization,
- }
-
- re := &models.Repository{
- ID: 43,
- Owner: org,
- OwnerID: 26,
- }
-
- repo := &context.Repository{
- Owner: &models.User{
- ID: 26,
- LowerName: "org26",
- RepoAdminChangeTeamAccess: true,
- },
- Repository: re,
- }
-
- ctx.Repo = repo
-
- AddTeamPost(ctx)
- assert.EqualValues(t, http.StatusFound, ctx.Resp.Status())
- assert.NotEmpty(t, ctx.Flash.ErrorMsg)
- }
-
- func TestDeleteTeam(t *testing.T) {
- models.PrepareTestEnv(t)
- ctx := test.MockContext(t, "org3/team1/repo3")
-
- ctx.Req.Form.Set("id", "2")
-
- org := &models.User{
- LowerName: "org3",
- Type: models.UserTypeOrganization,
- }
-
- team := &models.Team{
- ID: 2,
- OrgID: 3,
- }
-
- re := &models.Repository{
- ID: 3,
- Owner: org,
- OwnerID: 3,
- }
-
- repo := &context.Repository{
- Owner: &models.User{
- ID: 3,
- LowerName: "org3",
- RepoAdminChangeTeamAccess: true,
- },
- Repository: re,
- }
-
- ctx.Repo = repo
-
- DeleteTeam(ctx)
-
- assert.False(t, team.HasRepository(re.ID))
- }
|