1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# Pleroma: A lightweight social networking server
# Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.PleromaAPI.SettingsControllerTest do
use Pleroma.Web.ConnCase
import Pleroma.Factory
describe "GET /api/v1/pleroma/settings/:app" do
setup do
oauth_access(["read:accounts"])
end
test "it gets empty settings", %{conn: conn} do
response =
conn
|> get("/api/v1/pleroma/settings/pleroma-fe")
|> json_response_and_validate_schema(:ok)
assert response == %{}
end
test "it gets settings", %{conn: conn, user: user} do
response =
conn
|> assign(
:user,
struct(user,
pleroma_settings_store: %{
"pleroma-fe" => %{
"foo" => "bar"
}
}
)
)
|> get("/api/v1/pleroma/settings/pleroma-fe")
|> json_response_and_validate_schema(:ok)
assert %{"foo" => "bar"} == response
end
end
describe "POST /api/v1/pleroma/settings/:app" do
setup do
settings = %{
"foo" => "bar",
"nested" => %{
"1" => "2"
}
}
user =
insert(
:user,
%{
pleroma_settings_store: %{
"pleroma-fe" => settings
}
}
)
%{conn: conn} = oauth_access(["write:accounts"], user: user)
%{conn: conn, user: user, settings: settings}
end
test "it adds keys", %{conn: conn} do
response =
conn
|> put_req_header("content-type", "application/json")
|> patch("/api/v1/pleroma/settings/pleroma-fe", %{
"foo" => "edited",
"bar" => "new",
"nested" => %{"3" => "4"}
})
|> json_response_and_validate_schema(:ok)
assert response == %{
"foo" => "edited",
"bar" => "new",
"nested" => %{
"1" => "2",
"3" => "4"
}
}
end
test "it removes keys", %{conn: conn} do
response =
conn
|> put_req_header("content-type", "application/json")
|> patch("/api/v1/pleroma/settings/pleroma-fe", %{
"foo" => nil,
"bar" => nil,
"nested" => %{
"1" => nil,
"3" => nil
}
})
|> json_response_and_validate_schema(:ok)
assert response == %{
"nested" => %{}
}
end
test "it does not override settings for other apps", %{
conn: conn,
user: user,
settings: settings
} do
conn
|> put_req_header("content-type", "application/json")
|> patch("/api/v1/pleroma/settings/admin-fe", %{"foo" => "bar"})
|> json_response_and_validate_schema(:ok)
user = Pleroma.User.get_by_id(user.id)
assert user.pleroma_settings_store == %{
"pleroma-fe" => settings,
"admin-fe" => %{"foo" => "bar"}
}
end
end
end
|