# encoding: UTF-8
require 'test_helper'
describe Vines::Stanza do
subject { Vines::Stanza::Message.new(xml, stream) }
let(:alice) { Vines::JID.new('alice@wonderland.lit/tea') }
let(:romeo) { Vines::JID.new('romeo@verona.lit/balcony') }
let(:stream) { MiniTest::Mock.new }
let(:config) do
Vines::Config.new do
host 'wonderland.lit' do
storage(:fs) { dir Dir.tmpdir }
end
end
end
describe 'when stanza contains no addresses' do
let(:xml) { node(%Q{hello!}) }
it 'validates them as nil' do
subject.validate_to.must_be_nil
subject.validate_from.must_be_nil
stream.verify
end
end
describe 'when stanza contains valid addresses' do
let(:xml) { node(%Q{hello!}) }
it 'validates and returns JID objects' do
subject.validate_to.must_equal romeo
subject.validate_from.must_equal alice
stream.verify
end
end
describe 'when stanza contains invalid addresses' do
let(:xml) { node(%Q{hello!}) }
it 'raises a jid-malformed stanza error' do
-> { subject.validate_to }.must_raise Vines::StanzaErrors::JidMalformed
-> { subject.validate_from }.must_raise Vines::StanzaErrors::JidMalformed
stream.verify
end
end
describe 'when receiving a non-routable stanza type' do
let(:xml) { node('') }
it 'handles locally rather than routing' do
subject.local?.must_equal true
stream.verify
end
end
describe 'when stanza is missing a to address' do
let(:xml) { node(%Q{hello!}) }
it 'handles locally rather than routing' do
subject.local?.must_equal true
stream.verify
end
end
describe 'when stanza is addressed to a local jid' do
let(:xml) { node(%Q{hello!}) }
it 'handles locally rather than routing' do
stream.expect :config, config
subject.local?.must_equal true
stream.verify
end
end
describe 'when stanza is addressed to a remote jid' do
let(:xml) { node(%Q{hello!}) }
it 'is not considered a local stanza' do
stream.expect :config, config
subject.local?.must_equal false
stream.verify
end
end
end