diff options
Diffstat (limited to 'integrations')
-rw-r--r-- | integrations/api_branch_test.go | 67 | ||||
-rw-r--r-- | integrations/integration_test.go | 12 |
2 files changed, 79 insertions, 0 deletions
diff --git a/integrations/api_branch_test.go b/integrations/api_branch_test.go index acf7525f80..26d8fb4b45 100644 --- a/integrations/api_branch_test.go +++ b/integrations/api_branch_test.go @@ -6,6 +6,7 @@ package integrations import ( "net/http" + "net/url" "testing" api "code.gitea.io/gitea/modules/structs" @@ -100,6 +101,72 @@ func TestAPIGetBranch(t *testing.T) { } } +func TestAPICreateBranch(t *testing.T) { + onGiteaRun(t, testAPICreateBranches) +} + +func testAPICreateBranches(t *testing.T, giteaURL *url.URL) { + + username := "user2" + ctx := NewAPITestContext(t, username, "my-noo-repo") + giteaURL.Path = ctx.GitPath() + + t.Run("CreateRepo", doAPICreateRepository(ctx, false)) + tests := []struct { + OldBranch string + NewBranch string + ExpectedHTTPStatus int + }{ + // Creating branch from default branch + { + OldBranch: "", + NewBranch: "new_branch_from_default_branch", + ExpectedHTTPStatus: http.StatusCreated, + }, + // Creating branch from master + { + OldBranch: "master", + NewBranch: "new_branch_from_master_1", + ExpectedHTTPStatus: http.StatusCreated, + }, + // Trying to create from master but already exists + { + OldBranch: "master", + NewBranch: "new_branch_from_master_1", + ExpectedHTTPStatus: http.StatusConflict, + }, + // Trying to create from other branch (not default branch) + { + OldBranch: "new_branch_from_master_1", + NewBranch: "branch_2", + ExpectedHTTPStatus: http.StatusCreated, + }, + // Trying to create from a branch which does not exist + { + OldBranch: "does_not_exist", + NewBranch: "new_branch_from_non_existent", + ExpectedHTTPStatus: http.StatusNotFound, + }, + } + for _, test := range tests { + defer resetFixtures(t) + session := ctx.Session + token := getTokenForLoggedInUser(t, session) + req := NewRequestWithJSON(t, "POST", "/api/v1/repos/user2/my-noo-repo/branches?token="+token, &api.CreateBranchRepoOption{ + BranchName: test.NewBranch, + OldBranchName: test.OldBranch, + }) + resp := session.MakeRequest(t, req, test.ExpectedHTTPStatus) + + var branch api.Branch + DecodeJSON(t, resp, &branch) + + if test.ExpectedHTTPStatus == http.StatusCreated { + assert.EqualValues(t, test.NewBranch, branch.Name) + } + } +} + func TestAPIBranchProtection(t *testing.T) { defer prepareTestEnv(t)() diff --git a/integrations/integration_test.go b/integrations/integration_test.go index c6a4169751..3c0125af6c 100644 --- a/integrations/integration_test.go +++ b/integrations/integration_test.go @@ -26,6 +26,7 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/graceful" + "code.gitea.io/gitea/modules/queue" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/routers" "code.gitea.io/gitea/routers/routes" @@ -459,3 +460,14 @@ func GetCSRF(t testing.TB, session *TestSession, urlStr string) string { doc := NewHTMLParser(t, resp.Body) return doc.GetCSRF() } + +// resetFixtures flushes queues, reloads fixtures and resets test repositories within a single test. +// Most tests should call defer prepareTestEnv(t)() (or have onGiteaRun do that for them) but sometimes +// within a single test this is required +func resetFixtures(t *testing.T) { + assert.NoError(t, queue.GetManager().FlushAll(context.Background(), -1)) + assert.NoError(t, models.LoadFixtures()) + assert.NoError(t, os.RemoveAll(setting.RepoRootPath)) + assert.NoError(t, com.CopyDir(path.Join(filepath.Dir(setting.AppPath), "integrations/gitea-repositories-meta"), + setting.RepoRootPath)) +} |