Skip to content

Commit

Permalink
https://github.com/bonfire-networks/bonfire-app/issues/399
Browse files Browse the repository at this point in the history
  • Loading branch information
mayel committed Aug 20, 2024
1 parent 3d48180 commit bddd727
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 21 deletions.
2 changes: 1 addition & 1 deletion lib/flags.ex
Original file line number Diff line number Diff line change
Expand Up @@ -478,7 +478,7 @@ defmodule Bonfire.Social.Flags do
# TODO: check if comment is spam
Edges.changeset(Flag, subject, :flag, object, opts)
|> Ecto.Changeset.cast(%{named: %{name: comment}}, [])
|> Ecto.Changeset.cast_assoc(:named,
|> Needle.Changesets.cast_assoc(:named,
with: fn cs, params ->
Named.changeset(cs, params,
normalize_fn: fn text ->
Expand Down
36 changes: 30 additions & 6 deletions lib/likes.ex
Original file line number Diff line number Diff line change
Expand Up @@ -364,12 +364,25 @@ defmodule Bonfire.Social.Likes do
do_create(subject, object, opts[:reaction_emoji], opts[:reaction_media], opts)
end

# defp do_create(subject, object, emoji, _, opts) when is_binary(emoji) do
# # TODO: emoji_id = get_or_create(emoji)
# Edges.changeset({Like, emoji_id}, subject, :like, object, opts)
# |> debug("cssss")
# |> Edges.insert(subject, object)
# end
defp do_create(subject, object, emoji_id, _, opts) when is_binary(emoji_id) do
Edges.changeset({Like, Types.ulid!(emoji_id)}, subject, :like, object, opts)
|> debug("cssss")
|> Edges.insert(subject, object)
end

defp do_create(subject, object, {emoji, meta}, _, opts) when is_binary(emoji) and emoji != "" do
# TODO put in separate Virtual instead so they can be reused:
with {:ok, emoji} <-
get_or_create_emoji(emoji, meta)
|> debug() do
Edges.changeset({Like, Types.ulid!(emoji)}, subject, :like, object, opts)
|> Edges.insert(subject, object)
else
e ->
error(e)
do_create(subject, object, nil, nil, opts)
end
end

defp do_create(subject, object, _, media_id, opts) when is_binary(media_id) do
Edges.insert({Like, media_id}, subject, :like, object, opts)
Expand All @@ -379,6 +392,17 @@ defmodule Bonfire.Social.Likes do
Edges.insert(Like, subject, :like, object, opts)
end

def get_or_create_emoji(emoji, meta) do
# TODO: put somewhere reusable
Bonfire.Data.Social.Emoji.changeset(%{})
|> Ecto.Changeset.cast(%{extra_info: %{summary: emoji, info: meta}}, [])
|> Needle.Changesets.cast_assoc(:extra_info,
with: &Bonfire.Data.Identity.ExtraInfo.changeset/2
)
|> debug("cssss")
|> repo().insert()
end

@doc """
Publishes an ActivityPub activity for a like.
Expand Down
15 changes: 15 additions & 0 deletions priv/repo/migrations/20240820094040_add_emoji.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
defmodule Bonfire.Repo.Migrations.AddEmoji do
@moduledoc false
use Ecto.Migration

import Bonfire.Data.Social.Emoji.Migration
import Needle.Migration

def up do
Bonfire.Data.Social.Emoji.Migration.migrate_emoji()
end

def down do
Bonfire.Data.Social.Emoji.Migration.migrate_emoji()
end
end
49 changes: 35 additions & 14 deletions test/social/likes_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,6 @@ defmodule Bonfire.Social.LikesTest do
assert fetched_liked.edge.object_id == post.id
end

@tag :todo
test "can paginate my likes" do
account = Fake.fake_account!()
alice = Fake.fake_user!(account)
Expand Down Expand Up @@ -164,12 +163,7 @@ defmodule Bonfire.Social.LikesTest do
assert {:ok, _like1} = Likes.like(alice, p1)
assert {:ok, _like2} = Likes.like(alice, p2)

# assert %{edges: [fetched_liked]} = Likes.list_my(current_user: alice)
conn = conn(user: alice, account: account)
{:ok, view, _html} = live(conn, "/likes")
# open_browser(view)
assert true == false
# TODO!
assert %{edges: [_, _]} = Likes.list_my(current_user: alice, limit: 2)
end

test "can list the likers of something" do
Expand Down Expand Up @@ -246,24 +240,51 @@ defmodule Bonfire.Social.LikesTest do
assert fetched_like.activity.object_id == post.id
end

@tag :todo
test "can react with an emoji (i.e. a short text)" do
me = fake_user!()

emoji = "🔥"
label = "fire"

attrs = %{
post_content: %{html_body: "<p>hey you have an epic html post</p>"}
}

assert {:ok, post} =
Posts.publish(
current_user: me,
post_attrs: attrs,
boundary: "public"
)

assert {:ok, like} = Likes.like(me, post, reaction_emoji: {emoji, %{label: label}})

# %{
# extra_info: %{
# summary: "🔥",
# info: %{label: "fire"}
# }
# } = like

# TODO
refute like.edge.table_id == "11KES11KET0BE11KEDY0VKN0WS"

assert %{edges: [fetched_liked]} = Likes.list_my(current_user: me)
assert fetched_liked.edge.object_id == post.id

assert true == Likes.liked?(me, post)
end

test "can react with a custom emoji (i.e. a Media)" do
me = fake_user!()

label = "test custom emoji"
shortcode = ":test:"
metadata = EmojiUploader.prepare_meta(label, shortcode)

assert {:ok, upload} =
Bonfire.Files.upload(EmojiUploader, me, icon_file(), %{metadata: metadata})

{:ok, settings} = EmojiUploader.media_put_setting(upload, metadata, current_user: me)
{:ok, settings} = Bonfire.Files.EmojiUploader.add_emoji(me, icon_file(), label, shortcode)

assert %{id: media_id, url: url} =
Bonfire.Common.Settings.get([:custom_emoji, metadata.shortcode], nil, settings)
Bonfire.Common.Settings.get([:custom_emoji, shortcode], nil, settings)

# assert url =~ path

Expand Down

0 comments on commit bddd727

Please sign in to comment.