mirror of
https://github.com/harness/drone.git
synced 2025-05-04 00:41:56 +08:00

Have added the env var "DRONE_INCOMING_WEBHOOK_EVENTS" (of type list of string) to control the event in case of incoming webhook. If no such env variable is provided then it will fallback to default behaviour. Below are the test cases - Case 1: When no env variable "DRONE_INCOMING_WEBHOOK_EVENTS" is present. https://github.com/harness/gitness/assets/139750384/ad228d61-2608-4756-abaa-b3397eba1fb7 - Case 2: When Deployment event is missing from env var. https://github.com/harness/gitness/assets/139750384/0faf2afc-9e0b-42f1-9327-8dc674ed112d - Case 3: When Deployment, pull_request events are missing from env var. https://github.com/harness/gitness/assets/139750384/29f40107-4b7a-4eae-afa8-464d78662e8b - Case 4: When Deployment and push events are only present in env var. https://github.com/harness/gitness/assets/139750384/b6cdec79-20bb-4d56-8fd0-f72cb9e57a8e Tested with few more combinations as well.
172 lines
4.7 KiB
Go
172 lines
4.7 KiB
Go
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
|
// Use of this source code is governed by the Drone Non-Commercial License
|
|
// that can be found in the LICENSE file.
|
|
|
|
package hook
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/drone/drone/core"
|
|
"github.com/drone/drone/mock"
|
|
"github.com/drone/drone/mock/mockscm"
|
|
"github.com/drone/go-scm/scm"
|
|
|
|
"github.com/golang/mock/gomock"
|
|
)
|
|
|
|
var noContext = context.Background()
|
|
|
|
func TestCreate(t *testing.T) {
|
|
controller := gomock.NewController(t)
|
|
defer controller.Finish()
|
|
|
|
mockUser := &core.User{}
|
|
mockHooks := []*scm.Hook{}
|
|
mockRepo := &core.Repository{
|
|
Namespace: "octocat",
|
|
Name: "hello-world",
|
|
Slug: "octocat/hello-world",
|
|
Signer: "abc123",
|
|
}
|
|
|
|
hook := &scm.HookInput{
|
|
Name: "drone",
|
|
Target: "https://drone.company.com/hook",
|
|
Secret: "abc123",
|
|
Events: scm.HookEvents{
|
|
Branch: true,
|
|
Deployment: true,
|
|
PullRequest: true,
|
|
Push: true,
|
|
Tag: true,
|
|
},
|
|
}
|
|
|
|
mockRenewer := mock.NewMockRenewer(controller)
|
|
mockRenewer.EXPECT().Renew(gomock.Any(), mockUser, false).Return(nil)
|
|
|
|
mockRepos := mockscm.NewMockRepositoryService(controller)
|
|
mockRepos.EXPECT().ListHooks(gomock.Any(), "octocat/hello-world", gomock.Any()).Return(mockHooks, nil, nil)
|
|
mockRepos.EXPECT().CreateHook(gomock.Any(), "octocat/hello-world", hook).Return(nil, nil, nil)
|
|
client := new(scm.Client)
|
|
client.Repositories = mockRepos
|
|
|
|
service := New(client, "https://drone.company.com", mockRenewer, []string{"branch", "deployment", "push", "tag", "pull_request"})
|
|
err := service.Create(noContext, mockUser, mockRepo)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
func TestCreateWithLimitedEvents(t *testing.T) {
|
|
controller := gomock.NewController(t)
|
|
defer controller.Finish()
|
|
|
|
mockUser := &core.User{}
|
|
mockHooks := []*scm.Hook{}
|
|
mockRepo := &core.Repository{
|
|
Namespace: "octocat",
|
|
Name: "hello-world",
|
|
Slug: "octocat/hello-world",
|
|
Signer: "abc123",
|
|
}
|
|
|
|
hook := &scm.HookInput{
|
|
Name: "drone",
|
|
Target: "https://drone.company.com/hook",
|
|
Secret: "abc123",
|
|
Events: scm.HookEvents{
|
|
Branch: false,
|
|
Deployment: true,
|
|
PullRequest: true,
|
|
Push: false,
|
|
Tag: true,
|
|
},
|
|
}
|
|
|
|
mockRenewer := mock.NewMockRenewer(controller)
|
|
mockRenewer.EXPECT().Renew(gomock.Any(), mockUser, false).Return(nil)
|
|
|
|
mockRepos := mockscm.NewMockRepositoryService(controller)
|
|
mockRepos.EXPECT().ListHooks(gomock.Any(), "octocat/hello-world", gomock.Any()).Return(mockHooks, nil, nil)
|
|
mockRepos.EXPECT().CreateHook(gomock.Any(), "octocat/hello-world", hook).Return(nil, nil, nil)
|
|
client := new(scm.Client)
|
|
client.Repositories = mockRepos
|
|
|
|
service := New(client, "https://drone.company.com", mockRenewer, []string{"deployment", "tag", "pull_request"})
|
|
err := service.Create(noContext, mockUser, mockRepo)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
func TestCreate_RenewErr(t *testing.T) {
|
|
controller := gomock.NewController(t)
|
|
defer controller.Finish()
|
|
|
|
mockUser := &core.User{}
|
|
|
|
mockRenewer := mock.NewMockRenewer(controller)
|
|
mockRenewer.EXPECT().Renew(gomock.Any(), mockUser, false).Return(scm.ErrNotAuthorized)
|
|
|
|
service := New(nil, "https://drone.company.com", mockRenewer, []string{})
|
|
err := service.Create(noContext, mockUser, nil)
|
|
if err != scm.ErrNotAuthorized {
|
|
t.Errorf("Want not authorized error, got %v", err)
|
|
}
|
|
}
|
|
|
|
func TestDelete(t *testing.T) {
|
|
controller := gomock.NewController(t)
|
|
defer controller.Finish()
|
|
|
|
mockUser := &core.User{}
|
|
mockHooks := []*scm.Hook{
|
|
{
|
|
ID: "1",
|
|
Name: "drone",
|
|
Target: "https://drone.company.com/hook",
|
|
},
|
|
}
|
|
mockRepo := &core.Repository{
|
|
Namespace: "octocat",
|
|
Name: "hello-world",
|
|
Slug: "octocat/hello-world",
|
|
Signer: "abc123",
|
|
}
|
|
|
|
mockRenewer := mock.NewMockRenewer(controller)
|
|
mockRenewer.EXPECT().Renew(gomock.Any(), mockUser, false).Return(nil)
|
|
|
|
mockRepos := mockscm.NewMockRepositoryService(controller)
|
|
mockRepos.EXPECT().ListHooks(gomock.Any(), "octocat/hello-world", gomock.Any()).Return(mockHooks, nil, nil)
|
|
mockRepos.EXPECT().DeleteHook(gomock.Any(), "octocat/hello-world", "1").Return(nil, nil)
|
|
|
|
client := new(scm.Client)
|
|
client.Repositories = mockRepos
|
|
|
|
service := New(client, "https://drone.company.com", mockRenewer, []string{})
|
|
err := service.Delete(noContext, mockUser, mockRepo)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
func TestDelete_RenewErr(t *testing.T) {
|
|
controller := gomock.NewController(t)
|
|
defer controller.Finish()
|
|
|
|
mockUser := &core.User{}
|
|
|
|
mockRenewer := mock.NewMockRenewer(controller)
|
|
mockRenewer.EXPECT().Renew(gomock.Any(), mockUser, false).Return(scm.ErrNotAuthorized)
|
|
|
|
service := New(nil, "https://drone.company.com", mockRenewer, []string{})
|
|
err := service.Delete(noContext, mockUser, nil)
|
|
if err != scm.ErrNotAuthorized {
|
|
t.Errorf("Want not authorized error, got %v", err)
|
|
}
|
|
}
|