Add basic search.
[akkoma] / test / web / mastodon_api / mastodon_api_controller_test.exs
index 52415bb50550c3ba2db0abed02ae0a7568e6184c..1bef1a1fdc902462f0e60093e2529569cb6c5eb2 100644 (file)
@@ -186,7 +186,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest 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
@@ -198,4 +197,139 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
       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