diff --git a/app/helpers/watchers_helper.rb b/app/helpers/watchers_helper.rb index b336233d..bd716d37 100644 --- a/app/helpers/watchers_helper.rb +++ b/app/helpers/watchers_helper.rb @@ -17,6 +17,19 @@ module WatchersHelper + # Deprecated method. Use watcher_link instead + # + # This method will be removed in ChiliProject 3.0 or later + def watcher_tag(object, user, options={:replace => 'watcher'}) + ActiveSupport::Deprecation.warn "The WatchersHelper#watcher_tag is deprecated and will be removed in ChiliProject 3.0. Please use WatchersHelper#watcher_link instead. Please also note the differences between the APIs.", caller + + options[:id] ||= options[:replace] if options[:replace].is_a? String + + options[:replace] = Array(options[:replace]).map { |id| "##{id}" } + + watcher_link(object, user, options) + end + # Create a link to watch/unwatch object # # * :replace - a string or array of strings with css selectors that will be updated, whenever the watcher status is changed diff --git a/test/unit/helpers/watchers_helpers_test.rb b/test/unit/helpers/watchers_helpers_test.rb new file mode 100644 index 00000000..2ba21cbf --- /dev/null +++ b/test/unit/helpers/watchers_helpers_test.rb @@ -0,0 +1,49 @@ +require File.expand_path('../../../test_helper', __FILE__) + +class WatchersHelperTest < HelperTestCase + include WatchersHelper + + # tested for backwards compatibility + context '#watcher_tag' do + setup do + # mocking watcher_link to make sure, that new API is properly called from + # the old one. + def self.watcher_link(*args) + @watcher_link_args = args + nil + end + + # silencing deprecation warnings while testing the deprecated behavior + def self.watcher_tag(*args) + ActiveSupport::Deprecation.silence { super } + end + end + + context 'without options' do + should "call watcher_link with object, user and {:id => 'watcher', :replace => '#watcher'}" do + watcher_tag(:object, :user) + assert_equal :object, @watcher_link_args.first + assert_equal :user, @watcher_link_args.second + assert_equal({:id => 'watcher', :replace => ['#watcher']}, @watcher_link_args.third) + end + end + + context 'with replace, without id option' do + should "set id to replace value and prefix replace with a # to make it a valid css selectors" do + watcher_tag(:object, :user, :replace => 'abc') + assert_equal :object, @watcher_link_args.first + assert_equal :user, @watcher_link_args.second + assert_equal({:id => 'abc', :replace => ['#abc']}, @watcher_link_args.third) + end + end + + context 'with all options' do + should "prefix all elements in replace with a # to make them valid css selectors" do + watcher_tag(:object, :user, :id => 'abc', :replace => ['abc', 'def']) + assert_equal :object, @watcher_link_args.first + assert_equal :user, @watcher_link_args.second + assert_equal({:id => 'abc', :replace => ['#abc', '#def']}, @watcher_link_args.third) + end + end + end +end