dan-manges-unit_controller 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README ADDED
@@ -0,0 +1,14 @@
1
+ = UnitController
2
+
3
+ Note to self: http://dev.rubyonrails.org/ticket/10536
4
+
5
+ == Development
6
+
7
+ Active development occurs on the GitHub.[http://github.com/dan-manges/unit-controller] Changes are pushed to the Rubyforge git repository.
8
+
9
+ == Contributors
10
+
11
+ * Dan Manges
12
+
13
+ == License
14
+ Released under Ruby's license.[http://www.ruby-lang.org/en/LICENSE.txt]
data/Rakefile ADDED
@@ -0,0 +1,76 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+ require 'rake/gempackagetask'
5
+ require 'rake/contrib/sshpublisher'
6
+
7
+ desc "Default: run tests"
8
+ task :default => :test
9
+
10
+ Rake::TestTask.new(:test) do |t|
11
+ t.libs << 'lib'
12
+ t.pattern = 'test/**/*_test.rb'
13
+ t.verbose = true
14
+ end
15
+
16
+ desc "Generate documentation"
17
+ Rake::RDocTask.new(:rdoc) do |rdoc|
18
+ rdoc.rdoc_dir = "doc"
19
+ rdoc.title = "UnitController"
20
+ rdoc.options << '--line-numbers'
21
+ rdoc.rdoc_files.include('README')
22
+ end
23
+
24
+ desc "Upload RDoc to RubyForge"
25
+ task :publish_rdoc => [:rerdoc] do
26
+ Rake::SshDirPublisher.new("dcmanges@rubyforge.org", "/var/www/gforge-projects/unit-controller", "doc").upload
27
+ end
28
+
29
+ require "date"
30
+ Gem.manage_gems
31
+ gem_spec = Gem::Specification.new do |s|
32
+ s.name = "unit_controller"
33
+ s.summary = "UnitController assists with unit testing controllers by stubbing view rendering."
34
+ s.version = "0.0.1"
35
+ s.author = "Dan Manges"
36
+ s.description = s.summary
37
+ s.email = "daniel.manges@gmail.com"
38
+ s.homepage = "http://unit-controller.rubyforge.org"
39
+ s.rubyforge_project = "unit-controller"
40
+
41
+ s.has_rdoc = true
42
+ s.extra_rdoc_files = ['README']
43
+ s.rdoc_options << '--title' << "UnitController" << '--main' << 'README' << '--line-numbers'
44
+
45
+ s.files = FileList['{lib,test}/**/*.rb', 'README', 'Rakefile'].to_a
46
+ end
47
+ Rake::GemPackageTask.new(gem_spec) do |package|
48
+ package.need_zip = false
49
+ package.need_tar = false
50
+ end
51
+
52
+ Rake::Task["gem"].prerequisites.unshift "test:multi"
53
+
54
+ namespace :gemspec do
55
+ desc "generates unit_controller.gemspec"
56
+ task :generate do
57
+ File.open("unit_controller.gemspec", "w") do |f|
58
+ f.puts "# this file is generated by rake gemspec:generate for github"
59
+ f.write gem_spec.to_ruby
60
+ end
61
+ end
62
+ end
63
+
64
+ RAILS_VERSIONS = %w[1.2.6 2.0.2]
65
+
66
+ namespace :test do
67
+ desc "test with multiple versions of rails"
68
+ task :multi do
69
+ RAILS_VERSIONS.each do |rails_version|
70
+ sh "RAILS_VERSION='#{rails_version}' rake test > /dev/null 2>&1"
71
+ end
72
+ end
73
+ end
74
+
75
+ desc "pre-commit task"
76
+ task :pc => %w[test:multi gemspec:generate]
@@ -0,0 +1,5 @@
1
+ require "unit_controller/capture_render"
2
+ require "unit_controller/no_view_rendering"
3
+ require "unit_controller/test_case_extension"
4
+ ActionController::Base.send :include, UnitController::NoViewRendering
5
+ Test::Unit::TestCase.send :include, UnitController::TestCaseExtension
@@ -0,0 +1,12 @@
1
+ module UnitController
2
+ module CaptureRender
3
+ attr_reader :rendered
4
+
5
+ def render(options = nil)
6
+ raise ActionController::DoubleRenderError, "Can only render or redirect once per action" if performed?
7
+ @performed_render = true
8
+ @rendered = options
9
+ response.headers["Status"] = ActionController::Base::DEFAULT_RENDER_STATUS_CODE
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,7 @@
1
+ module UnitController
2
+ module NoViewRendering
3
+ def do_not_render_view
4
+ extend UnitController::CaptureRender
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ module UnitController
2
+ module TestCaseExtension
3
+ def assert_rendered(options = nil, message = nil)
4
+ if !@controller.respond_to?(:rendered)
5
+ raise NoMethodError, "#{@controller} did not remember what it rendered. Did you call @controller.do_not_render_view ?"
6
+ end
7
+ assert_equal options, @controller.rendered, message
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,25 @@
1
+ class SampleController < ActionController::Base
2
+ def double_render
3
+ render :text => "once"
4
+ render :text => "twice"
5
+ end
6
+
7
+ def implicit_template
8
+ end
9
+
10
+ def raise_inline
11
+ render :inline => "<% raise 'raise in template' %>"
12
+ end
13
+
14
+ def text_foo
15
+ render :text => "foo"
16
+ end
17
+ end
18
+
19
+ # Re-raise errors caught by the controller.
20
+ class SampleController; def rescue_action(e) raise e end; end
21
+
22
+ SampleController.instance_methods(false).each do |action|
23
+ ActionController::Routing::Routes.add_route \
24
+ "/sample/#{action}", :controller => "sample", :action => action
25
+ end
@@ -0,0 +1,23 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+
3
+ TestHelper.define_test_case do
4
+ test "assert_rendered" do
5
+ get :text_foo
6
+ assert_passes do
7
+ assert_rendered :text => "foo"
8
+ end
9
+ assert_fails do
10
+ assert_rendered :text => "bar"
11
+ end
12
+ end
13
+
14
+ test "assert_rendered on implicit_template" do
15
+ get :implicit_template
16
+ assert_passes do
17
+ assert_rendered
18
+ end
19
+ assert_fails do
20
+ assert_rendered :something_that_it_didnt_render
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,62 @@
1
+ require "rubygems"
2
+ gem "rails", ENV["RAILS_VERSION"] || ">= 2.0.2"
3
+ require "rails/version"
4
+ require "action_controller"
5
+ require "action_controller/test_process"
6
+
7
+ if Rails::VERSION::MAJOR >= 2
8
+ require "action_controller/test_case"
9
+ end
10
+
11
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
12
+ require "unit_controller"
13
+
14
+ require "test/unit"
15
+ gem "dust", "0.1.6"
16
+ require "dust"
17
+
18
+ require File.dirname(__FILE__) + "/sample_controller"
19
+
20
+ Test::Unit::TestCase.class_eval do
21
+ def assert_fails(&block)
22
+ assert_raises Test::Unit::AssertionFailedError, &block
23
+ end
24
+
25
+ def assert_passes
26
+ yield
27
+ end
28
+ end
29
+
30
+ module TestHelper
31
+ def self.define_test_case(&block)
32
+ klass = Rails::VERSION::MAJOR >= 2 ? rails2_test_case : rails1_test_case
33
+ klass.class_eval &block
34
+ klass
35
+ end
36
+
37
+ def self.rails2_test_case
38
+ klass = Class.new(ActionController::TestCase)
39
+ klass.class_eval do
40
+ tests SampleController
41
+
42
+ def setup
43
+ super
44
+ @controller.do_not_render_view
45
+ end
46
+ end
47
+ klass
48
+ end
49
+
50
+ def self.rails1_test_case
51
+ klass = Class.new(Test::Unit::TestCase)
52
+ klass.class_eval do
53
+ def setup
54
+ @controller = SampleController.new
55
+ @request = ActionController::TestRequest.new
56
+ @response = ActionController::TestResponse.new
57
+ @controller.do_not_render_view
58
+ end
59
+ end
60
+ klass
61
+ end
62
+ end
@@ -0,0 +1,31 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+
3
+ TestHelper.define_test_case do
4
+ test "action that has view that raises" do
5
+ assert_nothing_raised do
6
+ get :raise_inline
7
+ end
8
+ end
9
+
10
+ test "assert_response :success works" do
11
+ get :implicit_template
12
+ assert_response :success
13
+ end
14
+
15
+ test "raise on double render" do
16
+ assert_raises(ActionController::DoubleRenderError) do
17
+ get :double_render
18
+ end
19
+ end
20
+
21
+ test "friendly error message if you forgot to tell controller not to render view" do
22
+ @controller = @controller.class.new
23
+ exception = nil
24
+ begin
25
+ assert_rendered @controller
26
+ rescue NoMethodError => exception
27
+ end
28
+ assert_not_nil exception
29
+ assert_equal "#{@controller} did not remember what it rendered. Did you call @controller.do_not_render_view ?", exception.message
30
+ end
31
+ end
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dan-manges-unit_controller
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Dan Manges
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-05-20 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: UnitController assists with unit testing controllers by stubbing view rendering.
17
+ email: daniel.manges@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
24
+ files:
25
+ - lib/unit_controller/capture_render.rb
26
+ - lib/unit_controller/no_view_rendering.rb
27
+ - lib/unit_controller/test_case_extension.rb
28
+ - lib/unit_controller.rb
29
+ - test/sample_controller.rb
30
+ - test/test_case_test.rb
31
+ - test/test_helper.rb
32
+ - test/unit_controller_test.rb
33
+ - README
34
+ - Rakefile
35
+ has_rdoc: true
36
+ homepage: http://unit-controller.rubyforge.org
37
+ post_install_message:
38
+ rdoc_options:
39
+ - --title
40
+ - UnitController
41
+ - --main
42
+ - README
43
+ - --line-numbers
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: "0"
51
+ version:
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ version:
58
+ requirements: []
59
+
60
+ rubyforge_project: unit-controller
61
+ rubygems_version: 1.0.1
62
+ signing_key:
63
+ specification_version: 2
64
+ summary: UnitController assists with unit testing controllers by stubbing view rendering.
65
+ test_files: []
66
+