collector_test.rb 1.8 KB
Newer Older
1 2 3 4 5
require 'abstract_unit'

module AbstractController
  module Testing
    class MyCollector
6
      include AbstractController::Collector
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
      attr_accessor :responses

      def initialize
        @responses = []
      end

      def custom(mime, *args, &block)
        @responses << [mime, args, block]
      end
    end

    class TestCollector < ActiveSupport::TestCase
      test "responds to default mime types" do
        collector = MyCollector.new
        assert_respond_to collector, :html
        assert_respond_to collector, :text
      end

      test "does not respond to unknown mime types" do
        collector = MyCollector.new
27
        assert_not_respond_to collector, :unknown
28 29 30 31
      end

      test "register mime types on method missing" do
        AbstractController::Collector.send(:remove_method, :js)
32 33 34 35 36 37 38 39 40 41
        begin
          collector = MyCollector.new
          assert_not_respond_to collector, :js
          collector.js
          assert_respond_to collector, :js
        ensure
          unless AbstractController::Collector.method_defined? :js
            AbstractController::Collector.generate_method_for_mime :js
          end
        end
42 43 44 45
      end

      test "does not register unknown mime types" do
        collector = MyCollector.new
Ł
Łukasz Strzałkowski 已提交
46
        assert_raise NoMethodError do
47 48 49 50
          collector.unknown
        end
      end

51
      test "generated methods call custom with arguments received" do
52 53 54 55 56 57 58 59 60 61 62
        collector = MyCollector.new
        collector.html
        collector.text(:foo)
        collector.js(:bar) { :baz }
        assert_equal [Mime::HTML, [], nil], collector.responses[0]
        assert_equal [Mime::TEXT, [:foo], nil], collector.responses[1]
        assert_equal [Mime::JS, [:bar]], collector.responses[2][0,2]
        assert_equal :baz, collector.responses[2][2].call
      end
    end
  end
63
end