pager-resource_controller 1.0.20080513

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.
Files changed (201) hide show
  1. data/LICENSE +22 -0
  2. data/README +276 -0
  3. data/Rakefile +55 -0
  4. data/TODO +1 -0
  5. data/generators/scaffold_resource/USAGE +29 -0
  6. data/generators/scaffold_resource/scaffold_resource_generator.rb +101 -0
  7. data/generators/scaffold_resource/templates/controller.rb +2 -0
  8. data/generators/scaffold_resource/templates/fixtures.yml +10 -0
  9. data/generators/scaffold_resource/templates/functional_test.rb +57 -0
  10. data/generators/scaffold_resource/templates/helper.rb +2 -0
  11. data/generators/scaffold_resource/templates/migration.rb +15 -0
  12. data/generators/scaffold_resource/templates/model.rb +2 -0
  13. data/generators/scaffold_resource/templates/old_migration.rb +13 -0
  14. data/generators/scaffold_resource/templates/shoulda_functional_test.rb +19 -0
  15. data/generators/scaffold_resource/templates/unit_test.rb +7 -0
  16. data/generators/scaffold_resource/templates/view__form.erb +6 -0
  17. data/generators/scaffold_resource/templates/view__form.haml +5 -0
  18. data/generators/scaffold_resource/templates/view_edit.erb +16 -0
  19. data/generators/scaffold_resource/templates/view_edit.haml +11 -0
  20. data/generators/scaffold_resource/templates/view_index.erb +22 -0
  21. data/generators/scaffold_resource/templates/view_index.haml +19 -0
  22. data/generators/scaffold_resource/templates/view_new.erb +12 -0
  23. data/generators/scaffold_resource/templates/view_new.haml +9 -0
  24. data/generators/scaffold_resource/templates/view_show.erb +9 -0
  25. data/generators/scaffold_resource/templates/view_show.haml +9 -0
  26. data/init.rb +6 -0
  27. data/install.rb +1 -0
  28. data/lib/resource_controller.rb +11 -0
  29. data/lib/resource_controller/accessors.rb +76 -0
  30. data/lib/resource_controller/action_options.rb +28 -0
  31. data/lib/resource_controller/actions.rb +75 -0
  32. data/lib/resource_controller/base.rb +15 -0
  33. data/lib/resource_controller/class_methods.rb +22 -0
  34. data/lib/resource_controller/controller.rb +63 -0
  35. data/lib/resource_controller/failable_action_options.rb +17 -0
  36. data/lib/resource_controller/helpers.rb +28 -0
  37. data/lib/resource_controller/helpers/current_objects.rb +69 -0
  38. data/lib/resource_controller/helpers/internal.rb +59 -0
  39. data/lib/resource_controller/helpers/nested.rb +45 -0
  40. data/lib/resource_controller/helpers/urls.rb +124 -0
  41. data/lib/resource_controller/response_collector.rb +21 -0
  42. data/lib/urligence.rb +50 -0
  43. data/rails/init.rb +1 -0
  44. data/test/Rakefile +10 -0
  45. data/test/app/controllers/application.rb +7 -0
  46. data/test/app/controllers/cms/options_controller.rb +3 -0
  47. data/test/app/controllers/cms/products_controller.rb +2 -0
  48. data/test/app/controllers/comments_controller.rb +3 -0
  49. data/test/app/controllers/people_controller.rb +9 -0
  50. data/test/app/controllers/photos_controller.rb +10 -0
  51. data/test/app/controllers/posts_controller.rb +10 -0
  52. data/test/app/controllers/projects_controller.rb +3 -0
  53. data/test/app/controllers/somethings_controller.rb +3 -0
  54. data/test/app/controllers/tags_controller.rb +13 -0
  55. data/test/app/controllers/users_controller.rb +12 -0
  56. data/test/app/helpers/application_helper.rb +3 -0
  57. data/test/app/helpers/cms/products_helper.rb +2 -0
  58. data/test/app/helpers/comments_helper.rb +2 -0
  59. data/test/app/helpers/options_helper.rb +2 -0
  60. data/test/app/helpers/people_helper.rb +2 -0
  61. data/test/app/helpers/photos_helper.rb +2 -0
  62. data/test/app/helpers/posts_helper.rb +2 -0
  63. data/test/app/helpers/projects_helper.rb +2 -0
  64. data/test/app/helpers/somethings_helper.rb +2 -0
  65. data/test/app/helpers/tags_helper.rb +2 -0
  66. data/test/app/helpers/users_helper.rb +2 -0
  67. data/test/app/models/account.rb +3 -0
  68. data/test/app/models/comment.rb +3 -0
  69. data/test/app/models/option.rb +3 -0
  70. data/test/app/models/photo.rb +4 -0
  71. data/test/app/models/post.rb +3 -0
  72. data/test/app/models/product.rb +3 -0
  73. data/test/app/models/project.rb +2 -0
  74. data/test/app/models/something.rb +2 -0
  75. data/test/app/models/tag.rb +3 -0
  76. data/test/app/views/cms/options/edit.rhtml +17 -0
  77. data/test/app/views/cms/options/index.rhtml +20 -0
  78. data/test/app/views/cms/options/new.rhtml +16 -0
  79. data/test/app/views/cms/options/show.rhtml +8 -0
  80. data/test/app/views/cms/products/edit.rhtml +17 -0
  81. data/test/app/views/cms/products/index.rhtml +20 -0
  82. data/test/app/views/cms/products/new.rhtml +16 -0
  83. data/test/app/views/cms/products/show.rhtml +8 -0
  84. data/test/app/views/comments/edit.rhtml +27 -0
  85. data/test/app/views/comments/index.rhtml +24 -0
  86. data/test/app/views/comments/new.rhtml +26 -0
  87. data/test/app/views/comments/show.rhtml +18 -0
  88. data/test/app/views/layouts/application.rhtml +17 -0
  89. data/test/app/views/layouts/comments.rhtml +17 -0
  90. data/test/app/views/layouts/options.rhtml +17 -0
  91. data/test/app/views/layouts/people.rhtml +17 -0
  92. data/test/app/views/layouts/photos.rhtml +17 -0
  93. data/test/app/views/layouts/projects.rhtml +17 -0
  94. data/test/app/views/layouts/somethings.rhtml +17 -0
  95. data/test/app/views/layouts/tags.rhtml +17 -0
  96. data/test/app/views/people/edit.rhtml +17 -0
  97. data/test/app/views/people/index.rhtml +20 -0
  98. data/test/app/views/people/new.rhtml +16 -0
  99. data/test/app/views/people/show.rhtml +8 -0
  100. data/test/app/views/photos/edit.rhtml +17 -0
  101. data/test/app/views/photos/index.rhtml +20 -0
  102. data/test/app/views/photos/new.rhtml +16 -0
  103. data/test/app/views/photos/show.rhtml +8 -0
  104. data/test/app/views/posts/edit.rhtml +22 -0
  105. data/test/app/views/posts/index.rhtml +22 -0
  106. data/test/app/views/posts/new.rhtml +21 -0
  107. data/test/app/views/posts/show.rhtml +13 -0
  108. data/test/app/views/projects/edit.rhtml +17 -0
  109. data/test/app/views/projects/index.rhtml +20 -0
  110. data/test/app/views/projects/new.rhtml +16 -0
  111. data/test/app/views/projects/show.rhtml +8 -0
  112. data/test/app/views/somethings/edit.rhtml +17 -0
  113. data/test/app/views/somethings/index.rhtml +20 -0
  114. data/test/app/views/somethings/new.rhtml +16 -0
  115. data/test/app/views/somethings/show.rhtml +8 -0
  116. data/test/app/views/tags/edit.rhtml +17 -0
  117. data/test/app/views/tags/index.rhtml +20 -0
  118. data/test/app/views/tags/index.rjs +0 -0
  119. data/test/app/views/tags/new.rhtml +16 -0
  120. data/test/app/views/tags/show.rhtml +8 -0
  121. data/test/app/views/users/edit.rhtml +17 -0
  122. data/test/app/views/users/index.rhtml +20 -0
  123. data/test/app/views/users/new.rhtml +16 -0
  124. data/test/app/views/users/show.rhtml +8 -0
  125. data/test/config/boot.rb +45 -0
  126. data/test/config/database.yml +16 -0
  127. data/test/config/environment.rb +64 -0
  128. data/test/config/environments/development.rb +21 -0
  129. data/test/config/environments/test.rb +19 -0
  130. data/test/config/routes.rb +51 -0
  131. data/test/db/migrate/001_create_posts.rb +12 -0
  132. data/test/db/migrate/002_create_products.rb +11 -0
  133. data/test/db/migrate/003_create_comments.rb +13 -0
  134. data/test/db/migrate/004_create_options.rb +12 -0
  135. data/test/db/migrate/005_create_photos.rb +11 -0
  136. data/test/db/migrate/006_create_tags.rb +17 -0
  137. data/test/db/migrate/007_create_somethings.rb +11 -0
  138. data/test/db/migrate/008_create_accounts.rb +11 -0
  139. data/test/db/migrate/009_add_account_id_to_photos.rb +9 -0
  140. data/test/db/migrate/010_create_projects.rb +11 -0
  141. data/test/db/schema.rb +65 -0
  142. data/test/script/console +3 -0
  143. data/test/script/destroy +3 -0
  144. data/test/script/generate +3 -0
  145. data/test/script/server +3 -0
  146. data/test/test/fixtures/accounts.yml +7 -0
  147. data/test/test/fixtures/comments.yml +11 -0
  148. data/test/test/fixtures/options.yml +9 -0
  149. data/test/test/fixtures/photos.yml +9 -0
  150. data/test/test/fixtures/photos_tags.yml +3 -0
  151. data/test/test/fixtures/posts.yml +9 -0
  152. data/test/test/fixtures/products.yml +7 -0
  153. data/test/test/fixtures/projects.yml +7 -0
  154. data/test/test/fixtures/somethings.yml +7 -0
  155. data/test/test/fixtures/tags.yml +7 -0
  156. data/test/test/functional/cms/options_controller_test.rb +20 -0
  157. data/test/test/functional/cms/products_controller_test.rb +18 -0
  158. data/test/test/functional/comments_controller_test.rb +26 -0
  159. data/test/test/functional/people_controller_test.rb +34 -0
  160. data/test/test/functional/photos_controller_test.rb +128 -0
  161. data/test/test/functional/posts_controller_test.rb +34 -0
  162. data/test/test/functional/projects_controller_test.rb +18 -0
  163. data/test/test/functional/somethings_controller_test.rb +28 -0
  164. data/test/test/functional/tags_controller_test.rb +64 -0
  165. data/test/test/functional/users_controller_test.rb +24 -0
  166. data/test/test/test_helper.rb +12 -0
  167. data/test/test/unit/accessors_test.rb +91 -0
  168. data/test/test/unit/account_test.rb +7 -0
  169. data/test/test/unit/action_options_test.rb +66 -0
  170. data/test/test/unit/base_test.rb +11 -0
  171. data/test/test/unit/comment_test.rb +10 -0
  172. data/test/test/unit/failable_action_options_test.rb +50 -0
  173. data/test/test/unit/helpers/current_objects_test.rb +127 -0
  174. data/test/test/unit/helpers/internal_test.rb +88 -0
  175. data/test/test/unit/helpers/nested_test.rb +82 -0
  176. data/test/test/unit/helpers/urls_test.rb +71 -0
  177. data/test/test/unit/helpers_test.rb +25 -0
  178. data/test/test/unit/option_test.rb +10 -0
  179. data/test/test/unit/photo_test.rb +10 -0
  180. data/test/test/unit/post_test.rb +10 -0
  181. data/test/test/unit/project_test.rb +10 -0
  182. data/test/test/unit/response_collector_test.rb +31 -0
  183. data/test/test/unit/something_test.rb +10 -0
  184. data/test/test/unit/tag_test.rb +10 -0
  185. data/test/test/unit/urligence_test.rb +203 -0
  186. data/test/vendor/plugins/shoulda/README +123 -0
  187. data/test/vendor/plugins/shoulda/Rakefile +29 -0
  188. data/test/vendor/plugins/shoulda/bin/convert_to_should_syntax +40 -0
  189. data/test/vendor/plugins/shoulda/init.rb +3 -0
  190. data/test/vendor/plugins/shoulda/lib/shoulda.rb +47 -0
  191. data/test/vendor/plugins/shoulda/lib/shoulda/active_record_helpers.rb +338 -0
  192. data/test/vendor/plugins/shoulda/lib/shoulda/color.rb +77 -0
  193. data/test/vendor/plugins/shoulda/lib/shoulda/context.rb +143 -0
  194. data/test/vendor/plugins/shoulda/lib/shoulda/controller_tests/controller_tests.rb +470 -0
  195. data/test/vendor/plugins/shoulda/lib/shoulda/controller_tests/formats/html.rb +192 -0
  196. data/test/vendor/plugins/shoulda/lib/shoulda/controller_tests/formats/xml.rb +162 -0
  197. data/test/vendor/plugins/shoulda/lib/shoulda/general.rb +119 -0
  198. data/test/vendor/plugins/shoulda/lib/shoulda/private_helpers.rb +17 -0
  199. data/test/vendor/plugins/shoulda/tasks/list_tests.rake +40 -0
  200. data/uninstall.rb +1 -0
  201. metadata +410 -0
@@ -0,0 +1,88 @@
1
+ require File.dirname(__FILE__)+'/../../test_helper'
2
+
3
+ class Helpers::InternalTest < Test::Unit::TestCase
4
+ def setup
5
+ @controller = PostsController.new
6
+
7
+ @params = stub :[] => "1"
8
+ @controller.stubs(:params).returns(@params)
9
+
10
+ @object = Post.new
11
+ Post.stubs(:find).with("1").returns(@object)
12
+
13
+ @collection = mock()
14
+ Post.stubs(:find).with(:all).returns(@collection)
15
+ end
16
+
17
+ context "response_for" do
18
+ setup do
19
+ @options = ResourceController::ActionOptions.new
20
+ @options.response {|wants| wants.html}
21
+ @controller.expects(:respond_to).yields(mock(:html => ""))
22
+ @controller.stubs(:options_for).with(:create).returns( @options )
23
+ end
24
+
25
+ should "yield a wants object to the response block" do
26
+ @controller.send :response_for, :create
27
+ end
28
+ end
29
+
30
+ context "after" do
31
+ setup do
32
+ @options = ResourceController::FailableActionOptions.new
33
+ @options.success.after { }
34
+ @controller.stubs(:options_for).with(:create).returns( @options )
35
+ @nil_options = ResourceController::FailableActionOptions.new
36
+ @controller.stubs(:options_for).with(:non_existent).returns(@nil_options)
37
+ end
38
+
39
+ should "grab the correct block for after create" do
40
+ @controller.send :after, :create
41
+ end
42
+
43
+ should "not choke if there is no block" do
44
+ assert_nothing_raised do
45
+ @controller.send :after, :non_existent
46
+ end
47
+ end
48
+ end
49
+
50
+ context "before" do
51
+ setup do
52
+ PostsController.stubs(:non_existent).returns ResourceController::ActionOptions.new
53
+ end
54
+
55
+ should "not choke if there is no block" do
56
+ assert_nothing_raised do
57
+ @controller.send :before, :non_existent
58
+ end
59
+ end
60
+ end
61
+
62
+ context "get options for action" do
63
+ setup do
64
+ @create = ResourceController::FailableActionOptions.new
65
+ PostsController.stubs(:create).returns @create
66
+ end
67
+
68
+ should "get correct object for failure action" do
69
+ assert_equal @create.fails, @controller.send(:options_for, :create_fails)
70
+ end
71
+
72
+ should "get correct object for successful action" do
73
+ assert_equal @create.success, @controller.send(:options_for, :create)
74
+ end
75
+
76
+ should "get correct object for non-failable action" do
77
+ @index = ResourceController::ActionOptions.new
78
+ PostsController.stubs(:index).returns @index
79
+ assert_equal @index, @controller.send(:options_for, :index)
80
+ end
81
+
82
+ should "understand new_action to mean new" do
83
+ @new_action = ResourceController::ActionOptions.new
84
+ PostsController.stubs(:new_action).returns @new_action
85
+ assert_equal @new_action, @controller.send(:options_for, :new_action)
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,82 @@
1
+ require File.dirname(__FILE__)+'/../../test_helper'
2
+
3
+ class PostsControllerMock
4
+ include ResourceController::Helpers
5
+ extend ResourceController::Accessors
6
+ class_reader_writer :belongs_to
7
+ end
8
+
9
+ class CommentsControllerMock
10
+ include ResourceController::Helpers
11
+ extend ResourceController::Accessors
12
+ class_reader_writer :belongs_to
13
+ belongs_to :post
14
+ end
15
+
16
+ class Helpers::NestedTest < Test::Unit::TestCase
17
+ def setup
18
+ @controller = PostsControllerMock.new
19
+
20
+ @params = stub :[] => "1"
21
+ @controller.stubs(:params).returns(@params)
22
+
23
+ @object = Post.new
24
+ Post.stubs(:find).with("1").returns(@object)
25
+
26
+ @collection = mock()
27
+ Post.stubs(:find).with(:all).returns(@collection)
28
+ end
29
+
30
+ context "parent type helper" do
31
+ setup do
32
+ @comments_controller = CommentsControllerMock.new
33
+ @comment_params = stub()
34
+ @comment_params.stubs(:[]).with(:post_id).returns 2
35
+
36
+ @comments_controller.stubs(:params).returns(@comment_params)
37
+ end
38
+
39
+ should "get the params for the current parent" do
40
+ assert_equal :post, @comments_controller.send(:parent_type)
41
+ end
42
+
43
+ context "with multiple possible parents" do
44
+ setup do
45
+ CommentsControllerMock.class_eval do
46
+ belongs_to :post, :product
47
+ end
48
+
49
+ @comment_params = stub()
50
+ @comment_params.stubs(:[]).with(:product_id).returns 5
51
+ @comment_params.stubs(:[]).with(:post_id).returns nil
52
+ @comments_controller.stubs(:params).returns(@comment_params)
53
+ end
54
+
55
+ should "get the params for whatever models are available" do
56
+ assert_equal :product, @comments_controller.send(:parent_type)
57
+ end
58
+ end
59
+
60
+ context "with no possible parent" do
61
+ should "return nil" do
62
+ assert_nil @controller.send(:parent_type)
63
+ end
64
+ end
65
+ end
66
+
67
+ context "parent object helper" do
68
+ setup do
69
+ @comments_controller = CommentsControllerMock.new
70
+ @comment_params = stub()
71
+ @comment_params.stubs(:[]).with(:post_id).returns 2
72
+
73
+ @comments_controller.stubs(:params).returns(@comment_params)
74
+ @post = Post.new
75
+ Post.stubs(:find).with(2).returns @post
76
+ end
77
+
78
+ should "return post with id 2" do
79
+ assert_equal @post, @comments_controller.send(:parent_object)
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,71 @@
1
+ require File.dirname(__FILE__)+'/../../test_helper'
2
+
3
+ class Helpers::UrlsTest < Test::Unit::TestCase
4
+ def setup
5
+ @controller = PostsController.new
6
+
7
+ @params = stub :[] => "1"
8
+ @controller.stubs(:params).returns(@params)
9
+
10
+ @object = Post.new
11
+ Post.stubs(:find).with("1").returns(@object)
12
+
13
+ @collection = mock()
14
+ Post.stubs(:find).with(:all).returns(@collection)
15
+ end
16
+
17
+ context "*_url_options helpers" do
18
+ setup do
19
+ @products_controller = ::Cms::ProductsController.new
20
+
21
+ @products_controller.stubs(:params).returns(@params)
22
+
23
+ @product = Product.new
24
+ Product.stubs(:find).with("1").returns(@product)
25
+ end
26
+
27
+ should "return the correct collection options" do
28
+ assert_equal [nil, :posts], @controller.send(:collection_url_options)
29
+ end
30
+
31
+ should "return the correct object options" do
32
+ assert_equal [nil, nil, [:post, @object]], @controller.send(:object_url_options)
33
+ end
34
+
35
+ should "return the correct collection options for a namespaced controller" do
36
+ assert_equal [:cms, nil, :products], @products_controller.send(:collection_url_options)
37
+ end
38
+
39
+ should "return the correct object options for a namespaced controller" do
40
+ assert_equal [nil, :cms, nil, [:product, @product]], @products_controller.send(:object_url_options)
41
+ end
42
+
43
+ should "return the correct object options when passed an action" do
44
+ assert_equal [:edit, :cms, nil, [:product, @product]], @products_controller.send(:object_url_options, :edit)
45
+ end
46
+
47
+ should "accept an alternate object when passed one" do
48
+ p = Product.new
49
+ assert_equal [nil, :cms, nil, [:product, p]], @products_controller.send(:object_url_options, nil, p)
50
+ end
51
+
52
+ context "with parent" do
53
+ setup do
54
+ @params = stub :parent_type => 'user'
55
+ @user = mock
56
+ @controller.expects(:parent_object).returns @user
57
+ @controller.expects(:parent?).returns(true)
58
+ @controller.expects(:parent_type).returns "user"
59
+ end
60
+
61
+ should "return the correct object options for object_url_options" do
62
+ @controller.expects(:object).returns @object
63
+ assert_equal [:edit, [:user, @user], [:post, @object]], @controller.send(:object_url_options, :edit)
64
+ end
65
+
66
+ should "return the correct object options for collection" do
67
+ assert_equal [[:user, @user], :posts], @controller.send(:collection_url_options)
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,25 @@
1
+ require File.dirname(__FILE__)+'/../test_helper'
2
+
3
+ class HelpersTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @controller = PostsController.new
7
+
8
+ @params = stub :[] => "1"
9
+ @controller.stubs(:params).returns(@params)
10
+
11
+ @object = Post.new
12
+ Post.stubs(:find).with("1").returns(@object)
13
+
14
+ @collection = mock()
15
+ Post.stubs(:find).with(:all).returns(@collection)
16
+ end
17
+
18
+ ResourceController::NAME_ACCESSORS.each do |accessor|
19
+ context "#{accessor} accessor" do
20
+ should "default to returning the singular name of the controller" do
21
+ assert_equal "post", @controller.send(accessor)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class OptionTest < Test::Unit::TestCase
4
+ fixtures :options
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class PhotoTest < Test::Unit::TestCase
4
+ fixtures :photos
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class PostTest < Test::Unit::TestCase
4
+ fixtures :posts
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class ProjectTest < Test::Unit::TestCase
4
+ fixtures :projects
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -0,0 +1,31 @@
1
+ require File.dirname(__FILE__)+'/../test_helper'
2
+
3
+ class ResponseCollectorTest < Test::Unit::TestCase
4
+ context "yielding a block to a collector object" do
5
+ setup do
6
+ @collector = ResourceController::ResponseCollector.new
7
+ block = lambda do |wants|
8
+ wants.html {}
9
+ wants.js {}
10
+ wants.xml
11
+ end
12
+ block.call(@collector)
13
+ end
14
+
15
+ should "collect responses" do
16
+ assert_equal Proc, @collector[:html][1].class, @collector[:html].inspect
17
+ assert_equal Proc, @collector[:js][1].class, @collector[:js].inspect
18
+ assert @collector[:xml][1].nil?, @collector[:xml].inspect
19
+ end
20
+
21
+ should "clear responses with clear method" do
22
+ @collector.clear
23
+ assert @collector.responses.empty?
24
+ end
25
+
26
+ should "destroy methods before readding them, if they're already there" do
27
+ @collector.html
28
+ assert @collector[:html][1].nil?
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class SomethingTest < Test::Unit::TestCase
4
+ fixtures :somethings
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TagTest < Test::Unit::TestCase
4
+ fixtures :tags
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -0,0 +1,203 @@
1
+ require File.dirname(__FILE__)+'/../test_helper'
2
+ require 'urligence'
3
+
4
+ class PhotosController
5
+ include Urligence
6
+ end
7
+
8
+ class UrligenceTest < Test::Unit::TestCase
9
+ def setup
10
+ @controller = PhotosController.new
11
+ @tag = stub(:class => stub(:name => "Tag"), :to_param => 'awesomestuff')
12
+ @photo = stub(:class => stub(:name => "Photo"), :to_param => 1)
13
+ end
14
+
15
+ context "with one object" do
16
+ setup do
17
+ setup_mocks "/photos/#{@photo.to_param}", :photo, @photo
18
+ end
19
+
20
+ context "urligence" do
21
+ should "return the correct path" do
22
+ assert_equal @expected_path, @controller.urligence(@photo, :path)
23
+ end
24
+ end
25
+
26
+ context "smart_url" do
27
+ should "return the correct url" do
28
+ assert_equal @expected_url, @controller.smart_url(@photo)
29
+ end
30
+ end
31
+
32
+ context "smart_path" do
33
+ should "return the correct path" do
34
+ assert_equal @expected_path, @controller.smart_path(@photo)
35
+ end
36
+ end
37
+ end
38
+
39
+ context "with two objects" do
40
+ setup do
41
+ setup_mocks "/tags/#{@tag.to_param}/photos/#{@photo.to_param}", :tag_photo, @tag, @photo
42
+ end
43
+
44
+ should "return the correct path" do
45
+ assert_equal @expected_path, @controller.urligence(@tag, @photo, :path)
46
+ end
47
+ end
48
+
49
+ context "with a namespace as first param" do
50
+ setup do
51
+ setup_mocks "/admin/tags/#{@tag.to_param}/photos/#{@photo.to_param}", :admin_tag_photo, @tag, @photo
52
+ end
53
+
54
+ should "return the correct path" do
55
+ assert_equal @expected_path, @controller.urligence(:admin, @tag, @photo, :path)
56
+ end
57
+ end
58
+
59
+ context "with many nil options anywhere in the arguments" do
60
+ setup do
61
+ setup_mocks "/tags/#{@tag.to_param}/photos/#{@photo.to_param}", :tag_photo, @tag, @photo
62
+ end
63
+
64
+ should "return the correct path" do
65
+ assert_equal @expected_path, @controller.urligence(nil, nil, nil, @tag, nil, @photo, nil, :path)
66
+ end
67
+ end
68
+
69
+ context "with a symbol as the last parameter" do
70
+ setup do
71
+ setup_mocks "/tags/#{@tag.to_param}/photos", :tag_photos, @tag
72
+ end
73
+
74
+ should "use that as the last fragment of the url" do
75
+ assert_equal @expected_path, @controller.urligence(@tag, :photos, :path)
76
+ end
77
+ end
78
+
79
+ context "with a symbol as the only parameter" do
80
+ setup do
81
+ setup_mocks "/photos", :photos
82
+ end
83
+
84
+ should "use that as the only url fragment" do
85
+ assert_equal @expected_path, @controller.urligence(nil, :photos, :path)
86
+ end
87
+ end
88
+
89
+ context "with a namespace, and a plural symbol" do
90
+ setup do
91
+ setup_mocks "/admin/products", :admin_products
92
+ end
93
+
94
+ should "call the correct url handler" do
95
+ assert_equal @expected_path, @controller.urligence(:admin, :products, :path)
96
+ end
97
+ end
98
+
99
+ context "with only symbols" do
100
+ setup do
101
+ setup_mocks '/admin/products/new', :new_admin_products
102
+ end
103
+
104
+ should "return the correct path" do
105
+ assert_equal @expected_path, @controller.urligence(:new, :admin, :products, :path)
106
+ end
107
+ end
108
+
109
+ context "with array parameters for specifying the names of routes that don't match the class name of the object" do
110
+ setup do
111
+ setup_mocks '/something_tags/1', :something_tag, @tag
112
+ end
113
+
114
+ context "urligence" do
115
+ should "use the name of the symbol as the url fragment" do
116
+ assert_equal @expected_path, @controller.urligence([:something_tag, @tag], :path)
117
+ end
118
+ end
119
+
120
+ context "smart_url" do
121
+ should "return the correct path" do
122
+ assert_equal @expected_url, @controller.smart_url([:something_tag, @tag])
123
+ end
124
+ end
125
+
126
+ context "smart_path" do
127
+ should "return the correct path" do
128
+ assert_equal @expected_path, @controller.smart_path([:something_tag, @tag])
129
+ end
130
+ end
131
+ end
132
+
133
+ context "with array parameters and a namespace" do
134
+ setup do
135
+ setup_mocks '/admin/something_tags/1', :admin_something_tag, @tag
136
+ end
137
+
138
+ should "return the correct url" do
139
+ assert_equal @expected_path, @controller.urligence(:admin, [:something_tag, @tag], :path)
140
+ end
141
+ end
142
+
143
+ context "with array parameters, a namespace, and an ending symbol" do
144
+ setup do
145
+ setup_mocks '/admin/something_tags/1/photos', :admin_something_tag_photos, @tag
146
+ end
147
+
148
+ should "return the correct url" do
149
+ assert_equal @expected_path, @controller.urligence(:admin, [:something_tag, @tag], :photos, :path)
150
+ end
151
+ end
152
+
153
+ context "with array parameters, a symbol namespace, and normal model parameters" do
154
+ setup do
155
+ setup_mocks '/admin/something_tags/1/photos/1', :admin_something_tag_photo, @tag, @photo
156
+ end
157
+
158
+ should "return the correct url" do
159
+ assert_equal @expected_path, @controller.urligence(:admin, [:something_tag, @tag], @photo, :path)
160
+ end
161
+ end
162
+
163
+ context "hash_for" do
164
+ context "url" do
165
+ setup do
166
+ @controller.stubs(:hash_for_photo_tag_url).with(:id => @tag.to_param, :photo_id => @photo.to_param).returns("something")
167
+ end
168
+
169
+ should "return the correct hash" do
170
+ assert_equal "something", @controller.hash_for_smart_url(@photo, @tag)
171
+ end
172
+ end
173
+
174
+ context "path" do
175
+ setup do
176
+ @photo_tag = stub(:class => stub(:name => "PhotoTag"), :to_param => 'awesomestuff')
177
+ @controller.stubs(:hash_for_photo_tag_path).with(:id => @tag.to_param, :photo_id => @photo.to_param).returns("something")
178
+ end
179
+
180
+ should "return the correct hash" do
181
+ assert_equal "something", @controller.hash_for_smart_path(@photo, [:tag, @photo_tag])
182
+ end
183
+ end
184
+
185
+ context "collection path" do
186
+ setup do
187
+ @controller.stubs(:hash_for_photos_path).with({}).returns('something')
188
+ end
189
+
190
+ should "call the correct methods" do
191
+ assert_equal 'something', @controller.hash_for_smart_path(:photos)
192
+ end
193
+ end
194
+ end
195
+
196
+ private
197
+ def setup_mocks(expected_path, method, *params)
198
+ @expected_path = expected_path
199
+ @controller.stubs("#{method}_path".to_sym).with(*params).returns(@expected_path)
200
+ @controller.stubs("#{method}_url".to_sym).with(*params).returns(@expected_url = "http://localhost#{@expected_path}")
201
+ @controller.stubs("hash_for_#{method}_url".to_sym).with(*params).returns(@expected_hash = @expected_url)
202
+ end
203
+ end