diff options
Diffstat (limited to 'test/web/twitter_api/twitter_api_controller_test.exs')
| -rw-r--r-- | test/web/twitter_api/twitter_api_controller_test.exs | 156 | 
1 files changed, 155 insertions, 1 deletions
| diff --git a/test/web/twitter_api/twitter_api_controller_test.exs b/test/web/twitter_api/twitter_api_controller_test.exs index 3a035e298..6bdcb4fd8 100644 --- a/test/web/twitter_api/twitter_api_controller_test.exs +++ b/test/web/twitter_api/twitter_api_controller_test.exs @@ -77,7 +77,8 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        conn = conn_with_creds |> post(request_path, %{status: " "})        assert json_response(conn, 400) == error_response -      conn = conn_with_creds |> post(request_path, %{status: "Nice meme."}) +      # we post with visibility private in order to avoid triggering relay +      conn = conn_with_creds |> post(request_path, %{status: "Nice meme.", visibility: "private"})        assert json_response(conn, 200) ==                 ActivityRepresenter.to_map(Repo.one(Activity), %{user: user}) @@ -99,6 +100,56 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        assert length(response) == 10      end + +    test "returns 403 to unauthenticated request when the instance is not public" do +      instance = +        Application.get_env(:pleroma, :instance) +        |> Keyword.put(:public, false) + +      Application.put_env(:pleroma, :instance, instance) + +      conn +      |> get("/api/statuses/public_timeline.json") +      |> json_response(403) + +      instance = +        Application.get_env(:pleroma, :instance) +        |> Keyword.put(:public, true) + +      Application.put_env(:pleroma, :instance, instance) +    end + +    test "returns 200 to unauthenticated request when the instance is public" do +      conn +      |> get("/api/statuses/public_timeline.json") +      |> json_response(200) +    end +  end + +  describe "GET /statuses/public_and_external_timeline.json" do +    test "returns 403 to unauthenticated request when the instance is not public" do +      instance = +        Application.get_env(:pleroma, :instance) +        |> Keyword.put(:public, false) + +      Application.put_env(:pleroma, :instance, instance) + +      conn +      |> get("/api/statuses/public_and_external_timeline.json") +      |> json_response(403) + +      instance = +        Application.get_env(:pleroma, :instance) +        |> Keyword.put(:public, true) + +      Application.put_env(:pleroma, :instance, instance) +    end + +    test "returns 200 to unauthenticated request when the instance is public" do +      conn +      |> get("/api/statuses/public_and_external_timeline.json") +      |> json_response(200) +    end    end    describe "GET /statuses/show/:id.json" do @@ -220,6 +271,43 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do      end    end +  describe "GET /statuses/dm_timeline.json" do +    test "it show direct messages", %{conn: conn} do +      user_one = insert(:user) +      user_two = insert(:user) + +      {:ok, user_two} = User.follow(user_two, user_one) + +      {:ok, direct} = +        CommonAPI.post(user_one, %{ +          "status" => "Hi @#{user_two.nickname}!", +          "visibility" => "direct" +        }) + +      {:ok, direct_two} = +        CommonAPI.post(user_two, %{ +          "status" => "Hi @#{user_one.nickname}!", +          "visibility" => "direct" +        }) + +      {:ok, _follower_only} = +        CommonAPI.post(user_one, %{ +          "status" => "Hi @#{user_two.nickname}!", +          "visibility" => "private" +        }) + +      # Only direct should be visible here +      res_conn = +        conn +        |> assign(:user, user_two) +        |> get("/api/statuses/dm_timeline.json") + +      [status, status_two] = json_response(res_conn, 200) +      assert status["id"] == direct_two.id +      assert status_two["id"] == direct.id +    end +  end +    describe "GET /statuses/mentions.json" do      setup [:valid_user] @@ -280,6 +368,56 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do      end    end +  describe "POST /api/qvitter/statuses/notifications/read" do +    setup [:valid_user] + +    test "without valid credentials", %{conn: conn} do +      conn = post(conn, "/api/qvitter/statuses/notifications/read", %{"latest_id" => 1_234_567}) +      assert json_response(conn, 403) == %{"error" => "Invalid credentials."} +    end + +    test "with credentials, without any params", %{conn: conn, user: current_user} do +      conn = +        conn +        |> with_credentials(current_user.nickname, "test") +        |> post("/api/qvitter/statuses/notifications/read") + +      assert json_response(conn, 400) == %{ +               "error" => "You need to specify latest_id", +               "request" => "/api/qvitter/statuses/notifications/read" +             } +    end + +    test "with credentials, with params", %{conn: conn, user: current_user} do +      other_user = insert(:user) + +      {:ok, _activity} = +        ActivityBuilder.insert(%{"to" => [current_user.ap_id]}, %{user: other_user}) + +      response_conn = +        conn +        |> with_credentials(current_user.nickname, "test") +        |> get("/api/qvitter/statuses/notifications.json") + +      [notification] = response = json_response(response_conn, 200) + +      assert length(response) == 1 + +      assert notification["is_seen"] == 0 + +      response_conn = +        conn +        |> with_credentials(current_user.nickname, "test") +        |> post("/api/qvitter/statuses/notifications/read", %{"latest_id" => notification["id"]}) + +      [notification] = response = json_response(response_conn, 200) + +      assert length(response) == 1 + +      assert notification["is_seen"] == 1 +    end +  end +    describe "GET /statuses/user_timeline.json" do      setup [:valid_user] @@ -1080,4 +1218,20 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        assert relationship["follows_you"] == false      end    end + +  describe "GET /api/pleroma/search_user" do +    test "it returns users, ordered by similarity", %{conn: conn} do +      user = insert(:user, %{name: "eal"}) +      user_two = insert(:user, %{name: "ean"}) +      user_three = insert(:user, %{name: "ebn"}) + +      resp = +        conn +        |> get(twitter_api_search__path(conn, :search_user), query: "eal") +        |> json_response(200) + +      assert length(resp) == 3 +      assert [user.id, user_two.id, user_three.id] == Enum.map(resp, fn %{"id" => id} -> id end) +    end +  end  end | 
