186 lines
4.9 KiB
Elixir
186 lines
4.9 KiB
Elixir
|
defmodule Mix.Tasks.Mobilizon.Actors.NewTest do
|
||
|
use Mobilizon.DataCase
|
||
|
|
||
|
import Mobilizon.Factory
|
||
|
|
||
|
alias Mix.Tasks.Mobilizon.Actors.New
|
||
|
|
||
|
alias Mobilizon.{Actors, Users}
|
||
|
alias Mobilizon.Actors.Actor
|
||
|
alias Mobilizon.Users.User
|
||
|
|
||
|
Mix.shell(Mix.Shell.Process)
|
||
|
|
||
|
@email "me@some.where"
|
||
|
describe "create profile" do
|
||
|
setup do
|
||
|
%User{} = user = insert(:user, email: @email)
|
||
|
|
||
|
{:ok, user: user}
|
||
|
end
|
||
|
|
||
|
@preferred_username "toto"
|
||
|
@name "Léo Pandaï"
|
||
|
@converted_username "leo_pandai"
|
||
|
|
||
|
test "create with no options" do
|
||
|
New.run([])
|
||
|
|
||
|
# Debug message
|
||
|
assert_received {:mix_shell, :error, [message]}
|
||
|
|
||
|
assert message =~
|
||
|
"You need to provide at least --username or --display-name."
|
||
|
end
|
||
|
|
||
|
test "create when email isn't set" do
|
||
|
New.run(["--display-name", @name])
|
||
|
|
||
|
# Debug message
|
||
|
assert_received {:mix_shell, :error, [message]}
|
||
|
|
||
|
assert message =~
|
||
|
"You need to provide an email for creating a new profile."
|
||
|
end
|
||
|
|
||
|
test "create when email doesn't exist" do
|
||
|
New.run(["--email", "toto@somewhere.else", "--display-name", @name])
|
||
|
|
||
|
# Debug message
|
||
|
assert_received {:mix_shell, :error, [message]}
|
||
|
|
||
|
assert message =~
|
||
|
"No user with this email was found."
|
||
|
end
|
||
|
|
||
|
test "create with --display-name" do
|
||
|
New.run(["--email", @email, "--display-name", @name])
|
||
|
|
||
|
assert {:ok, %User{id: user_id}} = Users.get_user_by_email(@email)
|
||
|
|
||
|
assert %Actor{
|
||
|
preferred_username: @converted_username,
|
||
|
name: @name,
|
||
|
domain: nil,
|
||
|
user_id: ^user_id
|
||
|
} = Actors.get_local_actor_by_name(@converted_username)
|
||
|
end
|
||
|
|
||
|
test "create with --username" do
|
||
|
New.run(["--email", @email, "--username", @preferred_username])
|
||
|
|
||
|
assert {:ok, %User{id: user_id}} = Users.get_user_by_email(@email)
|
||
|
|
||
|
assert %Actor{
|
||
|
preferred_username: @preferred_username,
|
||
|
name: @preferred_username,
|
||
|
domain: nil,
|
||
|
user_id: ^user_id
|
||
|
} = Actors.get_local_actor_by_name(@preferred_username)
|
||
|
end
|
||
|
|
||
|
test "create with --username and --display-name" do
|
||
|
New.run(["--email", @email, "--username", @preferred_username, "--display-name", @name])
|
||
|
|
||
|
assert {:ok, %User{id: user_id}} = Users.get_user_by_email(@email)
|
||
|
|
||
|
assert %Actor{
|
||
|
preferred_username: @preferred_username,
|
||
|
name: @name,
|
||
|
domain: nil,
|
||
|
user_id: ^user_id
|
||
|
} = Actors.get_local_actor_by_name(@preferred_username)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe "create group" do
|
||
|
@already_existing_group "already_there"
|
||
|
@already_existing_group_name "Already Thére"
|
||
|
@profile_username "theo"
|
||
|
|
||
|
setup do
|
||
|
group = insert(:group, preferred_username: @already_existing_group)
|
||
|
profile = insert(:actor, preferred_username: @profile_username)
|
||
|
{:ok, group: group, profile: profile}
|
||
|
end
|
||
|
|
||
|
test "create with no options" do
|
||
|
New.run(["--type", "group"])
|
||
|
|
||
|
# Debug message
|
||
|
assert_received {:mix_shell, :error, [message]}
|
||
|
|
||
|
assert message =~
|
||
|
"You need to provide at least --username or --display-name."
|
||
|
end
|
||
|
|
||
|
test "create when email isn't set" do
|
||
|
New.run(["--type", "group", "--display-name", @name])
|
||
|
|
||
|
# Debug message
|
||
|
assert_received {:mix_shell, :error, [message]}
|
||
|
|
||
|
assert message =~
|
||
|
"You need to provide --group-admin with the username of the admin to create a group."
|
||
|
end
|
||
|
|
||
|
test "create when group admin doesn't exist" do
|
||
|
New.run([
|
||
|
"--type",
|
||
|
"group",
|
||
|
"--display-name",
|
||
|
@name,
|
||
|
"--group-admin",
|
||
|
"some0ne_98"
|
||
|
])
|
||
|
|
||
|
# Debug message
|
||
|
assert_received {:mix_shell, :error, [message]}
|
||
|
|
||
|
assert message =~
|
||
|
"Profile with username some0ne_98 wasn't found"
|
||
|
end
|
||
|
|
||
|
test "create but the group already exists" do
|
||
|
New.run([
|
||
|
"--type",
|
||
|
"group",
|
||
|
"--display-name",
|
||
|
@already_existing_group_name,
|
||
|
"--group-admin",
|
||
|
@profile_username
|
||
|
])
|
||
|
|
||
|
# Debug message
|
||
|
assert_received {:mix_shell, :error, [message]}
|
||
|
|
||
|
assert message =~
|
||
|
"[preferred_username: {\"This username is already taken.\", []}]"
|
||
|
|
||
|
assert_received {:mix_shell, :error, [message]}
|
||
|
|
||
|
assert message =~
|
||
|
"Error while creating group because of the above reason"
|
||
|
end
|
||
|
|
||
|
@group_name "My Awesome Group"
|
||
|
@group_username "my_awesome_group"
|
||
|
|
||
|
test "create group", %{profile: %Actor{id: admin_id}} do
|
||
|
New.run([
|
||
|
"--type",
|
||
|
"group",
|
||
|
"--display-name",
|
||
|
@group_name,
|
||
|
"--group-admin",
|
||
|
@profile_username
|
||
|
])
|
||
|
|
||
|
assert %Actor{name: @group_name, preferred_username: @group_username, id: group_id} =
|
||
|
Actors.get_group_by_title(@group_username)
|
||
|
|
||
|
assert Actors.is_administrator?(admin_id, group_id)
|
||
|
end
|
||
|
end
|
||
|
end
|