Add tests for users tasks and PleromaAuthenticator See merge request pleroma/pleroma!1462tags/v1.1.4
@@ -74,7 +74,7 @@ defmodule Pleroma.UserInviteToken do | |||||
@spec find_by_token(token()) :: {:ok, UserInviteToken.t()} | nil | @spec find_by_token(token()) :: {:ok, UserInviteToken.t()} | nil | ||||
def find_by_token(token) do | def find_by_token(token) do | ||||
with invite <- Repo.get_by(UserInviteToken, token: token) do | |||||
with %UserInviteToken{} = invite <- Repo.get_by(UserInviteToken, token: token) do | |||||
{:ok, invite} | {:ok, invite} | ||||
end | end | ||||
end | end | ||||
@@ -272,11 +272,13 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do | |||||
@doc "Revokes invite by token" | @doc "Revokes invite by token" | ||||
def revoke_invite(conn, %{"token" => token}) do | def revoke_invite(conn, %{"token" => token}) do | ||||
invite = UserInviteToken.find_by_token!(token) | |||||
{:ok, updated_invite} = UserInviteToken.update_invite(invite, %{used: true}) | |||||
conn | |||||
|> json(AccountView.render("invite.json", %{invite: updated_invite})) | |||||
with {:ok, invite} <- UserInviteToken.find_by_token(token), | |||||
{:ok, updated_invite} = UserInviteToken.update_invite(invite, %{used: true}) do | |||||
conn | |||||
|> json(AccountView.render("invite.json", %{invite: updated_invite})) | |||||
else | |||||
nil -> {:error, :not_found} | |||||
end | |||||
end | end | ||||
@doc "Get a password reset token (base64 string) for given nickname" | @doc "Get a password reset token (base64 string) for given nickname" | ||||
@@ -5,6 +5,9 @@ | |||||
defmodule Mix.Tasks.Pleroma.UserTest do | defmodule Mix.Tasks.Pleroma.UserTest do | ||||
alias Pleroma.Repo | alias Pleroma.Repo | ||||
alias Pleroma.User | alias Pleroma.User | ||||
alias Pleroma.Web.OAuth.Authorization | |||||
alias Pleroma.Web.OAuth.Token | |||||
use Pleroma.DataCase | use Pleroma.DataCase | ||||
import Pleroma.Factory | import Pleroma.Factory | ||||
@@ -327,6 +330,13 @@ defmodule Mix.Tasks.Pleroma.UserTest do | |||||
assert_received {:mix_shell, :info, [message]} | assert_received {:mix_shell, :info, [message]} | ||||
assert message =~ "Invite for token #{invite.token} was revoked." | assert message =~ "Invite for token #{invite.token} was revoked." | ||||
end | end | ||||
test "it prints an error message when invite is not exist" do | |||||
Mix.Tasks.Pleroma.User.run(["revoke_invite", "foo"]) | |||||
assert_received {:mix_shell, :error, [message]} | |||||
assert message =~ "No invite found" | |||||
end | |||||
end | end | ||||
describe "running delete_activities" do | describe "running delete_activities" do | ||||
@@ -337,6 +347,13 @@ defmodule Mix.Tasks.Pleroma.UserTest do | |||||
assert_received {:mix_shell, :info, [message]} | assert_received {:mix_shell, :info, [message]} | ||||
assert message == "User #{nickname} statuses deleted." | assert message == "User #{nickname} statuses deleted." | ||||
end | end | ||||
test "it prints an error message when user is not exist" do | |||||
Mix.Tasks.Pleroma.User.run(["delete_activities", "foo"]) | |||||
assert_received {:mix_shell, :error, [message]} | |||||
assert message =~ "No local user" | |||||
end | |||||
end | end | ||||
describe "running toggle_confirmed" do | describe "running toggle_confirmed" do | ||||
@@ -364,6 +381,13 @@ defmodule Mix.Tasks.Pleroma.UserTest do | |||||
refute user.info.confirmation_pending | refute user.info.confirmation_pending | ||||
refute user.info.confirmation_token | refute user.info.confirmation_token | ||||
end | end | ||||
test "it prints an error message when user is not exist" do | |||||
Mix.Tasks.Pleroma.User.run(["toggle_confirmed", "foo"]) | |||||
assert_received {:mix_shell, :error, [message]} | |||||
assert message =~ "No local user" | |||||
end | |||||
end | end | ||||
describe "search" do | describe "search" do | ||||
@@ -386,4 +410,64 @@ defmodule Mix.Tasks.Pleroma.UserTest do | |||||
User.Search.search("moon fediverse", for_user: user) |> Enum.map(& &1.id) | User.Search.search("moon fediverse", for_user: user) |> Enum.map(& &1.id) | ||||
end | end | ||||
end | end | ||||
describe "signing out" do | |||||
test "it deletes all user's tokens and authorizations" do | |||||
user = insert(:user) | |||||
insert(:oauth_token, user: user) | |||||
insert(:oauth_authorization, user: user) | |||||
assert Repo.get_by(Token, user_id: user.id) | |||||
assert Repo.get_by(Authorization, user_id: user.id) | |||||
:ok = Mix.Tasks.Pleroma.User.run(["sign_out", user.nickname]) | |||||
refute Repo.get_by(Token, user_id: user.id) | |||||
refute Repo.get_by(Authorization, user_id: user.id) | |||||
end | |||||
test "it prints an error message when user is not exist" do | |||||
Mix.Tasks.Pleroma.User.run(["sign_out", "foo"]) | |||||
assert_received {:mix_shell, :error, [message]} | |||||
assert message =~ "No local user" | |||||
end | |||||
end | |||||
describe "tagging" do | |||||
test "it add tags to a user" do | |||||
user = insert(:user) | |||||
:ok = Mix.Tasks.Pleroma.User.run(["tag", user.nickname, "pleroma"]) | |||||
user = User.get_cached_by_nickname(user.nickname) | |||||
assert "pleroma" in user.tags | |||||
end | |||||
test "it prints an error message when user is not exist" do | |||||
Mix.Tasks.Pleroma.User.run(["tag", "foo"]) | |||||
assert_received {:mix_shell, :error, [message]} | |||||
assert message =~ "Could not change user tags" | |||||
end | |||||
end | |||||
describe "untagging" do | |||||
test "it deletes tags from a user" do | |||||
user = insert(:user, tags: ["pleroma"]) | |||||
assert "pleroma" in user.tags | |||||
:ok = Mix.Tasks.Pleroma.User.run(["untag", user.nickname, "pleroma"]) | |||||
user = User.get_cached_by_nickname(user.nickname) | |||||
assert Enum.empty?(user.tags) | |||||
end | |||||
test "it prints an error message when user is not exist" do | |||||
Mix.Tasks.Pleroma.User.run(["untag", "foo"]) | |||||
assert_received {:mix_shell, :error, [message]} | |||||
assert message =~ "Could not change user tags" | |||||
end | |||||
end | |||||
end | end |
@@ -1010,6 +1010,17 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do | |||||
"uses" => 0 | "uses" => 0 | ||||
} | } | ||||
end | end | ||||
test "with invalid token" do | |||||
admin = insert(:user, info: %{is_admin: true}) | |||||
conn = | |||||
build_conn() | |||||
|> assign(:user, admin) | |||||
|> post("/api/pleroma/admin/users/revoke_invite", %{"token" => "foo"}) | |||||
assert json_response(conn, :not_found) == "Not found" | |||||
end | |||||
end | end | ||||
describe "GET /api/pleroma/admin/reports/:id" do | describe "GET /api/pleroma/admin/reports/:id" do | ||||
@@ -5,9 +5,7 @@ | |||||
defmodule Pleroma.Web.OAuth.OAuthControllerTest do | defmodule Pleroma.Web.OAuth.OAuthControllerTest do | ||||
use Pleroma.Web.ConnCase | use Pleroma.Web.ConnCase | ||||
import Pleroma.Factory | import Pleroma.Factory | ||||
import Mock | |||||
alias Pleroma.Registration | |||||
alias Pleroma.Repo | alias Pleroma.Repo | ||||
alias Pleroma.Web.OAuth.Authorization | alias Pleroma.Web.OAuth.Authorization | ||||
alias Pleroma.Web.OAuth.OAuthController | alias Pleroma.Web.OAuth.OAuthController | ||||
@@ -108,28 +106,26 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do | |||||
"state" => "" | "state" => "" | ||||
} | } | ||||
with_mock Pleroma.Web.Auth.Authenticator, | |||||
get_registration: fn _ -> {:ok, registration} end do | |||||
conn = | |||||
get( | |||||
conn, | |||||
"/oauth/twitter/callback", | |||||
%{ | |||||
"oauth_token" => "G-5a3AAAAAAAwMH9AAABaektfSM", | |||||
"oauth_verifier" => "QZl8vUqNvXMTKpdmUnGejJxuHG75WWWs", | |||||
"provider" => "twitter", | |||||
"state" => Poison.encode!(state_params) | |||||
} | |||||
) | |||||
conn = | |||||
conn | |||||
|> assign(:ueberauth_auth, %{provider: registration.provider, uid: registration.uid}) | |||||
|> get( | |||||
"/oauth/twitter/callback", | |||||
%{ | |||||
"oauth_token" => "G-5a3AAAAAAAwMH9AAABaektfSM", | |||||
"oauth_verifier" => "QZl8vUqNvXMTKpdmUnGejJxuHG75WWWs", | |||||
"provider" => "twitter", | |||||
"state" => Poison.encode!(state_params) | |||||
} | |||||
) | |||||
assert response = html_response(conn, 302) | |||||
assert redirected_to(conn) =~ ~r/#{redirect_uri}\?code=.+/ | |||||
end | |||||
assert response = html_response(conn, 302) | |||||
assert redirected_to(conn) =~ ~r/#{redirect_uri}\?code=.+/ | |||||
end | end | ||||
test "with user-unbound registration, GET /oauth/<provider>/callback renders registration_details page", | test "with user-unbound registration, GET /oauth/<provider>/callback renders registration_details page", | ||||
%{app: app, conn: conn} do | %{app: app, conn: conn} do | ||||
registration = insert(:registration, user: nil) | |||||
user = insert(:user) | |||||
state_params = %{ | state_params = %{ | ||||
"scope" => "read write", | "scope" => "read write", | ||||
@@ -138,26 +134,28 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do | |||||
"state" => "a_state" | "state" => "a_state" | ||||
} | } | ||||
with_mock Pleroma.Web.Auth.Authenticator, | |||||
get_registration: fn _ -> {:ok, registration} end do | |||||
conn = | |||||
get( | |||||
conn, | |||||
"/oauth/twitter/callback", | |||||
%{ | |||||
"oauth_token" => "G-5a3AAAAAAAwMH9AAABaektfSM", | |||||
"oauth_verifier" => "QZl8vUqNvXMTKpdmUnGejJxuHG75WWWs", | |||||
"provider" => "twitter", | |||||
"state" => Poison.encode!(state_params) | |||||
} | |||||
) | |||||
conn = | |||||
conn | |||||
|> assign(:ueberauth_auth, %{ | |||||
provider: "twitter", | |||||
uid: "171799000", | |||||
info: %{nickname: user.nickname, email: user.email, name: user.name, description: nil} | |||||
}) | |||||
|> get( | |||||
"/oauth/twitter/callback", | |||||
%{ | |||||
"oauth_token" => "G-5a3AAAAAAAwMH9AAABaektfSM", | |||||
"oauth_verifier" => "QZl8vUqNvXMTKpdmUnGejJxuHG75WWWs", | |||||
"provider" => "twitter", | |||||
"state" => Poison.encode!(state_params) | |||||
} | |||||
) | |||||
assert response = html_response(conn, 200) | |||||
assert response =~ ~r/name="op" type="submit" value="register"/ | |||||
assert response =~ ~r/name="op" type="submit" value="connect"/ | |||||
assert response =~ Registration.email(registration) | |||||
assert response =~ Registration.nickname(registration) | |||||
end | |||||
assert response = html_response(conn, 200) | |||||
assert response =~ ~r/name="op" type="submit" value="register"/ | |||||
assert response =~ ~r/name="op" type="submit" value="connect"/ | |||||
assert response =~ user.email | |||||
assert response =~ user.nickname | |||||
end | end | ||||
test "on authentication error, GET /oauth/<provider>/callback redirects to `redirect_uri`", %{ | test "on authentication error, GET /oauth/<provider>/callback redirects to `redirect_uri`", %{ | ||||