mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 00:54:43 +01:00 
			
		
		
		
	Return 409 when creating repo if it already exists. (#6330)
This commit is contained in:
		
							parent
							
								
									7780ea8890
								
							
						
					
					
						commit
						583968f274
					
				| @ -6,7 +6,10 @@ package integrations | |||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"io/ioutil" | ||||||
| 	"net/http" | 	"net/http" | ||||||
|  | 	"net/url" | ||||||
|  | 	"os" | ||||||
| 	"testing" | 	"testing" | ||||||
| 
 | 
 | ||||||
| 	"code.gitea.io/gitea/models" | 	"code.gitea.io/gitea/models" | ||||||
| @ -291,6 +294,44 @@ func TestAPIRepoMigrate(t *testing.T) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func TestAPIRepoMigrateConflict(t *testing.T) { | ||||||
|  | 	onGiteaRun(t, testAPIRepoMigrateConflict) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func testAPIRepoMigrateConflict(t *testing.T, u *url.URL) { | ||||||
|  | 	username := "user2" | ||||||
|  | 	baseAPITestContext := NewAPITestContext(t, username, "repo1") | ||||||
|  | 
 | ||||||
|  | 	u.Path = baseAPITestContext.GitPath() | ||||||
|  | 
 | ||||||
|  | 	t.Run("Existing", func(t *testing.T) { | ||||||
|  | 		httpContext := baseAPITestContext | ||||||
|  | 
 | ||||||
|  | 		httpContext.Reponame = "repo-tmp-17" | ||||||
|  | 		dstPath, err := ioutil.TempDir("", httpContext.Reponame) | ||||||
|  | 		assert.NoError(t, err) | ||||||
|  | 		defer os.RemoveAll(dstPath) | ||||||
|  | 		t.Run("CreateRepo", doAPICreateRepository(httpContext, false)) | ||||||
|  | 
 | ||||||
|  | 		user, err := models.GetUserByName(httpContext.Username) | ||||||
|  | 		assert.NoError(t, err) | ||||||
|  | 		userID := user.ID | ||||||
|  | 
 | ||||||
|  | 		cloneURL := "https://github.com/go-gitea/git.git" | ||||||
|  | 
 | ||||||
|  | 		req := NewRequestWithJSON(t, "POST", "/api/v1/repos/migrate?token="+httpContext.Token, | ||||||
|  | 			&api.MigrateRepoOption{ | ||||||
|  | 				CloneAddr: cloneURL, | ||||||
|  | 				UID:       int(userID), | ||||||
|  | 				RepoName:  httpContext.Reponame, | ||||||
|  | 			}) | ||||||
|  | 		resp := httpContext.Session.MakeRequest(t, req, http.StatusConflict) | ||||||
|  | 		respJSON := map[string]string{} | ||||||
|  | 		DecodeJSON(t, resp, &respJSON) | ||||||
|  | 		assert.Equal(t, respJSON["message"], "The repository with the same name already exists.") | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func TestAPIOrgRepoCreate(t *testing.T) { | func TestAPIOrgRepoCreate(t *testing.T) { | ||||||
| 	testCases := []struct { | 	testCases := []struct { | ||||||
| 		ctxUserID         int64 | 		ctxUserID         int64 | ||||||
| @ -313,3 +354,33 @@ func TestAPIOrgRepoCreate(t *testing.T) { | |||||||
| 		session.MakeRequest(t, req, testCase.expectedStatus) | 		session.MakeRequest(t, req, testCase.expectedStatus) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func TestAPIRepoCreateConflict(t *testing.T) { | ||||||
|  | 	onGiteaRun(t, testAPIRepoCreateConflict) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func testAPIRepoCreateConflict(t *testing.T, u *url.URL) { | ||||||
|  | 	username := "user2" | ||||||
|  | 	baseAPITestContext := NewAPITestContext(t, username, "repo1") | ||||||
|  | 
 | ||||||
|  | 	u.Path = baseAPITestContext.GitPath() | ||||||
|  | 
 | ||||||
|  | 	t.Run("Existing", func(t *testing.T) { | ||||||
|  | 		httpContext := baseAPITestContext | ||||||
|  | 
 | ||||||
|  | 		httpContext.Reponame = "repo-tmp-17" | ||||||
|  | 		dstPath, err := ioutil.TempDir("", httpContext.Reponame) | ||||||
|  | 		assert.NoError(t, err) | ||||||
|  | 		defer os.RemoveAll(dstPath) | ||||||
|  | 		t.Run("CreateRepo", doAPICreateRepository(httpContext, false)) | ||||||
|  | 
 | ||||||
|  | 		req := NewRequestWithJSON(t, "POST", "/api/v1/user/repos?token="+httpContext.Token, | ||||||
|  | 			&api.CreateRepoOption{ | ||||||
|  | 				Name: httpContext.Reponame, | ||||||
|  | 			}) | ||||||
|  | 		resp := httpContext.Session.MakeRequest(t, req, http.StatusConflict) | ||||||
|  | 		respJSON := map[string]string{} | ||||||
|  | 		DecodeJSON(t, resp, &respJSON) | ||||||
|  | 		assert.Equal(t, respJSON["message"], "The repository with the same name already exists.") | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  | |||||||
| @ -226,8 +226,9 @@ func CreateUserRepo(ctx *context.APIContext, owner *models.User, opt api.CreateR | |||||||
| 		AutoInit:    opt.AutoInit, | 		AutoInit:    opt.AutoInit, | ||||||
| 	}) | 	}) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		if models.IsErrRepoAlreadyExist(err) || | 		if models.IsErrRepoAlreadyExist(err) { | ||||||
| 			models.IsErrNameReserved(err) || | 			ctx.Error(409, "", "The repository with the same name already exists.") | ||||||
|  | 		} else if models.IsErrNameReserved(err) || | ||||||
| 			models.IsErrNamePatternNotAllowed(err) { | 			models.IsErrNamePatternNotAllowed(err) { | ||||||
| 			ctx.Error(422, "", err) | 			ctx.Error(422, "", err) | ||||||
| 		} else { | 		} else { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user