drone/service/hook/hook_test.go
ShobhitSingh11 87381af2ac
fix: [CI-11840]: Added env variable to control the event of inbound w… (#3508)
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.
2024-05-07 16:35:06 +01:00

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)
}
}