X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=test%2Fweb%2Fmastodon_api%2Fmastodon_api_controller_test.exs;h=1bef1a1fdc902462f0e60093e2529569cb6c5eb2;hb=9f0a2a714b498edfbacc638fa79e06e3a8dc4d04;hp=9af49da123b050b75b1e06c9905e041b6fed6d9d;hpb=454dc1857074c8a98b4fada6d65ed4a810f1c501;p=akkoma diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index 9af49da12..1bef1a1fd 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -3,7 +3,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do alias Pleroma.Web.TwitterAPI.TwitterAPI alias Pleroma.{Repo, User, Activity} - alias Pleroma.Web.OStatus + alias Pleroma.Web.{OStatus, CommonAPI} import Pleroma.Factory @@ -149,4 +149,187 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do assert activity.id == id end end + + describe "unfavoriting" do + test "unfavorites a status and returns it", %{conn: conn} do + activity = insert(:note_activity) + user = insert(:user) + + {:ok, _, _} = CommonAPI.favorite(activity.id, user) + + conn = conn + |> assign(:user, user) + |> post("/api/v1/statuses/#{activity.id}/unfavourite") + + assert %{"id" => id, "favourites_count" => 0, "favourited" => false} = json_response(conn, 200) + assert activity.id == id + end + end + + describe "user timelines" do + test "gets a users statuses", %{conn: conn} do + _note = insert(:note_activity) + note_two = insert(:note_activity) + + user = User.get_by_ap_id(note_two.data["actor"]) + + conn = conn + |> get("/api/v1/accounts/#{user.id}/statuses") + + assert [%{"id" => id}] = json_response(conn, 200) + + assert id == note_two.id + end + end + + describe "user relationships" do + test "returns the relationships for the current user", %{conn: conn} do + user = insert(:user) + other_user = insert(:user) + {:ok, user} = User.follow(user, other_user) + + conn = conn + |> assign(:user, user) + |> get("/api/v1/accounts/relationships", %{"id" => [other_user.id]}) + + assert [relationship] = json_response(conn, 200) + + assert other_user.id == relationship["id"] + end + end + + test "account fetching", %{conn: conn} do + user = insert(:user) + + conn = conn + |> get("/api/v1/accounts/#{user.id}") + + assert %{"id" => id} = json_response(conn, 200) + assert id == user.id + + conn = build_conn() + |> get("/api/v1/accounts/-1") + + assert %{"error" => "Can't find user"} = json_response(conn, 404) + end + + test "media upload", %{conn: conn} do + file = %Plug.Upload{content_type: "image/jpg", path: Path.absname("test/fixtures/image.jpg"), filename: "an_image.jpg"} + + user = insert(:user) + + conn = conn + |> assign(:user, user) + |> post("/api/v1/media", %{"file" => file}) + + assert media = json_response(conn, 200) + + assert media["type"] == "image" + end + + test "hashtag timeline", %{conn: conn} do + following = insert(:user) + + {:ok, activity} = TwitterAPI.create_status(following, %{"status" => "test #2hu"}) + {:ok, [_activity]} = OStatus.fetch_activity_from_url("https://shitposter.club/notice/2827873") + + conn = conn + |> get("/api/v1/timelines/tag/2hu") + + assert [%{"id" => id}] = json_response(conn, 200) + + assert id == activity.id + end + + test "getting followers", %{conn: conn} do + user = insert(:user) + other_user = insert(:user) + {:ok, user} = User.follow(user, other_user) + + conn = conn + |> get("/api/v1/accounts/#{other_user.id}/followers") + + assert [%{"id" => id}] = json_response(conn, 200) + assert id = user.id + end + + test "getting following", %{conn: conn} do + user = insert(:user) + other_user = insert(:user) + {:ok, user} = User.follow(user, other_user) + + conn = conn + |> get("/api/v1/accounts/#{user.id}/following") + + assert [%{"id" => id}] = json_response(conn, 200) + assert id = other_user.id + end + + test "following / unfollowing a user", %{conn: conn} do + user = insert(:user) + other_user = insert(:user) + + conn = conn + |> assign(:user, user) + |> post("/api/v1/accounts/#{other_user.id}/follow") + + assert %{"id" => id, "following" => true} = json_response(conn, 200) + + user = Repo.get(User, user.id) + conn = build_conn() + |> assign(:user, user) + |> post("/api/v1/accounts/#{other_user.id}/unfollow") + + assert %{"id" => id, "following" => false} = json_response(conn, 200) + end + + test "unimplemented block/mute endpoints" do + user = insert(:user) + other_user = insert(:user) + + ["block", "unblock", "mute", "unmute"] + |> Enum.each(fn(endpoint) -> + conn = build_conn() + |> assign(:user, user) + |> post("/api/v1/accounts/#{other_user.id}/#{endpoint}") + + assert %{"id" => id} = json_response(conn, 200) + assert id == other_user.id + end) + end + + test "unimplemented mutes, follow_requests, blocks, domain blocks" do + user = insert(:user) + + ["blocks", "domain_blocks", "mutes", "follow_requests"] + |> Enum.each(fn(endpoint) -> + conn = build_conn() + |> assign(:user, user) + |> get("/api/v1/#{endpoint}") + + assert [] = json_response(conn, 200) + end) + end + + test "search", %{conn: conn} do + user = insert(:user) + user_two = insert(:user, %{nickname: "shp@shitposter.club"}) + user_three = insert(:user, %{nickname: "shp@heldscal.la", name: "I love 2hu"}) + + {:ok, activity} = CommonAPI.post(user, %{"status" => "This is about 2hu"}) + {:ok, _} = CommonAPI.post(user_two, %{"status" => "This isn't"}) + + conn = conn + |> get("/api/v1/search", %{"q" => "2hu"}) + + assert results = json_response(conn, 200) + + [account] = results["accounts"] + assert account["id"] == user_three.id + + assert results["hashtags"] == [] + + [status] = results["statuses"] + assert status["id"] == activity.id + end end