remove outer (deprecated) describe blocks from shared examples

This commit is contained in:
Jonne Haß 2014-01-06 19:43:00 +01:00
parent a0bbd899de
commit b5854d3172
4 changed files with 300 additions and 310 deletions

View file

@ -4,39 +4,36 @@
require 'spec_helper' require 'spec_helper'
describe 'deleteing your account' do shared_examples_for 'it removes the person associations' do
shared_examples_for 'it removes the person associations' do it "removes all of the person's posts" do
it "removes all of the person's posts" do Post.where(:author_id => @person.id).count.should == 0
Post.where(:author_id => @person.id).count.should == 0 end
end
it 'deletes all person contacts' do it 'deletes all person contacts' do
Contact.where(:person_id => @person.id).should be_empty Contact.where(:person_id => @person.id).should be_empty
end end
it 'deletes all mentions' do it 'deletes all mentions' do
@person.mentions.should be_empty @person.mentions.should be_empty
end end
it "removes all of the person's photos" do it "removes all of the person's photos" do
Photo.where(:author_id => @person.id).should be_empty Photo.where(:author_id => @person.id).should be_empty
end end
it 'sets the person object as closed and the profile is cleared' do it 'sets the person object as closed and the profile is cleared' do
@person.reload.closed_account.should be_true @person.reload.closed_account.should be_true
@person.profile.reload.first_name.should be_blank @person.profile.reload.first_name.should be_blank
@person.profile.reload.last_name.should be_blank @person.profile.reload.last_name.should be_blank
end end
it 'deletes only the converersation visibility for the deleted user' do it 'deletes only the converersation visibility for the deleted user' do
ConversationVisibility.where(:person_id => alice.person.id).should_not be_empty ConversationVisibility.where(:person_id => alice.person.id).should_not be_empty
ConversationVisibility.where(:person_id => @person.id).should be_empty ConversationVisibility.where(:person_id => @person.id).should be_empty
end end
it "deletes the share visibilities on the person's posts" do it "deletes the share visibilities on the person's posts" do
ShareVisibility.for_contacts_of_a_person(@person).should be_empty ShareVisibility.for_contacts_of_a_person(@person).should be_empty
end
end end
end end

View file

@ -4,127 +4,125 @@
require 'spec_helper' require 'spec_helper'
describe Diaspora::Relayable do shared_examples_for "it is relayable" do
shared_examples_for "it is relayable" do
describe 'interacted_at' do describe 'interacted_at' do
it 'sets the interacted at of the parent to the created at of the relayable post' do it 'sets the interacted at of the parent to the created at of the relayable post' do
Timecop.freeze Time.now do Timecop.freeze Time.now do
relayable = build_object
relayable.save
if relayable.parent.respond_to?(:interacted_at) #I'm sorry.
relayable.parent.interacted_at.to_i.should == relayable.created_at.to_i
end
end
end
end
describe 'validations' do
describe 'on :author_id' do
context "the author is on the parent object author's ignore list when object is created" do
before do
bob.blocks.create(:person => alice.person)
@relayable = build_object
end
it "is invalid" do
@relayable.should_not be_valid
@relayable.should have(1).error_on(:author_id)
end
it "sends a retraction for the object" do
pending 'need to figure out how to test this'
RelayableRetraction.should_receive(:build)
Postzord::Dispatcher.should_receive(:build)
@relayable.valid?
end
it "works if the object has no parent" do # This can happen if we get a comment for a post that's been deleted
@relayable.parent = nil
expect { @relayable.valid? }.to_not raise_exception
end
end
context "the author is added to the parent object author's ignore list later" do
it "is valid" do
relayable = build_object relayable = build_object
relayable.save relayable.save!
if relayable.parent.respond_to?(:interacted_at) #I'm sorry. bob.blocks.create(:person => alice.person)
relayable.parent.interacted_at.to_i.should == relayable.created_at.to_i relayable.should be_valid
end
end end
end end
end end
end
describe 'validations' do context 'encryption' do
describe 'on :author_id' do describe '#parent_author_signature' do
context "the author is on the parent object author's ignore list when object is created" do it 'should sign the object if the user is the post author' do
before do @object_by_parent_author.verify_parent_author_signature.should be_true
bob.blocks.create(:person => alice.person) end
@relayable = build_object
end
it "is invalid" do it 'does not sign as the parent author is not parent' do
@relayable.should_not be_valid @object_by_recipient.author_signature = @object_by_recipient.send(:sign_with_key, @local_leia.encryption_key)
@relayable.should have(1).error_on(:author_id) @object_by_recipient.verify_parent_author_signature.should be_false
end end
it "sends a retraction for the object" do it 'should verify a object made on a remote post by a different contact' do
pending 'need to figure out how to test this' @object_by_recipient.author_signature = @object_by_recipient.send(:sign_with_key, @local_leia.encryption_key)
RelayableRetraction.should_receive(:build) @object_by_recipient.parent_author_signature = @object_by_recipient.send(:sign_with_key, @local_luke.encryption_key)
Postzord::Dispatcher.should_receive(:build) @object_by_recipient.verify_parent_author_signature.should be_true
@relayable.valid?
end
it "works if the object has no parent" do # This can happen if we get a comment for a post that's been deleted
@relayable.parent = nil
expect { @relayable.valid? }.to_not raise_exception
end
end
context "the author is added to the parent object author's ignore list later" do
it "is valid" do
relayable = build_object
relayable.save!
bob.blocks.create(:person => alice.person)
relayable.should be_valid
end
end
end end
end end
context 'encryption' do describe '#author_signature' do
describe '#parent_author_signature' do it 'should sign as the object author' do
it 'should sign the object if the user is the post author' do @object_on_remote_parent.signature_valid?.should be_true
@object_by_parent_author.verify_parent_author_signature.should be_true @object_by_parent_author.signature_valid?.should be_true
end @object_by_recipient.signature_valid?.should be_true
end
end
end
it 'does not sign as the parent author is not parent' do context 'propagation' do
@object_by_recipient.author_signature = @object_by_recipient.send(:sign_with_key, @local_leia.encryption_key) describe '#receive' do
@object_by_recipient.verify_parent_author_signature.should be_false it 'does not overwrite a object that is already in the db' do
end expect {
@dup_object_by_parent_author.receive(@local_leia, @local_luke.person)
it 'should verify a object made on a remote post by a different contact' do }.to_not change { @dup_object_by_parent_author.class.count }
@object_by_recipient.author_signature = @object_by_recipient.send(:sign_with_key, @local_leia.encryption_key)
@object_by_recipient.parent_author_signature = @object_by_recipient.send(:sign_with_key, @local_luke.encryption_key)
@object_by_recipient.verify_parent_author_signature.should be_true
end
end end
describe '#author_signature' do it 'does not process if post_creator_signature is invalid' do
it 'should sign as the object author' do @object_by_parent_author.delete # remove object from db so we set a creator sig
@object_on_remote_parent.signature_valid?.should be_true @dup_object_by_parent_author.parent_author_signature = "dsfadsfdsa"
@object_by_parent_author.signature_valid?.should be_true @dup_object_by_parent_author.receive(@local_leia, @local_luke.person).should == nil
@object_by_recipient.signature_valid?.should be_true end
end
it 'signs when the person receiving is the parent author' do
@object_by_recipient.save
@object_by_recipient.receive(@local_luke, @local_leia.person)
@object_by_recipient.reload.parent_author_signature.should_not be_blank
end
it 'dispatches when the person receiving is the parent author' do
p = Postzord::Dispatcher.build(@local_luke, @object_by_recipient)
p.should_receive(:post)
p.class.stub(:new).and_return(p)
@object_by_recipient.receive(@local_luke, @local_leia.person)
end
it 'calls after_receive callback' do
@object_by_recipient.should_receive(:after_receive)
@object_by_recipient.class.stub(:where).and_return([@object_by_recipient])
@object_by_recipient.receive(@local_luke, @local_leia.person)
end end
end end
context 'propagation' do describe '#subscribers' do
describe '#receive' do it 'returns the posts original audience, if the post is owned by the user' do
it 'does not overwrite a object that is already in the db' do @object_by_parent_author.subscribers(@local_luke).map(&:id).should =~ [@local_leia.person, @remote_raphael].map(&:id)
expect {
@dup_object_by_parent_author.receive(@local_leia, @local_luke.person)
}.to_not change { @dup_object_by_parent_author.class.count }
end
it 'does not process if post_creator_signature is invalid' do
@object_by_parent_author.delete # remove object from db so we set a creator sig
@dup_object_by_parent_author.parent_author_signature = "dsfadsfdsa"
@dup_object_by_parent_author.receive(@local_leia, @local_luke.person).should == nil
end
it 'signs when the person receiving is the parent author' do
@object_by_recipient.save
@object_by_recipient.receive(@local_luke, @local_leia.person)
@object_by_recipient.reload.parent_author_signature.should_not be_blank
end
it 'dispatches when the person receiving is the parent author' do
p = Postzord::Dispatcher.build(@local_luke, @object_by_recipient)
p.should_receive(:post)
p.class.stub(:new).and_return(p)
@object_by_recipient.receive(@local_luke, @local_leia.person)
end
it 'calls after_receive callback' do
@object_by_recipient.should_receive(:after_receive)
@object_by_recipient.class.stub(:where).and_return([@object_by_recipient])
@object_by_recipient.receive(@local_luke, @local_leia.person)
end
end end
describe '#subscribers' do it 'returns the owner of the original post, if the user owns the object' do
it 'returns the posts original audience, if the post is owned by the user' do @object_by_recipient.subscribers(@local_leia).map(&:id).should =~ [@local_luke.person].map(&:id)
@object_by_parent_author.subscribers(@local_luke).map(&:id).should =~ [@local_leia.person, @remote_raphael].map(&:id)
end
it 'returns the owner of the original post, if the user owns the object' do
@object_by_recipient.subscribers(@local_leia).map(&:id).should =~ [@local_luke.person].map(&:id)
end
end end
end end
end end

View file

@ -1,45 +1,43 @@
require 'spec_helper' require 'spec_helper'
describe 'Streams' do shared_examples_for 'it is a stream' do
shared_examples_for 'it is a stream' do context 'required methods for display' do
context 'required methods for display' do it '#title' do
it '#title' do @stream.title.should_not be_nil
@stream.title.should_not be_nil end
end
it '#posts' do it '#posts' do
@stream.posts.should_not be_nil @stream.posts.should_not be_nil
end end
it '#people' do it '#people' do
@stream.people.should_not be_nil @stream.people.should_not be_nil
end end
it '#publisher_opts' do it '#publisher_opts' do
@stream.send(:publisher_opts).should_not be_nil @stream.send(:publisher_opts).should_not be_nil
end end
it 'has a #contacts title' do it 'has a #contacts title' do
@stream.contacts_title.should_not be_nil @stream.contacts_title.should_not be_nil
end end
it 'has a contacts link' do it 'has a contacts link' do
@stream.contacts_link.should_not be_nil @stream.contacts_link.should_not be_nil
end end
it 'should make the stream a time object' do it 'should make the stream a time object' do
@stream.max_time = 123 @stream.max_time = 123
@stream.max_time.should be_a(Time) @stream.max_time.should be_a(Time)
end end
it 'should always have an order (default created_at)' do it 'should always have an order (default created_at)' do
@stream.order=nil @stream.order=nil
@stream.order.should_not be_nil @stream.order.should_not be_nil
end end
it 'initializes a publisher' do it 'initializes a publisher' do
@stream.publisher.should be_a(Publisher) @stream.publisher.should be_a(Publisher)
end
end end
end end
end end

View file

@ -5,165 +5,162 @@
require 'spec_helper' require 'spec_helper'
describe Diaspora::Taggable do shared_examples_for "it is taggable" do
shared_examples_for "it is taggable" do include ActionView::Helpers::UrlHelper
include ActionView::Helpers::UrlHelper
def tag_link(s) def tag_link(s)
link_to "##{s}", "/tags/#{s}", :class => 'tag' link_to "##{s}", "/tags/#{s}", :class => 'tag'
end
describe '.format_tags' do
before do
@str = '#what #hey #vöglein'
@object.send(@object.class.field_with_tags_setter, @str)
@object.build_tags
@object.save!
end end
describe '.format_tags' do it "supports non-ascii characters" do
before do @object.tags(true).map(&:name).should include('vöglein')
@str = '#what #hey #vöglein'
@object.send(@object.class.field_with_tags_setter, @str)
@object.build_tags
@object.save!
end
it "supports non-ascii characters" do
@object.tags(true).map(&:name).should include('vöglein')
end
it 'links each tag' do
formatted_string = Diaspora::Taggable.format_tags(@str)
formatted_string.should include(tag_link('what'))
formatted_string.should include(tag_link('hey'))
formatted_string.should include(tag_link('vöglein'))
end
it 'responds to plain_text' do
Diaspora::Taggable.format_tags(@str, :plain_text => true).should == @str
end
it "doesn't mangle text when tags are involved" do
expected = {
nil => '',
'' => '',
'abc' => 'abc',
'a #b c' => "a #{tag_link('b')} c",
'#' => '#',
'##' => '##',
'###' => '###',
'#a' => tag_link('a'),
'#foobar' => tag_link('foobar'),
'#foocar<br>' => "#{tag_link('foocar')}&lt;br&gt;",
'#fooo@oo' => "#{tag_link('fooo')}@oo",
'#num3ric hash tags' => "#{tag_link('num3ric')} hash tags",
'#12345 tag' => "#{tag_link('12345')} tag",
'#12cde tag' => "#{tag_link('12cde')} tag",
'#abc45 tag' => "#{tag_link('abc45')} tag",
'#<3' => %{<a href="/tags/<3" class="tag">#&lt;3</a>},
'i #<3' => %{i <a href="/tags/<3" class="tag">#&lt;3</a>},
'i #<3 you' => %{i <a href="/tags/<3" class="tag">#&lt;3</a> you},
'#<4' => '#&lt;4',
'test#foo test' => 'test#foo test',
'test.#joo bar' => 'test.#joo bar',
'test #foodar test' => "test #{tag_link('foodar')} test",
'test #foofar<br> test' => "test #{tag_link('foofar')}&lt;br&gt; test",
'test #gooo@oo test' => "test #{tag_link('gooo')}@oo test",
'test #foo-test test' => "test #{tag_link('foo-test')} test",
'test #hoo' => "test #{tag_link('hoo')}",
'test #two_word tags' => "test #{tag_link('two_word')} tags",
'test #three_word_tags' => "test #{tag_link('three_word_tags')}",
'#terminal_underscore_' => tag_link('terminal_underscore_'),
'#terminalunderscore_' => tag_link('terminalunderscore_'),
'#_initialunderscore' => tag_link('_initialunderscore'),
'#_initial_underscore' => tag_link('_initial_underscore'),
'#terminalhyphen-' => tag_link('terminalhyphen-'),
'#terminal-hyphen-' => tag_link('terminal-hyphen-'),
'#terminalhyphen- tag' => "#{tag_link('terminalhyphen-')} tag",
'#-initialhyphen' => tag_link('-initialhyphen'),
'#-initialhyphen tag' => "#{tag_link('-initialhyphen')} tag",
'#-initial-hyphen' => tag_link('-initial-hyphen'),
}
expected.each do |input,output|
Diaspora::Taggable.format_tags(input).should == output
end
end
end end
describe '#build_tags' do it 'links each tag' do
it 'builds the tags' do formatted_string = Diaspora::Taggable.format_tags(@str)
@object.send(@object.class.field_with_tags_setter, '#what') formatted_string.should include(tag_link('what'))
@object.build_tags formatted_string.should include(tag_link('hey'))
@object.tag_list.should == ['what'] formatted_string.should include(tag_link('vöglein'))
lambda {
@object.save
}.should change{@object.tags.count}.by(1)
end
end end
describe '#tag_strings' do it 'responds to plain_text' do
it 'returns a string for every #thing' do Diaspora::Taggable.format_tags(@str, :plain_text => true).should == @str
str = '#what #hey #that"smybike. #@hey ##boo # #THATWASMYBIKE #vöglein #hey#there #135440we #abc/23 ### #h!gh #ok? #see: #re:publica' end
arr = ['what', 'hey', 'that', 'THATWASMYBIKE', 'vöglein', '135440we', 'abc', 'h', 'ok', 'see', 're']
@object.send(@object.class.field_with_tags_setter, str) it "doesn't mangle text when tags are involved" do
@object.tag_strings.should =~ arr expected = {
end nil => '',
'' => '',
'abc' => 'abc',
'a #b c' => "a #{tag_link('b')} c",
'#' => '#',
'##' => '##',
'###' => '###',
'#a' => tag_link('a'),
'#foobar' => tag_link('foobar'),
'#foocar<br>' => "#{tag_link('foocar')}&lt;br&gt;",
'#fooo@oo' => "#{tag_link('fooo')}@oo",
'#num3ric hash tags' => "#{tag_link('num3ric')} hash tags",
'#12345 tag' => "#{tag_link('12345')} tag",
'#12cde tag' => "#{tag_link('12cde')} tag",
'#abc45 tag' => "#{tag_link('abc45')} tag",
'#<3' => %{<a href="/tags/<3" class="tag">#&lt;3</a>},
'i #<3' => %{i <a href="/tags/<3" class="tag">#&lt;3</a>},
'i #<3 you' => %{i <a href="/tags/<3" class="tag">#&lt;3</a> you},
'#<4' => '#&lt;4',
'test#foo test' => 'test#foo test',
'test.#joo bar' => 'test.#joo bar',
'test #foodar test' => "test #{tag_link('foodar')} test",
'test #foofar<br> test' => "test #{tag_link('foofar')}&lt;br&gt; test",
'test #gooo@oo test' => "test #{tag_link('gooo')}@oo test",
'test #foo-test test' => "test #{tag_link('foo-test')} test",
'test #hoo' => "test #{tag_link('hoo')}",
'test #two_word tags' => "test #{tag_link('two_word')} tags",
'test #three_word_tags' => "test #{tag_link('three_word_tags')}",
'#terminal_underscore_' => tag_link('terminal_underscore_'),
'#terminalunderscore_' => tag_link('terminalunderscore_'),
'#_initialunderscore' => tag_link('_initialunderscore'),
'#_initial_underscore' => tag_link('_initial_underscore'),
'#terminalhyphen-' => tag_link('terminalhyphen-'),
'#terminal-hyphen-' => tag_link('terminal-hyphen-'),
'#terminalhyphen- tag' => "#{tag_link('terminalhyphen-')} tag",
'#-initialhyphen' => tag_link('-initialhyphen'),
'#-initialhyphen tag' => "#{tag_link('-initialhyphen')} tag",
'#-initial-hyphen' => tag_link('-initial-hyphen'),
}
it 'extracts tags despite surrounding text' do expected.each do |input,output|
expected = { Diaspora::Taggable.format_tags(input).should == output
'' => nil,
'#' => nil,
'##' => nil,
'###' => nil,
'#a' => 'a',
'#foobar' => 'foobar',
'#foocar<br>' => 'foocar',
'#fooo@oo' => 'fooo',
'#num3ric hash tags' => 'num3ric',
'#12345 tag' => '12345',
'#12cde tag' => '12cde',
'#abc45 tag' => 'abc45',
'#<3' => '<3',
'#<4' => nil,
'test#foo test' => nil,
'test.#joo bar' => nil,
'test #foodar test' => 'foodar',
'test #foofar<br> test' => 'foofar',
'test #gooo@oo test' => 'gooo',
'test #<3 test' => '<3',
'test #foo-test test' => 'foo-test',
'test #hoo' => 'hoo',
'test #two_word tags' => 'two_word',
'test #three_word_tags' => 'three_word_tags',
'#terminal_underscore_' => 'terminal_underscore_',
'#terminalunderscore_' => 'terminalunderscore_',
'#_initialunderscore' => '_initialunderscore',
'#_initial_underscore' => '_initial_underscore',
'#terminalhyphen-' => 'terminalhyphen-',
'#terminal-hyphen-' => 'terminal-hyphen-',
'#terminalhyphen- tag' => 'terminalhyphen-',
'#-initialhyphen' => '-initialhyphen',
'#-initialhyphen tag' => '-initialhyphen',
'#-initial-hyphen' => '-initial-hyphen',
}
expected.each do |text,hashtag|
@object.send @object.class.field_with_tags_setter, text
@object.tag_strings.should == [hashtag].compact
end
end
it 'returns no duplicates' do
str = '#what #what #what #whaaaaaaaaaat'
arr = ['what','whaaaaaaaaaat']
@object.send(@object.class.field_with_tags_setter, str)
@object.tag_strings.should =~ arr
end
it 'is case insensitive' do
str = '#what #wHaT #WHAT'
arr = ['what']
@object.send(@object.class.field_with_tags_setter, str)
@object.tag_strings.should =~ arr
end end
end end
end end
end
describe '#build_tags' do
it 'builds the tags' do
@object.send(@object.class.field_with_tags_setter, '#what')
@object.build_tags
@object.tag_list.should == ['what']
lambda {
@object.save
}.should change{@object.tags.count}.by(1)
end
end
describe '#tag_strings' do
it 'returns a string for every #thing' do
str = '#what #hey #that"smybike. #@hey ##boo # #THATWASMYBIKE #vöglein #hey#there #135440we #abc/23 ### #h!gh #ok? #see: #re:publica'
arr = ['what', 'hey', 'that', 'THATWASMYBIKE', 'vöglein', '135440we', 'abc', 'h', 'ok', 'see', 're']
@object.send(@object.class.field_with_tags_setter, str)
@object.tag_strings.should =~ arr
end
it 'extracts tags despite surrounding text' do
expected = {
'' => nil,
'#' => nil,
'##' => nil,
'###' => nil,
'#a' => 'a',
'#foobar' => 'foobar',
'#foocar<br>' => 'foocar',
'#fooo@oo' => 'fooo',
'#num3ric hash tags' => 'num3ric',
'#12345 tag' => '12345',
'#12cde tag' => '12cde',
'#abc45 tag' => 'abc45',
'#<3' => '<3',
'#<4' => nil,
'test#foo test' => nil,
'test.#joo bar' => nil,
'test #foodar test' => 'foodar',
'test #foofar<br> test' => 'foofar',
'test #gooo@oo test' => 'gooo',
'test #<3 test' => '<3',
'test #foo-test test' => 'foo-test',
'test #hoo' => 'hoo',
'test #two_word tags' => 'two_word',
'test #three_word_tags' => 'three_word_tags',
'#terminal_underscore_' => 'terminal_underscore_',
'#terminalunderscore_' => 'terminalunderscore_',
'#_initialunderscore' => '_initialunderscore',
'#_initial_underscore' => '_initial_underscore',
'#terminalhyphen-' => 'terminalhyphen-',
'#terminal-hyphen-' => 'terminal-hyphen-',
'#terminalhyphen- tag' => 'terminalhyphen-',
'#-initialhyphen' => '-initialhyphen',
'#-initialhyphen tag' => '-initialhyphen',
'#-initial-hyphen' => '-initial-hyphen',
}
expected.each do |text,hashtag|
@object.send @object.class.field_with_tags_setter, text
@object.tag_strings.should == [hashtag].compact
end
end
it 'returns no duplicates' do
str = '#what #what #what #whaaaaaaaaaat'
arr = ['what','whaaaaaaaaaat']
@object.send(@object.class.field_with_tags_setter, str)
@object.tag_strings.should =~ arr
end
it 'is case insensitive' do
str = '#what #wHaT #WHAT'
arr = ['what']
@object.send(@object.class.field_with_tags_setter, str)
@object.tag_strings.should =~ arr
end
end
end