2017-07-27 02:23:38 -07:00
// Copyright 2017 The Gitea Authors. All rights reserved.
2022-11-27 13:20:29 -05:00
// SPDX-License-Identifier: MIT
2017-07-27 02:23:38 -07:00
2022-09-02 15:18:23 -04:00
package integration
2017-07-27 02:23:38 -07:00
import (
2023-04-19 21:40:42 +08:00
"bytes"
"io"
"mime/multipart"
2017-07-27 02:23:38 -07:00
"net/http"
"testing"
2023-04-19 21:40:42 +08:00
"code.gitea.io/gitea/models/db"
2021-12-10 09:27:50 +08:00
repo_model "code.gitea.io/gitea/models/repo"
2021-11-16 16:53:21 +08:00
"code.gitea.io/gitea/models/unittest"
2021-11-24 17:49:20 +08:00
user_model "code.gitea.io/gitea/models/user"
2023-04-19 21:40:42 +08:00
"code.gitea.io/gitea/modules/json"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/test"
2022-09-02 15:18:23 -04:00
"code.gitea.io/gitea/tests"
2022-12-24 02:34:51 +08:00
"github.com/stretchr/testify/assert"
2017-07-27 02:23:38 -07:00
)
2019-01-18 00:01:04 +00:00
func TestEmptyRepo ( t * testing . T ) {
2022-09-02 15:18:23 -04:00
defer tests . PrepareTestEnv ( t ) ( )
2023-04-19 21:40:42 +08:00
subPaths := [ ] string {
2017-07-27 02:23:38 -07:00
"commits/master" ,
"raw/foo" ,
"commit/1ae57b34ccf7e18373" ,
"graph" ,
}
2022-12-24 02:34:51 +08:00
emptyRepo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 5 } )
assert . True ( t , emptyRepo . IsEmpty )
2022-08-16 10:22:25 +08:00
owner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : emptyRepo . OwnerID } )
2023-04-19 21:40:42 +08:00
for _ , subPath := range subPaths {
req := NewRequestf ( t , "GET" , "/%s/%s/%s" , owner . Name , emptyRepo . Name , subPath )
2017-07-27 02:23:38 -07:00
MakeRequest ( t , req , http . StatusNotFound )
}
}
2023-04-19 21:40:42 +08:00
func TestEmptyRepoAddFile ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
err := user_model . UpdateUserCols ( db . DefaultContext , & user_model . User { ID : 30 , ProhibitLogin : false } , "prohibit_login" )
assert . NoError ( t , err )
session := loginUser ( t , "user30" )
req := NewRequest ( t , "GET" , "/user30/empty/_new/" + setting . Repository . DefaultBranch )
resp := session . MakeRequest ( t , req , http . StatusOK )
doc := NewHTMLParser ( t , resp . Body ) . Find ( ` input[name="commit_choice"] ` )
assert . Equal ( t , "" , doc . AttrOr ( "checked" , "_no_" ) )
req = NewRequestWithValues ( t , "POST" , "/user30/empty/_new/" + setting . Repository . DefaultBranch , map [ string ] string {
"_csrf" : GetCSRF ( t , session , "/user/settings" ) ,
"commit_choice" : "direct" ,
"tree_path" : "test-file.md" ,
"content" : "newly-added-test-file" ,
} )
resp = session . MakeRequest ( t , req , http . StatusSeeOther )
redirect := test . RedirectURL ( resp )
assert . Equal ( t , "/user30/empty/src/branch/" + setting . Repository . DefaultBranch + "/test-file.md" , redirect )
req = NewRequest ( t , "GET" , redirect )
resp = session . MakeRequest ( t , req , http . StatusOK )
assert . Contains ( t , resp . Body . String ( ) , "newly-added-test-file" )
}
func TestEmptyRepoUploadFile ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
err := user_model . UpdateUserCols ( db . DefaultContext , & user_model . User { ID : 30 , ProhibitLogin : false } , "prohibit_login" )
assert . NoError ( t , err )
session := loginUser ( t , "user30" )
req := NewRequest ( t , "GET" , "/user30/empty/_new/" + setting . Repository . DefaultBranch )
resp := session . MakeRequest ( t , req , http . StatusOK )
doc := NewHTMLParser ( t , resp . Body ) . Find ( ` input[name="commit_choice"] ` )
assert . Equal ( t , "" , doc . AttrOr ( "checked" , "_no_" ) )
body := & bytes . Buffer { }
mpForm := multipart . NewWriter ( body )
_ = mpForm . WriteField ( "_csrf" , GetCSRF ( t , session , "/user/settings" ) )
file , _ := mpForm . CreateFormFile ( "file" , "uploaded-file.txt" )
_ , _ = io . Copy ( file , bytes . NewBufferString ( "newly-uploaded-test-file" ) )
_ = mpForm . Close ( )
req = NewRequestWithBody ( t , "POST" , "/user30/empty/upload-file" , body )
req . Header . Add ( "Content-Type" , mpForm . FormDataContentType ( ) )
resp = session . MakeRequest ( t , req , http . StatusOK )
respMap := map [ string ] string { }
assert . NoError ( t , json . Unmarshal ( resp . Body . Bytes ( ) , & respMap ) )
req = NewRequestWithValues ( t , "POST" , "/user30/empty/_upload/" + setting . Repository . DefaultBranch , map [ string ] string {
"_csrf" : GetCSRF ( t , session , "/user/settings" ) ,
"commit_choice" : "direct" ,
"files" : respMap [ "uuid" ] ,
"tree_path" : "" ,
} )
resp = session . MakeRequest ( t , req , http . StatusSeeOther )
redirect := test . RedirectURL ( resp )
assert . Equal ( t , "/user30/empty/src/branch/" + setting . Repository . DefaultBranch + "/" , redirect )
req = NewRequest ( t , "GET" , redirect )
resp = session . MakeRequest ( t , req , http . StatusOK )
assert . Contains ( t , resp . Body . String ( ) , "uploaded-file.txt" )
}