forked from AkkomaGang/akkoma
AccountController: Fix muting / unmuting reblogs.
This commit is contained in:
parent
a8447c3803
commit
c0385cf47a
3 changed files with 52 additions and 10 deletions
|
@ -203,14 +203,23 @@ def follow_operation do
|
||||||
security: [%{"oAuth" => ["follow", "write:follows"]}],
|
security: [%{"oAuth" => ["follow", "write:follows"]}],
|
||||||
description: "Follow the given account",
|
description: "Follow the given account",
|
||||||
parameters: [
|
parameters: [
|
||||||
%Reference{"$ref": "#/components/parameters/accountIdOrNickname"},
|
%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}
|
||||||
Operation.parameter(
|
|
||||||
:reblogs,
|
|
||||||
:query,
|
|
||||||
BooleanLike,
|
|
||||||
"Receive this account's reblogs in home timeline? Defaults to true."
|
|
||||||
)
|
|
||||||
],
|
],
|
||||||
|
requestBody:
|
||||||
|
request_body(
|
||||||
|
"Parameters",
|
||||||
|
%Schema{
|
||||||
|
type: :object,
|
||||||
|
properties: %{
|
||||||
|
reblogs: %Schema{
|
||||||
|
type: :boolean,
|
||||||
|
description: "Receive this account's reblogs in home timeline? Defaults to true.",
|
||||||
|
default: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
required: false
|
||||||
|
),
|
||||||
responses: %{
|
responses: %{
|
||||||
200 => Operation.response("Relationship", "application/json", AccountRelationship),
|
200 => Operation.response("Relationship", "application/json", AccountRelationship),
|
||||||
400 => Operation.response("Error", "application/json", ApiError),
|
400 => Operation.response("Error", "application/json", ApiError),
|
||||||
|
|
|
@ -353,7 +353,7 @@ def follow(%{assigns: %{user: %{id: id}, account: %{id: id}}}, _params) do
|
||||||
{:error, "Can not follow yourself"}
|
{:error, "Can not follow yourself"}
|
||||||
end
|
end
|
||||||
|
|
||||||
def follow(%{assigns: %{user: follower, account: followed}} = conn, params) do
|
def follow(%{body_params: params, assigns: %{user: follower, account: followed}} = conn, _) do
|
||||||
with {:ok, follower} <- MastodonAPI.follow(follower, followed, params) do
|
with {:ok, follower} <- MastodonAPI.follow(follower, followed, params) do
|
||||||
render(conn, "relationship.json", user: follower, target: followed)
|
render(conn, "relationship.json", user: follower, target: followed)
|
||||||
else
|
else
|
||||||
|
|
|
@ -708,7 +708,10 @@ test "following without reblogs" do
|
||||||
followed = insert(:user)
|
followed = insert(:user)
|
||||||
other_user = insert(:user)
|
other_user = insert(:user)
|
||||||
|
|
||||||
ret_conn = post(conn, "/api/v1/accounts/#{followed.id}/follow?reblogs=false")
|
ret_conn =
|
||||||
|
conn
|
||||||
|
|> put_req_header("content-type", "application/json")
|
||||||
|
|> post("/api/v1/accounts/#{followed.id}/follow", %{reblogs: false})
|
||||||
|
|
||||||
assert %{"showing_reblogs" => false} = json_response_and_validate_schema(ret_conn, 200)
|
assert %{"showing_reblogs" => false} = json_response_and_validate_schema(ret_conn, 200)
|
||||||
|
|
||||||
|
@ -722,7 +725,8 @@ test "following without reblogs" do
|
||||||
|
|
||||||
assert %{"showing_reblogs" => true} =
|
assert %{"showing_reblogs" => true} =
|
||||||
conn
|
conn
|
||||||
|> post("/api/v1/accounts/#{followed.id}/follow?reblogs=true")
|
|> put_req_header("content-type", "application/json")
|
||||||
|
|> post("/api/v1/accounts/#{followed.id}/follow", %{reblogs: true})
|
||||||
|> json_response_and_validate_schema(200)
|
|> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
assert [%{"id" => ^reblog_id}] =
|
assert [%{"id" => ^reblog_id}] =
|
||||||
|
@ -731,6 +735,35 @@ test "following without reblogs" do
|
||||||
|> json_response(200)
|
|> json_response(200)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "following with reblogs" do
|
||||||
|
%{conn: conn} = oauth_access(["follow", "read:statuses"])
|
||||||
|
followed = insert(:user)
|
||||||
|
other_user = insert(:user)
|
||||||
|
|
||||||
|
ret_conn = post(conn, "/api/v1/accounts/#{followed.id}/follow")
|
||||||
|
|
||||||
|
assert %{"showing_reblogs" => true} = json_response_and_validate_schema(ret_conn, 200)
|
||||||
|
|
||||||
|
{:ok, activity} = CommonAPI.post(other_user, %{status: "hey"})
|
||||||
|
{:ok, %{id: reblog_id}} = CommonAPI.repeat(activity.id, followed)
|
||||||
|
|
||||||
|
assert [%{"id" => ^reblog_id}] =
|
||||||
|
conn
|
||||||
|
|> get("/api/v1/timelines/home")
|
||||||
|
|> json_response(200)
|
||||||
|
|
||||||
|
assert %{"showing_reblogs" => false} =
|
||||||
|
conn
|
||||||
|
|> put_req_header("content-type", "application/json")
|
||||||
|
|> post("/api/v1/accounts/#{followed.id}/follow", %{reblogs: false})
|
||||||
|
|> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
|
assert [] ==
|
||||||
|
conn
|
||||||
|
|> get("/api/v1/timelines/home")
|
||||||
|
|> json_response(200)
|
||||||
|
end
|
||||||
|
|
||||||
test "following / unfollowing errors", %{user: user, conn: conn} do
|
test "following / unfollowing errors", %{user: user, conn: conn} do
|
||||||
# self follow
|
# self follow
|
||||||
conn_res = post(conn, "/api/v1/accounts/#{user.id}/follow")
|
conn_res = post(conn, "/api/v1/accounts/#{user.id}/follow")
|
||||||
|
|
Loading…
Reference in a new issue