Chris@1296: # Redmine - project management software Chris@1296: # Copyright (C) 2006-2012 Jean-Philippe Lang Chris@1296: # Chris@1296: # This program is free software; you can redistribute it and/or Chris@1296: # modify it under the terms of the GNU General Public License Chris@1296: # as published by the Free Software Foundation; either version 2 Chris@1296: # of the License, or (at your option) any later version. Chris@1296: # Chris@1296: # This program is distributed in the hope that it will be useful, Chris@1296: # but WITHOUT ANY WARRANTY; without even the implied warranty of Chris@1296: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Chris@1296: # GNU General Public License for more details. Chris@1296: # Chris@1296: # You should have received a copy of the GNU General Public License Chris@1296: # along with this program; if not, write to the Free Software Chris@1296: # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Chris@1296: Chris@1296: require File.expand_path('../../../../test_helper', __FILE__) Chris@1296: Chris@1296: class HookTest < ActionController::IntegrationTest Chris@1296: fixtures :users, :roles, :projects, :members, :member_roles Chris@1296: Chris@1296: # Hooks that are manually registered later Chris@1296: class ProjectBasedTemplate < Redmine::Hook::ViewListener Chris@1296: def view_layouts_base_html_head(context) Chris@1296: # Adds a project stylesheet Chris@1296: stylesheet_link_tag(context[:project].identifier) if context[:project] Chris@1296: end Chris@1296: end Chris@1296: Chris@1296: class SidebarContent < Redmine::Hook::ViewListener Chris@1296: def view_layouts_base_sidebar(context) Chris@1296: content_tag('p', 'Sidebar hook') Chris@1296: end Chris@1296: end Chris@1296: Chris@1296: class ContentForInsideHook < Redmine::Hook::ViewListener Chris@1296: render_on :view_welcome_index_left, :inline => <<-VIEW Chris@1296: <% content_for :header_tags do %> Chris@1296: <%= javascript_include_tag 'test_plugin.js', :plugin => 'test_plugin' %> Chris@1296: <%= stylesheet_link_tag 'test_plugin.css', :plugin => 'test_plugin' %> Chris@1296: <% end %> Chris@1296: Chris@1296:

ContentForInsideHook content

Chris@1296: VIEW Chris@1296: end Chris@1296: Chris@1296: def setup Chris@1296: Redmine::Hook.clear_listeners Chris@1296: end Chris@1296: Chris@1296: def teardown Chris@1296: Redmine::Hook.clear_listeners Chris@1296: end Chris@1296: Chris@1296: def test_html_head_hook_response Chris@1296: Redmine::Hook.add_listener(ProjectBasedTemplate) Chris@1296: Chris@1296: get '/projects/ecookbook' Chris@1296: assert_tag :tag => 'link', :attributes => {:href => '/stylesheets/ecookbook.css'}, Chris@1296: :parent => {:tag => 'head'} Chris@1296: end Chris@1296: Chris@1296: def test_empty_sidebar_should_be_hidden Chris@1296: get '/' Chris@1296: assert_select 'div#main.nosidebar' Chris@1296: end Chris@1296: Chris@1296: def test_sidebar_with_hook_content_should_not_be_hidden Chris@1296: Redmine::Hook.add_listener(SidebarContent) Chris@1296: Chris@1296: get '/' Chris@1296: assert_select 'div#sidebar p', :text => 'Sidebar hook' Chris@1296: assert_select 'div#main' Chris@1296: assert_select 'div#main.nosidebar', 0 Chris@1296: end Chris@1296: Chris@1296: def test_hook_with_content_for_should_append_content Chris@1296: Redmine::Hook.add_listener(ContentForInsideHook) Chris@1296: Chris@1296: get '/' Chris@1296: assert_response :success Chris@1296: assert_select 'p', :text => 'ContentForInsideHook content' Chris@1296: assert_select 'head' do Chris@1296: assert_select 'script[src=/plugin_assets/test_plugin/javascripts/test_plugin.js]' Chris@1296: assert_select 'link[href=/plugin_assets/test_plugin/stylesheets/test_plugin.css]' Chris@1296: end Chris@1296: end Chris@1296: end