unit_controller 0.1.0

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,30 @@
1
+ = UnitController
2
+
3
+ UnitController stubs view rendering to help with unit testing controller.
4
+
5
+ Loading UnitController:
6
+
7
+ gem "unit_controller"
8
+ require "unit_controller"
9
+
10
+ In the setup method for your test case:
11
+
12
+ def setup
13
+ @controller = SampleController.new
14
+ @request = ActionController::TestRequest.new
15
+ @response = ActionController::TestResponse.new
16
+ @controller.do_not_render_view
17
+ end
18
+
19
+
20
+ == Development
21
+
22
+ Active development occurs on the GitHub.[http://github.com/dan-manges/unit-controller] Changes are pushed to the Rubyforge git repository.
23
+
24
+ == Contributors
25
+
26
+ * Dan Manges
27
+ * David Vollbracht
28
+
29
+ == License
30
+ Released under Ruby's license.[http://www.ruby-lang.org/en/LICENSE.txt]
@@ -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.1.0"
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/test_case_extension"
3
+
4
+ ActionController::Base.send :include, UnitController::CaptureRender
5
+ Test::Unit::TestCase.send :include, UnitController::TestCaseExtension
@@ -0,0 +1,30 @@
1
+ module UnitController
2
+ module CaptureRender
3
+ attr_reader :rendered
4
+
5
+ def do_not_render_view
6
+ @render_view = false
7
+ end
8
+
9
+ def render_view?
10
+ instance_variables.include?("@render_view") ? @render_view : true
11
+ end
12
+
13
+ def render_with_unit_controller(*args, &block)
14
+ @rendered = args.first
15
+ if render_view?
16
+ render_without_unit_controller *args, &block
17
+ else
18
+ raise ActionController::DoubleRenderError, "Can only render or redirect once per action" if performed?
19
+ @performed_render = true
20
+ response.headers["Status"] = ActionController::Base::DEFAULT_RENDER_STATUS_CODE
21
+ end
22
+ end
23
+
24
+ def self.included(klass)
25
+ klass.class_eval do
26
+ alias_method_chain :render, :unit_controller
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,7 @@
1
+ module UnitController
2
+ module TestCaseExtension
3
+ def assert_rendered(options = nil, message = nil)
4
+ assert_equal options, @controller.rendered, message
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,35 @@
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 render_then_redirect
15
+ render :text => "hi"
16
+ redirect_to :action => :text_foo
17
+ end
18
+
19
+ def redirect_then_render
20
+ redirect_to :action => :text_foo
21
+ render :text => "hi"
22
+ end
23
+
24
+ def text_foo
25
+ render :text => "foo"
26
+ end
27
+ end
28
+
29
+ # Re-raise errors caught by the controller.
30
+ class SampleController; def rescue_action(e) raise e end; end
31
+
32
+ SampleController.instance_methods(false).each do |action|
33
+ ActionController::Routing::Routes.add_route \
34
+ "/sample/#{action}", :controller => "sample", :action => action
35
+ 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,47 @@
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 "raise on render then redirect" do
22
+ assert_raises(ActionController::DoubleRenderError) do
23
+ get :render_then_redirect
24
+ end
25
+ end
26
+
27
+ test "raise on redirect then render" do
28
+ assert_raises(ActionController::DoubleRenderError) do
29
+ get :redirect_then_render
30
+ end
31
+ end
32
+
33
+ test "controller remembers what it renders even if rendering view" do
34
+ @controller = @controller.class.new
35
+ assert_equal true, @controller.render_view?
36
+ get :text_foo
37
+ assert_rendered :text => "foo"
38
+ assert_equal "foo", @response.body
39
+ end
40
+
41
+ test "render_view?" do
42
+ @controller = @controller.class.new
43
+ assert_equal true, @controller.render_view?
44
+ @controller.do_not_render_view
45
+ assert_equal false, @controller.render_view?
46
+ end
47
+ end
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: unit_controller
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Dan Manges
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-05-31 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/test_case_extension.rb
27
+ - lib/unit_controller.rb
28
+ - test/sample_controller.rb
29
+ - test/test_case_test.rb
30
+ - test/test_helper.rb
31
+ - test/unit_controller_test.rb
32
+ - README
33
+ - Rakefile
34
+ has_rdoc: true
35
+ homepage: http://unit-controller.rubyforge.org
36
+ post_install_message:
37
+ rdoc_options:
38
+ - --title
39
+ - UnitController
40
+ - --main
41
+ - README
42
+ - --line-numbers
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: "0"
50
+ version:
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: "0"
56
+ version:
57
+ requirements: []
58
+
59
+ rubyforge_project: unit-controller
60
+ rubygems_version: 1.1.1
61
+ signing_key:
62
+ specification_version: 2
63
+ summary: UnitController assists with unit testing controllers by stubbing view rendering.
64
+ test_files: []
65
+