total rebase
[anni] / test / pleroma / web / rich_media / card_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.RichMedia.CardTest do
6   use Pleroma.DataCase, async: true
7
8   alias Pleroma.UnstubbedConfigMock, as: ConfigMock
9   alias Pleroma.Web.CommonAPI
10   alias Pleroma.Web.RichMedia.Card
11
12   import Mox
13   import Pleroma.Factory
14   import Tesla.Mock
15
16   setup do
17     mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
18
19     ConfigMock
20     |> stub_with(Pleroma.Test.StaticConfig)
21
22     :ok
23   end
24
25   setup do: clear_config([:rich_media, :enabled], true)
26
27   test "crawls URL in activity" do
28     user = insert(:user)
29
30     url = "https://example.com/ogp"
31     url_hash = Card.url_to_hash(url)
32
33     {:ok, activity} =
34       CommonAPI.post(user, %{
35         status: "[test](#{url})",
36         content_type: "text/markdown"
37       })
38
39     assert %Card{url_hash: ^url_hash, fields: _} = Card.get_by_activity(activity)
40   end
41
42   test "recrawls URLs on status edits/updates" do
43     original_url = "https://google.com/"
44     original_url_hash = Card.url_to_hash(original_url)
45     updated_url = "https://yahoo.com/"
46     updated_url_hash = Card.url_to_hash(updated_url)
47
48     user = insert(:user)
49     {:ok, activity} = CommonAPI.post(user, %{status: "I like this site #{original_url}"})
50
51     # Force a backfill
52     Card.get_by_activity(activity)
53
54     assert match?(
55              %Card{url_hash: ^original_url_hash, fields: _},
56              Card.get_by_activity(activity)
57            )
58
59     {:ok, _} = CommonAPI.update(user, activity, %{status: "I like this site #{updated_url}"})
60
61     activity = Pleroma.Activity.get_by_id(activity.id)
62
63     # Force a backfill
64     Card.get_by_activity(activity)
65
66     assert match?(
67              %Card{url_hash: ^updated_url_hash, fields: _},
68              Card.get_by_activity(activity)
69            )
70   end
71 end