You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

api_wiki_test.go 6.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. // Copyright 2021 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package integration
  4. import (
  5. "encoding/base64"
  6. "fmt"
  7. "net/http"
  8. "testing"
  9. auth_model "code.gitea.io/gitea/models/auth"
  10. api "code.gitea.io/gitea/modules/structs"
  11. "code.gitea.io/gitea/tests"
  12. "github.com/stretchr/testify/assert"
  13. )
  14. func TestAPIGetWikiPage(t *testing.T) {
  15. defer tests.PrepareTestEnv(t)()
  16. username := "user2"
  17. urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/wiki/page/Home", username, "repo1")
  18. req := NewRequest(t, "GET", urlStr)
  19. resp := MakeRequest(t, req, http.StatusOK)
  20. var page *api.WikiPage
  21. DecodeJSON(t, resp, &page)
  22. assert.Equal(t, &api.WikiPage{
  23. WikiPageMetaData: &api.WikiPageMetaData{
  24. Title: "Home",
  25. HTMLURL: page.HTMLURL,
  26. SubURL: "Home",
  27. LastCommit: &api.WikiCommit{
  28. ID: "2c54faec6c45d31c1abfaecdab471eac6633738a",
  29. Author: &api.CommitUser{
  30. Identity: api.Identity{
  31. Name: "Ethan Koenig",
  32. Email: "ethantkoenig@gmail.com",
  33. },
  34. Date: "2017-11-27T04:31:18Z",
  35. },
  36. Committer: &api.CommitUser{
  37. Identity: api.Identity{
  38. Name: "Ethan Koenig",
  39. Email: "ethantkoenig@gmail.com",
  40. },
  41. Date: "2017-11-27T04:31:18Z",
  42. },
  43. Message: "Add Home.md\n",
  44. },
  45. },
  46. ContentBase64: base64.RawStdEncoding.EncodeToString(
  47. []byte("# Home page\n\nThis is the home page!\n"),
  48. ),
  49. CommitCount: 1,
  50. Sidebar: "",
  51. Footer: "",
  52. }, page)
  53. }
  54. func TestAPIListWikiPages(t *testing.T) {
  55. defer tests.PrepareTestEnv(t)()
  56. username := "user2"
  57. urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/wiki/pages", username, "repo1")
  58. req := NewRequest(t, "GET", urlStr)
  59. resp := MakeRequest(t, req, http.StatusOK)
  60. var meta []*api.WikiPageMetaData
  61. DecodeJSON(t, resp, &meta)
  62. dummymeta := []*api.WikiPageMetaData{
  63. {
  64. Title: "Home",
  65. HTMLURL: meta[0].HTMLURL,
  66. SubURL: "Home",
  67. LastCommit: &api.WikiCommit{
  68. ID: "2c54faec6c45d31c1abfaecdab471eac6633738a",
  69. Author: &api.CommitUser{
  70. Identity: api.Identity{
  71. Name: "Ethan Koenig",
  72. Email: "ethantkoenig@gmail.com",
  73. },
  74. Date: "2017-11-27T04:31:18Z",
  75. },
  76. Committer: &api.CommitUser{
  77. Identity: api.Identity{
  78. Name: "Ethan Koenig",
  79. Email: "ethantkoenig@gmail.com",
  80. },
  81. Date: "2017-11-27T04:31:18Z",
  82. },
  83. Message: "Add Home.md\n",
  84. },
  85. },
  86. {
  87. Title: "Page With Image",
  88. HTMLURL: meta[1].HTMLURL,
  89. SubURL: "Page-With-Image",
  90. LastCommit: &api.WikiCommit{
  91. ID: "0cf15c3f66ec8384480ed9c3cf87c9e97fbb0ec3",
  92. Author: &api.CommitUser{
  93. Identity: api.Identity{
  94. Name: "Gabriel Silva Simões",
  95. Email: "simoes.sgabriel@gmail.com",
  96. },
  97. Date: "2019-01-25T01:41:55Z",
  98. },
  99. Committer: &api.CommitUser{
  100. Identity: api.Identity{
  101. Name: "Gabriel Silva Simões",
  102. Email: "simoes.sgabriel@gmail.com",
  103. },
  104. Date: "2019-01-25T01:41:55Z",
  105. },
  106. Message: "Add jpeg.jpg and page with image\n",
  107. },
  108. },
  109. {
  110. Title: "Page With Spaced Name",
  111. HTMLURL: meta[2].HTMLURL,
  112. SubURL: "Page-With-Spaced-Name",
  113. LastCommit: &api.WikiCommit{
  114. ID: "c10d10b7e655b3dab1f53176db57c8219a5488d6",
  115. Author: &api.CommitUser{
  116. Identity: api.Identity{
  117. Name: "Gabriel Silva Simões",
  118. Email: "simoes.sgabriel@gmail.com",
  119. },
  120. Date: "2019-01-25T01:39:51Z",
  121. },
  122. Committer: &api.CommitUser{
  123. Identity: api.Identity{
  124. Name: "Gabriel Silva Simões",
  125. Email: "simoes.sgabriel@gmail.com",
  126. },
  127. Date: "2019-01-25T01:39:51Z",
  128. },
  129. Message: "Add page with spaced name\n",
  130. },
  131. },
  132. {
  133. Title: "Unescaped File",
  134. HTMLURL: meta[3].HTMLURL,
  135. SubURL: "Unescaped-File",
  136. LastCommit: &api.WikiCommit{
  137. ID: "0dca5bd9b5d7ef937710e056f575e86c0184ba85",
  138. Author: &api.CommitUser{
  139. Identity: api.Identity{
  140. Name: "6543",
  141. Email: "6543@obermui.de",
  142. },
  143. Date: "2021-07-19T16:42:46Z",
  144. },
  145. Committer: &api.CommitUser{
  146. Identity: api.Identity{
  147. Name: "6543",
  148. Email: "6543@obermui.de",
  149. },
  150. Date: "2021-07-19T16:42:46Z",
  151. },
  152. Message: "add unescaped file\n",
  153. },
  154. },
  155. }
  156. assert.Equal(t, dummymeta, meta)
  157. }
  158. func TestAPINewWikiPage(t *testing.T) {
  159. for _, title := range []string{
  160. "New page",
  161. "&&&&",
  162. } {
  163. defer tests.PrepareTestEnv(t)()
  164. username := "user2"
  165. session := loginUser(t, username)
  166. token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository)
  167. urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/wiki/new?token=%s", username, "repo1", token)
  168. req := NewRequestWithJSON(t, "POST", urlStr, &api.CreateWikiPageOptions{
  169. Title: title,
  170. ContentBase64: base64.StdEncoding.EncodeToString([]byte("Wiki page content for API unit tests")),
  171. Message: "",
  172. })
  173. MakeRequest(t, req, http.StatusCreated)
  174. }
  175. }
  176. func TestAPIEditWikiPage(t *testing.T) {
  177. defer tests.PrepareTestEnv(t)()
  178. username := "user2"
  179. session := loginUser(t, username)
  180. token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository)
  181. urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/wiki/page/Page-With-Spaced-Name?token=%s", username, "repo1", token)
  182. req := NewRequestWithJSON(t, "PATCH", urlStr, &api.CreateWikiPageOptions{
  183. Title: "edited title",
  184. ContentBase64: base64.StdEncoding.EncodeToString([]byte("Edited wiki page content for API unit tests")),
  185. Message: "",
  186. })
  187. MakeRequest(t, req, http.StatusOK)
  188. }
  189. func TestAPIListPageRevisions(t *testing.T) {
  190. defer tests.PrepareTestEnv(t)()
  191. username := "user2"
  192. urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/wiki/revisions/Home", username, "repo1")
  193. req := NewRequest(t, "GET", urlStr)
  194. resp := MakeRequest(t, req, http.StatusOK)
  195. var revisions *api.WikiCommitList
  196. DecodeJSON(t, resp, &revisions)
  197. dummyrevisions := &api.WikiCommitList{
  198. WikiCommits: []*api.WikiCommit{
  199. {
  200. ID: "2c54faec6c45d31c1abfaecdab471eac6633738a",
  201. Author: &api.CommitUser{
  202. Identity: api.Identity{
  203. Name: "Ethan Koenig",
  204. Email: "ethantkoenig@gmail.com",
  205. },
  206. Date: "2017-11-27T04:31:18Z",
  207. },
  208. Committer: &api.CommitUser{
  209. Identity: api.Identity{
  210. Name: "Ethan Koenig",
  211. Email: "ethantkoenig@gmail.com",
  212. },
  213. Date: "2017-11-27T04:31:18Z",
  214. },
  215. Message: "Add Home.md\n",
  216. },
  217. },
  218. Count: 1,
  219. }
  220. assert.Equal(t, dummyrevisions, revisions)
  221. }