From 2bb8b3a56219f3fcba7c77c7a8fc10769b8c11bd Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 8 May 2017 10:55:27 +0800 Subject: [PATCH] fix bug when push a branch name with / & fix an integration test bug (#1689) --- integrations/integration_test.go | 11 ++++---- integrations/internal_test.go | 45 ++++++++++++++++++++++++++++++++ routers/private/branch.go | 2 +- routers/private/internal.go | 2 +- 4 files changed, 53 insertions(+), 7 deletions(-) create mode 100644 integrations/internal_test.go diff --git a/integrations/integration_test.go b/integrations/integration_test.go index 6696ff65f..4a809403b 100644 --- a/integrations/integration_test.go +++ b/integrations/integration_test.go @@ -94,11 +94,12 @@ func initIntegrationTest() { if err != nil { log.Fatalf("db.Query: %v", err) } - if rows.Next() { - break // database already exists - } - if _, err = db.Exec("CREATE DATABASE testgitea"); err != nil { - log.Fatalf("db.Exec: %v", err) + defer rows.Close() + + if !rows.Next() { + if _, err = db.Exec("CREATE DATABASE testgitea"); err != nil { + log.Fatalf("db.Exec: %v", err) + } } } routers.GlobalInit() diff --git a/integrations/internal_test.go b/integrations/internal_test.go new file mode 100644 index 000000000..12d6fc8dc --- /dev/null +++ b/integrations/internal_test.go @@ -0,0 +1,45 @@ +// Copyright 2017 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package integrations + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" + "testing" + + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/setting" + + "github.com/stretchr/testify/assert" +) + +func assertProtectedBranch(t *testing.T, repoID int64, branchName string, isErr, canPush bool) { + reqURL := fmt.Sprintf("/api/internal/branch/%d/%s", repoID, url.QueryEscape(branchName)) + req, err := http.NewRequest("GET", reqURL, nil) + t.Log(reqURL) + req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", setting.InternalToken)) + + assert.NoError(t, err) + resp := MakeRequest(req) + if isErr { + assert.EqualValues(t, 500, resp.HeaderCode) + } else { + assert.EqualValues(t, http.StatusOK, resp.HeaderCode) + var branch models.ProtectedBranch + t.Log(string(resp.Body)) + assert.NoError(t, json.Unmarshal(resp.Body, &branch)) + assert.Equal(t, canPush, branch.CanPush) + } +} + +func TestInternal_GetProtectedBranch(t *testing.T) { + prepareTestEnv(t) + + assertProtectedBranch(t, 1, "master", false, true) + assertProtectedBranch(t, 1, "dev", false, true) + assertProtectedBranch(t, 1, "lunny/dev", false, true) +} diff --git a/routers/private/branch.go b/routers/private/branch.go index e74087950..8e42f7303 100644 --- a/routers/private/branch.go +++ b/routers/private/branch.go @@ -13,7 +13,7 @@ import ( // GetProtectedBranchBy get protected branch information func GetProtectedBranchBy(ctx *macaron.Context) { repoID := ctx.ParamsInt64(":id") - branchName := ctx.Params(":branch") + branchName := ctx.Params("*") protectBranch, err := models.GetProtectedBranchBy(repoID, branchName) if err != nil { ctx.JSON(500, map[string]interface{}{ diff --git a/routers/private/internal.go b/routers/private/internal.go index f663306e9..3e7233226 100644 --- a/routers/private/internal.go +++ b/routers/private/internal.go @@ -42,6 +42,6 @@ func RegisterRoutes(m *macaron.Macaron) { m.Group("/", func() { m.Post("/ssh/:id/update", UpdatePublicKey) m.Post("/push/update", PushUpdate) - m.Get("/branch/:id/:branch", GetProtectedBranchBy) + m.Get("/branch/:id/*", GetProtectedBranchBy) }, CheckInternalToken) }