require_relative "../test_helper"
require 'home_controller'
# Re-raise errors caught by the controller.
class HomeController; def rescue_action(e) raise e end; end
class HomeControllerTest < ActionController::TestCase
def teardown
Thread.current[:enabled_plugins] = nil
end
all_fixtures
def setup
@controller = HomeController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
end
should 'not display news from portal if disabled in environment' do
env = Environment.default
env.disable('use_portal_community')
env.save!
get :index
assert_no_tag :tag => 'div', :attributes => { :id => 'portal-news' }
end
should 'not display news from portal if environment doesnt have portal community' do
env = Environment.default
env.enable('use_portal_community')
env.save!
get :index
assert_no_tag :tag => 'div', :attributes => { :id => 'portal-news' }
end
should 'display news from portal if enabled and has portal community' do
env = Environment.default
env.enable('use_portal_community')
c = Community.create!(:name => 'community test')
env.portal_community = c
env.save!
get :index
assert_tag :tag => 'div', :attributes => { :id => 'portal-news' } #, :descendant => {:tag => 'form', :attributes => {:action => '/account/activation_question'}}
end
should 'display the news leads if there is any' do
env = Environment.default
env.enable('use_portal_community')
c = fast_create(Community)
a1 = TextileArticle.create!(:name => "Article 1",
:profile => c,
:abstract => "This is the article1 lead.",
:body => "This is the article1 body.",
:highlighted => true)
a2 = TextileArticle.create!(:name => "Article 2",
:profile => c,
:body => "This is the article2 body.",
:highlighted => true)
env.portal_community = c
env.save!
get :index
assert_tag :attributes => { :class => 'headline' }, :content => a1.abstract
assert_no_tag :attributes => { :class => 'headline' }, :content => a1.body
assert_tag :attributes => { :class => 'headline' }, :content => a2.body
end
should 'display block in index page if it\'s configured to display on homepage and its an environment block' do
env = Environment.default
box = create(Box, :owner_type => 'Environment', :owner_id => env.id)
block = Block.create(:title => "Index Block", :box_id => box.id, :display => 'home_page_only')
env.save!
get :index
assert block.visible?
end
should 'access terms of use of environment' do
env = Environment.default
env.update_attribute(:terms_of_use, 'Noosfero terms of use')
get :terms
assert_tag :content => /Noosfero terms of use/
end
should 'provide a link to make the user authentication' do
class Plugin1 < Noosfero::Plugin
def alternative_authentication_link
proc {"Plugin1 link"}
end
end
class Plugin2 < Noosfero::Plugin
def alternative_authentication_link
proc {"Plugin2 link"}
end
end
Noosfero::Plugin.stubs(:all).returns([Plugin1.name, Plugin2.name])
Environment.default.enable_plugin(Plugin1)
Environment.default.enable_plugin(Plugin2)
get :index
assert_tag :tag => 'a', :content => 'Plugin1 link'
assert_tag :tag => 'a', :content => 'Plugin2 link'
end
should "not display the new user button on login page if now allowed by any plugin" do
class Plugin1 < Noosfero::Plugin
def allow_user_registration
false
end
end
class Plugin2 < Noosfero::Plugin
def allow_user_registration
true
end
end
Noosfero::Plugin.stubs(:all).returns([Plugin1.name, Plugin2.name])
Noosfero::Plugin::Manager.any_instance.stubs(:enabled_plugins).returns([Plugin1.new, Plugin2.new])
get :index
assert_no_tag :tag => 'a', :attributes => {:href => '/account/signup'}
end
should 'display template welcome page' do
template = create_user('template').person
template.is_template = true
welcome_page = TinyMceArticle.create!(:name => 'Welcome page', :profile => template, :published => true, :body => 'Template welcome page')
template.welcome_page = welcome_page
template.save!
get :welcome, :template_id => template.id
assert_match /#{welcome_page.body}/, @response.body
end
should 'not display template welcome page if it is not published' do
template = create_user('template').person
template.is_template = true
welcome_page = TinyMceArticle.create!(:name => 'Welcome page', :profile => template, :published => false, :body => 'Template welcome page')
template.welcome_page = welcome_page
template.save!
get :welcome, :template_id => template.id
assert_no_match /#{welcome_page.body}/, @response.body
end
should 'not crash template doess not have a welcome page' do
template = create_user('template').person
template.is_template = true
template.save!
assert_nothing_raised do
get :welcome, :template_id => template.id
end
end
should 'add class to the ' do
get :index
# Where am i?
assert_select 'html.controller-home.action-home-index'
# What is the current layout?
assert_select 'html.template-default.theme-noosfero'
end
should 'plugins add class to the ' do
class Plugin1 < Noosfero::Plugin
def html_tag_classes
lambda { ['t1', 't2'] }
end
end
class Plugin2 < Noosfero::Plugin
def html_tag_classes
'test'
end
end
Noosfero::Plugin.stubs(:all).returns([Plugin1.name, Plugin2.name])
Noosfero::Plugin::Manager.any_instance.stubs(:enabled_plugins).returns([Plugin1.new, Plugin2.new])
get :index
# Where am i?
assert_select 'html.controller-home.action-home-index'
# There are plugin classes?
assert_select 'html.t1.t2.test'
end
end