# encoding: UTF-8
require 'tmpdir'
require 'vines'
require 'ext/nokogiri'
require 'minitest/autorun'
class CreatePubSubTest < MiniTest::Unit::TestCase
def setup
@user = Vines::User.new(jid: 'alice@wonderland.lit/tea')
@config = Vines::Config.new do
host 'wonderland.lit' do
storage(:fs) { dir Dir.tmpdir }
pubsub 'games'
end
end
@stream = MiniTest::Mock.new
@stream.expect(:config, @config)
@stream.expect(:user, @user)
end
def test_missing_to_address_raises
node = node(%q{
}.strip.gsub(/\n|\s{2,}/, ''))
@stream.expect(:domain, 'wonderland.lit')
stanza = Vines::Stanza::PubSub::Create.new(node, @stream)
assert_raises(Vines::StanzaErrors::FeatureNotImplemented) { stanza.process }
assert @stream.verify
end
def test_server_domain_to_address_raises
node = node(%q{
}.strip.gsub(/\n|\s{2,}/, ''))
stanza = Vines::Stanza::PubSub::Create.new(node, @stream)
assert_raises(Vines::StanzaErrors::FeatureNotImplemented) { stanza.process }
assert @stream.verify
end
def test_non_pubsub_to_address_routes
node = node(%q{
}.strip.gsub(/\n|\s{2,}/, ''))
router = MiniTest::Mock.new
router.expect(:route, nil, [node])
@stream.expect(:router, router)
stanza = Vines::Stanza::PubSub::Create.new(node, @stream)
stanza.process
assert @stream.verify
assert router.verify
end
def test_multiple_create_elements_raises
node = node(%q{
}.strip.gsub(/\n|\s{2,}/, ''))
stanza = Vines::Stanza::PubSub::Create.new(node, @stream)
assert_raises(Vines::StanzaErrors::BadRequest) { stanza.process }
assert @stream.verify
end
def test_create_duplicate_node_raises
node = node(%q{
}.strip.gsub(/\n|\s{2,}/, ''))
stanza = Vines::Stanza::PubSub::Create.new(node, @stream)
def stanza.pubsub
pubsub = MiniTest::Mock.new
pubsub.expect(:node?, true, ['game_13'])
pubsub
end
assert_raises(Vines::StanzaErrors::Conflict) { stanza.process }
assert @stream.verify
end
def test_good_stanza_processes
node = node(%q{
}.strip.gsub(/\n|\s{2,}/, ''))
def @stream.nodes; @nodes; end
def @stream.write(node)
@nodes ||= []
@nodes << node
end
stanza = Vines::Stanza::PubSub::Create.new(node, @stream)
stanza.process
assert @stream.verify
assert_equal 1, @stream.nodes.size
expected = %q{}
expected << %q{}
expected << %q{}
expected = node(expected)
assert_equal expected, @stream.nodes[0]
end
private
def node(xml)
Nokogiri::XML(xml).root
end
end