88 "fmt"
99 "net/http"
1010 "net/url"
11- "path/filepath "
11+ "path"
1212 "testing"
1313 "time"
1414
@@ -49,29 +49,41 @@ func getCreateFileOptions() api.CreateFileOptions {
4949 }
5050}
5151
52- func getExpectedFileResponseForCreate (repoFullName , commitID , treePath , latestCommitSHA string , latestCommitWhen time.Time ) * api.FileResponse {
52+ func normalizeFileContentResponseCommitTime (c * api.ContentsResponse ) {
53+ // decoded JSON response may contain different time format, the timezone may differ
54+ c .LastCommitterWhen = c .LastCommitterWhen .UTC ()
55+ c .LastAuthorWhen = c .LastAuthorWhen .UTC ()
56+ }
57+
58+ type apiFileResponseInfo struct {
59+ repoFullName , commitID , treePath , lastCommitSHA string
60+ lastCommitterWhen , lastAuthorWhen time.Time
61+ }
62+
63+ func getExpectedFileResponseForCreate (info apiFileResponseInfo ) * api.FileResponse {
5364 sha := "a635aa942442ddfdba07468cf9661c08fbdf0ebf"
5465 encoding := "base64"
5566 content := "VGhpcyBpcyBuZXcgdGV4dA=="
56- selfURL := setting .AppURL + "api/v1/repos/" + repoFullName + "/contents/" + treePath + "?ref=master"
57- htmlURL := setting .AppURL + repoFullName + "/src/branch/master/" + treePath
58- gitURL := setting .AppURL + "api/v1/repos/" + repoFullName + "/git/blobs/" + sha
59- downloadURL := setting .AppURL + repoFullName + "/raw/branch/master/" + treePath
60- return & api.FileResponse {
67+ selfURL := setting .AppURL + "api/v1/repos/" + info . repoFullName + "/contents/" + info . treePath + "?ref=master"
68+ htmlURL := setting .AppURL + info . repoFullName + "/src/branch/master/" + info . treePath
69+ gitURL := setting .AppURL + "api/v1/repos/" + info . repoFullName + "/git/blobs/" + sha
70+ downloadURL := setting .AppURL + info . repoFullName + "/raw/branch/master/" + info . treePath
71+ ret := & api.FileResponse {
6172 Content : & api.ContentsResponse {
62- Name : filepath .Base (treePath ),
63- Path : treePath ,
64- SHA : sha ,
65- LastCommitSHA : latestCommitSHA ,
66- LastCommitWhen : latestCommitWhen ,
67- Size : 16 ,
68- Type : "file" ,
69- Encoding : & encoding ,
70- Content : & content ,
71- URL : & selfURL ,
72- HTMLURL : & htmlURL ,
73- GitURL : & gitURL ,
74- DownloadURL : & downloadURL ,
73+ Name : path .Base (info .treePath ),
74+ Path : info .treePath ,
75+ SHA : sha ,
76+ LastCommitSHA : info .lastCommitSHA ,
77+ LastCommitterWhen : info .lastCommitterWhen ,
78+ LastAuthorWhen : info .lastAuthorWhen ,
79+ Size : 16 ,
80+ Type : "file" ,
81+ Encoding : & encoding ,
82+ Content : & content ,
83+ URL : & selfURL ,
84+ HTMLURL : & htmlURL ,
85+ GitURL : & gitURL ,
86+ DownloadURL : & downloadURL ,
7587 Links : & api.FileLinksResponse {
7688 Self : & selfURL ,
7789 GitURL : & gitURL ,
@@ -80,10 +92,10 @@ func getExpectedFileResponseForCreate(repoFullName, commitID, treePath, latestCo
8092 },
8193 Commit : & api.FileCommitResponse {
8294 CommitMeta : api.CommitMeta {
83- URL : setting .AppURL + "api/v1/repos/" + repoFullName + "/git/commits/" + commitID ,
84- SHA : commitID ,
95+ URL : setting .AppURL + "api/v1/repos/" + info . repoFullName + "/git/commits/" + info . commitID ,
96+ SHA : info . commitID ,
8597 },
86- HTMLURL : setting .AppURL + repoFullName + "/commit/" + commitID ,
98+ HTMLURL : setting .AppURL + info . repoFullName + "/commit/" + info . commitID ,
8799 Author : & api.CommitUser {
88100 Identity : api.Identity {
89101 Name : "Anne Doe" ,
@@ -107,6 +119,8 @@ func getExpectedFileResponseForCreate(repoFullName, commitID, treePath, latestCo
107119 Payload : "" ,
108120 },
109121 }
122+ normalizeFileContentResponseCommitTime (ret .Content )
123+ return ret
110124}
111125
112126func BenchmarkAPICreateFileSmall (b * testing.B ) {
@@ -168,16 +182,20 @@ func TestAPICreateFile(t *testing.T) {
168182 AddTokenAuth (token2 )
169183 resp := MakeRequest (t , req , http .StatusCreated )
170184 gitRepo , _ := gitrepo .OpenRepository (t .Context (), repo1 )
185+ defer gitRepo .Close ()
171186 commitID , _ := gitRepo .GetBranchCommitID (createFileOptions .NewBranchName )
172- latestCommit , _ := gitRepo .GetCommitByPath (treePath )
173- expectedFileResponse := getExpectedFileResponseForCreate ("user2/repo1" , commitID , treePath , latestCommit .ID .String (), latestCommit .Committer .When )
187+ lastCommit , _ := gitRepo .GetCommitByPath (treePath )
188+ expectedFileResponse := getExpectedFileResponseForCreate (apiFileResponseInfo {
189+ repoFullName : "user2/repo1" ,
190+ commitID : commitID ,
191+ treePath : treePath ,
192+ lastCommitSHA : lastCommit .ID .String (),
193+ lastCommitterWhen : lastCommit .Committer .When ,
194+ lastAuthorWhen : lastCommit .Author .When ,
195+ })
174196 var fileResponse api.FileResponse
175197 DecodeJSON (t , resp , & fileResponse )
176-
177- // FIXME: This is a workaround to compare time.Time values. This maybe a bug of Golang,
178- // assume your local timezone is UTC, but a location with zero offset is not equal to UTC but they should be.
179- expectedFileResponse .Content .LastCommitWhen , _ = time .Parse (time .RFC3339 , expectedFileResponse .Content .LastCommitWhen .Format (time .RFC3339 ))
180-
198+ normalizeFileContentResponseCommitTime (fileResponse .Content )
181199 assert .Equal (t , expectedFileResponse .Content , fileResponse .Content )
182200 assert .Equal (t , expectedFileResponse .Commit .SHA , fileResponse .Commit .SHA )
183201 assert .Equal (t , expectedFileResponse .Commit .HTMLURL , fileResponse .Commit .HTMLURL )
@@ -187,7 +205,6 @@ func TestAPICreateFile(t *testing.T) {
187205 assert .Equal (t , expectedFileResponse .Commit .Committer .Email , fileResponse .Commit .Committer .Email )
188206 assert .Equal (t , expectedFileResponse .Commit .Committer .Name , fileResponse .Commit .Committer .Name )
189207 assert .Equal (t , expectedFileResponse .Commit .Committer .Date , fileResponse .Commit .Committer .Date )
190- gitRepo .Close ()
191208 }
192209
193210 // Test creating a file in a new branch
@@ -291,15 +308,19 @@ func TestAPICreateFile(t *testing.T) {
291308 resp = MakeRequest (t , req , http .StatusCreated )
292309 emptyRepo := unittest .AssertExistsAndLoadBean (t , & repo_model.Repository {OwnerName : "user2" , Name : "empty-repo" }) // public repo
293310 gitRepo , _ := gitrepo .OpenRepository (t .Context (), emptyRepo )
311+ defer gitRepo .Close ()
294312 commitID , _ := gitRepo .GetBranchCommitID (createFileOptions .NewBranchName )
295313 latestCommit , _ := gitRepo .GetCommitByPath (treePath )
296- expectedFileResponse := getExpectedFileResponseForCreate ("user2/empty-repo" , commitID , treePath , latestCommit .ID .String (), latestCommit .Committer .When )
314+ expectedFileResponse := getExpectedFileResponseForCreate (apiFileResponseInfo {
315+ repoFullName : "user2/empty-repo" ,
316+ commitID : commitID ,
317+ treePath : treePath ,
318+ lastCommitSHA : latestCommit .ID .String (),
319+ lastCommitterWhen : latestCommit .Committer .When ,
320+ lastAuthorWhen : latestCommit .Author .When ,
321+ })
297322 DecodeJSON (t , resp , & fileResponse )
298-
299- // FIXME: This is a workaround to compare time.Time values. This maybe a bug of Golang,
300- // assume your local timezone is UTC, but a location with zero offset is not equal to UTC but they should be.
301- expectedFileResponse .Content .LastCommitWhen , _ = time .Parse (time .RFC3339 , expectedFileResponse .Content .LastCommitWhen .Format (time .RFC3339 ))
302-
323+ normalizeFileContentResponseCommitTime (fileResponse .Content )
303324 assert .Equal (t , expectedFileResponse .Content , fileResponse .Content )
304325 assert .Equal (t , expectedFileResponse .Commit .SHA , fileResponse .Commit .SHA )
305326 assert .Equal (t , expectedFileResponse .Commit .HTMLURL , fileResponse .Commit .HTMLURL )
@@ -309,6 +330,5 @@ func TestAPICreateFile(t *testing.T) {
309330 assert .Equal (t , expectedFileResponse .Commit .Committer .Email , fileResponse .Commit .Committer .Email )
310331 assert .Equal (t , expectedFileResponse .Commit .Committer .Name , fileResponse .Commit .Committer .Name )
311332 assert .Equal (t , expectedFileResponse .Commit .Committer .Date , fileResponse .Commit .Committer .Date )
312- gitRepo .Close ()
313333 })
314334}
0 commit comments