FEATURE: create permalink when category slug is changed

This commit is contained in:
Arpit Jalan 2016-04-27 16:34:44 +05:30
parent 92a6bf4f9d
commit 7151c16c79
2 changed files with 45 additions and 0 deletions

View File

@ -46,6 +46,9 @@ class Category < ActiveRecord::Base
after_update :rename_category_definition, if: :name_changed? after_update :rename_category_definition, if: :name_changed?
after_create :delete_category_permalink
after_update :create_category_permalink, if: :slug_changed?
after_save :publish_discourse_stylesheet after_save :publish_discourse_stylesheet
has_one :category_search_data has_one :category_search_data
@ -447,6 +450,24 @@ SQL
end end
end end
def create_category_permalink
old_slug = changed_attributes["slug"]
if self.parent_category
Permalink.create(url: "c/#{self.parent_category.slug}/#{old_slug}", category_id: id)
else
Permalink.create(url: "c/#{old_slug}", category_id: id)
end
end
def delete_category_permalink
if self.parent_category
permalink = Permalink.find_by_url("c/#{self.parent_category.slug}/#{slug}")
else
permalink = Permalink.find_by_url("c/#{slug}")
end
permalink.destroy if permalink
end
def publish_discourse_stylesheet def publish_discourse_stylesheet
DiscourseStylesheets.cache.clear DiscourseStylesheets.cache.clear
end end

View File

@ -316,6 +316,30 @@ describe Category do
expect { @category.update_attributes(name: 'Troutfishing', topic_id: nil) }.to_not raise_error expect { @category.update_attributes(name: 'Troutfishing', topic_id: nil) }.to_not raise_error
end end
it "creates permalink when category slug is changed" do
@category.update_attributes(slug: 'new-category')
expect(Permalink.count).to eq(1)
end
it "creates permalink when sub category slug is changed" do
sub_category = Fabricate(:category, slug: 'sub-category', parent_category_id: @category.id)
sub_category.update_attributes(slug: 'new-sub-category')
expect(Permalink.count).to eq(1)
end
it "deletes permalink when category slug is reused" do
Fabricate(:permalink, url: "/c/bikeshed-category")
Fabricate(:category, slug: 'bikeshed-category')
expect(Permalink.count).to eq(0)
end
it "deletes permalink when sub category slug is reused" do
Fabricate(:permalink, url: "/c/main-category/sub-category")
main_category = Fabricate(:category, slug: 'main-category')
Fabricate(:category, slug: 'sub-category', parent_category_id: main_category.id)
expect(Permalink.count).to eq(0)
end
it "should not set its description topic to auto-close" do it "should not set its description topic to auto-close" do
category = Fabricate(:category, name: 'Closing Topics', auto_close_hours: 1) category = Fabricate(:category, name: 'Closing Topics', auto_close_hours: 1)
expect(category.topic.auto_close_at).to be_nil expect(category.topic.auto_close_at).to be_nil