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

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