Changes to the actor - user relation
Now the GraphQL API replies mostly with users which have the default_actor property filled to show profile information Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -306,15 +306,17 @@ defmodule Mobilizon.ActorsTest do
|
||||
|
||||
# There's no create_user/1, just register/1
|
||||
test "register/1 with valid data creates a user" do
|
||||
assert {:ok, %Actor{preferred_username: username, user: %User{email: email}}} =
|
||||
Actors.register(@valid_attrs)
|
||||
assert {:ok,
|
||||
%User{email: email, default_actor: %Actor{preferred_username: username} = actor} =
|
||||
user} = Actors.register(@valid_attrs)
|
||||
|
||||
assert email == @valid_attrs.email
|
||||
assert username == @valid_attrs.username
|
||||
assert [actor.id] == Actors.get_actors_for_user(user) |> Enum.map(& &1.id)
|
||||
end
|
||||
|
||||
test "create_user/1 with invalid data returns error changeset" do
|
||||
assert {:error, :empty_email} = Actors.register(@invalid_attrs)
|
||||
assert {:error, "can't be blank"} = Actors.register(@invalid_attrs)
|
||||
end
|
||||
|
||||
test "update_user/2 with valid data updates the user" do
|
||||
@@ -343,7 +345,7 @@ defmodule Mobilizon.ActorsTest do
|
||||
@email "email@domain.tld"
|
||||
@password "password"
|
||||
test "authenticate/1 checks the user's password" do
|
||||
{:ok, %Actor{user: user} = _actor} =
|
||||
{:ok, %User{} = user} =
|
||||
Actors.register(%{email: @email, password: @password, username: "yolo"})
|
||||
|
||||
assert {:ok, _, _} = Actors.authenticate(%{user: user, password: @password})
|
||||
@@ -353,7 +355,7 @@ defmodule Mobilizon.ActorsTest do
|
||||
end
|
||||
|
||||
test "get_user_by_email/1 finds an user by it's email" do
|
||||
{:ok, %Actor{user: %User{email: email} = user} = _actor} =
|
||||
{:ok, %User{email: email} = user} =
|
||||
Actors.register(%{email: @email, password: @password, username: "yolo"})
|
||||
|
||||
assert email == @email
|
||||
@@ -363,7 +365,7 @@ defmodule Mobilizon.ActorsTest do
|
||||
end
|
||||
|
||||
test "get_user_by_email/1 finds an activated user by it's email" do
|
||||
{:ok, %Actor{user: user}} =
|
||||
{:ok, %User{} = user} =
|
||||
Actors.register(%{email: @email, password: @password, username: "yolo"})
|
||||
|
||||
{:ok, %User{id: id}} = Actors.get_user_by_email(@email, false)
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
defmodule MobilizonWeb.Resolvers.CategoryResolverTest do
|
||||
use MobilizonWeb.ConnCase
|
||||
alias Mobilizon.Actors
|
||||
alias Mobilizon.Actors.Actor
|
||||
alias Mobilizon.Actors.{Actor, User}
|
||||
alias MobilizonWeb.AbsintheHelpers
|
||||
import Mobilizon.Factory
|
||||
|
||||
setup %{conn: conn} do
|
||||
{:ok, %Actor{} = actor} =
|
||||
{:ok, %User{default_actor: %Actor{} = actor} = user} =
|
||||
Actors.register(%{email: "test@test.tld", password: "testest", username: "test"})
|
||||
|
||||
{:ok, conn: conn, actor: actor}
|
||||
{:ok, conn: conn, actor: actor, user: user}
|
||||
end
|
||||
|
||||
describe "Category Resolver" do
|
||||
@@ -38,7 +38,7 @@ defmodule MobilizonWeb.Resolvers.CategoryResolverTest do
|
||||
end
|
||||
|
||||
# We can't test an upload…yet?
|
||||
# test "create_category/3 creates a category", %{conn: conn, actor: actor} do
|
||||
# test "create_category/3 creates a category", %{conn: conn, actor: actor, user: user} do
|
||||
# mutation = """
|
||||
# mutation {
|
||||
# createCategory(title: "my category", description: "my desc") {
|
||||
@@ -51,7 +51,7 @@ defmodule MobilizonWeb.Resolvers.CategoryResolverTest do
|
||||
|
||||
# res =
|
||||
# conn
|
||||
# |> auth_conn(actor.user)
|
||||
# |> auth_conn(user)
|
||||
# |> post("/api", AbsintheHelpers.mutation_skeleton(mutation))
|
||||
|
||||
# assert json_response(res, 200)["data"]["createCategory"]["title"] == "my category"
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
defmodule MobilizonWeb.Resolvers.EventResolverTest do
|
||||
use MobilizonWeb.ConnCase
|
||||
alias Mobilizon.{Events, Actors}
|
||||
alias Mobilizon.Actors.Actor
|
||||
alias Mobilizon.Actors.{Actor, User}
|
||||
alias MobilizonWeb.AbsintheHelpers
|
||||
import Mobilizon.Factory
|
||||
|
||||
@event %{description: "some body", title: "some title", begins_on: Ecto.DateTime.utc()}
|
||||
|
||||
setup %{conn: conn} do
|
||||
{:ok, %Actor{} = actor} =
|
||||
{:ok, %User{default_actor: %Actor{} = actor} = user} =
|
||||
Actors.register(%{email: "test@test.tld", password: "testest", username: "test"})
|
||||
|
||||
{:ok, conn: conn, actor: actor}
|
||||
{:ok, conn: conn, actor: actor, user: user}
|
||||
end
|
||||
|
||||
describe "Event Resolver" do
|
||||
@@ -108,7 +108,7 @@ defmodule MobilizonWeb.Resolvers.EventResolverTest do
|
||||
]
|
||||
end
|
||||
|
||||
test "create_event/3 creates an event", %{conn: conn, actor: actor} do
|
||||
test "create_event/3 creates an event", %{conn: conn, actor: actor, user: user} do
|
||||
category = insert(:category)
|
||||
|
||||
mutation = """
|
||||
@@ -129,7 +129,7 @@ defmodule MobilizonWeb.Resolvers.EventResolverTest do
|
||||
|
||||
res =
|
||||
conn
|
||||
|> auth_conn(actor.user)
|
||||
|> auth_conn(user)
|
||||
|> post("/api", AbsintheHelpers.mutation_skeleton(mutation))
|
||||
|
||||
assert json_response(res, 200)["data"]["createEvent"]["title"] == "come to my event"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
defmodule MobilizonWeb.Resolvers.PersonResolverTest do
|
||||
use MobilizonWeb.ConnCase
|
||||
alias Mobilizon.Actors
|
||||
alias Mobilizon.Actors.{User, Actor}
|
||||
alias MobilizonWeb.AbsintheHelpers
|
||||
|
||||
@valid_actor_params %{email: "test@test.tld", password: "testest", username: "test"}
|
||||
@@ -8,7 +9,7 @@ defmodule MobilizonWeb.Resolvers.PersonResolverTest do
|
||||
|
||||
describe "Person Resolver" do
|
||||
test "find_actor/3 returns a person by it's username", context do
|
||||
{:ok, actor} = Actors.register(@valid_actor_params)
|
||||
{:ok, %User{default_actor: %Actor{} = actor} = _user} = Actors.register(@valid_actor_params)
|
||||
|
||||
query = """
|
||||
{
|
||||
@@ -44,7 +45,7 @@ defmodule MobilizonWeb.Resolvers.PersonResolverTest do
|
||||
end
|
||||
|
||||
test "get_current_person/3 returns the current logged-in actor", context do
|
||||
{:ok, actor} = Actors.register(@valid_actor_params)
|
||||
{:ok, %User{default_actor: %Actor{} = actor} = user} = Actors.register(@valid_actor_params)
|
||||
|
||||
query = """
|
||||
{
|
||||
@@ -66,7 +67,7 @@ defmodule MobilizonWeb.Resolvers.PersonResolverTest do
|
||||
|
||||
res =
|
||||
context.conn
|
||||
|> auth_conn(actor.user)
|
||||
|> auth_conn(user)
|
||||
|> get("/api", AbsintheHelpers.query_skeleton(query, "logged_person"))
|
||||
|
||||
assert json_response(res, 200)["data"]["loggedPerson"]["preferredUsername"] ==
|
||||
|
||||
@@ -7,6 +7,7 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do
|
||||
use Bamboo.Test
|
||||
|
||||
@valid_actor_params %{email: "test@test.tld", password: "testest", username: "test"}
|
||||
@valid_single_actor_params %{preferred_username: "test2", keys: "yolo"}
|
||||
|
||||
describe "Resolver: Get an user" do
|
||||
test "find_user/3 returns an user by it's id", context do
|
||||
@@ -91,10 +92,10 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do
|
||||
password: "#{@account_creation.password}",
|
||||
username: "#{@account_creation.username}"
|
||||
) {
|
||||
preferred_username,
|
||||
user {
|
||||
email
|
||||
}
|
||||
default_actor {
|
||||
preferred_username,
|
||||
},
|
||||
email
|
||||
}
|
||||
}
|
||||
"""
|
||||
@@ -103,11 +104,10 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do
|
||||
context.conn
|
||||
|> post("/api", AbsintheHelpers.mutation_skeleton(mutation))
|
||||
|
||||
assert json_response(res, 200)["data"]["createUser"]["preferred_username"] ==
|
||||
assert json_response(res, 200)["data"]["createUser"]["default_actor"]["preferred_username"] ==
|
||||
@account_creation.username
|
||||
|
||||
assert json_response(res, 200)["data"]["createUser"]["user"]["email"] ==
|
||||
@account_creation.email
|
||||
assert json_response(res, 200)["data"]["createUser"]["email"] == @account_creation.email
|
||||
end
|
||||
|
||||
test "test create_user_actor/3 doesn't create an user with bad email", context do
|
||||
@@ -118,10 +118,10 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do
|
||||
password: "#{@account_creation.password}",
|
||||
username: "#{@account_creation.username}"
|
||||
) {
|
||||
preferred_username,
|
||||
user {
|
||||
email
|
||||
}
|
||||
default_actor {
|
||||
preferred_username,
|
||||
},
|
||||
email,
|
||||
}
|
||||
}
|
||||
"""
|
||||
@@ -138,20 +138,20 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do
|
||||
describe "Resolver: Validate an user" do
|
||||
@valid_actor_params %{email: "test@test.tld", password: "testest", username: "test"}
|
||||
test "test validate_user/3 validates an user", context do
|
||||
{:ok, actor} = Actors.register(@valid_actor_params)
|
||||
{:ok, %User{default_actor: %Actor{} = _actor} = user} = Actors.register(@valid_actor_params)
|
||||
|
||||
mutation = """
|
||||
mutation {
|
||||
validateUser(
|
||||
token: "#{actor.user.confirmation_token}"
|
||||
token: "#{user.confirmation_token}"
|
||||
) {
|
||||
token,
|
||||
user {
|
||||
id
|
||||
id,
|
||||
default_actor {
|
||||
preferredUsername
|
||||
}
|
||||
},
|
||||
person {
|
||||
preferredUsername
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
@@ -160,15 +160,16 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do
|
||||
context.conn
|
||||
|> post("/api", AbsintheHelpers.mutation_skeleton(mutation))
|
||||
|
||||
assert json_response(res, 200)["data"]["validateUser"]["person"]["preferredUsername"] ==
|
||||
@valid_actor_params.username
|
||||
assert json_response(res, 200)["data"]["validateUser"]["user"]["default_actor"][
|
||||
"preferredUsername"
|
||||
] == @valid_actor_params.username
|
||||
|
||||
assert json_response(res, 200)["data"]["validateUser"]["user"]["id"] ==
|
||||
to_string(actor.user.id)
|
||||
assert json_response(res, 200)["data"]["validateUser"]["user"]["id"] == to_string(user.id)
|
||||
end
|
||||
|
||||
test "test validate_user/3 with invalid token doesn't validate an user", context do
|
||||
{:ok, _actor} = Actors.register(@valid_actor_params)
|
||||
{:ok, %User{default_actor: %Actor{} = _actor} = _user} =
|
||||
Actors.register(@valid_actor_params)
|
||||
|
||||
mutation = """
|
||||
mutation {
|
||||
@@ -177,11 +178,11 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do
|
||||
) {
|
||||
token,
|
||||
user {
|
||||
id
|
||||
id,
|
||||
default_actor {
|
||||
preferredUsername
|
||||
}
|
||||
},
|
||||
person {
|
||||
preferredUsername
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
@@ -197,12 +198,12 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do
|
||||
describe "Resolver: Resend confirmation emails" do
|
||||
test "test resend_confirmation_email/3 with valid email resends an validation email",
|
||||
context do
|
||||
{:ok, actor} = Actors.register(@valid_actor_params)
|
||||
{:ok, %User{default_actor: %Actor{} = _actor} = user} = Actors.register(@valid_actor_params)
|
||||
|
||||
mutation = """
|
||||
mutation {
|
||||
resendConfirmationEmail(
|
||||
email: "#{actor.user.email}"
|
||||
email: "#{user.email}"
|
||||
)
|
||||
}
|
||||
"""
|
||||
@@ -215,21 +216,22 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do
|
||||
"You requested again a confirmation email too soon"
|
||||
|
||||
# Hammer time !
|
||||
Mobilizon.Actors.update_user(actor.user, %{
|
||||
confirmation_sent_at: Timex.shift(actor.user.confirmation_sent_at, hours: -3)
|
||||
Mobilizon.Actors.update_user(user, %{
|
||||
confirmation_sent_at: Timex.shift(user.confirmation_sent_at, hours: -3)
|
||||
})
|
||||
|
||||
res =
|
||||
context.conn
|
||||
|> post("/api", AbsintheHelpers.mutation_skeleton(mutation))
|
||||
|
||||
assert json_response(res, 200)["data"]["resendConfirmationEmail"] == actor.user.email
|
||||
assert_delivered_email(Mobilizon.Email.User.confirmation_email(actor.user))
|
||||
assert json_response(res, 200)["data"]["resendConfirmationEmail"] == user.email
|
||||
assert_delivered_email(Mobilizon.Email.User.confirmation_email(user))
|
||||
end
|
||||
|
||||
test "test resend_confirmation_email/3 with invalid email resends an validation email",
|
||||
context do
|
||||
{:ok, _actor} = Actors.register(@valid_actor_params)
|
||||
{:ok, %User{default_actor: %Actor{} = _actor} = _user} =
|
||||
Actors.register(@valid_actor_params)
|
||||
|
||||
mutation = """
|
||||
mutation {
|
||||
@@ -365,7 +367,7 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do
|
||||
|
||||
describe "Resolver: Login an user" do
|
||||
test "test login_user/3 with valid credentials", context do
|
||||
{:ok, %Actor{user: user}} = Actors.register(@valid_actor_params)
|
||||
{:ok, %User{} = user} = Actors.register(@valid_actor_params)
|
||||
|
||||
{:ok, %User{} = _user} =
|
||||
Actors.update_user(user, %{
|
||||
@@ -381,8 +383,10 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do
|
||||
password: "#{@valid_actor_params.password}",
|
||||
) {
|
||||
token,
|
||||
person {
|
||||
preferred_username,
|
||||
user {
|
||||
default_actor {
|
||||
preferred_username,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -394,11 +398,11 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do
|
||||
|
||||
assert login = json_response(res, 200)["data"]["login"]
|
||||
assert Map.has_key?(login, "token") && not is_nil(login["token"])
|
||||
assert login["person"]["preferred_username"] == @valid_actor_params.username
|
||||
assert login["user"]["default_actor"]["preferred_username"] == @valid_actor_params.username
|
||||
end
|
||||
|
||||
test "test login_user/3 with invalid password", context do
|
||||
{:ok, %Actor{user: user}} = Actors.register(@valid_actor_params)
|
||||
{:ok, %User{} = user} = Actors.register(@valid_actor_params)
|
||||
|
||||
{:ok, %User{} = _user} =
|
||||
Actors.update_user(user, %{
|
||||
@@ -414,8 +418,10 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do
|
||||
password: "bad password",
|
||||
) {
|
||||
token,
|
||||
person {
|
||||
preferred_username,
|
||||
user {
|
||||
default_actor {
|
||||
preferred_username,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -429,7 +435,7 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do
|
||||
end
|
||||
|
||||
test "test login_user/3 with invalid email", context do
|
||||
{:ok, %Actor{user: user}} = Actors.register(@valid_actor_params)
|
||||
{:ok, %User{} = user} = Actors.register(@valid_actor_params)
|
||||
|
||||
{:ok, %User{} = _user} =
|
||||
Actors.update_user(user, %{
|
||||
@@ -445,8 +451,10 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do
|
||||
password: "bad password",
|
||||
) {
|
||||
token,
|
||||
person {
|
||||
preferred_username,
|
||||
user {
|
||||
default_actor {
|
||||
preferred_username,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -459,4 +467,39 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do
|
||||
assert hd(json_response(res, 200)["errors"])["message"] == "User with email not found"
|
||||
end
|
||||
end
|
||||
|
||||
describe "Resolver: change default actor for user" do
|
||||
test "test change_default_actor/3 with valid actor", context do
|
||||
# Prepare user with two actors
|
||||
assert {:ok, %User{id: user_id, default_actor: %Actor{} = actor} = user} =
|
||||
Actors.register(@valid_actor_params)
|
||||
|
||||
assert {:ok, %User{actors: actors}} = Actors.get_user_with_actors(user_id)
|
||||
|
||||
actor_params = @valid_single_actor_params |> Map.put(:user_id, user_id)
|
||||
assert {:ok, %Actor{} = actor2} = Actors.create_actor(actor_params)
|
||||
|
||||
assert {:ok, %User{actors: actors}} = Actors.get_user_with_actors(user_id)
|
||||
assert length(actors) == 2
|
||||
|
||||
mutation = """
|
||||
mutation {
|
||||
changeDefaultActor(preferred_username: "#{actor2.preferred_username}") {
|
||||
default_actor {
|
||||
preferred_username
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
res =
|
||||
context.conn
|
||||
|> auth_conn(user)
|
||||
|> post("/api", AbsintheHelpers.mutation_skeleton(mutation))
|
||||
|
||||
assert json_response(res, 200)["data"]["changeDefaultActor"]["default_actor"][
|
||||
"preferred_username"
|
||||
] == actor2.preferred_username
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user