annotate test/unit/lib/redmine/plugin_test.rb @ 1466:834828a14f2b bug_598

Close obsolete branch bug_598
author Chris Cannam
date Fri, 21 Jun 2013 14:51:55 +0100
parents 433d4f72a19b
children 622f24f53b42 261b3d9a4903
rev   line source
Chris@0 1 # Redmine - project management software
Chris@1115 2 # Copyright (C) 2006-2012 Jean-Philippe Lang
Chris@0 3 #
Chris@0 4 # This program is free software; you can redistribute it and/or
Chris@0 5 # modify it under the terms of the GNU General Public License
Chris@0 6 # as published by the Free Software Foundation; either version 2
Chris@0 7 # of the License, or (at your option) any later version.
Chris@909 8 #
Chris@0 9 # This program is distributed in the hope that it will be useful,
Chris@0 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@0 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@0 12 # GNU General Public License for more details.
Chris@909 13 #
Chris@0 14 # You should have received a copy of the GNU General Public License
Chris@0 15 # along with this program; if not, write to the Free Software
Chris@0 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Chris@0 17
Chris@119 18 require File.expand_path('../../../../test_helper', __FILE__)
Chris@0 19
Chris@0 20 class Redmine::PluginTest < ActiveSupport::TestCase
Chris@0 21
Chris@0 22 def setup
Chris@0 23 @klass = Redmine::Plugin
Chris@0 24 # In case some real plugins are installed
Chris@0 25 @klass.clear
Chris@0 26 end
Chris@909 27
Chris@0 28 def teardown
Chris@0 29 @klass.clear
Chris@0 30 end
Chris@909 31
Chris@0 32 def test_register
Chris@0 33 @klass.register :foo do
Chris@0 34 name 'Foo plugin'
Chris@0 35 url 'http://example.net/plugins/foo'
Chris@0 36 author 'John Smith'
Chris@0 37 author_url 'http://example.net/jsmith'
Chris@0 38 description 'This is a test plugin'
Chris@0 39 version '0.0.1'
Chris@0 40 settings :default => {'sample_setting' => 'value', 'foo'=>'bar'}, :partial => 'foo/settings'
Chris@0 41 end
Chris@909 42
Chris@0 43 assert_equal 1, @klass.all.size
Chris@909 44
Chris@0 45 plugin = @klass.find('foo')
Chris@0 46 assert plugin.is_a?(Redmine::Plugin)
Chris@0 47 assert_equal :foo, plugin.id
Chris@0 48 assert_equal 'Foo plugin', plugin.name
Chris@0 49 assert_equal 'http://example.net/plugins/foo', plugin.url
Chris@0 50 assert_equal 'John Smith', plugin.author
Chris@0 51 assert_equal 'http://example.net/jsmith', plugin.author_url
Chris@0 52 assert_equal 'This is a test plugin', plugin.description
Chris@0 53 assert_equal '0.0.1', plugin.version
Chris@0 54 end
Chris@909 55
Chris@1115 56 def test_installed
Chris@1115 57 @klass.register(:foo) {}
Chris@1115 58
Chris@1115 59 assert_equal true, @klass.installed?(:foo)
Chris@1115 60 assert_equal false, @klass.installed?(:bar)
Chris@1115 61 end
Chris@1115 62
Chris@1115 63 def test_menu
Chris@1115 64 assert_difference 'Redmine::MenuManager.items(:project_menu).size' do
Chris@1115 65 @klass.register :foo do
Chris@1115 66 menu :project_menu, :foo_menu_item, '/foo', :caption => 'Foo'
Chris@1115 67 end
Chris@1115 68 end
Chris@1115 69 menu_item = Redmine::MenuManager.items(:project_menu).detect {|i| i.name == :foo_menu_item}
Chris@1115 70 assert_not_nil menu_item
Chris@1115 71 assert_equal 'Foo', menu_item.caption
Chris@1115 72 assert_equal '/foo', menu_item.url
Chris@1115 73 end
Chris@1115 74
Chris@1115 75 def test_delete_menu_item
Chris@1115 76 Redmine::MenuManager.map(:project_menu).push(:foo_menu_item, '/foo', :caption => 'Foo')
Chris@1115 77
Chris@1115 78 assert_difference 'Redmine::MenuManager.items(:project_menu).size', -1 do
Chris@1115 79 @klass.register :foo do
Chris@1115 80 delete_menu_item :project_menu, :foo_menu_item
Chris@1115 81 end
Chris@1115 82 end
Chris@1115 83 assert_nil Redmine::MenuManager.items(:project_menu).detect {|i| i.name == :foo_menu_item}
Chris@1115 84 end
Chris@1115 85
Chris@0 86 def test_requires_redmine
Chris@1115 87 plugin = Redmine::Plugin.register(:foo) {}
Chris@1115 88 Redmine::VERSION.stubs(:to_a).returns([2, 1, 3, "stable", 10817])
Chris@909 89
Chris@1115 90 # Specific version without hash
Chris@1115 91 assert plugin.requires_redmine('2.1.3')
Chris@1115 92 assert plugin.requires_redmine('2.1')
Chris@1115 93 assert_raise Redmine::PluginRequirementError do
Chris@1115 94 plugin.requires_redmine('2.1.4')
Chris@1115 95 end
Chris@1115 96 assert_raise Redmine::PluginRequirementError do
Chris@1115 97 plugin.requires_redmine('2.2')
Chris@1115 98 end
Chris@909 99
Chris@1115 100 # Specific version
Chris@1115 101 assert plugin.requires_redmine(:version => '2.1.3')
Chris@1115 102 assert plugin.requires_redmine(:version => ['2.1.3', '2.2.0'])
Chris@1115 103 assert plugin.requires_redmine(:version => '2.1')
Chris@1115 104 assert_raise Redmine::PluginRequirementError do
Chris@1115 105 plugin.requires_redmine(:version => '2.2.0')
Chris@1115 106 end
Chris@1115 107 assert_raise Redmine::PluginRequirementError do
Chris@1115 108 plugin.requires_redmine(:version => ['2.1.4', '2.2.0'])
Chris@1115 109 end
Chris@1115 110 assert_raise Redmine::PluginRequirementError do
Chris@1115 111 plugin.requires_redmine(:version => '2.2')
Chris@1115 112 end
Chris@1115 113
Chris@1115 114 # Version range
Chris@1115 115 assert plugin.requires_redmine(:version => '2.0.0'..'2.2.4')
Chris@1115 116 assert plugin.requires_redmine(:version => '2.1.3'..'2.2.4')
Chris@1115 117 assert plugin.requires_redmine(:version => '2.0.0'..'2.1.3')
Chris@1115 118 assert plugin.requires_redmine(:version => '2.0'..'2.2')
Chris@1115 119 assert plugin.requires_redmine(:version => '2.1'..'2.2')
Chris@1115 120 assert plugin.requires_redmine(:version => '2.0'..'2.1')
Chris@1115 121 assert_raise Redmine::PluginRequirementError do
Chris@1115 122 plugin.requires_redmine(:version => '2.1.4'..'2.2.4')
Chris@1115 123 end
Chris@1115 124
Chris@1115 125
Chris@1115 126 # Version or higher
Chris@1115 127 assert plugin.requires_redmine(:version_or_higher => '0.1.0')
Chris@1115 128 assert plugin.requires_redmine(:version_or_higher => '2.1.3')
Chris@1115 129 assert plugin.requires_redmine(:version_or_higher => '2.1')
Chris@1115 130 assert_raise Redmine::PluginRequirementError do
Chris@1115 131 plugin.requires_redmine(:version_or_higher => '2.2.0')
Chris@1115 132 end
Chris@1115 133 assert_raise Redmine::PluginRequirementError do
Chris@1115 134 plugin.requires_redmine(:version_or_higher => '2.2')
Chris@0 135 end
Chris@0 136 end
Chris@0 137
Chris@0 138 def test_requires_redmine_plugin
Chris@0 139 test = self
Chris@0 140 other_version = '0.5.0'
Chris@909 141
Chris@0 142 @klass.register :other do
Chris@0 143 name 'Other'
Chris@0 144 version other_version
Chris@0 145 end
Chris@909 146
Chris@0 147 @klass.register :foo do
Chris@0 148 test.assert requires_redmine_plugin(:other, :version_or_higher => '0.1.0')
Chris@0 149 test.assert requires_redmine_plugin(:other, :version_or_higher => other_version)
Chris@0 150 test.assert requires_redmine_plugin(:other, other_version)
Chris@0 151 test.assert_raise Redmine::PluginRequirementError do
Chris@0 152 requires_redmine_plugin(:other, :version_or_higher => '99.0.0')
Chris@0 153 end
Chris@909 154
Chris@0 155 test.assert requires_redmine_plugin(:other, :version => other_version)
Chris@0 156 test.assert requires_redmine_plugin(:other, :version => [other_version, '99.0.0'])
Chris@0 157 test.assert_raise Redmine::PluginRequirementError do
Chris@0 158 requires_redmine_plugin(:other, :version => '99.0.0')
Chris@0 159 end
Chris@0 160 test.assert_raise Redmine::PluginRequirementError do
Chris@0 161 requires_redmine_plugin(:other, :version => ['98.0.0', '99.0.0'])
Chris@0 162 end
Chris@0 163 # Missing plugin
Chris@0 164 test.assert_raise Redmine::PluginNotFound do
Chris@0 165 requires_redmine_plugin(:missing, :version_or_higher => '0.1.0')
Chris@0 166 end
Chris@0 167 test.assert_raise Redmine::PluginNotFound do
Chris@0 168 requires_redmine_plugin(:missing, '0.1.0')
Chris@0 169 end
Chris@0 170 test.assert_raise Redmine::PluginNotFound do
Chris@0 171 requires_redmine_plugin(:missing, :version => '0.1.0')
Chris@0 172 end
Chris@909 173
Chris@0 174 end
Chris@0 175 end
Chris@0 176 end