Remove vapidPublicKey from Nodeinfo
[akkoma] / test / web / mastodon_api / views / poll_view_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.MastodonAPI.PollViewTest do
6 use Pleroma.DataCase
7
8 alias Pleroma.Object
9 alias Pleroma.Web.CommonAPI
10 alias Pleroma.Web.MastodonAPI.PollView
11
12 import Pleroma.Factory
13 import Tesla.Mock
14
15 setup do
16 mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
17 :ok
18 end
19
20 test "renders a poll" do
21 user = insert(:user)
22
23 {:ok, activity} =
24 CommonAPI.post(user, %{
25 "status" => "Is Tenshi eating a corndog cute?",
26 "poll" => %{
27 "options" => ["absolutely!", "sure", "yes", "why are you even asking?"],
28 "expires_in" => 20
29 }
30 })
31
32 object = Object.normalize(activity)
33
34 expected = %{
35 emojis: [],
36 expired: false,
37 id: to_string(object.id),
38 multiple: false,
39 options: [
40 %{title: "absolutely!", votes_count: 0},
41 %{title: "sure", votes_count: 0},
42 %{title: "yes", votes_count: 0},
43 %{title: "why are you even asking?", votes_count: 0}
44 ],
45 voted: false,
46 votes_count: 0
47 }
48
49 result = PollView.render("show.json", %{object: object})
50 expires_at = result.expires_at
51 result = Map.delete(result, :expires_at)
52
53 assert result == expected
54
55 expires_at = NaiveDateTime.from_iso8601!(expires_at)
56 assert NaiveDateTime.diff(expires_at, NaiveDateTime.utc_now()) in 15..20
57 end
58
59 test "detects if it is multiple choice" do
60 user = insert(:user)
61
62 {:ok, activity} =
63 CommonAPI.post(user, %{
64 "status" => "Which Mastodon developer is your favourite?",
65 "poll" => %{
66 "options" => ["Gargron", "Eugen"],
67 "expires_in" => 20,
68 "multiple" => true
69 }
70 })
71
72 object = Object.normalize(activity)
73
74 assert %{multiple: true} = PollView.render("show.json", %{object: object})
75 end
76
77 test "detects emoji" do
78 user = insert(:user)
79
80 {:ok, activity} =
81 CommonAPI.post(user, %{
82 "status" => "What's with the smug face?",
83 "poll" => %{
84 "options" => [":blank: sip", ":blank::blank: sip", ":blank::blank::blank: sip"],
85 "expires_in" => 20
86 }
87 })
88
89 object = Object.normalize(activity)
90
91 assert %{emojis: [%{shortcode: "blank"}]} = PollView.render("show.json", %{object: object})
92 end
93
94 test "detects vote status" do
95 user = insert(:user)
96 other_user = insert(:user)
97
98 {:ok, activity} =
99 CommonAPI.post(user, %{
100 "status" => "Which input devices do you use?",
101 "poll" => %{
102 "options" => ["mouse", "trackball", "trackpoint"],
103 "multiple" => true,
104 "expires_in" => 20
105 }
106 })
107
108 object = Object.normalize(activity)
109
110 {:ok, _, object} = CommonAPI.vote(other_user, object, [1, 2])
111
112 result = PollView.render("show.json", %{object: object, for: other_user})
113
114 assert result[:voted] == true
115 assert Enum.at(result[:options], 1)[:votes_count] == 1
116 assert Enum.at(result[:options], 2)[:votes_count] == 1
117 end
118
119 test "does not crash on polls with no end date" do
120 object = Object.normalize("https://skippers-bin.com/notes/7x9tmrp97i")
121 result = PollView.render("show.json", %{object: object})
122
123 assert result[:expires_at] == nil
124 assert result[:expired] == false
125 end
126 end