X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=test%2Fweb%2Ftwitter_api%2Ftwitter_api_test.exs;h=6486540f88ac1334819ee447066c68c544e1d540;hb=0f3e78addb4a88106120737f2eb603ec136d99f9;hp=d4341a867d2208497e857f80cae7d1f1b4523c2d;hpb=4afbef39f49948ddd3b1cd1bbda58ff7e3ac2785;p=akkoma diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs index d4341a867..6486540f8 100644 --- a/test/web/twitter_api/twitter_api_test.exs +++ b/test/web/twitter_api/twitter_api_test.exs @@ -1,11 +1,10 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do use Pleroma.DataCase - alias Pleroma.Builders.{UserBuilder, ActivityBuilder} + alias Pleroma.Builders.UserBuilder alias Pleroma.Web.TwitterAPI.{TwitterAPI, UserView} - alias Pleroma.Web.CommonAPI.Utils - alias Pleroma.{Activity, User, Object, Repo} - alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter + alias Pleroma.{Activity, User, Object, Repo, UserInviteToken} alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.TwitterAPI.ActivityView import Pleroma.Factory @@ -36,7 +35,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do {:ok, activity = %Activity{}} = TwitterAPI.create_status(user, input) expected_text = - "Hello again, @shp.<script></script>
This is on another :moominmamma: line.
image.jpg" + "Hello again, @shp.<script></script>
This is on another :moominmamma: line.
image.jpg" assert get_in(activity.data, ["object", "content"]) == expected_text assert get_in(activity.data, ["object", "type"]) == "Note" @@ -96,117 +95,6 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do assert get_in(reply.data, ["object", "inReplyToStatusId"]) == activity.id end - test "fetch public statuses, excluding remote ones." do - %{public: activity, user: user} = ActivityBuilder.public_and_non_public() - insert(:note_activity, %{local: false}) - - follower = insert(:user, following: [User.ap_followers(user)]) - - statuses = TwitterAPI.fetch_public_statuses(follower) - - assert length(statuses) == 1 - - assert Enum.at(statuses, 0) == - ActivityRepresenter.to_map(activity, %{user: user, for: follower}) - end - - test "fetch whole known network statuses" do - %{public: activity, user: user} = ActivityBuilder.public_and_non_public() - insert(:note_activity, %{local: false}) - - follower = insert(:user, following: [user.follower_address]) - - statuses = TwitterAPI.fetch_public_and_external_statuses(follower) - - assert length(statuses) == 2 - - assert Enum.at(statuses, 0) == - ActivityRepresenter.to_map(activity, %{user: user, for: follower}) - end - - test "fetch friends' statuses" do - user = insert(:user, %{following: ["someguy/followers"]}) - {:ok, activity} = ActivityBuilder.insert(%{"to" => ["someguy/followers"]}) - {:ok, direct_activity} = ActivityBuilder.insert(%{"to" => [user.ap_id]}) - - statuses = TwitterAPI.fetch_friend_statuses(user) - - activity_user = Repo.get_by(User, ap_id: activity.data["actor"]) - direct_activity_user = Repo.get_by(User, ap_id: direct_activity.data["actor"]) - - assert length(statuses) == 2 - assert Enum.at(statuses, 0) == ActivityRepresenter.to_map(activity, %{user: activity_user}) - - assert Enum.at(statuses, 1) == - ActivityRepresenter.to_map(direct_activity, %{ - user: direct_activity_user, - mentioned: [user] - }) - end - - test "fetch user's mentions" do - user = insert(:user) - {:ok, activity} = ActivityBuilder.insert(%{"to" => [user.ap_id]}) - activity_user = Repo.get_by(User, ap_id: activity.data["actor"]) - - statuses = TwitterAPI.fetch_mentions(user) - - assert length(statuses) == 1 - - assert Enum.at(statuses, 0) == - ActivityRepresenter.to_map(activity, %{user: activity_user, mentioned: [user]}) - end - - test "get a user by params" do - user1_result = {:ok, user1} = UserBuilder.insert(%{ap_id: "some id", email: "test@pleroma"}) - - {:ok, user2} = - UserBuilder.insert(%{ap_id: "some other id", nickname: "testname2", email: "test2@pleroma"}) - - assert {:error, "You need to specify screen_name or user_id"} == TwitterAPI.get_user(nil, nil) - assert user1_result == TwitterAPI.get_user(nil, %{"user_id" => user1.id}) - assert user1_result == TwitterAPI.get_user(nil, %{"user_id" => user1.nickname}) - assert user1_result == TwitterAPI.get_user(nil, %{"screen_name" => user1.nickname}) - assert user1_result == TwitterAPI.get_user(user1, nil) - assert user1_result == TwitterAPI.get_user(user2, %{"user_id" => user1.id}) - assert user1_result == TwitterAPI.get_user(user2, %{"screen_name" => user1.nickname}) - - assert {:error, "No user with such screen_name"} == - TwitterAPI.get_user(nil, %{"screen_name" => "Satan"}) - - assert {:error, "No user with such user_id"} == TwitterAPI.get_user(nil, %{"user_id" => 666}) - end - - test "fetch user's statuses" do - {:ok, user1} = UserBuilder.insert(%{ap_id: "some id", email: "test@pleroma"}) - - {:ok, user2} = - UserBuilder.insert(%{ap_id: "some other id", nickname: "testname2", email: "test2@pleroma"}) - - {:ok, status1} = ActivityBuilder.insert(%{"id" => 1}, %{user: user1}) - {:ok, status2} = ActivityBuilder.insert(%{"id" => 2}, %{user: user2}) - - user1_statuses = TwitterAPI.fetch_user_statuses(user1, %{"actor_id" => user1.ap_id}) - - assert length(user1_statuses) == 1 - assert Enum.at(user1_statuses, 0) == ActivityRepresenter.to_map(status1, %{user: user1}) - - user2_statuses = TwitterAPI.fetch_user_statuses(user1, %{"actor_id" => user2.ap_id}) - - assert length(user2_statuses) == 1 - assert Enum.at(user2_statuses, 0) == ActivityRepresenter.to_map(status2, %{user: user2}) - end - - test "fetch a single status" do - {:ok, activity} = ActivityBuilder.insert() - {:ok, user} = UserBuilder.insert() - actor = Repo.get_by!(User, ap_id: activity.data["actor"]) - - status = TwitterAPI.fetch_status(user, activity.id) - - assert status == ActivityRepresenter.to_map(activity, %{for: user, user: actor}) - end - test "Follow another user using user_id" do user = insert(:user) followed = insert(:user) @@ -278,7 +166,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do test "Unblock another user using user_id" do unblocked = insert(:user) user = insert(:user) - User.block(user, unblocked) + {:ok, user, _unblocked} = TwitterAPI.block(user, %{"user_id" => unblocked.id}) {:ok, user, _unblocked} = TwitterAPI.unblock(user, %{"user_id" => unblocked.id}) assert user.info["blocks"] == [] @@ -287,27 +175,12 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do test "Unblock another user using screen_name" do unblocked = insert(:user) user = insert(:user) - User.block(user, unblocked) + {:ok, user, _unblocked} = TwitterAPI.block(user, %{"screen_name" => unblocked.nickname}) {: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"}) - {:ok, activity_two} = ActivityBuilder.insert(%{"type" => "Create", "context" => "2hu"}) - {:ok, _activity_three} = ActivityBuilder.insert(%{"type" => "Create", "context" => "3hu"}) - - {:ok, object} = Object.context_mapping("2hu") |> Repo.insert() - - statuses = TwitterAPI.fetch_conversation(user, object.id) - - assert length(statuses) == 2 - assert Enum.at(statuses, 1)["id"] == activity.id - assert Enum.at(statuses, 0)["id"] == activity_two.id - end - test "upload a file" do file = %Plug.Upload{ content_type: "image/jpg", @@ -320,46 +193,50 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do assert is_binary(response) end - test "it favorites a status, returns the updated status" do + test "it favorites a status, returns the updated activity" do user = insert(:user) note_activity = insert(:note_activity) - activity_user = Repo.get_by!(User, ap_id: note_activity.data["actor"]) {:ok, status} = TwitterAPI.fav(user, note_activity.id) updated_activity = Activity.get_by_ap_id(note_activity.data["id"]) - assert status == - ActivityRepresenter.to_map(updated_activity, %{user: activity_user, for: user}) + assert status == updated_activity end - test "it unfavorites a status, returns the updated status" do + test "it unfavorites a status, returns the updated activity" do user = insert(:user) note_activity = insert(:note_activity) - activity_user = Repo.get_by!(User, ap_id: note_activity.data["actor"]) object = Object.get_by_ap_id(note_activity.data["object"]["id"]) {:ok, _like_activity, _object} = ActivityPub.like(user, object) updated_activity = Activity.get_by_ap_id(note_activity.data["id"]) - assert ActivityRepresenter.to_map(updated_activity, %{user: activity_user, for: user})[ - "fave_num" - ] == 1 + assert ActivityView.render("activity.json", activity: updated_activity)["fave_num"] == 1 - {:ok, status} = TwitterAPI.unfav(user, note_activity.id) + {:ok, activity} = TwitterAPI.unfav(user, note_activity.id) - assert status["fave_num"] == 0 + assert ActivityView.render("activity.json", activity: activity)["fave_num"] == 0 end test "it retweets a status and returns the retweet" do user = insert(:user) note_activity = insert(:note_activity) - activity_user = Repo.get_by!(User, ap_id: note_activity.data["actor"]) {:ok, status} = TwitterAPI.repeat(user, note_activity.id) updated_activity = Activity.get_by_ap_id(note_activity.data["id"]) - assert status == - ActivityRepresenter.to_map(updated_activity, %{user: activity_user, for: user}) + assert status == updated_activity + end + + test "it unretweets an already retweeted status" do + user = insert(:user) + note_activity = insert(:note_activity) + + {:ok, _status} = TwitterAPI.repeat(user, note_activity.id) + {:ok, status} = TwitterAPI.unrepeat(user, note_activity.id) + updated_activity = Activity.get_by_ap_id(note_activity.data["id"]) + + assert status == updated_activity end test "it registers a new user and returns the user." do @@ -380,6 +257,70 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do UserView.render("show.json", %{user: fetched_user}) end + @moduletag skip: "needs 'registrations_open: false' in config" + test "it registers a new user via invite token and returns the user." do + {:ok, token} = UserInviteToken.create_token() + + data = %{ + "nickname" => "vinny", + "email" => "pasta@pizza.vs", + "fullname" => "Vinny Vinesauce", + "bio" => "streamer", + "password" => "hiptofbees", + "confirm" => "hiptofbees", + "token" => token.token + } + + {:ok, user} = TwitterAPI.register_user(data) + + fetched_user = Repo.get_by(User, nickname: "vinny") + token = Repo.get_by(UserInviteToken, token: token.token) + + assert token.used == true + + assert UserView.render("show.json", %{user: user}) == + UserView.render("show.json", %{user: fetched_user}) + end + + @moduletag skip: "needs 'registrations_open: false' in config" + test "it returns an error if invalid token submitted" do + data = %{ + "nickname" => "GrimReaper", + "email" => "death@reapers.afterlife", + "fullname" => "Reaper Grim", + "bio" => "Your time has come", + "password" => "scythe", + "confirm" => "scythe", + "token" => "DudeLetMeInImAFairy" + } + + {:error, msg} = TwitterAPI.register_user(data) + + assert msg == "Invalid token" + refute Repo.get_by(User, nickname: "GrimReaper") + end + + @moduletag skip: "needs 'registrations_open: false' in config" + test "it returns an error if expired token submitted" do + {:ok, token} = UserInviteToken.create_token() + UserInviteToken.mark_as_used(token.token) + + data = %{ + "nickname" => "GrimReaper", + "email" => "death@reapers.afterlife", + "fullname" => "Reaper Grim", + "bio" => "Your time has come", + "password" => "scythe", + "confirm" => "scythe", + "token" => token.token + } + + {:error, msg} = TwitterAPI.register_user(data) + + assert msg == "Expired token" + refute Repo.get_by(User, nickname: "GrimReaper") + end + test "it returns the error on registration problems" do data = %{ "nickname" => "lain", @@ -397,8 +338,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do test "it assigns an integer conversation_id" do note_activity = insert(:note_activity) - user = User.get_cached_by_ap_id(note_activity.data["actor"]) - status = ActivityRepresenter.to_map(note_activity, %{user: user}) + status = ActivityView.render("activity.json", activity: note_activity) assert is_number(status["statusnet_conversation_id"]) end