cells 3.4.0 → 3.4.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -115,14 +115,17 @@ There are multiple advanced options for expiring your view caches, including an
115
115
 
116
116
  Another big advantage compared to monolithic controller/helper/partial piles is the ability to test your cells isolated.
117
117
 
118
- So what if you wanna test the cart cell? Use the generated <tt>test/cells/shopping_cart_test.rb</tt> test.
118
+ So what if you wanna test the cart cell? Use the generated <tt>test/cells/shopping_cart_cell_test.rb</tt> test.
119
119
 
120
- class ShoppingCartTest < ActionController::TestCase
121
- include Cells::AssertionsHelper
122
-
120
+ class ShoppingCartCellTest < Cell::TestCase
123
121
  test "display" do
124
- html = render_cell(:shopping_cart, :diplay, :user => @user_fixture)
125
- assert_selekt html, "#cart", "You have 3 items in your shopping cart."
122
+ invoke :display, :user => @user_fixture
123
+ assert_select "#cart", "You have 3 items in your shopping cart."
124
+ end
125
+
126
+ Run your tests with
127
+
128
+ $ rake test:cells
126
129
 
127
130
  That's easy, clean and strongly improves your component-driven software quality. How'd you do that with partials?
128
131
 
@@ -0,0 +1,108 @@
1
+ module Cell
2
+ # Test your cells.
3
+ #
4
+ # This class is roughly equal to ActionController::TestCase, exposing the same semantics. It will try
5
+ # to infer the tested cell name from the test name if you use declarative testing. You can also set it
6
+ # with TestCase.tests.
7
+ #
8
+ # A declarative test would look like
9
+ #
10
+ # class SellOutTest < Cell::TestCase
11
+ # tests ShoppingCartCell
12
+ #
13
+ # it "should be rendered nicely" do
14
+ # invoke :order_button, :items => @fixture_items
15
+ #
16
+ # assert_select "button", "Order now!"
17
+ # end
18
+ #
19
+ # You can also do stuff yourself, like
20
+ #
21
+ # it "should be rendered even nicer" do
22
+ # html = render_cell(:shopping_cart, :order_button, , :items => @fixture_items)
23
+ # assert_selector "button", "Order now!", html
24
+ # end
25
+ #
26
+ # Or even unit test your cell:
27
+ #
28
+ # it "should provide #default_items" do
29
+ # assert_equal [@item1, @item2], cell(:shopping_cart).default_items
30
+ # end
31
+ #
32
+ # == Test helpers
33
+ #
34
+ # Basically, we got these new methods:
35
+ #
36
+ # +invoke+:: Renders the passed +state+ with your tested cell. You may pass options like in #render_cell.
37
+ # +render_cell+:: As in your views. Will return the rendered view.
38
+ # +assert_selector+:: Like #assert_select except that the last argument is the html markup you wanna test.
39
+ # +cell+:: Gives you a cell instance for unit testing and stuff.
40
+ class TestCase < ActiveSupport::TestCase
41
+ module AssertSelect
42
+ # Invokes assert_select for the last argument, the +content+ string.
43
+ #
44
+ # Example:
45
+ # assert_selector "h1", "The latest and greatest!", "<h1>The latest and greatest!</h1>"
46
+ #
47
+ # would be true.
48
+ def assert_selector(*args, &block)
49
+ rails_assert_select(HTML::Document.new(args.pop).root, *args, &block)
50
+ end
51
+
52
+ # Invokes assert_select on the markup set by the last #invoke.
53
+ #
54
+ # Example:
55
+ # invoke :latest
56
+ # assert_select "h1", "The latest and greatest!"
57
+ def assert_select(*args, &block)
58
+ super(HTML::Document.new(last_invoke).root, *args, &block)
59
+ end
60
+ end
61
+
62
+ module TestMethods
63
+ def setup
64
+ @controller = Class.new(ActionController::Base).new
65
+ @request = ::ActionController::TestRequest.new
66
+ @response = ::ActionController::TestResponse.new
67
+ @controller.request = @request
68
+ @controller.response = @response
69
+ @controller.params = {}
70
+ end
71
+
72
+ # Use this for functional tests of your application cells.
73
+ #
74
+ # Example:
75
+ # should "spit out a h1 title" do
76
+ # html = render_cell(:news, :latest)
77
+ # assert_selekt html, "h1", "The latest and greatest!"
78
+ def render_cell(*args)
79
+ @controller.render_cell(*args)
80
+ end
81
+
82
+ # Builds an instance of <tt>name</tt>Cell for unit testing.
83
+ # Passes the optional block to <tt>cell.instance_eval</tt>.
84
+ #
85
+ # Example:
86
+ # assert_equal "Banks kill planet!" cell(:news, :topic => :terror).latest_headline
87
+ def cell(name, opts={}, &block)
88
+ cell = ::Cell::Base.create_cell_for(@controller, name, opts)
89
+ cell.instance_eval &block if block_given?
90
+ cell
91
+ end
92
+ end
93
+
94
+ include TestMethods
95
+ include ActionDispatch::Assertions::SelectorAssertions # imports "their" #assert_select.
96
+ alias_method :rails_assert_select, :assert_select # i hate that.
97
+ include AssertSelect
98
+
99
+ extend ActionController::TestCase::Behavior::ClassMethods
100
+
101
+
102
+ attr_reader :last_invoke
103
+
104
+ def invoke(state, *args)
105
+ @last_invoke = self.class.controller_class.new(@controller, *args).render_state(state)
106
+ end
107
+ end
108
+ end
@@ -63,7 +63,7 @@ require 'action_controller'
63
63
  require 'cell'
64
64
  require 'cells/rails'
65
65
  require 'cell/rails'
66
-
66
+ require 'cell/test_case' if Rails.env == "test"
67
67
 
68
68
  module Cells
69
69
  # Any config should be placed here using +mattr_accessor+.
@@ -122,4 +122,8 @@ class Cells::Railtie < Rails::Railtie
122
122
  #ActiveSupport::Dependencies.load_paths << Rails.root.join(*%w[app cells])
123
123
  ### DISCUSS: how are cell classes found by Rails?
124
124
  end
125
+
126
+ rake_tasks do
127
+ load "tasks.rake"
128
+ end
125
129
  end
@@ -1,3 +1,3 @@
1
1
  module Cells
2
- VERSION = '3.4.0'
2
+ VERSION = '3.4.1'
3
3
  end
@@ -7,20 +7,12 @@ Description:
7
7
 
8
8
  Examples:
9
9
 
10
- ./script/generate cell Announcements index
10
+ rails g cells:cell ShoppingCart index --haml
11
11
 
12
- This will create an Announcements cell:
12
+ This will create these cell assets:
13
13
  Cell:
14
- app/cells/announcements_cell.rb
14
+ app/cells/shopping_cart_cell.rb
15
15
  Views:
16
- app/cells/announcements/index.html.erb
17
-
18
-
19
- ./script/generate cell Articles popular recent --haml
20
-
21
- This will create an Articles cell:
22
- Cell:
23
- app/cells/articles_cell.rb
24
- Views:
25
- app/cells/articles/popular.html.haml
26
- app/cells/articles/recent.html.haml
16
+ app/cells/shopping_cart/index.html.haml
17
+ Test:
18
+ test/cells/shopping_cart_cell_test
@@ -1,13 +1,11 @@
1
1
  require 'test_helper'
2
2
 
3
- class <%= class_name %>CellTest < ActionController::TestCase
4
- include Cells::AssertionsHelper
5
-
6
- <% for state in @states -%>
3
+ class <%= class_name %>CellTest < Cell::TestCase
4
+ <% for state in @states -%>
7
5
  test "<%= state %>" do
8
- html = render_cell(:<%= file_name %>, :<%= state %>)
9
- assert_selekt html, "p"
6
+ invoke :<%= state %>
7
+ assert_select "p"
10
8
  end
11
9
 
12
- <% end %>
13
- end
10
+ <% end %>
11
+ end
@@ -0,0 +1,6 @@
1
+ namespace "test" do
2
+ TestTaskWithoutDescription.new(:cells => "test:prepare") do |t|
3
+ t.libs << "test"
4
+ t.pattern = 'test/cells/**/*_test.rb'
5
+ end
6
+ end
@@ -20,7 +20,7 @@ class CellGeneratorTest < Rails::Generators::TestCase
20
20
  assert_file "app/cells/blog/post.html.erb", %r(<p>)
21
21
  assert_file "app/cells/blog/latest.html.erb", %r(app/cells/blog/latest\.html\.erb)
22
22
 
23
- assert_file "test/cells/blog_cell_test.rb"
23
+ assert_file "test/cells/blog_cell_test.rb", %r(class BlogCellTest < Cell::TestCase)
24
24
  end
25
25
 
26
26
  should "create haml assets with --haml" do
@@ -1,6 +1,8 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class CellModuleTest < ActiveSupport::TestCase
4
+ include Cell::TestCase::TestMethods
5
+
4
6
  context "Cell::Base" do
5
7
 
6
8
  should "provide AbstractBase.render_cell_for" do
@@ -1,17 +1,15 @@
1
1
  require 'test_helper'
2
2
 
3
- class BlogCellTest < ActionController::TestCase
4
- include Cells::AssertionsHelper
5
-
6
- test "post" do
7
- html = render_cell(:blog, :post)
8
- assert_selekt html, "p"
3
+ class BlogCellTest < Cell::TestCase
4
+ test "post" do
5
+ invoke :post
6
+ assert_select "p"
9
7
  end
10
8
 
11
- test "latest" do
12
- html = render_cell(:blog, :latest)
13
- assert_selekt html, "p"
9
+ test "latest" do
10
+ invoke :latest
11
+ assert_select "p"
14
12
  end
15
13
 
16
-
17
- end
14
+
15
+ end
@@ -14,6 +14,8 @@ end
14
14
 
15
15
 
16
16
  class HelperTest < ActionController::TestCase
17
+ include Cell::TestCase::TestMethods
18
+
17
19
  context "a cell view" do
18
20
  should "have access to all helpers" do
19
21
  BassistCell.class_eval do
@@ -24,6 +24,8 @@ class DirectorCell < Cell::Rails
24
24
  end
25
25
 
26
26
  class CachingTest < ActiveSupport::TestCase
27
+ include Cell::TestCase::TestMethods
28
+
27
29
  context "The DirectorCell" do
28
30
  setup do
29
31
  DirectorCell.reset!
@@ -1,6 +1,21 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class RailsCellsTest < ActiveSupport::TestCase
4
+ include Cell::TestCase::TestMethods
5
+
6
+ def swap(object, new_values)
7
+ old_values = {}
8
+ new_values.each do |key, value|
9
+ old_values[key] = object.send key
10
+ object.send :"#{key}=", value
11
+ end
12
+ yield
13
+ ensure
14
+ old_values.each do |key, value|
15
+ object.send :"#{key}=", value
16
+ end
17
+ end
18
+
4
19
  context "A rails cell" do
5
20
  should "respond to view_paths" do
6
21
  assert_kind_of ActionView::PathSet, Cell::Rails.view_paths, "must be a PathSet for proper template caching/reloading (see issue#2)"
@@ -2,6 +2,8 @@ require 'test_helper'
2
2
  require 'builder'
3
3
 
4
4
  class RailsRenderTest < ActiveSupport::TestCase
5
+ include Cell::TestCase::TestMethods
6
+
5
7
  context "Invoking render" do
6
8
 
7
9
  should "render a plain view" do
@@ -1,6 +1,8 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class RailsViewTest < ActiveSupport::TestCase
4
+ include Cell::TestCase::TestMethods
5
+
4
6
  context "A cell view" do
5
7
  context "calling render :partial" do
6
8
  should "render the cell partial in bassist/dii" do
@@ -0,0 +1,78 @@
1
+ require 'test_helper'
2
+
3
+ class TestCaseTest < Cell::TestCase
4
+
5
+ context "A TestCase" do
6
+ setup do
7
+ @test = Cell::TestCase.new(:cell_test)
8
+
9
+ BassistCell.class_eval do
10
+ def play; render; end
11
+ end
12
+ end
13
+
14
+
15
+ should "respond to #render_cell" do
16
+ assert_equal "Doo", render_cell(:bassist, :play)
17
+ end
18
+
19
+ should "respond to #assert_selector with 3 args" do
20
+ assert_selector "p", "Doo", "<p>Doo</p>y"
21
+ end
22
+
23
+ should "respond to #cell" do
24
+ assert_kind_of BassistCell, cell(:bassist)
25
+ assert !cell(:bassist).respond_to?(:opts)
26
+ end
27
+
28
+ should "respond to #cell with a block" do
29
+ assert_respond_to cell(:bassist) { def opts; @opts; end }, :opts
30
+ end
31
+
32
+ should "respond to #cell with options and block" do
33
+ assert_equal({:topic => :peace}, cell(:bassist, :topic => :peace) { def opts; @opts; end }.opts)
34
+ end
35
+
36
+ context "in declarative tests" do
37
+ should "respond to TestCase.tests" do
38
+ self.class.tests BassistCell
39
+ assert_equal BassistCell, self.class.controller_class
40
+ end
41
+
42
+ should "infer the cell name" do
43
+ class SingerCell < Cell::Rails
44
+ end
45
+
46
+ class SingerCellTest < Cell::TestCase
47
+ end
48
+
49
+ assert_equal SingerCell, SingerCellTest.new(:cell_test).class.controller_class
50
+ end
51
+
52
+ context "with invoke" do
53
+ setup do
54
+ self.class.tests BassistCell
55
+ end
56
+
57
+ should "provide #invoke" do
58
+ assert_equal "Doo", invoke(:play)
59
+ end
60
+
61
+ should "provide #last_invoke" do
62
+ assert_equal nil, last_invoke
63
+ assert_equal "Doo", invoke(:play)
64
+ assert_equal "Doo", last_invoke
65
+ end
66
+
67
+ should "provide #invoke accepting opts" do
68
+ #assert_equal "Doo", invoke(:play)
69
+ end
70
+
71
+ should "provide assert_select" do
72
+ invoke :promote
73
+ assert_select "a", "vd.com"
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -26,14 +26,12 @@ require 'cells'
26
26
  Cell::Rails.append_view_path(File.join(test_app_dir, 'cells'))
27
27
  Cell::Rails.append_view_path(File.join(test_app_dir, 'cells', 'layouts'))
28
28
 
29
-
30
- Dir[File.join(gem_dir, 'test', 'support', '**', '*.rb')].each { |f| require f }
31
- require File.join(gem_dir, 'lib', 'cells', 'assertions_helper')
32
-
29
+ require "cell/test_case"
33
30
  # Extend TestCase.
34
31
  ActiveSupport::TestCase.class_eval do
35
- include Cells::AssertionsHelper
36
- include Cells::InternalAssertionsHelper
32
+ def assert_not(assertion)
33
+ assert !assertion
34
+ end
37
35
  end
38
36
 
39
37
  # Enable dynamic states so we can do Cell.class_eval { def ... } at runtime.
@@ -45,4 +43,4 @@ require File.join(test_app_dir, 'cells', 'bassist_cell')
45
43
  require File.join(test_app_dir, 'cells', 'bad_guitarist_cell')
46
44
 
47
45
  require "haml"
48
- require "haml/template" # Thanks, Nathan!
46
+ require "haml/template" # Thanks, Nathan!
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 3
7
7
  - 4
8
- - 0
9
- version: 3.4.0
8
+ - 1
9
+ version: 3.4.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Nick Sutterer
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-09-29 00:00:00 +02:00
17
+ date: 2010-10-04 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -35,11 +35,10 @@ files:
35
35
  - Rakefile
36
36
  - lib/cell.rb
37
37
  - lib/cell/active_helper.rb
38
- - lib/cell/base.rb
39
38
  - lib/cell/caching.rb
40
39
  - lib/cell/rails.rb
40
+ - lib/cell/test_case.rb
41
41
  - lib/cells.rb
42
- - lib/cells/assertions_helper.rb
43
42
  - lib/cells/helpers.rb
44
43
  - lib/cells/helpers/capture_helper.rb
45
44
  - lib/cells/rails.rb
@@ -50,8 +49,8 @@ files:
50
49
  - lib/generators/cells/templates/cell_test.rb
51
50
  - lib/generators/cells/templates/view.erb
52
51
  - lib/generators/cells/templates/view.haml
52
+ - lib/tasks.rake
53
53
  - test/active_helper_test.rb
54
- - test/assertions_helper_test.rb
55
54
  - test/rails/router_test.rb
56
55
  - test/rails/view_test.rb
57
56
  - test/rails/capture_test.rb
@@ -61,7 +60,6 @@ files:
61
60
  - test/rails/caching_test.rb
62
61
  - test/cell_generator_test.rb
63
62
  - test/test_helper.rb
64
- - test/support/internal_assertions_helper.rb
65
63
  - test/dummy/config/application.rb
66
64
  - test/dummy/config/initializers/session_store.rb
67
65
  - test/dummy/config/initializers/mime_types.rb
@@ -79,6 +77,7 @@ files:
79
77
  - test/dummy/app/controllers/musician_controller.rb
80
78
  - test/dummy/app/controllers/application_controller.rb
81
79
  - test/dummy/app/helpers/application_helper.rb
80
+ - test/test_case_test.rb
82
81
  - test/helper_test.rb
83
82
  - test/cell_module_test.rb
84
83
  - test/app/cells/bassist_cell.rb
@@ -120,7 +119,6 @@ specification_version: 3
120
119
  summary: View Components for Rails.
121
120
  test_files:
122
121
  - test/active_helper_test.rb
123
- - test/assertions_helper_test.rb
124
122
  - test/rails/router_test.rb
125
123
  - test/rails/view_test.rb
126
124
  - test/rails/capture_test.rb
@@ -130,7 +128,6 @@ test_files:
130
128
  - test/rails/caching_test.rb
131
129
  - test/cell_generator_test.rb
132
130
  - test/test_helper.rb
133
- - test/support/internal_assertions_helper.rb
134
131
  - test/dummy/config/application.rb
135
132
  - test/dummy/config/initializers/session_store.rb
136
133
  - test/dummy/config/initializers/mime_types.rb
@@ -148,6 +145,7 @@ test_files:
148
145
  - test/dummy/app/controllers/musician_controller.rb
149
146
  - test/dummy/app/controllers/application_controller.rb
150
147
  - test/dummy/app/helpers/application_helper.rb
148
+ - test/test_case_test.rb
151
149
  - test/helper_test.rb
152
150
  - test/cell_module_test.rb
153
151
  - test/app/cells/bassist_cell.rb
@@ -1,134 +0,0 @@
1
- # == Basic overview
2
- #
3
- # A Cell is the central notion of the cells plugin. A cell acts as a
4
- # lightweight controller in the sense that it will assign variables and
5
- # render a view. Cells can be rendered from other cells as well as from
6
- # regular controllers and views (see ActionView::Base#render_cell and
7
- # ControllerMethods#render_cell)
8
- #
9
- # == A render_cell() cycle
10
- #
11
- # A typical <tt>render_cell</tt> state rendering cycle looks like this:
12
- # render_cell :blog, :newest_article, {...}
13
- # - an instance of the class <tt>BlogCell</tt> is created, and a hash containing
14
- # arbitrary parameters is passed
15
- # - the <em>state method</em> <tt>newest_article</tt> is executed and assigns instance
16
- # variables to be used in the view
17
- # - Usually the state method will call #render and return
18
- # - #render will retrieve the corresponding view
19
- # (e.g. <tt>app/cells/blog/newest_article.html. [erb|haml|...]</tt>),
20
- # renders this template and returns the markup.
21
- #
22
- # == Design Principles
23
- # A cell is a completely autonomous object and it should not know or have to know
24
- # from what controller it is being rendered. For this reason, the controller's
25
- # instance variables and params hash are not directly available from the cell or
26
- # its views. This is not a bug, this is a feature! It means cells are truly
27
- # reusable components which can be plugged in at any point in your application
28
- # without having to think about what information is available at that point.
29
- # When rendering a cell, you can explicitly pass variables to the cell in the
30
- # extra opts argument hash, just like you would pass locals in partials.
31
- # This hash is then available inside the cell as the @opts instance variable.
32
- #
33
- # == Directory hierarchy
34
- #
35
- # To get started creating your own cells, you can simply create a new directory
36
- # structure under your <tt>app</tt> directory called <tt>cells</tt>. Cells are
37
- # ruby classes which end in the name Cell. So for example, if you have a
38
- # cell which manages all user information, it would be called <tt>UserCell</tt>.
39
- # A cell which manages a shopping cart could be called <tt>ShoppingCartCell</tt>.
40
- #
41
- # The directory structure of this example would look like this:
42
- # app/
43
- # models/
44
- # ..
45
- # views/
46
- # ..
47
- # helpers/
48
- # application_helper.rb
49
- # product_helper.rb
50
- # ..
51
- # controllers/
52
- # ..
53
- # cells/
54
- # shopping_cart_cell.rb
55
- # shopping_cart/
56
- # status.html.erb
57
- # product_list.html.erb
58
- # empty_prompt.html.erb
59
- # user_cell.rb
60
- # user/
61
- # login.html.erb
62
- # layouts/
63
- # box.html.erb
64
- # ..
65
- #
66
- # The directory with the same name as the cell contains views for the
67
- # cell's <em>states</em>. A state is an executed method along with a
68
- # rendered view, resulting in content. This means that states are to
69
- # cells as actions are to controllers, so each state has its own view.
70
- # The use of partials is deprecated with cells, it is better to just
71
- # render a different state on the same cell (which also works recursively).
72
- #
73
- # Anyway, <tt>render :partial </tt> in a cell view will work, if the
74
- # partial is contained in the cell's view directory.
75
- #
76
- # As can be seen above, Cells also can make use of helpers. All Cells
77
- # include ApplicationHelper by default, but you can add additional helpers
78
- # as well with the ::Cell::Base.helper class method:
79
- # class ShoppingCartCell < ::Cell::Base
80
- # helper :product
81
- # ...
82
- # end
83
- #
84
- # This will make the <tt>ProductHelper</tt> from <tt>app/helpers/product_helper.rb</tt>
85
- # available from all state views from our <tt>ShoppingCartCell</tt>.
86
- #
87
- # == Cell inheritance
88
- #
89
- # Unlike controllers, Cells can form a class hierarchy. When a cell class
90
- # is inherited by another cell class, its states are inherited as regular
91
- # methods are, but also its views are inherited. Whenever a view is looked up,
92
- # the view finder first looks for a file in the directory belonging to the
93
- # current cell class, but if this is not found in the application or any
94
- # engine, the superclass' directory is checked. This continues all the
95
- # way up until it stops at ::Cell::Base.
96
- #
97
- # For instance, when you have two cells:
98
- # class MenuCell < ::Cell::Base
99
- # def show
100
- # end
101
- #
102
- # def edit
103
- # end
104
- # end
105
- #
106
- # class MainMenuCell < MenuCell
107
- # .. # no need to redefine show/edit if they do the same!
108
- # end
109
- # and the following directory structure in <tt>app/cells</tt>:
110
- # app/cells/
111
- # menu/
112
- # show.html.erb
113
- # edit.html.erb
114
- # main_menu/
115
- # show.html.erb
116
- # then when you call
117
- # render_cell :main_menu, :show
118
- # the main menu specific show.html.erb (<tt>app/cells/main_menu/show.html.erb</tt>)
119
- # is rendered, but when you call
120
- # render_cell :main_menu, :edit
121
- # cells notices that the main menu does not have a specific view for the
122
- # <tt>edit</tt> state, so it will render the view for the parent class,
123
- # <tt>app/cells/menu/edit.html.erb</tt>
124
- #
125
- #
126
- # == Gettext support
127
- #
128
- # Cells support gettext, just name your views accordingly. It works exactly equivalent
129
- # to controller views.
130
- #
131
- # cells/user/user_form.html.erb
132
- # cells/user/user_form_de.html.erb
133
- #
134
- # If gettext is set to DE_de, the latter view will be chosen.
@@ -1,49 +0,0 @@
1
- # encoding: utf-8
2
- require 'action_controller/test_case'
3
-
4
- module Cells
5
- module AssertionsHelper
6
- # Sets up a mock controller for usage in render_cell.
7
- def setup
8
- @controller = Class.new(ActionController::Base).new
9
- @request = ::ActionController::TestRequest.new
10
- @response = ::ActionController::TestResponse.new
11
- @controller.request = @request
12
- @controller.response = @response
13
- @controller.params = {}
14
- end
15
-
16
- # Use this for functional tests of your application cells.
17
- #
18
- # Example:
19
- # should "spit out a h1 title" do
20
- # html = render_cell(:news, :latest)
21
- # assert_selekt html, "h1", "The latest and greatest!"
22
- def render_cell(*args)
23
- @controller.render_cell(*args)
24
- end
25
-
26
- # Invokes assert_select for the passed <tt>content</tt> string.
27
- #
28
- # Example:
29
- # html = "<h1>The latest and greatest!</h1>"
30
- # assert_selekt html, "h1", "The latest and greatest!"
31
- #
32
- # would be true.
33
- def assert_selekt(content, *args)
34
- assert_select(HTML::Document.new(content).root, *args)
35
- end
36
-
37
- # Builds an instance of <tt>name</tt>Cell for unit testing.
38
- # Passes the optional block to <tt>cell.instance_eval</tt>.
39
- #
40
- # Example:
41
- # assert_equal "Banks kill planet!" cell(:news, :topic => :terror).latest_headline
42
- def cell(name, opts={}, &block)
43
- cell = ::Cell::Base.create_cell_for(@controller, name, opts)
44
- cell.instance_eval &block if block_given?
45
- cell
46
- end
47
- end
48
- end
49
-
@@ -1,32 +0,0 @@
1
- require 'test_helper'
2
-
3
- class AssertionsHelperTest < ActionController::TestCase
4
- context "A TestCase" do
5
- setup do
6
- BassistCell.class_eval do
7
- def play; render; end
8
- end
9
- end
10
-
11
- should "respond to #render_cell" do
12
- assert_equal "Doo", render_cell(:bassist, :play)
13
- end
14
-
15
- should "respond to #assert_selekt" do
16
- assert_selekt "<p>Doo</p>", "p", "Doo"
17
- end
18
-
19
- should "respond to #cell" do
20
- assert_kind_of BassistCell, cell(:bassist)
21
- assert_not cell(:bassist).respond_to? :opts
22
- end
23
-
24
- should "respond to #cell with a block" do
25
- assert_respond_to cell(:bassist) { def opts; @opts; end }, :opts
26
- end
27
-
28
- should "respond to #cell with options and block" do
29
- assert_equal({:topic => :peace}, cell(:bassist, :topic => :peace) { def opts; @opts; end }.opts)
30
- end
31
- end
32
- end
@@ -1,69 +0,0 @@
1
- # encoding: utf-8
2
- module Cells
3
- # Assertion helpers extracted from Devise by José Valim.
4
- #
5
- module InternalAssertionsHelper
6
- def setup
7
- @controller = ::MusicianController.new
8
- @request = ::ActionController::TestRequest.new
9
- @response = ::ActionController::TestResponse.new
10
- @controller.request = @request
11
- @controller.response = @response
12
- @controller.params = {}
13
- end
14
-
15
- def assert_not(assertion)
16
- assert !assertion
17
- end
18
-
19
- def assert_blank(assertion)
20
- assert assertion.blank?
21
- end
22
-
23
- def assert_not_blank(assertion)
24
- assert !assertion.blank?
25
- end
26
- alias :assert_present :assert_not_blank
27
-
28
- # Execute the block setting the given values and restoring old values after
29
- # the block is executed.
30
- #
31
- # == Usage/Example:
32
- #
33
- # I18n.locale # => :en
34
- #
35
- # swap(I18n :locale => :se) do
36
- # I18n.locale # => :se
37
- # end
38
- #
39
- # I18n.locale # => :en
40
- #
41
- def swap(object, new_values)
42
- old_values = {}
43
- new_values.each do |key, value|
44
- old_values[key] = object.send key
45
- object.send :"#{key}=", value
46
- end
47
- yield
48
- ensure
49
- old_values.each do |key, value|
50
- object.send :"#{key}=", value
51
- end
52
- end
53
-
54
- # Provides a TestCell instance. The <tt>block</tt> is passed to instance_eval and should be used
55
- # to extend the mock on the fly.
56
- ### DISCUSS: make an anonymous subclass of TestCell?
57
- def cell_mock(options={}, &block) ### DISCUSS: 2BRM.
58
- cell = TestCell.new(@controller, options)
59
- cell.instance_eval(&block) if block_given?
60
- cell
61
- end
62
-
63
- def bassist_mock(options={}, &block)
64
- cell = BassistCell.new(@controller, options)
65
- cell.instance_eval(&block) if block_given?
66
- cell
67
- end
68
- end
69
- end