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

ContentForInsideHook content

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