FIX: /categories page on mobile

This commit is contained in:
Régis Hanol
2016-08-19 01:47:00 +02:00
parent 7195a103ab
commit eb953c0904
8 changed files with 201 additions and 72 deletions
+49 -1
View File
@@ -5,9 +5,10 @@ describe CategoryList do
let(:user) { Fabricate(:user) }
let(:admin) { Fabricate(:admin) }
let(:category_list) { CategoryList.new(Guardian.new user) }
let(:category_list) { CategoryList.new(Guardian.new(user), include_topics: true) }
context "security" do
it "properly hide secure categories" do
cat = Fabricate(:category)
Fabricate(:topic, category: cat)
@@ -19,6 +20,33 @@ describe CategoryList do
expect(CategoryList.new(Guardian.new user).categories.count).to eq(1)
expect(CategoryList.new(Guardian.new nil).categories.count).to eq(1)
end
it "doesn't show topics that you can't view" do
public_cat = Fabricate(:category) # public category
Fabricate(:topic, category: public_cat)
private_cat = Fabricate(:category) # private category
Fabricate(:topic, category: private_cat)
private_cat.set_permissions(admins: :full)
private_cat.save
secret_subcat = Fabricate(:category, parent_category_id: public_cat.id) # private subcategory
Fabricate(:topic, category: secret_subcat)
secret_subcat.set_permissions(admins: :full)
secret_subcat.save
CategoryFeaturedTopic.feature_topics
expect(CategoryList.new(Guardian.new(admin), include_topics: true).categories.find { |x| x.name == public_cat.name }.displayable_topics.count).to eq(2)
expect(CategoryList.new(Guardian.new(admin), include_topics: true).categories.find { |x| x.name == private_cat.name }.displayable_topics.count).to eq(1)
expect(CategoryList.new(Guardian.new(user), include_topics: true).categories.find { |x| x.name == public_cat.name }.displayable_topics.count).to eq(1)
expect(CategoryList.new(Guardian.new(user), include_topics: true).categories.find { |x| x.name == private_cat.name }).to eq(nil)
expect(CategoryList.new(Guardian.new(nil), include_topics: true).categories.find { |x| x.name == public_cat.name }.displayable_topics.count).to eq(1)
expect(CategoryList.new(Guardian.new(nil), include_topics: true).categories.find { |x| x.name == private_cat.name }).to eq(nil)
end
end
context "with a category" do
@@ -34,7 +62,27 @@ describe CategoryList do
expect(category.id).to eq(topic_category.id)
expect(category.featured_topics.include?(topic)).to eq(true)
end
end
context "with pinned topics in a category" do
let!(:topic1) { Fabricate(:topic, category: topic_category, bumped_at: 8.minutes.ago) }
let!(:topic2) { Fabricate(:topic, category: topic_category, bumped_at: 5.minutes.ago) }
let!(:topic3) { Fabricate(:topic, category: topic_category, bumped_at: 2.minutes.ago) }
let!(:pinned) { Fabricate(:topic, category: topic_category, pinned_at: 10.minutes.ago, bumped_at: 10.minutes.ago) }
let(:category) { category_list.categories.find{|c| c.id == topic_category.id} }
before do
SiteSetting.stubs(:category_featured_topics).returns(2)
end
it "returns pinned topic first" do
expect(category.displayable_topics.map(&:id)).to eq([pinned.id, topic3.id])
end
it "returns topics in bumped_at order if pinned was unpinned" do
PinnedCheck.stubs(:unpinned?).returns(true)
expect(category.displayable_topics.map(&:id)).to eq([topic3.id, topic2.id])
end
end
end