summaryrefslogtreecommitdiff
path: root/test/web/twitter_api
diff options
context:
space:
mode:
Diffstat (limited to 'test/web/twitter_api')
-rw-r--r--test/web/twitter_api/representers/activity_representer_test.exs5
-rw-r--r--test/web/twitter_api/twitter_api_controller_test.exs119
-rw-r--r--test/web/twitter_api/twitter_api_test.exs46
-rw-r--r--test/web/twitter_api/views/user_view_test.exs67
4 files changed, 223 insertions, 14 deletions
diff --git a/test/web/twitter_api/representers/activity_representer_test.exs b/test/web/twitter_api/representers/activity_representer_test.exs
index f08644611..7e2ea630c 100644
--- a/test/web/twitter_api/representers/activity_representer_test.exs
+++ b/test/web/twitter_api/representers/activity_representer_test.exs
@@ -91,6 +91,7 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenterTest do
"published" => date,
"type" => "Note",
"content" => content_html,
+ "summary" => "2hu",
"inReplyToStatusId" => 213123,
"attachment" => [
object
@@ -110,14 +111,14 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenterTest do
local: false
}
- expected_html = "alert('YAY')Some <img height='32px' width='32px' alt='2hu' title='2hu' src='corndog.png' /> content mentioning <a href=\"#{mentioned_user.ap_id}\">@shp</a>"
+ expected_html = "<span>2hu</span><br />alert('YAY')Some <img height='32px' width='32px' alt='2hu' title='2hu' src='corndog.png' /> content mentioning <a href=\"#{mentioned_user.ap_id}\">@shp</a>"
expected_status = %{
"id" => activity.id,
"user" => UserView.render("show.json", %{user: user, for: follower}),
"is_local" => false,
"statusnet_html" => expected_html,
- "text" => content,
+ "text" => "2hu" <> content,
"is_post_verb" => true,
"created_at" => "Tue May 24 13:26:08 +0000 2016",
"in_reply_to_status_id" => 213123,
diff --git a/test/web/twitter_api/twitter_api_controller_test.exs b/test/web/twitter_api/twitter_api_controller_test.exs
index a62947018..90d0fa654 100644
--- a/test/web/twitter_api/twitter_api_controller_test.exs
+++ b/test/web/twitter_api/twitter_api_controller_test.exs
@@ -6,6 +6,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Web.TwitterAPI.UserView
alias Pleroma.Web.CommonAPI
+ alias Pleroma.Web.TwitterAPI.TwitterAPI
import Pleroma.Factory
@@ -21,7 +22,8 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
|> with_credentials(user.nickname, "test")
|> post("/api/account/verify_credentials.json")
- assert json_response(conn, 200) == UserView.render("show.json", %{user: user})
+ assert response = json_response(conn, 200)
+ assert response == UserView.render("show.json", %{user: user, token: response["token"]})
end
end
@@ -101,6 +103,45 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
end
end
+ describe "GET /users/show.json" do
+ test "gets user with screen_name", %{conn: conn} do
+ user = insert(:user)
+
+ conn = conn
+ |> get("/api/users/show.json", %{"screen_name" => user.nickname})
+
+ response = json_response(conn, 200)
+
+ assert response["id"] == user.id
+ end
+
+ test "gets user with user_id", %{conn: conn} do
+ user = insert(:user)
+
+ conn = conn
+ |> get("/api/users/show.json", %{"user_id" => user.id})
+
+ response = json_response(conn, 200)
+
+ assert response["id"] == user.id
+ end
+
+ test "gets a user for a logged in user", %{conn: conn} do
+ user = insert(:user)
+ logged_in = insert(:user)
+
+ {:ok, logged_in, user, _activity} = TwitterAPI.follow(logged_in, %{"user_id" => user.id})
+
+ conn = conn
+ |> with_credentials(logged_in.nickname, "test")
+ |> get("/api/users/show.json", %{"user_id" => user.id})
+
+ response = json_response(conn, 200)
+
+ assert response["following"] == true
+ end
+ end
+
describe "GET /statusnet/conversation/:id.json" do
test "returns the statuses in the conversation", %{conn: conn} do
{:ok, _user} = UserBuilder.insert
@@ -248,7 +289,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
|> post("/api/friendships/create.json", %{user_id: followed.id})
current_user = Repo.get(User, current_user.id)
- assert current_user.following == [User.ap_followers(followed)]
+ assert User.ap_followers(followed) in current_user.following
assert json_response(conn, 200) == UserView.render("show.json", %{user: followed, for: current_user})
end
end
@@ -264,7 +305,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
followed = insert(:user)
{:ok, current_user} = User.follow(current_user, followed)
- assert current_user.following == [User.ap_followers(followed)]
+ assert User.ap_followers(followed) in current_user.following
ActivityPub.follow(current_user, followed)
conn = conn
@@ -272,11 +313,54 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
|> post("/api/friendships/destroy.json", %{user_id: followed.id})
current_user = Repo.get(User, current_user.id)
- assert current_user.following == []
+ assert current_user.following == [current_user.ap_id]
assert json_response(conn, 200) == UserView.render("show.json", %{user: followed, for: current_user})
end
end
+ describe "POST /blocks/create.json" do
+ setup [:valid_user]
+ test "without valid credentials", %{conn: conn} do
+ conn = post conn, "/api/blocks/create.json"
+ assert json_response(conn, 403) == %{"error" => "Invalid credentials."}
+ end
+
+ test "with credentials", %{conn: conn, user: current_user} do
+ blocked = insert(:user)
+
+ conn = conn
+ |> with_credentials(current_user.nickname, "test")
+ |> post("/api/blocks/create.json", %{user_id: blocked.id})
+
+ current_user = Repo.get(User, current_user.id)
+ assert User.blocks?(current_user, blocked)
+ assert json_response(conn, 200) == UserView.render("show.json", %{user: blocked, for: current_user})
+ end
+ end
+
+ describe "POST /blocks/destroy.json" do
+ setup [:valid_user]
+ test "without valid credentials", %{conn: conn} do
+ conn = post conn, "/api/blocks/destroy.json"
+ assert json_response(conn, 403) == %{"error" => "Invalid credentials."}
+ end
+
+ test "with credentials", %{conn: conn, user: current_user} do
+ blocked = insert(:user)
+
+ {:ok, current_user} = User.block(current_user, blocked)
+ assert User.blocks?(current_user, blocked)
+
+ conn = conn
+ |> with_credentials(current_user.nickname, "test")
+ |> post("/api/blocks/destroy.json", %{user_id: blocked.id})
+
+ current_user = Repo.get(User, current_user.id)
+ assert current_user.info["blocks"] == []
+ assert json_response(conn, 200) == UserView.render("show.json", %{user: blocked, for: current_user})
+ end
+ end
+
describe "GET /help/test.json" do
test "returns \"ok\"", %{conn: conn} do
conn = get conn, "/api/help/test.json"
@@ -405,11 +489,13 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
describe "GET /api/externalprofile/show" do
test "it returns the user", %{conn: conn} do
user = insert(:user)
+ other_user = insert(:user)
conn = conn
- |> get("/api/externalprofile/show", %{profileurl: user.ap_id})
+ |> assign(:user, user)
+ |> get("/api/externalprofile/show", %{profileurl: other_user.ap_id})
- assert json_response(conn, 200) == UserView.render("show.json", %{user: user})
+ assert json_response(conn, 200) == UserView.render("show.json", %{user: other_user})
end
end
@@ -445,7 +531,26 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
|> assign(:user, user)
|> get("/api/statuses/friends")
- assert json_response(conn, 200) == UserView.render("index.json", %{users: [followed_one, followed_two], for: user})
+ assert MapSet.equal?(MapSet.new(json_response(conn, 200)), MapSet.new(UserView.render("index.json", %{users: [followed_one, followed_two], for: user})))
+ end
+ end
+
+ describe "GET /friends/ids" do
+ test "it returns a user's friends", %{conn: conn} do
+ user = insert(:user)
+ followed_one = insert(:user)
+ followed_two = insert(:user)
+ not_followed = insert(:user)
+
+ {:ok, user} = User.follow(user, followed_one)
+ {:ok, user} = User.follow(user, followed_two)
+
+ conn = conn
+ |> assign(:user, user)
+ |> get("/api/friends/ids")
+
+ expected = [followed_one.id, followed_two.id]
+ assert MapSet.equal?(MapSet.new(Poison.decode!(json_response(conn, 200))), MapSet.new(expected))
end
end
diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs
index 1cf48dd4b..96552f97e 100644
--- a/test/web/twitter_api/twitter_api_test.exs
+++ b/test/web/twitter_api/twitter_api_test.exs
@@ -28,13 +28,13 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
object = Repo.insert!(%Object{data: object_data})
input = %{
- "status" => "Hello again, @shp.<script></script>\nThis is on another line. #2hu #epic #phantasmagoric",
+ "status" => "Hello again, @shp.<script></script>\nThis is on another :moominmamma: line. #2hu #epic #phantasmagoric",
"media_ids" => [object.id]
}
{ :ok, activity = %Activity{} } = TwitterAPI.create_status(user, input)
- assert get_in(activity.data, ["object", "content"]) == "Hello again, <a href='shp'>@shp</a>.<br>\nThis is on another line. #2hu #epic #phantasmagoric<br>\n<a href=\"http://example.org/image.jpg\" class='attachment'>image.jpg</a>"
+ assert get_in(activity.data, ["object", "content"]) == "Hello again, <a href='shp'>@shp</a>.&lt;script&gt;&lt;/script&gt;<br>This is on another :moominmamma: line. #2hu #epic #phantasmagoric<br><a href=\"http://example.org/image.jpg\" class='attachment'>image.jpg</a>"
assert get_in(activity.data, ["object", "type"]) == "Note"
assert get_in(activity.data, ["object", "actor"]) == user.ap_id
assert get_in(activity.data, ["actor"]) == user.ap_id
@@ -43,6 +43,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
assert Enum.member?(get_in(activity.data, ["to"]), "shp")
assert activity.local == true
+ assert %{"moominmamma" => "http://localhost:4001/finmoji/128px/moominmamma-128.png"} = activity.data["object"]["emoji"]
+
# hashtags
assert activity.data["object"]["tag"] == ["2hu", "epic", "phantasmagoric"]
@@ -179,7 +181,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
followed = insert(:user)
{:ok, user, followed, _activity } = TwitterAPI.follow(user, %{"user_id" => followed.id})
- assert user.following == [User.ap_followers(followed)]
+ assert User.ap_followers(followed) in user.following
{ :error, msg } = TwitterAPI.follow(user, %{"user_id" => followed.id})
assert msg == "Could not follow user: #{followed.nickname} is already on your list."
@@ -190,7 +192,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
followed = insert(:user)
{:ok, user, followed, _activity } = TwitterAPI.follow(user, %{"screen_name" => followed.nickname})
- assert user.following == [User.ap_followers(followed)]
+ assert User.ap_followers(followed) in user.following
followed = User.get_by_ap_id(followed.ap_id)
assert followed.info["follower_count"] == 1
@@ -224,6 +226,40 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
assert msg == "Not subscribed!"
end
+ test "Block another user using user_id" do
+ user = insert(:user)
+ blocked = insert(:user)
+
+ {:ok, user, blocked} = TwitterAPI.block(user, %{"user_id" => blocked.id})
+ assert User.blocks?(user, blocked)
+ end
+
+ test "Block another user using screen_name" do
+ user = insert(:user)
+ blocked = insert(:user)
+
+ {:ok, user, blocked} = TwitterAPI.block(user, %{"screen_name" => blocked.nickname})
+ assert User.blocks?(user, blocked)
+ end
+
+ test "Unblock another user using user_id" do
+ unblocked = insert(:user)
+ user = insert(:user)
+ User.block(user, unblocked)
+
+ {:ok, user, unblocked} = TwitterAPI.unblock(user, %{"user_id" => unblocked.id})
+ assert user.info["blocks"] == []
+ end
+
+ test "Unblock another user using screen_name" do
+ unblocked = insert(:user)
+ user = insert(:user)
+ User.block(user, unblocked)
+
+ {:ok, user, unblocked} = TwitterAPI.unblock(user, %{"screen_name" => unblocked.nickname})
+ assert user.info["blocks"] == []
+ end
+
test "fetch statuses in a context using the conversation id" do
{:ok, user} = UserBuilder.insert()
{:ok, activity} = ActivityBuilder.insert(%{"type" => "Create", "context" => "2hu"})
@@ -365,7 +401,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
{:ok, represented} = TwitterAPI.get_external_profile(user, id)
remote = User.get_by_ap_id(id)
- assert represented == UserView.render("show.json", %{user: remote, for: user})
+ assert represented["id"] == UserView.render("show.json", %{user: remote, for: user})["id"]
# Also fetches the feed.
assert Activity.get_create_activity_by_object_ap_id("tag:mastodon.social,2017-04-05:objectId=1641750:objectType=Status")
diff --git a/test/web/twitter_api/views/user_view_test.exs b/test/web/twitter_api/views/user_view_test.exs
index 886af6b66..18a19ef70 100644
--- a/test/web/twitter_api/views/user_view_test.exs
+++ b/test/web/twitter_api/views/user_view_test.exs
@@ -50,6 +50,8 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do
"profile_image_url_profile_size" => image,
"profile_image_url_original" => image,
"following" => false,
+ "follows_you" => false,
+ "statusnet_blocking" => false,
"rights" => %{},
"statusnet_profile_url" => user.ap_id,
"cover_photo" => nil,
@@ -78,6 +80,8 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do
"profile_image_url_profile_size" => image,
"profile_image_url_original" => image,
"following" => true,
+ "follows_you" => false,
+ "statusnet_blocking" => false,
"rights" => %{},
"statusnet_profile_url" => user.ap_id,
"cover_photo" => nil,
@@ -86,4 +90,67 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do
assert represented == UserView.render("show.json", %{user: user, for: follower})
end
+
+ test "A user that follows you", %{user: user} do
+ follower = insert(:user)
+ {:ok, follower} = User.follow(follower, user)
+ {:ok, user} = User.update_follower_count(user)
+ image = "https://placehold.it/48x48"
+ represented = %{
+ "id" => follower.id,
+ "name" => follower.name,
+ "screen_name" => follower.nickname,
+ "description" => HtmlSanitizeEx.strip_tags(follower.bio),
+ "created_at" => follower.inserted_at |> Utils.format_naive_asctime,
+ "favourites_count" => 0,
+ "statuses_count" => 0,
+ "friends_count" => 1,
+ "followers_count" => 0,
+ "profile_image_url" => image,
+ "profile_image_url_https" => image,
+ "profile_image_url_profile_size" => image,
+ "profile_image_url_original" => image,
+ "following" => false,
+ "follows_you" => true,
+ "statusnet_blocking" => false,
+ "rights" => %{},
+ "statusnet_profile_url" => follower.ap_id,
+ "cover_photo" => nil,
+ "background_image" => nil
+ }
+
+ assert represented == UserView.render("show.json", %{user: follower, for: user})
+ end
+
+ test "A blocked user for the blocker", %{user: user} do
+ user = insert(:user)
+ blocker = insert(:user)
+ User.block(blocker, user)
+ image = "https://placehold.it/48x48"
+ represented = %{
+ "id" => user.id,
+ "name" => user.name,
+ "screen_name" => user.nickname,
+ "description" => HtmlSanitizeEx.strip_tags(user.bio),
+ "created_at" => user.inserted_at |> Utils.format_naive_asctime,
+ "favourites_count" => 0,
+ "statuses_count" => 0,
+ "friends_count" => 0,
+ "followers_count" => 0,
+ "profile_image_url" => image,
+ "profile_image_url_https" => image,
+ "profile_image_url_profile_size" => image,
+ "profile_image_url_original" => image,
+ "following" => false,
+ "follows_you" => false,
+ "statusnet_blocking" => true,
+ "rights" => %{},
+ "statusnet_profile_url" => user.ap_id,
+ "cover_photo" => nil,
+ "background_image" => nil
+ }
+
+ blocker = Repo.get(User, blocker.id)
+ assert represented == UserView.render("show.json", %{user: user, for: blocker})
+ end
end