require 'spec_helper'
describe Blather::Stanza::Presence do
it 'registers itself' do
Blather::XMPPNode.class_from_registration(:presence, nil).should == Blather::Stanza::Presence
end
it 'must be importable' do
Blather::XMPPNode.parse('').should be_instance_of Blather::Stanza::Presence
end
it 'ensures type is one of Blather::Stanza::Presence::VALID_TYPES' do
presence = Blather::Stanza::Presence.new
lambda { presence.type = :invalid_type_name }.should raise_error(Blather::ArgumentError)
Blather::Stanza::Presence::VALID_TYPES.each do |valid_type|
presence.type = valid_type
presence.type.should == valid_type
end
end
Blather::Stanza::Presence::VALID_TYPES.each do |valid_type|
it "provides a helper (#{valid_type}?) for type #{valid_type}" do
Blather::Stanza::Presence.new.should respond_to :"#{valid_type}?"
end
it "returns true on call to (#{valid_type}?) if type == #{valid_type}" do
method = "#{valid_type}?".to_sym
pres = Blather::Stanza::Presence.new
pres.type = valid_type
pres.should respond_to method
pres.__send__(method).should == true
end
end
it 'creates a C object when importing a node with a c child' do
string = <<-XML
XML
s = Blather::Stanza::Presence.parse string
s.should be_kind_of Blather::Stanza::Presence::C::InstanceMethods
s.node.should == 'http://www.chatopus.com'
s.handler_hierarchy.should include(:c)
end
it 'creates a Status object when importing a node with type == nil' do
s = Blather::Stanza::Presence.parse('')
s.should be_kind_of Blather::Stanza::Presence::Status::InstanceMethods
s.state.should == :available
s.handler_hierarchy.should include(Blather::Stanza::Presence::Status.registered_name.to_sym)
end
it 'creates a Status object when importing a node with type == "unavailable"' do
s = Blather::Stanza::Presence.parse('')
s.should be_kind_of Blather::Stanza::Presence::Status::InstanceMethods
s.state.should == :unavailable
s.handler_hierarchy.should include(Blather::Stanza::Presence::Status.registered_name.to_sym)
end
it 'creates a Subscription object when importing a node with type == "subscribe"' do
s = Blather::Stanza::Presence.parse('')
s.should be_kind_of Blather::Stanza::Presence::Subscription::InstanceMethods
s.type.should == :subscribe
s.handler_hierarchy.should include(Blather::Stanza::Presence::Subscription.registered_name.to_sym)
end
it 'creates a MUC object when importing a node with a form in the MUC namespace' do
string = <<-XML
XML
s = Blather::Stanza::Presence.parse string
s.should be_kind_of Blather::Stanza::Presence::MUC::InstanceMethods
end
it 'creates a MUCUser object when importing a node with a form in the MUC#user namespace' do
string = <<-XML
XML
s = Blather::Stanza::Presence.parse string
s.should be_kind_of Blather::Stanza::Presence::MUCUser::InstanceMethods
end
it 'creates a Presence object when importing a node with type equal to something unknown' do
string = ""
s = Blather::Stanza::Presence.parse string
s.should be_kind_of Blather::Stanza::Presence
s.type.should == :foo
s.handler_hierarchy.should include(Blather::Stanza::Presence.registered_name.to_sym)
end
it 'behaves like a C, a Status, and a MUCUser when all types of children are present' do
string = <<-XML
chat
foobar
XML
s = Blather::Stanza::Presence.parse string
s.state.should == :chat
s.node.should == 'http://www.chatopus.com'
s.role.should == :participant
s.handler_hierarchy.should include(Blather::Stanza::Presence::C.registered_name.to_sym)
s.handler_hierarchy.should include(Blather::Stanza::Presence::Status.registered_name.to_sym)
end
end