Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
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.
187 lines
4.2 KiB
187 lines
4.2 KiB
// 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 ( |
|
"net/http" |
|
"testing" |
|
|
|
"code.gitea.io/gitea/models" |
|
"code.gitea.io/gitea/modules/auth" |
|
"code.gitea.io/gitea/modules/context" |
|
"code.gitea.io/gitea/modules/test" |
|
|
|
"github.com/stretchr/testify/assert" |
|
) |
|
|
|
func TestAddReadOnlyDeployKey(t *testing.T) { |
|
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) { |
|
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) |
|
}
|
|
|