require 'spec_helper' require 'fixtures/pubsub' describe Blather::Stanza::PubSub::Event do it 'registers itself' do expect(Blather::XMPPNode.class_from_registration(:event, 'http://jabber.org/protocol/pubsub#event')).to eq(Blather::Stanza::PubSub::Event) end it 'is importable' do expect(Blather::XMPPNode.parse(event_notification_xml)).to be_instance_of Blather::Stanza::PubSub::Event end it 'ensures a query node is present on create' do evt = Blather::Stanza::PubSub::Event.new expect(evt.find('ns:event', :ns => Blather::Stanza::PubSub::Event.registered_ns)).not_to be_empty end it 'ensures an event node exists when calling #event_node' do evt = Blather::Stanza::PubSub::Event.new evt.remove_children :event expect(evt.find('*[local-name()="event"]')).to be_empty expect(evt.event_node).not_to be_nil expect(evt.find('ns:event', :ns => Blather::Stanza::PubSub::Event.registered_ns)).not_to be_empty end it 'ensures an items node exists when calling #items_node' do evt = Blather::Stanza::PubSub::Event.new evt.remove_children :items expect(evt.find('*[local-name()="items"]')).to be_empty expect(evt.items_node).not_to be_nil expect(evt.find('ns:event/ns:items', :ns => Blather::Stanza::PubSub::Event.registered_ns)).not_to be_empty end it 'knows the associated node name' do evt = Blather::XMPPNode.parse(event_with_payload_xml) expect(evt.node).to eq('princely_musings') end it 'ensures newly inherited items are PubSubItem objects' do evt = Blather::XMPPNode.parse(event_with_payload_xml) expect(evt.items?).to eq(true) expect(evt.retractions?).to eq(false) expect(evt.items.map { |i| i.class }.uniq).to eq([Blather::Stanza::PubSub::PubSubItem]) end it 'will iterate over each item' do evt = Blather::XMPPNode.parse(event_with_payload_xml) evt.items.each { |i| expect(i.class).to eq(Blather::Stanza::PubSub::PubSubItem) } end it 'handles receiving subscription ids' do evt = Blather::XMPPNode.parse(event_subids_xml) expect(evt.subscription_ids).to eq(['123-abc', '004-yyy']) end it 'can have a list of retractions' do evt = Blather::XMPPNode.parse(<<-NODE) NODE expect(evt.retractions?).to eq(true) expect(evt.items?).to eq(false) expect(evt.retractions).to eq(%w[ae890ac52d0df67ed7cfdf51b644e901]) end it 'can be a purge' do evt = Blather::XMPPNode.parse(<<-NODE) NODE expect(evt.purge?).not_to be_nil expect(evt.node).to eq('princely_musings') end it 'can be a subscription notification' do evt = Blather::XMPPNode.parse(<<-NODE) NODE expect(evt.subscription?).not_to be_nil expect(evt.subscription[:jid]).to eq('francisco@denmark.lit') expect(evt.subscription[:subscription]).to eq('subscribed') expect(evt.subscription[:node]).to eq('/example.com/test') end end