radar-resource_controller 0.6.6
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.rdoc +336 -0
- data/VERSION.yml +4 -0
- data/generators/scaffold_resource/USAGE +29 -0
- data/generators/scaffold_resource/scaffold_resource_generator.rb +179 -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/rspec/functional_spec.rb +255 -0
- data/generators/scaffold_resource/templates/rspec/helper_spec.rb +11 -0
- data/generators/scaffold_resource/templates/rspec/routing_spec.rb +61 -0
- data/generators/scaffold_resource/templates/rspec/unit_spec.rb +11 -0
- data/generators/scaffold_resource/templates/rspec/views/edit_spec.rb +28 -0
- data/generators/scaffold_resource/templates/rspec/views/index_spec.rb +26 -0
- data/generators/scaffold_resource/templates/rspec/views/new_spec.rb +30 -0
- data/generators/scaffold_resource/templates/rspec/views/show_spec.rb +25 -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/lib/resource_controller/accessors.rb +77 -0
- data/lib/resource_controller/action_options.rb +40 -0
- data/lib/resource_controller/actions.rb +75 -0
- data/lib/resource_controller/base.rb +15 -0
- data/lib/resource_controller/class_methods.rb +24 -0
- data/lib/resource_controller/controller.rb +70 -0
- data/lib/resource_controller/failable_action_options.rb +25 -0
- data/lib/resource_controller/helpers/current_objects.rb +73 -0
- data/lib/resource_controller/helpers/internal.rb +90 -0
- data/lib/resource_controller/helpers/nested.rb +67 -0
- data/lib/resource_controller/helpers/singleton_customizations.rb +64 -0
- data/lib/resource_controller/helpers/urls.rb +132 -0
- data/lib/resource_controller/helpers.rb +28 -0
- data/lib/resource_controller/response_collector.rb +27 -0
- data/lib/resource_controller/singleton.rb +15 -0
- data/lib/resource_controller.rb +26 -0
- data/lib/urligence.rb +50 -0
- data/rails/init.rb +6 -0
- data/test/Rakefile +10 -0
- data/test/app/controllers/accounts_controller.rb +6 -0
- data/test/app/controllers/application_controller.rb +6 -0
- data/test/app/controllers/cms/options_controller.rb +3 -0
- data/test/app/controllers/cms/personnel_controller.rb +2 -0
- data/test/app/controllers/cms/photos_controller.rb +6 -0
- data/test/app/controllers/cms/products_controller.rb +3 -0
- data/test/app/controllers/comments_controller.rb +3 -0
- data/test/app/controllers/images_controller.rb +4 -0
- data/test/app/controllers/options_controller.rb +8 -0
- data/test/app/controllers/people_controller.rb +9 -0
- data/test/app/controllers/photos_controller.rb +12 -0
- data/test/app/controllers/posts_controller.rb +10 -0
- data/test/app/controllers/projects_controller.rb +11 -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/accounts_helper.rb +2 -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/images_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 +4 -0
- data/test/app/models/comment.rb +3 -0
- data/test/app/models/image.rb +3 -0
- data/test/app/models/option.rb +3 -0
- data/test/app/models/personnel.rb +3 -0
- data/test/app/models/photo.rb +5 -0
- data/test/app/models/post.rb +3 -0
- data/test/app/models/product.rb +3 -0
- data/test/app/models/project.rb +3 -0
- data/test/app/models/something.rb +2 -0
- data/test/app/models/tag.rb +3 -0
- data/test/app/models/user.rb +3 -0
- data/test/app/views/accounts/_form.html.erb +4 -0
- data/test/app/views/accounts/edit.html.erb +14 -0
- data/test/app/views/accounts/new.html.erb +12 -0
- data/test/app/views/accounts/show.html.erb +5 -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/photos/edit.rhtml +17 -0
- data/test/app/views/cms/photos/index.rhtml +20 -0
- data/test/app/views/cms/photos/new.rhtml +16 -0
- data/test/app/views/cms/photos/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/images/_form.html.erb +4 -0
- data/test/app/views/images/edit.html.erb +14 -0
- data/test/app/views/images/new.html.erb +12 -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/options/_form.html.erb +8 -0
- data/test/app/views/options/edit.html.erb +16 -0
- data/test/app/views/options/index.html.erb +21 -0
- data/test/app/views/options/new.html.erb +12 -0
- data/test/app/views/options/show.html.erb +10 -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 +110 -0
- data/test/config/database.yml +9 -0
- data/test/config/environment.rb +49 -0
- data/test/config/environments/development.rb +17 -0
- data/test/config/environments/test.rb +19 -0
- data/test/config/initializers/inflections.rb +14 -0
- data/test/config/routes.rb +61 -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 +13 -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/migrate/011_create_images.rb +12 -0
- data/test/db/migrate/012_create_users.rb +11 -0
- data/test/db/migrate/013_create_personnel.rb +11 -0
- data/test/db/migrate/014_add_personnel_id_to_photos.rb +9 -0
- data/test/db/schema.rb +78 -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/images.yml +6 -0
- data/test/test/fixtures/options.yml +9 -0
- data/test/test/fixtures/personnel.yml +5 -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/fixtures/users.yml +5 -0
- data/test/test/functional/cms/options_controller_test.rb +23 -0
- data/test/test/functional/cms/photos_controller_test.rb +43 -0
- data/test/test/functional/cms/products_controller_test.rb +23 -0
- data/test/test/functional/comments_controller_test.rb +26 -0
- data/test/test/functional/images_controller_test.rb +37 -0
- data/test/test/functional/people_controller_test.rb +34 -0
- data/test/test/functional/photos_controller_test.rb +130 -0
- data/test/test/functional/posts_controller_test.rb +34 -0
- data/test/test/functional/projects_controller_test.rb +44 -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 +13 -0
- data/test/test/unit/accessors_test.rb +110 -0
- data/test/test/unit/account_test.rb +7 -0
- data/test/test/unit/action_options_test.rb +109 -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 +77 -0
- data/test/test/unit/helpers/current_objects_test.rb +133 -0
- data/test/test/unit/helpers/internal_test.rb +106 -0
- data/test/test/unit/helpers/nested_test.rb +86 -0
- data/test/test/unit/helpers/singleton_current_objects_test.rb +68 -0
- data/test/test/unit/helpers/singleton_nested_test.rb +77 -0
- data/test/test/unit/helpers/singleton_urls_test.rb +67 -0
- data/test/test/unit/helpers/urls_test.rb +75 -0
- data/test/test/unit/helpers_test.rb +25 -0
- data/test/test/unit/image_test.rb +7 -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 +49 -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
- metadata +383 -0
@@ -0,0 +1,133 @@
|
|
1
|
+
require File.dirname(__FILE__)+'/../../test_helper'
|
2
|
+
|
3
|
+
class Helpers::CurrentObjectsTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@controller = PostsController.new
|
6
|
+
|
7
|
+
@params = stub :[] => "1"
|
8
|
+
@controller.stubs(:params).returns(@params)
|
9
|
+
|
10
|
+
@request = stub :path => ""
|
11
|
+
@controller.stubs(:request).returns(@request)
|
12
|
+
|
13
|
+
@object = Post.new
|
14
|
+
Post.stubs(:find).with("1").returns(@object)
|
15
|
+
|
16
|
+
@collection = mock()
|
17
|
+
Post.stubs(:find).with(:all).returns(@collection)
|
18
|
+
end
|
19
|
+
|
20
|
+
context "model helper" do
|
21
|
+
should "return constant" do
|
22
|
+
assert_equal Post, @controller.send(:model)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context "collection helper" do
|
27
|
+
should "find all" do
|
28
|
+
assert_equal @collection, @controller.send(:collection)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context "param helper" do
|
33
|
+
should "return the correct param" do
|
34
|
+
assert_equal "1", @controller.send(:param)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "object helper" do
|
39
|
+
should "find the correct object" do
|
40
|
+
assert_equal @object, @controller.send(:object)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "load object helper" do
|
45
|
+
setup do
|
46
|
+
@controller.send(:load_object)
|
47
|
+
end
|
48
|
+
|
49
|
+
should "load object as instance variable" do
|
50
|
+
assert_equal @object, @controller.instance_variable_get("@post")
|
51
|
+
end
|
52
|
+
|
53
|
+
context "with an alternate object_name" do
|
54
|
+
setup do
|
55
|
+
@controller.stubs(:object_name).returns('asdf')
|
56
|
+
@controller.send(:load_object)
|
57
|
+
end
|
58
|
+
|
59
|
+
should "use the variable name" do
|
60
|
+
assert_equal @object, @controller.instance_variable_get("@asdf")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context "load_collection helper" do
|
66
|
+
context "with resource_name" do
|
67
|
+
setup do
|
68
|
+
@controller.send(:load_collection)
|
69
|
+
end
|
70
|
+
|
71
|
+
should "load collection in to instance variable with plural model_name" do
|
72
|
+
assert_equal @collection, @controller.instance_variable_get("@posts")
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context "object params helper" do
|
78
|
+
context "without alternate variable name" do
|
79
|
+
setup do
|
80
|
+
@params.expects(:[]).with("post").returns(2)
|
81
|
+
end
|
82
|
+
|
83
|
+
should "get params for object" do
|
84
|
+
assert_equal 2, @controller.send(:object_params)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context "with alternate object_name" do
|
89
|
+
setup do
|
90
|
+
@params.expects(:[]).with("something").returns(3)
|
91
|
+
@controller.expects(:object_name).returns("something")
|
92
|
+
end
|
93
|
+
|
94
|
+
should "use variable name" do
|
95
|
+
assert_equal 3, @controller.send(:object_params)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context "build object helper" do
|
101
|
+
context "with no parents" do
|
102
|
+
setup do
|
103
|
+
Post.expects(:new).with("1").returns("a new post")
|
104
|
+
end
|
105
|
+
|
106
|
+
should "build new object" do
|
107
|
+
assert_equal "a new post", @controller.send(:build_object)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context "with parent" do
|
112
|
+
setup do
|
113
|
+
@comments_controller = CommentsController.new
|
114
|
+
@comment_params = stub()
|
115
|
+
@comment_params.stubs(:[]).with(:post_id).returns 2
|
116
|
+
@comment_params.stubs(:[]).with('comment').returns ""
|
117
|
+
@comments_controller.stubs(:params).returns(@comment_params)
|
118
|
+
|
119
|
+
@request = stub :path => ""
|
120
|
+
@comments_controller.stubs(:request).returns(@request)
|
121
|
+
|
122
|
+
Post.expects(:find).with(2).returns(Post.new)
|
123
|
+
@comments = stub()
|
124
|
+
@comments.expects(:build).with("").returns("a new comment")
|
125
|
+
Post.any_instance.stubs(:comments).returns(@comments)
|
126
|
+
end
|
127
|
+
|
128
|
+
should "build new object" do
|
129
|
+
assert_equal "a new comment", @comments_controller.send(:build_object)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,106 @@
|
|
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
|
+
|
89
|
+
context "flash now helper" do
|
90
|
+
setup do
|
91
|
+
klass = Class.new do
|
92
|
+
include ResourceController::Helpers::Internal
|
93
|
+
end
|
94
|
+
|
95
|
+
@c = klass.new
|
96
|
+
@c.stubs(:options_for).returns(stub(:flash_now => 'something'))
|
97
|
+
flash_now = mock()
|
98
|
+
flash_now.expects(:[]=).with(:notice, 'something')
|
99
|
+
@c.stubs(:flash).returns(stub(:now => flash_now))
|
100
|
+
end
|
101
|
+
|
102
|
+
should "set the flash_now" do
|
103
|
+
@c.send :set_flash_now, :new
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,86 @@
|
|
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
|
+
@request = stub :path => ""
|
24
|
+
@controller.stubs(:request).returns(@request)
|
25
|
+
|
26
|
+
@object = Post.new
|
27
|
+
Post.stubs(:find).with("1").returns(@object)
|
28
|
+
|
29
|
+
@collection = mock()
|
30
|
+
Post.stubs(:find).with(:all).returns(@collection)
|
31
|
+
end
|
32
|
+
|
33
|
+
context "parent type helper" do
|
34
|
+
setup do
|
35
|
+
@comments_controller = CommentsControllerMock.new
|
36
|
+
@comment_params = stub()
|
37
|
+
@comment_params.stubs(:[]).with(:post_id).returns 2
|
38
|
+
|
39
|
+
@comments_controller.stubs(:params).returns(@comment_params)
|
40
|
+
end
|
41
|
+
|
42
|
+
should "get the params for the current parent" do
|
43
|
+
assert_equal :post, @comments_controller.send(:parent_type)
|
44
|
+
end
|
45
|
+
|
46
|
+
context "with multiple possible parents" do
|
47
|
+
setup do
|
48
|
+
CommentsControllerMock.class_eval do
|
49
|
+
belongs_to :post, :product
|
50
|
+
end
|
51
|
+
|
52
|
+
@comment_params = stub()
|
53
|
+
@comment_params.stubs(:[]).with(:product_id).returns 5
|
54
|
+
@comment_params.stubs(:[]).with(:post_id).returns nil
|
55
|
+
@comments_controller.stubs(:params).returns(@comment_params)
|
56
|
+
end
|
57
|
+
|
58
|
+
should "get the params for whatever models are available" do
|
59
|
+
assert_equal :product, @comments_controller.send(:parent_type)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context "with no possible parent" do
|
64
|
+
should "return nil" do
|
65
|
+
assert_nil @controller.send(:parent_type)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context "parent object helper" do
|
71
|
+
setup do
|
72
|
+
@comments_controller = CommentsControllerMock.new
|
73
|
+
@comment_params = stub()
|
74
|
+
@comment_params.stubs(:[]).with(:post_id).returns 2
|
75
|
+
@request = stub :path => ""
|
76
|
+
@comments_controller.stubs(:request).returns(@request)
|
77
|
+
@comments_controller.stubs(:params).returns(@comment_params)
|
78
|
+
@post = Post.new
|
79
|
+
Post.stubs(:find).with(2).returns @post
|
80
|
+
end
|
81
|
+
|
82
|
+
should "return post with id 2" do
|
83
|
+
assert_equal @post, @comments_controller.send(:parent_object)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require File.dirname(__FILE__)+'/../../test_helper'
|
2
|
+
|
3
|
+
class Helpers::SingletonCurrentObjectsTest < Test::Unit::TestCase
|
4
|
+
context "singleton" do
|
5
|
+
setup do
|
6
|
+
@image_controller = ImagesController.new
|
7
|
+
@image_params = stub()
|
8
|
+
@image_params.stubs(:[]).with(:user_id).returns 2
|
9
|
+
@image_params.stubs(:[]).with('image').returns ""
|
10
|
+
@image_controller.stubs(:params).returns(@image_params)
|
11
|
+
|
12
|
+
@request = stub :path => ""
|
13
|
+
@image_controller.stubs(:request).returns(@request)
|
14
|
+
@user = stub()
|
15
|
+
User.expects(:find).with(2).returns(@user)
|
16
|
+
@image = stub()
|
17
|
+
end
|
18
|
+
|
19
|
+
context "build object helper with parent" do
|
20
|
+
should "build new object" do
|
21
|
+
@user.expects(:build_image).with("").returns("a new image")
|
22
|
+
assert_equal "a new image", @image_controller.send(:build_object)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context "object helper with parent" do
|
27
|
+
should "fetch the correct object" do
|
28
|
+
@user.expects(:image).returns(@image)
|
29
|
+
assert_equal @image, @image_controller.send(:object)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "with singleton parent" do
|
35
|
+
setup do
|
36
|
+
@options_controller = OptionsController.new
|
37
|
+
@options_params = stub :[] => "1"
|
38
|
+
@options_params.stubs(:[]).with('option').returns ""
|
39
|
+
@options_params.stubs(:[]).with(:id).returns 1
|
40
|
+
@options_controller.stubs(:params).returns(@options_params)
|
41
|
+
|
42
|
+
@option = Option.new
|
43
|
+
|
44
|
+
@account = Account.new
|
45
|
+
@options_controller.stubs(:parent_object).returns(@account)
|
46
|
+
|
47
|
+
@request = stub :path => "account/options/1"
|
48
|
+
@options_controller.stubs(:request).returns(@request)
|
49
|
+
|
50
|
+
@options = stub()
|
51
|
+
Account.any_instance.stubs(:options).returns(@options)
|
52
|
+
end
|
53
|
+
|
54
|
+
context "build object helper" do
|
55
|
+
should "build new object" do
|
56
|
+
@options.expects(:build).with("").returns("a new option")
|
57
|
+
assert_equal "a new option", @options_controller.send(:build_object)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context "object helper" do
|
62
|
+
should "fetch the correct object" do
|
63
|
+
@options.expects(:find).with(1).returns(@option)
|
64
|
+
assert_equal @option, @options_controller.send(:object)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require File.dirname(__FILE__)+'/../../test_helper'
|
2
|
+
|
3
|
+
class UsersControllerMock
|
4
|
+
include ResourceController::Helpers
|
5
|
+
extend ResourceController::Accessors
|
6
|
+
class_reader_writer :belongs_to
|
7
|
+
end
|
8
|
+
|
9
|
+
class ImagesControllerMock
|
10
|
+
include ResourceController::Helpers
|
11
|
+
extend ResourceController::Accessors
|
12
|
+
include ResourceController::Helpers::SingletonCustomizations
|
13
|
+
class_reader_writer :belongs_to
|
14
|
+
belongs_to :user
|
15
|
+
end
|
16
|
+
|
17
|
+
class Helpers::SingletonNestedTest < Test::Unit::TestCase
|
18
|
+
def setup
|
19
|
+
@controller = UsersControllerMock.new
|
20
|
+
@params = stub :[] => "1"
|
21
|
+
@controller.stubs(:params).returns(@params)
|
22
|
+
@request = stub :path => ""
|
23
|
+
@controller.stubs(:request).returns(@request)
|
24
|
+
end
|
25
|
+
|
26
|
+
context "singleton parent_type helper" do
|
27
|
+
setup do
|
28
|
+
@image_controller = ImagesControllerMock.new
|
29
|
+
@image_params = stub()
|
30
|
+
@image_params.stubs(:[]).with(:user_id).returns 2
|
31
|
+
@image_controller.stubs(:params).returns(@image_params)
|
32
|
+
end
|
33
|
+
|
34
|
+
should "get the params for the current parent" do
|
35
|
+
assert_equal :user, @image_controller.send(:parent_type)
|
36
|
+
end
|
37
|
+
|
38
|
+
context "with multiple possible parents" do
|
39
|
+
setup do
|
40
|
+
ImagesControllerMock.class_eval do
|
41
|
+
belongs_to :user, :group
|
42
|
+
end
|
43
|
+
@image_params = stub()
|
44
|
+
@image_params.stubs(:[]).with(:group_id).returns 5
|
45
|
+
@image_params.stubs(:[]).with(:user_id).returns nil
|
46
|
+
@image_controller.stubs(:params).returns(@image_params)
|
47
|
+
end
|
48
|
+
|
49
|
+
should "get the params for whatever models are available" do
|
50
|
+
assert_equal :group, @image_controller.send(:parent_type)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context "with no possible parent" do
|
55
|
+
should "return nil" do
|
56
|
+
assert_nil @controller.send(:parent_type)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context "singleton parent_object helper" do
|
62
|
+
setup do
|
63
|
+
@image_controller = ImagesControllerMock.new
|
64
|
+
@request = stub :path => ""
|
65
|
+
@image_controller.stubs(:request).returns(@request)
|
66
|
+
@image_params = stub()
|
67
|
+
@image_params.stubs(:[]).with(:user_id).returns 2
|
68
|
+
@image_controller.stubs(:params).returns(@image_params)
|
69
|
+
@user = User.new
|
70
|
+
User.stubs(:find).with(2).returns @user
|
71
|
+
end
|
72
|
+
|
73
|
+
should "return image with id 2" do
|
74
|
+
assert_equal @user, @image_controller.send(:parent_object)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require File.dirname(__FILE__)+'/../../test_helper'
|
2
|
+
|
3
|
+
class Helpers::SingletonUrlsTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "*_url_options helpers" do
|
6
|
+
setup do
|
7
|
+
@account_controller = AccountsController.new
|
8
|
+
@params = stub :[] => ""
|
9
|
+
@account_controller.stubs(:params).returns(@params)
|
10
|
+
@request = stub :path => ""
|
11
|
+
@account_controller.stubs(:request).returns(@request)
|
12
|
+
end
|
13
|
+
|
14
|
+
should "return the correct object options" do
|
15
|
+
assert_equal [nil, nil, :account], @account_controller.send(:object_url_options)
|
16
|
+
end
|
17
|
+
|
18
|
+
context "with parent" do
|
19
|
+
setup do
|
20
|
+
@user = mock
|
21
|
+
@image = stub()
|
22
|
+
@image_controller = ImagesController.new
|
23
|
+
@image_params = stub()
|
24
|
+
@image_params.stubs(:[]).with(:user_id).returns 2
|
25
|
+
@image_controller.stubs(:params).returns(@image_params)
|
26
|
+
@image_controller.expects(:parent_object).returns @user
|
27
|
+
@image_request = stub :path => ""
|
28
|
+
@image_controller.stubs(:request).returns(@image_request)
|
29
|
+
end
|
30
|
+
|
31
|
+
should "return the correct object options" do
|
32
|
+
assert_equal [:edit, [:user, @user], :image], @image_controller.send(:object_url_options, :edit)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "with singleton parent" do
|
37
|
+
setup do
|
38
|
+
@options_controller = OptionsController.new
|
39
|
+
@options_params = stub()
|
40
|
+
@options_params.stubs(:[]).with('option').returns ""
|
41
|
+
@options_params.stubs(:[]).with(:id).returns 1
|
42
|
+
@options_params.stubs(:[]).with(:account_id).returns nil
|
43
|
+
@options_controller.stubs(:params).returns(@options_params)
|
44
|
+
|
45
|
+
@option = Option.new
|
46
|
+
|
47
|
+
@account = Account.new
|
48
|
+
@options_controller.stubs(:parent_object).returns(@account)
|
49
|
+
|
50
|
+
@request = stub :path => "account/options/1"
|
51
|
+
@options_controller.stubs(:request).returns(@request)
|
52
|
+
|
53
|
+
@options = stub()
|
54
|
+
Account.any_instance.stubs(:options).returns(@options)
|
55
|
+
end
|
56
|
+
|
57
|
+
should "return the correct object options" do
|
58
|
+
@options.expects(:find).with(1).returns(@option)
|
59
|
+
assert_equal [:edit, :account, [:option, @option]], @options_controller.send(:object_url_options, :edit)
|
60
|
+
end
|
61
|
+
|
62
|
+
should "return the correct object options for collection" do
|
63
|
+
assert_equal [:account, :options], @options_controller.send(:collection_url_options)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,75 @@
|
|
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
|
+
@request = stub :path => ""
|
11
|
+
@controller.stubs(:request).returns(@request)
|
12
|
+
|
13
|
+
@object = Post.new
|
14
|
+
Post.stubs(:find).with("1").returns(@object)
|
15
|
+
|
16
|
+
@collection = mock()
|
17
|
+
Post.stubs(:find).with(:all).returns(@collection)
|
18
|
+
end
|
19
|
+
|
20
|
+
context "*_url_options helpers" do
|
21
|
+
setup do
|
22
|
+
@products_controller = ::Cms::ProductsController.new
|
23
|
+
|
24
|
+
@products_controller.stubs(:params).returns(@params)
|
25
|
+
@request = stub :path => ""
|
26
|
+
@products_controller.stubs(:request).returns(@request)
|
27
|
+
@product = Product.new
|
28
|
+
Product.stubs(:find).with("1").returns(@product)
|
29
|
+
end
|
30
|
+
|
31
|
+
should "return the correct collection options" do
|
32
|
+
assert_equal [nil, :posts], @controller.send(:collection_url_options)
|
33
|
+
end
|
34
|
+
|
35
|
+
should "return the correct object options" do
|
36
|
+
assert_equal [nil, nil, [:post, @object]], @controller.send(:object_url_options)
|
37
|
+
end
|
38
|
+
|
39
|
+
should "return the correct collection options for a namespaced controller" do
|
40
|
+
assert_equal [:cms, nil, :products], @products_controller.send(:collection_url_options)
|
41
|
+
end
|
42
|
+
|
43
|
+
should "return the correct object options for a namespaced controller" do
|
44
|
+
assert_equal [nil, :cms, nil, [:product, @product]], @products_controller.send(:object_url_options)
|
45
|
+
end
|
46
|
+
|
47
|
+
should "return the correct object options when passed an action" do
|
48
|
+
assert_equal [:edit, :cms, nil, [:product, @product]], @products_controller.send(:object_url_options, :edit)
|
49
|
+
end
|
50
|
+
|
51
|
+
should "accept an alternate object when passed one" do
|
52
|
+
p = Product.new
|
53
|
+
assert_equal [nil, :cms, nil, [:product, p]], @products_controller.send(:object_url_options, nil, p)
|
54
|
+
end
|
55
|
+
|
56
|
+
context "with parent" do
|
57
|
+
setup do
|
58
|
+
@params = stub :parent_type => 'user'
|
59
|
+
@user = mock
|
60
|
+
@controller.expects(:parent_object).returns @user
|
61
|
+
@controller.expects(:parent?).returns(true)
|
62
|
+
@controller.expects(:parent_type).returns "user"
|
63
|
+
end
|
64
|
+
|
65
|
+
should "return the correct object options for object_url_options" do
|
66
|
+
@controller.expects(:object).returns @object
|
67
|
+
assert_equal [:edit, [:user, @user], [:post, @object]], @controller.send(:object_url_options, :edit)
|
68
|
+
end
|
69
|
+
|
70
|
+
should "return the correct object options for collection" do
|
71
|
+
assert_equal [[:user, @user], :posts], @controller.send(:collection_url_options)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.dirname(__FILE__)+'/../test_helper'
|
2
|
+
|
3
|
+
class HelpersTest < ActiveSupport::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
|