go-xmpp/stanza/msg_pubsub_event_test.go

163 lines
4.8 KiB
Go
Raw Permalink Normal View History

package stanza_test
import (
"encoding/xml"
"gosrc.io/xmpp/stanza"
"strings"
"testing"
)
func TestDecodeMsgEvent(t *testing.T) {
str := `<message from='pubsub.shakespeare.lit' to='francisco@denmark.lit' id='foo'>
<event xmlns='http://jabber.org/protocol/pubsub#event'>
<items node='princely_musings'>
<item id='ae890ac52d0df67ed7cfdf51b644e901'>
<entry xmlns='http://www.w3.org/2005/Atom'>
<title>Soliloquy</title>
<summary>
To be, or not to be: that is the question:
Whether 'tis nobler in the mind to suffer
The slings and arrows of outrageous fortune,
Or to take arms against a sea of troubles,
And by opposing end them?
</summary>
<link rel='alternate' type='text/html'
href='http://denmark.lit/2003/12/13/atom03'/>
<id>tag:denmark.lit,2003:entry-32397</id>
<published>2003-12-13T18:30:02Z</published>
<updated>2003-12-13T18:30:02Z</updated>
</entry>
</item>
</items>
</event>
</message>
`
parsedMessage := stanza.Message{}
if err := xml.Unmarshal([]byte(str), &parsedMessage); err != nil {
t.Errorf("message receipt unmarshall error: %v", err)
return
}
if parsedMessage.Body != "" {
t.Errorf("Unexpected body: '%s'", parsedMessage.Body)
}
if len(parsedMessage.Extensions) < 1 {
t.Errorf("no extension found on parsed message")
return
}
switch ext := parsedMessage.Extensions[0].(type) {
case *stanza.PubSubEvent:
if ext.XMLName.Local != "event" {
t.Fatalf("unexpected extension: %s:%s", ext.XMLName.Space, ext.XMLName.Local)
}
tmp, ok := parsedMessage.Extensions[0].(*stanza.PubSubEvent)
if !ok {
t.Fatalf("unexpected extension element: %s:%s", ext.XMLName.Space, ext.XMLName.Local)
}
ie, ok := tmp.EventElement.(*stanza.ItemsEvent)
if !ok {
t.Fatalf("unexpected extension element: %s:%s", ext.XMLName.Space, ext.XMLName.Local)
}
if ie.Items[0].Any.Nodes[0].Content != "Soliloquy" {
t.Fatalf("could not read title ! Read this : %s", ie.Items[0].Any.Nodes[0].Content)
}
if len(ie.Items[0].Any.Nodes) != 6 {
t.Fatalf("some nodes were not correctly parsed")
}
default:
t.Fatalf("could not find pubsub event extension")
}
}
func TestEncodeEvent(t *testing.T) {
expected := "<message><event xmlns=\"http://jabber.org/protocol/pubsub#event\">" +
"<items node=\"princely_musings\"><item id=\"ae890ac52d0df67ed7cfdf51b644e901\">" +
"<entry xmlns=\"http://www.w3.org/2005/Atom\"><title>My pub item title</title>" +
"<summary>My pub item content summary</summary><link rel=\"alternate\" " +
"type=\"text/html\" href=\"http://denmark.lit/2003/12/13/atom03\">" +
"</link><id>My pub item content ID</id><published>2003-12-13T18:30:02Z</published>" +
"<updated>2003-12-13T18:30:02Z</updated></entry></item></items></event></message>"
message := stanza.Message{
Extensions: []stanza.MsgExtension{
stanza.PubSubEvent{
EventElement: stanza.ItemsEvent{
Items: []stanza.ItemEvent{
{
Id: "ae890ac52d0df67ed7cfdf51b644e901",
Any: &stanza.Node{
XMLName: xml.Name{
Space: "http://www.w3.org/2005/Atom",
Local: "entry",
},
Attrs: nil,
Content: "",
Nodes: []stanza.Node{
{
XMLName: xml.Name{Space: "", Local: "title"},
Attrs: nil,
Content: "My pub item title",
Nodes: nil,
},
{
XMLName: xml.Name{Space: "", Local: "summary"},
Attrs: nil,
Content: "My pub item content summary",
Nodes: nil,
},
{
XMLName: xml.Name{Space: "", Local: "link"},
Attrs: []xml.Attr{
{
Name: xml.Name{Space: "", Local: "rel"},
Value: "alternate",
},
{
Name: xml.Name{Space: "", Local: "type"},
Value: "text/html",
},
{
Name: xml.Name{Space: "", Local: "href"},
Value: "http://denmark.lit/2003/12/13/atom03",
},
},
},
{
XMLName: xml.Name{Space: "", Local: "id"},
Attrs: nil,
Content: "My pub item content ID",
Nodes: nil,
},
{
XMLName: xml.Name{Space: "", Local: "published"},
Attrs: nil,
Content: "2003-12-13T18:30:02Z",
Nodes: nil,
},
{
XMLName: xml.Name{Space: "", Local: "updated"},
Attrs: nil,
Content: "2003-12-13T18:30:02Z",
Nodes: nil,
},
},
},
},
},
Node: "princely_musings",
Retract: nil,
},
},
},
}
data, _ := xml.Marshal(message)
if strings.TrimSpace(string(data)) != strings.TrimSpace(expected) {
t.Errorf("event was not encoded properly : \nexpected:%s \ngot: %s", expected, string(data))
}
}