# encoding: UTF-8 require 'tmpdir' require 'vines' require 'ext/nokogiri' require 'minitest/autorun' class StanzaTest < MiniTest::Unit::TestCase def setup @alice = Vines::JID.new('alice@wonderland.lit/tea') @romeo = Vines::JID.new('romeo@verona.lit/balcony') @stream = MiniTest::Mock.new @config = Vines::Config.new do host 'wonderland.lit' do storage(:fs) { dir Dir.tmpdir } end end end def test_validate_missing_addresses node = node(%Q{hello!}) stanza = Vines::Stanza::Message.new(node, @stream) assert_nil stanza.validate_to assert_nil stanza.validate_from assert @stream.verify end def test_validate_valid_addresses node = node(%Q{hello!}) stanza = Vines::Stanza::Message.new(node, @stream) assert_equal @romeo, stanza.validate_to assert_equal @alice, stanza.validate_from assert @stream.verify end def test_validate_invalid_addresses node = node(%Q{hello!}) stanza = Vines::Stanza::Message.new(node, @stream) assert_raises(Vines::StanzaErrors::JidMalformed) { stanza.validate_to } assert_raises(Vines::StanzaErrors::JidMalformed) { stanza.validate_from } assert @stream.verify end def test_non_routable_stanza_is_local stanza = Vines::Stanza.new(node(''), @stream) assert stanza.local? assert @stream.verify end def test_stanza_missing_to_is_local node = node(%Q{hello!}) stanza = Vines::Stanza::Message.new(node, @stream) assert stanza.local? assert @stream.verify end def test_stanza_with_local_jid_is_local node = node(%Q{hello!}) @stream.expect(:config, @config) stanza = Vines::Stanza::Message.new(node, @stream) assert stanza.local? assert @stream.verify end def test_stanza_with_remote_jid_is_not_local node = node(%Q{hello!}) @stream.expect(:config, @config) stanza = Vines::Stanza::Message.new(node, @stream) refute stanza.local? assert @stream.verify end private def node(xml) Nokogiri::XML(xml).root end end