-
-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into user-avatar-link-abs
- Loading branch information
Showing
8 changed files
with
1,336 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,251 @@ | ||
// Copyright 2021 The Gitea Authors. All rights reserved. | ||
// Use of this source code is governed by a MIT-style | ||
// license that can be found in the LICENSE file. | ||
|
||
package integrations | ||
|
||
import ( | ||
"encoding/base64" | ||
"fmt" | ||
"net/http" | ||
"testing" | ||
|
||
api "code.gitea.io/gitea/modules/structs" | ||
|
||
"github.com/stretchr/testify/assert" | ||
) | ||
|
||
func TestAPIGetWikiPage(t *testing.T) { | ||
defer prepareTestEnv(t)() | ||
|
||
username := "user2" | ||
session := loginUser(t, username) | ||
|
||
urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/wiki/page/Home", username, "repo1") | ||
|
||
req := NewRequest(t, "GET", urlStr) | ||
resp := session.MakeRequest(t, req, http.StatusOK) | ||
var page *api.WikiPage | ||
DecodeJSON(t, resp, &page) | ||
|
||
assert.Equal(t, &api.WikiPage{ | ||
WikiPageMetaData: &api.WikiPageMetaData{ | ||
Title: "Home", | ||
HTMLURL: page.HTMLURL, | ||
SubURL: "Home", | ||
LastCommit: &api.WikiCommit{ | ||
ID: "2c54faec6c45d31c1abfaecdab471eac6633738a", | ||
Author: &api.CommitUser{ | ||
Identity: api.Identity{ | ||
Name: "Ethan Koenig", | ||
Email: "ethantkoenig@gmail.com", | ||
}, | ||
Date: "2017-11-27T04:31:18Z", | ||
}, | ||
Committer: &api.CommitUser{ | ||
Identity: api.Identity{ | ||
Name: "Ethan Koenig", | ||
Email: "ethantkoenig@gmail.com", | ||
}, | ||
Date: "2017-11-27T04:31:18Z", | ||
}, | ||
Message: "Add Home.md\n", | ||
}, | ||
}, | ||
ContentBase64: base64.RawStdEncoding.EncodeToString( | ||
[]byte("# Home page\n\nThis is the home page!\n"), | ||
), | ||
CommitCount: 1, | ||
Sidebar: "", | ||
Footer: "", | ||
}, page) | ||
} | ||
|
||
func TestAPIListWikiPages(t *testing.T) { | ||
defer prepareTestEnv(t)() | ||
|
||
username := "user2" | ||
session := loginUser(t, username) | ||
|
||
urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/wiki/pages", username, "repo1") | ||
|
||
req := NewRequest(t, "GET", urlStr) | ||
resp := session.MakeRequest(t, req, http.StatusOK) | ||
|
||
var meta []*api.WikiPageMetaData | ||
DecodeJSON(t, resp, &meta) | ||
|
||
dummymeta := []*api.WikiPageMetaData{ | ||
{ | ||
Title: "Home", | ||
HTMLURL: meta[0].HTMLURL, | ||
SubURL: "Home", | ||
LastCommit: &api.WikiCommit{ | ||
ID: "2c54faec6c45d31c1abfaecdab471eac6633738a", | ||
Author: &api.CommitUser{ | ||
Identity: api.Identity{ | ||
Name: "Ethan Koenig", | ||
Email: "ethantkoenig@gmail.com", | ||
}, | ||
Date: "2017-11-27T04:31:18Z", | ||
}, | ||
Committer: &api.CommitUser{ | ||
Identity: api.Identity{ | ||
Name: "Ethan Koenig", | ||
Email: "ethantkoenig@gmail.com", | ||
}, | ||
Date: "2017-11-27T04:31:18Z", | ||
}, | ||
Message: "Add Home.md\n", | ||
}, | ||
}, | ||
{ | ||
Title: "Page With Image", | ||
HTMLURL: meta[1].HTMLURL, | ||
SubURL: "Page-With-Image", | ||
LastCommit: &api.WikiCommit{ | ||
ID: "0cf15c3f66ec8384480ed9c3cf87c9e97fbb0ec3", | ||
Author: &api.CommitUser{ | ||
Identity: api.Identity{ | ||
Name: "Gabriel Silva Simões", | ||
Email: "simoes.sgabriel@gmail.com", | ||
}, | ||
Date: "2019-01-25T01:41:55Z", | ||
}, | ||
Committer: &api.CommitUser{ | ||
Identity: api.Identity{ | ||
Name: "Gabriel Silva Simões", | ||
Email: "simoes.sgabriel@gmail.com", | ||
}, | ||
Date: "2019-01-25T01:41:55Z", | ||
}, | ||
Message: "Add jpeg.jpg and page with image\n", | ||
}, | ||
}, | ||
{ | ||
Title: "Page With Spaced Name", | ||
HTMLURL: meta[2].HTMLURL, | ||
SubURL: "Page-With-Spaced-Name", | ||
LastCommit: &api.WikiCommit{ | ||
ID: "c10d10b7e655b3dab1f53176db57c8219a5488d6", | ||
Author: &api.CommitUser{ | ||
Identity: api.Identity{ | ||
Name: "Gabriel Silva Simões", | ||
Email: "simoes.sgabriel@gmail.com", | ||
}, | ||
Date: "2019-01-25T01:39:51Z", | ||
}, | ||
Committer: &api.CommitUser{ | ||
Identity: api.Identity{ | ||
Name: "Gabriel Silva Simões", | ||
Email: "simoes.sgabriel@gmail.com", | ||
}, | ||
Date: "2019-01-25T01:39:51Z", | ||
}, | ||
Message: "Add page with spaced name\n", | ||
}, | ||
}, | ||
{ | ||
Title: "Unescaped File", | ||
HTMLURL: meta[3].HTMLURL, | ||
SubURL: "Unescaped-File", | ||
LastCommit: &api.WikiCommit{ | ||
ID: "0dca5bd9b5d7ef937710e056f575e86c0184ba85", | ||
Author: &api.CommitUser{ | ||
Identity: api.Identity{ | ||
Name: "6543", | ||
Email: "6543@obermui.de", | ||
}, | ||
Date: "2021-07-19T16:42:46Z", | ||
}, | ||
Committer: &api.CommitUser{ | ||
Identity: api.Identity{ | ||
Name: "6543", | ||
Email: "6543@obermui.de", | ||
}, | ||
Date: "2021-07-19T16:42:46Z", | ||
}, | ||
Message: "add unescaped file\n", | ||
}, | ||
}, | ||
} | ||
|
||
assert.Equal(t, dummymeta, meta) | ||
} | ||
|
||
func TestAPINewWikiPage(t *testing.T) { | ||
for _, title := range []string{ | ||
"New page", | ||
"&&&&", | ||
} { | ||
defer prepareTestEnv(t)() | ||
username := "user2" | ||
session := loginUser(t, username) | ||
token := getTokenForLoggedInUser(t, session) | ||
|
||
urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/wiki/new?token=%s", username, "repo1", token) | ||
|
||
req := NewRequestWithJSON(t, "POST", urlStr, &api.CreateWikiPageOptions{ | ||
Title: title, | ||
ContentBase64: base64.StdEncoding.EncodeToString([]byte("Wiki page content for API unit tests")), | ||
Message: "", | ||
}) | ||
session.MakeRequest(t, req, http.StatusCreated) | ||
} | ||
} | ||
|
||
func TestAPIEditWikiPage(t *testing.T) { | ||
defer prepareTestEnv(t)() | ||
username := "user2" | ||
session := loginUser(t, username) | ||
token := getTokenForLoggedInUser(t, session) | ||
|
||
urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/wiki/page/Page-With-Spaced-Name?token=%s", username, "repo1", token) | ||
|
||
req := NewRequestWithJSON(t, "PATCH", urlStr, &api.CreateWikiPageOptions{ | ||
Title: "edited title", | ||
ContentBase64: base64.StdEncoding.EncodeToString([]byte("Edited wiki page content for API unit tests")), | ||
Message: "", | ||
}) | ||
session.MakeRequest(t, req, http.StatusOK) | ||
} | ||
|
||
func TestAPIListPageRevisions(t *testing.T) { | ||
defer prepareTestEnv(t)() | ||
username := "user2" | ||
session := loginUser(t, username) | ||
|
||
urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/wiki/revisions/Home", username, "repo1") | ||
|
||
req := NewRequest(t, "GET", urlStr) | ||
resp := session.MakeRequest(t, req, http.StatusOK) | ||
|
||
var revisions *api.WikiCommitList | ||
DecodeJSON(t, resp, &revisions) | ||
|
||
dummyrevisions := &api.WikiCommitList{ | ||
WikiCommits: []*api.WikiCommit{ | ||
{ | ||
ID: "2c54faec6c45d31c1abfaecdab471eac6633738a", | ||
Author: &api.CommitUser{ | ||
Identity: api.Identity{ | ||
Name: "Ethan Koenig", | ||
Email: "ethantkoenig@gmail.com", | ||
}, | ||
Date: "2017-11-27T04:31:18Z", | ||
}, | ||
Committer: &api.CommitUser{ | ||
Identity: api.Identity{ | ||
Name: "Ethan Koenig", | ||
Email: "ethantkoenig@gmail.com", | ||
}, | ||
Date: "2017-11-27T04:31:18Z", | ||
}, | ||
Message: "Add Home.md\n", | ||
}, | ||
}, | ||
Count: 1, | ||
} | ||
|
||
assert.Equal(t, dummyrevisions, revisions) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
// Copyright 2021 The Gitea Authors. All rights reserved. | ||
// Use of this source code is governed by a MIT-style | ||
// license that can be found in the LICENSE file. | ||
|
||
package convert | ||
|
||
import ( | ||
"time" | ||
|
||
"code.gitea.io/gitea/models" | ||
"code.gitea.io/gitea/modules/git" | ||
api "code.gitea.io/gitea/modules/structs" | ||
"code.gitea.io/gitea/modules/util" | ||
wiki_service "code.gitea.io/gitea/services/wiki" | ||
) | ||
|
||
// ToWikiCommit convert a git commit into a WikiCommit | ||
func ToWikiCommit(commit *git.Commit) *api.WikiCommit { | ||
return &api.WikiCommit{ | ||
ID: commit.ID.String(), | ||
Author: &api.CommitUser{ | ||
Identity: api.Identity{ | ||
Name: commit.Author.Name, | ||
Email: commit.Author.Email, | ||
}, | ||
Date: commit.Author.When.UTC().Format(time.RFC3339), | ||
}, | ||
Committer: &api.CommitUser{ | ||
Identity: api.Identity{ | ||
Name: commit.Committer.Name, | ||
Email: commit.Committer.Email, | ||
}, | ||
Date: commit.Committer.When.UTC().Format(time.RFC3339), | ||
}, | ||
Message: commit.CommitMessage, | ||
} | ||
} | ||
|
||
// ToWikiCommitList convert a list of git commits into a WikiCommitList | ||
func ToWikiCommitList(commits []*git.Commit, total int64) *api.WikiCommitList { | ||
result := make([]*api.WikiCommit, len(commits)) | ||
for i := range commits { | ||
result[i] = ToWikiCommit(commits[i]) | ||
} | ||
return &api.WikiCommitList{ | ||
WikiCommits: result, | ||
Count: total, | ||
} | ||
} | ||
|
||
// ToWikiPageMetaData converts meta information to a WikiPageMetaData | ||
func ToWikiPageMetaData(title string, lastCommit *git.Commit, repo *models.Repository) *api.WikiPageMetaData { | ||
suburl := wiki_service.NameToSubURL(title) | ||
return &api.WikiPageMetaData{ | ||
Title: title, | ||
HTMLURL: util.URLJoin(repo.HTMLURL(), "wiki", suburl), | ||
SubURL: suburl, | ||
LastCommit: ToWikiCommit(lastCommit), | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
// Copyright 2021 The Gitea Authors. All rights reserved. | ||
// Use of this source code is governed by a MIT-style | ||
// license that can be found in the LICENSE file. | ||
|
||
package structs | ||
|
||
// WikiCommit page commit/revision | ||
type WikiCommit struct { | ||
ID string `json:"sha"` | ||
Author *CommitUser `json:"author"` | ||
Committer *CommitUser `json:"commiter"` | ||
Message string `json:"message"` | ||
} | ||
|
||
// WikiPage a wiki page | ||
type WikiPage struct { | ||
*WikiPageMetaData | ||
// Page content, base64 encoded | ||
ContentBase64 string `json:"content_base64"` | ||
CommitCount int64 `json:"commit_count"` | ||
Sidebar string `json:"sidebar"` | ||
Footer string `json:"footer"` | ||
} | ||
|
||
// WikiPageMetaData wiki page meta information | ||
type WikiPageMetaData struct { | ||
Title string `json:"title"` | ||
HTMLURL string `json:"html_url"` | ||
SubURL string `json:"sub_url"` | ||
LastCommit *WikiCommit `json:"last_commit"` | ||
} | ||
|
||
// CreateWikiPageOptions form for creating wiki | ||
type CreateWikiPageOptions struct { | ||
// page title. leave empty to keep unchanged | ||
Title string `json:"title"` | ||
// content must be base64 encoded | ||
ContentBase64 string `json:"content_base64"` | ||
// optional commit message summarizing the change | ||
Message string `json:"message"` | ||
} | ||
|
||
// WikiCommitList commit/revision list | ||
type WikiCommitList struct { | ||
WikiCommits []*WikiCommit `json:"commits"` | ||
Count int64 `json:"count"` | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.