package webhook import ( "bytes" "io/ioutil" "net/http" "net/http/httptest" "testing" "github.com/sirupsen/logrus/hooks/test" "github.com/stretchr/testify/assert" appclientset "github.com/argoproj/argo-cd/pkg/client/clientset/versioned/fake" "github.com/argoproj/argo-cd/util/settings" ) func NewMockHandler() *ArgoCDWebhookHandler { appClientset := appclientset.NewSimpleClientset() return NewHandler("", appClientset, &settings.ArgoCDSettings{}) } func TestGitHubCommitEvent(t *testing.T) { hook := test.NewGlobal() h := NewMockHandler() req := httptest.NewRequest("POST", "/api/webhook", nil) req.Header.Set("X-GitHub-Event", "push") eventJSON, err := ioutil.ReadFile("github-commit-event.json") assert.NoError(t, err) req.Body = ioutil.NopCloser(bytes.NewReader(eventJSON)) w := httptest.NewRecorder() h.Handler(w, req) assert.Equal(t, w.Code, http.StatusOK) expectedLogResult := "Received push event repo: https://github.com/jessesuen/test-repo, revision: master, touchedHead: true" assert.Equal(t, expectedLogResult, hook.LastEntry().Message) hook.Reset() } func TestGitHubTagEvent(t *testing.T) { hook := test.NewGlobal() h := NewMockHandler() req := httptest.NewRequest("POST", "/api/webhook", nil) req.Header.Set("X-GitHub-Event", "push") eventJSON, err := ioutil.ReadFile("github-tag-event.json") assert.NoError(t, err) req.Body = ioutil.NopCloser(bytes.NewReader(eventJSON)) w := httptest.NewRecorder() h.Handler(w, req) assert.Equal(t, w.Code, http.StatusOK) expectedLogResult := "Received push event repo: https://github.com/jessesuen/test-repo, revision: v1.0, touchedHead: false" assert.Equal(t, expectedLogResult, hook.LastEntry().Message) hook.Reset() } func TestBitbucketServerRepositoryReferenceChangedEvent(t *testing.T) { hook := test.NewGlobal() h := NewMockHandler() req := httptest.NewRequest("POST", "/api/webhook", nil) req.Header.Set("X-Event-Key", "repo:refs_changed") eventJSON, err := ioutil.ReadFile("bitbucket-server-event.json") assert.NoError(t, err) req.Body = ioutil.NopCloser(bytes.NewReader(eventJSON)) w := httptest.NewRecorder() h.Handler(w, req) assert.Equal(t, w.Code, http.StatusOK) expectedLogResult := "Received push event repo: https://bitbucketserver/scm/myproject/test-repo.git, revision: master, touchedHead: true" assert.Equal(t, expectedLogResult, hook.LastEntry().Message) hook.Reset() } func TestGogsPushEvent(t *testing.T) { hook := test.NewGlobal() h := NewMockHandler() req := httptest.NewRequest("POST", "/api/webhook", nil) req.Header.Set("X-Gogs-Event", "push") eventJSON, err := ioutil.ReadFile("gogs-event.json") assert.NoError(t, err) req.Body = ioutil.NopCloser(bytes.NewReader(eventJSON)) w := httptest.NewRecorder() h.Handler(w, req) assert.Equal(t, w.Code, http.StatusOK) expectedLogResult := "Received push event repo: http://gogs-server/john/repo-test, revision: master, touchedHead: true" assert.Equal(t, expectedLogResult, hook.LastEntry().Message) hook.Reset() }