code.gitea.io/gitea@v1.22.3/tests/integration/api_repo_git_commits_test.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package integration 5 6 import ( 7 "net/http" 8 "testing" 9 10 auth_model "code.gitea.io/gitea/models/auth" 11 "code.gitea.io/gitea/models/unittest" 12 user_model "code.gitea.io/gitea/models/user" 13 api "code.gitea.io/gitea/modules/structs" 14 "code.gitea.io/gitea/tests" 15 16 "github.com/stretchr/testify/assert" 17 ) 18 19 func compareCommitFiles(t *testing.T, expect []string, files []*api.CommitAffectedFiles) { 20 var actual []string 21 for i := range files { 22 actual = append(actual, files[i].Filename) 23 } 24 assert.ElementsMatch(t, expect, actual) 25 } 26 27 func TestAPIReposGitCommits(t *testing.T) { 28 defer tests.PrepareTestEnv(t)() 29 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) 30 // Login as User2. 31 session := loginUser(t, user.Name) 32 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadRepository) 33 34 // check invalid requests 35 req := NewRequestf(t, "GET", "/api/v1/repos/%s/repo1/git/commits/12345", user.Name). 36 AddTokenAuth(token) 37 MakeRequest(t, req, http.StatusNotFound) 38 39 req = NewRequestf(t, "GET", "/api/v1/repos/%s/repo1/git/commits/..", user.Name). 40 AddTokenAuth(token) 41 MakeRequest(t, req, http.StatusUnprocessableEntity) 42 43 req = NewRequestf(t, "GET", "/api/v1/repos/%s/repo1/git/commits/branch-not-exist", user.Name). 44 AddTokenAuth(token) 45 MakeRequest(t, req, http.StatusNotFound) 46 47 for _, ref := range [...]string{ 48 "master", // Branch 49 "v1.1", // Tag 50 "65f1", // short sha 51 "65f1bf27bc3bf70f64657658635e66094edbcb4d", // full sha 52 } { 53 req := NewRequestf(t, "GET", "/api/v1/repos/%s/repo1/git/commits/%s", user.Name, ref). 54 AddTokenAuth(token) 55 MakeRequest(t, req, http.StatusOK) 56 } 57 } 58 59 func TestAPIReposGitCommitList(t *testing.T) { 60 defer tests.PrepareTestEnv(t)() 61 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) 62 // Login as User2. 63 session := loginUser(t, user.Name) 64 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadRepository) 65 66 // Test getting commits (Page 1) 67 req := NewRequestf(t, "GET", "/api/v1/repos/%s/repo20/commits?not=master&sha=remove-files-a", user.Name). 68 AddTokenAuth(token) 69 resp := MakeRequest(t, req, http.StatusOK) 70 71 var apiData []api.Commit 72 DecodeJSON(t, resp, &apiData) 73 74 assert.Len(t, apiData, 2) 75 assert.EqualValues(t, "cfe3b3c1fd36fba04f9183287b106497e1afe986", apiData[0].CommitMeta.SHA) 76 compareCommitFiles(t, []string{"link_hi", "test.csv"}, apiData[0].Files) 77 assert.EqualValues(t, "c8e31bc7688741a5287fcde4fbb8fc129ca07027", apiData[1].CommitMeta.SHA) 78 compareCommitFiles(t, []string{"test.csv"}, apiData[1].Files) 79 80 assert.EqualValues(t, resp.Header().Get("X-Total"), "2") 81 } 82 83 func TestAPIReposGitCommitListNotMaster(t *testing.T) { 84 defer tests.PrepareTestEnv(t)() 85 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) 86 // Login as User2. 87 session := loginUser(t, user.Name) 88 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadRepository) 89 90 // Test getting commits (Page 1) 91 req := NewRequestf(t, "GET", "/api/v1/repos/%s/repo16/commits", user.Name). 92 AddTokenAuth(token) 93 resp := MakeRequest(t, req, http.StatusOK) 94 95 var apiData []api.Commit 96 DecodeJSON(t, resp, &apiData) 97 98 assert.Len(t, apiData, 3) 99 assert.EqualValues(t, "69554a64c1e6030f051e5c3f94bfbd773cd6a324", apiData[0].CommitMeta.SHA) 100 compareCommitFiles(t, []string{"readme.md"}, apiData[0].Files) 101 assert.EqualValues(t, "27566bd5738fc8b4e3fef3c5e72cce608537bd95", apiData[1].CommitMeta.SHA) 102 compareCommitFiles(t, []string{"readme.md"}, apiData[1].Files) 103 assert.EqualValues(t, "5099b81332712fe655e34e8dd63574f503f61811", apiData[2].CommitMeta.SHA) 104 compareCommitFiles(t, []string{"readme.md"}, apiData[2].Files) 105 106 assert.EqualValues(t, resp.Header().Get("X-Total"), "3") 107 } 108 109 func TestAPIReposGitCommitListPage2Empty(t *testing.T) { 110 defer tests.PrepareTestEnv(t)() 111 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) 112 // Login as User2. 113 session := loginUser(t, user.Name) 114 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadRepository) 115 116 // Test getting commits (Page=2) 117 req := NewRequestf(t, "GET", "/api/v1/repos/%s/repo16/commits?page=2", user.Name). 118 AddTokenAuth(token) 119 resp := MakeRequest(t, req, http.StatusOK) 120 121 var apiData []api.Commit 122 DecodeJSON(t, resp, &apiData) 123 124 assert.Len(t, apiData, 0) 125 } 126 127 func TestAPIReposGitCommitListDifferentBranch(t *testing.T) { 128 defer tests.PrepareTestEnv(t)() 129 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) 130 // Login as User2. 131 session := loginUser(t, user.Name) 132 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadRepository) 133 134 // Test getting commits (Page=1, Branch=good-sign) 135 req := NewRequestf(t, "GET", "/api/v1/repos/%s/repo16/commits?sha=good-sign", user.Name). 136 AddTokenAuth(token) 137 resp := MakeRequest(t, req, http.StatusOK) 138 139 var apiData []api.Commit 140 DecodeJSON(t, resp, &apiData) 141 142 assert.Len(t, apiData, 1) 143 assert.Equal(t, "f27c2b2b03dcab38beaf89b0ab4ff61f6de63441", apiData[0].CommitMeta.SHA) 144 compareCommitFiles(t, []string{"readme.md"}, apiData[0].Files) 145 } 146 147 func TestAPIReposGitCommitListWithoutSelectFields(t *testing.T) { 148 defer tests.PrepareTestEnv(t)() 149 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) 150 // Login as User2. 151 session := loginUser(t, user.Name) 152 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadRepository) 153 154 // Test getting commits without files, verification, and stats 155 req := NewRequestf(t, "GET", "/api/v1/repos/%s/repo16/commits?sha=good-sign&stat=false&files=false&verification=false", user.Name). 156 AddTokenAuth(token) 157 resp := MakeRequest(t, req, http.StatusOK) 158 159 var apiData []api.Commit 160 DecodeJSON(t, resp, &apiData) 161 162 assert.Len(t, apiData, 1) 163 assert.Equal(t, "f27c2b2b03dcab38beaf89b0ab4ff61f6de63441", apiData[0].CommitMeta.SHA) 164 assert.Equal(t, (*api.CommitStats)(nil), apiData[0].Stats) 165 assert.Equal(t, (*api.PayloadCommitVerification)(nil), apiData[0].RepoCommit.Verification) 166 assert.Equal(t, ([]*api.CommitAffectedFiles)(nil), apiData[0].Files) 167 } 168 169 func TestDownloadCommitDiffOrPatch(t *testing.T) { 170 defer tests.PrepareTestEnv(t)() 171 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) 172 // Login as User2. 173 session := loginUser(t, user.Name) 174 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadRepository) 175 176 // Test getting diff 177 reqDiff := NewRequestf(t, "GET", "/api/v1/repos/%s/repo16/git/commits/f27c2b2b03dcab38beaf89b0ab4ff61f6de63441.diff", user.Name). 178 AddTokenAuth(token) 179 resp := MakeRequest(t, reqDiff, http.StatusOK) 180 assert.EqualValues(t, 181 "commit f27c2b2b03dcab38beaf89b0ab4ff61f6de63441\nAuthor: User2 <user2@example.com>\nDate: Sun Aug 6 19:55:01 2017 +0200\n\n good signed commit\n\ndiff --git a/readme.md b/readme.md\nnew file mode 100644\nindex 0000000..458121c\n--- /dev/null\n+++ b/readme.md\n@@ -0,0 +1 @@\n+good sign\n", 182 resp.Body.String()) 183 184 // Test getting patch 185 reqPatch := NewRequestf(t, "GET", "/api/v1/repos/%s/repo16/git/commits/f27c2b2b03dcab38beaf89b0ab4ff61f6de63441.patch", user.Name). 186 AddTokenAuth(token) 187 resp = MakeRequest(t, reqPatch, http.StatusOK) 188 assert.EqualValues(t, 189 "From f27c2b2b03dcab38beaf89b0ab4ff61f6de63441 Mon Sep 17 00:00:00 2001\nFrom: User2 <user2@example.com>\nDate: Sun, 6 Aug 2017 19:55:01 +0200\nSubject: [PATCH] good signed commit\n\n---\n readme.md | 1 +\n 1 file changed, 1 insertion(+)\n create mode 100644 readme.md\n\ndiff --git a/readme.md b/readme.md\nnew file mode 100644\nindex 0000000..458121c\n--- /dev/null\n+++ b/readme.md\n@@ -0,0 +1 @@\n+good sign\n", 190 resp.Body.String()) 191 } 192 193 func TestGetFileHistory(t *testing.T) { 194 defer tests.PrepareTestEnv(t)() 195 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) 196 // Login as User2. 197 session := loginUser(t, user.Name) 198 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadRepository) 199 200 req := NewRequestf(t, "GET", "/api/v1/repos/%s/repo16/commits?path=readme.md&sha=good-sign", user.Name). 201 AddTokenAuth(token) 202 resp := MakeRequest(t, req, http.StatusOK) 203 204 var apiData []api.Commit 205 DecodeJSON(t, resp, &apiData) 206 207 assert.Len(t, apiData, 1) 208 assert.Equal(t, "f27c2b2b03dcab38beaf89b0ab4ff61f6de63441", apiData[0].CommitMeta.SHA) 209 compareCommitFiles(t, []string{"readme.md"}, apiData[0].Files) 210 211 assert.EqualValues(t, resp.Header().Get("X-Total"), "1") 212 } 213 214 func TestGetFileHistoryNotOnMaster(t *testing.T) { 215 defer tests.PrepareTestEnv(t)() 216 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) 217 // Login as User2. 218 session := loginUser(t, user.Name) 219 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadRepository) 220 221 req := NewRequestf(t, "GET", "/api/v1/repos/%s/repo20/commits?path=test.csv&sha=add-csv¬=master", user.Name). 222 AddTokenAuth(token) 223 resp := MakeRequest(t, req, http.StatusOK) 224 225 var apiData []api.Commit 226 DecodeJSON(t, resp, &apiData) 227 228 assert.Len(t, apiData, 1) 229 assert.Equal(t, "c8e31bc7688741a5287fcde4fbb8fc129ca07027", apiData[0].CommitMeta.SHA) 230 compareCommitFiles(t, []string{"test.csv"}, apiData[0].Files) 231 232 assert.EqualValues(t, resp.Header().Get("X-Total"), "1") 233 }