rc_rails 2.1.0
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/.gitignore +7 -0
- data/CHANGELOG +355 -0
- data/Gemfile +5 -0
- data/Gemfile.lock.development +117 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +71 -0
- data/Rakefile +33 -0
- data/Todo.txt +1 -0
- data/lib/rc_rails.rb +9 -0
- data/lib/resources_controller/actions.rb +147 -0
- data/lib/resources_controller/active_record/saved.rb +15 -0
- data/lib/resources_controller/helper.rb +123 -0
- data/lib/resources_controller/include_actions.rb +37 -0
- data/lib/resources_controller/named_route_helper.rb +154 -0
- data/lib/resources_controller/railtie.rb +14 -0
- data/lib/resources_controller/request_path_introspection.rb +83 -0
- data/lib/resources_controller/resource_methods.rb +32 -0
- data/lib/resources_controller/singleton_actions.rb +21 -0
- data/lib/resources_controller/specification.rb +119 -0
- data/lib/resources_controller/version.rb +3 -0
- data/lib/resources_controller.rb +849 -0
- data/resources_controller.gemspec +29 -0
- data/spec/app/database.yml +5 -0
- data/spec/app/views/accounts/show.html.erb +0 -0
- data/spec/app/views/addresses/edit.html.erb +0 -0
- data/spec/app/views/addresses/index.html.erb +0 -0
- data/spec/app/views/addresses/new.html.erb +0 -0
- data/spec/app/views/addresses/show.html.erb +0 -0
- data/spec/app/views/admin/forums/create.html.erb +0 -0
- data/spec/app/views/admin/forums/destroy.html.erb +0 -0
- data/spec/app/views/admin/forums/edit.html.erb +0 -0
- data/spec/app/views/admin/forums/index.html.erb +0 -0
- data/spec/app/views/admin/forums/new.html.erb +0 -0
- data/spec/app/views/admin/forums/show.html.erb +0 -0
- data/spec/app/views/admin/forums/update.html.erb +0 -0
- data/spec/app/views/comments/edit.html.erb +0 -0
- data/spec/app/views/comments/index.html.erb +0 -0
- data/spec/app/views/comments/new.html.erb +0 -0
- data/spec/app/views/comments/show.html.erb +0 -0
- data/spec/app/views/forum_posts/edit.html.erb +0 -0
- data/spec/app/views/forum_posts/index.html.erb +0 -0
- data/spec/app/views/forum_posts/new.html.erb +0 -0
- data/spec/app/views/forum_posts/show.html.erb +0 -0
- data/spec/app/views/forums/create.html.erb +0 -0
- data/spec/app/views/forums/destroy.html.erb +0 -0
- data/spec/app/views/forums/edit.html.erb +0 -0
- data/spec/app/views/forums/index.html.erb +0 -0
- data/spec/app/views/forums/new.html.erb +0 -0
- data/spec/app/views/forums/show.html.erb +0 -0
- data/spec/app/views/forums/update.html.erb +0 -0
- data/spec/app/views/infos/edit.html.erb +0 -0
- data/spec/app/views/infos/show.html.erb +0 -0
- data/spec/app/views/interests/index.html.erb +0 -0
- data/spec/app/views/interests/show.html.erb +0 -0
- data/spec/app/views/owners/edit.html.erb +0 -0
- data/spec/app/views/owners/new.html.erb +0 -0
- data/spec/app/views/owners/show.html.erb +0 -0
- data/spec/app/views/tags/index.html.erb +0 -0
- data/spec/app/views/tags/new.html.erb +0 -0
- data/spec/app/views/tags/show.html.erb +0 -0
- data/spec/app/views/users/edit.html.erb +0 -0
- data/spec/app/views/users/index.html.erb +0 -0
- data/spec/app/views/users/show.html.erb +0 -0
- data/spec/app.rb +315 -0
- data/spec/controllers/accounts_controller_spec.rb +77 -0
- data/spec/controllers/addresses_controller_spec.rb +346 -0
- data/spec/controllers/admin_forums_controller_spec.rb +638 -0
- data/spec/controllers/comments_controller_spec.rb +380 -0
- data/spec/controllers/comments_controller_with_models_spec.rb +202 -0
- data/spec/controllers/forum_posts_controller_spec.rb +426 -0
- data/spec/controllers/forums_controller_spec.rb +694 -0
- data/spec/controllers/infos_controller_spec.rb +71 -0
- data/spec/controllers/interests_controller_via_forum_spec.rb +80 -0
- data/spec/controllers/interests_controller_via_user_spec.rb +114 -0
- data/spec/controllers/owners_controller_spec.rb +277 -0
- data/spec/controllers/resource_saved_spec.rb +47 -0
- data/spec/controllers/resource_service_in_forums_controller_spec.rb +37 -0
- data/spec/controllers/resource_service_in_infos_controller_spec.rb +36 -0
- data/spec/controllers/resource_service_in_interests_controller_via_forum_spec.rb +51 -0
- data/spec/controllers/tags_controller_spec.rb +83 -0
- data/spec/controllers/tags_controller_via_account_info_spec.rb +131 -0
- data/spec/controllers/tags_controller_via_forum_post_comment_spec.rb +144 -0
- data/spec/controllers/tags_controller_via_forum_post_spec.rb +133 -0
- data/spec/controllers/tags_controller_via_forum_spec.rb +173 -0
- data/spec/controllers/tags_controller_via_user_address_spec.rb +130 -0
- data/spec/controllers/users_controller_spec.rb +248 -0
- data/spec/lib/action_view_helper_spec.rb +143 -0
- data/spec/lib/bug_0001_spec.rb +22 -0
- data/spec/lib/include_actions_spec.rb +35 -0
- data/spec/lib/load_enclosing_resources_spec.rb +245 -0
- data/spec/lib/request_path_introspection_spec.rb +130 -0
- data/spec/lib/resource_methods_spec.rb +204 -0
- data/spec/lib/resources_controller_spec.rb +57 -0
- data/spec/models/comment_saved_spec.rb +24 -0
- data/spec/rspec_generator_task.rb +105 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/verify_rcov.rb +52 -0
- metadata +193 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module TagsViaForumSpecHelper
|
|
4
|
+
def setup_mocks
|
|
5
|
+
@forum = mock('Forum')
|
|
6
|
+
@forum_tags = mock('forum_tags assoc')
|
|
7
|
+
Forum.stub!(:find).and_return(@forum)
|
|
8
|
+
@forum.stub!(:tags).and_return(@forum_tags)
|
|
9
|
+
@forum.stub!(:to_param).and_return('1')
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe TagsController do
|
|
14
|
+
describe "Routing shortcuts for Tags via Forum (forums/1/tags/2) should map" do
|
|
15
|
+
include TagsViaForumSpecHelper
|
|
16
|
+
|
|
17
|
+
before(:each) do
|
|
18
|
+
setup_mocks
|
|
19
|
+
@tag = mock('Tag')
|
|
20
|
+
@tag.stub!(:to_param).and_return('2')
|
|
21
|
+
@forum_tags.stub!(:find).and_return(@tag)
|
|
22
|
+
|
|
23
|
+
get :show, :forum_id => "1", :id => "2"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "resources_path to /forums/1/tags" do
|
|
27
|
+
controller.resources_path.should == '/forums/1/tags'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "resource_path to /forums/1/tags/2" do
|
|
31
|
+
controller.resource_path.should == '/forums/1/tags/2'
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "resource_path(9) to /forums/1/tags/9" do
|
|
35
|
+
controller.resource_path(9).should == '/forums/1/tags/9'
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "edit_resource_path to /forums/1/tags/2/edit" do
|
|
39
|
+
controller.edit_resource_path.should == '/forums/1/tags/2/edit'
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "edit_resource_path(9) to /forums/1/tags/9/edit" do
|
|
43
|
+
controller.edit_resource_path(9).should == '/forums/1/tags/9/edit'
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "new_resource_path to /forums/1/tags/new" do
|
|
47
|
+
controller.new_resource_path.should == '/forums/1/tags/new'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "enclosing_resource_path to /forums/1" do
|
|
51
|
+
controller.enclosing_resource_path.should == "/forums/1"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
describe "resource_service in TagsController via Forum" do
|
|
56
|
+
|
|
57
|
+
before(:each) do
|
|
58
|
+
@forum = Forum.create
|
|
59
|
+
@tag = Tag.create :taggable_id => @forum.id, :taggable_type => 'Forum'
|
|
60
|
+
@other_forum = Forum.create
|
|
61
|
+
@other_tag = Tag.create :taggable_id => @other_forum.id, :taggable_type => 'Forum'
|
|
62
|
+
|
|
63
|
+
get :new, :forum_id => @forum.id
|
|
64
|
+
@resource_service = controller.send :resource_service
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "should build new tag with @forum fk and type with new" do
|
|
68
|
+
resource = @resource_service.new
|
|
69
|
+
resource.should be_kind_of(Tag)
|
|
70
|
+
resource.taggable_id.should == @forum.id
|
|
71
|
+
resource.taggable_type.should == 'Forum'
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it "should find @tag with find(@tag.id)" do
|
|
75
|
+
resource = @resource_service.find(@tag.id)
|
|
76
|
+
resource.should == @tag
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "should raise RecordNotFound with find(@other_tag.id)" do
|
|
80
|
+
lambda{ @resource_service.find(@other_tag.id) }.should raise_error(ActiveRecord::RecordNotFound)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "should find only tags belonging to @forum with find(:all)" do
|
|
84
|
+
resources = @resource_service.find(:all)
|
|
85
|
+
resources.should be == Tag.find(:all, :conditions => "taggable_id = #{@forum.id} AND taggable_type = 'Forum'")
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
describe "Requesting /forums/1/tags using GET" do
|
|
90
|
+
include TagsViaForumSpecHelper
|
|
91
|
+
|
|
92
|
+
before(:each) do
|
|
93
|
+
setup_mocks
|
|
94
|
+
@tags = mock('Tags')
|
|
95
|
+
@forum_tags.stub!(:all).and_return(@tags)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def do_get
|
|
99
|
+
get :index, :forum_id => '1'
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "should find the forum" do
|
|
103
|
+
Forum.should_receive(:find).with('1').and_return(@forum)
|
|
104
|
+
do_get
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "should assign the found forum for the view" do
|
|
108
|
+
do_get
|
|
109
|
+
assigns[:forum].should == @forum
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "should assign the forum_tags association as the tags resource_service" do
|
|
113
|
+
@forum.should_receive(:tags).and_return(@forum_tags)
|
|
114
|
+
do_get
|
|
115
|
+
@controller.resource_service.should == @forum_tags
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
describe "Requesting /forums/1/tags/new using GET" do
|
|
120
|
+
include TagsViaForumSpecHelper
|
|
121
|
+
|
|
122
|
+
before(:each) do
|
|
123
|
+
setup_mocks
|
|
124
|
+
@tag = mock('Tag')
|
|
125
|
+
@forum_tags.stub!(:build).and_return(@tag)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def do_get
|
|
129
|
+
get :new, :forum_id => '1', :tag => {"name" => "hello"}
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it "should find the forum" do
|
|
133
|
+
Forum.should_receive(:find).with('1').and_return(@forum)
|
|
134
|
+
do_get
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it "should assign the found forum for the view" do
|
|
138
|
+
do_get
|
|
139
|
+
assigns[:forum].should == @forum
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it "should assign the forum_tags association as the tags resource_service" do
|
|
143
|
+
@forum.should_receive(:tags).and_return(@forum_tags)
|
|
144
|
+
do_get
|
|
145
|
+
@controller.resource_service.should == @forum_tags
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it "should render new template" do
|
|
149
|
+
do_get
|
|
150
|
+
response.should render_template('new')
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
it "should build a new tag with params" do
|
|
154
|
+
@forum_tags.should_receive(:build).with("name" => "hello").and_return(@tag)
|
|
155
|
+
do_get
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
it "should not save the new category" do
|
|
159
|
+
@tag.should_not_receive(:save)
|
|
160
|
+
do_get
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
it "should assign the new tag for the view" do
|
|
164
|
+
do_get
|
|
165
|
+
assigns[:tag].should equal(@tag)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
it "should send :resource= to controller with @tag" do
|
|
169
|
+
controller.should_receive(:resource=).with(@tag)
|
|
170
|
+
do_get
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
end
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module TagsViaUserAddressSpecHelper
|
|
4
|
+
def setup_mocks
|
|
5
|
+
@user = mock_model(User)
|
|
6
|
+
User.stub!(:find_by_login).and_return(@user)
|
|
7
|
+
@user.stub!(:to_param).and_return('dave')
|
|
8
|
+
@user_addresses = mock('user_addresses assoc')
|
|
9
|
+
@user.stub!(:addresses).and_return(@user_addresses)
|
|
10
|
+
|
|
11
|
+
@address = mock_model(Address)
|
|
12
|
+
@user_addresses.stub!(:find).and_return(@address)
|
|
13
|
+
@address.stub!(:to_param).and_return('2')
|
|
14
|
+
@address_tags = mock('address_tags assoc')
|
|
15
|
+
@address.stub!(:tags).and_return(@address_tags)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe TagsController do
|
|
20
|
+
describe "Routing shortcuts for Tags via User and Address (users/dave/addresses/2/tags/3) should map" do
|
|
21
|
+
include TagsViaUserAddressSpecHelper
|
|
22
|
+
|
|
23
|
+
before(:each) do
|
|
24
|
+
setup_mocks
|
|
25
|
+
@tag = mock_model(Tag)
|
|
26
|
+
@tag.stub!(:to_param).and_return('3')
|
|
27
|
+
@address_tags.stub!(:find).and_return(@tag)
|
|
28
|
+
|
|
29
|
+
get :show, :user_id => "dave", :address_id => "2", :id => "3"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "resources_path to /users/dave/addresses/2/tags" do
|
|
33
|
+
controller.resources_path.should == '/users/dave/addresses/2/tags'
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "resource_path to /users/dave/addresses/2/tags/3" do
|
|
37
|
+
controller.resource_path.should == '/users/dave/addresses/2/tags/3'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "resource_path(9) to /users/dave/addresses/2/tags/9" do
|
|
41
|
+
controller.resource_path(9).should == '/users/dave/addresses/2/tags/9'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "edit_resource_path to /users/dave/addresses/2/tags/3/edit" do
|
|
45
|
+
controller.edit_resource_path.should == '/users/dave/addresses/2/tags/3/edit'
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "edit_resource_path(9) to /users/dave/addresses/2/tags/9/edit" do
|
|
49
|
+
controller.edit_resource_path(9).should == '/users/dave/addresses/2/tags/9/edit'
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "new_resource_path to /users/dave/addresses/2/tags/new" do
|
|
53
|
+
controller.new_resource_path.should == '/users/dave/addresses/2/tags/new'
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "enclosing_resource_path to /users/dave/addresses/2" do
|
|
57
|
+
controller.enclosing_resource_path.should == "/users/dave/addresses/2"
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
describe "resource_service in TagsController via User and Address" do
|
|
62
|
+
|
|
63
|
+
before(:each) do
|
|
64
|
+
@user = User.create
|
|
65
|
+
@address = Address.create :user_id => @user.id
|
|
66
|
+
@tag = Tag.create :taggable_id => @address.id, :taggable_type => 'Address'
|
|
67
|
+
@other_address = Address.create :user_id => @user.id
|
|
68
|
+
@other_tag = Tag.create :taggable_id => @other_address.id, :taggable_type => 'Address'
|
|
69
|
+
|
|
70
|
+
get :index, :user_id => @user.id, :address_id => @address.id
|
|
71
|
+
@resource_service = controller.send :resource_service
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it "should build new tag with @address fk and type with new" do
|
|
75
|
+
resource = @resource_service.new
|
|
76
|
+
resource.should be_kind_of(Tag)
|
|
77
|
+
resource.taggable_id.should == @address.id
|
|
78
|
+
resource.taggable_type.should == 'Address'
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "should find @tag with find(@tag.id)" do
|
|
82
|
+
resource = @resource_service.find(@tag.id)
|
|
83
|
+
resource.should == @tag
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "should raise RecordNotFound with find(@other_tag.id)" do
|
|
87
|
+
lambda{ @resource_service.find(@other_tag.id) }.should raise_error(ActiveRecord::RecordNotFound)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "should find only tags belonging to @address with find(:all)" do
|
|
91
|
+
resources = @resource_service.find(:all)
|
|
92
|
+
resources.should be == Tag.find(:all, :conditions => "taggable_id = #{@address.id} AND taggable_type = 'Address'")
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
describe "Requesting /users/dave/addresses/2/tags using GET" do
|
|
97
|
+
include TagsViaUserAddressSpecHelper
|
|
98
|
+
|
|
99
|
+
before(:each) do
|
|
100
|
+
setup_mocks
|
|
101
|
+
@tags = mock('Tags')
|
|
102
|
+
@address_tags.stub!(:all).and_return(@tags)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def do_get
|
|
106
|
+
get :index, :user_id => "dave", :address_id => '2'
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it "should find the user" do
|
|
110
|
+
User.should_receive(:find_by_login).with('dave').and_return(@user)
|
|
111
|
+
do_get
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "should find the address" do
|
|
115
|
+
@user_addresses.should_receive(:find).with('2').and_return(@address)
|
|
116
|
+
do_get
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it "should assign the found address for the view" do
|
|
120
|
+
do_get
|
|
121
|
+
assigns[:address].should == @address
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it "should assign the address_tags association as the tags resource_service" do
|
|
125
|
+
@address.should_receive(:tags).and_return(@address_tags)
|
|
126
|
+
do_get
|
|
127
|
+
@controller.resource_service.should == @address_tags
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe UsersController, "routing" do
|
|
4
|
+
|
|
5
|
+
it "should route to { :controller => 'users', action => 'index' } from GET /users" do
|
|
6
|
+
{:get => "/users"}.should route_to(:controller => "users", :action => "index")
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "should route to { :controller => 'users', action => 'new' } from GET /users/new" do
|
|
10
|
+
{:get => "/users/new"}.should route_to(:controller => "users", :action => "new")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should route to { :controller => 'users', action => 'create' } from POST /users" do
|
|
14
|
+
{:post => "/users"}.should route_to(:controller => "users", :action => "create")
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should route to { :controller => 'users', action => 'show', id => '1' } from GET /users/dave" do
|
|
18
|
+
{:get => "/users/dave"}.should route_to(:controller => "users", :action => "show", :id => "dave")
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should route to { :controller => 'users', action => 'edit', id => '1' } from GET /users/dave/edit" do
|
|
22
|
+
{:get => "/users/dave/edit"}.should route_to(:controller => "users", :action => "edit", :id => "dave")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should route to { :controller => 'users', action => 'update', id => '1' } from PUT /users/dave" do
|
|
26
|
+
{:put => "/users/dave"}.should route_to(:controller => "users", :action => "update", :id => "dave")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should route to { :controller => 'users', action => 'destroy', id => '1' } from DELETE /users/dave" do
|
|
30
|
+
{:delete => "/users/dave"}.should route_to(:controller => "users", :action => "destroy", :id => "dave")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe UsersController, "handling GET /users" do
|
|
36
|
+
|
|
37
|
+
before do
|
|
38
|
+
@user = mock_model(User)
|
|
39
|
+
User.stub!(:all).and_return([@user])
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def do_get
|
|
43
|
+
get :index
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should be successful" do
|
|
47
|
+
do_get
|
|
48
|
+
response.should be_success
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should render index template" do
|
|
52
|
+
do_get
|
|
53
|
+
response.should render_template('index')
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "should find all users" do
|
|
57
|
+
User.should_receive(:all).and_return([@user])
|
|
58
|
+
do_get
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "should assign the found users for the view" do
|
|
62
|
+
do_get
|
|
63
|
+
assigns[:users].should == [@user]
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
describe UsersController, "handling GET /users.xml" do
|
|
68
|
+
|
|
69
|
+
before do
|
|
70
|
+
@user = mock_model(User, :to_xml => "XML")
|
|
71
|
+
User.stub!(:all).and_return(@user)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def do_get
|
|
75
|
+
@request.env["HTTP_ACCEPT"] = "application/xml"
|
|
76
|
+
get :index
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "should be successful" do
|
|
80
|
+
do_get
|
|
81
|
+
response.should be_success
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "should find all users" do
|
|
85
|
+
User.should_receive(:all).and_return([@user])
|
|
86
|
+
do_get
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "should render the found users as xml" do
|
|
90
|
+
@user.should_receive(:to_xml).and_return("XML")
|
|
91
|
+
do_get
|
|
92
|
+
response.body.should == "XML"
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
describe UsersController, "handling GET /users/dave" do
|
|
97
|
+
|
|
98
|
+
before do
|
|
99
|
+
@user = mock_model(User)
|
|
100
|
+
User.stub!(:find_by_login).and_return(@user)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def do_get
|
|
104
|
+
get :show, :id => "dave"
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "should be successful" do
|
|
108
|
+
do_get
|
|
109
|
+
response.should be_success
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "should render show template" do
|
|
113
|
+
do_get
|
|
114
|
+
response.should render_template('show')
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "should find the user requested" do
|
|
118
|
+
User.should_receive(:find_by_login).with("dave").and_return(@user)
|
|
119
|
+
do_get
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it "should assign the found user for the view" do
|
|
123
|
+
do_get
|
|
124
|
+
assigns[:user].should equal(@user)
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
describe UsersController, "handling GET /users/dave.xml" do
|
|
129
|
+
|
|
130
|
+
before do
|
|
131
|
+
@user = mock_model(User, :to_xml => "XML")
|
|
132
|
+
User.stub!(:find_by_login).and_return(@user)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def do_get
|
|
136
|
+
@request.env["HTTP_ACCEPT"] = "application/xml"
|
|
137
|
+
get :show, :id => "dave"
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
it "should be successful" do
|
|
141
|
+
do_get
|
|
142
|
+
response.should be_success
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
it "should find the user requested" do
|
|
146
|
+
User.should_receive(:find_by_login).with("dave").and_return(@user)
|
|
147
|
+
do_get
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
it "should render the found user as xml" do
|
|
151
|
+
@user.should_receive(:to_xml).and_return("XML")
|
|
152
|
+
do_get
|
|
153
|
+
response.body.should == "XML"
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
describe UsersController, "handling GET /users/new" do
|
|
158
|
+
it "should be unknown action" do
|
|
159
|
+
lambda{ get :new }.should raise_error(ActionView::MissingTemplate)
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
describe UsersController, "handling GET /users/dave/edit" do
|
|
164
|
+
|
|
165
|
+
before do
|
|
166
|
+
@user = mock_model(User)
|
|
167
|
+
User.stub!(:find_by_login).and_return(@user)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def do_get
|
|
171
|
+
get :edit, :id => "dave"
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it "should be successful" do
|
|
175
|
+
do_get
|
|
176
|
+
response.should be_success
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
it "should render edit template" do
|
|
180
|
+
do_get
|
|
181
|
+
response.should render_template('edit')
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
it "should find the user requested" do
|
|
185
|
+
User.should_receive(:find_by_login).and_return(@user)
|
|
186
|
+
do_get
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
it "should assign the found User for the view" do
|
|
190
|
+
do_get
|
|
191
|
+
assigns[:user].should equal(@user)
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
describe UsersController, "handling POST /users" do
|
|
196
|
+
it "should be unknown action" do
|
|
197
|
+
lambda{ post :create }.should raise_error(ActionController::RoutingError)
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
describe UsersController, "handling PUT /users/dave" do
|
|
202
|
+
|
|
203
|
+
before do
|
|
204
|
+
@user = mock_model(User, :to_param => "dave")
|
|
205
|
+
User.stub!(:find_by_login).and_return(@user)
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def put_with_successful_update
|
|
209
|
+
@user.should_receive(:update_attributes).and_return(true)
|
|
210
|
+
put :update, :id => "dave"
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
def put_with_failed_update
|
|
214
|
+
@user.should_receive(:update_attributes).and_return(false)
|
|
215
|
+
put :update, :id => "dave"
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
it "should find the user requested" do
|
|
219
|
+
User.should_receive(:find_by_login).with("dave").and_return(@user)
|
|
220
|
+
put_with_successful_update
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
it "should update the found user" do
|
|
224
|
+
put_with_successful_update
|
|
225
|
+
assigns(:user).should equal(@user)
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
it "should assign the found user for the view" do
|
|
229
|
+
put_with_successful_update
|
|
230
|
+
assigns(:user).should equal(@user)
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
it "should redirect to the user on successful update" do
|
|
234
|
+
put_with_successful_update
|
|
235
|
+
response.should redirect_to(user_url("dave"))
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
it "should re-render 'edit' on failed update" do
|
|
239
|
+
put_with_failed_update
|
|
240
|
+
response.should render_template('edit')
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
describe UsersController, "handling DELETE /users/dave" do
|
|
245
|
+
it "should be unknown action" do
|
|
246
|
+
lambda{ delete :destroy, :id => "dave" }.should raise_error(::AbstractController::ActionNotFound)
|
|
247
|
+
end
|
|
248
|
+
end
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
class ViewWithResourcesControllerHelper < ActionView::Base
|
|
4
|
+
include ResourcesController::Helper
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
describe "ActionView with resources_controller Helper" do
|
|
8
|
+
before do
|
|
9
|
+
@view = ViewWithResourcesControllerHelper.new
|
|
10
|
+
@controller = mock('Controller')
|
|
11
|
+
@view.controller = @controller
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.it_should_forward_to_controller(msg, *args)
|
|
15
|
+
it "should forward ##{msg}#{args.size > 0 ? "(#{args.join(',')})" : ""} to controller" do
|
|
16
|
+
@controller.should_receive(msg).with(*args)
|
|
17
|
+
@view.send(msg, *args)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it_should_forward_to_controller :resource_name
|
|
22
|
+
it_should_forward_to_controller :resources_name
|
|
23
|
+
it_should_forward_to_controller :resource
|
|
24
|
+
it_should_forward_to_controller :resources
|
|
25
|
+
it_should_forward_to_controller :enclosing_resource
|
|
26
|
+
it_should_forward_to_controller :enclosing_resource_name
|
|
27
|
+
|
|
28
|
+
it 'should not forward unknown url helper to controller' do
|
|
29
|
+
@controller.stub!(:resource_named_route_helper_method?).and_return(false)
|
|
30
|
+
@controller.should_not_receive(:resource_foo_path)
|
|
31
|
+
lambda { @view.send(:resource_foo_path) }.should raise_error(NoMethodError)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "#error_messages_for_resource should call error_messages_for with resource_name" do
|
|
35
|
+
@controller.should_receive(:resource_name).and_return('name')
|
|
36
|
+
@view.should_receive(:error_messages_for).with('name')
|
|
37
|
+
@view.error_messages_for_resource
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe "Helper#form_for_resource (when resource is new record)" do
|
|
42
|
+
before do
|
|
43
|
+
@view = ViewWithResourcesControllerHelper.new
|
|
44
|
+
@controller = mock('Controller')
|
|
45
|
+
@specification = mock('Specification')
|
|
46
|
+
@specification.stub!(:singleton?).and_return(false)
|
|
47
|
+
@resource = mock('Forum')
|
|
48
|
+
@resource = mock('Forum').as_null_object
|
|
49
|
+
@resource.stub!(:new_record?).and_return(true)
|
|
50
|
+
@controller.stub!(:resource).and_return(@resource)
|
|
51
|
+
@controller.stub!(:resource_name).and_return('forum')
|
|
52
|
+
@controller.stub!(:resources_path).and_return('/forums')
|
|
53
|
+
@controller.stub!(:resource_specification).and_return(@specification)
|
|
54
|
+
@controller.stub!(:resource_named_route_helper_method?).and_return(true)
|
|
55
|
+
@view.controller = @controller
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it 'should call form_for with create form options' do
|
|
59
|
+
@view.should_receive(:form_for).with('forum', @resource, {:html => {:method => :post}, :url => '/forums'})
|
|
60
|
+
@view.form_for_resource{}
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'when passed :url_options, they should be passed to the path generation' do
|
|
64
|
+
@view.should_receive(:resources_path).with({:foo => 'bar'}).and_return('/forums?foo=bar')
|
|
65
|
+
@view.should_receive(:form_for).with('forum', @resource, {:html => {:method => :post}, :url => '/forums?foo=bar'})
|
|
66
|
+
@view.form_for_resource(:url_options => {:foo => 'bar'}) {}
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'when not passed :url_options, they should not be passed to the path generation' do
|
|
70
|
+
@view.should_receive(:resources_path).with().and_return('/forums')
|
|
71
|
+
@view.should_receive(:form_for).with('forum', @resource, {:html => {:method => :post}, :url => '/forums'})
|
|
72
|
+
@view.form_for_resource{}
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
describe "Helper#form_for_resource (when resource is new record) and resource is singleton" do
|
|
77
|
+
before do
|
|
78
|
+
@view = ViewWithResourcesControllerHelper.new
|
|
79
|
+
@controller = mock('Controller')
|
|
80
|
+
@specification = mock('Specification')
|
|
81
|
+
@specification.stub!(:singleton?).and_return(true)
|
|
82
|
+
@resource = mock('Account')
|
|
83
|
+
@resource = mock('Account').as_null_object
|
|
84
|
+
@resource.stub!(:new_record?).and_return(true)
|
|
85
|
+
@controller.stub!(:resource).and_return(@resource)
|
|
86
|
+
@controller.stub!(:resource_name).and_return('account')
|
|
87
|
+
@controller.stub!(:resource_path).and_return('/account')
|
|
88
|
+
@controller.stub!(:resource_specification).and_return(@specification)
|
|
89
|
+
@controller.stub!(:resource_named_route_helper_method?).and_return(true)
|
|
90
|
+
@view.controller = @controller
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it 'should call form_for with create form options' do
|
|
94
|
+
@view.should_receive(:form_for).with('account', @resource, {:html => {:method => :post}, :url => '/account'})
|
|
95
|
+
@view.form_for_resource{}
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
describe "Helper#form_for_resource (when resource is existing record)" do
|
|
100
|
+
before do
|
|
101
|
+
@view = ViewWithResourcesControllerHelper.new
|
|
102
|
+
@controller = mock('Controller')
|
|
103
|
+
@specification = mock('Specification')
|
|
104
|
+
@specification.stub!(:singleton?).and_return(false)
|
|
105
|
+
@resource = mock('Forum').as_null_object
|
|
106
|
+
@resource.stub!(:new_record?).and_return(false)
|
|
107
|
+
@resource.stub!(:to_param).and_return("1")
|
|
108
|
+
@controller.stub!(:resource).and_return(@resource)
|
|
109
|
+
@controller.stub!(:resource_name).and_return('forum')
|
|
110
|
+
@controller.stub!(:resource_path).and_return('/forums/1')
|
|
111
|
+
@controller.stub!(:resource_specification).and_return(@specification)
|
|
112
|
+
@controller.stub!(:resource_named_route_helper_method?).and_return(true)
|
|
113
|
+
@view.controller = @controller
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it 'should call form_for with update form options' do
|
|
117
|
+
@view.should_receive(:form_for).with('forum', @resource, {:html => {:method => :put}, :url => '/forums/1'})
|
|
118
|
+
@view.form_for_resource{}
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
describe "Helper#remote_form_for_resource (when resource is existing record)" do
|
|
123
|
+
before do
|
|
124
|
+
@view = ViewWithResourcesControllerHelper.new
|
|
125
|
+
@controller = mock('Controller')
|
|
126
|
+
@specification = mock('Specification')
|
|
127
|
+
@specification.stub!(:singleton?).and_return(false)
|
|
128
|
+
@resource = mock('Forum').as_null_object
|
|
129
|
+
@resource.stub!(:new_record?).and_return(false)
|
|
130
|
+
@resource.stub!(:to_param).and_return("1")
|
|
131
|
+
@controller.stub!(:resource).and_return(@resource)
|
|
132
|
+
@controller.stub!(:resource_name).and_return('forum')
|
|
133
|
+
@controller.stub!(:resource_path).and_return('/forums/1')
|
|
134
|
+
@controller.stub!(:resource_specification).and_return(@specification)
|
|
135
|
+
@controller.stub!(:resource_named_route_helper_method?).and_return(true)
|
|
136
|
+
@view.controller = @controller
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it 'should call remote_form_for with update form options' do
|
|
140
|
+
@view.should_receive(:remote_form_for).with('forum', @resource, {:html => {:method => :put}, :url => '/forums/1'})
|
|
141
|
+
@view.remote_form_for_resource{}
|
|
142
|
+
end
|
|
143
|
+
end
|