mirror of
https://github.com/go-gitea/gitea.git
synced 2025-08-08 09:44:00 +09:00
@ -56,7 +56,7 @@ func TestEditor(t *testing.T) {
|
|||||||
|
|
||||||
func testEditorCreateFile(t *testing.T) {
|
func testEditorCreateFile(t *testing.T) {
|
||||||
session := loginUser(t, "user2")
|
session := loginUser(t, "user2")
|
||||||
testCreateFile(t, session, "user2", "repo1", "master", "test.txt", "Content")
|
testCreateFile(t, session, "user2", "repo1", "master", "", "test.txt", "Content")
|
||||||
testEditorActionPostRequestError(t, session, "/user2/repo1/_new/master/", map[string]string{
|
testEditorActionPostRequestError(t, session, "/user2/repo1/_new/master/", map[string]string{
|
||||||
"tree_path": "test.txt",
|
"tree_path": "test.txt",
|
||||||
"commit_choice": "direct",
|
"commit_choice": "direct",
|
||||||
@ -69,11 +69,16 @@ func testEditorCreateFile(t *testing.T) {
|
|||||||
}, `Branch "master" already exists in this repository.`)
|
}, `Branch "master" already exists in this repository.`)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testCreateFile(t *testing.T, session *TestSession, user, repo, branch, filePath, content string) {
|
func testCreateFile(t *testing.T, session *TestSession, user, repo, baseBranchName, newBranchName, filePath, content string) {
|
||||||
testEditorActionEdit(t, session, user, repo, "_new", branch, "", map[string]string{
|
commitChoice := "direct"
|
||||||
"tree_path": filePath,
|
if newBranchName != "" && newBranchName != baseBranchName {
|
||||||
"content": content,
|
commitChoice = "commit-to-new-branch"
|
||||||
"commit_choice": "direct",
|
}
|
||||||
|
testEditorActionEdit(t, session, user, repo, "_new", baseBranchName, "", map[string]string{
|
||||||
|
"tree_path": filePath,
|
||||||
|
"content": content,
|
||||||
|
"commit_choice": commitChoice,
|
||||||
|
"new_branch_name": newBranchName,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,8 +19,10 @@ import (
|
|||||||
user_model "code.gitea.io/gitea/models/user"
|
user_model "code.gitea.io/gitea/models/user"
|
||||||
"code.gitea.io/gitea/models/webhook"
|
"code.gitea.io/gitea/models/webhook"
|
||||||
"code.gitea.io/gitea/modules/commitstatus"
|
"code.gitea.io/gitea/modules/commitstatus"
|
||||||
|
"code.gitea.io/gitea/modules/git"
|
||||||
"code.gitea.io/gitea/modules/gitrepo"
|
"code.gitea.io/gitea/modules/gitrepo"
|
||||||
"code.gitea.io/gitea/modules/json"
|
"code.gitea.io/gitea/modules/json"
|
||||||
|
"code.gitea.io/gitea/modules/setting"
|
||||||
api "code.gitea.io/gitea/modules/structs"
|
api "code.gitea.io/gitea/modules/structs"
|
||||||
webhook_module "code.gitea.io/gitea/modules/webhook"
|
webhook_module "code.gitea.io/gitea/modules/webhook"
|
||||||
"code.gitea.io/gitea/tests"
|
"code.gitea.io/gitea/tests"
|
||||||
@ -365,7 +367,7 @@ func Test_WebhookPush(t *testing.T) {
|
|||||||
testAPICreateWebhookForRepo(t, session, "user2", "repo1", provider.URL(), "push")
|
testAPICreateWebhookForRepo(t, session, "user2", "repo1", provider.URL(), "push")
|
||||||
|
|
||||||
// 2. trigger the webhook
|
// 2. trigger the webhook
|
||||||
testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push")
|
testCreateFile(t, session, "user2", "repo1", "master", "", "test_webhook_push.md", "# a test file for webhook push")
|
||||||
|
|
||||||
// 3. validate the webhook is triggered
|
// 3. validate the webhook is triggered
|
||||||
assert.Equal(t, "push", triggeredEvent)
|
assert.Equal(t, "push", triggeredEvent)
|
||||||
@ -398,21 +400,90 @@ func Test_WebhookPushDevBranch(t *testing.T) {
|
|||||||
testAPICreateWebhookForRepo(t, session, "user2", "repo1", provider.URL(), "push", "develop")
|
testAPICreateWebhookForRepo(t, session, "user2", "repo1", provider.URL(), "push", "develop")
|
||||||
|
|
||||||
// 2. this should not trigger the webhook
|
// 2. this should not trigger the webhook
|
||||||
testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push")
|
testCreateFile(t, session, "user2", "repo1", "master", "", "test_webhook_push.md", "# a test file for webhook push")
|
||||||
assert.Empty(t, triggeredEvent)
|
assert.Empty(t, triggeredEvent)
|
||||||
assert.Empty(t, payloads)
|
assert.Empty(t, payloads)
|
||||||
|
|
||||||
|
repo1 := unittest.AssertExistsAndLoadBean(t, &repo.Repository{ID: 1})
|
||||||
|
gitRepo, err := gitrepo.OpenRepository(t.Context(), repo1)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
defer gitRepo.Close()
|
||||||
|
|
||||||
|
beforeCommitID, err := gitRepo.GetBranchCommitID("develop")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
// 3. trigger the webhook
|
// 3. trigger the webhook
|
||||||
testCreateFile(t, session, "user2", "repo1", "develop", "test_webhook_push.md", "# a test file for webhook push")
|
testCreateFile(t, session, "user2", "repo1", "develop", "", "test_webhook_push.md", "# a test file for webhook push")
|
||||||
|
|
||||||
|
afterCommitID, err := gitRepo.GetBranchCommitID("develop")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
// 4. validate the webhook is triggered
|
// 4. validate the webhook is triggered
|
||||||
assert.Equal(t, "push", triggeredEvent)
|
assert.Equal(t, "push", triggeredEvent)
|
||||||
assert.Len(t, payloads, 1)
|
assert.Len(t, payloads, 1)
|
||||||
|
assert.Equal(t, "refs/heads/develop", payloads[0].Ref)
|
||||||
|
assert.Equal(t, beforeCommitID, payloads[0].Before)
|
||||||
|
assert.Equal(t, afterCommitID, payloads[0].After)
|
||||||
assert.Equal(t, "repo1", payloads[0].Repo.Name)
|
assert.Equal(t, "repo1", payloads[0].Repo.Name)
|
||||||
assert.Equal(t, "develop", payloads[0].Branch())
|
assert.Equal(t, "develop", payloads[0].Branch())
|
||||||
assert.Equal(t, "user2/repo1", payloads[0].Repo.FullName)
|
assert.Equal(t, "user2/repo1", payloads[0].Repo.FullName)
|
||||||
assert.Len(t, payloads[0].Commits, 1)
|
assert.Len(t, payloads[0].Commits, 1)
|
||||||
|
assert.Equal(t, afterCommitID, payloads[0].Commits[0].ID)
|
||||||
|
assert.Equal(t, setting.AppURL+"user2/repo1/compare/"+beforeCommitID+"..."+afterCommitID, payloads[0].CompareURL)
|
||||||
assert.Equal(t, []string{"test_webhook_push.md"}, payloads[0].Commits[0].Added)
|
assert.Equal(t, []string{"test_webhook_push.md"}, payloads[0].Commits[0].Added)
|
||||||
|
assert.Empty(t, payloads[0].Commits[0].Removed)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_WebhookPushToNewBranch(t *testing.T) {
|
||||||
|
var payloads []api.PushPayload
|
||||||
|
var triggeredEvent string
|
||||||
|
provider := newMockWebhookProvider(func(r *http.Request) {
|
||||||
|
content, _ := io.ReadAll(r.Body)
|
||||||
|
var payload api.PushPayload
|
||||||
|
err := json.Unmarshal(content, &payload)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
payloads = append(payloads, payload)
|
||||||
|
triggeredEvent = "push"
|
||||||
|
}, http.StatusOK)
|
||||||
|
defer provider.Close()
|
||||||
|
|
||||||
|
onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
|
||||||
|
// 1. create a new webhook with special webhook for repo1
|
||||||
|
session := loginUser(t, "user2")
|
||||||
|
|
||||||
|
// only for dev branch
|
||||||
|
testAPICreateWebhookForRepo(t, session, "user2", "repo1", provider.URL(), "push", "new_branch")
|
||||||
|
|
||||||
|
repo1 := unittest.AssertExistsAndLoadBean(t, &repo.Repository{ID: 1})
|
||||||
|
gitRepo, err := gitrepo.OpenRepository(t.Context(), repo1)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
defer gitRepo.Close()
|
||||||
|
|
||||||
|
beforeCommitID, err := gitRepo.GetBranchCommitID("master")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
// 2. trigger the webhook
|
||||||
|
testCreateFile(t, session, "user2", "repo1", "master", "new_branch", "test_webhook_push.md", "# a new push from new branch")
|
||||||
|
|
||||||
|
afterCommitID, err := gitRepo.GetBranchCommitID("new_branch")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
emptyCommitID := git.Sha1ObjectFormat.EmptyObjectID().String()
|
||||||
|
|
||||||
|
// 4. validate the webhook is triggered
|
||||||
|
assert.Equal(t, "push", triggeredEvent)
|
||||||
|
assert.Len(t, payloads, 1)
|
||||||
|
assert.Equal(t, "refs/heads/new_branch", payloads[0].Ref)
|
||||||
|
assert.Equal(t, emptyCommitID, payloads[0].Before)
|
||||||
|
assert.Equal(t, afterCommitID, payloads[0].After)
|
||||||
|
assert.Equal(t, "repo1", payloads[0].Repo.Name)
|
||||||
|
assert.Equal(t, "new_branch", payloads[0].Branch())
|
||||||
|
assert.Equal(t, "user2/repo1", payloads[0].Repo.FullName)
|
||||||
|
assert.Len(t, payloads[0].Commits, 1)
|
||||||
|
assert.Equal(t, afterCommitID, payloads[0].Commits[0].ID)
|
||||||
|
assert.Equal(t, setting.AppURL+"user2/repo1/compare/"+beforeCommitID+"..."+afterCommitID, payloads[0].CompareURL)
|
||||||
|
assert.Equal(t, []string{"test_webhook_push.md"}, payloads[0].Commits[0].Added)
|
||||||
|
assert.Empty(t, payloads[0].Commits[0].Removed)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -878,7 +949,7 @@ func Test_WebhookStatus_NoWrongTrigger(t *testing.T) {
|
|||||||
testCreateWebhookForRepo(t, session, "gitea", "user2", "repo1", provider.URL(), "push_only")
|
testCreateWebhookForRepo(t, session, "gitea", "user2", "repo1", provider.URL(), "push_only")
|
||||||
|
|
||||||
// 2. trigger the webhook with a push action
|
// 2. trigger the webhook with a push action
|
||||||
testCreateFile(t, session, "user2", "repo1", "master", "test_webhook_push.md", "# a test file for webhook push")
|
testCreateFile(t, session, "user2", "repo1", "master", "", "test_webhook_push.md", "# a test file for webhook push")
|
||||||
|
|
||||||
// 3. validate the webhook is triggered with right event
|
// 3. validate the webhook is triggered with right event
|
||||||
assert.Equal(t, "push", trigger)
|
assert.Equal(t, "push", trigger)
|
||||||
|
Reference in New Issue
Block a user