Start refactor of comment_spec.

This commit is contained in:
Sarah Mei 2011-02-24 20:46:05 -08:00
parent 83576d75ef
commit 40fa91ead9

View file

@ -5,66 +5,58 @@
require 'spec_helper' require 'spec_helper'
describe Comment do describe Comment do
let(:user) {alice} before do
let(:aspect) {user.aspects.first} @alices_aspect = alice.aspects.first
@bobs_aspect = bob.aspects.first
let(:user2) {bob} end
let(:aspect2) {user2.aspects.first}
describe 'comment#notification_type' do describe 'comment#notification_type' do
let(:user3) {Factory(:user)}
let(:aspect3) {user3.aspects.create(:name => "Faces")}
let!(:connecting2) { connect_users(user, aspect, user3, aspect3) }
before do before do
@post2 = user2.post(:status_message, :message => 'yo', :to => aspect2.id) @sam = Factory(:user_with_aspect)
@post1 = user.post(:status_message, :message => "hello", :to => aspect.id) connect_users(alice, @alices_aspect, @sam, @sam.aspects.first)
@c11 = user2.comment "why so formal?", :on => @post1
@c12 = user.comment "I simply felt like issuing a greeting. Do step off.", :on => @post1 @alices_post = alice.post(:status_message, :message => "hello", :to => @alices_aspect.id)
@c22 = user2.comment "I simply felt like issuing a greeting. Do step off.", :on => @post2
end end
it "returns 'comment_on_post' if the comment is on a post you own" do it "returns 'comment_on_post' if the comment is on a post you own" do
@c11.notification_type(user, user2.person).should == 'comment_on_post' comment = bob.comment("why so formal?", :on => @alices_post)
comment.notification_type(alice, bob.person).should == 'comment_on_post'
end end
it 'returns false if the comment is not on a post you own and no one "also_commented"' do it 'returns false if the comment is not on a post you own and no one "also_commented"' do
@c12.notification_type(user3, user.person).should == false comment = alice.comment("I simply felt like issuing a greeting. Do step off.", :on => @alices_post)
comment.notification_type(@sam, alice.person).should == false
end end
context "also commented" do context "also commented" do
before do before do
@c13 = user3.comment "I also commented on the first user's post", :on => @post1 bob.comment("a-commenta commenta", :on => @alices_post)
@comment = @sam.comment("I also commented on the first user's post", :on => @alices_post)
end end
it 'does not return also commented if the user commented' do it 'does not return also commented if the user commented' do
@c13.notification_type(user3, user.person).should == false @comment.notification_type(@sam, alice.person).should == false
end end
it "returns 'also_commented' if another person commented on a post you commented on" do it "returns 'also_commented' if another person commented on a post you commented on" do
@c13.notification_type(user2, user.person).should == 'also_commented' @comment.notification_type(bob, alice.person).should == 'also_commented'
end end
end end
end end
describe 'User#comment' do describe 'User#comment' do
before do before do
@status = user.post(:status_message, :message => "hello", :to => aspect.id) @status = alice.post(:status_message, :message => "hello", :to => @alices_aspect.id)
end end
it "should be able to comment on his own status" do it "should be able to comment on one's own status" do
@status.comments.should == [] alice.comment("Yeah, it was great", :on => @status)
user.comment "Yeah, it was great", :on => @status
@status.reload.comments.first.text.should == "Yeah, it was great" @status.reload.comments.first.text.should == "Yeah, it was great"
end end
it "should be able to comment on a person's status" do it "should be able to comment on a contact's status" do
user2.comment "sup dog", :on => @status bob.comment("sup dog", :on => @status)
@status.reload.comments.first.text.should == "sup dog" @status.reload.comments.first.text.should == "sup dog"
end end
end end
@ -72,37 +64,37 @@ describe Comment do
context 'comment propagation' do context 'comment propagation' do
before do before do
@person = Factory.create(:person) @person = Factory.create(:person)
user.activate_contact(@person, aspect) alice.activate_contact(@person, @alices_aspect)
@person2 = Factory.create(:person) @person2 = Factory.create(:person)
@person3 = Factory.create(:person) @person3 = Factory.create(:person)
user.activate_contact(@person3, aspect) alice.activate_contact(@person3, @alices_aspect)
@person_status = Factory.create(:status_message, :person => @person) @person_status = Factory.create(:status_message, :person => @person)
user.reload alice.reload
@user_status = user.post :status_message, :message => "hi", :to => aspect.id @user_status = alice.post :status_message, :message => "hi", :to => @alices_aspect.id
aspect.reload @alices_aspect.reload
user.reload alice.reload
end end
it 'should send the comment to the postman' do it 'should send the comment to the postman' do
m = mock() m = mock()
m.stub!(:post) m.stub!(:post)
Postzord::Dispatch.should_receive(:new).and_return(m) Postzord::Dispatch.should_receive(:new).and_return(m)
user.comment "yo", :on => @person_status alice.comment "yo", :on => @person_status
end end
describe '#subscribers' do describe '#subscribers' do
it 'returns the posts original audience, if the post is owned by the user' do it 'returns the posts original audience, if the post is owned by the user' do
comment = user.build_comment "yo", :on => @person_status comment = alice.build_comment "yo", :on => @person_status
comment.subscribers(user).should =~ [@person] comment.subscribers(alice).should =~ [@person]
end end
it 'returns the owner of the original post, if the user owns the comment' do it 'returns the owner of the original post, if the user owns the comment' do
comment = user.build_comment "yo", :on => @user_status comment = alice.build_comment "yo", :on => @user_status
comment.subscribers(user).map{|s| s.id}.should =~ [@person, @person3, user2.person].map{|s| s.id} comment.subscribers(alice).map { |s| s.id }.should =~ [@person, @person3, bob.person].map { |s| s.id }
end end
end end
@ -112,27 +104,27 @@ describe Comment do
m.stub!(:post) m.stub!(:post)
Postzord::Dispatch.should_receive(:new).and_return(m) Postzord::Dispatch.should_receive(:new).and_return(m)
user.comment "yo", :on => @person_status alice.comment "yo", :on => @person_status
end end
end end
it 'should not clear the aspect post array on receiving a comment' do it 'should not clear the aspect post array on receiving a comment' do
aspect.post_ids.include?(@user_status.id).should be_true @alices_aspect.post_ids.include?(@user_status.id).should be_true
comment = Comment.new(:person_id => @person.id, :text => "cats", :post => @user_status) comment = Comment.new(:person_id => @person.id, :text => "cats", :post => @user_status)
zord = Postzord::Receiver.new(user, :person => @person) zord = Postzord::Receiver.new(alice, :person => @person)
zord.parse_and_receive(comment.to_diaspora_xml) zord.parse_and_receive(comment.to_diaspora_xml)
aspect.reload @alices_aspect.reload
aspect.post_ids.include?(@user_status.id).should be_true @alices_aspect.post_ids.include?(@user_status.id).should be_true
end end
end end
describe 'xml' do describe 'xml' do
before do before do
@commenter = Factory.create(:user) @commenter = Factory.create(:user)
@commenter_aspect = @commenter.aspects.create(:name => "bruisers") @commenter_aspect = @commenter.aspects.create(:name => "bruisers")
connect_users(user, aspect, @commenter, @commenter_aspect) connect_users(alice, @alices_aspect, @commenter, @commenter_aspect)
@post = user.post :status_message, :message => "hello", :to => aspect.id @post = alice.post :status_message, :message => "hello", :to => @alices_aspect.id
@comment = @commenter.comment "Fool!", :on => @post @comment = @commenter.comment "Fool!", :on => @post
@xml = @comment.to_xml.to_s @xml = @comment.to_xml.to_s
end end
@ -156,53 +148,53 @@ describe Comment do
end end
describe 'local commenting' do describe 'local commenting' do
before do before do
@status = user.post(:status_message, :message => "hello", :to => aspect.id) @status = alice.post(:status_message, :message => "hello", :to => @alices_aspect.id)
end end
it 'does not multi-post a comment' do it 'does not multi-post a comment' do
lambda { lambda {
user.comment 'hello', :on => @status alice.comment 'hello', :on => @status
}.should change { Comment.count }.by(1) }.should change { Comment.count }.by(1)
end end
end end
describe 'comments' do describe 'comments' do
before do before do
@remote_message = user2.post :status_message, :message => "hello", :to => aspect2.id @remote_message = bob.post :status_message, :message => "hello", :to => @bobs_aspect.id
@message = user.post :status_message, :message => "hi", :to => aspect.id @message = alice.post :status_message, :message => "hi", :to => @alices_aspect.id
end end
it 'should attach the creator signature if the user is commenting' do it 'should attach the creator signature if the user is commenting' do
comment = user.comment "Yeah, it was great", :on => @remote_message comment = alice.comment "Yeah, it was great", :on => @remote_message
@remote_message.comments.reset @remote_message.comments.reset
@remote_message.comments.first.signature_valid?.should be_true @remote_message.comments.first.signature_valid?.should be_true
end end
it 'should sign the comment if the user is the post creator' do it 'should sign the comment if the user is the post creator' do
message = user.post :status_message, :message => "hi", :to => aspect.id message = alice.post :status_message, :message => "hi", :to => @alices_aspect.id
user.comment "Yeah, it was great", :on => message alice.comment "Yeah, it was great", :on => message
message.comments.reset message.comments.reset
message.comments.first.signature_valid?.should be_true message.comments.first.signature_valid?.should be_true
message.comments.first.verify_post_creator_signature.should be_true message.comments.first.verify_post_creator_signature.should be_true
end end
it 'should verify a comment made on a remote post by a different contact' do it 'should verify a comment made on a remote post by a different contact' do
comment = Comment.new(:person => user2.person, :text => "cats", :post => @remote_message) comment = Comment.new(:person => bob.person, :text => "cats", :post => @remote_message)
comment.creator_signature = comment.send(:sign_with_key,user2.encryption_key) comment.creator_signature = comment.send(:sign_with_key, bob.encryption_key)
comment.signature_valid?.should be_true comment.signature_valid?.should be_true
comment.verify_post_creator_signature.should be_false comment.verify_post_creator_signature.should be_false
comment.post_creator_signature = comment.send(:sign_with_key,user.encryption_key) comment.post_creator_signature = comment.send(:sign_with_key, alice.encryption_key)
comment.verify_post_creator_signature.should be_true comment.verify_post_creator_signature.should be_true
end end
it 'should reject comments on a remote post with only a creator sig' do it 'should reject comments on a remote post with only a creator sig' do
comment = Comment.new(:person => user2.person, :text => "cats", :post => @remote_message) comment = Comment.new(:person => bob.person, :text => "cats", :post => @remote_message)
comment.creator_signature = comment.send(:sign_with_key,user2.encryption_key) comment.creator_signature = comment.send(:sign_with_key, bob.encryption_key)
comment.signature_valid?.should be_true comment.signature_valid?.should be_true
comment.verify_post_creator_signature.should be_false comment.verify_post_creator_signature.should be_false
end end
it 'should receive remote comments on a user post with a creator sig' do it 'should receive remote comments on a user post with a creator sig' do
comment = Comment.new(:person => user2.person, :text => "cats", :post => @message) comment = Comment.new(:person => bob.person, :text => "cats", :post => @message)
comment.creator_signature = comment.send(:sign_with_key,user2.encryption_key) comment.creator_signature = comment.send(:sign_with_key, bob.encryption_key)
comment.signature_valid?.should be_true comment.signature_valid?.should be_true
comment.verify_post_creator_signature.should be_false comment.verify_post_creator_signature.should be_false
end end
@ -210,7 +202,7 @@ describe Comment do
describe 'youtube' do describe 'youtube' do
before do before do
@message = user.post :status_message, :message => "hi", :to => aspect.id @message = alice.post :status_message, :message => "hi", :to => @alices_aspect.id
end end
it 'should process youtube titles on the way in' do it 'should process youtube titles on the way in' do
video_id = "ABYnqp-bxvg" video_id = "ABYnqp-bxvg"
@ -222,7 +214,7 @@ describe Comment do
mock_http.should_receive(:get).with('/feeds/api/videos/'+video_id+'?v=2', nil).and_return( mock_http.should_receive(:get).with('/feeds/api/videos/'+video_id+'?v=2', nil).and_return(
[nil, 'Foobar <title>'+expected_title+'</title> hallo welt <asd><dasdd><a>dsd</a>']) [nil, 'Foobar <title>'+expected_title+'</title> hallo welt <asd><dasdd><a>dsd</a>'])
comment = user.build_comment url, :on => @message comment = alice.build_comment url, :on => @message
comment.save! comment.save!
Comment.find(comment.id).youtube_titles.should == {video_id => CGI::escape(expected_title)} Comment.find(comment.id).youtube_titles.should == {video_id => CGI::escape(expected_title)}