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,51 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe InterestsController do
|
|
4
|
+
describe "resource_service in InterestsController via Forum" do
|
|
5
|
+
|
|
6
|
+
before(:each) do
|
|
7
|
+
@forum = Forum.create
|
|
8
|
+
@interest = Interest.create :interested_in_id => @forum.id, :interested_in_type => 'Forum'
|
|
9
|
+
@other_forum = Forum.create
|
|
10
|
+
@other_interest = Interest.create :interested_in_id => @other_forum.id, :interested_in_type => 'Forum'
|
|
11
|
+
|
|
12
|
+
get :index, :forum_id => @forum.id
|
|
13
|
+
@resource_service = controller.send :resource_service
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should build new interest with @forum fk and type with new" do
|
|
17
|
+
resource = @resource_service.new
|
|
18
|
+
resource.should be_kind_of(Interest)
|
|
19
|
+
resource.interested_in_id.should == @forum.id
|
|
20
|
+
resource.interested_in_type.should == 'Forum'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should find @interest with find(@interest.id)" do
|
|
24
|
+
resource = @resource_service.find(@interest.id)
|
|
25
|
+
resource.should == @interest
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should raise RecordNotFound with find(@other_interest.id)" do
|
|
29
|
+
lambda{ @resource_service.find(@other_interest.id) }.should raise_error(ActiveRecord::RecordNotFound)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should find only interests belonging to @forum with find(:all)" do
|
|
33
|
+
resources = @resource_service.find(:all)
|
|
34
|
+
resources.should be == Interest.find(:all, :conditions => "interested_in_id = #{@forum.id} AND interested_in_type = 'Forum'")
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should destroy the interest with destroy(@interest.id)" do
|
|
38
|
+
lambda { @resource_service.destroy(@interest.id) }.should change(Interest, :count).by(-1)
|
|
39
|
+
lambda { Interest.find(@interest.id) }.should raise_error(ActiveRecord::RecordNotFound)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should NOT destory the other interest with destroy(@other_interest.id)" do
|
|
43
|
+
lambda { @resource_service.destroy(@other_interest.id) }.should raise_error
|
|
44
|
+
Interest.find(@other_interest.id).should == @other_interest
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "should return the destroyed interest with destroy(@interest.id)" do
|
|
48
|
+
@resource_service.destroy(@interest.id).should == @interest
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe TagsController do
|
|
4
|
+
describe "Routing shortcuts for Tags should map" do
|
|
5
|
+
|
|
6
|
+
before(:each) do
|
|
7
|
+
@tag = mock('Tag')
|
|
8
|
+
@tag.stub!(:to_param).and_return('2')
|
|
9
|
+
Tag.stub!(:find).and_return(@tag)
|
|
10
|
+
|
|
11
|
+
@controller.stub!(:request_path).and_return('/tags/2')
|
|
12
|
+
get :show, :id => "2"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "resources_path to /tags" do
|
|
16
|
+
controller.resources_path.should == '/tags'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "resource_path to /tags/2" do
|
|
20
|
+
controller.resource_path.should == '/tags/2'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "resource_path(9) to /tags/9" do
|
|
24
|
+
controller.resource_path(9).should == '/tags/9'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "edit_resource_path to /tags/2/edit" do
|
|
28
|
+
controller.edit_resource_path.should == '/tags/2/edit'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "edit_resource_path(9) to /tags/9/edit" do
|
|
32
|
+
controller.edit_resource_path(9).should == '/tags/9/edit'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "new_resource_path to /forums/1/tags/new" do
|
|
36
|
+
controller.new_resource_path.should == '/tags/new'
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "enclosing_resource_path should raise error" do
|
|
40
|
+
lambda{ controller.enclosing_resource_path }.should raise_error
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
describe "resource_service in TagsController" do
|
|
45
|
+
|
|
46
|
+
before(:each) do
|
|
47
|
+
@resource_service = controller.send :resource_service
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it ".new should call new on Tag" do
|
|
51
|
+
Tag.should_receive(:new).with(:args => "args")
|
|
52
|
+
resource = @resource_service.new(:args => "args")
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it ".find should call find on Tag" do
|
|
56
|
+
Tag.should_receive(:find).with(:id)
|
|
57
|
+
resource = @resource_service.find(:id)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
describe "Requesting /tags/index" do
|
|
62
|
+
|
|
63
|
+
before(:each) do
|
|
64
|
+
@tags = mock('Tags')
|
|
65
|
+
Tag.stub!(:all).and_return(@tags)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def do_get
|
|
69
|
+
@controller.stub!(:request_path).and_return('/tags/index')
|
|
70
|
+
get :index
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "should find the tags" do
|
|
74
|
+
Tag.should_receive(:all).and_return(@tags)
|
|
75
|
+
do_get
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "should assign the tags for the view" do
|
|
79
|
+
do_get
|
|
80
|
+
assigns[:tags].should == @tags
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module TagsViaAccountInfoHelper
|
|
4
|
+
def setup_mocks
|
|
5
|
+
@current_user = mock('user')
|
|
6
|
+
@current_user.stub!(:id).and_return('1')
|
|
7
|
+
User.stub!(:find).and_return(@current_user)
|
|
8
|
+
@info = mock('info')
|
|
9
|
+
@info.stub!(:id).and_return('3')
|
|
10
|
+
@current_user.stub!(:info).and_return(@info)
|
|
11
|
+
@info_tags = mock('info_tags')
|
|
12
|
+
@info.stub!(:tags).and_return(@info_tags)
|
|
13
|
+
@controller.instance_variable_set('@current_user', @current_user)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe TagsController do
|
|
18
|
+
describe "Routing shortcuts for Tags via account info (/account/info/) should map" do
|
|
19
|
+
include TagsViaAccountInfoHelper
|
|
20
|
+
|
|
21
|
+
before(:each) do
|
|
22
|
+
setup_mocks
|
|
23
|
+
@tag = mock('Tag')
|
|
24
|
+
@tag.stub!(:to_param).and_return('2')
|
|
25
|
+
@info_tags.stub!(:find).and_return(@tag)
|
|
26
|
+
|
|
27
|
+
@controller.stub!(:request_path).and_return('/account/info/tags/2')
|
|
28
|
+
get :show, :id => 2
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "resources_path to /account/info/tags" do
|
|
32
|
+
controller.resources_path.should == '/account/info/tags'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "resource_path to /account/info/tags/2" do
|
|
36
|
+
controller.resource_path.should == '/account/info/tags/2'
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "resource_path(9) to /account/info/tags/9" do
|
|
40
|
+
controller.resource_path(9).should == '/account/info/tags/9'
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "edit_resource_path to /account/info/tags/2/edit" do
|
|
44
|
+
controller.edit_resource_path.should == '/account/info/tags/2/edit'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "edit_resource_path(9) to /account/info/tags/9/edit" do
|
|
48
|
+
controller.edit_resource_path(9).should == '/account/info/tags/9/edit'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "new_resource_path to /account/info/tags/new" do
|
|
52
|
+
controller.new_resource_path.should == '/account/info/tags/new'
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "enclosing_resource_path to /account/info" do
|
|
56
|
+
controller.enclosing_resource_path.should == "/account/info"
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe "resource_service in TagsController via Account Info" do
|
|
61
|
+
include TagsViaAccountInfoHelper
|
|
62
|
+
|
|
63
|
+
before(:each) do
|
|
64
|
+
@info = Info.create
|
|
65
|
+
@account = User.create :info => @info
|
|
66
|
+
@info.tags << (@tag = Tag.create)
|
|
67
|
+
@other_tag = Tag.create
|
|
68
|
+
|
|
69
|
+
@controller.instance_variable_set('@current_user', @account)
|
|
70
|
+
@controller.stub!(:request_path).and_return('/account/info/tags')
|
|
71
|
+
get :index
|
|
72
|
+
@resource_service = controller.send :resource_service
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it "should build new tag with @info fk and type with new" do
|
|
76
|
+
resource = @resource_service.new
|
|
77
|
+
resource.should be_kind_of(Tag)
|
|
78
|
+
resource.taggable_id.should == @info.id
|
|
79
|
+
resource.taggable_type.should == 'Info'
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it "should find @tag with find(@tag.id)" do
|
|
83
|
+
resource = @resource_service.find(@tag.id)
|
|
84
|
+
resource.should == @tag
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "should raise RecordNotFound with find(@other_tag.id)" do
|
|
88
|
+
lambda{ @resource_service.find(@other_tag.id) }.should raise_error(ActiveRecord::RecordNotFound)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it "should find only tags belonging to @info with find(:all)" do
|
|
92
|
+
resources = @resource_service.find(:all)
|
|
93
|
+
resources.should be == Tag.find(:all, :conditions => "taggable_id = #{@info.id} AND taggable_type = 'Info'")
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
describe "Requesting /forums/1/tags using GET" do
|
|
98
|
+
include TagsViaAccountInfoHelper
|
|
99
|
+
|
|
100
|
+
before(:each) do
|
|
101
|
+
setup_mocks
|
|
102
|
+
@tags = mock('Tags')
|
|
103
|
+
@info_tags.stub!(:all).and_return(@tags)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def do_get
|
|
107
|
+
@controller.stub!(:request_path).and_return('/account/info/tags')
|
|
108
|
+
get :index
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it "should find the account as current_user" do
|
|
112
|
+
do_get
|
|
113
|
+
assigns['account'].should == @current_user
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it "should get info from current_user" do
|
|
117
|
+
@current_user.should_receive(:info).and_return(@info)
|
|
118
|
+
do_get
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it "should get tags assoc from info" do
|
|
122
|
+
@info.should_receive(:tags).and_return(@info_tags)
|
|
123
|
+
do_get
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it "should get tags from tags assoc" do
|
|
127
|
+
@info_tags.should_receive(:all).and_return(@tags)
|
|
128
|
+
do_get
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module TagsViaForumPostCommentSpecHelper
|
|
4
|
+
def setup_mocks
|
|
5
|
+
@forum = mock('Forum')
|
|
6
|
+
Forum.stub!(:find).and_return(@forum)
|
|
7
|
+
@forum.stub!(:to_param).and_return('1')
|
|
8
|
+
@forum_posts = mock('forum_posts assoc')
|
|
9
|
+
@forum.stub!(:posts).and_return(@forum_posts)
|
|
10
|
+
|
|
11
|
+
@post = mock('Post')
|
|
12
|
+
@forum_posts.stub!(:find).and_return(@post)
|
|
13
|
+
@post.stub!(:to_param).and_return('2')
|
|
14
|
+
@post_comments = mock('post_comments assoc')
|
|
15
|
+
@post.stub!(:comments).and_return(@post_comments)
|
|
16
|
+
|
|
17
|
+
@comment = mock('Comment')
|
|
18
|
+
@post_comments.stub!(:find).and_return(@comment)
|
|
19
|
+
@comment.stub!(:to_param).and_return('3')
|
|
20
|
+
@comment_tags = mock('comment_tags assoc')
|
|
21
|
+
@comment.stub!(:tags).and_return(@comment_tags)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe TagsController do
|
|
26
|
+
describe "Routing shortcuts for Tags via Forum, Post and Comment (forums/1/posts/2/comments/3tags/4) should map" do
|
|
27
|
+
include TagsViaForumPostCommentSpecHelper
|
|
28
|
+
|
|
29
|
+
before(:each) do
|
|
30
|
+
setup_mocks
|
|
31
|
+
@tag = mock('Tag')
|
|
32
|
+
@tag.stub!(:to_param).and_return('4')
|
|
33
|
+
@comment_tags.stub!(:find).and_return(@tag)
|
|
34
|
+
|
|
35
|
+
get :show, :forum_id => "1", :post_id => "2", :comment_id => '3', :id => "4"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "resources_path to /forums/1/posts/2/comments/3/tags" do
|
|
39
|
+
controller.resources_path.should == '/forums/1/posts/2/comments/3/tags'
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "resource_path to /forums/1/posts/2/comments/3/tags/4" do
|
|
43
|
+
controller.resource_path.should == '/forums/1/posts/2/comments/3/tags/4'
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "resource_path(9) to /forums/1/posts/2/comments/3/tags/9" do
|
|
47
|
+
controller.resource_path(9).should == '/forums/1/posts/2/comments/3/tags/9'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "edit_resource_path to /forums/1/posts/2/comments/3/tags/4/edit" do
|
|
51
|
+
controller.edit_resource_path.should == '/forums/1/posts/2/comments/3/tags/4/edit'
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "edit_resource_path(9) to /forums/1/posts/2/comments/3/tags/9/edit" do
|
|
55
|
+
controller.edit_resource_path(9).should == '/forums/1/posts/2/comments/3/tags/9/edit'
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "new_resource_path to /forums/1/posts/2/comments/3/tags/new" do
|
|
59
|
+
controller.new_resource_path.should == '/forums/1/posts/2/comments/3/tags/new'
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "enclosing_resource_path to /forums/1/posts/2/comments/3" do
|
|
63
|
+
controller.enclosing_resource_path.should == "/forums/1/posts/2/comments/3"
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
describe "resource_service in TagsController via Forum, Post and Comment" do
|
|
68
|
+
|
|
69
|
+
before(:each) do
|
|
70
|
+
@forum = Forum.create
|
|
71
|
+
@post = Post.create :forum_id => @forum.id
|
|
72
|
+
@comment = Comment.create :post_id => @post.id, :user => User.create!
|
|
73
|
+
@tag = Tag.create :taggable_id => @comment.id, :taggable_type => 'Comment'
|
|
74
|
+
@other_comment = Comment.create :post_id => @forum.id
|
|
75
|
+
@other_tag = Tag.create :taggable_id => @other_comment.id, :taggable_type => 'Comment'
|
|
76
|
+
|
|
77
|
+
get :index, :forum_id => @forum.id, :post_id => @post.id, :comment_id => @comment.id
|
|
78
|
+
@resource_service = controller.send :resource_service
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "should build new tag with @comment fk and type with new" do
|
|
82
|
+
resource = @resource_service.new
|
|
83
|
+
resource.should be_kind_of(Tag)
|
|
84
|
+
resource.taggable_id.should == @comment.id
|
|
85
|
+
resource.taggable_type.should == 'Comment'
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "should find @tag with find(@tag.id)" do
|
|
89
|
+
resource = @resource_service.find(@tag.id)
|
|
90
|
+
resource.should == @tag
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "should raise RecordNotFound with find(@other_tag.id)" do
|
|
94
|
+
lambda{ @resource_service.find(@other_tag.id) }.should raise_error(ActiveRecord::RecordNotFound)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "should find only tags belonging to @post with find(:all)" do
|
|
98
|
+
resources = @resource_service.find(:all)
|
|
99
|
+
resources.should be == Tag.find(:all, :conditions => "taggable_id = #{@comment.id} AND taggable_type = 'Comment'")
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
describe "Requesting /forums/1/posts/2/comment/3/tags using GET" do
|
|
104
|
+
include TagsViaForumPostCommentSpecHelper
|
|
105
|
+
|
|
106
|
+
before(:each) do
|
|
107
|
+
setup_mocks
|
|
108
|
+
@tags = mock('Tags')
|
|
109
|
+
@comment_tags.stub!(:all).and_return(@tags)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def do_get
|
|
113
|
+
get :index, :forum_id => '1', :post_id => '2', :comment_id => '3'
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it "should find the forum" do
|
|
117
|
+
Forum.should_receive(:find).with('1').and_return(@forum)
|
|
118
|
+
do_get
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it "should find the post" do
|
|
122
|
+
@forum_posts.should_receive(:find).with('2').and_return(@post)
|
|
123
|
+
do_get
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it "should find the comment" do
|
|
127
|
+
@post_comments.should_receive(:find).with('3').and_return(@comment)
|
|
128
|
+
do_get
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it "should assign the found forum, post, and comment for the view" do
|
|
132
|
+
do_get
|
|
133
|
+
assigns[:forum].should == @forum
|
|
134
|
+
assigns[:post].should == @post
|
|
135
|
+
assigns[:comment].should == @comment
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it "should assign the comment_tags association as the tags resource_service" do
|
|
139
|
+
@comment.should_receive(:tags).and_return(@comment_tags)
|
|
140
|
+
do_get
|
|
141
|
+
@controller.resource_service.should == @comment_tags
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module TagsViaForumPostSpecHelper
|
|
4
|
+
def setup_mocks
|
|
5
|
+
@forum = mock('Forum')
|
|
6
|
+
Forum.stub!(:find).and_return(@forum)
|
|
7
|
+
@forum.stub!(:to_param).and_return('1')
|
|
8
|
+
@forum_posts = mock('forum_posts assoc')
|
|
9
|
+
@forum.stub!(:posts).and_return(@forum_posts)
|
|
10
|
+
|
|
11
|
+
@post = mock('Post')
|
|
12
|
+
@forum_posts.stub!(:find).and_return(@post)
|
|
13
|
+
@post.stub!(:to_param).and_return('2')
|
|
14
|
+
@post_tags = mock('post_tags assoc')
|
|
15
|
+
@post.stub!(:tags).and_return(@post_tags)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe TagsController do
|
|
20
|
+
describe "Routing shortcuts for Tags via Forum and Post (forums/1/posts/2/tags/3) should map" do
|
|
21
|
+
include TagsViaForumPostSpecHelper
|
|
22
|
+
|
|
23
|
+
before(:each) do
|
|
24
|
+
setup_mocks
|
|
25
|
+
@tag = mock('Tag')
|
|
26
|
+
@tag.stub!(:to_param).and_return('3')
|
|
27
|
+
@post_tags.stub!(:find).and_return(@tag)
|
|
28
|
+
|
|
29
|
+
@controller.stub!(:request_path).and_return('/forums/1/posts/1/tags/3')
|
|
30
|
+
get :show, :forum_id => "1", :post_id => "2", :id => "3"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "resources_path to /forums/1/posts/2/tags" do
|
|
34
|
+
controller.resources_path.should == '/forums/1/posts/2/tags'
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "resource_path to /forums/1/posts/2/tags/3" do
|
|
38
|
+
controller.resource_path.should == '/forums/1/posts/2/tags/3'
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "resource_path(9) to /forums/1/posts/2/tags/9" do
|
|
42
|
+
controller.resource_path(9).should == '/forums/1/posts/2/tags/9'
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "edit_resource_path to /forums/1/posts/2/tags/3/edit" do
|
|
46
|
+
controller.edit_resource_path.should == '/forums/1/posts/2/tags/3/edit'
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "edit_resource_path(9) to /forums/1/posts/2/tags/9/edit" do
|
|
50
|
+
controller.edit_resource_path(9).should == '/forums/1/posts/2/tags/9/edit'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "new_resource_path to /forums/1/posts/2/tags/new" do
|
|
54
|
+
controller.new_resource_path.should == '/forums/1/posts/2/tags/new'
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "enclosing_resource_path to /forums/1/posts/2" do
|
|
58
|
+
controller.enclosing_resource_path.should == "/forums/1/posts/2"
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
describe "resource_service in TagsController via Forum and Post" do
|
|
63
|
+
|
|
64
|
+
before(:each) do
|
|
65
|
+
@forum = Forum.create
|
|
66
|
+
@post = Post.create :forum_id => @forum.id
|
|
67
|
+
@tag = Tag.create :taggable_id => @post.id, :taggable_type => 'Post'
|
|
68
|
+
@other_post = Post.create :forum_id => @forum.id
|
|
69
|
+
@other_tag = Tag.create :taggable_id => @other_post.id, :taggable_type => 'Post'
|
|
70
|
+
|
|
71
|
+
@controller.stub!(:request_path).and_return("/forums/:id/posts/:id/tags")
|
|
72
|
+
get :index, :forum_id => @forum.id, :post_id => @post.id
|
|
73
|
+
@resource_service = controller.send :resource_service
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "should build new tag with @post fk and type with new" do
|
|
77
|
+
resource = @resource_service.new
|
|
78
|
+
resource.should be_kind_of(Tag)
|
|
79
|
+
resource.taggable_id.should == @post.id
|
|
80
|
+
resource.taggable_type.should == 'Post'
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "should find @tag with find(@tag.id)" do
|
|
84
|
+
resource = @resource_service.find(@tag.id)
|
|
85
|
+
resource.should == @tag
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "should raise RecordNotFound with find(@other_tag.id)" do
|
|
89
|
+
lambda{ @resource_service.find(@other_tag.id) }.should raise_error(ActiveRecord::RecordNotFound)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "should find only tags belonging to @post with find(:all)" do
|
|
93
|
+
resources = @resource_service.find(:all)
|
|
94
|
+
resources.should be == Tag.find(:all, :conditions => "taggable_id = #{@post.id} AND taggable_type = 'Post'")
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
describe "Requesting /forums/1/posts/2/tags using GET" do
|
|
99
|
+
include TagsViaForumPostSpecHelper
|
|
100
|
+
|
|
101
|
+
before(:each) do
|
|
102
|
+
setup_mocks
|
|
103
|
+
@tags = mock('Tags')
|
|
104
|
+
@post_tags.stub!(:all).and_return(@tags)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def do_get
|
|
108
|
+
@controller.stub!(:request_path).and_return("/forums/1/posts/2/tags")
|
|
109
|
+
get :index, :forum_id => '1', :post_id => '2'
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "should find the forum" do
|
|
113
|
+
Forum.should_receive(:find).with('1').and_return(@forum)
|
|
114
|
+
do_get
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "should find the post" do
|
|
118
|
+
@forum_posts.should_receive(:find).with('2').and_return(@post)
|
|
119
|
+
do_get
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it "should assign the found post for the view" do
|
|
123
|
+
do_get
|
|
124
|
+
assigns[:post].should == @post
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it "should assign the post_tags association as the tags resource_service" do
|
|
128
|
+
@post.should_receive(:tags).and_return(@post_tags)
|
|
129
|
+
do_get
|
|
130
|
+
@controller.resource_service.should == @post_tags
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|