Commit 2592b3c8 authored by kaniini's avatar kaniini
Browse files

Merge branch 'support/issue_442' into 'develop'

[#442] fix warnings

See merge request pleroma/pleroma!536
parents 2999a08e 89b3729a
...@@ -212,7 +212,7 @@ def maybe_direct_follow(%User{} = follower, %User{local: true} = followed) do ...@@ -212,7 +212,7 @@ def maybe_direct_follow(%User{} = follower, %User{local: true} = followed) do
end end
def maybe_direct_follow(%User{} = follower, %User{} = followed) do def maybe_direct_follow(%User{} = follower, %User{} = followed) do
if !User.ap_enabled?(followed) do if not User.ap_enabled?(followed) do
follow(follower, followed) follow(follower, followed)
else else
{:ok, follower} {:ok, follower}
...@@ -736,7 +736,8 @@ def public_key_from_info(%{ ...@@ -736,7 +736,8 @@ def public_key_from_info(%{
source_data: %{"publicKey" => %{"publicKeyPem" => public_key_pem}} source_data: %{"publicKey" => %{"publicKeyPem" => public_key_pem}}
}) do }) do
key = key =
:public_key.pem_decode(public_key_pem) public_key_pem
|> :public_key.pem_decode()
|> hd() |> hd()
|> :public_key.pem_entry_decode() |> :public_key.pem_entry_decode()
...@@ -774,13 +775,10 @@ def ap_enabled?(%User{local: true}), do: true ...@@ -774,13 +775,10 @@ def ap_enabled?(%User{local: true}), do: true
def ap_enabled?(%User{info: info}), do: info.ap_enabled def ap_enabled?(%User{info: info}), do: info.ap_enabled
def ap_enabled?(_), do: false def ap_enabled?(_), do: false
def get_or_fetch(uri_or_nickname) do @doc "Gets or fetch a user by uri or nickname."
if String.starts_with?(uri_or_nickname, "http") do @spec get_or_fetch(String.t()) :: User.t()
get_or_fetch_by_ap_id(uri_or_nickname) def get_or_fetch("http" <> _host = uri), do: get_or_fetch_by_ap_id(uri)
else def get_or_fetch(nickname), do: get_or_fetch_by_nickname(nickname)
get_or_fetch_by_nickname(uri_or_nickname)
end
end
# wait a period of time and return newest version of the User structs # wait a period of time and return newest version of the User structs
# this is because we have synchronous follow APIs and need to simulate them # this is because we have synchronous follow APIs and need to simulate them
...@@ -821,7 +819,9 @@ def parse_bio(bio, user) do ...@@ -821,7 +819,9 @@ def parse_bio(bio, user) do
{String.trim(name, ":"), url} {String.trim(name, ":"), url}
end) end)
CommonUtils.format_input(bio, mentions, tags, "text/plain") |> Formatter.emojify(emoji) bio
|> CommonUtils.format_input(mentions, tags, "text/plain")
|> Formatter.emojify(emoji)
end end
def tag(user_identifiers, tags) when is_list(user_identifiers) do def tag(user_identifiers, tags) when is_list(user_identifiers) do
......
defmodule Pleroma.Web.CommonAPI.Utils do defmodule Pleroma.Web.CommonAPI.Utils do
alias Pleroma.{Repo, Object, Formatter, Activity} alias Calendar.Strftime
alias Comeonin.Pbkdf2
alias Pleroma.{Activity, Formatter, Object, Repo}
alias Pleroma.User
alias Pleroma.Web
alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Utils
alias Pleroma.Web.Endpoint alias Pleroma.Web.Endpoint
alias Pleroma.Web.MediaProxy alias Pleroma.Web.MediaProxy
alias Pleroma.User
alias Calendar.Strftime
alias Comeonin.Pbkdf2
# This is a hack for twidere. # This is a hack for twidere.
def get_by_id_or_ap_id(id) do def get_by_id_or_ap_id(id) do
...@@ -148,7 +149,7 @@ def add_tag_links(text, tags) do ...@@ -148,7 +149,7 @@ def add_tag_links(text, tags) do
|> Enum.sort_by(fn {tag, _} -> -String.length(tag) end) |> Enum.sort_by(fn {tag, _} -> -String.length(tag) end)
Enum.reduce(tags, text, fn {full, tag}, text -> Enum.reduce(tags, text, fn {full, tag}, text ->
url = "<a href='#{Pleroma.Web.base_url()}/tag/#{tag}' rel='tag'>##{tag}</a>" url = "<a href='#{Web.base_url()}/tag/#{tag}' rel='tag'>##{tag}</a>"
String.replace(text, full, url) String.replace(text, full, url)
end) end)
end end
......
...@@ -180,7 +180,7 @@ defp send_to_user(_, _, _), do: nil ...@@ -180,7 +180,7 @@ defp send_to_user(_, _, _), do: nil
"Undo", "Undo",
"Delete" "Delete"
] ]
def publish(user, activity, poster \\ &@httpoison.post/4) def publish(user, activity, poster \\ &@httpoison.post/3)
def publish(%{info: %{keys: keys}} = user, %{data: %{"type" => type}} = activity, poster) def publish(%{info: %{keys: keys}} = user, %{data: %{"type" => type}} = activity, poster)
when type in @supported_activities do when type in @supported_activities do
......
...@@ -256,8 +256,7 @@ def finger(account) do ...@@ -256,8 +256,7 @@ def finger(account) do
with response <- with response <-
@httpoison.get( @httpoison.get(
address, address,
[Accept: "application/xrd+xml,application/jrd+json"], Accept: "application/xrd+xml,application/jrd+json"
follow_redirect: true
), ),
{:ok, %{status: status, body: body}} when status in 200..299 <- response do {:ok, %{status: status, body: body}} when status in 200..299 <- response do
doc = XML.parse_document(body) doc = XML.parse_document(body)
......
...@@ -25,7 +25,7 @@ def parse_document(text) do ...@@ -25,7 +25,7 @@ def parse_document(text) do
{doc, _rest} = {doc, _rest} =
text text
|> :binary.bin_to_list() |> :binary.bin_to_list()
|> :xmerl_scan.string() |> :xmerl_scan.string(quiet: true)
doc doc
rescue rescue
......
defmodule Pleroma.FilterTest do defmodule Pleroma.FilterTest do
alias Pleroma.{User, Repo} alias Pleroma.Repo
use Pleroma.DataCase use Pleroma.DataCase
import Pleroma.Factory import Pleroma.Factory
import Ecto.Query
describe "creating filters" do describe "creating filters" do
test "creating one filter" do test "creating one filter" do
...@@ -99,7 +98,7 @@ test "deleting a filter" do ...@@ -99,7 +98,7 @@ test "deleting a filter" do
context: ["home"] context: ["home"]
} }
{:ok, filter} = Pleroma.Filter.create(query) {:ok, _filter} = Pleroma.Filter.create(query)
{:ok, filter} = Pleroma.Filter.delete(query) {:ok, filter} = Pleroma.Filter.delete(query)
assert is_nil(Repo.get(Pleroma.Filter, filter.filter_id)) assert is_nil(Repo.get(Pleroma.Filter, filter.filter_id))
end end
......
defmodule Pleroma.ListTest do defmodule Pleroma.ListTest do
alias Pleroma.{User, Repo} alias Pleroma.Repo
use Pleroma.DataCase use Pleroma.DataCase
import Pleroma.Factory import Pleroma.Factory
import Ecto.Query
test "creating a list" do test "creating a list" do
user = insert(:user) user = insert(:user)
...@@ -32,7 +31,7 @@ test "removing an user from a list" do ...@@ -32,7 +31,7 @@ test "removing an user from a list" do
user = insert(:user) user = insert(:user)
other_user = insert(:user) other_user = insert(:user)
{:ok, list} = Pleroma.List.create("title", user) {:ok, list} = Pleroma.List.create("title", user)
{:ok, %{following: following}} = Pleroma.List.follow(list, other_user) {:ok, %{following: _following}} = Pleroma.List.follow(list, other_user)
{:ok, %{following: following}} = Pleroma.List.unfollow(list, other_user) {:ok, %{following: following}} = Pleroma.List.unfollow(list, other_user)
assert [] == following assert [] == following
end end
......
...@@ -127,12 +127,12 @@ test "it sets all notifications as read up to a specified notification ID" do ...@@ -127,12 +127,12 @@ test "it sets all notifications as read up to a specified notification ID" do
user = insert(:user) user = insert(:user)
other_user = insert(:user) other_user = insert(:user)
{:ok, activity} = {:ok, _activity} =
TwitterAPI.create_status(user, %{ TwitterAPI.create_status(user, %{
"status" => "hey @#{other_user.nickname}!" "status" => "hey @#{other_user.nickname}!"
}) })
{:ok, activity} = {:ok, _activity} =
TwitterAPI.create_status(user, %{ TwitterAPI.create_status(user, %{
"status" => "hey again @#{other_user.nickname}!" "status" => "hey again @#{other_user.nickname}!"
}) })
...@@ -142,14 +142,14 @@ test "it sets all notifications as read up to a specified notification ID" do ...@@ -142,14 +142,14 @@ test "it sets all notifications as read up to a specified notification ID" do
assert n2.id > n1.id assert n2.id > n1.id
{:ok, activity} = {:ok, _activity} =
TwitterAPI.create_status(user, %{ TwitterAPI.create_status(user, %{
"status" => "hey yet again @#{other_user.nickname}!" "status" => "hey yet again @#{other_user.nickname}!"
}) })
Notification.set_read_up_to(other_user, n2.id) Notification.set_read_up_to(other_user, n2.id)
[n3, n2, n1] = notifs = Notification.for_user(other_user) [n3, n2, n1] = Notification.for_user(other_user)
assert n1.seen == true assert n1.seen == true
assert n2.seen == true assert n2.seen == true
......
...@@ -4,7 +4,7 @@ defmodule Pleroma.Plugs.UserIsAdminPlugTest do ...@@ -4,7 +4,7 @@ defmodule Pleroma.Plugs.UserIsAdminPlugTest do
alias Pleroma.Plugs.UserIsAdminPlug alias Pleroma.Plugs.UserIsAdminPlug
import Pleroma.Factory import Pleroma.Factory
test "accepts a user that is admin", %{conn: conn} do test "accepts a user that is admin" do
user = insert(:user, info: %{is_admin: true}) user = insert(:user, info: %{is_admin: true})
conn = conn =
...@@ -18,7 +18,7 @@ test "accepts a user that is admin", %{conn: conn} do ...@@ -18,7 +18,7 @@ test "accepts a user that is admin", %{conn: conn} do
assert conn == ret_conn assert conn == ret_conn
end end
test "denies a user that isn't admin", %{conn: conn} do test "denies a user that isn't admin" do
user = insert(:user) user = insert(:user)
conn = conn =
...@@ -29,7 +29,7 @@ test "denies a user that isn't admin", %{conn: conn} do ...@@ -29,7 +29,7 @@ test "denies a user that isn't admin", %{conn: conn} do
assert conn.status == 403 assert conn.status == 403
end end
test "denies when a user isn't set", %{conn: conn} do test "denies when a user isn't set" do
conn = conn =
build_conn() build_conn()
|> UserIsAdminPlug.call(%{}) |> UserIsAdminPlug.call(%{})
......
...@@ -19,6 +19,7 @@ defmodule Pleroma.Web.ConnCase do ...@@ -19,6 +19,7 @@ defmodule Pleroma.Web.ConnCase do
quote do quote do
# Import conveniences for testing with connections # Import conveniences for testing with connections
use Phoenix.ConnTest use Phoenix.ConnTest
use Pleroma.Tests.Helpers
import Pleroma.Web.Router.Helpers import Pleroma.Web.Router.Helpers
# The default endpoint for testing # The default endpoint for testing
......
...@@ -22,6 +22,7 @@ defmodule Pleroma.DataCase do ...@@ -22,6 +22,7 @@ defmodule Pleroma.DataCase do
import Ecto.Changeset import Ecto.Changeset
import Ecto.Query import Ecto.Query
import Pleroma.DataCase import Pleroma.DataCase
use Pleroma.Tests.Helpers
end end
end end
......
defmodule Pleroma.Tests.Helpers do
@moduledoc """
Helpers for use in tests.
"""
defmacro __using__(_opts) do
quote do
def refresh_record(%{id: id, __struct__: model} = _),
do: refresh_record(model, %{id: id})
def refresh_record(model, %{id: id} = _) do
Pleroma.Repo.get_by(model, id: id)
end
# Used for comparing json rendering during tests.
def render_json(view, template, assigns) do
assigns = Map.new(assigns)
view.render(template, assigns)
|> Poison.encode!()
|> Poison.decode!()
end
end
end
end
defmodule Pleroma.UserTest do defmodule Pleroma.UserTest do
alias Pleroma.Builders.UserBuilder alias Pleroma.Builders.UserBuilder
alias Pleroma.{User, Repo, Activity} alias Pleroma.{User, Repo, Activity}
alias Pleroma.Web.OStatus
alias Pleroma.Web.Websub.WebsubClientSubscription
alias Pleroma.Web.CommonAPI alias Pleroma.Web.CommonAPI
use Pleroma.DataCase use Pleroma.DataCase
import Pleroma.Factory import Pleroma.Factory
import Ecto.Query
setup_all do setup_all do
Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
...@@ -163,6 +160,32 @@ test "it ensures info is not nil" do ...@@ -163,6 +160,32 @@ test "it ensures info is not nil" do
end end
end end
describe "get_or_fetch/1" do
test "gets an existing user by nickname" do
user = insert(:user)
fetched_user = User.get_or_fetch(user.nickname)
assert user == fetched_user
end
test "gets an existing user by ap_id" do
ap_id = "http://mastodon.example.org/users/admin"
user =
insert(
:user,
local: false,
nickname: "admin@mastodon.example.org",
ap_id: ap_id,
info: %{}
)
fetched_user = User.get_or_fetch(ap_id)
freshed_user = refresh_record(user)
assert freshed_user == fetched_user
end
end
describe "fetching a user from nickname or trying to build one" do describe "fetching a user from nickname or trying to build one" do
test "gets an existing user" do test "gets an existing user" do
user = insert(:user) user = insert(:user)
...@@ -574,7 +597,7 @@ test "html_filter_policy returns TwitterText scrubber when rich-text is disabled ...@@ -574,7 +597,7 @@ test "html_filter_policy returns TwitterText scrubber when rich-text is disabled
describe "caching" do describe "caching" do
test "invalidate_cache works" do test "invalidate_cache works" do
user = insert(:user) user = insert(:user)
user_info = User.get_cached_user_info(user) _user_info = User.get_cached_user_info(user)
User.invalidate_cache(user) User.invalidate_cache(user)
...@@ -600,9 +623,9 @@ test "User.delete() plugs any possible zombie objects" do ...@@ -600,9 +623,9 @@ test "User.delete() plugs any possible zombie objects" do
describe "User.search" do describe "User.search" do
test "finds a user, ranking by similarity" do test "finds a user, ranking by similarity" do
user = insert(:user, %{name: "lain"}) _user = insert(:user, %{name: "lain"})
user_two = insert(:user, %{name: "ean"}) _user_two = insert(:user, %{name: "ean"})
user_three = insert(:user, %{name: "ebn", nickname: "lain@mastodon.social"}) _user_three = insert(:user, %{name: "ebn", nickname: "lain@mastodon.social"})
user_four = insert(:user, %{nickname: "lain@pleroma.soykaf.com"}) user_four = insert(:user, %{nickname: "lain@pleroma.soykaf.com"})
assert user_four == assert user_four ==
......
...@@ -23,10 +23,10 @@ test "with the relay active, it returns the relay user", %{conn: conn} do ...@@ -23,10 +23,10 @@ test "with the relay active, it returns the relay user", %{conn: conn} do
test "with the relay disabled, it returns 404", %{conn: conn} do test "with the relay disabled, it returns 404", %{conn: conn} do
Pleroma.Config.put([:instance, :allow_relay], false) Pleroma.Config.put([:instance, :allow_relay], false)
res = conn
conn |> get(activity_pub_path(conn, :relay))
|> get(activity_pub_path(conn, :relay)) |> json_response(404)
|> json_response(404) |> assert
Pleroma.Config.put([:instance, :allow_relay], true) Pleroma.Config.put([:instance, :allow_relay], true)
end end
......
...@@ -180,7 +180,7 @@ test "doesn't return blocked activities" do ...@@ -180,7 +180,7 @@ test "doesn't return blocked activities" do
test "doesn't retrieve unlisted activities" do test "doesn't retrieve unlisted activities" do
user = insert(:user) user = insert(:user)
{:ok, unlisted_activity} = {:ok, _unlisted_activity} =
CommonAPI.post(user, %{"status" => "yeah", "visibility" => "unlisted"}) CommonAPI.post(user, %{"status" => "yeah", "visibility" => "unlisted"})
{:ok, listed_activity} = CommonAPI.post(user, %{"status" => "yeah"}) {:ok, listed_activity} = CommonAPI.post(user, %{"status" => "yeah"})
......
...@@ -982,13 +982,12 @@ test "contain_origin_from_id() allows matching IDs" do ...@@ -982,13 +982,12 @@ test "contain_origin_from_id() allows matching IDs" do
end end
test "users cannot be collided through fake direction spoofing attempts" do test "users cannot be collided through fake direction spoofing attempts" do
user = insert(:user, %{
insert(:user, %{ nickname: "rye@niu.moe",
nickname: "rye@niu.moe", local: false,
local: false, ap_id: "https://niu.moe/users/rye",
ap_id: "https://niu.moe/users/rye", follower_address: User.ap_followers(%User{nickname: "rye@niu.moe"})
follower_address: User.ap_followers(%User{nickname: "rye@niu.moe"}) })
})
{:error, _} = User.get_or_fetch_by_ap_id("https://n1u.moe/users/rye") {:error, _} = User.get_or_fetch_by_ap_id("https://n1u.moe/users/rye")
end end
......
...@@ -2,9 +2,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do ...@@ -2,9 +2,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
use Pleroma.Web.ConnCase use Pleroma.Web.ConnCase
alias Pleroma.{Repo, User} alias Pleroma.{Repo, User}
import Pleroma.Factory import Pleroma.Factory
import ExUnit.CaptureLog
describe "/api/pleroma/admin/user" do describe "/api/pleroma/admin/user" do
test "Delete" do test "Delete" do
......
...@@ -11,9 +11,6 @@ defmodule Pleroma.Web.HTTPSignaturesTest do ...@@ -11,9 +11,6 @@ defmodule Pleroma.Web.HTTPSignaturesTest do
:ok :ok
end end
@private_key hd(:public_key.pem_decode(File.read!("test/web/http_sigs/priv.key")))
|> :public_key.pem_entry_decode()
@public_key hd(:public_key.pem_decode(File.read!("test/web/http_sigs/pub.key"))) @public_key hd(:public_key.pem_decode(File.read!("test/web/http_sigs/pub.key")))
|> :public_key.pem_entry_decode() |> :public_key.pem_entry_decode()
...@@ -26,8 +23,6 @@ defmodule Pleroma.Web.HTTPSignaturesTest do ...@@ -26,8 +23,6 @@ defmodule Pleroma.Web.HTTPSignaturesTest do
"content-length" => "18" "content-length" => "18"
} }
@body "{\"hello\": \"world\"}"
@default_signature """ @default_signature """
keyId="Test",algorithm="rsa-sha256",signature="jKyvPcxB4JbmYY4mByyBY7cZfNl4OW9HpFQlG7N4YcJPteKTu4MWCLyk+gIr0wDgqtLWf9NLpMAMimdfsH7FSWGfbMFSrsVTHNTk0rK3usrfFnti1dxsM4jl0kYJCKTGI/UWkqiaxwNiKqGcdlEDrTcUhhsFsOIo8VhddmZTZ8w=" keyId="Test",algorithm="rsa-sha256",signature="jKyvPcxB4JbmYY4mByyBY7cZfNl4OW9HpFQlG7N4YcJPteKTu4MWCLyk+gIr0wDgqtLWf9NLpMAMimdfsH7FSWGfbMFSrsVTHNTk0rK3usrfFnti1dxsM4jl0kYJCKTGI/UWkqiaxwNiKqGcdlEDrTcUhhsFsOIo8VhddmZTZ8w="
""" """
......
...@@ -2,7 +2,6 @@ defmodule Pleroma.Web.MastodonAPI.ListViewTest do ...@@ -2,7 +2,6 @@ defmodule Pleroma.Web.MastodonAPI.ListViewTest do
use Pleroma.DataCase use Pleroma.DataCase
import Pleroma.Factory import Pleroma.Factory
alias Pleroma.Web.MastodonAPI.ListView alias Pleroma.Web.MastodonAPI.ListView
alias Pleroma.List
test "Represent a list" do test "Represent a list" do
user = insert(:user) user = insert(:user)
......
...@@ -5,7 +5,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do ...@@ -5,7 +5,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
alias Pleroma.{Repo, User, Object, Activity, Notification} alias Pleroma.{Repo, User, Object, Activity, Notification}
alias Pleroma.Web.{OStatus, CommonAPI} alias Pleroma.Web.{OStatus, CommonAPI}
alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Web.MastodonAPI.FilterView
import Pleroma.Factory import Pleroma.Factory
import ExUnit.CaptureLog import ExUnit.CaptureLog
import Tesla.Mock import Tesla.Mock
...@@ -351,12 +351,18 @@ test "fetching a list of filters", %{conn: conn} do ...@@ -351,12 +351,18 @@ test "fetching a list of filters", %{conn: conn} do
{:ok, filter_one} = Pleroma.Filter.create(query_one) {:ok, filter_one} = Pleroma.Filter.create(query_one)
{:ok, filter_two} = Pleroma.Filter.create(query_two) {:ok, filter_two} = Pleroma.Filter.create(query_two)
conn = response =
conn conn
|> assign(:user, user) |> assign(:user, user)
|> get("/api/v1/filters") |> get("/api/v1/filters")
|> json_response(200)
assert response = json_response(conn, 200)
assert response ==
render_json(
FilterView,
"filters.json",
filters: [filter_two, filter_one]
)
end end