require 'spec_helper' def roster_xml <<-XML Friends Friends Friends XML end describe Blather::Stanza::Iq::Roster do it 'registers itself' do expect(Blather::XMPPNode.class_from_registration(:query, 'jabber:iq:roster')).to eq(Blather::Stanza::Iq::Roster) end it 'ensures newly inherited items are RosterItem objects' do n = parse_stanza roster_xml r = Blather::Stanza::Iq::Roster.new.inherit n.root expect(r.items.map { |i| i.class }.uniq).to eq([Blather::Stanza::Iq::Roster::RosterItem]) end it 'can be created with #import' do expect(Blather::XMPPNode.parse(roster_xml)).to be_instance_of Blather::Stanza::Iq::Roster end it 'retrieves version' do n = parse_stanza roster_xml r = Blather::Stanza::Iq::Roster.new.inherit n.root expect(r.version).to eq '3bb607aa4fa0bc9e' end end describe Blather::Stanza::Iq::Roster::RosterItem do it 'can be initialized with just a Blather::JID' do i = Blather::Stanza::Iq::Roster::RosterItem.new 'n@d/r' expect(i.jid).to eq(Blather::JID.new('n@d/r').stripped) end it 'can be initialized with a name' do i = Blather::Stanza::Iq::Roster::RosterItem.new nil, 'foobar' expect(i.name).to eq('foobar') end it 'can be initialized with a subscription' do i = Blather::Stanza::Iq::Roster::RosterItem.new nil, nil, :both expect(i.subscription).to eq(:both) end it 'can be initialized with ask (subscription sub-type)' do i = Blather::Stanza::Iq::Roster::RosterItem.new nil, nil, nil, :subscribe expect(i.ask).to eq(:subscribe) end it 'can be initailized with a hash' do control = { :jid => 'j@d/r', :name => 'name', :subscription => :both, :ask => :subscribe } i = Blather::Stanza::Iq::Roster::RosterItem.new control expect(i.jid).to eq(Blather::JID.new(control[:jid]).stripped) expect(i.name).to eq(control[:name]) expect(i.subscription).to eq(control[:subscription]) expect(i.ask).to eq(control[:ask]) end it 'inherits a node when initialized with one' do n = Blather::XMPPNode.new 'item' n[:jid] = 'n@d/r' n[:subscription] = 'both' i = Blather::Stanza::Iq::Roster::RosterItem.new n expect(i.jid).to eq(Blather::JID.new('n@d/r')) expect(i.subscription).to eq(:both) end it 'has a #groups helper that gives an array of groups' do n = parse_stanza "foobarbaz" i = Blather::Stanza::Iq::Roster::RosterItem.new n.root expect(i).to respond_to :groups expect(i.groups.sort).to eq(%w[bar baz foo]) end it 'has a helper to set the groups' do n = parse_stanza "foobarbaz" i = Blather::Stanza::Iq::Roster::RosterItem.new n.root expect(i).to respond_to :groups= expect(i.groups.sort).to eq(%w[bar baz foo]) i.groups = %w[a b c] expect(i.groups.sort).to eq(%w[a b c]) end it 'can be easily converted into a proper stanza' do xml = "foobarbaz" n = parse_stanza xml i = Blather::Stanza::Iq::Roster::RosterItem.new n.root expect(i).to respond_to :to_stanza s = i.to_stanza expect(s).to be_kind_of Blather::Stanza::Iq::Roster expect(s.items.first.jid).to eq(Blather::JID.new('romeo@example.net')) expect(s.items.first.groups.sort).to eq(%w[bar baz foo]) end it 'has an "attr_accessor" for jid' do i = Blather::Stanza::Iq::Roster::RosterItem.new expect(i).to respond_to :jid expect(i.jid).to be_nil expect(i).to respond_to :jid= i.jid = 'n@d/r' expect(i.jid).to eq(Blather::JID.new('n@d/r').stripped) end it 'has a name attribute' do i = Blather::Stanza::Iq::Roster::RosterItem.new i.name = 'name' expect(i.name).to eq('name') end it 'has a subscription attribute' do i = Blather::Stanza::Iq::Roster::RosterItem.new i.subscription = :both expect(i.subscription).to eq(:both) end it 'has an ask attribute' do i = Blather::Stanza::Iq::Roster::RosterItem.new i.ask = :subscribe expect(i.ask).to eq(:subscribe) end end