2016-05-16 17:31:39 +08:00
require 'rails_helper'
describe TopicList do
let! ( :topic ) { Fabricate ( :topic ) }
let ( :user ) { topic . user }
let ( :topic_list ) { TopicList . new ( " liked " , user , [ topic ] ) }
2016-06-09 22:01:48 +08:00
before do
TopicList . preloaded_custom_fields . clear
end
2016-05-16 17:31:39 +08:00
after do
TopicList . preloaded_custom_fields . clear
end
describe " .preloaded_custom_fields " do
it " should return a unique set of values " do
TopicList . preloaded_custom_fields << " test "
TopicList . preloaded_custom_fields << " test "
TopicList . preloaded_custom_fields << " apple "
expect ( TopicList . preloaded_custom_fields ) . to eq ( Set . new ( %w{ test apple } ) )
end
end
context " DiscourseTagging enabled " do
before do
SiteSetting . tagging_enabled = true
end
after do
SiteSetting . tagging_enabled = false
end
it " should add tags to preloaded custom fields " do
expect ( topic_list . preloaded_custom_fields ) . to eq ( Set . new ( [ DiscourseTagging :: TAGS_FIELD_NAME ] ) )
end
end
2016-07-07 21:17:56 +08:00
describe '#tags' do
it 'should return the right tags' do
2016-07-08 17:13:32 -04:00
tag = Fabricate ( :tag , topics : [ topic ] )
other_tag = Fabricate ( :tag , topics : [ topic ] , name : " use-anywhere " )
2016-07-07 21:17:56 +08:00
output = [ tag . name , other_tag . name ]
expect ( topic_list . tags . sort ) . to eq ( output . sort )
end
2016-07-08 17:13:32 -04:00
describe 'when there are tags restricted to a category' do
let! ( :category ) { Fabricate ( :category ) }
let! ( :topic ) { Fabricate ( :topic , category : category ) }
let! ( :other_topic ) { Fabricate ( :topic ) } # uncategorized
let! ( :tag ) { Fabricate ( :tag , topics : [ topic ] , categories : [ category ] , name : " category-tag " ) }
let! ( :other_tag ) { Fabricate ( :tag , topics : [ topic ] , name : " use-anywhere " ) }
2016-07-07 21:17:56 +08:00
let ( :topic_list ) { TopicList . new ( 'latest' , topic . user , [ topic ] , { category : category . id , category_id : category . id } ) }
it 'should only return tags allowed in the category' do
2016-07-08 17:13:32 -04:00
expect ( topic_list . tags ) . to eq ( [ tag . name ] )
end
it " with no category, should return all tags " do
expect ( TopicList . new ( 'latest' , other_topic . user , [ other_topic ] ) . tags . sort ) . to eq ( [ tag . name , other_tag . name ] . sort )
end
2016-07-07 21:17:56 +08:00
2016-07-08 17:13:32 -04:00
it " with another category with no tags, should return exclude tags restricted to other categories " do
other_category = Fabricate ( :category )
topic3 = Fabricate ( :topic , category : other_category )
list = TopicList . new ( 'latest' , topic3 . user , [ topic3 ] , { category : other_category . id , category_id : other_category . id } )
expect ( list . tags ) . to eq ( [ other_tag . name ] )
2016-07-07 21:17:56 +08:00
end
end
end
2016-05-16 17:31:39 +08:00
end