Add moderation text in user - #877

This commit is contained in:
Laurent GAY
2025-09-11 13:57:24 +02:00
parent 004b586cfe
commit 45378f0e40
8 changed files with 188 additions and 35 deletions

View File

@@ -60,10 +60,11 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
"""
@create_user_mutation """
mutation CreateUser($email: String!, $password: String!, $locale: String) {
mutation CreateUser($email: String!, $password: String!, $moderation: String!, $locale: String) {
createUser(
email: $email
password: $password
moderation: $moderation
locale: $locale
) {
id,
@@ -133,7 +134,12 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
}
"""
@valid_actor_params %{email: "test@test.tld", password: "testest", username: "test"}
@valid_actor_params %{
email: "test@test.tld",
password: "testest",
moderation: "",
username: "test"
}
@valid_single_actor_params %{preferred_username: "test2", keys: "yolo"}
describe "Resolver: Get an user" do
@@ -355,17 +361,31 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
email: "test@demo.tld",
password: "long password",
locale: "fr_FR",
moderation: " ",
preferredUsername: "toto",
name: "Sir Toto",
summary: "Sir Toto, prince of the functional tests"
}
@user_creation_with_moderation %{
email: "test@demo.tld",
password: "long password",
locale: "fr_FR",
moderation: "moderation text",
preferredUsername: "toto",
name: "Sir Toto",
summary: "Sir Toto, prince of the functional tests"
}
@user_creation_bad_email %{
email: "y@l@",
password: "long password"
password: "long password",
moderation: ""
}
test "test create_user/3 creates an user",
%{conn: conn} do
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], false)
res =
conn
|> AbsintheHelpers.graphql_query(
@@ -382,6 +402,9 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
end
test "create_user/3 doesn't allow two users with the same email", %{conn: conn} do
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], false)
res =
conn
|> put_req_header("accept-language", "fr")
@@ -421,6 +444,44 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
Config.put([:instance, :registrations_moderation], false)
end
test "create_user/3 allows registration with moderation text empty", %{conn: conn} do
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], true)
res =
conn
|> AbsintheHelpers.graphql_query(
query: @create_user_mutation,
variables: @user_creation
)
assert hd(res["errors"])["message"] == "Moderation text must not be empty"
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], false)
end
test "create_user/3 allows registration with moderation text", %{conn: conn} do
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], true)
res =
conn
|> AbsintheHelpers.graphql_query(
query: @create_user_mutation,
variables: @user_creation_with_moderation
)
assert res["data"]["createUser"]["email"] == @user_creation.email
assert res["data"]["createUser"]["locale"] == @user_creation.locale
{:ok, user} = Users.get_user_by_email(@user_creation.email)
assert user.moderation == @user_creation_with_moderation.moderation
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], false)
end
test "create_user/3 doesn't allow registration when user email is not on the allowlist", %{
conn: conn
} do
@@ -484,6 +545,8 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
test "create_user/3 doesn't allow registration when user email domain is on the denylist", %{
conn: conn
} do
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], false)
Config.put([:instance, :registration_email_denylist], ["demo.tld"])
res =
@@ -504,6 +567,8 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
test "create_user/3 doesn't allow registration when user email is on the denylist", %{
conn: conn
} do
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], false)
Config.put([:instance, :registration_email_denylist], [@user_creation.email])
res =
@@ -525,6 +590,8 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
%{
conn: conn
} do
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], false)
Config.put([:instance, :registration_email_denylist], [@user_creation.email])
res =
@@ -546,6 +613,9 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
%{
conn: conn
} do
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], false)
res =
conn
|> AbsintheHelpers.graphql_query(
@@ -621,7 +691,12 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
describe "Resolver: Resend confirmation emails" do
test "test resend_confirmation_email/3 with valid email resends an validation email",
%{conn: conn} do
{:ok, %User{} = user} = Users.register(%{email: "toto@tata.tld", password: "p4ssw0rd"})
{:ok, %User{} = user} =
Users.register(%{
email: "toto@tata.tld",
password: "p4ssw0rd",
moderation: @moderation_empty
})
res =
AbsintheHelpers.graphql_query(conn,
@@ -714,7 +789,11 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
test "test send_reset_password/3 for a deactivated user doesn't send email", %{conn: conn} do
{:ok, %User{email: email} = user} =
Users.register(%{email: "toto@tata.tld", password: "p4ssw0rd"})
Users.register(%{
email: "toto@tata.tld",
password: "p4ssw0rd",
moderation: @moderation_empty
})
Users.update_user(user, %{confirmed_at: DateTime.utc_now(), disabled: true})
@@ -732,7 +811,13 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
describe "Resolver: Reset user's password" do
test "test reset_password/3 with valid email", context do
{:ok, %User{} = user} = Users.register(%{email: "toto@tata.tld", password: "p4ssw0rd"})
{:ok, %User{} = user} =
Users.register(%{
email: "toto@tata.tld",
password: "p4ssw0rd",
moderation: @moderation_empty
})
Users.update_user(user, %{confirmed_at: DateTime.utc_now()})
%Actor{} = insert(:actor, user: user)
{:ok, _email_sent} = Email.User.send_password_reset_email(user)
@@ -814,7 +899,12 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
describe "Resolver: Login a user" do
test "test login_user/3 with valid credentials", %{conn: conn} do
{:ok, %User{} = user} = Users.register(%{email: "toto@tata.tld", password: "p4ssw0rd"})
{:ok, %User{} = user} =
Users.register(%{
email: "toto@tata.tld",
password: "p4ssw0rd",
moderation: @moderation_empty
})
{:ok, %User{} = _user} =
Users.update_user(user, %{
@@ -835,7 +925,12 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
end
test "test login_user/3 with invalid password", %{conn: conn} do
{:ok, %User{} = user} = Users.register(%{email: "toto@tata.tld", password: "p4ssw0rd"})
{:ok, %User{} = user} =
Users.register(%{
email: "toto@tata.tld",
password: "p4ssw0rd",
moderation: @moderation_empty
})
{:ok, %User{} = _user} =
Users.update_user(user, %{
@@ -868,7 +963,12 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
end
test "test login_user/3 with unconfirmed user", %{conn: conn} do
{:ok, %User{} = user} = Users.register(%{email: "toto@tata.tld", password: "p4ssw0rd"})
{:ok, %User{} = user} =
Users.register(%{
email: "toto@tata.tld",
password: "p4ssw0rd",
moderation: @moderation_empty
})
res =
conn
@@ -990,11 +1090,14 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
describe "Resolver: Change password for an user" do
@email "toto@tata.tld"
@moderation_fill "moderation text"
@moderation_empty ""
@old_password "p4ssw0rd"
@new_password "upd4t3d"
test "change_password/3 with valid password", %{conn: conn} do
{:ok, %User{} = user} = Users.register(%{email: @email, password: @old_password})
{:ok, %User{} = user} =
Users.register(%{email: @email, password: @old_password, moderation: @moderation_empty})
# Hammer time !
{:ok, %User{} = _user} =
@@ -1066,7 +1169,8 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
end
test "change_password/3 with invalid password", %{conn: conn} do
{:ok, %User{} = user} = Users.register(%{email: @email, password: @old_password})
{:ok, %User{} = user} =
Users.register(%{email: @email, password: @old_password, moderation: @moderation_empty})
# Hammer time !
@@ -1094,7 +1198,8 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
end
test "change_password/3 with same password", %{conn: conn} do
{:ok, %User{} = user} = Users.register(%{email: @email, password: @old_password})
{:ok, %User{} = user} =
Users.register(%{email: @email, password: @old_password, moderation: @moderation_empty})
# Hammer time !
{:ok, %User{} = _user} =
@@ -1122,7 +1227,8 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
end
test "change_password/3 with new password too short", %{conn: conn} do
{:ok, %User{} = user} = Users.register(%{email: @email, password: @old_password})
{:ok, %User{} = user} =
Users.register(%{email: @email, password: @old_password, moderation: @moderation_empty})
# Hammer time !
{:ok, %User{} = _user} =
@@ -1150,7 +1256,8 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
end
test "change_password/3 without being authenticated", %{conn: conn} do
{:ok, %User{} = user} = Users.register(%{email: @email, password: @old_password})
{:ok, %User{} = user} =
Users.register(%{email: @email, password: @old_password, moderation: @moderation_empty})
# Hammer time !
{:ok, %User{} = _user} =
@@ -1183,7 +1290,8 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
@password "p4ssw0rd"
test "change_email/3 with valid email", %{conn: conn} do
{:ok, %User{} = user} = Users.register(%{email: @old_email, password: @password})
{:ok, %User{} = user} =
Users.register(%{email: @old_email, password: @password, moderation: @moderation_empty})
# Hammer time !
{:ok, %User{} = _user} =
@@ -1233,7 +1341,8 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
end
test "change_email/3 with valid email but invalid token", %{conn: conn} do
{:ok, %User{} = user} = Users.register(%{email: @old_email, password: @password})
{:ok, %User{} = user} =
Users.register(%{email: @old_email, password: @password, moderation: @moderation_empty})
# Hammer time !
{:ok, %User{} = _user} =
@@ -1286,7 +1395,8 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
end
test "change_email/3 with invalid password", %{conn: conn} do
{:ok, %User{} = user} = Users.register(%{email: @old_email, password: @password})
{:ok, %User{} = user} =
Users.register(%{email: @old_email, password: @password, moderation: @moderation_empty})
# Hammer time !
{:ok, %User{} = _user} =
@@ -1308,7 +1418,8 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
end
test "change_email/3 with same email", %{conn: conn} do
{:ok, %User{} = user} = Users.register(%{email: @old_email, password: @password})
{:ok, %User{} = user} =
Users.register(%{email: @old_email, password: @password, moderation: @moderation_empty})
# Hammer time !
{:ok, %User{} = _user} =
@@ -1330,7 +1441,8 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
end
test "change_email/3 with invalid email", %{conn: conn} do
{:ok, %User{} = user} = Users.register(%{email: @old_email, password: @password})
{:ok, %User{} = user} =
Users.register(%{email: @old_email, password: @password, moderation: @moderation_empty})
# Hammer time !
{:ok, %User{} = _user} =
@@ -1352,7 +1464,8 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
end
test "change_password/3 without being authenticated", %{conn: conn} do
{:ok, %User{} = user} = Users.register(%{email: @old_email, password: @password})
{:ok, %User{} = user} =
Users.register(%{email: @old_email, password: @password, moderation: @moderation_empty})
# Hammer time !
{:ok, %User{} = _user} =
@@ -1379,7 +1492,8 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
@password "p4ssw0rd"
test "delete_account/3 with valid password", %{conn: conn} do
{:ok, %User{} = user} = Users.register(%{email: @email, password: @password})
{:ok, %User{} = user} =
Users.register(%{email: @email, password: @password, moderation: @moderation_empty})
# Hammer time !
{:ok, %User{} = user} =
@@ -1453,7 +1567,8 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
end
test "delete_account/3 with invalid password", %{conn: conn} do
{:ok, %User{} = user} = Users.register(%{email: @email, password: @password})
{:ok, %User{} = user} =
Users.register(%{email: @email, password: @password, moderation: @moderation_empty})
# Hammer time !
{:ok, %User{} = user} =
@@ -1475,7 +1590,8 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
end
test "delete_account/3 without being authenticated", %{conn: conn} do
{:ok, %User{} = user} = Users.register(%{email: @email, password: @password})
{:ok, %User{} = user} =
Users.register(%{email: @email, password: @password, moderation: @moderation_empty})
# Hammer time !
{:ok, %User{} = _user} =

View File

@@ -7,9 +7,9 @@ defmodule Mobilizon.UsersTest do
import Mobilizon.Factory
describe "users" do
@valid_attrs %{email: "foo@bar.tld", password: "some password"}
@valid_attrs %{email: "foo@bar.tld", password: "some password", moderation: "moderation text"}
@update_attrs %{email: "foo@fighters.tld", password: "some updated password"}
@invalid_attrs %{email: nil, password: nil}
@invalid_attrs %{email: nil, password: nil, moderation: nil}
test "list_users/0 returns all users" do
user = insert(:user)
@@ -69,9 +69,11 @@ defmodule Mobilizon.UsersTest do
@email "email@domain.tld"
@password "password"
@moderation "moderation text"
test "get_user_by_email/1 finds an user by its email" do
{:ok, %User{email: email} = user} = Users.register(%{email: @email, password: @password})
{:ok, %User{email: email} = user} =
Users.register(%{email: @email, password: @password, moderation: @moderation})
assert email == @email
{:ok, %User{id: id}} = Users.get_user_by_email(@email)
@@ -80,7 +82,8 @@ defmodule Mobilizon.UsersTest do
end
test "get_user_by_email/1 finds an activated user by its email" do
{:ok, %User{} = user} = Users.register(%{email: @email, password: @password})
{:ok, %User{} = user} =
Users.register(%{email: @email, password: @password, moderation: @moderation})
{:ok, %User{id: id}} = Users.get_user_by_email(@email, activated: false)
assert id == user.id
@@ -99,7 +102,8 @@ defmodule Mobilizon.UsersTest do
@unconfirmed_email "unconfirmed@email.com"
test "get_user_by_email/1 finds an user by its pending email" do
{:ok, %User{} = user} = Users.register(%{email: @email, password: @password})
{:ok, %User{} = user} =
Users.register(%{email: @email, password: @password, moderation: @moderation})
Users.update_user(user, %{
"confirmed_at" => DateTime.utc_now() |> DateTime.truncate(:second),

View File

@@ -16,6 +16,7 @@ defmodule Mobilizon.Factory do
%Mobilizon.Users.User{
password_hash: "Jane Smith",
email: sequence(:email, &"email-#{&1}@example.com"),
moderation: "",
role: :user,
confirmed_at: DateTime.utc_now() |> DateTime.truncate(:second),
confirmation_sent_at: nil,