2023-02-02 22:44:40 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
RSpec.describe SidebarSectionsController do
|
|
|
|
fab!(:user) { Fabricate(:user) }
|
|
|
|
|
|
|
|
before do
|
|
|
|
### TODO remove when enable_custom_sidebar_sections SiteSetting is removed
|
|
|
|
group = Fabricate(:group)
|
|
|
|
Fabricate(:group_user, group: group, user: user)
|
|
|
|
SiteSetting.enable_custom_sidebar_sections = group.id.to_s
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#create" do
|
|
|
|
it "is not available for anonymous" do
|
|
|
|
post "/sidebar_sections.json",
|
|
|
|
params: {
|
|
|
|
title: "custom section",
|
|
|
|
links: [
|
2023-02-07 19:45:34 -05:00
|
|
|
{ icon: "link", name: "categories", value: "/categories" },
|
|
|
|
{ icon: "link", name: "tags", value: "/tags" },
|
2023-02-02 22:44:40 -05:00
|
|
|
],
|
|
|
|
}
|
|
|
|
|
|
|
|
expect(response.status).to eq(403)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "creates custom section for user" do
|
|
|
|
sign_in(user)
|
|
|
|
post "/sidebar_sections.json",
|
|
|
|
params: {
|
|
|
|
title: "custom section",
|
|
|
|
links: [
|
2023-02-07 19:45:34 -05:00
|
|
|
{ icon: "link", name: "categories", value: "/categories" },
|
|
|
|
{ icon: "address-book", name: "tags", value: "/tags" },
|
2023-02-02 22:44:40 -05:00
|
|
|
],
|
|
|
|
}
|
|
|
|
|
|
|
|
expect(response.status).to eq(200)
|
|
|
|
|
|
|
|
expect(SidebarSection.count).to eq(1)
|
|
|
|
sidebar_section = SidebarSection.last
|
|
|
|
|
|
|
|
expect(sidebar_section.title).to eq("custom section")
|
|
|
|
expect(sidebar_section.user).to eq(user)
|
|
|
|
expect(sidebar_section.sidebar_urls.count).to eq(2)
|
2023-02-07 19:45:34 -05:00
|
|
|
expect(sidebar_section.sidebar_urls.first.icon).to eq("link")
|
2023-02-02 22:44:40 -05:00
|
|
|
expect(sidebar_section.sidebar_urls.first.name).to eq("categories")
|
|
|
|
expect(sidebar_section.sidebar_urls.first.value).to eq("/categories")
|
2023-02-07 19:45:34 -05:00
|
|
|
expect(sidebar_section.sidebar_urls.second.icon).to eq("address-book")
|
2023-02-02 22:44:40 -05:00
|
|
|
expect(sidebar_section.sidebar_urls.second.name).to eq("tags")
|
|
|
|
expect(sidebar_section.sidebar_urls.second.value).to eq("/tags")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#update" do
|
|
|
|
fab!(:sidebar_section) { Fabricate(:sidebar_section, user: user) }
|
|
|
|
fab!(:sidebar_url_1) { Fabricate(:sidebar_url, name: "tags", value: "/tags") }
|
|
|
|
fab!(:sidebar_url_2) { Fabricate(:sidebar_url, name: "categories", value: "/categories") }
|
|
|
|
fab!(:section_link_1) do
|
|
|
|
Fabricate(:sidebar_section_link, sidebar_section: sidebar_section, linkable: sidebar_url_1)
|
|
|
|
end
|
|
|
|
fab!(:section_link_2) do
|
|
|
|
Fabricate(:sidebar_section_link, sidebar_section: sidebar_section, linkable: sidebar_url_2)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "allows user to update their own section and links" do
|
|
|
|
sign_in(user)
|
|
|
|
put "/sidebar_sections/#{sidebar_section.id}.json",
|
|
|
|
params: {
|
|
|
|
title: "custom section edited",
|
|
|
|
links: [
|
2023-02-07 19:45:34 -05:00
|
|
|
{ icon: "link", id: sidebar_url_1.id, name: "latest", value: "/latest" },
|
|
|
|
{ icon: "link", id: sidebar_url_2.id, name: "tags", value: "/tags", _destroy: "1" },
|
2023-02-02 22:44:40 -05:00
|
|
|
],
|
|
|
|
}
|
|
|
|
|
|
|
|
expect(response.status).to eq(200)
|
|
|
|
|
|
|
|
expect(sidebar_section.reload.title).to eq("custom section edited")
|
|
|
|
expect(sidebar_url_1.reload.name).to eq("latest")
|
|
|
|
expect(sidebar_url_1.value).to eq("/latest")
|
|
|
|
expect { section_link_2.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
|
|
|
expect { sidebar_url_2.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "doesn't allow to edit other's sections" do
|
|
|
|
sidebar_section_2 = Fabricate(:sidebar_section)
|
|
|
|
sidebar_url_3 = Fabricate(:sidebar_url, name: "other_tags", value: "/tags")
|
|
|
|
Fabricate(:sidebar_section_link, sidebar_section: sidebar_section_2, linkable: sidebar_url_3)
|
|
|
|
sign_in(user)
|
|
|
|
put "/sidebar_sections/#{sidebar_section_2.id}.json",
|
|
|
|
params: {
|
|
|
|
title: "custom section edited",
|
2023-02-07 19:45:34 -05:00
|
|
|
links: [{ icon: "link", id: sidebar_url_3.id, name: "takeover", value: "/categories" }],
|
2023-02-02 22:44:40 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
expect(response.status).to eq(403)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "doesn't allow to edit other's links" do
|
|
|
|
sidebar_url_3 = Fabricate(:sidebar_url, name: "other_tags", value: "/tags")
|
|
|
|
Fabricate(
|
|
|
|
:sidebar_section_link,
|
|
|
|
sidebar_section: Fabricate(:sidebar_section),
|
|
|
|
linkable: sidebar_url_3,
|
|
|
|
)
|
|
|
|
sign_in(user)
|
|
|
|
put "/sidebar_sections/#{sidebar_section.id}.json",
|
|
|
|
params: {
|
|
|
|
title: "custom section edited",
|
2023-02-07 19:45:34 -05:00
|
|
|
links: [{ icon: "link", id: sidebar_url_3.id, name: "takeover", value: "/categories" }],
|
2023-02-02 22:44:40 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
expect(response.status).to eq(404)
|
|
|
|
|
|
|
|
expect(sidebar_url_3.reload.name).to eq("other_tags")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#destroy" do
|
|
|
|
fab!(:sidebar_section) { Fabricate(:sidebar_section, user: user) }
|
|
|
|
|
|
|
|
it "allows user to delete their own section" do
|
|
|
|
sign_in(user)
|
|
|
|
delete "/sidebar_sections/#{sidebar_section.id}.json"
|
|
|
|
|
|
|
|
expect(response.status).to eq(200)
|
|
|
|
|
|
|
|
expect { sidebar_section.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "doesn't allow to delete other's sidebar section" do
|
|
|
|
sidebar_section_2 = Fabricate(:sidebar_section)
|
|
|
|
sign_in(user)
|
|
|
|
delete "/sidebar_sections/#{sidebar_section_2.id}.json"
|
|
|
|
|
|
|
|
expect(response.status).to eq(403)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|