2013-07-16 15:44:07 +10:00
require " spec_helper "
2013-02-05 14:16:51 -05:00
describe CategoriesController do
2013-07-16 15:44:07 +10:00
describe " create " do
2013-02-05 14:16:51 -05:00
2013-07-16 15:44:07 +10:00
it " requires the user to be logged in " do
2013-02-05 14:16:51 -05:00
lambda { xhr :post , :create } . should raise_error ( Discourse :: NotLoggedIn )
end
2013-07-16 15:44:07 +10:00
describe " logged in " do
2013-02-05 14:16:51 -05:00
before do
@user = log_in ( :moderator )
end
it " raises an exception when they don't have permission to create it " do
Guardian . any_instance . expects ( :can_create? ) . with ( Category , nil ) . returns ( false )
2013-03-14 14:16:57 +01:00
xhr :post , :create , name : 'hello' , color : 'ff0' , text_color : 'fff'
2013-02-05 14:16:51 -05:00
response . should be_forbidden
end
2013-07-16 15:44:07 +10:00
it " raises an exception when the name is missing " do
lambda { xhr :post , :create , color : " ff0 " , text_color : " fff " } . should raise_error ( ActionController :: ParameterMissing )
2013-02-05 14:16:51 -05:00
end
2013-07-16 15:44:07 +10:00
it " raises an exception when the color is missing " do
lambda { xhr :post , :create , name : " hello " , text_color : " fff " } . should raise_error ( ActionController :: ParameterMissing )
2013-03-14 14:16:57 +01:00
end
2013-07-16 15:44:07 +10:00
it " raises an exception when the text color is missing " do
lambda { xhr :post , :create , name : " hello " , color : " ff0 " } . should raise_error ( ActionController :: ParameterMissing )
2013-02-05 14:16:51 -05:00
end
2013-07-16 15:44:07 +10:00
describe " failure " do
2013-02-05 14:16:51 -05:00
before do
@category = Fabricate ( :category , user : @user )
2013-07-16 15:44:07 +10:00
xhr :post , :create , name : @category . name , color : " ff0 " , text_color : " fff "
2013-02-05 14:16:51 -05:00
end
it { should_not respond_with ( :success ) }
2013-07-16 15:44:07 +10:00
it " returns errors on a duplicate category name " do
response . status . should == 422
2013-02-05 14:16:51 -05:00
end
end
2013-07-16 15:44:07 +10:00
describe " success " do
it " works " do
readonly = CategoryGroup . permission_types [ :readonly ]
create_post = CategoryGroup . permission_types [ :create_post ]
xhr :post , :create , name : " hello " , color : " ff0 " , text_color : " fff " ,
hotness : 2 ,
auto_close_days : 3 ,
permissions : {
" everyone " = > readonly ,
" staff " = > create_post
}
response . status . should == 200
category = Category . first
category . category_groups . map { | g | [ g . group_id , g . permission_type ] } . sort . should == [
[ Group [ :everyone ] . id , readonly ] , [ Group [ :staff ] . id , create_post ]
]
category . name . should == " hello "
category . color . should == " ff0 "
category . hotness . should == 2
category . auto_close_days . should == 3
2013-02-05 14:16:51 -05:00
end
end
end
end
2013-07-16 15:44:07 +10:00
describe " destroy " do
2013-02-05 14:16:51 -05:00
2013-07-16 15:44:07 +10:00
it " requires the user to be logged in " do
lambda { xhr :delete , :destroy , id : " category " } . should raise_error ( Discourse :: NotLoggedIn )
2013-02-05 14:16:51 -05:00
end
2013-07-16 15:44:07 +10:00
describe " logged in " do
2013-02-05 14:16:51 -05:00
before do
@user = log_in
2013-02-25 19:42:20 +03:00
@category = Fabricate ( :category , user : @user )
2013-02-05 14:16:51 -05:00
end
it " raises an exception if they don't have permission to delete it " do
Guardian . any_instance . expects ( :can_delete_category? ) . returns ( false )
xhr :delete , :destroy , id : @category . slug
response . should be_forbidden
2013-02-25 19:42:20 +03:00
end
2013-02-05 14:16:51 -05:00
it " deletes the record " do
Guardian . any_instance . expects ( :can_delete_category? ) . returns ( true )
lambda { xhr :delete , :destroy , id : @category . slug } . should change ( Category , :count ) . by ( - 1 )
2013-02-25 19:42:20 +03:00
end
2013-02-05 14:16:51 -05:00
end
end
2013-07-16 15:44:07 +10:00
describe " update " do
2013-02-05 14:16:51 -05:00
2013-07-16 15:44:07 +10:00
it " requires the user to be logged in " do
2013-02-05 14:16:51 -05:00
lambda { xhr :put , :update , id : 'category' } . should raise_error ( Discourse :: NotLoggedIn )
end
2013-07-16 15:44:07 +10:00
describe " logged in " do
2013-02-25 19:42:20 +03:00
before do
2013-02-05 14:16:51 -05:00
@user = log_in ( :moderator )
@category = Fabricate ( :category , user : @user )
end
it " raises an exception if they don't have permission to edit it " do
Guardian . any_instance . expects ( :can_edit? ) . returns ( false )
2013-03-14 14:16:57 +01:00
xhr :put , :update , id : @category . slug , name : 'hello' , color : 'ff0' , text_color : 'fff'
2013-02-05 14:16:51 -05:00
response . should be_forbidden
end
2013-02-25 19:42:20 +03:00
it " requires a name " do
2013-06-04 23:45:25 -07:00
lambda { xhr :put , :update , id : @category . slug , color : 'fff' , text_color : '0ff' } . should raise_error ( ActionController :: ParameterMissing )
2013-02-05 14:16:51 -05:00
end
2013-02-25 19:42:20 +03:00
it " requires a color " do
2013-06-04 23:45:25 -07:00
lambda { xhr :put , :update , id : @category . slug , name : 'asdf' , text_color : '0ff' } . should raise_error ( ActionController :: ParameterMissing )
2013-03-14 14:16:57 +01:00
end
it " requires a text color " do
2013-06-04 23:45:25 -07:00
lambda { xhr :put , :update , id : @category . slug , name : 'asdf' , color : 'fff' } . should raise_error ( ActionController :: ParameterMissing )
2013-02-05 14:16:51 -05:00
end
2013-07-16 15:44:07 +10:00
describe " failure " do
2013-02-05 14:16:51 -05:00
before do
2013-07-16 15:44:07 +10:00
@other_category = Fabricate ( :category , name : " Other " , user : @user )
xhr :put , :update , id : @category . id , name : @other_category . name , color : " ff0 " , text_color : " fff "
2013-02-05 14:16:51 -05:00
end
2013-07-16 15:44:07 +10:00
it " returns errors on a duplicate category name " do
2013-02-05 14:16:51 -05:00
response . should_not be_success
end
2013-07-16 15:44:07 +10:00
it " returns errors on a duplicate category name " do
2013-02-05 14:16:51 -05:00
response . code . to_i . should == 422
end
end
2013-07-16 15:44:07 +10:00
describe " success " do
it " updates the group correctly " do
2013-05-10 16:47:47 +10:00
2013-07-16 15:44:07 +10:00
readonly = CategoryGroup . permission_types [ :readonly ]
create_post = CategoryGroup . permission_types [ :create_post ]
xhr :put , :update , id : @category . id , name : " hello " , color : " ff0 " , text_color : " fff " ,
hotness : 2 ,
auto_close_days : 3 ,
permissions : {
" everyone " = > readonly ,
" staff " = > create_post
}
response . status . should == 200
2013-02-05 14:16:51 -05:00
@category . reload
2013-07-16 15:44:07 +10:00
@category . category_groups . map { | g | [ g . group_id , g . permission_type ] } . sort . should == [
[ Group [ :everyone ] . id , readonly ] , [ Group [ :staff ] . id , create_post ]
]
@category . name . should == " hello "
@category . color . should == " ff0 "
@category . hotness . should == 2
@category . auto_close_days . should == 3
2013-02-05 14:16:51 -05:00
end
end
end
end
end