@@ -20,10 +20,10 @@ func testAPIGetBranch(t *testing.T, branchName string, exists bool) { | |||
req := NewRequestf(t, "GET", "/api/v1/repos/user2/repo1/branches/%s", branchName) | |||
resp := session.MakeRequest(t, req, NoExpectedStatus) | |||
if !exists { | |||
assert.EqualValues(t, http.StatusNotFound, resp.HeaderCode) | |||
assert.EqualValues(t, http.StatusNotFound, resp.Code) | |||
return | |||
} | |||
assert.EqualValues(t, http.StatusOK, resp.HeaderCode) | |||
assert.EqualValues(t, http.StatusOK, resp.Code) | |||
var branch api.Branch | |||
DecodeJSON(t, resp, &branch) | |||
assert.EqualValues(t, branchName, branch.Name) |
@@ -6,27 +6,30 @@ package integrations | |||
import ( | |||
"net/http" | |||
"net/http/httptest" | |||
"strconv" | |||
"testing" | |||
"github.com/stretchr/testify/assert" | |||
api "code.gitea.io/sdk/gitea" | |||
"github.com/stretchr/testify/assert" | |||
) | |||
type makeRequestFunc func(testing.TB, *http.Request, int) *httptest.ResponseRecorder | |||
func TestGPGKeys(t *testing.T) { | |||
prepareTestEnv(t) | |||
session := loginUser(t, "user2") | |||
tt := []struct { | |||
name string | |||
reqBuilder func(testing.TB, *http.Request, int) *TestResponse | |||
results []int | |||
name string | |||
makeRequest makeRequestFunc | |||
results []int | |||
}{ | |||
{name: "NoLogin", reqBuilder: MakeRequest, | |||
{name: "NoLogin", makeRequest: MakeRequest, | |||
results: []int{http.StatusUnauthorized, http.StatusUnauthorized, http.StatusUnauthorized, http.StatusUnauthorized, http.StatusUnauthorized, http.StatusUnauthorized, http.StatusUnauthorized, http.StatusUnauthorized}, | |||
}, | |||
{name: "LoggedAsUser2", reqBuilder: session.MakeRequest, | |||
{name: "LoggedAsUser2", makeRequest: session.MakeRequest, | |||
results: []int{http.StatusOK, http.StatusOK, http.StatusNotFound, http.StatusNoContent, http.StatusInternalServerError, http.StatusInternalServerError, http.StatusCreated, http.StatusCreated}}, | |||
} | |||
@@ -35,29 +38,29 @@ func TestGPGKeys(t *testing.T) { | |||
//Basic test on result code | |||
t.Run(tc.name, func(t *testing.T) { | |||
t.Run("ViewOwnGPGKeys", func(t *testing.T) { | |||
testViewOwnGPGKeys(t, tc.reqBuilder, tc.results[0]) | |||
testViewOwnGPGKeys(t, tc.makeRequest, tc.results[0]) | |||
}) | |||
t.Run("ViewGPGKeys", func(t *testing.T) { | |||
testViewGPGKeys(t, tc.reqBuilder, tc.results[1]) | |||
testViewGPGKeys(t, tc.makeRequest, tc.results[1]) | |||
}) | |||
t.Run("GetGPGKey", func(t *testing.T) { | |||
testGetGPGKey(t, tc.reqBuilder, tc.results[2]) | |||
testGetGPGKey(t, tc.makeRequest, tc.results[2]) | |||
}) | |||
t.Run("DeleteGPGKey", func(t *testing.T) { | |||
testDeleteGPGKey(t, tc.reqBuilder, tc.results[3]) | |||
testDeleteGPGKey(t, tc.makeRequest, tc.results[3]) | |||
}) | |||
t.Run("CreateInvalidGPGKey", func(t *testing.T) { | |||
testCreateInvalidGPGKey(t, tc.reqBuilder, tc.results[4]) | |||
testCreateInvalidGPGKey(t, tc.makeRequest, tc.results[4]) | |||
}) | |||
t.Run("CreateNoneRegistredEmailGPGKey", func(t *testing.T) { | |||
testCreateNoneRegistredEmailGPGKey(t, tc.reqBuilder, tc.results[5]) | |||
testCreateNoneRegistredEmailGPGKey(t, tc.makeRequest, tc.results[5]) | |||
}) | |||
t.Run("CreateValidGPGKey", func(t *testing.T) { | |||
testCreateValidGPGKey(t, tc.reqBuilder, tc.results[6]) | |||
testCreateValidGPGKey(t, tc.makeRequest, tc.results[6]) | |||
}) | |||
t.Run("CreateValidSecondaryEmailGPGKey", func(t *testing.T) { | |||
testCreateValidSecondaryEmailGPGKey(t, tc.reqBuilder, tc.results[7]) | |||
testCreateValidSecondaryEmailGPGKey(t, tc.makeRequest, tc.results[7]) | |||
}) | |||
}) | |||
} | |||
@@ -140,39 +143,39 @@ func TestGPGKeys(t *testing.T) { | |||
}) | |||
} | |||
func testViewOwnGPGKeys(t *testing.T, reqBuilder func(testing.TB, *http.Request, int) *TestResponse, expected int) { | |||
func testViewOwnGPGKeys(t *testing.T, makeRequest makeRequestFunc, expected int) { | |||
req := NewRequest(t, "GET", "/api/v1/user/gpg_keys") | |||
reqBuilder(t, req, expected) | |||
makeRequest(t, req, expected) | |||
} | |||
func testViewGPGKeys(t *testing.T, reqBuilder func(testing.TB, *http.Request, int) *TestResponse, expected int) { | |||
func testViewGPGKeys(t *testing.T, makeRequest makeRequestFunc, expected int) { | |||
req := NewRequest(t, "GET", "/api/v1/users/user2/gpg_keys") | |||
reqBuilder(t, req, expected) | |||
makeRequest(t, req, expected) | |||
} | |||
func testGetGPGKey(t *testing.T, reqBuilder func(testing.TB, *http.Request, int) *TestResponse, expected int) { | |||
func testGetGPGKey(t *testing.T, makeRequest makeRequestFunc, expected int) { | |||
req := NewRequest(t, "GET", "/api/v1/user/gpg_keys/1") | |||
reqBuilder(t, req, expected) | |||
makeRequest(t, req, expected) | |||
} | |||
func testDeleteGPGKey(t *testing.T, reqBuilder func(testing.TB, *http.Request, int) *TestResponse, expected int) { | |||
func testDeleteGPGKey(t *testing.T, makeRequest makeRequestFunc, expected int) { | |||
req := NewRequest(t, "DELETE", "/api/v1/user/gpg_keys/1") | |||
reqBuilder(t, req, expected) | |||
makeRequest(t, req, expected) | |||
} | |||
func testCreateGPGKey(t *testing.T, reqBuilder func(testing.TB, *http.Request, int) *TestResponse, expected int, publicKey string) { | |||
func testCreateGPGKey(t *testing.T, makeRequest makeRequestFunc, expected int, publicKey string) { | |||
req := NewRequestWithJSON(t, "POST", "/api/v1/user/gpg_keys", api.CreateGPGKeyOption{ | |||
ArmoredKey: publicKey, | |||
}) | |||
reqBuilder(t, req, expected) | |||
makeRequest(t, req, expected) | |||
} | |||
func testCreateInvalidGPGKey(t *testing.T, reqBuilder func(testing.TB, *http.Request, int) *TestResponse, expected int) { | |||
testCreateGPGKey(t, reqBuilder, expected, "invalid_key") | |||
func testCreateInvalidGPGKey(t *testing.T, makeRequest makeRequestFunc, expected int) { | |||
testCreateGPGKey(t, makeRequest, expected, "invalid_key") | |||
} | |||
func testCreateNoneRegistredEmailGPGKey(t *testing.T, reqBuilder func(testing.TB, *http.Request, int) *TestResponse, expected int) { | |||
testCreateGPGKey(t, reqBuilder, expected, `-----BEGIN PGP PUBLIC KEY BLOCK----- | |||
func testCreateNoneRegistredEmailGPGKey(t *testing.T, makeRequest makeRequestFunc, expected int) { | |||
testCreateGPGKey(t, makeRequest, expected, `-----BEGIN PGP PUBLIC KEY BLOCK----- | |||
mQENBFmGUygBCACjCNbKvMGgp0fd5vyFW9olE1CLCSyyF9gQN2hSuzmZLuAZF2Kh | |||
dCMCG2T1UwzUB/yWUFWJ2BtCwSjuaRv+cGohqEy6bhEBV90peGA33lHfjx7wP25O | |||
@@ -191,9 +194,9 @@ INx/MmBfmtCq05FqNclvU+sj2R3N1JJOtBOjZrJHQbJhzoILou8AkxeX1A+q9OAz | |||
-----END PGP PUBLIC KEY BLOCK-----`) | |||
} | |||
func testCreateValidGPGKey(t *testing.T, reqBuilder func(testing.TB, *http.Request, int) *TestResponse, expected int) { | |||
func testCreateValidGPGKey(t *testing.T, makeRequest makeRequestFunc, expected int) { | |||
//User2 <user2@example.com> //primary & activated | |||
testCreateGPGKey(t, reqBuilder, expected, `-----BEGIN PGP PUBLIC KEY BLOCK----- | |||
testCreateGPGKey(t, makeRequest, expected, `-----BEGIN PGP PUBLIC KEY BLOCK----- | |||
mQENBFmGVsMBCACuxgZ7W7rI9xN08Y4M7B8yx/6/I4Slm94+wXf8YNRvAyqj30dW | |||
VJhyBcnfNRDLKSQp5o/hhfDkCgdqBjLa1PnHlGS3PXJc0hP/FyYPD2BFvNMPpCYS | |||
@@ -225,9 +228,9 @@ uy6MA3VSB99SK9ducGmE1Jv8mcziREroz2TEGr0zPs6h | |||
-----END PGP PUBLIC KEY BLOCK-----`) | |||
} | |||
func testCreateValidSecondaryEmailGPGKey(t *testing.T, reqBuilder func(testing.TB, *http.Request, int) *TestResponse, expected int) { | |||
func testCreateValidSecondaryEmailGPGKey(t *testing.T, makeRequest makeRequestFunc, expected int) { | |||
//User2 <user21@example.com> //secondary and not activated | |||
testCreateGPGKey(t, reqBuilder, expected, `-----BEGIN PGP PUBLIC KEY BLOCK----- | |||
testCreateGPGKey(t, makeRequest, expected, `-----BEGIN PGP PUBLIC KEY BLOCK----- | |||
mQENBFmGWN4BCAC18V4tVGO65VLCV7p14FuXJlUtZ5CuYMvgEkcOqrvRaBSW9ao4 | |||
PGESOhJpfWpnW3QgJniYndLzPpsmdHEclEER6aZjiNgReWPOjHD5tykWocZAJqXD |
@@ -59,9 +59,8 @@ func branchAction(t *testing.T, button string) (*HTMLDoc, string) { | |||
link, exists := htmlDoc.doc.Find(button).Attr("data-url") | |||
assert.True(t, exists, "The template has changed") | |||
htmlDoc = NewHTMLParser(t, resp.Body) | |||
req = NewRequestWithValues(t, "POST", link, map[string]string{ | |||
"_csrf": getCsrf(htmlDoc.doc), | |||
"_csrf": getCsrf(t, htmlDoc.doc), | |||
}) | |||
resp = session.MakeRequest(t, req, http.StatusOK) | |||
@@ -73,7 +72,8 @@ func branchAction(t *testing.T, button string) (*HTMLDoc, string) { | |||
return NewHTMLParser(t, resp.Body), url.Query()["name"][0] | |||
} | |||
func getCsrf(doc *goquery.Document) string { | |||
csrf, _ := doc.Find("meta[name=\"_csrf\"]").Attr("content") | |||
func getCsrf(t *testing.T, doc *goquery.Document) string { | |||
csrf, exists := doc.Find("meta[name=\"_csrf\"]").Attr("content") | |||
assert.True(t, exists) | |||
return csrf | |||
} |
@@ -6,6 +6,7 @@ package integrations | |||
import ( | |||
"net/http" | |||
"net/http/httptest" | |||
"path" | |||
"testing" | |||
@@ -72,7 +73,7 @@ func TestCreateFileOnProtectedBranch(t *testing.T) { | |||
resp = session.MakeRequest(t, req, http.StatusOK) | |||
// Check body for error message | |||
assert.Contains(t, string(resp.Body), "Can not commit to protected branch 'master'.") | |||
assert.Contains(t, resp.Body.String(), "Can not commit to protected branch 'master'.") | |||
// remove the protected branch | |||
csrf = GetCSRF(t, session, "/user2/repo1/settings/branches") | |||
@@ -89,7 +90,7 @@ func TestCreateFileOnProtectedBranch(t *testing.T) { | |||
} | |||
func testEditFile(t *testing.T, session *TestSession, user, repo, branch, filePath, newContent string) *TestResponse { | |||
func testEditFile(t *testing.T, session *TestSession, user, repo, branch, filePath, newContent string) *httptest.ResponseRecorder { | |||
// Get to the 'edit this file' page | |||
req := NewRequest(t, "GET", path.Join(user, repo, "_edit", branch, filePath)) | |||
resp := session.MakeRequest(t, req, http.StatusOK) | |||
@@ -113,12 +114,12 @@ func testEditFile(t *testing.T, session *TestSession, user, repo, branch, filePa | |||
// Verify the change | |||
req = NewRequest(t, "GET", path.Join(user, repo, "raw/branch", branch, filePath)) | |||
resp = session.MakeRequest(t, req, http.StatusOK) | |||
assert.EqualValues(t, newContent, string(resp.Body)) | |||
assert.EqualValues(t, newContent, resp.Body.String()) | |||
return resp | |||
} | |||
func testEditFileToNewBranch(t *testing.T, session *TestSession, user, repo, branch, targetBranch, filePath, newContent string) *TestResponse { | |||
func testEditFileToNewBranch(t *testing.T, session *TestSession, user, repo, branch, targetBranch, filePath, newContent string) *httptest.ResponseRecorder { | |||
// Get to the 'edit this file' page | |||
req := NewRequest(t, "GET", path.Join(user, repo, "_edit", branch, filePath)) | |||
@@ -144,7 +145,7 @@ func testEditFileToNewBranch(t *testing.T, session *TestSession, user, repo, bra | |||
// Verify the change | |||
req = NewRequest(t, "GET", path.Join(user, repo, "raw/branch", targetBranch, filePath)) | |||
resp = session.MakeRequest(t, req, http.StatusOK) | |||
assert.EqualValues(t, newContent, string(resp.Body)) | |||
assert.EqualValues(t, newContent, resp.Body.String()) | |||
return resp | |||
} |
@@ -18,8 +18,8 @@ type HTMLDoc struct { | |||
} | |||
// NewHTMLParser parse html file | |||
func NewHTMLParser(t testing.TB, content []byte) *HTMLDoc { | |||
doc, err := goquery.NewDocumentFromReader(bytes.NewReader(content)) | |||
func NewHTMLParser(t testing.TB, body *bytes.Buffer) *HTMLDoc { | |||
doc, err := goquery.NewDocumentFromReader(body) | |||
assert.NoError(t, err) | |||
return &HTMLDoc{doc: doc} | |||
} |
@@ -13,6 +13,7 @@ import ( | |||
"log" | |||
"net/http" | |||
"net/http/cookiejar" | |||
"net/http/httptest" | |||
"net/url" | |||
"os" | |||
"path" | |||
@@ -158,7 +159,7 @@ func (s *TestSession) GetCookie(name string) *http.Cookie { | |||
return nil | |||
} | |||
func (s *TestSession) MakeRequest(t testing.TB, req *http.Request, expectedStatus int) *TestResponse { | |||
func (s *TestSession) MakeRequest(t testing.TB, req *http.Request, expectedStatus int) *httptest.ResponseRecorder { | |||
baseURL, err := url.Parse(setting.AppURL) | |||
assert.NoError(t, err) | |||
for _, c := range s.jar.Cookies(baseURL) { | |||
@@ -167,7 +168,7 @@ func (s *TestSession) MakeRequest(t testing.TB, req *http.Request, expectedStatu | |||
resp := MakeRequest(t, req, expectedStatus) | |||
ch := http.Header{} | |||
ch.Add("Cookie", strings.Join(resp.Headers["Set-Cookie"], ";")) | |||
ch.Add("Cookie", strings.Join(resp.HeaderMap["Set-Cookie"], ";")) | |||
cr := http.Request{Header: ch} | |||
s.jar.SetCookies(baseURL, cr.Cookies()) | |||
@@ -207,7 +208,7 @@ func loginUserWithPassword(t testing.TB, userName, password string) *TestSession | |||
resp = MakeRequest(t, req, http.StatusFound) | |||
ch := http.Header{} | |||
ch.Add("Cookie", strings.Join(resp.Headers["Set-Cookie"], ";")) | |||
ch.Add("Cookie", strings.Join(resp.HeaderMap["Set-Cookie"], ";")) | |||
cr := http.Request{Header: ch} | |||
session := emptyTestSession(t) | |||
@@ -219,30 +220,6 @@ func loginUserWithPassword(t testing.TB, userName, password string) *TestSession | |||
return session | |||
} | |||
type TestResponseWriter struct { | |||
HeaderCode int | |||
Writer io.Writer | |||
Headers http.Header | |||
} | |||
func (w *TestResponseWriter) Header() http.Header { | |||
return w.Headers | |||
} | |||
func (w *TestResponseWriter) Write(b []byte) (int, error) { | |||
return w.Writer.Write(b) | |||
} | |||
func (w *TestResponseWriter) WriteHeader(n int) { | |||
w.HeaderCode = n | |||
} | |||
type TestResponse struct { | |||
HeaderCode int | |||
Body []byte | |||
Headers http.Header | |||
} | |||
func NewRequest(t testing.TB, method, urlStr string) *http.Request { | |||
return NewRequestWithBody(t, method, urlStr, nil) | |||
} | |||
@@ -278,26 +255,18 @@ func NewRequestWithBody(t testing.TB, method, urlStr string, body io.Reader) *ht | |||
const NoExpectedStatus = -1 | |||
func MakeRequest(t testing.TB, req *http.Request, expectedStatus int) *TestResponse { | |||
buffer := bytes.NewBuffer(nil) | |||
respWriter := &TestResponseWriter{ | |||
Writer: buffer, | |||
Headers: make(map[string][]string), | |||
} | |||
mac.ServeHTTP(respWriter, req) | |||
func MakeRequest(t testing.TB, req *http.Request, expectedStatus int) *httptest.ResponseRecorder { | |||
recorder := httptest.NewRecorder() | |||
mac.ServeHTTP(recorder, req) | |||
if expectedStatus != NoExpectedStatus { | |||
assert.EqualValues(t, expectedStatus, respWriter.HeaderCode, | |||
assert.EqualValues(t, expectedStatus, recorder.Code, | |||
"Request: %s %s", req.Method, req.URL.String()) | |||
} | |||
return &TestResponse{ | |||
HeaderCode: respWriter.HeaderCode, | |||
Body: buffer.Bytes(), | |||
Headers: respWriter.Headers, | |||
} | |||
return recorder | |||
} | |||
func DecodeJSON(t testing.TB, resp *TestResponse, v interface{}) { | |||
decoder := json.NewDecoder(bytes.NewBuffer(resp.Body)) | |||
func DecodeJSON(t testing.TB, resp *httptest.ResponseRecorder, v interface{}) { | |||
decoder := json.NewDecoder(resp.Body) | |||
assert.NoError(t, decoder.Decode(v)) | |||
} | |||
@@ -308,8 +277,8 @@ func GetCSRF(t testing.TB, session *TestSession, urlStr string) string { | |||
return doc.GetCSRF() | |||
} | |||
func RedirectURL(t testing.TB, resp *TestResponse) string { | |||
urlSlice := resp.Headers["Location"] | |||
func RedirectURL(t testing.TB, resp *httptest.ResponseRecorder) string { | |||
urlSlice := resp.HeaderMap["Location"] | |||
assert.NotEmpty(t, urlSlice, "No redirect URL founds") | |||
return urlSlice[0] | |||
} |
@@ -25,12 +25,12 @@ func assertProtectedBranch(t *testing.T, repoID int64, branchName string, isErr, | |||
resp := MakeRequest(t, req, NoExpectedStatus) | |||
if isErr { | |||
assert.EqualValues(t, http.StatusInternalServerError, resp.HeaderCode) | |||
assert.EqualValues(t, http.StatusInternalServerError, resp.Code) | |||
} else { | |||
assert.EqualValues(t, http.StatusOK, resp.HeaderCode) | |||
assert.EqualValues(t, http.StatusOK, resp.Code) | |||
var branch models.ProtectedBranch | |||
t.Log(string(resp.Body)) | |||
assert.NoError(t, json.Unmarshal(resp.Body, &branch)) | |||
t.Log(resp.Body.String()) | |||
assert.NoError(t, json.Unmarshal(resp.Body.Bytes(), &branch)) | |||
assert.Equal(t, canPush, !branch.IsProtected()) | |||
} | |||
} |
@@ -23,5 +23,5 @@ func TestPullCompare(t *testing.T) { | |||
req = NewRequest(t, "GET", link) | |||
resp = session.MakeRequest(t, req, http.StatusOK) | |||
assert.EqualValues(t, http.StatusOK, resp.HeaderCode) | |||
assert.EqualValues(t, http.StatusOK, resp.Code) | |||
} |
@@ -6,6 +6,7 @@ package integrations | |||
import ( | |||
"net/http" | |||
"net/http/httptest" | |||
"path" | |||
"strings" | |||
"testing" | |||
@@ -13,7 +14,7 @@ import ( | |||
"github.com/stretchr/testify/assert" | |||
) | |||
func testPullCreate(t *testing.T, session *TestSession, user, repo, branch string) *TestResponse { | |||
func testPullCreate(t *testing.T, session *TestSession, user, repo, branch string) *httptest.ResponseRecorder { | |||
req := NewRequest(t, "GET", path.Join(user, repo)) | |||
resp := session.MakeRequest(t, req, http.StatusOK) | |||
@@ -6,6 +6,7 @@ package integrations | |||
import ( | |||
"net/http" | |||
"net/http/httptest" | |||
"path" | |||
"strings" | |||
"testing" | |||
@@ -13,7 +14,7 @@ import ( | |||
"github.com/stretchr/testify/assert" | |||
) | |||
func testPullMerge(t *testing.T, session *TestSession, user, repo, pullnum string) *TestResponse { | |||
func testPullMerge(t *testing.T, session *TestSession, user, repo, pullnum string) *httptest.ResponseRecorder { | |||
req := NewRequest(t, "GET", path.Join(user, repo, "pulls", pullnum)) | |||
resp := session.MakeRequest(t, req, http.StatusOK) | |||
@@ -29,7 +30,7 @@ func testPullMerge(t *testing.T, session *TestSession, user, repo, pullnum strin | |||
return resp | |||
} | |||
func testPullCleanUp(t *testing.T, session *TestSession, user, repo, pullnum string) *TestResponse { | |||
func testPullCleanUp(t *testing.T, session *TestSession, user, repo, pullnum string) *httptest.ResponseRecorder { | |||
req := NewRequest(t, "GET", path.Join(user, repo, "pulls", pullnum)) | |||
resp := session.MakeRequest(t, req, http.StatusOK) | |||
@@ -7,6 +7,7 @@ package integrations | |||
import ( | |||
"fmt" | |||
"net/http" | |||
"net/http/httptest" | |||
"testing" | |||
"code.gitea.io/gitea/models" | |||
@@ -14,7 +15,7 @@ import ( | |||
"github.com/stretchr/testify/assert" | |||
) | |||
func testRepoFork(t *testing.T, session *TestSession, ownerName, repoName, forkOwnerName, forkRepoName string) *TestResponse { | |||
func testRepoFork(t *testing.T, session *TestSession, ownerName, repoName, forkOwnerName, forkRepoName string) *httptest.ResponseRecorder { | |||
forkOwner := models.AssertExistsAndLoadBean(t, &models.User{Name: forkOwnerName}).(*models.User) | |||
// Step0: check the existence of the to-fork repo |
@@ -6,12 +6,13 @@ package integrations | |||
import ( | |||
"net/http" | |||
"net/http/httptest" | |||
"testing" | |||
"github.com/stretchr/testify/assert" | |||
) | |||
func testRepoMigrate(t testing.TB, session *TestSession, cloneAddr, repoName string) *TestResponse { | |||
func testRepoMigrate(t testing.TB, session *TestSession, cloneAddr, repoName string) *httptest.ResponseRecorder { | |||
req := NewRequest(t, "GET", "/repo/migrate") | |||
resp := session.MakeRequest(t, req, http.StatusOK) | |||
htmlDoc := NewHTMLParser(t, resp.Body) |