mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 10:56:10 +01:00 
			
		
		
		
	Kd/ci playwright go test (#20123)
* Add initial playwright config * Simplify Makefile * Simplify Makefile * Use correct config files * Update playwright settings * Fix package-lock file * Don't use test logger for e2e tests * fix frontend lint * Allow passing TEST_LOGGER variable * Init postgres database * use standard gitea env variables * Update playwright * update drone * Move empty env var to commands * Cleanup * Move integrations to subfolder * tests integrations to tests integraton * Run e2e tests with go test * Fix linting * install CI deps * Add files to ESlint * Fix drone typo * Don't log to console in CI * Use go test http server * Add build step before tests * Move shared init function to common package * fix drone * Clean up tests * Fix linting * Better mocking for page + version string * Cleanup test generation * Remove dependency on gitea binary * Fix linting * add initial support for running specific tests * Add ACCEPT_VISUAL variable * don't require git-lfs * Add initial documentation * Review feedback * Add logged in session test * Attempt fixing drone race * Cleanup and bump version * Bump deps * Review feedback * simplify installation * Fix ci * Update install docs
This commit is contained in:
		
							
								
								
									
										201
									
								
								tests/integration/api_branch_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								tests/integration/api_branch_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,201 @@ | ||||
| // 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 integration | ||||
|  | ||||
| import ( | ||||
| 	"net/http" | ||||
| 	"net/url" | ||||
| 	"testing" | ||||
|  | ||||
| 	api "code.gitea.io/gitea/modules/structs" | ||||
| 	"code.gitea.io/gitea/tests" | ||||
|  | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| ) | ||||
|  | ||||
| func testAPIGetBranch(t *testing.T, branchName string, exists bool) { | ||||
| 	session := loginUser(t, "user2") | ||||
| 	token := getTokenForLoggedInUser(t, session) | ||||
| 	req := NewRequestf(t, "GET", "/api/v1/repos/user2/repo1/branches/%s?token=%s", branchName, token) | ||||
| 	resp := session.MakeRequest(t, req, NoExpectedStatus) | ||||
| 	if !exists { | ||||
| 		assert.EqualValues(t, http.StatusNotFound, resp.Code) | ||||
| 		return | ||||
| 	} | ||||
| 	assert.EqualValues(t, http.StatusOK, resp.Code) | ||||
| 	var branch api.Branch | ||||
| 	DecodeJSON(t, resp, &branch) | ||||
| 	assert.EqualValues(t, branchName, branch.Name) | ||||
| 	assert.True(t, branch.UserCanPush) | ||||
| 	assert.True(t, branch.UserCanMerge) | ||||
| } | ||||
|  | ||||
| func testAPIGetBranchProtection(t *testing.T, branchName string, expectedHTTPStatus int) { | ||||
| 	session := loginUser(t, "user2") | ||||
| 	token := getTokenForLoggedInUser(t, session) | ||||
| 	req := NewRequestf(t, "GET", "/api/v1/repos/user2/repo1/branch_protections/%s?token=%s", branchName, token) | ||||
| 	resp := session.MakeRequest(t, req, expectedHTTPStatus) | ||||
|  | ||||
| 	if resp.Code == http.StatusOK { | ||||
| 		var branchProtection api.BranchProtection | ||||
| 		DecodeJSON(t, resp, &branchProtection) | ||||
| 		assert.EqualValues(t, branchName, branchProtection.BranchName) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func testAPICreateBranchProtection(t *testing.T, branchName string, expectedHTTPStatus int) { | ||||
| 	session := loginUser(t, "user2") | ||||
| 	token := getTokenForLoggedInUser(t, session) | ||||
| 	req := NewRequestWithJSON(t, "POST", "/api/v1/repos/user2/repo1/branch_protections?token="+token, &api.BranchProtection{ | ||||
| 		BranchName: branchName, | ||||
| 	}) | ||||
| 	resp := session.MakeRequest(t, req, expectedHTTPStatus) | ||||
|  | ||||
| 	if resp.Code == http.StatusCreated { | ||||
| 		var branchProtection api.BranchProtection | ||||
| 		DecodeJSON(t, resp, &branchProtection) | ||||
| 		assert.EqualValues(t, branchName, branchProtection.BranchName) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func testAPIEditBranchProtection(t *testing.T, branchName string, body *api.BranchProtection, expectedHTTPStatus int) { | ||||
| 	session := loginUser(t, "user2") | ||||
| 	token := getTokenForLoggedInUser(t, session) | ||||
| 	req := NewRequestWithJSON(t, "PATCH", "/api/v1/repos/user2/repo1/branch_protections/"+branchName+"?token="+token, body) | ||||
| 	resp := session.MakeRequest(t, req, expectedHTTPStatus) | ||||
|  | ||||
| 	if resp.Code == http.StatusOK { | ||||
| 		var branchProtection api.BranchProtection | ||||
| 		DecodeJSON(t, resp, &branchProtection) | ||||
| 		assert.EqualValues(t, branchName, branchProtection.BranchName) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func testAPIDeleteBranchProtection(t *testing.T, branchName string, expectedHTTPStatus int) { | ||||
| 	session := loginUser(t, "user2") | ||||
| 	token := getTokenForLoggedInUser(t, session) | ||||
| 	req := NewRequestf(t, "DELETE", "/api/v1/repos/user2/repo1/branch_protections/%s?token=%s", branchName, token) | ||||
| 	session.MakeRequest(t, req, expectedHTTPStatus) | ||||
| } | ||||
|  | ||||
| func testAPIDeleteBranch(t *testing.T, branchName string, expectedHTTPStatus int) { | ||||
| 	session := loginUser(t, "user2") | ||||
| 	token := getTokenForLoggedInUser(t, session) | ||||
| 	req := NewRequestf(t, "DELETE", "/api/v1/repos/user2/repo1/branches/%s?token=%s", branchName, token) | ||||
| 	session.MakeRequest(t, req, expectedHTTPStatus) | ||||
| } | ||||
|  | ||||
| func TestAPIGetBranch(t *testing.T) { | ||||
| 	defer tests.PrepareTestEnv(t)() | ||||
| 	for _, test := range []struct { | ||||
| 		BranchName string | ||||
| 		Exists     bool | ||||
| 	}{ | ||||
| 		{"master", true}, | ||||
| 		{"master/doesnotexist", false}, | ||||
| 		{"feature/1", true}, | ||||
| 		{"feature/1/doesnotexist", false}, | ||||
| 	} { | ||||
| 		testAPIGetBranch(t, test.BranchName, test.Exists) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| 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)) | ||||
| 	testCases := []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 testCases { | ||||
| 		defer tests.ResetFixtures(t) | ||||
| 		session := ctx.Session | ||||
| 		testAPICreateBranch(t, session, "user2", "my-noo-repo", test.OldBranch, test.NewBranch, test.ExpectedHTTPStatus) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func testAPICreateBranch(t testing.TB, session *TestSession, user, repo, oldBranch, newBranch string, status int) bool { | ||||
| 	token := getTokenForLoggedInUser(t, session) | ||||
| 	req := NewRequestWithJSON(t, "POST", "/api/v1/repos/"+user+"/"+repo+"/branches?token="+token, &api.CreateBranchRepoOption{ | ||||
| 		BranchName:    newBranch, | ||||
| 		OldBranchName: oldBranch, | ||||
| 	}) | ||||
| 	resp := session.MakeRequest(t, req, status) | ||||
|  | ||||
| 	var branch api.Branch | ||||
| 	DecodeJSON(t, resp, &branch) | ||||
|  | ||||
| 	if status == http.StatusCreated { | ||||
| 		assert.EqualValues(t, newBranch, branch.Name) | ||||
| 	} | ||||
|  | ||||
| 	return resp.Result().StatusCode == status | ||||
| } | ||||
|  | ||||
| func TestAPIBranchProtection(t *testing.T) { | ||||
| 	defer tests.PrepareTestEnv(t)() | ||||
|  | ||||
| 	// Branch protection only on branch that exist | ||||
| 	testAPICreateBranchProtection(t, "master/doesnotexist", http.StatusNotFound) | ||||
| 	// Get branch protection on branch that exist but not branch protection | ||||
| 	testAPIGetBranchProtection(t, "master", http.StatusNotFound) | ||||
|  | ||||
| 	testAPICreateBranchProtection(t, "master", http.StatusCreated) | ||||
| 	// Can only create once | ||||
| 	testAPICreateBranchProtection(t, "master", http.StatusForbidden) | ||||
|  | ||||
| 	// Can't delete a protected branch | ||||
| 	testAPIDeleteBranch(t, "master", http.StatusForbidden) | ||||
|  | ||||
| 	testAPIGetBranchProtection(t, "master", http.StatusOK) | ||||
| 	testAPIEditBranchProtection(t, "master", &api.BranchProtection{ | ||||
| 		EnablePush: true, | ||||
| 	}, http.StatusOK) | ||||
|  | ||||
| 	testAPIDeleteBranchProtection(t, "master", http.StatusNoContent) | ||||
|  | ||||
| 	// Test branch deletion | ||||
| 	testAPIDeleteBranch(t, "master", http.StatusForbidden) | ||||
| 	testAPIDeleteBranch(t, "branch2", http.StatusNoContent) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user