diff --git a/spec/components/guardian/category_guardian_spec.rb b/spec/components/guardian/category_guardian_spec.rb new file mode 100644 index 00000000000..3dccbb9e075 --- /dev/null +++ b/spec/components/guardian/category_guardian_spec.rb @@ -0,0 +1,47 @@ +require 'rails_helper' + +RSpec.describe CategoryGuardian do + let(:admin) { Fabricate(:admin) } + let(:guardian) { Guardian.new(admin) } + let(:category) { Fabricate(:category) } + + describe '#cannot_delete_category_reason' do + describe 'when category is uncategorized' do + it 'should return the reason' do + category = Category.find(SiteSetting.uncategorized_category_id) + + expect(guardian.cannot_delete_category_reason(category)).to eq( + I18n.t('category.cannot_delete.uncategorized') + ) + end + end + + describe 'when category has subcategories' do + it 'should return the right reason' do + category.subcategories << Fabricate(:category) + + expect(guardian.cannot_delete_category_reason(category)).to eq( + I18n.t('category.cannot_delete.has_subcategories') + ) + end + end + + describe 'when category has topics' do + it 'should return the right reason' do + topic = Fabricate(:topic, + title: '', + category: category + ) + + category.reload + + expect(guardian.cannot_delete_category_reason(category)).to eq( + I18n.t('category.cannot_delete.topic_exists', + count: 1, + topic_link: "</a><script>alert(document.cookie);</script><a>" + ) + ) + end + end + end +end