Permalink
Browse files

Convert to specs.

  • Loading branch information...
1 parent 81ef90e commit f534edb7eae0ad4cfabe3fab2f7ea777e42191b9 @dgraham dgraham committed Sep 17, 2012
Showing with 67 additions and 54 deletions.
  1. +67 −54 test/stanza/presence/subscribe_test.rb
@@ -1,70 +1,83 @@
# encoding: UTF-8
-require 'vines'
-require 'ext/nokogiri'
-require 'minitest/autorun'
+require 'test_helper'
-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')
+describe Vines::Stanza::Presence::Subscribe do
+ subject { Vines::Stanza::Presence::Subscribe.new(xml, stream) }
+ let(:stream) { MiniTest::Mock.new }
+ let(:alice) { Vines::JID.new('alice@wonderland.lit/tea') }
+ let(:hatter) { Vines::JID.new('hatter@wonderland.lit') }
+ let(:contact) { Vines::Contact.new(jid: hatter) }
- contact = Vines::Contact.new(:jid => hatter)
+ before do
+ class << stream
+ attr_accessor :user, :nodes
+ def write(node)
+ @nodes ||= []
+ @nodes << node
+ end
+ end
+ end
- user = MiniTest::Mock.new
- user.expect(:jid, alice)
- user.expect(:request_subscription, nil, [hatter])
- user.expect(:contact, contact, [hatter])
+ describe 'outbound subscription to a local jid, but missing contact' do
+ let(:xml) { node(%q{<presence id="42" to="hatter@wonderland.lit" type="subscribe"/>}) }
+ let(:user) { MiniTest::Mock.new }
+ let(:storage) { MiniTest::Mock.new }
+ let(:recipient) { MiniTest::Mock.new }
- storage = MiniTest::Mock.new
- storage.expect(:save_user, nil, [user])
- storage.expect(:find_user, nil, [hatter])
+ before do
+ class << user
+ attr_accessor :jid
+ end
+ user.jid = alice
+ user.expect :request_subscription, nil, [hatter]
+ user.expect :contact, contact, [hatter]
- recipient = MiniTest::Mock.new
- recipient.expect(:user, user)
- def recipient.nodes; @nodes; end
- def recipient.write(node)
- @nodes ||= []
- @nodes << node
- end
+ storage.expect :save_user, nil, [user]
+ storage.expect :find_user, nil, [hatter]
- 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
+ recipient.expect :user, user
+ class << recipient
+ attr_accessor :nodes
+ def write(node)
+ @nodes ||= []
+ @nodes << node
+ end
+ end
- node = node(%q{<presence id="42" to="hatter@wonderland.lit" type="subscribe"/>})
- stanza = Vines::Stanza::Presence::Subscribe.new(node, stream)
- def stanza.route_iq; false; end
- def stanza.inbound?; false; end
- def stanza.local?; true; end
+ stream.user = user
+ stream.expect :domain, 'wonderland.lit'
+ stream.expect :storage, storage, ['wonderland.lit']
+ stream.expect :storage, storage, ['wonderland.lit']
+ stream.expect :interested_resources, [recipient], [alice]
+ stream.expect :update_user_streams, nil, [user]
- stanza.process
- assert stream.verify
- assert user.verify
- assert storage.verify
- assert_equal 1, stream.nodes.size
- assert_equal 1, recipient.nodes.size
+ class << subject
+ def route_iq; false; end
+ def inbound?; false; end
+ def local?; true; end
+ end
+ end
- expected = node(%q{<presence from="hatter@wonderland.lit" id="42" to="alice@wonderland.lit" type="unsubscribed"/>})
- assert_equal expected, stream.nodes[0]
+ it 'rejects the subscription with an unsubscribed response' do
+ subject.process
+ stream.verify
+ user.verify
+ storage.verify
+ stream.nodes.size.must_equal 1
- query = %q{<query xmlns="jabber:iq:roster"><item jid="hatter@wonderland.lit" subscription="none"/></query>}
- expected = node(%Q{<iq to="alice@wonderland.lit/tea" type="set">#{query}</iq>})
- recipient.nodes[0].remove_attribute('id') # id is random
- assert_equal expected, recipient.nodes[0]
- end
+ expected = node(%q{<presence from="hatter@wonderland.lit" id="42" to="alice@wonderland.lit" type="unsubscribed"/>})
+ stream.nodes.first.must_equal expected
+ end
- private
+ it 'sends a roster set to the interested resources with subscription none' do
+ subject.process
+ recipient.nodes.size.must_equal 1
- def node(xml)
- Nokogiri::XML(xml).root
+ query = %q{<query xmlns="jabber:iq:roster"><item jid="hatter@wonderland.lit" subscription="none"/></query>}
+ expected = node(%Q{<iq to="alice@wonderland.lit/tea" type="set">#{query}</iq>})
+ recipient.nodes.first.remove_attribute('id') # id is random
+ recipient.nodes.first.must_equal expected
+ end
end
end

0 comments on commit f534edb

Please sign in to comment.