# encoding: UTF-8 require 'vines' require 'ext/nokogiri' require 'minitest/autorun' class SubscribeTest < MiniTest::Unit::TestCase def test_outbound_subscribe_to_local_jid_but_missing_contact alice = Vines::JID.new('alice@wonderland.lit/tea') hatter = Vines::JID.new('hatter@wonderland.lit') contact = Vines::Contact.new(:jid => hatter) user = MiniTest::Mock.new user.expect(:jid, alice) user.expect(:request_subscription, nil, [hatter]) user.expect(:contact, contact, [hatter]) storage = MiniTest::Mock.new storage.expect(:save_user, nil, [user]) storage.expect(:find_user, nil, [hatter]) recipient = MiniTest::Mock.new recipient.expect(:user, user) def recipient.nodes; @nodes; end def recipient.write(node) @nodes ||= [] @nodes << node end stream = MiniTest::Mock.new stream.expect(:domain, 'wonderland.lit') stream.expect(:storage, storage, ['wonderland.lit']) stream.expect(:user, user) stream.expect(:interested_resources, [recipient], [alice]) stream.expect(:update_user_streams, nil, [user]) def stream.nodes; @nodes; end def stream.write(node) @nodes ||= [] @nodes << node end node = node(%q{}) stanza = Vines::Stanza::Presence::Subscribe.new(node, stream) def stanza.route_iq; false; end def stanza.inbound?; false; end def stanza.local?; true; end stanza.process assert stream.verify assert user.verify assert storage.verify assert_equal 1, stream.nodes.size assert_equal 1, recipient.nodes.size expected = node(%q{}) assert_equal expected, stream.nodes[0] query = %q{} expected = node(%Q{#{query}}) recipient.nodes[0].remove_attribute('id') # id is random assert_equal expected, recipient.nodes[0] end private def node(xml) Nokogiri::XML(xml).root end end