logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

o_auth_app_controller_test.exs (6023B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.AdminAPI.OAuthAppControllerTest do
  5. use Pleroma.Web.ConnCase, async: true
  6. use Oban.Testing, repo: Pleroma.Repo
  7. import Pleroma.Factory
  8. alias Pleroma.Web.Endpoint
  9. setup do
  10. admin = insert(:user, is_admin: true)
  11. token = insert(:oauth_admin_token, user: admin)
  12. conn =
  13. build_conn()
  14. |> assign(:user, admin)
  15. |> assign(:token, token)
  16. {:ok, %{admin: admin, token: token, conn: conn}}
  17. end
  18. describe "POST /api/pleroma/admin/oauth_app" do
  19. test "errors", %{conn: conn} do
  20. response =
  21. conn
  22. |> put_req_header("content-type", "application/json")
  23. |> post("/api/pleroma/admin/oauth_app", %{})
  24. |> json_response_and_validate_schema(400)
  25. assert %{
  26. "error" => "Missing field: name. Missing field: redirect_uris."
  27. } = response
  28. end
  29. test "success", %{conn: conn} do
  30. base_url = Endpoint.url()
  31. app_name = "Trusted app"
  32. response =
  33. conn
  34. |> put_req_header("content-type", "application/json")
  35. |> post("/api/pleroma/admin/oauth_app", %{
  36. name: app_name,
  37. redirect_uris: base_url
  38. })
  39. |> json_response_and_validate_schema(200)
  40. assert %{
  41. "client_id" => _,
  42. "client_secret" => _,
  43. "name" => ^app_name,
  44. "redirect_uri" => ^base_url,
  45. "trusted" => false
  46. } = response
  47. end
  48. test "with trusted", %{conn: conn} do
  49. base_url = Endpoint.url()
  50. app_name = "Trusted app"
  51. response =
  52. conn
  53. |> put_req_header("content-type", "application/json")
  54. |> post("/api/pleroma/admin/oauth_app", %{
  55. name: app_name,
  56. redirect_uris: base_url,
  57. trusted: true
  58. })
  59. |> json_response_and_validate_schema(200)
  60. assert %{
  61. "client_id" => _,
  62. "client_secret" => _,
  63. "name" => ^app_name,
  64. "redirect_uri" => ^base_url,
  65. "trusted" => true
  66. } = response
  67. end
  68. end
  69. describe "GET /api/pleroma/admin/oauth_app" do
  70. setup do
  71. app = insert(:oauth_app)
  72. {:ok, app: app}
  73. end
  74. test "list", %{conn: conn} do
  75. response =
  76. conn
  77. |> get("/api/pleroma/admin/oauth_app")
  78. |> json_response_and_validate_schema(200)
  79. assert %{"apps" => apps, "count" => count, "page_size" => _} = response
  80. assert length(apps) == count
  81. end
  82. test "with page size", %{conn: conn} do
  83. insert(:oauth_app)
  84. page_size = 1
  85. response =
  86. conn
  87. |> get("/api/pleroma/admin/oauth_app?page_size=#{page_size}")
  88. |> json_response_and_validate_schema(200)
  89. assert %{"apps" => apps, "count" => _, "page_size" => ^page_size} = response
  90. assert length(apps) == page_size
  91. end
  92. test "search by client name", %{conn: conn, app: app} do
  93. response =
  94. conn
  95. |> get("/api/pleroma/admin/oauth_app?name=#{app.client_name}")
  96. |> json_response_and_validate_schema(200)
  97. assert %{"apps" => [returned], "count" => _, "page_size" => _} = response
  98. assert returned["client_id"] == app.client_id
  99. assert returned["name"] == app.client_name
  100. end
  101. test "search by client id", %{conn: conn, app: app} do
  102. response =
  103. conn
  104. |> get("/api/pleroma/admin/oauth_app?client_id=#{app.client_id}")
  105. |> json_response_and_validate_schema(200)
  106. assert %{"apps" => [returned], "count" => _, "page_size" => _} = response
  107. assert returned["client_id"] == app.client_id
  108. assert returned["name"] == app.client_name
  109. end
  110. test "only trusted", %{conn: conn} do
  111. app = insert(:oauth_app, trusted: true)
  112. response =
  113. conn
  114. |> get("/api/pleroma/admin/oauth_app?trusted=true")
  115. |> json_response_and_validate_schema(200)
  116. assert %{"apps" => [returned], "count" => _, "page_size" => _} = response
  117. assert returned["client_id"] == app.client_id
  118. assert returned["name"] == app.client_name
  119. end
  120. end
  121. describe "DELETE /api/pleroma/admin/oauth_app/:id" do
  122. test "with id", %{conn: conn} do
  123. app = insert(:oauth_app)
  124. response =
  125. conn
  126. |> delete("/api/pleroma/admin/oauth_app/" <> to_string(app.id))
  127. |> json_response_and_validate_schema(:no_content)
  128. assert response == ""
  129. end
  130. test "with nonexistent id", %{conn: conn} do
  131. response =
  132. conn
  133. |> delete("/api/pleroma/admin/oauth_app/0")
  134. |> json_response_and_validate_schema(:bad_request)
  135. assert response == ""
  136. end
  137. end
  138. describe "PATCH /api/pleroma/admin/oauth_app/:id" do
  139. test "with id", %{conn: conn} do
  140. app = insert(:oauth_app)
  141. name = "another name"
  142. url = "https://example.com"
  143. scopes = ["admin"]
  144. id = app.id
  145. website = "http://website.com"
  146. response =
  147. conn
  148. |> put_req_header("content-type", "application/json")
  149. |> patch("/api/pleroma/admin/oauth_app/#{id}", %{
  150. name: name,
  151. trusted: true,
  152. redirect_uris: url,
  153. scopes: scopes,
  154. website: website
  155. })
  156. |> json_response_and_validate_schema(200)
  157. assert %{
  158. "client_id" => _,
  159. "client_secret" => _,
  160. "id" => ^id,
  161. "name" => ^name,
  162. "redirect_uri" => ^url,
  163. "trusted" => true,
  164. "website" => ^website
  165. } = response
  166. end
  167. test "without id", %{conn: conn} do
  168. response =
  169. conn
  170. |> put_req_header("content-type", "application/json")
  171. |> patch("/api/pleroma/admin/oauth_app/0")
  172. |> json_response_and_validate_schema(:bad_request)
  173. assert response == ""
  174. end
  175. end
  176. end