2013-02-05 14:16:51 -05:00
require 'spec_helper'
describe ListController do
2013-02-25 19:42:20 +03:00
# we need some data
before do
2013-02-05 14:16:51 -05:00
@user = Fabricate ( :coding_horror )
2013-03-23 20:32:59 +05:30
@post = Fabricate ( :post , user : @user )
2013-06-21 13:31:40 -07:00
# forces tests down some code paths
2014-01-09 16:22:54 -05:00
SiteSetting . stubs ( :top_menu ) . returns ( 'latest,-video|new|unread|starred|categories|category/beer' )
2013-02-05 14:16:51 -05:00
end
2013-03-28 14:01:13 +01:00
describe 'indexes' do
2013-12-24 00:50:36 +01:00
Discourse . anonymous_filters . each do | filter |
2013-06-21 13:31:40 -07:00
context " #{ filter } " do
2013-03-28 14:01:13 +01:00
before { xhr :get , filter }
it { should respond_with ( :success ) }
end
end
2013-12-24 00:50:36 +01:00
Discourse . logged_in_filters . each do | filter |
2013-06-21 13:31:40 -07:00
context " #{ filter } " do
2013-03-28 14:01:13 +01:00
it { expect { xhr :get , filter } . to raise_error ( Discourse :: NotLoggedIn ) }
end
2013-02-05 14:16:51 -05:00
end
2013-05-28 17:52:52 +10:00
it 'allows users to filter on a set of topic ids' do
2013-10-24 10:05:51 +11:00
p = create_post
2013-05-28 17:52:52 +10:00
xhr :get , :latest , format : :json , topic_ids : " #{ p . topic_id } "
response . should be_success
parsed = JSON . parse ( response . body )
parsed [ " topic_list " ] [ " topics " ] . length . should == 1
end
2013-02-05 14:16:51 -05:00
end
2013-10-11 18:35:12 +02:00
describe 'RSS feeds' do
2013-12-24 00:50:36 +01:00
Discourse . anonymous_filters . each do | filter |
2013-10-11 18:35:12 +02:00
it 'renders RSS' do
get " #{ filter } _feed " , format : :rss
response . should be_success
response . content_type . should == 'application/rss+xml'
end
end
end
2013-02-05 14:16:51 -05:00
context 'category' do
context 'in a category' do
let ( :category ) { Fabricate ( :category ) }
2014-02-05 15:33:52 -05:00
context 'without access to see the category' do
before do
Guardian . any_instance . expects ( :can_see? ) . with ( category ) . returns ( false )
xhr :get , :category_latest , category : category . slug
end
it { should_not respond_with ( :success ) }
end
2013-02-05 14:16:51 -05:00
context 'with access to see the category' do
before do
2014-02-03 16:08:00 +01:00
xhr :get , :category_latest , category : category . slug
2013-02-05 14:16:51 -05:00
end
it { should respond_with ( :success ) }
end
2013-02-14 16:51:48 -05:00
context 'with a link that includes an id' do
before do
2014-02-03 16:08:00 +01:00
xhr :get , :category_latest , category : " #{ category . id } - #{ category . slug } "
2013-02-14 16:51:48 -05:00
end
it { should respond_with ( :success ) }
end
2013-08-22 15:46:17 -04:00
context 'another category exists with a number at the beginning of its name' do
# One category has another category's id at the beginning of its name
let! ( :other_category ) { Fabricate ( :category , name : " #{ category . id } name " ) }
before do
2014-02-03 16:08:00 +01:00
xhr :get , :category_latest , category : other_category . slug
2013-08-22 15:46:17 -04:00
end
it { should respond_with ( :success ) }
it 'uses the correct category' do
assigns ( :category ) . should == other_category
end
end
2013-10-23 14:40:39 -04:00
context 'a child category' do
let ( :sub_category ) { Fabricate ( :category , parent_category_id : category . id ) }
context 'when parent and child are requested' do
before do
2014-02-03 16:08:00 +01:00
xhr :get , :category_latest , parent_category : category . slug , category : sub_category . slug
2013-10-23 14:40:39 -04:00
end
it { should respond_with ( :success ) }
end
context 'when child is requested with the wrong parent' do
before do
2014-02-03 16:08:00 +01:00
xhr :get , :category_latest , parent_category : 'not_the_right_slug' , category : sub_category . slug
2013-10-23 14:40:39 -04:00
end
it { should_not respond_with ( :success ) }
end
end
2013-02-27 19:36:12 -08:00
describe 'feed' do
it 'renders RSS' do
get :category_feed , category : category . slug , format : :rss
response . should be_success
response . content_type . should == 'application/rss+xml'
end
end
2013-02-05 14:16:51 -05:00
end
end
2013-10-19 18:51:17 +05:30
describe " topics_by " do
let! ( :user ) { log_in }
it " should respond with a list " do
xhr :get , :topics_by , username : @user . username
response . should be_success
end
end
2013-09-30 14:35:11 -04:00
context " private_messages " do
let! ( :user ) { log_in }
it " raises an error when can_see_private_messages? is false " do
Guardian . any_instance . expects ( :can_see_private_messages? ) . returns ( false )
xhr :get , :private_messages , username : @user . username
response . should be_forbidden
end
it " succeeds when can_see_private_messages? is false " do
Guardian . any_instance . expects ( :can_see_private_messages? ) . returns ( true )
xhr :get , :private_messages , username : @user . username
response . should be_success
end
end
context " private_messages_sent " do
let! ( :user ) { log_in }
it " raises an error when can_see_private_messages? is false " do
Guardian . any_instance . expects ( :can_see_private_messages? ) . returns ( false )
xhr :get , :private_messages_sent , username : @user . username
response . should be_forbidden
end
it " succeeds when can_see_private_messages? is false " do
Guardian . any_instance . expects ( :can_see_private_messages? ) . returns ( true )
xhr :get , :private_messages_sent , username : @user . username
response . should be_success
end
end
context " private_messages_unread " do
let! ( :user ) { log_in }
it " raises an error when can_see_private_messages? is false " do
Guardian . any_instance . expects ( :can_see_private_messages? ) . returns ( false )
xhr :get , :private_messages_unread , username : @user . username
response . should be_forbidden
end
it " succeeds when can_see_private_messages? is false " do
Guardian . any_instance . expects ( :can_see_private_messages? ) . returns ( true )
xhr :get , :private_messages_unread , username : @user . username
response . should be_success
end
end
2014-01-09 16:22:54 -05:00
context 'starred' do
2013-02-05 14:16:51 -05:00
it 'raises an error when not logged in' do
2014-01-09 16:22:54 -05:00
lambda { xhr :get , :starred } . should raise_error ( Discourse :: NotLoggedIn )
2013-02-05 14:16:51 -05:00
end
context 'when logged in' do
before do
log_in_user ( @user )
2014-01-09 16:22:54 -05:00
xhr :get , :starred
2013-02-05 14:16:51 -05:00
end
it { should respond_with ( :success ) }
end
end
2013-03-27 16:17:49 -04:00
2013-02-05 14:16:51 -05:00
context 'read' do
it 'raises an error when not logged in' do
lambda { xhr :get , :read } . should raise_error ( Discourse :: NotLoggedIn )
end
context 'when logged in' do
before do
log_in_user ( @user )
xhr :get , :read
end
it { should respond_with ( :success ) }
end
end
2014-05-07 19:04:39 +02:00
describe " best_periods_for " do
2014-03-12 12:58:41 +01:00
it " returns yearly for more than 180 days " do
2014-05-07 19:04:39 +02:00
ListController . best_periods_for ( nil ) . should == [ :yearly ]
ListController . best_periods_for ( 180 . days . ago ) . should == [ :yearly ]
2014-03-12 12:58:41 +01:00
end
2014-05-07 19:04:39 +02:00
it " includes monthly when less than 180 days and more than 35 days " do
2014-03-12 12:58:41 +01:00
( 35 ... 180 ) . each do | date |
2014-05-07 19:04:39 +02:00
ListController . best_periods_for ( date . days . ago ) . should == [ :monthly , :yearly ]
2014-03-12 12:58:41 +01:00
end
end
2014-05-07 19:04:39 +02:00
it " includes weekly when less than 35 days and more than 8 days " do
2014-03-12 12:58:41 +01:00
( 8 ... 35 ) . each do | date |
2014-05-07 19:04:39 +02:00
ListController . best_periods_for ( date . days . ago ) . should == [ :weekly , :monthly , :yearly ]
2014-03-12 12:58:41 +01:00
end
end
2014-05-07 19:04:39 +02:00
it " includes daily when less than 8 days " do
2014-03-12 12:58:41 +01:00
( 0 ... 8 ) . each do | date |
2014-05-07 19:04:39 +02:00
ListController . best_periods_for ( date . days . ago ) . should == [ :daily , :weekly , :monthly , :yearly ]
2014-03-12 12:58:41 +01:00
end
end
end
2013-02-05 14:16:51 -05:00
end