refactor(media): use UUID instead of ID for media retrieval in GraphQL

Fixes #1760
This commit is contained in:
Massedil
2025-05-21 23:05:09 +02:00
committed by setop
parent 1b2c55508e
commit a50681c9ac
27 changed files with 171 additions and 103 deletions

View File

@@ -48,7 +48,7 @@ defmodule Mobilizon.GraphQL.Resolvers.ActivityTest do
name
domain
avatar {
id
uuid
url
}
}
@@ -73,7 +73,7 @@ defmodule Mobilizon.GraphQL.Resolvers.ActivityTest do
preferredUsername
domain
avatar {
id
uuid
url
}
}
@@ -101,10 +101,10 @@ defmodule Mobilizon.GraphQL.Resolvers.ActivityTest do
id
}
banner {
id
uuid
}
avatar {
id
uuid
}
}
}

View File

@@ -619,7 +619,7 @@ defmodule Mobilizon.Web.Resolvers.EventTest do
alt: $alt
file: $file
) {
id
uuid
url
name
content_type
@@ -628,7 +628,7 @@ defmodule Mobilizon.Web.Resolvers.EventTest do
}
"""
test "create_event/3 creates an event with an picture ID", %{
test "create_event/3 creates an event with an picture UUID", %{
conn: conn,
actor: actor,
user: user
@@ -656,8 +656,8 @@ defmodule Mobilizon.Web.Resolvers.EventTest do
assert res["errors"] == nil
assert res["data"]["uploadMedia"]["name"] == media.name
media_id = res["data"]["uploadMedia"]["id"]
assert media_id !== "" and not is_nil(media_id)
media_uuid = res["data"]["uploadMedia"]["uuid"]
assert media_uuid !== "" and not is_nil(media_uuid)
res =
conn
@@ -672,7 +672,7 @@ defmodule Mobilizon.Web.Resolvers.EventTest do
organizer_actor_id: "#{actor.id}",
category: "PARTY",
picture: %{
media_id: "#{media_id}"
media_uuid: "#{media_uuid}"
}
}
)

View File

@@ -45,7 +45,7 @@ defmodule Mobilizon.Web.Resolvers.FollowerTest do
name
domain
avatar {
id
uuid
url
}
}

View File

@@ -36,7 +36,7 @@ defmodule Mobilizon.Web.Resolvers.GroupTest do
preferredUsername
type
banner {
id
uuid
url
}
}

View File

@@ -20,9 +20,9 @@ defmodule Mobilizon.GraphQL.Resolvers.MediaTest do
end
@media_query """
query Media($id: ID!) {
media(id: $id) {
id
query Media($uuid: UUID!) {
media(uuid: $uuid) {
uuid
name,
alt,
url,
@@ -49,11 +49,11 @@ defmodule Mobilizon.GraphQL.Resolvers.MediaTest do
describe "Resolver: Get media" do
test "media/3 returns the information on a media", %{conn: conn} do
%Media{id: id} = media = insert(:media)
%Media{uuid: uuid} = media = insert(:media)
res =
conn
|> AbsintheHelpers.graphql_query(query: @media_query, variables: %{id: id})
|> AbsintheHelpers.graphql_query(query: @media_query, variables: %{uuid: uuid})
assert res["data"]["media"]["name"] == media.file.name
@@ -68,7 +68,10 @@ defmodule Mobilizon.GraphQL.Resolvers.MediaTest do
test "media/3 returns nothing on a non-existent media", %{conn: conn} do
res =
conn
|> AbsintheHelpers.graphql_query(query: @media_query, variables: %{id: 3})
|> AbsintheHelpers.graphql_query(
query: @media_query,
variables: %{uuid: "bad0bad0-bad0-bad0-bad0-bad0bad0bad0"}
)
assert hd(res["errors"])["message"] == "Resource not found"
assert hd(res["errors"])["status_code"] == 404
@@ -131,30 +134,30 @@ defmodule Mobilizon.GraphQL.Resolvers.MediaTest do
describe "Resolver: Remove media" do
@remove_media_mutation """
mutation RemoveMedia($id: ID!) {
removeMedia(id: $id) {
id
mutation RemoveMedia($uuid: UUID!) {
removeMedia(uuid: $uuid) {
uuid
}
}
"""
test "Removes a previously uploaded media", %{conn: conn, user: user, actor: actor} do
%Media{id: media_id} = insert(:media, actor: actor)
%Media{uuid: media_uuid} = insert(:media, actor: actor)
res =
conn
|> auth_conn(user)
|> AbsintheHelpers.graphql_query(
query: @remove_media_mutation,
variables: %{id: media_id}
variables: %{uuid: media_uuid}
)
assert res["errors"] == nil
assert res["data"]["removeMedia"]["id"] == to_string(media_id)
assert res["data"]["removeMedia"]["uuid"] == to_string(media_uuid)
res =
conn
|> AbsintheHelpers.graphql_query(query: @media_query, variables: %{id: media_id})
|> AbsintheHelpers.graphql_query(query: @media_query, variables: %{uuid: media_uuid})
assert hd(res["errors"])["message"] == "Resource not found"
assert hd(res["errors"])["status_code"] == 404
@@ -166,7 +169,7 @@ defmodule Mobilizon.GraphQL.Resolvers.MediaTest do
|> auth_conn(user)
|> AbsintheHelpers.graphql_query(
query: @remove_media_mutation,
variables: %{id: 400}
variables: %{uuid: "bad0bad0-bad0-bad0-bad0-bad0bad0bad0"}
)
assert hd(res["errors"])["message"] == "Resource not found"
@@ -174,13 +177,13 @@ defmodule Mobilizon.GraphQL.Resolvers.MediaTest do
end
test "Removes nothing if media if not logged-in", %{conn: conn, actor: actor} do
%Media{id: media_id} = insert(:media, actor: actor)
%Media{uuid: media_uuid} = insert(:media, actor: actor)
res =
conn
|> AbsintheHelpers.graphql_query(
query: @remove_media_mutation,
variables: %{id: media_id}
variables: %{uuid: media_uuid}
)
assert hd(res["errors"])["message"] == "You need to be logged in"

View File

@@ -11,6 +11,12 @@ defmodule Mobilizon.GraphQL.Resolvers.PersonTest do
alias Mobilizon.Web.Endpoint
# TODO There is a bug in the GraphQL API with person queries
# You can ask for a media (avatar and banner) normally with metadata and uuid accessible,
# but you obtain a File (so metadata and uuid are not accessible)
# Until this issue persist, we can't test uuid or metadata retrivial for person queries
# https://framagit.org/kaihuri/mobilizon/-/issues/1757
@non_existent_username "nonexistent"
@get_person_query """
@@ -161,11 +167,9 @@ defmodule Mobilizon.GraphQL.Resolvers.PersonTest do
id
preferredUsername
avatar {
id,
url
},
banner {
id,
name,
url
}
@@ -281,7 +285,11 @@ defmodule Mobilizon.GraphQL.Resolvers.PersonTest do
assert res["data"]["createPerson"]["preferredUsername"] ==
"new_identity"
assert res["data"]["createPerson"]["banner"]["id"]
# TODO see the top comment and this bug :
# https://framagit.org/kaihuri/mobilizon/-/issues/1757
# assert res["data"]["createPerson"]["banner"]["uuid"]
# assert res["data"]["createPerson"]["banner"]["metadata"]
# assert res["data"]["createPerson"]["banner"]["metadata"]["width"]
assert res["data"]["createPerson"]["banner"]["name"] ==
"The beautiful atlantic way"
@@ -334,11 +342,9 @@ defmodule Mobilizon.GraphQL.Resolvers.PersonTest do
name,
summary,
avatar {
id,
url
},
banner {
id,
name,
url
}
@@ -376,7 +382,11 @@ defmodule Mobilizon.GraphQL.Resolvers.PersonTest do
assert res_person["name"] == "riri updated"
assert res_person["summary"] == "summary updated"
assert res_person["banner"]["id"]
# TODO see the top comment and this bug :
# https://framagit.org/kaihuri/mobilizon/-/issues/1757
# assert res_person["banner"]["uuid"]
# assert res_person["banner"]["metadata"]
# assert res_person["banner"]["metadata"]["width"]
assert res_person["banner"]["name"] == "The beautiful atlantic way"
assert res_person["banner"]["url"] =~ Endpoint.url() <> "/media/"
end