mobilizon.chapril.org-mobil.../test/tasks/users_test.exs

161 lines
4.8 KiB
Elixir

defmodule Mix.Tasks.Mobilizon.UsersTest do
use Mobilizon.DataCase
import Mobilizon.Factory
alias Mix.Tasks.Mobilizon.Users.{Delete, Modify, New, Show}
alias Mobilizon.Users
alias Mobilizon.Users.User
Mix.shell(Mix.Shell.Process)
@email "test@email.tld"
describe "create user" do
test "create with no options" do
New.run([@email])
assert {:ok, %User{email: email, role: role, confirmed_at: confirmed_at}} =
Users.get_user_by_email(@email)
assert email == @email
assert role == :user
refute is_nil(confirmed_at)
end
test "create a moderator" do
New.run([@email, "--moderator"])
assert {:ok, %User{email: email, role: role}} = Users.get_user_by_email(@email)
assert email == @email
assert role == :moderator
end
test "create an administrator" do
New.run([@email, "--admin"])
assert {:ok, %User{email: email, role: role}} = Users.get_user_by_email(@email)
assert email == @email
assert role == :administrator
end
test "create with already used email" do
insert(:user, email: @email)
assert_raise Mix.Error, "User has not been created because of the above reason.", fn ->
New.run([@email])
end
end
end
describe "delete user" do
test "delete existing user" do
insert(:user, email: @email)
Delete.run([@email, "-y"])
assert {:error, :user_not_found} == Users.get_user_by_email(@email)
end
test "delete non-existing user" do
assert_raise Mix.Error, "Error: No such user", fn -> Delete.run([@email, "-y"]) end
end
end
describe "show user" do
test "show existing user" do
%User{confirmed_at: confirmed_at, role: role} = user = insert(:user, email: @email)
actor1 = insert(:actor, user: user)
actor2 = insert(:actor, user: user)
output =
"Informations for the user #{@email}:\n - Activated: #{confirmed_at}\n - Role: #{role}\n Identities (2):\n - @#{
actor1.preferred_username
} / \n - @#{actor2.preferred_username} / \n\n\n"
Show.run([@email])
assert_received {:mix_shell, :info, [output_received]}
assert output_received == output
end
test "show non-existing user" do
assert_raise Mix.Error, "Error: No such user", fn -> Show.run([@email]) end
end
end
describe "modify user" do
test "modify existing user without any changes" do
insert(:user, email: @email)
Modify.run([@email])
assert_received {:mix_shell, :info, [output_received]}
assert output_received == "No change has been made"
end
test "promote an user to moderator" do
insert(:user, email: @email)
Modify.run([@email, "--moderator"])
assert {:ok, %User{role: role}} = Users.get_user_by_email(@email)
assert role == :moderator
end
test "promote an user to administrator" do
insert(:user, email: @email)
Modify.run([@email, "--admin"])
assert {:ok, %User{role: role}} = Users.get_user_by_email(@email)
assert role == :administrator
Modify.run([@email, "--user"])
assert {:ok, %User{role: role}} = Users.get_user_by_email(@email)
assert role == :user
end
test "disable and enable an user" do
user = insert(:user, email: @email)
Modify.run([@email, "--disable"])
assert_received {:mix_shell, :info, [output_received]}
assert output_received ==
"An user has been modified with the following information:\n - email: #{
user.email
}\n - Role: #{user.role}\n - Activated: False\n"
assert {:ok, %User{email: email, confirmed_at: confirmed_at}} =
Users.get_user_by_email(@email)
assert is_nil(confirmed_at)
Modify.run([@email, "--enable"])
assert_received {:mix_shell, :info, [output_received]}
assert {:ok, %User{email: email, confirmed_at: confirmed_at}} =
Users.get_user_by_email(@email)
assert output_received ==
"An user has been modified with the following information:\n - email: #{
user.email
}\n - Role: #{user.role}\n - Activated: #{confirmed_at}\n"
refute is_nil(confirmed_at)
Modify.run([@email, "--enable"])
assert {:ok, %User{email: email, confirmed_at: confirmed_at}} =
Users.get_user_by_email(@email)
refute is_nil(confirmed_at)
assert_received {:mix_shell, :info, [output_received]}
assert output_received == "No change has been made"
end
test "enable and disable at the same time" do
assert_raise Mix.Error,
"Can't use both --enabled and --disable options at the same time.",
fn ->
Modify.run([@email, "--disable", "--enable"])
end
end
end
end