/test/stanza/iq/vcard_test.rb

https://github.com/mweibel/vines · Ruby · 141 lines · 111 code · 29 blank · 1 comment · 0 complexity · 33bedd0e423e92d3ea092c67470361ee MD5 · raw file

  1. # encoding: UTF-8
  2. require 'vines'
  3. require 'ext/nokogiri'
  4. require 'minitest/autorun'
  5. class VcardTest < MiniTest::Unit::TestCase
  6. def setup
  7. @stream = MiniTest::Mock.new
  8. @config = Vines::Config.new do
  9. host 'wonderland.lit' do
  10. storage(:fs) { dir '.' }
  11. end
  12. end
  13. end
  14. def test_vcard_get_on_remote_jid_routes
  15. alice = Vines::User.new(:jid => 'alice@wonderland.lit/tea')
  16. node = node(%q{<iq id="42" to="romeo@verona.lit" type="get"><vCard xmlns="vcard-temp"/></iq>})
  17. router = MiniTest::Mock.new
  18. router.expect(:route, nil, [node])
  19. @stream.expect(:config, @config)
  20. @stream.expect(:user, alice)
  21. @stream.expect(:router, router)
  22. stanza = Vines::Stanza::Iq::Vcard.new(node, @stream)
  23. stanza.process
  24. assert @stream.verify
  25. assert router.verify
  26. end
  27. def test_vcard_get_missing_to_address
  28. alice = Vines::User.new(:jid => 'alice@wonderland.lit/tea')
  29. node = node(%q{<iq id="42" type="get"><vCard xmlns="vcard-temp"/></iq>})
  30. card = node(%q{<vCard xmlns="vcard-temp"><FN>Alice in Wonderland</FN></vCard>})
  31. storage = MiniTest::Mock.new
  32. storage.expect(:find_vcard, card, [alice.jid.bare])
  33. @stream.expect(:user, alice)
  34. @stream.expect(:domain, 'wonderland.lit')
  35. @stream.expect(:storage, storage, ['wonderland.lit'])
  36. expected = node(%q{
  37. <iq id="42" to="alice@wonderland.lit/tea" type="result">
  38. <vCard xmlns="vcard-temp">
  39. <FN>Alice in Wonderland</FN>
  40. </vCard>
  41. </iq>}.strip.gsub(/\n|\s{2,}/, ''))
  42. @stream.expect(:write, nil, [expected])
  43. stanza = Vines::Stanza::Iq::Vcard.new(node, @stream)
  44. stanza.process
  45. assert @stream.verify
  46. assert storage.verify
  47. end
  48. def test_vcard_get_another_user_includes_from_address
  49. alice = Vines::User.new(:jid => 'alice@wonderland.lit/tea')
  50. node = node(%q{<iq id="42" to="hatter@wonderland.lit" type="get"><vCard xmlns="vcard-temp"/></iq>})
  51. card = node(%q{<vCard xmlns="vcard-temp"><FN>Mad Hatter</FN></vCard>})
  52. storage = MiniTest::Mock.new
  53. storage.expect(:find_vcard, card, [Vines::JID.new('hatter@wonderland.lit')])
  54. @stream.expect(:config, @config)
  55. @stream.expect(:user, alice)
  56. @stream.expect(:domain, 'wonderland.lit')
  57. @stream.expect(:storage, storage, ['wonderland.lit'])
  58. expected = node(%q{
  59. <iq from="hatter@wonderland.lit" id="42" to="alice@wonderland.lit/tea" type="result">
  60. <vCard xmlns="vcard-temp">
  61. <FN>Mad Hatter</FN>
  62. </vCard>
  63. </iq>}.strip.gsub(/\n|\s{2,}/, ''))
  64. @stream.expect(:write, nil, [expected])
  65. stanza = Vines::Stanza::Iq::Vcard.new(node, @stream)
  66. stanza.process
  67. assert @stream.verify
  68. assert storage.verify
  69. end
  70. def test_missing_vcard_get_returns_item_not_found
  71. alice = Vines::User.new(:jid => 'alice@wonderland.lit/tea')
  72. node = node(%q{<iq id="42" type="get"><vCard xmlns="vcard-temp"/></iq>})
  73. storage = MiniTest::Mock.new
  74. storage.expect(:find_vcard, nil, [alice.jid.bare])
  75. @stream.expect(:user, alice)
  76. @stream.expect(:domain, 'wonderland.lit')
  77. @stream.expect(:storage, storage, ['wonderland.lit'])
  78. stanza = Vines::Stanza::Iq::Vcard.new(node, @stream)
  79. assert_raises(Vines::StanzaErrors::ItemNotFound) { stanza.process }
  80. assert @stream.verify
  81. assert storage.verify
  82. end
  83. def test_vcard_set_on_another_user_returns_forbidden
  84. alice = Vines::User.new(:jid => 'alice@wonderland.lit/tea')
  85. node = node(%q{<iq id="42" to="hatter@wonderland.lit" type="set"><vCard xmlns="vcard-temp"><FN>Alice</FN></vCard></iq>})
  86. @stream.expect(:config, @config)
  87. @stream.expect(:user, alice)
  88. stanza = Vines::Stanza::Iq::Vcard.new(node, @stream)
  89. assert_raises(Vines::StanzaErrors::Forbidden) { stanza.process }
  90. assert @stream.verify
  91. end
  92. def test_vcard_set_returns_result
  93. alice = Vines::User.new(:jid => 'alice@wonderland.lit/tea')
  94. node = node(%q{<iq id="42" type="set"><vCard xmlns="vcard-temp"><FN>Alice</FN></vCard></iq>})
  95. card = node(%q{<vCard xmlns="vcard-temp"><FN>Alice</FN></vCard>})
  96. storage = MiniTest::Mock.new
  97. storage.expect(:save_vcard, nil, [alice.jid, card])
  98. @stream.expect(:user, alice)
  99. @stream.expect(:domain, 'wonderland.lit')
  100. @stream.expect(:storage, storage, ['wonderland.lit'])
  101. expected = node(%q{<iq id="42" to="alice@wonderland.lit/tea" type="result"/>})
  102. @stream.expect(:write, nil, [expected])
  103. stanza = Vines::Stanza::Iq::Vcard.new(node, @stream)
  104. stanza.process
  105. assert @stream.verify
  106. assert storage.verify
  107. end
  108. private
  109. def node(xml)
  110. Nokogiri::XML(xml).root
  111. end
  112. end