account_controller_test.exs (8592B)
- # Pleroma: A lightweight social networking server
- # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
- # SPDX-License-Identifier: AGPL-3.0-only
- defmodule Pleroma.Web.PleromaAPI.AccountControllerTest do
- use Pleroma.Web.ConnCase
- alias Pleroma.Config
- alias Pleroma.Tests.ObanHelpers
- alias Pleroma.User
- alias Pleroma.Web.CommonAPI
- import Pleroma.Factory
- import Swoosh.TestAssertions
- describe "POST /api/v1/pleroma/accounts/confirmation_resend" do
- setup do
- {:ok, user} =
- insert(:user)
- |> User.confirmation_changeset(need_confirmation: true)
- |> User.update_and_set_cache()
- assert user.confirmation_pending
- [user: user]
- end
- setup do: clear_config([:instance, :account_activation_required], true)
- test "resend account confirmation email", %{conn: conn, user: user} do
- conn
- |> put_req_header("content-type", "application/json")
- |> post("/api/v1/pleroma/accounts/confirmation_resend?email=#{user.email}")
- |> json_response_and_validate_schema(:no_content)
- ObanHelpers.perform_all()
- email = Pleroma.Emails.UserEmail.account_confirmation_email(user)
- notify_email = Config.get([:instance, :notify_email])
- instance_name = Config.get([:instance, :name])
- assert_email_sent(
- from: {instance_name, notify_email},
- to: {user.name, user.email},
- html_body: email.html_body
- )
- end
- test "resend account confirmation email (with nickname)", %{conn: conn, user: user} do
- conn
- |> put_req_header("content-type", "application/json")
- |> post("/api/v1/pleroma/accounts/confirmation_resend?nickname=#{user.nickname}")
- |> json_response_and_validate_schema(:no_content)
- ObanHelpers.perform_all()
- email = Pleroma.Emails.UserEmail.account_confirmation_email(user)
- notify_email = Config.get([:instance, :notify_email])
- instance_name = Config.get([:instance, :name])
- assert_email_sent(
- from: {instance_name, notify_email},
- to: {user.name, user.email},
- html_body: email.html_body
- )
- end
- end
- describe "getting favorites timeline of specified user" do
- setup do
- [current_user, user] = insert_pair(:user, hide_favorites: false)
- %{user: current_user, conn: conn} = oauth_access(["read:favourites"], user: current_user)
- [current_user: current_user, user: user, conn: conn]
- end
- test "returns list of statuses favorited by specified user", %{
- conn: conn,
- user: user
- } do
- [activity | _] = insert_pair(:note_activity)
- CommonAPI.favorite(user, activity.id)
- response =
- conn
- |> get("/api/v1/pleroma/accounts/#{user.id}/favourites")
- |> json_response_and_validate_schema(:ok)
- [like] = response
- assert length(response) == 1
- assert like["id"] == activity.id
- end
- test "returns favorites for specified user_id when requester is not logged in", %{
- user: user
- } do
- activity = insert(:note_activity)
- CommonAPI.favorite(user, activity.id)
- response =
- build_conn()
- |> get("/api/v1/pleroma/accounts/#{user.id}/favourites")
- |> json_response_and_validate_schema(200)
- assert length(response) == 1
- end
- test "returns favorited DM only when user is logged in and he is one of recipients", %{
- current_user: current_user,
- user: user
- } do
- {:ok, direct} =
- CommonAPI.post(current_user, %{
- status: "Hi @#{user.nickname}!",
- visibility: "direct"
- })
- CommonAPI.favorite(user, direct.id)
- for u <- [user, current_user] do
- response =
- build_conn()
- |> assign(:user, u)
- |> assign(:token, insert(:oauth_token, user: u, scopes: ["read:favourites"]))
- |> get("/api/v1/pleroma/accounts/#{user.id}/favourites")
- |> json_response_and_validate_schema(:ok)
- assert length(response) == 1
- end
- response =
- build_conn()
- |> get("/api/v1/pleroma/accounts/#{user.id}/favourites")
- |> json_response_and_validate_schema(200)
- assert length(response) == 0
- end
- test "does not return others' favorited DM when user is not one of recipients", %{
- conn: conn,
- user: user
- } do
- user_two = insert(:user)
- {:ok, direct} =
- CommonAPI.post(user_two, %{
- status: "Hi @#{user.nickname}!",
- visibility: "direct"
- })
- CommonAPI.favorite(user, direct.id)
- response =
- conn
- |> get("/api/v1/pleroma/accounts/#{user.id}/favourites")
- |> json_response_and_validate_schema(:ok)
- assert Enum.empty?(response)
- end
- test "paginates favorites using since_id and max_id", %{
- conn: conn,
- user: user
- } do
- activities = insert_list(10, :note_activity)
- Enum.each(activities, fn activity ->
- CommonAPI.favorite(user, activity.id)
- end)
- third_activity = Enum.at(activities, 2)
- seventh_activity = Enum.at(activities, 6)
- response =
- conn
- |> get(
- "/api/v1/pleroma/accounts/#{user.id}/favourites?since_id=#{third_activity.id}&max_id=#{
- seventh_activity.id
- }"
- )
- |> json_response_and_validate_schema(:ok)
- assert length(response) == 3
- refute third_activity in response
- refute seventh_activity in response
- end
- test "limits favorites using limit parameter", %{
- conn: conn,
- user: user
- } do
- 7
- |> insert_list(:note_activity)
- |> Enum.each(fn activity ->
- CommonAPI.favorite(user, activity.id)
- end)
- response =
- conn
- |> get("/api/v1/pleroma/accounts/#{user.id}/favourites?limit=3")
- |> json_response_and_validate_schema(:ok)
- assert length(response) == 3
- end
- test "returns empty response when user does not have any favorited statuses", %{
- conn: conn,
- user: user
- } do
- response =
- conn
- |> get("/api/v1/pleroma/accounts/#{user.id}/favourites")
- |> json_response_and_validate_schema(:ok)
- assert Enum.empty?(response)
- end
- test "returns 404 error when specified user is not exist", %{conn: conn} do
- conn = get(conn, "/api/v1/pleroma/accounts/test/favourites")
- assert json_response_and_validate_schema(conn, 404) == %{"error" => "Record not found"}
- end
- test "returns 403 error when user has hidden own favorites", %{conn: conn} do
- user = insert(:user, hide_favorites: true)
- activity = insert(:note_activity)
- CommonAPI.favorite(user, activity.id)
- conn = get(conn, "/api/v1/pleroma/accounts/#{user.id}/favourites")
- assert json_response_and_validate_schema(conn, 403) == %{"error" => "Can't get favorites"}
- end
- test "hides favorites for new users by default", %{conn: conn} do
- user = insert(:user)
- activity = insert(:note_activity)
- CommonAPI.favorite(user, activity.id)
- assert user.hide_favorites
- conn = get(conn, "/api/v1/pleroma/accounts/#{user.id}/favourites")
- assert json_response_and_validate_schema(conn, 403) == %{"error" => "Can't get favorites"}
- end
- end
- describe "subscribing / unsubscribing" do
- test "subscribing / unsubscribing to a user" do
- %{user: user, conn: conn} = oauth_access(["follow"])
- subscription_target = insert(:user)
- ret_conn =
- conn
- |> assign(:user, user)
- |> post("/api/v1/pleroma/accounts/#{subscription_target.id}/subscribe")
- assert %{"id" => _id, "subscribing" => true} =
- json_response_and_validate_schema(ret_conn, 200)
- conn = post(conn, "/api/v1/pleroma/accounts/#{subscription_target.id}/unsubscribe")
- assert %{"id" => _id, "subscribing" => false} = json_response_and_validate_schema(conn, 200)
- end
- end
- describe "subscribing" do
- test "returns 404 when subscription_target not found" do
- %{conn: conn} = oauth_access(["write:follows"])
- conn = post(conn, "/api/v1/pleroma/accounts/target_id/subscribe")
- assert %{"error" => "Record not found"} = json_response_and_validate_schema(conn, 404)
- end
- end
- describe "unsubscribing" do
- test "returns 404 when subscription_target not found" do
- %{conn: conn} = oauth_access(["follow"])
- conn = post(conn, "/api/v1/pleroma/accounts/target_id/unsubscribe")
- assert %{"error" => "Record not found"} = json_response_and_validate_schema(conn, 404)
- end
- end
- end