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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
|
# frozen_string_literal: true
describe NodeInfoPresenter do
let(:presenter) { NodeInfoPresenter.new("1.0") }
let(:hash) { presenter.as_json.as_json }
describe "#as_json" do
it "works" do
expect(hash).to be_present
expect(presenter.to_json).to be_a String
end
end
describe "node info contents" do
before do
AppConfig.privacy.statistics.user_counts = false
AppConfig.privacy.statistics.post_counts = false
AppConfig.privacy.statistics.comment_counts = false
end
it "provides generic pod data in json" do
expect(hash).to eq(
"version" => "1.0",
"software" => {
"name" => "diaspora",
"version" => AppConfig.version_string
},
"protocols" => {
"inbound" => ["diaspora"],
"outbound" => ["diaspora"]
},
"services" => {
"inbound" => [],
"outbound" => AppConfig.configured_services.map(&:to_s)
},
"openRegistrations" => AppConfig.settings.enable_registrations?,
"usage" => {
"users" => {}
},
"metadata" => {
"nodeName" => AppConfig.settings.pod_name,
"xmppChat" => AppConfig.chat.enabled?,
"camo" => {
"markdown" => AppConfig.privacy.camo.proxy_markdown_images?,
"opengraph" => AppConfig.privacy.camo.proxy_opengraph_thumbnails?,
"remotePods" => AppConfig.privacy.camo.proxy_remote_pod_images?
}
}
)
end
context "when services are enabled" do
before do
AppConfig.services = {
"twitter" => {"enable" => true},
"wordpress" => {"enable" => false},
"tumblr" => {
"enable" => true,
"authorized" => false
}
}
end
it "provides services" do
expect(hash).to include "services" => include("outbound" => ["twitter"])
end
end
context "when some services are set to username authorized" do
before do
AppConfig.services = {
"twitter" => {"enable" => true},
"wordpress" => {
"enable" => true,
"authorized" => "alice"
},
"tumblr" => {
"enable" => true,
"authorized" => false
}
}
end
it "it doesn't list those" do
expect(hash).to include "services" => include("outbound" => ["twitter"])
end
end
context "when counts are enabled" do
before do
AppConfig.privacy.statistics.user_counts = true
AppConfig.privacy.statistics.post_counts = true
AppConfig.privacy.statistics.comment_counts = true
end
it "provides generic pod data and counts in json" do
expect(hash).to include(
"usage" => {
"users" => {
"total" => User.active.count,
"activeHalfyear" => User.halfyear_actives.count,
"activeMonth" => User.monthly_actives.count
},
"localPosts" => presenter.local_posts,
"localComments" => presenter.local_comments
}
)
end
end
context "when registrations are closed" do
before do
AppConfig.settings.enable_registrations = false
end
it "should mark open_registrations to be false" do
expect(presenter.open_registrations?).to be false
end
end
context "when chat is enabled" do
before do
AppConfig.chat.enabled = true
end
it "should mark the xmppChat metadata as true" do
expect(hash).to include "metadata" => include("xmppChat" => true)
end
end
context "when camo is enabled" do
before do
AppConfig.privacy.camo.proxy_markdown_images = true
AppConfig.privacy.camo.proxy_opengraph_thumbnails = true
AppConfig.privacy.camo.proxy_remote_pod_images = true
end
it "should list enabled camo options in the metadata as true" do
expect(hash).to include "metadata" => include("camo" => {
"markdown" => true,
"opengraph" => true,
"remotePods" => true
})
end
end
context "when admin account is set" do
before do
AppConfig.admins.account = "podmin"
end
it "adds the admin account username" do
expect(hash).to include "metadata" => include("adminAccount" => "podmin")
end
end
context "version 2.0" do
it "provides generic pod data in json" do
expect(NodeInfoPresenter.new("2.0").as_json.as_json).to eq(
"version" => "2.0",
"software" => {
"name" => "diaspora",
"version" => AppConfig.version_string
},
"protocols" => ["diaspora"],
"services" => {
"inbound" => [],
"outbound" => AppConfig.configured_services.map(&:to_s)
},
"openRegistrations" => AppConfig.settings.enable_registrations?,
"usage" => {
"users" => {}
},
"metadata" => {
"nodeName" => AppConfig.settings.pod_name,
"xmppChat" => AppConfig.chat.enabled?,
"camo" => {
"markdown" => AppConfig.privacy.camo.proxy_markdown_images?,
"opengraph" => AppConfig.privacy.camo.proxy_opengraph_thumbnails?,
"remotePods" => AppConfig.privacy.camo.proxy_remote_pod_images?
}
}
)
end
end
end
end
|