mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +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