# encoding: UTF-8 require 'test_helper' describe Vines::Contact do subject do Vines::Contact.new( jid: 'alice@wonderland.lit', name: "Alice", groups: %w[Friends Buddies], subscription: 'from') end describe 'contact equality checks' do let(:alice) { Vines::Contact.new(jid: 'alice@wonderland.lit') } let(:hatter) { Vines::Contact.new(jid: 'hatter@wonderland.lit') } it 'uses class in equality check' do (subject <=> 42).must_be_nil end it 'is equal to itself' do assert subject == subject assert subject.eql?(subject) assert subject.hash == subject.hash end it 'is equal to another contact with the same jid' do assert subject == alice assert subject.eql?(alice) assert subject.hash == alice.hash end it 'is not equal to a different jid' do refute subject == hatter refute subject.eql?(hatter) refute subject.hash == hatter.hash end end describe 'initialize' do it 'raises when not given a jid' do -> { Vines::Contact.new }.must_raise ArgumentError -> { Vines::Contact.new(jid: '') }.must_raise ArgumentError end it 'accepts a domain-only jid' do contact = Vines::Contact.new(jid: 'tea.wonderland.lit') contact.jid.to_s.must_equal 'tea.wonderland.lit' end end describe '#to_roster_xml' do let(:expected) do node(%q{ Buddies Friends }) end it 'sorts group names' do subject.to_roster_xml.must_equal expected end end describe '#send_roster_push' do let(:recipient) { MiniTest::Mock.new } let(:expected) do node(%q{ Buddies Friends }) end before do recipient.expect :user, Vines::User.new(jid: 'hatter@wonderland.lit') class << recipient attr_accessor :nodes def write(node) @nodes ||= [] @nodes << node end end end it '' do subject.send_roster_push(recipient) recipient.verify recipient.nodes.size.must_equal 1 recipient.nodes.first.remove_attribute('id') # id is random recipient.nodes.first.must_equal expected end end end