111 lines · 3.7 KB · Go
RawDownload
// Copyright 2019 The Gitea Authors. All rights reserved.// SPDX-License-Identifier: MIT package webhook import (	"fmt"	"testing" 	"forgejo.org/models/db"	repo_model "forgejo.org/models/repo"	"forgejo.org/models/unittest"	user_model "forgejo.org/models/user"	webhook_model "forgejo.org/models/webhook"	"forgejo.org/modules/setting"	api "forgejo.org/modules/structs"	webhook_module "forgejo.org/modules/webhook"	"forgejo.org/services/convert" 	"github.com/stretchr/testify/assert"	"github.com/stretchr/testify/require") func activateWebhook(t *testing.T, hookID int64) {	t.Helper()	updated, err := db.GetEngine(db.DefaultContext).ID(hookID).Cols("is_active").Update(webhook_model.Webhook{IsActive: true})	assert.Equal(t, int64(1), updated)	require.NoError(t, err)} func TestPrepareWebhooks(t *testing.T) {	require.NoError(t, unittest.PrepareTestDatabase()) 	repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})	activateWebhook(t, 1) 	hookTasks := []*webhook_model.HookTask{		{HookID: 1, EventType: webhook_module.HookEventPush},	}	for _, hookTask := range hookTasks {		unittest.AssertNotExistsBean(t, hookTask)	}	require.NoError(t, PrepareWebhooks(db.DefaultContext, EventSource{Repository: repo}, webhook_module.HookEventPush, &api.PushPayload{Commits: []*api.PayloadCommit{{}}}))	for _, hookTask := range hookTasks {		unittest.AssertExistsAndLoadBean(t, hookTask)	}} func eventType(p api.Payloader) webhook_module.HookEventType {	switch p.(type) {	case *api.CreatePayload:		return webhook_module.HookEventCreate	case *api.DeletePayload:		return webhook_module.HookEventDelete	case *api.PushPayload:		return webhook_module.HookEventPush	}	panic(fmt.Sprintf("no event type for payload %T", p))} func TestPrepareWebhooksBranchFilterMatch(t *testing.T) {	require.NoError(t, unittest.PrepareTestDatabase()) 	// branch_filter: {master,feature*}	w := unittest.AssertExistsAndLoadBean(t, &webhook_model.Webhook{ID: 4})	activateWebhook(t, w.ID) 	for _, p := range []api.Payloader{		&api.PushPayload{Ref: "refs/heads/feature/7791"},		&api.CreatePayload{Ref: "refs/heads/feature/7791"}, // branch creation		&api.DeletePayload{Ref: "refs/heads/feature/7791"}, // branch deletion	} {		t.Run(fmt.Sprintf("%T", p), func(t *testing.T) {			db.DeleteBeans(db.DefaultContext, webhook_model.HookTask{HookID: w.ID})			typ := eventType(p)			require.NoError(t, PrepareWebhook(db.DefaultContext, w, typ, p))			unittest.AssertExistsAndLoadBean(t, &webhook_model.HookTask{				HookID:    w.ID,				EventType: typ,			})		})	}} func TestPrepareWebhooksBranchFilterNoMatch(t *testing.T) {	require.NoError(t, unittest.PrepareTestDatabase()) 	// branch_filter: {master,feature*}	w := unittest.AssertExistsAndLoadBean(t, &webhook_model.Webhook{ID: 4})	activateWebhook(t, w.ID) 	for _, p := range []api.Payloader{		&api.PushPayload{Ref: "refs/heads/fix_weird_bug"},		&api.CreatePayload{Ref: "refs/heads/fix_weird_bug"}, // branch creation		&api.DeletePayload{Ref: "refs/heads/fix_weird_bug"}, // branch deletion	} {		t.Run(fmt.Sprintf("%T", p), func(t *testing.T) {			db.DeleteBeans(db.DefaultContext, webhook_model.HookTask{HookID: w.ID})			require.NoError(t, PrepareWebhook(db.DefaultContext, w, eventType(p), p))			unittest.AssertNotExistsBean(t, &webhook_model.HookTask{HookID: w.ID})		})	}} func TestWebhookUserMail(t *testing.T) {	require.NoError(t, unittest.PrepareTestDatabase())	setting.Service.NoReplyAddress = "no-reply.com"	user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})	assert.Equal(t, user.GetPlaceholderEmail(), convert.ToUser(db.DefaultContext, user, nil).Email)	assert.Equal(t, user.Email, convert.ToUser(db.DefaultContext, user, user).Email)}