/
robots_txt_controller_spec.rb
143 lines (111 loc) · 4.38 KB
/
robots_txt_controller_spec.rb
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
# frozen_string_literal: true
RSpec.describe Admin::RobotsTxtController do
fab!(:admin)
fab!(:moderator)
fab!(:user)
describe "#show" do
context "when logged in as an admin" do
before { sign_in(admin) }
it "returns default content if there are no overrides" do
get "/admin/customize/robots.json"
expect(response.status).to eq(200)
json = response.parsed_body
expect(json["robots_txt"]).to be_present
expect(json["overridden"]).to eq(false)
end
it "returns overridden content if there are overrides" do
SiteSetting.overridden_robots_txt = "something"
get "/admin/customize/robots.json"
expect(response.status).to eq(200)
json = response.parsed_body
expect(json["robots_txt"]).to eq("something")
expect(json["overridden"]).to eq(true)
end
end
shared_examples "robot.txt inaccessible" do
it "denies access with a 404 response" do
get "/admin/customize/robots.json"
expect(response.status).to eq(404)
expect(response.parsed_body["errors"]).to include(I18n.t("not_found"))
end
end
context "when logged in as a moderator" do
before { sign_in(moderator) }
include_examples "robot.txt inaccessible"
end
context "when logged in as a non-staff user" do
before { sign_in(user) }
include_examples "robot.txt inaccessible"
end
end
describe "#update" do
context "when logged in as an admin" do
before { sign_in(admin) }
it "overrides the site's default robots.txt" do
put "/admin/customize/robots.json", params: { robots_txt: "new_content" }
expect(response.status).to eq(200)
json = response.parsed_body
expect(json["robots_txt"]).to eq("new_content")
expect(json["overridden"]).to eq(true)
expect(SiteSetting.overridden_robots_txt).to eq("new_content")
get "/robots.txt"
expect(response.body).to include("new_content")
end
it "requires `robots_txt` param to be present" do
SiteSetting.overridden_robots_txt = "overridden_content"
put "/admin/customize/robots.json", params: { robots_txt: "" }
expect(response.status).to eq(400)
end
end
shared_examples "robot.txt update not allowed" do
it "prevents updates with a 404 response" do
put "/admin/customize/robots.json", params: { robots_txt: "adasdasd" }
expect(response.status).to eq(404)
expect(response.parsed_body["errors"]).to include(I18n.t("not_found"))
expect(SiteSetting.overridden_robots_txt).to eq("")
end
end
context "when logged in as a moderator" do
before { sign_in(moderator) }
include_examples "robot.txt update not allowed"
end
context "when logged in as a non-staff user" do
before { sign_in(user) }
include_examples "robot.txt update not allowed"
end
end
describe "#reset" do
context "when logged in as an admin" do
before { sign_in(admin) }
it "resets robots.txt file to the default version" do
SiteSetting.overridden_robots_txt = "overridden_content"
SiteSetting.allowed_crawler_user_agents = "test-user-agent-154"
delete "/admin/customize/robots.json", xhr: true
expect(response.status).to eq(200)
json = response.parsed_body
expect(json["robots_txt"]).not_to include("overridden_content")
expect(json["robots_txt"]).not_to include("</html>")
expect(json["robots_txt"]).to include("User-agent: test-user-agent-154\n")
expect(json["overridden"]).to eq(false)
expect(SiteSetting.overridden_robots_txt).to eq("")
end
end
shared_examples "robot.txt reset not allowed" do
it "prevents resets with a 404 response" do
SiteSetting.overridden_robots_txt = "overridden_content"
delete "/admin/customize/robots.json"
expect(response.status).to eq(404)
expect(response.parsed_body["errors"]).to include(I18n.t("not_found"))
expect(SiteSetting.overridden_robots_txt).to eq("overridden_content")
end
end
context "when logged in as a moderator" do
before { sign_in(moderator) }
include_examples "robot.txt reset not allowed"
end
context "when logged in as a non-staff user" do
before { sign_in(user) }
include_examples "robot.txt reset not allowed"
end
end
end