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