@@ -6,6 +6,7 @@ package integration
66import (
77 "fmt"
88 "net/http"
9+ "net/url"
910 "testing"
1011
1112 auth_model "code.gitea.io/gitea/models/auth"
@@ -14,6 +15,7 @@ import (
1415 user_model "code.gitea.io/gitea/models/user"
1516 "code.gitea.io/gitea/modules/git"
1617 "code.gitea.io/gitea/modules/gitrepo"
18+ "code.gitea.io/gitea/modules/json"
1719 "code.gitea.io/gitea/modules/setting"
1820 api "code.gitea.io/gitea/modules/structs"
1921 "code.gitea.io/gitea/modules/test"
@@ -34,8 +36,6 @@ func TestAPIGetRequestedFiles(t *testing.T) {
3436 repo3 := unittest .AssertExistsAndLoadBean (t , & repo_model.Repository {ID : 3 }) // public repo
3537 repo16 := unittest .AssertExistsAndLoadBean (t , & repo_model.Repository {ID : 16 }) // private repo
3638
37- // TODO: add "GET" support
38-
3939 // Get user2's token
4040 session := loginUser (t , user2 .Name )
4141 token2 := getTokenForLoggedInUser (t , session , auth_model .AccessTokenScopeWriteRepository )
@@ -58,41 +58,51 @@ func TestAPIGetRequestedFiles(t *testing.T) {
5858 return ret
5959 }
6060
61+ t .Run ("User2Get" , func (t * testing.T ) {
62+ reqBodyOpt := & api.GetFilesOptions {Files : []string {"README.md" }}
63+ reqBodyParam , _ := json .Marshal (reqBodyOpt )
64+ req := NewRequest (t , "GET" , fmt .Sprintf ("/api/v1/repos/user2/repo1/file-contents?body=%s" , url .QueryEscape (string (reqBodyParam ))))
65+ resp := MakeRequest (t , req , http .StatusOK )
66+ var ret []* api.ContentsResponse
67+ DecodeJSON (t , resp , & ret )
68+ expected := []* api.ContentsResponse {getExpectedContentsResponseForContents (repo1 .DefaultBranch , "branch" , lastCommit .ID .String ())}
69+ assert .Equal (t , expected , ret )
70+ })
6171 t .Run ("User2NoRef" , func (t * testing.T ) {
62- ret := requestFiles (t , "/api/v1/repos/user2/repo1/files " , []string {"README.md" })
72+ ret := requestFiles (t , "/api/v1/repos/user2/repo1/file-contents " , []string {"README.md" })
6373 expected := []* api.ContentsResponse {getExpectedContentsResponseForContents (repo1 .DefaultBranch , "branch" , lastCommit .ID .String ())}
6474 assert .Equal (t , expected , ret )
6575 })
6676 t .Run ("User2RefBranch" , func (t * testing.T ) {
67- ret := requestFiles (t , "/api/v1/repos/user2/repo1/files ?ref=master" , []string {"README.md" })
77+ ret := requestFiles (t , "/api/v1/repos/user2/repo1/file-contents ?ref=master" , []string {"README.md" })
6878 expected := []* api.ContentsResponse {getExpectedContentsResponseForContents (repo1 .DefaultBranch , "branch" , lastCommit .ID .String ())}
6979 assert .Equal (t , expected , ret )
7080 })
7181 t .Run ("User2RefTag" , func (t * testing.T ) {
72- ret := requestFiles (t , "/api/v1/repos/user2/repo1/files ?ref=v1.1" , []string {"README.md" })
82+ ret := requestFiles (t , "/api/v1/repos/user2/repo1/file-contents ?ref=v1.1" , []string {"README.md" })
7383 expected := []* api.ContentsResponse {getExpectedContentsResponseForContents ("v1.1" , "tag" , lastCommit .ID .String ())}
7484 assert .Equal (t , expected , ret )
7585 })
7686 t .Run ("User2RefCommit" , func (t * testing.T ) {
77- ret := requestFiles (t , "/api/v1/repos/user2/repo1/files ?ref=65f1bf27bc3bf70f64657658635e66094edbcb4d" , []string {"README.md" })
87+ ret := requestFiles (t , "/api/v1/repos/user2/repo1/file-contents ?ref=65f1bf27bc3bf70f64657658635e66094edbcb4d" , []string {"README.md" })
7888 expected := []* api.ContentsResponse {getExpectedContentsResponseForContents ("65f1bf27bc3bf70f64657658635e66094edbcb4d" , "commit" , lastCommit .ID .String ())}
7989 assert .Equal (t , expected , ret )
8090 })
8191 t .Run ("User2RefNotExist" , func (t * testing.T ) {
82- ret := requestFiles (t , "/api/v1/repos/user2/repo1/files ?ref=not-exist" , []string {"README.md" }, http .StatusNotFound )
92+ ret := requestFiles (t , "/api/v1/repos/user2/repo1/file-contents ?ref=not-exist" , []string {"README.md" }, http .StatusNotFound )
8393 assert .Empty (t , ret )
8494 })
8595
8696 t .Run ("PermissionCheck" , func (t * testing.T ) {
8797 filesOptions := & api.GetFilesOptions {Files : []string {"README.md" }}
8898 // Test accessing private ref with user token that does not have access - should fail
89- req := NewRequestWithJSON (t , "POST" , fmt .Sprintf ("/api/v1/repos/%s/%s/files " , user2 .Name , repo16 .Name ), & filesOptions ).AddTokenAuth (token4 )
99+ req := NewRequestWithJSON (t , "POST" , fmt .Sprintf ("/api/v1/repos/%s/%s/file-contents " , user2 .Name , repo16 .Name ), & filesOptions ).AddTokenAuth (token4 )
90100 MakeRequest (t , req , http .StatusNotFound )
91101 // Test access private ref of owner of token
92- req = NewRequestWithJSON (t , "POST" , fmt .Sprintf ("/api/v1/repos/%s/%s/files " , user2 .Name , repo16 .Name ), & filesOptions ).AddTokenAuth (token2 )
102+ req = NewRequestWithJSON (t , "POST" , fmt .Sprintf ("/api/v1/repos/%s/%s/file-contents " , user2 .Name , repo16 .Name ), & filesOptions ).AddTokenAuth (token2 )
93103 MakeRequest (t , req , http .StatusOK )
94104 // Test access of org org3 private repo file by owner user2
95- req = NewRequestWithJSON (t , "POST" , fmt .Sprintf ("/api/v1/repos/%s/%s/files " , org3 .Name , repo3 .Name ), & filesOptions ).AddTokenAuth (token2 )
105+ req = NewRequestWithJSON (t , "POST" , fmt .Sprintf ("/api/v1/repos/%s/%s/file-contents " , org3 .Name , repo3 .Name ), & filesOptions ).AddTokenAuth (token2 )
96106 MakeRequest (t , req , http .StatusOK )
97107 })
98108
@@ -123,24 +133,24 @@ func TestAPIGetRequestedFiles(t *testing.T) {
123133 }
124134
125135 // repo1 "DefaultBranch" has 2 files: LICENSE (1064 bytes), README.md (30 bytes)
126- ret := requestFiles (t , "/api/v1/repos/user2/repo1/files ?ref=DefaultBranch" , []string {"no-such.txt" , "LICENSE" , "README.md" })
136+ ret := requestFiles (t , "/api/v1/repos/user2/repo1/file-contents ?ref=DefaultBranch" , []string {"no-such.txt" , "LICENSE" , "README.md" })
127137 assertResponse (t , []* expected {nil , {"LICENSE" , true }, {"README.md" , true }}, ret )
128138
129139 // the returned file list is limited by the DefaultPagingNum
130140 setting .API .DefaultPagingNum = 2
131- ret = requestFiles (t , "/api/v1/repos/user2/repo1/files ?ref=DefaultBranch" , []string {"no-such.txt" , "LICENSE" , "README.md" })
141+ ret = requestFiles (t , "/api/v1/repos/user2/repo1/file-contents ?ref=DefaultBranch" , []string {"no-such.txt" , "LICENSE" , "README.md" })
132142 assertResponse (t , []* expected {nil , {"LICENSE" , true }}, ret )
133143 setting .API .DefaultPagingNum = 100
134144
135145 // if a file exceeds the DefaultMaxBlobSize, the content is not returned
136146 setting .API .DefaultMaxBlobSize = 200
137- ret = requestFiles (t , "/api/v1/repos/user2/repo1/files ?ref=DefaultBranch" , []string {"no-such.txt" , "LICENSE" , "README.md" })
147+ ret = requestFiles (t , "/api/v1/repos/user2/repo1/file-contents ?ref=DefaultBranch" , []string {"no-such.txt" , "LICENSE" , "README.md" })
138148 assertResponse (t , []* expected {nil , {"LICENSE" , false }, {"README.md" , true }}, ret )
139149 setting .API .DefaultMaxBlobSize = 20000
140150
141151 // if the total response size would exceed the DefaultMaxResponseSize, then the list stops
142152 setting .API .DefaultMaxResponseSize = ret [1 ].Size * 4 / 3 + 1
143- ret = requestFiles (t , "/api/v1/repos/user2/repo1/files ?ref=DefaultBranch" , []string {"no-such.txt" , "LICENSE" , "README.md" })
153+ ret = requestFiles (t , "/api/v1/repos/user2/repo1/file-contents ?ref=DefaultBranch" , []string {"no-such.txt" , "LICENSE" , "README.md" })
144154 assertResponse (t , []* expected {nil , {"LICENSE" , true }}, ret )
145155 setting .API .DefaultMaxBlobSize = 20000
146156 })
0 commit comments