diff --git a/lib/mobilizon/actors/actor.ex b/lib/mobilizon/actors/actor.ex index 0b282f80b..39b802add 100644 --- a/lib/mobilizon/actors/actor.ex +++ b/lib/mobilizon/actors/actor.ex @@ -174,10 +174,12 @@ defmodule Mobilizon.Actors.Actor do |> put_change(:local, true) end - @spec build_urls(Ecto.Changeset.t, atom()) :: Ecto.Changeset.t + @spec build_urls(Ecto.Changeset.t(), atom()) :: Ecto.Changeset.t() defp build_urls(changeset, type \\ :Person) + defp build_urls(%Ecto.Changeset{changes: %{preferred_username: username}} = changeset, type) do symbol = if type == :Group, do: "~", else: "@" + changeset |> put_change( :outbox_url, diff --git a/lib/mobilizon_web/resolvers/group.ex b/lib/mobilizon_web/resolvers/group.ex index 1a8166dc9..a4170c7a2 100644 --- a/lib/mobilizon_web/resolvers/group.ex +++ b/lib/mobilizon_web/resolvers/group.ex @@ -21,7 +21,7 @@ defmodule MobilizonWeb.Resolvers.Group do Lists all groups """ def list_groups(_parent, _args, _resolution) do - {:ok, Actors.list_groups} + {:ok, Actors.list_groups()} end @doc """ @@ -34,15 +34,15 @@ defmodule MobilizonWeb.Resolvers.Group do context: %{current_user: user} } ) do - with %Actor{id: actor_id} <- Actors.get_local_actor_by_name(actor_username), {:user_actor, true} <- {:user_actor, actor_id in Enum.map(Actors.get_actors_for_user(user), & &1.id)}, - {:ok, %Actor{} = group} <- Actors.create_group(%{preferred_username: preferred_username}) do - {:ok, group} + {:ok, %Actor{} = group} <- Actors.create_group(%{preferred_username: preferred_username}) do + {:ok, group} else {:error, %Ecto.Changeset{errors: [url: {"has already been taken", []}]}} -> {:error, :group_name_not_available} + err -> Logger.error(inspect(err)) err diff --git a/lib/mobilizon_web/schema.ex b/lib/mobilizon_web/schema.ex index 826a4b4e5..4cc238f1c 100644 --- a/lib/mobilizon_web/schema.ex +++ b/lib/mobilizon_web/schema.ex @@ -548,6 +548,7 @@ defmodule MobilizonWeb.Schema do arg(:creator_username, :string, description: "The actor's username which will be the admin (otherwise user's default one)" ) + resolve(&Resolvers.Group.create_group/3) end diff --git a/test/mobilizon_web/resolvers/group_resolver_test.exs b/test/mobilizon_web/resolvers/group_resolver_test.exs index b2e34714e..5395e15df 100644 --- a/test/mobilizon_web/resolvers/group_resolver_test.exs +++ b/test/mobilizon_web/resolvers/group_resolver_test.exs @@ -35,11 +35,12 @@ defmodule MobilizonWeb.Resolvers.GroupResolverTest do |> auth_conn(user) |> post("/api", AbsintheHelpers.mutation_skeleton(mutation)) - assert json_response(res, 200)["data"]["createGroup"]["preferred_username"] == - @new_group_params.groupname - assert json_response(res, 200)["data"]["createGroup"]["type"] == "GROUP" + assert json_response(res, 200)["data"]["createGroup"]["preferred_username"] == + @new_group_params.groupname - mutation = """ + assert json_response(res, 200)["data"]["createGroup"]["type"] == "GROUP" + + mutation = """ mutation { createGroup( preferred_username: "#{@new_group_params.groupname}", @@ -56,11 +57,12 @@ defmodule MobilizonWeb.Resolvers.GroupResolverTest do |> auth_conn(user) |> post("/api", AbsintheHelpers.mutation_skeleton(mutation)) - assert hd(json_response(res, 200)["errors"])["message"] == "group_name_not_available" + assert hd(json_response(res, 200)["errors"])["message"] == "group_name_not_available" end test "list_groups/3 returns all groups", context do group = insert(:group) + query = """ { groups {