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 | |||
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} | |||
end | |||
end | |||
@@ -272,11 +272,13 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do | |||
@doc "Revokes invite by token" | |||
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 | |||
@doc "Get a password reset token (base64 string) for given nickname" | |||
@@ -5,6 +5,9 @@ | |||
defmodule Mix.Tasks.Pleroma.UserTest do | |||
alias Pleroma.Repo | |||
alias Pleroma.User | |||
alias Pleroma.Web.OAuth.Authorization | |||
alias Pleroma.Web.OAuth.Token | |||
use Pleroma.DataCase | |||
import Pleroma.Factory | |||
@@ -327,6 +330,13 @@ defmodule Mix.Tasks.Pleroma.UserTest do | |||
assert_received {:mix_shell, :info, [message]} | |||
assert message =~ "Invite for token #{invite.token} was revoked." | |||
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 | |||
describe "running delete_activities" do | |||
@@ -337,6 +347,13 @@ defmodule Mix.Tasks.Pleroma.UserTest do | |||
assert_received {:mix_shell, :info, [message]} | |||
assert message == "User #{nickname} statuses deleted." | |||
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 | |||
describe "running toggle_confirmed" do | |||
@@ -364,6 +381,13 @@ defmodule Mix.Tasks.Pleroma.UserTest do | |||
refute user.info.confirmation_pending | |||
refute user.info.confirmation_token | |||
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 | |||
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) | |||
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 |
@@ -1010,6 +1010,17 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do | |||
"uses" => 0 | |||
} | |||
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 | |||
describe "GET /api/pleroma/admin/reports/:id" do | |||
@@ -5,9 +5,7 @@ | |||
defmodule Pleroma.Web.OAuth.OAuthControllerTest do | |||
use Pleroma.Web.ConnCase | |||
import Pleroma.Factory | |||
import Mock | |||
alias Pleroma.Registration | |||
alias Pleroma.Repo | |||
alias Pleroma.Web.OAuth.Authorization | |||
alias Pleroma.Web.OAuth.OAuthController | |||
@@ -108,28 +106,26 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do | |||
"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 | |||
test "with user-unbound registration, GET /oauth/<provider>/callback renders registration_details page", | |||
%{app: app, conn: conn} do | |||
registration = insert(:registration, user: nil) | |||
user = insert(:user) | |||
state_params = %{ | |||
"scope" => "read write", | |||
@@ -138,26 +134,28 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do | |||
"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 | |||
test "on authentication error, GET /oauth/<provider>/callback redirects to `redirect_uri`", %{ | |||