status_view_test.exs 20.8 KB
Newer Older
kaniini's avatar
kaniini committed
1
# Pleroma: A lightweight social networking server
2
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
kaniini's avatar
kaniini committed
3
4
# SPDX-License-Identifier: AGPL-3.0-only

lain's avatar
lain committed
5
6
7
defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
  use Pleroma.DataCase

8
  alias Pleroma.Activity
9
  alias Pleroma.Bookmark
10
  alias Pleroma.Conversation.Participation
rinpatch's avatar
rinpatch committed
11
  alias Pleroma.HTML
12
  alias Pleroma.Object
rinpatch's avatar
rinpatch committed
13
14
  alias Pleroma.Repo
  alias Pleroma.User
15
  alias Pleroma.UserRelationship
lain's avatar
lain committed
16
  alias Pleroma.Web.CommonAPI
17
  alias Pleroma.Web.CommonAPI.Utils
Haelwenn's avatar
Haelwenn committed
18
19
  alias Pleroma.Web.MastodonAPI.AccountView
  alias Pleroma.Web.MastodonAPI.StatusView
20

lain's avatar
lain committed
21
  import Pleroma.Factory
Maksim's avatar
Maksim committed
22
  import Tesla.Mock
23
  import OpenApiSpex.TestAssertions
Maksim's avatar
Maksim committed
24
25
26
27
28

  setup do
    mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
    :ok
  end
lain's avatar
lain committed
29

lain's avatar
lain committed
30
31
32
33
  test "has an emoji reaction list" do
    user = insert(:user)
    other_user = insert(:user)
    third_user = insert(:user)
34
    {:ok, activity} = CommonAPI.post(user, %{status: "dae cofe??"})
lain's avatar
lain committed
35

lain's avatar
lain committed
36
37
38
    {:ok, _} = CommonAPI.react_with_emoji(activity.id, user, "☕")
    {:ok, _} = CommonAPI.react_with_emoji(activity.id, third_user, "🍵")
    {:ok, _} = CommonAPI.react_with_emoji(activity.id, other_user, "☕")
lain's avatar
lain committed
39
40
41
    activity = Repo.get(Activity, activity.id)
    status = StatusView.render("show.json", activity: activity)

42
43
    assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec())

44
    assert status[:pleroma][:emoji_reactions] == [
45
46
             %{name: "☕", count: 2, me: false},
             %{name: "🍵", count: 1, me: false}
47
48
49
50
           ]

    status = StatusView.render("show.json", activity: activity, for: user)

51
52
    assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec())

53
    assert status[:pleroma][:emoji_reactions] == [
54
55
             %{name: "☕", count: 2, me: true},
             %{name: "🍵", count: 1, me: false}
56
           ]
lain's avatar
lain committed
57
58
  end

59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
  test "works correctly with badly formatted emojis" do
    user = insert(:user)
    {:ok, activity} = CommonAPI.post(user, %{status: "yo"})

    activity
    |> Object.normalize(false)
    |> Object.update_data(%{"reactions" => %{"☕" => [user.ap_id], "x" => 1}})

    activity = Activity.get_by_id(activity.id)

    status = StatusView.render("show.json", activity: activity, for: user)

    assert status[:pleroma][:emoji_reactions] == [
             %{name: "☕", count: 1, me: true}
           ]
  end

76
  test "loads and returns the direct conversation id when given the `with_direct_conversation_id` option" do
77
78
    user = insert(:user)

79
    {:ok, activity} = CommonAPI.post(user, %{status: "Hey @shp!", visibility: "direct"})
80
    [participation] = Participation.for_user(user)
81
82

    status =
83
      StatusView.render("show.json",
84
85
86
87
88
        activity: activity,
        with_direct_conversation_id: true,
        for: user
      )

89
90
91
92
    assert status[:pleroma][:direct_conversation_id] == participation.id

    status = StatusView.render("show.json", activity: activity, for: user)
    assert status[:pleroma][:direct_conversation_id] == nil
93
    assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec())
94
95
96
97
98
  end

  test "returns the direct conversation id when given the `direct_conversation_id` option" do
    user = insert(:user)

99
    {:ok, activity} = CommonAPI.post(user, %{status: "Hey @shp!", visibility: "direct"})
100
101
102
103
104
105
106
107
108
109
    [participation] = Participation.for_user(user)

    status =
      StatusView.render("show.json",
        activity: activity,
        direct_conversation_id: participation.id,
        for: user
      )

    assert status[:pleroma][:direct_conversation_id] == participation.id
110
    assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec())
111
112
  end

lain's avatar
lain committed
113
114
115
  test "returns a temporary ap_id based user for activities missing db users" do
    user = insert(:user)

116
    {:ok, activity} = CommonAPI.post(user, %{status: "Hey @shp!", visibility: "direct"})
lain's avatar
lain committed
117
118
119
120

    Repo.delete(user)
    Cachex.clear(:user_cache)

121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
    finger_url =
      "https://localhost/.well-known/webfinger?resource=acct:#{user.nickname}@localhost"

    Tesla.Mock.mock_global(fn
      %{method: :get, url: "http://localhost/.well-known/host-meta"} ->
        %Tesla.Env{status: 404, body: ""}

      %{method: :get, url: "https://localhost/.well-known/host-meta"} ->
        %Tesla.Env{status: 404, body: ""}

      %{
        method: :get,
        url: ^finger_url
      } ->
        %Tesla.Env{status: 404, body: ""}
    end)

138
    %{account: ms_user} = StatusView.render("show.json", activity: activity)
lain's avatar
lain committed
139
140
141
142
143
144
145

    assert ms_user.acct == "erroruser@example.com"
  end

  test "tries to get a user by nickname if fetching by ap_id doesn't work" do
    user = insert(:user)

146
    {:ok, activity} = CommonAPI.post(user, %{status: "Hey @shp!", visibility: "direct"})
lain's avatar
lain committed
147
148
149
150
151
152
153
154

    {:ok, user} =
      user
      |> Ecto.Changeset.change(%{ap_id: "#{user.ap_id}/extension/#{user.nickname}"})
      |> Repo.update()

    Cachex.clear(:user_cache)

155
    result = StatusView.render("show.json", activity: activity)
lain's avatar
lain committed
156
157

    assert result[:account][:id] == to_string(user.id)
158
    assert_schema(result, "Status", Pleroma.Web.ApiSpec.spec())
lain's avatar
lain committed
159
  end
lain's avatar
lain committed
160

lain's avatar
lain committed
161
162
  test "a note with null content" do
    note = insert(:note_activity)
163
    note_object = Object.normalize(note)
lain's avatar
lain committed
164
165

    data =
kaniini's avatar
kaniini committed
166
167
      note_object.data
      |> Map.put("content", nil)
lain's avatar
lain committed
168

kaniini's avatar
kaniini committed
169
    Object.change(note_object, %{data: data})
170
    |> Object.update_and_set_cache()
lain's avatar
lain committed
171

Maksim's avatar
Maksim committed
172
    User.get_cached_by_ap_id(note.data["actor"])
lain's avatar
lain committed
173

174
    status = StatusView.render("show.json", %{activity: note})
lain's avatar
lain committed
175
176

    assert status.content == ""
177
    assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec())
lain's avatar
lain committed
178
179
  end

lain's avatar
lain committed
180
181
  test "a note activity" do
    note = insert(:note_activity)
182
    object_data = Object.normalize(note).data
lain's avatar
lain committed
183
184
    user = User.get_cached_by_ap_id(note.data["actor"])

185
    convo_id = Utils.context_to_conversation_id(object_data["context"])
186

187
    status = StatusView.render("show.json", %{activity: note})
lain's avatar
lain committed
188

lain's avatar
lain committed
189
    created_at =
190
      (object_data["published"] || "")
lain's avatar
lain committed
191
      |> String.replace(~r/\.\d+Z/, ".000Z")
192

lain's avatar
lain committed
193
    expected = %{
194
      id: to_string(note.id),
195
      uri: object_data["id"],
lain's avatar
lain committed
196
      url: Pleroma.Web.Router.Helpers.o_status_url(Pleroma.Web.Endpoint, :notice, note),
197
      account: AccountView.render("show.json", %{user: user, skip_visibility_check: true}),
lain's avatar
lain committed
198
199
      in_reply_to_id: nil,
      in_reply_to_account_id: nil,
200
      card: nil,
lain's avatar
lain committed
201
      reblog: nil,
rinpatch's avatar
rinpatch committed
202
      content: HTML.filter_tags(object_data["content"]),
203
      text: nil,
204
      created_at: created_at,
lain's avatar
lain committed
205
      reblogs_count: 0,
206
      replies_count: 0,
lain's avatar
lain committed
207
208
      favourites_count: 0,
      reblogged: false,
Haelwenn's avatar
Haelwenn committed
209
      bookmarked: false,
lain's avatar
lain committed
210
211
      favourited: false,
      muted: false,
212
      pinned: false,
lain's avatar
lain committed
213
      sensitive: false,
214
      poll: nil,
rinpatch's avatar
rinpatch committed
215
      spoiler_text: HTML.filter_tags(object_data["summary"]),
lain's avatar
lain committed
216
217
218
      visibility: "public",
      media_attachments: [],
      mentions: [],
Maksim's avatar
Maksim committed
219
220
      tags: [
        %{
221
222
          name: "#{object_data["tag"]}",
          url: "/tag/#{object_data["tag"]}"
Maksim's avatar
Maksim committed
223
224
        }
      ],
225
226
227
228
      application: %{
        name: "Web",
        website: nil
      },
Roger Braun's avatar
Roger Braun committed
229
230
231
232
233
      language: nil,
      emojis: [
        %{
          shortcode: "2hu",
          url: "corndog.png",
shadowfacts's avatar
shadowfacts committed
234
235
          static_url: "corndog.png",
          visible_in_picker: false
Roger Braun's avatar
Roger Braun committed
236
        }
237
238
      ],
      pleroma: %{
239
        local: true,
240
        conversation_id: convo_id,
241
        in_reply_to_account_acct: nil,
rinpatch's avatar
rinpatch committed
242
243
        content: %{"text/plain" => HTML.strip_tags(object_data["content"])},
        spoiler_text: %{"text/plain" => HTML.strip_tags(object_data["summary"])},
244
        expires_at: nil,
245
        direct_conversation_id: nil,
lain's avatar
lain committed
246
        thread_muted: false,
lain's avatar
lain committed
247
248
        emoji_reactions: [],
        parent_visible: false
249
      }
lain's avatar
lain committed
250
251
252
    }

    assert status == expected
253
    assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec())
lain's avatar
lain committed
254
255
  end

256
257
258
259
  test "tells if the message is muted for some reason" do
    user = insert(:user)
    other_user = insert(:user)

260
    {:ok, _user_relationships} = User.mute(user, other_user)
261

262
    {:ok, activity} = CommonAPI.post(other_user, %{status: "test"})
263

264
265
266
267
    relationships_opt = UserRelationship.view_relationships_option(user, [other_user])

    opts = %{activity: activity}
    status = StatusView.render("show.json", opts)
268
    assert status.muted == false
269
    assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec())
270

271
272
    status = StatusView.render("show.json", Map.put(opts, :relationships, relationships_opt))
    assert status.muted == false
273

274
275
276
    for_opts = %{activity: activity, for: user}
    status = StatusView.render("show.json", for_opts)
    assert status.muted == true
277

278
    status = StatusView.render("show.json", Map.put(for_opts, :relationships, relationships_opt))
279
    assert status.muted == true
280
    assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec())
281
282
  end

283
284
285
286
  test "tells if the message is thread muted" do
    user = insert(:user)
    other_user = insert(:user)

287
    {:ok, _user_relationships} = User.mute(user, other_user)
288

289
    {:ok, activity} = CommonAPI.post(other_user, %{status: "test"})
290
    status = StatusView.render("show.json", %{activity: activity, for: user})
291
292
293
294
295

    assert status.pleroma.thread_muted == false

    {:ok, activity} = CommonAPI.add_mute(user, activity)

296
    status = StatusView.render("show.json", %{activity: activity, for: user})
297
298
299
300

    assert status.pleroma.thread_muted == true
  end

301
302
303
  test "tells if the status is bookmarked" do
    user = insert(:user)

304
    {:ok, activity} = CommonAPI.post(user, %{status: "Cute girls doing cute things"})
305
    status = StatusView.render("show.json", %{activity: activity})
306
307
308

    assert status.bookmarked == false

309
    status = StatusView.render("show.json", %{activity: activity, for: user})
310
311
312
313
314

    assert status.bookmarked == false

    {:ok, _bookmark} = Bookmark.create(user.id, activity.id)

315
316
    activity = Activity.get_by_id_with_object(activity.id)

317
    status = StatusView.render("show.json", %{activity: activity, for: user})
318
319
320
321

    assert status.bookmarked == true
  end

lain's avatar
lain committed
322
323
324
  test "a reply" do
    note = insert(:note_activity)
    user = insert(:user)
lain's avatar
lain committed
325

326
    {:ok, activity} = CommonAPI.post(user, %{status: "he", in_reply_to_status_id: note.id})
lain's avatar
lain committed
327

328
    status = StatusView.render("show.json", %{activity: activity})
lain's avatar
lain committed
329

330
    assert status.in_reply_to_id == to_string(note.id)
lain's avatar
lain committed
331
332
333

    [status] = StatusView.render("index.json", %{activities: [activity], as: :activity})

334
    assert status.in_reply_to_id == to_string(note.id)
lain's avatar
lain committed
335
336
  end

337
338
339
340
  test "contains mentions" do
    user = insert(:user)
    mentioned = insert(:user)

341
    {:ok, activity} = CommonAPI.post(user, %{status: "hi @#{mentioned.nickname}"})
342
343
344
345
346

    status = StatusView.render("show.json", %{activity: activity})

    assert status.mentions ==
             Enum.map([mentioned], fn u -> AccountView.render("mention.json", %{user: u}) end)
347
348

    assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec())
349
  end
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370

  test "create mentions from the 'to' field" do
    %User{ap_id: recipient_ap_id} = insert(:user)
    cc = insert_pair(:user) |> Enum.map(& &1.ap_id)

    object =
      insert(:note, %{
        data: %{
          "to" => [recipient_ap_id],
          "cc" => cc
        }
      })

    activity =
      insert(:note_activity, %{
        note: object,
        recipients: [recipient_ap_id | cc]
      })

    assert length(activity.recipients) == 3

371
    %{mentions: [mention] = mentions} = StatusView.render("show.json", %{activity: activity})
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407

    assert length(mentions) == 1
    assert mention.url == recipient_ap_id
  end

  test "create mentions from the 'tag' field" do
    recipient = insert(:user)
    cc = insert_pair(:user) |> Enum.map(& &1.ap_id)

    object =
      insert(:note, %{
        data: %{
          "cc" => cc,
          "tag" => [
            %{
              "href" => recipient.ap_id,
              "name" => recipient.nickname,
              "type" => "Mention"
            },
            %{
              "href" => "https://example.com/search?tag=test",
              "name" => "#test",
              "type" => "Hashtag"
            }
          ]
        }
      })

    activity =
      insert(:note_activity, %{
        note: object,
        recipients: [recipient.ap_id | cc]
      })

    assert length(activity.recipients) == 3

408
    %{mentions: [mention] = mentions} = StatusView.render("show.json", %{activity: activity})
409
410
411

    assert length(mentions) == 1
    assert mention.url == recipient.ap_id
lain's avatar
lain committed
412
  end
lain's avatar
lain committed
413
414
415
416
417
418
419
420
421
422

  test "attachments" do
    object = %{
      "type" => "Image",
      "url" => [
        %{
          "mediaType" => "image/png",
          "href" => "someurl"
        }
      ],
feld's avatar
feld committed
423
      "blurhash" => "UJJ8X[xYW,%Jtq%NNFbXB5j]IVM|9GV=WHRn",
lain's avatar
lain committed
424
425
426
427
      "uuid" => 6
    }

    expected = %{
lain's avatar
lain committed
428
      id: "1638338801",
lain's avatar
lain committed
429
430
431
      type: "image",
      url: "someurl",
      remote_url: "someurl",
432
      preview_url: "someurl",
433
      text_url: "someurl",
434
      description: nil,
feld's avatar
feld committed
435
436
      pleroma: %{mime_type: "image/png"},
      blurhash: "UJJ8X[xYW,%Jtq%NNFbXB5j]IVM|9GV=WHRn"
lain's avatar
lain committed
437
438
    }

439
440
    api_spec = Pleroma.Web.ApiSpec.spec()

lain's avatar
lain committed
441
    assert expected == StatusView.render("attachment.json", %{attachment: object})
442
    assert_schema(expected, "Attachment", api_spec)
lain's avatar
lain committed
443
444
445

    # If theres a "id", use that instead of the generated one
    object = Map.put(object, "id", 2)
446
447
448
    result = StatusView.render("attachment.json", %{attachment: object})

    assert %{id: "2"} = result
449
    assert_schema(result, "Attachment", api_spec)
lain's avatar
lain committed
450
  end
lain's avatar
lain committed
451

452
453
454
455
  test "put the url advertised in the Activity in to the url attribute" do
    id = "https://wedistribute.org/wp-json/pterotype/v1/object/85810"
    [activity] = Activity.search(nil, id)

456
    status = StatusView.render("show.json", %{activity: activity})
457
458
459
460
461

    assert status.uri == id
    assert status.url == "https://wedistribute.org/2019/07/mastodon-drops-ostatus/"
  end

lain's avatar
lain committed
462
463
464
465
  test "a reblog" do
    user = insert(:user)
    activity = insert(:note_activity)

lain's avatar
lain committed
466
    {:ok, reblog} = CommonAPI.repeat(activity.id, user)
lain's avatar
lain committed
467

468
    represented = StatusView.render("show.json", %{for: user, activity: reblog})
lain's avatar
lain committed
469

470
471
    assert represented[:id] == to_string(reblog.id)
    assert represented[:reblog][:id] == to_string(activity.id)
lain's avatar
lain committed
472
    assert represented[:emojis] == []
473
    assert_schema(represented, "Status", Pleroma.Web.ApiSpec.spec())
lain's avatar
lain committed
474
  end
Maksim's avatar
Maksim committed
475

476
477
478
479
  test "a peertube video" do
    user = insert(:user)

    {:ok, object} =
480
      Pleroma.Object.Fetcher.fetch_object_from_id(
481
482
483
        "https://peertube.moe/videos/watch/df5f464b-be8d-46fb-ad81-2d4c2d1630e3"
      )

484
    %Activity{} = activity = Activity.get_create_by_object_ap_id(object.data["id"])
485

486
    represented = StatusView.render("show.json", %{for: user, activity: activity})
487
488
489

    assert represented[:id] == to_string(activity.id)
    assert length(represented[:media_attachments]) == 1
490
    assert_schema(represented, "Status", Pleroma.Web.ApiSpec.spec())
491
492
  end

493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
  test "funkwhale audio" do
    user = insert(:user)

    {:ok, object} =
      Pleroma.Object.Fetcher.fetch_object_from_id(
        "https://channels.tests.funkwhale.audio/federation/music/uploads/42342395-0208-4fee-a38d-259a6dae0871"
      )

    %Activity{} = activity = Activity.get_create_by_object_ap_id(object.data["id"])

    represented = StatusView.render("show.json", %{for: user, activity: activity})

    assert represented[:id] == to_string(activity.id)
    assert length(represented[:media_attachments]) == 1
  end

509
510
511
512
513
514
515
516
517
518
519
520
521
  test "a Mobilizon event" do
    user = insert(:user)

    {:ok, object} =
      Pleroma.Object.Fetcher.fetch_object_from_id(
        "https://mobilizon.org/events/252d5816-00a3-4a89-a66f-15bf65c33e39"
      )

    %Activity{} = activity = Activity.get_create_by_object_ap_id(object.data["id"])

    represented = StatusView.render("show.json", %{for: user, activity: activity})

    assert represented[:id] == to_string(activity.id)
Haelwenn's avatar
Haelwenn committed
522
523
524
525
526
527

    assert represented[:url] ==
             "https://mobilizon.org/events/252d5816-00a3-4a89-a66f-15bf65c33e39"

    assert represented[:content] ==
             "<p><a href=\"https://mobilizon.org/events/252d5816-00a3-4a89-a66f-15bf65c33e39\">Mobilizon Launching Party</a></p><p>Mobilizon is now federated! 🎉</p><p></p><p>You can view this event from other instances if they are subscribed to mobilizon.org, and soon directly from Mastodon and Pleroma. It is possible that you may see some comments from other instances, including Mastodon ones, just below.</p><p></p><p>With a Mobilizon account on an instance, you may <strong>participate</strong> at events from other instances and <strong>add comments</strong> on events.</p><p></p><p>Of course, it&#39;s still <u>a work in progress</u>: if reports made from an instance on events and comments can be federated, you can&#39;t block people right now, and moderators actions are rather limited, but this <strong>will definitely get fixed over time</strong> until first stable version next year.</p><p></p><p>Anyway, if you want to come up with some feedback, head over to our forum or - if you feel you have technical skills and are familiar with it - on our Gitlab repository.</p><p></p><p>Also, to people that want to set Mobilizon themselves even though we really don&#39;t advise to do that for now, we have a little documentation but it&#39;s quite the early days and you&#39;ll probably need some help. No worries, you can chat with us on our Forum or though our Matrix channel.</p><p></p><p>Check our website for more informations and follow us on Twitter or Mastodon.</p>"
528
529
  end

Maksim's avatar
Maksim committed
530
531
  describe "build_tags/1" do
    test "it returns a a dictionary tags" do
Maksim's avatar
Maksim committed
532
533
534
535
536
537
538
539
540
541
542
543
      object_tags = [
        "fediverse",
        "mastodon",
        "nextcloud",
        %{
          "href" => "https://kawen.space/users/lain",
          "name" => "@lain@kawen.space",
          "type" => "Mention"
        }
      ]

      assert StatusView.build_tags(object_tags) == [
Maksim's avatar
Maksim committed
544
545
546
547
548
549
               %{name: "fediverse", url: "/tag/fediverse"},
               %{name: "mastodon", url: "/tag/mastodon"},
               %{name: "nextcloud", url: "/tag/nextcloud"}
             ]
    end
  end
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585

  describe "rich media cards" do
    test "a rich media card without a site name renders correctly" do
      page_url = "http://example.com"

      card = %{
        url: page_url,
        image: page_url <> "/example.jpg",
        title: "Example website"
      }

      %{provider_name: "example.com"} =
        StatusView.render("card.json", %{page_url: page_url, rich_media: card})
    end

    test "a rich media card without a site name or image renders correctly" do
      page_url = "http://example.com"

      card = %{
        url: page_url,
        title: "Example website"
      }

      %{provider_name: "example.com"} =
        StatusView.render("card.json", %{page_url: page_url, rich_media: card})
    end

    test "a rich media card without an image renders correctly" do
      page_url = "http://example.com"

      card = %{
        url: page_url,
        site_name: "Example site name",
        title: "Example website"
      }

586
      %{provider_name: "example.com"} =
587
588
        StatusView.render("card.json", %{page_url: page_url, rich_media: card})
    end
589
590
591
592
593
594
595
596
597
598
599
600

    test "a rich media card with all relevant data renders correctly" do
      page_url = "http://example.com"

      card = %{
        url: page_url,
        site_name: "Example site name",
        title: "Example website",
        image: page_url <> "/example.jpg",
        description: "Example description"
      }

601
      %{provider_name: "example.com"} =
602
603
        StatusView.render("card.json", %{page_url: page_url, rich_media: card})
    end
604
  end
rinpatch's avatar
rinpatch committed
605

606
  test "does not embed a relationship in the account" do
607
608
609
610
611
    user = insert(:user)
    other_user = insert(:user)

    {:ok, activity} =
      CommonAPI.post(user, %{
612
        status: "drink more water"
613
614
      })

615
    result = StatusView.render("show.json", %{activity: activity, for: other_user})
616

617
    assert result[:account][:pleroma][:relationship] == %{}
618
    assert_schema(result, "Status", Pleroma.Web.ApiSpec.spec())
619
620
  end

621
  test "does not embed a relationship in the account in reposts" do
622
623
624
625
626
    user = insert(:user)
    other_user = insert(:user)

    {:ok, activity} =
      CommonAPI.post(user, %{
627
        status: "˙˙ɐʎns"
628
629
      })

lain's avatar
lain committed
630
    {:ok, activity} = CommonAPI.repeat(activity.id, other_user)
631

632
    result = StatusView.render("show.json", %{activity: activity, for: user})
633

634
635
    assert result[:account][:pleroma][:relationship] == %{}
    assert result[:reblog][:account][:pleroma][:relationship] == %{}
636
    assert_schema(result, "Status", Pleroma.Web.ApiSpec.spec())
637
  end
638
639
640
641
642
643

  test "visibility/list" do
    user = insert(:user)

    {:ok, list} = Pleroma.List.create("foo", user)

644
    {:ok, activity} = CommonAPI.post(user, %{status: "foobar", visibility: "list:#{list.id}"})
645

646
    status = StatusView.render("show.json", activity: activity)
647
648
649

    assert status.visibility == "list"
  end
lain's avatar
lain committed
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665

  test "has a field for parent visibility" do
    user = insert(:user)
    poster = insert(:user)

    {:ok, invisible} = CommonAPI.post(poster, %{status: "hey", visibility: "private"})

    {:ok, visible} =
      CommonAPI.post(poster, %{status: "hey", visibility: "private", in_reply_to_id: invisible.id})

    status = StatusView.render("show.json", activity: visible, for: user)
    refute status.pleroma.parent_visible

    status = StatusView.render("show.json", activity: visible, for: poster)
    assert status.pleroma.parent_visible
  end
lain's avatar
lain committed
666
end