mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 19:06:18 +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:
		
							
								
								
									
										174
									
								
								tests/integration/pull_update_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										174
									
								
								tests/integration/pull_update_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,174 @@ | ||||
| // Copyright 2020 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" | ||||
| 	"time" | ||||
|  | ||||
| 	"code.gitea.io/gitea/models/db" | ||||
| 	issues_model "code.gitea.io/gitea/models/issues" | ||||
| 	"code.gitea.io/gitea/models/unittest" | ||||
| 	user_model "code.gitea.io/gitea/models/user" | ||||
| 	"code.gitea.io/gitea/modules/git" | ||||
| 	repo_module "code.gitea.io/gitea/modules/repository" | ||||
| 	pull_service "code.gitea.io/gitea/services/pull" | ||||
| 	repo_service "code.gitea.io/gitea/services/repository" | ||||
| 	files_service "code.gitea.io/gitea/services/repository/files" | ||||
|  | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| ) | ||||
|  | ||||
| func TestAPIPullUpdate(t *testing.T) { | ||||
| 	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) { | ||||
| 		// Create PR to test | ||||
| 		user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) | ||||
| 		org26 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 26}) | ||||
| 		pr := createOutdatedPR(t, user, org26) | ||||
|  | ||||
| 		// Test GetDiverging | ||||
| 		diffCount, err := pull_service.GetDiverging(git.DefaultContext, pr) | ||||
| 		assert.NoError(t, err) | ||||
| 		assert.EqualValues(t, 1, diffCount.Behind) | ||||
| 		assert.EqualValues(t, 1, diffCount.Ahead) | ||||
| 		assert.NoError(t, pr.LoadBaseRepo()) | ||||
| 		assert.NoError(t, pr.LoadIssue()) | ||||
|  | ||||
| 		session := loginUser(t, "user2") | ||||
| 		token := getTokenForLoggedInUser(t, session) | ||||
| 		req := NewRequestf(t, "POST", "/api/v1/repos/%s/%s/pulls/%d/update?token="+token, pr.BaseRepo.OwnerName, pr.BaseRepo.Name, pr.Issue.Index) | ||||
| 		session.MakeRequest(t, req, http.StatusOK) | ||||
|  | ||||
| 		// Test GetDiverging after update | ||||
| 		diffCount, err = pull_service.GetDiverging(git.DefaultContext, pr) | ||||
| 		assert.NoError(t, err) | ||||
| 		assert.EqualValues(t, 0, diffCount.Behind) | ||||
| 		assert.EqualValues(t, 2, diffCount.Ahead) | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestAPIPullUpdateByRebase(t *testing.T) { | ||||
| 	onGiteaRun(t, func(t *testing.T, giteaURL *url.URL) { | ||||
| 		// Create PR to test | ||||
| 		user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) | ||||
| 		org26 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 26}) | ||||
| 		pr := createOutdatedPR(t, user, org26) | ||||
|  | ||||
| 		// Test GetDiverging | ||||
| 		diffCount, err := pull_service.GetDiverging(git.DefaultContext, pr) | ||||
| 		assert.NoError(t, err) | ||||
| 		assert.EqualValues(t, 1, diffCount.Behind) | ||||
| 		assert.EqualValues(t, 1, diffCount.Ahead) | ||||
| 		assert.NoError(t, pr.LoadBaseRepo()) | ||||
| 		assert.NoError(t, pr.LoadIssue()) | ||||
|  | ||||
| 		session := loginUser(t, "user2") | ||||
| 		token := getTokenForLoggedInUser(t, session) | ||||
| 		req := NewRequestf(t, "POST", "/api/v1/repos/%s/%s/pulls/%d/update?style=rebase&token="+token, pr.BaseRepo.OwnerName, pr.BaseRepo.Name, pr.Issue.Index) | ||||
| 		session.MakeRequest(t, req, http.StatusOK) | ||||
|  | ||||
| 		// Test GetDiverging after update | ||||
| 		diffCount, err = pull_service.GetDiverging(git.DefaultContext, pr) | ||||
| 		assert.NoError(t, err) | ||||
| 		assert.EqualValues(t, 0, diffCount.Behind) | ||||
| 		assert.EqualValues(t, 1, diffCount.Ahead) | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func createOutdatedPR(t *testing.T, actor, forkOrg *user_model.User) *issues_model.PullRequest { | ||||
| 	baseRepo, err := repo_service.CreateRepository(actor, actor, repo_module.CreateRepoOptions{ | ||||
| 		Name:        "repo-pr-update", | ||||
| 		Description: "repo-tmp-pr-update description", | ||||
| 		AutoInit:    true, | ||||
| 		Gitignores:  "C,C++", | ||||
| 		License:     "MIT", | ||||
| 		Readme:      "Default", | ||||
| 		IsPrivate:   false, | ||||
| 	}) | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.NotEmpty(t, baseRepo) | ||||
|  | ||||
| 	headRepo, err := repo_service.ForkRepository(git.DefaultContext, actor, forkOrg, repo_service.ForkRepoOptions{ | ||||
| 		BaseRepo:    baseRepo, | ||||
| 		Name:        "repo-pr-update", | ||||
| 		Description: "desc", | ||||
| 	}) | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.NotEmpty(t, headRepo) | ||||
|  | ||||
| 	// create a commit on base Repo | ||||
| 	_, err = files_service.CreateOrUpdateRepoFile(git.DefaultContext, baseRepo, actor, &files_service.UpdateRepoFileOptions{ | ||||
| 		TreePath:  "File_A", | ||||
| 		Message:   "Add File A", | ||||
| 		Content:   "File A", | ||||
| 		IsNewFile: true, | ||||
| 		OldBranch: "master", | ||||
| 		NewBranch: "master", | ||||
| 		Author: &files_service.IdentityOptions{ | ||||
| 			Name:  actor.Name, | ||||
| 			Email: actor.Email, | ||||
| 		}, | ||||
| 		Committer: &files_service.IdentityOptions{ | ||||
| 			Name:  actor.Name, | ||||
| 			Email: actor.Email, | ||||
| 		}, | ||||
| 		Dates: &files_service.CommitDateOptions{ | ||||
| 			Author:    time.Now(), | ||||
| 			Committer: time.Now(), | ||||
| 		}, | ||||
| 	}) | ||||
| 	assert.NoError(t, err) | ||||
|  | ||||
| 	// create a commit on head Repo | ||||
| 	_, err = files_service.CreateOrUpdateRepoFile(git.DefaultContext, headRepo, actor, &files_service.UpdateRepoFileOptions{ | ||||
| 		TreePath:  "File_B", | ||||
| 		Message:   "Add File on PR branch", | ||||
| 		Content:   "File B", | ||||
| 		IsNewFile: true, | ||||
| 		OldBranch: "master", | ||||
| 		NewBranch: "newBranch", | ||||
| 		Author: &files_service.IdentityOptions{ | ||||
| 			Name:  actor.Name, | ||||
| 			Email: actor.Email, | ||||
| 		}, | ||||
| 		Committer: &files_service.IdentityOptions{ | ||||
| 			Name:  actor.Name, | ||||
| 			Email: actor.Email, | ||||
| 		}, | ||||
| 		Dates: &files_service.CommitDateOptions{ | ||||
| 			Author:    time.Now(), | ||||
| 			Committer: time.Now(), | ||||
| 		}, | ||||
| 	}) | ||||
| 	assert.NoError(t, err) | ||||
|  | ||||
| 	// create Pull | ||||
| 	pullIssue := &issues_model.Issue{ | ||||
| 		RepoID:   baseRepo.ID, | ||||
| 		Title:    "Test Pull -to-update-", | ||||
| 		PosterID: actor.ID, | ||||
| 		Poster:   actor, | ||||
| 		IsPull:   true, | ||||
| 	} | ||||
| 	pullRequest := &issues_model.PullRequest{ | ||||
| 		HeadRepoID: headRepo.ID, | ||||
| 		BaseRepoID: baseRepo.ID, | ||||
| 		HeadBranch: "newBranch", | ||||
| 		BaseBranch: "master", | ||||
| 		HeadRepo:   headRepo, | ||||
| 		BaseRepo:   baseRepo, | ||||
| 		Type:       issues_model.PullRequestGitea, | ||||
| 	} | ||||
| 	err = pull_service.NewPullRequest(git.DefaultContext, baseRepo, pullIssue, nil, nil, pullRequest, nil) | ||||
| 	assert.NoError(t, err) | ||||
|  | ||||
| 	issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{Title: "Test Pull -to-update-"}) | ||||
| 	pr, err := issues_model.GetPullRequestByIssueID(db.DefaultContext, issue.ID) | ||||
| 	assert.NoError(t, err) | ||||
|  | ||||
| 	return pr | ||||
| } | ||||
		Reference in New Issue
	
	Block a user