+ test "own_votes" do
+ %{conn: conn} = oauth_access(["write:statuses", "read:statuses"])
+
+ other_user = insert(:user)
+
+ {:ok, activity} =
+ CommonAPI.post(other_user, %{
+ status: "A very delicious sandwich",
+ poll: %{
+ options: ["Lettuce", "Grilled Bacon", "Tomato"],
+ expires_in: 20,
+ multiple: true
+ }
+ })
+
+ object = Object.normalize(activity, fetch: false)
+
+ conn
+ |> put_req_header("content-type", "application/json")
+ |> post("/api/v1/polls/#{object.id}/votes", %{"choices" => [0, 2]})
+ |> json_response_and_validate_schema(200)
+
+ object = Object.get_by_id(object.id)
+
+ assert [
+ %{
+ "name" => "Lettuce",
+ "replies" => %{"totalItems" => 1, "type" => "Collection"},
+ "type" => "Note"
+ },
+ %{
+ "name" => "Grilled Bacon",
+ "replies" => %{"totalItems" => 0, "type" => "Collection"},
+ "type" => "Note"
+ },
+ %{
+ "name" => "Tomato",
+ "replies" => %{"totalItems" => 1, "type" => "Collection"},
+ "type" => "Note"
+ }
+ ] == object.data["anyOf"]
+
+ assert %{"replies" => %{"totalItems" => 0}} =
+ Enum.find(object.data["anyOf"], fn %{"name" => name} -> name == "Grilled Bacon" end)
+
+ Enum.each(["Lettuce", "Tomato"], fn title ->
+ %{"replies" => %{"totalItems" => total_items}} =
+ Enum.find(object.data["anyOf"], fn %{"name" => name} -> name == title end)
+
+ assert total_items == 1
+ end)
+
+ assert %{
+ "own_votes" => own_votes,
+ "voted" => true
+ } =
+ conn
+ |> get("/api/v1/polls/#{object.id}")
+ |> json_response_and_validate_schema(200)
+
+ assert 0 in own_votes
+ assert 2 in own_votes
+ # for non authenticated user
+ response =
+ build_conn()
+ |> get("/api/v1/polls/#{object.id}")
+ |> json_response_and_validate_schema(200)
+
+ refute Map.has_key?(response, "own_votes")
+ refute Map.has_key?(response, "voted")
+ end
+