110 lines
3 KiB
Ruby
110 lines
3 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe Salmon::Slap do
|
|
before do
|
|
@post = alice.post(:status_message, :text => "hi", :to => alice.aspects.create(:name => "abcd").id)
|
|
@created_salmon = Salmon::Slap.create_by_user_and_activity(alice, @post.to_diaspora_xml)
|
|
end
|
|
|
|
describe '#create' do
|
|
it 'has data in the magic envelope' do
|
|
@created_salmon.magic_sig.data.should_not be nil
|
|
end
|
|
|
|
it 'has no parsed_data' do
|
|
@created_salmon.parsed_data.should be nil
|
|
end
|
|
|
|
end
|
|
|
|
it 'works' do
|
|
salmon_string = @created_salmon.xml_for(nil)
|
|
salmon = Salmon::Slap.from_xml(salmon_string)
|
|
salmon.author.should == alice.person
|
|
salmon.parsed_data.should == @post.to_diaspora_xml
|
|
end
|
|
|
|
describe '#from_xml' do
|
|
it 'procsses the header' do
|
|
Salmon::Slap.any_instance.should_receive(:process_header)
|
|
Salmon::Slap.from_xml(@created_salmon.xml_for(eve.person))
|
|
end
|
|
end
|
|
|
|
describe "#process_header" do
|
|
it 'sets the author id' do
|
|
slap = Salmon::Slap.new
|
|
slap.process_header(Nokogiri::XML(@created_salmon.plaintext_header))
|
|
slap.author_id.should == alice.diaspora_handle
|
|
end
|
|
end
|
|
|
|
describe '#author' do
|
|
let(:xml) {@created_salmon.xml_for(eve.person)}
|
|
let(:parsed_salmon) { Salmon::Slap.from_xml(xml, alice)}
|
|
|
|
it 'should reference a local author' do
|
|
parsed_salmon.author.should == alice.person
|
|
end
|
|
|
|
it 'should fail if no author is found' do
|
|
parsed_salmon.author_id = 'tom@tom.joindiaspora.com'
|
|
expect {
|
|
parsed_salmon.author.public_key
|
|
}.to raise_error "did you remember to async webfinger?"
|
|
end
|
|
end
|
|
|
|
context 'marshaling' do
|
|
let(:xml) {@created_salmon.xml_for(eve.person)}
|
|
let(:parsed_salmon) { Salmon::Slap.from_xml(xml)}
|
|
|
|
it 'should parse out the authors diaspora_handle' do
|
|
parsed_salmon.author_id.should == alice.person.diaspora_handle
|
|
end
|
|
|
|
it 'verifies the signature for the sender' do
|
|
parsed_salmon.verified_for_key?(alice.public_key).should be_true
|
|
end
|
|
|
|
it 'verifies the signature for the sender' do
|
|
parsed_salmon.verified_for_key?(FactoryGirl.create(:person).public_key).should be_false
|
|
end
|
|
|
|
it 'contains the original data' do
|
|
parsed_salmon.parsed_data.should == @post.to_diaspora_xml
|
|
end
|
|
end
|
|
|
|
describe "#xml_for" do
|
|
before do
|
|
@xml = @created_salmon.xml_for(eve.person)
|
|
end
|
|
|
|
it "has diaspora as the root" do
|
|
doc = Nokogiri::XML(@xml)
|
|
doc.root.name.should == "diaspora"
|
|
end
|
|
|
|
it "it has the descrypted header" do
|
|
doc = Nokogiri::XML(@xml)
|
|
doc.search("header").should_not be_blank
|
|
end
|
|
|
|
context "header" do
|
|
|
|
it "it has author_id node " do
|
|
doc = Nokogiri::XML(@xml)
|
|
search = doc.search("header").search("author_id")
|
|
search.map(&:text).should == [alice.diaspora_handle]
|
|
end
|
|
|
|
end
|
|
|
|
it "it has the magic envelope " do
|
|
doc = Nokogiri::XML(@xml)
|
|
doc.find("/me:env").should_not be_blank
|
|
end
|
|
end
|
|
end
|
|
|