// Copyright 2025 The Gitea Authors. All rights reserved. // SPDX-License-Identifier: MIT package utils import ( "net/http" "testing" "code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/services/contexttest" "github.com/stretchr/testify/assert" ) func TestTestHookValidation(t *testing.T) { unittest.PrepareTestEnv(t) t.Run("Test Validation", func(t *testing.T) { ctx, _ := contexttest.MockAPIContext(t, "user2/repo1/hooks") contexttest.LoadRepo(t, ctx, 1) contexttest.LoadRepoCommit(t, ctx) contexttest.LoadUser(t, ctx, 2) checkCreateHookOption(ctx, &structs.CreateHookOption{ Type: "gitea", Config: map[string]string{ "content_type": "json", "url": "https://example.com/webhook", }, }) assert.Equal(t, 0, ctx.Resp.WrittenStatus()) // not written yet }) t.Run("Test Validation with invalid URL", func(t *testing.T) { ctx, _ := contexttest.MockAPIContext(t, "user2/repo1/hooks") contexttest.LoadRepo(t, ctx, 1) contexttest.LoadRepoCommit(t, ctx) contexttest.LoadUser(t, ctx, 2) checkCreateHookOption(ctx, &structs.CreateHookOption{ Type: "gitea", Config: map[string]string{ "content_type": "json", "url": "example.com/webhook", }, }) assert.Equal(t, http.StatusUnprocessableEntity, ctx.Resp.WrittenStatus()) }) t.Run("Test Validation with invalid webhook type", func(t *testing.T) { ctx, _ := contexttest.MockAPIContext(t, "user2/repo1/hooks") contexttest.LoadRepo(t, ctx, 1) contexttest.LoadRepoCommit(t, ctx) contexttest.LoadUser(t, ctx, 2) checkCreateHookOption(ctx, &structs.CreateHookOption{ Type: "unknown", Config: map[string]string{ "content_type": "json", "url": "example.com/webhook", }, }) assert.Equal(t, http.StatusUnprocessableEntity, ctx.Resp.WrittenStatus()) }) t.Run("Test Validation with empty content type", func(t *testing.T) { ctx, _ := contexttest.MockAPIContext(t, "user2/repo1/hooks") contexttest.LoadRepo(t, ctx, 1) contexttest.LoadRepoCommit(t, ctx) contexttest.LoadUser(t, ctx, 2) checkCreateHookOption(ctx, &structs.CreateHookOption{ Type: "unknown", Config: map[string]string{ "url": "https://example.com/webhook", }, }) assert.Equal(t, http.StatusUnprocessableEntity, ctx.Resp.WrittenStatus()) }) }