unit_controller 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
+