mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 20:36:07 +01:00 
			
		
		
		
	Add webhook assigning test and fix possible bug (#34420)
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		@@ -54,6 +54,8 @@ func ToggleAssigneeWithNotify(ctx context.Context, issue *issues_model.Issue, do
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return false, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	issue.AssigneeID = assigneeID
 | 
			
		||||
	issue.Assignee = assignee
 | 
			
		||||
 | 
			
		||||
	notify_service.IssueChangeAssignee(ctx, doer, issue, assignee, removed, comment)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -151,6 +151,15 @@ func testNewIssue(t *testing.T, session *TestSession, user, repo, title, content
 | 
			
		||||
	return issueURL
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func testIssueAssign(t *testing.T, session *TestSession, repoLink string, issueID, assigneeID int64) {
 | 
			
		||||
	req := NewRequestWithValues(t, "POST", fmt.Sprintf(repoLink+"/issues/assignee?issue_ids=%d", issueID), map[string]string{
 | 
			
		||||
		"_csrf":  GetUserCSRFToken(t, session),
 | 
			
		||||
		"id":     strconv.FormatInt(assigneeID, 10),
 | 
			
		||||
		"action": "", // empty action means assign
 | 
			
		||||
	})
 | 
			
		||||
	session.MakeRequest(t, req, http.StatusOK)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func testIssueAddComment(t *testing.T, session *TestSession, issueURL, content, status string) int64 {
 | 
			
		||||
	req := NewRequest(t, "GET", issueURL)
 | 
			
		||||
	resp := session.MakeRequest(t, req, http.StatusOK)
 | 
			
		||||
 
 | 
			
		||||
@@ -131,19 +131,19 @@ func (m *mockWebhookProvider) Close() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Test_WebhookCreate(t *testing.T) {
 | 
			
		||||
	var payloads []api.CreatePayload
 | 
			
		||||
	var triggeredEvent string
 | 
			
		||||
	provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
		content, _ := io.ReadAll(r.Body)
 | 
			
		||||
		var payload api.CreatePayload
 | 
			
		||||
		err := json.Unmarshal(content, &payload)
 | 
			
		||||
		assert.NoError(t, err)
 | 
			
		||||
		payloads = append(payloads, payload)
 | 
			
		||||
		triggeredEvent = string(webhook_module.HookEventCreate)
 | 
			
		||||
	}, http.StatusOK)
 | 
			
		||||
	defer provider.Close()
 | 
			
		||||
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		var payloads []api.CreatePayload
 | 
			
		||||
		var triggeredEvent string
 | 
			
		||||
		provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
			content, _ := io.ReadAll(r.Body)
 | 
			
		||||
			var payload api.CreatePayload
 | 
			
		||||
			err := json.Unmarshal(content, &payload)
 | 
			
		||||
			assert.NoError(t, err)
 | 
			
		||||
			payloads = append(payloads, payload)
 | 
			
		||||
			triggeredEvent = string(webhook_module.HookEventCreate)
 | 
			
		||||
		}, http.StatusOK)
 | 
			
		||||
		defer provider.Close()
 | 
			
		||||
 | 
			
		||||
		// 1. create a new webhook with special webhook for repo1
 | 
			
		||||
		session := loginUser(t, "user2")
 | 
			
		||||
 | 
			
		||||
@@ -163,19 +163,19 @@ func Test_WebhookCreate(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Test_WebhookDelete(t *testing.T) {
 | 
			
		||||
	var payloads []api.DeletePayload
 | 
			
		||||
	var triggeredEvent string
 | 
			
		||||
	provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
		content, _ := io.ReadAll(r.Body)
 | 
			
		||||
		var payload api.DeletePayload
 | 
			
		||||
		err := json.Unmarshal(content, &payload)
 | 
			
		||||
		assert.NoError(t, err)
 | 
			
		||||
		payloads = append(payloads, payload)
 | 
			
		||||
		triggeredEvent = "delete"
 | 
			
		||||
	}, http.StatusOK)
 | 
			
		||||
	defer provider.Close()
 | 
			
		||||
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		var payloads []api.DeletePayload
 | 
			
		||||
		var triggeredEvent string
 | 
			
		||||
		provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
			content, _ := io.ReadAll(r.Body)
 | 
			
		||||
			var payload api.DeletePayload
 | 
			
		||||
			err := json.Unmarshal(content, &payload)
 | 
			
		||||
			assert.NoError(t, err)
 | 
			
		||||
			payloads = append(payloads, payload)
 | 
			
		||||
			triggeredEvent = "delete"
 | 
			
		||||
		}, http.StatusOK)
 | 
			
		||||
		defer provider.Close()
 | 
			
		||||
 | 
			
		||||
		// 1. create a new webhook with special webhook for repo1
 | 
			
		||||
		session := loginUser(t, "user2")
 | 
			
		||||
 | 
			
		||||
@@ -196,19 +196,19 @@ func Test_WebhookDelete(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Test_WebhookFork(t *testing.T) {
 | 
			
		||||
	var payloads []api.ForkPayload
 | 
			
		||||
	var triggeredEvent string
 | 
			
		||||
	provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
		content, _ := io.ReadAll(r.Body)
 | 
			
		||||
		var payload api.ForkPayload
 | 
			
		||||
		err := json.Unmarshal(content, &payload)
 | 
			
		||||
		assert.NoError(t, err)
 | 
			
		||||
		payloads = append(payloads, payload)
 | 
			
		||||
		triggeredEvent = "fork"
 | 
			
		||||
	}, http.StatusOK)
 | 
			
		||||
	defer provider.Close()
 | 
			
		||||
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		var payloads []api.ForkPayload
 | 
			
		||||
		var triggeredEvent string
 | 
			
		||||
		provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
			content, _ := io.ReadAll(r.Body)
 | 
			
		||||
			var payload api.ForkPayload
 | 
			
		||||
			err := json.Unmarshal(content, &payload)
 | 
			
		||||
			assert.NoError(t, err)
 | 
			
		||||
			payloads = append(payloads, payload)
 | 
			
		||||
			triggeredEvent = "fork"
 | 
			
		||||
		}, http.StatusOK)
 | 
			
		||||
		defer provider.Close()
 | 
			
		||||
 | 
			
		||||
		// 1. create a new webhook with special webhook for repo1
 | 
			
		||||
		session := loginUser(t, "user1")
 | 
			
		||||
 | 
			
		||||
@@ -228,19 +228,19 @@ func Test_WebhookFork(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Test_WebhookIssueComment(t *testing.T) {
 | 
			
		||||
	var payloads []api.IssueCommentPayload
 | 
			
		||||
	var triggeredEvent string
 | 
			
		||||
	provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
		content, _ := io.ReadAll(r.Body)
 | 
			
		||||
		var payload api.IssueCommentPayload
 | 
			
		||||
		err := json.Unmarshal(content, &payload)
 | 
			
		||||
		assert.NoError(t, err)
 | 
			
		||||
		payloads = append(payloads, payload)
 | 
			
		||||
		triggeredEvent = "issue_comment"
 | 
			
		||||
	}, http.StatusOK)
 | 
			
		||||
	defer provider.Close()
 | 
			
		||||
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		var payloads []api.IssueCommentPayload
 | 
			
		||||
		var triggeredEvent string
 | 
			
		||||
		provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
			content, _ := io.ReadAll(r.Body)
 | 
			
		||||
			var payload api.IssueCommentPayload
 | 
			
		||||
			err := json.Unmarshal(content, &payload)
 | 
			
		||||
			assert.NoError(t, err)
 | 
			
		||||
			payloads = append(payloads, payload)
 | 
			
		||||
			triggeredEvent = "issue_comment"
 | 
			
		||||
		}, http.StatusOK)
 | 
			
		||||
		defer provider.Close()
 | 
			
		||||
 | 
			
		||||
		// 1. create a new webhook with special webhook for repo1
 | 
			
		||||
		session := loginUser(t, "user2")
 | 
			
		||||
 | 
			
		||||
@@ -312,19 +312,19 @@ func Test_WebhookIssueComment(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Test_WebhookRelease(t *testing.T) {
 | 
			
		||||
	var payloads []api.ReleasePayload
 | 
			
		||||
	var triggeredEvent string
 | 
			
		||||
	provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
		content, _ := io.ReadAll(r.Body)
 | 
			
		||||
		var payload api.ReleasePayload
 | 
			
		||||
		err := json.Unmarshal(content, &payload)
 | 
			
		||||
		assert.NoError(t, err)
 | 
			
		||||
		payloads = append(payloads, payload)
 | 
			
		||||
		triggeredEvent = "release"
 | 
			
		||||
	}, http.StatusOK)
 | 
			
		||||
	defer provider.Close()
 | 
			
		||||
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		var payloads []api.ReleasePayload
 | 
			
		||||
		var triggeredEvent string
 | 
			
		||||
		provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
			content, _ := io.ReadAll(r.Body)
 | 
			
		||||
			var payload api.ReleasePayload
 | 
			
		||||
			err := json.Unmarshal(content, &payload)
 | 
			
		||||
			assert.NoError(t, err)
 | 
			
		||||
			payloads = append(payloads, payload)
 | 
			
		||||
			triggeredEvent = "release"
 | 
			
		||||
		}, http.StatusOK)
 | 
			
		||||
		defer provider.Close()
 | 
			
		||||
 | 
			
		||||
		// 1. create a new webhook with special webhook for repo1
 | 
			
		||||
		session := loginUser(t, "user2")
 | 
			
		||||
 | 
			
		||||
@@ -345,19 +345,19 @@ func Test_WebhookRelease(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Test_WebhookPush(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) {
 | 
			
		||||
		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()
 | 
			
		||||
 | 
			
		||||
		// 1. create a new webhook with special webhook for repo1
 | 
			
		||||
		session := loginUser(t, "user2")
 | 
			
		||||
 | 
			
		||||
@@ -416,19 +416,19 @@ func Test_WebhookPushDevBranch(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Test_WebhookIssue(t *testing.T) {
 | 
			
		||||
	var payloads []api.IssuePayload
 | 
			
		||||
	var triggeredEvent string
 | 
			
		||||
	provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
		content, _ := io.ReadAll(r.Body)
 | 
			
		||||
		var payload api.IssuePayload
 | 
			
		||||
		err := json.Unmarshal(content, &payload)
 | 
			
		||||
		assert.NoError(t, err)
 | 
			
		||||
		payloads = append(payloads, payload)
 | 
			
		||||
		triggeredEvent = "issues"
 | 
			
		||||
	}, http.StatusOK)
 | 
			
		||||
	defer provider.Close()
 | 
			
		||||
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		var payloads []api.IssuePayload
 | 
			
		||||
		var triggeredEvent string
 | 
			
		||||
		provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
			content, _ := io.ReadAll(r.Body)
 | 
			
		||||
			var payload api.IssuePayload
 | 
			
		||||
			err := json.Unmarshal(content, &payload)
 | 
			
		||||
			assert.NoError(t, err)
 | 
			
		||||
			payloads = append(payloads, payload)
 | 
			
		||||
			triggeredEvent = "issues"
 | 
			
		||||
		}, http.StatusOK)
 | 
			
		||||
		defer provider.Close()
 | 
			
		||||
 | 
			
		||||
		// 1. create a new webhook with special webhook for repo1
 | 
			
		||||
		session := loginUser(t, "user2")
 | 
			
		||||
 | 
			
		||||
@@ -445,6 +445,45 @@ func Test_WebhookIssue(t *testing.T) {
 | 
			
		||||
		assert.Equal(t, "user2/repo1", payloads[0].Issue.Repo.FullName)
 | 
			
		||||
		assert.Equal(t, "Title1", payloads[0].Issue.Title)
 | 
			
		||||
		assert.Equal(t, "Description1", payloads[0].Issue.Body)
 | 
			
		||||
		assert.Positive(t, payloads[0].Issue.Created.Unix())
 | 
			
		||||
		assert.Positive(t, payloads[0].Issue.Updated.Unix())
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Test_WebhookIssueAssign(t *testing.T) {
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		var payloads []api.PullRequestPayload
 | 
			
		||||
		var triggeredEvent string
 | 
			
		||||
		provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
			content, _ := io.ReadAll(r.Body)
 | 
			
		||||
			var payload api.PullRequestPayload
 | 
			
		||||
			err := json.Unmarshal(content, &payload)
 | 
			
		||||
			assert.NoError(t, err)
 | 
			
		||||
			payloads = append(payloads, payload)
 | 
			
		||||
			triggeredEvent = "pull_request_assign"
 | 
			
		||||
		}, http.StatusOK)
 | 
			
		||||
		defer provider.Close()
 | 
			
		||||
 | 
			
		||||
		user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
 | 
			
		||||
		repo1 := unittest.AssertExistsAndLoadBean(t, &repo.Repository{ID: 1})
 | 
			
		||||
 | 
			
		||||
		// 1. create a new webhook with special webhook for repo1
 | 
			
		||||
		session := loginUser(t, "user2")
 | 
			
		||||
 | 
			
		||||
		testAPICreateWebhookForRepo(t, session, "user2", "repo1", provider.URL(), "pull_request_assign")
 | 
			
		||||
 | 
			
		||||
		// 2. trigger the webhook, issue 2 is a pull request
 | 
			
		||||
		testIssueAssign(t, session, repo1.Link(), 2, user2.ID)
 | 
			
		||||
 | 
			
		||||
		// 3. validate the webhook is triggered
 | 
			
		||||
		assert.Equal(t, "pull_request_assign", triggeredEvent)
 | 
			
		||||
		assert.Len(t, payloads, 1)
 | 
			
		||||
		assert.EqualValues(t, "assigned", payloads[0].Action)
 | 
			
		||||
		assert.Equal(t, "repo1", payloads[0].PullRequest.Base.Repository.Name)
 | 
			
		||||
		assert.Equal(t, "user2/repo1", payloads[0].PullRequest.Base.Repository.FullName)
 | 
			
		||||
		assert.Equal(t, "issue2", payloads[0].PullRequest.Title)
 | 
			
		||||
		assert.Equal(t, "content for the second issue", payloads[0].PullRequest.Body)
 | 
			
		||||
		assert.Equal(t, user2.ID, payloads[0].PullRequest.Assignee.ID)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -521,19 +560,19 @@ func Test_WebhookIssueMilestone(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Test_WebhookPullRequest(t *testing.T) {
 | 
			
		||||
	var payloads []api.PullRequestPayload
 | 
			
		||||
	var triggeredEvent string
 | 
			
		||||
	provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
		content, _ := io.ReadAll(r.Body)
 | 
			
		||||
		var payload api.PullRequestPayload
 | 
			
		||||
		err := json.Unmarshal(content, &payload)
 | 
			
		||||
		assert.NoError(t, err)
 | 
			
		||||
		payloads = append(payloads, payload)
 | 
			
		||||
		triggeredEvent = "pull_request"
 | 
			
		||||
	}, http.StatusOK)
 | 
			
		||||
	defer provider.Close()
 | 
			
		||||
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		var payloads []api.PullRequestPayload
 | 
			
		||||
		var triggeredEvent string
 | 
			
		||||
		provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
			content, _ := io.ReadAll(r.Body)
 | 
			
		||||
			var payload api.PullRequestPayload
 | 
			
		||||
			err := json.Unmarshal(content, &payload)
 | 
			
		||||
			assert.NoError(t, err)
 | 
			
		||||
			payloads = append(payloads, payload)
 | 
			
		||||
			triggeredEvent = "pull_request"
 | 
			
		||||
		}, http.StatusOK)
 | 
			
		||||
		defer provider.Close()
 | 
			
		||||
 | 
			
		||||
		// 1. create a new webhook with special webhook for repo1
 | 
			
		||||
		session := loginUser(t, "user2")
 | 
			
		||||
 | 
			
		||||
@@ -558,19 +597,19 @@ func Test_WebhookPullRequest(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Test_WebhookPullRequestComment(t *testing.T) {
 | 
			
		||||
	var payloads []api.IssueCommentPayload
 | 
			
		||||
	var triggeredEvent string
 | 
			
		||||
	provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
		content, _ := io.ReadAll(r.Body)
 | 
			
		||||
		var payload api.IssueCommentPayload
 | 
			
		||||
		err := json.Unmarshal(content, &payload)
 | 
			
		||||
		assert.NoError(t, err)
 | 
			
		||||
		payloads = append(payloads, payload)
 | 
			
		||||
		triggeredEvent = "pull_request_comment"
 | 
			
		||||
	}, http.StatusOK)
 | 
			
		||||
	defer provider.Close()
 | 
			
		||||
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		var payloads []api.IssueCommentPayload
 | 
			
		||||
		var triggeredEvent string
 | 
			
		||||
		provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
			content, _ := io.ReadAll(r.Body)
 | 
			
		||||
			var payload api.IssueCommentPayload
 | 
			
		||||
			err := json.Unmarshal(content, &payload)
 | 
			
		||||
			assert.NoError(t, err)
 | 
			
		||||
			payloads = append(payloads, payload)
 | 
			
		||||
			triggeredEvent = "pull_request_comment"
 | 
			
		||||
		}, http.StatusOK)
 | 
			
		||||
		defer provider.Close()
 | 
			
		||||
 | 
			
		||||
		// 1. create a new webhook with special webhook for repo1
 | 
			
		||||
		session := loginUser(t, "user2")
 | 
			
		||||
 | 
			
		||||
@@ -596,19 +635,19 @@ func Test_WebhookPullRequestComment(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Test_WebhookWiki(t *testing.T) {
 | 
			
		||||
	var payloads []api.WikiPayload
 | 
			
		||||
	var triggeredEvent string
 | 
			
		||||
	provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
		content, _ := io.ReadAll(r.Body)
 | 
			
		||||
		var payload api.WikiPayload
 | 
			
		||||
		err := json.Unmarshal(content, &payload)
 | 
			
		||||
		assert.NoError(t, err)
 | 
			
		||||
		payloads = append(payloads, payload)
 | 
			
		||||
		triggeredEvent = "wiki"
 | 
			
		||||
	}, http.StatusOK)
 | 
			
		||||
	defer provider.Close()
 | 
			
		||||
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		var payloads []api.WikiPayload
 | 
			
		||||
		var triggeredEvent string
 | 
			
		||||
		provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
			content, _ := io.ReadAll(r.Body)
 | 
			
		||||
			var payload api.WikiPayload
 | 
			
		||||
			err := json.Unmarshal(content, &payload)
 | 
			
		||||
			assert.NoError(t, err)
 | 
			
		||||
			payloads = append(payloads, payload)
 | 
			
		||||
			triggeredEvent = "wiki"
 | 
			
		||||
		}, http.StatusOK)
 | 
			
		||||
		defer provider.Close()
 | 
			
		||||
 | 
			
		||||
		// 1. create a new webhook with special webhook for repo1
 | 
			
		||||
		session := loginUser(t, "user2")
 | 
			
		||||
 | 
			
		||||
@@ -628,19 +667,19 @@ func Test_WebhookWiki(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Test_WebhookRepository(t *testing.T) {
 | 
			
		||||
	var payloads []api.RepositoryPayload
 | 
			
		||||
	var triggeredEvent string
 | 
			
		||||
	provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
		content, _ := io.ReadAll(r.Body)
 | 
			
		||||
		var payload api.RepositoryPayload
 | 
			
		||||
		err := json.Unmarshal(content, &payload)
 | 
			
		||||
		assert.NoError(t, err)
 | 
			
		||||
		payloads = append(payloads, payload)
 | 
			
		||||
		triggeredEvent = "repository"
 | 
			
		||||
	}, http.StatusOK)
 | 
			
		||||
	defer provider.Close()
 | 
			
		||||
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		var payloads []api.RepositoryPayload
 | 
			
		||||
		var triggeredEvent string
 | 
			
		||||
		provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
			content, _ := io.ReadAll(r.Body)
 | 
			
		||||
			var payload api.RepositoryPayload
 | 
			
		||||
			err := json.Unmarshal(content, &payload)
 | 
			
		||||
			assert.NoError(t, err)
 | 
			
		||||
			payloads = append(payloads, payload)
 | 
			
		||||
			triggeredEvent = "repository"
 | 
			
		||||
		}, http.StatusOK)
 | 
			
		||||
		defer provider.Close()
 | 
			
		||||
 | 
			
		||||
		// 1. create a new webhook with special webhook for repo1
 | 
			
		||||
		session := loginUser(t, "user1")
 | 
			
		||||
 | 
			
		||||
@@ -660,19 +699,19 @@ func Test_WebhookRepository(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Test_WebhookPackage(t *testing.T) {
 | 
			
		||||
	var payloads []api.PackagePayload
 | 
			
		||||
	var triggeredEvent string
 | 
			
		||||
	provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
		content, _ := io.ReadAll(r.Body)
 | 
			
		||||
		var payload api.PackagePayload
 | 
			
		||||
		err := json.Unmarshal(content, &payload)
 | 
			
		||||
		assert.NoError(t, err)
 | 
			
		||||
		payloads = append(payloads, payload)
 | 
			
		||||
		triggeredEvent = "package"
 | 
			
		||||
	}, http.StatusOK)
 | 
			
		||||
	defer provider.Close()
 | 
			
		||||
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		var payloads []api.PackagePayload
 | 
			
		||||
		var triggeredEvent string
 | 
			
		||||
		provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
			content, _ := io.ReadAll(r.Body)
 | 
			
		||||
			var payload api.PackagePayload
 | 
			
		||||
			err := json.Unmarshal(content, &payload)
 | 
			
		||||
			assert.NoError(t, err)
 | 
			
		||||
			payloads = append(payloads, payload)
 | 
			
		||||
			triggeredEvent = "package"
 | 
			
		||||
		}, http.StatusOK)
 | 
			
		||||
		defer provider.Close()
 | 
			
		||||
 | 
			
		||||
		// 1. create a new webhook with special webhook for repo1
 | 
			
		||||
		session := loginUser(t, "user1")
 | 
			
		||||
 | 
			
		||||
@@ -697,24 +736,24 @@ func Test_WebhookPackage(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Test_WebhookStatus(t *testing.T) {
 | 
			
		||||
	var payloads []api.CommitStatusPayload
 | 
			
		||||
	var triggeredEvent string
 | 
			
		||||
	provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
		assert.Contains(t, r.Header["X-Github-Event-Type"], "status", "X-GitHub-Event-Type should contain status")
 | 
			
		||||
		assert.Contains(t, r.Header["X-Github-Hook-Installation-Target-Type"], "repository", "X-GitHub-Hook-Installation-Target-Type should contain repository")
 | 
			
		||||
		assert.Contains(t, r.Header["X-Gitea-Event-Type"], "status", "X-Gitea-Event-Type should contain status")
 | 
			
		||||
		assert.Contains(t, r.Header["X-Gitea-Hook-Installation-Target-Type"], "repository", "X-Gitea-Hook-Installation-Target-Type should contain repository")
 | 
			
		||||
		assert.Contains(t, r.Header["X-Gogs-Event-Type"], "status", "X-Gogs-Event-Type should contain status")
 | 
			
		||||
		content, _ := io.ReadAll(r.Body)
 | 
			
		||||
		var payload api.CommitStatusPayload
 | 
			
		||||
		err := json.Unmarshal(content, &payload)
 | 
			
		||||
		assert.NoError(t, err)
 | 
			
		||||
		payloads = append(payloads, payload)
 | 
			
		||||
		triggeredEvent = "status"
 | 
			
		||||
	}, http.StatusOK)
 | 
			
		||||
	defer provider.Close()
 | 
			
		||||
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		var payloads []api.CommitStatusPayload
 | 
			
		||||
		var triggeredEvent string
 | 
			
		||||
		provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
			assert.Contains(t, r.Header["X-Github-Event-Type"], "status", "X-GitHub-Event-Type should contain status")
 | 
			
		||||
			assert.Contains(t, r.Header["X-Github-Hook-Installation-Target-Type"], "repository", "X-GitHub-Hook-Installation-Target-Type should contain repository")
 | 
			
		||||
			assert.Contains(t, r.Header["X-Gitea-Event-Type"], "status", "X-Gitea-Event-Type should contain status")
 | 
			
		||||
			assert.Contains(t, r.Header["X-Gitea-Hook-Installation-Target-Type"], "repository", "X-Gitea-Hook-Installation-Target-Type should contain repository")
 | 
			
		||||
			assert.Contains(t, r.Header["X-Gogs-Event-Type"], "status", "X-Gogs-Event-Type should contain status")
 | 
			
		||||
			content, _ := io.ReadAll(r.Body)
 | 
			
		||||
			var payload api.CommitStatusPayload
 | 
			
		||||
			err := json.Unmarshal(content, &payload)
 | 
			
		||||
			assert.NoError(t, err)
 | 
			
		||||
			payloads = append(payloads, payload)
 | 
			
		||||
			triggeredEvent = "status"
 | 
			
		||||
		}, http.StatusOK)
 | 
			
		||||
		defer provider.Close()
 | 
			
		||||
 | 
			
		||||
		// 1. create a new webhook with special webhook for repo1
 | 
			
		||||
		session := loginUser(t, "user2")
 | 
			
		||||
 | 
			
		||||
@@ -750,16 +789,16 @@ func Test_WebhookStatus(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Test_WebhookStatus_NoWrongTrigger(t *testing.T) {
 | 
			
		||||
	var trigger string
 | 
			
		||||
	provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
		assert.NotContains(t, r.Header["X-Github-Event-Type"], "status", "X-GitHub-Event-Type should not contain status")
 | 
			
		||||
		assert.NotContains(t, r.Header["X-Gitea-Event-Type"], "status", "X-Gitea-Event-Type should not contain status")
 | 
			
		||||
		assert.NotContains(t, r.Header["X-Gogs-Event-Type"], "status", "X-Gogs-Event-Type should not contain status")
 | 
			
		||||
		trigger = "push"
 | 
			
		||||
	}, http.StatusOK)
 | 
			
		||||
	defer provider.Close()
 | 
			
		||||
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		var trigger string
 | 
			
		||||
		provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
			assert.NotContains(t, r.Header["X-Github-Event-Type"], "status", "X-GitHub-Event-Type should not contain status")
 | 
			
		||||
			assert.NotContains(t, r.Header["X-Gitea-Event-Type"], "status", "X-Gitea-Event-Type should not contain status")
 | 
			
		||||
			assert.NotContains(t, r.Header["X-Gogs-Event-Type"], "status", "X-Gogs-Event-Type should not contain status")
 | 
			
		||||
			trigger = "push"
 | 
			
		||||
		}, http.StatusOK)
 | 
			
		||||
		defer provider.Close()
 | 
			
		||||
 | 
			
		||||
		// 1. create a new webhook with special webhook for repo1
 | 
			
		||||
		session := loginUser(t, "user2")
 | 
			
		||||
 | 
			
		||||
@@ -775,22 +814,22 @@ func Test_WebhookStatus_NoWrongTrigger(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Test_WebhookWorkflowJob(t *testing.T) {
 | 
			
		||||
	var payloads []api.WorkflowJobPayload
 | 
			
		||||
	var triggeredEvent string
 | 
			
		||||
	provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
		assert.Contains(t, r.Header["X-Github-Event-Type"], "workflow_job", "X-GitHub-Event-Type should contain workflow_job")
 | 
			
		||||
		assert.Contains(t, r.Header["X-Gitea-Event-Type"], "workflow_job", "X-Gitea-Event-Type should contain workflow_job")
 | 
			
		||||
		assert.Contains(t, r.Header["X-Gogs-Event-Type"], "workflow_job", "X-Gogs-Event-Type should contain workflow_job")
 | 
			
		||||
		content, _ := io.ReadAll(r.Body)
 | 
			
		||||
		var payload api.WorkflowJobPayload
 | 
			
		||||
		err := json.Unmarshal(content, &payload)
 | 
			
		||||
		assert.NoError(t, err)
 | 
			
		||||
		payloads = append(payloads, payload)
 | 
			
		||||
		triggeredEvent = "workflow_job"
 | 
			
		||||
	}, http.StatusOK)
 | 
			
		||||
	defer provider.Close()
 | 
			
		||||
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		var payloads []api.WorkflowJobPayload
 | 
			
		||||
		var triggeredEvent string
 | 
			
		||||
		provider := newMockWebhookProvider(func(r *http.Request) {
 | 
			
		||||
			assert.Contains(t, r.Header["X-Github-Event-Type"], "workflow_job", "X-GitHub-Event-Type should contain workflow_job")
 | 
			
		||||
			assert.Contains(t, r.Header["X-Gitea-Event-Type"], "workflow_job", "X-Gitea-Event-Type should contain workflow_job")
 | 
			
		||||
			assert.Contains(t, r.Header["X-Gogs-Event-Type"], "workflow_job", "X-Gogs-Event-Type should contain workflow_job")
 | 
			
		||||
			content, _ := io.ReadAll(r.Body)
 | 
			
		||||
			var payload api.WorkflowJobPayload
 | 
			
		||||
			err := json.Unmarshal(content, &payload)
 | 
			
		||||
			assert.NoError(t, err)
 | 
			
		||||
			payloads = append(payloads, payload)
 | 
			
		||||
			triggeredEvent = "workflow_job"
 | 
			
		||||
		}, http.StatusOK)
 | 
			
		||||
		defer provider.Close()
 | 
			
		||||
 | 
			
		||||
		// 1. create a new webhook with special webhook for repo1
 | 
			
		||||
		user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
 | 
			
		||||
		session := loginUser(t, "user2")
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user