183 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| # Pleroma: A lightweight social networking server
 | |
| # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
 | |
| # SPDX-License-Identifier: AGPL-3.0-only
 | |
| 
 | |
| defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
 | |
|   use Pleroma.Web.ConnCase
 | |
| 
 | |
|   alias Pleroma.Notification
 | |
|   alias Pleroma.Repo
 | |
|   alias Pleroma.User
 | |
|   alias Pleroma.Web.CommonAPI
 | |
| 
 | |
|   import Pleroma.Factory
 | |
|   import Tesla.Mock
 | |
| 
 | |
|   setup do
 | |
|     mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
 | |
|     :ok
 | |
|   end
 | |
| 
 | |
|   clear_config([:rich_media, :enabled])
 | |
| 
 | |
|   test "getting a list of mutes", %{conn: conn} do
 | |
|     user = insert(:user)
 | |
|     other_user = insert(:user)
 | |
| 
 | |
|     {:ok, user} = User.mute(user, other_user)
 | |
| 
 | |
|     conn =
 | |
|       conn
 | |
|       |> assign(:user, user)
 | |
|       |> get("/api/v1/mutes")
 | |
| 
 | |
|     other_user_id = to_string(other_user.id)
 | |
|     assert [%{"id" => ^other_user_id}] = json_response(conn, 200)
 | |
|   end
 | |
| 
 | |
|   test "getting a list of blocks", %{conn: conn} do
 | |
|     user = insert(:user)
 | |
|     other_user = insert(:user)
 | |
| 
 | |
|     {:ok, user} = User.block(user, other_user)
 | |
| 
 | |
|     conn =
 | |
|       conn
 | |
|       |> assign(:user, user)
 | |
|       |> get("/api/v1/blocks")
 | |
| 
 | |
|     other_user_id = to_string(other_user.id)
 | |
|     assert [%{"id" => ^other_user_id}] = json_response(conn, 200)
 | |
|   end
 | |
| 
 | |
|   test "unimplemented follow_requests, blocks, domain blocks" do
 | |
|     user = insert(:user)
 | |
| 
 | |
|     ["blocks", "domain_blocks", "follow_requests"]
 | |
|     |> Enum.each(fn endpoint ->
 | |
|       conn =
 | |
|         build_conn()
 | |
|         |> assign(:user, user)
 | |
|         |> get("/api/v1/#{endpoint}")
 | |
| 
 | |
|       assert [] = json_response(conn, 200)
 | |
|     end)
 | |
|   end
 | |
| 
 | |
|   test "returns the favorites of a user", %{conn: conn} do
 | |
|     user = insert(:user)
 | |
|     other_user = insert(:user)
 | |
| 
 | |
|     {:ok, _} = CommonAPI.post(other_user, %{"status" => "bla"})
 | |
|     {:ok, activity} = CommonAPI.post(other_user, %{"status" => "traps are happy"})
 | |
| 
 | |
|     {:ok, _, _} = CommonAPI.favorite(activity.id, user)
 | |
| 
 | |
|     first_conn =
 | |
|       conn
 | |
|       |> assign(:user, user)
 | |
|       |> get("/api/v1/favourites")
 | |
| 
 | |
|     assert [status] = json_response(first_conn, 200)
 | |
|     assert status["id"] == to_string(activity.id)
 | |
| 
 | |
|     assert [{"link", _link_header}] =
 | |
|              Enum.filter(first_conn.resp_headers, fn element -> match?({"link", _}, element) end)
 | |
| 
 | |
|     # Honours query params
 | |
|     {:ok, second_activity} =
 | |
|       CommonAPI.post(other_user, %{
 | |
|         "status" =>
 | |
|           "Trees Are Never Sad Look At Them Every Once In Awhile They're Quite Beautiful."
 | |
|       })
 | |
| 
 | |
|     {:ok, _, _} = CommonAPI.favorite(second_activity.id, user)
 | |
| 
 | |
|     last_like = status["id"]
 | |
| 
 | |
|     second_conn =
 | |
|       conn
 | |
|       |> assign(:user, user)
 | |
|       |> get("/api/v1/favourites?since_id=#{last_like}")
 | |
| 
 | |
|     assert [second_status] = json_response(second_conn, 200)
 | |
|     assert second_status["id"] == to_string(second_activity.id)
 | |
| 
 | |
|     third_conn =
 | |
|       conn
 | |
|       |> assign(:user, user)
 | |
|       |> get("/api/v1/favourites?limit=0")
 | |
| 
 | |
|     assert [] = json_response(third_conn, 200)
 | |
|   end
 | |
| 
 | |
|   describe "link headers" do
 | |
|     test "preserves parameters in link headers", %{conn: conn} do
 | |
|       user = insert(:user)
 | |
|       other_user = insert(:user)
 | |
| 
 | |
|       {:ok, activity1} =
 | |
|         CommonAPI.post(other_user, %{
 | |
|           "status" => "hi @#{user.nickname}",
 | |
|           "visibility" => "public"
 | |
|         })
 | |
| 
 | |
|       {:ok, activity2} =
 | |
|         CommonAPI.post(other_user, %{
 | |
|           "status" => "hi @#{user.nickname}",
 | |
|           "visibility" => "public"
 | |
|         })
 | |
| 
 | |
|       notification1 = Repo.get_by(Notification, activity_id: activity1.id)
 | |
|       notification2 = Repo.get_by(Notification, activity_id: activity2.id)
 | |
| 
 | |
|       conn =
 | |
|         conn
 | |
|         |> assign(:user, user)
 | |
|         |> get("/api/v1/notifications", %{media_only: true})
 | |
| 
 | |
|       assert [link_header] = get_resp_header(conn, "link")
 | |
|       assert link_header =~ ~r/media_only=true/
 | |
|       assert link_header =~ ~r/min_id=#{notification2.id}/
 | |
|       assert link_header =~ ~r/max_id=#{notification1.id}/
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe "empty_array, stubs for mastodon api" do
 | |
|     test "GET /api/v1/accounts/:id/identity_proofs", %{conn: conn} do
 | |
|       user = insert(:user)
 | |
| 
 | |
|       res =
 | |
|         conn
 | |
|         |> assign(:user, user)
 | |
|         |> get("/api/v1/accounts/#{user.id}/identity_proofs")
 | |
|         |> json_response(200)
 | |
| 
 | |
|       assert res == []
 | |
|     end
 | |
| 
 | |
|     test "GET /api/v1/endorsements", %{conn: conn} do
 | |
|       user = insert(:user)
 | |
| 
 | |
|       res =
 | |
|         conn
 | |
|         |> assign(:user, user)
 | |
|         |> get("/api/v1/endorsements")
 | |
|         |> json_response(200)
 | |
| 
 | |
|       assert res == []
 | |
|     end
 | |
| 
 | |
|     test "GET /api/v1/trends", %{conn: conn} do
 | |
|       user = insert(:user)
 | |
| 
 | |
|       res =
 | |
|         conn
 | |
|         |> assign(:user, user)
 | |
|         |> get("/api/v1/trends")
 | |
|         |> json_response(200)
 | |
| 
 | |
|       assert res == []
 | |
|     end
 | |
|   end
 | |
| end
 | 
