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.
- data/LICENSE +22 -0
- data/README +276 -0
- data/Rakefile +55 -0
- data/TODO +1 -0
- data/generators/scaffold_resource/USAGE +29 -0
- data/generators/scaffold_resource/scaffold_resource_generator.rb +101 -0
- data/generators/scaffold_resource/templates/controller.rb +2 -0
- data/generators/scaffold_resource/templates/fixtures.yml +10 -0
- data/generators/scaffold_resource/templates/functional_test.rb +57 -0
- data/generators/scaffold_resource/templates/helper.rb +2 -0
- data/generators/scaffold_resource/templates/migration.rb +15 -0
- data/generators/scaffold_resource/templates/model.rb +2 -0
- data/generators/scaffold_resource/templates/old_migration.rb +13 -0
- data/generators/scaffold_resource/templates/shoulda_functional_test.rb +19 -0
- data/generators/scaffold_resource/templates/unit_test.rb +7 -0
- data/generators/scaffold_resource/templates/view__form.erb +6 -0
- data/generators/scaffold_resource/templates/view__form.haml +5 -0
- data/generators/scaffold_resource/templates/view_edit.erb +16 -0
- data/generators/scaffold_resource/templates/view_edit.haml +11 -0
- data/generators/scaffold_resource/templates/view_index.erb +22 -0
- data/generators/scaffold_resource/templates/view_index.haml +19 -0
- data/generators/scaffold_resource/templates/view_new.erb +12 -0
- data/generators/scaffold_resource/templates/view_new.haml +9 -0
- data/generators/scaffold_resource/templates/view_show.erb +9 -0
- data/generators/scaffold_resource/templates/view_show.haml +9 -0
- data/init.rb +6 -0
- data/install.rb +1 -0
- data/lib/resource_controller.rb +11 -0
- data/lib/resource_controller/accessors.rb +76 -0
- data/lib/resource_controller/action_options.rb +28 -0
- data/lib/resource_controller/actions.rb +75 -0
- data/lib/resource_controller/base.rb +15 -0
- data/lib/resource_controller/class_methods.rb +22 -0
- data/lib/resource_controller/controller.rb +63 -0
- data/lib/resource_controller/failable_action_options.rb +17 -0
- data/lib/resource_controller/helpers.rb +28 -0
- data/lib/resource_controller/helpers/current_objects.rb +69 -0
- data/lib/resource_controller/helpers/internal.rb +59 -0
- data/lib/resource_controller/helpers/nested.rb +45 -0
- data/lib/resource_controller/helpers/urls.rb +124 -0
- data/lib/resource_controller/response_collector.rb +21 -0
- data/lib/urligence.rb +50 -0
- data/rails/init.rb +1 -0
- data/test/Rakefile +10 -0
- data/test/app/controllers/application.rb +7 -0
- data/test/app/controllers/cms/options_controller.rb +3 -0
- data/test/app/controllers/cms/products_controller.rb +2 -0
- data/test/app/controllers/comments_controller.rb +3 -0
- data/test/app/controllers/people_controller.rb +9 -0
- data/test/app/controllers/photos_controller.rb +10 -0
- data/test/app/controllers/posts_controller.rb +10 -0
- data/test/app/controllers/projects_controller.rb +3 -0
- data/test/app/controllers/somethings_controller.rb +3 -0
- data/test/app/controllers/tags_controller.rb +13 -0
- data/test/app/controllers/users_controller.rb +12 -0
- data/test/app/helpers/application_helper.rb +3 -0
- data/test/app/helpers/cms/products_helper.rb +2 -0
- data/test/app/helpers/comments_helper.rb +2 -0
- data/test/app/helpers/options_helper.rb +2 -0
- data/test/app/helpers/people_helper.rb +2 -0
- data/test/app/helpers/photos_helper.rb +2 -0
- data/test/app/helpers/posts_helper.rb +2 -0
- data/test/app/helpers/projects_helper.rb +2 -0
- data/test/app/helpers/somethings_helper.rb +2 -0
- data/test/app/helpers/tags_helper.rb +2 -0
- data/test/app/helpers/users_helper.rb +2 -0
- data/test/app/models/account.rb +3 -0
- data/test/app/models/comment.rb +3 -0
- data/test/app/models/option.rb +3 -0
- data/test/app/models/photo.rb +4 -0
- data/test/app/models/post.rb +3 -0
- data/test/app/models/product.rb +3 -0
- data/test/app/models/project.rb +2 -0
- data/test/app/models/something.rb +2 -0
- data/test/app/models/tag.rb +3 -0
- data/test/app/views/cms/options/edit.rhtml +17 -0
- data/test/app/views/cms/options/index.rhtml +20 -0
- data/test/app/views/cms/options/new.rhtml +16 -0
- data/test/app/views/cms/options/show.rhtml +8 -0
- data/test/app/views/cms/products/edit.rhtml +17 -0
- data/test/app/views/cms/products/index.rhtml +20 -0
- data/test/app/views/cms/products/new.rhtml +16 -0
- data/test/app/views/cms/products/show.rhtml +8 -0
- data/test/app/views/comments/edit.rhtml +27 -0
- data/test/app/views/comments/index.rhtml +24 -0
- data/test/app/views/comments/new.rhtml +26 -0
- data/test/app/views/comments/show.rhtml +18 -0
- data/test/app/views/layouts/application.rhtml +17 -0
- data/test/app/views/layouts/comments.rhtml +17 -0
- data/test/app/views/layouts/options.rhtml +17 -0
- data/test/app/views/layouts/people.rhtml +17 -0
- data/test/app/views/layouts/photos.rhtml +17 -0
- data/test/app/views/layouts/projects.rhtml +17 -0
- data/test/app/views/layouts/somethings.rhtml +17 -0
- data/test/app/views/layouts/tags.rhtml +17 -0
- data/test/app/views/people/edit.rhtml +17 -0
- data/test/app/views/people/index.rhtml +20 -0
- data/test/app/views/people/new.rhtml +16 -0
- data/test/app/views/people/show.rhtml +8 -0
- data/test/app/views/photos/edit.rhtml +17 -0
- data/test/app/views/photos/index.rhtml +20 -0
- data/test/app/views/photos/new.rhtml +16 -0
- data/test/app/views/photos/show.rhtml +8 -0
- data/test/app/views/posts/edit.rhtml +22 -0
- data/test/app/views/posts/index.rhtml +22 -0
- data/test/app/views/posts/new.rhtml +21 -0
- data/test/app/views/posts/show.rhtml +13 -0
- data/test/app/views/projects/edit.rhtml +17 -0
- data/test/app/views/projects/index.rhtml +20 -0
- data/test/app/views/projects/new.rhtml +16 -0
- data/test/app/views/projects/show.rhtml +8 -0
- data/test/app/views/somethings/edit.rhtml +17 -0
- data/test/app/views/somethings/index.rhtml +20 -0
- data/test/app/views/somethings/new.rhtml +16 -0
- data/test/app/views/somethings/show.rhtml +8 -0
- data/test/app/views/tags/edit.rhtml +17 -0
- data/test/app/views/tags/index.rhtml +20 -0
- data/test/app/views/tags/index.rjs +0 -0
- data/test/app/views/tags/new.rhtml +16 -0
- data/test/app/views/tags/show.rhtml +8 -0
- data/test/app/views/users/edit.rhtml +17 -0
- data/test/app/views/users/index.rhtml +20 -0
- data/test/app/views/users/new.rhtml +16 -0
- data/test/app/views/users/show.rhtml +8 -0
- data/test/config/boot.rb +45 -0
- data/test/config/database.yml +16 -0
- data/test/config/environment.rb +64 -0
- data/test/config/environments/development.rb +21 -0
- data/test/config/environments/test.rb +19 -0
- data/test/config/routes.rb +51 -0
- data/test/db/migrate/001_create_posts.rb +12 -0
- data/test/db/migrate/002_create_products.rb +11 -0
- data/test/db/migrate/003_create_comments.rb +13 -0
- data/test/db/migrate/004_create_options.rb +12 -0
- data/test/db/migrate/005_create_photos.rb +11 -0
- data/test/db/migrate/006_create_tags.rb +17 -0
- data/test/db/migrate/007_create_somethings.rb +11 -0
- data/test/db/migrate/008_create_accounts.rb +11 -0
- data/test/db/migrate/009_add_account_id_to_photos.rb +9 -0
- data/test/db/migrate/010_create_projects.rb +11 -0
- data/test/db/schema.rb +65 -0
- data/test/script/console +3 -0
- data/test/script/destroy +3 -0
- data/test/script/generate +3 -0
- data/test/script/server +3 -0
- data/test/test/fixtures/accounts.yml +7 -0
- data/test/test/fixtures/comments.yml +11 -0
- data/test/test/fixtures/options.yml +9 -0
- data/test/test/fixtures/photos.yml +9 -0
- data/test/test/fixtures/photos_tags.yml +3 -0
- data/test/test/fixtures/posts.yml +9 -0
- data/test/test/fixtures/products.yml +7 -0
- data/test/test/fixtures/projects.yml +7 -0
- data/test/test/fixtures/somethings.yml +7 -0
- data/test/test/fixtures/tags.yml +7 -0
- data/test/test/functional/cms/options_controller_test.rb +20 -0
- data/test/test/functional/cms/products_controller_test.rb +18 -0
- data/test/test/functional/comments_controller_test.rb +26 -0
- data/test/test/functional/people_controller_test.rb +34 -0
- data/test/test/functional/photos_controller_test.rb +128 -0
- data/test/test/functional/posts_controller_test.rb +34 -0
- data/test/test/functional/projects_controller_test.rb +18 -0
- data/test/test/functional/somethings_controller_test.rb +28 -0
- data/test/test/functional/tags_controller_test.rb +64 -0
- data/test/test/functional/users_controller_test.rb +24 -0
- data/test/test/test_helper.rb +12 -0
- data/test/test/unit/accessors_test.rb +91 -0
- data/test/test/unit/account_test.rb +7 -0
- data/test/test/unit/action_options_test.rb +66 -0
- data/test/test/unit/base_test.rb +11 -0
- data/test/test/unit/comment_test.rb +10 -0
- data/test/test/unit/failable_action_options_test.rb +50 -0
- data/test/test/unit/helpers/current_objects_test.rb +127 -0
- data/test/test/unit/helpers/internal_test.rb +88 -0
- data/test/test/unit/helpers/nested_test.rb +82 -0
- data/test/test/unit/helpers/urls_test.rb +71 -0
- data/test/test/unit/helpers_test.rb +25 -0
- data/test/test/unit/option_test.rb +10 -0
- data/test/test/unit/photo_test.rb +10 -0
- data/test/test/unit/post_test.rb +10 -0
- data/test/test/unit/project_test.rb +10 -0
- data/test/test/unit/response_collector_test.rb +31 -0
- data/test/test/unit/something_test.rb +10 -0
- data/test/test/unit/tag_test.rb +10 -0
- data/test/test/unit/urligence_test.rb +203 -0
- data/test/vendor/plugins/shoulda/README +123 -0
- data/test/vendor/plugins/shoulda/Rakefile +29 -0
- data/test/vendor/plugins/shoulda/bin/convert_to_should_syntax +40 -0
- data/test/vendor/plugins/shoulda/init.rb +3 -0
- data/test/vendor/plugins/shoulda/lib/shoulda.rb +47 -0
- data/test/vendor/plugins/shoulda/lib/shoulda/active_record_helpers.rb +338 -0
- data/test/vendor/plugins/shoulda/lib/shoulda/color.rb +77 -0
- data/test/vendor/plugins/shoulda/lib/shoulda/context.rb +143 -0
- data/test/vendor/plugins/shoulda/lib/shoulda/controller_tests/controller_tests.rb +470 -0
- data/test/vendor/plugins/shoulda/lib/shoulda/controller_tests/formats/html.rb +192 -0
- data/test/vendor/plugins/shoulda/lib/shoulda/controller_tests/formats/xml.rb +162 -0
- data/test/vendor/plugins/shoulda/lib/shoulda/general.rb +119 -0
- data/test/vendor/plugins/shoulda/lib/shoulda/private_helpers.rb +17 -0
- data/test/vendor/plugins/shoulda/tasks/list_tests.rake +40 -0
- data/uninstall.rb +1 -0
- 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,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,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
|