mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Remove local clones & make hooks run on merge/edit/upload (#6672)
* Add options to git.Clone to make it more capable * Begin the process of removing the local copy and tidy up * Remove Wiki LocalCopy Checkouts * Remove the last LocalRepo helpers * Remove WithTemporaryFile * Enable push-hooks for these routes * Ensure tests cope with hooks Signed-off-by: Andrew Thornton <art27@cantab.net> * Remove Repository.LocalCopyPath() * Move temporary repo to use the standard temporary path * Fix the tests Signed-off-by: Andrew Thornton <art27@cantab.net> * Remove LocalWikiPath * Fix missing remove Signed-off-by: Andrew Thornton <art27@cantab.net> * Use AppURL for Oauth user link (#6894) * Use AppURL for Oauth user link Fix #6843 * Update oauth.go * Update oauth.go * internal/ssh: ignore env command totally (#6825) * ssh: ignore env command totally * Remove commented code Needed fix described in issue #6889 * Escape the commit message on issues update and title in telegram hook (#6901) * update sdk to latest (#6903) * improve description of branch protection (fix #6886) (#6906) The branch protection description text were not quite accurate. * Fix logging documentation (#6904) * ENABLE_MACARON_REDIRECT should be REDIRECT_MACARON_LOG * Allow DISABLE_ROUTER_LOG to be set in the [log] section * [skip ci] Updated translations via Crowdin * Move sdk structs to modules/structs (#6905) * move sdk structs to moduels/structs * fix tests * fix fmt * fix swagger * fix vendor
This commit is contained in:
		@@ -7,6 +7,7 @@ package integrations
 | 
			
		||||
import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"net/http/httptest"
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"path"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"testing"
 | 
			
		||||
@@ -52,108 +53,118 @@ func testPullCleanUp(t *testing.T, session *TestSession, user, repo, pullnum str
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestPullMerge(t *testing.T) {
 | 
			
		||||
	prepareTestEnv(t)
 | 
			
		||||
	session := loginUser(t, "user1")
 | 
			
		||||
	testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
 | 
			
		||||
	testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited)\n")
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		session := loginUser(t, "user1")
 | 
			
		||||
		testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
 | 
			
		||||
		testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited)\n")
 | 
			
		||||
 | 
			
		||||
	resp := testPullCreate(t, session, "user1", "repo1", "master", "This is a pull title")
 | 
			
		||||
		resp := testPullCreate(t, session, "user1", "repo1", "master", "This is a pull title")
 | 
			
		||||
 | 
			
		||||
	elem := strings.Split(test.RedirectURL(resp), "/")
 | 
			
		||||
	assert.EqualValues(t, "pulls", elem[3])
 | 
			
		||||
	testPullMerge(t, session, elem[1], elem[2], elem[4], models.MergeStyleMerge)
 | 
			
		||||
		elem := strings.Split(test.RedirectURL(resp), "/")
 | 
			
		||||
		assert.EqualValues(t, "pulls", elem[3])
 | 
			
		||||
		testPullMerge(t, session, elem[1], elem[2], elem[4], models.MergeStyleMerge)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestPullRebase(t *testing.T) {
 | 
			
		||||
	prepareTestEnv(t)
 | 
			
		||||
	session := loginUser(t, "user1")
 | 
			
		||||
	testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
 | 
			
		||||
	testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited)\n")
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		session := loginUser(t, "user1")
 | 
			
		||||
		testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
 | 
			
		||||
		testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited)\n")
 | 
			
		||||
 | 
			
		||||
	resp := testPullCreate(t, session, "user1", "repo1", "master", "This is a pull title")
 | 
			
		||||
		resp := testPullCreate(t, session, "user1", "repo1", "master", "This is a pull title")
 | 
			
		||||
 | 
			
		||||
	elem := strings.Split(test.RedirectURL(resp), "/")
 | 
			
		||||
	assert.EqualValues(t, "pulls", elem[3])
 | 
			
		||||
	testPullMerge(t, session, elem[1], elem[2], elem[4], models.MergeStyleRebase)
 | 
			
		||||
		elem := strings.Split(test.RedirectURL(resp), "/")
 | 
			
		||||
		assert.EqualValues(t, "pulls", elem[3])
 | 
			
		||||
		testPullMerge(t, session, elem[1], elem[2], elem[4], models.MergeStyleRebase)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestPullRebaseMerge(t *testing.T) {
 | 
			
		||||
	prepareTestEnv(t)
 | 
			
		||||
	session := loginUser(t, "user1")
 | 
			
		||||
	testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
 | 
			
		||||
	testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited)\n")
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		prepareTestEnv(t)
 | 
			
		||||
		session := loginUser(t, "user1")
 | 
			
		||||
		testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
 | 
			
		||||
		testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited)\n")
 | 
			
		||||
 | 
			
		||||
	resp := testPullCreate(t, session, "user1", "repo1", "master", "This is a pull title")
 | 
			
		||||
		resp := testPullCreate(t, session, "user1", "repo1", "master", "This is a pull title")
 | 
			
		||||
 | 
			
		||||
	elem := strings.Split(test.RedirectURL(resp), "/")
 | 
			
		||||
	assert.EqualValues(t, "pulls", elem[3])
 | 
			
		||||
	testPullMerge(t, session, elem[1], elem[2], elem[4], models.MergeStyleRebaseMerge)
 | 
			
		||||
		elem := strings.Split(test.RedirectURL(resp), "/")
 | 
			
		||||
		assert.EqualValues(t, "pulls", elem[3])
 | 
			
		||||
		testPullMerge(t, session, elem[1], elem[2], elem[4], models.MergeStyleRebaseMerge)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestPullSquash(t *testing.T) {
 | 
			
		||||
	prepareTestEnv(t)
 | 
			
		||||
	session := loginUser(t, "user1")
 | 
			
		||||
	testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
 | 
			
		||||
	testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited)\n")
 | 
			
		||||
	testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited!)\n")
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		prepareTestEnv(t)
 | 
			
		||||
		session := loginUser(t, "user1")
 | 
			
		||||
		testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
 | 
			
		||||
		testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited)\n")
 | 
			
		||||
		testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited!)\n")
 | 
			
		||||
 | 
			
		||||
	resp := testPullCreate(t, session, "user1", "repo1", "master", "This is a pull title")
 | 
			
		||||
		resp := testPullCreate(t, session, "user1", "repo1", "master", "This is a pull title")
 | 
			
		||||
 | 
			
		||||
	elem := strings.Split(test.RedirectURL(resp), "/")
 | 
			
		||||
	assert.EqualValues(t, "pulls", elem[3])
 | 
			
		||||
	testPullMerge(t, session, elem[1], elem[2], elem[4], models.MergeStyleSquash)
 | 
			
		||||
		elem := strings.Split(test.RedirectURL(resp), "/")
 | 
			
		||||
		assert.EqualValues(t, "pulls", elem[3])
 | 
			
		||||
		testPullMerge(t, session, elem[1], elem[2], elem[4], models.MergeStyleSquash)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestPullCleanUpAfterMerge(t *testing.T) {
 | 
			
		||||
	prepareTestEnv(t)
 | 
			
		||||
	session := loginUser(t, "user1")
 | 
			
		||||
	testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
 | 
			
		||||
	testEditFileToNewBranch(t, session, "user1", "repo1", "master", "feature/test", "README.md", "Hello, World (Edited)\n")
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		prepareTestEnv(t)
 | 
			
		||||
		session := loginUser(t, "user1")
 | 
			
		||||
		testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
 | 
			
		||||
		testEditFileToNewBranch(t, session, "user1", "repo1", "master", "feature/test", "README.md", "Hello, World (Edited)\n")
 | 
			
		||||
 | 
			
		||||
	resp := testPullCreate(t, session, "user1", "repo1", "feature/test", "This is a pull title")
 | 
			
		||||
		resp := testPullCreate(t, session, "user1", "repo1", "feature/test", "This is a pull title")
 | 
			
		||||
 | 
			
		||||
	elem := strings.Split(test.RedirectURL(resp), "/")
 | 
			
		||||
	assert.EqualValues(t, "pulls", elem[3])
 | 
			
		||||
	testPullMerge(t, session, elem[1], elem[2], elem[4], models.MergeStyleMerge)
 | 
			
		||||
		elem := strings.Split(test.RedirectURL(resp), "/")
 | 
			
		||||
		assert.EqualValues(t, "pulls", elem[3])
 | 
			
		||||
		testPullMerge(t, session, elem[1], elem[2], elem[4], models.MergeStyleMerge)
 | 
			
		||||
 | 
			
		||||
	// Check PR branch deletion
 | 
			
		||||
	resp = testPullCleanUp(t, session, elem[1], elem[2], elem[4])
 | 
			
		||||
	respJSON := struct {
 | 
			
		||||
		Redirect string
 | 
			
		||||
	}{}
 | 
			
		||||
	DecodeJSON(t, resp, &respJSON)
 | 
			
		||||
		// Check PR branch deletion
 | 
			
		||||
		resp = testPullCleanUp(t, session, elem[1], elem[2], elem[4])
 | 
			
		||||
		respJSON := struct {
 | 
			
		||||
			Redirect string
 | 
			
		||||
		}{}
 | 
			
		||||
		DecodeJSON(t, resp, &respJSON)
 | 
			
		||||
 | 
			
		||||
	assert.NotEmpty(t, respJSON.Redirect, "Redirected URL is not found")
 | 
			
		||||
		assert.NotEmpty(t, respJSON.Redirect, "Redirected URL is not found")
 | 
			
		||||
 | 
			
		||||
	elem = strings.Split(respJSON.Redirect, "/")
 | 
			
		||||
	assert.EqualValues(t, "pulls", elem[3])
 | 
			
		||||
		elem = strings.Split(respJSON.Redirect, "/")
 | 
			
		||||
		assert.EqualValues(t, "pulls", elem[3])
 | 
			
		||||
 | 
			
		||||
	// Check branch deletion result
 | 
			
		||||
	req := NewRequest(t, "GET", respJSON.Redirect)
 | 
			
		||||
	resp = session.MakeRequest(t, req, http.StatusOK)
 | 
			
		||||
		// Check branch deletion result
 | 
			
		||||
		req := NewRequest(t, "GET", respJSON.Redirect)
 | 
			
		||||
		resp = session.MakeRequest(t, req, http.StatusOK)
 | 
			
		||||
 | 
			
		||||
	htmlDoc := NewHTMLParser(t, resp.Body)
 | 
			
		||||
	resultMsg := htmlDoc.doc.Find(".ui.message>p").Text()
 | 
			
		||||
		htmlDoc := NewHTMLParser(t, resp.Body)
 | 
			
		||||
		resultMsg := htmlDoc.doc.Find(".ui.message>p").Text()
 | 
			
		||||
 | 
			
		||||
	assert.EqualValues(t, "Branch 'user1/feature/test' has been deleted.", resultMsg)
 | 
			
		||||
		assert.EqualValues(t, "Branch 'user1/feature/test' has been deleted.", resultMsg)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestCantMergeWorkInProgress(t *testing.T) {
 | 
			
		||||
	prepareTestEnv(t)
 | 
			
		||||
	session := loginUser(t, "user1")
 | 
			
		||||
	testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
 | 
			
		||||
	testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited)\n")
 | 
			
		||||
	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) {
 | 
			
		||||
		prepareTestEnv(t)
 | 
			
		||||
		session := loginUser(t, "user1")
 | 
			
		||||
		testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
 | 
			
		||||
		testEditFile(t, session, "user1", "repo1", "master", "README.md", "Hello, World (Edited)\n")
 | 
			
		||||
 | 
			
		||||
	resp := testPullCreate(t, session, "user1", "repo1", "master", "[wip] This is a pull title")
 | 
			
		||||
		resp := testPullCreate(t, session, "user1", "repo1", "master", "[wip] This is a pull title")
 | 
			
		||||
 | 
			
		||||
	req := NewRequest(t, "GET", resp.Header().Get("Location"))
 | 
			
		||||
	resp = session.MakeRequest(t, req, http.StatusOK)
 | 
			
		||||
	htmlDoc := NewHTMLParser(t, resp.Body)
 | 
			
		||||
	text := strings.TrimSpace(htmlDoc.doc.Find(".merge.segment > .text.grey").Text())
 | 
			
		||||
	assert.NotEmpty(t, text, "Can't find WIP text")
 | 
			
		||||
		req := NewRequest(t, "GET", resp.Header().Get("Location"))
 | 
			
		||||
		resp = session.MakeRequest(t, req, http.StatusOK)
 | 
			
		||||
		htmlDoc := NewHTMLParser(t, resp.Body)
 | 
			
		||||
		text := strings.TrimSpace(htmlDoc.doc.Find(".merge.segment > .text.grey").Text())
 | 
			
		||||
		assert.NotEmpty(t, text, "Can't find WIP text")
 | 
			
		||||
 | 
			
		||||
	// remove <strong /> from lang
 | 
			
		||||
	expected := i18n.Tr("en", "repo.pulls.cannot_merge_work_in_progress", "[wip]")
 | 
			
		||||
	replacer := strings.NewReplacer("<strong>", "", "</strong>", "")
 | 
			
		||||
	assert.Equal(t, replacer.Replace(expected), text, "Unable to find WIP text")
 | 
			
		||||
		// remove <strong /> from lang
 | 
			
		||||
		expected := i18n.Tr("en", "repo.pulls.cannot_merge_work_in_progress", "[wip]")
 | 
			
		||||
		replacer := strings.NewReplacer("<strong>", "", "</strong>", "")
 | 
			
		||||
		assert.Equal(t, replacer.Replace(expected), text, "Unable to find WIP text")
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user